package com.tievd.cube.modules.system.service.impl; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.tievd.cube.commons.exception.CubeAppException; import com.tievd.cube.commons.utils.FillRuleUtil; import com.tievd.cube.modules.system.entity.SysCategory; import com.tievd.cube.modules.system.mapper.SysCategoryMapper; import com.tievd.cube.modules.system.model.TreeSelectModel; import com.tievd.cube.modules.system.service.ISysCategoryService; import org.springframework.stereotype.Service; import java.util.List; @Service public class SysCategoryServiceImpl extends ServiceImpl implements ISysCategoryService { @Override public void addSysCategory(SysCategory sysCategory) { String categoryCode; Long categoryPid = ISysCategoryService.ROOT_PID_VALUE; if (sysCategory.getPid() != null) { categoryPid = sysCategory.getPid(); //PID 不是根节点 说明需要设置父节点 hasChild 为1 if (!ISysCategoryService.ROOT_PID_VALUE.equals(categoryPid)) { SysCategory parent = baseMapper.selectById(categoryPid); if (!"1".equals(parent.getHasChild())) { parent.setHasChild("1"); baseMapper.updateById(parent); } } } //update-begin--Author:baihailong Date:20191209 for:分类字典编码规则生成器做成公用配置 JSONObject formData = JSONUtil.createObj(); formData.set("pid", categoryPid); categoryCode = (String) FillRuleUtil.executeRule("category_code_rule", formData.toString()); //update-end--Author:baihailong Date:20191209 for:分类字典编码规则生成器做成公用配置 sysCategory.setCode(categoryCode); sysCategory.setPid(categoryPid); baseMapper.insert(sysCategory); } @Override public void updateSysCategory(SysCategory sysCategory) { if (sysCategory.getPid() != null) { sysCategory.setPid(ISysCategoryService.ROOT_PID_VALUE); } else { //如果当前节点父ID不为空 则设置父节点的hasChild 为1 SysCategory parent = baseMapper.selectById(sysCategory.getPid()); if (parent != null && !"1".equals(parent.getHasChild())) { parent.setHasChild("1"); baseMapper.updateById(parent); } } baseMapper.updateById(sysCategory); } @Override public List queryListByCode(String pcode) throws CubeAppException { Long pid = ROOT_PID_VALUE; if (StrUtil.isNotEmpty(pcode)) { List list = baseMapper.selectList(new LambdaQueryWrapper().eq(SysCategory::getCode, pcode)); if (list == null || list.size() == 0) { throw new CubeAppException("该编码【" + pcode + "】不存在,请核实!"); } if (list.size() > 1) { throw new CubeAppException("该编码【" + pcode + "】存在多个,请核实!"); } pid = list.get(0).getId(); } return baseMapper.queryListByPid(pid, null); } @Override public List queryListByPid(Long pid) { if (pid == null) { pid = ROOT_PID_VALUE; } return baseMapper.queryListByPid(pid, null); } @Override public Long queryIdByCode(String code) { return baseMapper.queryIdByCode(code); } @Override public List loadTreeData(Long pid, String pcode, String condition) { if (pid == null) { if (StrUtil.isEmpty(pcode)) { throw new CubeAppException("pcode参数有误!"); } if ("0".equals(pcode)) { pid = ISysCategoryService.ROOT_PID_VALUE; } else { pid = baseMapper.queryIdByCode(pcode); } if (pid == null) { throw new CubeAppException("pid参数有误!"); } } JSONObject query = null; if (StrUtil.isNotEmpty(condition)) { query = JSONUtil.parseObj(condition); } return baseMapper.queryListByPid(pid, query); } }