Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
dc-java
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
huluobin
dc-java
Commits
fc1b8dfb
Commit
fc1b8dfb
authored
Sep 19, 2019
by
yinyong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
JIT备货天数
parent
9c91d5fc
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
32 additions
and
11 deletions
+32
-11
AutoTurnoverJob.java
...over/src/main/java/com/bailuntec/job/AutoTurnoverJob.java
+32
-11
No files found.
data-show/show-auto-turnover/src/main/java/com/bailuntec/job/AutoTurnoverJob.java
View file @
fc1b8dfb
...
@@ -32,10 +32,7 @@ import java.time.LocalDate;
...
@@ -32,10 +32,7 @@ import java.time.LocalDate;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.time.Period
;
import
java.time.Period
;
import
java.time.format.DateTimeFormatter
;
import
java.time.format.DateTimeFormatter
;
import
java.util.ArrayList
;
import
java.util.*
;
import
java.util.Comparator
;
import
java.util.HashMap
;
import
java.util.List
;
@Slf4j
@Slf4j
public
class
AutoTurnoverJob
extends
PointJob
{
public
class
AutoTurnoverJob
extends
PointJob
{
...
@@ -265,6 +262,7 @@ public class AutoTurnoverJob extends PointJob {
...
@@ -265,6 +262,7 @@ public class AutoTurnoverJob extends PointJob {
List
<
BigDecimal
>
forecastShortSupplyList
=
new
ArrayList
<
BigDecimal
>(
autoForecastDay
);
List
<
BigDecimal
>
forecastShortSupplyList
=
new
ArrayList
<
BigDecimal
>(
autoForecastDay
);
List
<
BigDecimal
>
forecastPurchaseAdvisedList
=
new
ArrayList
<
BigDecimal
>(
autoForecastDay
);
List
<
BigDecimal
>
forecastPurchaseAdvisedList
=
new
ArrayList
<
BigDecimal
>(
autoForecastDay
);
List
<
BigDecimal
>
moqPurchaseAdvisedList
=
new
ArrayList
<
BigDecimal
>(
autoForecastDay
);
List
<
BigDecimal
>
moqPurchaseAdvisedList
=
new
ArrayList
<
BigDecimal
>(
autoForecastDay
);
Map
<
String
,
BigDecimal
>
saveDaysMap
=
new
HashMap
<
String
,
BigDecimal
>();
initForecaseList
(
forecastInboundRelationList
,
forecastInventoryList
,
forecastPurchaseInboundList
,
forecastTransferInboundList
,
forecastInboundList
,
forecastSalesList
,
forecastShortSupplyList
,
autoForecastDay
,
forecastSalesExplainList
);
initForecaseList
(
forecastInboundRelationList
,
forecastInventoryList
,
forecastPurchaseInboundList
,
forecastTransferInboundList
,
forecastInboundList
,
forecastSalesList
,
forecastShortSupplyList
,
autoForecastDay
,
forecastSalesExplainList
);
/*
/*
...
@@ -282,7 +280,7 @@ public class AutoTurnoverJob extends PointJob {
...
@@ -282,7 +280,7 @@ public class AutoTurnoverJob extends PointJob {
* 均值, 配置安全库存法: 销量上下限 根据过去30天销量,计算出合理的销量封顶值和销量最低值
* 均值, 配置安全库存法: 销量上下限 根据过去30天销量,计算出合理的销量封顶值和销量最低值
* 曲线拟合 :销量预测, 根据销量走势和上下限,计算出销量预测曲线, 如果历史销量包含0, 无法使用指数函数拟合
* 曲线拟合 :销量预测, 根据销量走势和上下限,计算出销量预测曲线, 如果历史销量包含0, 无法使用指数函数拟合
*/
*/
calculateForecastSales
(
salesUpperLimit
,
autoForecastDay
,
dcAutoSales
,
forecastSalesList
,
turnoverSku
,
recordTime
,
bailunSku
);
calculateForecastSales
(
salesUpperLimit
,
autoForecastDay
,
dcAutoSales
,
forecastSalesList
,
turnoverSku
,
recordTime
,
bailunSku
,
warehouseCode
);
/*
/*
* 处理矫正信息
* 处理矫正信息
...
@@ -341,7 +339,7 @@ public class AutoTurnoverJob extends PointJob {
...
@@ -341,7 +339,7 @@ public class AutoTurnoverJob extends PointJob {
* 可以支持配置
* 可以支持配置
* 2019-04-22更新 不管逾期
* 2019-04-22更新 不管逾期
*/
*/
BigDecimal
totalSafeInventory
=
calculateSafeInventory
(
turnoverSku
,
bailunSku
,
warehouseCode
,
bailunFirstLevelCatagoryId
,
dcAutoSales
,
JSON
.
toJSONString
(
forecastSalesList
),
dcAutoTurnover
);
BigDecimal
totalSafeInventory
=
calculateSafeInventory
(
turnoverSku
,
bailunSku
,
warehouseCode
,
bailunFirstLevelCatagoryId
,
dcAutoSales
,
JSON
.
toJSONString
(
forecastSalesList
),
dcAutoTurnover
,
saveDaysMap
);
Integer
moq
=
turnoverSku
.
getMoq
();
Integer
moq
=
turnoverSku
.
getMoq
();
/*
/*
...
@@ -413,7 +411,7 @@ public class AutoTurnoverJob extends PointJob {
...
@@ -413,7 +411,7 @@ public class AutoTurnoverJob extends PointJob {
* 获取采购建议-普通仓库
* 获取采购建议-普通仓库
* 实际缺货 + 总销量 - 总预计入库 + (安全库存 - 预测库存) + 周转天的销量
* 实际缺货 + 总销量 - 总预计入库 + (安全库存 - 预测库存) + 周转天的销量
*/
*/
inventoryAvailableDays
=
commonAdvise
(
turnoverSku
,
warehouseCode
,
hasMonitorFluctuation
,
forecastFluctuationList
,
recordTime
,
dcAutoTurnover
,
turnoverDays
,
autoForecastDay
,
forecastInventoryList
,
forecastInboundList
,
forecastSalesList
,
forecastShortSupplyList
,
forecastPurchaseAdvisedList
,
moqPurchaseAdvisedList
,
realInventory
,
totalSafeInventory
,
outStock
,
inventoryAvailableDays
,
totalSales
,
totalInbound
,
moqDecimal
);
inventoryAvailableDays
=
commonAdvise
(
turnoverSku
,
warehouseCode
,
hasMonitorFluctuation
,
forecastFluctuationList
,
recordTime
,
dcAutoTurnover
,
turnoverDays
,
autoForecastDay
,
forecastInventoryList
,
forecastInboundList
,
forecastSalesList
,
forecastShortSupplyList
,
forecastPurchaseAdvisedList
,
moqPurchaseAdvisedList
,
realInventory
,
totalSafeInventory
,
outStock
,
inventoryAvailableDays
,
totalSales
,
totalInbound
,
moqDecimal
,
saveDaysMap
);
}
}
/*
/*
...
@@ -987,7 +985,15 @@ public class AutoTurnoverJob extends PointJob {
...
@@ -987,7 +985,15 @@ public class AutoTurnoverJob extends PointJob {
* @param forecastSalesList
* @param forecastSalesList
*/
*/
private
void
calculateForecastSales
(
BigDecimal
salesUpperLimit
,
Integer
autoForecastDay
,
DcAutoSales
private
void
calculateForecastSales
(
BigDecimal
salesUpperLimit
,
Integer
autoForecastDay
,
DcAutoSales
dcAutoSales
,
List
<
BigDecimal
>
forecastSalesList
,
DcBaseSku
turnoverSku
,
LocalDate
recordTime
,
String
bailunSku
)
{
dcAutoSales
,
List
<
BigDecimal
>
forecastSalesList
,
DcBaseSku
turnoverSku
,
LocalDate
recordTime
,
String
bailunSku
,
String
warehouseCode
)
{
/*DcConfigForecastSalesMapper dcConfigForecastSalesMapper = SessionUtil.getSession().getMapper(DcConfigForecastSalesMapper.class);
List<DcConfigForecastSales> configForecastSalesList = dcConfigForecastSalesMapper.selectByExample(DcConfigForecastSalesExample.newAndCreateCriteria().andBailunSkuEqualTo(bailunSku).andWarehouseCodeEqualTo(warehouseCode).example());
DcBasePurchase dcBasePurchase = null;
if(configForecastSalesList != null && configForecastSalesList.size() > 0) {
DcBasePurchaseMapper dcBasePurchaseMapper = SessionUtil.getSession().getMapper(DcBasePurchaseMapper.class);
dcBasePurchase = dcBasePurchaseMapper.selectOneByExample(DcBasePurchaseExample.newAndCreateCriteria().andBailunSkuEqualTo(bailunSku).andWarehouseCodeEqualTo(warehouseCode).example());
}*/
if
(
recordTime
.
minusDays
(
21L
).
isBefore
(
turnoverSku
.
getPushTime
().
toLocalDate
())
&&
!(
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_1
))
&&
!(
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_2
))
&&
!(
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_4
)))
{
if
(
recordTime
.
minusDays
(
21L
).
isBefore
(
turnoverSku
.
getPushTime
().
toLocalDate
())
&&
!(
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_1
))
&&
!(
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_2
))
&&
!(
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_4
)))
{
DcBaseOmsSkuMapper
dcBaseOmsSkuMapper
=
SessionUtil
.
getSession
().
getMapper
(
DcBaseOmsSkuMapper
.
class
);
DcBaseOmsSkuMapper
dcBaseOmsSkuMapper
=
SessionUtil
.
getSession
().
getMapper
(
DcBaseOmsSkuMapper
.
class
);
...
@@ -1007,7 +1013,6 @@ public class AutoTurnoverJob extends PointJob {
...
@@ -1007,7 +1013,6 @@ public class AutoTurnoverJob extends PointJob {
}
}
BigDecimal
avgHistoryThreedaySales
=
BigDecimal
.
valueOf
(
historyThreeSales
.
longValue
()).
divide
(
Constant
.
BIGDECIMAL_THREE
,
3
,
RoundingMode
.
HALF_EVEN
);
BigDecimal
avgHistoryThreedaySales
=
BigDecimal
.
valueOf
(
historyThreeSales
.
longValue
()).
divide
(
Constant
.
BIGDECIMAL_THREE
,
3
,
RoundingMode
.
HALF_EVEN
);
BigDecimal
avgHistorySevendaySales
=
BigDecimal
.
valueOf
(
historySevenSales
.
longValue
()).
divide
(
Constant
.
BIGDECIMAL_SEVEN
,
3
,
RoundingMode
.
HALF_EVEN
);
BigDecimal
avgHistorySevendaySales
=
BigDecimal
.
valueOf
(
historySevenSales
.
longValue
()).
divide
(
Constant
.
BIGDECIMAL_SEVEN
,
3
,
RoundingMode
.
HALF_EVEN
);
if
(
dcBaseOmsSku
!=
null
&&
recordTime
.
minusDays
(
7L
).
isBefore
(
dcBaseOmsSku
.
getCreateTime
().
toLocalDate
()))
{
if
(
dcBaseOmsSku
!=
null
&&
recordTime
.
minusDays
(
7L
).
isBefore
(
dcBaseOmsSku
.
getCreateTime
().
toLocalDate
()))
{
for
(
int
j
=
0
;
j
<
autoForecastDay
;
j
++)
{
for
(
int
j
=
0
;
j
<
autoForecastDay
;
j
++)
{
forecastSalesList
.
set
(
j
,
avgHistoryThreedaySales
);
forecastSalesList
.
set
(
j
,
avgHistoryThreedaySales
);
...
@@ -1032,6 +1037,16 @@ public class AutoTurnoverJob extends PointJob {
...
@@ -1032,6 +1037,16 @@ public class AutoTurnoverJob extends PointJob {
forecastSalesList
.
set
(
j
,
forecastSales
.
compareTo
(
salesUpperLimit
)
==
1
?
salesUpperLimit
:
forecastSales
);
forecastSalesList
.
set
(
j
,
forecastSales
.
compareTo
(
salesUpperLimit
)
==
1
?
salesUpperLimit
:
forecastSales
);
}
}
}
}
/*if(dcBasePurchase == null) {
for(DcConfigForecastSales dcConfigForecastSales : configForecastSalesList) {
LocalDate localDate = LocalDate.now();
for(int j = 0; j < autoForecastDay; j++) {
Long i = dcConfigForecastSales.getStartDate().toLocalDate().toEpochDay() - localDate.toEpochDay();
}
}
}*/
}
}
/**
/**
...
@@ -1144,7 +1159,7 @@ public class AutoTurnoverJob extends PointJob {
...
@@ -1144,7 +1159,7 @@ public class AutoTurnoverJob extends PointJob {
}
}
private
BigDecimal
calculateSafeInventory
(
DcBaseSku
turnoverSku
,
String
bailunSku
,
String
warehouseCode
,
Integer
private
BigDecimal
calculateSafeInventory
(
DcBaseSku
turnoverSku
,
String
bailunSku
,
String
warehouseCode
,
Integer
bailunFirstLevelCatagoryId
,
DcAutoSales
dcAutoSales
,
String
forecastSalesListJson
,
DcAutoTurnover
dcAutoTurnover
)
{
bailunFirstLevelCatagoryId
,
DcAutoSales
dcAutoSales
,
String
forecastSalesListJson
,
DcAutoTurnover
dcAutoTurnover
,
Map
<
String
,
BigDecimal
>
saveDaysMap
)
{
/*
/*
* 先判断是否JIT 仓库是广州01 warehouse_code 且是那三个销售员 turnoversku
* 先判断是否JIT 仓库是广州01 warehouse_code 且是那三个销售员 turnoversku
*
*
...
@@ -1157,6 +1172,7 @@ public class AutoTurnoverJob extends PointJob {
...
@@ -1157,6 +1172,7 @@ public class AutoTurnoverJob extends PointJob {
BigDecimal
weightingAvgSales
=
caculateWeightingAvgSales
(
BigDecimal
.
valueOf
(
0.3
),
BigDecimal
.
valueOf
(
0.3
),
BigDecimal
.
valueOf
(
0.4
),
historyThirtySalesList
);
BigDecimal
weightingAvgSales
=
caculateWeightingAvgSales
(
BigDecimal
.
valueOf
(
0.3
),
BigDecimal
.
valueOf
(
0.3
),
BigDecimal
.
valueOf
(
0.4
),
historyThirtySalesList
);
BigDecimal
saveDays
=
getSaveDays
(
dcAutoSales
,
dcAutoTurnover
,
bailunSku
,
"weightingAvgSales"
,
dcAutoStockUpRange
);
BigDecimal
saveDays
=
getSaveDays
(
dcAutoSales
,
dcAutoTurnover
,
bailunSku
,
"weightingAvgSales"
,
dcAutoStockUpRange
);
saveDaysMap
.
put
(
"saveDays"
,
saveDays
);
dcAutoTurnover
.
setDailyWeightedSales
(
weightingAvgSales
);
dcAutoTurnover
.
setDailyWeightedSales
(
weightingAvgSales
);
weightingAvgSales
=
weightingAvgSales
.
multiply
(
saveDays
);
weightingAvgSales
=
weightingAvgSales
.
multiply
(
saveDays
);
return
weightingAvgSales
;
return
weightingAvgSales
;
...
@@ -1414,6 +1430,7 @@ public class AutoTurnoverJob extends PointJob {
...
@@ -1414,6 +1430,7 @@ public class AutoTurnoverJob extends PointJob {
if
(
j
==
turnoverDays
)
{
//周转期内总销量
if
(
j
==
turnoverDays
)
{
//周转期内总销量
if
(
warehouseCode
.
equals
(
Constant
.
WAREHOUSE_JIT
)
&&
(
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_1
)
||
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_2
)))
{
if
(
warehouseCode
.
equals
(
Constant
.
WAREHOUSE_JIT
)
&&
(
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_1
)
||
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_2
)))
{
totalSales
=
dcAutoTurnover
.
getDailyWeightedSales
().
multiply
(
BigDecimal
.
valueOf
(
turnoverDays
));
totalSales
=
dcAutoTurnover
.
getDailyWeightedSales
().
multiply
(
BigDecimal
.
valueOf
(
turnoverDays
));
totalSales
=
dcAutoTurnover
.
getDailyWeightedSales
().
multiply
(
BigDecimal
.
valueOf
(
turnoverDays
));
dcAutoTurnover
.
setTurnoverSales
(
totalSales
);
dcAutoTurnover
.
setTurnoverSales
(
totalSales
);
}
else
{
}
else
{
dcAutoTurnover
.
setTurnoverSales
(
totalSales
);
dcAutoTurnover
.
setTurnoverSales
(
totalSales
);
...
@@ -1460,7 +1477,7 @@ public class AutoTurnoverJob extends PointJob {
...
@@ -1460,7 +1477,7 @@ public class AutoTurnoverJob extends PointJob {
recordTime
,
DcAutoTurnover
dcAutoTurnover
,
Integer
turnoverDays
,
Integer
recordTime
,
DcAutoTurnover
dcAutoTurnover
,
Integer
turnoverDays
,
Integer
autoForecastDay
,
List
<
BigDecimal
>
forecastInventoryList
,
List
<
Integer
>
forecastInboundList
,
List
<
BigDecimal
>
forecastSalesList
,
List
<
BigDecimal
>
forecastShortSupplyList
,
List
<
BigDecimal
>
forecastPurchaseAdvisedList
,
List
<
BigDecimal
>
moqPurchaseAdvisedList
,
Integer
autoForecastDay
,
List
<
BigDecimal
>
forecastInventoryList
,
List
<
Integer
>
forecastInboundList
,
List
<
BigDecimal
>
forecastSalesList
,
List
<
BigDecimal
>
forecastShortSupplyList
,
List
<
BigDecimal
>
forecastPurchaseAdvisedList
,
List
<
BigDecimal
>
moqPurchaseAdvisedList
,
Integer
realInventory
,
BigDecimal
totalSafeInventory
,
Integer
outStock
,
Integer
inventoryAvailableDays
,
BigDecimal
realInventory
,
BigDecimal
totalSafeInventory
,
Integer
outStock
,
Integer
inventoryAvailableDays
,
BigDecimal
totalSales
,
BigDecimal
totalInbound
,
BigDecimal
moqDecimal
)
{
totalSales
,
BigDecimal
totalInbound
,
BigDecimal
moqDecimal
,
Map
<
String
,
BigDecimal
>
saveDaysMap
)
{
BigDecimal
inboundDecimal
;
BigDecimal
inboundDecimal
;
BigDecimal
forecastInventory
;
BigDecimal
forecastInventory
;
BigDecimal
shortSupply
;
BigDecimal
shortSupply
;
...
@@ -1517,8 +1534,12 @@ public class AutoTurnoverJob extends PointJob {
...
@@ -1517,8 +1534,12 @@ public class AutoTurnoverJob extends PointJob {
if
(
j
>=
turnoverDays
)
{
if
(
j
>=
turnoverDays
)
{
if
(
j
==
turnoverDays
)
{
if
(
j
==
turnoverDays
)
{
if
(
warehouseCode
.
equals
(
Constant
.
WAREHOUSE_JIT
)
&&
(
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_1
)
||
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_2
)))
{
if
(
warehouseCode
.
equals
(
Constant
.
WAREHOUSE_JIT
)
&&
(
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_1
)
||
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_2
)))
{
BigDecimal
saveDays
=
saveDaysMap
.
get
(
"saveDays"
);
totalSales
=
dcAutoTurnover
.
getDailyWeightedSales
().
multiply
(
BigDecimal
.
valueOf
(
turnoverDays
));
totalSales
=
dcAutoTurnover
.
getDailyWeightedSales
().
multiply
(
BigDecimal
.
valueOf
(
turnoverDays
));
dcAutoTurnover
.
setTurnoverSales
(
totalSales
);
dcAutoTurnover
.
setTurnoverSales
(
totalSales
);
if
(
saveDays
!=
null
)
{
totalSales
=
dcAutoTurnover
.
getDailyWeightedSales
().
multiply
(
saveDays
);
}
}
else
{
}
else
{
dcAutoTurnover
.
setTurnoverSales
(
totalSales
);
dcAutoTurnover
.
setTurnoverSales
(
totalSales
);
}
}
...
...
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