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/ISysCategoryService.java | 135 ++- lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java | 912 +++++++++++++++--------------- lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java | 124 ++- lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java | 5 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCategoryServiceImpl.java | 502 ++++++++++------ lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysCategoryMapper.xml | 7 6 files changed, 934 insertions(+), 751 deletions(-) diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java index 9ab89a7..90d9e49 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java @@ -5,15 +5,15 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import liquibase.pro.packaged.Q; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; -import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.vo.DictModel; import org.jeecg.common.system.vo.LoginUser; -import org.jeecg.common.util.ImportExcelUtil; import org.jeecg.common.util.SqlInjectionUtil; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.system.entity.SysCategory; @@ -33,485 +33,485 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; - /** +/** * @Description: 鍒嗙被瀛楀吀 * @Author: jeecg-boot - * @Date: 2019-05-29 + * @Date: 2019-05-29 * @Version: V1.0 */ @RestController @RequestMapping("/sys/category") @Slf4j public class SysCategoryController { - @Autowired - private ISysCategoryService sysCategoryService; + @Autowired + private ISysCategoryService sysCategoryService; - /** - * 鍒嗙被缂栫爜0 - */ - private static final String CATEGORY_ROOT_CODE = "0"; - - /** - * 鍒嗛〉鍒楄〃鏌ヨ - * @param sysCategory - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @GetMapping(value = "/rootList") - public Result<IPage<SysCategory>> queryPageList(SysCategory sysCategory, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - if(oConvertUtils.isEmpty(sysCategory.getPid())){ - sysCategory.setPid("0"); - } - Result<IPage<SysCategory>> result = new Result<IPage<SysCategory>>(); - - //--author:os_chengtgen---date:20190804 -----for: 鍒嗙被瀛楀吀椤甸潰鏄剧ず閿欒,issues:377--------start - //--author:liusq---date:20211119 -----for: 銆恦ue3銆戝垎绫诲瓧鍏搁〉闈㈡煡璇㈡潯浠堕厤缃�--------start - QueryWrapper<SysCategory> queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, req.getParameterMap()); - String name = sysCategory.getName(); - String code = sysCategory.getCode(); - //QueryWrapper<SysCategory> queryWrapper = new QueryWrapper<SysCategory>(); - if(StringUtils.isBlank(name)&&StringUtils.isBlank(code)){ - queryWrapper.eq("pid", sysCategory.getPid()); - } - //--author:liusq---date:20211119 -----for: 鍒嗙被瀛楀吀椤甸潰鏌ヨ鏉′欢閰嶇疆--------end - //--author:os_chengtgen---date:20190804 -----for:銆恦ue3銆� 鍒嗙被瀛楀吀椤甸潰鏄剧ず閿欒,issues:377--------end - - Page<SysCategory> page = new Page<SysCategory>(pageNo, pageSize); - IPage<SysCategory> pageList = sysCategoryService.page(page, queryWrapper); - result.setSuccess(true); - result.setResult(pageList); - return result; - } - - @GetMapping(value = "/childList") - public Result<List<SysCategory>> queryPageList(SysCategory sysCategory,HttpServletRequest req) { - Result<List<SysCategory>> result = new Result<List<SysCategory>>(); - QueryWrapper<SysCategory> queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, req.getParameterMap()); - List<SysCategory> list = sysCategoryService.list(queryWrapper); - result.setSuccess(true); - result.setResult(list); - return result; - } - - - /** - * 娣诲姞 - * @param sysCategory - * @return - */ - @PostMapping(value = "/add") - public Result<SysCategory> add(@RequestBody SysCategory sysCategory) { - Result<SysCategory> result = new Result<SysCategory>(); - try { - sysCategoryService.addSysCategory(sysCategory); - result.success("娣诲姞鎴愬姛锛�"); - } catch (Exception e) { - log.error(e.getMessage(),e); - result.error500("鎿嶄綔澶辫触"); - } - return result; - } - - /** - * 缂栬緫 - * @param sysCategory - * @return - */ - @RequestMapping(value = "/edit", method = { RequestMethod.PUT,RequestMethod.POST }) - public Result<SysCategory> edit(@RequestBody SysCategory sysCategory) { - Result<SysCategory> result = new Result<SysCategory>(); - SysCategory sysCategoryEntity = sysCategoryService.getById(sysCategory.getId()); - if(sysCategoryEntity==null) { - result.error500("鏈壘鍒板搴斿疄浣�"); - }else { - sysCategoryService.updateSysCategory(sysCategory); - result.success("淇敼鎴愬姛!"); - } - return result; - } - - /** - * 閫氳繃id鍒犻櫎 - * @param id - * @return - */ - @DeleteMapping(value = "/delete") - public Result<SysCategory> delete(@RequestParam(name="id",required=true) String id) { - Result<SysCategory> result = new Result<SysCategory>(); - SysCategory sysCategory = sysCategoryService.getById(id); - if(sysCategory==null) { - result.error500("鏈壘鍒板搴斿疄浣�"); - }else { - this.sysCategoryService.deleteSysCategory(id); - result.success("鍒犻櫎鎴愬姛!"); - } - - return result; - } - - /** - * 鎵归噺鍒犻櫎 - * @param ids - * @return - */ - @DeleteMapping(value = "/deleteBatch") - public Result<SysCategory> deleteBatch(@RequestParam(name="ids",required=true) String ids) { - Result<SysCategory> result = new Result<SysCategory>(); - if(ids==null || "".equals(ids.trim())) { - result.error500("鍙傛暟涓嶈瘑鍒紒"); - }else { - this.sysCategoryService.deleteSysCategory(ids); - result.success("鍒犻櫎鎴愬姛!"); - } - return result; - } - - /** - * 閫氳繃id鏌ヨ - * @param id - * @return - */ - @GetMapping(value = "/queryById") - public Result<SysCategory> queryById(@RequestParam(name="id",required=true) String id) { - Result<SysCategory> result = new Result<SysCategory>(); - SysCategory sysCategory = sysCategoryService.getById(id); - if(sysCategory==null) { - result.error500("鏈壘鍒板搴斿疄浣�"); - }else { - result.setResult(sysCategory); - result.setSuccess(true); - } - return result; - } - - /** - * 瀵煎嚭excel - * - * @param request - */ - @RequestMapping(value = "/exportXls") - public ModelAndView exportXls(HttpServletRequest request, SysCategory sysCategory) { - // Step.1 缁勮鏌ヨ鏉′欢鏌ヨ鏁版嵁 - QueryWrapper<SysCategory> queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, request.getParameterMap()); - List<SysCategory> pageList = sysCategoryService.list(queryWrapper); - // Step.2 AutoPoi 瀵煎嚭Excel - ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - // 杩囨护閫変腑鏁版嵁 - String selections = request.getParameter("selections"); - if(oConvertUtils.isEmpty(selections)) { - mv.addObject(NormalExcelConstants.DATA_LIST, pageList); - }else { - List<String> selectionList = Arrays.asList(selections.split(",")); - List<SysCategory> exportList = pageList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); - mv.addObject(NormalExcelConstants.DATA_LIST, exportList); - } - //瀵煎嚭鏂囦欢鍚嶇О - mv.addObject(NormalExcelConstants.FILE_NAME, "鍒嗙被瀛楀吀鍒楄〃"); - mv.addObject(NormalExcelConstants.CLASS, SysCategory.class); - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("鍒嗙被瀛楀吀鍒楄〃鏁版嵁", "瀵煎嚭浜�:"+user.getRealname(), "瀵煎嚭淇℃伅")); - return mv; - } - - /** - * 閫氳繃excel瀵煎叆鏁版嵁 - * - * @param request - * @param response - * @return - */ - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException{ - MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); - // 閿欒淇℃伅 - List<String> errorMessage = new ArrayList<>(); - int successLines = 0, errorLines = 0; - for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { - // 鑾峰彇涓婁紶鏂囦欢瀵硅薄 - MultipartFile file = entity.getValue(); - ImportParams params = new ImportParams(); - params.setTitleRows(2); - params.setHeadRows(1); - params.setNeedSave(true); - try { - List<SysCategory> listSysCategorys = ExcelImportUtil.importExcel(file.getInputStream(), SysCategory.class, params); - //鎸夌収缂栫爜闀垮害鎺掑簭 - Collections.sort(listSysCategorys); - log.info("鎺掑簭鍚庣殑list====>",listSysCategorys); - for (int i = 0; i < listSysCategorys.size(); i++) { - SysCategory sysCategoryExcel = listSysCategorys.get(i); - String code = sysCategoryExcel.getCode(); - if(code.length()>3){ - String pCode = sysCategoryExcel.getCode().substring(0,code.length()-3); - log.info("pCode====>",pCode); - String pId=sysCategoryService.queryIdByCode(pCode); - log.info("pId====>",pId); - if(StringUtils.isNotBlank(pId)){ - sysCategoryExcel.setPid(pId); - } - }else{ - sysCategoryExcel.setPid("0"); - } - try { - sysCategoryService.save(sysCategoryExcel); - successLines++; - } catch (Exception e) { - errorLines++; - String message = e.getMessage().toLowerCase(); - int lineNumber = i + 1; - // 閫氳繃绱㈠紩鍚嶅垽鏂嚭閿欎俊鎭� - if (message.contains(CommonConstant.SQL_INDEX_UNIQ_CATEGORY_CODE)) { - errorMessage.add("绗� " + lineNumber + " 琛岋細鍒嗙被缂栫爜宸茬粡瀛樺湪锛屽拷鐣ュ鍏ャ��"); - } else { - errorMessage.add("绗� " + lineNumber + " 琛岋細鏈煡閿欒锛屽拷鐣ュ鍏�"); - log.error(e.getMessage(), e); - } - } - } - } catch (Exception e) { - errorMessage.add("鍙戠敓寮傚父锛�" + e.getMessage()); - log.error(e.getMessage(), e); - } finally { - try { - file.getInputStream().close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); - } - - - - /** - * 鍔犺浇鍗曚釜鏁版嵁 鐢ㄤ簬鍥炴樉 - */ - @RequestMapping(value = "/loadOne", method = RequestMethod.GET) - public Result<SysCategory> loadOne(@RequestParam(name="field") String field,@RequestParam(name="val") String val) { - Result<SysCategory> result = new Result<SysCategory>(); - try { - //update-begin-author:taoyan date:2022-5-6 for: issues/3663 sql娉ㄥ叆闂 - boolean isClassField = SqlInjectionUtil.isClassField(field, SysCategory.class); - if (!isClassField) { - return Result.error("瀛楁鏃犳晥锛岃妫�鏌�!"); - } - //update-end-author:taoyan date:2022-5-6 for: issues/3663 sql娉ㄥ叆闂 - QueryWrapper<SysCategory> query = new QueryWrapper<SysCategory>(); - query.eq(field, val); - List<SysCategory> ls = this.sysCategoryService.list(query); - if(ls==null || ls.size()==0) { - result.setMessage("鏌ヨ鏃犳灉"); - result.setSuccess(false); - }else if(ls.size()>1) { - result.setMessage("鏌ヨ鏁版嵁寮傚父,["+field+"]瀛樺湪澶氫釜鍊�:"+val); - result.setSuccess(false); - }else { - result.setSuccess(true); - result.setResult(ls.get(0)); - } - } catch (Exception e) { - e.printStackTrace(); - result.setMessage(e.getMessage()); - result.setSuccess(false); - } - return result; - } - /** - * 鍔犺浇鑺傜偣鐨勫瓙鏁版嵁 + * 鍒嗙被缂栫爜0 + */ + private static final String CATEGORY_ROOT_CODE = "0"; + + /** + * 鍒嗛〉鍒楄〃鏌ヨ + * + * @param sysCategory + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/rootList") + public Result<IPage<SysCategory>> queryPageList(SysCategory sysCategory, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + if (oConvertUtils.isEmpty(sysCategory.getPid())) { + sysCategory.setPid("0"); + } + Result<IPage<SysCategory>> result = new Result<IPage<SysCategory>>(); + + //--author:os_chengtgen---date:20190804 -----for: 鍒嗙被瀛楀吀椤甸潰鏄剧ず閿欒,issues:377--------start + //--author:liusq---date:20211119 -----for: 銆恦ue3銆戝垎绫诲瓧鍏搁〉闈㈡煡璇㈡潯浠堕厤缃�--------start + QueryWrapper<SysCategory> queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, req.getParameterMap()); + String name = sysCategory.getName(); + String code = sysCategory.getCode(); + //QueryWrapper<SysCategory> queryWrapper = new QueryWrapper<SysCategory>(); + if (StringUtils.isBlank(name) && StringUtils.isBlank(code)) { + queryWrapper.eq("pid", sysCategory.getPid()); + } + //--author:liusq---date:20211119 -----for: 鍒嗙被瀛楀吀椤甸潰鏌ヨ鏉′欢閰嶇疆--------end + //--author:os_chengtgen---date:20190804 -----for:銆恦ue3銆� 鍒嗙被瀛楀吀椤甸潰鏄剧ず閿欒,issues:377--------end + + Page<SysCategory> page = new Page<SysCategory>(pageNo, pageSize); + IPage<SysCategory> pageList = sysCategoryService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + @GetMapping(value = "/childList") + public Result<List<SysCategory>> queryPageList(SysCategory sysCategory, HttpServletRequest req) { + Result<List<SysCategory>> result = new Result<List<SysCategory>>(); + QueryWrapper<SysCategory> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("pid", sysCategory.getPid()); + queryWrapper.orderByAsc("code"); + List<SysCategory> list = sysCategoryService.list(queryWrapper); + result.setSuccess(true); + result.setResult(list); + return result; + } + + + /** + * 娣诲姞 + * + * @param sysCategory + * @return + */ + @PostMapping(value = "/add") + public Result<SysCategory> add(@RequestBody SysCategory sysCategory) { + Result<SysCategory> result = new Result<SysCategory>(); + sysCategoryService.addSysCategory(sysCategory); + result.success("娣诲姞鎴愬姛锛�"); + return result; + } + + /** + * 缂栬緫 + * + * @param sysCategory + * @return + */ + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result<SysCategory> edit(@RequestBody SysCategory sysCategory) { + Result<SysCategory> result = new Result<SysCategory>(); + sysCategoryService.updateSysCategory(sysCategory); + result.success("淇敼鎴愬姛!"); + return result; + } + + /** + * 閫氳繃id鍒犻櫎 + * + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result<SysCategory> delete(@RequestParam(name = "id", required = true) String id) { + Result<SysCategory> result = new Result<SysCategory>(); + SysCategory sysCategory = sysCategoryService.getById(id); + if (sysCategory == null) { + result.error500("鏈壘鍒板搴斿疄浣�"); + } else { + this.sysCategoryService.deleteSysCategory(id); + result.success("鍒犻櫎鎴愬姛!"); + } + + return result; + } + + /** + * 鎵归噺鍒犻櫎 + * + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result<SysCategory> deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + Result<SysCategory> result = new Result<SysCategory>(); + if (ids == null || "".equals(ids.trim())) { + result.error500("鍙傛暟涓嶈瘑鍒紒"); + } else { + this.sysCategoryService.deleteSysCategory(ids); + result.success("鍒犻櫎鎴愬姛!"); + } + return result; + } + + /** + * 閫氳繃id鏌ヨ + * + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result<SysCategory> queryById(@RequestParam(name = "id", required = true) String id) { + Result<SysCategory> result = new Result<SysCategory>(); + SysCategory sysCategory = sysCategoryService.getById(id); + if (sysCategory == null) { + result.error500("鏈壘鍒板搴斿疄浣�"); + } else { + result.setResult(sysCategory); + result.setSuccess(true); + } + return result; + } + + /** + * 瀵煎嚭excel + * + * @param request + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysCategory sysCategory) { + // Step.1 缁勮鏌ヨ鏉′欢鏌ヨ鏁版嵁 + List<SysCategory> pageList = sysCategoryService.listByParams(sysCategory); + // Step.2 AutoPoi 瀵煎嚭Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + // 杩囨护閫変腑鏁版嵁 + String selections = request.getParameter("selections"); + if (oConvertUtils.isEmpty(selections)) { + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + } else { + List<String> selectionList = Arrays.asList(selections.split(",")); + List<SysCategory> exportList = pageList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); + mv.addObject(NormalExcelConstants.DATA_LIST, exportList); + } + //瀵煎嚭鏂囦欢鍚嶇О + mv.addObject(NormalExcelConstants.FILE_NAME, "鍒嗙被瀛楀吀鍒楄〃"); + mv.addObject(NormalExcelConstants.CLASS, SysCategory.class); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("鍒嗙被瀛楀吀鍒楄〃鏁版嵁", "瀵煎嚭浜�:" + user.getRealname(), "瀵煎嚭淇℃伅")); + return mv; + } + + /** + * 閫氳繃excel瀵煎叆鏁版嵁 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); + // 閿欒淇℃伅 + List<String> errorMessage = new ArrayList<>(); + for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { + // 鑾峰彇涓婁紶鏂囦欢瀵硅薄 + MultipartFile file = entity.getValue(); + ImportParams params = new ImportParams(); + params.setTitleRows(0); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List<SysCategory> listSysCategorys = ExcelImportUtil.importExcel(file.getInputStream(), SysCategory.class, params); + //缁勮鏍戠粨鏋� + List<SysCategory> treeNodes = buildTree(listSysCategorys); + for (SysCategory sysCategory : treeNodes) { + sysCategoryService.deepAdd(sysCategory, errorMessage); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } finally { + try { + file.getInputStream().close(); + } catch (IOException ignored) { + } + } + } + return Result.ok("瀵煎叆鎴愬姛"); + } + + + /** + * 鍔犺浇鍗曚釜鏁版嵁 鐢ㄤ簬鍥炴樉 + */ + @RequestMapping(value = "/loadOne", method = RequestMethod.GET) + public Result<SysCategory> loadOne(@RequestParam(name = "field") String field, @RequestParam(name = "val") String val) { + Result<SysCategory> result = new Result<SysCategory>(); + try { + //update-begin-author:taoyan date:2022-5-6 for: issues/3663 sql娉ㄥ叆闂 + boolean isClassField = SqlInjectionUtil.isClassField(field, SysCategory.class); + if (!isClassField) { + return Result.error("瀛楁鏃犳晥锛岃妫�鏌�!"); + } + //update-end-author:taoyan date:2022-5-6 for: issues/3663 sql娉ㄥ叆闂 + QueryWrapper<SysCategory> query = new QueryWrapper<SysCategory>(); + query.eq(field, val); + List<SysCategory> ls = this.sysCategoryService.list(query); + if (ls == null || ls.size() == 0) { + result.setMessage("鏌ヨ鏃犳灉"); + result.setSuccess(false); + } else if (ls.size() > 1) { + result.setMessage("鏌ヨ鏁版嵁寮傚父,[" + field + "]瀛樺湪澶氫釜鍊�:" + val); + result.setSuccess(false); + } else { + result.setSuccess(true); + result.setResult(ls.get(0)); + } + } catch (Exception e) { + e.printStackTrace(); + result.setMessage(e.getMessage()); + result.setSuccess(false); + } + return result; + } + + /** + * 鍔犺浇鑺傜偣鐨勫瓙鏁版嵁 */ @RequestMapping(value = "/loadTreeChildren", method = RequestMethod.GET) - public Result<List<TreeSelectModel>> loadTreeChildren(@RequestParam(name="pid") String pid) { - Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>(); - try { - List<TreeSelectModel> ls = this.sysCategoryService.queryListByPid(pid); - result.setResult(ls); - result.setSuccess(true); - } catch (Exception e) { - e.printStackTrace(); - result.setMessage(e.getMessage()); - result.setSuccess(false); - } - return result; - } - + public Result<List<TreeSelectModel>> loadTreeChildren(@RequestParam(name = "pid") String pid) { + Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>(); + try { + List<TreeSelectModel> ls = this.sysCategoryService.queryListByPid(pid); + result.setResult(ls); + result.setSuccess(true); + } catch (Exception e) { + e.printStackTrace(); + result.setMessage(e.getMessage()); + result.setSuccess(false); + } + return result; + } + /** - * 鍔犺浇涓�绾ц妭鐐�/濡傛灉鏄悓姝� 鍒欐墍鏈夋暟鎹� + * 鍔犺浇涓�绾ц妭鐐�/濡傛灉鏄悓姝� 鍒欐墍鏈夋暟鎹� */ @RequestMapping(value = "/loadTreeRoot", method = RequestMethod.GET) - public Result<List<TreeSelectModel>> loadTreeRoot(@RequestParam(name="async") Boolean async,@RequestParam(name="pcode") String pcode) { - Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>(); - try { - List<TreeSelectModel> ls = this.sysCategoryService.queryListByCode(pcode); - if(!async) { - loadAllCategoryChildren(ls); - } - result.setResult(ls); - result.setSuccess(true); - } catch (Exception e) { - e.printStackTrace(); - result.setMessage(e.getMessage()); - result.setSuccess(false); - } - return result; - } - + public Result<List<TreeSelectModel>> loadTreeRoot(@RequestParam(name = "async") Boolean async, @RequestParam(name = "pcode") String pcode) { + Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>(); + try { + List<TreeSelectModel> ls = this.sysCategoryService.queryListByCode(pcode); + if (!async) { + loadAllCategoryChildren(ls); + } + result.setResult(ls); + result.setSuccess(true); + } catch (Exception e) { + e.printStackTrace(); + result.setMessage(e.getMessage()); + result.setSuccess(false); + } + return result; + } + /** - * 閫掑綊姹傚瓙鑺傜偣 鍚屾鍔犺浇鐢ㄥ埌 + * 閫掑綊姹傚瓙鑺傜偣 鍚屾鍔犺浇鐢ㄥ埌 */ - private void loadAllCategoryChildren(List<TreeSelectModel> ls) { - for (TreeSelectModel tsm : ls) { - List<TreeSelectModel> temp = this.sysCategoryService.queryListByPid(tsm.getKey()); - if(temp!=null && temp.size()>0) { - tsm.setChildren(temp); - loadAllCategoryChildren(temp); - } - } - } + private void loadAllCategoryChildren(List<TreeSelectModel> ls) { + for (TreeSelectModel tsm : ls) { + List<TreeSelectModel> temp = this.sysCategoryService.queryListByPid(tsm.getKey()); + if (temp != null && temp.size() > 0) { + tsm.setChildren(temp); + loadAllCategoryChildren(temp); + } + } + } - /** - * 鏍¢獙缂栫爜 - * @param pid - * @param code - * @return - */ - @GetMapping(value = "/checkCode") - public Result<?> checkCode(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="code",required = false) String code) { - if(oConvertUtils.isEmpty(code)){ - return Result.error("閿欒,绫诲瀷缂栫爜涓虹┖!"); - } - if(oConvertUtils.isEmpty(pid)){ - return Result.ok(); - } - SysCategory parent = this.sysCategoryService.getById(pid); - if(code.startsWith(parent.getCode())){ - return Result.ok(); - }else{ - return Result.error("缂栫爜涓嶇鍚堣鑼�,椤讳互\""+parent.getCode()+"\"寮�澶�!"); - } - - } + /** + * 鏍¢獙缂栫爜 + * + * @param pid + * @param code + * @return + */ + @GetMapping(value = "/checkCode") + public Result<?> checkCode(@RequestParam(name = "pid", required = false) String pid, @RequestParam(name = "code", required = false) String code) { + if (oConvertUtils.isEmpty(code)) { + return Result.error("閿欒,鍒嗙被缂栫爜涓虹┖!"); + } + SysCategory parent = sysCategoryService.getById(pid); + String rootCode = null; + if (parent != null) { + rootCode = parent.getRootCode(); + } + SysCategory original = sysCategoryService.getByCodeAndRootCode(code, rootCode); + if (original != null) { + return Result.error("缂栫爜宸插瓨鍦�,璇烽噸鏂拌緭鍏�!"); + } + return Result.ok(); + } - /** - * 鍒嗙被瀛楀吀鏍戞帶浠� 鍔犺浇鑺傜偣 - * @param pid - * @param pcode - * @param condition - * @return - */ - @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) - public Result<List<TreeSelectModel>> loadDict(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="pcode",required = false) String pcode, @RequestParam(name="condition",required = false) String condition) { - Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>(); - //pid濡傛灉浼犲�间簡 灏卞拷鐣code鐨勪綔鐢� - if(oConvertUtils.isEmpty(pid)){ - if(oConvertUtils.isEmpty(pcode)){ - result.setSuccess(false); - result.setMessage("鍔犺浇鍒嗙被瀛楀吀鏍戝弬鏁版湁璇�.[null]!"); - return result; - }else{ - if(ISysCategoryService.ROOT_PID_VALUE.equals(pcode)){ - pid = ISysCategoryService.ROOT_PID_VALUE; - }else{ - pid = this.sysCategoryService.queryIdByCode(pcode); - } - if(oConvertUtils.isEmpty(pid)){ - result.setSuccess(false); - result.setMessage("鍔犺浇鍒嗙被瀛楀吀鏍戝弬鏁版湁璇�.[code]!"); - return result; - } - } - } - Map<String, String> query = null; - if(oConvertUtils.isNotEmpty(condition)) { - query = JSON.parseObject(condition, Map.class); - } - List<TreeSelectModel> ls = sysCategoryService.queryListByPid(pid,query); - result.setSuccess(true); - result.setResult(ls); - return result; - } + /** + * 鍒嗙被瀛楀吀鏍戞帶浠� 鍔犺浇鑺傜偣 + * + * @param pid + * @param pcode + * @param condition + * @return + */ + @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) + public Result<List<TreeSelectModel>> loadDict(@RequestParam(name = "pid", required = false) String pid, @RequestParam(name = "pcode", required = false) String pcode, @RequestParam(name = "condition", required = false) String condition) { + Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>(); + //pid濡傛灉浼犲�间簡 灏卞拷鐣code鐨勪綔鐢� + if (oConvertUtils.isEmpty(pid)) { + if (oConvertUtils.isEmpty(pcode)) { + result.setSuccess(false); + result.setMessage("鍔犺浇鍒嗙被瀛楀吀鏍戝弬鏁版湁璇�.[null]!"); + return result; + } else { + if (ISysCategoryService.ROOT_PID_VALUE.equals(pcode)) { + pid = ISysCategoryService.ROOT_PID_VALUE; + } else { + pid = this.sysCategoryService.queryIdByCode(pcode); + } + if (oConvertUtils.isEmpty(pid)) { + result.setSuccess(false); + result.setMessage("鍔犺浇鍒嗙被瀛楀吀鏍戝弬鏁版湁璇�.[code]!"); + return result; + } + } + } + Map<String, String> query = null; + if (oConvertUtils.isNotEmpty(condition)) { + query = JSON.parseObject(condition, Map.class); + } + List<TreeSelectModel> ls = sysCategoryService.queryListByPid(pid, query); + result.setSuccess(true); + result.setResult(ls); + return result; + } - /** - * 鍒嗙被瀛楀吀鎺т欢鏁版嵁鍥炴樉[琛ㄥ崟椤甸潰] - * - * @param ids - * @param delNotExist 鏄惁绉婚櫎涓嶅瓨鍦ㄧ殑椤癸紝榛樿涓簍rue锛岃涓篺alse濡傛灉鏌愪釜key涓嶅瓨鍦ㄦ暟鎹簱涓紝鍒欑洿鎺ヨ繑鍥瀔ey鏈韩 - * @return - */ - @RequestMapping(value = "/loadDictItem", method = RequestMethod.GET) - public Result<List<String>> loadDictItem(@RequestParam(name = "ids") String ids, @RequestParam(name = "delNotExist", required = false, defaultValue = "true") boolean delNotExist) { - Result<List<String>> result = new Result<>(); - // 闈炵┖鍒ゆ柇 - if (StringUtils.isBlank(ids)) { - result.setSuccess(false); - result.setMessage("ids 涓嶈兘涓虹┖"); - return result; - } - // 鏌ヨ鏁版嵁 - List<String> textList = sysCategoryService.loadDictItem(ids, delNotExist); - result.setSuccess(true); - result.setResult(textList); - return result; - } + /** + * 鍒嗙被瀛楀吀鎺т欢鏁版嵁鍥炴樉[琛ㄥ崟椤甸潰] + * + * @param ids + * @param delNotExist 鏄惁绉婚櫎涓嶅瓨鍦ㄧ殑椤癸紝榛樿涓簍rue锛岃涓篺alse濡傛灉鏌愪釜key涓嶅瓨鍦ㄦ暟鎹簱涓紝鍒欑洿鎺ヨ繑鍥瀔ey鏈韩 + * @return + */ + @RequestMapping(value = "/loadDictItem", method = RequestMethod.GET) + public Result<List<String>> loadDictItem(@RequestParam(name = "ids") String ids, @RequestParam(name = "delNotExist", required = false, defaultValue = "true") boolean delNotExist) { + Result<List<String>> result = new Result<>(); + // 闈炵┖鍒ゆ柇 + if (StringUtils.isBlank(ids)) { + result.setSuccess(false); + result.setMessage("ids 涓嶈兘涓虹┖"); + return result; + } + // 鏌ヨ鏁版嵁 + List<String> textList = sysCategoryService.loadDictItem(ids, delNotExist); + result.setSuccess(true); + result.setResult(textList); + return result; + } - /** - * [鍒楄〃椤甸潰]鍔犺浇鍒嗙被瀛楀吀鏁版嵁 鐢ㄤ簬鍊肩殑鏇挎崲 - * @param code - * @return - */ - @RequestMapping(value = "/loadAllData", method = RequestMethod.GET) - public Result<List<DictModel>> loadAllData(@RequestParam(name="code",required = true) String code) { - Result<List<DictModel>> result = new Result<List<DictModel>>(); - LambdaQueryWrapper<SysCategory> query = new LambdaQueryWrapper<SysCategory>(); - if(oConvertUtils.isNotEmpty(code) && !CATEGORY_ROOT_CODE.equals(code)){ - query.likeRight(SysCategory::getCode,code); - } - List<SysCategory> list = this.sysCategoryService.list(query); - if(list==null || list.size()==0) { - result.setMessage("鏃犳暟鎹�,鍙傛暟鏈夎.[code]"); - result.setSuccess(false); - return result; - } - List<DictModel> rdList = new ArrayList<DictModel>(); - for (SysCategory c : list) { - rdList.add(new DictModel(c.getId(),c.getName())); - } - result.setSuccess(true); - result.setResult(rdList); - return result; - } + /** + * [鍒楄〃椤甸潰]鍔犺浇鍒嗙被瀛楀吀鏁版嵁 鐢ㄤ簬鍊肩殑鏇挎崲 + * + * @param code + * @return + */ + @RequestMapping(value = "/loadAllData", method = RequestMethod.GET) + public Result<List<DictModel>> loadAllData(@RequestParam(name = "code", required = true) String code) { + Result<List<DictModel>> result = new Result<List<DictModel>>(); + LambdaQueryWrapper<SysCategory> query = new LambdaQueryWrapper<SysCategory>(); + if (oConvertUtils.isNotEmpty(code) && !CATEGORY_ROOT_CODE.equals(code)) { + query.likeRight(SysCategory::getCode, code); + } + List<SysCategory> list = this.sysCategoryService.list(query); + if (list == null || list.size() == 0) { + result.setMessage("鏃犳暟鎹�,鍙傛暟鏈夎.[code]"); + result.setSuccess(false); + return result; + } + List<DictModel> rdList = new ArrayList<DictModel>(); + for (SysCategory c : list) { + rdList.add(new DictModel(c.getId(), c.getName())); + } + result.setSuccess(true); + result.setResult(rdList); + return result; + } - /** - * 鏍规嵁鐖剁骇id鎵归噺鏌ヨ瀛愯妭鐐� - * @param parentIds - * @return - */ - @GetMapping("/getChildListBatch") - public Result getChildListBatch(@RequestParam("parentIds") String parentIds) { - try { - QueryWrapper<SysCategory> queryWrapper = new QueryWrapper<>(); - List<String> parentIdList = Arrays.asList(parentIds.split(",")); - queryWrapper.in("pid", parentIdList); - List<SysCategory> list = sysCategoryService.list(queryWrapper); - IPage<SysCategory> pageList = new Page<>(1, 10, list.size()); - pageList.setRecords(list); - return Result.OK(pageList); - } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error("鎵归噺鏌ヨ瀛愯妭鐐瑰け璐ワ細" + e.getMessage()); - } - } + /** + * 鏍规嵁鐖剁骇id鎵归噺鏌ヨ瀛愯妭鐐� + * + * @param parentIds + * @return + */ + @GetMapping("/getChildListBatch") + public Result getChildListBatch(@RequestParam("parentIds") String parentIds) { + try { + QueryWrapper<SysCategory> queryWrapper = new QueryWrapper<>(); + List<String> parentIdList = Arrays.asList(parentIds.split(",")); + queryWrapper.in("pid", parentIdList); + List<SysCategory> list = sysCategoryService.list(queryWrapper); + IPage<SysCategory> pageList = new Page<>(1, 10, list.size()); + pageList.setRecords(list); + return Result.OK(pageList); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("鎵归噺鏌ヨ瀛愯妭鐐瑰け璐ワ細" + e.getMessage()); + } + } + + + /** + * 缁勮 鏍戝瀷缁撴瀯 + * + * @param list + * @return + */ + private List<SysCategory> buildTree(List<SysCategory> list) { + //鏍硅妭鐐� + List<SysCategory> rootList = new ArrayList<>(); + //鑺傜偣 Map + Map<String, SysCategory> nodeMap = list.stream().collect(Collectors.toMap(SysCategory::getCode, node -> node)); + + for (SysCategory node : list) { + if (StringUtils.isBlank(node.getParentCode()) || ISysCategoryService.ROOT_PID_VALUE.equals(node.getParentCode())) { + rootList.add(node); + } else { + SysCategory parent = nodeMap.get(node.getParentCode()); + if (parent == null) { + throw new JeecgBootException("鐖惰妭鐐逛笉瀛樺湪锛�" + node.getParentCode()); + } + parent.addChild(node); + } + } + + return rootList; + } } diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java index d7b86e9..e86ba7e 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java @@ -1,6 +1,7 @@ package org.jeecg.modules.system.entity; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; @@ -9,58 +10,93 @@ import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; /** * @Description: 鍒嗙被瀛楀吀 * @Author: jeecg-boot - * @Date: 2019-05-29 + * @Date: 2019-05-29 * @Version: V1.0 */ @Data @TableName("sys_category") -public class SysCategory implements Serializable,Comparable<SysCategory>{ +public class SysCategory implements Serializable { private static final long serialVersionUID = 1L; - - /**涓婚敭*/ - @TableId(type = IdType.ASSIGN_ID) - private java.lang.String id; - /**鐖剁骇鑺傜偣*/ - private java.lang.String pid; - /**绫诲瀷鍚嶇О*/ - @Excel(name = "绫诲瀷鍚嶇О", width = 15) - private java.lang.String name; - /**绫诲瀷缂栫爜*/ - @Excel(name = "绫诲瀷缂栫爜", width = 15) - private java.lang.String code; - /**鍒涘缓浜�*/ - private java.lang.String createBy; - /**鍒涘缓鏃ユ湡*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date createTime; - /**鏇存柊浜�*/ - private java.lang.String updateBy; - /**鏇存柊鏃ユ湡*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date updateTime; - /**鎵�灞為儴闂�*/ - private java.lang.String sysOrgCode; - /**鏄惁鏈夊瓙鑺傜偣*/ - @Excel(name = "鏄惁鏈夊瓙鑺傜偣(1:鏈�)", width = 15) - private java.lang.String hasChild; - @Override - public int compareTo(SysCategory o) { - //姣旇緝鏉′欢鎴戜滑瀹氱殑鏄寜鐓ode鐨勯暱搴﹀崌搴� - // <0锛氬綋鍓嶅璞℃瘮浼犲叆瀵硅薄灏忋�� - // =0锛氬綋鍓嶅璞$瓑浜庝紶鍏ュ璞°�� - // >0锛氬綋鍓嶅璞℃瘮浼犲叆瀵硅薄澶с�� - int s = this.code.length() - o.code.length(); - return s; - } - @Override - public String toString() { - return "SysCategory [code=" + code + ", name=" + name + "]"; - } + /** + * 涓婚敭 + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; + /** + * 鐖剁骇鑺傜偣 + */ + private String pid; + /** + * 绫诲瀷缂栫爜 + */ + @Excel(name = "鍒嗙被缂栫爜", width = 15, orderNum = "1") + private String code; + /** + * 绫诲瀷鍚嶇О + */ + @Excel(name = "鍒嗙被鍚嶇О", width = 15, orderNum = "2") + private String name; + /** + * 鍒涘缓浜� + */ + private String createBy; + /** + * 鍒涘缓鏃ユ湡 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /** + * 鏇存柊浜� + */ + private String updateBy; + /** + * 鏇存柊鏃ユ湡 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + /** + * 鎵�灞為儴闂� + */ + private String sysOrgCode; + /** + * 鏄惁鏈夊瓙鑺傜偣 + */ + private String hasChild; + /** + * 鏍硅妭鐐圭紪鐮� + */ + @Excel(name = "鏍硅妭鐐圭紪鐮�", width = 15, orderNum = "4") + private String rootCode; + /** + * 鎵�鏈夌埗鑺傜偣ID + */ + private String parentIds; + + @TableField(exist = false) + @Excel(name = "鐖惰妭鐐圭紪鐮�", width = 15, orderNum = "3") + private String parentCode; + + @TableField(exist = false) + private List<SysCategory> children; + + @Override + public String toString() { + return "SysCategory [code=" + code + ", name=" + name + "]"; + } + + public void addChild(SysCategory node) { + if (children == null) { + children = new ArrayList<>(); + } + children.add(node); + } } diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java index 3abefa6..5ed953b 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java @@ -3,6 +3,8 @@ import java.util.List; import java.util.Map; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.jeecg.modules.system.entity.SysCategory; @@ -33,6 +35,7 @@ */ @Select("SELECT ID FROM sys_category WHERE CODE = #{code,jdbcType=VARCHAR}") public String queryIdByCode(@Param("code") String code); - + + List<SysCategory> listByParams(@Param(Constants.WRAPPER) QueryWrapper<SysCategory> queryWrapper); } diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysCategoryMapper.xml b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysCategoryMapper.xml index 741670c..da74623 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysCategoryMapper.xml +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysCategoryMapper.xml @@ -32,6 +32,13 @@ </if> </if> </select> + <select id="listByParams" resultType="org.jeecg.modules.system.entity.SysCategory"> + select t.*, p.code as parentCode + from sys_category t + left join sys_category p + on t.pid = p.id + ${ew.customSqlSegment} + </select> </mapper> diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java index 6c8b301..77ff435 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java @@ -11,82 +11,113 @@ /** * @Description: 鍒嗙被瀛楀吀 * @Author: jeecg-boot - * @Date: 2019-05-29 + * @Date: 2019-05-29 * @Version: V1.0 */ public interface ISysCategoryService extends IService<SysCategory> { - /**鏍硅妭鐐圭埗ID鐨勫��*/ - public static final String ROOT_PID_VALUE = "0"; + /** + * 鏍硅妭鐐圭埗ID鐨勫�� + */ + String ROOT_PID_VALUE = "0"; /** * 瀛樺湪瀛愯妭鐐� */ - public static final String HAS_CHILD = "1"; + String HAS_CHILD = "1"; /** * 娣诲姞鍒嗙被瀛楀吀 + * * @param sysCategory */ - void addSysCategory(SysCategory sysCategory); + void addSysCategory(SysCategory sysCategory); /** * 淇敼鍒嗙被瀛楀吀 + * * @param sysCategory */ - void updateSysCategory(SysCategory sysCategory); - - /** + void updateSysCategory(SysCategory sysCategory); + + /** * 鏍规嵁鐖剁骇缂栫爜鍔犺浇鍒嗙被瀛楀吀鐨勬暟鎹� - * @param pcode - * @return + * + * @param pcode + * @return * @throws JeecgBootException - */ - public List<TreeSelectModel> queryListByCode(String pcode) throws JeecgBootException; - - /** - * 鏍规嵁pid鏌ヨ瀛愯妭鐐归泦鍚� - * @param pid - * @return - */ - public List<TreeSelectModel> queryListByPid(String pid); + */ + List<TreeSelectModel> queryListByCode(String pcode) throws JeecgBootException; - /** - * 鏍规嵁pid鏌ヨ瀛愯妭鐐归泦鍚�,鏀寔鏌ヨ鏉′欢 - * @param pid - * @param condition - * @return - */ - public List<TreeSelectModel> queryListByPid(String pid, Map<String,String> condition); + /** + * 鏍规嵁pid鏌ヨ瀛愯妭鐐归泦鍚� + * + * @param pid + * @return + */ + List<TreeSelectModel> queryListByPid(String pid); - /** - * 鏍规嵁code鏌ヨid - * @param code - * @return - */ - public String queryIdByCode(String code); + /** + * 鏍规嵁pid鏌ヨ瀛愯妭鐐归泦鍚�,鏀寔鏌ヨ鏉′欢 + * + * @param pid + * @param condition + * @return + */ + List<TreeSelectModel> queryListByPid(String pid, Map<String, String> condition); - /** - * 鍒犻櫎鑺傜偣鏃跺悓鏃跺垹闄ゅ瓙鑺傜偣鍙婁慨鏀圭埗绾ц妭鐐� - * @param ids - */ - void deleteSysCategory(String ids); + /** + * 鏍规嵁code鏌ヨid + * + * @param code + * @return + */ + String queryIdByCode(String code); - /** - * 鍒嗙被瀛楀吀鎺т欢鏁版嵁鍥炴樉[琛ㄥ崟椤甸潰] - * - * @param ids - * @return - */ - List<String> loadDictItem(String ids); + /** + * 鍒犻櫎鑺傜偣鏃跺悓鏃跺垹闄ゅ瓙鑺傜偣鍙婁慨鏀圭埗绾ц妭鐐� + * + * @param ids + */ + void deleteSysCategory(String ids); - /** - * 鍒嗙被瀛楀吀鎺т欢鏁版嵁鍥炴樉[琛ㄥ崟椤甸潰] - * - * @param ids - * @param delNotExist 鏄惁绉婚櫎涓嶅瓨鍦ㄧ殑椤癸紝璁句负false濡傛灉鏌愪釜key涓嶅瓨鍦ㄦ暟鎹簱涓紝鍒欑洿鎺ヨ繑鍥瀔ey鏈韩 - * @return - */ - List<String> loadDictItem(String ids, boolean delNotExist); + /** + * 鍒嗙被瀛楀吀鎺т欢鏁版嵁鍥炴樉[琛ㄥ崟椤甸潰] + * + * @param ids + * @return + */ + List<String> loadDictItem(String ids); + /** + * 鍒嗙被瀛楀吀鎺т欢鏁版嵁鍥炴樉[琛ㄥ崟椤甸潰] + * + * @param ids + * @param delNotExist 鏄惁绉婚櫎涓嶅瓨鍦ㄧ殑椤癸紝璁句负false濡傛灉鏌愪釜key涓嶅瓨鍦ㄦ暟鎹簱涓紝鍒欑洿鎺ヨ繑鍥瀔ey鏈韩 + * @return + */ + List<String> loadDictItem(String ids, boolean delNotExist); + + /** + * 鍔犺浇鎵�鏈夊垎绫诲瓧鍏� + * + * @param query + * @return + */ + List<SysCategory> listByParams(SysCategory query); + + /** + * 閫掑綊娣诲姞 + * + * @param sysCategory + */ + void deepAdd(SysCategory sysCategory, List<String> errorMessage); + + /** + * 鍙栨煇涓妭鐐逛笅鐨勭紪鐮� + * @param code + * @param rootCode + * @return + */ + SysCategory getByCodeAndRootCode(String code, String rootCode); } 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