浏览代码

1.将WorkHourStatistics和WorkHourStatisticsRecently中的工时标准化方法统一为一个,并放在LogService中。
2.更新了ChuanyunSelfWorkHourDO由ChuanyunWorkHourDO实例化的方法。

verguenza 4 年之前
父节点
当前提交
f235b0fa2a

+ 77 - 38
src/main/java/com/galaxis/manatee/dao/ChuanyunWeekMemberHourDao.java

@@ -1,7 +1,6 @@
 package com.galaxis.manatee.dao;
 package com.galaxis.manatee.dao;
 
 
 import com.galaxis.capsule.util.GalaxisRepository;
 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 com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWeekMemberHourDO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.PageRequest;
@@ -12,22 +11,27 @@ import org.springframework.transaction.annotation.Transactional;
 
 
 import java.util.List;
 import java.util.List;
 
 
+/**
+ * @author kxuan
+ */
 @Repository
 @Repository
-public interface ChuanyunWeekMemberHourDao extends GalaxisRepository<ChuanyunWeekMemberHourDO,String> {
+public interface ChuanyunWeekMemberHourDao extends GalaxisRepository<ChuanyunWeekMemberHourDO, String> {
 
 
     /**
     /**
      * 根据状态删除数据
      * 根据状态删除数据
-     * @param status    状态
-     * @return  删除条数
+     *
+     * @param status 状态
+     * @return 删除条数
      */
      */
     @Transactional
     @Transactional
     Integer deleteAllByStatus(String status);
     Integer deleteAllByStatus(String status);
 
 
     /**
     /**
      * 人员-项目-周度工时汇总
      * 人员-项目-周度工时汇总
+     *
      * @return
      * @return
      */
      */
-    @Query(value="SELECT chuanyun_self_work_hour.object_id," +
+    @Query(value = "SELECT chuanyun_self_work_hour.object_id," +
             "DATE_FORMAT(day_log_date,'%Y') as year," +
             "DATE_FORMAT(day_log_date,'%Y') as year," +
             "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date) AS week," +
             "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date) AS week," +
             "project_id,user_id," +
             "project_id,user_id," +
@@ -41,47 +45,71 @@ public interface ChuanyunWeekMemberHourDao extends GalaxisRepository<ChuanyunWee
             "chuanyun_self_work_hour.user_id," +
             "chuanyun_self_work_hour.user_id," +
             "DATE_FORMAT(day_log_date,'%Y')," +
             "DATE_FORMAT(day_log_date,'%Y')," +
             "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date)," +
             "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date)," +
-            "chuanyun_self_work_hour.`status`",nativeQuery = true)
+            "chuanyun_self_work_hour.`status`", nativeQuery = true)
     List<ChuanyunWeekMemberHourDO> getWeekMemberHour();
     List<ChuanyunWeekMemberHourDO> getWeekMemberHour();
 
 
     /**
     /**
      * 获取最近一个月周工时
      * 获取最近一个月周工时
+     *
      * @return
      * @return
      */
      */
-    @Query(value="SELECT chuanyun_self_work_hour.object_id,\n" +
-            "            LEFT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),4)as year,\n" +
-            "            RIGHT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),2) AS week,\n" +
-            "            project_id,user_id,\n" +
-            "            SUM(standard_work_hour)AS standard_work_hour,\n" +
-            "            project_type,\n" +
-            "            `status`\n" +
-            "            FROM chuanyun_self_work_hour \n" +
-            "            WHERE project_id !='' \n" +
-            "            AND YEARWEEK(chuanyun_self_work_hour.day_log_date,1)>=(YEARWEEK(NOW(),1)-4) " +
-            "            GROUP BY chuanyun_self_work_hour.project_id,\n" +
-            "            chuanyun_self_work_hour.project_type,\n" +
-            "            chuanyun_self_work_hour.user_id,\n" +
-            "            LEFT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),4),\n" +
-            "            RIGHT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),2),\n" +
-            "            chuanyun_self_work_hour.`status`",nativeQuery = true)
+    @Query(value = "SELECT chuanyun_self_work_hour.object_id, " +
+            "LEFT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),4)as year, " +
+            "RIGHT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),2) 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 YEARWEEK(chuanyun_self_work_hour.day_log_date,1)>=(YEARWEEK(NOW(),1)-4) " +
+            "GROUP BY chuanyun_self_work_hour.project_id, " +
+            "chuanyun_self_work_hour.project_type, " +
+            "chuanyun_self_work_hour.user_id, " +
+            "LEFT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),4), " +
+            "RIGHT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),2), " +
+            "chuanyun_self_work_hour.`status`", nativeQuery = true)
     List<ChuanyunWeekMemberHourDO> getWeekMemberHourRecently();
     List<ChuanyunWeekMemberHourDO> getWeekMemberHourRecently();
 
 
+    /**
+     * 根据用户Id获取周工时列表
+     *
+     * @param userId 用户ID
+     * @return 周工时列表
+     */
+    @Query(value = "SELECT chuanyun_self_work_hour.object_id, " +
+            "LEFT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),4)as year, " +
+            "RIGHT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),2) 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 user_id=?1 " +
+            "GROUP BY chuanyun_self_work_hour.project_id, " +
+            "chuanyun_self_work_hour.project_type, " +
+            "chuanyun_self_work_hour.user_id, " +
+            "LEFT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),4), " +
+            "RIGHT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),2), " +
+            "chuanyun_self_work_hour.`status`", nativeQuery = true)
+    List<ChuanyunWeekMemberHourDO> getWeekMemberHourByUserId(@Param("userId") String userId);
 
 
     /**
     /**
      * 获取最近一个月周工时
      * 获取最近一个月周工时
-     * @param
-     * @param pagerequest
+     *
+     * @param pageRequest 分页查询条件
      * @return
      * @return
      */
      */
-    @Query(value="SELECT * FROM chuanyun_week_member_hour WHERE 1=1 AND CONCAT(chuanyun_week_member_hour.`year`,chuanyun_week_member_hour.`week`)>=(YEARWEEK(NOW(),1)-4) ",
-            countQuery="SELECT COUNT(1) FROM chuanyun_week_member_hour WHERE 1=1 AND CONCAT(chuanyun_week_member_hour.`year`,chuanyun_week_member_hour.`week`)>=(YEARWEEK(NOW(),1)-4) ",nativeQuery = true)
-    Page<ChuanyunWeekMemberHourDO> getRecentlyWeekHour(PageRequest pagerequest);
+    @Query(value = "SELECT * FROM chuanyun_week_member_hour WHERE 1=1 AND CONCAT(chuanyun_week_member_hour.`year`,chuanyun_week_member_hour.`week`)>=(YEARWEEK(NOW(),1)-4) ",
+            countQuery = "SELECT COUNT(1) FROM chuanyun_week_member_hour WHERE 1=1 AND CONCAT(chuanyun_week_member_hour.`year`,chuanyun_week_member_hour.`week`)>=(YEARWEEK(NOW(),1)-4) ", nativeQuery = true)
+    Page<ChuanyunWeekMemberHourDO> getRecentlyWeekHour(PageRequest pageRequest);
 
 
     /**
     /**
      * 判断是否有流程中数据
      * 判断是否有流程中数据
+     *
      * @return
      * @return
      */
      */
-    @Query(value="SELECT chuanyun_self_work_hour.object_id," +
+    @Query(value = "SELECT chuanyun_self_work_hour.object_id," +
             "DATE_FORMAT(day_log_date,'%Y') as year," +
             "DATE_FORMAT(day_log_date,'%Y') as year," +
             "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date) AS week," +
             "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date) AS week," +
             "project_id,user_id," +
             "project_id,user_id," +
@@ -96,21 +124,32 @@ public interface ChuanyunWeekMemberHourDao extends GalaxisRepository<ChuanyunWee
             "chuanyun_self_work_hour.user_id," +
             "chuanyun_self_work_hour.user_id," +
             "DATE_FORMAT(day_log_date,'%Y')," +
             "DATE_FORMAT(day_log_date,'%Y')," +
             "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date)," +
             "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date)," +
-            "chuanyun_self_work_hour.`status`",nativeQuery = true)
-    ChuanyunWeekMemberHourDO getProcessWeekHour(@Param("projectId")String projectId,@Param("userId")String userId,@Param("year")String year,@Param("week")String week,@Param("projectType")String projectType);
+            "chuanyun_self_work_hour.`status`", nativeQuery = true)
+    ChuanyunWeekMemberHourDO getProcessWeekHour(@Param("projectId") String projectId, @Param("userId") String userId, @Param("year") String year, @Param("week") String week, @Param("projectType") String projectType);
 
 
     /**
     /**
-     * 项目人员周度是否存在
-     * @param projectId
-     * @param userId
-     * @param week
-     * @return
+     * 查询项目人员周度是否存在
+     *
+     * @param projectId   项目Id
+     * @param userId      用户Id
+     * @param week        周数
+     * @param projectType 项目类型
+     * @param status      状态
+     * @param year        年份
+     * @return 周工时记录
      */
      */
-    ChuanyunWeekMemberHourDO findByProjectIdAndUserIdAndWeekAndStatusAndProjectTypeAndYear(String projectId,String userId,String week,String status,String projectType,String year);
+    ChuanyunWeekMemberHourDO findByProjectIdAndUserIdAndWeekAndStatusAndProjectTypeAndYear(String projectId, String userId, String week, String status, String projectType, String year);
 
 
     /**
     /**
      * 删除状态为审核中的数据
      * 删除状态为审核中的数据
+     *
+     * @param status      状态
+     * @param year        年份
+     * @param projectType 项目类型
+     * @param userId      用户Id
+     * @param projectId   项目ID
+     * @param week        周数
      */
      */
-    @Transactional
-    void deleteByProjectIdAndUserIdAndYearAndWeekAndStatusAndProjectType(String projectId,String userId,String year,String week,String status,String projectType);
+    @Transactional(rollbackFor = Exception.class)
+    void deleteByProjectIdAndUserIdAndYearAndWeekAndStatusAndProjectType(String projectId, String userId, String year, String week, String status, String projectType);
 }
 }

+ 23 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSelfWorkHourDO.java

@@ -4,6 +4,7 @@ package com.galaxis.manatee.entity.chuanyun.data.object;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.galaxis.manatee.constant.ChuanYunConstant;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
 import lombok.Data;
 import lombok.Data;
@@ -49,4 +50,26 @@ public class ChuanyunSelfWorkHourDO {
     private LocalDateTime dayLogDate;
     private LocalDateTime dayLogDate;
 
 
     private BigDecimal standardWorkHour;
     private BigDecimal standardWorkHour;
+
+    /**
+     * 根据ChuanyunWorkHourDO对象实例化ChuanyunSelfWorkHourDO对象
+     * @param projectType 由于日志原始数据可能出现项目类型错误的情况,需要单独为projectType赋值
+     * @param chuanyunWorkHourDO 从日志原始数据中统计出来的人员单日项目工时对象
+     * @return  更新了ChuanyunWorkHourDO对象中数据的ChuanyunSelfWorkHourDO对象
+     */
+    public static ChuanyunSelfWorkHourDO fromChuanyunWorkHourDO(ChuanyunWorkHourDO chuanyunWorkHourDO,String projectType){
+        ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
+        chuanyunSelfWorkHourDO.setStatus(chuanyunWorkHourDO.getStatus());
+        chuanyunSelfWorkHourDO.setDepartmentName(chuanyunWorkHourDO.getDepartmentName());
+        chuanyunSelfWorkHourDO.setUserId(chuanyunWorkHourDO.getUserId());
+        //2021年3月3日添加,使用ChuanyunGroupProject中实际的项目类型来替代日志中的项目类型,防止出现项目类型错误的情况
+        chuanyunSelfWorkHourDO.setProjectType(projectType);
+        if (ChuanYunConstant.PRODUCTION_PROJECT.equals(chuanyunWorkHourDO.getProjectType())) {
+            chuanyunSelfWorkHourDO.setProjectId(ChuanYunConstant.PRODUCTION_PROJECT_ID);
+        } else {
+            chuanyunSelfWorkHourDO.setProjectId(chuanyunWorkHourDO.getProjectId());
+        }
+        chuanyunSelfWorkHourDO.setDayLogDate(chuanyunWorkHourDO.getDayLogDate());
+        return chuanyunSelfWorkHourDO;
+    }
 }
 }

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

@@ -0,0 +1,176 @@
+package com.galaxis.manatee.service;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.constant.ChuanYunConstant;
+import com.galaxis.manatee.dao.ChuanyunGroupProjectDao;
+import com.galaxis.manatee.dao.ChuanyunSelfWorkHourDao;
+import com.galaxis.manatee.dao.ChuanyunWorkHourDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunMemberHourDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserCompanyDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.Filter;
+import com.galaxis.manatee.manager.ChuanYunManager;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 更新日志中所用到的服务
+ *
+ * @author zcj
+ * @version 0.1
+ * @date 2021/3/4 1:54 上午
+ */
+@Slf4j
+@Service
+public class LogService {
+    private final ObjectMapper objectMapper = new ObjectMapper();
+    private final ChuanyunWorkHourDao chuanyunWorkHourDao;
+    private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
+    private final ChuanYunManager chuanYunManager;
+    private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
+
+    public LogService(ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanYunManager chuanYunManager, ChuanyunGroupProjectDao chuanyunGroupProjectDao) {
+        this.chuanyunWorkHourDao = chuanyunWorkHourDao;
+        this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
+        this.chuanYunManager = chuanYunManager;
+        this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
+    }
+
+    /**
+     * 员工单日、各个项目工时标准化,并保存
+     *
+     * @param isRecent              是否只标准化最近一个月的数据
+     * @param chuanyunUserCompanyDO 员工信息
+     */
+    public void standardHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO, boolean isRecent) {
+        if (!StringUtils.isEmpty(chuanyunUserCompanyDO.getUserId())) {
+            //从日志原始数据中获取每人每个项目每天工时。
+            //由isRecent判断是否只获取最近30天的数据
+            List<ChuanyunWorkHourDO> selfList = isRecent ? chuanyunWorkHourDao.getSelfWorkHourRecently(chuanyunUserCompanyDO.getUserId()) : chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
+            //逐一将原始工时数据标准化后,更新到标准化工时表和氚云中
+            selfList.forEach(self -> {
+                try {
+                    //新建标准化工时对象,并将原始数据更新到此对象中,并计算标准化之后的工时
+                    ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO=this.fromChuanyunWorkHourDO(self);
+                    //查询系统中是否有重复的标准化工时数据,如果有重复的人、天、项目数据,将原数据删除后更新为最新的数据
+                    try{
+                        ChuanyunSelfWorkHourDO tmpChuanyunSelfWorkHourDO = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDateAndProjectType(chuanyunUserCompanyDO.getUserId(), ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType()) ? ChuanYunConstant.PRODUCTION_PROJECT_ID : self.getProjectId(), self.getDayLogDate(), self.getProjectType());
+                        if (tmpChuanyunSelfWorkHourDO != null) {
+                            chuanyunSelfWorkHourDao.delete(tmpChuanyunSelfWorkHourDO);
+                        }
+                        chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
+                    }catch (Exception e){
+                        log.error(e.getMessage());
+                    }
+                } catch (Exception e) {
+                    log.error(e.getMessage());
+                    log.error("" + self);
+                    e.printStackTrace();
+                }
+            });
+        }
+    }
+
+    /**
+     * 核对日志原始数据与每日工时标准化数据差异
+     *
+     * @param chuanyunUserCompanyDO 人员对象
+     */
+    public void checkDayWorkHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
+        List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
+        //删除多余每日工时
+        List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.findByUserId(chuanyunUserCompanyDO.getUserId());
+        compareDayWorkHour(selfList, list);
+    }
+
+    /**
+     * 删除多余每日工时
+     *
+     * @param selfList
+     * @param list
+     */
+    private void compareDayWorkHour(List<ChuanyunWorkHourDO> selfList, List<ChuanyunSelfWorkHourDO> list) {
+        Map<String, Integer> map = new HashMap<>(64);
+        //判断工时是否有撤回
+        if (selfList.size() != list.size()) {
+            for (ChuanyunWorkHourDO chuanyunWorkHourDO : selfList) {
+                map.put(chuanyunWorkHourDO.getUserId() + chuanyunWorkHourDO.getProjectId() + chuanyunWorkHourDO.getDayLogDate(), 1);
+            }
+            //比较是否有撤回工时
+            for (ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO : list) {
+                Integer count = map.get(chuanyunSelfWorkHourDO.getUserId() + chuanyunSelfWorkHourDO.getProjectId() + chuanyunSelfWorkHourDO.getDayLogDate());
+                if (count == null) {
+                    try {
+                        //删除数据库日工时
+                        chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO);
+                        //删除氚云日工时
+                        List<String> matchers = new ArrayList<>();
+                        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());
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 根据日志原始数据统计的每日每人工时获取工时标准化后的标准化对象
+     * @param chuanyunWorkHourDO    日志原始统计数据
+     * @return  工时标准化对象
+     */
+    private ChuanyunSelfWorkHourDO fromChuanyunWorkHourDO(ChuanyunWorkHourDO chuanyunWorkHourDO) throws Exception {
+        //由于日志原始工时可能存在项目类型不准确的情况,需要根据项目ID获取真实的项目类型
+        String projectType;
+        try {
+            var chuanyunGroupProject = chuanyunGroupProjectDao.findByObjectId(chuanyunWorkHourDO.getProjectId());
+            if (chuanyunGroupProject == null) {
+                throw new Exception("没有找到对应的项目");
+            }
+            //如果找到相应的项目,则使用项目实际的项目类型
+            projectType=chuanyunGroupProject.getProjectType();
+        } catch (Exception e) {
+            //没有找到对应项目,使用原项目类型
+            projectType=chuanyunWorkHourDO.getProjectType();
+        }
+        ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = ChuanyunSelfWorkHourDO.fromChuanyunWorkHourDO(chuanyunWorkHourDO,projectType);
+        //获取每人每天总工时
+        ChuanyunWorkHourDO oneDayTotalHour = chuanyunWorkHourDao.getDayWorkHour(chuanyunWorkHourDO.getUserId(), chuanyunWorkHourDO.getDayLogDate());
+        //工时标准化
+        if (oneDayTotalHour != null) {
+            BigDecimal standard = new BigDecimal(8);
+            if (oneDayTotalHour.getHoursWorked().compareTo(standard) <= 0) {
+                chuanyunSelfWorkHourDO.setStandardWorkHour(chuanyunWorkHourDO.getHoursWorked());
+            } else {
+                BigDecimal personDays = (chuanyunWorkHourDO.getHoursWorked().divide(oneDayTotalHour.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
+                chuanyunSelfWorkHourDO.setStandardWorkHour(personDays);
+            }
+        }else{
+            throw new Exception("获取每日总工时失败");
+        }
+        return chuanyunSelfWorkHourDO;
+    }
+}

+ 210 - 342
src/main/java/com/galaxis/manatee/task/WorkHourStatistics.java

@@ -14,13 +14,13 @@ import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
 import com.galaxis.manatee.entity.chuanyun.dto.Filter;
 import com.galaxis.manatee.entity.chuanyun.dto.Filter;
 import com.galaxis.manatee.exception.BigSizeException;
 import com.galaxis.manatee.exception.BigSizeException;
 import com.galaxis.manatee.manager.ChuanYunManager;
 import com.galaxis.manatee.manager.ChuanYunManager;
+import com.galaxis.manatee.service.LogService;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
 import lombok.Data;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.PageRequest;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
@@ -30,9 +30,7 @@ import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.List;
-import java.util.Map;
 
 
 /**
 /**
  * @author zcj
  * @author zcj
@@ -42,170 +40,78 @@ import java.util.Map;
 @Service
 @Service
 @Slf4j
 @Slf4j
 public class WorkHourStatistics {
 public class WorkHourStatistics {
-    private final ObjectMapper objectMapper=new ObjectMapper();
+    private final ObjectMapper objectMapper = new ObjectMapper();
     private final ChuanYunManager chuanYunManager;
     private final ChuanYunManager chuanYunManager;
     private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
     private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
     private final ChuanyunWorkHourDao chuanyunWorkHourDao;
     private final ChuanyunWorkHourDao chuanyunWorkHourDao;
     private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
     private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
     private final ChuanyunSelfCostDao chuanyunSelfCostDao;
     private final ChuanyunSelfCostDao chuanyunSelfCostDao;
     private final ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao;
     private final ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao;
-    private final ChuanyunProjectCostDao chuanyunProjectCostDao;
     private final ChuanyunMemberCostDao chuanyunMemberCostDao;
     private final ChuanyunMemberCostDao chuanyunMemberCostDao;
+    private final LogService logService;
 
 
-    public WorkHourStatistics(ChuanYunManager chuanYunManager, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao, ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao, ChuanyunProjectCostDao chuanyunProjectCostDao, ChuanyunMemberCostDao chuanyunMemberCostDao) {
+    public WorkHourStatistics(ChuanYunManager chuanYunManager, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao, ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao, ChuanyunMemberCostDao chuanyunMemberCostDao, LogService logService) {
         this.chuanYunManager = chuanYunManager;
         this.chuanYunManager = chuanYunManager;
         this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
         this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
         this.chuanyunWorkHourDao = chuanyunWorkHourDao;
         this.chuanyunWorkHourDao = chuanyunWorkHourDao;
         this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
         this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
         this.chuanyunSelfCostDao = chuanyunSelfCostDao;
         this.chuanyunSelfCostDao = chuanyunSelfCostDao;
         this.chuanyunWeekMemberHourDao = chuanyunWeekMemberHourDao;
         this.chuanyunWeekMemberHourDao = chuanyunWeekMemberHourDao;
-        this.chuanyunProjectCostDao = chuanyunProjectCostDao;
         this.chuanyunMemberCostDao = chuanyunMemberCostDao;
         this.chuanyunMemberCostDao = chuanyunMemberCostDao;
+        this.logService = logService;
     }
     }
 
 
-
-    @Scheduled(fixedDelay = 432000000L)
+    /**
+     * 更新所有项目工时
+     */
+    //    @Scheduled(fixedDelay = 432000000L)
     public void updateHour() {
     public void updateHour() {
+        //每日工时标准化
         standardWorkHour();
         standardWorkHour();
         standardWeeklyWorkHour();
         standardWeeklyWorkHour();
         standardMonthlyWorkHour();
         standardMonthlyWorkHour();
 //        projectMemberHour();
 //        projectMemberHour();
-//        quitStandradHour();
+        //离职人员工时标准化
+//        quitStandardHour();
     }
     }
 
 
     /**
     /**
      * 每日工时标准化
      * 每日工时标准化
      */
      */
     private void standardWorkHour() {
     private void standardWorkHour() {
-        var flag = true;
         var pageSize = 20;
         var pageSize = 20;
         var page = 0;
         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()){
+        while (true) {
+            var pageable = PageRequest.of(page, pageSize);
+            var chuanyunUserCompanyList = chuanyunUserCompanyDao.findAllByStatus(1, pageable);
+            if (page <= chuanyunUserCompanyList.getTotalPages()) {
                 page += 1;
                 page += 1;
                 //逐个将员工每天工时进行统计汇总
                 //逐个将员工每天工时进行统计汇总
                 List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
                 List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
                 userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
                 userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
-                    long start= Instant.now().getEpochSecond();
+                    long start = Instant.now().getEpochSecond();
                     //工时标准化
                     //工时标准化
-                    standardHour(chuanyunUserCompanyDO);
-                    log.info("每日工时标准化"+chuanyunUserCompanyDO.getUserName()+(Instant.now().getEpochSecond()-start)+"秒");
+                    logService.standardHour(chuanyunUserCompanyDO,false);
+                    log.info("每日工时标准化" + chuanyunUserCompanyDO.getUserName() + (Instant.now().getEpochSecond() - start) + "秒");
                     updateChuanyunStandardWorkHour(chuanyunUserCompanyDO);
                     updateChuanyunStandardWorkHour(chuanyunUserCompanyDO);
                 });
                 });
-            }else {
+            } else {
                 break;
                 break;
             }
             }
         }
         }
-//        log.info("每日工时标准化"+(Instant.now().getEpochSecond()-startTime)+"秒");
-    }
-
-    /**
-     * 员工单日、各个项目工时标准化,并保存
-     * @param chuanyunUserCompanyDO 员工信息
-     */
-    private void standardHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
-        if (!StringUtils.isEmpty(chuanyunUserCompanyDO.getUserId())){
-            //每人每个项目每天工时
-            List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
-            //删除多余每日工时
-            List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.findByUserId(chuanyunUserCompanyDO.getUserId());
-            compareDayWorkHour(selfList,list);
-            //更新
-            selfList.forEach(self->{
-                try{
-                    ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
-                    chuanyunSelfWorkHourDO.setStatus(self.getStatus());
-                    chuanyunSelfWorkHourDO.setDepartmentName(self.getDepartmentName());
-                    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) {
-                        BigDecimal standard = new BigDecimal(8);
-                        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();
-                }
-            });
-        }
-    }
-
-    /**
-     * 删除多余每日工时
-     * @param selfList
-     * @param list
-     */
-    private void compareDayWorkHour(List<ChuanyunWorkHourDO> selfList,List<ChuanyunSelfWorkHourDO> list){
-        Map<String, Integer> map = new HashMap<String, Integer>();
-        List<ChuanyunSelfWorkHourDO> surplusList = new ArrayList<>();
-        //判断工时是否有撤回
-        if (!(selfList.size()==list.size())){
-            for (ChuanyunWorkHourDO chuanyunWorkHourDO : selfList){
-                map.put(chuanyunWorkHourDO.getUserId()+chuanyunWorkHourDO.getProjectId()+chuanyunWorkHourDO.getDayLogDate(),1);
-            }
-            //比较是否有撤回工时
-            for (ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO : list){
-                Integer count = map.get(chuanyunSelfWorkHourDO.getUserId()+chuanyunSelfWorkHourDO.getProjectId()+chuanyunSelfWorkHourDO.getDayLogDate());
-                if (count==null){
-                    try{
-                        //删除数据库日工时
-                        chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO);
-                        //删除氚云日工时
-                        List<String> matchers = new ArrayList<>();
-                        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());
-                    }
-                }
-            }
-        }
     }
     }
 
 
     /**
     /**
      * 人员-项目-周度工时汇总
      * 人员-项目-周度工时汇总
      */
      */
     private void standardWeeklyWorkHour() {
     private void standardWeeklyWorkHour() {
-        long start=Instant.now().getEpochSecond();
+        long start = Instant.now().getEpochSecond();
         //更新数据库
         //更新数据库
         log.info("开始周工时标准化");
         log.info("开始周工时标准化");
         List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHour();
         List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHour();
         list.forEach(chuanyunWeekMemberHourDO -> {
         list.forEach(chuanyunWeekMemberHourDO -> {
-            try{
-                if (chuanyunWeekMemberHourDO!=null){
+            try {
+                if (chuanyunWeekMemberHourDO != null) {
                     ChuanyunWeekMemberHourDO weekMemberHourDO = new ChuanyunWeekMemberHourDO();
                     ChuanyunWeekMemberHourDO weekMemberHourDO = new ChuanyunWeekMemberHourDO();
                     weekMemberHourDO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
                     weekMemberHourDO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
                     weekMemberHourDO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
                     weekMemberHourDO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
@@ -214,24 +120,24 @@ public class WorkHourStatistics {
                     weekMemberHourDO.setUserId(chuanyunWeekMemberHourDO.getUserId());
                     weekMemberHourDO.setUserId(chuanyunWeekMemberHourDO.getUserId());
                     weekMemberHourDO.setYear(chuanyunWeekMemberHourDO.getYear());
                     weekMemberHourDO.setYear(chuanyunWeekMemberHourDO.getYear());
                     weekMemberHourDO.setWeek(chuanyunWeekMemberHourDO.getWeek());
                     weekMemberHourDO.setWeek(chuanyunWeekMemberHourDO.getWeek());
-                    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) {
                     if (oldWeekHour != null) {
                         chuanyunWeekMemberHourDao.delete(oldWeekHour);
                         chuanyunWeekMemberHourDao.delete(oldWeekHour);
                     }
                     }
                     chuanyunWeekMemberHourDao.save(weekMemberHourDO);
                     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());
+                    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());
+                        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(e.getMessage() + "周工时标准化异常");
             }
             }
         });
         });
-        log.info("周工时标准化"+(Instant.now().getEpochSecond()-start)+"秒");
+        log.info("周工时标准化" + (Instant.now().getEpochSecond() - start) + "秒");
         updateChuanyunWeekHour();
         updateChuanyunWeekHour();
     }
     }
 
 
@@ -243,31 +149,31 @@ public class WorkHourStatistics {
         var pageSize = 20;
         var pageSize = 20;
         var page = 0;
         var page = 0;
         log.info("开始月工时标准化");
         log.info("开始月工时标准化");
-        while(flag) {
-            var pageable= PageRequest.of(page,pageSize);
-            var chuanyunUserCompanyList = chuanyunUserCompanyDao.findAllByStatus(1,pageable);
-            if (page<=chuanyunUserCompanyList.getTotalPages()){
+        while (flag) {
+            var pageable = PageRequest.of(page, pageSize);
+            var chuanyunUserCompanyList = chuanyunUserCompanyDao.findAllByStatus(1, pageable);
+            if (page <= chuanyunUserCompanyList.getTotalPages()) {
                 page += 1;
                 page += 1;
                 List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
                 List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
                 //单项目单人单月成本
                 //单项目单人单月成本
                 userCompanyDOList.forEach(this::standardMonthlyHour);
                 userCompanyDOList.forEach(this::standardMonthlyHour);
-            }else {
+            } else {
                 flag = false;
                 flag = false;
             }
             }
         }
         }
-
         updateChuanyunMonthHour();
         updateChuanyunMonthHour();
     }
     }
 
 
     /**
     /**
      * 员工每月、各个项目标准工时会职工
      * 员工每月、各个项目标准工时会职工
+     *
      * @param chuanyunUserCompanyDO 员工信息
      * @param chuanyunUserCompanyDO 员工信息
      */
      */
     private void standardMonthlyHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
     private void standardMonthlyHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
-        log.info(chuanyunUserCompanyDO.getUserName()+"月工时更新");
+        log.info(chuanyunUserCompanyDO.getUserName() + "月工时更新");
         //删除上一次状态为审核中,但本次已经审核通过的数据
         //删除上一次状态为审核中,但本次已经审核通过的数据
-        chuanyunSelfCostDao.findAllByStatusAndUserId(ChuanYunConstant.IN_PROCESS,chuanyunUserCompanyDO.getUserId()).forEach(chuanyunSelfCostDO -> {
-            List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList=chuanyunSelfWorkHourDao.findAllByUserIdAndProjectIdAndProjectTypeAndStatusAndDayLogDateBetween(
+        chuanyunSelfCostDao.findAllByStatusAndUserId(ChuanYunConstant.IN_PROCESS, chuanyunUserCompanyDO.getUserId()).forEach(chuanyunSelfCostDO -> {
+            List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList = chuanyunSelfWorkHourDao.findAllByUserIdAndProjectIdAndProjectTypeAndStatusAndDayLogDateBetween(
                     chuanyunSelfCostDO.getUserId(),
                     chuanyunSelfCostDO.getUserId(),
                     chuanyunSelfCostDO.getProjectId(),
                     chuanyunSelfCostDO.getProjectId(),
                     chuanyunSelfCostDO.getProjectType(),
                     chuanyunSelfCostDO.getProjectType(),
@@ -275,26 +181,27 @@ public class WorkHourStatistics {
                     chuanyunSelfCostDO.getDayLogDate(),
                     chuanyunSelfCostDO.getDayLogDate(),
                     chuanyunSelfCostDO.getDayLogDate().plusMonths(1L));
                     chuanyunSelfCostDO.getDayLogDate().plusMonths(1L));
             //如果没有仍在审批中的每日工时,则将该月、该项目的审核中的月工时统计删除,manatee数据库与氚云
             //如果没有仍在审批中的每日工时,则将该月、该项目的审核中的月工时统计删除,manatee数据库与氚云
-            if(chuanyunSelfWorkHourList.size()==0){
+            if (chuanyunSelfWorkHourList.size() == 0) {
                 //删除manatee中的在审核工时
                 //删除manatee中的在审核工时
                 chuanyunSelfCostDao.delete(chuanyunSelfCostDO);
                 chuanyunSelfCostDao.delete(chuanyunSelfCostDO);
                 //删除氚云中的在审核工时
                 //删除氚云中的在审核工时
                 List<String> matchers = new ArrayList<>();
                 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);
+                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 {
                 try {
-                    ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
-                    if (chuanyunFindAllResponse.getReturnData()!=null){
-                        List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                    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 -> {
                         result.forEach(chuanyunMemberMonthCostDO -> {
-                            try{
-                                chuanYunManager.delete(ChuanyunMemberMonthCostDO.SCHEMA_CODE,chuanyunMemberMonthCostDO.getObjectId());
-                            }catch (Exception e){
-                                log.error("逐条删除失败"+e.getMessage());
+                            try {
+                                chuanYunManager.delete(ChuanyunMemberMonthCostDO.SCHEMA_CODE, chuanyunMemberMonthCostDO.getObjectId());
+                            } catch (Exception e) {
+                                log.error("逐条删除失败" + e.getMessage());
                             }
                             }
                         });
                         });
                     }
                     }
@@ -307,12 +214,12 @@ public class WorkHourStatistics {
         //每月每项目工时,按月-项目-用户分组统计标准工时
         //每月每项目工时,按月-项目-用户分组统计标准工时
         List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHour(chuanyunUserCompanyDO.getUserId());
         List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHour(chuanyunUserCompanyDO.getUserId());
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        list.forEach(projectMonth->{
+        list.forEach(projectMonth -> {
             //获取人员-月度-相同工时状态标准工时汇总
             //获取人员-月度-相同工时状态标准工时汇总
-            ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()),projectMonth.getStatus());
+            ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(projectMonth.getUserId(), df.format(projectMonth.getDayLogDate()), projectMonth.getStatus());
             ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
             ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
             chuanyunSelfCostDO.setStatus(projectMonth.getStatus());
             chuanyunSelfCostDO.setStatus(projectMonth.getStatus());
-            if (monthHour!=null){
+            if (monthHour != null) {
                 chuanyunSelfCostDO.setMonthlyTotalHour(monthHour.getStandardWorkHour());
                 chuanyunSelfCostDO.setMonthlyTotalHour(monthHour.getStandardWorkHour());
             }
             }
             chuanyunSelfCostDO.setProjectId(projectMonth.getProjectId());
             chuanyunSelfCostDO.setProjectId(projectMonth.getProjectId());
@@ -326,7 +233,7 @@ public class WorkHourStatistics {
                     chuanyunSelfCostDO.getProjectType(),
                     chuanyunSelfCostDO.getProjectType(),
                     df.format(chuanyunSelfCostDO.getDayLogDate()),
                     df.format(chuanyunSelfCostDO.getDayLogDate()),
                     projectMonth.getStatus());
                     projectMonth.getStatus());
-            if (oldSelfDO !=null) {
+            if (oldSelfDO != null) {
                 chuanyunSelfCostDao.delete(oldSelfDO);
                 chuanyunSelfCostDao.delete(oldSelfDO);
             }
             }
             chuanyunSelfCostDao.save(chuanyunSelfCostDO);
             chuanyunSelfCostDao.save(chuanyunSelfCostDO);
@@ -336,84 +243,71 @@ public class WorkHourStatistics {
     /**
     /**
      * 定时更新氚云数据
      * 定时更新氚云数据
      */
      */
-    private void updateChuanyunStandardWorkHour(ChuanyunUserCompanyDO oldChuanyunUserCompanyDO){
-        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.findAll(pageable);
-//            if (page<=updateList.getTotalPages()){
-//                page += 1;
-        var updateList=chuanyunSelfWorkHourDao.findByUserId(oldChuanyunUserCompanyDO.getUserId());
-                updateList.forEach(chuanyunSelfWorkHourDO -> {
-                    try{
-                        String departmentId=chuanyunUserCompanyDao.findAllByUserId(chuanyunSelfWorkHourDO.getUserId()).get(0).getDepartmentId();
-                        ChuanyunSelfWorkHourDTO chuanyunSelfWorkHourDTO = new ChuanyunSelfWorkHourDTO();
-                        BeanUtils.copyProperties(chuanyunSelfWorkHourDO,chuanyunSelfWorkHourDTO);
-                        chuanyunSelfWorkHourDTO.setDepartmentId(departmentId);
-                        ChuanyunUserCompanyDO chuanyunUserCompanyDO =chuanyunUserCompanyDao.findByUserId(chuanyunSelfWorkHourDO.getUserId());
-                        if (chuanyunUserCompanyDO!=null){
-                            chuanyunSelfWorkHourDTO.setUserName(chuanyunUserCompanyDO.getUserName());
-                            chuanyunSelfWorkHourDTO.setBg(chuanyunUserCompanyDO.getBg());
-                        }else{
-                            chuanyunSelfWorkHourDTO.setUserName(chuanyunSelfWorkHourDTO.getUserId());
-                            chuanyunSelfWorkHourDTO.setBg("IBG");
-                        }
-                        chuanyunSelfWorkHourDTO.setDepartmentName(chuanyunSelfWorkHourDO.getDepartmentName());
-                        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());
+    private void updateChuanyunStandardWorkHour(ChuanyunUserCompanyDO oldChuanyunUserCompanyDO) {
+        long startTime = Instant.now().getEpochSecond();
+        var updateList = chuanyunSelfWorkHourDao.findByUserId(oldChuanyunUserCompanyDO.getUserId());
+        updateList.forEach(chuanyunSelfWorkHourDO -> {
+            try {
+                String departmentId = chuanyunUserCompanyDao.findAllByUserId(chuanyunSelfWorkHourDO.getUserId()).get(0).getDepartmentId();
+                ChuanyunSelfWorkHourDTO chuanyunSelfWorkHourDTO = new ChuanyunSelfWorkHourDTO();
+                BeanUtils.copyProperties(chuanyunSelfWorkHourDO, chuanyunSelfWorkHourDTO);
+                chuanyunSelfWorkHourDTO.setDepartmentId(departmentId);
+                ChuanyunUserCompanyDO chuanyunUserCompanyDO = chuanyunUserCompanyDao.findByUserId(chuanyunSelfWorkHourDO.getUserId());
+                if (chuanyunUserCompanyDO != null) {
+                    chuanyunSelfWorkHourDTO.setUserName(chuanyunUserCompanyDO.getUserName());
+                    chuanyunSelfWorkHourDTO.setBg(chuanyunUserCompanyDO.getBg());
+                } else {
+                    chuanyunSelfWorkHourDTO.setUserName(chuanyunSelfWorkHourDTO.getUserId());
+                    chuanyunSelfWorkHourDTO.setBg("IBG");
+                }
+                chuanyunSelfWorkHourDTO.setDepartmentName(chuanyunSelfWorkHourDO.getDepartmentName());
+                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());
 //                    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(oldChuanyunUserCompanyDO.getUserName()+"氚云日工时更新花费"+(Instant.now().getEpochSecond()-startTime)+"秒");
+                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("更新标准工时异常");
+            }
+        });
+        log.info(oldChuanyunUserCompanyDO.getUserName() + "氚云日工时更新花费" + (Instant.now().getEpochSecond() - startTime) + "秒");
     }
     }
 
 
     /**
     /**
      * 人员-项目-周度工时汇总,更新氚云数据
      * 人员-项目-周度工时汇总,更新氚云数据
      */
      */
-    private void updateChuanyunWeekHour(){
+    private void updateChuanyunWeekHour() {
         var flag = true;
         var flag = true;
         var pageSize = 20;
         var pageSize = 20;
         var page = 0;
         var page = 0;
         log.info("开始更新周工时汇总");
         log.info("开始更新周工时汇总");
-        long startTime=Instant.now().getEpochSecond();
-        while(flag) {
+        long startTime = Instant.now().getEpochSecond();
+        while (flag) {
             var pageable = PageRequest.of(page, pageSize);
             var pageable = PageRequest.of(page, pageSize);
             var updateList = chuanyunWeekMemberHourDao.findAll(pageable);
             var updateList = chuanyunWeekMemberHourDao.findAll(pageable);
-            if (page<=updateList.getTotalPages()){
+            if (page <= updateList.getTotalPages()) {
                 page += 1;
                 page += 1;
                 updateList.getContent().forEach(chuanyunWeekMemberHourDO -> {
                 updateList.getContent().forEach(chuanyunWeekMemberHourDO -> {
                     //更新氚云
                     //更新氚云
                     try {
                     try {
-                        String departmentId=chuanyunUserCompanyDao.findAllByUserId(chuanyunWeekMemberHourDO.getUserId()).get(0).getDepartmentId();
+                        String departmentId = chuanyunUserCompanyDao.findAllByUserId(chuanyunWeekMemberHourDO.getUserId()).get(0).getDepartmentId();
                         BigDecimal standard = new BigDecimal(8);
                         BigDecimal standard = new BigDecimal(8);
                         ChuanyunProjectMemberWeekHourDTO chuanyunProjectMemberWeekHourDTO = new ChuanyunProjectMemberWeekHourDTO();
                         ChuanyunProjectMemberWeekHourDTO chuanyunProjectMemberWeekHourDTO = new ChuanyunProjectMemberWeekHourDTO();
                         chuanyunProjectMemberWeekHourDTO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
                         chuanyunProjectMemberWeekHourDTO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
@@ -421,57 +315,58 @@ public class WorkHourStatistics {
                         chuanyunProjectMemberWeekHourDTO.setWeek(chuanyunWeekMemberHourDO.getWeek());
                         chuanyunProjectMemberWeekHourDTO.setWeek(chuanyunWeekMemberHourDO.getWeek());
                         chuanyunProjectMemberWeekHourDTO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
                         chuanyunProjectMemberWeekHourDTO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
                         chuanyunProjectMemberWeekHourDTO.setTotalHour(chuanyunWeekMemberHourDO.getStandardWorkHour());
                         chuanyunProjectMemberWeekHourDTO.setTotalHour(chuanyunWeekMemberHourDO.getStandardWorkHour());
-                        chuanyunProjectMemberWeekHourDTO.setPersonDays(chuanyunWeekMemberHourDO.getStandardWorkHour().divide(standard,2,RoundingMode.HALF_UP));
+                        chuanyunProjectMemberWeekHourDTO.setPersonDays(chuanyunWeekMemberHourDO.getStandardWorkHour().divide(standard, 2, RoundingMode.HALF_UP));
                         chuanyunProjectMemberWeekHourDTO.setHourStatus(chuanyunWeekMemberHourDO.getStatus());
                         chuanyunProjectMemberWeekHourDTO.setHourStatus(chuanyunWeekMemberHourDO.getStatus());
                         chuanyunProjectMemberWeekHourDTO.setYear(chuanyunWeekMemberHourDO.getYear());
                         chuanyunProjectMemberWeekHourDTO.setYear(chuanyunWeekMemberHourDO.getYear());
                         chuanyunProjectMemberWeekHourDTO.setDepartmentId(departmentId);
                         chuanyunProjectMemberWeekHourDTO.setDepartmentId(departmentId);
 
 
                         List<String> matchers = new ArrayList<>();
                         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);
+                        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;
                         ChuanyunSaveDTO chuanyunSaveDTO;
-                        if (chuanyunFindAllResponse.getReturnData()!=null) {
-                            List<ChuanyunProjectMemberWeekHourDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                        if (chuanyunFindAllResponse.getReturnData() != null) {
+                            List<ChuanyunProjectMemberWeekHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                            });
                             ChuanyunProjectMemberWeekHourDO firstResult = result.get(0);
                             ChuanyunProjectMemberWeekHourDO firstResult = result.get(0);
-                            chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
-                        }else {
-                            chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,selfMonthString,true);
+                            chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, firstResult.getObjectId(), selfMonthString);
+                        } else {
+                            chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, selfMonthString, true);
                         }
                         }
-                        if(!chuanyunSaveDTO.getSuccessful()){
+                        if (!chuanyunSaveDTO.getSuccessful()) {
                             log.warn("新增人员项目周度工时失败");
                             log.warn("新增人员项目周度工时失败");
                         }
                         }
                     } catch (JsonProcessingException | BigSizeException e) {
                     } catch (JsonProcessingException | BigSizeException e) {
                         e.printStackTrace();
                         e.printStackTrace();
                     }
                     }
                 });
                 });
-            }else {
+            } else {
                 //流程执行完
                 //流程执行完
                 break;
                 break;
             }
             }
         }
         }
-        log.info("周工时更新花费"+(Instant.now().getEpochSecond()-startTime));
+        log.info("周工时更新花费" + (Instant.now().getEpochSecond() - startTime));
     }
     }
 
 
     /**
     /**
      * 人员-项目-月度工时汇总,更新氚云数据
      * 人员-项目-月度工时汇总,更新氚云数据
      */
      */
-    private void updateChuanyunMonthHour(){
+    private void updateChuanyunMonthHour() {
         var flag = true;
         var flag = true;
         var pageSize = 20;
         var pageSize = 20;
         var page = 0;
         var page = 0;
         log.info("开始更新月工时汇总");
         log.info("开始更新月工时汇总");
-        long startTime=Instant.now().getEpochSecond();
-        while(flag) {
+        long startTime = Instant.now().getEpochSecond();
+        while (flag) {
             var pageable = PageRequest.of(page, pageSize);
             var pageable = PageRequest.of(page, pageSize);
             var updateList = chuanyunSelfCostDao.findAll(pageable);
             var updateList = chuanyunSelfCostDao.findAll(pageable);
-            if (page<=updateList.getTotalPages()){
+            if (page <= updateList.getTotalPages()) {
                 page += 1;
                 page += 1;
                 updateList.getContent().forEach(chuanyunSelfCostDO -> {
                 updateList.getContent().forEach(chuanyunSelfCostDO -> {
                     ChuanyunMemberMonthCostDTO chuanyunMemberMonthCostDTO = new ChuanyunMemberMonthCostDTO();
                     ChuanyunMemberMonthCostDTO chuanyunMemberMonthCostDTO = new ChuanyunMemberMonthCostDTO();
@@ -485,64 +380,43 @@ public class WorkHourStatistics {
                     chuanyunMemberMonthCostDTO.setDayLogDate(chuanyunSelfCostDO.getDayLogDate());
                     chuanyunMemberMonthCostDTO.setDayLogDate(chuanyunSelfCostDO.getDayLogDate());
                     chuanyunMemberMonthCostDTO.setWorkHour(chuanyunSelfCostDO.getTotalHour());
                     chuanyunMemberMonthCostDTO.setWorkHour(chuanyunSelfCostDO.getTotalHour());
                     chuanyunMemberMonthCostDTO.setDepartmentId(chuanyunSelfCostDO.getDepartmentId());
                     chuanyunMemberMonthCostDTO.setDepartmentId(chuanyunSelfCostDO.getDepartmentId());
-                    if (!StringUtils.isEmpty(chuanyunSelfCostDO.getProjectId())){
+                    if (!StringUtils.isEmpty(chuanyunSelfCostDO.getProjectId())) {
                         try {
                         try {
                             List<String> matchers = new ArrayList<>();
                             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);
+                            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;
                             ChuanyunSaveDTO chuanyunSaveDTO;
-                            if (chuanyunFindAllResponse.getReturnData()!=null){
-                                List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                            if (chuanyunFindAllResponse.getReturnData() != null) {
+                                List<ChuanyunMemberMonthCostDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                                });
                                 ChuanyunMemberMonthCostDO firstResult = result.get(0);
                                 ChuanyunMemberMonthCostDO firstResult = result.get(0);
-                                chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE,firstResult.getObjectId(),memberMonthString);
-                            }else {
-                                chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE,memberMonthString,true);
+                                chuanyunSaveDTO = chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE, firstResult.getObjectId(), memberMonthString);
+                            } else {
+                                chuanyunSaveDTO = chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE, memberMonthString, true);
                             }
                             }
-                            if(!chuanyunSaveDTO.getSuccessful()){
+                            if (!chuanyunSaveDTO.getSuccessful()) {
                                 log.warn("新增项目成员月度工时汇总失败");
                                 log.warn("新增项目成员月度工时汇总失败");
                             }
                             }
                         } catch (Exception e) {
                         } catch (Exception e) {
                             e.printStackTrace();
                             e.printStackTrace();
-                            log.warn("########"+chuanyunSelfCostDO+"");
+                            log.warn("########" + chuanyunSelfCostDO + "");
                         }
                         }
                     }
                     }
                 });
                 });
-            }else {
+            } else {
                 //流程执行完
                 //流程执行完
                 break;
                 break;
             }
             }
         }
         }
-        log.info("月工时更新花费"+(Instant.now().getEpochSecond()-startTime));
+        log.info("月工时更新花费" + (Instant.now().getEpochSecond() - startTime));
     }
     }
 
 
-
-//    private void projectHistoryHour(){
-//        List<ChuanyunProjectCostDO> list = chuanyunProjectCostDao.getHistoryProjectCost();
-//        list.forEach(chuanyunProjectCostDO -> {
-//            ChuanyunProjectScheduledTask.ProjectTotalCostDTO chuanyunProjectTotalCostDTO = new ChuanyunProjectScheduledTask.ProjectTotalCostDTO();
-//            chuanyunProjectTotalCostDTO.setProjectType(chuanyunProjectCostDO.getProjectType());
-//            chuanyunProjectTotalCostDTO.setProjectId(chuanyunProjectCostDO.getProjectId());
-//            chuanyunProjectTotalCostDTO.setStatus(chuanyunProjectCostDO.getStatus());
-//            chuanyunProjectTotalCostDTO.setWorkHour(chuanyunProjectCostDO.getTotalHour());
-//            chuanyunProjectTotalCostDTO.setPersonDays(chuanyunProjectCostDO.getPersonDays());
-//            try {
-//                var projectTotalString=objectMapper.writeValueAsString(chuanyunProjectTotalCostDTO);
-//                ChuanyunSaveDTO chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectTotalCostDO.SCHEMA_CODE,projectTotalString,true);
-//                if(chuanyunSaveDTO.getSuccessful()){
-//                    log.warn("新增项目成本汇总成功");
-//                }
-//            } catch (BigSizeException | JsonProcessingException e) {
-//                e.printStackTrace();
-//            }
-//        });
-//    }
-
     /**
     /**
      * 人员项目工时汇总
      * 人员项目工时汇总
      */
      */
@@ -551,16 +425,16 @@ public class WorkHourStatistics {
         list.forEach(chuanyunMemberCostDO -> {
         list.forEach(chuanyunMemberCostDO -> {
             if (StringUtils.isEmpty(chuanyunMemberCostDO.getProjectId())) {
             if (StringUtils.isEmpty(chuanyunMemberCostDO.getProjectId())) {
                 BigDecimal standard = new BigDecimal(8);
                 BigDecimal standard = new BigDecimal(8);
-                ChuanyunMemberCostDO oldCostDO = chuanyunMemberCostDao.findByUserIdAndProjectIdAndProjectTypeAndStatus(chuanyunMemberCostDO.getUserId(),chuanyunMemberCostDO.getProjectId(),chuanyunMemberCostDO.getProjectType(),chuanyunMemberCostDO.getStatus());
-                if (oldCostDO !=null) {
+                ChuanyunMemberCostDO oldCostDO = chuanyunMemberCostDao.findByUserIdAndProjectIdAndProjectTypeAndStatus(chuanyunMemberCostDO.getUserId(), chuanyunMemberCostDO.getProjectId(), chuanyunMemberCostDO.getProjectType(), chuanyunMemberCostDO.getStatus());
+                if (oldCostDO != null) {
                     chuanyunMemberCostDao.delete(oldCostDO);
                     chuanyunMemberCostDao.delete(oldCostDO);
                 }
                 }
                 chuanyunMemberCostDao.save(chuanyunMemberCostDO);
                 chuanyunMemberCostDao.save(chuanyunMemberCostDO);
                 //搜索是否有审批中数据
                 //搜索是否有审批中数据
-                ChuanyunMemberCostDO processdo = chuanyunMemberCostDao.getProcessProjectMemberCost(chuanyunMemberCostDO.getProjectId(),chuanyunMemberCostDO.getProjectType(),chuanyunMemberCostDO.getUserId());
-                if (processdo==null){
-                    chuanyunMemberCostDao.deleteByProjectIdAndUserIdAndProjectTypeAndStatus(chuanyunMemberCostDO.getProjectId(),chuanyunMemberCostDO.getUserId(),chuanyunMemberCostDO.getProjectType(),"2");
-                    deleteExamineStatus(ChuanyunProjectMemberCostDO.SCHEMA_CODE,"F0000007","F0000001",chuanyunMemberCostDO.getProjectId(),"F0000002",chuanyunMemberCostDO.getUserId(),"","","","","","","F0000005",chuanyunMemberCostDO.getProjectType());
+                ChuanyunMemberCostDO processdo = chuanyunMemberCostDao.getProcessProjectMemberCost(chuanyunMemberCostDO.getProjectId(), chuanyunMemberCostDO.getProjectType(), chuanyunMemberCostDO.getUserId());
+                if (processdo == null) {
+                    chuanyunMemberCostDao.deleteByProjectIdAndUserIdAndProjectTypeAndStatus(chuanyunMemberCostDO.getProjectId(), chuanyunMemberCostDO.getUserId(), chuanyunMemberCostDO.getProjectType(), "2");
+                    deleteExamineStatus(ChuanyunProjectMemberCostDO.SCHEMA_CODE, "F0000007", "F0000001", chuanyunMemberCostDO.getProjectId(), "F0000002", chuanyunMemberCostDO.getUserId(), "", "", "", "", "", "", "F0000005", chuanyunMemberCostDO.getProjectType());
                 }
                 }
                 //更新氚云数据
                 //更新氚云数据
                 try {
                 try {
@@ -572,67 +446,63 @@ public class WorkHourStatistics {
                     chuanyunProjectMemberCostDTO.setStatus(chuanyunMemberCostDO.getStatus());
                     chuanyunProjectMemberCostDTO.setStatus(chuanyunMemberCostDO.getStatus());
                     chuanyunProjectMemberCostDTO.setPersonDays(chuanyunMemberCostDO.getPersonDays());
                     chuanyunProjectMemberCostDTO.setPersonDays(chuanyunMemberCostDO.getPersonDays());
                     List<String> matchers = new ArrayList<>();
                     List<String> matchers = new ArrayList<>();
-                    matchers.add("F0000001_2,"+chuanyunMemberCostDO.getProjectId());
-                    matchers.add("F0000005_2,"+chuanyunMemberCostDO.getProjectType());
-                    matchers.add("F0000007_2,"+chuanyunMemberCostDO.getStatus());
-                    matchers.add("F0000002_2,"+chuanyunMemberCostDO.getUserId());
-                    var filter= Filter.instance(0,1,true,"And",matchers);
-                    var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectMemberCostDO.SCHEMA_CODE,filter);
-                    var projectMemberString =objectMapper.writeValueAsString(chuanyunProjectMemberCostDTO);
+                    matchers.add("F0000001_2," + chuanyunMemberCostDO.getProjectId());
+                    matchers.add("F0000005_2," + chuanyunMemberCostDO.getProjectType());
+                    matchers.add("F0000007_2," + chuanyunMemberCostDO.getStatus());
+                    matchers.add("F0000002_2," + chuanyunMemberCostDO.getUserId());
+                    var filter = Filter.instance(0, 1, true, "And", matchers);
+                    var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunProjectMemberCostDO.SCHEMA_CODE, filter);
+                    var projectMemberString = objectMapper.writeValueAsString(chuanyunProjectMemberCostDTO);
                     ChuanyunSaveDTO chuanyunSaveDTO;
                     ChuanyunSaveDTO chuanyunSaveDTO;
-                    if (chuanyunFindAllResponse.getReturnData()!=null) {
-                        List<ChuanyunProjectMemberCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                    if (chuanyunFindAllResponse.getReturnData() != null) {
+                        List<ChuanyunProjectMemberCostDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                        });
                         ChuanyunProjectMemberCostDO oldProjectMemberCostDO = result.get(0);
                         ChuanyunProjectMemberCostDO oldProjectMemberCostDO = result.get(0);
-                        chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberCostDO.SCHEMA_CODE,oldProjectMemberCostDO.getObjectId(), projectMemberString);
-                    }else {
-                        chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberCostDO.SCHEMA_CODE, projectMemberString,true);
+                        chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberCostDO.SCHEMA_CODE, oldProjectMemberCostDO.getObjectId(), projectMemberString);
+                    } else {
+                        chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberCostDO.SCHEMA_CODE, projectMemberString, true);
                     }
                     }
-                    if(!chuanyunSaveDTO.getSuccessful()){
+                    if (!chuanyunSaveDTO.getSuccessful()) {
                         log.warn("新增项目成员工时汇总失败");
                         log.warn("新增项目成员工时汇总失败");
-                    }else {
+                    } else {
                         log.info("新增项目成员工时汇总成功");
                         log.info("新增项目成员工时汇总成功");
                     }
                     }
                 } catch (JsonProcessingException | BigSizeException e) {
                 } catch (JsonProcessingException | BigSizeException e) {
                     e.printStackTrace();
                     e.printStackTrace();
-                    log.warn("########"+chuanyunMemberCostDO+"");
+                    log.warn("########" + chuanyunMemberCostDO + "");
                 }
                 }
             }
             }
         });
         });
     }
     }
 
 
     /**
     /**
-     * 项目工时汇总
-     */
-
-
-    /**
      * 离职人员工时标准化
      * 离职人员工时标准化
      */
      */
-    private void quitStandradHour() {
+    private void quitStandardHour() {
         List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getQuitSelfWorkHour();
         List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getQuitSelfWorkHour();
         selfList.forEach(self -> {
         selfList.forEach(self -> {
             BigDecimal standard = new BigDecimal(8);
             BigDecimal standard = new BigDecimal(8);
-            if (self!=null){
+            if (self != null) {
                 ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
                 ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
                 chuanyunSelfWorkHourDO.setStatus(self.getStatus());
                 chuanyunSelfWorkHourDO.setStatus(self.getStatus());
                 chuanyunSelfWorkHourDO.setUserId(self.getUserId());
                 chuanyunSelfWorkHourDO.setUserId(self.getUserId());
                 chuanyunSelfWorkHourDO.setProjectType(self.getProjectType());
                 chuanyunSelfWorkHourDO.setProjectType(self.getProjectType());
-                if(ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())){
+                if (ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())) {
                     chuanyunSelfWorkHourDO.setProjectId(ChuanYunConstant.PRODUCTION_PROJECT_ID);
                     chuanyunSelfWorkHourDO.setProjectId(ChuanYunConstant.PRODUCTION_PROJECT_ID);
-                }else{
+                } else {
                     chuanyunSelfWorkHourDO.setProjectId(self.getProjectId());
                     chuanyunSelfWorkHourDO.setProjectId(self.getProjectId());
                 }
                 }
                 chuanyunSelfWorkHourDO.setDayLogDate(self.getDayLogDate());
                 chuanyunSelfWorkHourDO.setDayLogDate(self.getDayLogDate());
-                ChuanyunWorkHourDO chuanyunWorkHourDO = chuanyunWorkHourDao.getQuitDayWorkHour(self.getUserId(),self.getDayLogDate());
-                if (chuanyunWorkHourDO!=null){
-                    if (chuanyunWorkHourDO.getHoursWorked().compareTo(standard)<=0) {
+                ChuanyunWorkHourDO chuanyunWorkHourDO = chuanyunWorkHourDao.getQuitDayWorkHour(self.getUserId(), self.getDayLogDate());
+                if (chuanyunWorkHourDO != null) {
+                    if (chuanyunWorkHourDO.getHoursWorked().compareTo(standard) <= 0) {
                         chuanyunSelfWorkHourDO.setStandardWorkHour(self.getHoursWorked());
                         chuanyunSelfWorkHourDO.setStandardWorkHour(self.getHoursWorked());
-                    }else {
+                    } else {
                         BigDecimal personDays = (self.getHoursWorked().divide(chuanyunWorkHourDO.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
                         BigDecimal personDays = (self.getHoursWorked().divide(chuanyunWorkHourDO.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
                         chuanyunSelfWorkHourDO.setStandardWorkHour(personDays);
                         chuanyunSelfWorkHourDO.setStandardWorkHour(personDays);
                     }
                     }
-                    ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO1 = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDateAndProjectType(self.getUserId(),ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())?ChuanYunConstant.PRODUCTION_PROJECT_ID:self.getProjectId(),self.getDayLogDate(),self.getProjectType());
-                    if (chuanyunSelfWorkHourDO1!=null){
+                    ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO1 = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDateAndProjectType(self.getUserId(), ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType()) ? ChuanYunConstant.PRODUCTION_PROJECT_ID : self.getProjectId(), self.getDayLogDate(), self.getProjectType());
+                    if (chuanyunSelfWorkHourDO1 != null) {
                         chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
                         chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
                     }
                     }
                     chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
                     chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
@@ -640,56 +510,57 @@ public class WorkHourStatistics {
                 }
                 }
             }
             }
         });
         });
-        log.info("离职人员工时标准化完成"+selfList.size());
+        log.info("离职人员工时标准化完成" + selfList.size());
     }
     }
 
 
     /**
     /**
      * 删除状态为审核中数据
      * 删除状态为审核中数据
+     *
      * @param schemaCode
      * @param schemaCode
      * @param
      * @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) {
+    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 {
         try {
             List<String> matchers = new ArrayList<>();
             List<String> matchers = new ArrayList<>();
-            matchers.add(statusCode+"_2,"+"2");
-            matchers.add(projectCode+"_2,"+projectId);
-            if (!StringUtils.isEmpty(userId)){
-                matchers.add(userCode+"_2,"+userId);
+            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(year)) {
+                matchers.add(yearCode + "_2," + year);
             }
             }
-            if (!StringUtils.isEmpty(month)){
-                matchers.add(monthCode+"_2,"+month);
+            if (!StringUtils.isEmpty(month)) {
+                matchers.add(monthCode + "_2," + month);
             }
             }
-            if (!StringUtils.isEmpty(week)){
-                matchers.add(weekCode+"_2,"+week);
+            if (!StringUtils.isEmpty(week)) {
+                matchers.add(weekCode + "_2," + week);
             }
             }
-            if (!StringUtils.isEmpty(projectType)){
-                matchers.add(typeCode+"_2,"+projectType);
+            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<>(){});
+            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 -> {
                 result.forEach(basicDO -> {
-                    ChuanyunSaveDTO chuanyunSaveDTO = chuanYunManager.delete(schemaCode,basicDO.getObjectId());
-                    if(chuanyunSaveDTO.getSuccessful()){
+                    ChuanyunSaveDTO chuanyunSaveDTO = chuanYunManager.delete(schemaCode, basicDO.getObjectId());
+                    if (chuanyunSaveDTO.getSuccessful()) {
 //                        log.info("删除状态为审核中数据成功");
 //                        log.info("删除状态为审核中数据成功");
-                    }else{
+                    } else {
                         log.warn("删除状态为审核中数据失败");
                         log.warn("删除状态为审核中数据失败");
                     }
                     }
                 });
                 });
             }
             }
-        }catch (Exception e) {
+        } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
             log.error(e.getMessage());
             log.error(e.getMessage());
         }
         }
     }
     }
 
 
     @Data
     @Data
-    static
-    class ChuanyunProjectMemberCostDTO {
+    static class ChuanyunProjectMemberCostDTO {
 
 
         /**
         /**
          * 项目ID
          * 项目ID
@@ -732,8 +603,7 @@ public class WorkHourStatistics {
      * 人员项目周度工时
      * 人员项目周度工时
      */
      */
     @Data
     @Data
-    static
-    class ChuanyunProjectMemberWeekHourDTO{
+    static class ChuanyunProjectMemberWeekHourDTO {
 
 
         @JsonProperty("F0000001")
         @JsonProperty("F0000001")
         private String projectId;
         private String projectId;
@@ -770,8 +640,7 @@ public class WorkHourStatistics {
      * 工时标准化更新数据
      * 工时标准化更新数据
      */
      */
     @Data
     @Data
-    static
-    class ChuanyunSelfWorkHourDTO {
+    static class ChuanyunSelfWorkHourDTO {
 
 
         @JsonProperty("F0000002")
         @JsonProperty("F0000002")
         private String userId;
         private String userId;
@@ -816,8 +685,7 @@ public class WorkHourStatistics {
     }
     }
 
 
     @Data
     @Data
-    static
-    class ChuanyunMemberMonthCostDTO{
+    static class ChuanyunMemberMonthCostDTO {
         /**
         /**
          * 项目ID
          * 项目ID
          */
          */

+ 7 - 66
src/main/java/com/galaxis/manatee/task/WorkHourStatisticsRecently.java

@@ -11,6 +11,7 @@ import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
 import com.galaxis.manatee.entity.chuanyun.dto.Filter;
 import com.galaxis.manatee.entity.chuanyun.dto.Filter;
 import com.galaxis.manatee.exception.BigSizeException;
 import com.galaxis.manatee.exception.BigSizeException;
 import com.galaxis.manatee.manager.ChuanYunManager;
 import com.galaxis.manatee.manager.ChuanYunManager;
+import com.galaxis.manatee.service.LogService;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.PageRequest;
@@ -19,7 +20,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.time.Instant;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
@@ -33,29 +33,27 @@ import java.util.List;
 @Service
 @Service
 @Slf4j
 @Slf4j
 public class WorkHourStatisticsRecently {
 public class WorkHourStatisticsRecently {
-
-    private final Integer pageSize = 100;
     private final ChuanYunManager chuanYunManager;
     private final ChuanYunManager chuanYunManager;
     private final ChuanyunLogDao chuanyunLogDao;
     private final ChuanyunLogDao chuanyunLogDao;
     private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
     private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
     private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
     private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
-    private final ChuanyunWorkHourDao chuanyunWorkHourDao;
     private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
     private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
     private final ObjectMapper objectMapper=new ObjectMapper();
     private final ObjectMapper objectMapper=new ObjectMapper();
     private final ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao;
     private final ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao;
     private final ChuanyunSelfCostDao chuanyunSelfCostDao;
     private final ChuanyunSelfCostDao chuanyunSelfCostDao;
     private final ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao;
     private final ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao;
+    private final LogService logService;
 
 
-    public WorkHourStatisticsRecently(ChuanYunManager chuanYunManager, ChuanyunLogDao chuanyunLogDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao, ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao) {
+    public WorkHourStatisticsRecently(ChuanYunManager chuanYunManager, ChuanyunLogDao chuanyunLogDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao, ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao, LogService logService) {
         this.chuanYunManager = chuanYunManager;
         this.chuanYunManager = chuanYunManager;
         this.chuanyunLogDao = chuanyunLogDao;
         this.chuanyunLogDao = chuanyunLogDao;
         this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
         this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
         this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
         this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
-        this.chuanyunWorkHourDao = chuanyunWorkHourDao;
         this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
         this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
         this.chuanyunWeekMemberHourDao = chuanyunWeekMemberHourDao;
         this.chuanyunWeekMemberHourDao = chuanyunWeekMemberHourDao;
         this.chuanyunSelfCostDao = chuanyunSelfCostDao;
         this.chuanyunSelfCostDao = chuanyunSelfCostDao;
         this.chuanyunUserDepartmentNameDao = chuanyunUserDepartmentNameDao;
         this.chuanyunUserDepartmentNameDao = chuanyunUserDepartmentNameDao;
+        this.logService = logService;
     }
     }
 
 
     @Scheduled(fixedDelay = 3600000L)
     @Scheduled(fixedDelay = 3600000L)
@@ -74,6 +72,7 @@ public class WorkHourStatisticsRecently {
         var start = 0;
         var start = 0;
         var totalCount = 0L;
         var totalCount = 0L;
         var flag = true;
         var flag = true;
+        var pageSize=100;
         List<String> matchersString=new ArrayList<>();
         List<String> matchersString=new ArrayList<>();
         //由于需要统计流程中的日志,在日志数据同步时将状态为2的数据一并统计
         //由于需要统计流程中的日志,在日志数据同步时将状态为2的数据一并统计
         matchersString.add("Status_6,[1;2;3]");
         matchersString.add("Status_6,[1;2;3]");
@@ -177,7 +176,7 @@ public class WorkHourStatisticsRecently {
                 //逐个将员工每天工时进行统计汇总
                 //逐个将员工每天工时进行统计汇总
                 List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
                 List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
                 //工时标准化
                 //工时标准化
-                userCompanyDOList.forEach(this::standardHour);
+                userCompanyDOList.forEach(chuanyunUserCompanyDO -> logService.standardHour(chuanyunUserCompanyDO,true));
             }else {
             }else {
                 break;
                 break;
             }
             }
@@ -187,64 +186,7 @@ public class WorkHourStatisticsRecently {
     }
     }
 
 
     /**
     /**
-     * 员工单日、各个项目工时标准化,并保存
-     * @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());
-                //2021年3月3日添加,使用ChuanyunGroupProject中实际的项目类型来替代日志中的项目类型,防止出现项目类型错误的情况
-                chuanyunSelfWorkHourDO.setProjectType(self.getProjectType());
-                try{
-                    var chuanyunGroupProject=chuanyunGroupProjectDao.findByObjectId(self.getProjectId());
-                    if(chuanyunGroupProject==null){
-                        throw new Exception("没有找到对应的项目");
-                    }
-                    //如果找到相应的项目,则使用项目实际的项目类型
-                    chuanyunSelfWorkHourDO.setProjectType(chuanyunGroupProject.getProjectType());
-                }catch (Exception e){
-                    //没有找到对应项目,使用原项目类型
-                    chuanyunSelfWorkHourDO.setProjectType(self.getProjectType());
-                }
-                chuanyunSelfWorkHourDO.setDepartmentName(self.getDepartmentName());
-                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(){
     private void updateChuanyunStandardWorkHour(){
         var flag = true;
         var flag = true;
@@ -367,7 +309,6 @@ public class WorkHourStatisticsRecently {
                     //更新氚云
                     //更新氚云
                     try {
                     try {
                         String departmentId=chuanyunUserCompanyDao.findByUserId(chuanyunWeekMemberHourDO.getUserId()).getDepartmentId();
                         String departmentId=chuanyunUserCompanyDao.findByUserId(chuanyunWeekMemberHourDO.getUserId()).getDepartmentId();
-                        BigDecimal standard = new BigDecimal(8);
                         WorkHourStatistics.ChuanyunProjectMemberWeekHourDTO chuanyunProjectMemberWeekHourDTO = new WorkHourStatistics.ChuanyunProjectMemberWeekHourDTO();
                         WorkHourStatistics.ChuanyunProjectMemberWeekHourDTO chuanyunProjectMemberWeekHourDTO = new WorkHourStatistics.ChuanyunProjectMemberWeekHourDTO();
                         chuanyunProjectMemberWeekHourDTO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
                         chuanyunProjectMemberWeekHourDTO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
                         chuanyunProjectMemberWeekHourDTO.setUserId(chuanyunWeekMemberHourDO.getUserId());
                         chuanyunProjectMemberWeekHourDTO.setUserId(chuanyunWeekMemberHourDO.getUserId());