Browse Source

1.新增子项目工时统计

WoNiu 4 years ago
parent
commit
2d9b27ca00

+ 41 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunSelfSubWorkHourDao.java

@@ -0,0 +1,41 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfSubWorkHourDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
+import org.springframework.stereotype.Repository;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Repository
+public interface ChuanyunSelfSubWorkHourDao extends GalaxisRepository<ChuanyunSelfSubWorkHourDO,String> {
+
+    /**
+     * 获取单日工时数据
+     * @param userId
+     * @param projectId
+     * @param dayLogDate
+     * @param projectType
+     * @return
+     */
+    ChuanyunSelfSubWorkHourDO findByUserIdAndProjectIdAndProjectTypeAndDayLogDate(String userId, String projectId,String projectType,LocalDateTime dayLogDate);
+
+    /**
+     * 获取单日工时数据
+     * @param userId
+     * @param projectId
+     * @param dayLogDate
+     * @param projectType
+     * @param status
+     * @return
+     */
+    ChuanyunSelfSubWorkHourDO findByUserIdAndProjectIdAndProjectTypeAndDayLogDateAndStatus(String userId, String projectId,String projectType,LocalDateTime dayLogDate,String status);
+
+    /**
+     * 根据用户ID获取每日工时
+     * @param userId
+     * @return
+     */
+    List<ChuanyunSelfSubWorkHourDO> findByUserId(String userId);
+}

+ 98 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunSubWeekHourDao.java

@@ -0,0 +1,98 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSubWeekHourDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWeekMemberHourDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Repository
+public interface ChuanyunSubWeekHourDao extends GalaxisRepository<ChuanyunSubWeekHourDO,String> {
+
+    /**
+     * 获取周工时
+     * @param userId
+     * @return
+     */
+    @Query(value="SELECT chuanyun_self_sub_work_hour.object_id, \n" +
+            "            LEFT(YEARWEEK(chuanyun_self_sub_work_hour.day_log_date,1),4)as year, \n" +
+            "            RIGHT(YEARWEEK(chuanyun_self_sub_work_hour.day_log_date,1),2) AS week, \n" +
+            "            project_id,user_id,bg, \n" +
+            "            SUM(standard_work_hour)AS standard_work_hour, \n" +
+            "            project_type,\n" +
+            "            `status` \n" +
+            "            FROM chuanyun_self_sub_work_hour  \n" +
+            "            WHERE project_id !='' and user_id=?1\n" +
+            "            GROUP BY chuanyun_self_sub_work_hour.project_id, \n" +
+            "            chuanyun_self_sub_work_hour.project_type, \n" +
+            "            chuanyun_self_sub_work_hour.user_id,\n" +
+            "            LEFT(YEARWEEK(chuanyun_self_sub_work_hour.day_log_date,1),4), \n" +
+            "            RIGHT(YEARWEEK(chuanyun_self_sub_work_hour.day_log_date,1),2), \n" +
+            "            chuanyun_self_sub_work_hour.`status`",nativeQuery = true)
+    List<ChuanyunSubWeekHourDO> getSubWeekHourByUserId(@Param("userId") String userId);
+
+    /**
+     * 获取原有周工时数据
+     * @param userId
+     * @param projectId
+     * @param projectType
+     * @param week
+     * @param year
+     * @param status
+     * @return
+     */
+    ChuanyunSubWeekHourDO findByUserIdAndProjectIdAndProjectTypeAndWeekAndYearAndStatus(String userId,String projectId,String projectType, String week,String year,String status);
+
+    /**
+     * 查询是否有流程中数据
+     * @param projectId
+     * @param userId
+     * @param year
+     * @param week
+     * @param projectType
+     * @return
+     */
+    @Query(value="SELECT chuanyun_self_sub_work_hour.object_id,\n" +
+            "            DATE_FORMAT(day_log_date,'%Y') as year,\n" +
+            "            WEEKOFYEAR(chuanyun_self_sub_work_hour.day_log_date) AS week,\n" +
+            "            project_id,user_id,\n" +
+            "            SUM(standard_work_hour)AS standard_work_hour,\n" +
+            "            chuanyun_self_sub_work_hour.bg,\n" +
+            "            project_type,\n" +
+            "            `status`\n" +
+            "            FROM chuanyun_self_sub_work_hour \n" +
+            "            WHERE project_id=?1 and user_id=?2 and DATE_FORMAT(day_log_date,'%Y')=?3 and \n" +
+            "            WEEKOFYEAR(chuanyun_self_sub_work_hour.day_log_date)=?4 and status=2 and project_type=?5\n" +
+            "             GROUP BY chuanyun_self_sub_work_hour.project_id,\n" +
+            "            chuanyun_self_sub_work_hour.project_type,\n" +
+            "            chuanyun_self_sub_work_hour.user_id,\n" +
+            "            DATE_FORMAT(day_log_date,'%Y'),\n" +
+            "            WEEKOFYEAR(chuanyun_self_sub_work_hour.day_log_date),\n" +
+            "            chuanyun_self_sub_work_hour.`status`",nativeQuery = true)
+    ChuanyunSubWeekHourDO getProcessSubWeekHour(@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 year
+     * @param week
+     * @param status
+     * @param projectType
+     */
+    @Transactional(rollbackFor = Exception.class)
+    void deleteByProjectIdAndUserIdAndYearAndWeekAndStatusAndProjectType(String projectId, String userId, String year, String week, String status, String projectType);
+
+    /**
+     * 根据用户Id获取周工时
+     * @param userId
+     * @return
+     */
+    List<ChuanyunSubWeekHourDO> findByUserId(String userId);
+
+}

+ 65 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunSubWorkHourDao.java

@@ -0,0 +1,65 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSubWorkHourDO;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Repository
+public interface ChuanyunSubWorkHourDao extends GalaxisRepository<ChuanyunSubWorkHourDO,String> {
+
+    /**
+     * 获取子项目每日工时
+     * @param userId
+     * @return
+     */
+    @Query(value="SELECT\n" +
+            "\tchuanyun_day_log.object_id,\n" +
+            "\tSUM(\n" +
+            "\t\tchuanyun_day_log.hours_worked\n" +
+            "\t) AS hours_worked,\n" +
+            "\tchuanyun_day_log.sub_porject_id AS project_id,\n" +
+            "\tchuanyun_day_log.project_type,\n" +
+            "\tchuanyun_log.user_id,\n" +
+            "\tchuanyun_log.department_name,\n" +
+            "  chuanyun_day_log.sub_project_bg AS bg,\n" +
+            "\tchuanyun_log. STATUS,\n" +
+            "\tchuanyun_day_log.day_log_date\n" +
+            "FROM\n" +
+            "\tchuanyun_day_log\n" +
+            "LEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id\n" +
+            "WHERE\n" +
+            "\tchuanyun_log.user_id = ?\n" +
+            "AND chuanyun_day_log.sub_porject_id IS NOT NULL\n" +
+            "AND chuanyun_day_log.sub_project_bg IS NOT NULL\n" +
+            "GROUP BY\n" +
+            "\tchuanyun_day_log.sub_porject_id,\n" +
+            "\tchuanyun_log.user_id,\n" +
+            "\tchuanyun_day_log.project_type,\n" +
+            "\tchuanyun_log. STATUS,\n" +
+            "\tchuanyun_day_log.day_log_date",nativeQuery = true)
+    List<ChuanyunSubWorkHourDO> getSubSelfWorkHour(@Param("userId") String userId);
+
+
+    @Query(value="SELECT chuanyun_day_log.object_id,\n" +
+            "            SUM(chuanyun_day_log.hours_worked) AS hours_worked,\n" +
+            "            chuanyun_day_log.sub_porject_id AS project_id,\n" +
+            "            chuanyun_day_log.project_type,\n" +
+            "            chuanyun_log.user_id,\n" +
+            "            chuanyun_day_log.sub_project_bg AS bg,\n" +
+            "            chuanyun_log.department_name,\n" +
+            "            chuanyun_log.status,\n" +
+            "            chuanyun_day_log.day_log_date \n" +
+            "            FROM chuanyun_day_log \n" +
+            "            LEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id \n" +
+            "            WHERE chuanyun_log.user_id = ?\n" +
+            "            AND chuanyun_day_log.day_log_date =?\n" +
+            "            AND status!=3 \n" +
+            "            GROUP BY chuanyun_log.user_id,\n" +
+            "            chuanyun_day_log.day_log_date",nativeQuery = true)
+    ChuanyunSubWorkHourDO getSubDayWorkHour(String userId, LocalDateTime day);
+}

+ 47 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSelfSubWorkHourDO.java

@@ -0,0 +1,47 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Slf4j
+@Data
+@Entity(name = "CHUANYUN_SELF_SUB_WORK_HOUR")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunSelfSubWorkHourDO {
+    @Id
+    @GeneratedValue(generator = "idGeneratorUser")
+    @GenericGenerator(name ="idGeneratorUser" ,strategy="com.galaxis.capsule.util.GalaxisIdGenerator")
+    private Long objectId;
+
+    private String userId;
+
+    private String projectType;
+
+    private String projectId;
+
+    private String bg;
+
+    private String departmentId;
+
+    private String departmentName;
+
+    private String status;
+
+    @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
+    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+    private LocalDateTime dayLogDate;
+
+    private BigDecimal standardWorkHour;
+}

+ 49 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSubWeekHourDO.java

@@ -0,0 +1,49 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.math.BigDecimal;
+
+@Slf4j
+@Data
+@Entity(name = "CHUANYUN_SUB_WEEK_MEMBER_HOUR")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunSubWeekHourDO {
+    @Id
+    @GeneratedValue(generator = "idGeneratorUser")
+    @GenericGenerator(name ="idGeneratorUser" ,strategy="com.galaxis.capsule.util.GalaxisIdGenerator")
+    private Long objectId;
+
+    private String userId;
+
+    private String projectType;
+
+    private String projectId;
+
+    private String bg;
+
+    /**
+     * 流程状态
+     */
+    private String status;
+
+    /**
+     * 年
+     */
+    private String year;
+
+    /**
+     * 周
+     */
+    private String week;
+
+    private BigDecimal standardWorkHour;
+
+    public static final String SCHEMA_CODE ="D001789Sbuhwjtz0qx3pbt5884c9jdcw3";
+}

+ 48 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSubWorkHourDO.java

@@ -0,0 +1,48 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Slf4j
+@Data
+@Entity
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunSubWorkHourDO {
+
+    @Id
+    private String objectId;
+
+    private String userId;
+
+    /**
+     * 项目类型
+     */
+    private String projectType;
+
+    private String projectId;
+
+    private String departmentName;
+
+    private String bg;
+
+    /**
+     * 流程状态
+     */
+    private String status;
+
+    @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
+    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+    private LocalDateTime dayLogDate;
+
+    private BigDecimal hoursWorked;
+}

+ 3 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunWeekMemberHourDTO.java

@@ -41,6 +41,9 @@ public class ChuanyunWeekMemberHourDTO {
     @JsonProperty("F0000007")
     private String status;
 
+    @JsonProperty("F0000010")
+    private String bg;
+
     /**
      * 部门信息
      */

+ 202 - 0
src/main/java/com/galaxis/manatee/task/SubWorkHourStatistics.java

@@ -0,0 +1,202 @@
+package com.galaxis.manatee.task;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.dao.ChuanyunSelfSubWorkHourDao;
+import com.galaxis.manatee.dao.ChuanyunSubWeekHourDao;
+import com.galaxis.manatee.dao.ChuanyunSubWorkHourDao;
+import com.galaxis.manatee.dao.ChuanyunUserCompanyDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.*;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSelfWorkHourDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunWeekMemberHourDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.Filter;
+import com.galaxis.manatee.manager.ChuanYunManager;
+import com.galaxis.manatee.service.DataArcherService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@Slf4j
+public class SubWorkHourStatistics {
+
+    private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
+    private final ChuanyunSubWorkHourDao chuanyunSubProjectDao;
+    private final ChuanyunSelfSubWorkHourDao chuanyunSelfSubWorkHourDao;
+    private final ChuanyunSubWeekHourDao chuanyunSubWeekHourDao;
+    private final ChuanYunManager chuanYunManager;
+    private final DataArcherService dataArcherService;
+
+    public SubWorkHourStatistics(ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunSubWorkHourDao chuanyunSubProjectDao, ChuanyunSelfSubWorkHourDao chuanyunSelfSubWorkHourDao, ChuanyunSubWeekHourDao chuanyunSubWeekHourDao, ChuanYunManager chuanYunManager, DataArcherService dataArcherService) {
+        this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
+        this.chuanyunSubProjectDao = chuanyunSubProjectDao;
+        this.chuanyunSelfSubWorkHourDao = chuanyunSelfSubWorkHourDao;
+        this.chuanyunSubWeekHourDao = chuanyunSubWeekHourDao;
+        this.chuanYunManager = chuanYunManager;
+        this.dataArcherService = dataArcherService;
+    }
+
+
+
+    @Scheduled(fixedDelay = 86400000L)
+    public void updateHour(){
+        standardWorkHour();
+        updateAllChuanyunSelfSubWorkHour();
+    }
+
+
+    /**
+     * 子项目每日工时标准化
+     */
+    private void standardWorkHour(){
+        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> {
+            List<ChuanyunSubWorkHourDO> list = chuanyunSubProjectDao.getSubSelfWorkHour(chuanyunUserCompanyDO.getUserId());
+            if (list!=null&&list.size()>0){
+                list.forEach(chuanyunSubWorkHourDO -> {
+                    ChuanyunSelfSubWorkHourDO chuanyunSelfSubWorkHourDO = new ChuanyunSelfSubWorkHourDO();
+                    chuanyunSelfSubWorkHourDO.setBg(chuanyunSubWorkHourDO.getBg());
+                    chuanyunSelfSubWorkHourDO.setUserId(chuanyunSubWorkHourDO.getUserId());
+                    chuanyunSelfSubWorkHourDO.setProjectId(chuanyunSubWorkHourDO.getProjectId());
+                    chuanyunSelfSubWorkHourDO.setProjectType(chuanyunSubWorkHourDO.getProjectType());
+                    chuanyunSelfSubWorkHourDO.setDepartmentName(chuanyunSubWorkHourDO.getDepartmentName());
+                    chuanyunSelfSubWorkHourDO.setDayLogDate(chuanyunSubWorkHourDO.getDayLogDate());
+                    chuanyunSelfSubWorkHourDO.setStatus(chuanyunSubWorkHourDO.getStatus());
+                    //每日总工时
+                    ChuanyunSubWorkHourDO totalSubWorkHour = chuanyunSubProjectDao.getSubDayWorkHour(chuanyunSubWorkHourDO.getUserId(),chuanyunSubWorkHourDO.getDayLogDate());
+                    //工时标准化
+                    if (totalSubWorkHour!=null){
+                        BigDecimal standard = new BigDecimal(8);
+                        if (totalSubWorkHour.getHoursWorked().compareTo(standard)<=0){
+                            chuanyunSelfSubWorkHourDO.setStandardWorkHour(chuanyunSubWorkHourDO.getHoursWorked());
+                        }else {
+                            BigDecimal personDays = (chuanyunSubWorkHourDO.getHoursWorked().divide(totalSubWorkHour.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
+                            chuanyunSelfSubWorkHourDO.setStandardWorkHour(personDays);
+                        }
+                        //获取原始工时数据
+                        ChuanyunSelfSubWorkHourDO oldSelfSubWorkHourDO = new ChuanyunSelfSubWorkHourDO();
+                        if (chuanyunSubWorkHourDO.getStatus().equals("3")){
+                            oldSelfSubWorkHourDO = chuanyunSelfSubWorkHourDao.findByUserIdAndProjectIdAndProjectTypeAndDayLogDateAndStatus(chuanyunSubWorkHourDO.getUserId(),chuanyunSubWorkHourDO.getProjectId(),chuanyunSubWorkHourDO.getProjectType(),chuanyunSubWorkHourDO.getDayLogDate(),chuanyunSubWorkHourDO.getStatus());
+                        }else {
+                            oldSelfSubWorkHourDO = chuanyunSelfSubWorkHourDao.findByUserIdAndProjectIdAndProjectTypeAndDayLogDate(chuanyunSubWorkHourDO.getUserId(),chuanyunSubWorkHourDO.getProjectId(),chuanyunSubWorkHourDO.getProjectType(),chuanyunSubWorkHourDO.getDayLogDate());
+                        }
+                        if (oldSelfSubWorkHourDO!=null){
+                            chuanyunSelfSubWorkHourDao.delete(oldSelfSubWorkHourDO);
+                        }
+                        //新增每日工时
+                        chuanyunSelfSubWorkHourDao.save(chuanyunSelfSubWorkHourDO);
+                    }
+                });
+            }
+        });
+    }
+
+
+    /**
+     * 氚云日工时更新
+     */
+    public void updateAllChuanyunSelfSubWorkHour() {
+        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> {
+            List<ChuanyunSelfSubWorkHourDO> list = chuanyunSelfSubWorkHourDao.findByUserId(chuanyunUserCompanyDO.getUserId());
+            if (list!=null&&list.size()>0){
+                list.forEach(chuanyunSelfSubWorkHourDO -> {
+                    ChuanyunSelfWorkHourDTO chuanyunSelfWorkHourDTO = new ChuanyunSelfWorkHourDTO();
+                    BeanUtils.copyProperties(chuanyunSelfSubWorkHourDO, chuanyunSelfWorkHourDTO);
+                    chuanyunSelfWorkHourDTO.setUserName(chuanyunUserCompanyDO.getUserName());
+                    ObjectMapper objectMapper = new ObjectMapper();
+                    try {
+                        List<String> matchers = new ArrayList<>();
+                        matchers.add("F0000001_2," + chuanyunSelfWorkHourDTO.getProjectId());
+                        matchers.add("F0000002_2," + chuanyunSelfWorkHourDTO.getUserId());
+                        matchers.add("F0000003_2," + chuanyunSelfWorkHourDTO.getDayLogDate());
+                        matchers.add("F0000005_2," + chuanyunSelfWorkHourDTO.getProjectType());
+                        if (chuanyunSelfWorkHourDTO.getStatus().equals("3")){
+                            matchers.add("F0000006_2," + chuanyunSelfWorkHourDTO.getStatus());
+                        }
+                        var filter = Filter.instance(0, 1, true, "And", matchers);
+                        var chuanyunFindAllResponse = chuanYunManager.findAll("D001789So1gvnogdib8ytl0owunkocnl6", filter);
+                        var selfMonthString = objectMapper.writeValueAsString(chuanyunSelfWorkHourDTO);
+                        ChuanyunSaveDTO chuanyunSaveDTO;
+                        if (chuanyunFindAllResponse.getReturnData() != null) {
+                            List<ChuanyunMemberHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                            });
+                            result.forEach(chuanyunMemberHourDO -> {
+                                chuanYunManager.delete("D001789So1gvnogdib8ytl0owunkocnl6",chuanyunMemberHourDO.getObjectId());
+                            });
+                        }
+                        log.info("新增子项目工时:"+chuanyunSelfWorkHourDTO);
+                        chuanyunSaveDTO = chuanYunManager.save("D001789So1gvnogdib8ytl0owunkocnl6", selfMonthString, true);
+                        if (!chuanyunSaveDTO.getSuccessful()) {
+                            log.warn("新增子项目工时标准化失败");
+                        }
+                    }catch (Exception e){
+                        log.warn("更新子项目工时异常" + chuanyunSelfWorkHourDTO,e);
+                    }
+                });
+            }
+        });
+    }
+
+    /**
+     * 子项目每周工时标准化
+     */
+    @Scheduled(fixedDelay = 3600000L)
+    private void standardWeeklyWorkHour(){
+        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> {
+            List<ChuanyunSubWeekHourDO> list = chuanyunSubWeekHourDao.getSubWeekHourByUserId("7292b8cb-a5da-4c3d-952e-d1ba41b57cff");
+            if (list!=null&&list.size()>0){
+                list.forEach(chuanyunSubWeekHourDO -> {
+                    ChuanyunSubWeekHourDO oldSubWeekHour = chuanyunSubWeekHourDao.findByUserIdAndProjectIdAndProjectTypeAndWeekAndYearAndStatus(chuanyunSubWeekHourDO.getUserId(),chuanyunSubWeekHourDO.getProjectId(),chuanyunSubWeekHourDO.getProjectType(),chuanyunSubWeekHourDO.getWeek(),chuanyunSubWeekHourDO.getYear(),chuanyunSubWeekHourDO.getStatus());
+                    if (oldSubWeekHour!=null){
+                        chuanyunSubWeekHourDao.delete(oldSubWeekHour);
+                    }
+                    chuanyunSubWeekHourDao.save(chuanyunSubWeekHourDO);
+                    //判断是否还有处于流程中的数据
+                    ChuanyunSubWeekHourDO processSubWeekHourDO = chuanyunSubWeekHourDao.getProcessSubWeekHour(chuanyunSubWeekHourDO.getProjectId(),chuanyunSubWeekHourDO.getUserId(),chuanyunSubWeekHourDO.getYear(),chuanyunSubWeekHourDO.getWeek(),chuanyunSubWeekHourDO.getProjectType());
+                    if (processSubWeekHourDO==null){
+                        chuanyunSubWeekHourDao.deleteByProjectIdAndUserIdAndYearAndWeekAndStatusAndProjectType(chuanyunSubWeekHourDO.getProjectId(),chuanyunSubWeekHourDO.getUserId(),chuanyunSubWeekHourDO.getYear(),chuanyunSubWeekHourDO.getWeek(),"2",chuanyunSubWeekHourDO.getProjectType());
+
+                        dataArcherService.deleteExamineStatus(ChuanyunSubWeekHourDO.SCHEMA_CODE,"F0000007","F0000001",chuanyunSubWeekHourDO.getProjectId(),"F0000002",chuanyunSubWeekHourDO.getUserId(),"F0000008",chuanyunSubWeekHourDO.getYear(),"","","F0000006",chuanyunSubWeekHourDO.getWeek(),"F0000003",chuanyunSubWeekHourDO.getProjectType());
+                    }
+                });
+            }
+        });
+    }
+
+    /**
+     * 氚云周工时更新
+     */
+    public void updateAllChuanyunWeekMemberHour() {
+        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> {
+            List<ChuanyunSubWeekHourDO> list = chuanyunSubWeekHourDao.findByUserId(chuanyunUserCompanyDO.getUserId());
+            if (list!=null&&list.size()>0){
+                list.forEach(chuanyunSubWeekHourDO -> {
+                    String departmentId = chuanyunUserCompanyDao.findByUserId(chuanyunSubWeekHourDO.getUserId()).getDepartmentId();
+                    ChuanyunWeekMemberHourDTO chuanyunWeekMemberHourDTO = new ChuanyunWeekMemberHourDTO();
+                    chuanyunWeekMemberHourDTO.setProjectId(chuanyunSubWeekHourDO.getProjectId());
+                    chuanyunWeekMemberHourDTO.setUserId(chuanyunSubWeekHourDO.getUserId());
+                    chuanyunWeekMemberHourDTO.setWeek(chuanyunSubWeekHourDO.getWeek());
+                    chuanyunWeekMemberHourDTO.setProjectType(chuanyunSubWeekHourDO.getProjectType());
+                    chuanyunWeekMemberHourDTO.setTotalHour(chuanyunSubWeekHourDO.getStandardWorkHour());
+                    chuanyunWeekMemberHourDTO.setStatus(chuanyunSubWeekHourDO.getStatus());
+                    chuanyunWeekMemberHourDTO.setYear(chuanyunSubWeekHourDO.getYear());
+                    chuanyunWeekMemberHourDTO.setDepartmentId(departmentId);
+                    chuanyunWeekMemberHourDTO.setBg(chuanyunSubWeekHourDO.getBg());
+                    ObjectMapper objectMapper = new ObjectMapper();
+                    try{
+
+                    }catch (Exception e){
+                        e.printStackTrace();
+                        log.warn(e.getMessage());
+                    }
+                });
+            }
+        });
+    }
+}