|
@@ -1,21 +1,21 @@
|
|
|
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.ChuanyunPaymentReceiveDao;
|
|
|
-import com.galaxis.manatee.dao.ChuanyunProjectCashFlowDao;
|
|
|
-import com.galaxis.manatee.dao.ChuanyunPurCostDao;
|
|
|
-import com.galaxis.manatee.dao.ChuanyunSaleContractDao;
|
|
|
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunPaymentReceiveDO;
|
|
|
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectCashFlowDO;
|
|
|
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunPurCostDO;
|
|
|
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSaleContractDO;
|
|
|
+import com.galaxis.manatee.dao.*;
|
|
|
+import com.galaxis.manatee.entity.chuanyun.data.object.*;
|
|
|
+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.data.domain.PageRequest;
|
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
@@ -33,13 +33,23 @@ public class ChuanyunProjectScheduledTask {
|
|
|
private final ChuanyunPaymentReceiveDao chuanyunPaymentReceiveDao;
|
|
|
private final ChuanyunPurCostDao chuanyunPurCostDao;
|
|
|
private final ChuanyunProjectCashFlowDao chuanyunProjectCashFlowDao;
|
|
|
+ private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
|
|
|
+ private final ChuanyunReimbursementDao chuanyunReimbursementDao;
|
|
|
+ private final ChuanyunLaborCostDao chuanyunLaborCostDao;
|
|
|
+ private final ChuanyunPersonDaysDao chuanyunPersonDaysDao;
|
|
|
+ private final ChuanyunProjectDao chuanyunProjectDao;
|
|
|
|
|
|
- public ChuanyunProjectScheduledTask(ChuanYunManager chuanYunManager, ChuanyunSaleContractDao chuanyunSaleContractDao, ChuanyunPaymentReceiveDao chuanyunPaymentReceiveDao, ChuanyunPurCostDao chuanyunPurCostDao, ChuanyunProjectCashFlowDao chuanyunProjectCashFlowDao) {
|
|
|
+ public ChuanyunProjectScheduledTask(ChuanYunManager chuanYunManager, ChuanyunSaleContractDao chuanyunSaleContractDao, ChuanyunPaymentReceiveDao chuanyunPaymentReceiveDao, ChuanyunPurCostDao chuanyunPurCostDao, ChuanyunProjectCashFlowDao chuanyunProjectCashFlowDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunReimbursementDao chuanyunReimbursementDao, ChuanyunLaborCostDao chuanyunLaborCostDao, ChuanyunPersonDaysDao chuanyunPersonDaysDao, ChuanyunProjectDao chuanyunProjectDao) {
|
|
|
this.chuanYunManager = chuanYunManager;
|
|
|
this.chuanyunSaleContractDao = chuanyunSaleContractDao;
|
|
|
this.chuanyunPaymentReceiveDao = chuanyunPaymentReceiveDao;
|
|
|
this.chuanyunPurCostDao = chuanyunPurCostDao;
|
|
|
this.chuanyunProjectCashFlowDao = chuanyunProjectCashFlowDao;
|
|
|
+ this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
|
|
|
+ this.chuanyunReimbursementDao = chuanyunReimbursementDao;
|
|
|
+ this.chuanyunLaborCostDao = chuanyunLaborCostDao;
|
|
|
+ this.chuanyunPersonDaysDao = chuanyunPersonDaysDao;
|
|
|
+ this.chuanyunProjectDao = chuanyunProjectDao;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -158,6 +168,76 @@ public class ChuanyunProjectScheduledTask {
|
|
|
log.info("项目物料成本保存"+totalCount);
|
|
|
}
|
|
|
|
|
|
+ @Scheduled(fixedDelay = 3600000L)
|
|
|
+ private void saveAdjustAccount() {
|
|
|
+ var objectMapper=new ObjectMapper();
|
|
|
+ var flag = true;
|
|
|
+ var pageSize = 20;
|
|
|
+ var page = 0;
|
|
|
+ while (flag) {
|
|
|
+ var pageable= PageRequest.of(page,pageSize);
|
|
|
+ var chuanyunGroupProjectDOS = chuanyunProjectDao.findAllByIsCreate(null,pageable);
|
|
|
+ if (page<=chuanyunGroupProjectDOS.getTotalPages()){
|
|
|
+ page += 1;
|
|
|
+ }else {
|
|
|
+ flag = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ List<ChuanyunProjectDO> list = chuanyunGroupProjectDOS.getContent();
|
|
|
+ list.forEach(chuanyunProjectDO -> {
|
|
|
+ ChuanyunAdjustAccountDO chuanyunAdjustAccountDO = new ChuanyunAdjustAccountDO();
|
|
|
+ //项目号
|
|
|
+ chuanyunAdjustAccountDO.setProjectCode(chuanyunProjectDO.getProjectCode());
|
|
|
+ //核算实施费用
|
|
|
+ BigDecimal money = new BigDecimal(0);
|
|
|
+ List<ChuanyunReimbursementDO> list1 = chuanyunReimbursementDao.findAllByGroupProjectId(chuanyunProjectDO.getObjectId());
|
|
|
+ if (list1 != null) {
|
|
|
+ for (ChuanyunReimbursementDO chuanyunReimbursementDO : list1) {
|
|
|
+ money = money.add(chuanyunReimbursementDO.getAmount());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ chuanyunAdjustAccountDO.setImplementationCosts(money);
|
|
|
+ //人力成本
|
|
|
+ BigDecimal laborCost = new BigDecimal(0);
|
|
|
+ List<ChuanyunLaborCostDO> recordlist = chuanyunLaborCostDao.findLaborCost(chuanyunProjectDO.getObjectId());
|
|
|
+ //单个项目每人每月累计和
|
|
|
+ for (ChuanyunLaborCostDO chuanyunLaborCostDO : recordlist) {
|
|
|
+ if (chuanyunLaborCostDO.getOwnerPayroll()!=null) {
|
|
|
+ laborCost = laborCost.add(chuanyunLaborCostDO.getOwnerPayroll());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ chuanyunAdjustAccountDO.setLaborCost(laborCost);
|
|
|
+ //核算人天
|
|
|
+ chuanyunAdjustAccountDO.setPersonDays(personDays(chuanyunProjectDO.getObjectId()));
|
|
|
+ //新增
|
|
|
+ if (!chuanyunAdjustAccountDO.getPersonDays().toString().equals("0")){
|
|
|
+ try {
|
|
|
+ List<String> macthers = new ArrayList<>();
|
|
|
+ macthers.add("F0000002_2,"+chuanyunProjectDO.getProjectCode());
|
|
|
+ var filter= Filter.instance(0,1,true,"And",macthers);
|
|
|
+ var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunAdjustAccountDO.SCHEMA_CODE,filter);
|
|
|
+ var adjustString=objectMapper.writeValueAsString(chuanyunAdjustAccountDO);
|
|
|
+ ChuanyunSaveDTO chuanyunSaveDTO;
|
|
|
+ if (chuanyunFindAllResponse.getReturnData() != null) {
|
|
|
+ List<ChuanyunAdjustAccountDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
|
|
|
+ ChuanyunAdjustAccountDO chuanyunAdjustAccountDO1 = result.get(0);
|
|
|
+ chuanyunSaveDTO = chuanYunManager.update(ChuanyunAdjustAccountDO.SCHEMA_CODE,chuanyunAdjustAccountDO1.getObjectId(),adjustString);
|
|
|
+ }else {
|
|
|
+ chuanyunSaveDTO = chuanYunManager.save(ChuanyunAdjustAccountDO.SCHEMA_CODE,adjustString,true);
|
|
|
+ }
|
|
|
+ if(chuanyunSaveDTO.getSuccessful()){
|
|
|
+ log.info("新增项目核算登记成功");
|
|
|
+ }else{
|
|
|
+ log.warn("新增项目核算登记失败");
|
|
|
+ }
|
|
|
+ } catch (JsonProcessingException | BigSizeException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 更新销售合同回款数据
|
|
|
*/
|
|
@@ -197,4 +277,24 @@ public class ChuanyunProjectScheduledTask {
|
|
|
}
|
|
|
log.info("项目销售合同回款信息保存保存"+totalCount);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算人天
|
|
|
+ * @param projectId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private BigDecimal personDays(String projectId){
|
|
|
+ BigDecimal standard = new BigDecimal(8);
|
|
|
+ BigDecimal personDays = new BigDecimal(0);
|
|
|
+ //项目每人每天工时
|
|
|
+ List<ChuanyunPersonDaysDO> selfWorkHourList = chuanyunPersonDaysDao.getSelfWorkHour(projectId);
|
|
|
+ for (ChuanyunPersonDaysDO chuanyunPersonDaysDO : selfWorkHourList) {
|
|
|
+ //项目总工时
|
|
|
+ ChuanyunPersonDaysDO totalWorkHour = chuanyunPersonDaysDao.getTotalWorkHour(projectId);
|
|
|
+ BigDecimal totalDays = (chuanyunPersonDaysDO.getHoursWorked().divide(totalWorkHour.getHoursWorked(), 2, BigDecimal.ROUND_HALF_UP)).multiply(standard);
|
|
|
+ personDays= personDays.add(totalDays);
|
|
|
+ }
|
|
|
+ return personDays.divide(standard);
|
|
|
+
|
|
|
+ }
|
|
|
}
|