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