Pārlūkot izejas kodu

质检wbs树统计修改

lvy 1 nedēļu atpakaļ
vecāks
revīzija
563f09413b

+ 2 - 2
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/WbsTreeContractStatisticsClient.java

@@ -12,13 +12,13 @@ import java.util.List;
 
 import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
 
-@FeignClient(value = APPLICATION_NAME_PREFIX + "manager")
+@FeignClient(value = APPLICATION_NAME_PREFIX + "business")
 public interface WbsTreeContractStatisticsClient {
 
     /**
      * 接口前缀
      */
-    String API_PREFIX = "/api/manager/WbsTreeContractStatistics";
+    String API_PREFIX = "/api/business/WbsTreeContractStatistics";
 
     /**
      * 更新统计表节点信息

+ 15 - 8
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/WbsTreeContractStatisticsClientImpl.java

@@ -21,6 +21,7 @@ import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 
 @RestController
@@ -31,14 +32,16 @@ public class WbsTreeContractStatisticsClientImpl implements WbsTreeContractStati
     private final JdbcTemplate jdbcTemplate;
     private final StringRedisTemplate redisTemplate;
     private static final Logger log = LoggerFactory.getLogger(WbsTreeContractStatisticsClientImpl.class);
+    private static final String INFORMATION_QUERY_STATUS_STATISTICS_KEY = "blade:statistics:information_query_statistics_key";
 
-    @Scheduled(cron = "0/10 * * * * ?")
+    @Scheduled(cron = "0/30 * * * * ?")
     public void updateInformationQueryStatus() {
         Map<String, String> map = new HashMap<>();
-        List<String> taskIds = redisTemplate.opsForList().range("information_query_status_statistics_key", 0, 100);
-        if (taskIds != null && !taskIds.isEmpty()) {
-            List<InformationQuery> queryList = jdbcTemplate.query("select wbs_id, classify, contract_id from u_information_query where id in (select form_data_id from u_task where  id in (?) and is_deleted = 0) and is_deleted = 0 group by contract_id,wbs_id,classify",
-                    new Object[]{String.join(",", taskIds)}, new BeanPropertyRowMapper<>(InformationQuery.class));
+        List<String> queryIds = redisTemplate.opsForList().range(INFORMATION_QUERY_STATUS_STATISTICS_KEY, 0, 100);
+        if (queryIds != null && !queryIds.isEmpty()) {
+            String ids = queryIds.stream().distinct().collect(Collectors.joining(","));
+            List<InformationQuery> queryList = jdbcTemplate.query("select wbs_id, classify, contract_id from u_information_query where id in ( " + ids +" ) and is_deleted = 0 group by contract_id,wbs_id,classify",
+                    new BeanPropertyRowMapper<>(InformationQuery.class));
             if (!queryList.isEmpty()) {
                 for (InformationQuery query : queryList) {
                     if (map.containsKey(query.getWbsId() + "," + query.getContractId() + "," + query.getClassify())) {
@@ -48,9 +51,13 @@ public class WbsTreeContractStatisticsClientImpl implements WbsTreeContractStati
                         wbsTreeContractStatisticsService.updateInformationNumber(query.getWbsId(), query.getClassify(), query.getContractId());
                         map.put(query.getWbsId() + "," + query.getContractId() + "," + query.getClassify(), "");
                     } catch (Exception e) {
-                        e.printStackTrace();
+                        redisTemplate.opsForList().rightPush("blade:statistics:information_query_statistics_key", query.getId() + "");
+                        log.error("updateInformationQueryStatus wbsId = {}, contractId = {}, classify = {}", query.getWbsId(), query.getContractId(), query.getClassify() , e);
                     }
                 }
+                for (String queryId : queryIds) {
+                    redisTemplate.opsForList().remove("blade:statistics:information_query_statistics_key", 1, queryId);
+                }
             }
         }
     }
@@ -125,7 +132,7 @@ public class WbsTreeContractStatisticsClientImpl implements WbsTreeContractStati
             String[] pKeyIds = nodeIds.split(",");
             for (String pKeyId : pKeyIds) {
                 try {
-                    wbsTreeContractStatisticsService.insertWbsTreeContractStatistics(Long.parseLong(pKeyId), 1);
+                    wbsTreeContractStatisticsService.updateIsDeleted(Long.parseLong(pKeyId), 1);
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
@@ -140,7 +147,7 @@ public class WbsTreeContractStatisticsClientImpl implements WbsTreeContractStati
             String[] pKeyIds = nodeIds.split(",");
             for (String pKeyId : pKeyIds) {
                 try {
-                    wbsTreeContractStatisticsService.recycleWbsTreeContractStatistics(Long.parseLong(pKeyId));
+                    wbsTreeContractStatisticsService.updateIsDeleted(Long.parseLong(pKeyId), 0);
                 } catch (Exception e) {
                     e.printStackTrace();
                 }

+ 2 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/WbsTreeContractStatisticsMapper.java

@@ -16,4 +16,6 @@ public interface WbsTreeContractStatisticsMapper extends BaseMapper<WbsTreeContr
 
     @Update("update wbs_tree_contract_statistics set is_deleted = 0 where id = #{pKeyId}")
     Boolean updateDeleteStatus(Long pKeyId);
+
+    Boolean updateLeafNum(String ids);
 }

+ 7 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/WbsTreeContractStatisticsMapper.xml

@@ -25,6 +25,13 @@
     <sql id="includeSql">
         id, project_id, contract_id, is_deleted, `status`, create_time,  update_time, parent_id, ancestors, leaf_num, fill_num, approve_num, complete_num, jl_fill_num, jl_approve_num, jl_complete_num, is_leaf
     </sql>
+    <update id="updateLeafNum">
+        UPDATE m_wbs_tree_contract_statistics a
+            INNER JOIN ( SELECT b.id, COUNT(c.id) as leaf_num FROM m_wbs_tree_contract_statistics b LEFT JOIN m_wbs_tree_contract_statistics c
+                ON  c.is_leaf = 1 AND c.is_deleted = 0  AND c.status = 1 AND c.contract_id = b.contract_id AND c.ancestors LIKE CONCAT(b.ancestors, ',' b.id, '%')
+                                                              WHERE b.id IN (#{ids}) GROUP BY b.id ) AS temp ON a.id = temp.id
+        SET a.leaf_num = temp.leaf_num;
+    </update>
     <select id="getByIdOnLock" resultMap="ResultMap">
         select <include refid="includeSql"/> from m_wbs_tree_contract_statistics where id = #{id} for update
     </select>

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/IWbsTreeContractStatisticsService.java

@@ -9,7 +9,7 @@ public interface IWbsTreeContractStatisticsService extends IService<WbsTreeContr
 
     Boolean insertWbsTreeContractStatistics(Long wbsTreeContractPkeyId, Integer isDelete);
 
-    Boolean recycleWbsTreeContractStatistics(Long pKeyId);
+    Boolean updateIsDeleted(Long id, Integer isDeleted);
     void statisticsContract(Long contractId);
 
     void sync();

+ 46 - 7
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/WbsTreeContractStatisticsServiceImpl.java

@@ -137,7 +137,7 @@ public class WbsTreeContractStatisticsServiceImpl extends ServiceImpl<WbsTreeCon
     @Override
     public Boolean insertWbsTreeContractStatistics(Long wbsTreeContractPkeyId, Integer isDelete) {
         if (isDelete == 1) {
-            return this.removeById(wbsTreeContractPkeyId);
+            return this.updateIsDeleted(wbsTreeContractPkeyId, isDelete);
         }
         WbsTreeContract wbsTreeContract = getWbsTreeContractByPKeyId(wbsTreeContractPkeyId);
         if (wbsTreeContract == null) {
@@ -165,16 +165,55 @@ public class WbsTreeContractStatisticsServiceImpl extends ServiceImpl<WbsTreeCon
         createWbsTreeContractStatisticsChildren(wbsTreeContract, wbsTreeContractStatistics, parentList);
         parentList.add(wbsTreeContractStatistics);
         saveBatch(parentList);
+        Set<String> ancestors = new HashSet<>();
+        for (WbsTreeContractStatistics statistics : parentList) {
+            if (statistics.getIsLeaf() != 1 && statistics.getAncestors() != null) {
+                String[] split = statistics.getAncestors().split(",");
+                for (String s : split) {
+                    if (!StringUtil.isNumeric(s)) {
+                        continue;
+                    }
+                    ancestors.add(s);
+                }
+            }
+        }
+        this.baseMapper.updateLeafNum(String.join(",", ancestors));
         return true;
     }
 
     @Override
-    public Boolean recycleWbsTreeContractStatistics(Long pKeyId) {
-        WbsTreeContractStatistics wbsTreeContractStatistics = this.baseMapper.getByIdOnIgnoreDeleted(pKeyId);
-        if (wbsTreeContractStatistics == null) {
-            insertWbsTreeContractStatistics(pKeyId, 0);
+    public Boolean updateIsDeleted(Long id, Integer isDeleted) {
+        if (isDeleted == null || isDeleted == 0) {
+            // 恢复
+            WbsTreeContractStatistics statistics = this.baseMapper.getByIdOnIgnoreDeleted(id);
+            if (statistics == null) {
+                return insertWbsTreeContractStatistics(id, 0);
+            }
+            return transactionTemplate.execute(status -> {
+                this.baseMapper.updateDeleteStatus(id);
+                if (statistics.getIsLeaf() == 1) {
+                    this.baseMapper.updateLeafNum(statistics.getAncestors());
+                }
+                return true;
+            });
+        } else {
+            // 删除
+            WbsTreeContractStatistics statistics = this.getById(id);
+            if (statistics != null) {
+                // 删除当前节点及其子节点
+                List<WbsTreeContractStatistics> list = this.list(Wrappers.<WbsTreeContractStatistics>lambdaQuery().eq(WbsTreeContractStatistics::getContractId, statistics.getContractId())
+                        .likeRight(WbsTreeContractStatistics::getAncestors, statistics.getAncestors() + "," + statistics.getId()));
+                list.add( statistics);
+                Set<Long> ids = list.stream().map(WbsTreeContractStatistics::getId).collect(Collectors.toSet());
+                return transactionTemplate.execute( status -> {
+                    this.update(Wrappers.<WbsTreeContractStatistics>lambdaUpdate().set(WbsTreeContractStatistics::getIsDeleted, 1).in(WbsTreeContractStatistics::getId, ids));
+                    // 2 更新父节点的子节点数
+                    this.baseMapper.updateLeafNum(statistics.getAncestors());
+                    return true;
+                });
+            }
         }
-        return this.baseMapper.updateDeleteStatus(pKeyId);
+        return true;
     }
 
     public void createWbsTreeContractStatisticsParent(WbsTreeContract wbsTreeContract, WbsTreeContractStatistics wbsTreeContractStatistics, List<WbsTreeContractStatistics> wbsTreeContractStatisticsList) {
@@ -548,7 +587,7 @@ public class WbsTreeContractStatisticsServiceImpl extends ServiceImpl<WbsTreeCon
     }
 
     private WbsTreeContractStatistics createWbsTreeContractStatistics(WbsTreeContract wbsTreeContract) {
-        return new WbsTreeContractStatistics(wbsTreeContract.getPKeyId(), wbsTreeContract.getProjectId(), wbsTreeContract.getContractId(), wbsTreeContract.getParentId(), wbsTreeContract.getAncestors());
+        return new WbsTreeContractStatistics(wbsTreeContract.getPKeyId(), wbsTreeContract.getProjectId(), wbsTreeContract.getContractId(), wbsTreeContract.getPId(), wbsTreeContract.getAncestorsPId());
     }
     private WbsTreeContractStatistics createWbsTreeContractStatistics(WbsTreeContractDto wbsTreeContract) {
         return new WbsTreeContractStatistics(wbsTreeContract.getPKeyId(), wbsTreeContract.getProjectId(), wbsTreeContract.getContractId(), wbsTreeContract.getTempPId(), wbsTreeContract.getAncestorsByParentId(), wbsTreeContract.getIsLeaf());

+ 1 - 1
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVDataServiceImpl.java

@@ -376,7 +376,7 @@ public class EVDataServiceImpl implements EVDataService {
                 }
             }
             RedisTemplate.delete("sign-" + taskApp.getFormDataId());
-            RedisTemplate.opsForList().rightPush("information_query_status_statistics_key", taskApp.getTaskId());
+            RedisTemplate.opsForList().rightPush("blade:statistics:information_query_statistics_key", taskApp.getFormDataId());
             Thread.sleep(1000);
         } catch (Exception e) {
             RedisTemplate.delete("sign-" + taskApp.getFormDataId());

+ 1 - 1
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -854,7 +854,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
 //                                }
 //                            }
                         String pKeyIds = lazyNodes.stream().map(item -> item.getPKeyId() + "").collect(Collectors.joining(","));
-                        List<WbsTreeContractStatistics> wbsTreeContractStatisticsList = jdbcTemplate.query("select id, leaf_num, fill_num, approve_num, complete_num from m_wbs_tree_contract_statistics where id in (" + pKeyIds + ")",
+                        List<WbsTreeContractStatistics> wbsTreeContractStatisticsList = jdbcTemplate.query("select id, leaf_num, fill_num, approve_num, complete_num,jl_fill_num, jl_approve_num, jl_complete_num from m_wbs_tree_contract_statistics where id in (" + pKeyIds + ")",
                                 new BeanPropertyRowMapper<>(WbsTreeContractStatistics.class));
                         Map<Long, WbsTreeContractStatistics> wbsTreeContractStatisticsMap = wbsTreeContractStatisticsList.stream().collect(Collectors.toMap(WbsTreeContractStatistics::getId, item -> item));
                         setPrivateTemplate(lazyNodes);