Browse Source

1.修改工时标准化,计算单项目单人单月成本

WoNiu 4 years ago
parent
commit
23d8cd2eb8

+ 5 - 4
src/main/java/com/galaxis/manatee/dao/ChuanyunPersonDaysDao.java

@@ -24,7 +24,7 @@ public interface ChuanyunPersonDaysDao extends GalaxisRepository<ChuanyunPersonD
      * @param projectId
      * @return
      */
-    @Query(value="SELECT chuanyun_day_log.hours_worked,chuanyun_log.user_id,chuanyun_day_log.project_id AS object_id,chuanyun_day_log.project_type FROM chuanyun_day_log"+
+    @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 = ?"+
             "\tGROUP BY chuanyun_day_log.project_id,chuanyun_log.user_id,chuanyun_day_log.day_log_date",nativeQuery = true)
     List<ChuanyunPersonDaysDO> getSelfWorkHour(String projectId);
@@ -34,8 +34,9 @@ public interface ChuanyunPersonDaysDao extends GalaxisRepository<ChuanyunPersonD
      * @param projectId
      * @return
      */
-    @Query(value="SELECT SUM(chuanyun_day_log.hours_worked) AS hours_worked,chuanyun_day_log.project_id AS object_id,chuanyun_day_log.project_type FROM chuanyun_day_log"+
-            " LEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id WHERE project_id = ? GROUP BY chuanyun_day_log.project_id",nativeQuery = true)
-    ChuanyunPersonDaysDO getTotalWorkHour(String projectId);
+    @Query(value="SELECT chuanyun_day_log.object_id,SUM(chuanyun_day_log.hours_worked) AS hours_worked,chuanyun_log.user_id,chuanyun_day_log.project_id 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.project_id=?"+
+            " GROUP BY chuanyun_day_log.project_id,chuanyun_log.user_id",nativeQuery = true)
+    ChuanyunPersonDaysDO getTotalWorkHour(String userId,String projectId);
 
 }

+ 11 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunSelfWorkHourDao.java

@@ -4,12 +4,23 @@ package com.galaxis.manatee.dao;
 import com.galaxis.capsule.util.GalaxisRepository;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Repository
 public interface ChuanyunSelfWorkHourDao extends GalaxisRepository<ChuanyunSelfWorkHourDO,String> {
 
     ChuanyunSelfWorkHourDO findByUserIdAndAndProjectIdAndAndDayLogDate(String userId, String projectId, LocalDateTime dayLogDate);
+
+    @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)
+    List<ChuanyunSelfWorkHourDO> getMonthProjectHour(String userId);
+
+    @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=? AND DATE_FORMAT(chuanyun_self_work_hour.day_log_date,'%Y-%m')=FROM_UNIXTIME(?,'%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(String userId,LocalDateTime workHour);
 }

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

@@ -12,11 +12,11 @@ import java.util.List;
 @Repository
 public interface ChuanyunWorkHourDao extends GalaxisRepository<ChuanyunWorkHourDO,String> {
 
-    @Query(value="SELECT chuanyun_day_log.hours_worked,chuanyun_day_log.project_id,chuanyun_log.user_id,chuanyun_day_log.day_log_date FROM chuanyun_day_log"+
+    @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)
     List<ChuanyunWorkHourDO> getSelfWorkHour(String userId);
 
-    @Query(value="SELECT 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"+
+    @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)
     ChuanyunWorkHourDO getDayWorkHour(String userId, LocalDateTime day);
 }

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

@@ -18,5 +18,7 @@ public class ChuanyunPersonDaysDO {
     @Id
     private String objectId;
 
+    private String userId;
+
     private BigDecimal hoursWorked;
 }

+ 38 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSelfCostDO.java

@@ -0,0 +1,38 @@
+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_COST")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunSelfCostDO {
+    @Id
+    @GeneratedValue(generator = "idGeneratorUser")
+    @GenericGenerator(name ="idGeneratorUser" ,strategy="com.galaxis.capsule.util.GalaxisIdGenerator")
+    private Long objectId;
+
+    private String userId;
+
+    private String projectId;
+
+    @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
+    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+    private LocalDateTime dayLogDate;
+
+    private BigDecimal cost;
+}

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

@@ -21,6 +21,8 @@ import java.time.LocalDateTime;
 public class ChuanyunWorkHourDO {
 
     @Id
+    private String objectId;
+
     private String userId;
 
     private String projectId;

+ 41 - 17
src/main/java/com/galaxis/manatee/task/ChuanyunProjectScheduledTask.java

@@ -206,16 +206,7 @@ public class ChuanyunProjectScheduledTask {
                    }
                 }
                 chuanyunAdjustAccountDO.setImplementationCosts(money);
-                //人力成本
-                BigDecimal laborCost = new BigDecimal(0);
-                List<ChuanyunLaborCostDO> recordlist = chuanyunLaborCostDao.findLaborCost(chuanyunProjectDO.getObjectId());
-                //单个项目每人每月累计和
-                for (ChuanyunLaborCostDO chuanyunLaborCostDO : recordlist) {
-                    if (chuanyunLaborCostDO.getOwnerPayroll()!=null) {
-                        laborCost = laborCost.add(chuanyunLaborCostDO.getOwnerPayroll());
-                    }
-                }
-                chuanyunAdjustAccountDO.setLaborCost(laborCost);
+
                 //核算人天
                 chuanyunAdjustAccountDO.setPersonDays(personDays(chuanyunProjectDO.getObjectId()));
                 //新增
@@ -299,16 +290,20 @@ public class ChuanyunProjectScheduledTask {
        List<ChuanyunPersonDaysDO> selfWorkHourList = chuanyunPersonDaysDao.getSelfWorkHour(projectId);
        for (ChuanyunPersonDaysDO chuanyunPersonDaysDO : selfWorkHourList) {
            //项目总工时
-           ChuanyunPersonDaysDO totalWorkHour = chuanyunPersonDaysDao.getTotalWorkHour(projectId);
-           BigDecimal totalDays = (chuanyunPersonDaysDO.getHoursWorked().divide(totalWorkHour.getHoursWorked(), 2, BigDecimal.ROUND_HALF_UP)).multiply(standard);
-           personDays= personDays.add(totalDays);
+           ChuanyunPersonDaysDO totalWorkHour = chuanyunPersonDaysDao.getTotalWorkHour(projectId,chuanyunPersonDaysDO.getUserId());
+           if (totalWorkHour != null){
+               BigDecimal totalDays = (chuanyunPersonDaysDO.getHoursWorked().divide(totalWorkHour.getHoursWorked(), 2, BigDecimal.ROUND_HALF_UP)).multiply(standard);
+               personDays= personDays.add(totalDays);
+           }
        }
-       return personDays.divide(standard);
-
+       return personDays;
     }
 
-    @Scheduled(fixedDelay = 3600000L)
-    private void laborcost() {
+    /**
+     * 工时标准化
+     */
+//    @Scheduled(fixedDelay = 3600000L)
+    private void stardandHour() {
         var flag = true;
         var pageSize = 20;
         var page = 0;
@@ -352,4 +347,33 @@ public class ChuanyunProjectScheduledTask {
             });
         }
     }
+
+    /**
+     * 每人每项目成本
+     */
+//    @Scheduled(fixedDelay = 3600000L)
+    private void selfCost() {
+        var flag = true;
+        var pageSize = 20;
+        var page = 0;
+        while(flag) {
+            var pageable = PageRequest.of(page, pageSize);
+            var chuanyunUserCompanyDOS = chuanyunUserCompanyDao.findAllByStatus(1, pageable);
+            if (page <= chuanyunUserCompanyDOS.getTotalPages()) {
+                page += 1;
+            } else {
+                flag = false;
+                break;
+            }
+            List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyDOS.getContent();
+            userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
+                //每月每项目工时
+                List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHour(chuanyunUserCompanyDO.getUserId());
+                list.forEach(projectMonth->{
+                    ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(chuanyunUserCompanyDO.getUserId(),projectMonth.getDayLogDate());
+
+                });
+            });
+        }
+    }
 }