Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/1.0' into 1.0

verguenza 4 rokov pred
rodič
commit
3586f8642d

+ 11 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunSelfCostDao.java

@@ -3,6 +3,8 @@ package com.galaxis.manatee.dao;
 import com.galaxis.capsule.util.GalaxisRepository;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfCostDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
@@ -30,6 +32,15 @@ public interface ChuanyunSelfCostDao extends GalaxisRepository<ChuanyunSelfCostD
     List<ChuanyunSelfCostDO> getMemberCost();
 
     /**
+     * 获取最近一个月工时
+     * @param pagerequest
+     * @return
+     */
+    @Query(value="SELECT * FROM chuanyun_self_cost WHERE MONTH(chuanyun_self_cost.day_log_date)>=(MONTH(NOW())-1) AND YEAR(chuanyun_self_cost.day_log_date)=YEAR(NOW())"
+            ,countQuery="SELECT COUNT(1) FROM chuanyun_self_cost WHERE MONTH(chuanyun_self_cost.day_log_date)>=(MONTH(NOW())-1) AND YEAR(chuanyun_self_cost.day_log_date)=YEAR(NOW())",nativeQuery = true)
+    Page<ChuanyunSelfCostDO> getRecentlyMonthHour(PageRequest pagerequest);
+
+    /**
      * 根据用户ID和项目ID,日期获取工时成本数据
      * @param userId    用户Id
      * @param projectId 项目Id

+ 37 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunSelfWorkHourDao.java

@@ -4,10 +4,13 @@ package com.galaxis.manatee.dao;
 import com.galaxis.capsule.util.GalaxisRepository;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
+import java.awt.print.Pageable;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -38,6 +41,15 @@ public interface ChuanyunSelfWorkHourDao extends GalaxisRepository<ChuanyunSelfW
     List<ChuanyunSelfWorkHourDO> findAllByUserIdAndProjectIdAndProjectTypeAndStatusAndDayLogDateBetween(String userId,String projectId,String projectType,String status,LocalDateTime start,LocalDateTime end);
 
     /**
+     * 获取最近一个月日工时
+     * @param pageable
+     * @return
+     */
+    @Query(value="SELECT * FROM chuanyun_self_work_hour WHERE DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(chuanyun_self_work_hour.day_log_date)\n",
+            countQuery="SELECT count(1) FROM chuanyun_self_work_hour WHERE DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(chuanyun_self_work_hour.day_log_date)\n",nativeQuery = true)
+    Page<ChuanyunSelfWorkHourDO> getRecentlyDayHour(PageRequest pageable);
+
+    /**
      * 获取人员-项目-月度标准总工时
      * @param userId    用户ID
      * @return  汇总数据
@@ -59,6 +71,31 @@ public interface ChuanyunSelfWorkHourDao extends GalaxisRepository<ChuanyunSelfW
             nativeQuery = true)
     List<ChuanyunSelfWorkHourDO> getMonthProjectHour(String userId);
 
+
+    /**
+     * 获取最近一个月工时
+     * @param userId
+     * @return
+     */
+    @Query(value="SELECT SUM(chuanyun_self_work_hour.standard_work_hour) AS standard_work_hour," +
+            "chuanyun_self_work_hour.day_log_date," +
+            "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.object_id " +
+            "FROM chuanyun_self_work_hour " +
+            "WHERE chuanyun_self_work_hour.user_id=? " +
+            "AND MONTH(chuanyun_self_work_hour.day_log_date)>=(MONTH(NOW())-1) " +
+            "AND YEAR(chuanyun_self_work_hour.day_log_date)=YEAR(NOW()) " +
+            "GROUP BY chuanyun_self_work_hour.user_id," +
+            "DATE_FORMAT(chuanyun_self_work_hour.day_log_date,'%Y-%m')," +
+            "chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.status," +
+            "chuanyun_self_work_hour.project_type",
+            nativeQuery = true)
+    List<ChuanyunSelfWorkHourDO> getMonthProjectHourRecently(String userId);
+
     /**
      * 获取人员月度标准工时汇总
      * @param userId    用户ID

+ 36 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunWeekMemberHourDao.java

@@ -3,6 +3,8 @@ package com.galaxis.manatee.dao;
 import com.galaxis.capsule.util.GalaxisRepository;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectCostDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWeekMemberHourDO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
@@ -43,6 +45,40 @@ public interface ChuanyunWeekMemberHourDao extends GalaxisRepository<ChuanyunWee
     List<ChuanyunWeekMemberHourDO> getWeekMemberHour();
 
     /**
+     * 获取最近一个月周工时
+     * @return
+     */
+    @Query(value="SELECT chuanyun_self_work_hour.object_id," +
+            "DATE_FORMAT(day_log_date,'%Y') as year," +
+            "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date) AS week," +
+            "project_id,user_id," +
+            "SUM(standard_work_hour)AS standard_work_hour," +
+            "project_type," +
+            "`status`" +
+            "FROM chuanyun_self_work_hour " +
+            "WHERE project_id !='' " +
+            "AND WEEKOFYEAR(chuanyun_self_work_hour.day_log_date)>=(WEEKOFYEAR(NOW())-4)" +
+            "AND DATE_FORMAT(day_log_date,'%Y')=YEAR(NOW()) " +
+            "GROUP BY chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.project_type," +
+            "chuanyun_self_work_hour.user_id," +
+            "DATE_FORMAT(day_log_date,'%Y')," +
+            "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date)," +
+            "chuanyun_self_work_hour.`status`",nativeQuery = true)
+    List<ChuanyunWeekMemberHourDO> getWeekMemberHourRecently();
+
+
+    /**
+     * 获取最近一个月周工时
+     * @param
+     * @param pagerequest
+     * @return
+     */
+    @Query(value="SELECT * FROM chuanyun_week_member_hour WHERE chuanyun_week_member_hour.`week` >= (WEEKOFYEAR(NOW())-4) AND chuanyun_week_member_hour.`year`=YEAR(NOW())",
+            countQuery="SELECT COUNT(1) FROM chuanyun_week_member_hour WHERE chuanyun_week_member_hour.`week` >= (WEEKOFYEAR(NOW())-4) AND chuanyun_week_member_hour.`year`=YEAR(NOW())",nativeQuery = true)
+    Page<ChuanyunWeekMemberHourDO> getRecentlyWeekHour(PageRequest pagerequest);
+
+    /**
      * 判断是否有流程中数据
      * @return
      */

+ 25 - 1
src/main/java/com/galaxis/manatee/dao/ChuanyunWorkHourDao.java

@@ -30,7 +30,7 @@ public interface ChuanyunWorkHourDao extends GalaxisRepository<ChuanyunWorkHourD
             "FROM chuanyun_day_log "+
             "LEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id " +
             " WHERE chuanyun_log.user_id = ? " +
-//            "AND chuanyun_log.log_date>='2020-08-01'" +
+//            "AND chuanyun_log.log_date>='2020-08-12'" +
             " GROUP BY chuanyun_day_log.project_id," +
             "chuanyun_log.user_id," +
             "chuanyun_day_log.project_type," +
@@ -40,6 +40,30 @@ public interface ChuanyunWorkHourDao extends GalaxisRepository<ChuanyunWorkHourD
     List<ChuanyunWorkHourDO> getSelfWorkHour(String userId);
 
     /**
+     * 根据用户Id获取用户最近一个月日志明细,并按日期拍
+     * @param userId
+     * @return
+     */
+    @Query(value="SELECT chuanyun_day_log.object_id," +
+            "SUM(chuanyun_day_log.hours_worked) AS hours_worked," +
+            "chuanyun_day_log.project_id," +
+            "chuanyun_day_log.project_type," +
+            "chuanyun_log.user_id," +
+            "chuanyun_log.status," +
+            "chuanyun_day_log.day_log_date " +
+            "FROM chuanyun_day_log "+
+            "LEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id " +
+            " WHERE chuanyun_log.user_id = ? " +
+            "AND DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(chuanyun_day_log.day_log_date)" +
+            " GROUP BY chuanyun_day_log.project_id," +
+            "chuanyun_log.user_id," +
+            "chuanyun_day_log.project_type," +
+            "chuanyun_log.status," +
+            "chuanyun_day_log.day_log_date",
+            nativeQuery = true)
+    List<ChuanyunWorkHourDO> getSelfWorkHourRecently(String userId);
+
+    /**
      * 根据用户ID和日期筛选工时数据
      * @param userId    用户Id
      * @param day   日期

+ 34 - 33
src/main/java/com/galaxis/manatee/task/WorkHourStatistics.java

@@ -57,10 +57,17 @@ public class WorkHourStatistics {
         this.chuanyunWeekMemberHourDao = chuanyunWeekMemberHourDao;
     }
 
+
+    @Scheduled(cron = "0 0 2 ? * SAT")
+    public void updateHour() {
+        standardWorkHour();
+        standardWeeklyWorkHour();
+        standardMonthlyWorkHour();
+    }
+
     /**
-     * 人力成本
+     * 每日工时标准化
      */
-    @Scheduled(fixedDelay = 3600000L)
     private void standardWorkHour() {
         var flag = true;
         var pageSize = 20;
@@ -134,10 +141,8 @@ public class WorkHourStatistics {
     /**
      * 人员-项目-周度工时汇总
      */
-    @Scheduled(fixedDelay = 3600000L)
     private void standardWeeklyWorkHour() {
         long start=Instant.now().getEpochSecond();
-
         //更新数据库
         log.info("开始周工时标准化");
         List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHour();
@@ -176,7 +181,6 @@ public class WorkHourStatistics {
     /**
      * 单月工时汇总
      */
-    @Scheduled(fixedDelay = 3600000L)
     private void standardMonthlyWorkHour() {
         var flag = true;
         var pageSize = 20;
@@ -246,7 +250,6 @@ public class WorkHourStatistics {
         list.forEach(projectMonth->{
             //获取人员-月度-相同工时状态标准工时汇总
             ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()),projectMonth.getStatus());
-
             ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
             chuanyunSelfCostDO.setStatus(projectMonth.getStatus());
             if (monthHour!=null){
@@ -331,7 +334,6 @@ public class WorkHourStatistics {
         var pageSize = 20;
         var page = 0;
         log.info("开始更新周工时汇总");
-//        deleteExamineStatus(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,"F0000007");
         long startTime=Instant.now().getEpochSecond();
         while(flag) {
             var pageable = PageRequest.of(page, pageSize);
@@ -395,8 +397,6 @@ public class WorkHourStatistics {
         var pageSize = 20;
         var page = 0;
         log.info("开始更新月工时汇总");
-        //删除氚云表单审核中数据
-//        deleteExamineStatus(ChuanyunMemberMonthCostDO.SCHEMA_CODE,"F0000009");
         long startTime=Instant.now().getEpochSecond();
         while(flag) {
             var pageable = PageRequest.of(page, pageSize);
@@ -405,7 +405,6 @@ public class WorkHourStatistics {
                 page += 1;
                 updateList.getContent().forEach(chuanyunSelfCostDO -> {
                     ChuanyunMemberMonthCostDTO chuanyunMemberMonthCostDTO = new ChuanyunMemberMonthCostDTO();
-
                     //更新氚云数据
                     chuanyunMemberMonthCostDTO.setCost(chuanyunSelfCostDO.getCost());
                     chuanyunMemberMonthCostDTO.setProjectId(chuanyunSelfCostDO.getProjectId());
@@ -416,30 +415,32 @@ public class WorkHourStatistics {
                     chuanyunMemberMonthCostDTO.setDayLogDate(chuanyunSelfCostDO.getDayLogDate());
                     chuanyunMemberMonthCostDTO.setWorkHour(chuanyunSelfCostDO.getTotalHour());
                     chuanyunMemberMonthCostDTO.setDepartmentId(chuanyunSelfCostDO.getDepartmentId());
-                    try {
-                        List<String> matchers = new ArrayList<>();
-                        matchers.add("F0000003_2,"+chuanyunSelfCostDO.getProjectId());
-                        matchers.add("F0000009_2,"+chuanyunSelfCostDO.getStatus());
-                        matchers.add("F0000002_2,"+chuanyunSelfCostDO.getUserId());
-                        matchers.add("F0000008_2,"+chuanyunSelfCostDO.getProjectType());
-                        matchers.add("F0000004_2,"+chuanyunSelfCostDO.getDayLogDate());
-                        var filter= Filter.instance(0,1,true,"And",matchers);
-                        var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
-                        var memberMonthString=objectMapper.writeValueAsString(chuanyunMemberMonthCostDTO);
-                        ChuanyunSaveDTO chuanyunSaveDTO;
-                        if (chuanyunFindAllResponse.getReturnData()!=null){
-                            List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-                            ChuanyunMemberMonthCostDO firstResult = result.get(0);
-                            chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE,firstResult.getObjectId(),memberMonthString);
-                        }else {
-                            chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE,memberMonthString,true);
-                        }
-                        if(!chuanyunSaveDTO.getSuccessful()){
-                            log.warn("新增项目成员月度成本汇总失败");
+                    if (!StringUtils.isEmpty(chuanyunSelfCostDO.getProjectId())){
+                        try {
+                            List<String> matchers = new ArrayList<>();
+                            matchers.add("F0000003_2,"+chuanyunSelfCostDO.getProjectId());
+                            matchers.add("F0000009_2,"+chuanyunSelfCostDO.getStatus());
+                            matchers.add("F0000002_2,"+chuanyunSelfCostDO.getUserId());
+                            matchers.add("F0000008_2,"+chuanyunSelfCostDO.getProjectType());
+                            matchers.add("F0000004_2,"+chuanyunSelfCostDO.getDayLogDate());
+                            var filter= Filter.instance(0,1,true,"And",matchers);
+                            var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
+                            var memberMonthString=objectMapper.writeValueAsString(chuanyunMemberMonthCostDTO);
+                            ChuanyunSaveDTO chuanyunSaveDTO;
+                            if (chuanyunFindAllResponse.getReturnData()!=null){
+                                List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                                ChuanyunMemberMonthCostDO firstResult = result.get(0);
+                                chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE,firstResult.getObjectId(),memberMonthString);
+                            }else {
+                                chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE,memberMonthString,true);
+                            }
+                            if(!chuanyunSaveDTO.getSuccessful()){
+                                log.warn("新增项目成员月度成本汇总失败");
+                            }
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            log.warn("########"+chuanyunSelfCostDO+"");
                         }
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                        log.warn("########"+chuanyunSelfCostDO+"");
                     }
                 });
             }else {

+ 571 - 0
src/main/java/com/galaxis/manatee/task/WorkHourStatisticsRecently.java

@@ -0,0 +1,571 @@
+package com.galaxis.manatee.task;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.constant.ChuanYunConstant;
+import com.galaxis.manatee.dao.*;
+import com.galaxis.manatee.entity.chuanyun.data.object.*;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunFindAllBizDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.Filter;
+import com.galaxis.manatee.exception.BigSizeException;
+import com.galaxis.manatee.manager.ChuanYunManager;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@Slf4j
+public class WorkHourStatisticsRecently {
+
+    private final Integer pageSize = 100;
+    private final ChuanYunManager chuanYunManager;
+    private final ChuanyunLogDao chuanyunLogDao;
+    private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
+    private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
+    private final ChuanyunWorkHourDao chuanyunWorkHourDao;
+    private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
+    private final ObjectMapper objectMapper=new ObjectMapper();
+    private final ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao;
+    private final ChuanyunSelfCostDao chuanyunSelfCostDao;
+
+
+
+
+    public WorkHourStatisticsRecently(ChuanYunManager chuanYunManager, ChuanyunLogDao chuanyunLogDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao) {
+        this.chuanYunManager = chuanYunManager;
+        this.chuanyunLogDao = chuanyunLogDao;
+        this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
+        this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
+        this.chuanyunWorkHourDao = chuanyunWorkHourDao;
+        this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
+        this.chuanyunWeekMemberHourDao = chuanyunWeekMemberHourDao;
+        this.chuanyunSelfCostDao = chuanyunSelfCostDao;
+    }
+
+    @Scheduled(fixedDelay = 3600000L)
+    public void updateHour() {
+        dayLog();
+        standardWorkHour();
+        standardWeeklyWorkHour();
+        standardMonthlyWorkHour();
+    }
+
+    /**
+     * 更新最近一个月的日志信息
+     */
+    public void dayLog() {
+        var objectMapper = new ObjectMapper();
+        var start = 0;
+        var totalCount = 0L;
+        var flag = true;
+        List<String> matchersString=new ArrayList<>();
+        //由于需要统计流程中的日志,在日志数据同步时将状态为2的数据一并统计
+        matchersString.add("Status_6,[1;2]");
+        //获取当前时间30天前日期
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime now = LocalDateTime.now();
+        now = now.minus(30, ChronoUnit.DAYS);
+        matchersString.add("logDate_1,"+df.format(now));
+        while (flag) {
+            Long startTime= Instant.now().getEpochSecond();
+            try {
+                //从氚云查询数据
+                var filter= Filter.instance(start,start+pageSize,true,Filter.AND,matchersString);
+                var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunLogDO.SCHEMA_CODE, filter);
+                if (chuanyunFindAllResponse.getReturnData() == null) {
+                    flag = false;
+                    continue;
+                }
+                if (chuanyunFindAllResponse.getReturnData().getTotalCount() >= start + pageSize) {
+                    start += pageSize;
+                } else {
+                    flag = false;
+                }
+                //转化为POJO
+                List<ChuanyunLogDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                });
+                result.forEach(chuanyunLogDO -> {
+                    if(chuanyunLogDO.getDayLogList()==null||chuanyunLogDO.getDayLogList().size()==0){
+                        chuanyunLogDO.setDayLogList(new ArrayList<>());
+                        log.warn(chuanyunLogDO+"");
+                        log.warn("异常数据");
+                    }else{
+                        //如果有重复就删除
+                        chuanyunLogDao.findById(chuanyunLogDO.getObjectId()).ifPresent(toDelete -> {
+                            chuanyunLogDao.delete(toDelete);
+                        });
+                        //根据projectId获取code,如果是生产项目,则不用处理
+                        //针对前期测试数据,可能出现日志为空的情况,跳过不处理
+                        chuanyunLogDO.getDayLogList().forEach(chuanyunDayLog -> {
+                            try{
+                                if(!"生产项目".equals(chuanyunDayLog.getProjectType())&& StringUtils.isEmpty(chuanyunDayLog.getProjectId())){
+                                    log.info(chuanyunLogDO+"");
+                                }else if(!"生产项目".equals(chuanyunDayLog.getProjectType())){
+                                    ChuanyunGroupProjectDO chuanyunGroupProjectDO=chuanyunGroupProjectDao.findById(chuanyunDayLog.getProjectId()).orElseThrow();
+                                    chuanyunDayLog.setProjectCode(chuanyunGroupProjectDO.getProjectCode());
+                                }
+                            }catch (Exception e){
+                                e.printStackTrace();
+                                log.warn(chuanyunDayLog+"");
+                            }
+                        });
+                    }
+                    //处理项目userId
+                    if(chuanyunLogDO.getUserObject()!=null){
+                        chuanyunLogDO.setUserId(chuanyunLogDO.getUserObject().getObjectId());
+                    }
+                });
+                //获取项目总数
+                totalCount = chuanyunFindAllResponse.getReturnData().getTotalCount();
+                //保存
+                chuanyunLogDao.saveAll(result);
+            } catch (Exception e) {
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+            log.info(Instant.now().getEpochSecond()-startTime+"日志100条保存时间");
+        }
+        log.info("最近一月历史日志信息保存" + totalCount);
+    }
+
+    /**
+     * 同步最近一个月每日工时
+     */
+    public void standardWorkHour() {
+        var flag = true;
+        var pageSize = 20;
+        var page = 0;
+        long startTime=Instant.now().getEpochSecond();
+        while(flag) {
+            var pageable= PageRequest.of(page,pageSize);
+            var chuanyunUserCompanyList = chuanyunUserCompanyDao.findAllByStatus(1,pageable);
+            if (page<=chuanyunUserCompanyList.getTotalPages()){
+                page += 1;
+                //逐个将员工每天工时进行统计汇总
+                List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
+                userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
+                    long start= Instant.now().getEpochSecond();
+                    //工时标准化
+                    standardHour(chuanyunUserCompanyDO);
+                    log.info("每日工时标准化"+chuanyunUserCompanyDO.getUserName()+(Instant.now().getEpochSecond()-start)+"秒");
+                });
+            }else {
+                break;
+            }
+        }
+        log.info("每日工时标准化"+(Instant.now().getEpochSecond()-startTime)+"秒");
+        updateChuanyunStandardWorkHour();
+    }
+
+    /**
+     * 员工单日、各个项目工时标准化,并保存
+     * @param chuanyunUserCompanyDO 员工信息
+     */
+    private void standardHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
+        BigDecimal standard = new BigDecimal(8);
+        //每人每个项目每天工时
+        List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHourRecently(chuanyunUserCompanyDO.getUserId());
+        selfList.forEach(self->{
+            try{
+                ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
+                chuanyunSelfWorkHourDO.setStatus(self.getStatus());
+                chuanyunSelfWorkHourDO.setUserId(chuanyunUserCompanyDO.getUserId());
+                chuanyunSelfWorkHourDO.setProjectType(self.getProjectType());
+                if(ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())){
+                    chuanyunSelfWorkHourDO.setProjectId(ChuanYunConstant.PRODUCTION_PROJECT_ID);
+                }else{
+                    chuanyunSelfWorkHourDO.setProjectId(self.getProjectId());
+                }
+                chuanyunSelfWorkHourDO.setDayLogDate(self.getDayLogDate());
+                //每人每天工时
+                ChuanyunWorkHourDO chuanyunWorkHourDO = chuanyunWorkHourDao.getDayWorkHour(chuanyunUserCompanyDO.getUserId(),self.getDayLogDate());
+                //工时标准化
+                if (chuanyunWorkHourDO != null) {
+                    if (chuanyunWorkHourDO.getHoursWorked().compareTo(standard)<=0) {
+                        chuanyunSelfWorkHourDO.setStandardWorkHour(self.getHoursWorked());
+                    }else {
+                        BigDecimal personDays = (self.getHoursWorked().divide(chuanyunWorkHourDO.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
+                        chuanyunSelfWorkHourDO.setStandardWorkHour(personDays);
+                    }
+                    ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO1 = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDateAndProjectType(chuanyunUserCompanyDO.getUserId(),ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())?ChuanYunConstant.PRODUCTION_PROJECT_ID:self.getProjectId(),self.getDayLogDate(),self.getProjectType());
+                    if (chuanyunSelfWorkHourDO1!=null) {
+                        chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
+                    }
+                    chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
+                }
+            }catch (Exception e){
+                log.error(e.getMessage());
+                log.error(""+self);
+                e.printStackTrace();
+            }
+        });
+    }
+
+    /**
+     * 定时更新氚云数据
+     */
+    private void updateChuanyunStandardWorkHour(){
+        var flag = true;
+        var pageSize = 20;
+        var page = 0;
+        log.info("开始更新日工时汇总");
+        long startTime=Instant.now().getEpochSecond();
+        while(flag) {
+            var pageable= PageRequest.of(page,pageSize);
+            var updateList=chuanyunSelfWorkHourDao.getRecentlyDayHour(pageable);
+            if (page<=updateList.getTotalPages()){
+                page += 1;
+                updateList.forEach(chuanyunSelfWorkHourDO -> {
+                    try{
+                        String departmentId=chuanyunUserCompanyDao.findAllByUserId(chuanyunSelfWorkHourDO.getUserId()).get(0).getDepartmentId();
+                        WorkHourStatistics.ChuanyunSelfWorkHourDTO chuanyunSelfWorkHourDTO = new WorkHourStatistics.ChuanyunSelfWorkHourDTO();
+                        BeanUtils.copyProperties(chuanyunSelfWorkHourDO,chuanyunSelfWorkHourDTO);
+                        chuanyunSelfWorkHourDTO.setDepartmentId(departmentId);
+                        List<String> matchers = new ArrayList<>();
+                        matchers.add("F0000001_2,"+chuanyunSelfWorkHourDO.getProjectId());
+                        matchers.add("F0000002_2,"+chuanyunSelfWorkHourDO.getUserId());
+                        matchers.add("F0000003_2,"+chuanyunSelfWorkHourDO.getDayLogDate());
+                        matchers.add("F0000005_2,"+chuanyunSelfWorkHourDO.getProjectType());
+//                    matchers.add("F0000006_2,"+self.getStatus());
+                        var filter= Filter.instance(0,1,true,"And",matchers);
+                        var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberHourDO.SCHEMA_CODE,filter);
+                        var selfMonthString=objectMapper.writeValueAsString(chuanyunSelfWorkHourDTO);
+                        ChuanyunSaveDTO chuanyunSaveDTO;
+                        if (chuanyunFindAllResponse.getReturnData()!=null){
+                            List<ChuanyunMemberHourDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                            ChuanyunMemberHourDO firstResult = result.get(0);
+                            chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
+                        }else {
+                            chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberHourDO.SCHEMA_CODE,selfMonthString,true);
+                        }
+                        if(!chuanyunSaveDTO.getSuccessful()){
+                            log.warn("新增工时标准化失败");
+                        }
+                    }catch (Exception e){
+                        e.printStackTrace();
+                        log.warn("更新标准工时异常");
+                    }
+                });
+            }else {
+                //流程执行完
+                break;
+            }
+        }
+        log.info("日工时更新花费"+(Instant.now().getEpochSecond()-startTime));
+    }
+
+    /**
+     * 人员-项目-周度工时汇总
+     */
+    private void standardWeeklyWorkHour() {
+        long start=Instant.now().getEpochSecond();
+        //更新数据库
+        log.info("开始周工时标准化");
+        List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHourRecently();
+        list.forEach(chuanyunWeekMemberHourDO -> {
+            if (chuanyunWeekMemberHourDO!=null){
+                ChuanyunWeekMemberHourDO weekMemberHourDO = new ChuanyunWeekMemberHourDO();
+                weekMemberHourDO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
+                weekMemberHourDO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
+                weekMemberHourDO.setStandardWorkHour(chuanyunWeekMemberHourDO.getStandardWorkHour());
+                weekMemberHourDO.setStatus(chuanyunWeekMemberHourDO.getStatus());
+                weekMemberHourDO.setUserId(chuanyunWeekMemberHourDO.getUserId());
+                weekMemberHourDO.setYear(chuanyunWeekMemberHourDO.getYear());
+                weekMemberHourDO.setWeek(chuanyunWeekMemberHourDO.getWeek());
+                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);
+                //搜索是否还有处于审批中的数据
+                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());
+                    //同时删除氚云钟数据
+                    deleteExamineStatus(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,"F0000007","F0000001",chuanyunWeekMemberHourDO.getProjectId(),"F0000002",chuanyunWeekMemberHourDO.getUserId(),"F0000008",chuanyunWeekMemberHourDO.getYear(),"","","F0000006",chuanyunWeekMemberHourDO.getWeek(),"F0000003",chuanyunWeekMemberHourDO.getProjectType());
+                }
+            }
+        });
+        log.info("周工时标准化"+(Instant.now().getEpochSecond()-start)+"秒");
+        updateChuanyunWeekHour();
+    }
+
+    /**
+     * 人员-项目-周度工时汇总,更新氚云数据
+     */
+    private void updateChuanyunWeekHour(){
+        var flag = true;
+        var pageSize = 20;
+        var page = 0;
+        log.info("开始更新周工时汇总");
+        long startTime=Instant.now().getEpochSecond();
+        while(flag) {
+            var pageable = PageRequest.of(page, pageSize);
+            var updateList = chuanyunWeekMemberHourDao.getRecentlyWeekHour(pageable);
+            if (page<=updateList.getTotalPages()){
+                page += 1;
+                updateList.getContent().forEach(chuanyunWeekMemberHourDO -> {
+                    //更新氚云
+                    try {
+                        String departmentId=chuanyunUserCompanyDao.findAllByUserId(chuanyunWeekMemberHourDO.getUserId()).get(0).getDepartmentId();
+                        BigDecimal standard = new BigDecimal(8);
+                        WorkHourStatistics.ChuanyunProjectMemberWeekHourDTO chuanyunProjectMemberWeekHourDTO = new WorkHourStatistics.ChuanyunProjectMemberWeekHourDTO();
+                        chuanyunProjectMemberWeekHourDTO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
+                        chuanyunProjectMemberWeekHourDTO.setUserId(chuanyunWeekMemberHourDO.getUserId());
+                        chuanyunProjectMemberWeekHourDTO.setWeek(chuanyunWeekMemberHourDO.getWeek());
+                        chuanyunProjectMemberWeekHourDTO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
+                        chuanyunProjectMemberWeekHourDTO.setTotalHour(chuanyunWeekMemberHourDO.getStandardWorkHour());
+                        chuanyunProjectMemberWeekHourDTO.setPersonDays(chuanyunWeekMemberHourDO.getStandardWorkHour().divide(standard,2,RoundingMode.HALF_UP));
+                        chuanyunProjectMemberWeekHourDTO.setHourStatus(chuanyunWeekMemberHourDO.getStatus());
+                        chuanyunProjectMemberWeekHourDTO.setYear(chuanyunWeekMemberHourDO.getYear());
+                        chuanyunProjectMemberWeekHourDTO.setDepartmentId(departmentId);
+
+                        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());
+                        matchers.add("F0000003_2,"+chuanyunWeekMemberHourDO.getProjectType());
+                        matchers.add("F0000007_2,"+chuanyunWeekMemberHourDO.getStatus());
+                        var filter= Filter.instance(0,1,true,"And",matchers);
+                        var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,filter);
+                        var selfMonthString=objectMapper.writeValueAsString(chuanyunProjectMemberWeekHourDTO);
+                        ChuanyunSaveDTO chuanyunSaveDTO;
+                        if (chuanyunFindAllResponse.getReturnData()!=null) {
+                            List<ChuanyunProjectMemberWeekHourDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                            ChuanyunProjectMemberWeekHourDO firstResult = result.get(0);
+                            chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
+                        }else {
+                            chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,selfMonthString,true);
+                        }
+                        if(!chuanyunSaveDTO.getSuccessful()){
+                            log.warn("新增人员项目周度工时失败");
+                        }
+                    } catch (JsonProcessingException | BigSizeException e) {
+                        e.printStackTrace();
+                    }
+                });
+            }else {
+                //流程执行完
+                break;
+            }
+        }
+        log.info("周工时更新花费"+(Instant.now().getEpochSecond()-startTime));
+    }
+
+
+    /**
+     * 单月工时汇总
+     */
+    private void standardMonthlyWorkHour() {
+        var flag = true;
+        var pageSize = 20;
+        var page = 0;
+        while(flag) {
+            var pageable= PageRequest.of(page,pageSize);
+            var chuanyunUserCompanyList = chuanyunUserCompanyDao.findAllByStatus(1,pageable);
+            if (page<=chuanyunUserCompanyList.getTotalPages()){
+                page += 1;
+                List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
+                //单项目单人单月成本
+                userCompanyDOList.forEach(this::standardMonthlyHour);
+            }else {
+                flag = false;
+            }
+        }
+        updateChuanyunMonthHour();
+    }
+
+    /**
+     * 员工每月、各个项目标准工时会职工
+     * @param chuanyunUserCompanyDO 员工信息
+     */
+    private void standardMonthlyHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
+        //删除上一次状态为审核中,但本次已经审核通过的数据
+        chuanyunSelfCostDao.findAllByStatusAndUserId(ChuanYunConstant.IN_PROCESS,chuanyunUserCompanyDO.getUserId()).forEach(chuanyunSelfCostDO -> {
+            List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList=chuanyunSelfWorkHourDao.findAllByUserIdAndProjectIdAndProjectTypeAndStatusAndDayLogDateBetween(
+                    chuanyunSelfCostDO.getUserId(),
+                    chuanyunSelfCostDO.getProjectId(),
+                    chuanyunSelfCostDO.getProjectType(),
+                    ChuanYunConstant.IN_PROCESS,
+                    chuanyunSelfCostDO.getDayLogDate(),
+                    chuanyunSelfCostDO.getDayLogDate().plusMonths(1L));
+            //如果没有仍在审批中的每日工时,则将该月、该项目的审核中的月工时统计删除,manatee数据库与氚云
+            if(chuanyunSelfWorkHourList.size()==0){
+                //删除manatee中的在审核工时
+                chuanyunSelfCostDao.delete(chuanyunSelfCostDO);
+                //删除氚云中的在审核工时
+                List<String> matchers = new ArrayList<>();
+                matchers.add("F0000003_2,"+chuanyunSelfCostDO.getProjectId());
+                matchers.add("F0000009_2,"+ChuanYunConstant.IN_PROCESS);
+                matchers.add("F0000002_2,"+chuanyunSelfCostDO.getUserId());
+                matchers.add("F0000008_2,"+chuanyunSelfCostDO.getProjectType());
+                matchers.add("F0000004_2,"+chuanyunSelfCostDO.getDayLogDate());
+                var filter= Filter.instance(0,1,true,"And",matchers);
+                try {
+                    ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
+                    if (chuanyunFindAllResponse.getReturnData()!=null){
+                        List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                        result.forEach(chuanyunMemberMonthCostDO -> {
+                            try{
+                                chuanYunManager.delete(ChuanyunMemberMonthCostDO.SCHEMA_CODE,chuanyunMemberMonthCostDO.getObjectId());
+                            }catch (Exception e){
+                                log.error("逐条删除失败"+e.getMessage());
+                            }
+                        });
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    log.error("删除已审核通过的月度数据汇总失败");
+                }
+            }
+        });
+        //每月每项目工时,按月-项目-用户分组统计标准工时
+        List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHourRecently(chuanyunUserCompanyDO.getUserId());
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        list.forEach(projectMonth->{
+            //获取人员-月度-相同工时状态标准工时汇总
+            ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()),projectMonth.getStatus());
+            ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
+            chuanyunSelfCostDO.setStatus(projectMonth.getStatus());
+            if (monthHour!=null){
+                chuanyunSelfCostDO.setMonthlyTotalHour(monthHour.getStandardWorkHour());
+            }
+            chuanyunSelfCostDO.setProjectId(projectMonth.getProjectId());
+            chuanyunSelfCostDO.setProjectType(projectMonth.getProjectType());
+            chuanyunSelfCostDO.setUserId(projectMonth.getUserId());
+            chuanyunSelfCostDO.setDayLogDate(projectMonth.getDayLogDate().withDayOfMonth(1));
+            chuanyunSelfCostDO.setTotalHour(projectMonth.getStandardWorkHour());
+            chuanyunSelfCostDO.setDepartmentId(chuanyunUserCompanyDO.getDepartmentId());
+            ChuanyunSelfCostDO oldSelfDO = chuanyunSelfCostDao.getOldSelfDO(chuanyunSelfCostDO.getUserId(),
+                    chuanyunSelfCostDO.getProjectId(),
+                    chuanyunSelfCostDO.getProjectType(),
+                    df.format(chuanyunSelfCostDO.getDayLogDate()),
+                    projectMonth.getStatus());
+            if (oldSelfDO !=null) {
+                chuanyunSelfCostDao.delete(oldSelfDO);
+            }
+            chuanyunSelfCostDao.save(chuanyunSelfCostDO);
+        });
+    }
+
+    /**
+     * 人员-项目-月度工时汇总,更新氚云数据
+     */
+    private void updateChuanyunMonthHour(){
+        var flag = true;
+        var pageSize = 20;
+        var page = 0;
+        log.info("开始更新月工时汇总");
+        long startTime=Instant.now().getEpochSecond();
+        while(flag) {
+            var pageable = PageRequest.of(page, pageSize);
+            var updateList = chuanyunSelfCostDao.getRecentlyMonthHour(pageable);
+            if (page<=updateList.getTotalPages()){
+                page += 1;
+                updateList.getContent().forEach(chuanyunSelfCostDO -> {
+                    WorkHourStatistics.ChuanyunMemberMonthCostDTO chuanyunMemberMonthCostDTO = new WorkHourStatistics.ChuanyunMemberMonthCostDTO();
+                    //更新氚云数据
+                    chuanyunMemberMonthCostDTO.setCost(chuanyunSelfCostDO.getCost());
+                    chuanyunMemberMonthCostDTO.setProjectId(chuanyunSelfCostDO.getProjectId());
+                    chuanyunMemberMonthCostDTO.setProjectType(chuanyunSelfCostDO.getProjectType());
+                    chuanyunMemberMonthCostDTO.setStatus(chuanyunSelfCostDO.getStatus());
+                    chuanyunMemberMonthCostDTO.setUserId(chuanyunSelfCostDO.getUserId());
+                    chuanyunMemberMonthCostDTO.setMonthWorkHour(chuanyunSelfCostDO.getMonthlyTotalHour());
+                    chuanyunMemberMonthCostDTO.setDayLogDate(chuanyunSelfCostDO.getDayLogDate());
+                    chuanyunMemberMonthCostDTO.setWorkHour(chuanyunSelfCostDO.getTotalHour());
+                    chuanyunMemberMonthCostDTO.setDepartmentId(chuanyunSelfCostDO.getDepartmentId());
+                    if (!StringUtils.isEmpty(chuanyunSelfCostDO.getProjectId())){
+                        try {
+                            List<String> matchers = new ArrayList<>();
+                            matchers.add("F0000003_2,"+chuanyunSelfCostDO.getProjectId());
+                            matchers.add("F0000009_2,"+chuanyunSelfCostDO.getStatus());
+                            matchers.add("F0000002_2,"+chuanyunSelfCostDO.getUserId());
+                            matchers.add("F0000008_2,"+chuanyunSelfCostDO.getProjectType());
+                            matchers.add("F0000004_2,"+chuanyunSelfCostDO.getDayLogDate());
+                            var filter= Filter.instance(0,1,true,"And",matchers);
+                            var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
+                            var memberMonthString=objectMapper.writeValueAsString(chuanyunMemberMonthCostDTO);
+                            ChuanyunSaveDTO chuanyunSaveDTO;
+                            if (chuanyunFindAllResponse.getReturnData()!=null){
+                                List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                                ChuanyunMemberMonthCostDO firstResult = result.get(0);
+                                chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE,firstResult.getObjectId(),memberMonthString);
+                            }else {
+                                chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE,memberMonthString,true);
+                            }
+                            if(!chuanyunSaveDTO.getSuccessful()){
+                                log.warn("新增项目成员月度成本汇总失败");
+                            }
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            log.warn("########"+chuanyunSelfCostDO+"");
+                        }
+                    }
+                });
+            }else {
+                //流程执行完
+                break;
+            }
+        }
+        log.info("月工时更新花费"+(Instant.now().getEpochSecond()-startTime));
+    }
+
+    /**
+     * 删除状态为审核中数据
+     * @param schemaCode
+     * @param
+     */
+    public void deleteExamineStatus(String schemaCode,String statusCode,String projectCode,String projectId,String userCode,String userId,String yearCode,String year,String monthCode,String month,String weekCode,String week,String typeCode,String projectType) {
+        try {
+            List<String> matchers = new ArrayList<>();
+            matchers.add(statusCode+"_2,"+"2");
+            matchers.add(projectCode+"_2,"+projectId);
+            if (!StringUtils.isEmpty(userId)){
+                matchers.add(userCode+"_2,"+userId);
+            }
+            if (!StringUtils.isEmpty(year)){
+                matchers.add(yearCode+"_2,"+year);
+            }
+            if (!StringUtils.isEmpty(month)){
+                matchers.add(monthCode+"_2,"+month);
+            }
+            if (!StringUtils.isEmpty(week)){
+                matchers.add(weekCode+"_2,"+week);
+            }
+            if (!StringUtils.isEmpty(projectType)){
+                matchers.add(typeCode+"_2,"+projectType);
+            }
+            var filter= Filter.instance(0,Integer.MAX_VALUE,true,"And",matchers);
+            var chuanyunFindAllResponse=chuanYunManager.findAll(schemaCode,filter);
+            if (chuanyunFindAllResponse.getReturnData()!=null){
+                List<ChuanyunCommonDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                result.forEach(basicDO -> {
+                    ChuanyunSaveDTO chuanyunSaveDTO = chuanYunManager.delete(schemaCode,basicDO.getObjectId());
+                    if(chuanyunSaveDTO.getSuccessful()){
+//                        log.info("删除状态为审核中数据成功");
+                    }else{
+                        log.warn("删除状态为审核中数据失败");
+                    }
+                });
+            }
+        }catch (Exception e) {
+            e.printStackTrace();
+            log.error(e.getMessage());
+        }
+    }
+}