Browse Source

Merge branch '1.0' of codeup.aliyun.com:5ec7ea24405cdab50f3fd8f0/galaxis/manatee into 1.0

 Conflicts:
	src/main/java/com/galaxis/manatee/task/ChuanyunProjectScheduledTask.java
WoNiu 4 years ago
parent
commit
a59f2ad845

+ 10 - 0
src/main/java/com/galaxis/manatee/constant/ChuanYunConstant.java

@@ -15,6 +15,16 @@ import java.util.Map;
 public class ChuanYunConstant {
 
     /**
+     * 审核结束
+     */
+    public static final String FINISH="1";
+
+    /**
+     * 审核流程中
+     */
+    public static final String IN_PROCESS="2";
+
+    /**
      * 生产项目项目类型
      */
     public static final String PRODUCTION_PROJECT="生产项目";

+ 35 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunDayWorkAbcDao.java

@@ -0,0 +1,35 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunDayWorkAbcDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserCompanyDO;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunDayWorkAbcDTO;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by IntelliJ IDEA.
+ * author: xuj
+ * Date: 2020/8/7
+ * description: 项目工时ABC分析
+ */
+@Repository
+public interface ChuanyunDayWorkAbcDao extends GalaxisRepository<ChuanyunDayWorkAbcDO,String> {
+
+    @Query(value = "select a.project_id as project_id,b.project_code,b.project_name,sum(a.standard_work_hour) as total_time from chuanyun_self_work_hour a " +
+       "left join chuanyun_project b on a.project_id = b.object_id where  b.project_code is not null and b.project_name is not null group by a.project_id ",nativeQuery = true)
+    List<Map> queryDayWorkAbc();
+
+    @Query(value = " SELECT c.project_id,sum( c.standard_work_hour ) AS total_time,'' as object_id,'' as project_code,'' as project_name,'' as plan_time,'' as sell_time,'' as other_time from " +
+            "( SELECT a.project_id,a.standard_work_hour, b.user_type FROM chuanyun_self_work_hour a LEFT JOIN chuanyun_user_company b ON a.user_id = b.user_id ) c "+
+            "WHERE c.project_id = ?1 and c.user_type = ?2 group by c.project_id"
+            ,nativeQuery = true)
+    ChuanyunDayWorkAbcDO queryDayWorkAbcTotalTime(@Param("projctId")String projectId, @Param("userType")int userType);
+
+    ChuanyunDayWorkAbcDO findByProjectId(String projectId);
+
+}

+ 19 - 15
src/main/java/com/galaxis/manatee/dao/ChuanyunSelfCostDao.java

@@ -14,8 +14,16 @@ import java.util.List;
 public interface ChuanyunSelfCostDao extends GalaxisRepository<ChuanyunSelfCostDO,String> {
 
     /**
+     * 根据状态查询月工时统计记录
+     * @param status    状态
+     * @param userId    用户Id
+     * @return  月工时统计列表
+     */
+    List<ChuanyunSelfCostDO> findAllByStatusAndUserId(String status,String userId);
+
+    /**
      * 获取项目人员总工时
-     * @return
+     * @return  月工时统计列表
      */
     @Query(value="SELECT chuanyun_self_cost.object_id,SUM(chuanyun_self_cost.total_hour) AS total_hour,SUM(chuanyun_self_cost.cost) AS cost,chuanyun_self_cost.project_id,chuanyun_self_cost.user_id"+
             " FROM chuanyun_self_cost GROUP BY chuanyun_self_cost.project_id,chuanyun_self_cost.user_id",nativeQuery = true)
@@ -23,19 +31,15 @@ public interface ChuanyunSelfCostDao extends GalaxisRepository<ChuanyunSelfCostD
 
     /**
      * 根据用户ID和项目ID,日期获取工时成本数据
-     * @param userId
-     * @param projectId
-     * @param dayLogDate
-     * @return
+     * @param userId    用户Id
+     * @param projectId 项目Id
+     * @param status    工时状态
+     * @param dayLogDate    日期
+     * @return  月工时统计列表
      */
-    @Query(value="SELECT * FROM chuanyun_self_cost WHERE user_id = ?1 AND project_id = ?2 AND DATE_FORMAT(chuanyun_self_cost.day_log_date,'%Y-%m')=DATE_FORMAT(?3,'%Y-%m')",nativeQuery = true)
-    ChuanyunSelfCostDO getOldSelfDO(@Param("userId")String userId,@Param("projectId")String projectId,@Param("dayLogDate")String dayLogDate);
-
-    /**
-     * 根据流程状态删除数据
-     * @param status
-     */
-    @Transactional
-    void deleteAllByStatus(String status);
-
+    @Query(value="SELECT * FROM chuanyun_self_cost " +
+            "WHERE user_id = ?1 " +
+            "AND project_id = ?2 " +
+            "AND DATE_FORMAT(chuanyun_self_cost.day_log_date,'%Y-%m')=DATE_FORMAT(?3,'%Y-%m') AND status=?4",nativeQuery = true)
+    ChuanyunSelfCostDO getOldSelfDO(@Param("userId")String userId,@Param("projectId")String projectId,@Param("dayLogDate")String dayLogDate,String status);
 }

+ 15 - 4
src/main/java/com/galaxis/manatee/dao/ChuanyunSelfWorkHourDao.java

@@ -19,14 +19,25 @@ public interface ChuanyunSelfWorkHourDao extends GalaxisRepository<ChuanyunSelfW
 
     /**
      * 根据项目id,用户id,日期获取工时数据
-     * @param userId
-     * @param projectId
-     * @param dayLogDate
-     * @return
+     * @param userId    用户Id
+     * @param projectId 项目Id
+     * @param dayLogDate    日志日期
+     * @return  日工时记录
      */
     ChuanyunSelfWorkHourDO findByUserIdAndAndProjectIdAndAndDayLogDate(String userId, String projectId, LocalDateTime dayLogDate);
 
     /**
+     * 根据用户Id,项目Id,起止时间获取工时列表
+     * @param userId    用户Id
+     * @param projectId 项目Id
+     * @param status    状态
+     * @param start     开始时间
+     * @param end       结束时间
+     * @return  日工时列表
+     */
+    List<ChuanyunSelfWorkHourDO> findAllByUserIdAndProjectIdAndStatusAndDayLogDateBetween(String userId,String projectId,String status,LocalDateTime start,LocalDateTime end);
+
+    /**
      * 获取人员-项目-月度标准总工时
      * @param userId    用户ID
      * @return  汇总数据

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

@@ -30,6 +30,7 @@ public interface ChuanyunWorkHourDao extends GalaxisRepository<ChuanyunWorkHourD
             "FROM chuanyun_day_log "+
             "LEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id " +
             " WHERE chuanyun_log.user_id = ? " +
+            "AND chuanyun_log.log_date>='2020-08-01'" +
             " GROUP BY chuanyun_day_log.project_id," +
             "chuanyun_log.user_id," +
             "chuanyun_log.status," +

+ 73 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunDayWorkAbcDO.java

@@ -0,0 +1,73 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.math.BigDecimal;
+
+/**
+ * Created by IntelliJ IDEA.
+ * author: xuj
+ * Date: 2020/8/7
+ * Description: 项目工时分析
+ */
+@Slf4j
+@Data
+@Entity(name = "CHUANYUN_DAY_WORK_ABC")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunDayWorkAbcDO {
+
+    @Id
+    @JsonProperty(value = "ObjectId")
+    private String objectId;
+
+    /**
+     * 项目id
+     */
+    @JsonProperty("project_id")
+    private String projectId;
+
+    /**
+     * 项目编号
+     */
+    @JsonProperty("project_code")
+    private String projectCode;
+
+    /**
+     * 项目名称
+     */
+    @JsonProperty("project_name")
+    private String projectName;
+
+    /**
+     * 总工时
+     */
+    @JsonProperty("total_time")
+    private BigDecimal totalTime;
+
+    /**
+     * 规划人员本项目工时
+     */
+    @JsonProperty("plan_time")
+    private BigDecimal planTime;
+
+    /**
+     * 销售人员本项目工时
+     */
+    @JsonProperty("sell_time")
+    private BigDecimal sellTime;
+
+    /**
+     * 其他支持人员本项目工时
+     */
+    @JsonProperty("other_time")
+    private BigDecimal otherTime;
+
+}

+ 6 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunUserCompanyDO.java

@@ -67,6 +67,12 @@ public class ChuanyunUserCompanyDO extends BasicDO{
     private String department;
 
     /**
+     * 人员类型:规划,销售
+     */
+    @JsonProperty("F0000035")
+    private String userType;
+
+    /**
      * 人员所属部门ID
      */
     private String departmentId;

+ 36 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunDayWorkAbcDTO.java

@@ -0,0 +1,36 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ * author: xuj
+ * Date: 2020/8/7
+ */
+@Data
+public class ChuanyunDayWorkAbcDTO {
+
+    @JsonProperty("project_id")
+    private String projectId;
+
+//    @JsonProperty("project_code")
+//    private String projectCode;
+//
+//    @JsonProperty("project_name")
+//    private String projectName;
+
+    @JsonProperty("total_time")
+    private String totalTime;
+
+    @JsonProperty("paln_time")
+    private String planTime;
+
+    @JsonProperty("sell_time")
+    private String sellTime;
+
+    @JsonProperty("other_time")
+    private String otherTime;
+
+
+}

+ 3 - 3
src/main/java/com/galaxis/manatee/service/DingTalkScheduledTask.java

@@ -64,7 +64,7 @@ public class DingTalkScheduledTask {
     /**
      * 每小时更新
      */
-    @Scheduled(fixedDelay = 3600000L)
+//    @Scheduled(fixedDelay = 3600000L)
     private void updateBusinessTripProcessInstance(){
     }
 
@@ -72,7 +72,7 @@ public class DingTalkScheduledTask {
      * 每个小时定期更新出差申请数据
      * 出差申请信息暂时不进行更新
      */
-    @Scheduled(fixedDelay = 3600000L,initialDelay = 10000L)
+//    @Scheduled(fixedDelay = 3600000L,initialDelay = 10000L)
     void updateBusinessTripProcessInstanceIdList() throws ApiException {
         updateProcessInstanceIdList(DingTalkConstant.PROCESS_CODE_BUSINESS_TRIP);
     }
@@ -83,7 +83,7 @@ public class DingTalkScheduledTask {
      * 每小时根据出差申请Id跟新出差申请信息。
      * 出差申请信息暂时不进行更新
      */
-    @Scheduled(fixedDelay = 3600000L,initialDelay = 10000L)
+//    @Scheduled(fixedDelay = 3600000L,initialDelay = 10000L)
     void updateProcessInstanceList() throws ApiException {
          updateChuanyunAskForLeave(DingTalkConstant.PROCESS_CODE_ASKFORLEAVE);
     }

+ 79 - 2
src/main/java/com/galaxis/manatee/task/ChuanyunHumanResourceScheduledTask.java

@@ -60,7 +60,7 @@ public class ChuanyunHumanResourceScheduledTask {
     /**
      * 每天3点更新日志记录
      */
-    @Scheduled(cron = "0 0 3 * * *")
+    @Scheduled(cron = "0 0 1 * * *")
     private void updateLog() {
         var objectMapper = new ObjectMapper();
         var start = 0;
@@ -70,6 +70,7 @@ public class ChuanyunHumanResourceScheduledTask {
         //由于需要统计流程中的日志,在日志数据同步时将状态为2的数据一并统计
 //        matchersString.add("Status_2,1");
         matchersString.add("Status_6,[1;2]");
+        matchersString.add("logDate_4,2020-08-01 00:00:00");
         while (flag) {
             Long startTime= Instant.now().getEpochSecond();
             try {
@@ -133,7 +134,7 @@ public class ChuanyunHumanResourceScheduledTask {
             }
             log.info(Instant.now().getEpochSecond()-startTime+"日志100条保存时间");
         }
-        log.info("日志信息保存" + totalCount);
+        log.info("历史日志信息保存" + totalCount);
     }
 
     /**
@@ -240,4 +241,80 @@ public class ChuanyunHumanResourceScheduledTask {
         }
         log.info("凯乐士薪酬项同步"+totalCount);
     }
+
+    @Scheduled(fixedDelay = 3600000L)
+    private void updateRecentLog() {
+        var objectMapper = new ObjectMapper();
+        var start = 0;
+        var totalCount = 0L;
+        var flag = true;
+        List<String> matchersString=new ArrayList<>();
+        //由于需要统计流程中的日志,在日志数据同步时将状态为2的数据一并统计
+        matchersString.add("Status_6,[1;2]");
+        matchersString.add("logDate_1,2020-08-01 00:00:00");
+        while (flag) {
+            Long startTime= Instant.now().getEpochSecond();
+            try {
+                //从氚云查询数据
+                var filter= Filter.instance(start,start+pageSize,true,Filter.AND,matchersString);
+                var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunLogDO.SCHEMA_CODE, filter);
+                if (chuanyunFindAllResponse.getReturnData() == null) {
+                    flag = false;
+                    continue;
+                }
+                if (chuanyunFindAllResponse.getReturnData().getTotalCount() >= start + pageSize) {
+                    start += pageSize;
+                } else {
+                    flag = false;
+                }
+                //转化为POJO
+                List<ChuanyunLogDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                });
+                result.forEach(chuanyunLogDO -> {
+                    if(chuanyunLogDO.getDayLogList()==null||chuanyunLogDO.getDayLogList().size()==0){
+                        chuanyunLogDO.setDayLogList(new ArrayList<>());
+                        log.warn(chuanyunLogDO+"");
+                        log.warn("异常数据");
+                    }else{
+                        //如果有重复就删除
+                        chuanyunLogDao.findById(chuanyunLogDO.getObjectId()).ifPresent(toDelete -> {
+//                            log.info("删除" + toDelete.getObjectId());
+                            chuanyunLogDao.delete(toDelete);
+                        });
+                        //根据projectId获取code,如果是生产项目,则不用处理
+                        //针对前期测试数据,可能出现日志为空的情况,跳过不处理
+                        chuanyunLogDO.getDayLogList().forEach(chuanyunDayLog -> {
+                            try{
+                                if(!"生产项目".equals(chuanyunDayLog.getProjectType())&& StringUtils.isEmpty(chuanyunDayLog.getProjectId())){
+                                    log.info(chuanyunLogDO+"");
+                                }else if(!"生产项目".equals(chuanyunDayLog.getProjectType())){
+                                    ChuanyunGroupProjectDO chuanyunGroupProjectDO=chuanyunGroupProjectDao.findById(chuanyunDayLog.getProjectId()).orElseThrow();
+                                    chuanyunDayLog.setProjectCode(chuanyunGroupProjectDO.getProjectCode());
+                                }
+                            }catch (Exception e){
+                                e.printStackTrace();
+                                log.warn(chuanyunDayLog+"");
+                            }
+                        });
+                        //判断所属部门是否正确
+                        //目前已经通过excel方式更新完成这个方法暂时不需要使用
+//                        checkDepartment(chuanyunLogDO);
+                    }
+                    //处理项目userId
+                    if(chuanyunLogDO.getUserObject()!=null){
+                        chuanyunLogDO.setUserId(chuanyunLogDO.getUserObject().getObjectId());
+                    }
+                });
+                //获取项目总数
+                totalCount = chuanyunFindAllResponse.getReturnData().getTotalCount();
+                //保存
+                chuanyunLogDao.saveAll(result);
+            } catch (Exception e) {
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+            log.info(Instant.now().getEpochSecond()-startTime+"日志100条保存时间");
+        }
+        log.info("最近的日志日志信息保存" + totalCount);
+    }
 }

File diff suppressed because it is too large
+ 6 - 527
src/main/java/com/galaxis/manatee/task/ChuanyunProjectScheduledTask.java


+ 78 - 0
src/main/java/com/galaxis/manatee/task/WorkHourAnalysis.java

@@ -0,0 +1,78 @@
+package com.galaxis.manatee.task;
+
+import com.galaxis.manatee.dao.ChuanyunDayWorkAbcDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunDayWorkAbcDO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.time.Instant;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/8/9 11:01 下午
+ */
+@Service
+@Slf4j
+public class WorkHourAnalysis {
+
+    private final ChuanyunDayWorkAbcDao chuanyunDayWorkAbcDao;
+
+    public WorkHourAnalysis(ChuanyunDayWorkAbcDao chuanyunDayWorkAbcDao) {
+        this.chuanyunDayWorkAbcDao = chuanyunDayWorkAbcDao;
+    }
+
+    //    @Scheduled(fixedDelay = 3600000L)
+    private void standardDayWorkAbcHour() {
+        standardDayAbcHour();
+    }
+
+    /**
+     * 员工工时abc分析
+     */
+    private void standardDayAbcHour() {
+        log.info("开始更新工时abc分析数据");
+        long startTime= Instant.now().getEpochSecond();
+        List<Map> dayWorkAbcList = chuanyunDayWorkAbcDao.queryDayWorkAbc();
+        dayWorkAbcList.forEach(dayWork -> {
+            try {
+                String projectId = (String)dayWork.get("project_id");
+                String projecrtName = (String)dayWork.get("project_name");
+                String projectCode = (String)dayWork.get("project_code");
+                BigDecimal totalTime = (BigDecimal)dayWork.get("total_time");
+                ChuanyunDayWorkAbcDO dayWorkAbcDO = new ChuanyunDayWorkAbcDO();
+                ChuanyunDayWorkAbcDO planDayWorkAbc = chuanyunDayWorkAbcDao.queryDayWorkAbcTotalTime(projectId, 0);
+                if(planDayWorkAbc != null) {
+                    dayWorkAbcDO.setPlanTime(planDayWorkAbc.getTotalTime());
+                }
+                ChuanyunDayWorkAbcDO sellDayWorkAbc = chuanyunDayWorkAbcDao.queryDayWorkAbcTotalTime(projectId, 1);
+                if(sellDayWorkAbc != null) {
+                    dayWorkAbcDO.setSellTime(sellDayWorkAbc.getTotalTime());
+                }
+                ChuanyunDayWorkAbcDO otherWorkAbc = chuanyunDayWorkAbcDao.queryDayWorkAbcTotalTime(projectId, 2);
+                if(otherWorkAbc != null) {
+                    dayWorkAbcDO.setOtherTime(otherWorkAbc.getTotalTime());
+                }
+                ChuanyunDayWorkAbcDO chuanyunDayWorkAbcDO = chuanyunDayWorkAbcDao.findByProjectId(projectId);
+                if (chuanyunDayWorkAbcDO != null) {
+                    chuanyunDayWorkAbcDao.delete(chuanyunDayWorkAbcDO);
+                }
+                dayWorkAbcDO.setObjectId(UUID.randomUUID().toString());
+                dayWorkAbcDO.setProjectId(projectId);
+                dayWorkAbcDO.setProjectCode(projectCode);
+                dayWorkAbcDO.setProjectName(projecrtName);
+                dayWorkAbcDO.setTotalTime(totalTime);
+                chuanyunDayWorkAbcDao.save(dayWorkAbcDO);
+            }catch(Exception e) {
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+        });
+
+        log.info("周工时abc分析耗时"+(Instant.now().getEpochSecond()-startTime)+"秒");
+    }
+}

+ 601 - 0
src/main/java/com/galaxis/manatee/task/WorkHourStatistics.java

@@ -0,0 +1,601 @@
+package com.galaxis.manatee.task;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.galaxis.manatee.constant.ChuanYunConstant;
+import com.galaxis.manatee.dao.*;
+import com.galaxis.manatee.entity.chuanyun.data.object.*;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunFindAllBizDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.Filter;
+import com.galaxis.manatee.exception.BigSizeException;
+import com.galaxis.manatee.manager.ChuanYunManager;
+import 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.PageRequest;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/8/9 11:02 下午
+ */
+@Service
+@Slf4j
+public class WorkHourStatistics {
+    private final ObjectMapper objectMapper=new ObjectMapper();
+    private final ChuanYunManager chuanYunManager;
+    private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
+    private final ChuanyunWorkHourDao chuanyunWorkHourDao;
+    private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
+    private final ChuanyunSelfCostDao chuanyunSelfCostDao;
+    private final ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao;
+
+    public WorkHourStatistics(ChuanYunManager chuanYunManager, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao, ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao) {
+        this.chuanYunManager = chuanYunManager;
+        this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
+        this.chuanyunWorkHourDao = chuanyunWorkHourDao;
+        this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
+        this.chuanyunSelfCostDao = chuanyunSelfCostDao;
+        this.chuanyunWeekMemberHourDao = chuanyunWeekMemberHourDao;
+    }
+
+    /**
+     * 人力成本
+     */
+    @Scheduled(fixedDelay = 3600000L)
+    private void standardWorkHour() {
+        var flag = true;
+        var pageSize = 20;
+        var page = 0;
+        long startTime=Instant.now().getEpochSecond();
+        while(flag) {
+            var pageable= PageRequest.of(page,pageSize);
+            var chuanyunUserCompanyList = chuanyunUserCompanyDao.findAllByStatus(1,pageable);
+            if (page<=chuanyunUserCompanyList.getTotalPages()){
+                page += 1;
+                //逐个将员工每天工时进行统计汇总
+                List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
+                userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
+                    long start= Instant.now().getEpochSecond();
+                    //工时标准化
+                    standardHour(chuanyunUserCompanyDO);
+                    log.info("每日工时标准化"+chuanyunUserCompanyDO.getUserName()+(Instant.now().getEpochSecond()-start)+"秒");
+                });
+            }else {
+                break;
+            }
+        }
+        log.info("每日工时标准化"+(Instant.now().getEpochSecond()-startTime)+"秒");
+        updateChuanyunStandardWorkHour();
+    }
+
+    /**
+     * 员工单日、各个项目工时标准化,并保存
+     * @param chuanyunUserCompanyDO 员工信息
+     */
+    private void standardHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
+        BigDecimal standard = new BigDecimal(8);
+        //每人每个项目每天工时
+        List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
+        selfList.forEach(self->{
+            try{
+                ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
+                chuanyunSelfWorkHourDO.setStatus(self.getStatus());
+                chuanyunSelfWorkHourDO.setUserId(chuanyunUserCompanyDO.getUserId());
+                chuanyunSelfWorkHourDO.setProjectType(self.getProjectType());
+                if(ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())){
+                    chuanyunSelfWorkHourDO.setProjectId(ChuanYunConstant.PRODUCTION_PROJECT_ID);
+                }else{
+                    chuanyunSelfWorkHourDO.setProjectId(self.getProjectId());
+                }
+                chuanyunSelfWorkHourDO.setDayLogDate(self.getDayLogDate());
+                //每人每天工时
+                ChuanyunWorkHourDO chuanyunWorkHourDO = chuanyunWorkHourDao.getDayWorkHour(chuanyunUserCompanyDO.getUserId(),self.getDayLogDate());
+                //工时标准化
+                if (chuanyunWorkHourDO != null) {
+                    if (chuanyunWorkHourDO.getHoursWorked().compareTo(standard)<0) {
+                        chuanyunSelfWorkHourDO.setStandardWorkHour(self.getHoursWorked());
+                    }else {
+                        BigDecimal personDays = (self.getHoursWorked().divide(chuanyunWorkHourDO.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
+                        chuanyunSelfWorkHourDO.setStandardWorkHour(personDays);
+                    }
+                    ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO1 = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDate(chuanyunUserCompanyDO.getUserId(),ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())?ChuanYunConstant.PRODUCTION_PROJECT_ID:self.getProjectId(),self.getDayLogDate());
+                    if (chuanyunSelfWorkHourDO1!=null) {
+                        chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
+                    }
+                    chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
+                }
+            }catch (Exception e){
+                log.error(e.getMessage());
+                log.error(""+self);
+                e.printStackTrace();
+            }
+        });
+    }
+
+    /**
+     * 人员-项目-周度工时汇总
+     */
+    @Scheduled(fixedDelay = 3600000L)
+    private void standardWeeklyWorkHour() {
+        long start=Instant.now().getEpochSecond();
+        //删除数据库中审批中的数据,防止重复记录工时
+//        chuanyunWeekMemberHourDao.deleteAllByStatus("2");
+        //更新数据库
+        log.info("开始周工时标准化");
+        List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHour();
+        list.forEach(chuanyunWeekMemberHourDO -> {
+            if (chuanyunWeekMemberHourDO!=null){
+                ChuanyunWeekMemberHourDO weekMemberHourDO = new ChuanyunWeekMemberHourDO();
+                weekMemberHourDO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
+                weekMemberHourDO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
+                weekMemberHourDO.setStandardWorkHour(chuanyunWeekMemberHourDO.getStandardWorkHour());
+                weekMemberHourDO.setStatus(chuanyunWeekMemberHourDO.getStatus());
+                weekMemberHourDO.setUserId(chuanyunWeekMemberHourDO.getUserId());
+                weekMemberHourDO.setYear(chuanyunWeekMemberHourDO.getYear());
+                weekMemberHourDO.setWeek(chuanyunWeekMemberHourDO.getWeek());
+                ChuanyunWeekMemberHourDO oldWeekHour = chuanyunWeekMemberHourDao.findByProjectIdAndUserIdAndWeekAndStatusAndProjectTypeAndYear(chuanyunWeekMemberHourDO.getProjectId(),chuanyunWeekMemberHourDO.getUserId(),chuanyunWeekMemberHourDO.getWeek(),chuanyunWeekMemberHourDO.getStatus(),chuanyunWeekMemberHourDO.getProjectType(),chuanyunWeekMemberHourDO.getYear());
+                if (oldWeekHour != null) {
+                    chuanyunWeekMemberHourDao.delete(oldWeekHour);
+                }
+                chuanyunWeekMemberHourDao.save(weekMemberHourDO);
+            }
+        });
+        log.info("周工时标准化"+(Instant.now().getEpochSecond()-start)+"秒");
+        updateChuanyunWeekHour();
+    }
+
+    /**
+     * 单月工时汇总
+     */
+    @Scheduled(fixedDelay = 3600000L)
+    private void standardMonthlyWorkHour() {
+        var flag = true;
+        var pageSize = 20;
+        var page = 0;
+        while(flag) {
+            var pageable= PageRequest.of(page,pageSize);
+            var chuanyunUserCompanyList = chuanyunUserCompanyDao.findAllByStatus(1,pageable);
+            if (page<=chuanyunUserCompanyList.getTotalPages()){
+                page += 1;
+                List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
+                //单项目单人单月成本
+                userCompanyDOList.forEach(this::standardMonthlyHour);
+            }else {
+                flag = false;
+            }
+        }
+        updateChuanyunMonthHour();
+    }
+
+    /**
+     * 员工每月、各个项目标准工时会职工
+     * @param chuanyunUserCompanyDO 员工信息
+     */
+    private void standardMonthlyHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
+        //删除上一次状态为审核中,但本次已经审核通过的数据
+        chuanyunSelfCostDao.findAllByStatusAndUserId(ChuanYunConstant.IN_PROCESS,chuanyunUserCompanyDO.getUserId()).forEach(chuanyunSelfCostDO -> {
+            List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList=chuanyunSelfWorkHourDao.findAllByUserIdAndProjectIdAndStatusAndDayLogDateBetween(
+                    chuanyunSelfCostDO.getUserId(),
+                    chuanyunSelfCostDO.getProjectId(),
+                    ChuanYunConstant.IN_PROCESS,
+                    chuanyunSelfCostDO.getDayLogDate(),
+                    chuanyunSelfCostDO.getDayLogDate().plusMonths(1L));
+            //如果没有仍在审批中的每日工时,则将该月、该项目的审核中的月工时统计删除,manatee数据库与氚云
+            if(chuanyunSelfWorkHourList.size()==0){
+                //删除manatee中的在审核工时
+                chuanyunSelfCostDao.delete(chuanyunSelfCostDO);
+                //删除氚云中的在审核工时
+                List<String> matchers = new ArrayList<>();
+                matchers.add("F0000003_2,"+chuanyunSelfCostDO.getProjectId());
+                matchers.add("F0000009_2,"+ChuanYunConstant.IN_PROCESS);
+                matchers.add("F0000002_2,"+chuanyunSelfCostDO.getUserId());
+                matchers.add("F0000004_2,"+chuanyunSelfCostDO.getDayLogDate());
+                var filter= Filter.instance(0,1,true,"And",matchers);
+                try {
+                    ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
+                    if (chuanyunFindAllResponse.getReturnData()!=null){
+                        List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                        result.forEach(chuanyunMemberMonthCostDO -> {
+                            try{
+                                chuanYunManager.delete(ChuanyunMemberMonthCostDO.SCHEMA_CODE,chuanyunMemberMonthCostDO.getObjectId());
+                            }catch (Exception e){
+                                log.error("逐条删除失败"+e.getMessage());
+                            }
+                        });
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    log.error("删除已审核通过的月度数据汇总失败");
+                }
+            }
+        });
+        //每月每项目工时,按月-项目-用户分组统计标准工时
+        List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.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());
+
+            ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
+            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.setDepartmentId(chuanyunUserCompanyDO.getDepartmentId());
+            ChuanyunSelfCostDO oldSelfDO = chuanyunSelfCostDao.getOldSelfDO(chuanyunSelfCostDO.getUserId(),
+                    chuanyunSelfCostDO.getProjectId(),
+                    df.format(chuanyunSelfCostDO.getDayLogDate()),
+                    projectMonth.getStatus());
+            if (oldSelfDO !=null) {
+                chuanyunSelfCostDao.delete(oldSelfDO);
+            }
+            chuanyunSelfCostDao.save(chuanyunSelfCostDO);
+        });
+    }
+
+    /**
+     * 定时更新氚云数据
+     */
+    private void updateChuanyunStandardWorkHour(){
+        var flag = true;
+        var pageSize = 20;
+        var page = 0;
+        log.info("开始更新日工时汇总");
+        long startTime=Instant.now().getEpochSecond();
+        while(flag) {
+            var pageable= PageRequest.of(page,pageSize);
+            var updateList=chuanyunSelfWorkHourDao.findAll(pageable);
+            if (page<=updateList.getTotalPages()){
+                page += 1;
+                updateList.forEach(chuanyunSelfWorkHourDO -> {
+                    try{
+                        String departmentId=chuanyunUserCompanyDao.findAllByUserId(chuanyunSelfWorkHourDO.getUserId()).get(0).getDepartmentId();
+                        ChuanyunSelfWorkHourDTO chuanyunSelfWorkHourDTO = new ChuanyunSelfWorkHourDTO();
+                        BeanUtils.copyProperties(chuanyunSelfWorkHourDO,chuanyunSelfWorkHourDTO);
+                        chuanyunSelfWorkHourDTO.setDepartmentId(departmentId);
+                        List<String> matchers = new ArrayList<>();
+                        matchers.add("F0000001_2,"+chuanyunSelfWorkHourDO.getProjectId());
+                        matchers.add("F0000002_2,"+chuanyunSelfWorkHourDO.getUserId());
+                        matchers.add("F0000003_2,"+chuanyunSelfWorkHourDO.getDayLogDate());
+                        matchers.add("F0000005_2,"+chuanyunSelfWorkHourDO.getProjectType());
+//                    matchers.add("F0000006_2,"+self.getStatus());
+                        var filter= Filter.instance(0,1,true,"And",matchers);
+                        var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberHourDO.SCHEMA_CODE,filter);
+                        var selfMonthString=objectMapper.writeValueAsString(chuanyunSelfWorkHourDTO);
+                        ChuanyunSaveDTO chuanyunSaveDTO;
+                        if (chuanyunFindAllResponse.getReturnData()!=null){
+                            List<ChuanyunMemberHourDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                            ChuanyunMemberHourDO firstResult = result.get(0);
+                            chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
+                        }else {
+                            chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberHourDO.SCHEMA_CODE,selfMonthString,true);
+                        }
+                        if(!chuanyunSaveDTO.getSuccessful()){
+                            log.warn("新增工时标准化失败");
+                        }
+                    }catch (Exception e){
+                        e.printStackTrace();
+                        log.warn("更新标准工时异常");
+                    }
+                });
+            }else {
+                //流程执行完
+                break;
+            }
+        }
+        log.info("日工时更新花费"+(Instant.now().getEpochSecond()-startTime));
+    }
+
+    /**
+     * 人员-项目-周度工时汇总,更新氚云数据
+     */
+    private void updateChuanyunWeekHour(){
+        var flag = true;
+        var pageSize = 20;
+        var page = 0;
+        log.info("开始更新周工时汇总");
+//        deleteExamineStatus(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,"F0000007");
+        long startTime=Instant.now().getEpochSecond();
+        while(flag) {
+            var pageable = PageRequest.of(page, pageSize);
+            var updateList = chuanyunWeekMemberHourDao.findAll(pageable);
+            if (page<=updateList.getTotalPages()){
+                page += 1;
+                updateList.getContent().forEach(chuanyunWeekMemberHourDO -> {
+                    //更新氚云
+                    try {
+                        String departmentId=chuanyunUserCompanyDao.findAllByUserId(chuanyunWeekMemberHourDO.getUserId()).get(0).getDepartmentId();
+                        BigDecimal standard = new BigDecimal(8);
+                        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(chuanyunWeekMemberHourDO.getYear());
+                        chuanyunProjectMemberWeekHourDTO.setDepartmentId(departmentId);
+
+                        List<String> matchers = new ArrayList<>();
+                        matchers.add("F0000001_2,"+chuanyunWeekMemberHourDO.getProjectId());
+                        matchers.add("F0000002_2,"+chuanyunWeekMemberHourDO.getUserId());
+                        matchers.add("F0000006_2,"+chuanyunWeekMemberHourDO.getWeek());
+                        matchers.add("F0000008_2,"+chuanyunWeekMemberHourDO.getYear());
+                        matchers.add("F0000003_2,"+chuanyunWeekMemberHourDO.getProjectType());
+                        matchers.add("F0000007_2,"+chuanyunWeekMemberHourDO.getStatus());
+                        var filter= Filter.instance(0,1,true,"And",matchers);
+                        var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,filter);
+                        var selfMonthString=objectMapper.writeValueAsString(chuanyunProjectMemberWeekHourDTO);
+                        ChuanyunSaveDTO chuanyunSaveDTO;
+                        if (chuanyunFindAllResponse.getReturnData()!=null) {
+                            List<ChuanyunProjectMemberWeekHourDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                            ChuanyunProjectMemberWeekHourDO firstResult = result.get(0);
+                            chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
+                        }else {
+                            chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,selfMonthString,true);
+                        }
+                        if(!chuanyunSaveDTO.getSuccessful()){
+                            log.warn("新增人员项目周度工时失败");
+                        }
+                    } catch (JsonProcessingException | BigSizeException e) {
+                        e.printStackTrace();
+                    }
+                });
+            }else {
+                //流程执行完
+                break;
+            }
+        }
+        log.info("周工时更新花费"+(Instant.now().getEpochSecond()-startTime));
+    }
+
+    /**
+     * 人员-项目-月度工时汇总,更新氚云数据
+     */
+    private void updateChuanyunMonthHour(){
+        var flag = true;
+        var pageSize = 20;
+        var page = 0;
+        log.info("开始更新月工时汇总");
+        //删除氚云表单审核中数据
+//        deleteExamineStatus(ChuanyunMemberMonthCostDO.SCHEMA_CODE,"F0000009");
+        long startTime=Instant.now().getEpochSecond();
+        while(flag) {
+            var pageable = PageRequest.of(page, pageSize);
+            var updateList = chuanyunSelfCostDao.findAll(pageable);
+            if (page<=updateList.getTotalPages()){
+                page += 1;
+                updateList.getContent().forEach(chuanyunSelfCostDO -> {
+                    ChuanyunMemberMonthCostDTO chuanyunMemberMonthCostDTO = new ChuanyunMemberMonthCostDTO();
+
+                    //更新氚云数据
+                    chuanyunMemberMonthCostDTO.setCost(chuanyunSelfCostDO.getCost());
+                    chuanyunMemberMonthCostDTO.setProjectId(chuanyunSelfCostDO.getProjectId());
+                    chuanyunMemberMonthCostDTO.setProjectType(chuanyunSelfCostDO.getProjectType());
+                    chuanyunMemberMonthCostDTO.setStatus(chuanyunSelfCostDO.getStatus());
+                    chuanyunMemberMonthCostDTO.setUserId(chuanyunSelfCostDO.getUserId());
+                    chuanyunMemberMonthCostDTO.setMonthWorkHour(chuanyunSelfCostDO.getMonthlyTotalHour());
+                    chuanyunMemberMonthCostDTO.setDayLogDate(chuanyunSelfCostDO.getDayLogDate());
+                    chuanyunMemberMonthCostDTO.setWorkHour(chuanyunSelfCostDO.getTotalHour());
+                    chuanyunMemberMonthCostDTO.setDepartmentId(chuanyunSelfCostDO.getDepartmentId());
+                    try {
+                        List<String> matchers = new ArrayList<>();
+                        matchers.add("F0000003_2,"+chuanyunSelfCostDO.getProjectId());
+                        matchers.add("F0000009_2,"+chuanyunSelfCostDO.getStatus());
+                        matchers.add("F0000002_2,"+chuanyunSelfCostDO.getUserId());
+                        matchers.add("F0000004_2,"+chuanyunSelfCostDO.getDayLogDate());
+                        var filter= Filter.instance(0,1,true,"And",matchers);
+                        var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
+                        var memberMonthString=objectMapper.writeValueAsString(chuanyunMemberMonthCostDTO);
+                        ChuanyunSaveDTO chuanyunSaveDTO;
+                        if (chuanyunFindAllResponse.getReturnData()!=null){
+                            List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                            ChuanyunMemberMonthCostDO firstResult = result.get(0);
+                            chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE,firstResult.getObjectId(),memberMonthString);
+                        }else {
+                            chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE,memberMonthString,true);
+                        }
+                        if(!chuanyunSaveDTO.getSuccessful()){
+                            log.warn("新增项目成员月度成本汇总失败");
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        log.warn("########"+chuanyunSelfCostDO+"");
+                    }
+                });
+            }else {
+                //流程执行完
+                break;
+            }
+        }
+        log.info("月工时更新花费"+(Instant.now().getEpochSecond()-startTime));
+    }
+
+    /**
+     * 删除状态为审核中数据
+     * @param schemaCode
+     * @param buttonCode
+     */
+    public void deleteExamineStatus(String schemaCode,String buttonCode) {
+        try {
+            List<String> matchers = new ArrayList<>();
+            matchers.add(buttonCode+"_2,"+"2");
+            var filter= Filter.instance(0,Integer.MAX_VALUE,true,"And",matchers);
+            var chuanyunFindAllResponse=chuanYunManager.findAll(schemaCode,filter);
+            if (chuanyunFindAllResponse.getReturnData()!=null){
+                List<ChuanyunCommonDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                result.forEach(basicDO -> {
+                    ChuanyunSaveDTO chuanyunSaveDTO = chuanYunManager.delete(schemaCode,basicDO.getObjectId());
+                    if(chuanyunSaveDTO.getSuccessful()){
+                        log.info("删除状态为审核中数据成功");
+                    }else{
+                        log.warn("删除状态为审核中数据失败");
+                    }
+                });
+            }
+        }catch (Exception e) {
+            e.printStackTrace();
+            log.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 人员项目周度工时
+     */
+    @Data
+    static
+    class ChuanyunProjectMemberWeekHourDTO{
+
+        @JsonProperty("F0000001")
+        private String projectId;
+
+        @JsonProperty("F0000002")
+        private String userId;
+
+        @JsonProperty("F0000003")
+        private String projectType;
+
+        @JsonProperty("F0000004")
+        private BigDecimal totalHour;
+
+        @JsonProperty("F0000005")
+        private BigDecimal personDays;
+
+        @JsonProperty("F0000008")
+        private String year;
+
+        @JsonProperty("F0000006")
+        private String week;
+
+        @JsonProperty("F0000007")
+        private String hourStatus;
+
+        /**
+         * 部门信息
+         */
+        @JsonProperty("F0000009")
+        private String departmentId;
+    }
+
+    /**
+     * 工时标准化更新数据
+     */
+    @Data
+    static
+    class ChuanyunSelfWorkHourDTO {
+
+        @JsonProperty("F0000002")
+        private String userId;
+
+        @JsonProperty("F0000001")
+        private String projectId;
+
+        /**
+         * 项目类型
+         */
+        @JsonProperty("F0000005")
+        private String projectType;
+
+        /**
+         * 流程状态
+         */
+        @JsonProperty("F0000006")
+        private String status;
+
+        @JsonProperty("F0000003")
+        @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
+        @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+        private LocalDateTime dayLogDate;
+
+        @JsonProperty("F0000004")
+        private BigDecimal standardWorkHour;
+
+        /**
+         * 部门Id
+         */
+        @JsonProperty("F0000007")
+        private String departmentId;
+    }
+
+    @Data
+    static
+    class ChuanyunMemberMonthCostDTO{
+        /**
+         * 项目ID
+         */
+        @JsonProperty("F0000003")
+        private String projectId;
+
+        /**
+         * 项目类型
+         */
+        @JsonProperty("F0000008")
+        private String projectType;
+
+        /**
+         * 日志流程状态
+         */
+        @JsonProperty("F0000009")
+        private String status;
+
+        /**
+         * 用户ID
+         */
+        @JsonProperty("F0000002")
+        private String userId;
+
+        /**
+         * 日期
+         */
+        @JsonProperty("F0000004")
+        @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
+        @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+        private LocalDateTime dayLogDate;
+
+        /**
+         * 工时
+         */
+        @JsonProperty("F0000005")
+        private BigDecimal workHour;
+
+        /**
+         * 成本
+         */
+        @JsonProperty("F0000006")
+        private BigDecimal cost;
+
+        /**
+         * 月度工时汇总
+         */
+        @JsonProperty("F0000007")
+        private BigDecimal monthWorkHour;
+
+        /**
+         * 部门Id
+         */
+        @JsonProperty("F0000010")
+        private String departmentId;
+    }
+}