Procházet zdrojové kódy

电签默认信息同步bug

liuyc před 2 roky
rodič
revize
8295915a6b

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

@@ -481,24 +481,37 @@
 
     <select id="selectNodeAndTable" resultType="org.springblade.manager.entity.WbsTreePrivate">
         SELECT * FROM m_wbs_tree_private
-        WHERE (
-        type = 1
+        WHERE
+        (
+            type = 1
         <if test="id != null and id != ''">
             AND id = #{id}
         </if>
-        AND project_id = #{referencePrivateWbsProjectId}
-        AND wbs_id = #{wbsId}
-        AND STATUS = 1
-        AND is_deleted = 0)
-        OR (
-        type = 2
+            AND project_id = #{referencePrivateWbsProjectId}
+            AND wbs_id = #{wbsId}
+            AND STATUS = 1
+            AND is_deleted = 0
+        )
+        OR
+        (
+            type = 2
         <if test="id != null and id != ''">
             parent_id = #{id}
         </if>
-        AND project_id = #{referencePrivateWbsProjectId}
-        AND wbs_id = #{wbsId}
-        AND STATUS = 1
-        AND is_deleted = 0)
+            AND project_id = #{referencePrivateWbsProjectId}
+            AND wbs_id = #{wbsId}
+            AND STATUS = 1
+            AND is_deleted = 0
+        )
+        OR
+        (
+            type = 10
+            AND project_id = #{referencePrivateWbsProjectId}
+            AND wbs_id is null
+            AND parent_id = -10
+            AND STATUS = 1
+            AND is_deleted = 0
+        )
     </select>
 
     <select id="selectNodeAndTable2" resultType="org.springblade.manager.entity.WbsTreePrivate">

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -1246,6 +1246,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             wbsPrivate.setProjectId(projectId);
             wbsPrivate.setType(10);//带过来的元素信息
             wbsPrivate.setParentId(-10L);
+            wbsPrivate.setStatus(1);
             wbsTreePrivateMapper.insert(wbsPrivate);
            /* }else{
                 return R.success("没有查到主库信息");

+ 74 - 24
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -28,6 +28,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.manager.utils.DiffListUtil;
 import org.springblade.manager.utils.WbsElementUtil;
 import org.springblade.manager.vo.*;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
@@ -456,7 +457,11 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                 idList2.addAll(collect);
             } else if (pawDTO.getReferenceType().equals("private")) {
                 //当前私有引用ids
-                List<WbsTreePrivate> wbsTreePrivates2 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId()).eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId()).eq(WbsTreePrivate::getType, 1));
+                List<WbsTreePrivate> wbsTreePrivates2 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                        .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
+                        .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
+                        .eq(WbsTreePrivate::getType, 1)
+                );
                 List<String> collect = wbsTreePrivates2.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
                 idList2.addAll(collect);
             }
@@ -479,23 +484,30 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                 }
 
                 if (pawDTO.getReferenceType().equals("private")) {
+                    //同步独立表单库数据
+                    this.insertDLTabAsync(pawDTO);
+
                     //获取私有引用项目的wbs树的所有节点、元素表
                     WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, pawDTO.getPrimaryKeyId()));
-                    List<WbsTreePrivate> wbsTreePrivateAllOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, Long.parseLong(wbsTreePrivate.getWbsId())).eq(WbsTreePrivate::getProjectId, Long.parseLong(wbsTreePrivate.getProjectId())).eq(WbsTreePrivate::getStatus, 1));
-                    List<WbsTreePrivate> WbsTreePrivateTables = wbsTreePrivateAllOld.stream().filter(f -> f.getType() == 2).collect(Collectors.toList());
-
-                    //获取当前项目私有wbs树下当前所有节点、元素表
-                    List<WbsTreePrivate> wbsTreePrivatesAllNow = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, Long.parseLong(pawDTO.getPrimaryKeyId())).eq(WbsTreePrivate::getProjectId, Long.parseLong(pawDTO.getProjectId())));
-                    List<WbsTreePrivate> wbsTreePrivateNowTables = wbsTreePrivatesAllNow.stream().filter(f -> f.getType() == 2).collect(Collectors.toList());
+                    List<WbsTreePrivate> wbsTreePrivateAllOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                            .eq(WbsTreePrivate::getProjectId, Long.parseLong(wbsTreePrivate.getProjectId()))
+                            .eq(WbsTreePrivate::getStatus, 1)
+                            .and(obj -> obj.eq(WbsTreePrivate::getWbsId, Long.parseLong(wbsTreePrivate.getWbsId())).or().eq(WbsTreePrivate::getWbsId, null))
+                    );
+                    List<WbsTreePrivate> WbsTreePrivateTables = wbsTreePrivateAllOld.stream().filter(f -> f.getType() == 2 || f.getType() == 10).collect(Collectors.toList());
+
+                    //获取当前项目私有wbs树下当前所有节点、元素表(type=10,独立库引用元素库)
+                    List<WbsTreePrivate> wbsTreePrivatesAllNow = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
+                            .eq(WbsTreePrivate::getProjectId, Long.parseLong(pawDTO.getProjectId()))
+                            .and(obj -> obj.eq(WbsTreePrivate::getWbsId, Long.parseLong(pawDTO.getPrimaryKeyId())).or().eq(WbsTreePrivate::getWbsId, null))
+                    );
+                    List<WbsTreePrivate> wbsTreePrivateNowTables = wbsTreePrivatesAllNow.stream().filter(f -> f.getType() == 2 || f.getType() == 10).collect(Collectors.toList());
 
                     //同步私有wbs节点信息、元素表基础信息到项目级wbs、合同段wbs
                     this.updateWbsInfoContractAsync(wbsTreePrivateAllOld, wbsTreePrivatesAllNow, pawDTO.getProjectId(), pawDTO.getPrimaryKeyId());
 
                     //同步私有-电签匹配数据、默认信息数据
                     this.insertTextDictInfoAsync(WbsTreePrivateTables, wbsTreePrivateNowTables);
-
-                    //同步独立表单库数据
-                    this.insertDLTabAsync(pawDTO);
                 }
 
             } else {
@@ -546,7 +558,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     if (saveIds.size() >= 1000) {
                         String redisValue = bladeRedis.get("submit-wbs-project:" + pawDTO.getProjectId());
                         if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
-                            throw new ServiceException("请勿重复提交,请60秒后再尝试");
+                            throw new ServiceException("请勿重复提交,请60秒后再尝试");
                         }
                     }
 
@@ -590,17 +602,43 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         //私有引用-电签匹配数据、默认信息数据
                         Map<Long, List<TextdictInfo>> textDictInfoData = new HashMap<>();
 
-                        //查询出当前wbs树下所有节点、表信息
+                        //查询出当前wbs树下所有节点、表信息(type=10独立表)
                         List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectNodeAndTable(null, pawDTO.getWbsId(), pawDTO.getReferencePrivateWbsProjectId());
 
+                        //获取当前项目下的所有独立表
+                        List<WbsTreePrivate> wbsTreePrivatesTableDL = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
+                                .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
+                                .eq(WbsTreePrivate::getType, 10)
+                                .eq(WbsTreePrivate::getParentId, -10)
+                                .eq(WbsTreePrivate::getStatus, 1)
+                        );
+
                         //查询所有电签位置配置信息
                         List<TextdictInfo> textDictInfosAll = textdictInfoMapper.selectList(Wrappers.<TextdictInfo>query().lambda());
 
                         for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
-                            for (String id : saveIds) {
-                                if (Long.parseLong(id) == (wbsTreePrivate.getId())) {
-                                    addListData.add(wbsTreePrivate);
-                                } else if (Long.parseLong(id) == (wbsTreePrivate.getParentId()) && wbsTreePrivate.getType() == 2) {
+                            if (wbsTreePrivate.getType() == 1 || wbsTreePrivate.getType() == 2) {
+                                for (String id : saveIds) {
+                                    if (Long.parseLong(id) == (wbsTreePrivate.getId())) {
+                                        addListData.add(wbsTreePrivate);
+
+                                    } else if (Long.parseLong(id) == (wbsTreePrivate.getParentId()) && wbsTreePrivate.getType() == 2) {
+                                        addListData.add(wbsTreePrivate);
+
+                                        //根据元素表pKeyId,获取电签位置匹配信息、编辑默认信息
+                                        List<TextdictInfo> textDictInfos = textDictInfosAll.stream().filter(f -> ObjectUtils.isNotEmpty(f.getTabId())
+                                                && f.getTabId().equals(String.valueOf(wbsTreePrivate.getPKeyId()))).collect(Collectors.toList());
+                                        if (textDictInfos.size() > 0) {
+                                            textDictInfoData.put(wbsTreePrivate.getPKeyId(), textDictInfos);
+                                        }
+                                    }
+                                }
+                            }
+
+                            if (wbsTreePrivate.getType() == 10 && wbsTreePrivate.getParentId() == -10) { //type=10,parentId=-10 独立库
+                                //判断是否存在独立表单,存在则不新增
+                                List<WbsTreePrivate> collect = wbsTreePrivatesTableDL.stream().filter(f -> f.getId().equals(wbsTreePrivate.getId())).collect(Collectors.toList());
+                                if (collect.size() == 0) {
                                     addListData.add(wbsTreePrivate);
 
                                     //根据元素表pKeyId,获取电签位置匹配信息、编辑默认信息
@@ -617,16 +655,21 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                             WbsTreePrivate wbsTreePrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
                             if (wbsTreePrivate != null) {
                                 wbsTreePrivate.setPKeyId(SnowFlakeUtil.getId());
-                                wbsTreePrivate.setWbsId(pawDTO.getPrimaryKeyId());
-                                wbsTreePrivate.setWbsType(String.valueOf(pawDTO.getWbsType()));
                                 wbsTreePrivate.setProjectId(pawDTO.getProjectId());
                                 wbsTreePrivate.setFullName(wbsTreePrivate.getNodeName());
                                 wbsTreePrivate.setInitTableId(ObjectUtil.isNotEmpty(tree.getInitTableId()) ? String.valueOf(tree.getInitTableId()) : null);
 
+                                if (tree.getType() == 10) {  //独立表单数据
+                                    wbsTreePrivate.setWbsId(null);
+                                    wbsTreePrivate.setWbsType(null);
+                                } else {
+                                    wbsTreePrivate.setWbsId(pawDTO.getPrimaryKeyId());
+                                    wbsTreePrivate.setWbsType(String.valueOf(pawDTO.getWbsType()));
+                                }
                                 insertData2.add(wbsTreePrivate);
 
                                 //电签
-                                if (wbsTreePrivate.getType() == 2) {
+                                if (wbsTreePrivate.getType() == 2 || (wbsTreePrivate.getType() == 10 && wbsTreePrivate.getParentId() == -10)) { //type=10,parentId=-10 独立库引用元素库
                                     if (textDictInfoData.size() > 0) {
                                         textDictInfoData.forEach((k, v) -> {
                                             if (tree.getPKeyId().equals(k)) {
@@ -664,7 +707,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                             projectInfoMapper.updateTemplateInfoQuality(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
 
                             //新增独立表单库数据
-                            wbsTreePrivateService.insertDLTab(pawDTO);
+                            //wbsTreePrivateService.insertDLTab(pawDTO);
                         }
                         if (pawDTO.getWbsType() == 2) { //修改试验关联信息
                             projectInfoMapper.updateTemplateInfoTrial(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
@@ -714,14 +757,21 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     }
 
     @Async
-    public boolean updateWbsInfoContractAsync(List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> wbsTreePrivatesAllNow, String projectId, String primaryKeyId) {
+    public boolean updateWbsInfoContractAsync(List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> wbsTreePrivatesAllNow, String
+            projectId, String primaryKeyId) {
         return wbsTreePrivateService.updateBatchByIds2(wbsTreePrivates, wbsTreePrivatesAllNow, projectId, primaryKeyId);
     }
 
-    @Async
+    //@Async
     public boolean insertDLTabAsync(WbsTreeContractDTO pawDTO) {
-        List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateService.getBaseMapper().selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, pawDTO.getReferencePrivateWbsProjectId()).eq(WbsTreePrivate::getType, 10));
-        List<WbsTreePrivate> wbsTreePrivatesNew = wbsTreePrivateService.getBaseMapper().selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId()).eq(WbsTreePrivate::getType, 10));
+        List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateService.getBaseMapper().selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
+                .eq(WbsTreePrivate::getProjectId, pawDTO.getReferencePrivateWbsProjectId())
+                .eq(WbsTreePrivate::getType, 10)
+        );
+        List<WbsTreePrivate> wbsTreePrivatesNew = wbsTreePrivateService.getBaseMapper().selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
+                .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
+                .eq(WbsTreePrivate::getType, 10)
+        );
 
         Iterator<WbsTreePrivate> iterator = wbsTreePrivates.iterator();
         while (iterator.hasNext()) {