Commit afed52cc by 王衍超

定时任务自定生成销售计划;

parent abbece64
......@@ -21,4 +21,6 @@ public interface DinasOrganizationDao {
List<UUID> queryStaffByPostId(String postId);
List<UUID> queryStaffByRegionalCompany(UUID id);
List<KObject> queryAllOrganization();
}
......@@ -158,5 +158,10 @@ public class DinasOrganizationDaoImpl implements DinasOrganizationDao, DinasOrga
});
}
public List<KObject> queryAllOrganization() {
return template.execute(session -> {
Query<KObject> query = session.createQuery(" from " + ORGANIZATION_ENTITY + " as f ", KObject.class);
return query.getResultList();
});
}
}
......@@ -15,6 +15,7 @@ import org.springframework.orm.hibernate5.HibernateCallback;
import org.springframework.orm.hibernate5.HibernateOperations;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.common.BaseConstants;
import com.xyst.dinas.contract.constant.ContractConstant;
import com.xyst.dinas.contract.enumeration.ContractStateEnum;
import com.xyst.dinas.contract.request.ContractStatisticsQuery;
......@@ -69,6 +70,23 @@ public class ContractDao {
}
/**
* 查询区域公司下所有执行中的合同
* @param infoid
* @return
*/
public List<KObject> getExecutingContractByRegionCompany(UUID regionCompanyId) {
return (List<KObject>)template.execute(new HibernateCallback<List<KObject>>() {
@Override
public List<KObject> doInHibernate(Session session) throws HibernateException {
Query<KObject> query = session.createQuery("from " + ContractConstant.ENTITY_CONTRACT + " where (discard is null or discard = 0) and regionCompany.id =:regionCompanyId and contractState =:contractState", KObject.class);
query.setParameter("regionCompanyId", regionCompanyId);
query.setParameter("contractState", ContractStateEnum.EXECUTING.name());
return query.getResultList();
}
});
}
/**
* 合同统计查询
* @param contractStatisticsQuery
* @return
......@@ -129,4 +147,24 @@ public class ContractDao {
});
}
/**
* 获取合同上的某种砂石余量
* @param contract
* @param dinasTypeId 砂石类型
* @return
*/
public double getContractDinasAmount(KObject contract,UUID dinasTypeId) {
double dinasAmount = 0D;
List<KObject> contractDetail = contract.get("contractDetails").toList();
for (KObject detail : contractDetail) {//合同中的砂石明细
UUID dinasTypeId2 = detail.get("dinasType").getUuid(BaseConstants.ID);
if(dinasTypeId2.equals(dinasTypeId)) {
dinasAmount = detail.getDouble("dinasAmount"); //合同上的砂石余量
break;
}
}
return dinasAmount;
}
}
......@@ -124,31 +124,26 @@
<annotation id='00caecc1-35aa-4342-90c8-250f84609fe4' attributeId='55efd3f5-036a-4ac4-83c9-14e22cf5465a' name='length' value='undefined'></annotation>
<annotation id='95a6dd6d-c676-4265-9c8b-d115c13b472f' attributeId='43768653-e259-4b0f-8c9d-8739f030675b' name='mappingType' value='many-to-one'></annotation>
</attribute>
<attribute id='77e202d5-a342-436c-8042-adcaa8dde410' name='purchaseAmount' columnName='purchase_amount' title='砂石量(吨)' type='fixnum' default='' precision='' isArray='false'>
<annotation id='b203f8fa-0ad3-4837-a023-0ef742a74f29' attributeId='ff41e7d3-9fba-4a9b-811a-9b66ab87950d' name='length' value='100'>
</annotation>
<annotation id='4d1596bd-ae0a-4d7e-8258-5dad66493239' attributeId='7b049c9a-56e4-4791-a0a3-451237fd38a1' name='precision' value='12'>
</annotation>
<annotation id='1a25ed97-846e-4847-aa21-1a0b025c01ed' attributeId='52a3d8ee-92ab-45dc-b668-46408143254d' name='scale' value='4'>
</annotation>
<attribute id='77e202d5-a342-436c-8042-adcaa8dde410' name='purchaseAmount' columnName='purchase_amount' title='砂石采购量(吨)' type='fixnum' default='' precision='' isArray='false'>
<annotation id='b203f8fa-0ad3-4837-a023-0ef742a74f29' attributeId='ff41e7d3-9fba-4a9b-811a-9b66ab87950d' name='length' value='100'></annotation>
<annotation id='4d1596bd-ae0a-4d7e-8258-5dad66493239' attributeId='7b049c9a-56e4-4791-a0a3-451237fd38a1' name='precision' value='12'></annotation>
<annotation id='1a25ed97-846e-4847-aa21-1a0b025c01ed' attributeId='52a3d8ee-92ab-45dc-b668-46408143254d' name='scale' value='4'></annotation>
</attribute>
<attribute id='77e202d5-a342-436c-8042-adcaa8dde410' name='dinasAmount' columnName='dinas_amount' title='合同砂石余量(吨)' type='fixnum' default='' precision='' isArray='false'>
<annotation id='b203f8fa-0ad3-4837-a023-0ef742a74f29' attributeId='ff41e7d3-9fba-4a9b-811a-9b66ab87950d' name='length' value='100'></annotation>
<annotation id='4d1596bd-ae0a-4d7e-8258-5dad66493239' attributeId='7b049c9a-56e4-4791-a0a3-451237fd38a1' name='precision' value='12'></annotation>
<annotation id='1a25ed97-846e-4847-aa21-1a0b025c01ed' attributeId='52a3d8ee-92ab-45dc-b668-46408143254d' name='scale' value='4'></annotation>
</attribute>
<attribute id='77e202d5-a342-436c-8042-adcaa8dde410' name='price' columnName='price' title='单价' type='fixnum' default='' precision='' isArray='false'>
<annotation id='b203f8fa-0ad3-4837-a023-0ef742a74f29' attributeId='ff41e7d3-9fba-4a9b-811a-9b66ab87950d' name='length' value='100'>
</annotation>
<annotation id='4d1596bd-ae0a-4d7e-8258-5dad66493239' attributeId='7b049c9a-56e4-4791-a0a3-451237fd38a1' name='precision' value='12'>
</annotation>
<annotation id='1a25ed97-846e-4847-aa21-1a0b025c01ed' attributeId='52a3d8ee-92ab-45dc-b668-46408143254d' name='scale' value='2'>
</annotation>
<annotation id='b203f8fa-0ad3-4837-a023-0ef742a74f29' attributeId='ff41e7d3-9fba-4a9b-811a-9b66ab87950d' name='length' value='100'></annotation>
<annotation id='4d1596bd-ae0a-4d7e-8258-5dad66493239' attributeId='7b049c9a-56e4-4791-a0a3-451237fd38a1' name='precision' value='12'></annotation>
<annotation id='1a25ed97-846e-4847-aa21-1a0b025c01ed' attributeId='52a3d8ee-92ab-45dc-b668-46408143254d' name='scale' value='2'></annotation>
</attribute>
<attribute id='77e202d5-a342-436c-8042-adcaa8dde410' name='amount' columnName='amount' title='总价' type='fixnum' default='' precision='' isArray='false'>
<annotation id='b203f8fa-0ad3-4837-a023-0ef742a74f29' attributeId='ff41e7d3-9fba-4a9b-811a-9b66ab87950d' name='length' value='100'>
</annotation>
<annotation id='4d1596bd-ae0a-4d7e-8258-5dad66493239' attributeId='7b049c9a-56e4-4791-a0a3-451237fd38a1' name='precision' value='12'>
</annotation>
<annotation id='1a25ed97-846e-4847-aa21-1a0b025c01ed' attributeId='52a3d8ee-92ab-45dc-b668-46408143254d' name='scale' value='2'>
</annotation>
<annotation id='b203f8fa-0ad3-4837-a023-0ef742a74f29' attributeId='ff41e7d3-9fba-4a9b-811a-9b66ab87950d' name='length' value='100'></annotation>
<annotation id='4d1596bd-ae0a-4d7e-8258-5dad66493239' attributeId='7b049c9a-56e4-4791-a0a3-451237fd38a1' name='precision' value='12'></annotation>
<annotation id='1a25ed97-846e-4847-aa21-1a0b025c01ed' attributeId='52a3d8ee-92ab-45dc-b668-46408143254d' name='scale' value='2'></annotation>
</attribute>
</childModel>
<hibernate>/xyst.dinas.contract/src/main/resources/config/Contract.hbm.xml</hibernate>
......
......@@ -69,6 +69,29 @@
</m:property>
<m:property>
<m:key>scale</m:key>
<m:value>4</m:value>
</m:property>
</m:properties>
</m:annotation>
</m:annotations>
<m:id>77e202d5-a342-436c-8041-adcaa8dde410</m:id>
<m:name>dinasAmount</m:name>
<m:title>合同砂石余量(吨)</m:title>
<m:type>fixnum</m:type>
<m:description></m:description>
<m:default></m:default>
</m:attribute>
<m:attribute>
<m:annotations>
<m:annotation>
<m:type>bcp.type.constraint.Numeric</m:type>
<m:properties>
<m:property>
<m:key>precision</m:key>
<m:value>12</m:value>
</m:property>
<m:property>
<m:key>scale</m:key>
<m:value>2</m:value>
</m:property>
</m:properties>
......
......@@ -128,7 +128,7 @@
<class entity-name="com.xyst.dinas.contract.datamodel.Contract$contractDetail" table="xyst_dinas_contract_detail">
<tuplizer entity-mode="dynamic-map" class="com.beecode.bcp.store.hibernate.KObjectEntityTuplizer"/>
<id name="id" type="uuid-binary" column="id" length="16">
<generator class="assigned" />
<generator class="uuid2" />
</id>
<many-to-one name="master" entity-name="com.xyst.dinas.contract.datamodel.Contract" fetch="select">
<column name="master_id" not-null="false"/>
......
......@@ -20,6 +20,7 @@ dependencies {
compile project(":inz.workflow")
compile project(":inz.basis")
compile project(":xyst.dinas.biz")
compile project(":xyst.dinas.contract")
testCompile lib.amino_boot_web
......
......@@ -2,15 +2,33 @@ package com.xyst.dinas.sales.config;
import org.springframework.context.annotation.Bean;
import com.xyst.dinas.sales.dao.SalesPlanDao;
import com.xyst.dinas.sales.internal.service.SalesPlanServiceImpl;
import com.xyst.dinas.sales.service.SalesPlanService;
import com.xyst.dinas.sales.task.SalesPlanAutoCreateTaskRegister;
import com.xyst.dinas.sales.web.SalesPlanController;
public class SalesConfiguration {
@Bean
public SalesPlanController SalesPlanController() {
public SalesPlanController salesPlanController() {
return new SalesPlanController();
}
@Bean
public SalesPlanDao salesPlanDao() {
return new SalesPlanDao();
}
@Bean
public SalesPlanService salesPlanService() {
return new SalesPlanServiceImpl();
}
@Bean
public SalesPlanAutoCreateTaskRegister salesPlanAutoCreateTaskRegister() {
return new SalesPlanAutoCreateTaskRegister();
}
}
package com.xyst.dinas.sales.constant;
public class SalesPlanConstant {
/** 销售计划主表-实体*/
public static final String ENTITY = "com.xyst.dinas.sales.datamodel.SalesPlan";
/** 销售计划子表-实体*/
public static final String ENTITY_DETAIL = "com.xyst.dinas.sales.datamodel.SalesPlan$SalesPlanDetail";
/** 审批状态*/
public static final String APPROVE_STATE = "approveState";
/** 合同*/
public static final String contract = "contract";
/** 合同名称*/
public static final String contractName = "contractName";
/** 项目*/
public static final String project = "project";
/** 购砂单位*/
public static final String purchaseSandUnit = "purchaseSandUnit";
/** 砂石种类*/
public static final String dinasType = "dinasType";
/** 场站*/
public static final String station = "station";
/** 场站名称*/
public static final String stationName = "stationName";
/** 需用量*/
public static final String requiredAmount = "requiredAmount";
/** 合同砂石余量*/
public static final String contractAmount = "contractAmount";
/** 本期分配量*/
public static final String planAmount = "planAmount";
/** 库存量*/
public static final String stockAmount = "stockAmount";
}
package com.xyst.dinas.sales.dao;
import java.util.List;
import java.util.UUID;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.Nullable;
import org.springframework.orm.hibernate5.HibernateTemplate;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.sales.constant.SalesPlanConstant;
public class SalesPlanDao {
@Autowired
private HibernateTemplate template;
public void update(KObject kobject) {
template.update(kobject.getType().getName(), kobject);
}
public KObject load(UUID id) {
return (KObject) template.get(SalesPlanConstant.ENTITY, id);
}
public UUID create(KObject kObject) {
// template.setCheckWriteOperations(false);
return (UUID) template.save(kObject.getType().getName(), kObject);
}
public void delete(KObject kobject) {
template.delete(kobject.getType().getName(), kobject);
}
/**
* 一个区域公司的一个计划周期内最多只有一份销售计划
* @param regionCompany
* @param planningCycle
* @return
*/
public KObject querySalesPlanByPlan(UUID regionCompany,UUID planningCycle) {
return template.execute(session ->{
String hql = "from "+SalesPlanConstant.ENTITY+" as s where s.regionCompany.id =:regionCompany and s.planningCycle.id =:planningCycle";
Query<KObject> query = session.createQuery(hql,KObject.class);
query.setParameter("regionCompany", regionCompany);
query.setParameter("planningCycle", planningCycle);
List<KObject> resultList = query.getResultList();
if(resultList.isEmpty())return null;
return resultList.get(0);
});
}
public int deleteDetails(UUID masterId, @Nullable UUID contractId) {
return template.execute(session ->{
String hql = "delete from "+SalesPlanConstant.ENTITY_DETAIL+" as s where s.master =:masterId ";
if(contractId!=null) hql+=" and s.contract.id=:contractId ";
Query<KObject> query = session.createQuery(hql,KObject.class);
query.setParameter("masterId", masterId);
if(contractId!=null) query.setParameter("contractId", contractId);
return query.executeUpdate();
});
}
}
package com.xyst.dinas.sales.internal.service;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.amino.core.Amino;
import com.beecode.bap.workflow.core.BizProcessState;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.common.BaseConstants;
import com.xyst.dinas.sales.constant.SalesPlanConstant;
import com.xyst.dinas.sales.dao.SalesPlanDao;
import com.xyst.dinas.sales.service.SalesPlanService;
public class SalesPlanServiceImpl implements SalesPlanService{
@Autowired
private SalesPlanDao salesPlanDao;
@Transactional
public int createSalesPlanDetail(KObject salesPlan, KObject contract) {
int detailCount = 0;
UUID contractId = contract.getUuid(BaseConstants.ID);
String contractName = contract.getString("contractName");
KObject project = contract.get("project");
UUID projectId = project.getUuid(BaseConstants.ID);
KObject purchaseSandUnit = contract.get("purchaseSandUnit");
UUID purchaseSandUnitId = purchaseSandUnit.getUuid(BaseConstants.ID);
KClass detailClass = Amino.getApplicationMetadataContext().getBean(SalesPlanConstant.ENTITY_DETAIL, KClass.class);
List<KObject> contractDetail = contract.get("contractDetails").toList();
for (KObject detail : contractDetail) {//合同中的砂石明细
KObject dinasType = detail.get("dinasType");
double contractAmount = detail.getDouble("dinasAmount"); //合同上的砂石余量
double requiredAmount= 0D;//需用量
Double planAmount = null;//本期分配量
//新增销售计划明细
KObject planDetailObj = detailClass.newInstance();
planDetailObj.set(BaseConstants.MASTER,salesPlan);
planDetailObj.set(SalesPlanConstant.contract, contract);
planDetailObj.set(SalesPlanConstant.contractName, contractName);
planDetailObj.set(SalesPlanConstant.project, project);
planDetailObj.set(SalesPlanConstant.purchaseSandUnit, purchaseSandUnit);
planDetailObj.set(SalesPlanConstant.dinasType, dinasType);
planDetailObj.set(SalesPlanConstant.requiredAmount, requiredAmount);
planDetailObj.set(SalesPlanConstant.contractAmount, contractAmount);
planDetailObj.set(SalesPlanConstant.planAmount, planAmount);
UUID detailId = salesPlanDao.create(planDetailObj);
if(detailId!=null) detailCount++;
}
return detailCount;
}
@Transactional
public KObject createSalesPlanMaster(KObject regionCompany,KObject planningCycleObj) {
KClass kclass = Amino.getApplicationMetadataContext().getBean(SalesPlanConstant.ENTITY, KClass.class);
KObject kObject = kclass.newInstance();
kObject.set("regionCompany", regionCompany);
kObject.set("planningCycle", planningCycleObj);
kObject.set("approveState", BizProcessState.NOT_IN_PROCESS.getValue());
kObject.set(BaseConstants.CREATE_TIME, new Date());
kObject.set(BaseConstants.DEL,false);
kObject.set(BaseConstants.DISCARD,false);
salesPlanDao.create(kObject);
return kObject;
}
}
package com.xyst.dinas.sales.service;
import com.beecode.bcp.type.KObject;
public interface SalesPlanService {
/**
* 创建销售计划
* @param regionCompany
* @param planningCycleObj
* @return
*/
public KObject createSalesPlanMaster(KObject regionCompany,KObject planningCycleObj);
/**
* 增加销售计划明细
* @param salesPlan
* @param contract
* @return
*/
public int createSalesPlanDetail(KObject salesPlan, KObject contract);
}
package com.xyst.dinas.sales.task;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import com.beecode.amino.core.Amino;
import com.beecode.bap.scheduler.core.Task;
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.xyst.dinas.biz.dao.DinasOrganizationDao;
import com.xyst.dinas.biz.enumeration.PlanningCycleEnum;
import com.xyst.dinas.biz.service.PlanningCycleService;
import com.xyst.dinas.contract.internal.dao.ContractDao;
import com.xyst.dinas.sales.constant.SalesPlanConstant;
import com.xyst.dinas.sales.dao.SalesPlanDao;
import com.xyst.dinas.sales.service.SalesPlanService;
/**
* 销售计划自动创建任务
*
* @author Jackpot
* @date 2021年4月12日
*/
public class SalesPlanAutoCreateTask implements Task{
private Logger logger = LoggerFactory.getLogger(this.getClass());
private DinasOrganizationDao dinasOrganizationDao;
private SalesPlanDao salesPlanDao;
private SalesPlanService salesPlanService;
private ContractDao contractDao;
private PlanningCycleService planningCycleService;
/**
* 1. 首先查询所有区域公司,每个区域公司的一个计划周期内只有一份销售计划;如果该计划周期内存在销售计划,并且销售计划处于待审核或已通过状态,则不做任何处理;
* 2. 查询区域公司内所有的执行中合同,按照 合同, 项目,购砂单位, 砂石类型 4个维度建立一条销售计划明细;
* 3. 需用量从该合同相关联的需用计划上获取; 获取不到需用量视为0;
* 4. 合同余量从该合同的砂石明细上获取;(直接赋值过来就可以)
*/
@Override
public void execute(TaskContext arg0) {
logger.info("[销售计划自动创建]定时任务开始执行...");
initService();
//1.根据当前区域公司查找计划周期类型,然后根据类型获取计划周期(本周或本天);
List<KObject> allOrganization = dinasOrganizationDao.queryAllOrganization();
for (KObject regionCompany : allOrganization) {
String regionCompanyName = regionCompany.getString("name");
String planningCycle = regionCompany.getString("planningCycle");
PlanningCycleEnum planningCycleType = PlanningCycleEnum.DAY.name().equalsIgnoreCase(planningCycle)?PlanningCycleEnum.DAY:PlanningCycleEnum.WEEK;
KObject planningCycleObj = planningCycleService.getPlanningCycleObj(planningCycleType, new Date());
UUID regionCompanyId = regionCompany.getUuid(BaseConstants.ID);
UUID planningCycleId = planningCycleObj.getUuid(BaseConstants.ID);
KObject salesPlan = salesPlanDao.querySalesPlanByPlan(regionCompanyId, planningCycleId);
//1. 新增销售计划
if (salesPlan==null) {
KObject salesPlanMaster = salesPlanService.createSalesPlanMaster(regionCompany, planningCycleObj);
// UUID masterId = salesPlanMaster.getUuid(BaseConstants.ID);
int detailCount = 0;
List<KObject> executingContracts = contractDao.getExecutingContractByRegionCompany(regionCompanyId);
if (executingContracts.isEmpty()) continue;
for (KObject contract : executingContracts) {//执行中的合同
detailCount += salesPlanService.createSalesPlanDetail(salesPlanMaster, contract);
}
if(detailCount==0) {
salesPlanDao.delete(salesPlanMaster);
logger.info("区域公司["+regionCompanyName+"]:本次没有生成销售计划;");
}else {
int contractSize = executingContracts.size();
logger.info("区域公司["+regionCompanyName+"]:销售计划新增成功,本次共扫描到 "+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("区域公司["+regionCompanyName+"]:销售计划已经提交或审批通过,不做任何处理;");
continue;
}
//3.更新销售计划
HashSet<KObject> contractForAddInPlan = new HashSet<>();
HashSet<UUID> contractForDelInPlan = new HashSet<>();
List<KObject> executingContracts = contractDao.getExecutingContractByRegionCompany(regionCompanyId);
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(!isContain) contractForAddInPlan.add(executingContract);
}
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) {
salesPlanDao.deleteDetails(salesPlanId, contractId);
}
//3.2 更新销售明细中的合同砂石余量
if(contractForDelInPlan.size()>0) {
salesPlan = salesPlanDao.querySalesPlanByPlan(regionCompanyId, 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);
salesPlanDao.update(salesPlanDetail);
updateDetailCount++;
}
//3.3 新增销售明细
for (KObject contract : contractForAddInPlan) {
salesPlanService.createSalesPlanDetail(salesPlan, contract);
}
logger.info("区域公司["+regionCompanyName+"]:销售计划更新,本次共新增 "+contractForAddInPlan.size()+" 条销售明细,"
+ "删除 "+contractForDelInPlan.size()+" 条销售明细,刷新 "+updateDetailCount+" 条销售明细;");
}
}
private void initService() {
ApplicationContext applicationContext = Amino.getApplicationContext();
dinasOrganizationDao = applicationContext.getBean(DinasOrganizationDao.class);
salesPlanDao = applicationContext.getBean(SalesPlanDao.class);
salesPlanService = applicationContext.getBean(SalesPlanService.class);
planningCycleService = applicationContext.getBean(PlanningCycleService.class);
contractDao = applicationContext.getBean(ContractDao.class);
}
}
package com.xyst.dinas.sales.task;
import java.util.Optional;
import javax.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.amino.metadata.context.ApplicationMetadataContext;
import com.beecode.amino.metadata.runtime.ServiceInitializer;
import com.beecode.bap.scheduler.entity.ScheduleDetail;
import com.beecode.bap.scheduler.entity.TaskDetail;
import com.beecode.bap.scheduler.service.ScheduleService;
public class SalesPlanAutoCreateTaskRegister implements ServiceInitializer{
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private ScheduleService scheduleService;
//任务名
private final String TASK_NAME ="SalesPlanAutoCreateTask";
@Override
public void init(ApplicationMetadataContext arg0) {
}
public void crateScheduleTask(){
Optional<ScheduleDetail> Optional = scheduleService.findByName(TASK_NAME);
if (Optional.isPresent()) {
scheduleService.removeTask(TASK_NAME);
}
TaskDetail TaskDetail = new TaskDetail(TASK_NAME, SalesPlanAutoCreateTask.class.getName());
// 每天凌晨12点执行调度,如测试可修改为每十五秒:*/15 * * * * ?(表达式由至少6个由空格分隔的时间元素,从左至右可分为秒,分,时,日,月,星期)
scheduleService.scheduleTask(TaskDetail, "0 0 0 * * ?");
// 测试调度时进行调用
// scheduleService.scheduleTask(TaskDetail, "*/30 * * * * ?");
logger.info("销售计划自动创建任务初始化成功!");
}
@PostConstruct
public void init() {
crateScheduleTask();
}
}
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