Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 1b95f712
由
zshaohui
编写于
2024-07-31 12:11:26 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
sorting提交
1 个父辈
7587335d
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
619 行增加
和
2 行删除
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/rawstor/controller/TicketController.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/rawstor/controller/TicketSortingController.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/rawstor/util/BoxHandleUtil.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
1b95f71
...
...
@@ -1642,6 +1642,465 @@ public class LiteOrderCache {
}
public
synchronized
String
ticketOutByNoSorting
(
String
orderNo
){
//1.判断工单是否存在
LiteOrder
liteOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
liteOrder
==
null
)
{
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
}
if
(
liteOrder
==
null
)
{
return
"smfcore.order.out.notFound"
;
}
//2.判断工单状态是否正常
if
(
liteOrder
.
isClosed
())
{
return
"smfcore.order.hasClose"
;
}
if
(!
liteOrder
.
isTaskFinished
()
&&
!
liteOrder
.
isNew
())
{
return
"smfcore.order.out.executing"
;
}
List
<
String
>
storageIdList
=
new
ArrayList
<>();
for
(
Storage
storage
:
dataCache
.
getAllStorage
().
values
())
{
storageIdList
.
add
(
storage
.
getId
());
}
//3.设置工单其他信息
liteOrder
.
setStartDate
(
new
Date
());
liteOrder
.
setTaskReelCount
(
0
);
liteOrder
.
setTaskFinishedTime
(-
1
);
liteOrder
.
setFinishedReelCount
(
0
);
liteOrder
.
setStatus
(
LITEORDER_STATUS
.
TAILS
);
//5.开始处理工单详情
List
<
StoragePos
>
needOutPosList
=
new
ArrayList
<>();
//禁用料信息
List
<
String
>
disablePosNameList
=
new
ArrayList
<>();
int
orderTaskReelCount
=
0
;
List
<
String
>
pnList
=
liteOrder
.
getOrderItems
().
stream
().
map
(
LiteOrderItem:
:
getPn
).
collect
(
Collectors
.
toList
());
List
<
StoragePos
>
allStoragePosList
=
storagePosManager
.
findStoragePosByPartNumber
(
pnList
);
for
(
LiteOrderItem
orderItem
:
liteOrder
.
getOrderItems
()){
//6.排除的仓位信息
Collection
excludeIdList
=
excludeOutPosIds
();
//8.设置出库数量和出库盘数(超发和不超发)
int
outReelCount
=
0
;
int
outNumCount
=
0
;
if
(
liteOrder
.
isExcess
())
{
if
(
orderItem
.
getOutNum
()
>=
orderItem
.
getNeedNum
()
&&
orderItem
.
getOutReelCount
()
>=
orderItem
.
getNeedReelCount
())
{
continue
;
}
outNumCount
=
orderItem
.
getOutNum
();
outReelCount
=
orderItem
.
getOutReelCount
();
}
//如果不是超发,则满足其中一个即可
else
{
if
(
orderItem
.
getTotalOutNum
()
>=
orderItem
.
getNeedNum
()
&&
orderItem
.
getTotalOutReelCount
()
>=
orderItem
.
getNeedReelCount
())
{
continue
;
}
outNumCount
=
orderItem
.
getTotalOutNum
();
outReelCount
=
orderItem
.
getTotalOutReelCount
();
}
//9.开始挑料
while
(
outReelCount
<
orderItem
.
getNeedReelCount
()
||
outNumCount
<
orderItem
.
getNeedNum
())
{
//根据查询条件,查找新的库位
boolean
hasOutReel
=
false
;
String
warehouseCode
=
orderItem
.
getWarehouseCode
();
//厂别
String
brand
=
orderItem
.
getBrand
();
//供应商
String
pn
=
orderItem
.
getPn
();
//料号
StoragePos
pos
=
getStoragePosByPartNumberAndBrand
(
allStoragePosList
,
pn
,
excludeIdList
);
if
(
pos
==
null
)
{
log
.
info
(
orderItem
.
getOrderId
()
+
"厂商:"
+
warehouseCode
+
",供应商:"
+
brand
+
",料号:"
+
pn
+
"未找到存在库位,跳过"
);
break
;
}
Barcode
barcode
=
pos
.
getBarcode
();
log
.
info
(
orderItem
.
getId
()
+
"厂商:"
+
warehouseCode
+
",供应商:"
+
brand
+
",料号:"
+
pn
+
"找到的库位是:"
+
pos
.
getPosName
()+
",箱子号为:"
+
barcode
.
getBarcode
());
List
<
Barcode
>
subCodeList
=
barcode
.
getSubCodeList
();
//进行排序
subCodeList
=
subCodeList
.
stream
().
sorted
(
Comparator
.
comparing
(
Barcode:
:
getCreateDate
)).
collect
(
Collectors
.
toList
());
subCodeList
=
subCodeList
.
stream
().
sorted
(
Comparator
.
comparing
(
Barcode:
:
getAmount
)).
collect
(
Collectors
.
toList
());
//禁用的物料信息
List
<
String
>
batchCheckReelList
=
LuxsanApi
.
batchCheckReel
(
subCodeList
);
if
(
batchCheckReelList
!=
null
&&
!
batchCheckReelList
.
isEmpty
()){
for
(
Barcode
subCode
:
subCodeList
){
if
(
disablePosNameList
.
contains
(
subCode
.
getPosName
()))
{
continue
;
}
if
(
batchCheckReelList
.
contains
(
subCode
.
getBarcode
())){
log
.
info
(
subCode
.
getBarcode
()+
"为禁用料,禁用库位为:"
+
subCode
.
getPosName
());
disablePosNameList
.
add
(
subCode
.
getPosName
());
}
}
}
List
<
String
>
subCodeIds
=
new
ArrayList
<>();
for
(
Barcode
subCode
:
subCodeList
)
{
if
(
disablePosNameList
!=
null
&&
!
disablePosNameList
.
isEmpty
()){
if
(
disablePosNameList
.
contains
(
subCode
.
getPosName
()))
{
continue
;
}
}
if
(
outReelCount
>=
orderItem
.
getNeedReelCount
()
&&
outNumCount
>=
orderItem
.
getNeedNum
())
{
break
;
}
if
(
subCode
.
isOut
())
{
continue
;
}
//判断厂别
if
(
StringUtils
.
isNotBlank
(
warehouseCode
))
{
if
(!
warehouseCode
.
equals
(
subCode
.
getWarehouseCode
()))
{
continue
;
}
}
//判断供应商
if
(
StringUtils
.
isNotBlank
(
brand
))
{
if
(!
brand
.
equals
(
subCode
.
getProvider
()))
{
continue
;
}
}
//判断料号
if
(
StringUtils
.
isNotBlank
(
pn
))
{
if
(!
pn
.
equals
(
subCode
.
getPartNumber
()))
{
continue
;
}
}
subCode
.
setOut
(
true
);
subCode
.
setOrderItemId
(
orderItem
.
getId
());
barcode
.
UpdateSubCode
(
subCode
);
subCodeIds
.
add
(
subCode
.
getId
());
orderTaskReelCount
++;
hasOutReel
=
true
;
//判断是否超发,如果超发,先判断是否满足数量.再判断是否满足卷数
if
(
liteOrder
.
isExcess
())
{
if
(
outNumCount
>=
orderItem
.
getNeedNum
())
{
outReelCount
++;
}
else
{
outNumCount
=
outNumCount
+
subCode
.
getAmount
();
}
}
//如果不是超发订单,
else
{
outReelCount
++;
outNumCount
=
outNumCount
+
subCode
.
getAmount
();
}
}
if
(
subCodeIds
!=
null
&&
!
subCodeIds
.
isEmpty
())
{
Query
query
=
new
Query
(
Criteria
.
where
(
"id"
).
in
(
subCodeIds
));
Update
update
=
new
Update
().
set
(
"isOut"
,
true
).
set
(
"orderItemId"
,
orderItem
.
getId
());
barcodeManager
.
updateBarcode
(
query
,
update
);
}
barcodeManager
.
save
(
barcode
);
log
.
info
(
"保存barcode时间结束"
);
excludeIdList
.
add
(
pos
.
getId
());
if
(
hasOutReel
)
{
needOutPosList
.
add
(
pos
);
pos
.
setBarcode
(
barcode
);
storagePosManager
.
save
(
pos
);
}
}
}
if
(
needOutPosList
!=
null
&&
!
needOutPosList
.
isEmpty
())
{
log
.
info
(
"开始生成料箱出库任务"
);
for
(
StoragePos
pos
:
needOutPosList
)
{
Barcode
barcode
=
pos
.
getBarcode
();
log
.
info
(
"barcode:"
+
barcode
.
getBarcode
()+
",状态为:"
+
barcode
.
getStatus
());
if
(
barcode
.
getStatus
()
==
BARCODE_STATUS
.
IN_STORE
)
{
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
log
.
info
(
pos
.
getPosName
()
+
"出库,料箱号为:"
+
barcode
.
getBarcode
());
DataLog
task
=
new
DataLog
(
storage
,
barcode
,
pos
);
task
.
setSourceId
(
liteOrder
.
getId
());
task
.
setSourceName
(
liteOrder
.
getOrderNo
());
task
.
setSubSourceId
(
barcode
.
getLockName
());
task
.
setSubSourceInfo
(
barcode
.
getLockName
());
task
.
setType
(
OP
.
CHECKOUT
);
task
.
setCreator
(
SecurityUtils
.
getCurrentUsername
());
task
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
//判断是去人工出料口,还是机器
if
(
LiteorderCheckType
.
TICKET_CHECKOUT
==
liteOrder
.
getCheckType
()){
task
.
setLoc
(
TaskCurrentLoc
.
Manual_FeedingInlet
);
}
Map
<
String
,
Long
>
outMap
=
new
HashMap
<>();
List
<
Barcode
>
subCodeList
=
barcode
.
getSubCodeList
();
if
(
subCodeList
!=
null
&&
!
subCodeList
.
isEmpty
())
{
outMap
=
subCodeList
.
stream
().
filter
(
Barcode:
:
isOut
).
collect
(
Collectors
.
groupingBy
(
Barcode:
:
getPosName
,
Collectors
.
counting
()));
}
task
.
updateExtraDataMap
(
"outCount"
,
outMap
);
try
{
taskService
.
addTaskToExecute
(
task
);
}
catch
(
Exception
e
)
{
e
.
getMessage
();
}
}
}
}
liteOrder
.
setTaskReelCount
(
orderTaskReelCount
);
liteOrder
.
setTotalTaskReelCount
(
liteOrder
.
getTotalTaskReelCount
()
+
orderTaskReelCount
);
liteOrder
.
setEndDate
(
new
Date
());
log
.
info
(
"工单["
+
orderNo
+
"]任务分配结束,任务数["
+
orderTaskReelCount
+
"]"
);
smfApi
.
onOrderStatusChange
(
liteOrder
);
if
(
orderTaskReelCount
<=
0
)
{
finishedOrderTasks
(
liteOrder
);
}
liteOrderManager
.
save
(
liteOrder
);
liteOrderMap
.
put
(
liteOrder
.
getOrderNo
(),
liteOrder
);
if
(
orderTaskReelCount
<=
0
)
{
return
"smfcore.order.out.noTask"
;
}
return
""
;
}
public
synchronized
String
ticketOutBySorting
(
String
orderNo
)
{
//1.判断工单是否存在
LiteOrder
liteOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
liteOrder
==
null
)
{
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
}
if
(
liteOrder
==
null
)
{
return
"smfcore.order.out.notFound"
;
}
//2.判断工单状态是否正常
if
(
liteOrder
.
isClosed
())
{
return
"smfcore.order.hasClose"
;
}
if
(!
liteOrder
.
isTaskFinished
()
&&
!
liteOrder
.
isNew
())
{
return
"smfcore.order.out.executing"
;
}
List
<
String
>
storageIdList
=
new
ArrayList
<>();
for
(
Storage
storage
:
dataCache
.
getAllStorage
().
values
())
{
storageIdList
.
add
(
storage
.
getId
());
}
//3.设置工单其他信息
liteOrder
.
setStartDate
(
new
Date
());
liteOrder
.
setTaskReelCount
(
0
);
liteOrder
.
setTaskFinishedTime
(-
1
);
liteOrder
.
setFinishedReelCount
(
0
);
liteOrder
.
setStatus
(
LITEORDER_STATUS
.
TAILS
);
//5.开始处理工单详情
List
<
StoragePos
>
needOutPosList
=
new
ArrayList
<>();
//禁用料信息
List
<
String
>
disableReelList
=
new
ArrayList
<>();
int
orderTaskReelCount
=
0
;
List
<
String
>
pnList
=
liteOrder
.
getOrderItems
().
stream
().
map
(
LiteOrderItem:
:
getPn
).
collect
(
Collectors
.
toList
());
List
<
StoragePos
>
allStoragePosList
=
storagePosManager
.
findStoragePosByPartNumber
(
pnList
);
for
(
LiteOrderItem
orderItem
:
liteOrder
.
getOrderItems
())
{
//6.排除的仓位信息
Collection
excludeIdList
=
excludeOutPosIds
();
//8.设置出库数量和出库盘数(超发和不超发)
int
outReelCount
=
0
;
int
outNumCount
=
0
;
if
(
liteOrder
.
isExcess
())
{
if
(
orderItem
.
getOutNum
()
>=
orderItem
.
getNeedNum
()
&&
orderItem
.
getOutReelCount
()
>=
orderItem
.
getNeedReelCount
())
{
continue
;
}
outNumCount
=
orderItem
.
getOutNum
();
outReelCount
=
orderItem
.
getOutReelCount
();
}
//如果不是超发,则满足其中一个即可
else
{
if
(
orderItem
.
getTotalOutNum
()
>=
orderItem
.
getNeedNum
()
&&
orderItem
.
getTotalOutReelCount
()
>=
orderItem
.
getNeedReelCount
())
{
continue
;
}
outNumCount
=
orderItem
.
getTotalOutNum
();
outReelCount
=
orderItem
.
getTotalOutReelCount
();
}
//9.开始挑料
while
(
outReelCount
<
orderItem
.
getNeedReelCount
()
||
outNumCount
<
orderItem
.
getNeedNum
())
{
//根据查询条件,查找新的库位
boolean
hasOutReel
=
false
;
String
warehouseCode
=
orderItem
.
getWarehouseCode
();
//厂别
String
brand
=
orderItem
.
getBrand
();
//供应商
String
pn
=
orderItem
.
getPn
();
//料号
StoragePos
pos
=
getStoragePosByPartNumberAndBrand
(
allStoragePosList
,
pn
,
excludeIdList
);
if
(
pos
==
null
)
{
log
.
info
(
orderItem
.
getOrderId
()
+
"厂商:"
+
warehouseCode
+
",供应商:"
+
brand
+
",料号:"
+
pn
+
"未找到存在库位,跳过"
);
break
;
}
Barcode
barcode
=
pos
.
getBarcode
();
log
.
info
(
orderItem
.
getId
()
+
"厂商:"
+
warehouseCode
+
",供应商:"
+
brand
+
",料号:"
+
pn
+
"找到的库位是:"
+
pos
.
getPosName
()
+
",箱子号为:"
+
barcode
.
getBarcode
());
List
<
Barcode
>
subCodeList
=
barcode
.
getSubCodeList
();
//进行排序
subCodeList
=
subCodeList
.
stream
().
sorted
(
Comparator
.
comparing
(
Barcode:
:
getCreateDate
)).
collect
(
Collectors
.
toList
());
subCodeList
=
subCodeList
.
stream
().
sorted
(
Comparator
.
comparing
(
Barcode:
:
getAmount
)).
collect
(
Collectors
.
toList
());
//禁用的物料信息
List
<
String
>
batchCheckReelList
=
LuxsanApi
.
batchCheckReel
(
subCodeList
);
if
(
batchCheckReelList
!=
null
&&
!
batchCheckReelList
.
isEmpty
())
{
for
(
String
reelId
:
batchCheckReelList
)
{
if
(!
disableReelList
.
contains
(
reelId
))
{
disableReelList
.
add
(
reelId
);
}
}
}
List
<
String
>
subCodeIds
=
new
ArrayList
<>();
for
(
Barcode
subCode
:
subCodeList
)
{
if
(
disableReelList
!=
null
&&
!
disableReelList
.
isEmpty
())
{
if
(!
disableReelList
.
contains
(
subCode
.
getBarcode
())){
continue
;
}
}
if
(
outReelCount
>=
orderItem
.
getNeedReelCount
()
&&
outNumCount
>=
orderItem
.
getNeedNum
())
{
break
;
}
if
(
subCode
.
isOut
())
{
continue
;
}
//判断厂别
if
(
StringUtils
.
isNotBlank
(
warehouseCode
))
{
if
(!
warehouseCode
.
equals
(
subCode
.
getWarehouseCode
()))
{
continue
;
}
}
//判断供应商
if
(
StringUtils
.
isNotBlank
(
brand
))
{
if
(!
brand
.
equals
(
subCode
.
getProvider
()))
{
continue
;
}
}
//判断料号
if
(
StringUtils
.
isNotBlank
(
pn
))
{
if
(!
pn
.
equals
(
subCode
.
getPartNumber
()))
{
continue
;
}
}
subCode
.
setOut
(
true
);
subCode
.
setOrderItemId
(
orderItem
.
getId
());
barcode
.
UpdateSubCode
(
subCode
);
subCodeIds
.
add
(
subCode
.
getId
());
orderTaskReelCount
++;
hasOutReel
=
true
;
//判断是否超发,如果超发,先判断是否满足数量.再判断是否满足卷数
if
(
liteOrder
.
isExcess
())
{
if
(
outNumCount
>=
orderItem
.
getNeedNum
())
{
outReelCount
++;
}
else
{
outNumCount
=
outNumCount
+
subCode
.
getAmount
();
}
}
//如果不是超发订单,
else
{
outReelCount
++;
outNumCount
=
outNumCount
+
subCode
.
getAmount
();
}
}
if
(
subCodeIds
!=
null
&&
!
subCodeIds
.
isEmpty
())
{
Query
query
=
new
Query
(
Criteria
.
where
(
"id"
).
in
(
subCodeIds
));
Update
update
=
new
Update
().
set
(
"isOut"
,
true
).
set
(
"orderItemId"
,
orderItem
.
getId
());
barcodeManager
.
updateBarcode
(
query
,
update
);
}
barcodeManager
.
save
(
barcode
);
log
.
info
(
"保存barcode时间结束"
);
excludeIdList
.
add
(
pos
.
getId
());
if
(
hasOutReel
)
{
needOutPosList
.
add
(
pos
);
pos
.
setBarcode
(
barcode
);
storagePosManager
.
save
(
pos
);
}
}
}
if
(
needOutPosList
!=
null
&&
!
needOutPosList
.
isEmpty
())
{
log
.
info
(
"开始生成料箱出库任务"
);
for
(
StoragePos
pos
:
needOutPosList
)
{
Barcode
barcode
=
pos
.
getBarcode
();
log
.
info
(
"barcode:"
+
barcode
.
getBarcode
()
+
",状态为:"
+
barcode
.
getStatus
());
if
(
barcode
.
getStatus
()
==
BARCODE_STATUS
.
IN_STORE
)
{
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
log
.
info
(
pos
.
getPosName
()
+
"出库,料箱号为:"
+
barcode
.
getBarcode
());
DataLog
task
=
new
DataLog
(
storage
,
barcode
,
pos
);
task
.
setSourceId
(
liteOrder
.
getId
());
task
.
setSourceName
(
liteOrder
.
getOrderNo
());
task
.
setSubSourceId
(
barcode
.
getLockName
());
task
.
setSubSourceInfo
(
barcode
.
getLockName
());
task
.
setType
(
OP
.
CHECKOUT
);
task
.
setCreator
(
SecurityUtils
.
getCurrentUsername
());
task
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
//判断是去人工出料口,还是机器
if
(
LiteorderCheckType
.
TICKET_CHECKOUT
==
liteOrder
.
getCheckType
())
{
task
.
setLoc
(
TaskCurrentLoc
.
Manual_FeedingInlet
);
}
Map
<
String
,
Long
>
outMap
=
new
HashMap
<>();
List
<
Barcode
>
subCodeList
=
barcode
.
getSubCodeList
();
if
(
subCodeList
!=
null
&&
!
subCodeList
.
isEmpty
())
{
outMap
=
subCodeList
.
stream
().
filter
(
Barcode:
:
isOut
).
collect
(
Collectors
.
groupingBy
(
Barcode:
:
getPosName
,
Collectors
.
counting
()));
}
task
.
updateExtraDataMap
(
"outCount"
,
outMap
);
try
{
taskService
.
addTaskToExecute
(
task
);
}
catch
(
Exception
e
)
{
e
.
getMessage
();
}
}
}
}
liteOrder
.
setTaskReelCount
(
orderTaskReelCount
);
liteOrder
.
setTotalTaskReelCount
(
liteOrder
.
getTotalTaskReelCount
()
+
orderTaskReelCount
);
liteOrder
.
setEndDate
(
new
Date
());
log
.
info
(
"工单["
+
orderNo
+
"]任务分配结束,任务数["
+
orderTaskReelCount
+
"]"
);
smfApi
.
onOrderStatusChange
(
liteOrder
);
if
(
orderTaskReelCount
<=
0
)
{
finishedOrderTasks
(
liteOrder
);
}
liteOrderManager
.
save
(
liteOrder
);
liteOrderMap
.
put
(
liteOrder
.
getOrderNo
(),
liteOrder
);
if
(
orderTaskReelCount
<=
0
)
{
return
"smfcore.order.out.noTask"
;
}
return
""
;
}
private
List
<
String
>
getHoldPosIdList
(
LiteOrder
cacheOrder
)
{
//如果是hold的,判断有没有符合的条件
List
<
String
>
holdPosIdList
=
new
ArrayList
<>();
...
...
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/rawstor/controller/TicketController.java
查看文件 @
1b95f71
...
...
@@ -150,7 +150,19 @@ public class TicketController {
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
}
String
result
=
liteOrderCache
.
checkOutLiteOrderOut
(
ticket
,
false
,
null
);
String
result
=
""
;
boolean
sorting
=
false
;
if
(
sorting
)
{
log
.
info
(
ticket
+
"是SortIng出库:"
+
sorting
);
result
=
liteOrderCache
.
ticketOutBySorting
(
ticket
);
}
else
{
log
.
info
(
ticket
+
"不是SortIng出库:"
+
sorting
);
result
=
liteOrderCache
.
ticketOutByNoSorting
(
ticket
);
}
if
(
StringUtils
.
isNotEmpty
(
result
))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
MessageUtils
.
getText
(
result
,
new
Locale
(
SecurityUtils
.
getCurrentUserLanguage
()),
result
));
}
...
...
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/rawstor/controller/TicketSortingController.java
0 → 100644
查看文件 @
1b95f71
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
factory_c
.
rawstor
.
controller
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS
;
import
com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.custom.luxsan.factory_c.rawstor.util.BoxHandleUtil
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.*
;
import
java.util.stream.Collectors
;
@Api
(
tags
=
"单据sorting"
)
@RestController
@RequestMapping
(
"/ticketSortIng"
)
public
class
TicketSortingController
{
@Autowired
private
CodeResolve
codeResolve
;
@Autowired
private
IStoragePosManager
storagePosManager
;
@Autowired
private
IBarcodeManager
barcodeManager
;
@ApiOperation
(
"获取料箱信息"
)
@RequestMapping
(
"/boxInfo"
)
@AnonymousAccess
public
ResultBean
boxInfo
(
String
boxStr
)
{
if
(
StringUtils
.
isEmpty
(
boxStr
))
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"料箱信息"
});
}
boxStr
=
boxStr
.
toUpperCase
(
Locale
.
ROOT
);
//如果不是C07,C13,C15开头的 报错
if
(!
boxStr
.
startsWith
(
"C07"
)
&&
!
boxStr
.
startsWith
(
"C13"
)
&&
!
boxStr
.
startsWith
(
"C15"
))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
boxStr
+
"不是有效的料箱条码"
);
}
//如果不是以A/B结尾的,则提示
if
(!
boxStr
.
endsWith
(
"A"
)
&&
!
boxStr
.
endsWith
(
"B"
))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
boxStr
+
"请输入完整的料箱条码"
);
}
Barcode
barcode
=
codeResolve
.
resolveCode
(
boxStr
);
if
(
barcode
!=
null
)
{
StoragePos
pos
=
storagePosManager
.
getByBarcode
(
barcode
.
getBarcode
());
if
(
pos
!=
null
)
{
barcode
=
pos
.
getBarcode
();
barcode
.
setStatus
(
BARCODE_STATUS
.
OUT_NORMAL
);
//设置成 不在库
barcodeManager
.
save
(
barcode
);
pos
.
setBarcode
(
barcode
);
storagePosManager
.
save
(
pos
);
}
}
Map
<
String
,
Long
>
allCountMap
=
new
HashMap
<>();
Map
<
String
,
Long
>
needOutCountMap
=
new
HashMap
<>();
Map
<
String
,
String
>
pnMap
=
new
HashMap
<>();
//获取料箱要出库的集合
List
<
Barcode
>
subCodeList
=
barcode
.
getSubCodeList
();
if
(
subCodeList
!=
null
&&
!
subCodeList
.
isEmpty
())
{
//隔口对应的数量
allCountMap
=
subCodeList
.
stream
().
collect
(
Collectors
.
groupingBy
(
Barcode:
:
getPosName
,
Collectors
.
counting
()));
//隔口需要对应的出库数量
List
<
Barcode
>
outSubCodeList
=
subCodeList
.
stream
().
filter
(
s
->
s
.
isOut
()).
collect
(
Collectors
.
toList
());
if
(
outSubCodeList
!=
null
&&
!
outSubCodeList
.
isEmpty
())
{
needOutCountMap
=
outSubCodeList
.
stream
().
collect
(
Collectors
.
groupingBy
(
Barcode:
:
getPosName
,
Collectors
.
counting
()));
}
//对应的pn
for
(
Barcode
subCode
:
subCodeList
)
{
pnMap
.
put
(
subCode
.
getPosName
(),
subCode
.
getPartNumber
());
}
}
List
<
List
<
Object
>>
boxInfoList
=
new
ArrayList
<>();
String
box
=
barcode
.
getBarcode
();
for
(
int
i
=
1
;
i
<
7
;
i
++)
{
List
<
Object
>
list
=
new
ArrayList
<>();
list
.
add
(
BoxHandleUtil
.
getCountByPartition
(
allCountMap
,
box
+
"-0"
+
i
));
//隔口总的数量
list
.
add
(
BoxHandleUtil
.
getCountByPartition
(
needOutCountMap
,
box
+
"-0"
+
i
));
//隔口出库的数量
String
pn
=
pnMap
.
get
(
box
+
"-0"
+
i
)
==
null
?
""
:
pnMap
.
get
(
box
+
"-0"
+
i
);
//隔口pn
list
.
add
(
pn
);
list
.
add
(
i
);
//隔口号
boxInfoList
.
add
(
list
);
}
if
(
boxStr
.
startsWith
(
"C07"
))
{
if
(
boxStr
.
endsWith
(
"A"
))
{
boxInfoList
.
add
(
boxInfoList
.
get
(
1
));
boxInfoList
.
add
(
boxInfoList
.
get
(
3
));
boxInfoList
.
add
(
boxInfoList
.
get
(
5
));
boxInfoList
.
add
(
boxInfoList
.
get
(
0
));
boxInfoList
.
add
(
boxInfoList
.
get
(
2
));
boxInfoList
.
add
(
boxInfoList
.
get
(
4
));
}
else
{
boxInfoList
.
add
(
boxInfoList
.
get
(
4
));
boxInfoList
.
add
(
boxInfoList
.
get
(
2
));
boxInfoList
.
add
(
boxInfoList
.
get
(
0
));
boxInfoList
.
add
(
boxInfoList
.
get
(
5
));
boxInfoList
.
add
(
boxInfoList
.
get
(
3
));
boxInfoList
.
add
(
boxInfoList
.
get
(
1
));
}
}
else
if
(
boxStr
.
startsWith
(
"C13"
))
{
if
(
boxStr
.
endsWith
(
"A"
))
{
boxInfoList
.
add
(
boxInfoList
.
get
(
0
));
boxInfoList
.
add
(
boxInfoList
.
get
(
1
));
boxInfoList
.
add
(
boxInfoList
.
get
(
2
));
}
else
{
boxInfoList
.
add
(
boxInfoList
.
get
(
2
));
boxInfoList
.
add
(
boxInfoList
.
get
(
1
));
boxInfoList
.
add
(
boxInfoList
.
get
(
0
));
}
}
else
if
(
boxStr
.
startsWith
(
"C15"
))
{
if
(
boxStr
.
endsWith
(
"A"
))
{
boxInfoList
.
add
(
boxInfoList
.
get
(
0
));
boxInfoList
.
add
(
boxInfoList
.
get
(
1
));
boxInfoList
.
add
(
boxInfoList
.
get
(
2
));
}
else
{
boxInfoList
.
add
(
boxInfoList
.
get
(
2
));
boxInfoList
.
add
(
boxInfoList
.
get
(
1
));
boxInfoList
.
add
(
boxInfoList
.
get
(
0
));
}
}
return
ResultBean
.
newOkResult
(
boxInfoList
);
}
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/rawstor/util/BoxHandleUtil.java
查看文件 @
1b95f71
...
...
@@ -520,7 +520,7 @@ public class BoxHandleUtil {
return
resultMap
;
}
p
rivate
static
int
getCountByPartition
(
Map
<
String
,
Long
>
paramMap
,
String
partition
)
{
p
ublic
static
int
getCountByPartition
(
Map
<
String
,
Long
>
paramMap
,
String
partition
)
{
return
paramMap
.
get
(
partition
)
==
null
?
0
:
paramMap
.
get
(
partition
).
intValue
();
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论