浏览代码

1.修改项目总工时

WoNiu 4 年之前
父节点
当前提交
6d7efaa9c8
共有 1 个文件被更改,包括 155 次插入0 次删除
  1. 155 0
      src/main/java/com/galaxis/manatee/task/ProjectWorkHourStatistics.java

+ 155 - 0
src/main/java/com/galaxis/manatee/task/ProjectWorkHourStatistics.java

@@ -0,0 +1,155 @@
+package com.galaxis.manatee.task;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.dao.ChuanyunGroupProjectDao;
+import com.galaxis.manatee.dao.ChuanyunProjectCostDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunCommonDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunGroupProjectDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectCostDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectTotalCostDO;
+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 lombok.extern.slf4j.Slf4j;
+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.util.ArrayList;
+import java.util.List;
+
+@Service
+@Slf4j
+public class ProjectWorkHourStatistics {
+
+    private final Integer pageSize = 100;
+    private final ChuanYunManager chuanYunManager;
+    private final ChuanyunProjectCostDao chuanyunProjectCostDao;
+    private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
+    private final ObjectMapper objectMapper=new ObjectMapper();
+
+    public ProjectWorkHourStatistics(ChuanYunManager chuanYunManager, ChuanyunProjectCostDao chuanyunProjectCostDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao) {
+        this.chuanYunManager = chuanYunManager;
+        this.chuanyunProjectCostDao = chuanyunProjectCostDao;
+        this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
+    }
+
+
+    @Scheduled(fixedDelay = 3600000L)
+    public void updateHour() {
+        projectHour();
+    }
+
+
+    private void projectHour() {
+        List<ChuanyunProjectCostDO> list1 = chuanyunProjectCostDao.getProjectCost();
+        log.info("开始更新项目汇总工时");
+        list1.forEach(chuanyunProjectCostDO -> {
+            //更新数据库
+            BigDecimal standard = new BigDecimal(8);
+            if (chuanyunProjectCostDO.getTotalHour()!=null){
+                chuanyunProjectCostDO.setPersonDays(chuanyunProjectCostDO.getTotalHour().divide(standard,2, RoundingMode.HALF_UP));
+            }
+            ChuanyunProjectCostDO oldProjectDO = chuanyunProjectCostDao.findByProjectIdAndProjectTypeAndStatus(chuanyunProjectCostDO.getProjectId(),chuanyunProjectCostDO.getProjectType(),chuanyunProjectCostDO.getStatus());
+            if (oldProjectDO !=null) {
+                chuanyunProjectCostDao.delete(oldProjectDO);
+            }
+            chuanyunProjectCostDao.save(chuanyunProjectCostDO);
+            //搜索是否有审批中的数据
+            ChuanyunProjectCostDO processDO = chuanyunProjectCostDao.getProcessProjectCost(chuanyunProjectCostDO.getProjectId(),chuanyunProjectCostDO.getProjectType());
+            if (processDO==null){
+                chuanyunProjectCostDao.deleteByProjectIdAndProjectTypeAndStatus(chuanyunProjectCostDO.getProjectId(),chuanyunProjectCostDO.getProjectType(),"2");
+                deleteExamineStatus(ChuanyunProjectTotalCostDO.SCHEMA_CODE,"F0000006","F0000001",chuanyunProjectCostDO.getProjectId(),"","","","","","","","","F0000004",chuanyunProjectCostDO.getProjectType());
+            }
+
+            try {
+                ChuanyunProjectScheduledTask.ProjectTotalCostDTO chuanyunProjectTotalCostDTO = new ChuanyunProjectScheduledTask.ProjectTotalCostDTO();
+                chuanyunProjectTotalCostDTO.setProjectType(chuanyunProjectCostDO.getProjectType());
+                chuanyunProjectTotalCostDTO.setProjectId(chuanyunProjectCostDO.getProjectId());
+                chuanyunProjectTotalCostDTO.setStatus(chuanyunProjectCostDO.getStatus());
+                chuanyunProjectTotalCostDTO.setWorkHour(chuanyunProjectCostDO.getTotalHour());
+                chuanyunProjectTotalCostDTO.setPersonDays(chuanyunProjectCostDO.getPersonDays());
+                ChuanyunGroupProjectDO chuanyunGroupProjectDO = chuanyunGroupProjectDao.findByObjectId(chuanyunProjectCostDO.getProjectId());
+                if (chuanyunGroupProjectDO!=null){
+                    chuanyunProjectTotalCostDTO.setProjectCode(chuanyunGroupProjectDO.getProjectCode());
+                }
+                if (!StringUtils.isEmpty(chuanyunProjectCostDO.getProjectId()) && !StringUtils.isEmpty(chuanyunProjectCostDO.getProjectType())){
+                    List<String> matchers = new ArrayList<>();
+                    matchers.add("F0000001_2,"+chuanyunProjectCostDO.getProjectId());
+                    matchers.add("F0000004_2,"+chuanyunProjectCostDO.getProjectType());
+                    matchers.add("F0000006_2,"+chuanyunProjectCostDO.getStatus());
+                    var filter= Filter.instance(0,1,true,"And",matchers);
+                    var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProjectTotalCostDO.SCHEMA_CODE,filter);
+                    var projectTotalString=objectMapper.writeValueAsString(chuanyunProjectTotalCostDTO);
+                    ChuanyunSaveDTO chuanyunSaveDTO;
+                    if (chuanyunFindAllResponse.getReturnData()!=null) {
+                        List<ChuanyunProjectTotalCostDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                        ChuanyunProjectTotalCostDO firstResult = result.get(0);
+                        chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectTotalCostDO.SCHEMA_CODE,firstResult.getObjectId(),projectTotalString);
+                    }else {
+                        chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectTotalCostDO.SCHEMA_CODE,projectTotalString,true);
+
+                    }
+                    if(!chuanyunSaveDTO.getSuccessful()){
+                        log.warn("新增项目成本汇总失败");
+                    }
+                }
+            } catch (JsonProcessingException | BigSizeException e) {
+                log.error(e.getMessage());
+                log.error(""+chuanyunProjectCostDO);
+                e.printStackTrace();
+            }
+        });
+        log.info("项目工时汇总更新完成"+list1.size());
+    }
+
+
+    /**
+     * 删除状态为审核中数据
+     * @param schemaCode
+     * @param
+     */
+    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.info("删除状态为审核中数据成功");
+                    }else{
+                        log.warn("删除状态为审核中数据失败");
+                    }
+                });
+            }
+        }catch (Exception e) {
+            e.printStackTrace();
+            log.error(e.getMessage());
+        }
+    }
+}