From 7e254edced5f0361882471ebffbad572c181235d Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期一, 12 五月 2025 18:09:32 +0800
Subject: [PATCH] art: 系统管理-分类字典功能改造,导入功能修改

---
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCategoryServiceImpl.java |  502 +++++++++++++++++++++++++++++++++----------------------
 1 files changed, 304 insertions(+), 198 deletions(-)

diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCategoryServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCategoryServiceImpl.java
index 437be4e..2a9d5d6 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCategoryServiceImpl.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCategoryServiceImpl.java
@@ -1,15 +1,14 @@
 package org.jeecg.modules.system.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.jeecg.common.constant.CommonConstant;
-import org.jeecg.common.constant.FillRuleConstant;
+import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.constant.SymbolConstant;
 import org.jeecg.common.exception.JeecgBootException;
-import org.jeecg.common.util.FillRuleUtil;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.system.entity.SysCategory;
 import org.jeecg.modules.system.mapper.SysCategoryMapper;
@@ -18,221 +17,328 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import javax.annotation.Resource;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
  * @Description: 鍒嗙被瀛楀吀
  * @Author: jeecg-boot
- * @Date:   2019-05-29
+ * @Date: 2019-05-29
  * @Version: V1.0
  */
 @Service
 public class SysCategoryServiceImpl extends ServiceImpl<SysCategoryMapper, SysCategory> implements ISysCategoryService {
 
-	@Override
-	public void addSysCategory(SysCategory sysCategory) {
-		String categoryCode = "";
-		String categoryPid = ISysCategoryService.ROOT_PID_VALUE;
-		String parentCode = null;
-		if(oConvertUtils.isNotEmpty(sysCategory.getPid())){
-			categoryPid = sysCategory.getPid();
+    @Resource
+    private SysCategoryMapper sysCategoryMapper;
 
-			//PID 涓嶆槸鏍硅妭鐐� 璇存槑闇�瑕佽缃埗鑺傜偣 hasChild 涓�1
-			if(!ISysCategoryService.ROOT_PID_VALUE.equals(categoryPid)){
-				SysCategory parent = baseMapper.selectById(categoryPid);
-				parentCode = parent.getCode();
-				if(parent!=null && !ISysCategoryService.HAS_CHILD.equals(parent.getHasChild())){
-					parent.setHasChild(ISysCategoryService.HAS_CHILD);
-					baseMapper.updateById(parent);
-				}
-			}
-		}
-		//update-begin--Author:baihailong  Date:20191209 for锛氬垎绫诲瓧鍏哥紪鐮佽鍒欑敓鎴愬櫒鍋氭垚鍏敤閰嶇疆
-		JSONObject formData = new JSONObject();
-		formData.put("pid",categoryPid);
-		categoryCode = (String) FillRuleUtil.executeRule(FillRuleConstant.CATEGORY,formData);
-		//update-end--Author:baihailong  Date:20191209 for锛氬垎绫诲瓧鍏哥紪鐮佽鍒欑敓鎴愬櫒鍋氭垚鍏敤閰嶇疆
-		sysCategory.setCode(categoryCode);
-		sysCategory.setPid(categoryPid);
-		baseMapper.insert(sysCategory);
-	}
-	
-	@Override
-	public void updateSysCategory(SysCategory sysCategory) {
-		if(oConvertUtils.isEmpty(sysCategory.getPid())){
-			sysCategory.setPid(ISysCategoryService.ROOT_PID_VALUE);
-		}else{
-			//濡傛灉褰撳墠鑺傜偣鐖禝D涓嶄负绌� 鍒欒缃埗鑺傜偣鐨刪asChild 涓�1
-			SysCategory parent = baseMapper.selectById(sysCategory.getPid());
-			if(parent!=null && !ISysCategoryService.HAS_CHILD.equals(parent.getHasChild())){
-				parent.setHasChild(ISysCategoryService.HAS_CHILD);
-				baseMapper.updateById(parent);
-			}
-		}
-		baseMapper.updateById(sysCategory);
-	}
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addSysCategory(SysCategory sysCategory) {
+        //淇敼瀛楀吀鍒嗙被  缂栫爜涓烘墜鍔ㄨ緭鍏�
+        if (StringUtils.isNotBlank(sysCategory.getPid())) {
+            SysCategory parent = sysCategoryMapper.selectById(sysCategory.getPid());
+            if (parent == null) {
+                //鐖惰妭鐐逛笉瀛樺湪 榛樿涓烘牴鑺傜偣
+                throw new JeecgBootException("鐖惰妭鐐逛笉瀛樺湪锛岃閲嶆柊娣诲姞锛�");
+            } else {
+                //鏍¢獙缂栫爜鍞竴
+                SysCategory original = getByCodeAndRootCode(sysCategory.getCode(), parent.getRootCode());
+                if (original != null) {
+                    throw new JeecgBootException("鍒嗙被缂栫爜宸插瓨鍦紝璇蜂慨鏀瑰悗閲嶈瘯锛�");
+                }
+                if (ISysCategoryService.HAS_CHILD.equals(parent.getHasChild())) {
+                    parent.setHasChild(ISysCategoryService.HAS_CHILD);
+                    sysCategoryMapper.updateById(parent);
+                }
+                sysCategory.setRootCode(parent.getRootCode());
+                String parentIds = parent.getParentIds() == null ? parent.getId() : (parent.getParentIds() + "," + parent.getId());
+                sysCategory.setParentIds(parentIds);
+            }
+        } else {
+            //鏍¢獙缂栫爜鍞竴
+            SysCategory original = getByCodeAndRootCode(sysCategory.getCode(), null);
+            if (original != null) {
+                throw new JeecgBootException("鍒嗙被缂栫爜宸插瓨鍦紝璇蜂慨鏀瑰悗閲嶈瘯锛�");
+            }
+            //鐖惰妭鐐逛笉瀛樺湪 榛樿涓烘牴鑺傜偣
+            sysCategory.setPid(ISysCategoryService.ROOT_PID_VALUE);
+            sysCategory.setRootCode(sysCategory.getCode());
+            sysCategory.setParentIds(null);
+        }
+        sysCategoryMapper.insert(sysCategory);
+    }
 
-	@Override
-	public List<TreeSelectModel> queryListByCode(String pcode) throws JeecgBootException{
-		String pid = ROOT_PID_VALUE;
-		if(oConvertUtils.isNotEmpty(pcode)) {
-			List<SysCategory> list = baseMapper.selectList(new LambdaQueryWrapper<SysCategory>().eq(SysCategory::getCode, pcode));
-			if(list==null || list.size() ==0) {
-				throw new JeecgBootException("璇ョ紪鐮併��"+pcode+"銆戜笉瀛樺湪锛岃鏍稿疄!");
-			}
-			if(list.size()>1) {
-				throw new JeecgBootException("璇ョ紪鐮併��"+pcode+"銆戝瓨鍦ㄥ涓紝璇锋牳瀹�!");
-			}
-			pid = list.get(0).getId();
-		}
-		return baseMapper.queryListByPid(pid,null);
-	}
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateSysCategory(SysCategory sysCategory) {
+        SysCategory entity = sysCategoryMapper.selectById(sysCategory.getId());
+        if (entity == null) {
+            throw new JeecgBootException("缂栬緫鐨勬暟鎹笉瀛樺湪锛岃鍒锋柊閲嶈瘯锛�");
+        }
+        if (oConvertUtils.isEmpty(sysCategory.getPid())) {
+            sysCategory.setPid(ISysCategoryService.ROOT_PID_VALUE);
+        } else {
+            //濡傛灉褰撳墠鑺傜偣鐖禝D涓嶄负绌� 鍒欒缃埗鑺傜偣鐨刪asChild 涓�1
+            SysCategory parent = sysCategoryMapper.selectById(sysCategory.getPid());
+            if (parent != null && !ISysCategoryService.HAS_CHILD.equals(parent.getHasChild())) {
+                parent.setHasChild(ISysCategoryService.HAS_CHILD);
+                sysCategoryMapper.updateById(parent);
+            } else {
+                sysCategory.setPid(ISysCategoryService.ROOT_PID_VALUE);
+            }
+        }
+        sysCategoryMapper.updateById(sysCategory);
+    }
 
-	@Override
-	public List<TreeSelectModel> queryListByPid(String pid) {
-		if(oConvertUtils.isEmpty(pid)) {
-			pid = ROOT_PID_VALUE;
-		}
-		return baseMapper.queryListByPid(pid,null);
-	}
+    @Override
+    public List<TreeSelectModel> queryListByCode(String pcode) throws JeecgBootException {
+        String pid = ROOT_PID_VALUE;
+        if (oConvertUtils.isNotEmpty(pcode)) {
+            List<SysCategory> list = baseMapper.selectList(new LambdaQueryWrapper<SysCategory>().eq(SysCategory::getCode, pcode));
+            if (list == null || list.size() == 0) {
+                throw new JeecgBootException("璇ョ紪鐮併��" + pcode + "銆戜笉瀛樺湪锛岃鏍稿疄!");
+            }
+            if (list.size() > 1) {
+                throw new JeecgBootException("璇ョ紪鐮併��" + pcode + "銆戝瓨鍦ㄥ涓紝璇锋牳瀹�!");
+            }
+            pid = list.get(0).getId();
+        }
+        return baseMapper.queryListByPid(pid, null);
+    }
 
-	@Override
-	public List<TreeSelectModel> queryListByPid(String pid, Map<String, String> condition) {
-		if(oConvertUtils.isEmpty(pid)) {
-			pid = ROOT_PID_VALUE;
-		}
-		return baseMapper.queryListByPid(pid,condition);
-	}
+    @Override
+    public List<TreeSelectModel> queryListByPid(String pid) {
+        if (oConvertUtils.isEmpty(pid)) {
+            pid = ROOT_PID_VALUE;
+        }
+        return baseMapper.queryListByPid(pid, null);
+    }
 
-	@Override
-	public String queryIdByCode(String code) {
-		return baseMapper.queryIdByCode(code);
-	}
+    @Override
+    public List<TreeSelectModel> queryListByPid(String pid, Map<String, String> condition) {
+        if (oConvertUtils.isEmpty(pid)) {
+            pid = ROOT_PID_VALUE;
+        }
+        return baseMapper.queryListByPid(pid, condition);
+    }
 
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void deleteSysCategory(String ids) {
-		String allIds = this.queryTreeChildIds(ids);
-		String pids = this.queryTreePids(ids);
-		//1.鍒犻櫎鏃跺皢鑺傜偣涓嬫墍鏈夊瓙鑺傜偣涓�骞跺垹闄�
-		this.baseMapper.deleteBatchIds(Arrays.asList(allIds.split(",")));
-		//2.灏嗙埗鑺傜偣涓凡缁忔病鏈変笅绾х殑鑺傜偣锛屼慨鏀逛负娌℃湁瀛愯妭鐐�
-		if(oConvertUtils.isNotEmpty(pids)){
-			LambdaUpdateWrapper<SysCategory> updateWrapper = new UpdateWrapper<SysCategory>()
-					.lambda()
-					.in(SysCategory::getId,Arrays.asList(pids.split(",")))
-					.set(SysCategory::getHasChild,"0");
-			this.update(updateWrapper);
-		}
-	}
+    @Override
+    public String queryIdByCode(String code) {
+        return baseMapper.queryIdByCode(code);
+    }
 
-	/**
-	 * 鏌ヨ鑺傜偣涓嬫墍鏈夊瓙鑺傜偣
-	 * @param ids
-	 * @return
-	 */
-	private String queryTreeChildIds(String ids) {
-		//鑾峰彇id鏁扮粍
-		String[] idArr = ids.split(",");
-		StringBuffer sb = new StringBuffer();
-		for (String pidVal : idArr) {
-			if(pidVal != null){
-				if(!sb.toString().contains(pidVal)){
-					if(sb.toString().length() > 0){
-						sb.append(",");
-					}
-					sb.append(pidVal);
-					this.getTreeChildIds(pidVal,sb);
-				}
-			}
-		}
-		return sb.toString();
-	}
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteSysCategory(String ids) {
+        String allIds = this.queryTreeChildIds(ids);
+        String pids = this.queryTreePids(ids);
+        //1.鍒犻櫎鏃跺皢鑺傜偣涓嬫墍鏈夊瓙鑺傜偣涓�骞跺垹闄�
+        this.baseMapper.deleteBatchIds(Arrays.asList(allIds.split(",")));
+        //2.灏嗙埗鑺傜偣涓凡缁忔病鏈変笅绾х殑鑺傜偣锛屼慨鏀逛负娌℃湁瀛愯妭鐐�
+        if (oConvertUtils.isNotEmpty(pids)) {
+            LambdaUpdateWrapper<SysCategory> updateWrapper = new UpdateWrapper<SysCategory>()
+                    .lambda()
+                    .in(SysCategory::getId, Arrays.asList(pids.split(",")))
+                    .set(SysCategory::getHasChild, "0");
+            this.update(updateWrapper);
+        }
+    }
 
-	/**
-	 * 鏌ヨ闇�淇敼鏍囪瘑鐨勭埗鑺傜偣ids
-	 * @param ids
-	 * @return
-	 */
-	private String queryTreePids(String ids) {
-		StringBuffer sb = new StringBuffer();
-		//鑾峰彇id鏁扮粍
-		String[] idArr = ids.split(",");
-		for (String id : idArr) {
-			if(id != null){
-				SysCategory category = this.baseMapper.selectById(id);
-				//鏍规嵁id鏌ヨpid鍊�
-				String metaPid = category.getPid();
-				//鏌ヨ姝よ妭鐐逛笂涓�绾ф槸鍚﹁繕鏈夊叾浠栧瓙鑺傜偣
-				LambdaQueryWrapper<SysCategory> queryWrapper = new LambdaQueryWrapper<>();
-				queryWrapper.eq(SysCategory::getPid,metaPid);
-				queryWrapper.notIn(SysCategory::getId,Arrays.asList(idArr));
-				List<SysCategory> dataList = this.baseMapper.selectList(queryWrapper);
-                boolean flag = (dataList == null || dataList.size()==0) && !Arrays.asList(idArr).contains(metaPid)
+    /**
+     * 鏌ヨ鑺傜偣涓嬫墍鏈夊瓙鑺傜偣
+     *
+     * @param ids
+     * @return
+     */
+    private String queryTreeChildIds(String ids) {
+        //鑾峰彇id鏁扮粍
+        String[] idArr = ids.split(",");
+        StringBuffer sb = new StringBuffer();
+        for (String pidVal : idArr) {
+            if (pidVal != null) {
+                if (!sb.toString().contains(pidVal)) {
+                    if (sb.toString().length() > 0) {
+                        sb.append(",");
+                    }
+                    sb.append(pidVal);
+                    this.getTreeChildIds(pidVal, sb);
+                }
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * 鏌ヨ闇�淇敼鏍囪瘑鐨勭埗鑺傜偣ids
+     *
+     * @param ids
+     * @return
+     */
+    private String queryTreePids(String ids) {
+        StringBuffer sb = new StringBuffer();
+        //鑾峰彇id鏁扮粍
+        String[] idArr = ids.split(",");
+        for (String id : idArr) {
+            if (id != null) {
+                SysCategory category = this.baseMapper.selectById(id);
+                //鏍规嵁id鏌ヨpid鍊�
+                String metaPid = category.getPid();
+                //鏌ヨ姝よ妭鐐逛笂涓�绾ф槸鍚﹁繕鏈夊叾浠栧瓙鑺傜偣
+                LambdaQueryWrapper<SysCategory> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(SysCategory::getPid, metaPid);
+                queryWrapper.notIn(SysCategory::getId, Arrays.asList(idArr));
+                List<SysCategory> dataList = this.baseMapper.selectList(queryWrapper);
+                boolean flag = (dataList == null || dataList.size() == 0) && !Arrays.asList(idArr).contains(metaPid)
                         && !sb.toString().contains(metaPid);
-                if(flag){
-					//濡傛灉褰撳墠鑺傜偣鍘熸湰鏈夊瓙鑺傜偣 鐜板湪鏈ㄦ湁浜嗭紝鏇存柊鐘舵��
-					sb.append(metaPid).append(",");
-				}
-			}
-		}
-		if(sb.toString().endsWith(SymbolConstant.COMMA)){
-			sb = sb.deleteCharAt(sb.length() - 1);
-		}
-		return sb.toString();
-	}
+                if (flag) {
+                    //濡傛灉褰撳墠鑺傜偣鍘熸湰鏈夊瓙鑺傜偣 鐜板湪鏈ㄦ湁浜嗭紝鏇存柊鐘舵��
+                    sb.append(metaPid).append(",");
+                }
+            }
+        }
+        if (sb.toString().endsWith(SymbolConstant.COMMA)) {
+            sb = sb.deleteCharAt(sb.length() - 1);
+        }
+        return sb.toString();
+    }
 
-	/**
-	 * 閫掑綊 鏍规嵁鐖秈d鑾峰彇瀛愯妭鐐筰d
-	 * @param pidVal
-	 * @param sb
-	 * @return
-	 */
-	private StringBuffer getTreeChildIds(String pidVal,StringBuffer sb){
-		LambdaQueryWrapper<SysCategory> queryWrapper = new LambdaQueryWrapper<>();
-		queryWrapper.eq(SysCategory::getPid,pidVal);
-		List<SysCategory> dataList = baseMapper.selectList(queryWrapper);
-		if(dataList != null && dataList.size()>0){
-			for(SysCategory category : dataList) {
-				if(!sb.toString().contains(category.getId())){
-					sb.append(",").append(category.getId());
-				}
-				this.getTreeChildIds(category.getId(), sb);
-			}
-		}
-		return sb;
-	}
+    /**
+     * 閫掑綊 鏍规嵁鐖秈d鑾峰彇瀛愯妭鐐筰d
+     *
+     * @param pidVal
+     * @param sb
+     * @return
+     */
+    private StringBuffer getTreeChildIds(String pidVal, StringBuffer sb) {
+        LambdaQueryWrapper<SysCategory> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysCategory::getPid, pidVal);
+        List<SysCategory> dataList = baseMapper.selectList(queryWrapper);
+        if (dataList != null && dataList.size() > 0) {
+            for (SysCategory category : dataList) {
+                if (!sb.toString().contains(category.getId())) {
+                    sb.append(",").append(category.getId());
+                }
+                this.getTreeChildIds(category.getId(), sb);
+            }
+        }
+        return sb;
+    }
 
-	@Override
-	public List<String> loadDictItem(String ids) {
-		return this.loadDictItem(ids, true);
-	}
+    @Override
+    public List<String> loadDictItem(String ids) {
+        return this.loadDictItem(ids, true);
+    }
 
-	@Override
-	public List<String> loadDictItem(String ids, boolean delNotExist) {
-		String[] idArray = ids.split(",");
-		LambdaQueryWrapper<SysCategory> query = new LambdaQueryWrapper<>();
-		query.in(SysCategory::getId, Arrays.asList(idArray));
-		// 鏌ヨ鏁版嵁
-		List<SysCategory> list = super.list(query);
-		// 鍙栧嚭name骞惰繑鍥�
-		List<String> textList;
-		// update-begin--author:sunjianlei--date:20210514--for锛氭柊澧瀌elNotExist鍙傛暟锛岃涓篺alse涓嶅垹闄ゆ暟鎹簱閲屼笉瀛樺湪鐨刱ey ----
-		if (delNotExist) {
-			textList = list.stream().map(SysCategory::getName).collect(Collectors.toList());
-		} else {
-			textList = new ArrayList<>();
-			for (String id : idArray) {
-				List<SysCategory> res = list.stream().filter(i -> id.equals(i.getId())).collect(Collectors.toList());
-				textList.add(res.size() > 0 ? res.get(0).getName() : id);
-			}
-		}
-		// update-end--author:sunjianlei--date:20210514--for锛氭柊澧瀌elNotExist鍙傛暟锛岃涓篺alse涓嶅垹闄ゆ暟鎹簱閲屼笉瀛樺湪鐨刱ey ----
-		return textList;
-	}
+    @Override
+    public List<String> loadDictItem(String ids, boolean delNotExist) {
+        String[] idArray = ids.split(",");
+        LambdaQueryWrapper<SysCategory> query = new LambdaQueryWrapper<>();
+        query.in(SysCategory::getId, Arrays.asList(idArray));
+        // 鏌ヨ鏁版嵁
+        List<SysCategory> list = super.list(query);
+        // 鍙栧嚭name骞惰繑鍥�
+        List<String> textList;
+        // update-begin--author:sunjianlei--date:20210514--for锛氭柊澧瀌elNotExist鍙傛暟锛岃涓篺alse涓嶅垹闄ゆ暟鎹簱閲屼笉瀛樺湪鐨刱ey ----
+        if (delNotExist) {
+            textList = list.stream().map(SysCategory::getName).collect(Collectors.toList());
+        } else {
+            textList = new ArrayList<>();
+            for (String id : idArray) {
+                List<SysCategory> res = list.stream().filter(i -> id.equals(i.getId())).collect(Collectors.toList());
+                textList.add(res.size() > 0 ? res.get(0).getName() : id);
+            }
+        }
+        // update-end--author:sunjianlei--date:20210514--for锛氭柊澧瀌elNotExist鍙傛暟锛岃涓篺alse涓嶅垹闄ゆ暟鎹簱閲屼笉瀛樺湪鐨刱ey ----
+        return textList;
+    }
+
+    @Override
+    public List<SysCategory> listByParams(SysCategory query) {
+        QueryWrapper<SysCategory> queryWrapper = new QueryWrapper<>(query);
+        if (query != null) {
+            if (StringUtils.isNotBlank(query.getName())) {
+                queryWrapper.like("t.name", query.getName());
+            }
+            if (StringUtils.isNotBlank(query.getCode())) {
+                queryWrapper.like("t.code", query.getCode());
+            }
+        }
+        queryWrapper.orderByDesc("t.id");
+        return sysCategoryMapper.listByParams(queryWrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deepAdd(SysCategory sysCategory, List<String> errorMessage) {
+        String parenCode = (StringUtils.isBlank(sysCategory.getParentCode()) ? "0" : sysCategory.getParentCode());
+        if (ROOT_PID_VALUE.equals(parenCode)) {
+            sysCategory.setPid(ROOT_PID_VALUE);
+            sysCategory.setRootCode(sysCategory.getCode());
+            sysCategory.setParentIds(null);
+            //鏍硅妭鐐�
+            SysCategory entity = this.getByCodeAndRootCode(sysCategory.getCode(), null);
+            if (entity != null) {
+                sysCategory.setId(entity.getId());
+                sysCategoryMapper.updateById(sysCategory);
+            } else {
+                sysCategoryMapper.insert(sysCategory);
+            }
+        } else {
+            //鑾峰彇涓婄骇鑺傜偣
+            String pid = sysCategory.getPid();
+            SysCategory parent = this.getById(pid);
+            if (parent == null) {
+                String rootCode = sysCategory.getRootCode();
+                parent = this.getByCodeAndRootCode(parenCode, rootCode);
+            }
+            if (parent != null) {
+                sysCategory.setPid(parent.getId());
+                sysCategory.setRootCode(parent.getRootCode());
+                String parentIds = (parent.getParentIds() == null ? parent.getId() : (parent.getParentIds() + "," + parent.getId()));
+                sysCategory.setParentIds(parentIds);
+                if (!ISysCategoryService.HAS_CHILD.equals(parent.getHasChild())) {
+                    //鏇存柊鏍硅妭鐐�
+                    parent.setHasChild(HAS_CHILD);
+                    sysCategoryMapper.updateById(parent);
+                }
+                SysCategory entity = this.getByCodeAndRootCode(sysCategory.getCode(), parent.getRootCode());
+                if (entity != null) {
+                    sysCategory.setId(entity.getId());
+                    sysCategoryMapper.updateById(sysCategory);
+                } else {
+                    sysCategoryMapper.insert(sysCategory);
+                }
+            } else {
+                errorMessage.add(String.format("缂栫爜[%s]鐨勭埗鑺傜偣娌℃湁鎵惧埌,", sysCategory.getCode()));
+                return;
+            }
+        }
+        if (CollectionUtil.isNotEmpty(sysCategory.getChildren())) {
+            sysCategory.getChildren().forEach(child -> {
+                child.setPid(sysCategory.getId());
+                this.deepAdd(child, errorMessage);
+            });
+        }
+
+    }
+
+    /**
+     * 鏌ヨ缂栫爜鏄惁宸插瓨鍦�
+     *
+     * @param code     鍒嗙被缂栫爜
+     * @param rootCode 鏍硅妭鐐圭紪鐮� 涓虹┖锛屾坊鍔犳牴鑺傜偣锛� 涓嶄负绌猴紝娣诲姞瀛愯妭鐐�
+     * @return
+     */
+    @Override
+    public SysCategory getByCodeAndRootCode(String code, String rootCode) {
+        LambdaQueryWrapper<SysCategory> queryWrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(rootCode)) {
+            queryWrapper.eq(SysCategory::getRootCode, rootCode);
+        }
+        queryWrapper.eq(SysCategory::getCode, code);
+        return sysCategoryMapper.selectOne(queryWrapper);
+    }
 
 }

--
Gitblit v1.9.3