|
@@ -0,0 +1,202 @@
|
|
|
|
+package com.galaxis.manatee.task;
|
|
|
|
+
|
|
|
|
+import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
+import com.galaxis.manatee.dao.ChuanyunSelfSubWorkHourDao;
|
|
|
|
+import com.galaxis.manatee.dao.ChuanyunSubWeekHourDao;
|
|
|
|
+import com.galaxis.manatee.dao.ChuanyunSubWorkHourDao;
|
|
|
|
+import com.galaxis.manatee.dao.ChuanyunUserCompanyDao;
|
|
|
|
+import com.galaxis.manatee.entity.chuanyun.data.object.*;
|
|
|
|
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
|
|
|
|
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSelfWorkHourDTO;
|
|
|
|
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunWeekMemberHourDTO;
|
|
|
|
+import com.galaxis.manatee.entity.chuanyun.dto.Filter;
|
|
|
|
+import com.galaxis.manatee.manager.ChuanYunManager;
|
|
|
|
+import com.galaxis.manatee.service.DataArcherService;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.math.RoundingMode;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.List;
|
|
|
|
+
|
|
|
|
+@Service
|
|
|
|
+@Slf4j
|
|
|
|
+public class SubWorkHourStatistics {
|
|
|
|
+
|
|
|
|
+ private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
|
|
|
|
+ private final ChuanyunSubWorkHourDao chuanyunSubProjectDao;
|
|
|
|
+ private final ChuanyunSelfSubWorkHourDao chuanyunSelfSubWorkHourDao;
|
|
|
|
+ private final ChuanyunSubWeekHourDao chuanyunSubWeekHourDao;
|
|
|
|
+ private final ChuanYunManager chuanYunManager;
|
|
|
|
+ private final DataArcherService dataArcherService;
|
|
|
|
+
|
|
|
|
+ public SubWorkHourStatistics(ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunSubWorkHourDao chuanyunSubProjectDao, ChuanyunSelfSubWorkHourDao chuanyunSelfSubWorkHourDao, ChuanyunSubWeekHourDao chuanyunSubWeekHourDao, ChuanYunManager chuanYunManager, DataArcherService dataArcherService) {
|
|
|
|
+ this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
|
|
|
|
+ this.chuanyunSubProjectDao = chuanyunSubProjectDao;
|
|
|
|
+ this.chuanyunSelfSubWorkHourDao = chuanyunSelfSubWorkHourDao;
|
|
|
|
+ this.chuanyunSubWeekHourDao = chuanyunSubWeekHourDao;
|
|
|
|
+ this.chuanYunManager = chuanYunManager;
|
|
|
|
+ this.dataArcherService = dataArcherService;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @Scheduled(fixedDelay = 86400000L)
|
|
|
|
+ public void updateHour(){
|
|
|
|
+ standardWorkHour();
|
|
|
|
+ updateAllChuanyunSelfSubWorkHour();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 子项目每日工时标准化
|
|
|
|
+ */
|
|
|
|
+ private void standardWorkHour(){
|
|
|
|
+ chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> {
|
|
|
|
+ List<ChuanyunSubWorkHourDO> list = chuanyunSubProjectDao.getSubSelfWorkHour(chuanyunUserCompanyDO.getUserId());
|
|
|
|
+ if (list!=null&&list.size()>0){
|
|
|
|
+ list.forEach(chuanyunSubWorkHourDO -> {
|
|
|
|
+ ChuanyunSelfSubWorkHourDO chuanyunSelfSubWorkHourDO = new ChuanyunSelfSubWorkHourDO();
|
|
|
|
+ chuanyunSelfSubWorkHourDO.setBg(chuanyunSubWorkHourDO.getBg());
|
|
|
|
+ chuanyunSelfSubWorkHourDO.setUserId(chuanyunSubWorkHourDO.getUserId());
|
|
|
|
+ chuanyunSelfSubWorkHourDO.setProjectId(chuanyunSubWorkHourDO.getProjectId());
|
|
|
|
+ chuanyunSelfSubWorkHourDO.setProjectType(chuanyunSubWorkHourDO.getProjectType());
|
|
|
|
+ chuanyunSelfSubWorkHourDO.setDepartmentName(chuanyunSubWorkHourDO.getDepartmentName());
|
|
|
|
+ chuanyunSelfSubWorkHourDO.setDayLogDate(chuanyunSubWorkHourDO.getDayLogDate());
|
|
|
|
+ chuanyunSelfSubWorkHourDO.setStatus(chuanyunSubWorkHourDO.getStatus());
|
|
|
|
+ //每日总工时
|
|
|
|
+ ChuanyunSubWorkHourDO totalSubWorkHour = chuanyunSubProjectDao.getSubDayWorkHour(chuanyunSubWorkHourDO.getUserId(),chuanyunSubWorkHourDO.getDayLogDate());
|
|
|
|
+ //工时标准化
|
|
|
|
+ if (totalSubWorkHour!=null){
|
|
|
|
+ BigDecimal standard = new BigDecimal(8);
|
|
|
|
+ if (totalSubWorkHour.getHoursWorked().compareTo(standard)<=0){
|
|
|
|
+ chuanyunSelfSubWorkHourDO.setStandardWorkHour(chuanyunSubWorkHourDO.getHoursWorked());
|
|
|
|
+ }else {
|
|
|
|
+ BigDecimal personDays = (chuanyunSubWorkHourDO.getHoursWorked().divide(totalSubWorkHour.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
|
|
|
|
+ chuanyunSelfSubWorkHourDO.setStandardWorkHour(personDays);
|
|
|
|
+ }
|
|
|
|
+ //获取原始工时数据
|
|
|
|
+ ChuanyunSelfSubWorkHourDO oldSelfSubWorkHourDO = new ChuanyunSelfSubWorkHourDO();
|
|
|
|
+ if (chuanyunSubWorkHourDO.getStatus().equals("3")){
|
|
|
|
+ oldSelfSubWorkHourDO = chuanyunSelfSubWorkHourDao.findByUserIdAndProjectIdAndProjectTypeAndDayLogDateAndStatus(chuanyunSubWorkHourDO.getUserId(),chuanyunSubWorkHourDO.getProjectId(),chuanyunSubWorkHourDO.getProjectType(),chuanyunSubWorkHourDO.getDayLogDate(),chuanyunSubWorkHourDO.getStatus());
|
|
|
|
+ }else {
|
|
|
|
+ oldSelfSubWorkHourDO = chuanyunSelfSubWorkHourDao.findByUserIdAndProjectIdAndProjectTypeAndDayLogDate(chuanyunSubWorkHourDO.getUserId(),chuanyunSubWorkHourDO.getProjectId(),chuanyunSubWorkHourDO.getProjectType(),chuanyunSubWorkHourDO.getDayLogDate());
|
|
|
|
+ }
|
|
|
|
+ if (oldSelfSubWorkHourDO!=null){
|
|
|
|
+ chuanyunSelfSubWorkHourDao.delete(oldSelfSubWorkHourDO);
|
|
|
|
+ }
|
|
|
|
+ //新增每日工时
|
|
|
|
+ chuanyunSelfSubWorkHourDao.save(chuanyunSelfSubWorkHourDO);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 氚云日工时更新
|
|
|
|
+ */
|
|
|
|
+ public void updateAllChuanyunSelfSubWorkHour() {
|
|
|
|
+ chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> {
|
|
|
|
+ List<ChuanyunSelfSubWorkHourDO> list = chuanyunSelfSubWorkHourDao.findByUserId(chuanyunUserCompanyDO.getUserId());
|
|
|
|
+ if (list!=null&&list.size()>0){
|
|
|
|
+ list.forEach(chuanyunSelfSubWorkHourDO -> {
|
|
|
|
+ ChuanyunSelfWorkHourDTO chuanyunSelfWorkHourDTO = new ChuanyunSelfWorkHourDTO();
|
|
|
|
+ BeanUtils.copyProperties(chuanyunSelfSubWorkHourDO, chuanyunSelfWorkHourDTO);
|
|
|
|
+ chuanyunSelfWorkHourDTO.setUserName(chuanyunUserCompanyDO.getUserName());
|
|
|
|
+ ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
+ try {
|
|
|
|
+ List<String> matchers = new ArrayList<>();
|
|
|
|
+ matchers.add("F0000001_2," + chuanyunSelfWorkHourDTO.getProjectId());
|
|
|
|
+ matchers.add("F0000002_2," + chuanyunSelfWorkHourDTO.getUserId());
|
|
|
|
+ matchers.add("F0000003_2," + chuanyunSelfWorkHourDTO.getDayLogDate());
|
|
|
|
+ matchers.add("F0000005_2," + chuanyunSelfWorkHourDTO.getProjectType());
|
|
|
|
+ if (chuanyunSelfWorkHourDTO.getStatus().equals("3")){
|
|
|
|
+ matchers.add("F0000006_2," + chuanyunSelfWorkHourDTO.getStatus());
|
|
|
|
+ }
|
|
|
|
+ var filter = Filter.instance(0, 1, true, "And", matchers);
|
|
|
|
+ var chuanyunFindAllResponse = chuanYunManager.findAll("D001789So1gvnogdib8ytl0owunkocnl6", filter);
|
|
|
|
+ var selfMonthString = objectMapper.writeValueAsString(chuanyunSelfWorkHourDTO);
|
|
|
|
+ ChuanyunSaveDTO chuanyunSaveDTO;
|
|
|
|
+ if (chuanyunFindAllResponse.getReturnData() != null) {
|
|
|
|
+ List<ChuanyunMemberHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
|
|
|
|
+ });
|
|
|
|
+ result.forEach(chuanyunMemberHourDO -> {
|
|
|
|
+ chuanYunManager.delete("D001789So1gvnogdib8ytl0owunkocnl6",chuanyunMemberHourDO.getObjectId());
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ log.info("新增子项目工时:"+chuanyunSelfWorkHourDTO);
|
|
|
|
+ chuanyunSaveDTO = chuanYunManager.save("D001789So1gvnogdib8ytl0owunkocnl6", selfMonthString, true);
|
|
|
|
+ if (!chuanyunSaveDTO.getSuccessful()) {
|
|
|
|
+ log.warn("新增子项目工时标准化失败");
|
|
|
|
+ }
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ log.warn("更新子项目工时异常" + chuanyunSelfWorkHourDTO,e);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 子项目每周工时标准化
|
|
|
|
+ */
|
|
|
|
+ @Scheduled(fixedDelay = 3600000L)
|
|
|
|
+ private void standardWeeklyWorkHour(){
|
|
|
|
+ chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> {
|
|
|
|
+ List<ChuanyunSubWeekHourDO> list = chuanyunSubWeekHourDao.getSubWeekHourByUserId("7292b8cb-a5da-4c3d-952e-d1ba41b57cff");
|
|
|
|
+ if (list!=null&&list.size()>0){
|
|
|
|
+ list.forEach(chuanyunSubWeekHourDO -> {
|
|
|
|
+ ChuanyunSubWeekHourDO oldSubWeekHour = chuanyunSubWeekHourDao.findByUserIdAndProjectIdAndProjectTypeAndWeekAndYearAndStatus(chuanyunSubWeekHourDO.getUserId(),chuanyunSubWeekHourDO.getProjectId(),chuanyunSubWeekHourDO.getProjectType(),chuanyunSubWeekHourDO.getWeek(),chuanyunSubWeekHourDO.getYear(),chuanyunSubWeekHourDO.getStatus());
|
|
|
|
+ if (oldSubWeekHour!=null){
|
|
|
|
+ chuanyunSubWeekHourDao.delete(oldSubWeekHour);
|
|
|
|
+ }
|
|
|
|
+ chuanyunSubWeekHourDao.save(chuanyunSubWeekHourDO);
|
|
|
|
+ //判断是否还有处于流程中的数据
|
|
|
|
+ ChuanyunSubWeekHourDO processSubWeekHourDO = chuanyunSubWeekHourDao.getProcessSubWeekHour(chuanyunSubWeekHourDO.getProjectId(),chuanyunSubWeekHourDO.getUserId(),chuanyunSubWeekHourDO.getYear(),chuanyunSubWeekHourDO.getWeek(),chuanyunSubWeekHourDO.getProjectType());
|
|
|
|
+ if (processSubWeekHourDO==null){
|
|
|
|
+ chuanyunSubWeekHourDao.deleteByProjectIdAndUserIdAndYearAndWeekAndStatusAndProjectType(chuanyunSubWeekHourDO.getProjectId(),chuanyunSubWeekHourDO.getUserId(),chuanyunSubWeekHourDO.getYear(),chuanyunSubWeekHourDO.getWeek(),"2",chuanyunSubWeekHourDO.getProjectType());
|
|
|
|
+
|
|
|
|
+ dataArcherService.deleteExamineStatus(ChuanyunSubWeekHourDO.SCHEMA_CODE,"F0000007","F0000001",chuanyunSubWeekHourDO.getProjectId(),"F0000002",chuanyunSubWeekHourDO.getUserId(),"F0000008",chuanyunSubWeekHourDO.getYear(),"","","F0000006",chuanyunSubWeekHourDO.getWeek(),"F0000003",chuanyunSubWeekHourDO.getProjectType());
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 氚云周工时更新
|
|
|
|
+ */
|
|
|
|
+ public void updateAllChuanyunWeekMemberHour() {
|
|
|
|
+ chuanyunUserCompanyDao.findAll().forEach(chuanyunUserCompanyDO -> {
|
|
|
|
+ List<ChuanyunSubWeekHourDO> list = chuanyunSubWeekHourDao.findByUserId(chuanyunUserCompanyDO.getUserId());
|
|
|
|
+ if (list!=null&&list.size()>0){
|
|
|
|
+ list.forEach(chuanyunSubWeekHourDO -> {
|
|
|
|
+ String departmentId = chuanyunUserCompanyDao.findByUserId(chuanyunSubWeekHourDO.getUserId()).getDepartmentId();
|
|
|
|
+ ChuanyunWeekMemberHourDTO chuanyunWeekMemberHourDTO = new ChuanyunWeekMemberHourDTO();
|
|
|
|
+ chuanyunWeekMemberHourDTO.setProjectId(chuanyunSubWeekHourDO.getProjectId());
|
|
|
|
+ chuanyunWeekMemberHourDTO.setUserId(chuanyunSubWeekHourDO.getUserId());
|
|
|
|
+ chuanyunWeekMemberHourDTO.setWeek(chuanyunSubWeekHourDO.getWeek());
|
|
|
|
+ chuanyunWeekMemberHourDTO.setProjectType(chuanyunSubWeekHourDO.getProjectType());
|
|
|
|
+ chuanyunWeekMemberHourDTO.setTotalHour(chuanyunSubWeekHourDO.getStandardWorkHour());
|
|
|
|
+ chuanyunWeekMemberHourDTO.setStatus(chuanyunSubWeekHourDO.getStatus());
|
|
|
|
+ chuanyunWeekMemberHourDTO.setYear(chuanyunSubWeekHourDO.getYear());
|
|
|
|
+ chuanyunWeekMemberHourDTO.setDepartmentId(departmentId);
|
|
|
|
+ chuanyunWeekMemberHourDTO.setBg(chuanyunSubWeekHourDO.getBg());
|
|
|
|
+ ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
+ try{
|
|
|
|
+
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ log.warn(e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+}
|