Kaynağa Gözat

刷数据代码,计算wbs_contract为空的is_type_private_pid

qianxb 1 yıl önce
ebeveyn
işleme
2959ede7d5

+ 27 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SyncPidVO1.java

@@ -0,0 +1,27 @@
+package org.springblade.manager.vo;
+
+import lombok.Data;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2024/3/4 16:58
+ **/
+@Data
+public class SyncPidVO1 {
+    private Long id;
+    private Long wbsId;
+
+    public SyncPidVO1(Long id, String wbsId) {
+        this.id = id;
+        this.wbsId = Long.valueOf(wbsId);
+    }
+
+    public SyncPidVO1(Long id, Long wbsId) {
+        this.id = id;
+        this.wbsId = wbsId;
+    }
+
+    public SyncPidVO1() {
+    }
+}

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -764,4 +764,11 @@ public class WbsTreePrivateController extends BladeController {
         return R.success("分配成功");
     }
 
+    //为wbs_contract中节点没有Pid的查询wbs_private里面对应的PkeyId,如果有对应则设置
+    @GetMapping("/syncPid")
+    public R<String> syncPid(Long projectId){
+        wbsTreePrivateService.syncPid(projectId);
+        return R.success("同步成功");
+    }
+
 }

+ 11 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.java

@@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.dto.WbsTreePrivateDTO3;
-import org.springblade.manager.entity.TableInfo;
-import org.springblade.manager.entity.TextdictInfo;
-import org.springblade.manager.entity.WbsTree;
-import org.springblade.manager.entity.WbsTreePrivate;
+import org.springblade.manager.entity.*;
 import org.springblade.manager.injector.EasyBaseMapper;
 import org.springblade.manager.vo.*;
 
@@ -105,4 +102,14 @@ public interface WbsTreePrivateMapper extends EasyBaseMapper<WbsTreePrivate> {
     List<WbsTreePrivateVO6> getSelectNodes(@Param("ids") List<Long> longs,@Param("projectId") Long projectId);
 
     List<WbsTreeContractVO7> getSelectContractNodes(@Param("ids") List<Long> longs,@Param("projectId") Long projectId);
+
+    List<WbsTreeContract> getContractNode(@Param("projectId") Long projectId);
+
+    List<WbsTreePrivate> getPrivateNode(@Param("projectId") Long projectId);
+
+    int updateContractByPId(@Param("list") List<WbsTreeContract> list);
+
+    WbsTreePrivate getThisForm(@Param("projectId") String projectId,@Param("parentId") Long parentId,@Param("id") Long id);
+
+    List<WbsTreeContract> getcontractAllNode(@Param("projectId") Long projectId);
 }

+ 25 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -323,6 +323,16 @@
         WHERE project_id = #{wbsTreePrivate.projectId}
           and excel_id = #{wbsTreePrivate.excelId}
     </update>
+    <update id="updateContractByPId">
+        <foreach collection="list" item="item" separator=";">
+            update
+            m_wbs_tree_contract
+            set
+            is_type_private_pid = #{item.isTypePrivatePid}
+            where
+            p_key_id = #{item.pKeyId}
+        </foreach>
+    </update>
 
     <select id="lazyTree" resultMap="treeNodeResultMap">
         SELECT
@@ -824,6 +834,21 @@
             #{id}
         </foreach>
     </select>
+    <select id="getContractNode" resultType="org.springblade.manager.entity.WbsTreeContract">
+        select p_key_id,id,wbs_id,contract_id,old_id,is_type_private_pid
+        from m_wbs_tree_contract where project_id = #{projectId} and `type` = 1 and is_deleted = 0 and (is_type_private_pid = -1 or is_type_private_pid is null)
+    </select>
+    <select id="getPrivateNode" resultType="org.springblade.manager.entity.WbsTreePrivate">
+        select p_key_id,id,wbs_id
+        from m_wbs_tree_private where project_id = #{projectId} and `type` = 1 and is_deleted = 0
+    </select>
+    <select id="getThisForm" resultType="org.springblade.manager.entity.WbsTreePrivate">
+        select * from m_wbs_tree_private where project_id = #{projectId} and parent_id = #{parentId} and id = #{id} and is_deleted = 0
+    </select>
+    <select id="getcontractAllNode" resultType="org.springblade.manager.entity.WbsTreeContract">
+        select p_key_id,project_id,contract_id,id,wbs_id,old_id
+        from m_wbs_tree_contract where project_id = #{projectId} and `type` = 1 and is_deleted = 0
+    </select>
 
 
     <delete id="delTabProjectById">

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreePrivateService.java

@@ -95,4 +95,6 @@ public interface IWbsTreePrivateService extends BaseService<WbsTreePrivate> {
     void syncCurrentFormInProject(Long pKeyId);
 
     void syncFormToContractNode(Long projectId, String nodeId, Long primaryKeyId);
+
+    void syncPid(Long projectId);
 }

+ 91 - 32
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -2219,41 +2219,44 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             Map<Long, List<WbsTreeContractVO7>> map = list.stream().collect(Collectors.groupingBy(WbsTreeContractVO7::getIsTypePrivatePid));
             //构造项目级节点的表单 && 构造项目级节点对应合同节点的表单
             for (WbsTreePrivateVO6 aPrivate : privates) {
-                //忽略已经存在的表单
-                if (aPrivate.getFormCount()>0 && aPrivate.getFormIds().contains(form.getId()+"")) {
-                    continue;
-                }
                 WbsTreePrivate pri = new WbsTreePrivate();
-                pri.setPKeyId(SnowFlakeUtil.getId());
-                pri.setId(form.getId());
-                pri.setWbsId(aPrivate.getWbsId());
-                pri.setWbsType(aPrivate.getWbsType());
-                pri.setProjectId(aPrivate.getProjectId());
-                pri.setTenantId(aPrivate.getTenantId());
-                pri.setParentId(aPrivate.getId());
-                pri.setAncestors(aPrivate.getAncestors()+","+aPrivate.getId());
-                pri.setNodeType(1);
-                pri.setNodeName(form.getNodeName());
-                pri.setFullName(form.getFullName());
-                pri.setSort(aPrivate.getFormCount()+1);
-                pri.setType(2);
-                pri.setTableType(form.getTableType());
-                pri.setTableOwner(form.getTableOwner());
-                pri.setInitTableName(form.getInitTableName());
-                if (form.getExcelId() != null){
-                    pri.setIsLinkTable(2);
-                    pri.setExcelId(form.getExcelId());
+                //判断项目级节点下是否存在这样表单,如果项目级下存在这张表单,则项目级就不新增这样表单,但是合同段需要新增
+                if (aPrivate.getFormCount()>0 && aPrivate.getFormIds().contains(form.getId()+"")) {
+                    //存在这张表单,则取出,为项目级信息赋值
+                    WbsTreePrivate wtp = baseMapper.getThisForm(aPrivate.getProjectId(),aPrivate.getId(),form.getId());
+                    BeanUtils.copyProperties(wtp,pri);
                 }else {
-                    pri.setIsLinkTable(1);
+                    pri.setPKeyId(SnowFlakeUtil.getId());
+                    pri.setId(form.getId());
+                    pri.setWbsId(aPrivate.getWbsId());
+                    pri.setWbsType(aPrivate.getWbsType());
+                    pri.setProjectId(aPrivate.getProjectId());
+                    pri.setTenantId(aPrivate.getTenantId());
+                    pri.setParentId(aPrivate.getId());
+                    pri.setAncestors(aPrivate.getAncestors() + "," + aPrivate.getId());
+                    pri.setNodeType(1);
+                    pri.setNodeName(form.getNodeName());
+                    pri.setFullName(form.getFullName());
+                    pri.setSort(aPrivate.getFormCount() + 1);
+                    pri.setType(2);
+                    pri.setTableType(form.getTableType());
+                    pri.setTableOwner(form.getTableOwner());
+                    pri.setInitTableName(form.getInitTableName());
+                    if (form.getExcelId() != null) {
+                        pri.setIsLinkTable(2);
+                        pri.setExcelId(form.getExcelId());
+                    } else {
+                        pri.setIsLinkTable(1);
+                    }
+                    pri.setIsExistForm(0);
+                    pri.setHtmlUrl(form.getHtmlUrl());
+                    pri.setFillRate(form.getFillRate());
+                    pri.setInitTableId(form.getInitTableId());
+                    pri.setIsTabPdf(form.getIsTabPdf());
+                    pri.setTabFileType(form.getTabFileType());
+                    pri.setStatus(1);
+                    projectInsertForm.add(pri);
                 }
-                pri.setIsExistForm(0);
-                pri.setHtmlUrl(form.getHtmlUrl());
-                pri.setFillRate(form.getFillRate());
-                pri.setInitTableId(form.getInitTableId());
-                pri.setIsTabPdf(form.getIsTabPdf());
-                pri.setTabFileType(form.getTabFileType());
-                pri.setStatus(1);
-                projectInsertForm.add(pri);
                 //获取合同段对应节点
                 List<WbsTreeContractVO7> contracts = map.get(aPrivate.getPKeyId());
                 if (contracts == null || contracts.size() == 0){
@@ -2775,5 +2778,61 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             }
         }
     }
+    @Override
+    @Transactional
+    public void syncPid(Long projectId) {
+        // 根据项目id查询出所有的合同节点
+        List<WbsTreeContract> allNode = baseMapper.getcontractAllNode(projectId);
+        // 合同节点按照合同id转换为map
+        Map<String, List<WbsTreeContract>> listMap = allNode.stream().collect(Collectors.groupingBy(WbsTreeContract::getContractId));
+        Map<String,Map<Long,WbsTreeContract>> mapMap = new HashMap<>();
+        // map中为每个合同段的数据,
+        for (String s : listMap.keySet()) {
+            List<WbsTreeContract> list = listMap.get(s);
+            //为id去重
+            list = list.stream()
+                    .collect(Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(WbsTreeContract::getId))),
+                            ArrayList::new));
+            //转换为map key为id
+            Map<Long, WbsTreeContract> map = list.stream().collect(Collectors.toMap(l -> l.getId(), l -> l));
+            mapMap.put(s,map);
+        }
+
+        // 1:先取出wbs_contract表按照项目id搜索,所有不带pid的节点
+        List<WbsTreeContract> contracts = baseMapper.getContractNode(projectId);
+        // 2:再取出wbs_private表按照项目id搜索,所有不带pid的节点
+        List<WbsTreePrivate> privates = baseMapper.getPrivateNode(projectId);
+        Map<SyncPidVO1, Long> map = privates.stream().collect(Collectors.toMap(l -> new SyncPidVO1(l.getId(), l.getWbsId()), l -> l.getPKeyId()));
+        // 3:拿contract的id和wbs_id去搜索private中的
+        for (WbsTreeContract contract : contracts) {
+            // 4:如果存在oldId,就把OldId赋值给id
+            // 如果存在oldId,则直接去map中先查合同段再查id
+            // 知道不存在oldId,然后把id = id
+            if (StringUtils.isNotBlank(contract.getOldId())){
+                Long aLong = Long.valueOf(contract.getOldId());
+                WbsTreeContract wbsTreeContract = mapMap.get(contract.getContractId()).get(aLong);
+                while (wbsTreeContract != null && StringUtils.isNotBlank(wbsTreeContract.getOldId())) {
+                    aLong = Long.valueOf(wbsTreeContract.getOldId());
+                    wbsTreeContract = mapMap.get(wbsTreeContract.getContractId()).get(aLong);
+                }
+                contract.setId(aLong);
+            }
+            //  5: 如果项目中存在,则把private的pId赋值给contract的isPid
+            Long aLong = map.get(new SyncPidVO1(contract.getId(), contract.getWbsId()));
+            if (aLong != null){
+                contract.setIsTypePrivatePid(aLong);
+            }
+        }
+        contracts = contracts.stream().filter(l->l.getIsTypePrivatePid() != null && l.getIsTypePrivatePid() != -1).collect(Collectors.toList());
+        List<List<WbsTreeContract>> lists = CommonUtil.splitList(contracts, 1000);
+        int total=0;
+        for (List<WbsTreeContract> list : lists) {
+            int upTotal = baseMapper.updateContractByPId(list);
+            System.out.println("修改状态:"+upTotal);
+            total++;
+        }
+        System.out.println("总修改量:"+contracts.size());
+        System.out.println("总修改次数:"+total);
+    }
 
 }