liuyc 1 سال پیش
والد
کامیت
e8a63bb751

+ 0 - 6
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java

@@ -1,6 +1,5 @@
 package org.springblade.manager.feign;
 
-import org.springblade.core.tool.api.R;
 import org.springblade.manager.entity.ContractRelationJlyz;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.vo.AppWbsTreeContractVO;
@@ -12,7 +11,6 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
-import java.util.Map;
 
 import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
 
@@ -183,8 +181,4 @@ public interface WbsTreeContractClient {
     @GetMapping(API_PREFIX + "/searchNodeAllTableInfo")
     List<AppWbsTreeContractVO> searchNodeAllTableInfo(@RequestParam String primaryKeyId, @RequestParam String type, @RequestParam String contractId, @RequestParam String projectId, @RequestParam Long userId);
 
-    /*删除合同段本地缓存*/
-    @GetMapping(API_PREFIX + "/deleteContractLocalCache")
-    void deleteContractLocalCache(@RequestParam String contractId);
-
 }

+ 2 - 6
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -953,9 +953,7 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
                         RedisTemplate.delete(keysParentCount);
                     }
 
-                    //删除合同段本地缓存
-                    //wbsTreeContractClient.deleteContractLocalCache(String.valueOf(sgId));
-                    /*剥离到user服务中*/
+                    //删除本地缓存
                     userClient.deleteContractLocalCache(String.valueOf(sgId));
                 }
             }
@@ -980,9 +978,7 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
                 RedisTemplate.delete(keysParentCount);
             }
 
-            //删除合同段本地缓存
-            //wbsTreeContractClient.deleteContractLocalCache(contractId);
-            /*剥离到user服务中*/
+            //删除本地缓存
             userClient.deleteContractLocalCache(contractId);
         }
     }

+ 0 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java

@@ -425,10 +425,5 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
         return list;
     }
 
-    /*删除合同段本地缓存*/
-    @Override
-    public void deleteContractLocalCache(String contractId) {
-        wbsTreeContractServiceImpl.deleteContractLocalCache(contractId);
-    }
 
 }

+ 14 - 29
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -26,7 +26,9 @@ import org.springblade.common.utils.FileUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.bean.NodeVO;
@@ -75,6 +77,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
     }
 
     private static final Logger logger = LoggerFactory.getLogger(WbsTreeContractServiceImpl.class);
+    private final BladeRedis bladeRedis;
     private final ConstructionLedgerFeignClient constructionLedgerFeign;
     private final WbsTreePrivateMapper wbsTreePrivateMapper;
     private final ContractInfoMapper contractInfoMapper;
@@ -119,6 +122,14 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
     @Override
     public boolean submitWbsTreeInContract(WbsTreeContractDTO pawDTO) {
+        /*加锁*/
+        String redisValue = bladeRedis.get("submit-wbs-contract:" + pawDTO.getContractId());
+        if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
+            throw new ServiceException("请勿重复提交,请60秒后再尝试");
+        }
+        bladeRedis.set("submit-wbs-contract:" + pawDTO.getContractId(), "1");
+        bladeRedis.expire("submit-wbs-contract:" + pawDTO.getContractId(), 60);
+
         String wbsTreeIds = pawDTO.getWbsTreeIds();
         String[] ids = wbsTreeIds.split(",");
         //项目对应到合同段的入参节点ids
@@ -146,7 +157,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         List<String> saveIds = idList1.stream().filter(f -> !finalNowContractNodeIds.contains(f)).collect(Collectors.toList());
         List<String> delIds = finalNowContractNodeIds.stream().filter(f -> !idList1.contains(f)).collect(Collectors.toList());
 
-        //TODO ---------节点未变只同步元素表---------
+        // ================= 节点未变只同步元素表 =================
         if (saveIds.size() == 0 && delIds.size() == 0) {
             //当前项目所有原始表(从公有树到项目私有树同步后的,或是私有到私有的)
             List<WbsTreePrivate> nowProjectTabs = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
@@ -274,7 +285,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
             }
 
         } else {
-            //TODO ---------删除---------
+            // ================= 删除 =================
             if (delIds.size() > 0) {
                 List<ContractRelationJlyz> contractRelationJLYZList = baseMapper.selectContractRelationInfoByidSG2(pawDTO.getContractId());
                 if (contractRelationJLYZList.size() > 0) {
@@ -301,7 +312,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                 baseMapper.deleteBatch(ids1, pawDTO.getWbsId(), pawDTO.getProjectId(), pawDTO.getContractId());
             }
 
-            //TODO ---------新增---------
+            // ================= 新增 =================
             if (saveIds.size() > 0) {
                 ArrayList<ConstructionLedger> constructionLedgerList = new ArrayList<>();
                 List<WbsTreePrivate> wbsTreePrivatesList = wbsTreePrivateMapper.selectNodeAndTable2(pawDTO.getWbsId(), pawDTO.getProjectId());
@@ -2276,30 +2287,4 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         return list;
     }
 
-    /*删除合同段本地缓存*/
-    public void deleteContractLocalCache(String contractId) {
-        /*删除节点缓存*/
-        localCacheNodes.remove(contractId);
-
-        /*删除资料缓存*/
-        Iterator<Map.Entry<String, List<WbsTreeContractLazyQueryInfoVO>>> iterator_1 = localCacheQueryInfos.entrySet().iterator();
-        while (iterator_1.hasNext()) {
-            Map.Entry<String, List<WbsTreeContractLazyQueryInfoVO>> entry = iterator_1.next();
-            String cacheKey = entry.getKey();
-            if (cacheKey.startsWith(contractId + "_")) {
-                iterator_1.remove();
-            }
-        }
-
-        /*删除节点计算统计缓存*/
-        Iterator<Map.Entry<String, List<WbsTreeContractLazyVO>>> iterator_2 = localCacheParentCountNodes.entrySet().iterator();
-        while (iterator_2.hasNext()) {
-            Map.Entry<String, List<WbsTreeContractLazyVO>> entry = iterator_2.next();
-            String cacheKey = entry.getKey();
-            if (cacheKey.startsWith(contractId + "_")) {
-                iterator_2.remove();
-            }
-        }
-    }
-
 }

+ 13 - 15
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -855,6 +855,14 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
     @Override
     public R<Object> submitWbsTreeInProject(WbsTreeContractDTO pawDTO) {
+        /*加锁*/
+        String redisValue = bladeRedis.get("submit-wbs-project:" + pawDTO.getProjectId());
+        if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
+            return R.fail(400, "请勿重复提交,请60秒后再尝试");
+        }
+        bladeRedis.set("submit-wbs-project:" + pawDTO.getProjectId(), "1");
+        bladeRedis.expire("submit-wbs-project:" + pawDTO.getProjectId(), 60);
+
         try {
             if (StringUtils.isEmpty(pawDTO.getWbsId())) {
                 return R.fail(400, "未获取到wbsId,请选择一个正确的wbs模板!");
@@ -881,7 +889,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
             List<String> saveIds = idList1.stream().filter(f -> !idList2.contains(f)).collect(Collectors.toList());
             List<String> delIds = idList2.stream().filter(f -> !idList1.contains(f)).collect(Collectors.toList());
 
-            //TODO -------同步新增独立表单--------
+            // ================= 同步新增独立表单 =================
             if (saveIds.size() == 0 && delIds.size() == 0) {
                 if (pawDTO.getReferenceType().equals("private")) {
                     //新增独立表单
@@ -889,7 +897,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                 }
 
             } else {
-                //TODO ------------删除------------
+                // ================= 删除 =================
                 if (delIds.size() > 0) {
                     if (pawDTO.getReferenceType().equals("public")) {
                         List<Long> ids1 = delIds.stream().map(Long::parseLong).collect(Collectors.toList());
@@ -967,15 +975,8 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     }
                 }
 
-                //TODO ------------新增------------
+                // ================= 新增 =================
                 if (saveIds.size() > 0) {
-                    if (saveIds.size() >= 1000) {
-                        String redisValue = bladeRedis.get("submit-wbs-project:" + pawDTO.getProjectId());
-                        if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
-                            return R.fail(400, "请勿重复提交,请60秒后再尝试");
-                        }
-                    }
-
                     //构造入参集合
                     List<WbsTreePrivate> insertData1 = new ArrayList<>();
                     List<WbsTreePrivate> insertData2 = new ArrayList<>();
@@ -1085,6 +1086,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         if (pawDTO.getWbsType() == 5) { //征拆
                             projectInfoMapper.updateTemplateInfoLar(pawDTO.getProjectId(), pawDTO.getWbsId(), "public");
                         }
+
                     } else if (pawDTO.getReferenceType().equals("private")) {
                         List<List<WbsTreePrivate>> partition1 = Lists.partition(insertData2, 1000);
                         for (List<WbsTreePrivate> addList : partition1) {
@@ -1104,17 +1106,13 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         if (pawDTO.getWbsType() == 2) {
                             projectInfoMapper.updateTemplateInfoTrial(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
                         }
-                        if (pawDTO.getWbsType() == 3) { //计量
+                        if (pawDTO.getWbsType() == 3) {
                             projectInfoMapper.updateTemplateInfoMeter(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
                         }
                         if (pawDTO.getWbsType() == 5) {
                             projectInfoMapper.updateTemplateInfoLar(pawDTO.getProjectId(), pawDTO.getWbsId(), "private");
                         }
                     }
-                    if (saveIds.size() >= 1000) {
-                        bladeRedis.set("submit-wbs-project:" + pawDTO.getProjectId(), "1");
-                        bladeRedis.expire("submit-wbs-project:" + pawDTO.getProjectId(), 60);
-                    }
                 }
             }
             return R.success("操作成功");