Browse Source

1.离职人员工时标准化

WoNiu 4 years ago
parent
commit
156b78837d

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

@@ -35,7 +35,7 @@ public interface ChuanyunWeekMemberHourDao extends GalaxisRepository<ChuanyunWee
             "project_type," +
             "`status`" +
             "FROM chuanyun_self_work_hour " +
-            "WHERE project_id !='' " +
+            "WHERE project_id !='' and LENGTH(user_id) = CHAR_LENGTH(user_id)" +
             "GROUP BY chuanyun_self_work_hour.project_id," +
             "chuanyun_self_work_hour.project_type," +
             "chuanyun_self_work_hour.user_id," +
@@ -59,6 +59,7 @@ public interface ChuanyunWeekMemberHourDao extends GalaxisRepository<ChuanyunWee
             "WHERE project_id !='' " +
             "AND WEEKOFYEAR(chuanyun_self_work_hour.day_log_date)>=(WEEKOFYEAR(NOW())-4)" +
             "AND DATE_FORMAT(day_log_date,'%Y')=YEAR(NOW()) " +
+            "and LENGTH(user_id) = CHAR_LENGTH(user_id) " +
             "GROUP BY chuanyun_self_work_hour.project_id," +
             "chuanyun_self_work_hour.project_type," +
             "chuanyun_self_work_hour.user_id," +

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

@@ -4,6 +4,7 @@ package com.galaxis.manatee.dao;
 import com.galaxis.capsule.util.GalaxisRepository;
 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 java.time.LocalDateTime;
@@ -39,6 +40,27 @@ public interface ChuanyunWorkHourDao extends GalaxisRepository<ChuanyunWorkHourD
             nativeQuery = true)
     List<ChuanyunWorkHourDO> getSelfWorkHour(String userId);
 
+
+    /**
+     * 获取离职人员每天每个项目工时
+     * @return
+     */
+    @Query(value="SELECT\n" +
+            "\tchuanyun_day_log.project_id,\n" +
+            "  chuanyun_day_log.project_type,\n" +
+            "  chuanyun_log.user_id,\n" +
+            "  chuanyun_day_log.day_log_date,\n" +
+            "  chuanyun_day_log.hours_worked,\n" +
+            "  chuanyun_log.`status`,\n" +
+            "  chuanyun_day_log.object_id\n" +
+            "FROM\n" +
+            "\tchuanyun_log\n" +
+            "LEFT JOIN chuanyun_day_log ON chuanyun_log.object_id = chuanyun_day_log.parent_object_id\n" +
+            "WHERE\n" +
+            "\tLENGTH(chuanyun_log.user_id) != CHAR_LENGTH(chuanyun_log.user_id)\n" +
+            "  AND project_id!=''",nativeQuery = true)
+    List<ChuanyunWorkHourDO> getQuitSelfWorkHour();
+
     /**
      * 根据用户Id获取用户最近一个月日志明细,并按日期拍
      * @param userId
@@ -84,4 +106,31 @@ public interface ChuanyunWorkHourDao extends GalaxisRepository<ChuanyunWorkHourD
             "chuanyun_day_log.day_log_date",
             nativeQuery = true)
     ChuanyunWorkHourDO getDayWorkHour(String userId,LocalDateTime day);
+
+    /**
+     * 离职人员每天工时
+     * @param userId
+     * @param dayLogDate
+     * @return
+     */
+    @Query(value="SELECT\n" +
+            "\tchuanyun_day_log.project_id,\n" +
+            "\tchuanyun_day_log.project_type,\n" +
+            "\tchuanyun_log.user_id,\n" +
+            "\tchuanyun_day_log.day_log_date,\n" +
+            "\tSUM(\n" +
+            "\t\tchuanyun_day_log.hours_worked\n" +
+            "\t) AS hours_worked,\n" +
+            "\tchuanyun_log.`status`,\n" +
+            "\tchuanyun_day_log.object_id\n" +
+            "FROM\n" +
+            "\tchuanyun_log\n" +
+            "LEFT JOIN chuanyun_day_log ON chuanyun_log.object_id = chuanyun_day_log.parent_object_id\n" +
+            "WHERE\n" +
+            "chuanyun_log.user_id = ?1 AND chuanyun_day_log.day_log_date=?2 \n" +
+            "GROUP BY\n" +
+            "\tchuanyun_log.user_id,\n" +
+            "\tchuanyun_day_log.day_log_date",nativeQuery = true)
+    ChuanyunWorkHourDO getQuitDayWorkHour(@Param("userId")String userId,@Param("dayLogDate")LocalDateTime dayLogDate);
+
 }

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

@@ -60,8 +60,7 @@ public class ChuanyunHumanResourceScheduledTask {
     /**
      * 每天3点更新日志记录
      */
-//    @Scheduled(cron = "0 0 1 * * *")
-    @Scheduled(fixedDelay = 3600000L)
+    @Scheduled(cron = "0 0 1 * * *")
     private void updateLog() {
         var objectMapper = new ObjectMapper();
         var start = 0;

+ 38 - 0
src/main/java/com/galaxis/manatee/task/WorkHourStatisticsRecently.java

@@ -57,6 +57,7 @@ public class WorkHourStatisticsRecently {
     public void updateHour() {
         dayLog();
         standardWorkHour();
+        quitStandradHour();
         standardWeeklyWorkHour();
         standardMonthlyWorkHour();
     }
@@ -266,6 +267,43 @@ public class WorkHourStatisticsRecently {
     }
 
     /**
+     * 离职人员工时标准化
+     */
+    private void quitStandradHour() {
+        List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getQuitSelfWorkHour();
+        selfList.forEach(self -> {
+            BigDecimal standard = new BigDecimal(8);
+            if (self!=null){
+                ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
+                chuanyunSelfWorkHourDO.setStatus(self.getStatus());
+                chuanyunSelfWorkHourDO.setUserId(self.getUserId());
+                chuanyunSelfWorkHourDO.setProjectType(self.getProjectType());
+                if(ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())){
+                    chuanyunSelfWorkHourDO.setProjectId(ChuanYunConstant.PRODUCTION_PROJECT_ID);
+                }else{
+                    chuanyunSelfWorkHourDO.setProjectId(self.getProjectId());
+                }
+                chuanyunSelfWorkHourDO.setDayLogDate(self.getDayLogDate());
+                ChuanyunWorkHourDO chuanyunWorkHourDO = chuanyunWorkHourDao.getQuitDayWorkHour(self.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.findByUserIdAndAndProjectIdAndAndDayLogDateAndProjectType(self.getUserId(),ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())?ChuanYunConstant.PRODUCTION_PROJECT_ID:self.getProjectId(),self.getDayLogDate(),self.getProjectType());
+                    if (chuanyunSelfWorkHourDO1!=null){
+                        chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
+                    }
+                    chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
+                    log.info(chuanyunSelfWorkHourDO.getUserId()+"工时标准化");
+                }
+            }
+        });
+    }
+
+    /**
      * 人员-项目-周度工时汇总
      */
     private void standardWeeklyWorkHour() {