Browse Source

Merge remote-tracking branch 'origin/1.0' into 1.0

# Conflicts:
#	src/main/java/com/galaxis/manatee/task/ChuanyunHumanResourceScheduledTask.java
WoNiu 4 years ago
parent
commit
14e5f31b5b
19 changed files with 353 additions and 923 deletions
  1. 31 0
      src/main/java/com/galaxis/manatee/configuration/SpringAsyncConfiguration.java
  2. 0 3
      src/main/java/com/galaxis/manatee/controller/GetController.java
  3. 9 6
      src/main/java/com/galaxis/manatee/controller/TestController.java
  4. 1 1
      src/main/java/com/galaxis/manatee/controller/WorkHourController.java
  5. 0 9
      src/main/java/com/galaxis/manatee/dao/ChuanyunWeekMemberHourDao.java
  6. 2 2
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunAskForLeaveDO.java
  7. 2 2
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectChangeDO.java
  8. 2 2
      src/main/java/com/galaxis/manatee/service/DataArcherService.java
  9. 4 67
      src/main/java/com/galaxis/manatee/service/LogCheckService.java
  10. 171 0
      src/main/java/com/galaxis/manatee/service/LogDownloadService.java
  11. 72 0
      src/main/java/com/galaxis/manatee/service/LogService.java
  12. 6 15
      src/main/java/com/galaxis/manatee/service/LogStandardService.java
  13. 0 27
      src/main/java/com/galaxis/manatee/service/LogUpdateService.java
  14. 0 2
      src/main/java/com/galaxis/manatee/service/ProjectMemberService.java
  15. 6 95
      src/main/java/com/galaxis/manatee/task/ChuanyunHumanResourceScheduledTask.java
  16. 2 14
      src/main/java/com/galaxis/manatee/task/LogCheckTask.java
  17. 28 436
      src/main/java/com/galaxis/manatee/task/WorkHourStatistics.java
  18. 14 239
      src/main/java/com/galaxis/manatee/task/WorkHourStatisticsRecently.java
  19. 3 3
      src/main/java/com/galaxis/manatee/webservice/CountryEndpoint.java

+ 31 - 0
src/main/java/com/galaxis/manatee/configuration/SpringAsyncConfiguration.java

@@ -11,4 +11,35 @@ import org.springframework.scheduling.annotation.EnableAsync;
 @Configuration
 @EnableAsync
 public class SpringAsyncConfiguration {
+
+//    @Bean(name = "taskExecutor")
+//    public Executor taskExecutor()
+//    {
+//        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+//        return executor;
+//    }
+//
+//    @Bean(name = "updateExecutor")
+//    public Executor updateExecutor()
+//    {
+//        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+//        executor.setCorePoolSize(3);
+//        executor.setMaxPoolSize(50000);
+//        executor.setQueueCapacity(100);
+//        executor.setThreadNamePrefix("updateExecutor-");
+//        executor.initialize();
+//        return executor;
+//    }
+//
+//    @Bean(name = "standardExecutor")
+//    public Executor standardExecutor()
+//    {
+//        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+//        executor.setCorePoolSize(3);
+//        executor.setMaxPoolSize(50000);
+//        executor.setQueueCapacity(100);
+//        executor.setThreadNamePrefix("standardExecutor-");
+//        executor.initialize();
+//        return executor;
+//    }
 }

+ 0 - 3
src/main/java/com/galaxis/manatee/controller/GetController.java

@@ -8,10 +8,7 @@ import com.galaxis.manatee.service.ChuanyunService;
 import com.galaxis.manatee.task.ChuanyunBasicDataScheduledTask;
 import com.galaxis.manatee.task.ChuanyunHumanResourceScheduledTask;
 import com.galaxis.manatee.util.ExcelUtils;
-import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
-import net.sf.json.JSON;
-import net.sf.json.JSONObject;
 import org.springframework.http.ResponseEntity;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.web.bind.annotation.*;

+ 9 - 6
src/main/java/com/galaxis/manatee/controller/TestController.java

@@ -1,6 +1,7 @@
 package com.galaxis.manatee.controller;
 
 import com.galaxis.manatee.service.LogCheckService;
+import com.galaxis.manatee.service.LogService;
 import com.galaxis.manatee.service.LogStandardService;
 import com.galaxis.manatee.service.LogUpdateService;
 import lombok.extern.slf4j.Slf4j;
@@ -20,11 +21,13 @@ public class TestController {
     private final LogUpdateService logUpdateService;
     private final LogStandardService logStandardService;
     private final LogCheckService logCheckService;
+    private final LogService logService;
 
-    public TestController(LogUpdateService logUpdateService, LogStandardService logStandardService, LogCheckService logCheckService) {
+    public TestController(LogUpdateService logUpdateService, LogStandardService logStandardService, LogCheckService logCheckService, LogService logService) {
         this.logUpdateService = logUpdateService;
         this.logStandardService = logStandardService;
         this.logCheckService = logCheckService;
+        this.logService = logService;
     }
 
     @GetMapping("/test/helloGet")
@@ -37,7 +40,7 @@ public class TestController {
      */
     @GetMapping("/test/api/standardAllWeekMemberHour")
     public void standardAllWeekMemberHour(){
-        logStandardService.standardAllWeekMemberHour();
+        logService.standardAllWeekMemberHour();
     }
 
     /**
@@ -45,7 +48,7 @@ public class TestController {
      */
     @GetMapping("/test/api/standardAllSelfCost")
     public void standardAllSelfCost(){
-        logStandardService.standardAllSelfCost();
+        logService.standardAllSelfCost();
     }
 
     /**
@@ -80,7 +83,7 @@ public class TestController {
      */
     @GetMapping("/test/api/updateAllChuanyunSelfWorkHour")
     public void updateAllChuanyunSelfWorkHour() {
-        logUpdateService.updateAllChuanyunSelfWorkHour();
+        logService.updateAllChuanyunSelfWorkHour();
     }
 
     /**
@@ -88,7 +91,7 @@ public class TestController {
      */
     @GetMapping("/test/api/updateAllChuanyunWeekMemberHour")
     public void updateAllChuanyunWeekMemberHour() {
-        logUpdateService.updateAllChuanyunWeekMemberHour();
+        logService.updateAllChuanyunWeekMemberHour();
     }
 
     /**
@@ -96,7 +99,7 @@ public class TestController {
      */
     @GetMapping("/test/api/updateAllChuanyunSelfCost")
     public void updateAllChuanyunSelfCost() {
-        logUpdateService.updateAllChuanyunSelfCost();
+        logService.updateAllChuanyunSelfCost();
     }
 
     /**

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

@@ -41,7 +41,7 @@ public class WorkHourController {
      */
     @GetMapping("/test/workHour/updateWorkHour")
     public void updateWorkHour(){
-        workHourStatistics.standardHour();
+        workHourStatistics.updateHour();
     }
 
 

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

@@ -18,15 +18,6 @@ import java.util.List;
 public interface ChuanyunWeekMemberHourDao extends GalaxisRepository<ChuanyunWeekMemberHourDO, String> {
 
     /**
-     * 根据状态删除数据
-     *
-     * @param status 状态
-     * @return 删除条数
-     */
-    @Transactional
-    Integer deleteAllByStatus(String status);
-
-    /**
      * 人员-项目-周度工时汇总
      * 作废
      * @return

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

@@ -154,8 +154,8 @@ public class ChuanyunAskForLeaveDO extends BasicDO {
         if(processInstanceTopVo.getOperationRecords()!= null) {
             if(processInstanceTopVo.getOperationRecords().get(0).getUserid().equals(processInstanceTopVo.getOperationRecords().get(processInstanceTopVo.getOperationRecords().size() -1).getUserid())
                     && processInstanceTopVo.getOperationRecords().get(0).getUserid().equals(processInstanceTopVo.getOriginatorUserid())  ) {
-                if(processInstanceTopVo.getOperationRecords().get(0).getOperationType().equals("START_PROCESS_INSTANCE")
-                        && processInstanceTopVo.getOperationRecords().get(processInstanceTopVo.getOperationRecords().size() -1).getOperationType().equals("TERMINATE_PROCESS_INSTANCE")) {
+                if("START_PROCESS_INSTANCE".equals(processInstanceTopVo.getOperationRecords().get(0).getOperationType())
+                        && "TERMINATE_PROCESS_INSTANCE".equals(processInstanceTopVo.getOperationRecords().get(processInstanceTopVo.getOperationRecords().size() -1).getOperationType())) {
                     chuanyunAskForLeaveDo.setIsCanncel(1);
                 }
             }

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

@@ -188,8 +188,8 @@ public class ChuanyunProjectChangeDO extends BasicDO {
         if(processInstanceTopVo.getOperationRecords()!= null) {
             if(processInstanceTopVo.getOperationRecords().get(0).getUserid().equals(processInstanceTopVo.getOperationRecords().get(processInstanceTopVo.getOperationRecords().size() -1).getUserid())
                     && processInstanceTopVo.getOperationRecords().get(0).getUserid().equals(processInstanceTopVo.getOriginatorUserid())  ) {
-                if(processInstanceTopVo.getOperationRecords().get(0).getOperationType().equals("START_PROCESS_INSTANCE")
-                        && processInstanceTopVo.getOperationRecords().get(processInstanceTopVo.getOperationRecords().size() -1).getOperationType().equals("TERMINATE_PROCESS_INSTANCE")) {
+                if("START_PROCESS_INSTANCE".equals(processInstanceTopVo.getOperationRecords().get(0).getOperationType())
+                        && "TERMINATE_PROCESS_INSTANCE".equals(processInstanceTopVo.getOperationRecords().get(processInstanceTopVo.getOperationRecords().size() -1).getOperationType())) {
                     chuanyunProjectChangeDO.setIsCancel(1);
                 }
             }

+ 2 - 2
src/main/java/com/galaxis/manatee/service/DataArcherService.java

@@ -66,8 +66,7 @@ public class DataArcherService {
             }
 
         } catch (Exception e) {
-            e.printStackTrace();
-            log.warn("更新标准工时异常" + chuanyunSelfWorkHourDTO);
+            log.warn("更新标准工时异常" + chuanyunSelfWorkHourDTO,e);
         }
     }
 
@@ -181,6 +180,7 @@ public class DataArcherService {
     /**
      * 删除状态为审核中数据
      */
+    @Async
     public void deleteExamineStatus(String schemaCode, String statusCode, String projectCode, String projectId, String userCode, String userId, String yearCode, String year, String monthCode, String month, String weekCode, String week, String typeCode, String projectType) {
         ObjectMapper objectMapper = new ObjectMapper();
         try {

+ 4 - 67
src/main/java/com/galaxis/manatee/service/LogCheckService.java

@@ -83,15 +83,14 @@ public class LogCheckService {
         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());
+        List<ChuanyunWeekMemberHourDO> oldList = chuanyunWeekMemberHourDao.findByUserId(userId);
+        Map<String, Integer> map = new HashMap<>(list.size()+oldList.size());
 
-        if (list.size()!=oldlist.size()){
+        if (list.size()!=oldList.size()){
             for (ChuanyunWeekMemberHourDO chuanyunWeekMemberHourDO : list){
                 map.put(chuanyunWeekMemberHourDO.getUserId()+chuanyunWeekMemberHourDO.getProjectId()+chuanyunWeekMemberHourDO.getProjectType()+chuanyunWeekMemberHourDO.getYear()+chuanyunWeekMemberHourDO.getWeek(),1);
             }
-            for (ChuanyunWeekMemberHourDO chuanyunWeekMemberHourDO : oldlist){
-//                if (!chuanyunWeekMemberHourDO.getProjectType().equals("生产项目")){
+            for (ChuanyunWeekMemberHourDO chuanyunWeekMemberHourDO : oldList){
                     Integer count = map.get(chuanyunWeekMemberHourDO.getUserId()+chuanyunWeekMemberHourDO.getProjectId()+chuanyunWeekMemberHourDO.getProjectType()+chuanyunWeekMemberHourDO.getYear()+chuanyunWeekMemberHourDO.getWeek());
                     if (count==null){
                         chuanyunWeekMemberHourDao.delete(chuanyunWeekMemberHourDO);
@@ -110,7 +109,6 @@ public class LogCheckService {
                         }
                         log.info(chuanyunWeekMemberHourDO.getUserId()+"删除项目"+chuanyunWeekMemberHourDO.getProjectId()+"时间为"+chuanyunWeekMemberHourDO.getYear()+"年"+chuanyunWeekMemberHourDO.getWeek()+"周工时");
                     }
-//                }
             }
         }
         log.info("核对耗时" + (System.currentTimeMillis() - start) + "毫秒");
@@ -140,7 +138,6 @@ public class LogCheckService {
                 map.put(chuanyunSelfWorkHourDO.getUserId()+chuanyunSelfWorkHourDO.getProjectId()+chuanyunSelfWorkHourDO.getProjectType()+chuanyunSelfWorkHourDO.getDayLogDate().withDayOfMonth(1),1);
             }
             for (ChuanyunSelfCostDO chuanyunSelfCostDO : costDOList){
-//                if (!chuanyunSelfCostDO.getProjectType().equals("生产项目")){
                     Integer count = map.get(chuanyunSelfCostDO.getUserId()+chuanyunSelfCostDO.getProjectId()+chuanyunSelfCostDO.getProjectType()+chuanyunSelfCostDO.getDayLogDate().withDayOfMonth(1));
                     if (count==null){
                         chuanyunSelfCostDao.delete(chuanyunSelfCostDO);
@@ -158,72 +155,12 @@ public class LogCheckService {
                         }
                         log.info(chuanyunSelfCostDO.getUserId()+"删除项目"+chuanyunSelfCostDO.getProjectId()+"时间为"+chuanyunSelfCostDO.getDayLogDate()+"月工时");
                     }
-//                }
             }
         }
         log.info("核对耗时" + (System.currentTimeMillis() - start) + "毫秒");
     }
 
     /**
-     * 根据projectId核对一下内容:
-     * 每日工时统计的每个项目的总工时(可用ChuanyunProjectCostDao中方法),与系统中保存的每个项目工时进行比较
-     * 完成核对后,更新数据库中多余的每个项目工时
-     * 完成核对后,更新氚云中多余的每个项目工时
-     *
-     * @param projectId 项目ID
-     * @throws Exception 项目Id为空异常
-     */
-    public void checkProjectWorkHour(String projectId) throws Exception {
-        //@TODO
-        //***
-        //@TODO
-        updateChuanyunProjectWorkHour();
-        updateManateeProjectWorkHour();
-    }
-//
-//    /**
-//     * 更新氚云每周工时数据
-//     */
-//    private void updateChuanyunWeekWorkHour() {
-//        //@TODO
-//    }
-//
-//    /**
-//     * 更新Manatee数据库每周工时数据
-//     */
-//    private void updateManateeWeekWorkHour() {
-//        //@TODO
-//    }
-//
-//    /**
-//     * 更新氚云每月工时数据
-//     */
-//    private void updateChuanyunMonthWorkHour() {
-//        //@TODO
-//    }
-//
-//    /**
-//     * 更新Manatee数据库每月工时数据
-//     */
-//    private void updateManateeMonthWorkHour() {
-//        //@TODO
-//    }
-//
-    /**
-     * 更新氚云每个项目时数据
-     */
-    private void updateChuanyunProjectWorkHour() {
-        //@TODO
-    }
-
-    /**
-     * 更新Manatee数据库每个项目工时数据
-     */
-    private void updateManateeProjectWorkHour() {
-        //@TODO
-    }
-
-    /**
      * 删除多余每日工时
      *
      * @param chuanyunWorkHourList     日志原始工时

+ 171 - 0
src/main/java/com/galaxis/manatee/service/LogDownloadService.java

@@ -0,0 +1,171 @@
+package com.galaxis.manatee.service;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.constant.ChuanYunConstant;
+import com.galaxis.manatee.dao.ChuanyunGroupProjectDao;
+import com.galaxis.manatee.dao.ChuanyunLogDao;
+import com.galaxis.manatee.dao.ChuanyunUserCompanyDao;
+import com.galaxis.manatee.dao.ChuanyunUserDepartmentNameDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunGroupProjectDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunLogDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserCompanyDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserDepartmentNameDO;
+import com.galaxis.manatee.entity.chuanyun.dto.Filter;
+import com.galaxis.manatee.manager.ChuanYunManager;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 下载日志原始数据
+ * @author zcj
+ * @version 0.1
+ * @date 2021/3/13 2:14 上午
+ */
+@Slf4j
+@Service
+public class LogDownloadService {
+
+    private final ChuanYunManager chuanYunManager;
+    private final ChuanyunLogDao chuanyunLogDao;
+    private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
+    private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
+    private final ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao;
+
+    public LogDownloadService(ChuanYunManager chuanYunManager, ChuanyunLogDao chuanyunLogDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao) {
+        this.chuanYunManager = chuanYunManager;
+        this.chuanyunLogDao = chuanyunLogDao;
+        this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
+        this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
+        this.chuanyunUserDepartmentNameDao = chuanyunUserDepartmentNameDao;
+    }
+
+    /**
+     * 更新日志数据
+     * @param isRecent  是否只更新最近30天
+     */
+    public void saveChuanyunLogDO(boolean isRecent){
+        var objectMapper = new ObjectMapper();
+        var start = 0;
+        var totalCount = 0L;
+        var flag = true;
+        var pageSize=100;
+        List<String> matchersString=new ArrayList<>();
+        //由于需要统计流程中的日志,在日志数据同步时将状态为2的数据一并统计
+        matchersString.add("Status_6,[1;2;3]");
+        if(isRecent){
+            //获取当前时间30天前日期
+            DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            LocalDateTime now = LocalDateTime.now();
+            now = now.minus(30, ChronoUnit.DAYS);
+            matchersString.add("logDate_1,"+df.format(now));
+        }
+        while (flag) {
+            long startTime= Instant.now().getEpochSecond();
+            try {
+                //从氚云查询数据
+                var filter= Filter.instance(start,start+pageSize,true,Filter.AND,matchersString);
+                var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunLogDO.SCHEMA_CODE, filter);
+                if (chuanyunFindAllResponse.getReturnData() == null) {
+                    flag = false;
+                    continue;
+                }
+                if (chuanyunFindAllResponse.getReturnData().getTotalCount() >= start + pageSize) {
+                    start += pageSize;
+                } else {
+                    flag = false;
+                }
+                //转化为POJO
+                List<ChuanyunLogDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                });
+                //处理日志数据
+                result.forEach(this::updateChuanyunLogData);
+                //获取项目总数
+                totalCount = chuanyunFindAllResponse.getReturnData().getTotalCount();
+                //保存
+                chuanyunLogDao.saveAll(result);
+            } catch (Exception e) {
+                log.error(e.getMessage());
+                e.printStackTrace();
+            }
+            log.info("日志100条保存时间"+(Instant.now().getEpochSecond()-startTime)+"秒");
+        }
+        log.info("最近一月历史日志信息保存" + totalCount);
+    }
+
+    /**
+     * 更新氚云日志数据
+     * @param chuanyunLogDO 待处理数据
+     */
+    private void updateChuanyunLogData(ChuanyunLogDO chuanyunLogDO){
+        if(chuanyunLogDO.getDayLogList()==null||chuanyunLogDO.getDayLogList().size()==0){
+            chuanyunLogDO.setDayLogList(new ArrayList<>());
+            log.warn(chuanyunLogDO+"");
+            log.warn("异常数据");
+        }else{
+            //如果有重复就删除
+            chuanyunLogDao.findById(chuanyunLogDO.getObjectId()).ifPresent(chuanyunLogDao::delete);
+            //根据projectId获取code,如果是生产项目,则不用处理
+            //针对前期测试数据,可能出现日志为空的情况,跳过不处理
+            chuanyunLogDO.getDayLogList().forEach(chuanyunDayLog -> {
+                //离职人员补全用户Id及部门ID
+                if (StringUtils.isEmpty(chuanyunLogDO.getUserId())){
+                    var name="";
+                    if (StringUtils.isEmpty(chuanyunDayLog.getContent())){
+                        name=chuanyunLogDO.getName();
+                    }else {
+                        name=chuanyunDayLog.getContent();
+                    }
+                    chuanyunLogDO.setUserId(getCharacters(name));
+                    ChuanyunUserDepartmentNameDO chuanyunUserDepartmentNameDO = chuanyunUserDepartmentNameDao.findByUserName(chuanyunLogDO.getUserId());
+                    if (chuanyunUserDepartmentNameDO!=null){
+                        chuanyunLogDO.setDepartmentName(chuanyunUserDepartmentNameDO.getDepartmentName());
+                    }
+                }else {
+                    ChuanyunUserCompanyDO chuanyunUserCompanyDO = chuanyunUserCompanyDao.findByUserId(chuanyunLogDO.getUserObject().getObjectId());
+                    if (chuanyunUserCompanyDO!=null){
+                        chuanyunLogDO.setDepartmentName(getDepartmentName(chuanyunUserCompanyDO.getDepartment()));
+                    }
+                }
+                try{
+                    if(!ChuanYunConstant.PRODUCTION_PROJECT.equals(chuanyunDayLog.getProjectType())&& StringUtils.isEmpty(chuanyunDayLog.getProjectId())){
+                        log.info(chuanyunLogDO+"");
+                    }else if(!ChuanYunConstant.PRODUCTION_PROJECT.equals(chuanyunDayLog.getProjectType())){
+                        ChuanyunGroupProjectDO chuanyunGroupProjectDO=chuanyunGroupProjectDao.findById(chuanyunDayLog.getProjectId()).orElseThrow();
+                        chuanyunDayLog.setProjectCode(chuanyunGroupProjectDO.getProjectCode());
+                    }
+                }catch (Exception e){
+                    e.printStackTrace();
+                    log.warn(chuanyunDayLog+"");
+                }
+            });
+        }
+        //处理项目userId
+        if(chuanyunLogDO.getUserObject()!=null){
+            chuanyunLogDO.setUserId(chuanyunLogDO.getUserObject().getObjectId());
+        }
+    }
+
+    private String getCharacters(String str){
+        String reg = "[^\u4e00-\u9fa5]";
+        str = str.replaceAll(reg, " ");
+        return str.trim();
+    }
+
+    private String getDepartmentName(String str){
+        if (str.contains("/")){
+            String[] department = str.split("/");
+            return department[department.length-1];
+        }else {
+            return str;
+        }
+    }
+}

+ 72 - 0
src/main/java/com/galaxis/manatee/service/LogService.java

@@ -0,0 +1,72 @@
+package com.galaxis.manatee.service;
+
+import com.galaxis.manatee.dao.ChuanyunUserCompanyDao;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.Instant;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2021/3/11 3:30 上午
+ */
+@Slf4j
+@Service
+public class LogService {
+
+    private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
+    private final LogStandardService logStandardService;
+    private final LogUpdateService logUpdateService;
+
+    public LogService(ChuanyunUserCompanyDao chuanyunUserCompanyDao, LogStandardService logStandardService, LogUpdateService logUpdateService) {
+        this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
+        this.logStandardService = logStandardService;
+        this.logUpdateService = logUpdateService;
+    }
+
+    /**
+     * 标准化所有周工时信息
+     */
+    public void standardAllWeekMemberHour(){
+        long start= Instant.now().getEpochSecond();
+        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> logStandardService.standardWeekMemberHourByUserId(chuanyunUserCompanyDO.getUserId()));
+        log.info("标准化所有周工时耗时"+(Instant.now().getEpochSecond()-start)+"秒");
+    }
+
+    /**
+     * 标准化所有月工时
+     */
+    public void standardAllSelfCost(){
+        long start=Instant.now().getEpochSecond();
+        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> logStandardService.standardSelfCostByUserId(chuanyunUserCompanyDO.getUserId()));
+        log.info("标准化所有月工时耗时"+(Instant.now().getEpochSecond()-start)+"秒");
+    }
+
+    /**
+     * 更新所有日工时
+     */
+    public void updateAllChuanyunSelfWorkHour() {
+        long startTime = Instant.now().getEpochSecond();
+        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> logUpdateService.updateChuanyunSelfWorkHourListByUserId(chuanyunUserCompanyDO.getUserId()));
+        log.info("更新所有每日工时花费" + (Instant.now().getEpochSecond() - startTime) + "秒");
+    }
+
+    /**
+     * 更新所有周工时
+     */
+    public void updateAllChuanyunWeekMemberHour() {
+        long startTime = Instant.now().getEpochSecond();
+        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> logUpdateService.updateChuanyunWeekMemberHourListByUserId(chuanyunUserCompanyDO.getUserId()));
+        log.info("更新所有每周工时花费" + (Instant.now().getEpochSecond() - startTime) + "秒");
+    }
+
+    /**
+     * 更新所有月工时
+     */
+    public void updateAllChuanyunSelfCost() {
+        long startTime = Instant.now().getEpochSecond();
+        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> logUpdateService.updateChuanyunSelfCostListByUserId(chuanyunUserCompanyDO.getUserId()));
+        log.info("更新所有每月工时花费" + (Instant.now().getEpochSecond() - startTime) + "秒");
+    }
+}

+ 6 - 15
src/main/java/com/galaxis/manatee/service/LogStandardService.java

@@ -50,6 +50,7 @@ public class LogStandardService {
      * @param isRecent              是否只标准化最近一个月的数据
      * @param chuanyunUserCompanyDO 员工信息
      */
+    @Async
     public void standardHourByUserCompanyAndIsRecent(ChuanyunUserCompanyDO chuanyunUserCompanyDO, boolean isRecent) {
         if (!StringUtils.isEmpty(chuanyunUserCompanyDO.getUserId())) {
             long start = Instant.now().getEpochSecond();
@@ -64,21 +65,12 @@ public class LogStandardService {
     }
 
     /**
-     * 标准化所有周工时信息
+     * 标准化最近一个月每周工时
      */
-    public void standardAllWeekMemberHour(){
-        long start=Instant.now().getEpochSecond();
-        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> this.standardWeekMemberHourByUserId(chuanyunUserCompanyDO.getUserId()));
-        log.info("标准化所有周工时耗时"+(Instant.now().getEpochSecond()-start)+"秒");
-    }
-
-    /**
-     * 标准化所有月工时
-     */
-    public void standardAllSelfCost(){
-        long start=Instant.now().getEpochSecond();
-        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> this.standardSelfCostByUserId(chuanyunUserCompanyDO.getUserId()));
-        log.info("标准化所有月工时耗时"+(Instant.now().getEpochSecond()-start)+"秒");
+    @Async
+    public void standardWeekMemberHourRecent(){
+        List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHourRecently();
+        this.generateWeekMemberHourByWeekMemberHourList(list);
     }
 
     /**
@@ -89,7 +81,6 @@ public class LogStandardService {
     public void standardSelfWorkHourByUserId(String userId){
         if (!StringUtils.isEmpty(userId)) {
             //从日志原始数据中获取每人每个项目每天工时。
-            //由isRecent判断是否只获取最近30天的数据
             List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHour(userId);
             this.generateSelfWorkHourByWorkHourList(selfList);
         }else {

+ 0 - 27
src/main/java/com/galaxis/manatee/service/LogUpdateService.java

@@ -44,33 +44,6 @@ public class LogUpdateService {
     }
 
     /**
-     * 更新所有日工时
-     */
-    public void updateAllChuanyunSelfWorkHour() {
-        long startTime = Instant.now().getEpochSecond();
-        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> this.updateChuanyunSelfWorkHourListByUserId(chuanyunUserCompanyDO.getUserId()));
-        log.info("更新所有每日工时花费" + (Instant.now().getEpochSecond() - startTime) + "秒");
-    }
-
-    /**
-     * 更新所有周工时
-     */
-    public void updateAllChuanyunWeekMemberHour() {
-        long startTime = Instant.now().getEpochSecond();
-        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> this.updateChuanyunWeekMemberHourListByUserId(chuanyunUserCompanyDO.getUserId()));
-        log.info("更新所有每周工时花费" + (Instant.now().getEpochSecond() - startTime) + "秒");
-    }
-
-    /**
-     * 更新所有月工时
-     */
-    public void updateAllChuanyunSelfCost() {
-        long startTime = Instant.now().getEpochSecond();
-        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> this.updateChuanyunSelfCostListByUserId(chuanyunUserCompanyDO.getUserId()));
-        log.info("更新所有每月工时花费" + (Instant.now().getEpochSecond() - startTime) + "秒");
-    }
-
-    /**
      * 更新最近一个月的标准每日工时
      */
     public void updateRecentChuanyunSelfWorkHour() {

+ 0 - 2
src/main/java/com/galaxis/manatee/service/ProjectMemberService.java

@@ -3,10 +3,8 @@ package com.galaxis.manatee.service;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.galaxis.manatee.dao.ChuanyunGroupProjectDao;
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunDevelopProjectDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunGroupProjectDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunManagerProjectDO;
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSaleProjectDO;
 import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunFindAllBizDTO;
 import com.galaxis.manatee.entity.chuanyun.dto.Filter;
 import com.galaxis.manatee.manager.ChuanYunManager;

+ 6 - 95
src/main/java/com/galaxis/manatee/task/ChuanyunHumanResourceScheduledTask.java

@@ -8,6 +8,7 @@ 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;
+import com.galaxis.manatee.service.LogDownloadService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
@@ -33,16 +34,16 @@ public class ChuanyunHumanResourceScheduledTask {
     private final ChuanyunHolidaySalaryRuleDao chuanyunHolidaySalaryRuleDao;
     private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
     private final ChuanyunPayrollDao chuanyunPayrollDao;
-    private final ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao;
+    private final LogDownloadService logDownloadService;
 
-    public ChuanyunHumanResourceScheduledTask(ChuanYunManager chuanYunManager, ChuanyunLogDao chuanyunLogDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunHolidaySalaryRuleDao chuanyunHolidaySalaryRuleDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunPayrollDao chuanyunPayrollDao, ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao) {
+    public ChuanyunHumanResourceScheduledTask(ChuanYunManager chuanYunManager, ChuanyunLogDao chuanyunLogDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunHolidaySalaryRuleDao chuanyunHolidaySalaryRuleDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunPayrollDao chuanyunPayrollDao, LogDownloadService logDownloadService) {
         this.chuanYunManager = chuanYunManager;
         this.chuanyunLogDao = chuanyunLogDao;
         this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
         this.chuanyunHolidaySalaryRuleDao = chuanyunHolidaySalaryRuleDao;
         this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
         this.chuanyunPayrollDao = chuanyunPayrollDao;
-        this.chuanyunUserDepartmentNameDao = chuanyunUserDepartmentNameDao;
+        this.logDownloadService = logDownloadService;
     }
 
     /**
@@ -59,99 +60,9 @@ public class ChuanyunHumanResourceScheduledTask {
     /**
      * 每天3点更新日志记录
      */
-//    @Scheduled(cron = "0 0 1 * * *")
+    @Scheduled(cron = "0 0 1 * * *")
     private void updateLog() {
-        var objectMapper = new ObjectMapper();
-        var start = 0;
-        var totalCount = 0L;
-        var flag = true;
-        List<String> matchersString=new ArrayList<>();
-        //由于需要统计流程中的日志,在日志数据同步时将状态为2的数据一并统计
-//        matchersString.add("Status_2,1");
-        matchersString.add("Status_6,[1;2;3]");
-//        matchersString.add("logDate_4,2019-01-01 00:00:00");
-        while (flag) {
-            Long startTime= Instant.now().getEpochSecond();
-            try {
-                //从氚云查询数据
-                var filter= Filter.instance(start,start+pageSize,true,Filter.AND,matchersString);
-                var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunLogDO.SCHEMA_CODE, filter);
-                if (chuanyunFindAllResponse.getReturnData() == null) {
-                    flag = false;
-                    continue;
-                }
-                if (chuanyunFindAllResponse.getReturnData().getTotalCount() >= start + pageSize) {
-                    start += pageSize;
-                } else {
-                    flag = false;
-                }
-                //转化为POJO
-                List<ChuanyunLogDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                });
-                result.forEach(chuanyunLogDO -> {
-                    if(chuanyunLogDO.getDayLogList()==null||chuanyunLogDO.getDayLogList().size()==0){
-                        chuanyunLogDO.setDayLogList(new ArrayList<>());
-                        log.warn("异常数据:"+chuanyunLogDO+"");
-                    }else{
-                        //如果有重复就删除
-                        chuanyunLogDao.findById(chuanyunLogDO.getObjectId()).ifPresent(toDelete -> {
-                            chuanyunLogDao.delete(toDelete);
-                        });
-                        //根据projectId获取code,如果是生产项目,则不用处理
-                        //针对前期测试数据,可能出现日志为空的情况,跳过不处理
-                        chuanyunLogDO.getDayLogList().forEach(chuanyunDayLog -> {
-                            try{
-                                //离职人员补全用户Id及部门ID
-                                if (StringUtils.isEmpty(chuanyunLogDO.getUserId())){
-                                    var name="";
-                                    if (StringUtils.isEmpty(chuanyunDayLog.getContent())){
-                                        name=chuanyunLogDO.getName();
-                                    }else {
-                                        name=chuanyunDayLog.getContent();
-                                    }
-                                    chuanyunLogDO.setUserId(getCharacters(name));
-                                    ChuanyunUserDepartmentNameDO chuanyunUserDepartmentNameDO = chuanyunUserDepartmentNameDao.findByUserName(chuanyunLogDO.getUserId());
-                                    if (chuanyunUserDepartmentNameDO!=null){
-                                        chuanyunLogDO.setDepartmentName(chuanyunUserDepartmentNameDO.getDepartmentName());
-                                    }
-                                }else {
-                                  ChuanyunUserCompanyDO chuanyunUserCompanyDO = chuanyunUserCompanyDao.findByUserId(chuanyunLogDO.getUserObject().getObjectId());
-                                  if (chuanyunUserCompanyDO!=null){
-                                      chuanyunLogDO.setDepartmentName(getDepartmentName(chuanyunUserCompanyDO.getDepartment()));
-                                  }
-                                }
-
-                                if(!"生产项目".equals(chuanyunDayLog.getProjectType())&& StringUtils.isEmpty(chuanyunDayLog.getProjectId())){
-                                    log.info("项目Id为空数据:"+chuanyunLogDO+"");
-                                }else if(!"生产项目".equals(chuanyunDayLog.getProjectType())){
-                                    ChuanyunGroupProjectDO chuanyunGroupProjectDO=chuanyunGroupProjectDao.findById(chuanyunDayLog.getProjectId()).orElseThrow();
-                                    chuanyunDayLog.setProjectCode(chuanyunGroupProjectDO.getProjectCode());
-                                }
-                            }catch (Exception e){
-                                e.printStackTrace();
-                                log.warn("错误数据:"+chuanyunLogDO+"");
-                            }
-                        });
-                        //判断所属部门是否正确
-                        //目前已经通过excel方式更新完成这个方法暂时不需要使用
-//                        checkDepartment(chuanyunLogDO);
-                    }
-                    //处理项目userId
-                    if(chuanyunLogDO.getUserObject()!=null){
-                        chuanyunLogDO.setUserId(chuanyunLogDO.getUserObject().getObjectId());
-                    }
-                });
-                //获取项目总数
-                totalCount = chuanyunFindAllResponse.getReturnData().getTotalCount();
-                //保存
-                chuanyunLogDao.saveAll(result);
-            } catch (Exception e) {
-                log.error(e.getMessage());
-                e.printStackTrace();
-            }
-            log.info("历史日志100条保存时间"+(Instant.now().getEpochSecond()-startTime)+"秒");
-        }
-        log.info("历史日志信息保存" + totalCount);
+        logDownloadService.saveChuanyunLogDO(false);
     }
 
     /**

+ 2 - 14
src/main/java/com/galaxis/manatee/task/LogCheckTask.java

@@ -1,6 +1,5 @@
 package com.galaxis.manatee.task;
 
-import com.galaxis.manatee.dao.ChuanyunGroupProjectDao;
 import com.galaxis.manatee.dao.ChuanyunUserCompanyDao;
 import com.galaxis.manatee.service.LogCheckService;
 import lombok.extern.slf4j.Slf4j;
@@ -18,12 +17,10 @@ public class LogCheckTask {
 
     private final LogCheckService logCheckService;
     private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
-    private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
 
-    public LogCheckTask(LogCheckService logCheckService, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao) {
+    public LogCheckTask(LogCheckService logCheckService, ChuanyunUserCompanyDao chuanyunUserCompanyDao) {
         this.logCheckService = logCheckService;
         this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
-        this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
     }
 
     /**
@@ -33,7 +30,7 @@ public class LogCheckTask {
      * 2.遍历每个用户,核对每周、每月工时准确性
      * 3.遍历每个项目核对每个项目总工时
      */
-//    @Scheduled(fixedDelay = 432000000L)
+    @Scheduled(fixedDelay = 432000000L)
     private void checkLod(){
         chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> {
             long start=System.currentTimeMillis();
@@ -48,14 +45,5 @@ public class LogCheckTask {
             }
             log.info("修改"+chuanyunUserCompanyDO.getUserName()+"工时信息耗时"+(System.currentTimeMillis()-start));
         });
-        //核对每周、每月、每个项目工时准确性
-        chuanyunGroupProjectDao.findAll().forEach(chuanyunGroupProjectDO -> {
-            try{
-                logCheckService.checkProjectWorkHour(chuanyunGroupProjectDO.getObjectId());
-            }catch (Exception e){
-                log.error(""+chuanyunGroupProjectDO);
-                log.error(e.getMessage());
-            }
-        });
     }
 }

+ 28 - 436
src/main/java/com/galaxis/manatee/task/WorkHourStatistics.java

@@ -1,36 +1,19 @@
 package com.galaxis.manatee.task;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.galaxis.manatee.constant.ChuanYunConstant;
-import com.galaxis.manatee.dao.*;
-import com.galaxis.manatee.entity.chuanyun.data.object.*;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunFindAllBizDTO;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
-import com.galaxis.manatee.entity.chuanyun.dto.Filter;
-import com.galaxis.manatee.exception.BigSizeException;
-import com.galaxis.manatee.manager.ChuanYunManager;
+import com.galaxis.manatee.dao.ChuanyunSelfWorkHourDao;
+import com.galaxis.manatee.dao.ChuanyunUserCompanyDao;
+import com.galaxis.manatee.dao.ChuanyunWorkHourDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
+import com.galaxis.manatee.service.LogService;
 import com.galaxis.manatee.service.LogStandardService;
-import com.galaxis.manatee.service.LogUpdateService;
-import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
-import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
-import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -41,48 +24,45 @@ import java.util.List;
 @Service
 @Slf4j
 public class WorkHourStatistics {
-    private final ObjectMapper objectMapper = new ObjectMapper();
-    private final ChuanYunManager chuanYunManager;
     private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
     private final ChuanyunWorkHourDao chuanyunWorkHourDao;
     private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
-    private final ChuanyunSelfCostDao chuanyunSelfCostDao;
-    private final ChuanyunMemberCostDao chuanyunMemberCostDao;
     private final LogStandardService logStandardService;
-    private final LogUpdateService logUpdateService;
+    private final LogService logService;
 
-    public WorkHourStatistics(ChuanYunManager chuanYunManager, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao, ChuanyunMemberCostDao chuanyunMemberCostDao, LogStandardService logStandardService, LogUpdateService logUpdateService) {
-        this.chuanYunManager = chuanYunManager;
+    public WorkHourStatistics(ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, LogStandardService logStandardService, LogService logService) {
         this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
         this.chuanyunWorkHourDao = chuanyunWorkHourDao;
         this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
-        this.chuanyunSelfCostDao = chuanyunSelfCostDao;
-        this.chuanyunMemberCostDao = chuanyunMemberCostDao;
         this.logStandardService = logStandardService;
-        this.logUpdateService = logUpdateService;
+        this.logService = logService;
     }
 
     /**
-     * 每3小时上传一次所有日工时、周工时、月工时
+     * 每2天执行一次所有工时数据的标准化、上传操作。
      */
-    @Scheduled(fixedDelay = 10800000L)
+    @Scheduled(fixedDelay = 8640000000L)
     public void updateHour(){
-        logUpdateService.updateAllChuanyunSelfWorkHour();
-        logUpdateService.updateAllChuanyunWeekMemberHour();
-        logUpdateService.updateAllChuanyunSelfCost();
+        //每日工时标准化
+        standardWorkHour();
+        standardWeeklyWorkHour();
+        standardMonthlyWorkHour();
+    }
+
+    /**
+     * 更新数据到
+     */
+    @Scheduled(fixedDelay = 864000000L)
+    public void updateWorkHour(){
+        logService.updateAllChuanyunSelfWorkHour();
+        logService.updateAllChuanyunWeekMemberHour();
+        logService.updateAllChuanyunSelfCost();
     }
 
     /**
      * 更新所有项目工时
      */
-//    @Scheduled(fixedDelay = 432000000L)
-    @Async
     public void standardHour() {
-        //每日工时标准化
-        standardWorkHour();
-        standardWeeklyWorkHour();
-//        standardMonthlyWorkHour();
-//        projectMemberHour();
         //离职人员工时标准化
 //        quitStandardHour();
     }
@@ -91,183 +71,21 @@ public class WorkHourStatistics {
      * 每日工时标准化
      */
     private void standardWorkHour() {
-        var pageSize = 20;
-        var page = 0;
-        while (true) {
-            var pageable = PageRequest.of(page, pageSize);
-            var chuanyunUserCompanyList = chuanyunUserCompanyDao.findAllByStatus(1, pageable);
-            if (page <= chuanyunUserCompanyList.getTotalPages()) {
-                page += 1;
-                //逐个将员工每天工时进行统计汇总
-                List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
-                //工时标准化
-                userCompanyDOList.forEach(chuanyunUserCompanyDO -> logStandardService.standardHourByUserCompanyAndIsRecent(chuanyunUserCompanyDO, false));
-            } else {
-                break;
-            }
-        }
+        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> logStandardService.standardSelfWorkHourByUserId(chuanyunUserCompanyDO.getUserId()));
     }
 
     /**
      * 人员-项目-周度工时汇总
      */
     private void standardWeeklyWorkHour() {
-        logStandardService.standardAllWeekMemberHour();
+        logService.standardAllWeekMemberHour();
     }
 
     /**
      * 单月工时汇总
      */
     private void standardMonthlyWorkHour() {
-        var flag = true;
-        var pageSize = 20;
-        var page = 0;
-        log.info("开始月工时标准化");
-        while (flag) {
-            var pageable = PageRequest.of(page, pageSize);
-            var chuanyunUserCompanyList = chuanyunUserCompanyDao.findAllByStatus(1, pageable);
-            if (page <= chuanyunUserCompanyList.getTotalPages()) {
-                page += 1;
-                List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
-                //单项目单人单月成本
-                userCompanyDOList.forEach(this::standardMonthlyHour);
-            } else {
-                flag = false;
-            }
-        }
-    }
-
-    /**
-     * 员工每月、各个项目标准工时会职工
-     *
-     * @param chuanyunUserCompanyDO 员工信息
-     */
-    private void standardMonthlyHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
-        log.info(chuanyunUserCompanyDO.getUserName() + "月工时更新");
-        //删除上一次状态为审核中,但本次已经审核通过的数据
-        chuanyunSelfCostDao.findAllByStatusAndUserId(ChuanYunConstant.IN_PROCESS, chuanyunUserCompanyDO.getUserId()).forEach(chuanyunSelfCostDO -> {
-            List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList = chuanyunSelfWorkHourDao.findAllByUserIdAndProjectIdAndProjectTypeAndStatusAndDayLogDateBetween(
-                    chuanyunSelfCostDO.getUserId(),
-                    chuanyunSelfCostDO.getProjectId(),
-                    chuanyunSelfCostDO.getProjectType(),
-                    ChuanYunConstant.IN_PROCESS,
-                    chuanyunSelfCostDO.getDayLogDate(),
-                    chuanyunSelfCostDO.getDayLogDate().plusMonths(1L));
-            //如果没有仍在审批中的每日工时,则将该月、该项目的审核中的月工时统计删除,manatee数据库与氚云
-            if (chuanyunSelfWorkHourList.size() == 0) {
-                //删除manatee中的在审核工时
-                chuanyunSelfCostDao.delete(chuanyunSelfCostDO);
-                //删除氚云中的在审核工时
-                List<String> matchers = new ArrayList<>();
-                matchers.add("F0000003_2," + chuanyunSelfCostDO.getProjectId());
-                matchers.add("F0000009_2," + ChuanYunConstant.IN_PROCESS);
-                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);
-                try {
-                    ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE, filter);
-                    if (chuanyunFindAllResponse.getReturnData() != null) {
-                        List<ChuanyunMemberMonthCostDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                        });
-                        result.forEach(chuanyunMemberMonthCostDO -> {
-                            try {
-                                chuanYunManager.delete(ChuanyunMemberMonthCostDO.SCHEMA_CODE, chuanyunMemberMonthCostDO.getObjectId());
-                            } catch (Exception e) {
-                                log.error("逐条删除失败" + e.getMessage());
-                            }
-                        });
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    log.error("删除已审核通过的月度数据汇总失败");
-                }
-            }
-        });
-        //每月每项目工时,按月-项目-用户分组统计标准工时
-        List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHour(chuanyunUserCompanyDO.getUserId());
-        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        list.forEach(projectMonth -> {
-            //获取人员-月度-相同工时状态标准工时汇总
-            ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(projectMonth.getUserId(), df.format(projectMonth.getDayLogDate()), projectMonth.getStatus());
-            ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
-            chuanyunSelfCostDO.setStatus(projectMonth.getStatus());
-            if (monthHour != null) {
-                chuanyunSelfCostDO.setMonthlyTotalHour(monthHour.getStandardWorkHour());
-            }
-            chuanyunSelfCostDO.setProjectId(projectMonth.getProjectId());
-            chuanyunSelfCostDO.setProjectType(projectMonth.getProjectType());
-            chuanyunSelfCostDO.setUserId(projectMonth.getUserId());
-            chuanyunSelfCostDO.setDayLogDate(projectMonth.getDayLogDate().withDayOfMonth(1));
-            chuanyunSelfCostDO.setTotalHour(projectMonth.getStandardWorkHour());
-            chuanyunSelfCostDO.setDepartmentId(chuanyunUserCompanyDO.getDepartmentId());
-            ChuanyunSelfCostDO oldSelfDO = chuanyunSelfCostDao.getOldSelfDO(chuanyunSelfCostDO.getUserId(),
-                    chuanyunSelfCostDO.getProjectId(),
-                    chuanyunSelfCostDO.getProjectType(),
-                    df.format(chuanyunSelfCostDO.getDayLogDate()),
-                    projectMonth.getStatus());
-            if (oldSelfDO != null) {
-                chuanyunSelfCostDao.delete(oldSelfDO);
-            }
-            chuanyunSelfCostDao.save(chuanyunSelfCostDO);
-        });
-    }
-
-    /**
-     * 人员项目工时汇总
-     */
-    private void projectMemberHour() {
-        List<ChuanyunMemberCostDO> list = chuanyunMemberCostDao.getMemberCost();
-        list.forEach(chuanyunMemberCostDO -> {
-            if (StringUtils.isEmpty(chuanyunMemberCostDO.getProjectId())) {
-                ChuanyunMemberCostDO oldCostDO = chuanyunMemberCostDao.findByUserIdAndProjectIdAndProjectTypeAndStatus(chuanyunMemberCostDO.getUserId(), chuanyunMemberCostDO.getProjectId(), chuanyunMemberCostDO.getProjectType(), chuanyunMemberCostDO.getStatus());
-                if (oldCostDO != null) {
-                    chuanyunMemberCostDao.delete(oldCostDO);
-                }
-                chuanyunMemberCostDao.save(chuanyunMemberCostDO);
-                //搜索是否有审批中数据
-                ChuanyunMemberCostDO processdo = chuanyunMemberCostDao.getProcessProjectMemberCost(chuanyunMemberCostDO.getProjectId(), chuanyunMemberCostDO.getProjectType(), chuanyunMemberCostDO.getUserId());
-                if (processdo == null) {
-                    chuanyunMemberCostDao.deleteByProjectIdAndUserIdAndProjectTypeAndStatus(chuanyunMemberCostDO.getProjectId(), chuanyunMemberCostDO.getUserId(), chuanyunMemberCostDO.getProjectType(), "2");
-                    deleteExamineStatus(ChuanyunProjectMemberCostDO.SCHEMA_CODE, "F0000007", "F0000001", chuanyunMemberCostDO.getProjectId(), "F0000002", chuanyunMemberCostDO.getUserId(), "", "", "", "", "", "", "F0000005", chuanyunMemberCostDO.getProjectType());
-                }
-                //更新氚云数据
-                try {
-                    ChuanyunProjectMemberCostDTO chuanyunProjectMemberCostDTO = new ChuanyunProjectMemberCostDTO();
-                    chuanyunProjectMemberCostDTO.setProjectId(chuanyunMemberCostDO.getProjectId());
-                    chuanyunProjectMemberCostDTO.setUserId(chuanyunMemberCostDO.getUserId());
-                    chuanyunProjectMemberCostDTO.setWorkHour(chuanyunMemberCostDO.getTotalHour());
-                    chuanyunProjectMemberCostDTO.setProjectType(chuanyunMemberCostDO.getProjectType());
-                    chuanyunProjectMemberCostDTO.setStatus(chuanyunMemberCostDO.getStatus());
-                    chuanyunProjectMemberCostDTO.setPersonDays(chuanyunMemberCostDO.getPersonDays());
-                    List<String> matchers = new ArrayList<>();
-                    matchers.add("F0000001_2," + chuanyunMemberCostDO.getProjectId());
-                    matchers.add("F0000005_2," + chuanyunMemberCostDO.getProjectType());
-                    matchers.add("F0000007_2," + chuanyunMemberCostDO.getStatus());
-                    matchers.add("F0000002_2," + chuanyunMemberCostDO.getUserId());
-                    var filter = Filter.instance(0, 1, true, "And", matchers);
-                    var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunProjectMemberCostDO.SCHEMA_CODE, filter);
-                    var projectMemberString = objectMapper.writeValueAsString(chuanyunProjectMemberCostDTO);
-                    ChuanyunSaveDTO chuanyunSaveDTO;
-                    if (chuanyunFindAllResponse.getReturnData() != null) {
-                        List<ChuanyunProjectMemberCostDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                        });
-                        ChuanyunProjectMemberCostDO oldProjectMemberCostDO = result.get(0);
-                        chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberCostDO.SCHEMA_CODE, oldProjectMemberCostDO.getObjectId(), projectMemberString);
-                    } else {
-                        chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberCostDO.SCHEMA_CODE, projectMemberString, true);
-                    }
-                    if (!chuanyunSaveDTO.getSuccessful()) {
-                        log.warn("新增项目成员工时汇总失败");
-                    } else {
-                        log.info("新增项目成员工时汇总成功");
-                    }
-                } catch (JsonProcessingException | BigSizeException e) {
-                    e.printStackTrace();
-                    log.warn("########" + chuanyunMemberCostDO + "");
-                }
-            }
-        });
+        logService.standardAllSelfCost();
     }
 
     /**
@@ -308,230 +126,4 @@ public class WorkHourStatistics {
         log.info("离职人员工时标准化完成" + selfList.size());
     }
 
-    /**
-     * 删除状态为审核中数据
-     *
-     * @param schemaCode 氚云表ID
-     */
-    public void deleteExamineStatus(String schemaCode, String statusCode, String projectCode, String projectId, String userCode, String userId, String yearCode, String year, String monthCode, String month, String weekCode, String week, String typeCode, String projectType) {
-        try {
-            List<String> matchers = new ArrayList<>();
-            matchers.add(statusCode + "_2," + "2");
-            matchers.add(projectCode + "_2," + projectId);
-            if (!StringUtils.isEmpty(userId)) {
-                matchers.add(userCode + "_2," + userId);
-            }
-            if (!StringUtils.isEmpty(year)) {
-                matchers.add(yearCode + "_2," + year);
-            }
-            if (!StringUtils.isEmpty(month)) {
-                matchers.add(monthCode + "_2," + month);
-            }
-            if (!StringUtils.isEmpty(week)) {
-                matchers.add(weekCode + "_2," + week);
-            }
-            if (!StringUtils.isEmpty(projectType)) {
-                matchers.add(typeCode + "_2," + projectType);
-            }
-            var filter = Filter.instance(0, Integer.MAX_VALUE, true, "And", matchers);
-            var chuanyunFindAllResponse = chuanYunManager.findAll(schemaCode, filter);
-            if (chuanyunFindAllResponse.getReturnData() != null) {
-                List<ChuanyunCommonDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                });
-                result.forEach(basicDO -> {
-                    ChuanyunSaveDTO chuanyunSaveDTO = chuanYunManager.delete(schemaCode, basicDO.getObjectId());
-                    if (!chuanyunSaveDTO.getSuccessful()) {
-                        log.warn("删除状态为审核中数据失败");
-                    }
-                });
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            log.error(e.getMessage());
-        }
-    }
-
-    @Data
-    static class ChuanyunProjectMemberCostDTO {
-
-        /**
-         * 项目ID
-         */
-        @JsonProperty("F0000001")
-        private String projectId;
-
-        /**
-         * 项目类型
-         */
-        @JsonProperty("F0000005")
-        private String projectType;
-
-        /**
-         * 用户ID
-         */
-        @JsonProperty("F0000002")
-        private String userId;
-
-        /**
-         * 工时
-         */
-        @JsonProperty("F0000003")
-        private BigDecimal workHour;
-
-        /**
-         * 总人天
-         */
-        @JsonProperty("F0000006")
-        private BigDecimal personDays;
-
-        /**
-         * 工时状态
-         */
-        @JsonProperty("F0000007")
-        private String status;
-    }
-
-    /**
-     * 人员项目周度工时
-     */
-    @Data
-    static class ChuanyunProjectMemberWeekHourDTO {
-
-        @JsonProperty("F0000001")
-        private String projectId;
-
-        @JsonProperty("F0000002")
-        private String userId;
-
-        @JsonProperty("F0000003")
-        private String projectType;
-
-        @JsonProperty("F0000004")
-        private BigDecimal totalHour;
-
-        @JsonProperty("F0000005")
-        private BigDecimal personDays;
-
-        @JsonProperty("F0000008")
-        private String year;
-
-        @JsonProperty("F0000006")
-        private String week;
-
-        @JsonProperty("F0000007")
-        private String hourStatus;
-
-        /**
-         * 部门信息
-         */
-        @JsonProperty("F0000009")
-        private String departmentId;
-    }
-
-    /**
-     * 工时标准化更新数据
-     */
-    @Data
-    static class ChuanyunSelfWorkHourDTO {
-
-        @JsonProperty("F0000002")
-        private String userId;
-
-        @JsonProperty("F0000001")
-        private String projectId;
-
-        /**
-         * 项目类型
-         */
-        @JsonProperty("F0000005")
-        private String projectType;
-
-        @JsonProperty("F0000009")
-        private String departmentName;
-
-        /**
-         * 流程状态
-         */
-        @JsonProperty("F0000006")
-        private String status;
-
-        @JsonProperty("F0000003")
-        @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
-        @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
-        private LocalDateTime dayLogDate;
-
-        @JsonProperty("F0000004")
-        private BigDecimal standardWorkHour;
-
-        /**
-         * 部门Id
-         */
-        @JsonProperty("F0000007")
-        private String departmentId;
-
-        @JsonProperty("F0000008")
-        private String userName;
-
-        @JsonProperty("F0000010")
-        private String bg;
-    }
-
-    @Data
-    static class ChuanyunMemberMonthCostDTO {
-        /**
-         * 项目ID
-         */
-        @JsonProperty("F0000003")
-        private String projectId;
-
-        /**
-         * 项目类型
-         */
-        @JsonProperty("F0000008")
-        private String projectType;
-
-        /**
-         * 日志流程状态
-         */
-        @JsonProperty("F0000009")
-        private String status;
-
-        /**
-         * 用户ID
-         */
-        @JsonProperty("F0000002")
-        private String userId;
-
-        /**
-         * 日期
-         */
-        @JsonProperty("F0000004")
-        @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
-        @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
-        private LocalDateTime dayLogDate;
-
-        /**
-         * 工时
-         */
-        @JsonProperty("F0000005")
-        private BigDecimal workHour;
-
-        /**
-         * 成本
-         */
-        @JsonProperty("F0000006")
-        private BigDecimal cost;
-
-        /**
-         * 月度工时汇总
-         */
-        @JsonProperty("F0000007")
-        private BigDecimal monthWorkHour;
-
-        /**
-         * 部门Id
-         */
-        @JsonProperty("F0000010")
-        private String departmentId;
-    }
 }

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

@@ -1,26 +1,15 @@
 package com.galaxis.manatee.task;
 
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.galaxis.manatee.constant.ChuanYunConstant;
-import com.galaxis.manatee.dao.*;
-import com.galaxis.manatee.entity.chuanyun.data.object.*;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunFindAllBizDTO;
-import com.galaxis.manatee.entity.chuanyun.dto.Filter;
-import com.galaxis.manatee.manager.ChuanYunManager;
-import com.galaxis.manatee.service.DataArcherService;
+import com.galaxis.manatee.dao.ChuanyunUserCompanyDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserCompanyDO;
+import com.galaxis.manatee.service.LogDownloadService;
 import com.galaxis.manatee.service.LogStandardService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
 
 import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -29,29 +18,14 @@ import java.util.List;
 @Service
 @Slf4j
 public class WorkHourStatisticsRecently {
-    private final ChuanYunManager chuanYunManager;
-    private final ChuanyunLogDao chuanyunLogDao;
-    private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
+    private final LogDownloadService logDownloadService;
     private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
-    private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
-    private final ObjectMapper objectMapper=new ObjectMapper();
-    private final ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao;
-    private final ChuanyunSelfCostDao chuanyunSelfCostDao;
-    private final ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao;
     private final LogStandardService logStandardService;
-    private final DataArcherService dataArcherService;
 
-    public WorkHourStatisticsRecently(DataArcherService dataArcherService,ChuanYunManager chuanYunManager, ChuanyunLogDao chuanyunLogDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao, ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao, LogStandardService logStandardService) {
-        this.chuanYunManager = chuanYunManager;
-        this.chuanyunLogDao = chuanyunLogDao;
-        this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
+    public WorkHourStatisticsRecently(LogDownloadService logDownloadService, ChuanyunUserCompanyDao chuanyunUserCompanyDao, LogStandardService logStandardService) {
+        this.logDownloadService = logDownloadService;
         this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
-        this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
-        this.chuanyunWeekMemberHourDao = chuanyunWeekMemberHourDao;
-        this.chuanyunSelfCostDao = chuanyunSelfCostDao;
-        this.chuanyunUserDepartmentNameDao = chuanyunUserDepartmentNameDao;
         this.logStandardService = logStandardService;
-        this.dataArcherService=dataArcherService;
     }
 
     @Scheduled(fixedDelay = 3600000L)
@@ -66,103 +40,14 @@ public class WorkHourStatisticsRecently {
      * 更新最近一个月的日志信息
      */
     public void dayLog() {
-        var objectMapper = new ObjectMapper();
-        var start = 0;
-        var totalCount = 0L;
-        var flag = true;
-        var pageSize=100;
-        List<String> matchersString=new ArrayList<>();
-        //由于需要统计流程中的日志,在日志数据同步时将状态为2的数据一并统计
-        matchersString.add("Status_6,[1;2;3]");
-        //获取当前时间30天前日期
-        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        LocalDateTime now = LocalDateTime.now();
-        now = now.minus(30, ChronoUnit.DAYS);
-        matchersString.add("logDate_1,"+df.format(now));
-        while (flag) {
-            long startTime= Instant.now().getEpochSecond();
-            try {
-                //从氚云查询数据
-                var filter= Filter.instance(start,start+pageSize,true,Filter.AND,matchersString);
-                var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunLogDO.SCHEMA_CODE, filter);
-                if (chuanyunFindAllResponse.getReturnData() == null) {
-                    flag = false;
-                    continue;
-                }
-                if (chuanyunFindAllResponse.getReturnData().getTotalCount() >= start + pageSize) {
-                    start += pageSize;
-                } else {
-                    flag = false;
-                }
-                //转化为POJO
-                List<ChuanyunLogDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                });
-                result.forEach(chuanyunLogDO -> {
-                    if(chuanyunLogDO.getDayLogList()==null||chuanyunLogDO.getDayLogList().size()==0){
-                        chuanyunLogDO.setDayLogList(new ArrayList<>());
-                        log.warn(chuanyunLogDO+"");
-                        log.warn("异常数据");
-                    }else{
-                        //如果有重复就删除
-                        chuanyunLogDao.findById(chuanyunLogDO.getObjectId()).ifPresent(chuanyunLogDao::delete);
-                        //根据projectId获取code,如果是生产项目,则不用处理
-                        //针对前期测试数据,可能出现日志为空的情况,跳过不处理
-                        chuanyunLogDO.getDayLogList().forEach(chuanyunDayLog -> {
-                            //离职人员补全用户Id及部门ID
-                            if (StringUtils.isEmpty(chuanyunLogDO.getUserId())){
-                                var name="";
-                                if (StringUtils.isEmpty(chuanyunDayLog.getContent())){
-                                    name=chuanyunLogDO.getName();
-                                }else {
-                                    name=chuanyunDayLog.getContent();
-                                }
-                                chuanyunLogDO.setUserId(getCharacters(name));
-                                ChuanyunUserDepartmentNameDO chuanyunUserDepartmentNameDO = chuanyunUserDepartmentNameDao.findByUserName(chuanyunLogDO.getUserId());
-                                if (chuanyunUserDepartmentNameDO!=null){
-                                    chuanyunLogDO.setDepartmentName(chuanyunUserDepartmentNameDO.getDepartmentName());
-                                }
-                            }else {
-                                ChuanyunUserCompanyDO chuanyunUserCompanyDO = chuanyunUserCompanyDao.findByUserId(chuanyunLogDO.getUserObject().getObjectId());
-                                if (chuanyunUserCompanyDO!=null){
-                                    chuanyunLogDO.setDepartmentName(getDepartmentName(chuanyunUserCompanyDO.getDepartment()));
-                                }
-                            }
-                            try{
-                                if(!"生产项目".equals(chuanyunDayLog.getProjectType())&& StringUtils.isEmpty(chuanyunDayLog.getProjectId())){
-                                    log.info(chuanyunLogDO+"");
-                                }else if(!"生产项目".equals(chuanyunDayLog.getProjectType())){
-                                    ChuanyunGroupProjectDO chuanyunGroupProjectDO=chuanyunGroupProjectDao.findById(chuanyunDayLog.getProjectId()).orElseThrow();
-                                    chuanyunDayLog.setProjectCode(chuanyunGroupProjectDO.getProjectCode());
-                                }
-                            }catch (Exception e){
-                                e.printStackTrace();
-                                log.warn(chuanyunDayLog+"");
-                            }
-                        });
-                    }
-                    //处理项目userId
-                    if(chuanyunLogDO.getUserObject()!=null){
-                        chuanyunLogDO.setUserId(chuanyunLogDO.getUserObject().getObjectId());
-                    }
-                });
-                //获取项目总数
-                totalCount = chuanyunFindAllResponse.getReturnData().getTotalCount();
-                //保存
-                chuanyunLogDao.saveAll(result);
-            } catch (Exception e) {
-                log.error(e.getMessage());
-                e.printStackTrace();
-            }
-            log.info("日志100条保存时间"+(Instant.now().getEpochSecond()-startTime)+"秒");
-        }
-        log.info("最近一月历史日志信息保存" + totalCount);
+        logDownloadService.saveChuanyunLogDO(true);
     }
 
     /**
      * 同步最近一个月每日工时
      */
     public void standardWorkHour() {
-        log.info("开始每日工时标准化");
+        log.info("开始最近每日工时标准化");
         var pageSize = 20;
         var page = 0;
         long startTime=Instant.now().getEpochSecond();
@@ -179,7 +64,7 @@ public class WorkHourStatisticsRecently {
                 break;
             }
         }
-        log.info("每日工时标准化"+(Instant.now().getEpochSecond()-startTime)+"秒");
+        log.info("最近每日工时标准化"+(Instant.now().getEpochSecond()-startTime)+"秒");
     }
 
     /**
@@ -188,37 +73,16 @@ public class WorkHourStatisticsRecently {
     private void standardWeeklyWorkHour() {
         long start=Instant.now().getEpochSecond();
         //更新数据库
-        log.info("开始周工时标准化");
-        List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHourRecently();
-        list.forEach(chuanyunWeekMemberHourDO -> {
-            try{
-                if (chuanyunWeekMemberHourDO!=null){
-                    ChuanyunWeekMemberHourDO weekMemberHourDO = ChuanyunWeekMemberHourDO.fromChuanyunWeekMemberHourDO(chuanyunWeekMemberHourDO);
-                    ChuanyunWeekMemberHourDO oldWeekHour = chuanyunWeekMemberHourDao.findByProjectIdAndUserIdAndWeekAndStatusAndProjectTypeAndYear(chuanyunWeekMemberHourDO.getProjectId(),chuanyunWeekMemberHourDO.getUserId(),chuanyunWeekMemberHourDO.getWeek(),chuanyunWeekMemberHourDO.getStatus(),chuanyunWeekMemberHourDO.getProjectType(),chuanyunWeekMemberHourDO.getYear());
-                    if (oldWeekHour != null) {
-                        chuanyunWeekMemberHourDao.delete(oldWeekHour);
-                    }
-                    chuanyunWeekMemberHourDao.save(weekMemberHourDO);
-                    //搜索是否还有处于审批中的数据
-                    ChuanyunWeekMemberHourDO processWeekHour = chuanyunWeekMemberHourDao.getProcessWeekHour(chuanyunWeekMemberHourDO.getProjectId(),chuanyunWeekMemberHourDO.getUserId(),chuanyunWeekMemberHourDO.getYear(),chuanyunWeekMemberHourDO.getWeek(),chuanyunWeekMemberHourDO.getProjectType());
-                    if (processWeekHour == null){
-                        chuanyunWeekMemberHourDao.deleteByProjectIdAndUserIdAndYearAndWeekAndStatusAndProjectType(chuanyunWeekMemberHourDO.getProjectId(),chuanyunWeekMemberHourDO.getUserId(),chuanyunWeekMemberHourDO.getYear(),chuanyunWeekMemberHourDO.getWeek(),"2",chuanyunWeekMemberHourDO.getProjectType());
-                        //同时删除氚云钟数据
-                        dataArcherService.deleteExamineStatus(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,"F0000007","F0000001",chuanyunWeekMemberHourDO.getProjectId(),"F0000002",chuanyunWeekMemberHourDO.getUserId(),"F0000008",chuanyunWeekMemberHourDO.getYear(),"","","F0000006",chuanyunWeekMemberHourDO.getWeek(),"F0000003",chuanyunWeekMemberHourDO.getProjectType());
-                    }
-                }
-            }catch (Exception e){
-                log.error(e.getMessage()+"周工时标准化异常");
-            }
-        });
-        log.info("周工时标准化"+(Instant.now().getEpochSecond()-start)+"秒");
+        log.info("开始最近周工时标准化");
+        logStandardService.standardWeekMemberHourRecent();
+        log.info("最近周工时标准化"+(Instant.now().getEpochSecond()-start)+"秒");
     }
 
     /**
      * 单月工时汇总
      */
     private void standardMonthlyWorkHour() {
-        log.info("开始月工时汇总");
+        log.info("开始最近月工时汇总");
         var flag = true;
         var pageSize = 20;
         var page = 0;
@@ -229,99 +93,10 @@ public class WorkHourStatisticsRecently {
                 page += 1;
                 List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
                 //单项目单人单月成本
-                userCompanyDOList.forEach(this::standardMonthlyHour);
+                userCompanyDOList.forEach(chuanyunUserCompanyDO ->  logStandardService.standardSelfCostByUserId(chuanyunUserCompanyDO.getUserId()));
             }else {
                 flag = false;
             }
         }
     }
-
-    /**
-     * 员工每月、各个项目标准工时会职工
-     * @param chuanyunUserCompanyDO 员工信息
-     */
-    private void standardMonthlyHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
-        //删除上一次状态为审核中,但本次已经审核通过的数据
-        chuanyunSelfCostDao.findAllByStatusAndUserId(ChuanYunConstant.IN_PROCESS,chuanyunUserCompanyDO.getUserId()).forEach(chuanyunSelfCostDO -> {
-            List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList=chuanyunSelfWorkHourDao.findAllByUserIdAndProjectIdAndProjectTypeAndStatusAndDayLogDateBetween(
-                    chuanyunSelfCostDO.getUserId(),
-                    chuanyunSelfCostDO.getProjectId(),
-                    chuanyunSelfCostDO.getProjectType(),
-                    ChuanYunConstant.IN_PROCESS,
-                    chuanyunSelfCostDO.getDayLogDate(),
-                    chuanyunSelfCostDO.getDayLogDate().plusMonths(1L));
-            //如果没有仍在审批中的每日工时,则将该月、该项目的审核中的月工时统计删除,manatee数据库与氚云
-            if(chuanyunSelfWorkHourList.size()==0){
-                //删除manatee中的在审核工时
-                chuanyunSelfCostDao.delete(chuanyunSelfCostDO);
-                //删除氚云中的在审核工时
-                List<String> matchers = new ArrayList<>();
-                matchers.add("F0000003_2,"+chuanyunSelfCostDO.getProjectId());
-                matchers.add("F0000009_2,"+ChuanYunConstant.IN_PROCESS);
-                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);
-                try {
-                    ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE,filter);
-                    if (chuanyunFindAllResponse.getReturnData()!=null){
-                        List<ChuanyunMemberMonthCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-                        result.forEach(chuanyunMemberMonthCostDO -> {
-                            try{
-                                chuanYunManager.delete(ChuanyunMemberMonthCostDO.SCHEMA_CODE,chuanyunMemberMonthCostDO.getObjectId());
-                            }catch (Exception e){
-                                log.error("逐条删除失败"+e.getMessage());
-                            }
-                        });
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    log.error("删除已审核通过的月度数据汇总失败");
-                }
-            }
-        });
-        //每月每项目工时,按月-项目-用户分组统计标准工时
-        List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHourRecently(chuanyunUserCompanyDO.getUserId());
-        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        list.forEach(projectMonth->{
-            //获取人员-月度-相同工时状态标准工时汇总
-            ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()),projectMonth.getStatus());
-            ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
-            chuanyunSelfCostDO.setStatus(projectMonth.getStatus());
-            if (monthHour!=null){
-                chuanyunSelfCostDO.setMonthlyTotalHour(monthHour.getStandardWorkHour());
-            }
-            chuanyunSelfCostDO.setProjectId(projectMonth.getProjectId());
-            chuanyunSelfCostDO.setProjectType(projectMonth.getProjectType());
-            chuanyunSelfCostDO.setUserId(projectMonth.getUserId());
-            chuanyunSelfCostDO.setDayLogDate(projectMonth.getDayLogDate().withDayOfMonth(1));
-            chuanyunSelfCostDO.setTotalHour(projectMonth.getStandardWorkHour());
-            chuanyunSelfCostDO.setDepartmentId(chuanyunUserCompanyDO.getDepartmentId());
-            ChuanyunSelfCostDO oldSelfDO = chuanyunSelfCostDao.getOldSelfDO(chuanyunSelfCostDO.getUserId(),
-                    chuanyunSelfCostDO.getProjectId(),
-                    chuanyunSelfCostDO.getProjectType(),
-                    df.format(chuanyunSelfCostDO.getDayLogDate()),
-                    projectMonth.getStatus());
-            if (oldSelfDO !=null) {
-                chuanyunSelfCostDao.delete(oldSelfDO);
-            }
-            chuanyunSelfCostDao.save(chuanyunSelfCostDO);
-        });
-    }
-
-
-    private String getCharacters(String str){
-        String reg = "[^\u4e00-\u9fa5]";
-        str = str.replaceAll(reg, " ");
-        return str.trim();
-    }
-
-    private String getDepartmentName(String str){
-        if (str.contains("/")){
-            String[] department = str.split("/");
-            return department[department.length-1];
-        }else {
-            return str;
-        }
-    }
 }

+ 3 - 3
src/main/java/com/galaxis/manatee/webservice/CountryEndpoint.java

@@ -75,11 +75,11 @@ public class CountryEndpoint {
 		InvokeResponse invokeResponse=new InvokeResponse();
 		//书写调用第三方接口方法
 		log.info("开始数据同步");
-		if (request.getMethodName().equals("managerProject")){
+		if ("managerProject".equals(request.getMethodName())){
 			projectMemberService.updateManagerMember(request.getParam());
-		}else if (request.getMethodName().equals("saleProject")){
+		}else if ("saleProject".equals(request.getMethodName())){
 			projectMemberService.updateSaleMember(request.getParam());
-		}else if (request.getMethodName().equals("developProject")){
+		}else if ("developProject".equals(request.getMethodName())){
 			projectMemberService.updateDevelopMember(request.getParam());
 		}else {
 			chuanyunHumanResourceScheduledTask.getPayrollManually();