ソースを参照

Merge branch 'refs/heads/feature-lihb-20250716' into test-merge

# Conflicts:
#	blade-service/blade-user/src/main/java/org/springblade/system/user/util/RsaUtils.java
LHB 2 週間 前
コミット
48e9d77e55

+ 63 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousEViSaServiceImpl.java

@@ -4,9 +4,11 @@ import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.google.common.collect.Lists;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.tool.utils.CollectionUtil;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.manager.entity.*;
 import org.springblade.manager.feign.ExcelTabClient;
 import org.springblade.manager.feign.WbsTreeContractOldHtmlClient;
@@ -66,7 +68,7 @@ public class WbsSynchronousEViSaServiceImpl {
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void updateSyncPrivateForm(WbsTreePrivate wbsTreePrivate, List<WbsTreePrivate> collect,Long createUserId, Long id,String errorMsg) {
+    public void updateSyncPrivateForm(WbsTreePrivate wbsTreePrivate, List<WbsTreePrivate> collect, Long createUserId, Long id, String errorMsg) {
         List<Long> ids = collect.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
         List<Long> parentIds = collect.stream().map(WbsTreePrivate::getParentId).collect(Collectors.toList());
         //节点公式同步
@@ -78,7 +80,7 @@ public class WbsSynchronousEViSaServiceImpl {
                 .set(WbsTreePrivate::getInitTableId, wbsTreePrivate.getInitTableId())
                 .set(WbsTreePrivate::getInitTableName, wbsTreePrivate.getInitTableName())
                 .set(WbsTreePrivate::getHtmlUrl, wbsTreePrivate.getHtmlUrl())
-                .set(wbsTreePrivate.getExcelId()!=null,WbsTreePrivate::getIsLinkTable, 2)
+                .set(wbsTreePrivate.getExcelId() != null, WbsTreePrivate::getIsLinkTable, 2)
                 .set(WbsTreePrivate::getExcelId, wbsTreePrivate.getExcelId())
                 .set(WbsTreePrivate::getUpdateTime, DateTime.now())
                 .set(WbsTreePrivate::getUpdateUser, createUserId)
@@ -93,7 +95,7 @@ public class WbsSynchronousEViSaServiceImpl {
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void syncPrivateForceForm(WbsTreePrivate wbsTreePrivate,Long createUserId, String nodeId, Long id) {
+    public void syncPrivateForceForm(WbsTreePrivate wbsTreePrivate, Long createUserId, String nodeId, Long id) {
         WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectById(nodeId);
 
         wbsTreePrivateMapper.update(null, Wrappers.<WbsTreePrivate>lambdaUpdate()
@@ -101,7 +103,7 @@ public class WbsSynchronousEViSaServiceImpl {
                 .set(WbsTreePrivate::getInitTableName, wbsTreePrivate.getInitTableName())
                 .set(WbsTreePrivate::getInitTableId, wbsTreePrivate.getInitTableId())
                 .set(WbsTreePrivate::getHtmlUrl, wbsTreePrivate.getHtmlUrl())
-                .set(StringUtils.isBlank(wbsTreePrivate.getFullName()),WbsTreePrivate::getFullName, wbsTreePrivate1.getNodeName())
+                .set(StringUtils.isBlank(wbsTreePrivate.getFullName()), WbsTreePrivate::getFullName, wbsTreePrivate1.getNodeName())
                 .set(WbsTreePrivate::getNodeName, wbsTreePrivate.getNodeName())
                 .set(WbsTreePrivate::getUpdateTime, DateTime.now())
                 .set(WbsTreePrivate::getUpdateUser, createUserId)
@@ -286,9 +288,10 @@ public class WbsSynchronousEViSaServiceImpl {
 
     /**
      * 同项目下不同节点 不同的节点公式
-     * @param projectId 项目id
+     *
+     * @param projectId    项目id
      * @param tempParentId 源节点父级id
-     * @param parentId 节点父级id
+     * @param parentId     节点父级id
      */
     public void saveFormula(Long projectId, Long tempParentId, Long parentId) {
 
@@ -315,4 +318,58 @@ public class WbsSynchronousEViSaServiceImpl {
         elementFormulaMappingService.saveBatch(collect1);
 
     }
+
+    public void insertContractForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, List<WbsTreeContract> list, Long pId) {
+
+        //新增-----------------------------------------------------------------------------------------------------------------
+        //排序调整
+        if (wbsTreeSynchronousRecord.getType().contains("7")) {
+            list.sort(Comparator.comparingInt(WbsTreeContract::getSort));
+            //获取节点下的当前表单
+            List<WbsTreeContract> resourceData = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
+                    .select(WbsTreeContract::getPKeyId, WbsTreeContract::getSort)
+                    .eq(WbsTreeContract::getPId, pId)
+                    .eq(WbsTreeContract::getIsDeleted, 0)
+                    .orderByAsc(WbsTreeContract::getSort));
+            if (CollectionUtil.isNotEmpty(resourceData)) {
+                for (int i = 0; i < resourceData.size(); i++) {
+                    resourceData.get(i).setSort(i + 1);
+                }
+                //修改排序为连续排序
+                wbsTreeContractMapper.updateSortBatchByPKeyId(resourceData);
+            }
+
+
+            for (WbsTreeContract wbsTreePrivate : list) {
+                wbsTreeContractMapper.updateSortByPId(pId, wbsTreePrivate.getSort());
+            }
+        }
+
+        //单个批次一个事务,只会回滚当前批次数据
+        Integer i = wbsTreeContractMapper.insertBatchSomeColumn(list);
+        //如果失败  -- - - - - 继续执行   或者把当前节点的p_key_id 记录到某个地方 方便后续处理
+        if (i == 0) {
+            //这里可以保存到数据库指定错误日志表
+            //这里可以保存到数据库指定错误日志表
+            throw new ServiceException("添加失败:");
+        } else {
+            //排序调整
+            if (wbsTreeSynchronousRecord.getType().contains("7")) {
+                //获取节点下的当前表单
+                List<WbsTreeContract> resourceData = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
+                        .select(WbsTreeContract::getPKeyId, WbsTreeContract::getSort)
+                        .eq(WbsTreeContract::getPId, pId)
+                        .eq(WbsTreeContract::getIsDeleted, 0)
+                        .orderByAsc(WbsTreeContract::getSort));
+                if (CollectionUtil.isNotEmpty(resourceData)) {
+                    for (int j = 0; i < resourceData.size(); j++) {
+                        resourceData.get(j).setSort(j + 1);
+                    }
+                    //修改排序为连续排序
+                    wbsTreeContractMapper.updateSortBatchByPKeyId(resourceData);
+                }
+
+            }
+        }
+    }
 }

+ 30 - 95
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousServiceImpl.java

@@ -597,6 +597,7 @@ public class WbsSynchronousServiceImpl {
         //获取当前项目所有合同---------------------------------------------------------------------------------------------------
         List<ContractInfo> contractInfos = contractInfoMapper.selectContractIdByProjectId(String.valueOf(wbsTreeSynchronousRecord.getProjectId()));
 
+        List<WbsTreeContract> addData = new ArrayList<>();
         List<WbsTreeContract> editData = new ArrayList<>();
         List<WbsTreeContract> oldHtml = new ArrayList<>();
         StringBuilder errorMsg = new StringBuilder("");
@@ -812,7 +813,7 @@ public class WbsSynchronousServiceImpl {
                         switch (i) {
                             //添加表单
                             case 1:
-                                insertContractForm(wbsTreeSynchronousRecord, contractInfo, wbsTreeContracts, addContractNode);
+                                addData.addAll(insertContractForm(wbsTreeSynchronousRecord, contractInfo, wbsTreeContracts, addContractNode));
                                 //如果同时选择新增表单和其他的同步类型  在操作其他类型的时候需要添加新的表单
 //                                    if (CollectionUtil.isNotEmpty(addContractNode)) {
 //                                        editContractNodes.addAll(addContractNode.stream().filter(f -> f.getType() == 2).collect(Collectors.toList()));
@@ -837,20 +838,38 @@ public class WbsSynchronousServiceImpl {
 
         }
 
-
-        //合同段同步同时记录数量
+        Set<Long> pIdsNew = new HashSet<>();
+        //新增数据
+        Map<Long, List<WbsTreeContract>> collect2 = addData.stream().collect(Collectors.groupingBy(WbsTreeContract::getPId));
+        if(CollectionUtil.isNotEmpty(addData)){
+            pIdsNew.addAll(collect2.keySet());
+        }
+        //修改数据
         Map<Long, List<WbsTreeContract>> collect1 = editData.stream().collect(Collectors.groupingBy(WbsTreeContract::getPId));
-        Set<Long> pIds = collect1.keySet();
+        if(CollectionUtil.isNotEmpty(editData)){
+            pIdsNew.addAll(collect1.keySet());
+        }
+        //计数 同步节点数量 按最小节点统计
         Integer nodeNumEnd = 0;
 
-        Map<Long, List<WbsTreeContract>> collect2 = oldHtml.stream().collect(Collectors.groupingBy(WbsTreeContract::getPId));
+        //需要记录历史html的表单
+        Map<Long, List<WbsTreeContract>> collect3 = oldHtml.stream().collect(Collectors.groupingBy(WbsTreeContract::getPId));
 
-        for (Long pId : pIds) {
+        for (Long pId : pIdsNew) {
             nodeNumEnd++;
-            List<WbsTreeContract> list = collect1.get(pId);
-            List<WbsTreeContract> oldHtmlPId = collect2.get(pId);
 
-            wbsSynchronousEViSaService.updateContract(wbsTreeSynchronousRecord.getType(), pId, wbsTreeSynchronousRecord.getCreateUserId(), list, oldHtmlPId);
+            //新增数据
+            List<WbsTreeContract> addContractNode = collect2.get(pId);
+            if(CollectionUtil.isNotEmpty(addContractNode)){
+                wbsSynchronousEViSaService.insertContractForm(wbsTreeSynchronousRecord, addContractNode ,pId);
+            }
+
+            List<WbsTreeContract> list = collect1.get(pId);
+            if(CollectionUtil.isNotEmpty(list)){
+                //历史html 只会在更新数据的时候取记录
+                List<WbsTreeContract> oldHtmlPId = collect3.get(pId);
+                wbsSynchronousEViSaService.updateContract(wbsTreeSynchronousRecord.getType(), pId, wbsTreeSynchronousRecord.getCreateUserId(), list, oldHtmlPId);
+            }
             synchronousRecordMapper.update(null, Wrappers.<WbsTreeSynchronousRecord>lambdaUpdate()
                     .set(WbsTreeSynchronousRecord::getNodeNumEnd, nodeNumEnd)
                     .set(WbsTreeSynchronousRecord::getUpdateTime, DateTime.now())
@@ -1043,7 +1062,7 @@ public class WbsSynchronousServiceImpl {
      * @param wbsTreeContracts         当前合同节点数据
      * @param addContractNodes         新增节点数据
      */
-    public void insertContractForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, ContractInfo contractInfo, List<WbsTreeContract> wbsTreeContracts, List<WbsTreeContract> addContractNodes) {
+    public List<WbsTreeContract> insertContractForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, ContractInfo contractInfo, List<WbsTreeContract> wbsTreeContracts, List<WbsTreeContract> addContractNodes) {
         List<WbsTreeContract> addData = new ArrayList<>();
 
 
@@ -1093,91 +1112,7 @@ public class WbsSynchronousServiceImpl {
             }
             addData.addAll(addContractNodes);
         }
-
-
-        //查询出当前项目所有节点---------------------------------------------------------------------------------------------------
-//        List<WbsTreeContract> addList = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
-//                .select(WbsTreeContract::getPKeyId, WbsTreeContract::getPId)
-//                .eq(WbsTreeContract::getIsDeleted, 0)
-//                .eq(WbsTreeContract::getContractId, contractInfo.getId()));
-//
-//        addList.addAll(addData);
-//
-//
-//        //组合祖级路径 根据当前选中节点为开始
-//        Map<Long, WbsTreeContract> collect = addList.stream().collect(Collectors.toMap(WbsTreeContract::getPKeyId, Function.identity()));
-//
-//        addData.forEach(node -> {
-//            //通过转换为WbsTreePrivate的方式 去获取祖级节点
-//            String correctAncestors = createAncestorsPId(node, collect);
-//            node.setAncestorsPId(correctAncestors);
-//        });
-
-        //新增-----------------------------------------------------------------------------------------------------------------
-        Map<Long, List<WbsTreeContract>> collect = addData.stream().collect(Collectors.groupingBy(WbsTreeContract::getPId));
-        Set<Long> longs = collect.keySet();
-
-        List<Long> pIds = new ArrayList<>(longs);
-        List<WbsTreeContract> saveData = new ArrayList<>();
-        //按最小节点批量新增
-        List<List<Long>> partition = Lists.partition(pIds, 100);
-        for (List<Long> data : partition) {
-            for (Long pId : data) {
-                List<WbsTreeContract> list = collect.get(pId);
-                //排序调整
-                if (wbsTreeSynchronousRecord.getType().contains("7")) {
-                    list.sort(Comparator.comparingInt(WbsTreeContract::getSort));
-                    //获取节点下的当前表单
-                    List<WbsTreeContract> resourceData = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
-                            .select(WbsTreeContract::getPKeyId, WbsTreeContract::getSort)
-                            .eq(WbsTreeContract::getPId, pId)
-                            .eq(WbsTreeContract::getIsDeleted, 0)
-                            .orderByAsc(WbsTreeContract::getSort));
-                    if (CollectionUtil.isNotEmpty(resourceData)) {
-                        for (int i = 0; i < resourceData.size(); i++) {
-                            resourceData.get(i).setSort(i + 1);
-                        }
-                        //修改排序为连续排序
-                        wbsTreeContractMapper.updateSortBatchByPKeyId(resourceData);
-                    }
-
-
-                    for (WbsTreeContract wbsTreePrivate : list) {
-                        wbsTreeContractMapper.updateSortByPId(pId, wbsTreePrivate.getSort());
-                    }
-                }
-                boolean b = saveData.addAll(list);
-
-
-                //单个批次一个事务,只会回滚当前批次数据
-                Integer i = wbsTreeContractMapper.insertBatchSomeColumn(saveData);
-                //如果失败  -- - - - - 继续执行   或者把当前节点的p_key_id 记录到某个地方 方便后续处理
-                if (i == 0) {
-                    List<Long> collect1 = addData.stream().map(WbsTreeContract::getPKeyId).collect(Collectors.toList());
-                    //这里可以保存到数据库指定错误日志表
-                    //这里可以保存到数据库指定错误日志表
-                    throw new ServiceException("添加失败:" + StringUtil.join(collect1, ","));
-                } else {
-                    //排序调整
-                    if (wbsTreeSynchronousRecord.getType().contains("7")) {
-                        //获取节点下的当前表单
-                        List<WbsTreeContract> resourceData = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery()
-                                .select(WbsTreeContract::getPKeyId, WbsTreeContract::getSort)
-                                .eq(WbsTreeContract::getPId, pId)
-                                .eq(WbsTreeContract::getIsDeleted, 0)
-                                .orderByAsc(WbsTreeContract::getSort));
-                        if (CollectionUtil.isNotEmpty(resourceData)) {
-                            for (int j = 0; i < resourceData.size(); j++) {
-                                resourceData.get(j).setSort(j + 1);
-                            }
-                            //修改排序为连续排序
-                            wbsTreeContractMapper.updateSortBatchByPKeyId(resourceData);
-                        }
-
-                    }
-                }
-            }
-        }
+        return addData;
     }
 
 

+ 1 - 1
blade-service/blade-user/src/main/java/org/springblade/system/user/util/RsaUtils.java

@@ -215,7 +215,7 @@ public final class RsaUtils {
 
         return sb.toString();
     }
-    public static void main(String[] args) throws Exception {
+    public static void testmain(String[] args) throws Exception {
         System.out.println("授权码示例: " + generateAuthCode());
         String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
         System.out.println(uuid);