浏览代码

将保存到数据库的流程与更新氚云流程进行拆分。
每周统计增加年份信息
增加了安装台删除每周统计的方法

verguenza 4 年之前
父节点
当前提交
98e2de3771

+ 21 - 2
src/main/java/com/galaxis/manatee/dao/ChuanyunWeekMemberHourDao.java

@@ -12,11 +12,30 @@ import java.util.List;
 public interface ChuanyunWeekMemberHourDao extends GalaxisRepository<ChuanyunWeekMemberHourDO,String> {
 
     /**
+     * 根据状态删除数据
+     * @param status    状态
+     * @return  删除条数
+     */
+    Integer deleteAllByStatus(String status);
+
+    /**
      * 人员-项目-周度工时汇总
      * @return
      */
-    @Query(value="SELECT chuanyun_self_work_hour.object_id,WEEKOFYEAR(chuanyun_self_work_hour.day_log_date) AS week,project_id,user_id,SUM(standard_work_hour)AS standard_work_hour,project_type,`status`" +
-            "FROM chuanyun_self_work_hour WHERE project_id !='' GROUP BY chuanyun_self_work_hour.project_id,chuanyun_self_work_hour.user_id,WEEKOFYEAR(chuanyun_self_work_hour.day_log_date),chuanyun_self_work_hour.`status`",nativeQuery = true)
+    @Query(value="SELECT chuanyun_self_work_hour.object_id," +
+            "DATE_FORMAT(day_log_date,'%Y') as year," +
+            "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date) AS week," +
+            "project_id,user_id," +
+            "SUM(standard_work_hour)AS standard_work_hour," +
+            "project_type," +
+            "`status`" +
+            "FROM chuanyun_self_work_hour " +
+            "WHERE project_id !='' " +
+            "GROUP BY chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.user_id," +
+            "DATE_FORMAT(day_log_date,'%Y')," +
+            "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date)," +
+            "chuanyun_self_work_hour.`status`",nativeQuery = true)
     List<ChuanyunWeekMemberHourDO> getWeekMemberHour();
 
     /**

+ 8 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunWeekMemberHourDO.java

@@ -33,6 +33,14 @@ public class ChuanyunWeekMemberHourDO {
      */
     private String status;
 
+    /**
+     * 年
+     */
+    private String year;
+
+    /**
+     * 周
+     */
     private String week;
 
     private BigDecimal standardWorkHour;

+ 199 - 170
src/main/java/com/galaxis/manatee/task/ChuanyunProjectScheduledTask.java

@@ -17,6 +17,8 @@ import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
@@ -283,18 +285,17 @@ public class ChuanyunProjectScheduledTask {
             var chuanyunUserCompanyList = chuanyunUserCompanyDao.findAllByStatus(1,pageable);
             if (page<=chuanyunUserCompanyList.getTotalPages()){
                 page += 1;
+                //逐个将员工每天工时进行统计汇总
+                List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
+                userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
+                    long start= Instant.now().getEpochSecond();
+                    //工时标准化
+                    standardHour(chuanyunUserCompanyDO);
+                    log.info("每日工时标准化"+chuanyunUserCompanyDO.getUserName()+(Instant.now().getEpochSecond()-start)+"毫秒");
+                });
             }else {
-                flag = false;
                 break;
             }
-            //逐个将员工每天工时进行统计汇总
-            List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
-            userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
-                long start= Instant.now().getEpochSecond();
-                //工时标准化
-                standardHour(chuanyunUserCompanyDO);
-                log.info("每日工时标准化"+chuanyunUserCompanyDO.getUserName()+(Instant.now().getEpochSecond()-start)+"毫秒");
-            });
         }
     }
 
@@ -311,16 +312,13 @@ public class ChuanyunProjectScheduledTask {
             var chuanyunUserCompanyList = chuanyunUserCompanyDao.findAllByStatus(1,pageable);
             if (page<=chuanyunUserCompanyList.getTotalPages()){
                 page += 1;
+                //逐个将员工每天工时进行统计汇总
+                List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
+                //单项目单人单月成本
+                userCompanyDOList.forEach(this::standardMonthlyHour);
             }else {
                 flag = false;
-                break;
             }
-            //逐个将员工每天工时进行统计汇总
-            List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
-            userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
-                //单项目单人单月成本
-                standardMonthlyHour(chuanyunUserCompanyDO);
-            });
         }
     }
 
@@ -328,12 +326,13 @@ public class ChuanyunProjectScheduledTask {
      * 人员-项目-周度工时汇总
      */
     @Scheduled(fixedDelay = 3600000L)
-    private void weekhour() {
+    private void weekHour() {
+        //删除数据库中审批中的数据,防止重复记录工时
+        chuanyunWeekMemberHourDao.deleteAllByStatus("2");
         //更新数据库
        List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHour();
        list.forEach(chuanyunWeekMemberHourDO -> {
            if (chuanyunWeekMemberHourDO!=null){
-               BigDecimal standard = new BigDecimal(8);
                ChuanyunWeekMemberHourDO weekMemberHourDO = new ChuanyunWeekMemberHourDO();
                weekMemberHourDO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
                weekMemberHourDO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
@@ -346,50 +345,88 @@ public class ChuanyunProjectScheduledTask {
                    chuanyunWeekMemberHourDao.delete(oldWeekHour);
                }
                chuanyunWeekMemberHourDao.save(weekMemberHourDO);
-               //更新氚云
-               try {
-                   ChuanyunProjectMemberWeekHourDTO chuanyunProjectMemberWeekHourDTO = new ChuanyunProjectMemberWeekHourDTO();
-                   chuanyunProjectMemberWeekHourDTO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
-                   chuanyunProjectMemberWeekHourDTO.setUserId(chuanyunWeekMemberHourDO.getUserId());
-                   chuanyunProjectMemberWeekHourDTO.setWeek(chuanyunWeekMemberHourDO.getWeek());
-                   chuanyunProjectMemberWeekHourDTO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
-                   chuanyunProjectMemberWeekHourDTO.setTotalHour(chuanyunWeekMemberHourDO.getStandardWorkHour());
-                   chuanyunProjectMemberWeekHourDTO.setPersonDays(chuanyunWeekMemberHourDO.getStandardWorkHour().divide(standard,2,RoundingMode.HALF_UP));
-                   chuanyunProjectMemberWeekHourDTO.setHourStatus(chuanyunWeekMemberHourDO.getStatus());
-                   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("F0000003_2,"+chuanyunWeekMemberHourDO.getProjectType());
-                   matchers.add("F0000007_2,"+chuanyunWeekMemberHourDO.getStatus());
-                   var filter= Filter.instance(0,1,true,"And",matchers);
-                   var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,filter);
-                   var selfMonthString=objectMapper.writeValueAsString(chuanyunProjectMemberWeekHourDTO);
-                   ChuanyunSaveDTO chuanyunSaveDTO;
-                   if (chuanyunFindAllResponse.getReturnData()!=null) {
-                       List<ChuanyunProjectMemberWeekHourDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-                       ChuanyunProjectMemberWeekHourDO firstResult = result.get(0);
-                       chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
-                   }else {
-                       chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,selfMonthString,true);
-                   }
-                   if(chuanyunSaveDTO.getSuccessful()){
-                       log.info("新增人员项目周度工时成功");
-                   }else{
-                       log.warn("新增人员项目周度工时失败");
-                   }
-               } catch (JsonProcessingException | BigSizeException e) {
-                   e.printStackTrace();
-               }
            }
        });
     }
 
     /**
+     * 员工每月、各个项目标准工时会职工
+     * @param chuanyunUserCompanyDO 员工信息
+     */
+    private void standardMonthlyHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
+        var objectMapper=new ObjectMapper();
+        //每月每项目工时,按月-项目-用户分组统计标准工时
+        List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHour(chuanyunUserCompanyDO.getUserId());
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        list.forEach(projectMonth->{
+            //获取人员-月度-相同工时状态标准工时汇总
+            ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()),projectMonth.getStatus());
+            //获取人员月度工资信息
+            //TODO 张曦铭的薪资信息同步之后需要使用U9中的数据更新薪资信息
+            ChuanyunPayrollDO chuanyunPayrollDO = chuanyunPayrollDao.getPayroll(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()));
+            ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
+            ChuanyunMemberMonthCostDTO chuanyunMemberMonthCostDTO = new ChuanyunMemberMonthCostDTO();
+            if (chuanyunPayrollDO != null) {
+                BigDecimal cost = (projectMonth.getStandardWorkHour().divide(monthHour.getStandardWorkHour(), 2, RoundingMode.HALF_UP)).multiply(chuanyunPayrollDO.getWagesPayable());
+                chuanyunSelfCostDO.setCost(cost);
+                chuanyunMemberMonthCostDTO.setCost(cost);
+            }else{
+                chuanyunSelfCostDO.setCost(BigDecimal.ZERO);
+                chuanyunMemberMonthCostDTO.setCost(BigDecimal.ZERO);
+            }
+            chuanyunSelfCostDO.setStatus(projectMonth.getStatus());
+            chuanyunSelfCostDO.setMonthlyTotalHour(monthHour.getStandardWorkHour());
+            chuanyunSelfCostDO.setProjectId(projectMonth.getProjectId());
+            chuanyunSelfCostDO.setProjectType(projectMonth.getProjectType());
+            chuanyunSelfCostDO.setUserId(projectMonth.getUserId());
+            chuanyunSelfCostDO.setDayLogDate(projectMonth.getDayLogDate().withDayOfMonth(1));
+            chuanyunSelfCostDO.setTotalHour(projectMonth.getStandardWorkHour());
+            ChuanyunSelfCostDO oldSelfDO = chuanyunSelfCostDao.getOldSelfDO(chuanyunSelfCostDO.getUserId(),chuanyunSelfCostDO.getProjectId(),df.format(chuanyunSelfCostDO.getDayLogDate()));
+            if (oldSelfDO !=null) {
+                chuanyunSelfCostDao.delete(oldSelfDO);
+            }
+            chuanyunSelfCostDao.save(chuanyunSelfCostDO);
+            //更新氚云数据
+            chuanyunMemberMonthCostDTO.setProjectId(projectMonth.getProjectId());
+            chuanyunMemberMonthCostDTO.setProjectType(projectMonth.getProjectType());
+            chuanyunMemberMonthCostDTO.setStatus(projectMonth.getStatus());
+            chuanyunMemberMonthCostDTO.setUserId(projectMonth.getUserId());
+            chuanyunMemberMonthCostDTO.setMonthWorkHour(monthHour.getStandardWorkHour());
+            chuanyunMemberMonthCostDTO.setDayLogDate(projectMonth.getDayLogDate().withDayOfMonth(1));
+            chuanyunMemberMonthCostDTO.setWorkHour(projectMonth.getStandardWorkHour());
+            chuanyunMemberMonthCostDTO.setDepartmentId(chuanyunUserCompanyDO.getDepartmentId());
+            try {
+                List<String> matchers = new ArrayList<>();
+                matchers.add("F0000003_2,"+projectMonth.getProjectId());
+                matchers.add("F0000009_2,"+projectMonth.getStatus());
+                matchers.add("F0000002_2,"+projectMonth.getUserId());
+                matchers.add("F0000004_2,"+projectMonth.getDayLogDate().withDayOfMonth(1));
+                var filter= Filter.instance(0,1,true,"And",matchers);
+                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
+                var memberMonthString=objectMapper.writeValueAsString(chuanyunMemberMonthCostDTO);
+                ChuanyunSaveDTO chuanyunSaveDTO;
+                if (chuanyunFindAllResponse.getReturnData()!=null){
+                    List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                    ChuanyunMemberMonthCostDO firstResult = result.get(0);
+                    chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE,firstResult.getObjectId(),memberMonthString);
+                }else {
+                    chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE,memberMonthString,true);
+                }
+                if(!chuanyunSaveDTO.getSuccessful()){
+                    log.warn("新增项目成员月度成本汇总失败");
+                }
+            } catch (JsonProcessingException | BigSizeException e) {
+                e.printStackTrace();
+                log.warn("########"+projectMonth+"");
+            }
+        });
+    }
+
+    /**
      * 项目工时汇总
      */
     @Scheduled(fixedDelay = 3600000L)
-    private void projecthour() {
+    private void projectHour() {
         List<ChuanyunProjectCostDO> list1 = chuanyunProjectCostDao.getProjectCost();
         list1.forEach(chuanyunProjectCostDO -> {
             //获取项目实施费用
@@ -436,9 +473,7 @@ public class ChuanyunProjectScheduledTask {
                     chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectTotalCostDO.SCHEMA_CODE,projectTotalString,true);
 
                 }
-                if(chuanyunSaveDTO.getSuccessful()){
-//                    log.info("新增项目成本汇总成功");
-                }else{
+                if(!chuanyunSaveDTO.getSuccessful()){
                     log.warn("新增项目成本汇总失败");
                 }
             } catch (JsonProcessingException | BigSizeException e) {
@@ -453,13 +488,12 @@ public class ChuanyunProjectScheduledTask {
      * 人员项目工时汇总
      */
     @Scheduled(fixedDelay = 3600000L)
-    private void monthhour() {
+    private void monthHour() {
         List<ChuanyunMemberCostDO> list = chuanyunMemberCostDao.getMemberCost();
         list.forEach(chuanyunMemberCostDO -> {
             if(StringUtils.isEmpty(chuanyunMemberCostDO.getProjectId())||StringUtils.isEmpty(chuanyunMemberCostDO.getUserId())){
                 log.info("########"+chuanyunMemberCostDO+"");
             }else{
-
                 BigDecimal standard = new BigDecimal(8);
                 ChuanyunMemberCostDO memberCostDO = new ChuanyunMemberCostDO();
                 memberCostDO.setCost(chuanyunMemberCostDO.getCost());
@@ -500,9 +534,7 @@ public class ChuanyunProjectScheduledTask {
                     }else {
                         chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberCostDO.SCHEMA_CODE, projectMemberString,true);
                     }
-                    if(chuanyunSaveDTO.getSuccessful()){
-//                        log.info("新增项目成员成本汇总成功");
-                    }else{
+                    if(!chuanyunSaveDTO.getSuccessful()){
                         log.warn("新增项目成员成本汇总失败");
                     }
                 } catch (JsonProcessingException | BigSizeException e) {
@@ -510,7 +542,6 @@ public class ChuanyunProjectScheduledTask {
                     log.warn("########"+chuanyunMemberCostDO+"");
                 }
             }
-
         });
     }
 
@@ -549,43 +580,6 @@ public class ChuanyunProjectScheduledTask {
                         chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
                     }
                     chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
-//                log.info("工时标准化新增成功");
-                    //更新氚云数据
-
-                    ChuanyunSelfWorkHourDTO chuanyunSelfWorkHourDTO = new ChuanyunSelfWorkHourDTO();
-                    if(ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())){
-                        chuanyunSelfWorkHourDTO.setProjectId(ChuanYunConstant.PRODUCTION_PROJECT_ID);
-                    }else{
-                        chuanyunSelfWorkHourDTO.setProjectId(self.getProjectId());
-                    }
-                    chuanyunSelfWorkHourDTO.setUserId(chuanyunUserCompanyDO.getUserId());
-                    chuanyunSelfWorkHourDTO.setDayLogDate(self.getDayLogDate());
-                    chuanyunSelfWorkHourDTO.setProjectType(self.getProjectType());
-                    chuanyunSelfWorkHourDTO.setStatus(self.getStatus());
-                    chuanyunSelfWorkHourDTO.setDepartmentId(chuanyunUserCompanyDO.getDepartmentId());
-                    chuanyunSelfWorkHourDTO.setStandardWorkHour(chuanyunSelfWorkHourDO.getStandardWorkHour());
-                    List<String> matchers = new ArrayList<>();
-                    matchers.add("F0000001_2,"+self.getProjectId());
-                    matchers.add("F0000002_2,"+chuanyunUserCompanyDO.getUserId());
-                    matchers.add("F0000003_2,"+self.getDayLogDate());
-                    matchers.add("F0000005_2,"+self.getProjectType());
-//                    matchers.add("F0000006_2,"+self.getStatus());
-                    var filter= Filter.instance(0,1,true,"And",matchers);
-                    var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberHourDO.SCHEMA_CODE,filter);
-                    var selfMonthString=objectMapper.writeValueAsString(chuanyunSelfWorkHourDTO);
-                    ChuanyunSaveDTO chuanyunSaveDTO;
-                    if (chuanyunFindAllResponse.getReturnData()!=null){
-                        List<ChuanyunMemberHourDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-                        ChuanyunMemberHourDO firstResult = result.get(0);
-                        chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
-                    }else {
-                        chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberHourDO.SCHEMA_CODE,selfMonthString,true);
-                    }
-                    if(chuanyunSaveDTO.getSuccessful()){
-//                    log.info("新增工时标准化成功");
-                    }else{
-                        log.warn("新增工时标准化失败");
-                    }
                 }
             }catch (Exception e){
                 log.error(e.getMessage());
@@ -596,80 +590,112 @@ public class ChuanyunProjectScheduledTask {
     }
 
     /**
-     * 员工每月、各个项目标准工时会职工
-     * @param chuanyunUserCompanyDO 员工信息
+     * 人员-项目-周度工时汇总,更新氚云数据
      */
-    private void standardMonthlyHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
-        var objectMapper=new ObjectMapper();
-        //每月每项目工时,按月-项目-用户分组统计标准工时
-        List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHour(chuanyunUserCompanyDO.getUserId());
-        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        list.forEach(projectMonth->{
-            //获取人员-月度-相同工时状态标准工时汇总
-            ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()),projectMonth.getStatus());
-
-            //获取人员月度工资信息
-            //TODO 张曦铭的薪资信息同步之后需要使用U9中的数据更新薪资信息
-            ChuanyunPayrollDO chuanyunPayrollDO = chuanyunPayrollDao.getPayroll(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()));
-            ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
-            ChuanyunMemberMonthCostDTO chuanyunMemberMonthCostDTO = new ChuanyunMemberMonthCostDTO();
-            if (chuanyunPayrollDO != null) {
-                BigDecimal cost = (projectMonth.getStandardWorkHour().divide(monthHour.getStandardWorkHour(), 2, RoundingMode.HALF_UP)).multiply(chuanyunPayrollDO.getWagesPayable());
-                chuanyunSelfCostDO.setCost(cost);
-                chuanyunMemberMonthCostDTO.setCost(cost);
-            }else{
-                chuanyunSelfCostDO.setCost(BigDecimal.ZERO);
-                chuanyunMemberMonthCostDTO.setCost(BigDecimal.ZERO);
-            }
-            chuanyunSelfCostDO.setStatus(projectMonth.getStatus());
-            chuanyunSelfCostDO.setMonthlyTotalHour(monthHour.getStandardWorkHour());
-            chuanyunSelfCostDO.setProjectId(projectMonth.getProjectId());
-            chuanyunSelfCostDO.setProjectType(projectMonth.getProjectType());
-            chuanyunSelfCostDO.setUserId(projectMonth.getUserId());
-            chuanyunSelfCostDO.setDayLogDate(projectMonth.getDayLogDate().withDayOfMonth(1));
-            chuanyunSelfCostDO.setTotalHour(projectMonth.getStandardWorkHour());
-            ChuanyunSelfCostDO oldSelfDO = chuanyunSelfCostDao.getOldSelfDO(chuanyunSelfCostDO.getUserId(),chuanyunSelfCostDO.getProjectId(),df.format(chuanyunSelfCostDO.getDayLogDate()));
-            if (oldSelfDO !=null) {
-                chuanyunSelfCostDao.delete(oldSelfDO);
+    @Scheduled(fixedDelay = 3600000L)
+    private void updateChuanyunWeekHour(){
+        var flag = true;
+        var pageSize = 20;
+        var page = 0;
+        while(flag) {
+            var pageable = PageRequest.of(page, pageSize);
+            var updateList = chuanyunWeekMemberHourDao.findAll(pageable);
+            if (page<=updateList.getTotalPages()){
+                page += 1;
+                updateList.getContent().forEach(chuanyunWeekMemberHourDO -> {
+                    //更新氚云
+                    try {
+                        BigDecimal standard = new BigDecimal(8);
+                        ChuanyunProjectMemberWeekHourDTO chuanyunProjectMemberWeekHourDTO = new ChuanyunProjectMemberWeekHourDTO();
+                        chuanyunProjectMemberWeekHourDTO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
+                        chuanyunProjectMemberWeekHourDTO.setUserId(chuanyunWeekMemberHourDO.getUserId());
+                        chuanyunProjectMemberWeekHourDTO.setWeek(chuanyunWeekMemberHourDO.getWeek());
+                        chuanyunProjectMemberWeekHourDTO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
+                        chuanyunProjectMemberWeekHourDTO.setTotalHour(chuanyunWeekMemberHourDO.getStandardWorkHour());
+                        chuanyunProjectMemberWeekHourDTO.setPersonDays(chuanyunWeekMemberHourDO.getStandardWorkHour().divide(standard,2,RoundingMode.HALF_UP));
+                        chuanyunProjectMemberWeekHourDTO.setHourStatus(chuanyunWeekMemberHourDO.getStatus());
+                        chuanyunProjectMemberWeekHourDTO.setYear(chuanyunProjectMemberWeekHourDTO.getYear());
+
+                        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("F0000003_2,"+chuanyunWeekMemberHourDO.getProjectType());
+                        matchers.add("F0000007_2,"+chuanyunWeekMemberHourDO.getStatus());
+                        var filter= Filter.instance(0,1,true,"And",matchers);
+                        var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,filter);
+                        var selfMonthString=objectMapper.writeValueAsString(chuanyunProjectMemberWeekHourDTO);
+                        ChuanyunSaveDTO chuanyunSaveDTO;
+                        if (chuanyunFindAllResponse.getReturnData()!=null) {
+                            List<ChuanyunProjectMemberWeekHourDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                            ChuanyunProjectMemberWeekHourDO firstResult = result.get(0);
+                            chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
+                        }else {
+                            chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,selfMonthString,true);
+                        }
+                        if(chuanyunSaveDTO.getSuccessful()){
+                            log.info("新增人员项目周度工时成功");
+                        }else{
+                            log.warn("新增人员项目周度工时失败");
+                        }
+                    } catch (JsonProcessingException | BigSizeException e) {
+                        e.printStackTrace();
+                    }
+                });
+            }else {
+                //流程执行完
+                break;
             }
-            chuanyunSelfCostDao.save(chuanyunSelfCostDO);
+        }
+    }
 
-            //更新氚云数据
-            chuanyunMemberMonthCostDTO.setProjectId(projectMonth.getProjectId());
-            chuanyunMemberMonthCostDTO.setProjectType(projectMonth.getProjectType());
-            chuanyunMemberMonthCostDTO.setStatus(projectMonth.getStatus());
-            chuanyunMemberMonthCostDTO.setUserId(projectMonth.getUserId());
-            chuanyunMemberMonthCostDTO.setMonthWorkHour(monthHour.getStandardWorkHour());
-            chuanyunMemberMonthCostDTO.setDayLogDate(projectMonth.getDayLogDate().withDayOfMonth(1));
-            chuanyunMemberMonthCostDTO.setWorkHour(projectMonth.getStandardWorkHour());
-            chuanyunMemberMonthCostDTO.setDepartmentId(chuanyunUserCompanyDO.getDepartmentId());
-            try {
-                List<String> matchers = new ArrayList<>();
-                matchers.add("F0000003_2,"+projectMonth.getProjectId());
-                matchers.add("F0000009_2,"+projectMonth.getStatus());
-                matchers.add("F0000002_2,"+projectMonth.getUserId());
-                matchers.add("F0000004_2,"+projectMonth.getDayLogDate().withDayOfMonth(1));
-                var filter= Filter.instance(0,1,true,"And",matchers);
-                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
-                var memberMonthString=objectMapper.writeValueAsString(chuanyunMemberMonthCostDTO);
-                ChuanyunSaveDTO chuanyunSaveDTO;
-                if (chuanyunFindAllResponse.getReturnData()!=null){
-                    List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-                    ChuanyunMemberMonthCostDO firstResult = result.get(0);
-                    chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE,firstResult.getObjectId(),memberMonthString);
-                }else {
-                    chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE,memberMonthString,true);
-                }
-                if(chuanyunSaveDTO.getSuccessful()){
-//                    log.info("新增项目成员月度成本汇总成功");
-                }else{
-                    log.warn("新增项目成员月度成本汇总失败");
-                }
-            } catch (JsonProcessingException | BigSizeException e) {
-                e.printStackTrace();
-                log.warn("########"+projectMonth+"");
+    /**
+     * 定时更新氚云数据
+     */
+    @Scheduled(fixedDelay = 3600000L)
+    private void updateChuanyunStandardWorkHour(){
+        var flag = true;
+        var pageSize = 20;
+        var page = 0;
+        while(flag) {
+            var pageable= PageRequest.of(page,pageSize);
+            var updateList=chuanyunSelfWorkHourDao.findAll(pageable);
+            if (page<=updateList.getTotalPages()){
+                page += 1;
+                updateList.forEach(chuanyunSelfWorkHourDO -> {
+                    try{
+                        ChuanyunSelfWorkHourDTO chuanyunSelfWorkHourDTO = new ChuanyunSelfWorkHourDTO();
+                        BeanUtils.copyProperties(chuanyunSelfWorkHourDO,chuanyunSelfWorkHourDTO);
+                        List<String> matchers = new ArrayList<>();
+                        matchers.add("F0000001_2,"+chuanyunSelfWorkHourDO.getProjectId());
+                        matchers.add("F0000002_2,"+chuanyunSelfWorkHourDO.getUserId());
+                        matchers.add("F0000003_2,"+chuanyunSelfWorkHourDO.getDayLogDate());
+                        matchers.add("F0000005_2,"+chuanyunSelfWorkHourDO.getProjectType());
+//                    matchers.add("F0000006_2,"+self.getStatus());
+                        var filter= Filter.instance(0,1,true,"And",matchers);
+                        var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberHourDO.SCHEMA_CODE,filter);
+                        var selfMonthString=objectMapper.writeValueAsString(chuanyunSelfWorkHourDTO);
+                        ChuanyunSaveDTO chuanyunSaveDTO;
+                        if (chuanyunFindAllResponse.getReturnData()!=null){
+                            List<ChuanyunMemberHourDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                            ChuanyunMemberHourDO firstResult = result.get(0);
+                            chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
+                        }else {
+                            chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberHourDO.SCHEMA_CODE,selfMonthString,true);
+                        }
+                        if(!chuanyunSaveDTO.getSuccessful()){
+                            log.warn("新增工时标准化失败");
+                        }
+                    }catch (Exception e){
+                        e.printStackTrace();
+                        log.warn("更新标准工时异常");
+                    }
+                });
+            }else {
+                //流程执行完
+                break;
             }
-        });
+        }
     }
 }
 
@@ -799,6 +825,9 @@ class ChuanyunProjectMemberWeekHourDTO{
     @JsonProperty("F0000005")
     private BigDecimal personDays;
 
+    @JsonProperty("F0000008")
+    private String year;
+
     @JsonProperty("F0000006")
     private String week;