Browse Source

增加日志自动压缩,清理日志的配置。增加数据库连接池数量,修改部分全表更新为并行流。保存操作为saveAndFlus。

Cyangbin 3 years ago
parent
commit
9e1c3a3b85

+ 2 - 2
pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.2.6.RELEASE</version>
+        <version>2.6.7</version>
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
     <groupId>com.galaxis</groupId>
@@ -16,7 +16,7 @@
 
     <properties>
         <java.version>17</java.version>
-        <spring-cloud.version>Hoxton.SR4</spring-cloud.version>
+        <spring-cloud.version>2021.0.1</spring-cloud.version>
     </properties>
 
     <dependencies>

+ 52 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSelfWorkHourDo.java

@@ -0,0 +1,52 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ChuanyunSelfWorkHourDo {
+
+    /**
+     * DATE_FORMAT( chuanyun_self_work_hour.day_log_date, '%Y-%m' ) AS dayLogDate,
+     * 	SUM( chuanyun_self_work_hour.standard_work_hour ) AS standard_work_hour,
+     * 	chuanyun_self_work_hour.user_id,
+     * 	chuanyun_self_work_hour.project_id,
+     * 	chuanyun_self_work_hour.project_type,
+     * 	chuanyun_self_work_hour.STATUS,
+     * 	chuanyun_self_work_hour.department_name,
+     * 	chuanyun_self_work_hour.department_id
+     */
+
+    private String userId;
+
+    private String projectId;
+
+    private String projectType;
+
+    private String departmentId;
+
+    private String departmentName;
+
+    /**
+     * 流程状态
+     */
+    private String status;
+
+    @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
+    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+    private LocalDateTime dayLogDate;
+
+    private BigDecimal standardWorkHour;
+
+
+}

+ 81 - 74
src/main/java/com/galaxis/manatee/service/LogCheckService.java

@@ -82,33 +82,38 @@ public class LogCheckService {
         }
         long start = System.currentTimeMillis();
         log.info("开始核对标准化周工时");
+        // 根据日工时聚合得到周工时
         List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHourByUserId(userId);
+        // 数据库已存在的周工时
         List<ChuanyunWeekMemberHourDO> oldList = chuanyunWeekMemberHourDao.findByUserId(userId);
-        Map<String, Integer> map = new HashMap<>(list.size()+oldList.size());
+        Map<String, Integer> map = new HashMap<>(list.size() + oldList.size());
 
-        if (list.size()!=oldList.size()){
-            for (ChuanyunWeekMemberHourDO chuanyunWeekMemberHourDO : list){
-                map.put(chuanyunWeekMemberHourDO.getUserId()+chuanyunWeekMemberHourDO.getProjectId()+chuanyunWeekMemberHourDO.getProjectType()+chuanyunWeekMemberHourDO.getYear()+chuanyunWeekMemberHourDO.getWeek(),1);
+        if (list.size() != oldList.size()) {
+            for (ChuanyunWeekMemberHourDO chuanyunWeekMemberHourDO : list) {
+                String key = chuanyunWeekMemberHourDO.getUserId() + chuanyunWeekMemberHourDO.getProjectId() + chuanyunWeekMemberHourDO.getProjectType() + chuanyunWeekMemberHourDO.getYear() + chuanyunWeekMemberHourDO.getWeek();
+                map.put(key, 1);
             }
-            for (ChuanyunWeekMemberHourDO chuanyunWeekMemberHourDO : oldList){
-                    Integer count = map.get(chuanyunWeekMemberHourDO.getUserId()+chuanyunWeekMemberHourDO.getProjectId()+chuanyunWeekMemberHourDO.getProjectType()+chuanyunWeekMemberHourDO.getYear()+chuanyunWeekMemberHourDO.getWeek());
-                    if (count==null){
-                        chuanyunWeekMemberHourDao.delete(chuanyunWeekMemberHourDO);
-                        List<String> matchers = new ArrayList<>();
-                        matchers.add("F0000001_2,"+chuanyunWeekMemberHourDO.getProjectId());
-                        matchers.add("F0000002_2,"+chuanyunWeekMemberHourDO.getUserId());
-                        matchers.add("F0000006_2,"+chuanyunWeekMemberHourDO.getWeek());
-                        matchers.add("F0000008_2,"+chuanyunWeekMemberHourDO.getYear());
-                        var filter = Filter.instance(0, 1, true, "And", matchers);
-                        var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, filter);
-                        ChuanyunSaveDTO chuanyunSaveDTO;
-                        if (chuanyunFindAllResponse.getReturnData() != null) {
-                            List<ChuanyunProjectMemberWeekHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                            });
-                            chuanyunSaveDTO = chuanYunManager.delete(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, result.get(0).getObjectId());
-                        }
-                        log.info(chuanyunWeekMemberHourDO.getUserId()+"删除项目"+chuanyunWeekMemberHourDO.getProjectId()+"时间为"+chuanyunWeekMemberHourDO.getYear()+"年"+chuanyunWeekMemberHourDO.getWeek()+"周工时");
+            for (ChuanyunWeekMemberHourDO chuanyunWeekMemberHourDO : oldList) {
+                String key = chuanyunWeekMemberHourDO.getUserId() + chuanyunWeekMemberHourDO.getProjectId() + chuanyunWeekMemberHourDO.getProjectType() + chuanyunWeekMemberHourDO.getYear() + chuanyunWeekMemberHourDO.getWeek();
+                Integer count = map.get(key);
+                if (count == null) {
+                    chuanyunWeekMemberHourDao.delete(chuanyunWeekMemberHourDO);
+                    List<String> matchers = new ArrayList<>();
+                    matchers.add("F0000001_2," + chuanyunWeekMemberHourDO.getProjectId());
+                    matchers.add("F0000002_2," + chuanyunWeekMemberHourDO.getUserId());
+                    matchers.add("F0000006_2," + chuanyunWeekMemberHourDO.getWeek());
+                    matchers.add("F0000008_2," + chuanyunWeekMemberHourDO.getYear());
+
+                    var filter = Filter.instance(0, 1, true, "And", matchers);
+                    var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, filter);
+                    ChuanyunSaveDTO chuanyunSaveDTO;
+                    if (chuanyunFindAllResponse.getReturnData() != null) {
+                        List<ChuanyunProjectMemberWeekHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                        });
+                        chuanyunSaveDTO = chuanYunManager.delete(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, result.get(0).getObjectId());
                     }
+                    log.info(chuanyunWeekMemberHourDO.getUserId() + "删除项目" + chuanyunWeekMemberHourDO.getProjectId() + "时间为" + chuanyunWeekMemberHourDO.getYear() + "年" + chuanyunWeekMemberHourDO.getWeek() + "周工时");
+                }
             }
         }
         log.info("核对耗时" + (System.currentTimeMillis() - start) + "毫秒");
@@ -132,29 +137,30 @@ public class LogCheckService {
         log.info("开始核对标准化月工时");
         List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHour(userId);
         List<ChuanyunSelfCostDO> costDOList = chuanyunSelfCostDao.findByUserId(userId);
-        if (list.size()!=costDOList.size()){
-            Map<String, Integer> map = new HashMap<>(list.size()+costDOList.size());
-            for (ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO : list){
-                map.put(chuanyunSelfWorkHourDO.getUserId()+chuanyunSelfWorkHourDO.getProjectId()+chuanyunSelfWorkHourDO.getProjectType()+chuanyunSelfWorkHourDO.getDayLogDate().withDayOfMonth(1),1);
+        if (list.size() != costDOList.size()) {
+            Map<String, Integer> map = new HashMap<>(list.size() + costDOList.size());
+            for (ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO : list) {
+                map.put(chuanyunSelfWorkHourDO.getUserId() + chuanyunSelfWorkHourDO.getProjectId() + chuanyunSelfWorkHourDO.getProjectType() + chuanyunSelfWorkHourDO.getDayLogDate().withDayOfMonth(1), 1);
             }
-            for (ChuanyunSelfCostDO chuanyunSelfCostDO : costDOList){
-                    Integer count = map.get(chuanyunSelfCostDO.getUserId()+chuanyunSelfCostDO.getProjectId()+chuanyunSelfCostDO.getProjectType()+chuanyunSelfCostDO.getDayLogDate().withDayOfMonth(1));
-                    if (count==null){
-                        chuanyunSelfCostDao.delete(chuanyunSelfCostDO);
-                        List<String> matchers = new ArrayList<>();
-                        matchers.add("F0000003_2,"+chuanyunSelfCostDO.getProjectId());
-                        matchers.add("F0000002_2,"+chuanyunSelfCostDO.getUserId());
-                        matchers.add("F0000004_2,"+chuanyunSelfCostDO.getDayLogDate().plusDays(1).withDayOfMonth(1));
-                        var filter = Filter.instance(0, 1, true, "And", matchers);
-                        var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE, filter);
-                        ChuanyunSaveDTO chuanyunSaveDTO;
-                        if (chuanyunFindAllResponse.getReturnData() != null) {
-                            List<ChuanyunMemberMonthCostDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                            });
-                            chuanyunSaveDTO = chuanYunManager.delete(ChuanyunMemberMonthCostDO.SCHEMA_CODE, result.get(0).getObjectId());
-                        }
-                        log.info(chuanyunSelfCostDO.getUserId()+"删除项目"+chuanyunSelfCostDO.getProjectId()+"时间为"+chuanyunSelfCostDO.getDayLogDate()+"月工时");
+            for (ChuanyunSelfCostDO chuanyunSelfCostDO : costDOList) {
+                Integer count = map.get(chuanyunSelfCostDO.getUserId() + chuanyunSelfCostDO.getProjectId() + chuanyunSelfCostDO.getProjectType() + chuanyunSelfCostDO.getDayLogDate().withDayOfMonth(1));
+                if (count == null) {
+                    chuanyunSelfCostDao.delete(chuanyunSelfCostDO);
+                    List<String> matchers = new ArrayList<>();
+                    matchers.add("F0000003_2," + chuanyunSelfCostDO.getProjectId());
+                    matchers.add("F0000002_2," + chuanyunSelfCostDO.getUserId());
+                    matchers.add("F0000004_2," + chuanyunSelfCostDO.getDayLogDate().plusDays(1).withDayOfMonth(1));
+
+                    var filter = Filter.instance(0, 1, true, "And", matchers);
+                    var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE, filter);
+                    ChuanyunSaveDTO chuanyunSaveDTO;
+                    if (chuanyunFindAllResponse.getReturnData() != null) {
+                        List<ChuanyunMemberMonthCostDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                        });
+                        chuanyunSaveDTO = chuanYunManager.delete(ChuanyunMemberMonthCostDO.SCHEMA_CODE, result.get(0).getObjectId());
                     }
+                    log.info(chuanyunSelfCostDO.getUserId() + "删除项目" + chuanyunSelfCostDO.getProjectId() + "时间为" + chuanyunSelfCostDO.getDayLogDate() + "月工时");
+                }
             }
         }
         log.info("核对耗时" + (System.currentTimeMillis() - start) + "毫秒");
@@ -172,43 +178,44 @@ public class LogCheckService {
         if (chuanyunWorkHourList.size() != chuanyunSelfWorkHourList.size()) {
             //如果有变动将
             for (ChuanyunWorkHourDO chuanyunWorkHourDO : chuanyunWorkHourList) {
-                map.put(chuanyunWorkHourDO.getUserId() + chuanyunWorkHourDO.getProjectId() +chuanyunWorkHourDO.getProjectType()+ chuanyunWorkHourDO.getDayLogDate(), 1);
+                map.put(chuanyunWorkHourDO.getUserId() + chuanyunWorkHourDO.getProjectId() + chuanyunWorkHourDO.getProjectType() + chuanyunWorkHourDO.getDayLogDate(), 1);
             }
             //比较是否有撤回工时
             for (ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO : chuanyunSelfWorkHourList) {
 //                if (!chuanyunSelfWorkHourDO.getProjectType().equals("生产项目")){
-                    String projectId;
-                    if (chuanyunSelfWorkHourDO.getProjectId().equals(ChuanYunConstant.PRODUCTION_PROJECT_ID)){
-                        projectId="";
-                    }else{
-                        projectId=chuanyunSelfWorkHourDO.getProjectId();
-                    }
-                    Integer count = map.get(chuanyunSelfWorkHourDO.getUserId() + projectId +chuanyunSelfWorkHourDO.getProjectType()+chuanyunSelfWorkHourDO.getDayLogDate());
-                    if (count == null) {
-                        try {
-                            //删除数据库日工时
-                            chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO);
-                            //删除氚云日工时
-                            List<String> matchers = new ArrayList<>();
-                            if (!StringUtils.isEmpty(chuanyunSelfWorkHourDO.getProjectId())&&!chuanyunSelfWorkHourDO.getProjectId().equals(ChuanYunConstant.PRODUCTION_PROJECT_ID)){
-                                matchers.add("F0000001_2," + chuanyunSelfWorkHourDO.getProjectId());
-                            }
-                            matchers.add("F0000002_2," + chuanyunSelfWorkHourDO.getUserId());
-                            matchers.add("F0000003_2," + chuanyunSelfWorkHourDO.getDayLogDate());
-                            var filter = Filter.instance(0, 1, true, "And", matchers);
-                            var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberHourDO.SCHEMA_CODE, filter);
-                            ChuanyunSaveDTO chuanyunSaveDTO;
-                            if (chuanyunFindAllResponse.getReturnData() != null) {
-                                List<ChuanyunMemberHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                                });
-                                chuanyunSaveDTO = chuanYunManager.delete(ChuanyunMemberHourDO.SCHEMA_CODE, result.get(0).getObjectId());
-                            }
-                            log.info(chuanyunSelfWorkHourDO.getUserId() + "删除" + chuanyunSelfWorkHourDO.getDayLogDate() + "位于" + chuanyunSelfWorkHourDO.getProjectId() + "工时");
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                            log.error(e.getMessage());
+                String projectId;
+                if (chuanyunSelfWorkHourDO.getProjectId().equals(ChuanYunConstant.PRODUCTION_PROJECT_ID)) {
+                    projectId = "";
+                } else {
+                    projectId = chuanyunSelfWorkHourDO.getProjectId();
+                }
+                Integer count = map.get(chuanyunSelfWorkHourDO.getUserId() + projectId + chuanyunSelfWorkHourDO.getProjectType() + chuanyunSelfWorkHourDO.getDayLogDate());
+                if (count == null) {
+                    try {
+                        //删除数据库日工时
+                        chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO);
+                        //删除氚云日工时
+                        List<String> matchers = new ArrayList<>();
+                        if (!StringUtils.isEmpty(chuanyunSelfWorkHourDO.getProjectId()) && !chuanyunSelfWorkHourDO.getProjectId().equals(ChuanYunConstant.PRODUCTION_PROJECT_ID)) {
+                            matchers.add("F0000001_2," + chuanyunSelfWorkHourDO.getProjectId());
+                        }
+                        matchers.add("F0000002_2," + chuanyunSelfWorkHourDO.getUserId());
+                        matchers.add("F0000003_2," + chuanyunSelfWorkHourDO.getDayLogDate());
+
+                        var filter = Filter.instance(0, 1, true, "And", matchers);
+                        var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberHourDO.SCHEMA_CODE, filter);
+                        ChuanyunSaveDTO chuanyunSaveDTO;
+                        if (chuanyunFindAllResponse.getReturnData() != null) {
+                            List<ChuanyunMemberHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                            });
+                            chuanyunSaveDTO = chuanYunManager.delete(ChuanyunMemberHourDO.SCHEMA_CODE, result.get(0).getObjectId());
                         }
+                        log.info(chuanyunSelfWorkHourDO.getUserId() + "删除" + chuanyunSelfWorkHourDO.getDayLogDate() + "位于" + chuanyunSelfWorkHourDO.getProjectId() + "工时");
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        log.error(e.getMessage());
                     }
+                }
 //                }
             }
         }

+ 5 - 5
src/main/java/com/galaxis/manatee/service/LogService.java

@@ -30,7 +30,7 @@ public class LogService {
      */
     public void standardAllWeekMemberHour(){
         long start= Instant.now().getEpochSecond();
-        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> logStandardService.standardWeekMemberHourByUserId(chuanyunUserCompanyDO.getUserId()));
+        chuanyunUserCompanyDao.findAll().parallelStream().forEach(chuanyunUserCompanyDO -> logStandardService.standardWeekMemberHourByUserId(chuanyunUserCompanyDO.getUserId()));
         log.info("标准化所有周工时耗时"+(Instant.now().getEpochSecond()-start)+"秒");
     }
 
@@ -39,7 +39,7 @@ public class LogService {
      */
     public void standardAllSelfCost(){
         long start=Instant.now().getEpochSecond();
-        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> logStandardService.standardSelfCostByUserId(chuanyunUserCompanyDO.getUserId()));
+        chuanyunUserCompanyDao.findAll().parallelStream().forEach(chuanyunUserCompanyDO -> logStandardService.standardSelfCostByUserId(chuanyunUserCompanyDO.getUserId()));
         log.info("标准化所有月工时耗时"+(Instant.now().getEpochSecond()-start)+"秒");
     }
 
@@ -48,7 +48,7 @@ public class LogService {
      */
     public void updateAllChuanyunSelfWorkHour() {
         long startTime = Instant.now().getEpochSecond();
-        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> logUpdateService.updateChuanyunSelfWorkHourListByUserId(chuanyunUserCompanyDO.getUserId()));
+        chuanyunUserCompanyDao.findAll().parallelStream().forEach(chuanyunUserCompanyDO -> logUpdateService.updateChuanyunSelfWorkHourListByUserId(chuanyunUserCompanyDO.getUserId()));
         log.info("更新所有每日工时花费" + (Instant.now().getEpochSecond() - startTime) + "秒");
     }
 
@@ -57,7 +57,7 @@ public class LogService {
      */
     public void updateAllChuanyunWeekMemberHour() {
         long startTime = Instant.now().getEpochSecond();
-        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> logUpdateService.updateChuanyunWeekMemberHourListByUserId(chuanyunUserCompanyDO.getUserId()));
+        chuanyunUserCompanyDao.findAll().parallelStream().forEach(chuanyunUserCompanyDO -> logUpdateService.updateChuanyunWeekMemberHourListByUserId(chuanyunUserCompanyDO.getUserId()));
         log.info("更新所有每周工时花费" + (Instant.now().getEpochSecond() - startTime) + "秒");
     }
 
@@ -66,7 +66,7 @@ public class LogService {
      */
     public void updateAllChuanyunSelfCost() {
         long startTime = Instant.now().getEpochSecond();
-        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> logUpdateService.updateChuanyunSelfCostListByUserId(chuanyunUserCompanyDO.getUserId()));
+        chuanyunUserCompanyDao.findAll().parallelStream().forEach(chuanyunUserCompanyDO -> logUpdateService.updateChuanyunSelfCostListByUserId(chuanyunUserCompanyDO.getUserId()));
         log.info("更新所有每月工时花费" + (Instant.now().getEpochSecond() - startTime) + "秒");
     }
 }

+ 115 - 75
src/main/java/com/galaxis/manatee/service/LogStandardService.java

@@ -11,9 +11,11 @@ import org.springframework.util.StringUtils;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 更新日志中所用到的服务
@@ -60,7 +62,7 @@ public class LogStandardService {
             List<ChuanyunWorkHourDO> selfList = isRecent ? chuanyunWorkHourDao.getSelfWorkHourRecently(chuanyunUserCompanyDO.getUserId()) : chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
             this.generateSelfWorkHourByWorkHourList(selfList);
             log.info("每日工时标准化" + chuanyunUserCompanyDO.getUserName() + (Instant.now().getEpochSecond() - start) + "秒");
-        }else {
+        } else {
             log.warn("用户信息中userId缺失");
         }
     }
@@ -69,39 +71,41 @@ public class LogStandardService {
      * 标准化最近一个月每周工时
      */
     @Async
-    public void standardWeekMemberHourRecent(){
+    public void standardWeekMemberHourRecent() {
         List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHourRecently();
         this.generateWeekMemberHourByWeekMemberHourList(list);
     }
 
     /**
      * 根据用户Id标准化某个人的日工时
-     * @param userId    用户Id
+     *
+     * @param userId 用户Id
      */
     @Async
-    public void standardSelfWorkHourByUserId(String userId){
-        if (!StringUtils.isEmpty(userId)) {
+    public void standardSelfWorkHourByUserId(String userId) {
+        if (!userId.isBlank()) {
             //从日志原始数据中获取每人每个项目每天工时。
             List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHour(userId);
             this.generateSelfWorkHourByWorkHourList(selfList);
-        }else {
+        } else {
             log.warn("用户信息中userId缺失");
         }
     }
 
     /**
      * 根据用户Id标准化某个人的工时
-     * @param userId    用户Id
+     *
+     * @param userId 用户Id
      */
     @Async
-    public void standardWeekMemberHourByUserId(String userId){
+    public void standardWeekMemberHourByUserId(String userId) {
         if (!StringUtils.isEmpty(userId)) {
-            long start=Instant.now().getEpochSecond();
+            long start = Instant.now().getEpochSecond();
             //更新数据库
             List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHourByUserId(userId);
             this.generateWeekMemberHourByWeekMemberHourList(list);
-            log.info(userId+"统一周工时标准化"+(Instant.now().getEpochSecond()-start)+"秒");
-        }else {
+            log.info(userId + "统一周工时标准化" + (Instant.now().getEpochSecond() - start) + "秒");
+        } else {
             log.warn("用户信息中userId缺失");
         }
     }
@@ -110,14 +114,15 @@ public class LogStandardService {
      * 根据用户Id标准化某个人的月工时
      * 1.删除审核中的月工时
      * 2.将新工时数据保存在manatee中
-     * @param userId    用户Id
+     *
+     * @param userId 用户Id
      */
     @Async
-    public void standardSelfCostByUserId(String userId){
-        long start=Instant.now().getEpochSecond();
+    public void standardSelfCostByUserId(String userId) {
+        long start = Instant.now().getEpochSecond();
         //删除上一次状态为审核中,但本次已经审核通过的数据
-        chuanyunSelfCostDao.findAllByStatusAndUserId(ChuanYunConstant.IN_PROCESS,userId).forEach(chuanyunSelfCostDO -> {
-            List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList=chuanyunSelfWorkHourDao.findAllByUserIdAndProjectIdAndProjectTypeAndStatusAndDayLogDateBetween(
+        chuanyunSelfCostDao.findAllByStatusAndUserId(ChuanYunConstant.IN_PROCESS, userId).forEach(chuanyunSelfCostDO -> {
+            List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList = chuanyunSelfWorkHourDao.findAllByUserIdAndProjectIdAndProjectTypeAndStatusAndDayLogDateBetween(
                     chuanyunSelfCostDO.getUserId(),
                     chuanyunSelfCostDO.getProjectId(),
                     chuanyunSelfCostDO.getProjectType(),
@@ -125,55 +130,81 @@ public class LogStandardService {
                     chuanyunSelfCostDO.getDayLogDate(),
                     chuanyunSelfCostDO.getDayLogDate().plusMonths(1L));
             //如果没有仍在审批中的每日工时,则将该月、该项目的审核中的月工时统计删除,manatee数据库与氚云
-            if(chuanyunSelfWorkHourList.size()==0){
+            if (chuanyunSelfWorkHourList.size() == 0) {
                 //删除manatee中的在审核工时
                 chuanyunSelfCostDao.delete(chuanyunSelfCostDO);
                 dataArcherService.deleteSelfCostInProcess(chuanyunSelfCostDO);
             }
         });
-        //每月每项目工时,按月-项目-用户分组统计标准工时
-        List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHour(userId);
-        list.forEach(projectMonth->{
+
+        // 获取单人月度各项目总工时
+        List<ChuanyunSelfWorkHourDO> userAllSelfWorkHours = chuanyunSelfWorkHourDao.findByUserId(userId);
+        Map<LocalDate, Map<String, Map<String, Map<String, BigDecimal>>>> map = userAllSelfWorkHours.stream().collect(
+                Collectors.groupingBy(chuanyunSelfWorkHourDO -> LocalDate.of(chuanyunSelfWorkHourDO.getDayLogDate().getYear(), chuanyunSelfWorkHourDO.getDayLogDate().getMonth(), 1),
+                        Collectors.groupingBy(ChuanyunSelfWorkHourDO::getProjectId,
+                                Collectors.groupingBy(ChuanyunSelfWorkHourDO::getProjectType,
+                                        Collectors.groupingBy(ChuanyunSelfWorkHourDO::getStatus, Collectors.reducing(BigDecimal.ZERO, ChuanyunSelfWorkHourDO::getStandardWorkHour, BigDecimal::add)
+                                        )))));
+
+
+        // 每月每项目工时,按月-项目-用户分组统计标准工时
+        // List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHour(userId);
+        ArrayList<ChuanyunSelfWorkHourDO> list1 = new ArrayList<>();
+        map.forEach((localDate, projectIdMapMap) ->
+                projectIdMapMap.forEach((projectId, projectTypeMapMap) ->
+                        projectTypeMapMap.forEach((projectType, statusBigDecimalMap) ->
+                                statusBigDecimalMap.forEach((status, standardWorkHour) -> {
+                                    ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
+                                    chuanyunSelfWorkHourDO.setStandardWorkHour(standardWorkHour);
+                                    chuanyunSelfWorkHourDO.setStatus(status);
+                                    chuanyunSelfWorkHourDO.setProjectId(projectId);
+                                    // 设置项目类型
+                                    chuanyunSelfWorkHourDO.setProjectType(projectType);
+                                    chuanyunSelfWorkHourDO.setDayLogDate(localDate.atStartOfDay());
+                                    chuanyunSelfWorkHourDO.setUserId(userId);
+                                    list1.add(chuanyunSelfWorkHourDO);
+                                }))));
+
+        list1.forEach(projectMonth -> {
+            ChuanyunSelfCostDO chuanyunSelfCostDO = this.fromChuanyunSelfWorkHourDO(projectMonth);
             //获取人员-月度-相同工时状态标准工时汇总
-            ChuanyunSelfCostDO chuanyunSelfCostDO=this.fromChuanyunSelfWorkHourDO(projectMonth);
-            ChuanyunSelfCostDO oldSelfDO = chuanyunSelfCostDao.getOldSelfDO(chuanyunSelfCostDO.getUserId(),
-                    chuanyunSelfCostDO.getProjectId(),
-                    chuanyunSelfCostDO.getProjectType(),
-                    df.format(chuanyunSelfCostDO.getDayLogDate()),
+            ChuanyunSelfCostDO oldSelfDO = chuanyunSelfCostDao.getOldSelfDO(userId,
+                    projectMonth.getProjectId(),
+                    projectMonth.getProjectType(),
+                    df.format(projectMonth.getDayLogDate()),
                     projectMonth.getStatus());
-            if (oldSelfDO !=null) {
+            if (oldSelfDO != null) {
                 chuanyunSelfCostDao.delete(oldSelfDO);
             }
-            chuanyunSelfCostDao.save(chuanyunSelfCostDO);
+            chuanyunSelfCostDao.saveAndFlush(chuanyunSelfCostDO);
         });
-        log.info(userId+"统一月工时标准化"+(Instant.now().getEpochSecond()-start)+"秒");
+        log.info(userId + "统一月工时标准化" + (Instant.now().getEpochSecond() - start) + "秒");
     }
 
     /**
      * 根据日工时列表生成
-     * @param updateList    待更新列表
+     *
+     * @param updateList 待更新列表
      */
-    private void generateSelfWorkHourByWorkHourList(List<ChuanyunWorkHourDO> updateList){
+    private void generateSelfWorkHourByWorkHourList(List<ChuanyunWorkHourDO> updateList) {
         //逐一将原始工时数据标准化后,更新到标准化工时表和氚云中
-        updateList.forEach(self -> {
+        updateList.parallelStream().forEach(self -> {
             try {
                 //新建标准化工时对象,并将原始数据更新到此对象中,并计算标准化之后的工时
-                ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO=this.fromChuanyunWorkHourDO(self);
+                ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = this.fromChuanyunWorkHourDO(self);
                 //查询系统中是否有重复的标准化工时数据,如果有重复的人、天、项目数据,将原数据删除后更新为最新的数据
-                try{
-                    List<ChuanyunSelfWorkHourDO> list = new ArrayList<>();
-                    if (self.getStatus().equals("3")){
-                        list = chuanyunSelfWorkHourDao.findByUserIdAndProjectIdAndDayLogDateAndProjectTypeAndStatus(chuanyunSelfWorkHourDO.getUserId(), ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType()) ? ChuanYunConstant.PRODUCTION_PROJECT_ID : self.getProjectId(), self.getDayLogDate(), self.getProjectType(),self.getStatus());
-                    }else{
+                try {
+                    List<ChuanyunSelfWorkHourDO> list;
+                    if (self.getStatus().equals("3")) {
+                        list = chuanyunSelfWorkHourDao.findByUserIdAndProjectIdAndDayLogDateAndProjectTypeAndStatus(chuanyunSelfWorkHourDO.getUserId(), ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType()) ? ChuanYunConstant.PRODUCTION_PROJECT_ID : self.getProjectId(), self.getDayLogDate(), self.getProjectType(), self.getStatus());
+                    } else {
                         list = chuanyunSelfWorkHourDao.findByUserIdAndProjectIdAndDayLogDateAndProjectType(chuanyunSelfWorkHourDO.getUserId(), ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType()) ? ChuanYunConstant.PRODUCTION_PROJECT_ID : self.getProjectId(), self.getDayLogDate(), self.getProjectType());
                     }
-                    if (list != null&&list.size()>0) {
-                        for (ChuanyunSelfWorkHourDO oldSelfWorkHour : list){
-                            chuanyunSelfWorkHourDao.delete(oldSelfWorkHour);
-                        }
+                    if (list != null && list.size() > 0) {
+                        chuanyunSelfWorkHourDao.deleteAll(list);
                     }
-                    chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
-                }catch (Exception e){
+                    chuanyunSelfWorkHourDao.saveAndFlush(chuanyunSelfWorkHourDO);
+                } catch (Exception e) {
                     log.error(e.getMessage());
                 }
             } catch (Exception e) {
@@ -186,36 +217,40 @@ public class LogStandardService {
 
     /**
      * 根据周工时列表
-     * @param updateList    待更新的周工时列表
+     *
+     * @param updateList 待更新的周工时列表
      */
-    private void generateWeekMemberHourByWeekMemberHourList(List<ChuanyunWeekMemberHourDO> updateList){
+    private void generateWeekMemberHourByWeekMemberHourList(List<ChuanyunWeekMemberHourDO> updateList) {
         updateList.forEach(chuanyunWeekMemberHourDO -> {
-            try{
-                if (chuanyunWeekMemberHourDO!=null){
+            try {
+                if (chuanyunWeekMemberHourDO != null) {
                     ChuanyunWeekMemberHourDO weekMemberHourDO = ChuanyunWeekMemberHourDO.fromChuanyunWeekMemberHourDO(chuanyunWeekMemberHourDO);
-                    ChuanyunWeekMemberHourDO oldWeekHour = chuanyunWeekMemberHourDao.findByProjectIdAndUserIdAndWeekAndStatusAndProjectTypeAndYear(chuanyunWeekMemberHourDO.getProjectId(),chuanyunWeekMemberHourDO.getUserId(),chuanyunWeekMemberHourDO.getWeek(),chuanyunWeekMemberHourDO.getStatus(),chuanyunWeekMemberHourDO.getProjectType(),chuanyunWeekMemberHourDO.getYear());
+                    ChuanyunWeekMemberHourDO oldWeekHour = chuanyunWeekMemberHourDao.findByProjectIdAndUserIdAndWeekAndStatusAndProjectTypeAndYear(chuanyunWeekMemberHourDO.getProjectId(), chuanyunWeekMemberHourDO.getUserId(), chuanyunWeekMemberHourDO.getWeek(), chuanyunWeekMemberHourDO.getStatus(), chuanyunWeekMemberHourDO.getProjectType(), chuanyunWeekMemberHourDO.getYear());
                     if (oldWeekHour != null) {
                         chuanyunWeekMemberHourDao.delete(oldWeekHour);
                     }
-                    chuanyunWeekMemberHourDao.save(weekMemberHourDO);
+                    chuanyunWeekMemberHourDao.saveAndFlush(weekMemberHourDO);
                     //搜索是否还有处于审批中的数据
-                    ChuanyunWeekMemberHourDO processWeekHour = chuanyunWeekMemberHourDao.getProcessWeekHour(chuanyunWeekMemberHourDO.getProjectId(),chuanyunWeekMemberHourDO.getUserId(),chuanyunWeekMemberHourDO.getYear(),chuanyunWeekMemberHourDO.getWeek(),chuanyunWeekMemberHourDO.getProjectType());
-                    if (processWeekHour == null){
-                        chuanyunWeekMemberHourDao.deleteByProjectIdAndUserIdAndYearAndWeekAndStatusAndProjectType(chuanyunWeekMemberHourDO.getProjectId(),chuanyunWeekMemberHourDO.getUserId(),chuanyunWeekMemberHourDO.getYear(),chuanyunWeekMemberHourDO.getWeek(),"2",chuanyunWeekMemberHourDO.getProjectType());
+                    ChuanyunWeekMemberHourDO processWeekHour = chuanyunWeekMemberHourDao.getProcessWeekHour(chuanyunWeekMemberHourDO.getProjectId(), chuanyunWeekMemberHourDO.getUserId(), chuanyunWeekMemberHourDO.getYear(), chuanyunWeekMemberHourDO.getWeek(), chuanyunWeekMemberHourDO.getProjectType());
+
+                    if (processWeekHour == null) {
+                        chuanyunWeekMemberHourDao.deleteByProjectIdAndUserIdAndYearAndWeekAndStatusAndProjectType(chuanyunWeekMemberHourDO.getProjectId(), chuanyunWeekMemberHourDO.getUserId(), chuanyunWeekMemberHourDO.getYear(), chuanyunWeekMemberHourDO.getWeek(), "2", chuanyunWeekMemberHourDO.getProjectType());
                         //同时删除氚云钟数据
-                        dataArcherService.deleteExamineStatus(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,"F0000007","F0000001",chuanyunWeekMemberHourDO.getProjectId(),"F0000002",chuanyunWeekMemberHourDO.getUserId(),"F0000008",chuanyunWeekMemberHourDO.getYear(),"","","F0000006",chuanyunWeekMemberHourDO.getWeek(),"F0000003",chuanyunWeekMemberHourDO.getProjectType());
+                        dataArcherService.deleteExamineStatus(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, "F0000007", "F0000001", chuanyunWeekMemberHourDO.getProjectId(), "F0000002", chuanyunWeekMemberHourDO.getUserId(), "F0000008", chuanyunWeekMemberHourDO.getYear(), "", "", "F0000006", chuanyunWeekMemberHourDO.getWeek(), "F0000003", chuanyunWeekMemberHourDO.getProjectType());
                     }
                 }
-            }catch (Exception e){
-                log.error(e.getMessage()+"周工时标准化异常");
+            } catch (Exception e) {
+                log.error("chuanyunWeekMemberHourDO: {}", chuanyunWeekMemberHourDO);
+                log.error(e.getMessage() + "周工时标准化异常");
             }
         });
     }
 
     /**
      * 根据日志原始数据统计的每日每人工时获取工时标准化后的标准化对象
-     * @param chuanyunWorkHourDO    日志原始统计数据
-     * @return  工时标准化对象
+     *
+     * @param chuanyunWorkHourDO 日志原始统计数据
+     * @return 工时标准化对象
      */
     private ChuanyunSelfWorkHourDO fromChuanyunWorkHourDO(ChuanyunWorkHourDO chuanyunWorkHourDO) throws Exception {
         //由于日志原始工时可能存在项目类型不准确的情况,需要根据项目ID获取真实的项目类型
@@ -226,14 +261,18 @@ public class LogStandardService {
                 throw new Exception("没有找到对应的项目");
             }
             //如果找到相应的项目,则使用项目实际的项目类型
-            projectType=chuanyunGroupProject.getProjectType();
+            projectType = chuanyunGroupProject.getProjectType();
         } catch (Exception e) {
             //没有找到对应项目,使用原项目类型
-            projectType=chuanyunWorkHourDO.getProjectType();
+            projectType = chuanyunWorkHourDO.getProjectType();
         }
-        ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = ChuanyunSelfWorkHourDO.fromChuanyunWorkHourDO(chuanyunWorkHourDO,projectType);
+        ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = ChuanyunSelfWorkHourDO.fromChuanyunWorkHourDO(chuanyunWorkHourDO, projectType);
         //获取每人每天总工时
         ChuanyunWorkHourDO oneDayTotalHour = chuanyunWorkHourDao.getDayWorkHour(chuanyunWorkHourDO.getUserId(), chuanyunWorkHourDO.getDayLogDate());
+
+        // 获取每天总工时
+//        ChuanyunOneDayWorkHourDO oneDayTotalHour = chuanyunOneDayWorkHourDao.getOneDayTotalHour(chuanyunWorkHourDO.getUserId(), chuanyunWorkHourDO.getDayLogDate());
+
         //工时标准化
         if (oneDayTotalHour != null) {
             BigDecimal standard = new BigDecimal(8);
@@ -242,17 +281,17 @@ public class LogStandardService {
             } else {
                 BigDecimal personDays = (chuanyunWorkHourDO.getHoursWorked().divide(oneDayTotalHour.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
                 chuanyunSelfWorkHourDO.setStandardWorkHour(personDays);
-             }
-        }else{
+            }
+        } else {
             throw new Exception("获取每日总工时失败");
         }
         //获取人员所属BG
-        if (StringUtils.isEmpty(chuanyunWorkHourDO.getBgName())){
-            List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.findByUserIdAndProjectIdAndDayLogDateAndProjectType(chuanyunWorkHourDO.getUserId(),chuanyunWorkHourDO.getProjectId(),chuanyunWorkHourDO.getDayLogDate(),chuanyunWorkHourDO.getProjectType());
-            if (list.size()>0&&list!=null){
+        if (StringUtils.isEmpty(chuanyunWorkHourDO.getBgName())) {
+            List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.findByUserIdAndProjectIdAndDayLogDateAndProjectType(chuanyunWorkHourDO.getUserId(), chuanyunWorkHourDO.getProjectId(), chuanyunWorkHourDO.getDayLogDate(), chuanyunWorkHourDO.getProjectType());
+            if (!Objects.isNull(list) && !list.isEmpty()) {
                 chuanyunSelfWorkHourDO.setBg(list.get(0).getBg());
             }
-        }else {
+        } else {
             chuanyunSelfWorkHourDO.setBg(chuanyunWorkHourDO.getBgName());
         }
         return chuanyunSelfWorkHourDO;
@@ -260,22 +299,23 @@ public class LogStandardService {
 
     /**
      * 根据ChuanyunSelfWorkHourDO获取ChuanyunSelfCostDO对象
-     * @param chuanyunSelfWorkHourDO    统计月工时对象
-     * @return  待保存的月工时对象
+     *
+     * @param chuanyunSelfWorkHourDO 统计月工时对象
+     * @return 待保存的月工时对象
      */
-    private ChuanyunSelfCostDO fromChuanyunSelfWorkHourDO(ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO){
-        ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(chuanyunSelfWorkHourDO.getUserId(),df.format(chuanyunSelfWorkHourDO.getDayLogDate()),chuanyunSelfWorkHourDO.getStatus());
+    private ChuanyunSelfCostDO fromChuanyunSelfWorkHourDO(ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO) {
+
         ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
         chuanyunSelfCostDO.setStatus(chuanyunSelfWorkHourDO.getStatus());
-        if (monthHour!=null){
-            chuanyunSelfCostDO.setMonthlyTotalHour(monthHour.getStandardWorkHour());
+        if (chuanyunSelfWorkHourDO.getStandardWorkHour() != null) {
+            chuanyunSelfCostDO.setMonthlyTotalHour(chuanyunSelfWorkHourDO.getStandardWorkHour());
         }
         chuanyunSelfCostDO.setProjectId(chuanyunSelfWorkHourDO.getProjectId());
         chuanyunSelfCostDO.setProjectType(chuanyunSelfWorkHourDO.getProjectType());
         chuanyunSelfCostDO.setUserId(chuanyunSelfWorkHourDO.getUserId());
         chuanyunSelfCostDO.setDayLogDate(chuanyunSelfWorkHourDO.getDayLogDate().withDayOfMonth(1));
         chuanyunSelfCostDO.setTotalHour(chuanyunSelfWorkHourDO.getStandardWorkHour());
-        ChuanyunUserCompanyDO chuanyunUserCompanyDO=chuanyunUserCompanyDao.findByUserId(chuanyunSelfWorkHourDO.getUserId());
+        ChuanyunUserCompanyDO chuanyunUserCompanyDO = chuanyunUserCompanyDao.findByUserId(chuanyunSelfWorkHourDO.getUserId());
         chuanyunSelfCostDO.setDepartmentId(chuanyunUserCompanyDO.getDepartmentId());
         return chuanyunSelfCostDO;
     }

+ 11 - 0
src/main/java/com/galaxis/manatee/task/ChuanyunBasicDataScheduledTask.java

@@ -271,6 +271,7 @@ public class ChuanyunBasicDataScheduledTask {
         if(groupProjectMemberListUpdateDTO.getProjectMemberList()!=null&&groupProjectMemberListUpdateDTO.getProjectMemberList().length>0){
             //添加项目组成员权限
             groupProjectMemberListUpdateDTO.add();
+            String[] addProjectMemberList = groupProjectMemberListUpdateDTO.getProjectMemberList();
             try {
                 ChuanyunSaveDTO newChuanyunSaveDTO=chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),objectMapper.writeValueAsString(groupProjectMemberListUpdateDTO));
             } catch (Exception e) {
@@ -278,10 +279,20 @@ public class ChuanyunBasicDataScheduledTask {
                 log.warn(chuanyunGroupProjectDO.getObjectId()+"更新项目成员失败"+e.getMessage());
             }
             groupProjectMemberListUpdateDTO.delete();
+            // 第一次更新为提交操作,后进行删除后,再次进行更新操作。之后再新增成员后更新。
+            try {
+                ChuanyunSaveDTO newChuanyunSaveDTO=chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),objectMapper.writeValueAsString(groupProjectMemberListUpdateDTO));
+            } catch (Exception e) {
+                log.error("manatee自动删除项目组成员后更新失败: {}, 异常信息: {}", chuanyunGroupProjectDO.getObjectId(), e.getMessage());
+                e.printStackTrace();
+            }
             //保证项目成员信息更新成功
             boolean updateFlag=false;
             while (!updateFlag){
                 try {
+                    // 重新将项目组成员设置进去。
+                    groupProjectMemberListUpdateDTO.setProjectMemberList(addProjectMemberList);
+                    groupProjectMemberListUpdateDTO.add();
                     var groupProjectMemberListUpdateString=objectMapper.writeValueAsString(groupProjectMemberListUpdateDTO);
                     ChuanyunSaveDTO chuanyunSaveDTO=chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),groupProjectMemberListUpdateString);
                     if(chuanyunSaveDTO.getSuccessful()){

+ 16 - 1
src/main/resources/application.yml

@@ -52,6 +52,8 @@ spring:
     url: ${MYSQL_URL}
     username: ${USER_NAME}
     password: ${PASSWORD}
+    hikari:
+      maximum-pool-size: 128
   jpa:
     database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
     hibernate:
@@ -60,5 +62,18 @@ claw:
   url: ${CLAW_URL}
 logging:
   file:
-    path: ${LOG_FILE_URL}
+    name: "logs/manatee.log"
+  pattern:
+    file: "[%-12d{HH:mm:ss.SSS}][%-5level][%-50logger{50} :%-3L][%-45thread] %msg%n"
+    console: ${logging.pattern.file}
+  logback:
+    rollingpolicy:
+      # 归档日志名
+      file-name-pattern: "${logging.file.name}.%d{yyyy-MM-dd}.%i.log.gz"
+      # 日志文件到达多大就自动压缩
+      max-file-size: 1024MB
+      # 归档文件保留多少天
+      max-history: 30
+      # 启动程序时, 自动清理历史的归档文件
+      clean-history-on-start: true