Commit bf87f653 by 杨清松

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

parent 90acdad2
package com.xyst.dinas.sales.task; package com.xyst.dinas.sales.task;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
...@@ -16,6 +17,7 @@ import com.beecode.bap.scheduler.core.TaskContext; ...@@ -16,6 +17,7 @@ import com.beecode.bap.scheduler.core.TaskContext;
import com.beecode.bap.workflow.core.BizProcessState; import com.beecode.bap.workflow.core.BizProcessState;
import com.beecode.bcp.type.KObject; import com.beecode.bcp.type.KObject;
import com.beecode.inz.common.BaseConstants; import com.beecode.inz.common.BaseConstants;
import com.beecode.xlib.utils.StringUtil;
import com.xyst.dinas.biz.dao.DinasOrganizationDao; import com.xyst.dinas.biz.dao.DinasOrganizationDao;
import com.xyst.dinas.biz.enumeration.PlanningCycleEnum; import com.xyst.dinas.biz.enumeration.PlanningCycleEnum;
import com.xyst.dinas.biz.service.PlanningCycleService; import com.xyst.dinas.biz.service.PlanningCycleService;
...@@ -59,97 +61,116 @@ public class SalesPlanAutoCreateTask implements Task{ ...@@ -59,97 +61,116 @@ public class SalesPlanAutoCreateTask implements Task{
for (KObject regionalCompany : allOrganization) { for (KObject regionalCompany : allOrganization) {
String regionalCompanyName = regionalCompany.getString("name"); String regionalCompanyName = regionalCompany.getString("name");
String planningCycle = regionalCompany.getString("planningCycle"); String planningCycle = regionalCompany.getString("planningCycle");
PlanningCycleEnum planningCycleType = PlanningCycleEnum.DAY.name().equalsIgnoreCase(planningCycle)?PlanningCycleEnum.DAY:PlanningCycleEnum.WEEK;
KObject planningCycleObj = planningCycleService.getPlanningCycleObj(planningCycleType, new Date()); String oldWeek = regionalCompany.getString("generateSalePlanTime");
String weekDate = "";
UUID regionalCompanyId = regionalCompany.getUuid(BaseConstants.ID); if (StringUtil.isNotEmpty(oldWeek)) {
UUID planningCycleId = planningCycleObj.getUuid(BaseConstants.ID); weekDate = getWeekOfDate(new Date());
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;
} }
//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 (oldWeek.equals(weekDate) || planningCycle.equalsIgnoreCase(PlanningCycleEnum.DAY.name())) {
boolean isContain = false; PlanningCycleEnum planningCycleType = PlanningCycleEnum.DAY.name().equalsIgnoreCase(planningCycle)?PlanningCycleEnum.DAY:PlanningCycleEnum.WEEK;
for (KObject salesPlanDetail : salesPlanDetails) { KObject planningCycleObj = planningCycleService.getPlanningCycleObj(planningCycleType, new Date());
UUID contractIdInPlan = salesPlanDetail.get("contract").getUuid(BaseConstants.ID);
if(contractIdInPlan.equals(executingContract.getUuid(BaseConstants.ID))) { UUID regionalCompanyId = regionalCompany.getUuid(BaseConstants.ID);
isContain = true; UUID planningCycleId = planningCycleObj.getUuid(BaseConstants.ID);
break; 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.销售计划已经提交或审批通过,则不做任何处理
if(!isContain) contractForAddInPlan.add(executingContract); int approveState = salesPlan.getInt(SalesPlanConstant.APPROVE_STATE);
} if (approveState == BizProcessState.IN_PROCESS.getValue() || approveState == BizProcessState.DONE_WITH_AGREE.getValue()) {
for (KObject salesPlanDetail : salesPlanDetails) { logger.info("区域公司["+regionalCompanyName+"]:销售计划已经提交或审批通过,不做任何处理;");
UUID contractId = salesPlanDetail.get("contract").getUuid(BaseConstants.ID); continue;
boolean isContain = false; }
//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) { for (KObject executingContract : executingContracts) {
if(executingContract.getUuid(BaseConstants.ID).equals(contractId)) { boolean isContain = false;
isContain = true; for (KObject salesPlanDetail : salesPlanDetails) {
break; UUID contractIdInPlan = salesPlanDetail.get("contract").getUuid(BaseConstants.ID);
if(contractIdInPlan.equals(executingContract.getUuid(BaseConstants.ID))) {
isContain = true;
break;
}
} }
//在销售计划里不包含该合同,则新增;
if(!isContain) contractForAddInPlan.add(executingContract);
} }
//执行中合同里不包含该销售计划里的合同,则删除销售计划中的合同明细; for (KObject salesPlanDetail : salesPlanDetails) {
if(!isContain) contractForDelInPlan.add(contractId); UUID contractId = salesPlanDetail.get("contract").getUuid(BaseConstants.ID);
} boolean isContain = false;
UUID salesPlanId = salesPlan.getUuid(BaseConstants.ID); for (KObject executingContract : executingContracts) {
//3.1 删除部分销售明细 if(executingContract.getUuid(BaseConstants.ID).equals(contractId)) {
for (UUID contractId : contractForDelInPlan) { isContain = true;
salesPlanService.deleteSalesPlanDetails(salesPlanId, contractId); break;
} }
//3.2 更新销售明细中的合同砂石余量 }
if(contractForDelInPlan.size()>0) { //执行中合同里不包含该销售计划里的合同,则删除销售计划中的合同明细;
salesPlan = salesPlanDao.querySalesPlanByPlan(regionalCompanyId, planningCycleId); if(!isContain) contractForDelInPlan.add(contractId);
} }
int updateDetailCount =0; UUID salesPlanId = salesPlan.getUuid(BaseConstants.ID);
salesPlanDetails = salesPlan.get("SalesPlanDetails").toList(); //3.1 删除部分销售明细
for (KObject salesPlanDetail : salesPlanDetails) { for (UUID contractId : contractForDelInPlan) {
KObject contract = salesPlanDetail.get(SalesPlanConstant.contract); salesPlanService.deleteSalesPlanDetails(salesPlanId, contractId);
KObject dinasType = salesPlanDetail.get(SalesPlanConstant.dinasType); }
UUID dinasTypeId = dinasType.getUuid(BaseConstants.ID); //3.2 更新销售明细中的合同砂石余量
double contractDinasAmount = contractDao.getContractDinasAmount(contract, dinasTypeId);//现在的砂石余量 if(contractForDelInPlan.size()>0) {
double contractAmount = salesPlanDetail.getDouble(SalesPlanConstant.contractAmount); salesPlan = salesPlanDao.querySalesPlanByPlan(regionalCompanyId, planningCycleId);
if(contractDinasAmount == contractAmount) continue; }
salesPlanDetail.set(SalesPlanConstant.contractAmount, contractDinasAmount); int updateDetailCount =0;
salesPlanService.update(salesPlanDetail); salesPlanDetails = salesPlan.get("SalesPlanDetails").toList();
updateDetailCount++; for (KObject salesPlanDetail : salesPlanDetails) {
} KObject contract = salesPlanDetail.get(SalesPlanConstant.contract);
//3.3 新增销售明细 KObject dinasType = salesPlanDetail.get(SalesPlanConstant.dinasType);
for (KObject contract : contractForAddInPlan) { UUID dinasTypeId = dinasType.getUuid(BaseConstants.ID);
salesPlanService.createSalesPlanDetail(salesPlan, contract); 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() { 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