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/controller/SysCategoryController.java |  912 ++++++++++++++++++++++++++++----------------------------
 1 files changed, 456 insertions(+), 456 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;
+    }
 
 
 }

--
Gitblit v1.9.3