瀏覽代碼

1.氚云新增工时标准化

WoNiu 4 年之前
父節點
當前提交
8f1629a557

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

@@ -24,8 +24,9 @@ public interface ChuanyunMemberCostDao extends GalaxisRepository<ChuanyunMemberC
             "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 " +
+            "chuanyun_self_cost.user_id," +
+            "chuanyun_self_cost.monthly_total_hour AS person_days"+
+            " FROM chuanyun_self_cost " +
             "GROUP BY chuanyun_self_cost.project_id," +
             "chuanyun_self_cost.user_id",
             nativeQuery = true)

+ 10 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunPersonDaysDao.java

@@ -40,4 +40,14 @@ public interface ChuanyunPersonDaysDao extends GalaxisRepository<ChuanyunPersonD
             " GROUP BY chuanyun_day_log.project_id,chuanyun_log.user_id",nativeQuery = true)
     ChuanyunPersonDaysDO getTotalWorkHour(@Param("userId") String userId, @Param("projectId") String projectId);
 
+    /**
+     * 项目每人每天工时
+     * @param projectId
+     * @return
+     */
+    @Query(value="SELECT chuanyun_day_log.object_id,chuanyun_day_log.hours_worked,chuanyun_log.user_id,chuanyun_day_log.project_id,chuanyun_day_log.project_type FROM chuanyun_day_log"+
+            "\tLEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id WHERE project_id = ?1 AND chuanyun_log.user_id = ?2"+
+            "\tGROUP BY chuanyun_day_log.project_id,chuanyun_log.user_id,chuanyun_day_log.day_log_date",nativeQuery = true)
+    List<ChuanyunPersonDaysDO> getSelfUserWorkHour(@Param("projectId")String projectId,@Param("userId")String userId);
+
 }

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

@@ -21,6 +21,7 @@ public interface ChuanyunProjectCostDao extends GalaxisRepository<ChuanyunProjec
     @Query(value="SELECT chuanyun_member_cost.object_id," +
             "SUM(chuanyun_member_cost.cost) AS cost," +
             "SUM(chuanyun_member_cost.total_hour) AS total_hour," +
+            "SUM(chuanyun_member_cost.person_days) AS person_days," +
             "chuanyun_member_cost.project_type," +
             "chuanyun_member_cost.project_id " +
             "FROM chuanyun_member_cost " +

+ 3 - 2
src/main/java/com/galaxis/manatee/dao/ChuanyunWorkHourDao.java

@@ -21,14 +21,15 @@ public interface ChuanyunWorkHourDao extends GalaxisRepository<ChuanyunWorkHourD
      * @return  日志数据
      */
     @Query(value="SELECT chuanyun_day_log.object_id," +
-            "chuanyun_day_log.hours_worked," +
+            "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 = ? ORDER BY day_log_date",
+            " WHERE chuanyun_log.user_id = ? " +
+            " GROUP BY chuanyun_day_log.project_id,chuanyun_log.user_id,chuanyun_day_log.day_log_date",
             nativeQuery = true)
     List<ChuanyunWorkHourDO> getSelfWorkHour(String userId);
 

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

@@ -39,4 +39,6 @@ public class ChuanyunMemberCostDO {
     private BigDecimal totalHour;
 
     private BigDecimal cost;
+
+    private BigDecimal personDays;
 }

+ 45 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunMemberHourDO.java

@@ -0,0 +1,45 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+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.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunMemberHourDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D0017899cae010a8a5741b5be13a1fa7f67330d";
+
+    @JsonProperty("F0000002")
+    private String userId;
+
+    private String projectType;
+
+    @JsonProperty("F0000001")
+    private String projectId;
+
+    @JsonProperty("F0000003")
+    @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
+    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+    private LocalDateTime dayLogDate;
+
+    @JsonProperty("F0000004")
+    private BigDecimal standardWorkHour;
+}

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

@@ -32,4 +32,6 @@ public class ChuanyunProjectCostDO {
     private BigDecimal totalHour;
 
     private BigDecimal cost;
+
+    private BigDecimal personDays;
 }

+ 126 - 8
src/main/java/com/galaxis/manatee/task/ChuanyunProjectScheduledTask.java

@@ -231,7 +231,13 @@ public class ChuanyunProjectScheduledTask {
                         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);
+                        ChuanyunAdjustAccountDTO chuanyunAdjustAccountDTO = new ChuanyunAdjustAccountDTO();
+                        chuanyunAdjustAccountDTO.setProjectCode(chuanyunProjectDO.getProjectCode());
+                        chuanyunAdjustAccountDTO.setPersonDays(chuanyunAdjustAccountDO.getPersonDays());
+                        chuanyunAdjustAccountDTO.setLaborCost(chuanyunAdjustAccountDO.getLaborCost());
+                        chuanyunAdjustAccountDTO.setImplementationCosts(chuanyunAdjustAccountDO.getImplementationCosts());
+                        chuanyunAdjustAccountDTO.setProjectId(chuanyunProjectDO.getObjectId());
+                        var adjustString=objectMapper.writeValueAsString(chuanyunAdjustAccountDTO);
                         ChuanyunSaveDTO chuanyunSaveDTO;
                         if (chuanyunFindAllResponse.getReturnData() != null) {
                             List<ChuanyunAdjustAccountDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
@@ -304,7 +310,7 @@ public class ChuanyunProjectScheduledTask {
         //项目每人每天工时
        List<ChuanyunPersonDaysDO> selfWorkHourList = chuanyunPersonDaysDao.getSelfWorkHour(projectId);
        for (ChuanyunPersonDaysDO chuanyunPersonDaysDO : selfWorkHourList) {
-           //项目总工时
+           //人员-项目总工时
            ChuanyunPersonDaysDO totalWorkHour = chuanyunPersonDaysDao.getTotalWorkHour(chuanyunPersonDaysDO.getUserId(),projectId);
            if (totalWorkHour != null && totalWorkHour.getHoursWorked().intValue()>0){
                BigDecimal totalDays = (chuanyunPersonDaysDO.getHoursWorked().divide(totalWorkHour.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
@@ -346,17 +352,31 @@ public class ChuanyunProjectScheduledTask {
                 if(StringUtils.isEmpty(chuanyunMemberCostDO.getProjectId())||StringUtils.isEmpty(chuanyunMemberCostDO.getUserId())){
                     log.info("########"+chuanyunMemberCostDO+"");
                 }else{
+                    //计算项目中每人人天
+                    List<ChuanyunPersonDaysDO> personDaysList = chuanyunPersonDaysDao.getSelfUserWorkHour(chuanyunMemberCostDO.getProjectId(),chuanyunMemberCostDO.getUserId());
+                    BigDecimal standard = new BigDecimal(8);
+                    BigDecimal personDays = new BigDecimal(0);
+                    for (ChuanyunPersonDaysDO chuanyunPersonDaysDO : personDaysList) {
+                        //人员-项目总工时
+                        ChuanyunPersonDaysDO totalWorkHour = chuanyunPersonDaysDao.getTotalWorkHour(chuanyunPersonDaysDO.getUserId(),chuanyunMemberCostDO.getProjectId());
+                        if (totalWorkHour != null && totalWorkHour.getHoursWorked().intValue()>0){
+                            BigDecimal totalDays = (chuanyunPersonDaysDO.getHoursWorked().divide(totalWorkHour.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
+                            personDays= personDays.add(totalDays);
+                        }
+                    }
                     ChuanyunMemberCostDO memberCostDO = new ChuanyunMemberCostDO();
                     memberCostDO.setCost(chuanyunMemberCostDO.getCost());
                     memberCostDO.setProjectType(chuanyunMemberCostDO.getProjectType());
                     memberCostDO.setProjectId(chuanyunMemberCostDO.getProjectId());
                     memberCostDO.setUserId(chuanyunMemberCostDO.getUserId());
                     memberCostDO.setTotalHour(chuanyunMemberCostDO.getTotalHour());
+                    memberCostDO.setPersonDays(personDays);
                     ChuanyunMemberCostDO oldCostDO = chuanyunMemberCostDao.findByUserIdAndProjectId(chuanyunMemberCostDO.getUserId(),chuanyunMemberCostDO.getProjectId());
                     if (oldCostDO !=null) {
                         chuanyunMemberCostDao.delete(oldCostDO);
                     }
                     chuanyunMemberCostDao.save(memberCostDO);
+
                     //更新氚云数据
                     try {
                         ChuanyunProjectMemberCostDTO chuanyunProjectMemberCostDTO = new ChuanyunProjectMemberCostDTO();
@@ -365,6 +385,7 @@ public class ChuanyunProjectScheduledTask {
                         chuanyunProjectMemberCostDTO.setCost(chuanyunMemberCostDO.getCost());
                         chuanyunProjectMemberCostDTO.setWorkHour(chuanyunMemberCostDO.getTotalHour());
                         chuanyunProjectMemberCostDTO.setProjectType(chuanyunMemberCostDO.getProjectType());
+                        chuanyunProjectMemberCostDTO.setPersonDays(personDays);
                         List<String> matchers = new ArrayList<>();
                         matchers.add("F0000001_2,"+chuanyunMemberCostDO.getProjectId());
                         matchers.add("F0000002_2,"+chuanyunMemberCostDO.getUserId());
@@ -398,6 +419,7 @@ public class ChuanyunProjectScheduledTask {
                projectCostDO.setCost(chuanyunProjectCostDO.getCost());
                projectCostDO.setProjectId(chuanyunProjectCostDO.getProjectId());
                projectCostDO.setTotalHour(chuanyunProjectCostDO.getTotalHour());
+               projectCostDO.setPersonDays(chuanyunProjectCostDO.getPersonDays());
                ChuanyunProjectCostDO oldProjectDO = chuanyunProjectCostDao.findByProjectId(chuanyunProjectCostDO.getProjectId());
                if (oldProjectDO !=null) {
                    chuanyunProjectCostDao.delete(oldProjectDO);
@@ -409,6 +431,7 @@ public class ChuanyunProjectScheduledTask {
                    chuanyunProjectTotalCostDTO.setProjectId(chuanyunProjectCostDO.getProjectId());
                    chuanyunProjectTotalCostDTO.setCost(chuanyunProjectCostDO.getCost());
                    chuanyunProjectTotalCostDTO.setWorkHour(chuanyunProjectCostDO.getTotalHour());
+                   chuanyunProjectTotalCostDTO.setPersonDays(chuanyunProjectCostDO.getPersonDays());
                    List<String> matchers = new ArrayList<>();
                    matchers.add("F0000001_2,"+chuanyunProjectCostDO.getProjectId());
                    var filter= Filter.instance(0,1,true,"And",matchers);
@@ -470,6 +493,33 @@ public class ChuanyunProjectScheduledTask {
                     }
                     chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
 //                log.info("工时标准化新增成功");
+                    //更新氚云数据
+
+                    ChuanyunSelfWorkHourDTO chuanyunSelfWorkHourDTO = new ChuanyunSelfWorkHourDTO();
+                    chuanyunSelfWorkHourDTO.setProjectId(self.getProjectId());
+                    chuanyunSelfWorkHourDTO.setUserId(chuanyunUserCompanyDO.getUserId());
+                    chuanyunSelfWorkHourDTO.setDayLogDate(self.getDayLogDate());
+                    chuanyunSelfWorkHourDTO.setStandardWorkHour(chuanyunSelfWorkHourDO.getStandardWorkHour());
+                    List<String> matchers = new ArrayList<>();
+                    matchers.add("F0000001_2,"+self.getProjectId());
+                    matchers.add("F0000002_2,"+chuanyunUserCompanyDO.getUserId());
+                    matchers.add("F0000003_2,"+self.getDayLogDate());
+                    var filter= Filter.instance(0,1,true,"And",matchers);
+                    var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberHourDO.SCHEMA_CODE,filter);
+                    var selfMonthString=objectMapper.writeValueAsString(chuanyunSelfWorkHourDTO);
+                    ChuanyunSaveDTO chuanyunSaveDTO;
+                    if (chuanyunFindAllResponse.getReturnData()!=null){
+                        List<ChuanyunMemberHourDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                        ChuanyunMemberHourDO firstResult = result.get(0);
+                        chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
+                    }else {
+                        chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberHourDO.SCHEMA_CODE,selfMonthString,true);
+                    }
+                    if(chuanyunSaveDTO.getSuccessful()){
+//                    log.info("新增工时标准化成功");
+                    }else{
+                        log.warn("新增工时标准化失败");
+                    }
                 }
             }catch (Exception e){
                 log.error(e.getMessage());
@@ -509,10 +559,10 @@ public class ChuanyunProjectScheduledTask {
             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);
-            chuanyunSelfCostDO.setDayLogDate(dt);
+//            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-01 HH:mm:ss");
+//            String newDate = dateTimeFormatter.format(projectMonth.getDayLogDate());
+//            LocalDateTime dt = LocalDateTime.parse(newDate,df);
+            chuanyunSelfCostDO.setDayLogDate(projectMonth.getDayLogDate().withDayOfMonth(1));
             chuanyunSelfCostDO.setTotalHour(projectMonth.getStandardWorkHour());
             ChuanyunSelfCostDO oldSelfDO = chuanyunSelfCostDao.getOldSelfDO(chuanyunSelfCostDO.getUserId(),chuanyunSelfCostDO.getProjectId(),df.format(chuanyunSelfCostDO.getDayLogDate()));
             if (oldSelfDO !=null) {
@@ -526,13 +576,13 @@ public class ChuanyunProjectScheduledTask {
             chuanyunMemberMonthCostDTO.setProjectType(projectMonth.getProjectType());
             chuanyunMemberMonthCostDTO.setUserId(projectMonth.getUserId());
             chuanyunMemberMonthCostDTO.setMonthWorkHour(monthHour.getStandardWorkHour());
-            chuanyunMemberMonthCostDTO.setDayLogDate(dt);
+            chuanyunMemberMonthCostDTO.setDayLogDate(projectMonth.getDayLogDate().withDayOfMonth(1));
             chuanyunMemberMonthCostDTO.setWorkHour(projectMonth.getStandardWorkHour());
             try {
                 List<String> matchers = new ArrayList<>();
                 matchers.add("F0000003_2,"+projectMonth.getProjectId());
                 matchers.add("F0000002_2,"+projectMonth.getUserId());
-                matchers.add("F0000004_2,"+dt);
+                matchers.add("F0000004_2,"+projectMonth.getDayLogDate().withDayOfMonth(1));
                 var filter= Filter.instance(0,1,true,"And",matchers);
                 var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
                 var memberMonthString=objectMapper.writeValueAsString(chuanyunMemberMonthCostDTO);
@@ -636,6 +686,12 @@ class ChuanyunProjectMemberCostDTO {
      */
     @JsonProperty("F0000004")
     private BigDecimal cost;
+
+    /**
+     * 总人天
+     */
+    @JsonProperty("F0000006")
+    private BigDecimal personDays;
 }
 
 @Data
@@ -664,4 +720,66 @@ class ChuanyunProjectTotalCostDTO{
      */
     @JsonProperty("F0000002")
     private BigDecimal cost;
+
+    /**
+     * 总人天
+     */
+    @JsonProperty("F0000005")
+    private BigDecimal personDays;
 }
+
+@Data
+class ChuanyunAdjustAccountDTO {
+    @JsonProperty("F0000002")
+    private String projectCode;
+
+
+    /**
+     * 核算实施人天
+     */
+    @JsonProperty("F0000003")
+    private BigDecimal personDays;
+
+    /**
+     * 核算实施人力成本
+     */
+    @JsonProperty("F0000004")
+    private BigDecimal laborCost;
+
+    /**
+     * 核算实施费用
+     */
+    @JsonProperty("F0000005")
+    private BigDecimal implementationCosts;
+
+    /**
+     *核算实施总成本
+     */
+    @JsonProperty("F0000006")
+    private BigDecimal totalImplementationCosts;
+
+    /**
+     * 项目
+     */
+    @JsonProperty("F0000007")
+    private String projectId;
+}
+
+@Data
+class ChuanyunSelfWorkHourDTO {
+
+    @JsonProperty("F0000002")
+    private String userId;
+
+    @JsonProperty("F0000001")
+    private String projectId;
+
+    @JsonProperty("F0000003")
+    @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
+    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+    private LocalDateTime dayLogDate;
+
+    @JsonProperty("F0000004")
+    private BigDecimal standardWorkHour;
+}
+