|
@@ -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());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|