Selaa lähdekoodia

同步-同步合同段-新增的表单跟更新的表单一起处理

LHB 2 viikkoa sitten
vanhempi
commit
e28b59c31a

+ 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;
     }
 
 

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

@@ -1,5 +1,7 @@
 package org.springblade.system.user.util;
 
+import sun.misc.BASE64Encoder;
+
 import javax.crypto.Cipher;
 import java.nio.charset.StandardCharsets;
 import java.security.KeyFactory;
@@ -13,6 +15,7 @@ import java.security.spec.X509EncodedKeySpec;
 import java.util.Base64;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.UUID;
 
 public final class RsaUtils {
     /**
@@ -159,51 +162,65 @@ public final class RsaUtils {
         }
     }
 
-    /*private static void testCreateKeyPair() {
-        //生成公钥和私钥
-        Map<String, String> keyMap = createKeyPair();
-        //加密字符串
-        long temp = System.currentTimeMillis();
-        System.out.println("公钥:" + keyMap.get("pk"));
-        System.out.println("私钥:" + keyMap.get("sk"));
-        System.out.println("生成密钥消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
-
-        String message = "RSA测试aaa";
-        System.out.println("原文:" + message);
-        System.out.println("--------------------------------------");
-        temp = System.currentTimeMillis();
-        String messagePEn = encryptWithPk(message, keyMap.get("pk"));
-        System.out.println("密文:" + messagePEn);
-        System.out.println("加密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
-
-        temp = System.currentTimeMillis();
-        String messageSDe = decryptWithSk(messagePEn, keyMap.get("sk"));
-        System.out.println("解密:" + messageSDe);
-        System.out.println("解密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
-        System.out.println("--------------------------------------");
-
-        temp = System.currentTimeMillis();
-        String messageSEn = encryptWithSk(message, keyMap.get("sk"));
-        System.out.println("密文:" + messageSEn);
-        System.out.println("加密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
-
-        temp = System.currentTimeMillis();
-        String messagePDe = decryptWithPk(messageSEn, keyMap.get("pk"));
-        System.out.println("解密:" + messagePDe);
-        System.out.println("解密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
-    }
+//    private static void testCreateKeyPair() {
+//        //生成公钥和私钥
+//        Map<String, String> keyMap = createKeyPair();
+//        //加密字符串
+//        long temp = System.currentTimeMillis();
+//        System.out.println("公钥:" + keyMap.get("pk"));
+//        System.out.println("私钥:" + keyMap.get("sk"));
+//        System.out.println("生成密钥消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
+//
+//        String message = "lihb";
+//        System.out.println("原文:" + message);
+//        System.out.println("--------------------------------------");
+//        temp = System.currentTimeMillis();
+//        String messagePEn = encryptWithPk(message, keyMap.get("pk"));
+//        System.out.println("密文:" + messagePEn);
+//        System.out.println("加密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
+//
+//        temp = System.currentTimeMillis();
+//        String messageSDe = decryptWithSk(messagePEn, keyMap.get("sk"));
+//        System.out.println("解密:" + messageSDe);
+//        System.out.println("解密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
+//        System.out.println("--------------------------------------");
+//
+//        temp = System.currentTimeMillis();
+//        String messageSEn = encryptWithSk(message, keyMap.get("sk"));
+//        System.out.println("密文:" + messageSEn);
+//        System.out.println("加密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
+//
+//        temp = System.currentTimeMillis();
+//        String messagePDe = decryptWithPk(messageSEn, keyMap.get("pk"));
+//        System.out.println("解密:" + messagePDe);
+//        System.out.println("解密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒");
+//    }
+
+    // 定义授权码字符集(62个字符:0-9, A-Z, a-z)
+    private static final String CHAR_SET =
+        "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+    // 线程安全的SecureRandom实例
+    private static final SecureRandom random = new SecureRandom();
+
+    public static String generateAuthCode() {
+        StringBuilder sb = new StringBuilder(16);
+
+        // 生成8位随机字符
+        for (int i = 0; i < 16; i++) {
+            // 从字符集中随机选取一个字符
+            int randomIndex = random.nextInt(CHAR_SET.length());
+            char randomChar = CHAR_SET.charAt(randomIndex);
+            sb.append(randomChar);
+        }
 
-    public static void main(String[] args) throws Exception {
-        testCreateKeyPair();
-        String pk = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALZL9pOjNpDs1wu15o8xmoeNg4YGCUO5zoLrKiGlmFl7\\r\\nCKXKwJ83pDmu/bE4Szf2RAyzwr33bViqoNH45/EaCrECAwEAAQ==\\r\\n";
-        System.out.println(encryptWithPk("admin", pk));
-        System.out.println(encryptWithPk("admin123", pk));
-
-        String str1 = Base64.getEncoder().encodeToString(pk.getBytes());
-        String str2 = (new BASE64Encoder()).encodeBuffer(pk.getBytes());
-        System.out.println("# " + str1);
-        System.out.println("# " + str2);
-        System.out.println(str1.equals(str2));
-    }*/
+        return sb.toString();
+    }
+    public static void testmain(String[] args) throws Exception {
+        System.out.println("授权码示例: " + generateAuthCode());
+        String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
+        System.out.println(uuid);
+        String s = encryptWithPk("13709467119", "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAI0Uny+3+OS9ZeO0jERNhnztulQC1tgbJS2+mYk3c8BjG2yi3sDl+JbJ7VgfVV86xZ/BJwTQk07soFBe4RfLhs0CAwEAAQ==");
+        System.out.println(s);
+    }
 
 }