Bläddra i källkod

1.新增了工时检查功能,待补充具体实现
2.更新了每周工时对象实例化方法

verguenza 4 år sedan
förälder
incheckning
3426f41595

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

@@ -1,6 +1,6 @@
 package com.galaxis.manatee.controller;
 
-import com.galaxis.manatee.service.LogService;
+import com.galaxis.manatee.service.LogCheckService;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
@@ -14,10 +14,10 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 public class WorkHourController {
 
-    private final LogService logService;
+    private final LogCheckService logCheckService;
 
-    public WorkHourController(LogService logService) {
-        this.logService = logService;
+    public WorkHourController(LogCheckService logCheckService) {
+        this.logCheckService = logCheckService;
     }
 
     /**
@@ -26,6 +26,10 @@ public class WorkHourController {
      */
     @GetMapping("/test/workHour/checkSelfWorkHour")
     public void checkSelfWorkHour(@RequestParam("userId") String userId){
-        logService.checkDayWorkHour(userId);
+        try {
+            logCheckService.checkDayWorkHour(userId);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 }

+ 5 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectTotalCostDO.java

@@ -10,6 +10,11 @@ import lombok.extern.slf4j.Slf4j;
 import javax.persistence.Entity;
 import java.math.BigDecimal;
 
+/**
+ * 氚云-》开发应用-》项目工时汇总
+ * @author kxuan
+ *
+ */
 @Slf4j
 @EqualsAndHashCode(callSuper = true)
 @Data

+ 0 - 5
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunReimbursementDO.java

@@ -36,7 +36,6 @@ public class ChuanyunReimbursementDO extends BasicDO{
 
     /**
      * 公司编码
-     * TODO 根据beneficiaryId替换为公司编码  完成待验证
      *
      */
     private String reimburseUserCompanyCode;
@@ -80,7 +79,6 @@ public class ChuanyunReimbursementDO extends BasicDO{
 
     /**
      * 供应商编码
-     * TODO 根据supplierId转化为code
      */
     private String supplierCode;
 
@@ -104,13 +102,11 @@ public class ChuanyunReimbursementDO extends BasicDO{
 
     /**
      * 报销人工号
-     * TODO 根据reimburseUserId转化为code
      */
     private String reimburseUserCode;
 
     /**
      * 报销人成本中心编码
-     * TODO 从todo 从reimburseUserCompanyId获取
      */
     private String reimburseUserCostCode;
 
@@ -158,7 +154,6 @@ public class ChuanyunReimbursementDO extends BasicDO{
 
     /**
      * 受益公司银行账号
-     * TODO 根据beneficiaryId获得
      */
     private String beneficiaryBankAccount;
 

+ 0 - 3
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunReimbursementDetailDO.java

@@ -58,7 +58,6 @@ public class ChuanyunReimbursementDetailDO extends BasicSubDO{
 
     /**
      * 报销科目
-     * todo 从reimburseSubjectId获取
      */
     private String reimburseSubjectName;
 
@@ -71,7 +70,6 @@ public class ChuanyunReimbursementDetailDO extends BasicSubDO{
 
     /**
      * 公司编码
-     * TODO 根据父表beneficiaryId替换为公司编码
      */
     private String reimburseUserCompanyCode;
 
@@ -83,7 +81,6 @@ public class ChuanyunReimbursementDetailDO extends BasicSubDO{
 
     /**
      * 项目编码
-     * todo 根据父表获得
      */
     private String groupProjectCode;
     /**

+ 17 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunWeekMemberHourDO.java

@@ -45,4 +45,21 @@ public class ChuanyunWeekMemberHourDO {
 
     private BigDecimal standardWorkHour;
 
+    /**
+     * 将一个ChuanyunWeekMemberHourDO对象的属性赋予另外一个ChuanyunWeekMemberHourDO对象,并返回该对象
+     * @param chuanyunWeekMemberHourDO  原来的ChuanyunWeekMemberHourDO对象
+     * @return  新的对象
+     */
+    public static ChuanyunWeekMemberHourDO fromChuanyunWeekMemberHourDO(ChuanyunWeekMemberHourDO chuanyunWeekMemberHourDO){
+        ChuanyunWeekMemberHourDO newChuanyunWeekMemberHourDO=new ChuanyunWeekMemberHourDO();
+        newChuanyunWeekMemberHourDO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
+        newChuanyunWeekMemberHourDO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
+        newChuanyunWeekMemberHourDO.setStandardWorkHour(chuanyunWeekMemberHourDO.getStandardWorkHour());
+        newChuanyunWeekMemberHourDO.setStatus(chuanyunWeekMemberHourDO.getStatus());
+        newChuanyunWeekMemberHourDO.setUserId(chuanyunWeekMemberHourDO.getUserId());
+        newChuanyunWeekMemberHourDO.setYear(chuanyunWeekMemberHourDO.getYear());
+        newChuanyunWeekMemberHourDO.setWeek(chuanyunWeekMemberHourDO.getWeek());
+        return newChuanyunWeekMemberHourDO;
+    }
+
 }

+ 202 - 0
src/main/java/com/galaxis/manatee/service/LogCheckService.java

@@ -0,0 +1,202 @@
+package com.galaxis.manatee.service;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.dao.ChuanyunSelfWorkHourDao;
+import com.galaxis.manatee.dao.ChuanyunWorkHourDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunMemberHourDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
+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.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2021/3/4 4:27 上午
+ */
+@Slf4j
+@Service
+public class LogCheckService {
+    private final ObjectMapper objectMapper = new ObjectMapper();
+    private final ChuanyunWorkHourDao chuanyunWorkHourDao;
+    private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
+    private final ChuanYunManager chuanYunManager;
+
+    public LogCheckService(ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanYunManager chuanYunManager) {
+        this.chuanyunWorkHourDao = chuanyunWorkHourDao;
+        this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
+        this.chuanYunManager = chuanYunManager;
+    }
+
+    /**
+     * 根据当前userId核对以下内容:
+     * 日志原始数据每日各个项目工时信息(可使用ChuanyunWorkHourDao中方法进行查询),与系统中保存每日工时(ChuanyunSelfWorkHourDO)进行比较
+     * 完成核对后,删除数据库中多余的每周工时
+     * 完成核对后,删除氚云中中多余的每周工时
+     *
+     * @param userId 用户Id
+     * @throws Exception 用户Id为空异常
+     */
+    public void checkDayWorkHour(String userId) throws Exception {
+        if (StringUtils.isEmpty(userId)) {
+            throw new Exception("用户Id为空");
+        }
+        long start = System.currentTimeMillis();
+        log.info("开始核对日志原始工时与标准化工时");
+        //根据日志原始数据获取单个人的所有工时记录
+        List<ChuanyunWorkHourDO> chuanyunWorkHourList = chuanyunWorkHourDao.getSelfWorkHour(userId);
+        //根据标准化工时获取单个人的标准化工时记录
+        List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList = chuanyunSelfWorkHourDao.findByUserId(userId);
+        //删除多余每日工时
+        compareDayWorkHour(chuanyunWorkHourList, chuanyunSelfWorkHourList);
+        log.info("核对耗时" + (System.currentTimeMillis() - start) + "毫秒");
+    }
+
+    /**
+     * 根据当前userId核对以下内容:
+     * 标准化每日工时统计每周工时的结果(可使用ChuanyunWeekMemberHourDao中方法进行查询),与系统中保存每周工时(ChuanyunWeekMemberHourDO)进行比较
+     * 完成核对后,更新或删除数据库中多余的每周工时
+     * 完成核对后,更新或删除氚云中中多余的每周工时
+     *
+     * @param userId 用户Id
+     * @throws Exception 用户Id为空异常
+     */
+    public void checkWeekWorkHour(String userId) throws Exception {
+        //@TODO
+        //***
+        //@TODO
+        updateChuanyunWeekWorkHour();
+        updateManateeWeekWorkHour();
+    }
+
+    /**
+     * 根据当前userId核对以下内容:
+     * 标准化每日工时统计每月工时的结果(可用ChuanyunSelfWorkHourDao中的方法),与系统中保存每月工时(ChuanyunSelfCostDO)进行比较
+     * 完成核对后,更新或删除数据库中多余的每周工时
+     * 完成核对后,更新或删除氚云中中多余的每周工时
+     *
+     * @param userId 用户Id
+     * @throws Exception 用户Id为空异常
+     */
+    public void checkMonthWorkHour(String userId) throws Exception {
+        //@TODO
+        //***
+        //@TODO
+        updateChuanyunMonthWorkHour();
+        updateManateeMonthWorkHour();
+    }
+
+    /**
+     * 根据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     日志原始工时
+     * @param chuanyunSelfWorkHourList 标准化工时列表
+     */
+    private void compareDayWorkHour(List<ChuanyunWorkHourDO> chuanyunWorkHourList, List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList) {
+        Map<String, Integer> map = new HashMap<>(64);
+        //判断人员项目每日工时数量书否有变动
+        if (chuanyunWorkHourList.size() != chuanyunSelfWorkHourList.size()) {
+            //如果有变动将
+            for (ChuanyunWorkHourDO chuanyunWorkHourDO : chuanyunWorkHourList) {
+                map.put(chuanyunWorkHourDO.getUserId() + chuanyunWorkHourDO.getProjectId() + chuanyunWorkHourDO.getDayLogDate(), 1);
+            }
+            //比较是否有撤回工时
+            for (ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO : chuanyunSelfWorkHourList) {
+                Integer count = map.get(chuanyunSelfWorkHourDO.getUserId() + chuanyunSelfWorkHourDO.getProjectId() + chuanyunSelfWorkHourDO.getDayLogDate());
+                if (count == null) {
+                    try {
+                        //删除数据库日工时
+                        chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO);
+                        //删除氚云日工时
+                        List<String> matchers = new ArrayList<>();
+                        matchers.add("F0000001_2," + chuanyunSelfWorkHourDO.getProjectId());
+                        matchers.add("F0000002_2," + chuanyunSelfWorkHourDO.getUserId());
+                        matchers.add("F0000003_2," + chuanyunSelfWorkHourDO.getDayLogDate());
+                        var filter = Filter.instance(0, 1, true, "And", matchers);
+                        var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberHourDO.SCHEMA_CODE, filter);
+                        ChuanyunSaveDTO chuanyunSaveDTO;
+                        if (chuanyunFindAllResponse.getReturnData() != null) {
+                            List<ChuanyunMemberHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                            });
+                            chuanyunSaveDTO = chuanYunManager.delete(ChuanyunMemberHourDO.SCHEMA_CODE, result.get(0).getObjectId());
+                        }
+                        log.info(chuanyunSelfWorkHourDO.getUserId() + "删除" + chuanyunSelfWorkHourDO.getDayLogDate() + "位于" + chuanyunSelfWorkHourDO.getProjectId() + "工时");
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        log.error(e.getMessage());
+                    }
+                }
+            }
+        }
+    }
+
+}

+ 4 - 74
src/main/java/com/galaxis/manatee/service/LogService.java

@@ -1,28 +1,19 @@
 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.ChuanyunSelfWorkHourDao;
 import com.galaxis.manatee.dao.ChuanyunWorkHourDao;
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunMemberHourDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserCompanyDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
-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.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 更新日志中所用到的服务
@@ -33,17 +24,14 @@ import java.util.Map;
  */
 @Slf4j
 @Service
-public class LogService {
-    private final ObjectMapper objectMapper = new ObjectMapper();
+public class LogStandardService {
     private final ChuanyunWorkHourDao chuanyunWorkHourDao;
     private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
-    private final ChuanYunManager chuanYunManager;
     private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
 
-    public LogService(ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanYunManager chuanYunManager, ChuanyunGroupProjectDao chuanyunGroupProjectDao) {
+    public LogStandardService(ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao) {
         this.chuanyunWorkHourDao = chuanyunWorkHourDao;
         this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
-        this.chuanYunManager = chuanYunManager;
         this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
     }
 
@@ -79,66 +67,8 @@ public class LogService {
                     e.printStackTrace();
                 }
             });
-        }
-    }
-
-    /**
-     * 核对日志原始数据与每日工时标准化数据差异
-     *
-     * @param userId 人员对象ID
-     */
-    public void checkDayWorkHour(String userId) {
-        long start=System.currentTimeMillis();
-        log.info("开始核对日志原始工时与标准化工时");
-        //根据日志原始数据获取单个人的所有工时记录
-        List<ChuanyunWorkHourDO> chuanyunWorkHourList = chuanyunWorkHourDao.getSelfWorkHour(userId);
-        //根据标准化工时获取单个人的标准化工时记录
-        List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList = chuanyunSelfWorkHourDao.findByUserId(userId);
-        //删除多余每日工时
-        compareDayWorkHour(chuanyunWorkHourList, chuanyunSelfWorkHourList);
-        log.info("核对耗时"+(System.currentTimeMillis()-start)+"毫秒");
-    }
-
-    /**
-     * 删除多余每日工时
-     *
-     * @param chuanyunWorkHourList      日志原始工时
-     * @param chuanyunSelfWorkHourList  标准化工时列表
-     */
-    private void compareDayWorkHour(List<ChuanyunWorkHourDO> chuanyunWorkHourList, List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList) {
-        Map<String, Integer> map = new HashMap<>(64);
-        //判断工时是否有撤回
-        if (chuanyunWorkHourList.size() != chuanyunSelfWorkHourList.size()) {
-            for (ChuanyunWorkHourDO chuanyunWorkHourDO : chuanyunWorkHourList) {
-                map.put(chuanyunWorkHourDO.getUserId() + chuanyunWorkHourDO.getProjectId() + chuanyunWorkHourDO.getDayLogDate(), 1);
-            }
-            //比较是否有撤回工时
-            for (ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO : chuanyunSelfWorkHourList) {
-                Integer count = map.get(chuanyunSelfWorkHourDO.getUserId() + chuanyunSelfWorkHourDO.getProjectId() + chuanyunSelfWorkHourDO.getDayLogDate());
-                if (count == null) {
-                    try {
-                        //删除数据库日工时
-                        chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO);
-                        //删除氚云日工时
-                        List<String> matchers = new ArrayList<>();
-                        matchers.add("F0000001_2," + chuanyunSelfWorkHourDO.getProjectId());
-                        matchers.add("F0000002_2," + chuanyunSelfWorkHourDO.getUserId());
-                        matchers.add("F0000003_2," + chuanyunSelfWorkHourDO.getDayLogDate());
-                        var filter = Filter.instance(0, 1, true, "And", matchers);
-                        var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberHourDO.SCHEMA_CODE, filter);
-                        ChuanyunSaveDTO chuanyunSaveDTO;
-                        if (chuanyunFindAllResponse.getReturnData() != null) {
-                            List<ChuanyunMemberHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
-                            });
-                            chuanyunSaveDTO = chuanYunManager.delete(ChuanyunMemberHourDO.SCHEMA_CODE, result.get(0).getObjectId());
-                        }
-                        log.info(chuanyunSelfWorkHourDO.getUserId() + "删除" + chuanyunSelfWorkHourDO.getDayLogDate() + "位于" + chuanyunSelfWorkHourDO.getProjectId() + "工时");
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                        log.error(e.getMessage());
-                    }
-                }
-            }
+        }else {
+            log.warn("用户信息中userId缺失");
         }
     }
 

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

@@ -1,16 +1,11 @@
 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.galaxis.manatee.dao.*;
 import com.galaxis.manatee.entity.chuanyun.data.object.*;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveAllDTO;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
 import com.galaxis.manatee.entity.chuanyun.dto.Filter;
 import com.galaxis.manatee.manager.ChuanYunManager;
-import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
@@ -38,10 +33,9 @@ public class ChuanyunFinancialScheduledTask {
     private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
     private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
     private final ChuanyunUserDao chuanyunUserDao;
-    private final ChuanyunCostDao chuanyunCostDao;
     private final ChuanyunReimbursementSubjectDao chuanyunReimbursementSubjectDao;
 
-    public ChuanyunFinancialScheduledTask(ChuanYunManager chuanYunManager, ChuanyunReimbursementDao chuanyunReimbursementDao, ChuanyunCompanyDao chuanyunCompanyDao, ChuanyunSupplierDao chuanyunSupplierDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunUserDao chuanyunUserDao, ChuanyunCostDao chuanyunCostDao, ChuanyunReimbursementSubjectDao chuanyunReimbursementSubjectDao) {
+    public ChuanyunFinancialScheduledTask(ChuanYunManager chuanYunManager, ChuanyunReimbursementDao chuanyunReimbursementDao, ChuanyunCompanyDao chuanyunCompanyDao, ChuanyunSupplierDao chuanyunSupplierDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunUserDao chuanyunUserDao, ChuanyunReimbursementSubjectDao chuanyunReimbursementSubjectDao) {
         this.chuanYunManager = chuanYunManager;
         this.chuanyunReimbursementDao = chuanyunReimbursementDao;
         this.chuanyunCompanyDao = chuanyunCompanyDao;
@@ -49,7 +43,6 @@ public class ChuanyunFinancialScheduledTask {
         this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
         this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
         this.chuanyunUserDao = chuanyunUserDao;
-        this.chuanyunCostDao = chuanyunCostDao;
         this.chuanyunReimbursementSubjectDao = chuanyunReimbursementSubjectDao;
     }
 
@@ -97,9 +90,6 @@ public class ChuanyunFinancialScheduledTask {
                     }catch (NoSuchElementException e){
                         //没有之前的数据不做处理
                     }
-                    //TODO 等财务定义外部名称
-                    //同步报销单中外部部门名称
-//                    synchroOutDepartment(chuanyunReimbursementDO);
 
                     //将报销单中关联信息的id转化为具体的数据
                     try{

+ 58 - 0
src/main/java/com/galaxis/manatee/task/LogCheckTask.java

@@ -0,0 +1,58 @@
+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;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2021/3/4 5:19 上午
+ */
+@Slf4j
+@Service
+public class LogCheckTask {
+
+    private final LogCheckService logCheckService;
+    private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
+    private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
+
+    public LogCheckTask(LogCheckService logCheckService, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao) {
+        this.logCheckService = logCheckService;
+        this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
+        this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
+    }
+
+    /**
+     * 定时任务每5天执行一次
+     * 定时进行日志工时核对任务
+     * 1.遍历每个用户,核对原始数据和标准化每日工时
+     * 2.遍历每个用户,核对每周、每月工时准确性
+     * 3.遍历每个项目核对每个项目总工时
+     */
+//    @Scheduled(fixedDelay = 432000000L)
+    private void checkLod(){
+        chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> {
+            try {
+                //核对原始数据和标准化每日工时
+                logCheckService.checkDayWorkHour(chuanyunUserCompanyDO.getUserId());
+                logCheckService.checkWeekWorkHour(chuanyunUserCompanyDO.getUserId());
+                logCheckService.checkMonthWorkHour(chuanyunUserCompanyDO.getUserId());
+            } catch (Exception e) {
+                log.error(""+chuanyunUserCompanyDO);
+                log.error(e.getMessage());
+            }
+        });
+        //核对每周、每月、每个项目工时准确性
+        chuanyunGroupProjectDao.findAll().forEach(chuanyunGroupProjectDO -> {
+            try{
+                logCheckService.checkProjectWorkHour(chuanyunGroupProjectDO.getObjectId());
+            }catch (Exception e){
+                log.error(""+chuanyunGroupProjectDO);
+                log.error(e.getMessage());
+            }
+        });
+    }
+}

+ 2 - 6
src/main/java/com/galaxis/manatee/task/ProjectWorkHourStatistics.java

@@ -27,7 +27,6 @@ import java.util.List;
 @Slf4j
 public class ProjectWorkHourStatistics {
 
-    private final Integer pageSize = 100;
     private final ChuanYunManager chuanYunManager;
     private final ChuanyunProjectCostDao chuanyunProjectCostDao;
     private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
@@ -111,8 +110,7 @@ public class ProjectWorkHourStatistics {
 
     /**
      * 删除状态为审核中数据
-     * @param schemaCode
-     * @param
+     * @param schemaCode    氚云表名
      */
     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 {
@@ -140,9 +138,7 @@ public class ProjectWorkHourStatistics {
                 List<ChuanyunCommonDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
                 result.forEach(basicDO -> {
                     ChuanyunSaveDTO chuanyunSaveDTO = chuanYunManager.delete(schemaCode,basicDO.getObjectId());
-                    if(chuanyunSaveDTO.getSuccessful()){
-//                        log.info("删除状态为审核中数据成功");
-                    }else{
+                    if(!chuanyunSaveDTO.getSuccessful()){
                         log.warn("删除状态为审核中数据失败");
                     }
                 });

+ 10 - 23
src/main/java/com/galaxis/manatee/task/WorkHourStatistics.java

@@ -14,7 +14,7 @@ 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.service.LogService;
+import com.galaxis.manatee.service.LogStandardService;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
 import lombok.Data;
@@ -48,9 +48,9 @@ public class WorkHourStatistics {
     private final ChuanyunSelfCostDao chuanyunSelfCostDao;
     private final ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao;
     private final ChuanyunMemberCostDao chuanyunMemberCostDao;
-    private final LogService logService;
+    private final LogStandardService logStandardService;
 
-    public WorkHourStatistics(ChuanYunManager chuanYunManager, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao, ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao, ChuanyunMemberCostDao chuanyunMemberCostDao, LogService logService) {
+    public WorkHourStatistics(ChuanYunManager chuanYunManager, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao, ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao, ChuanyunMemberCostDao chuanyunMemberCostDao, LogStandardService logStandardService) {
         this.chuanYunManager = chuanYunManager;
         this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
         this.chuanyunWorkHourDao = chuanyunWorkHourDao;
@@ -58,7 +58,7 @@ public class WorkHourStatistics {
         this.chuanyunSelfCostDao = chuanyunSelfCostDao;
         this.chuanyunWeekMemberHourDao = chuanyunWeekMemberHourDao;
         this.chuanyunMemberCostDao = chuanyunMemberCostDao;
-        this.logService = logService;
+        this.logStandardService = logStandardService;
     }
 
     /**
@@ -91,7 +91,7 @@ public class WorkHourStatistics {
                 userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
                     long start = Instant.now().getEpochSecond();
                     //工时标准化
-                    logService.standardHour(chuanyunUserCompanyDO,false);
+                    logStandardService.standardHour(chuanyunUserCompanyDO, false);
                     log.info("每日工时标准化" + chuanyunUserCompanyDO.getUserName() + (Instant.now().getEpochSecond() - start) + "秒");
                     updateChuanyunStandardWorkHour(chuanyunUserCompanyDO);
                 });
@@ -112,14 +112,7 @@ public class WorkHourStatistics {
         list.forEach(chuanyunWeekMemberHourDO -> {
             try {
                 if (chuanyunWeekMemberHourDO != null) {
-                    ChuanyunWeekMemberHourDO weekMemberHourDO = new ChuanyunWeekMemberHourDO();
-                    weekMemberHourDO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
-                    weekMemberHourDO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
-                    weekMemberHourDO.setStandardWorkHour(chuanyunWeekMemberHourDO.getStandardWorkHour());
-                    weekMemberHourDO.setStatus(chuanyunWeekMemberHourDO.getStatus());
-                    weekMemberHourDO.setUserId(chuanyunWeekMemberHourDO.getUserId());
-                    weekMemberHourDO.setYear(chuanyunWeekMemberHourDO.getYear());
-                    weekMemberHourDO.setWeek(chuanyunWeekMemberHourDO.getWeek());
+                    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);
@@ -294,12 +287,11 @@ public class WorkHourStatistics {
      * 人员-项目-周度工时汇总,更新氚云数据
      */
     private void updateChuanyunWeekHour() {
-        var flag = true;
         var pageSize = 20;
         var page = 0;
         log.info("开始更新周工时汇总");
         long startTime = Instant.now().getEpochSecond();
-        while (flag) {
+        while (true) {
             var pageable = PageRequest.of(page, pageSize);
             var updateList = chuanyunWeekMemberHourDao.findAll(pageable);
             if (page <= updateList.getTotalPages()) {
@@ -358,12 +350,11 @@ public class WorkHourStatistics {
      * 人员-项目-月度工时汇总,更新氚云数据
      */
     private void updateChuanyunMonthHour() {
-        var flag = true;
         var pageSize = 20;
         var page = 0;
         log.info("开始更新月工时汇总");
         long startTime = Instant.now().getEpochSecond();
-        while (flag) {
+        while (true) {
             var pageable = PageRequest.of(page, pageSize);
             var updateList = chuanyunSelfCostDao.findAll(pageable);
             if (page <= updateList.getTotalPages()) {
@@ -424,7 +415,6 @@ public class WorkHourStatistics {
         List<ChuanyunMemberCostDO> list = chuanyunMemberCostDao.getMemberCost();
         list.forEach(chuanyunMemberCostDO -> {
             if (StringUtils.isEmpty(chuanyunMemberCostDO.getProjectId())) {
-                BigDecimal standard = new BigDecimal(8);
                 ChuanyunMemberCostDO oldCostDO = chuanyunMemberCostDao.findByUserIdAndProjectIdAndProjectTypeAndStatus(chuanyunMemberCostDO.getUserId(), chuanyunMemberCostDO.getProjectId(), chuanyunMemberCostDO.getProjectType(), chuanyunMemberCostDO.getStatus());
                 if (oldCostDO != null) {
                     chuanyunMemberCostDao.delete(oldCostDO);
@@ -516,8 +506,7 @@ public class WorkHourStatistics {
     /**
      * 删除状态为审核中数据
      *
-     * @param schemaCode
-     * @param
+     * @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 {
@@ -546,9 +535,7 @@ public class WorkHourStatistics {
                 });
                 result.forEach(basicDO -> {
                     ChuanyunSaveDTO chuanyunSaveDTO = chuanYunManager.delete(schemaCode, basicDO.getObjectId());
-                    if (chuanyunSaveDTO.getSuccessful()) {
-//                        log.info("删除状态为审核中数据成功");
-                    } else {
+                    if (!chuanyunSaveDTO.getSuccessful()) {
                         log.warn("删除状态为审核中数据失败");
                     }
                 });

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

@@ -11,7 +11,7 @@ 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.service.LogService;
+import com.galaxis.manatee.service.LogStandardService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.data.domain.PageRequest;
@@ -41,9 +41,9 @@ public class WorkHourStatisticsRecently {
     private final ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao;
     private final ChuanyunSelfCostDao chuanyunSelfCostDao;
     private final ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao;
-    private final LogService logService;
+    private final LogStandardService logStandardService;
 
-    public WorkHourStatisticsRecently(ChuanYunManager chuanYunManager, ChuanyunLogDao chuanyunLogDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunWeekMemberHourDao chuanyunWeekMemberHourDao, ChuanyunSelfCostDao chuanyunSelfCostDao, ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao, LogService logService) {
+    public WorkHourStatisticsRecently(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;
@@ -52,7 +52,7 @@ public class WorkHourStatisticsRecently {
         this.chuanyunWeekMemberHourDao = chuanyunWeekMemberHourDao;
         this.chuanyunSelfCostDao = chuanyunSelfCostDao;
         this.chuanyunUserDepartmentNameDao = chuanyunUserDepartmentNameDao;
-        this.logService = logService;
+        this.logStandardService = logStandardService;
     }
 
     @Scheduled(fixedDelay = 3600000L)
@@ -175,7 +175,7 @@ public class WorkHourStatisticsRecently {
                 //逐个将员工每天工时进行统计汇总
                 List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
                 //工时标准化
-                userCompanyDOList.forEach(chuanyunUserCompanyDO -> logService.standardHour(chuanyunUserCompanyDO,true));
+                userCompanyDOList.forEach(chuanyunUserCompanyDO -> logStandardService.standardHour(chuanyunUserCompanyDO,true));
             }else {
                 break;
             }
@@ -261,14 +261,7 @@ public class WorkHourStatisticsRecently {
         list.forEach(chuanyunWeekMemberHourDO -> {
             try{
                 if (chuanyunWeekMemberHourDO!=null){
-                    ChuanyunWeekMemberHourDO weekMemberHourDO = new ChuanyunWeekMemberHourDO();
-                    weekMemberHourDO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
-                    weekMemberHourDO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
-                    weekMemberHourDO.setStandardWorkHour(chuanyunWeekMemberHourDO.getStandardWorkHour());
-                    weekMemberHourDO.setStatus(chuanyunWeekMemberHourDO.getStatus());
-                    weekMemberHourDO.setUserId(chuanyunWeekMemberHourDO.getUserId());
-                    weekMemberHourDO.setYear(chuanyunWeekMemberHourDO.getYear());
-                    weekMemberHourDO.setWeek(chuanyunWeekMemberHourDO.getWeek());
+                    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);