From 3c9825aea86e47b84a021fc94ba1ed01fc82652b Mon Sep 17 00:00:00 2001 From: caihaohan Date: Tue, 6 Aug 2024 16:43:43 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AD=97=E5=85=B8=E5=AD=97=E6=AE=B5lomb?= =?UTF-8?q?ok=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/system/entity/SysDictItem.java | 4 +- .../jero/modules/system/service/TreeNode.java | 4 +- .../service/impl/LawsCommonServiceImpl.java | 86 ++++++++++++++++++- .../modules/laws/common/util/ImportUtil.java | 4 +- .../controller/LawsDictTreeController.java | 58 +++++++++++++ .../laws/standard/entity/PartName.java | 4 +- .../laws/standard/entity/TreePage.java | 6 +- .../standard/service/DictTreeService.java | 32 +++++++ .../service/impl/PartNameServiceImpl.java | 3 +- 9 files changed, 187 insertions(+), 14 deletions(-) create mode 100644 laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsDictTreeController.java create mode 100644 laws-modules/src/main/java/com/jero/modules/laws/standard/service/DictTreeService.java diff --git a/laws-module-system/src/main/java/com/jero/modules/system/entity/SysDictItem.java b/laws-module-system/src/main/java/com/jero/modules/system/entity/SysDictItem.java index b9f0ed02..45cb2ac5 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/entity/SysDictItem.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/entity/SysDictItem.java @@ -179,12 +179,12 @@ public class SysDictItem implements TreeNode { private List childrenList; @Override - public String getTreeNodeId() { + public String obtainTreeNodeId() { return id; } @Override - public String getTreeNodeParentId() { + public String obtainTreeNodeParentId() { return parentId; } } diff --git a/laws-module-system/src/main/java/com/jero/modules/system/service/TreeNode.java b/laws-module-system/src/main/java/com/jero/modules/system/service/TreeNode.java index 9ae87011..ac8e2543 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/service/TreeNode.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/service/TreeNode.java @@ -1,6 +1,6 @@ package com.jero.modules.system.service; public interface TreeNode { - String getTreeNodeId(); // 返回节点的唯一标识 - String getTreeNodeParentId(); // 返回父节点的唯一标识 + String obtainTreeNodeId(); // 返回节点的唯一标识 + String obtainTreeNodeParentId(); // 返回父节点的唯一标识 } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java index d3836abc..74c57c9d 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java @@ -2239,7 +2239,7 @@ public class LawsCommonServiceImpl implements ILawsCommonService { } // 如果value不为null和"",则拼接查询条件 if (StringUtils.isNotBlank(value)) { - jointSelectCondition(fieldList, selectCondition, key, value, tableName); + jointSelectCondition(fieldList, selectCondition, key, value, tableName, parameterMap); } } @@ -2279,6 +2279,79 @@ public class LawsCommonServiceImpl implements ILawsCommonService { return selectCondition.toString(); } + @NotNull + private String getTreeFatherChild(String tableName, String key, String value, String dicId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysDictItem::getDictId, dicId); + wrapper.eq(SysDictItem::getItemValue, value); + SysDictItem targetNode = sysDictItemService.getOne(wrapper); + List resultNodeList = new ArrayList<>(); + // 获取所有数据 + wrapper.clear(); + wrapper.eq(SysDictItem::getDictId, dicId); + List allNodeList = sysDictItemService.list(wrapper); + TreePage treePage = new TreePage<>(); + treePage.setRecords(allNodeList); + // 获取当前 + Set allChildren = treePage.findAllChildren(allNodeList, targetNode); + Set pathToRoot = treePage.findPathToRoot(allNodeList, targetNode); + resultNodeList.addAll(allChildren); + resultNodeList.addAll(pathToRoot); + + if (resultNodeList.isEmpty()) { + return ""; + } + + List valueList = resultNodeList.stream().map(SysDictItem::getItemValue).collect(Collectors.toList()); + + StringBuilder sql = new StringBuilder(" AND ("); + for (int i = 0; i < valueList.size(); i++) { + sql.append("FIND_IN_SET('").append(valueList.get(i)) + .append("', ").append(tableName).append(".").append(key).append(")"); + if (i < valueList.size() - 1) { + sql.append(" OR "); + } + } + sql.append(")"); + + return sql.toString(); + } + + @NotNull + private String getTreeChild(String tableName, String key, String value, String dicId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysDictItem::getDictId, dicId); + wrapper.eq(SysDictItem::getItemValue, value); + SysDictItem targetNode = sysDictItemService.getOne(wrapper); + // 获取整颗零部件树 + wrapper.clear(); + wrapper.eq(SysDictItem::getDictId, dicId); + List allNodeList = sysDictItemService.list(wrapper); + TreePage treePage = new TreePage<>(); + treePage.setRecords(allNodeList); + // 获取当前 + Set allChildren = treePage.findAllChildren(allNodeList, targetNode); + List resultNodeList = new ArrayList<>(allChildren); + + if (resultNodeList.isEmpty()) { + return ""; + } + + List valueList = resultNodeList.stream().map(SysDictItem::getItemValue).collect(Collectors.toList()); + + StringBuilder sql = new StringBuilder(" AND ("); + for (int i = 0; i < valueList.size(); i++) { + sql.append("FIND_IN_SET('").append(valueList.get(i)) + .append("', ").append(tableName).append(".").append(key).append(")"); + if (i < valueList.size() - 1) { + sql.append(" OR "); + } + } + sql.append(")"); + + return sql.toString(); + } + @NotNull private List getLawsPartNameStandard(String partName) { PartName targetNode = partNameService.getById(partName); @@ -2384,7 +2457,8 @@ public class LawsCommonServiceImpl implements ILawsCommonService { * @Date: 2023/8/25 10:58 * @Description: 拼接查询条件 **/ - private void jointSelectCondition(List fieldList, StringBuilder selectCondition, String key, String value, String tableName) { + private void jointSelectCondition(List fieldList, StringBuilder selectCondition, String key, String value, + String tableName, Map parameterMap) { for (LawsTag lawsTag : fieldList) { String dbFieldName = lawsTag.getDbFieldName(); if (Objects.equals(key, "standard_state")) { @@ -2414,6 +2488,14 @@ public class LawsCommonServiceImpl implements ILawsCommonService { } else if (LawsFieldTypeEnum.DATE_MANY.getValue().equals(fieldShowType)) { // 多日期查询 processDateManyTypeCondition(selectCondition, key, value); + }else if (FieldShowTypeEnum.TREE_FATHER_CHILD.getValue().equals(fieldShowType)) { + String sql = getTreeFatherChild(tableName, key, value, lawsTag.getDictId()); + selectCondition.append(sql); + parameterMap.remove(key); + } else if (FieldShowTypeEnum.TREE_CHILD.getValue().equals(fieldShowType)) { + String sql = getTreeChild(tableName, key, value, lawsTag.getDictId()); + selectCondition.append(sql); + parameterMap.remove(key); } // 处理其他类型 } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/util/ImportUtil.java b/laws-modules/src/main/java/com/jero/modules/laws/common/util/ImportUtil.java index 83b1b038..7d7944ea 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/util/ImportUtil.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/util/ImportUtil.java @@ -347,7 +347,9 @@ public class ImportUtil { // 树形单选 if ((FieldShowTypeEnum.TREE_STRUCTURE_SINGLE_SELECT.getValue().equals(tag.getFieldShowType()) || - FieldShowTypeEnum.TREE_STRUCTURE_MULTI_SELECT.getValue().equals(tag.getFieldShowType())) && + FieldShowTypeEnum.TREE_STRUCTURE_MULTI_SELECT.getValue().equals(tag.getFieldShowType()) || + FieldShowTypeEnum.TREE_FATHER_CHILD.getValue().equals(tag.getFieldShowType()) || + FieldShowTypeEnum.TREE_CHILD.getValue().equals(tag.getFieldShowType())) && (!FieldCommon.STANDARD_SYSTEM.equals(tag.getDbFieldName())) ) { // 根据tag找到dictCode diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsDictTreeController.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsDictTreeController.java new file mode 100644 index 00000000..c19eca37 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsDictTreeController.java @@ -0,0 +1,58 @@ +package com.jero.modules.laws.standard.controller; + +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.modules.laws.standard.entity.TreePage; +import com.jero.modules.laws.standard.service.DictTreeService; +import com.jero.modules.system.entity.SysDictItem; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * @author: Mzaxd + * @Date: 2024/1/19 10:42 + */ +@Api(tags = "树形结构") +@RestController +@RequestMapping("/laws/dictTree") +@Slf4j +public class LawsDictTreeController { + + @Resource + private DictTreeService dictTreeService; + + @AutoLog(value = "树形结构-获取一级树") + @ApiOperation(value = "树形结构-零部件树", notes = "树形结构-零部件树") + @GetMapping("/page") + public Result> queryTreeList( + @RequestParam(name = "nodeName", required = false, defaultValue = "") @ApiParam("一级节点名称") String nodeName, + @RequestParam(name = "pageNo", defaultValue = "1") @ApiParam("页码") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") @ApiParam("页面大小") Integer pageSize) { + TreePage list = dictTreeService.queryTreeList(nodeName, pageNo, pageSize); + return Result.OK(list); + } + + @AutoLog(value = "树形结构-零部件树选中回显") + @ApiOperation(value = "树形结构-零部件树选中回显", notes = "树形结构-零部件树选中回显") + @PostMapping("/echo") + public Result> queryEcho(@RequestBody Map selectNodeCodes) { + List list = dictTreeService.queryEcho(selectNodeCodes.get("selectNodeCodes")); + return Result.OK(list); + } + + @AutoLog(value = "树形结构-零部件树历史数据处理") + @ApiOperation(value = "树形结构-零部件树历史数据处理", notes = "树形结构-零部件树历史数据处理") + @GetMapping("/getChild") + public Result> getChild(@RequestParam("dictItemId") String dictItemId) { + return Result.OK(dictTreeService.getChild(dictItemId)); + } + + +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/PartName.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/PartName.java index 9df999e9..ae4a5059 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/PartName.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/PartName.java @@ -115,11 +115,11 @@ public class PartName implements Serializable, TreeNode { private String levelPath; @Override - public String getTreeNodeId() { + public String obtainTreeNodeId() { return code; } - public String getTreeNodeParentId() { + public String obtainTreeNodeParentId() { return parentCode; } } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/TreePage.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/TreePage.java index 02896fae..1c846c31 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/TreePage.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/TreePage.java @@ -24,9 +24,9 @@ public class TreePage { T current = node; while (current != null) { pathNodes.add(current); - String parentCode = current.getTreeNodeParentId(); + String parentCode = current.obtainTreeNodeParentId(); current = allNodes.stream() - .filter(n -> n.getTreeNodeId().equals(parentCode)) + .filter(n -> n.obtainTreeNodeId().equals(parentCode)) .findFirst().orElse(null); } return pathNodes; @@ -36,7 +36,7 @@ public class TreePage { public Set findAllChildren(List allNodes, T node) { Set childrenSet = new HashSet<>(); List directChildren = allNodes.stream() - .filter(n -> n.getTreeNodeParentId().equals(node.getTreeNodeId())) + .filter(n -> n.obtainTreeNodeParentId().equals(node.obtainTreeNodeId())) .collect(Collectors.toList()); for (T child : directChildren) { diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/DictTreeService.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/DictTreeService.java new file mode 100644 index 00000000..c723d8f2 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/DictTreeService.java @@ -0,0 +1,32 @@ +package com.jero.modules.laws.standard.service; + +import com.jero.modules.laws.standard.entity.TreePage; +import com.jero.modules.system.entity.SysDictItem; +import com.jero.modules.system.service.ISysDictItemService; +import com.jero.modules.system.service.ISysDictService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class DictTreeService { + + @Resource + private ISysDictService dictService; + + @Resource + private ISysDictItemService dictItemService; + + public TreePage queryTreeList(String nodeName, Integer pageNo, Integer pageSize) { + return null; + } + + public List queryEcho(String selectNodeCodes) { + return null; + } + + public List getChild(String dictItemId) { + return null; + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/PartNameServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/PartNameServiceImpl.java index 525aa202..6673c99f 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/PartNameServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/PartNameServiceImpl.java @@ -131,8 +131,7 @@ public class PartNameServiceImpl extends ServiceImpl public List queryEcho(String selectNodeCodes) { List codeList = StrUtil.split(selectNodeCodes, ','); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PartName::getDelFlag, YesOrNoEnum.NO.getValue()) - .in(PartName::getCode, codeList); + queryWrapper.in(PartName::getCode, codeList); return partNameMapper.selectList(queryWrapper); }