瀏覽代碼

中间计量申请关联资料

qianxb 1 年之前
父節點
當前提交
f12dfa0d5a

+ 3 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/WbsFileVO.java

@@ -37,4 +37,7 @@ public class WbsFileVO implements Serializable {
 
     @ApiModelProperty(value = "当前节点名称")
     private String nodeName;
+
+    @ApiModelProperty(value = "父节点id")
+    private Long parentId;
 }

+ 2 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/WbsNodeVO.java

@@ -50,4 +50,6 @@ public class WbsNodeVO implements INode<WbsNodeVO> {
 
     private Integer isData;
     private Long pId;
+    private String ancestors;
+    private String nodeName;
 }

+ 4 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.java

@@ -78,6 +78,8 @@ public interface MiddleMeterApplyMapper extends BaseMapper<MiddleMeterApply> {
 
     List<WbsNodeVO> getAllNode(@Param("contractId") Long contractId);
 
+    List<WbsNodeVO> getAllNode2(@Param("dto") WbsNodeDTO dto);
+
     Set<ChangeTokenForm> getNodeToken(@Param("contractId") Long contractId,@Param("ids") List<Long> ids,@Param("nodeId") Long nodeId,@Param("bDate") String businessDate);
 
     Set<Long> getMiddleIds(@Param("ids") List<Long> ids);
@@ -91,4 +93,6 @@ public interface MiddleMeterApplyMapper extends BaseMapper<MiddleMeterApply> {
     List<WbsFileVO> getNodeData(@Param("ids") List<Long> ids);
 
     List<WbsTreeContract> getAllAncestors(@Param("ids") HashSet<Long> set, @Param("contractId") Long contractId);
+
+    WbsNodeVO getNodeInfo(@Param("pId") Long pId);
 }

+ 15 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml

@@ -222,7 +222,7 @@
         where contract_id = #{contractId} and contract_period_id = #{contractPeriodId} and is_deleted = 0
     </select>
     <select id="getAllNode" resultType="org.springblade.meter.vo.WbsNodeVO">
-        SELECT id,parent_id,p_key_id as pId,
+        SELECT id,parent_id,p_key_id as pId,ancestors,
                (SELECT COUNT(1) from u_information_query uiq WHERE uiq.wbs_id = wtc.p_key_id) as isData
         from m_wbs_tree_contract wtc
         WHERE project_id  = 1630011899725201410 and contract_id = #{contractId} and is_deleted = 0 and type = 1
@@ -244,6 +244,7 @@
                (select node_type from m_wbs_tree_contract wtc where wtc.p_key_id = uiq.wbs_id) as nodeType,
                (select ancestors from m_wbs_tree_contract wtc where wtc.p_key_id = uiq.wbs_id) as ancestors,
                (select node_name from m_wbs_tree_contract wtc where wtc.p_key_id = uiq.wbs_id) as nodeName,
+               (select parent_id from m_wbs_tree_contract wtc where wtc.p_key_id = uiq.wbs_id) as parentId,
                (CASE when status = 0 then '未上报' when status = 1 then '待审批' when status = 2 then '已审批'
                     else '已废除' end) as appStatusName
         from u_information_query uiq
@@ -271,6 +272,19 @@
         </foreach>
         group by id
     </select>
+    <select id="getNodeInfo" resultType="org.springblade.meter.vo.WbsNodeVO">
+        SELECT id,parent_id,p_key_id as pId,
+               (SELECT COUNT(1) from u_information_query uiq WHERE uiq.wbs_id = wtc.p_key_id) as isData
+        from m_wbs_tree_contract wtc where wtc.p_key_id = #{pId}
+    </select>
+    <select id="getAllNode2" resultType="org.springblade.meter.vo.WbsNodeVO">
+        SELECT id,parent_id,p_key_id as pId,ancestors,node_name,
+               (SELECT COUNT(1) from u_information_query uiq WHERE uiq.wbs_id = wtc.p_key_id) as isData
+        from m_wbs_tree_contract wtc
+        WHERE project_id  = #{dto.projectId} and contract_id = #{dto.contractId} and is_deleted = 0 and type = 1
+        group by id
+        order by sort,create_time
+    </select>
 
 
 </mapper>

+ 64 - 17
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

@@ -128,7 +128,7 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
             //设置其他计量总数
             vo.setOtherMeterTotal(vo.getAllMeterTotal().subtract(vo.getCurrentMeterTotal()));
             //设置施工图数量是否大于合同数量
-            vo.setIsBuildThanContract(vo.getChangeTotal().compareTo(vo.getContainChangeTotal()) == 1?1:0);
+            vo.setIsBuildThanContract(vo.getChangeTotal().compareTo(vo.getContractChangeAllTotal()) == 1?1:0);
         }
         return vos;
     }
@@ -582,11 +582,20 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
     @Override
     public String test() {
         Long contractId = 1632993681739259906L;
-        //获取当前合同下所以计量单元
+        Long pId = 1644218999308812288L;
+        //获取点击的WBS节点
+        WbsNodeVO masterId = baseMapper.getNodeInfo(pId);
+        //获取当前合同下所有节点
         List<WbsNodeVO> vos = baseMapper.getAllNode(contractId);
+//        Map<Long, WbsNodeVO> map = vos.stream().collect(Collectors.toMap(l -> l.getId(), l -> l));
+        Map<Long, List<WbsNodeVO>> map = vos.stream().collect(Collectors.groupingBy(WbsNodeVO::getParentId));
+        //获取点击节点的所有子节点
+        List<WbsNodeVO> list7 = new ArrayList<>();
+        list7.add(masterId);
+        this.getAllChild(masterId,map,list7);
         //转换为树
         Long l1 = System.currentTimeMillis();
-        List<WbsNodeVO> list = ForestNodeMerger.merge(vos);
+        List<WbsNodeVO> list = ForestNodeMerger.merge(list7);
         Long l2 = System.currentTimeMillis();
         System.out.println("----------------------");
         System.out.println(l2-l1);
@@ -607,6 +616,24 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
         System.out.println(l4-l3);
         return "";
     }
+    //传入一个节点,重新计算祖级节点
+    void resetAncestor(WbsNodeVO vo, Map<Long, WbsNodeVO> map ,StringBuilder str){
+        if (!vo.getAncestors().contains(vo.getParentId()+"")){
+            resetAncestor(map.get(vo.getParentId()),map,str);
+        }else {
+            str.append(vo.getAncestors()+","+vo.getId());
+        }
+    }
+    //根据首节点,组建所有子节点
+    void getAllChild(WbsNodeVO vo,Map<Long, List<WbsNodeVO>> map,List<WbsNodeVO> list){
+        List<WbsNodeVO> vos = map.get(vo.getId());
+        if (vos != null && vos.size() != 0){
+            list.addAll(vos);
+            for (WbsNodeVO nodeVO : vos) {
+                getAllChild(nodeVO,map,list);
+            }
+        }
+    }
 
     /**
      * 获取当前节点下,当期未被计量的所有清单
@@ -636,25 +663,36 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
         if (dto.getContractIdRelation() != null){
             dto.setContractId(dto.getContractIdRelation());
         }
+        //获取点击的WBS节点
+        WbsNodeVO masterId = baseMapper.getNodeInfo(dto.getNodeId());
         Integer current = dto.getCurrent();
         Integer size = dto.getSize();
         Integer start = (current-1) * size;
         Integer end = current * size;
-        //获取当前合同节点下所有子节点
-        List<WbsNodeVO> vos = baseMapper.getAllChildNode(dto);
-        List<WbsNodeVO> list = ForestNodeMerger.merge(vos);
-        List<WbsNodeVO> list2 = new ArrayList<>();
-        for (WbsNodeVO vo : list) {
-            if (vo.getId().equals(dto.getNodeId())){
-                list2.add(vo);
-                break;
-            }
-        }
-        if (list2.size() == 0){
+        //获取当前合同节点下所有节点
+//        List<WbsNodeVO> vos = baseMapper.getAllChildNode(dto);
+        //获取当前合同下所有节点
+        List<WbsNodeVO> vos = baseMapper.getAllNode2(dto);
+        Map<Long, WbsNodeVO> map2 = vos.stream().collect(Collectors.toMap(l -> l.getId(), l -> l));
+        Map<Long, List<WbsNodeVO>> map3 = vos.stream().collect(Collectors.groupingBy(WbsNodeVO::getParentId));
+        //获取点击节点的所有子节点
+        List<WbsNodeVO> list7 = new ArrayList<>();
+        list7.add(masterId);
+        this.getAllChild(masterId,map3,list7);
+
+        List<WbsNodeVO> list = ForestNodeMerger.merge(list7);
+//        List<WbsNodeVO> list2 = new ArrayList<>();
+//        for (WbsNodeVO vo : list) {
+//            if (vo.getId().equals(dto.getNodeId())){
+//                list2.add(vo);
+//                break;
+//            }
+//        }
+        if (list.size() == 0){
             throw new ServiceException("获取首节点错误");
         }
         List<Long> ids = new ArrayList<>();
-        gatherSortNode2(list2, ids);
+        gatherSortNode2(list, ids);
         IPage<WbsFileVO> iPage = new Page<WbsFileVO>(current,size);
         iPage.setTotal(ids.size());
         if (ids.size() == 0){
@@ -697,10 +735,19 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
                     if (vo.getNodeType() == 6) {
                         for (Long aLong : longList) {
                             WbsTreeContract info = map.get(aLong);
-                            str2.append(info.getNodeName() + "/");
-                            if (info.getNodeType() == 4) {
+                            if (info == null){
+                                WbsNodeVO nodeVO = map2.get(vo.getParentId());
+                                str2.append(nodeVO.getNodeName() + "/");
+                                nodeVO = map2.get(nodeVO.getParentId());
+                                str2.append(nodeVO.getNodeName() + "/");
                                 break;
+                            }else {
+                                str2.append(info.getNodeName() + "/");
+                                if (info.getNodeType() == 4) {
+                                    break;
+                                }
                             }
+
                         }
                         str2.deleteCharAt(str2.length() - 1);
                     } else {