浏览代码

添加分类上移和下移接口,以及创建分类时设置排序为同级最大值+1

chenjun 4 月之前
父节点
当前提交
c627fc7efb

+ 11 - 0
ais_knowledge/knowledge/src/main/java/com/zjugis/ai/knowledge/controller/KnowledgeTypeController.java

@@ -49,4 +49,15 @@ public class KnowledgeTypeController {
         return success(true);
     }
 
+    @GetMapping("/move-up")
+    public CommonResult<Boolean> moveUp(@RequestParam("id") Long id) {
+        knowledgeTypeService.moveUp(id);
+        return success(true);
+    }
+
+    @GetMapping("/move-down")
+    public CommonResult<Boolean> moveDown(@RequestParam("id") Long id) {
+        knowledgeTypeService.moveDown(id);
+        return success(true);
+    }
 }

+ 7 - 0
ais_knowledge/knowledge/src/main/java/com/zjugis/ai/knowledge/dal/mapper/KnowledgeTypeMapper.java

@@ -25,4 +25,11 @@ public interface KnowledgeTypeMapper extends BaseMapperX<KnowledgeTypeDO> {
     default Long selectCountByParentId(Long parentId) {
         return selectCount(KnowledgeTypeDO::getParentId, parentId);
     }
+
+    default List<KnowledgeTypeDO> findByParentIdOrderBySortAsc(Long parentId){
+        return selectList(new LambdaQueryWrapperX<KnowledgeTypeDO>()
+                .eqIfPresent(KnowledgeTypeDO::getParentId, parentId)
+                .orderByAsc(KnowledgeTypeDO::getSort)
+                .orderByAsc(KnowledgeTypeDO::getId));
+    }
 }

+ 4 - 0
ais_knowledge/knowledge/src/main/java/com/zjugis/ai/knowledge/service/KnowledgeTypeService.java

@@ -20,4 +20,8 @@ public interface KnowledgeTypeService {
     void updateKnowledgeType(KnowledgeTypeUpdateReqVO reqVO);
 
     void deleteKnowledgeType(Long id);
+
+    void moveUp(Long id);
+
+    void moveDown(Long id);
 }

+ 64 - 0
ais_knowledge/knowledge/src/main/java/com/zjugis/ai/knowledge/service/KnowledgeTypeServiceImpl.java

@@ -1,5 +1,6 @@
 package com.zjugis.ai.knowledge.service;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.zjugis.ai.knowledge.common.exception.ErrorCode;
 import com.zjugis.ai.knowledge.controller.vo.KnowledgeTypeCreateReqVO;
 import com.zjugis.ai.knowledge.controller.vo.KnowledgeTypeListReqVO;
@@ -31,7 +32,22 @@ public class KnowledgeTypeServiceImpl implements KnowledgeTypeService {
     @Override
     public Long createKnowledgeType(KnowledgeTypeCreateReqVO reqVO) {
         KnowledgeTypeDO knowledgeTypeDO = BeanUtils.toBean(reqVO, KnowledgeTypeDO.class);
+        Long parentId = reqVO.getParentId();
+        if (parentId == null) {
+            parentId = 0L;
+        }
+        List<KnowledgeTypeDO> siblings = getSiblings(parentId);
+        Integer sort = 0;
+        if (CollectionUtil.isNotEmpty(siblings)) {
+            sort = siblings.get(siblings.size() - 1).getSort();
+            if (sort == null) {
+                sort = 0;
+            }
+            sort++;
+        }
+        knowledgeTypeDO.setSort(sort);
         knowledgeTypeMapper.insert(knowledgeTypeDO);
+
         return knowledgeTypeDO.getId();
     }
 
@@ -59,4 +75,52 @@ public class KnowledgeTypeServiceImpl implements KnowledgeTypeService {
         // 标记删除
         knowledgeTypeMapper.deleteById(id);
     }
+
+    @Override
+    public void moveUp(Long id) {
+        KnowledgeTypeDO current = knowledgeTypeMapper.selectById(id);
+        List<KnowledgeTypeDO> siblings = getSiblings(current.getParentId());
+        int currentIndex = findCurrentIndex(siblings, id);
+        if (currentIndex > 0) {
+            KnowledgeTypeDO previous = siblings.get(currentIndex - 1);
+            swapSort(current, previous);
+            saveBoth(current, previous);
+        }
+    }
+
+    @Override
+    public void moveDown(Long id) {
+        KnowledgeTypeDO current = knowledgeTypeMapper.selectById(id);
+        List<KnowledgeTypeDO> siblings = getSiblings(current.getParentId());
+        int currentIndex = findCurrentIndex(siblings, id);
+        if (currentIndex < siblings.size() - 1) {
+            KnowledgeTypeDO next = siblings.get(currentIndex + 1);
+            swapSort(current, next);
+            saveBoth(current, next);
+        }
+    }
+
+    private List<KnowledgeTypeDO> getSiblings(Long parentId) {
+        return knowledgeTypeMapper.findByParentIdOrderBySortAsc(parentId);
+    }
+
+    private int findCurrentIndex(List<KnowledgeTypeDO> siblings, Long currentId) {
+        for (int i = 0; i < siblings.size(); i++) {
+            if (siblings.get(i).getId().equals(currentId)) {
+                return i;
+            }
+        }
+        throw exception(new ErrorCode(10013, "当前分类在同级当中不存在"));
+    }
+
+    private void swapSort(KnowledgeTypeDO a, KnowledgeTypeDO b) {
+        Integer temp = a.getSort();
+        a.setSort(b.getSort());
+        b.setSort(temp);
+    }
+
+    private void saveBoth(KnowledgeTypeDO a, KnowledgeTypeDO b) {
+        knowledgeTypeMapper.updateById(a);
+        knowledgeTypeMapper.updateById(b);
+    }
 }