17、內容服務系統——內容分類管理
阿新 • • 發佈:2018-12-14
內容服務系統——內容分類管理
展示內容分類
最終目標:
-
請求的 url :
/content/category/list
-
請求的引數:id,當前節點的 id 。第一次請求是沒有引數,需要給預設值“0”
-
響應資料:List(@ResponseBody)
Json資料。
[{id:1,text:節點名稱,state:open(closed)},
{id:2,text:節點名稱2,state:open(closed)},
{id:3,text:節點名稱3,state:open(closed)}] -
業務邏輯:
1、取查詢引數id,parentId
2、根據parentId查詢tb_content_category,查詢子節點列表。
3、得到List
4、把列表轉換成List
Dao層
使用逆向工程
Service
引數:long parentId
返回值:List
package cn.ynx.e3mall.content.service;
import cn.ynx.e3mall.common.pojo.EasyUITreeNode;
import java.util.List;
public interface ContentCategoryService {
List<EasyUITreeNode> getContentCategoryList(long parentId);
}
package cn.ynx.e3mall.content.service.impl;
import cn.ynx.e3mall.common.pojo.EasyUITreeNode;
import cn.ynx.e3mall.content.service.ContentCategoryService;
import cn.ynx.e3mall.mapper.TbContentCategoryMapper;
import cn.ynx.e3mall.pojo.TbContentCategory;
import cn.ynx.e3mall.pojo.TbContentCategoryExample;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service
public class ContentCategoryServiceImpl implements ContentCategoryService {
@Resource
private TbContentCategoryMapper tbContentCategoryMapper;
@Override
public List<EasyUITreeNode> getContentCategoryList(long parentId) {
// 1、取查詢引數id,parentId
// 2、根據parentId查詢tb_content_category,查詢子節點列表。
TbContentCategoryExample example = new TbContentCategoryExample();
//設定查詢條件
TbContentCategoryExample.Criteria criteria = example.createCriteria();
criteria.andParentIdEqualTo(parentId);
//執行查詢
// 3、得到List<TbContentCategory>
List<TbContentCategory> list = tbContentCategoryMapper.selectByExample(example);
// 4、把列表轉換成List<EasyUITreeNode>
List<EasyUITreeNode> resultList = new ArrayList<>();
for (TbContentCategory tbContentCategory : list) {
EasyUITreeNode node = new EasyUITreeNode();
node.setId(tbContentCategory.getId());
node.setText(tbContentCategory.getName());
node.setState(tbContentCategory.getIsParent()?"closed":"open");
//新增到列表
resultList.add(node);
}
return resultList;
}
}
釋出服務:applicationContrxt-service.xml
<dubbo:service interface="cn.ynx.e3mall.content.service.ContentCategoryService" ref="contentCategoryServiceImpl" timeout="300000" />
表現層
e3-manager-web
依賴 e3-content-interface 模組
<!-- 依賴 e3-content-interface 模組 -->
<dependency>
<groupId>cn.ynx.e3mall</groupId>
<artifactId>e3-content-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
springmvc.xml 中新增服務的引用:
<dubbo:reference interface="cn.ynx.e3mall.content.service.ContentCategoryService" id="contentCategoryService" />
Controller
package cn.ynx.e3mall.controller;
import cn.ynx.e3mall.common.pojo.EasyUITreeNode;
import cn.ynx.e3mall.content.service.ContentCategoryService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.util.List;
@Controller
@RequestMapping("/content/category")
public class ContentCategoryController {
@Resource
private ContentCategoryService contentCategoryService;
@RequestMapping("/list")
@ResponseBody
public List<EasyUITreeNode> getContentCatList(
@RequestParam(value="id", defaultValue="0") Long parentId) {
List<EasyUITreeNode> list = contentCategoryService.getContentCategoryList(parentId);
return list;
}
}
啟動manager和content服務,必須兩個都啟動,不然web啟動會報錯。
測試
新增節點
功能分析:
Easy UI 的 tree 提供了新增、重新命名、刪除的功能,會非同步傳送 ajax 請求。
-
請求的 url:
/content/category/create
-
請求的引數:
Long parentId
String name -
響應的結果:
json資料,E3Result,其中包含一個物件,物件有id屬性,新生產的內容分類id -
業務邏輯:
- 1、接收兩個引數:parentId、name
- 2、向tb_content_category表中插入資料。
a) 建立一個TbContentCategory物件
b) 補全TbContentCategory物件的屬性
c) 向tb_content_category表中插入資料 - 3、判斷父節點的 isparent 是否為true,不是true需要改為true。
- 4、需要主鍵返回。
- 5、返回 E3Result ,其中包裝 TbContentCategory 物件
Dao層
可以使用逆向工程。
需要新增主鍵返回: 修改逆向工程的程式碼
Service層
引數:parentId、name
返回值:返回 E3Result ,其中包裝 TbContentCategory 物件
package cn.ynx.e3mall.content.service;
import cn.ynx.e3mall.common.pojo.EasyUITreeNode;
import cn.ynx.e3mall.common.utils.E3Result;
import java.util.List;
public interface ContentCategoryService {
List<EasyUITreeNode> getContentCategoryList(long parentId);
E3Result addContentCategory(long parentId, String name);
}
@Override
public E3Result addContentCategory(long parentId, String name) {
// 1、接收兩個引數:parentId、name
// 2、向tb_content_category表中插入資料。
// a)建立一個TbContentCategory物件
TbContentCategory tbContentCategory = new TbContentCategory();
// b)補全TbContentCategory物件的屬性
tbContentCategory.setIsParent(false);
tbContentCategory.setName(name);
tbContentCategory.setParentId(parentId);
//排列序號,表示同級類目的展現次序,如數值相等則按名稱次序排列。取值範圍:大於零的整數
tbContentCategory.setSortOrder(1);
//狀態。可選值:1(正常),2(刪除)
tbContentCategory.setStatus(1);
tbContentCategory.setCreated(new Date());
tbContentCategory.setUpdated(new Date());
// c)向tb_content_category表中插入資料
tbContentCategoryMapper.insert(tbContentCategory);
// 3、判斷父節點的isparent是否為true,不是true需要改為true。
TbContentCategory parentNode = tbContentCategoryMapper.selectByPrimaryKey(parentId);
if (!parentNode.getIsParent()) {
parentNode.setIsParent(true);
//更新父節點
tbContentCategoryMapper.updateByPrimaryKey(parentNode);
}
// 4、需要主鍵返回。
// 5、返回E3Result,其中包裝TbContentCategory物件
return E3Result.ok(tbContentCategory);
}
釋出服務:
表現層
- 請求的url:/content/category/create
- 請求的引數:
Long parentId
String name - 響應的結果:
json資料,E3Result
@RequestMapping("/create")
@ResponseBody
public E3Result createContentCategory(Long parentId, String name){
E3Result result = contentCategoryService.addContentCategory(parentId, name);
return result;
}
測試
內容分類節點重新命名
- 請求的url:/content/category/update
- 引數:
id,當前節點id。
name,重新命名後的名稱。 - 業務邏輯:根據id更新記錄。
- 返回值:返回E3Result.ok()
內容分類節點刪除
- 請求的url:/content/category/delete/
- 引數:id,當前節點的id。
- 響應的資料:json。E3Result。
- 業務邏輯:
1、根據id刪除記錄。
2、判斷父節點下是否還有子節點,如果沒有需要把父節點的isparent改為false
3、如果刪除的是父節點,子節點要級聯刪除。
兩種解決方案:
1)如果判斷是父節點不允許刪除。
2)遞迴刪除。