Browse Source

1.开放了标准化所有工时的接口。

verguenza 4 years ago
parent
commit
66da46f017

+ 24 - 1
src/main/java/com/galaxis/manatee/controller/TestController.java

@@ -1,6 +1,7 @@
 package com.galaxis.manatee.controller;
 
 import com.galaxis.manatee.service.LogUpdateService;
+import com.galaxis.manatee.task.WorkHourStatistics;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
@@ -15,9 +16,11 @@ import org.springframework.web.bind.annotation.*;
 public class TestController {
 
     private final LogUpdateService logUpdateService;
+    private final WorkHourStatistics workHourStatistics;
 
-    public TestController(com.galaxis.manatee.service.LogUpdateService logUpdateService) {
+    public TestController(LogUpdateService logUpdateService, WorkHourStatistics workHourStatistics) {
         this.logUpdateService = logUpdateService;
+        this.workHourStatistics = workHourStatistics;
     }
 
     @GetMapping("/test/helloGet")
@@ -37,6 +40,26 @@ public class TestController {
     }
 
     /**
+     * 标准化所有工时
+     */
+    @GetMapping("/test/api/standardAllWorkHour")
+    public void standardAllWorkHour(){
+        workHourStatistics.updateHour();
+    }
+
+    public void standardSelfWorkHourByUserId(@RequestParam("userId")String userId){
+
+    }
+
+    public void standardWeekMemberHourByUserId(@RequestParam("userId")String userId){
+
+    }
+
+    public void standardSelfCostByUserId(@RequestParam("userId")String userId){
+
+    }
+
+    /**
      * 更新所有每天工时
      */
     @GetMapping("/test/api/updateAllChuanyunSelfWorkHour")

+ 56 - 25
src/main/java/com/galaxis/manatee/service/LogStandardService.java

@@ -4,10 +4,9 @@ import com.galaxis.manatee.constant.ChuanYunConstant;
 import com.galaxis.manatee.dao.ChuanyunGroupProjectDao;
 import com.galaxis.manatee.dao.ChuanyunSelfWorkHourDao;
 import com.galaxis.manatee.dao.ChuanyunWorkHourDao;
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserCompanyDO;
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.*;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
@@ -41,38 +40,70 @@ public class LogStandardService {
      * @param isRecent              是否只标准化最近一个月的数据
      * @param chuanyunUserCompanyDO 员工信息
      */
-    public void standardHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO, boolean isRecent) {
+    public void standardHourByUserCompanyAndIsRecent(ChuanyunUserCompanyDO chuanyunUserCompanyDO, boolean isRecent) {
         if (!StringUtils.isEmpty(chuanyunUserCompanyDO.getUserId())) {
             //从日志原始数据中获取每人每个项目每天工时。
             //由isRecent判断是否只获取最近30天的数据
             List<ChuanyunWorkHourDO> selfList = isRecent ? chuanyunWorkHourDao.getSelfWorkHourRecently(chuanyunUserCompanyDO.getUserId()) : chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
-            //逐一将原始工时数据标准化后,更新到标准化工时表和氚云中
-            selfList.forEach(self -> {
-                try {
-                    //新建标准化工时对象,并将原始数据更新到此对象中,并计算标准化之后的工时
-                    ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO=this.fromChuanyunWorkHourDO(self);
-                    //查询系统中是否有重复的标准化工时数据,如果有重复的人、天、项目数据,将原数据删除后更新为最新的数据
-                    try{
-                        ChuanyunSelfWorkHourDO tmpChuanyunSelfWorkHourDO = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDateAndProjectType(chuanyunUserCompanyDO.getUserId(), ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType()) ? ChuanYunConstant.PRODUCTION_PROJECT_ID : self.getProjectId(), self.getDayLogDate(), self.getProjectType());
-                        if (tmpChuanyunSelfWorkHourDO != null) {
-                            chuanyunSelfWorkHourDao.delete(tmpChuanyunSelfWorkHourDO);
-                        }
-                        chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
-                    }catch (Exception e){
-                        log.error(e.getMessage());
-                    }
-                } catch (Exception e) {
-                    log.error(e.getMessage());
-                    log.error("" + self);
-                    e.printStackTrace();
-                }
-            });
+            this.generateSelfWorkHourByWorkHourList(selfList);
         }else {
             log.warn("用户信息中userId缺失");
         }
     }
 
     /**
+     * 根据用户Id标准化某个人的日工时
+     * @param userId    用户Id
+     */
+    @Async
+    public void standardHourByUserId(String userId){
+        if (!StringUtils.isEmpty(userId)) {
+            //从日志原始数据中获取每人每个项目每天工时。
+            //由isRecent判断是否只获取最近30天的数据
+            List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHour(userId);
+            this.generateSelfWorkHourByWorkHourList(selfList);
+        }else {
+            log.warn("用户信息中userId缺失");
+        }
+    }
+
+    /**
+     * 根据日工时列表生成
+     * @param updateList    待更新列表
+     */
+    private void generateSelfWorkHourByWorkHourList(List<ChuanyunWorkHourDO> updateList){
+        //逐一将原始工时数据标准化后,更新到标准化工时表和氚云中
+        updateList.forEach(self -> {
+            try {
+                //新建标准化工时对象,并将原始数据更新到此对象中,并计算标准化之后的工时
+                ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO=this.fromChuanyunWorkHourDO(self);
+                //查询系统中是否有重复的标准化工时数据,如果有重复的人、天、项目数据,将原数据删除后更新为最新的数据
+                try{
+                    ChuanyunSelfWorkHourDO tmpChuanyunSelfWorkHourDO = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDateAndProjectType(chuanyunSelfWorkHourDO.getUserId(), ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType()) ? ChuanYunConstant.PRODUCTION_PROJECT_ID : self.getProjectId(), self.getDayLogDate(), self.getProjectType());
+                    if (tmpChuanyunSelfWorkHourDO != null) {
+                        chuanyunSelfWorkHourDao.delete(tmpChuanyunSelfWorkHourDO);
+                    }
+                    chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
+                }catch (Exception e){
+                    log.error(e.getMessage());
+                }
+            } catch (Exception e) {
+                log.error(e.getMessage());
+                log.error("" + self);
+                e.printStackTrace();
+            }
+        });
+    }
+
+    /**
+     * 根据周工时列表
+     * @param updateList
+     */
+    private void generateWeekMemberHourByWeekMemberHourList(List<ChuanyunWeekMemberHourDO> updateList){
+
+    }
+
+    /**
      * 根据日志原始数据统计的每日每人工时获取工时标准化后的标准化对象
      * @param chuanyunWorkHourDO    日志原始统计数据
      * @return  工时标准化对象

+ 7 - 195
src/main/java/com/galaxis/manatee/task/WorkHourStatistics.java

@@ -19,8 +19,8 @@ import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.BeanUtils;
 import org.springframework.data.domain.PageRequest;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
@@ -65,12 +65,13 @@ public class WorkHourStatistics {
      * 更新所有项目工时
      */
 //    @Scheduled(fixedDelay = 432000000L)
+    @Async
     public void updateHour() {
         //每日工时标准化
-//        standardWorkHour();
-//        standardWeeklyWorkHour();
-//        standardMonthlyWorkHour();
-//        projectMemberHour();
+        standardWorkHour();
+        standardWeeklyWorkHour();
+        standardMonthlyWorkHour();
+        projectMemberHour();
         //离职人员工时标准化
 //        quitStandardHour();
     }
@@ -91,9 +92,8 @@ public class WorkHourStatistics {
                 userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
                     long start = Instant.now().getEpochSecond();
                     //工时标准化
-                    logStandardService.standardHour(chuanyunUserCompanyDO, false);
+                    logStandardService.standardHourByUserCompanyAndIsRecent(chuanyunUserCompanyDO, false);
                     log.info("每日工时标准化" + chuanyunUserCompanyDO.getUserName() + (Instant.now().getEpochSecond() - start) + "秒");
-                    updateChuanyunStandardWorkHour(chuanyunUserCompanyDO);
                 });
             } else {
                 break;
@@ -131,7 +131,6 @@ public class WorkHourStatistics {
             }
         });
         log.info("周工时标准化" + (Instant.now().getEpochSecond() - start) + "秒");
-        updateChuanyunWeekHour();
     }
 
     /**
@@ -154,7 +153,6 @@ public class WorkHourStatistics {
                 flag = false;
             }
         }
-        updateChuanyunMonthHour();
     }
 
     /**
@@ -234,192 +232,6 @@ public class WorkHourStatistics {
     }
 
     /**
-     * 定时更新氚云数据
-     */
-    private void updateChuanyunStandardWorkHour(ChuanyunUserCompanyDO oldChuanyunUserCompanyDO) {
-        long startTime = Instant.now().getEpochSecond();
-        var updateList = chuanyunSelfWorkHourDao.findByUserId(oldChuanyunUserCompanyDO.getUserId());
-        updateList.forEach(chuanyunSelfWorkHourDO -> {
-            try {
-                String departmentId = chuanyunUserCompanyDao.findAllByUserId(chuanyunSelfWorkHourDO.getUserId()).get(0).getDepartmentId();
-                ChuanyunSelfWorkHourDTO chuanyunSelfWorkHourDTO = new ChuanyunSelfWorkHourDTO();
-                BeanUtils.copyProperties(chuanyunSelfWorkHourDO, chuanyunSelfWorkHourDTO);
-                chuanyunSelfWorkHourDTO.setDepartmentId(departmentId);
-                ChuanyunUserCompanyDO chuanyunUserCompanyDO = chuanyunUserCompanyDao.findByUserId(chuanyunSelfWorkHourDO.getUserId());
-                if (chuanyunUserCompanyDO != null) {
-                    chuanyunSelfWorkHourDTO.setUserName(chuanyunUserCompanyDO.getUserName());
-                    chuanyunSelfWorkHourDTO.setBg(chuanyunUserCompanyDO.getBg());
-                } else {
-                    chuanyunSelfWorkHourDTO.setUserName(chuanyunSelfWorkHourDTO.getUserId());
-                    chuanyunSelfWorkHourDTO.setBg("IBG");
-                }
-                chuanyunSelfWorkHourDTO.setDepartmentName(chuanyunSelfWorkHourDO.getDepartmentName());
-                List<String> matchers = new ArrayList<>();
-                matchers.add("F0000001_2," + chuanyunSelfWorkHourDO.getProjectId());
-                matchers.add("F0000002_2," + chuanyunSelfWorkHourDO.getUserId());
-                matchers.add("F0000003_2," + chuanyunSelfWorkHourDO.getDayLogDate());
-                matchers.add("F0000005_2," + chuanyunSelfWorkHourDO.getProjectType());
-//                    matchers.add("F0000006_2,"+self.getStatus());
-                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);
-                    //增加工时不相等再更新每日工时数据的
-                    if(0!=firstResult.getStandardWorkHour().compareTo(chuanyunSelfWorkHourDO.getStandardWorkHour())){
-                        chuanyunSaveDTO = chuanYunManager.update(ChuanyunMemberHourDO.SCHEMA_CODE, firstResult.getObjectId(), selfMonthString);
-                        if (!chuanyunSaveDTO.getSuccessful()) {
-                            log.warn("更新工时标准化失败");
-                        }
-                    }
-                } else {
-                    chuanyunSaveDTO = chuanYunManager.save(ChuanyunMemberHourDO.SCHEMA_CODE, selfMonthString, true);
-                    if (!chuanyunSaveDTO.getSuccessful()) {
-                        log.warn("新增工时标准化失败");
-                    }
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-                log.warn("更新标准工时异常");
-            }
-        });
-        log.info(oldChuanyunUserCompanyDO.getUserName() + "氚云日工时更新花费" + (Instant.now().getEpochSecond() - startTime) + "秒");
-    }
-
-    /**
-     * 人员-项目-周度工时汇总,更新氚云数据
-     */
-    private void updateChuanyunWeekHour() {
-        var pageSize = 20;
-        var page = 0;
-        log.info("开始更新周工时汇总");
-        long startTime = Instant.now().getEpochSecond();
-        while (true) {
-            var pageable = PageRequest.of(page, pageSize);
-            var updateList = chuanyunWeekMemberHourDao.findAll(pageable);
-            if (page <= updateList.getTotalPages()) {
-                page += 1;
-                updateList.getContent().forEach(chuanyunWeekMemberHourDO -> {
-                    //更新氚云
-                    try {
-                        String departmentId = chuanyunUserCompanyDao.findAllByUserId(chuanyunWeekMemberHourDO.getUserId()).get(0).getDepartmentId();
-                        BigDecimal standard = new BigDecimal(8);
-                        ChuanyunProjectMemberWeekHourDTO chuanyunProjectMemberWeekHourDTO = new ChuanyunProjectMemberWeekHourDTO();
-                        chuanyunProjectMemberWeekHourDTO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
-                        chuanyunProjectMemberWeekHourDTO.setUserId(chuanyunWeekMemberHourDO.getUserId());
-                        chuanyunProjectMemberWeekHourDTO.setWeek(chuanyunWeekMemberHourDO.getWeek());
-                        chuanyunProjectMemberWeekHourDTO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
-                        chuanyunProjectMemberWeekHourDTO.setTotalHour(chuanyunWeekMemberHourDO.getStandardWorkHour());
-                        chuanyunProjectMemberWeekHourDTO.setPersonDays(chuanyunWeekMemberHourDO.getStandardWorkHour().divide(standard, 2, RoundingMode.HALF_UP));
-                        chuanyunProjectMemberWeekHourDTO.setHourStatus(chuanyunWeekMemberHourDO.getStatus());
-                        chuanyunProjectMemberWeekHourDTO.setYear(chuanyunWeekMemberHourDO.getYear());
-                        chuanyunProjectMemberWeekHourDTO.setDepartmentId(departmentId);
-
-                        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());
-                        matchers.add("F0000003_2," + chuanyunWeekMemberHourDO.getProjectType());
-                        matchers.add("F0000007_2," + chuanyunWeekMemberHourDO.getStatus());
-                        var filter = Filter.instance(0, 1, true, "And", matchers);
-                        var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, filter);
-                        var selfMonthString = objectMapper.writeValueAsString(chuanyunProjectMemberWeekHourDTO);
-                        ChuanyunSaveDTO chuanyunSaveDTO;
-                        if (chuanyunFindAllResponse.getReturnData() != null) {
-                            List<ChuanyunProjectMemberWeekHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                            });
-                            ChuanyunProjectMemberWeekHourDO firstResult = result.get(0);
-                            if(0!=firstResult.getTotalHour().compareTo(chuanyunWeekMemberHourDO.getStandardWorkHour())){
-                                chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, firstResult.getObjectId(), selfMonthString);
-                                if (!chuanyunSaveDTO.getSuccessful()) {
-                                    log.warn("更新人员项目周度工时失败");
-                                }
-                            }
-                        } else {
-                            chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, selfMonthString, true);
-                            if (!chuanyunSaveDTO.getSuccessful()) {
-                                log.warn("新增人员项目周度工时失败");
-                            }
-                        }
-                    } catch (JsonProcessingException | BigSizeException e) {
-                        e.printStackTrace();
-                    }
-                });
-            } else {
-                //流程执行完
-                break;
-            }
-        }
-        log.info("周工时更新花费" + (Instant.now().getEpochSecond() - startTime));
-    }
-
-    /**
-     * 人员-项目-月度工时汇总,更新氚云数据
-     */
-    private void updateChuanyunMonthHour() {
-        var pageSize = 20;
-        var page = 0;
-        log.info("开始更新月工时汇总");
-        long startTime = Instant.now().getEpochSecond();
-        while (true) {
-            var pageable = PageRequest.of(page, pageSize);
-            var updateList = chuanyunSelfCostDao.findAll(pageable);
-            if (page <= updateList.getTotalPages()) {
-                page += 1;
-                updateList.getContent().forEach(chuanyunSelfCostDO -> {
-                    ChuanyunMemberMonthCostDTO chuanyunMemberMonthCostDTO = new ChuanyunMemberMonthCostDTO();
-                    //更新氚云数据
-                    chuanyunMemberMonthCostDTO.setCost(chuanyunSelfCostDO.getCost());
-                    chuanyunMemberMonthCostDTO.setProjectId(chuanyunSelfCostDO.getProjectId());
-                    chuanyunMemberMonthCostDTO.setProjectType(chuanyunSelfCostDO.getProjectType());
-                    chuanyunMemberMonthCostDTO.setStatus(chuanyunSelfCostDO.getStatus());
-                    chuanyunMemberMonthCostDTO.setUserId(chuanyunSelfCostDO.getUserId());
-                    chuanyunMemberMonthCostDTO.setMonthWorkHour(chuanyunSelfCostDO.getMonthlyTotalHour());
-                    chuanyunMemberMonthCostDTO.setDayLogDate(chuanyunSelfCostDO.getDayLogDate());
-                    chuanyunMemberMonthCostDTO.setWorkHour(chuanyunSelfCostDO.getTotalHour());
-                    chuanyunMemberMonthCostDTO.setDepartmentId(chuanyunSelfCostDO.getDepartmentId());
-                    if (!StringUtils.isEmpty(chuanyunSelfCostDO.getProjectId())) {
-                        try {
-                            List<String> matchers = new ArrayList<>();
-                            matchers.add("F0000003_2," + chuanyunSelfCostDO.getProjectId());
-                            matchers.add("F0000009_2," + chuanyunSelfCostDO.getStatus());
-                            matchers.add("F0000002_2," + chuanyunSelfCostDO.getUserId());
-                            matchers.add("F0000008_2," + chuanyunSelfCostDO.getProjectType());
-                            matchers.add("F0000004_2," + chuanyunSelfCostDO.getDayLogDate());
-                            var filter = Filter.instance(0, 1, true, "And", matchers);
-                            var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE, filter);
-                            var memberMonthString = objectMapper.writeValueAsString(chuanyunMemberMonthCostDTO);
-                            ChuanyunSaveDTO chuanyunSaveDTO;
-                            if (chuanyunFindAllResponse.getReturnData() != null) {
-                                List<ChuanyunMemberMonthCostDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                                });
-                                ChuanyunMemberMonthCostDO firstResult = result.get(0);
-                                chuanyunSaveDTO = chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE, firstResult.getObjectId(), memberMonthString);
-                            } else {
-                                chuanyunSaveDTO = chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE, memberMonthString, true);
-                            }
-                            if (!chuanyunSaveDTO.getSuccessful()) {
-                                log.warn("新增项目成员月度工时汇总失败");
-                            }
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                            log.warn("########" + chuanyunSelfCostDO + "");
-                        }
-                    }
-                });
-            } else {
-                //流程执行完
-                break;
-            }
-        }
-        log.info("月工时更新花费" + (Instant.now().getEpochSecond() - startTime));
-    }
-
-    /**
      * 人员项目工时汇总
      */
     private void projectMemberHour() {

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

@@ -172,7 +172,7 @@ public class WorkHourStatisticsRecently {
                 //逐个将员工每天工时进行统计汇总
                 List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
                 //工时标准化
-                userCompanyDOList.forEach(chuanyunUserCompanyDO -> logStandardService.standardHour(chuanyunUserCompanyDO,true));
+                userCompanyDOList.forEach(chuanyunUserCompanyDO -> logStandardService.standardHourByUserCompanyAndIsRecent(chuanyunUserCompanyDO,true));
             }else {
                 break;
             }