Commit bf87f653 by 杨清松

销售计划周类型按可选天执行

parent 90acdad2
package com.xyst.dinas.sales.task;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
......@@ -16,6 +17,7 @@ import com.beecode.bap.scheduler.core.TaskContext;
import com.beecode.bap.workflow.core.BizProcessState;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.common.BaseConstants;
import com.beecode.xlib.utils.StringUtil;
import com.xyst.dinas.biz.dao.DinasOrganizationDao;
import com.xyst.dinas.biz.enumeration.PlanningCycleEnum;
import com.xyst.dinas.biz.service.PlanningCycleService;
......@@ -59,97 +61,116 @@ public class SalesPlanAutoCreateTask implements Task{
for (KObject regionalCompany : allOrganization) {
String regionalCompanyName = regionalCompany.getString("name");
String planningCycle = regionalCompany.getString("planningCycle");
PlanningCycleEnum planningCycleType = PlanningCycleEnum.DAY.name().equalsIgnoreCase(planningCycle)?PlanningCycleEnum.DAY:PlanningCycleEnum.WEEK;
KObject planningCycleObj = planningCycleService.getPlanningCycleObj(planningCycleType, new Date());
UUID regionalCompanyId = regionalCompany.getUuid(BaseConstants.ID);
UUID planningCycleId = planningCycleObj.getUuid(BaseConstants.ID);
KObject salesPlan = salesPlanDao.querySalesPlanByPlan(regionalCompanyId, planningCycleId);
//1. 新增销售计划
if (salesPlan==null) {
List<KObject> executingContracts = contractDao.queryExeContractByRegionalCompany(regionalCompanyId);
if (executingContracts.isEmpty()) continue;
KObject salesPlanMaster = salesPlanService.createSalesPlanMaster(regionalCompany, planningCycleObj);
int detailCount = 0;
for (KObject contract : executingContracts) {//执行中的合同
detailCount += salesPlanService.createSalesPlanDetail(salesPlanMaster, contract);
}
if(detailCount==0) {
salesPlanService.deleteSalesPlan(salesPlanMaster);
logger.info("区域公司["+regionalCompanyName+"]:本次没有生成销售计划;");
}else {
int contractSize = executingContracts.size();
logger.info("区域公司["+regionalCompanyName+"]:销售计划新增成功,本次共扫描到 "+contractSize+" 条执行中的合同,新增 "+detailCount+" 条销售计划明细");
}
continue;
}
//2.销售计划已经提交或审批通过,则不做任何处理
int approveState = salesPlan.getInt(SalesPlanConstant.APPROVE_STATE);
if (approveState == BizProcessState.IN_PROCESS.getValue() || approveState == BizProcessState.DONE_WITH_AGREE.getValue()) {
logger.info("区域公司["+regionalCompanyName+"]:销售计划已经提交或审批通过,不做任何处理;");
continue;
String oldWeek = regionalCompany.getString("generateSalePlanTime");
String weekDate = "";
if (StringUtil.isNotEmpty(oldWeek)) {
weekDate = getWeekOfDate(new Date());
}
//3.更新销售计划
List<KObject> contractForAddInPlan = new ArrayList<>();
HashSet<UUID> contractForDelInPlan = new HashSet<>();
List<KObject> executingContracts = contractDao.queryExeContractByRegionalCompany(regionalCompanyId);
List<KObject> salesPlanDetails = salesPlan.get("SalesPlanDetails").toList();
for (KObject executingContract : executingContracts) {
boolean isContain = false;
for (KObject salesPlanDetail : salesPlanDetails) {
UUID contractIdInPlan = salesPlanDetail.get("contract").getUuid(BaseConstants.ID);
if(contractIdInPlan.equals(executingContract.getUuid(BaseConstants.ID))) {
isContain = true;
break;
if (oldWeek.equals(weekDate) || planningCycle.equalsIgnoreCase(PlanningCycleEnum.DAY.name())) {
PlanningCycleEnum planningCycleType = PlanningCycleEnum.DAY.name().equalsIgnoreCase(planningCycle)?PlanningCycleEnum.DAY:PlanningCycleEnum.WEEK;
KObject planningCycleObj = planningCycleService.getPlanningCycleObj(planningCycleType, new Date());
UUID regionalCompanyId = regionalCompany.getUuid(BaseConstants.ID);
UUID planningCycleId = planningCycleObj.getUuid(BaseConstants.ID);
KObject salesPlan = salesPlanDao.querySalesPlanByPlan(regionalCompanyId, planningCycleId);
//1. 新增销售计划
if (salesPlan==null) {
List<KObject> executingContracts = contractDao.queryExeContractByRegionalCompany(regionalCompanyId);
if (executingContracts.isEmpty()) continue;
KObject salesPlanMaster = salesPlanService.createSalesPlanMaster(regionalCompany, planningCycleObj);
int detailCount = 0;
for (KObject contract : executingContracts) {//执行中的合同
detailCount += salesPlanService.createSalesPlanDetail(salesPlanMaster, contract);
}
if(detailCount==0) {
salesPlanService.deleteSalesPlan(salesPlanMaster);
logger.info("区域公司["+regionalCompanyName+"]:本次没有生成销售计划;");
}else {
int contractSize = executingContracts.size();
logger.info("区域公司["+regionalCompanyName+"]:销售计划新增成功,本次共扫描到 "+contractSize+" 条执行中的合同,新增 "+detailCount+" 条销售计划明细");
}
continue;
}
//在销售计划里不包含该合同,则新增;
if(!isContain) contractForAddInPlan.add(executingContract);
}
for (KObject salesPlanDetail : salesPlanDetails) {
UUID contractId = salesPlanDetail.get("contract").getUuid(BaseConstants.ID);
boolean isContain = false;
//2.销售计划已经提交或审批通过,则不做任何处理
int approveState = salesPlan.getInt(SalesPlanConstant.APPROVE_STATE);
if (approveState == BizProcessState.IN_PROCESS.getValue() || approveState == BizProcessState.DONE_WITH_AGREE.getValue()) {
logger.info("区域公司["+regionalCompanyName+"]:销售计划已经提交或审批通过,不做任何处理;");
continue;
}
//3.更新销售计划
List<KObject> contractForAddInPlan = new ArrayList<>();
HashSet<UUID> contractForDelInPlan = new HashSet<>();
List<KObject> executingContracts = contractDao.queryExeContractByRegionalCompany(regionalCompanyId);
List<KObject> salesPlanDetails = salesPlan.get("SalesPlanDetails").toList();
for (KObject executingContract : executingContracts) {
if(executingContract.getUuid(BaseConstants.ID).equals(contractId)) {
isContain = true;
break;
boolean isContain = false;
for (KObject salesPlanDetail : salesPlanDetails) {
UUID contractIdInPlan = salesPlanDetail.get("contract").getUuid(BaseConstants.ID);
if(contractIdInPlan.equals(executingContract.getUuid(BaseConstants.ID))) {
isContain = true;
break;
}
}
//在销售计划里不包含该合同,则新增;
if(!isContain) contractForAddInPlan.add(executingContract);
}
//执行中合同里不包含该销售计划里的合同,则删除销售计划中的合同明细;
if(!isContain) contractForDelInPlan.add(contractId);
}
UUID salesPlanId = salesPlan.getUuid(BaseConstants.ID);
//3.1 删除部分销售明细
for (UUID contractId : contractForDelInPlan) {
salesPlanService.deleteSalesPlanDetails(salesPlanId, contractId);
}
//3.2 更新销售明细中的合同砂石余量
if(contractForDelInPlan.size()>0) {
salesPlan = salesPlanDao.querySalesPlanByPlan(regionalCompanyId, planningCycleId);
}
int updateDetailCount =0;
salesPlanDetails = salesPlan.get("SalesPlanDetails").toList();
for (KObject salesPlanDetail : salesPlanDetails) {
KObject contract = salesPlanDetail.get(SalesPlanConstant.contract);
KObject dinasType = salesPlanDetail.get(SalesPlanConstant.dinasType);
UUID dinasTypeId = dinasType.getUuid(BaseConstants.ID);
double contractDinasAmount = contractDao.getContractDinasAmount(contract, dinasTypeId);//现在的砂石余量
double contractAmount = salesPlanDetail.getDouble(SalesPlanConstant.contractAmount);
if(contractDinasAmount == contractAmount) continue;
salesPlanDetail.set(SalesPlanConstant.contractAmount, contractDinasAmount);
salesPlanService.update(salesPlanDetail);
updateDetailCount++;
}
//3.3 新增销售明细
for (KObject contract : contractForAddInPlan) {
salesPlanService.createSalesPlanDetail(salesPlan, contract);
for (KObject salesPlanDetail : salesPlanDetails) {
UUID contractId = salesPlanDetail.get("contract").getUuid(BaseConstants.ID);
boolean isContain = false;
for (KObject executingContract : executingContracts) {
if(executingContract.getUuid(BaseConstants.ID).equals(contractId)) {
isContain = true;
break;
}
}
//执行中合同里不包含该销售计划里的合同,则删除销售计划中的合同明细;
if(!isContain) contractForDelInPlan.add(contractId);
}
UUID salesPlanId = salesPlan.getUuid(BaseConstants.ID);
//3.1 删除部分销售明细
for (UUID contractId : contractForDelInPlan) {
salesPlanService.deleteSalesPlanDetails(salesPlanId, contractId);
}
//3.2 更新销售明细中的合同砂石余量
if(contractForDelInPlan.size()>0) {
salesPlan = salesPlanDao.querySalesPlanByPlan(regionalCompanyId, planningCycleId);
}
int updateDetailCount =0;
salesPlanDetails = salesPlan.get("SalesPlanDetails").toList();
for (KObject salesPlanDetail : salesPlanDetails) {
KObject contract = salesPlanDetail.get(SalesPlanConstant.contract);
KObject dinasType = salesPlanDetail.get(SalesPlanConstant.dinasType);
UUID dinasTypeId = dinasType.getUuid(BaseConstants.ID);
double contractDinasAmount = contractDao.getContractDinasAmount(contract, dinasTypeId);//现在的砂石余量
double contractAmount = salesPlanDetail.getDouble(SalesPlanConstant.contractAmount);
if(contractDinasAmount == contractAmount) continue;
salesPlanDetail.set(SalesPlanConstant.contractAmount, contractDinasAmount);
salesPlanService.update(salesPlanDetail);
updateDetailCount++;
}
//3.3 新增销售明细
for (KObject contract : contractForAddInPlan) {
salesPlanService.createSalesPlanDetail(salesPlan, contract);
}
logger.info("区域公司["+regionalCompanyName+"]:销售计划更新,本次共新增 "+contractForAddInPlan.size()+" 条销售明细,"
+ "删除 "+contractForDelInPlan.size()+" 条销售明细,刷新 "+updateDetailCount+" 条销售明细;");
}
logger.info("区域公司["+regionalCompanyName+"]:销售计划更新,本次共新增 "+contractForAddInPlan.size()+" 条销售明细,"
+ "删除 "+contractForDelInPlan.size()+" 条销售明细,刷新 "+updateDetailCount+" 条销售明细;");
}
}
public static String getWeekOfDate(Date dt) {
String[] weekDays = {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0)
w = 0;
return weekDays[w];
}
private void initService() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment