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
43afdd12
Commit
43afdd12
authored
Apr 09, 2019
by
wutong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
自动周转对于JIT的不做冗余和缺货预测 实际冗余和实际缺货也不用提醒
parent
9fa2ce23
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
32 additions
and
53 deletions
+32
-53
Constant.java
...src/main/java/com/bailuntec/domain/constant/Constant.java
+5
-0
AutoTurnoverJob.java
...over/src/main/java/com/bailuntec/job/AutoTurnoverJob.java
+20
-53
AutoTurnoverTest.java
...ow/show-auto-turnover/src/test/java/AutoTurnoverTest.java
+7
-0
No files found.
data-show/show-auto-turnover/src/main/java/com/bailuntec/domain/constant/Constant.java
View file @
43afdd12
...
...
@@ -11,6 +11,11 @@ public interface Constant {
String
NAN_STRING
=
"N/A"
;
String
PURCHASE_SIGN
=
"p_"
;
String
TRANSFER_SIGN
=
"t_"
;
//自动周转JIT的 可以不做 冗余 和 缺货预测 实际冗余和实际缺货也不用提醒
//这三个采购都是美甲和精油的, 都是JIT的
String
BUYER_JIT_1
=
"张莹霞"
;
String
BUYER_JIT_2
=
"张莹霞1"
;
String
BUYER_JIT_3
=
"冯兆欣"
;
BigDecimal
BIGDECIMAL_FOURTEEN
=
BigDecimal
.
valueOf
(
14
);
BigDecimal
BIGDECIMAL_SEVEN
=
BigDecimal
.
valueOf
(
7
);
BigDecimal
BIGDECIMAL_THREE
=
BigDecimal
.
valueOf
(
3
);
...
...
data-show/show-auto-turnover/src/main/java/com/bailuntec/job/AutoTurnoverJob.java
View file @
43afdd12
...
...
@@ -155,7 +155,7 @@ public class AutoTurnoverJob extends PointJob {
* 周转天数计算公式:
* 供应链长度 = 周转天数 = 供应商交期 + 入库时间(2天质检入库时间) + 调拨头程 + 调拨打包 + 海外仓入库
*/
TurnoverSkuDTO
turnoverSku
=
null
;
DcBaseSku
turnoverSku
=
null
;
DcBaseWarehouse
dcBaseWarehouse
=
null
;
//从采购平均指标,仓库平均指标拿周转天数, 拿不到的或者数值异常的, 才按上面的来
DcAveragePurchase
dcAveragePurchase
=
null
;
...
...
@@ -164,7 +164,7 @@ public class AutoTurnoverJob extends PointJob {
Integer
paymentBeforeDelivery
=
null
;
try
{
DcBaseSkuMapper
baseSkuMapper
=
SessionUtil
.
getSession
().
getMapper
(
DcBaseSkuMapper
.
class
);
turnoverSku
=
baseSkuMapper
.
getTurnoverSku
(
bailunSku
);
turnoverSku
=
baseSkuMapper
.
selectOneByExample
(
DcBaseSkuExample
.
newAndCreateCriteria
().
andBailunSkuEqualTo
(
bailunSku
).
example
()
);
DcBaseWarehouseMapper
baseWarehouseMapper
=
SessionUtil
.
getSession
().
getMapper
(
DcBaseWarehouseMapper
.
class
);
dcBaseWarehouse
=
baseWarehouseMapper
.
selectOneByExample
(
DcBaseWarehouseExample
.
newAndCreateCriteria
().
andWarehouseCodeEqualTo
(
warehouseCode
).
example
());
DcAveragePurchaseMapper
dcAveragePurchaseMapper
=
SessionUtil
.
getSession
().
getMapper
(
DcAveragePurchaseMapper
.
class
);
...
...
@@ -180,9 +180,6 @@ public class AutoTurnoverJob extends PointJob {
}
finally
{
SessionUtil
.
closeSession
();
}
if
(
turnoverSku
==
null
)
{
turnoverSku
=
new
TurnoverSkuDTO
(
0
);
}
if
(
dcBaseWarehouse
!=
null
)
{
dcAutoTurnover
.
setWarehouseName
(
dcBaseWarehouse
.
getWarehouseName
());
if
(
dcBaseWarehouse
.
getSystemFlag
().
toUpperCase
().
equals
(
PlatformType
.
FBA
.
value
()))
{
...
...
@@ -373,8 +370,10 @@ public class AutoTurnoverJob extends PointJob {
inventoryAvailableDays
=
commonAdvise
(
hasMonitorFluctuation
,
forecastFluctuationList
,
recordTime
,
dcAutoTurnover
,
turnoverDays
,
autoForecastDay
,
forecastInventoryList
,
forecastInboundList
,
forecastSalesList
,
forecastShortSupplyList
,
forecastPurchaseAdvisedList
,
moqPurchaseAdvisedList
,
realInventory
,
totalSafeInventory
,
outStock
,
inventoryAvailableDays
,
totalSales
,
totalInbound
,
moqDecimal
);
}
//自动下单管理的冗余-缺货等异常提醒
unusualFluctuation
(
dcAutoConfigSkuWarehouse
,
bailunSku
,
warehouseCode
,
dcAutoTurnover
,
avgHistoryThreedaySales
,
forecastFluctuationList
);
/*
* 自动下单管理的冗余-缺货等异常提醒
*/
unusualFluctuation
(
dcAutoConfigSkuWarehouse
,
turnoverSku
,
warehouseCode
,
dcAutoTurnover
,
avgHistoryThreedaySales
,
forecastFluctuationList
);
//拿一下2倍周转期内的入库总数
Integer
quantityInbound
=
0
;
...
...
@@ -424,8 +423,8 @@ public class AutoTurnoverJob extends PointJob {
if
(
i
<
turnoverDays
)
{
avgForecastTurnoverDaySales
=
avgForecastTurnoverDaySales
.
add
(
forecastSalesList
.
get
(
i
));
}
//如果初始采购建议 <= 0, 那就也不用备货.
if
(
i
<
stockUpDays
&&
forecastPurchaseAdvisedList
.
get
(
0
).
compareTo
(
BigDecimal
.
ZERO
)
==
1
)
{
//如果初始采购建议 <= 0, 那就也不用备货.
, stockUpDays - 1的原因是我们已经算了一天的预测销量了.
if
(
i
<
stockUpDays
-
1
&&
forecastPurchaseAdvisedList
.
get
(
0
).
compareTo
(
BigDecimal
.
ZERO
)
==
1
)
{
stockUpSales
=
stockUpSales
.
add
(
forecastSalesList
.
get
(
i
+
1
+
turnoverDays
));
}
}
...
...
@@ -451,7 +450,7 @@ public class AutoTurnoverJob extends PointJob {
dcAutoTurnover
.
setForecastFourteendaySales
(
avgForecastFourteendaySales
.
compareTo
(
BigDecimal
.
ZERO
)
==
1
?
avgForecastFourteendaySales
.
divide
(
Constant
.
BIGDECIMAL_FOURTEEN
,
3
,
RoundingMode
.
HALF_EVEN
)
:
BigDecimal
.
ZERO
);
dcAutoTurnover
.
setQuantityInbound
(
quantityInbound
);
dcAutoTurnover
.
setInventoryAvailableDays
(
inventoryAvailableDays
);
dcAutoTurnover
.
setSkuTitle
(
turnoverSku
.
getSkuTitle
());
dcAutoTurnover
.
setSkuTitle
(
turnoverSku
.
getSkuTitle
Cn
());
dcAutoTurnover
.
setPromotions
(
promotionsBuilder
.
toString
());
dcAutoTurnover
.
setQuantityInitAdvise
(
forecastPurchaseAdvisedList
.
get
(
0
).
add
(
stockUpSales
));
//如果初始建议数 + 备货数 > moq建议数, 那么moq建议数 + 备货数, 否则, 还是取moq建议数
...
...
@@ -486,7 +485,7 @@ public class AutoTurnoverJob extends PointJob {
DcAutoConfigStockUpDaysMapper
mapper
=
SessionUtil
.
getSession
().
getMapper
(
DcAutoConfigStockUpDaysMapper
.
class
);
DcAutoConfigStockUpDays
dcAutoConfigStockUpDays
=
mapper
.
selectOneByExample
(
DcAutoConfigStockUpDaysExample
.
newAndCreateCriteria
().
andWarehouseCodeEqualTo
(
warehouseCode
).
example
());
if
(
dcAutoConfigStockUpDays
!=
null
&&
dcAutoConfigStockUpDays
.
getStatus
()
==
1
)
{
return
dcAutoConfigStockUpDays
.
getStockUpDays
()
-
1
;
//备货天数减去1, 因为我们已经考虑到了一天的预计销量.
return
dcAutoConfigStockUpDays
.
getStockUpDays
();
//备货天数减去1, 因为我们已经考虑到了一天的预计销量.
}
return
0
;
}
...
...
@@ -537,25 +536,26 @@ public class AutoTurnoverJob extends PointJob {
* 实际缺货的,预计缺货
* 实际冗余的,预计冗余
*
* @param bailunSku
* @param warehouseCode
* @param dcAutoTurnover
* @param forecastFluctuationList
*/
private
void
unusualFluctuation
(
DcAutoConfigSkuWarehouse
dcAutoConfigSkuWarehouse
,
String
bailun
Sku
,
String
warehouseCode
,
DcAutoTurnover
dcAutoTurnover
,
BigDecimal
avgHistoryThreedaySales
,
List
<
DcAutoForecastFluctuation
>
forecastFluctuationList
)
{
private
void
unusualFluctuation
(
DcAutoConfigSkuWarehouse
dcAutoConfigSkuWarehouse
,
DcBaseSku
turnover
Sku
,
String
warehouseCode
,
DcAutoTurnover
dcAutoTurnover
,
BigDecimal
avgHistoryThreedaySales
,
List
<
DcAutoForecastFluctuation
>
forecastFluctuationList
)
{
//status` '监控状态, 默认0监控, 停止监控1',
try
{
DcAutoForecastFluctuationMapper
mapper
=
SessionUtil
.
getSession
().
getMapper
(
DcAutoForecastFluctuationMapper
.
class
);
//JIT的 可以不做 冗余 和 缺货预测 实际冗余和实际缺货也不用提醒
if
(
!
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_1
)
&&
!
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_2
)
&&
!
turnoverSku
.
getBuyerName
().
equals
(
Constant
.
BUYER_JIT_3
))
{
if
(
dcAutoConfigSkuWarehouse
==
null
||
dcAutoConfigSkuWarehouse
.
getStatus
().
equals
(
0
))
{
if
(
forecastFluctuationList
!=
null
&&
forecastFluctuationList
.
size
()
>
0
)
{
//拿最早的时间 + 最晚的时间, SKU-仓库维度只放一条
DcAutoForecastFluctuation
dcAutoForecastFluctuation
=
forecastFluctuationList
.
get
(
0
);
dcAutoForecastFluctuation
.
setEndTime
(
forecastFluctuationList
.
get
(
forecastFluctuationList
.
size
()
-
1
).
getEndTime
());
dcAutoForecastFluctuation
.
setBailunSku
(
bailunSku
);
dcAutoForecastFluctuation
.
setBailunSku
(
turnoverSku
.
getBailunSku
()
);
dcAutoForecastFluctuation
.
setWarehouseCode
(
warehouseCode
);
dcAutoForecastFluctuation
.
setWarehouseName
(
dcAutoTurnover
.
getWarehouseName
());
dcAutoForecastFluctuation
.
setAvgSalesThree
(
avgHistoryThreedaySales
);
DcAutoForecastFluctuation
dcAutoForecastFluctuationSelected
=
mapper
.
selectOneByExample
(
DcAutoForecastFluctuationExample
.
newAndCreateCriteria
().
andBailunSkuEqualTo
(
bailunSku
).
andWarehouseCodeEqualTo
(
warehouseCode
).
example
());
DcAutoForecastFluctuation
dcAutoForecastFluctuationSelected
=
mapper
.
selectOneByExample
(
DcAutoForecastFluctuationExample
.
newAndCreateCriteria
().
andBailunSkuEqualTo
(
turnoverSku
.
getBailunSku
()
).
andWarehouseCodeEqualTo
(
warehouseCode
).
example
());
if
(
dcAutoForecastFluctuationSelected
!=
null
)
{
dcAutoForecastFluctuation
.
setStartTime
(
dcAutoForecastFluctuationSelected
.
getStartTime
());
mapper
.
updateByExampleSelective
(
dcAutoForecastFluctuation
,
DcAutoForecastFluctuationExample
.
newAndCreateCriteria
().
andBailunSkuEqualTo
(
dcAutoForecastFluctuation
.
getBailunSku
()).
andWarehouseCodeEqualTo
(
dcAutoForecastFluctuation
.
getWarehouseCode
()).
example
());
...
...
@@ -563,8 +563,9 @@ public class AutoTurnoverJob extends PointJob {
mapper
.
insertSelective
(
dcAutoForecastFluctuation
);
}
}
}
else
if
(
dcAutoConfigSkuWarehouse
!=
null
&&
dcAutoConfigSkuWarehouse
.
getStatus
().
equals
(
1
))
{
mapper
.
deleteByExample
(
DcAutoForecastFluctuationExample
.
newAndCreateCriteria
().
andBailunSkuEqualTo
(
bailunSku
).
andWarehouseCodeEqualTo
(
warehouseCode
).
example
());
}
else
if
(
dcAutoConfigSkuWarehouse
!=
null
&&
dcAutoConfigSkuWarehouse
.
getStatus
().
equals
(
1
))
{
mapper
.
deleteByExample
(
DcAutoForecastFluctuationExample
.
newAndCreateCriteria
().
andBailunSkuEqualTo
(
turnoverSku
.
getBailunSku
()).
andWarehouseCodeEqualTo
(
warehouseCode
).
example
());
}
}
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"MYBATIS操作DB存DcAutoForecastFluctuation失败"
,
e
);
...
...
@@ -573,7 +574,7 @@ public class AutoTurnoverJob extends PointJob {
}
}
private
Integer
getTurnoverDelivery
(
TurnoverSkuDTO
turnoverSku
,
DcBaseWarehouse
dcBaseWarehouse
,
DcAutoTurnover
dcAutoTurnover
,
DcAutoConfigDelivery
dcAutoConfigDelivery
,
DcAveragePurchase
dcAveragePurchase
,
DcAverageWarehouse
dcAverageWarehouse
)
{
private
Integer
getTurnoverDelivery
(
DcBaseSku
turnoverSku
,
DcBaseWarehouse
dcBaseWarehouse
,
DcAutoTurnover
dcAutoTurnover
,
DcAutoConfigDelivery
dcAutoConfigDelivery
,
DcAveragePurchase
dcAveragePurchase
,
DcAverageWarehouse
dcAverageWarehouse
)
{
/*
* 供应商交期
* 先取dc_average_purchase,如果平均交期没有
...
...
@@ -624,40 +625,6 @@ public class AutoTurnoverJob extends PointJob {
return
turnoverDays
;
}
/**
* 从TJ系统获取断货数
*
* @param bailunSku
* @param warehouseCode
* @return
* @throws IOException
*/
private
Integer
getOutStock
(
String
bailunSku
,
String
warehouseCode
)
{
HashMap
<
String
,
String
>
map
=
new
HashMap
<>(
2
);
map
.
put
(
"sku"
,
bailunSku
);
map
.
put
(
"warehousecode"
,
warehouseCode
);
MediaType
mediaType
=
MediaType
.
parse
(
"application/json"
);
RequestBody
body
=
RequestBody
.
create
(
mediaType
,
JSONObject
.
toJSONString
(
map
));
Request
request
=
new
Request
.
Builder
()
.
url
(
OkHttpUtil
.
attachHttpGetParams
(
propertiesUtil
.
getPropertyAsString
(
"TJ_OUT_STOCK_URL"
),
map
))
.
post
(
body
)
.
build
();
Response
response
=
null
;
try
{
response
=
client
.
newCall
(
request
).
execute
();
if
(
response
!=
null
&&
response
.
isSuccessful
())
{
return
Integer
.
valueOf
(
response
.
body
().
string
());
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
throw
new
RuntimeException
(
"调用TJ获取缺货数接口失败"
,
e
);
}
finally
{
if
(
response
!=
null
)
{
response
.
close
();
}
}
return
0
;
}
/**
* 获取百伦一级分类Id
...
...
@@ -666,7 +633,7 @@ public class AutoTurnoverJob extends PointJob {
* @return
* @throws Exception
*/
private
Integer
getBailunCatagoryId
(
TurnoverSkuDTO
turnoverSku
)
throws
Exception
{
private
Integer
getBailunCatagoryId
(
DcBaseSku
turnoverSku
)
throws
Exception
{
Integer
bailunFirstLevelCatagoryId
=
null
;
String
parentCategories
=
null
;
if
(
turnoverSku
!=
null
&&
turnoverSku
.
getBailunCategoryId
()
!=
null
)
{
...
...
data-show/show-auto-turnover/src/test/java/AutoTurnoverTest.java
View file @
43afdd12
...
...
@@ -107,5 +107,12 @@ public class AutoTurnoverTest {
AutoTurnoverJobListener
autoTurnoverJobListener
=
new
AutoTurnoverJobListener
();
autoTurnoverJobListener
.
afterJobExecuted
(
null
);
}
@Test
public
void
test55
()
{
LocalDateTime
recordTime
=
LocalDateTime
.
now
();
LocalDateTime
finalEstimatedArrivalTime
=
LocalDateTime
.
now
().
minusDays
(
1
);
int
interval
=
Period
.
between
(
recordTime
.
toLocalDate
(),
finalEstimatedArrivalTime
.
toLocalDate
()).
getDays
();
System
.
out
.
println
(
interval
);
}
}
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