Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 925fbf53
由
zshaohui
编写于
2024-07-24 20:43:59 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
料盘从料箱中出库
1 个父辈
eec0d5ef
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
77 行增加
和
60 行删除
src/main/java/com/neotel/smfcore/custom/luxsan_sp/controller/SpBoxCheckOutController.java
src/main/java/com/neotel/smfcore/custom/luxsan_sp/controller/SpBoxCheckOutController.java
查看文件 @
925fbf5
...
@@ -10,6 +10,12 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
...
@@ -10,6 +10,12 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
...
@@ -31,6 +37,8 @@ import com.neotel.smfcore.security.annotation.AnonymousAccess;
...
@@ -31,6 +37,8 @@ import com.neotel.smfcore.security.annotation.AnonymousAccess;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
...
@@ -59,6 +67,15 @@ public class SpBoxCheckOutController {
...
@@ -59,6 +67,15 @@ public class SpBoxCheckOutController {
@Autowired
@Autowired
private
OrderNoCache
orderNoCache
;
private
OrderNoCache
orderNoCache
;
@Autowired
private
ILiteOrderManager
liteOrderManager
;
@Autowired
private
LiteOrderCache
liteOrderCache
;
@Autowired
private
ILiteOrderItemManager
liteOrderItemManager
;
...
@@ -96,70 +113,24 @@ public class SpBoxCheckOutController {
...
@@ -96,70 +113,24 @@ public class SpBoxCheckOutController {
return
ResultBean
.
newErrorResult
(-
1
,
""
,
codeStr
+
"不是有效的条码"
);
return
ResultBean
.
newErrorResult
(-
1
,
""
,
codeStr
+
"不是有效的条码"
);
}
}
//
判断有没有正在执行出库单
//
3.判断当前需不需要出库
Unclaimed
orderNo
=
orderNoCache
.
getExecutingOrderNo
();
String
itemId
=
binBarcode
.
getOrderItemId
();
if
(
ObjectUtil
.
isAllEmpty
(
orderNo
))
{
if
(
StringUtils
.
isEmpty
(
itemId
))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
"没有找到正在执行的出库单
"
);
return
ResultBean
.
newErrorResult
(-
1
,
""
,
codeStr
+
"没有要出库的任务
"
);
}
}
boolean
isOk
=
false
;
//4.获取当前预约单
String
codePartNumber
=
codeBarcode
.
getPartNumber
();
String
orderId
=
binBarcode
.
getOrderId
();
for
(
Barcode
barcode
:
boxBarcode
.
getSubCodeList
())
{
LiteOrder
liteOrder
=
liteOrderManager
.
get
(
orderId
);
String
pn
=
barcode
.
getPartNumber
();
LiteOrder
newLiteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
int
binNum
=
Integer
.
parseInt
(
barcode
.
getBarcode
().
split
(
"-"
)[
1
]);
if
(
newLiteOrder
==
null
){
if
(
pn
.
equals
(
codePartNumber
)
&&
(
binNum
==
Integer
.
parseInt
(
binCodeStr
.
split
(
"-"
)[
1
])))
{
newLiteOrder
=
liteOrderManager
.
findByOrderNo
(
liteOrder
.
getOrderNo
());
isOk
=
true
;
break
;
}
}
if
(!
isOk
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
codeStr
+
"与隔口:"
+
binCodeStr
+
"的料号不匹配"
);
}
}
//判断是否已经完成了
//判断所属的工单任务是否完成
boolean
finish
=
true
;
String
result
=
handleOrderNo
(
newLiteOrder
,
itemId
,
codeBarcode
.
getQty
());
//判断当前出库的是否和出库单一样
if
(
StringUtils
.
isNotEmpty
(
result
)){
if
(
orderNo
!=
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
result
);
List
<
UnclaimedDetail
>
detailList
=
orderNo
.
getDetailList
();
UnclaimedDetail
unclaimedDetail
=
null
;
for
(
UnclaimedDetail
detail
:
detailList
)
{
//如果相同的话,判断数量是否大于需求数量
if
(
detail
.
getPartno
().
equals
(
codePartNumber
))
{
if
(
detail
.
getAlrInQty
()
+
codeBarcode
.
getQty
()
<=
detail
.
getApplyQty
())
{
unclaimedDetail
=
detail
;
break
;
}
}
}
if
(
unclaimedDetail
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
codePartNumber
+
"没有入出库需求,请检查是否存在或者不符合入出库数量"
);
}
// 出库单已出库数量加
unclaimedDetail
.
setAlrInQty
(
unclaimedDetail
.
getAlrInQty
()+
codeBarcode
.
getQty
());
orderNo
.
updateDetailList
(
unclaimedDetail
);
log
.
info
(
"开始判断是否完成出库单"
);
for
(
UnclaimedDetail
noDetail
:
orderNo
.
getDetailList
())
{
if
(
noDetail
.
getApplyQty
()
>
noDetail
.
getAlrInQty
())
{
log
.
info
(
"出库未完成"
);
finish
=
false
;
break
;
}
log
.
info
(
"出料noDetail.getApplyQty()"
+
noDetail
.
getApplyQty
()+
"noDetail.getAlrInQty()"
+
noDetail
.
getAlrInQty
());
}
if
(
finish
){
orderNo
.
setUnclaimedStatus
(
SpareNostatus
.
CLOSE_STATUS
);
}
orderNoCache
.
addToMap
(
orderNo
);
unclaimedManager
.
save
(
orderNo
);
}
}
...
@@ -192,4 +163,50 @@ public class SpBoxCheckOutController {
...
@@ -192,4 +163,50 @@ public class SpBoxCheckOutController {
return
ResultBean
.
newOkResult
(
""
);
return
ResultBean
.
newOkResult
(
""
);
}
}
private
String
handleOrderNo
(
LiteOrder
liteOrder
,
String
orderItemId
,
int
amount
)
{
List
<
LiteOrderItem
>
newOrderItemList
=
new
ArrayList
<>();
List
<
LiteOrderItem
>
orderItemList
=
liteOrder
.
getOrderItems
();
for
(
LiteOrderItem
item
:
orderItemList
)
{
if
(
item
.
getId
().
equals
(
orderItemId
))
{
if
(
item
.
getTotalOutNum
()
-
item
.
getNeedNum
()
<=
0
)
{
return
liteOrder
.
getOrderNo
()
+
"预约单中:"
+
item
.
getPn
()
+
"已经出库完成,不允许出库"
;
}
int
totalOutNum
=
item
.
getTotalOutNum
();
item
.
setTotalOutNum
(
totalOutNum
+
amount
);
liteOrderItemManager
.
save
(
item
);
}
newOrderItemList
.
add
(
item
);
}
liteOrder
.
setOrderItems
(
newOrderItemList
);
handleStatusOrderNo
(
liteOrder
);
return
""
;
}
private
void
handleStatusOrderNo
(
LiteOrder
liteOrder
)
{
boolean
close
=
true
;
for
(
LiteOrderItem
orderItem
:
liteOrder
.
getOrderItems
())
{
if
(
orderItem
.
getTotalOutNum
()
<
orderItem
.
getNeedNum
()){
close
=
false
;
break
;
}
}
if
(
close
){
liteOrder
.
setClosed
(
true
);
liteOrder
.
setStatus
(
LITEORDER_STATUS
.
CLOSED
);
}
//判断是否还有其他任务
int
count
=
barcodeManager
.
countByQuery
(
new
Query
(
Criteria
.
where
(
"orderId"
).
is
(
liteOrder
.
getId
())));
if
(
count
<=
0
){
liteOrderCache
.
finishedOrderTasks
(
liteOrder
);
}
liteOrderCache
.
addOrderToMap
(
liteOrder
);
liteOrderManager
.
save
(
liteOrder
);
}
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论