Переглянути джерело

修改了工时信息同步中遇到的问题

verguenza 4 роки тому
батько
коміт
88fb1c2dd6
20 змінених файлів з 461 додано та 138 видалено
  1. 10 0
      src/main/java/com/galaxis/manatee/constant/ChuanYunConstant.java
  2. 2 1
      src/main/java/com/galaxis/manatee/controller/GetController.java
  3. 13 2
      src/main/java/com/galaxis/manatee/dao/ChuanyunMemberCostDao.java
  4. 14 4
      src/main/java/com/galaxis/manatee/dao/ChuanyunProjectCostDao.java
  5. 35 12
      src/main/java/com/galaxis/manatee/dao/ChuanyunSelfWorkHourDao.java
  6. 30 4
      src/main/java/com/galaxis/manatee/dao/ChuanyunWorkHourDao.java
  7. 3 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunAdjustAccountDO.java
  8. 7 2
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunMemberCostDO.java
  9. 15 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunMemberMonthCostDO.java
  10. 5 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectCostDO.java
  11. 9 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectMemberCostDO.java
  12. 5 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectTotalCostDO.java
  13. 33 3
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSelfCostDO.java
  14. 5 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSelfWorkHourDO.java
  15. 5 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunWorkHourDO.java
  16. 1 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/Filter.java
  17. 3 3
      src/main/java/com/galaxis/manatee/manager/impl/DefaultChuanyunManagerImpl.java
  18. 8 0
      src/main/java/com/galaxis/manatee/service/ChuanyunService.java
  19. 2 2
      src/main/java/com/galaxis/manatee/service/impl/ChuanyunServiceImpl.java
  20. 256 105
      src/main/java/com/galaxis/manatee/task/ChuanyunProjectScheduledTask.java

+ 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 PRODUCTION_PROJECT="生产项目";
+
+    /**
+     * 生产项目类型项目号
+     */
+    public static final String PRODUCTION_PROJECT_ID="production_project";
+
+    /**
      * 保存项目号、项目ObjectId的映射关系
      */
     public static Map<String,String> PROJECT_CODE=new HashMap<>(2048);

+ 2 - 1
src/main/java/com/galaxis/manatee/controller/GetController.java

@@ -7,6 +7,7 @@ import com.galaxis.manatee.task.ChuanyunHumanResourceScheduledTask;
 import org.springframework.http.ResponseEntity;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
@@ -120,7 +121,7 @@ public class GetController {
      * @param code
      */
     @GetMapping("/test/updateProjectDept")
-    public void updateProjectDept(String code) {
+    public void updateProjectDept(@RequestParam("code") String code) {
         chuanyunService.updateChuanyunDept(code);
     }
 

+ 13 - 2
src/main/java/com/galaxis/manatee/dao/ChuanyunMemberCostDao.java

@@ -9,6 +9,9 @@ import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
+/**
+ * @author kxuan
+ */
 @Repository
 public interface ChuanyunMemberCostDao extends GalaxisRepository<ChuanyunMemberCostDO,String> {
 
@@ -16,8 +19,16 @@ public interface ChuanyunMemberCostDao extends GalaxisRepository<ChuanyunMemberC
      * 获取项目人员总工时总成本
      * @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)
+    @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_type," +
+            "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)
     List<ChuanyunMemberCostDO> getMemberCost();
 
     /**

+ 14 - 4
src/main/java/com/galaxis/manatee/dao/ChuanyunProjectCostDao.java

@@ -8,20 +8,30 @@ import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
+/**
+ * @author kxuan
+ */
 @Repository
 public interface ChuanyunProjectCostDao extends GalaxisRepository<ChuanyunProjectCostDO,String> {
 
     /**
      * 获取项目总工时成本
-     * @return
+     * @return  项目总工时
      */
-    @Query(value="SELECT chuanyun_member_cost.object_id,SUM(chuanyun_member_cost.cost) AS cost,SUM(chuanyun_member_cost.total_hour) AS total_hour,chuanyun_member_cost.project_id FROM chuanyun_member_cost GROUP BY chuanyun_member_cost.project_id",nativeQuery = true)
+    @Query(value="SELECT chuanyun_member_cost.object_id," +
+            "SUM(chuanyun_member_cost.cost) AS cost," +
+            "SUM(chuanyun_member_cost.total_hour) AS total_hour," +
+            "chuanyun_member_cost.project_type," +
+            "chuanyun_member_cost.project_id " +
+            "FROM chuanyun_member_cost " +
+            "GROUP BY chuanyun_member_cost.project_id",
+            nativeQuery = true)
     List<ChuanyunProjectCostDO> getProjectCost();
 
     /**
      * 根据项目号获取工时数据
-     * @param projectId
-     * @return
+     * @param projectId 项目Id
+     * @return  项目工时对象
      */
     ChuanyunProjectCostDO findByProjectId(String projectId);
 

+ 35 - 12
src/main/java/com/galaxis/manatee/dao/ChuanyunSelfWorkHourDao.java

@@ -11,6 +11,9 @@ import org.springframework.stereotype.Repository;
 import java.time.LocalDateTime;
 import java.util.List;
 
+/**
+ * @author kxuan
+ */
 @Repository
 public interface ChuanyunSelfWorkHourDao extends GalaxisRepository<ChuanyunSelfWorkHourDO,String> {
 
@@ -24,22 +27,42 @@ public interface ChuanyunSelfWorkHourDao extends GalaxisRepository<ChuanyunSelfW
     ChuanyunSelfWorkHourDO findByUserIdAndAndProjectIdAndAndDayLogDate(String userId, String projectId, LocalDateTime dayLogDate);
 
     /**
-     * 获取人员总工时
-     * @param userId
-     * @return
+     * 获取人员-项目-月度标准总工时
+     * @param userId    用户ID
+     * @return  汇总数据
      */
-    @Query(value="SELECT SUM(chuanyun_self_work_hour.standard_work_hour) AS standard_work_hour,chuanyun_self_work_hour.day_log_date,chuanyun_self_work_hour.user_id,chuanyun_self_work_hour.project_id,chuanyun_self_work_hour.object_id FROM chuanyun_self_work_hour WHERE chuanyun_self_work_hour.user_id=?"+
-            " GROUP BY chuanyun_self_work_hour.user_id,FROM_UNIXTIME(chuanyun_self_work_hour.day_log_date,'%Y-%m'),chuanyun_self_work_hour.project_id",nativeQuery = true)
+    @Query(value="SELECT SUM(chuanyun_self_work_hour.standard_work_hour) AS standard_work_hour," +
+            "chuanyun_self_work_hour.day_log_date," +
+            "chuanyun_self_work_hour.user_id," +
+            "chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.project_type," +
+            "chuanyun_self_work_hour.object_id " +
+            "FROM chuanyun_self_work_hour " +
+            "WHERE chuanyun_self_work_hour.user_id=? " +
+            "GROUP BY chuanyun_self_work_hour.user_id," +
+            "DATE_FORMAT(chuanyun_self_work_hour.day_log_date,'%Y-%m')," +
+            "chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.project_type",
+            nativeQuery = true)
     List<ChuanyunSelfWorkHourDO> getMonthProjectHour(String userId);
 
     /**
-     * 获取人员不同日期工时
-     * @param userId
-     * @param dayLogDate
-     * @return
+     * 获取人员月度标准工时汇总
+     * @param userId    用户ID
+     * @param dayLogDate    查询月份日期
+     * @return  汇总数据
      */
-    @Query(value="SELECT SUM(chuanyun_self_work_hour.standard_work_hour) AS standard_work_hour,chuanyun_self_work_hour.day_log_date,chuanyun_self_work_hour.user_id,chuanyun_self_work_hour.project_id,chuanyun_self_work_hour.object_id"+
-            " FROM chuanyun_self_work_hour WHERE chuanyun_self_work_hour.user_id= ?1 AND DATE_FORMAT(chuanyun_self_work_hour.day_log_date,'%Y-%m')=DATE_FORMAT(?2,'%Y-%m')"+
-            " GROUP BY chuanyun_self_work_hour.user_id,DATE_FORMAT(chuanyun_self_work_hour.day_log_date,'%Y-%m')",nativeQuery = true)
+    @Query(value="SELECT SUM(chuanyun_self_work_hour.standard_work_hour) AS standard_work_hour," +
+            "chuanyun_self_work_hour.day_log_date," +
+            "chuanyun_self_work_hour.user_id," +
+            "chuanyun_self_work_hour.project_type," +
+            "chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.object_id "+
+            "FROM chuanyun_self_work_hour " +
+            "WHERE chuanyun_self_work_hour.user_id= ?1 " +
+            "AND DATE_FORMAT(chuanyun_self_work_hour.day_log_date,'%Y-%m')=DATE_FORMAT(?2,'%Y-%m') "+
+            "GROUP BY chuanyun_self_work_hour.user_id," +
+            "DATE_FORMAT(chuanyun_self_work_hour.day_log_date,'%Y-%m')",
+            nativeQuery = true)
     ChuanyunSelfWorkHourDO getMonthHour(@Param("userId") String userId,@Param("dayLogDate") String dayLogDate);
 }

+ 30 - 4
src/main/java/com/galaxis/manatee/dao/ChuanyunWorkHourDao.java

@@ -9,14 +9,40 @@ import org.springframework.stereotype.Repository;
 import java.time.LocalDateTime;
 import java.util.List;
 
+/**
+ * @author kxuan
+ */
 @Repository
 public interface ChuanyunWorkHourDao extends GalaxisRepository<ChuanyunWorkHourDO,String> {
 
-    @Query(value="SELECT chuanyun_day_log.object_id,chuanyun_day_log.hours_worked,chuanyun_day_log.project_id,chuanyun_log.user_id,chuanyun_day_log.day_log_date FROM chuanyun_day_log"+
-            " LEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id WHERE chuanyun_log.user_id = ? ORDER BY day_log_date",nativeQuery = true)
+    /**
+     * 根据用户Id获取用户日志明细,并按日期拍
+     * @param userId    用户Id
+     * @return  日志数据
+     */
+    @Query(value="SELECT chuanyun_day_log.object_id," +
+            "chuanyun_day_log.hours_worked," +
+            "chuanyun_day_log.project_id," +
+            "chuanyun_day_log.project_type," +
+            "chuanyun_log.user_id," +
+            "chuanyun_day_log.day_log_date " +
+            "FROM chuanyun_day_log "+
+            "LEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id " +
+            "WHERE chuanyun_log.user_id = ? ORDER BY day_log_date",
+            nativeQuery = true)
     List<ChuanyunWorkHourDO> getSelfWorkHour(String userId);
 
-    @Query(value="SELECT chuanyun_day_log.object_id,SUM(chuanyun_day_log.hours_worked) AS hours_worked,chuanyun_day_log.project_id,chuanyun_log.user_id,chuanyun_day_log.day_log_date FROM chuanyun_day_log"+
-            " LEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id WHERE chuanyun_log.user_id = ? AND chuanyun_day_log.day_log_date =? GROUP BY chuanyun_log.user_id,chuanyun_day_log.day_log_date",nativeQuery = true)
+    @Query(value="SELECT chuanyun_day_log.object_id," +
+            "SUM(chuanyun_day_log.hours_worked) AS hours_worked," +
+            "chuanyun_day_log.project_id," +
+            "chuanyun_day_log.project_type," +
+            "chuanyun_log.user_id," +
+            "chuanyun_day_log.day_log_date " +
+            "FROM chuanyun_day_log "+
+            "LEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id " +
+            "WHERE chuanyun_log.user_id = ? AND chuanyun_day_log.day_log_date =? " +
+            "GROUP BY chuanyun_log.user_id," +
+            "chuanyun_day_log.day_log_date",
+            nativeQuery = true)
     ChuanyunWorkHourDO getDayWorkHour(String userId, LocalDateTime day);
 }

+ 3 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunAdjustAccountDO.java

@@ -10,6 +10,9 @@ import lombok.extern.slf4j.Slf4j;
 import javax.persistence.Entity;
 import java.math.BigDecimal;
 
+/**
+ * @author kxuan
+ */
 @Slf4j
 @EqualsAndHashCode(callSuper = true)
 @Data

+ 7 - 2
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunMemberCostDO.java

@@ -16,6 +16,9 @@ import javax.persistence.Id;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
+/**
+ * @author kxuan
+ */
 @Slf4j
 @Data
 @Entity(name = "CHUANYUN_MEMBER_COST")
@@ -23,12 +26,14 @@ import java.time.LocalDateTime;
 public class ChuanyunMemberCostDO {
 
     @Id
-    @GeneratedValue(generator = "idGeneratorUser")
-    @GenericGenerator(name ="idGeneratorUser" ,strategy="com.galaxis.capsule.util.GalaxisIdGenerator")
+    @GeneratedValue(generator = "idGeneratorChuanyunMemberCost")
+    @GenericGenerator(name ="idGeneratorChuanyunMemberCost" ,strategy="com.galaxis.capsule.util.GalaxisIdGenerator")
     private Long objectId;
 
     private String userId;
 
+    private String projectType;
+
     private String projectId;
 
     private BigDecimal totalHour;

+ 15 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunMemberMonthCostDO.java

@@ -14,6 +14,9 @@ import javax.persistence.Entity;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
+/**
+ * @author kxuan
+ */
 @Slf4j
 @EqualsAndHashCode(callSuper = true)
 @Data
@@ -33,6 +36,12 @@ public class ChuanyunMemberMonthCostDO extends BasicDO{
     private String projectId;
 
     /**
+     * 项目类型
+     */
+    @JsonProperty("F0000008")
+    private String projectType;
+
+    /**
      * 用户ID
      */
     @JsonProperty("F0000002")
@@ -57,4 +66,10 @@ public class ChuanyunMemberMonthCostDO extends BasicDO{
      */
     @JsonProperty("F0000006")
     private BigDecimal cost;
+
+    /**
+     * 月度工时汇总
+     */
+    @JsonProperty("F0000007")
+    private BigDecimal monthWorkHour;
 }

+ 5 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectCostDO.java

@@ -11,6 +11,9 @@ import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import java.math.BigDecimal;
 
+/**
+ * @author kxuan
+ */
 @Slf4j
 @Data
 @Entity(name = "CHUANYUN_PROJECT_COST")
@@ -22,6 +25,8 @@ public class ChuanyunProjectCostDO {
     @GenericGenerator(name ="idGeneratorUser" ,strategy="com.galaxis.capsule.util.GalaxisIdGenerator")
     private Long objectId;
 
+    private String projectType;
+
     private String projectId;
 
     private BigDecimal totalHour;

+ 9 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectMemberCostDO.java

@@ -10,6 +10,9 @@ import lombok.extern.slf4j.Slf4j;
 import javax.persistence.Entity;
 import java.math.BigDecimal;
 
+/**
+ * @author kxuan
+ */
 @Slf4j
 @EqualsAndHashCode(callSuper = true)
 @Data
@@ -29,6 +32,12 @@ public class ChuanyunProjectMemberCostDO extends BasicDO{
     private String projectId;
 
     /**
+     * 项目类型
+     */
+    @JsonProperty("F0000005")
+    private String projectType;
+
+    /**
      * 用户ID
      */
     @JsonProperty("F0000002")

+ 5 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectTotalCostDO.java

@@ -28,6 +28,11 @@ public class ChuanyunProjectTotalCostDO extends BasicDO{
     @JsonProperty("F0000001")
     private String projectId;
 
+    /**
+     * 项目类型
+     */
+    @JsonProperty("F0000004")
+    private String projectType;
 
     /**
      * 工时

+ 33 - 3
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSelfCostDO.java

@@ -1,6 +1,5 @@
 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;
@@ -16,25 +15,56 @@ import javax.persistence.Id;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
+/**
+ * @author kxuan
+ */
 @Slf4j
 @Data
 @Entity(name = "CHUANYUN_SELF_COST")
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class ChuanyunSelfCostDO {
+    /**
+     * 主键
+     */
     @Id
-    @GeneratedValue(generator = "idGeneratorUser")
-    @GenericGenerator(name ="idGeneratorUser" ,strategy="com.galaxis.capsule.util.GalaxisIdGenerator")
+    @GeneratedValue(generator = "idGeneratorChuanyunSelfCost")
+    @GenericGenerator(name ="idGeneratorChuanyunSelfCost" ,strategy="com.galaxis.capsule.util.GalaxisIdGenerator")
     private Long objectId;
 
+    /**
+     * 用户Id
+     */
     private String userId;
 
+    /**
+     * 项目类型
+     */
+    private String projectType;
+
+    /**
+     * 项目Id
+     */
     private String projectId;
 
+    /**
+     * 月份
+     */
     @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
     @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
     private LocalDateTime dayLogDate;
 
+    /**
+     * 人员单项目每月工时汇总
+     */
     private BigDecimal totalHour;
 
+    /**
+     * 人员单项目薪资成本
+     */
     private BigDecimal cost;
+
+    /**
+     * 人员每月工时汇总
+     */
+    private BigDecimal monthlyTotalHour;
 }

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

@@ -16,6 +16,9 @@ import javax.persistence.Id;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
+/**
+ * @author kxuan
+ */
 @Slf4j
 @Data
 @Entity(name = "CHUANYUN_SELF_WORK_HOUR")
@@ -29,6 +32,8 @@ public class ChuanyunSelfWorkHourDO {
 
     private String userId;
 
+    private String projectType;
+
     private String projectId;
 
     @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)

+ 5 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunWorkHourDO.java

@@ -14,6 +14,9 @@ import javax.persistence.Id;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
+/**
+ * @author kxuan
+ */
 @Slf4j
 @Data
 @Entity
@@ -25,6 +28,8 @@ public class ChuanyunWorkHourDO {
 
     private String userId;
 
+    private String projectType;
+
     private String projectId;
 
     @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)

+ 1 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/Filter.java

@@ -103,6 +103,7 @@ public class Filter {
                 matchersList.add(matchers);
             }catch (Exception e){
                 log.warn("查询条件解析异常");
+                log.warn(string);
                 e.printStackTrace();
             }
         });

+ 3 - 3
src/main/java/com/galaxis/manatee/manager/impl/DefaultChuanyunManagerImpl.java

@@ -165,7 +165,7 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
         ChuanyunSaveDTO chuanyunSaveResponse =new ChuanyunSaveDTO();
         chuanyunSaveResponse = restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity, chuanyunSaveResponse.getClass());
         if (chuanyunSaveResponse!=null&&chuanyunSaveResponse.getSuccessful()) {
-            log.info("新增成功!");
+//            log.info("新增成功!");
         }else {
             log.info("新增失败!");
         }
@@ -206,7 +206,7 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
         ChuanyunSaveAllDTO chuanyunSaveAllResponse =new ChuanyunSaveAllDTO();
         chuanyunSaveAllResponse = restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity, chuanyunSaveAllResponse.getClass());
         if (chuanyunSaveAllResponse!=null&&chuanyunSaveAllResponse.getSuccessful()) {
-            log.info("批量新增成功!");
+//            log.info("批量新增成功!");
         }else {
             log.info("批量新增失败!");
         }
@@ -246,7 +246,7 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
         ChuanyunSaveDTO chuanyunSaveResponse =new ChuanyunSaveDTO();
         chuanyunSaveResponse = restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity, chuanyunSaveResponse.getClass());
         if (chuanyunSaveResponse!=null&&chuanyunSaveResponse.getSuccessful()) {
-            log.info(bizObjectId+"更新成功!");
+//            log.info(bizObjectId+"更新成功!");
         }else {
             log.info(bizObjectId+"更新失败!"+bizObject);
         }

+ 8 - 0
src/main/java/com/galaxis/manatee/service/ChuanyunService.java

@@ -15,7 +15,15 @@ public interface ChuanyunService {
      */
     void updateProjectMember();
 
+    /**
+     * 获取成本集合
+     * @return  成本集合
+     */
     List<ChuanyunCostCollectionDO> getAllCostCollection();
 
+    /**
+     * 根据表单编号更新所属部门信息
+     * @param code  表单编号
+     */
     void updateChuanyunDept(String code);
 }

+ 2 - 2
src/main/java/com/galaxis/manatee/service/impl/ChuanyunServiceImpl.java

@@ -125,13 +125,13 @@ public class ChuanyunServiceImpl implements ChuanyunService {
                 List<ChuanyunUpdateDeptDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
                 result.forEach(chuanyunUpdateDeptDO ->  {
                     //更新拥有者id,更新所属部门
-//                    chuanyunUpdateDeptDO.setOwnerId(chuanyunUpdateDeptDO.getOwnerIdObject().getObjectId());
+                    chuanyunUpdateDeptDO.setOwnerId(chuanyunUpdateDeptDO.getOwnerIdObject().getObjectId());
                     ChuanyunUserCompanyDO chuanyunUserCompanyDO = chuanyunUserCompanyDao.findByUserId(chuanyunUpdateDeptDO.getOwnerIdObject().getObjectId());
                     chuanyunUpdateDeptDO.setOwnerDepartmentId(chuanyunUserCompanyDO.getDepartmentId());
                     ProjectUpdateDTO projectUpdateDTO = new ProjectUpdateDTO(chuanyunUpdateDeptDO);
                     try {
                         var groupProjectUpdateString=objectMapper.writeValueAsString(projectUpdateDTO);
-                        ChuanyunSaveDTO chuanyunSaveDTO=chuanYunManager.update(ChuanyunProjectDO.SCHEMA_CODE,chuanyunUpdateDeptDO.getObjectId(),groupProjectUpdateString);
+                        ChuanyunSaveDTO chuanyunSaveDTO=chuanYunManager.update(code,chuanyunUpdateDeptDO.getObjectId(),groupProjectUpdateString);
                         if(chuanyunSaveDTO.getSuccessful()){
                             log.info(chuanyunUpdateDeptDO.getObjectId()+"更新项目拥有者成功");
 

+ 256 - 105
src/main/java/com/galaxis/manatee/task/ChuanyunProjectScheduledTask.java

@@ -1,18 +1,26 @@
 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.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.data.domain.PageRequest;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -223,9 +231,9 @@ public class ChuanyunProjectScheduledTask {
                 //新增
                 if (chuanyunAdjustAccountDO.getPersonDays().intValue()>0){
                     try {
-                        List<String> macthers = new ArrayList<>();
-                        macthers.add("F0000002_2,"+chuanyunProjectDO.getProjectCode());
-                        var filter= Filter.instance(0,1,true,"And",macthers);
+                        List<String> matchers = new ArrayList<>();
+                        matchers.add("F0000002_2,"+chuanyunProjectDO.getProjectCode());
+                        var filter= Filter.instance(0,1,true,"And",matchers);
                         var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunAdjustAccountDO.SCHEMA_CODE,filter);
                         var adjustString=objectMapper.writeValueAsString(chuanyunAdjustAccountDO);
                         ChuanyunSaveDTO chuanyunSaveDTO;
@@ -291,8 +299,8 @@ public class ChuanyunProjectScheduledTask {
 
     /**
      * 计算人天
-     * @param projectId
-     * @return
+     * @param projectId 项目Id
+     * @return  计算人天
      */
     private BigDecimal personDays(String projectId){
         BigDecimal standard = new BigDecimal(8);
@@ -314,7 +322,7 @@ public class ChuanyunProjectScheduledTask {
      * 人力成本
      */
     @Scheduled(fixedDelay = 3600000L)
-    private void laborcost() {
+    private void laborCost() {
         var objectMapper=new ObjectMapper();
         var flag = true;
         var pageSize = 20;
@@ -328,56 +336,64 @@ public class ChuanyunProjectScheduledTask {
                 flag = false;
                 break;
             }
+            //逐个将员工每天工时进行统计汇总
             List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyDOS.getContent();
             userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
                 //工时标准化
-//                standardHour(chuanyunUserCompanyDO);
+                standardHour(chuanyunUserCompanyDO);
                 //单项目单人单月成本
-//                selfCost(chuanyunUserCompanyDO);
+                standardMonthlyHour(chuanyunUserCompanyDO);
             });
-            //每人月度汇总
+            //按项目汇总用户工时
             List<ChuanyunMemberCostDO> list = chuanyunMemberCostDao.getMemberCost();
             list.forEach(chuanyunMemberCostDO -> {
-                ChuanyunMemberCostDO memberCostDO = new ChuanyunMemberCostDO();
-                memberCostDO.setCost(chuanyunMemberCostDO.getCost());
-                memberCostDO.setProjectId(chuanyunMemberCostDO.getProjectId());
-                memberCostDO.setUserId(chuanyunMemberCostDO.getUserId());
-                memberCostDO.setTotalHour(chuanyunMemberCostDO.getTotalHour());
-                ChuanyunMemberCostDO oldCostDO = chuanyunMemberCostDao.findByUserIdAndProjectId(chuanyunMemberCostDO.getUserId(),chuanyunMemberCostDO.getProjectId());
-                if (oldCostDO !=null) {
-                    chuanyunMemberCostDao.delete(oldCostDO);
-                }
-                chuanyunMemberCostDao.save(memberCostDO);
-                //更新氚云数据
-                try {
-                    ChuanyunProjectMemberCostDO chuanyunProjectMemberCostDO = new ChuanyunProjectMemberCostDO();
-                    chuanyunProjectMemberCostDO.setProjectId(chuanyunMemberCostDO.getProjectId());
-                    chuanyunProjectMemberCostDO.setUserId(chuanyunMemberCostDO.getUserId());
-                    chuanyunProjectMemberCostDO.setCost(chuanyunMemberCostDO.getCost());
-                    chuanyunProjectMemberCostDO.setWorkHour(chuanyunMemberCostDO.getTotalHour());
-                    List<String> macthers = new ArrayList<>();
-                    macthers.add("F0000001_2,"+chuanyunMemberCostDO.getProjectId());
-                    macthers.add("F0000002_2,"+chuanyunMemberCostDO.getUserId());
-                    var filter= Filter.instance(0,1,true,"And",macthers);
-                    var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectMemberCostDO.SCHEMA_CODE,filter);
-                    var projectmemberString=objectMapper.writeValueAsString(chuanyunProjectMemberCostDO);
-                    ChuanyunSaveDTO chuanyunSaveDTO;
-                    if (chuanyunFindAllResponse.getReturnData()!=null) {
-                        List<ChuanyunProjectMemberCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-                        ChuanyunProjectMemberCostDO oldProjectMemberCostDO = result.get(0);
-                        chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberCostDO.SCHEMA_CODE,oldProjectMemberCostDO.getObjectId(),projectmemberString);
-                    }else {
-                        chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberCostDO.SCHEMA_CODE,projectmemberString,true);
-
+                if(StringUtils.isEmpty(chuanyunMemberCostDO.getProjectId())||StringUtils.isEmpty(chuanyunMemberCostDO.getUserId())){
+                    log.info("########"+chuanyunMemberCostDO+"");
+                }else{
+                    ChuanyunMemberCostDO memberCostDO = new ChuanyunMemberCostDO();
+                    memberCostDO.setCost(chuanyunMemberCostDO.getCost());
+                    memberCostDO.setProjectType(chuanyunMemberCostDO.getProjectType());
+                    memberCostDO.setProjectId(chuanyunMemberCostDO.getProjectId());
+                    memberCostDO.setUserId(chuanyunMemberCostDO.getUserId());
+                    memberCostDO.setTotalHour(chuanyunMemberCostDO.getTotalHour());
+                    ChuanyunMemberCostDO oldCostDO = chuanyunMemberCostDao.findByUserIdAndProjectId(chuanyunMemberCostDO.getUserId(),chuanyunMemberCostDO.getProjectId());
+                    if (oldCostDO !=null) {
+                        chuanyunMemberCostDao.delete(oldCostDO);
                     }
-                    if(chuanyunSaveDTO.getSuccessful()){
-                        log.info("新增项目成员成本汇总成功");
-                    }else{
-                        log.warn("新增项目成员成本汇总失败");
+                    chuanyunMemberCostDao.save(memberCostDO);
+                    //更新氚云数据
+                    try {
+                        ChuanyunProjectMemberCostDTO chuanyunProjectMemberCostDTO = new ChuanyunProjectMemberCostDTO();
+                        chuanyunProjectMemberCostDTO.setProjectId(chuanyunMemberCostDO.getProjectId());
+                        chuanyunProjectMemberCostDTO.setUserId(chuanyunMemberCostDO.getUserId());
+                        chuanyunProjectMemberCostDTO.setCost(chuanyunMemberCostDO.getCost());
+                        chuanyunProjectMemberCostDTO.setWorkHour(chuanyunMemberCostDO.getTotalHour());
+                        chuanyunProjectMemberCostDTO.setProjectType(chuanyunMemberCostDO.getProjectType());
+                        List<String> matchers = new ArrayList<>();
+                        matchers.add("F0000001_2,"+chuanyunMemberCostDO.getProjectId());
+                        matchers.add("F0000002_2,"+chuanyunMemberCostDO.getUserId());
+                        var filter= Filter.instance(0,1,true,"And",matchers);
+                        var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectMemberCostDO.SCHEMA_CODE,filter);
+                        var projectMemberString =objectMapper.writeValueAsString(chuanyunProjectMemberCostDTO);
+                        ChuanyunSaveDTO chuanyunSaveDTO;
+                        if (chuanyunFindAllResponse.getReturnData()!=null) {
+                            List<ChuanyunProjectMemberCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                            ChuanyunProjectMemberCostDO oldProjectMemberCostDO = result.get(0);
+                            chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberCostDO.SCHEMA_CODE,oldProjectMemberCostDO.getObjectId(), projectMemberString);
+                        }else {
+                            chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberCostDO.SCHEMA_CODE, projectMemberString,true);
+                        }
+                        if(chuanyunSaveDTO.getSuccessful()){
+//                        log.info("新增项目成员成本汇总成功");
+                        }else{
+                            log.warn("新增项目成员成本汇总失败");
+                        }
+                    } catch (JsonProcessingException | BigSizeException e) {
+                        e.printStackTrace();
+                        log.warn("########"+chuanyunMemberCostDO+"");
                     }
-                } catch (JsonProcessingException | BigSizeException e) {
-                    e.printStackTrace();
                 }
+
             });
             //项目汇总
            List<ChuanyunProjectCostDO> list1 = chuanyunProjectCostDao.getProjectCost();
@@ -386,32 +402,33 @@ public class ChuanyunProjectScheduledTask {
                projectCostDO.setCost(chuanyunProjectCostDO.getCost());
                projectCostDO.setProjectId(chuanyunProjectCostDO.getProjectId());
                projectCostDO.setTotalHour(chuanyunProjectCostDO.getTotalHour());
-               ChuanyunProjectCostDO oldPeojectDO = chuanyunProjectCostDao.findByProjectId(chuanyunProjectCostDO.getProjectId());
-               if (oldPeojectDO !=null) {
-                   chuanyunProjectCostDao.delete(oldPeojectDO);
+               ChuanyunProjectCostDO oldProjectDO = chuanyunProjectCostDao.findByProjectId(chuanyunProjectCostDO.getProjectId());
+               if (oldProjectDO !=null) {
+                   chuanyunProjectCostDao.delete(oldProjectDO);
                }
                chuanyunProjectCostDao.save(projectCostDO);
                try {
-                   ChuanyunProjectTotalCostDO chuanyunProjectTotalCostDO = new ChuanyunProjectTotalCostDO();
-                   chuanyunProjectTotalCostDO.setProjectId(chuanyunProjectCostDO.getProjectId());
-                   chuanyunProjectTotalCostDO.setCost(chuanyunProjectCostDO.getCost());
-                   chuanyunProjectTotalCostDO.setWorkHour(chuanyunProjectCostDO.getTotalHour());
-                   List<String> macthers = new ArrayList<>();
-                   macthers.add("F0000001_2,"+chuanyunProjectCostDO.getProjectId());
-                   var filter= Filter.instance(0,1,true,"And",macthers);
+                   ChuanyunProjectTotalCostDTO chuanyunProjectTotalCostDTO = new ChuanyunProjectTotalCostDTO();
+                   chuanyunProjectTotalCostDTO.setProjectType(chuanyunProjectCostDO.getProjectType());
+                   chuanyunProjectTotalCostDTO.setProjectId(chuanyunProjectCostDO.getProjectId());
+                   chuanyunProjectTotalCostDTO.setCost(chuanyunProjectCostDO.getCost());
+                   chuanyunProjectTotalCostDTO.setWorkHour(chuanyunProjectCostDO.getTotalHour());
+                   List<String> matchers = new ArrayList<>();
+                   matchers.add("F0000001_2,"+chuanyunProjectCostDO.getProjectId());
+                   var filter= Filter.instance(0,1,true,"And",matchers);
                    var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectTotalCostDO.SCHEMA_CODE,filter);
-                   var projecttotalString=objectMapper.writeValueAsString(chuanyunProjectTotalCostDO);
+                   var projectTotalString=objectMapper.writeValueAsString(chuanyunProjectTotalCostDTO);
                    ChuanyunSaveDTO chuanyunSaveDTO;
                    if (chuanyunFindAllResponse.getReturnData()!=null) {
                        List<ChuanyunProjectTotalCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-                       ChuanyunProjectTotalCostDO chuanyunProjectTotalCostDO1 = result.get(0);
-                       chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectTotalCostDO.SCHEMA_CODE,chuanyunProjectTotalCostDO1.getObjectId(),projecttotalString);
+                       ChuanyunProjectTotalCostDO firstResult = result.get(0);
+                       chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectTotalCostDO.SCHEMA_CODE,firstResult.getObjectId(),projectTotalString);
                    }else {
-                       chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectTotalCostDO.SCHEMA_CODE,projecttotalString,true);
+                       chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectTotalCostDO.SCHEMA_CODE,projectTotalString,true);
 
                    }
                    if(chuanyunSaveDTO.getSuccessful()){
-                       log.info("新增项目成本汇总成功");
+//                       log.info("新增项目成本汇总成功");
                    }else{
                        log.warn("新增项目成本汇总失败");
                    }
@@ -423,98 +440,232 @@ public class ChuanyunProjectScheduledTask {
     }
 
     /**
-     * 工时标准化
-     * @param chuanyunUserCompanyDO
+     * 员工单日、各个项目工时标准化,并保存
+     * @param chuanyunUserCompanyDO 员工信息
      */
     private void standardHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
         BigDecimal standard = new BigDecimal(8);
         //每人每个项目每天工时
         List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
         selfList.forEach(self->{
-            ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
-            chuanyunSelfWorkHourDO.setUserId(chuanyunUserCompanyDO.getUserId());
-            chuanyunSelfWorkHourDO.setProjectId(self.getProjectId());
-            chuanyunSelfWorkHourDO.setDayLogDate(self.getDayLogDate());
-            //每人每天工时
-            ChuanyunWorkHourDO chuanyunWorkHourDO = chuanyunWorkHourDao.getDayWorkHour(chuanyunUserCompanyDO.getUserId(),self.getDayLogDate());
-            //工时标准化
-            if (chuanyunWorkHourDO != null) {
-                if (chuanyunWorkHourDO.getHoursWorked().intValue()<8) {
-                    chuanyunSelfWorkHourDO.setStandardWorkHour(self.getHoursWorked());
-                }else {
-                    BigDecimal personDays = (self.getHoursWorked().divide(chuanyunWorkHourDO.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
-                    chuanyunSelfWorkHourDO.setStandardWorkHour(personDays);
+            try{
+                ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
+                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 chuanyunSelfWorkHourDO1 = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDate(chuanyunUserCompanyDO.getUserId(),self.getProjectId(),self.getDayLogDate());
-                if (chuanyunSelfWorkHourDO1!=null) {
-                    chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
+                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(),self.getProjectId(),self.getDayLogDate());
+                    if (chuanyunSelfWorkHourDO1!=null) {
+                        chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
+                    }
+                    chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
+//                log.info("工时标准化新增成功");
                 }
-                chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
-                log.info("工时标准化新增成功");
+            }catch (Exception e){
+                log.error(e.getMessage());
+                log.error(""+self);
+                e.printStackTrace();
             }
         });
     }
 
     /**
-     * 薪资成本
-     * @param chuanyunUserCompanyDO
+     * 员工每月、各个项目标准工时会职工
+     * @param chuanyunUserCompanyDO 员工信息
      */
-    private void selfCost(ChuanyunUserCompanyDO 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->{
-            DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            //获取人员月度标准工时汇总
             ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()));
+
+            //获取人员月度工资信息
+            //TODO 张曦铭的薪资信息同步之后需要使用U9中的数据更新薪资信息
             ChuanyunPayrollDO chuanyunPayrollDO = chuanyunPayrollDao.getPayroll(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()));
             ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
-            ChuanyunMemberMonthCostDO chuanyunMemberMonthCostDO = new ChuanyunMemberMonthCostDO();
+            ChuanyunMemberMonthCostDTO chuanyunMemberMonthCostDTO = new ChuanyunMemberMonthCostDTO();
             if (chuanyunPayrollDO != null) {
                 BigDecimal cost = (projectMonth.getStandardWorkHour().divide(monthHour.getStandardWorkHour(), 2, RoundingMode.HALF_UP)).multiply(chuanyunPayrollDO.getWagesPayable());
                 chuanyunSelfCostDO.setCost(cost);
-                chuanyunMemberMonthCostDO.setCost(cost);
+                chuanyunMemberMonthCostDTO.setCost(cost);
+            }else{
+                chuanyunSelfCostDO.setCost(BigDecimal.ZERO);
+                chuanyunMemberMonthCostDTO.setCost(BigDecimal.ZERO);
             }
+            chuanyunSelfCostDO.setMonthlyTotalHour(monthHour.getStandardWorkHour());
             chuanyunSelfCostDO.setProjectId(projectMonth.getProjectId());
+            chuanyunSelfCostDO.setProjectType(projectMonth.getProjectType());
             chuanyunSelfCostDO.setUserId(projectMonth.getUserId());
             DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-01 HH:mm:ss");
-            String newdate = dateTimeFormatter.format(projectMonth.getDayLogDate());
-            LocalDateTime dt = LocalDateTime.parse(newdate,df);
+            String newDate = dateTimeFormatter.format(projectMonth.getDayLogDate());
+            LocalDateTime dt = LocalDateTime.parse(newDate,df);
             chuanyunSelfCostDO.setDayLogDate(dt);
-            chuanyunSelfCostDO.setTotalHour(monthHour.getStandardWorkHour());
+            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);
+
+
             //更新氚云数据
-            chuanyunMemberMonthCostDO.setProjectId(projectMonth.getProjectId());
-            chuanyunMemberMonthCostDO.setUserId(projectMonth.getUserId());
-            chuanyunMemberMonthCostDO.setDayLogDate(dt);
-            chuanyunMemberMonthCostDO.setWorkHour(monthHour.getStandardWorkHour());
+            chuanyunMemberMonthCostDTO.setProjectId(projectMonth.getProjectId());
+            chuanyunMemberMonthCostDTO.setProjectType(projectMonth.getProjectType());
+            chuanyunMemberMonthCostDTO.setUserId(projectMonth.getUserId());
+            chuanyunMemberMonthCostDTO.setMonthWorkHour(monthHour.getStandardWorkHour());
+            chuanyunMemberMonthCostDTO.setDayLogDate(dt);
+            chuanyunMemberMonthCostDTO.setWorkHour(projectMonth.getStandardWorkHour());
             try {
-                List<String> macthers = new ArrayList<>();
-                macthers.add("F0000003_2,"+projectMonth.getProjectId());
-                macthers.add("F0000002_2,"+projectMonth.getUserId());
-                macthers.add("F0000004_2,"+dt);
-                var filter= Filter.instance(0,1,true,"And",macthers);
+                List<String> matchers = new ArrayList<>();
+                matchers.add("F0000003_2,"+projectMonth.getProjectId());
+                matchers.add("F0000002_2,"+projectMonth.getUserId());
+                matchers.add("F0000004_2,"+dt);
+                var filter= Filter.instance(0,1,true,"And",matchers);
                 var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
-                var membermonthString=objectMapper.writeValueAsString(chuanyunMemberMonthCostDO);
+                var memberMonthString=objectMapper.writeValueAsString(chuanyunMemberMonthCostDTO);
                 ChuanyunSaveDTO chuanyunSaveDTO;
                 if (chuanyunFindAllResponse.getReturnData()!=null){
                     List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-                    ChuanyunMemberMonthCostDO chuanyunMemberMonthCostDO1 = result.get(0);
-                    chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE,chuanyunMemberMonthCostDO1.getObjectId(),membermonthString);
+                    ChuanyunMemberMonthCostDO firstResult = result.get(0);
+                    chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE,firstResult.getObjectId(),memberMonthString);
                 }else {
-                    chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE,membermonthString,true);
+                    chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE,memberMonthString,true);
                 }
                 if(chuanyunSaveDTO.getSuccessful()){
-                    log.info("新增项目成员月度成本汇总成功");
+//                    log.info("新增项目成员月度成本汇总成功");
                 }else{
                     log.warn("新增项目成员月度成本汇总失败");
                 }
             } catch (JsonProcessingException | BigSizeException e) {
                 e.printStackTrace();
+                log.warn("########"+projectMonth+"");
             }
         });
     }
 }
+
+@Data
+class ChuanyunMemberMonthCostDTO{
+    /**
+     * 项目ID
+     */
+    @JsonProperty("F0000003")
+    private String projectId;
+
+    /**
+     * 项目类型
+     */
+    @JsonProperty("F0000008")
+    private String projectType;
+
+    /**
+     * 用户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;
+}
+
+@Data
+class ChuanyunProjectMemberCostDTO {
+
+    /**
+     * 项目ID
+     */
+    @JsonProperty("F0000001")
+    private String projectId;
+
+    /**
+     * 项目类型
+     */
+    @JsonProperty("F0000005")
+    private String projectType;
+
+    /**
+     * 用户ID
+     */
+    @JsonProperty("F0000002")
+    private String userId;
+
+    /**
+     * 工时
+     */
+    @JsonProperty("F0000003")
+    private BigDecimal workHour;
+
+    /**
+     * 成本
+     */
+    @JsonProperty("F0000004")
+    private BigDecimal cost;
+}
+
+@Data
+class ChuanyunProjectTotalCostDTO{
+
+    /**
+     * 项目ID
+     */
+    @JsonProperty("F0000001")
+    private String projectId;
+
+    /**
+     * 项目类型
+     */
+    @JsonProperty("F0000004")
+    private String projectType;
+
+    /**
+     * 工时
+     */
+    @JsonProperty("F0000003")
+    private BigDecimal workHour;
+
+    /**
+     * 成本
+     */
+    @JsonProperty("F0000002")
+    private BigDecimal cost;
+}