Explorar o código

1.新增工时检测

WoNiu %!s(int64=4) %!d(string=hai) anos
pai
achega
b0ba6756d0

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

@@ -28,6 +28,8 @@ public interface ChuanyunProjectCostDao extends GalaxisRepository<ChuanyunProjec
             nativeQuery = true)
     List<ChuanyunProjectCostDO> getProjectCost();
 
+
+
     @Query(value="SELECT SUM(chuanyun_self_work_hour.standard_work_hour) AS total_hour," +
             "SUM(chuanyun_self_work_hour.standard_work_hour)/8 AS person_days,chuanyun_self_work_hour.project_id," +
             "chuanyun_self_work_hour.project_type,chuanyun_self_work_hour.`status` ,chuanyun_self_work_hour.object_id \n" +

+ 7 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunSelfCostDao.java

@@ -41,6 +41,13 @@ public interface ChuanyunSelfCostDao extends GalaxisRepository<ChuanyunSelfCostD
     Page<ChuanyunSelfCostDO> getRecentlyMonthHour(PageRequest pagerequest);
 
     /**
+     * 根据用户ID获取月工时
+     * @param userId
+     * @return
+     */
+    List<ChuanyunSelfCostDO> findByUserId(String userId);
+
+    /**
      * 根据用户ID和项目ID,日期获取工时成本数据
      * @param userId    用户Id
      * @param projectId 项目Id

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

@@ -2,6 +2,7 @@ package com.galaxis.manatee.dao;
 
 
 import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfCostDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
 import org.springframework.data.domain.Page;
@@ -9,6 +10,7 @@ import org.springframework.data.domain.PageRequest;
 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.awt.print.Pageable;
 import java.time.LocalDateTime;
@@ -115,6 +117,30 @@ public interface ChuanyunSelfWorkHourDao extends GalaxisRepository<ChuanyunSelfW
     List<ChuanyunSelfWorkHourDO> getMonthProjectHourRecently(String userId);
 
     /**
+     * 根据用户Id获取月工时
+     * @param userId
+     * @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.project_type," +
+            "chuanyun_self_work_hour.status," +
+            "chuanyun_self_work_hour.department_id," +
+            "chuanyun_self_work_hour.department_name," +
+            "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.status," +
+            "chuanyun_self_work_hour.project_type",
+            nativeQuery = true)
+    List<ChuanyunSelfWorkHourDO> getMonthProjectHourByUserId(String userId);
+
+    /**
      * 获取人员月度标准工时汇总
      * @param userId    用户ID
      * @param dayLogDate    查询月份日期
@@ -139,4 +165,11 @@ public interface ChuanyunSelfWorkHourDao extends GalaxisRepository<ChuanyunSelfW
             "DATE_FORMAT(chuanyun_self_work_hour.day_log_date,'%Y-%m')",
             nativeQuery = true)
     ChuanyunSelfWorkHourDO getMonthHour(@Param("userId") String userId,@Param("dayLogDate") String dayLogDate,@Param("status")String status);
+
+    /**
+     * 删除个人所有工时
+     * @param userId
+     */
+    @Transactional
+    void deleteByUserId(String userId);
 }

+ 8 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunWeekMemberHourDao.java

@@ -152,4 +152,12 @@ public interface ChuanyunWeekMemberHourDao extends GalaxisRepository<ChuanyunWee
      */
     @Transactional(rollbackFor = Exception.class)
     void deleteByProjectIdAndUserIdAndYearAndWeekAndStatusAndProjectType(String projectId, String userId, String year, String week, String status, String projectType);
+
+    /**
+     * 根据用户ID查询周工时
+     * @param userId
+     * @return
+     */
+    List<ChuanyunWeekMemberHourDO> findByUserId(String userId);
+
 }

+ 77 - 10
src/main/java/com/galaxis/manatee/service/LogCheckService.java

@@ -2,11 +2,11 @@ package com.galaxis.manatee.service;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.dao.ChuanyunSelfCostDao;
 import com.galaxis.manatee.dao.ChuanyunSelfWorkHourDao;
+import com.galaxis.manatee.dao.ChuanyunWeekMemberHourDao;
 import com.galaxis.manatee.dao.ChuanyunWorkHourDao;
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunMemberHourDO;
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
+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.manager.ChuanYunManager;
@@ -31,11 +31,15 @@ public class LogCheckService {
     private final ChuanyunWorkHourDao chuanyunWorkHourDao;
     private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
     private final ChuanYunManager chuanYunManager;
+    private final ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao;
+    private final ChuanyunSelfCostDao chuanyunSelfCostDao;
 
-    public LogCheckService(ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanYunManager chuanYunManager) {
+    public LogCheckService(ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanYunManager chuanYunManager, ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao) {
         this.chuanyunWorkHourDao = chuanyunWorkHourDao;
         this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
         this.chuanYunManager = chuanYunManager;
+        this.chuanyunWeekMemberHourDao = chuanyunWeekMemberHourDao;
+        this.chuanyunSelfCostDao = chuanyunSelfCostDao;
     }
 
     /**
@@ -72,9 +76,41 @@ public class LogCheckService {
      * @throws Exception 用户Id为空异常
      */
     public void checkWeekWorkHour(String userId) throws Exception {
-        //@TODO
-        //***
-        //@TODO
+        if (StringUtils.isEmpty(userId)) {
+            throw new Exception("用户Id为空");
+        }
+        long start = System.currentTimeMillis();
+        log.info("开始核对标准化周工时");
+        List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHourByUserId(userId);
+        List<ChuanyunWeekMemberHourDO> oldlist = chuanyunWeekMemberHourDao.findByUserId(userId);
+        Map<String, Integer> map = new HashMap<>(list.size()+oldlist.size());
+
+        if (list.size()!=oldlist.size()){
+            for (ChuanyunWeekMemberHourDO chuanyunWeekMemberHourDO : list){
+                map.put(chuanyunWeekMemberHourDO.getUserId()+chuanyunWeekMemberHourDO.getProjectId()+chuanyunWeekMemberHourDO.getYear()+chuanyunWeekMemberHourDO.getWeek(),1);
+            }
+            for (ChuanyunWeekMemberHourDO chuanyunWeekMemberHourDO : oldlist){
+                Integer count = map.get(chuanyunWeekMemberHourDO.getUserId()+chuanyunWeekMemberHourDO.getProjectId()+chuanyunWeekMemberHourDO.getYear()+chuanyunWeekMemberHourDO.getWeek());
+                if (count==null){
+                    chuanyunWeekMemberHourDao.delete(chuanyunWeekMemberHourDO);
+                    List<String> matchers = new ArrayList<>();
+                    matchers.add("F0000001_2,"+chuanyunWeekMemberHourDO.getProjectId());
+                    matchers.add("F0000002_2,"+chuanyunWeekMemberHourDO.getUserId());
+                    matchers.add("F0000006_2,"+chuanyunWeekMemberHourDO.getWeek());
+                    matchers.add("F0000008_2,"+chuanyunWeekMemberHourDO.getYear());
+                    var filter = Filter.instance(0, 1, true, "And", matchers);
+                    var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, filter);
+                    ChuanyunSaveDTO chuanyunSaveDTO;
+                    if (chuanyunFindAllResponse.getReturnData() != null) {
+                        List<ChuanyunProjectMemberWeekHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                        });
+                        chuanyunSaveDTO = chuanYunManager.delete(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, result.get(0).getObjectId());
+                    }
+
+                }
+            }
+        }
+        log.info("核对耗时" + (System.currentTimeMillis() - start) + "毫秒");
         updateChuanyunWeekWorkHour();
         updateManateeWeekWorkHour();
     }
@@ -89,9 +125,40 @@ public class LogCheckService {
      * @throws Exception 用户Id为空异常
      */
     public void checkMonthWorkHour(String userId) throws Exception {
-        //@TODO
-        //***
-        //@TODO
+        if (StringUtils.isEmpty(userId)) {
+            throw new Exception("用户Id为空");
+        }
+
+        long start = System.currentTimeMillis();
+        log.info("开始核对标准化月工时");
+        List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHourByUserId(userId);
+        List<ChuanyunSelfCostDO> costDOList = chuanyunSelfCostDao.findByUserId(userId);
+        if (list.size()!=costDOList.size()){
+            Map<String, Integer> map = new HashMap<>(list.size()+costDOList.size());
+            for (ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO : list){
+                map.put(chuanyunSelfWorkHourDO.getUserId()+chuanyunSelfWorkHourDO.getProjectId()+chuanyunSelfWorkHourDO.getDayLogDate().withDayOfMonth(1),1);
+            }
+            for (ChuanyunSelfCostDO chuanyunSelfCostDO : costDOList){
+                Integer count = map.get(chuanyunSelfCostDO.getUserId()+chuanyunSelfCostDO.getProjectId()+chuanyunSelfCostDO.getDayLogDate().withDayOfMonth(1));
+                if (count==null){
+                    chuanyunSelfCostDao.delete(chuanyunSelfCostDO);
+                    List<String> matchers = new ArrayList<>();
+                    matchers.add("F0000003_2,"+chuanyunSelfCostDO.getProjectId());
+                    matchers.add("F0000002_2,"+chuanyunSelfCostDO.getUserId());
+                    matchers.add("F0000004_2,"+chuanyunSelfCostDO.getDayLogDate());
+                    var filter = Filter.instance(0, 1, true, "And", matchers);
+                    var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE, filter);
+                    ChuanyunSaveDTO chuanyunSaveDTO;
+                    if (chuanyunFindAllResponse.getReturnData() != null) {
+                        List<ChuanyunMemberMonthCostDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                        });
+                        chuanyunSaveDTO = chuanYunManager.delete(ChuanyunMemberMonthCostDO.SCHEMA_CODE, result.get(0).getObjectId());
+                    }
+                    log.info(chuanyunSelfCostDO.getUserId()+"删除项目"+chuanyunSelfCostDO.getProjectId()+"时间为"+chuanyunSelfCostDO.getDayLogDate()+"月工时");
+                }
+            }
+        }
+        log.info("核对耗时" + (System.currentTimeMillis() - start) + "毫秒");
         updateChuanyunMonthWorkHour();
         updateManateeMonthWorkHour();
     }