From 23855599412c4d61b38d78f0f3abd3430a48b5b1 Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期三, 25 六月 2025 11:51:38 +0800
Subject: [PATCH] Merge branch 'mdc_hyjs_master'

---
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java |  517 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 517 insertions(+), 0 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
new file mode 100644
index 0000000..90d9e49
--- /dev/null
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java
@@ -0,0 +1,517 @@
+package org.jeecg.modules.system.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.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.SqlInjectionUtil;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.system.entity.SysCategory;
+import org.jeecg.modules.system.model.TreeSelectModel;
+import org.jeecg.modules.system.service.ISysCategoryService;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+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
+ * @Version: V1.0
+ */
+@RestController
+@RequestMapping("/sys/category")
+@Slf4j
+public class SysCategoryController {
+    @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 = 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;
+    }
+
+    /**
+     * 鍔犺浇涓�绾ц妭鐐�/濡傛灉鏄悓姝� 鍒欐墍鏈夋暟鎹�
+     */
+    @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;
+    }
+
+    /**
+     * 閫掑綊姹傚瓙鑺傜偣 鍚屾鍔犺浇鐢ㄥ埌
+     */
+    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("閿欒,鍒嗙被缂栫爜涓虹┖!");
+        }
+        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 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;
+    }
+
+    /**
+     * 鏍规嵁鐖剁骇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