|
@@ -17,6 +17,7 @@ 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.Scheduled;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -24,6 +25,7 @@ import org.springframework.util.StringUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
+import java.time.Instant;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.ArrayList;
|
|
@@ -230,6 +232,76 @@ public class ChuanyunProjectScheduledTask {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 项目工时汇总
|
|
|
+ */
|
|
|
+ @Scheduled(fixedDelay = 3600000L)
|
|
|
+ private void projectHour() {
|
|
|
+ List<ChuanyunProjectCostDO> list1 = chuanyunProjectCostDao.getProjectCost();
|
|
|
+ deleteExamineStatus(ChuanyunProjectTotalCostDO.SCHEMA_CODE,"F0000006");
|
|
|
+ chuanyunProjectCostDao.deleteAllByStatus("2");
|
|
|
+ list1.forEach(chuanyunProjectCostDO -> {
|
|
|
+ //获取项目实施费用
|
|
|
+ ChuanyunReimbursementAmountDO chuanyunReimbursementAmountDO = chuanyunReimbursementAmountDao.getAmount(chuanyunProjectCostDO.getProjectId());
|
|
|
+ //人力成本
|
|
|
+ ChuanyunMonthLaborCostDO chuanyunMonthLaborCostDO = chuanyunMonthLaborCostDao.getTotalCost(chuanyunProjectCostDO.getProjectId());
|
|
|
+ //更新数据库
|
|
|
+ ChuanyunProjectCostDO projectCostDO = new ChuanyunProjectCostDO();
|
|
|
+ if (chuanyunMonthLaborCostDO!=null){
|
|
|
+ projectCostDO.setCost(chuanyunMonthLaborCostDO.getAmount());
|
|
|
+ }
|
|
|
+ projectCostDO.setProjectType(chuanyunProjectCostDO.getProjectType());
|
|
|
+ projectCostDO.setProjectId(chuanyunProjectCostDO.getProjectId());
|
|
|
+ projectCostDO.setTotalHour(chuanyunProjectCostDO.getTotalHour());
|
|
|
+ projectCostDO.setStatus(chuanyunProjectCostDO.getStatus());
|
|
|
+ projectCostDO.setPersonDays(chuanyunProjectCostDO.getPersonDays());
|
|
|
+ if (chuanyunReimbursementAmountDO !=null) {
|
|
|
+ projectCostDO.setAmount(chuanyunReimbursementAmountDO.getTotalAmount());
|
|
|
+ }
|
|
|
+ ChuanyunProjectCostDO oldProjectDO = chuanyunProjectCostDao.findByProjectId(chuanyunProjectCostDO.getProjectId());
|
|
|
+ if (oldProjectDO !=null) {
|
|
|
+ chuanyunProjectCostDao.delete(oldProjectDO);
|
|
|
+ }
|
|
|
+ chuanyunProjectCostDao.save(projectCostDO);
|
|
|
+ try {
|
|
|
+ ChuanyunProjectTotalCostDTO chuanyunProjectTotalCostDTO = new ChuanyunProjectTotalCostDTO();
|
|
|
+ chuanyunProjectTotalCostDTO.setProjectType(chuanyunProjectCostDO.getProjectType());
|
|
|
+ chuanyunProjectTotalCostDTO.setProjectId(chuanyunProjectCostDO.getProjectId());
|
|
|
+ if (chuanyunMonthLaborCostDO!=null){
|
|
|
+ chuanyunProjectTotalCostDTO.setCost(chuanyunMonthLaborCostDO.getAmount());
|
|
|
+ }
|
|
|
+ chuanyunProjectTotalCostDTO.setStatus(chuanyunProjectCostDO.getStatus());
|
|
|
+ chuanyunProjectTotalCostDTO.setWorkHour(chuanyunProjectCostDO.getTotalHour());
|
|
|
+ chuanyunProjectTotalCostDTO.setPersonDays(chuanyunProjectCostDO.getPersonDays());
|
|
|
+ if (chuanyunReimbursementAmountDO !=null) {
|
|
|
+ chuanyunProjectTotalCostDTO.setAmount(chuanyunReimbursementAmountDO.getTotalAmount());
|
|
|
+ }
|
|
|
+ List<String> matchers = new ArrayList<>();
|
|
|
+ matchers.add("F0000001_2,"+chuanyunProjectCostDO.getProjectId());
|
|
|
+ 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();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 更新销售合同回款数据
|
|
|
*/
|
|
|
@Scheduled(fixedDelay = 3600000L)
|
|
@@ -269,13 +341,11 @@ public class ChuanyunProjectScheduledTask {
|
|
|
log.info("项目销售合同回款信息保存保存"+totalCount);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 人力成本
|
|
|
*/
|
|
|
@Scheduled(fixedDelay = 3600000L)
|
|
|
- private void laborCost() {
|
|
|
- var objectMapper=new ObjectMapper();
|
|
|
+ private void standardWorkHour() {
|
|
|
var flag = true;
|
|
|
var pageSize = 20;
|
|
|
var page = 0;
|
|
@@ -284,160 +354,161 @@ public class ChuanyunProjectScheduledTask {
|
|
|
var chuanyunUserCompanyList = chuanyunUserCompanyDao.findAllByStatus(1,pageable);
|
|
|
if (page<=chuanyunUserCompanyList.getTotalPages()){
|
|
|
page += 1;
|
|
|
+ //逐个将员工每天工时进行统计汇总
|
|
|
+ List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
|
|
|
+ userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
|
|
|
+ long start= Instant.now().getEpochSecond();
|
|
|
+ //工时标准化
|
|
|
+ standardHour(chuanyunUserCompanyDO);
|
|
|
+ log.info("每日工时标准化"+chuanyunUserCompanyDO.getUserName()+(Instant.now().getEpochSecond()-start)+"秒");
|
|
|
+ });
|
|
|
}else {
|
|
|
- flag = false;
|
|
|
break;
|
|
|
}
|
|
|
- //逐个将员工每天工时进行统计汇总
|
|
|
- List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
|
|
|
- userCompanyDOList.forEach(chuanyunUserCompanyDO -> {
|
|
|
- //工时标准化
|
|
|
- standardHour(chuanyunUserCompanyDO);
|
|
|
- //单项目单人单月成本
|
|
|
- standardMonthlyHour(chuanyunUserCompanyDO);
|
|
|
- });
|
|
|
}
|
|
|
- //人员项目周工时汇总
|
|
|
- weekhour();
|
|
|
- //按项目汇总用户工时
|
|
|
- monthhour();
|
|
|
- //项目汇总
|
|
|
- projecthour();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 员工单日、各个项目工时标准化,并保存
|
|
|
+ * @param chuanyunUserCompanyDO 员工信息
|
|
|
+ */
|
|
|
+ private void standardHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
|
|
|
+ BigDecimal standard = new BigDecimal(8);
|
|
|
+ //每人每个项目每天工时
|
|
|
+ List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
|
|
|
+ selfList.forEach(self->{
|
|
|
+ try{
|
|
|
+ ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
|
|
|
+ chuanyunSelfWorkHourDO.setStatus(self.getStatus());
|
|
|
+ chuanyunSelfWorkHourDO.setUserId(chuanyunUserCompanyDO.getUserId());
|
|
|
+ chuanyunSelfWorkHourDO.setProjectType(self.getProjectType());
|
|
|
+ if(ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())){
|
|
|
+ chuanyunSelfWorkHourDO.setProjectId(ChuanYunConstant.PRODUCTION_PROJECT_ID);
|
|
|
+ }else{
|
|
|
+ chuanyunSelfWorkHourDO.setProjectId(self.getProjectId());
|
|
|
+ }
|
|
|
+ chuanyunSelfWorkHourDO.setDayLogDate(self.getDayLogDate());
|
|
|
+ //每人每天工时
|
|
|
+ ChuanyunWorkHourDO chuanyunWorkHourDO = chuanyunWorkHourDao.getDayWorkHour(chuanyunUserCompanyDO.getUserId(),self.getDayLogDate());
|
|
|
+ //工时标准化
|
|
|
+ if (chuanyunWorkHourDO != null) {
|
|
|
+ if (chuanyunWorkHourDO.getHoursWorked().compareTo(standard)<0) {
|
|
|
+ chuanyunSelfWorkHourDO.setStandardWorkHour(self.getHoursWorked());
|
|
|
+ }else {
|
|
|
+ BigDecimal personDays = (self.getHoursWorked().divide(chuanyunWorkHourDO.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
|
|
|
+ chuanyunSelfWorkHourDO.setStandardWorkHour(personDays);
|
|
|
+ }
|
|
|
+ ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO1 = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDate(chuanyunUserCompanyDO.getUserId(),ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())?ChuanYunConstant.PRODUCTION_PROJECT_ID:self.getProjectId(),self.getDayLogDate());
|
|
|
+ if (chuanyunSelfWorkHourDO1!=null) {
|
|
|
+ chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
|
|
|
+ }
|
|
|
+ chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error(e.getMessage());
|
|
|
+ log.error(""+self);
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 人员-项目-周度工时汇总
|
|
|
*/
|
|
|
- private void weekhour() {
|
|
|
+ @Scheduled(fixedDelay = 3600000L)
|
|
|
+ private void standardWeeklyWorkHour() {
|
|
|
+ long start=Instant.now().getEpochSecond();
|
|
|
+ //删除数据库中审批中的数据,防止重复记录工时
|
|
|
+ chuanyunWeekMemberHourDao.deleteAllByStatus("2");
|
|
|
//更新数据库
|
|
|
- List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHour();
|
|
|
- list.forEach(chuanyunWeekMemberHourDO -> {
|
|
|
- if (chuanyunWeekMemberHourDO!=null){
|
|
|
- BigDecimal standard = new BigDecimal(8);
|
|
|
- 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.setWeek(chuanyunWeekMemberHourDO.getWeek());
|
|
|
- ChuanyunWeekMemberHourDO oldWeekHour = chuanyunWeekMemberHourDao.findByProjectIdAndUserIdAndWeekAndStatusAndProjectType(chuanyunWeekMemberHourDO.getProjectId(),chuanyunWeekMemberHourDO.getUserId(),chuanyunWeekMemberHourDO.getWeek(),chuanyunWeekMemberHourDO.getStatus(),chuanyunWeekMemberHourDO.getProjectType());
|
|
|
- if (oldWeekHour != null) {
|
|
|
- chuanyunWeekMemberHourDao.delete(oldWeekHour);
|
|
|
- }
|
|
|
- chuanyunWeekMemberHourDao.save(weekMemberHourDO);
|
|
|
- //更新氚云
|
|
|
- try {
|
|
|
- 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());
|
|
|
- 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("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);
|
|
|
- chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
|
|
|
- }else {
|
|
|
- chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,selfMonthString,true);
|
|
|
- }
|
|
|
- if(chuanyunSaveDTO.getSuccessful()){
|
|
|
- log.info("新增人员项目周度工时成功");
|
|
|
- }else{
|
|
|
- log.warn("新增人员项目周度工时失败");
|
|
|
- }
|
|
|
- } catch (JsonProcessingException | BigSizeException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
+ log.info("开始周工时标准化");
|
|
|
+ List<ChuanyunWeekMemberHourDO> list = chuanyunWeekMemberHourDao.getWeekMemberHour();
|
|
|
+ list.forEach(chuanyunWeekMemberHourDO -> {
|
|
|
+ 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 oldWeekHour = chuanyunWeekMemberHourDao.findByProjectIdAndUserIdAndWeekAndStatusAndProjectTypeAndYear(chuanyunWeekMemberHourDO.getProjectId(),chuanyunWeekMemberHourDO.getUserId(),chuanyunWeekMemberHourDO.getWeek(),chuanyunWeekMemberHourDO.getStatus(),chuanyunWeekMemberHourDO.getProjectType(),chuanyunWeekMemberHourDO.getYear());
|
|
|
+ if (oldWeekHour != null) {
|
|
|
+ chuanyunWeekMemberHourDao.delete(oldWeekHour);
|
|
|
+ }
|
|
|
+ chuanyunWeekMemberHourDao.save(weekMemberHourDO);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ log.info("周工时标准化"+(Instant.now().getEpochSecond()-start)+"秒");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 项目工时汇总
|
|
|
+ * 单月工时汇总
|
|
|
*/
|
|
|
- private void projecthour() {
|
|
|
- List<ChuanyunProjectCostDO> list1 = chuanyunProjectCostDao.getProjectCost();
|
|
|
- list1.forEach(chuanyunProjectCostDO -> {
|
|
|
- //获取项目实施费用
|
|
|
- ChuanyunReimbursementAmountDO chuanyunReimbursementAmountDO = chuanyunReimbursementAmountDao.getAmount(chuanyunProjectCostDO.getProjectId());
|
|
|
- //更新数据库
|
|
|
- ChuanyunProjectCostDO projectCostDO = new ChuanyunProjectCostDO();
|
|
|
- projectCostDO.setCost(chuanyunProjectCostDO.getCost());
|
|
|
- projectCostDO.setProjectType(chuanyunProjectCostDO.getProjectType());
|
|
|
- projectCostDO.setProjectId(chuanyunProjectCostDO.getProjectId());
|
|
|
- projectCostDO.setTotalHour(chuanyunProjectCostDO.getTotalHour());
|
|
|
- projectCostDO.setStatus(chuanyunProjectCostDO.getStatus());
|
|
|
- projectCostDO.setPersonDays(chuanyunProjectCostDO.getPersonDays());
|
|
|
- if (chuanyunReimbursementAmountDO !=null) {
|
|
|
- projectCostDO.setAmount(chuanyunReimbursementAmountDO.getTotalAmount());
|
|
|
- }
|
|
|
- ChuanyunProjectCostDO oldProjectDO = chuanyunProjectCostDao.findByProjectId(chuanyunProjectCostDO.getProjectId());
|
|
|
- if (oldProjectDO !=null) {
|
|
|
- chuanyunProjectCostDao.delete(oldProjectDO);
|
|
|
+ @Scheduled(fixedDelay = 3600000L)
|
|
|
+ private void standardMonthlyWorkHour() {
|
|
|
+ var flag = true;
|
|
|
+ var pageSize = 20;
|
|
|
+ var page = 0;
|
|
|
+ while(flag) {
|
|
|
+ long start=Instant.now().getEpochSecond();
|
|
|
+ var pageable= PageRequest.of(page,pageSize);
|
|
|
+ var chuanyunUserCompanyList = chuanyunUserCompanyDao.findAllByStatus(1,pageable);
|
|
|
+ if (page<=chuanyunUserCompanyList.getTotalPages()){
|
|
|
+ page += 1;
|
|
|
+ List<ChuanyunUserCompanyDO> userCompanyDOList = chuanyunUserCompanyList.getContent();
|
|
|
+ //单项目单人单月成本
|
|
|
+ userCompanyDOList.forEach(this::standardMonthlyHour);
|
|
|
+ }else {
|
|
|
+ flag = false;
|
|
|
}
|
|
|
- chuanyunProjectCostDao.save(projectCostDO);
|
|
|
- try {
|
|
|
- ChuanyunProjectTotalCostDTO chuanyunProjectTotalCostDTO = new ChuanyunProjectTotalCostDTO();
|
|
|
- chuanyunProjectTotalCostDTO.setProjectType(chuanyunProjectCostDO.getProjectType());
|
|
|
- chuanyunProjectTotalCostDTO.setProjectId(chuanyunProjectCostDO.getProjectId());
|
|
|
- chuanyunProjectTotalCostDTO.setCost(chuanyunProjectCostDO.getCost());
|
|
|
- chuanyunProjectTotalCostDTO.setStatus(chuanyunProjectCostDO.getStatus());
|
|
|
- chuanyunProjectTotalCostDTO.setWorkHour(chuanyunProjectCostDO.getTotalHour());
|
|
|
- chuanyunProjectTotalCostDTO.setPersonDays(chuanyunProjectCostDO.getPersonDays());
|
|
|
- if (chuanyunReimbursementAmountDO !=null) {
|
|
|
- chuanyunProjectTotalCostDTO.setAmount(chuanyunReimbursementAmountDO.getTotalAmount());
|
|
|
- }
|
|
|
- List<String> matchers = new ArrayList<>();
|
|
|
- matchers.add("F0000001_2,"+chuanyunProjectCostDO.getProjectId());
|
|
|
- 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.info("新增项目成本汇总成功");
|
|
|
- }else{
|
|
|
- log.warn("新增项目成本汇总失败");
|
|
|
- }
|
|
|
- } catch (JsonProcessingException | BigSizeException e) {
|
|
|
- log.error(e.getMessage());
|
|
|
- log.error(""+chuanyunProjectCostDO);
|
|
|
- e.printStackTrace();
|
|
|
+ /**
|
|
|
+ * 员工每月、各个项目标准工时会职工
|
|
|
+ * @param chuanyunUserCompanyDO 员工信息
|
|
|
+ */
|
|
|
+ private void standardMonthlyHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
|
|
|
+ //每月每项目工时,按月-项目-用户分组统计标准工时
|
|
|
+ List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHour(chuanyunUserCompanyDO.getUserId());
|
|
|
+ DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+ //删除审核中数据
|
|
|
+ chuanyunSelfCostDao.deleteAllByStatus("2");
|
|
|
+ list.forEach(projectMonth->{
|
|
|
+ //获取人员-月度-相同工时状态标准工时汇总
|
|
|
+ ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()),projectMonth.getStatus());
|
|
|
+
|
|
|
+ ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
|
|
|
+ chuanyunSelfCostDO.setStatus(projectMonth.getStatus());
|
|
|
+ chuanyunSelfCostDO.setMonthlyTotalHour(monthHour.getStandardWorkHour());
|
|
|
+ chuanyunSelfCostDO.setProjectId(projectMonth.getProjectId());
|
|
|
+ chuanyunSelfCostDO.setProjectType(projectMonth.getProjectType());
|
|
|
+ chuanyunSelfCostDO.setUserId(projectMonth.getUserId());
|
|
|
+ chuanyunSelfCostDO.setDayLogDate(projectMonth.getDayLogDate().withDayOfMonth(1));
|
|
|
+ chuanyunSelfCostDO.setTotalHour(projectMonth.getStandardWorkHour());
|
|
|
+ chuanyunSelfCostDO.setDepartmentId(chuanyunUserCompanyDO.getDepartmentId());
|
|
|
+ ChuanyunSelfCostDO oldSelfDO = chuanyunSelfCostDao.getOldSelfDO(chuanyunSelfCostDO.getUserId(),chuanyunSelfCostDO.getProjectId(),df.format(chuanyunSelfCostDO.getDayLogDate()));
|
|
|
+ if (oldSelfDO !=null) {
|
|
|
+ chuanyunSelfCostDao.delete(oldSelfDO);
|
|
|
}
|
|
|
+ chuanyunSelfCostDao.save(chuanyunSelfCostDO);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 人员项目工时汇总
|
|
|
*/
|
|
|
- private void monthhour() {
|
|
|
+ @Scheduled(fixedDelay = 3600000L)
|
|
|
+ private void projectTotalHour() {
|
|
|
List<ChuanyunMemberCostDO> list = chuanyunMemberCostDao.getMemberCost();
|
|
|
+ deleteExamineStatus(ChuanyunProjectMemberCostDO.SCHEMA_CODE,"F0000007");
|
|
|
+ chuanyunMemberCostDao.deleteAllByStatus("2");
|
|
|
list.forEach(chuanyunMemberCostDO -> {
|
|
|
if(StringUtils.isEmpty(chuanyunMemberCostDO.getProjectId())||StringUtils.isEmpty(chuanyunMemberCostDO.getUserId())){
|
|
|
log.info("########"+chuanyunMemberCostDO+"");
|
|
|
}else{
|
|
|
-
|
|
|
BigDecimal standard = new BigDecimal(8);
|
|
|
ChuanyunMemberCostDO memberCostDO = new ChuanyunMemberCostDO();
|
|
|
memberCostDO.setCost(chuanyunMemberCostDO.getCost());
|
|
@@ -478,9 +549,7 @@ public class ChuanyunProjectScheduledTask {
|
|
|
}else {
|
|
|
chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberCostDO.SCHEMA_CODE, projectMemberString,true);
|
|
|
}
|
|
|
- if(chuanyunSaveDTO.getSuccessful()){
|
|
|
-// log.info("新增项目成员成本汇总成功");
|
|
|
- }else{
|
|
|
+ if(!chuanyunSaveDTO.getSuccessful()){
|
|
|
log.warn("新增项目成员成本汇总失败");
|
|
|
}
|
|
|
} catch (JsonProcessingException | BigSizeException e) {
|
|
@@ -488,167 +557,217 @@ public class ChuanyunProjectScheduledTask {
|
|
|
log.warn("########"+chuanyunMemberCostDO+"");
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 员工单日、各个项目工时标准化,并保存
|
|
|
- * @param chuanyunUserCompanyDO 员工信息
|
|
|
+ * 定时更新氚云数据
|
|
|
*/
|
|
|
- private void standardHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
|
|
|
- BigDecimal standard = new BigDecimal(8);
|
|
|
- //每人每个项目每天工时
|
|
|
- List<ChuanyunWorkHourDO> selfList = chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
|
|
|
- selfList.forEach(self->{
|
|
|
- try{
|
|
|
- ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
|
|
|
- chuanyunSelfWorkHourDO.setStatus(self.getStatus());
|
|
|
- chuanyunSelfWorkHourDO.setUserId(chuanyunUserCompanyDO.getUserId());
|
|
|
- chuanyunSelfWorkHourDO.setProjectType(self.getProjectType());
|
|
|
- if(ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())){
|
|
|
- chuanyunSelfWorkHourDO.setProjectId(ChuanYunConstant.PRODUCTION_PROJECT_ID);
|
|
|
- }else{
|
|
|
- chuanyunSelfWorkHourDO.setProjectId(self.getProjectId());
|
|
|
- }
|
|
|
- chuanyunSelfWorkHourDO.setDayLogDate(self.getDayLogDate());
|
|
|
- //每人每天工时
|
|
|
- ChuanyunWorkHourDO chuanyunWorkHourDO = chuanyunWorkHourDao.getDayWorkHour(chuanyunUserCompanyDO.getUserId(),self.getDayLogDate());
|
|
|
- //工时标准化
|
|
|
- if (chuanyunWorkHourDO != null) {
|
|
|
- if (chuanyunWorkHourDO.getHoursWorked().compareTo(standard)<0) {
|
|
|
- chuanyunSelfWorkHourDO.setStandardWorkHour(self.getHoursWorked());
|
|
|
- }else {
|
|
|
- BigDecimal personDays = (self.getHoursWorked().divide(chuanyunWorkHourDO.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
|
|
|
- chuanyunSelfWorkHourDO.setStandardWorkHour(personDays);
|
|
|
- }
|
|
|
- ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO1 = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDate(chuanyunUserCompanyDO.getUserId(),self.getProjectId(),self.getDayLogDate());
|
|
|
- if (chuanyunSelfWorkHourDO1!=null) {
|
|
|
- chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO1);
|
|
|
+ @Scheduled(fixedDelay = 3600000L)
|
|
|
+ private void updateChuanyunStandardWorkHour(){
|
|
|
+ var flag = true;
|
|
|
+ var pageSize = 20;
|
|
|
+ var page = 0;
|
|
|
+ log.info("开始更新日工时汇总");
|
|
|
+ long startTime=Instant.now().getEpochSecond();
|
|
|
+ while(flag) {
|
|
|
+ var pageable= PageRequest.of(page,pageSize);
|
|
|
+ var updateList=chuanyunSelfWorkHourDao.findAll(pageable);
|
|
|
+ if (page<=updateList.getTotalPages()){
|
|
|
+ page += 1;
|
|
|
+ updateList.forEach(chuanyunSelfWorkHourDO -> {
|
|
|
+ try{
|
|
|
+ String departmentId=chuanyunUserCompanyDao.findAllByUserId(chuanyunSelfWorkHourDO.getUserId()).get(0).getDepartmentId();
|
|
|
+ ChuanyunSelfWorkHourDTO chuanyunSelfWorkHourDTO = new ChuanyunSelfWorkHourDTO();
|
|
|
+ BeanUtils.copyProperties(chuanyunSelfWorkHourDO,chuanyunSelfWorkHourDTO);
|
|
|
+ chuanyunSelfWorkHourDTO.setDepartmentId(departmentId);
|
|
|
+ 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);
|
|
|
+ chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
|
|
|
+ }else {
|
|
|
+ chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberHourDO.SCHEMA_CODE,selfMonthString,true);
|
|
|
+ }
|
|
|
+ if(!chuanyunSaveDTO.getSuccessful()){
|
|
|
+ log.warn("新增工时标准化失败");
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ log.warn("更新标准工时异常");
|
|
|
}
|
|
|
- chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
|
|
|
-// log.info("工时标准化新增成功");
|
|
|
- //更新氚云数据
|
|
|
+ });
|
|
|
+ }else {
|
|
|
+ //流程执行完
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("日工时更新花费"+(Instant.now().getEpochSecond()-startTime));
|
|
|
+ }
|
|
|
|
|
|
- ChuanyunSelfWorkHourDTO chuanyunSelfWorkHourDTO = new ChuanyunSelfWorkHourDTO();
|
|
|
- if(ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType())){
|
|
|
- chuanyunSelfWorkHourDTO.setProjectId(ChuanYunConstant.PRODUCTION_PROJECT_ID);
|
|
|
- }else{
|
|
|
- chuanyunSelfWorkHourDTO.setProjectId(self.getProjectId());
|
|
|
- }
|
|
|
- chuanyunSelfWorkHourDTO.setUserId(chuanyunUserCompanyDO.getUserId());
|
|
|
- chuanyunSelfWorkHourDTO.setDayLogDate(self.getDayLogDate());
|
|
|
- chuanyunSelfWorkHourDTO.setProjectType(self.getProjectType());
|
|
|
- chuanyunSelfWorkHourDTO.setStatus(self.getStatus());
|
|
|
- chuanyunSelfWorkHourDTO.setDepartmentId(chuanyunUserCompanyDO.getDepartmentId());
|
|
|
- chuanyunSelfWorkHourDTO.setStandardWorkHour(chuanyunSelfWorkHourDO.getStandardWorkHour());
|
|
|
- List<String> matchers = new ArrayList<>();
|
|
|
- matchers.add("F0000001_2,"+self.getProjectId());
|
|
|
- matchers.add("F0000002_2,"+chuanyunUserCompanyDO.getUserId());
|
|
|
- matchers.add("F0000003_2,"+self.getDayLogDate());
|
|
|
- matchers.add("F0000005_2,"+self.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);
|
|
|
- chuanyunSaveDTO =chuanYunManager.update(ChuanyunMemberHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
|
|
|
- }else {
|
|
|
- chuanyunSaveDTO =chuanYunManager.save(ChuanyunMemberHourDO.SCHEMA_CODE,selfMonthString,true);
|
|
|
- }
|
|
|
- if(chuanyunSaveDTO.getSuccessful()){
|
|
|
-// log.info("新增工时标准化成功");
|
|
|
- }else{
|
|
|
- log.warn("新增工时标准化失败");
|
|
|
+ /**
|
|
|
+ * 人员-项目-周度工时汇总,更新氚云数据
|
|
|
+ */
|
|
|
+ @Scheduled(fixedDelay = 3600000L)
|
|
|
+ private void updateChuanyunWeekHour(){
|
|
|
+ var flag = true;
|
|
|
+ var pageSize = 20;
|
|
|
+ var page = 0;
|
|
|
+ log.info("开始更新周工时汇总");
|
|
|
+ deleteExamineStatus(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,"F0000007");
|
|
|
+ long startTime=Instant.now().getEpochSecond();
|
|
|
+ while(flag) {
|
|
|
+ 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(chuanyunProjectMemberWeekHourDTO.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);
|
|
|
+ chuanyunSaveDTO = chuanYunManager.update(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,firstResult.getObjectId(),selfMonthString);
|
|
|
+ }else {
|
|
|
+ chuanyunSaveDTO = chuanYunManager.save(ChuanyunProjectMemberWeekHourDO.SCHEMA_CODE,selfMonthString,true);
|
|
|
+ }
|
|
|
+ if(!chuanyunSaveDTO.getSuccessful()){
|
|
|
+ log.warn("新增人员项目周度工时失败");
|
|
|
+ }
|
|
|
+ } catch (JsonProcessingException | BigSizeException e) {
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
- }
|
|
|
- }catch (Exception e){
|
|
|
- log.error(e.getMessage());
|
|
|
- log.error(""+self);
|
|
|
- e.printStackTrace();
|
|
|
+ });
|
|
|
+ }else {
|
|
|
+ //流程执行完
|
|
|
+ break;
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
+ log.info("周工时更新花费"+(Instant.now().getEpochSecond()-startTime));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 员工每月、各个项目标准工时会职工
|
|
|
- * @param chuanyunUserCompanyDO 员工信息
|
|
|
+ * 人员-项目-月度工时汇总,更新氚云数据
|
|
|
*/
|
|
|
- private void standardMonthlyHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO) {
|
|
|
- var objectMapper=new ObjectMapper();
|
|
|
- //每月每项目工时,按月-项目-用户分组统计标准工时
|
|
|
- List<ChuanyunSelfWorkHourDO> list = chuanyunSelfWorkHourDao.getMonthProjectHour(chuanyunUserCompanyDO.getUserId());
|
|
|
- DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
- list.forEach(projectMonth->{
|
|
|
- //获取人员-月度-相同工时状态标准工时汇总
|
|
|
- ChuanyunSelfWorkHourDO monthHour = chuanyunSelfWorkHourDao.getMonthHour(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()),projectMonth.getStatus());
|
|
|
+ @Scheduled(fixedDelay = 3600000L)
|
|
|
+ private void updateChuanyunMonthHour(){
|
|
|
+ var flag = true;
|
|
|
+ var pageSize = 20;
|
|
|
+ var page = 0;
|
|
|
+ log.info("开始更新月工时汇总");
|
|
|
+ //删除氚云表单审核中数据
|
|
|
+ deleteExamineStatus(ChuanyunMemberMonthCostDO.SCHEMA_CODE,"F0000009");
|
|
|
+ long startTime=Instant.now().getEpochSecond();
|
|
|
+ while(flag) {
|
|
|
+ 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();
|
|
|
|
|
|
- //获取人员月度工资信息
|
|
|
- //TODO 张曦铭的薪资信息同步之后需要使用U9中的数据更新薪资信息
|
|
|
- ChuanyunPayrollDO chuanyunPayrollDO = chuanyunPayrollDao.getPayroll(projectMonth.getUserId(),df.format(projectMonth.getDayLogDate()));
|
|
|
- ChuanyunSelfCostDO chuanyunSelfCostDO = new ChuanyunSelfCostDO();
|
|
|
- ChuanyunMemberMonthCostDTO chuanyunMemberMonthCostDTO = new ChuanyunMemberMonthCostDTO();
|
|
|
- if (chuanyunPayrollDO != null) {
|
|
|
- BigDecimal cost = (projectMonth.getStandardWorkHour().divide(monthHour.getStandardWorkHour(), 2, RoundingMode.HALF_UP)).multiply(chuanyunPayrollDO.getWagesPayable());
|
|
|
- chuanyunSelfCostDO.setCost(cost);
|
|
|
- chuanyunMemberMonthCostDTO.setCost(cost);
|
|
|
- }else{
|
|
|
- chuanyunSelfCostDO.setCost(BigDecimal.ZERO);
|
|
|
- chuanyunMemberMonthCostDTO.setCost(BigDecimal.ZERO);
|
|
|
- }
|
|
|
- chuanyunSelfCostDO.setStatus(projectMonth.getStatus());
|
|
|
- chuanyunSelfCostDO.setMonthlyTotalHour(monthHour.getStandardWorkHour());
|
|
|
- chuanyunSelfCostDO.setProjectId(projectMonth.getProjectId());
|
|
|
- chuanyunSelfCostDO.setProjectType(projectMonth.getProjectType());
|
|
|
- chuanyunSelfCostDO.setUserId(projectMonth.getUserId());
|
|
|
- chuanyunSelfCostDO.setDayLogDate(projectMonth.getDayLogDate().withDayOfMonth(1));
|
|
|
- chuanyunSelfCostDO.setTotalHour(projectMonth.getStandardWorkHour());
|
|
|
- ChuanyunSelfCostDO oldSelfDO = chuanyunSelfCostDao.getOldSelfDO(chuanyunSelfCostDO.getUserId(),chuanyunSelfCostDO.getProjectId(),df.format(chuanyunSelfCostDO.getDayLogDate()));
|
|
|
- if (oldSelfDO !=null) {
|
|
|
- chuanyunSelfCostDao.delete(oldSelfDO);
|
|
|
+ //更新氚云数据
|
|
|
+ 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());
|
|
|
+ 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("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;
|
|
|
}
|
|
|
- chuanyunSelfCostDao.save(chuanyunSelfCostDO);
|
|
|
-
|
|
|
+ }
|
|
|
+ log.info("月工时更新花费"+(Instant.now().getEpochSecond()-startTime));
|
|
|
+ }
|
|
|
|
|
|
- //更新氚云数据
|
|
|
- chuanyunMemberMonthCostDTO.setProjectId(projectMonth.getProjectId());
|
|
|
- chuanyunMemberMonthCostDTO.setProjectType(projectMonth.getProjectType());
|
|
|
- chuanyunMemberMonthCostDTO.setStatus(projectMonth.getStatus());
|
|
|
- chuanyunMemberMonthCostDTO.setUserId(projectMonth.getUserId());
|
|
|
- chuanyunMemberMonthCostDTO.setMonthWorkHour(monthHour.getStandardWorkHour());
|
|
|
- chuanyunMemberMonthCostDTO.setDayLogDate(projectMonth.getDayLogDate().withDayOfMonth(1));
|
|
|
- chuanyunMemberMonthCostDTO.setWorkHour(projectMonth.getStandardWorkHour());
|
|
|
- chuanyunMemberMonthCostDTO.setDepartmentId(chuanyunUserCompanyDO.getDepartmentId());
|
|
|
- try {
|
|
|
- List<String> matchers = new ArrayList<>();
|
|
|
- matchers.add("F0000003_2,"+projectMonth.getProjectId());
|
|
|
- matchers.add("F0000009_2,"+projectMonth.getStatus());
|
|
|
- matchers.add("F0000002_2,"+projectMonth.getUserId());
|
|
|
- matchers.add("F0000004_2,"+projectMonth.getDayLogDate().withDayOfMonth(1));
|
|
|
- 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.info("新增项目成员月度成本汇总成功");
|
|
|
- }else{
|
|
|
- log.warn("新增项目成员月度成本汇总失败");
|
|
|
- }
|
|
|
- } catch (JsonProcessingException | BigSizeException e) {
|
|
|
- e.printStackTrace();
|
|
|
- log.warn("########"+projectMonth+"");
|
|
|
+ /**
|
|
|
+ * 删除状态为审核中数据
|
|
|
+ * @param schemaCode
|
|
|
+ * @param buttonCode
|
|
|
+ */
|
|
|
+ public void deleteExamineStatus(String schemaCode,String buttonCode) {
|
|
|
+ try {
|
|
|
+ List<String> matchers = new ArrayList<>();
|
|
|
+ matchers.add(buttonCode+"_2,"+"2");
|
|
|
+ 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());
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -778,11 +897,20 @@ class ChuanyunProjectMemberWeekHourDTO{
|
|
|
@JsonProperty("F0000005")
|
|
|
private BigDecimal personDays;
|
|
|
|
|
|
+ @JsonProperty("F0000008")
|
|
|
+ private String year;
|
|
|
+
|
|
|
@JsonProperty("F0000006")
|
|
|
private String week;
|
|
|
|
|
|
@JsonProperty("F0000007")
|
|
|
private String hourStatus;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 部门信息
|
|
|
+ */
|
|
|
+ @JsonProperty("F0000009")
|
|
|
+ private String departmentId;
|
|
|
}
|
|
|
|
|
|
/**
|