|
@@ -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);
|
|
|
+ }
|
|
|
}
|