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
bf87f653
Commit
bf87f653
authored
Apr 10, 2022
by
杨清松
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
销售计划周类型按可选天执行
parent
90acdad2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
102 additions
and
81 deletions
+102
-81
SalesPlanAutoCreateTask.java
...va/com/xyst/dinas/sales/task/SalesPlanAutoCreateTask.java
+102
-81
No files found.
backend/xyst.dinas.sales/src/main/java/com/xyst/dinas/sales/task/SalesPlanAutoCreateTask.java
View file @
bf87f653
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
()
{
...
...
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