From 40b5c43c55e5b42dc9ee07485017cbe030e2a894 Mon Sep 17 00:00:00 2001 From: mashuai Date: Fri, 15 Nov 2024 15:13:15 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=80=E6=96=99=E6=8E=A5=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/biz/domain/ProjectTreeBuild.java | 77 ++++++++++ .../common/biz/domain/ProjectTreeNode.java | 27 ++++ .../material/common/mapper/SelectMapper.java | 5 +- .../service/impl/SelectServiceImpl.java | 45 ++++-- .../mapper/material/common/SelectMapper.xml | 144 ++++++++++++++---- .../material/purchase/PurchaseBindMapper.xml | 2 +- 6 files changed, 254 insertions(+), 46 deletions(-) create mode 100644 bonus-common-biz/src/main/java/com/bonus/common/biz/domain/ProjectTreeBuild.java create mode 100644 bonus-common-biz/src/main/java/com/bonus/common/biz/domain/ProjectTreeNode.java diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/ProjectTreeBuild.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/ProjectTreeBuild.java new file mode 100644 index 00000000..3c6cd776 --- /dev/null +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/ProjectTreeBuild.java @@ -0,0 +1,77 @@ +package com.bonus.common.biz.domain; + +import java.util.ArrayList; +import java.util.List; + +/** + * 单位、工程树构建 + * @author ma_sh + */ +public class ProjectTreeBuild { + + public List nodeList = new ArrayList<>(); + + /** + * 构造方法 + * @param nodeList 将数据集合赋值给nodeList,即所有数据作为所有节点。 + */ + public ProjectTreeBuild(List nodeList) { + this.nodeList = nodeList; + } + + /** + * 获取需构建的所有根节点(顶级节点) "0" + * @return 所有根节点List集合 + */ + public List getRootNode() { + // 保存所有根节点(所有根节点的数据) + List rootNodeList = new ArrayList<>(); + // treeNode:查询出的每一条数据(节点) + for (ProjectTreeNode treeNode : nodeList){ + // 判断当前节点是否为根节点,此处注意:若parentId类型是String,则要采用equals()方法判断。 + if ("0".equals(treeNode.getParentId())) { + // 是,添加 + rootNodeList.add(treeNode); + } + } + return rootNodeList; + } + + /** + * 根据每一个顶级节点(根节点)进行构建树形结构 + * @return 构建整棵树 + */ + public List buildTree(){ + // treeNodes:保存一个顶级节点所构建出来的完整树形 + List treeNodes = new ArrayList(); + // getRootNode():获取所有的根节点 + for (ProjectTreeNode treeRootNode : getRootNode()) { + // 将顶级节点进行构建子树 + treeRootNode = buildChildTree(treeRootNode); + // 完成一个顶级节点所构建的树形,增加进来 + treeNodes.add(treeRootNode); + } + return treeNodes; + } + + /** + * 递归-----构建子树形结构 + * @param pNode 根节点(顶级节点) + * @return 整棵树 + */ + public ProjectTreeNode buildChildTree(ProjectTreeNode pNode){ + List childTree = new ArrayList<>(); + // nodeList:所有节点集合(所有数据) + for (ProjectTreeNode treeNode : nodeList) { + // 判断当前节点的父节点ID是否等于根节点的ID,即当前节点为其下的子节点 + if (treeNode.getParentId().equals(pNode.getId())) { + // 再递归进行判断当前节点的情况,调用自身方法 + childTree.add(buildChildTree(treeNode)); + } + } + // for循环结束,即节点下没有任何节点,树形构建结束,设置树结果 + pNode.setChildren(childTree); + return pNode; + } + +} diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/ProjectTreeNode.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/ProjectTreeNode.java new file mode 100644 index 00000000..31723a48 --- /dev/null +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/ProjectTreeNode.java @@ -0,0 +1,27 @@ +package com.bonus.common.biz.domain; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * 单位、工程节点返回实体类 + * @author ma_sh + */ +@Data +public class ProjectTreeNode { + + private String id; + + private String name; + + private String parentId; + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private String level; + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children = new ArrayList<>(); +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/mapper/SelectMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/mapper/SelectMapper.java index 6340dc38..1cdea8ee 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/mapper/SelectMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/mapper/SelectMapper.java @@ -1,5 +1,6 @@ package com.bonus.material.common.mapper; +import com.bonus.common.biz.domain.ProjectTreeNode; import com.bonus.common.biz.domain.TreeNode; import com.bonus.common.biz.domain.TypeTreeNode; import com.bonus.material.back.domain.BackApplyInfo; @@ -25,7 +26,7 @@ public interface SelectMapper { * @author cwchen * @date 2023/12/20 14:23 */ - List getUnitList(BmUnit bmUnit); + List getUnitList(BmUnit bmUnit); /** * 工程下拉选 @@ -35,7 +36,7 @@ public interface SelectMapper { * @author cwchen * @date 2023/12/20 15:05 */ - List getProjectList(BmProject bmProject); + List getProjectList(BmProject bmProject); /** * 机具类型下拉选 diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/service/impl/SelectServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/service/impl/SelectServiceImpl.java index 2424a0c9..caf997d7 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/service/impl/SelectServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/common/service/impl/SelectServiceImpl.java @@ -1,10 +1,6 @@ package com.bonus.material.common.service.impl; -import com.bonus.common.biz.constant.GlobalConstants; -import com.bonus.common.biz.domain.TreeBuild; -import com.bonus.common.biz.domain.TreeNode; -import com.bonus.common.biz.domain.TypeTreeBuild; -import com.bonus.common.biz.domain.TypeTreeNode; +import com.bonus.common.biz.domain.*; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.material.back.domain.BackApplyInfo; import com.bonus.material.basic.domain.BmProject; @@ -33,27 +29,50 @@ public class SelectServiceImpl implements SelectService { @Resource(name = "SelectMapper") private SelectMapper mapper; + /** + * 单位下拉类型树 + * @param bmUnit + * @return + */ @Override public AjaxResult getUnitList(BmUnit bmUnit) { - List list = new ArrayList<>(); + List groupList = new ArrayList<>(); + List list = new ArrayList<>(); try { list = mapper.getUnitList(bmUnit); + if (CollectionUtils.isNotEmpty(list)) { + // 创建树形结构(数据集合作为参数) + ProjectTreeBuild treeBuild = new ProjectTreeBuild(list); + // 原查询结果转换树形结构 + groupList = treeBuild.buildTree(); + } } catch (Exception e) { - log.error("往来单位-查询失败", e); + log.error("单位类型树-查询失败", e); } - return AjaxResult.success(list); + return AjaxResult.success(groupList); } + /** + * 工程类型树 + * @param bmProject + * @return + */ @Override public AjaxResult getProjectList(BmProject bmProject) { + List groupList = new ArrayList<>(); + List list = new ArrayList<>(); try { - List list = mapper.getProjectList(bmProject); - list.removeIf(item -> item == null); - return AjaxResult.success(list); + list = mapper.getProjectList(bmProject); + if (CollectionUtils.isNotEmpty(list)) { + // 创建树形结构(数据集合作为参数) + ProjectTreeBuild treeBuild = new ProjectTreeBuild(list); + // 原查询结果转换树形结构 + groupList = treeBuild.buildTree(); + } } catch (Exception e) { - log.error("工程-查询失败", e); + log.error("工程类型树-查询失败", e); } - return AjaxResult.success(); + return AjaxResult.success(groupList); } @Override diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/common/SelectMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/common/SelectMapper.xml index f44d948e..23b59a78 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/common/SelectMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/common/SelectMapper.xml @@ -4,42 +4,76 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - /*根据标段工程id关联协议查询往来单位*/ + SELECT + * + FROM + ( + SELECT + CONCAT( 'dw', sd.dept_id ) AS id, + sd.dept_name AS NAME, + 0 AS parentId, + 1 AS LEVEL + FROM + sys_dept sd + LEFT JOIN bm_unit bu ON sd.dept_id = bu.dept_id + LEFT JOIN bm_agreement_info bai ON bu.unit_id = bai.unit_id + AND bai.`status` = '1' + LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id + AND bp.del_flag = '0' + WHERE + bu.del_flag = '0' + AND sd.del_flag = '0' + AND sd.`status` = '0' - SELECT DISTINCT bu.unit_id AS unitId, - bu.unit_name AS unitName - FROM bm_project bpl - LEFT JOIN bm_agreement_info bai ON bpl.pro_id = bai.project_id AND bai.`status` = '1' - LEFT JOIN bm_unit bu ON bai.unit_id = bu.unit_id AND bu.del_flag = '0' - WHERE bpl.pro_id = #{projectId} AND bpl.del_flag = '0' + AND bp.pro_id = #{projectId} - - SELECT unit_id AS unitId, - unit_name AS unitName - FROM bm_unit - WHERE del_flag = '0' + UNION + SELECT DISTINCT + CONCAT( 'lx', bu.dept_id, '-', sda.dict_code ) AS id, + sda.dict_label AS NAME, + CONCAT( 'dw', bu.dept_id ) AS parentId, + 2 AS LEVEL + FROM + bm_unit bu + LEFT JOIN sys_dict_data sda ON bu.type_id = sda.dict_value + AND sda.dict_type = 'bm_unit_type' + LEFT JOIN bm_agreement_info bai ON bu.unit_id = bai.unit_id + AND bai.`status` = '1' + LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id + AND bp.del_flag = '0' + WHERE + bu.del_flag = '0' + AND sda.STATUS = '0' + + AND bp.pro_id = #{projectId} + UNION + SELECT + bu.unit_id AS id, + bu.unit_name AS NAME, + CONCAT( 'lx', bu.dept_id, '-', sda.dict_code ) AS parentId, + 3 AS LEVEL + FROM + bm_unit bu + LEFT JOIN sys_dict_data sda ON bu.type_id = sda.dict_value + AND sda.dict_type = 'bm_unit_type' + LEFT JOIN bm_agreement_info bai ON bu.unit_id = bai.unit_id + AND bai.`status` = '1' + LEFT JOIN bm_project bp ON bai.project_id = bp.pro_id + AND bp.del_flag = '0' + WHERE + bu.del_flag = '0' + AND sda.STATUS = '0' + + AND bp.pro_id = #{projectId} + + ) ff + ORDER BY + LEVEL - - + + \ No newline at end of file diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseBindMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseBindMapper.xml index 2826b558..13eec91a 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseBindMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseBindMapper.xml @@ -88,7 +88,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" UPDATE purchase_check_details - SET bind_num = bind_num + COALESCE(#{num}, 0) + SET bind_num = COALESCE(bind_num, 0) + COALESCE(#{num}, 0) WHERE task_id = #{dto.taskId} AND type_id = #{dto.typeId} AND #{num} IS NOT NULL