|
@@ -19,8 +19,8 @@ import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
|
|
|
import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
|
|
|
import lombok.Data;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.data.domain.PageRequest;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
@@ -65,12 +65,13 @@ public class WorkHourStatistics {
|
|
|
* 更新所有项目工时
|
|
|
*/
|
|
|
// @Scheduled(fixedDelay = 432000000L)
|
|
|
+ @Async
|
|
|
public void updateHour() {
|
|
|
//每日工时标准化
|
|
|
-// standardWorkHour();
|
|
|
-// standardWeeklyWorkHour();
|
|
|
-// standardMonthlyWorkHour();
|
|
|
-// projectMemberHour();
|
|
|
+ standardWorkHour();
|
|
|
+ standardWeeklyWorkHour();
|
|
|
+ standardMonthlyWorkHour();
|
|
|
+ projectMemberHour();
|
|
|
//离职人员工时标准化
|
|
|
// quitStandardHour();
|
|
|
}
|
|
@@ -91,9 +92,8 @@ public class WorkHourStatistics {
|
|
|
userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
|
|
|
long start = Instant.now().getEpochSecond();
|
|
|
//工时标准化
|
|
|
- logStandardService.standardHour(chuanyunUserCompanyDO, false);
|
|
|
+ logStandardService.standardHourByUserCompanyAndIsRecent(chuanyunUserCompanyDO, false);
|
|
|
log.info("每日工时标准化" + chuanyunUserCompanyDO.getUserName() + (Instant.now().getEpochSecond() - start) + "秒");
|
|
|
- updateChuanyunStandardWorkHour(chuanyunUserCompanyDO);
|
|
|
});
|
|
|
} else {
|
|
|
break;
|
|
@@ -131,7 +131,6 @@ public class WorkHourStatistics {
|
|
|
}
|
|
|
});
|
|
|
log.info("周工时标准化" + (Instant.now().getEpochSecond() - start) + "秒");
|
|
|
- updateChuanyunWeekHour();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -154,7 +153,6 @@ public class WorkHourStatistics {
|
|
|
flag = false;
|
|
|
}
|
|
|
}
|
|
|
- updateChuanyunMonthHour();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -234,192 +232,6 @@ public class WorkHourStatistics {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 定时更新氚云数据
|
|
|
- */
|
|
|
- private void updateChuanyunStandardWorkHour(ChuanyunUserCompanyDO oldChuanyunUserCompanyDO) {
|
|
|
- long startTime = Instant.now().getEpochSecond();
|
|
|
- var updateList = chuanyunSelfWorkHourDao.findByUserId(oldChuanyunUserCompanyDO.getUserId());
|
|
|
- updateList.forEach(chuanyunSelfWorkHourDO -> {
|
|
|
- try {
|
|
|
- String departmentId = chuanyunUserCompanyDao.findAllByUserId(chuanyunSelfWorkHourDO.getUserId()).get(0).getDepartmentId();
|
|
|
- ChuanyunSelfWorkHourDTO chuanyunSelfWorkHourDTO = new ChuanyunSelfWorkHourDTO();
|
|
|
- BeanUtils.copyProperties(chuanyunSelfWorkHourDO, chuanyunSelfWorkHourDTO);
|
|
|
- chuanyunSelfWorkHourDTO.setDepartmentId(departmentId);
|
|
|
- ChuanyunUserCompanyDO chuanyunUserCompanyDO = chuanyunUserCompanyDao.findByUserId(chuanyunSelfWorkHourDO.getUserId());
|
|
|
- if (chuanyunUserCompanyDO != null) {
|
|
|
- chuanyunSelfWorkHourDTO.setUserName(chuanyunUserCompanyDO.getUserName());
|
|
|
- chuanyunSelfWorkHourDTO.setBg(chuanyunUserCompanyDO.getBg());
|
|
|
- } else {
|
|
|
- chuanyunSelfWorkHourDTO.setUserName(chuanyunSelfWorkHourDTO.getUserId());
|
|
|
- chuanyunSelfWorkHourDTO.setBg("IBG");
|
|
|
- }
|
|
|
- chuanyunSelfWorkHourDTO.setDepartmentName(chuanyunSelfWorkHourDO.getDepartmentName());
|
|
|
- List<String> matchers = new ArrayList<>();
|
|
|
- matchers.add("F0000001_2," + chuanyunSelfWorkHourDO.getProjectId());
|
|
|
- matchers.add("F0000002_2," + chuanyunSelfWorkHourDO.getUserId());
|
|
|
- matchers.add("F0000003_2," + chuanyunSelfWorkHourDO.getDayLogDate());
|
|
|
- matchers.add("F0000005_2," + chuanyunSelfWorkHourDO.getProjectType());
|
|
|
-// matchers.add("F0000006_2,"+self.getStatus());
|
|
|
- var filter = Filter.instance(0, 1, true, "And", matchers);
|
|
|
- var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberHourDO.SCHEMA_CODE, filter);
|
|
|
- var selfMonthString = objectMapper.writeValueAsString(chuanyunSelfWorkHourDTO);
|
|
|
- ChuanyunSaveDTO chuanyunSaveDTO;
|
|
|
- if (chuanyunFindAllResponse.getReturnData() != null) {
|
|
|
- List<ChuanyunMemberHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
|
|
|
- });
|
|
|
- ChuanyunMemberHourDO firstResult = result.get(0);
|
|
|
- //增加工时不相等再更新每日工时数据的
|
|
|
- if(0!=firstResult.getStandardWorkHour().compareTo(chuanyunSelfWorkHourDO.getStandardWorkHour())){
|
|
|
- chuanyunSaveDTO = chuanYunManager.update(ChuanyunMemberHourDO.SCHEMA_CODE, firstResult.getObjectId(), selfMonthString);
|
|
|
- if (!chuanyunSaveDTO.getSuccessful()) {
|
|
|
- log.warn("更新工时标准化失败");
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- chuanyunSaveDTO = chuanYunManager.save(ChuanyunMemberHourDO.SCHEMA_CODE, selfMonthString, true);
|
|
|
- if (!chuanyunSaveDTO.getSuccessful()) {
|
|
|
- log.warn("新增工时标准化失败");
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- log.warn("更新标准工时异常");
|
|
|
- }
|
|
|
- });
|
|
|
- log.info(oldChuanyunUserCompanyDO.getUserName() + "氚云日工时更新花费" + (Instant.now().getEpochSecond() - startTime) + "秒");
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 人员-项目-周度工时汇总,更新氚云数据
|
|
|
- */
|
|
|
- private void updateChuanyunWeekHour() {
|
|
|
- var pageSize = 20;
|
|
|
- var page = 0;
|
|
|
- log.info("开始更新周工时汇总");
|
|
|
- long startTime = Instant.now().getEpochSecond();
|
|
|
- while (true) {
|
|
|
- var pageable = PageRequest.of(page, pageSize);
|
|
|
- var updateList = chuanyunWeekMemberHourDao.findAll(pageable);
|
|
|
- if (page <= updateList.getTotalPages()) {
|
|
|
- page += 1;
|
|
|
- updateList.getContent().forEach(chuanyunWeekMemberHourDO -> {
|
|
|
- //更新氚云
|
|
|
- try {
|
|
|
- String departmentId = chuanyunUserCompanyDao.findAllByUserId(chuanyunWeekMemberHourDO.getUserId()).get(0).getDepartmentId();
|
|
|
- BigDecimal standard = new BigDecimal(8);
|
|
|
- ChuanyunProjectMemberWeekHourDTO chuanyunProjectMemberWeekHourDTO = new ChuanyunProjectMemberWeekHourDTO();
|
|
|
- chuanyunProjectMemberWeekHourDTO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
|
|
|
- chuanyunProjectMemberWeekHourDTO.setUserId(chuanyunWeekMemberHourDO.getUserId());
|
|
|
- chuanyunProjectMemberWeekHourDTO.setWeek(chuanyunWeekMemberHourDO.getWeek());
|
|
|
- chuanyunProjectMemberWeekHourDTO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
|
|
|
- chuanyunProjectMemberWeekHourDTO.setTotalHour(chuanyunWeekMemberHourDO.getStandardWorkHour());
|
|
|
- chuanyunProjectMemberWeekHourDTO.setPersonDays(chuanyunWeekMemberHourDO.getStandardWorkHour().divide(standard, 2, RoundingMode.HALF_UP));
|
|
|
- chuanyunProjectMemberWeekHourDTO.setHourStatus(chuanyunWeekMemberHourDO.getStatus());
|
|
|
- chuanyunProjectMemberWeekHourDTO.setYear(chuanyunWeekMemberHourDO.getYear());
|
|
|
- chuanyunProjectMemberWeekHourDTO.setDepartmentId(departmentId);
|
|
|
-
|
|
|
- List<String> matchers = new ArrayList<>();
|
|
|
- matchers.add("F0000001_2," + chuanyunWeekMemberHourDO.getProjectId());
|
|
|
- matchers.add("F0000002_2," + chuanyunWeekMemberHourDO.getUserId());
|
|
|
- matchers.add("F0000006_2," + chuanyunWeekMemberHourDO.getWeek());
|
|
|
- matchers.add("F0000008_2," + chuanyunWeekMemberHourDO.getYear());
|
|
|
- matchers.add("F0000003_2," + chuanyunWeekMemberHourDO.getProjectType());
|
|
|
- matchers.add("F0000007_2," + chuanyunWeekMemberHourDO.getStatus());
|
|
|
- var filter = Filter.instance(0, 1, true, "And", matchers);
|
|
|
- var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, filter);
|
|
|
- var selfMonthString = objectMapper.writeValueAsString(chuanyunProjectMemberWeekHourDTO);
|
|
|
- ChuanyunSaveDTO chuanyunSaveDTO;
|
|
|
- if (chuanyunFindAllResponse.getReturnData() != null) {
|
|
|
- List<ChuanyunProjectMemberWeekHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
|
|
|
- });
|
|
|
- ChuanyunProjectMemberWeekHourDO firstResult = result.get(0);
|
|
|
- if(0!=firstResult.getTotalHour().compareTo(chuanyunWeekMemberHourDO.getStandardWorkHour())){
|
|
|
- chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, firstResult.getObjectId(), selfMonthString);
|
|
|
- if (!chuanyunSaveDTO.getSuccessful()) {
|
|
|
- log.warn("更新人员项目周度工时失败");
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE, selfMonthString, true);
|
|
|
- if (!chuanyunSaveDTO.getSuccessful()) {
|
|
|
- log.warn("新增人员项目周度工时失败");
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (JsonProcessingException | BigSizeException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- });
|
|
|
- } else {
|
|
|
- //流程执行完
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- log.info("周工时更新花费" + (Instant.now().getEpochSecond() - startTime));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 人员-项目-月度工时汇总,更新氚云数据
|
|
|
- */
|
|
|
- private void updateChuanyunMonthHour() {
|
|
|
- var pageSize = 20;
|
|
|
- var page = 0;
|
|
|
- log.info("开始更新月工时汇总");
|
|
|
- long startTime = Instant.now().getEpochSecond();
|
|
|
- while (true) {
|
|
|
- var pageable = PageRequest.of(page, pageSize);
|
|
|
- var updateList = chuanyunSelfCostDao.findAll(pageable);
|
|
|
- if (page <= updateList.getTotalPages()) {
|
|
|
- page += 1;
|
|
|
- updateList.getContent().forEach(chuanyunSelfCostDO -> {
|
|
|
- ChuanyunMemberMonthCostDTO chuanyunMemberMonthCostDTO = new ChuanyunMemberMonthCostDTO();
|
|
|
- //更新氚云数据
|
|
|
- chuanyunMemberMonthCostDTO.setCost(chuanyunSelfCostDO.getCost());
|
|
|
- chuanyunMemberMonthCostDTO.setProjectId(chuanyunSelfCostDO.getProjectId());
|
|
|
- chuanyunMemberMonthCostDTO.setProjectType(chuanyunSelfCostDO.getProjectType());
|
|
|
- chuanyunMemberMonthCostDTO.setStatus(chuanyunSelfCostDO.getStatus());
|
|
|
- chuanyunMemberMonthCostDTO.setUserId(chuanyunSelfCostDO.getUserId());
|
|
|
- chuanyunMemberMonthCostDTO.setMonthWorkHour(chuanyunSelfCostDO.getMonthlyTotalHour());
|
|
|
- chuanyunMemberMonthCostDTO.setDayLogDate(chuanyunSelfCostDO.getDayLogDate());
|
|
|
- chuanyunMemberMonthCostDTO.setWorkHour(chuanyunSelfCostDO.getTotalHour());
|
|
|
- chuanyunMemberMonthCostDTO.setDepartmentId(chuanyunSelfCostDO.getDepartmentId());
|
|
|
- if (!StringUtils.isEmpty(chuanyunSelfCostDO.getProjectId())) {
|
|
|
- try {
|
|
|
- List<String> matchers = new ArrayList<>();
|
|
|
- matchers.add("F0000003_2," + chuanyunSelfCostDO.getProjectId());
|
|
|
- matchers.add("F0000009_2," + chuanyunSelfCostDO.getStatus());
|
|
|
- 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);
|
|
|
- var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberMonthCostDO.SCHEMA_CODE, filter);
|
|
|
- var memberMonthString = objectMapper.writeValueAsString(chuanyunMemberMonthCostDTO);
|
|
|
- ChuanyunSaveDTO chuanyunSaveDTO;
|
|
|
- if (chuanyunFindAllResponse.getReturnData() != null) {
|
|
|
- List<ChuanyunMemberMonthCostDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
|
|
|
- });
|
|
|
- ChuanyunMemberMonthCostDO firstResult = result.get(0);
|
|
|
- chuanyunSaveDTO = chuanYunManager.update(ChuanyunMemberMonthCostDO.SCHEMA_CODE, firstResult.getObjectId(), memberMonthString);
|
|
|
- } else {
|
|
|
- chuanyunSaveDTO = chuanYunManager.save(ChuanyunMemberMonthCostDO.SCHEMA_CODE, memberMonthString, true);
|
|
|
- }
|
|
|
- if (!chuanyunSaveDTO.getSuccessful()) {
|
|
|
- log.warn("新增项目成员月度工时汇总失败");
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- log.warn("########" + chuanyunSelfCostDO + "");
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- } else {
|
|
|
- //流程执行完
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- log.info("月工时更新花费" + (Instant.now().getEpochSecond() - startTime));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
* 人员项目工时汇总
|
|
|
*/
|
|
|
private void projectMemberHour() {
|