Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
cloud-fb
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
王衍超
cloud-fb
Commits
afed52cc
Commit
afed52cc
authored
Apr 13, 2021
by
王衍超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
定时任务自定生成销售计划;
parent
abbece64
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
532 additions
and
23 deletions
+532
-23
DinasOrganizationDao.java
...ain/java/com/xyst/dinas/biz/dao/DinasOrganizationDao.java
+2
-0
DinasOrganizationDaoImpl.java
...xyst/dinas/biz/internal/dao/DinasOrganizationDaoImpl.java
+6
-1
ContractDao.java
...ava/com/xyst/dinas/contract/internal/dao/ContractDao.java
+38
-0
Contract.mk
.../main/model/com/xyst/dinas/contract/datamodel/Contract.mk
+15
-20
Contract$contractDetail.jmx
...xyst/dinas/contract/datamodel/Contract$contractDetail.jmx
+23
-0
Contract.hbm.xml
...dinas.contract/src/main/resources/config/Contract.hbm.xml
+1
-1
build.gradle
backend/xyst.dinas.sales/build.gradle
+1
-0
SalesConfiguration.java
.../java/com/xyst/dinas/sales/config/SalesConfiguration.java
+19
-1
SalesPlanConstant.java
...java/com/xyst/dinas/sales/constant/SalesPlanConstant.java
+38
-0
SalesPlanDao.java
.../src/main/java/com/xyst/dinas/sales/dao/SalesPlanDao.java
+70
-0
SalesPlanServiceImpl.java
...st/dinas/sales/internal/service/SalesPlanServiceImpl.java
+75
-0
SalesPlanService.java
...n/java/com/xyst/dinas/sales/service/SalesPlanService.java
+25
-0
SalesPlanAutoCreateTask.java
...va/com/xyst/dinas/sales/task/SalesPlanAutoCreateTask.java
+166
-0
SalesPlanAutoCreateTaskRegister.java
...yst/dinas/sales/task/SalesPlanAutoCreateTaskRegister.java
+53
-0
No files found.
backend/xyst.dinas.biz/src/main/java/com/xyst/dinas/biz/dao/DinasOrganizationDao.java
View file @
afed52cc
...
...
@@ -21,4 +21,6 @@ public interface DinasOrganizationDao {
List
<
UUID
>
queryStaffByPostId
(
String
postId
);
List
<
UUID
>
queryStaffByRegionalCompany
(
UUID
id
);
List
<
KObject
>
queryAllOrganization
();
}
backend/xyst.dinas.biz/src/main/java/com/xyst/dinas/biz/internal/dao/DinasOrganizationDaoImpl.java
View file @
afed52cc
...
...
@@ -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
();
});
}
}
backend/xyst.dinas.contract/src/main/java/com/xyst/dinas/contract/internal/dao/ContractDao.java
View file @
afed52cc
...
...
@@ -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
=
0
D
;
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
;
}
}
backend/xyst.dinas.contract/src/main/model/com/xyst/dinas/contract/datamodel/Contract.mk
View file @
afed52cc
...
...
@@ -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>
...
...
backend/xyst.dinas.contract/src/main/resources/com/xyst/dinas/contract/datamodel/Contract$contractDetail.jmx
View file @
afed52cc
...
...
@@ -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>
...
...
backend/xyst.dinas.contract/src/main/resources/config/Contract.hbm.xml
View file @
afed52cc
...
...
@@ -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"
/>
...
...
backend/xyst.dinas.sales/build.gradle
View file @
afed52cc
...
...
@@ -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
...
...
backend/xyst.dinas.sales/src/main/java/com/xyst/dinas/sales/config/SalesConfiguration.java
View file @
afed52cc
...
...
@@ -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
S
alesPlanController
()
{
public
SalesPlanController
s
alesPlanController
()
{
return
new
SalesPlanController
();
}
@Bean
public
SalesPlanDao
salesPlanDao
()
{
return
new
SalesPlanDao
();
}
@Bean
public
SalesPlanService
salesPlanService
()
{
return
new
SalesPlanServiceImpl
();
}
@Bean
public
SalesPlanAutoCreateTaskRegister
salesPlanAutoCreateTaskRegister
()
{
return
new
SalesPlanAutoCreateTaskRegister
();
}
}
backend/xyst.dinas.sales/src/main/java/com/xyst/dinas/sales/constant/SalesPlanConstant.java
0 → 100644
View file @
afed52cc
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"
;
}
backend/xyst.dinas.sales/src/main/java/com/xyst/dinas/sales/dao/SalesPlanDao.java
0 → 100644
View file @
afed52cc
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
();
});
}
}
backend/xyst.dinas.sales/src/main/java/com/xyst/dinas/sales/internal/service/SalesPlanServiceImpl.java
0 → 100644
View file @
afed52cc
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
=
0
D
;
//需用量
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
;
}
}
backend/xyst.dinas.sales/src/main/java/com/xyst/dinas/sales/service/SalesPlanService.java
0 → 100644
View file @
afed52cc
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
);
}
backend/xyst.dinas.sales/src/main/java/com/xyst/dinas/sales/task/SalesPlanAutoCreateTask.java
0 → 100644
View file @
afed52cc
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
);
}
}
backend/xyst.dinas.sales/src/main/java/com/xyst/dinas/sales/task/SalesPlanAutoCreateTaskRegister.java
0 → 100644
View file @
afed52cc
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
();
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment