Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit cbc849b7
由
zshaohui
编写于
2025-11-17 13:18:41 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.修改工单状态锁问题
1 个父辈
2a2ba78e
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
143 行增加
和
128 行删除
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
查看文件 @
cbc849b
...
@@ -157,6 +157,7 @@ public class DeviceController {
...
@@ -157,6 +157,7 @@ public class DeviceController {
}
else
{
}
else
{
List
<
Storage
>
storageList
=
Lists
.
newArrayList
();
List
<
Storage
>
storageList
=
Lists
.
newArrayList
();
List
<
String
>
cidList
=
Lists
.
newArrayList
();
List
<
String
>
cidList
=
Lists
.
newArrayList
();
List
<
String
>
storageIds
=
dataCache
.
getAvailableStorageIds
();
for
(
String
cid
:
cids
.
split
(
","
))
{
for
(
String
cid
:
cids
.
split
(
","
))
{
String
notIntoCids
=
dataCache
.
getSettings
().
getNotIntoCids
();
String
notIntoCids
=
dataCache
.
getSettings
().
getNotIntoCids
();
if
(
notIntoCids
!=
null
)
{
if
(
notIntoCids
!=
null
)
{
...
@@ -167,8 +168,12 @@ public class DeviceController {
...
@@ -167,8 +168,12 @@ public class DeviceController {
}
}
Storage
storage
=
dataCache
.
getStorage
(
cid
);
Storage
storage
=
dataCache
.
getStorage
(
cid
);
if
(
storage
!=
null
)
{
if
(
storage
!=
null
)
{
storageList
.
add
(
storage
);
if
(
storageIds
!=
null
&&
!
storageIds
.
isEmpty
()){
cidList
.
add
(
cid
);
if
(
storageIds
.
contains
(
storage
.
getId
())){
storageList
.
add
(
storage
);
cidList
.
add
(
cid
);
}
}
}
}
}
}
if
(
storageList
.
isEmpty
())
{
if
(
storageList
.
isEmpty
())
{
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
cbc849b
...
@@ -146,7 +146,7 @@ public class LiteOrderCache {
...
@@ -146,7 +146,7 @@ public class LiteOrderCache {
public
void
onTaskStatusChange
(
DataLog
task
)
{
public
void
onTaskStatusChange
(
DataLog
task
)
{
try
{
try
{
//只有任务完成或取消时才处理,任务未完成直接返回
//只有任务完成或取消时才处理,任务未完成直接返回
if
(
task
.
isFinished
()
||
task
.
isCancel
())
{
if
(
(
task
.
isFinished
()
||
task
.
isCancel
())
&&
task
.
isCheckOutTask
())
{
finishedOrderTask
(
task
);
finishedOrderTask
(
task
);
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
...
@@ -268,10 +268,12 @@ public class LiteOrderCache {
...
@@ -268,10 +268,12 @@ public class LiteOrderCache {
smfApi
.
onOrderStatusChange
(
liteOrder
);
smfApi
.
onOrderStatusChange
(
liteOrder
);
}
}
private
Map
<
String
,
String
>
cacheOrderMap
=
new
ConcurrentHashMap
<>();
/**
/**
* 更新工单状态信息
* 更新工单状态信息
*/
*/
private
synchronized
void
finishedOrderTask
(
DataLog
task
)
throws
ValidateException
{
private
void
finishedOrderTask
(
DataLog
task
)
throws
ValidateException
{
String
barcode
=
task
.
getBarcode
();
String
barcode
=
task
.
getBarcode
();
if
(
barcode
.
startsWith
(
"CS"
)
||
barcode
.
startsWith
(
"CM"
)
||
barcode
.
startsWith
(
"CB"
)){
if
(
barcode
.
startsWith
(
"CS"
)
||
barcode
.
startsWith
(
"CM"
)
||
barcode
.
startsWith
(
"CB"
)){
return
;
return
;
...
@@ -281,158 +283,166 @@ public class LiteOrderCache {
...
@@ -281,158 +283,166 @@ public class LiteOrderCache {
//更新工单状态
//更新工单状态
String
orderNo
=
task
.
getSourceName
();
String
orderNo
=
task
.
getSourceName
();
if
(!
Strings
.
isNullOrEmpty
(
orderNo
))
{
if
(!
Strings
.
isNullOrEmpty
(
orderNo
))
{
LiteOrder
order
=
liteOrderMap
.
get
(
orderNo
);
//LiteOrder order = null;
String
lockObj
=
cacheOrderMap
.
get
(
orderNo
);
if
(
order
==
null
)
{
if
(
StringUtils
.
isEmpty
(
lockObj
))
{
log
.
info
(
"缓存中未找到["
+
orderNo
+
"],从数据库中重新加载"
);
lockObj
=
orderNo
;
order
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
cacheOrderMap
.
put
(
orderNo
,
lockObj
);
if
(
order
!=
null
){
List
<
LiteOrderItem
>
items
=
liteOrderItemManager
.
findOrderItems
(
order
.
getId
());
order
.
setOrderItems
(
items
);
}
}
}
if
(
order
!=
null
)
{
synchronized
(
cacheOrderMap
.
get
(
orderNo
)
)
{
//任务是取消的,需要将总待出库数量-1
if
(
task
.
isCancel
())
{
LiteOrder
order
=
liteOrderMap
.
get
(
orderNo
);
order
.
setTaskReelCount
(
order
.
getTaskReelCount
()
-
1
)
;
//LiteOrder order = null
;
//order.setTotalTaskReelCount(order.getTotalTaskReelCount()-1);
if
(
order
==
null
)
{
log
.
info
(
"
工单["
+
orderNo
+
"]的任务"
+
task
.
getPartNumber
()
+
"["
+
task
.
getBarcode
()
+
"]已取消,任务数-1="
+
order
.
getFinishedReelCount
()
+
"/"
+
order
.
getTaskReelCount
()
);
log
.
info
(
"
缓存中未找到["
+
orderNo
+
"],从数据库中重新加载"
);
if
(
order
.
getFinishedReelCount
()
==
0
&&
order
.
getTaskReelCount
()
==
0
){
order
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
StringUtils
.
isNotBlank
(
task
.
getExport
()))
{
if
(
order
!=
null
)
{
StorageExportUtil
.
clearExport
(
task
.
getExport
());
List
<
LiteOrderItem
>
items
=
liteOrderItemManager
.
findOrderItems
(
order
.
getId
());
}
order
.
setOrderItems
(
items
);
}
}
}
}
else
if
(
task
.
isFinished
())
{
if
(
order
!=
null
)
{
order
.
setTotalFinishedReelCount
(
order
.
getTotalFinishedReelCount
()
+
1
);
//任务是取消的,需要将总待出库数量-1
if
(
task
.
getExtendType
()
!=
ExtendType
.
MANUAL_FEEDING
)
{
if
(
task
.
isCancel
())
{
order
.
setFinishedReelCount
(
order
.
getFinishedReelCount
()
+
1
);
order
.
setTaskReelCount
(
order
.
getTaskReelCount
()
-
1
);
}
//order.setTotalTaskReelCount(order.getTotalTaskReelCount()-1);
String
orderItemId
=
task
.
getSubSourceId
();
log
.
info
(
"工单["
+
orderNo
+
"]的任务"
+
task
.
getPartNumber
()
+
"["
+
task
.
getBarcode
()
+
"]已取消,任务数-1="
+
order
.
getFinishedReelCount
()
+
"/"
+
order
.
getTaskReelCount
());
List
<
LiteOrderItem
>
orderItems
=
order
.
getOrderItems
();
if
(
order
.
getFinishedReelCount
()
==
0
&&
order
.
getTaskReelCount
()
==
0
)
{
List
<
LiteOrderItem
>
liteOrderItems
=
new
ArrayList
<>();
if
(
StringUtils
.
isNotBlank
(
task
.
getExport
()))
{
if
(
LITEORDER_SOURCE
.
OUTTER
.
name
().
equals
(
order
.
getSource
()))
{
StorageExportUtil
.
clearExport
(
task
.
getExport
());
}
}
}
else
if
(
task
.
isFinished
())
{
order
.
setTotalFinishedReelCount
(
order
.
getTotalFinishedReelCount
()
+
1
);
order
.
setTotalFinishedReelCount
(
order
.
getTotalFinishedReelCount
()
+
1
);
log
.
info
(
"更新任务盘数:"
+
order
.
getTaskReelCount
()+
",已完成的数量:"
+
order
.
getFinishedReelCount
());
if
(
task
.
getExtendType
()
!=
ExtendType
.
MANUAL_FEEDING
)
{
if
(
orderItems
!=
null
&&
!
orderItems
.
isEmpty
())
{
order
.
setFinishedReelCount
(
order
.
getFinishedReelCount
()
+
1
);
for
(
LiteOrderItem
liteOrderItem
:
orderItems
)
{
}
if
(
liteOrderItem
.
getId
().
equals
(
orderItemId
))
{
String
orderItemId
=
task
.
getSubSourceId
();
//判断是否超发,如果是超发,则赋值
List
<
LiteOrderItem
>
orderItems
=
order
.
getOrderItems
();
if
(
order
.
isExcess
()){
List
<
LiteOrderItem
>
liteOrderItems
=
new
ArrayList
<>();
if
(!
liteOrderItem
.
isOutFinished
())
{
if
(
LITEORDER_SOURCE
.
OUTTER
.
name
().
equals
(
order
.
getSource
()))
{
liteOrderItem
.
setOutNum
(
liteOrderItem
.
getOutNum
()
+
task
.
getNum
());
order
.
setTotalFinishedReelCount
(
order
.
getTotalFinishedReelCount
()
+
1
);
liteOrderItem
.
setTotalReelCountByOutNum
(
liteOrderItem
.
getTotalReelCountByOutNum
()
+
1
);
log
.
info
(
"更新任务盘数:"
+
order
.
getTaskReelCount
()
+
",已完成的数量:"
+
order
.
getFinishedReelCount
());
}
else
{
if
(
orderItems
!=
null
&&
!
orderItems
.
isEmpty
())
{
liteOrderItem
.
setOutReelCount
(
liteOrderItem
.
getOutReelCount
()
+
1
);
for
(
LiteOrderItem
liteOrderItem
:
orderItems
)
{
if
(
liteOrderItem
.
getId
().
equals
(
orderItemId
))
{
//判断是否超发,如果是超发,则赋值
if
(
order
.
isExcess
())
{
if
(!
liteOrderItem
.
isOutFinished
())
{
liteOrderItem
.
setOutNum
(
liteOrderItem
.
getOutNum
()
+
task
.
getNum
());
liteOrderItem
.
setTotalReelCountByOutNum
(
liteOrderItem
.
getTotalReelCountByOutNum
()
+
1
);
}
else
{
liteOrderItem
.
setOutReelCount
(
liteOrderItem
.
getOutReelCount
()
+
1
);
}
}
}
liteOrderItem
.
setTotalOutNum
(
liteOrderItem
.
getTotalOutNum
()
+
task
.
getNum
());
liteOrderItem
.
setTotalOutReelCount
(
liteOrderItem
.
getTotalOutReelCount
()
+
1
);
liteOrderItem
=
liteOrderItemManager
.
save
(
liteOrderItem
);
}
}
liteOrderItem
.
setTotalOutNum
(
liteOrderItem
.
getTotalOutNum
()
+
task
.
getNum
());
liteOrderItems
.
add
(
liteOrderItem
);
liteOrderItem
.
setTotalOutReelCount
(
liteOrderItem
.
getTotalOutReelCount
()
+
1
);
liteOrderItem
=
liteOrderItemManager
.
save
(
liteOrderItem
);
}
}
liteOrderItems
.
add
(
liteOrderItem
);
}
}
}
order
.
setOrderItems
(
liteOrderItems
);
order
.
setOrderItems
(
liteOrderItems
);
}
else
{
}
else
{
if
(
orderItems
!=
null
&&
!
orderItems
.
isEmpty
())
{
if
(
orderItems
!=
null
&&
!
orderItems
.
isEmpty
())
{
for
(
LiteOrderItem
liteOrderItem
:
orderItems
)
{
for
(
LiteOrderItem
liteOrderItem
:
orderItems
)
{
if
(
liteOrderItem
.
getId
().
equals
(
orderItemId
))
{
if
(
liteOrderItem
.
getId
().
equals
(
orderItemId
))
{
log
.
info
(
"工单["
+
orderNo
+
"]的任务"
+
task
.
getPartNumber
()
+
"["
+
task
.
getBarcode
()
+
"]出库完成,已完成数量+1="
+
order
.
getFinishedReelCount
()
+
"/"
+
order
.
getTaskReelCount
());
log
.
info
(
"工单["
+
orderNo
+
"]的任务"
+
task
.
getPartNumber
()
+
"["
+
task
.
getBarcode
()
+
"]出库完成,已完成数量+1="
+
order
.
getFinishedReelCount
()
+
"/"
+
order
.
getTaskReelCount
());
//更新对应条目的已出库数量和出库盘数
//更新对应条目的已出库数量和出库盘数
liteOrderItem
.
setOutNum
(
liteOrderItem
.
getOutNum
()
+
task
.
getNum
());
liteOrderItem
.
setOutNum
(
liteOrderItem
.
getOutNum
()
+
task
.
getNum
());
liteOrderItem
.
setOutReelCount
(
liteOrderItem
.
getOutReelCount
()
+
1
);
liteOrderItem
.
setOutReelCount
(
liteOrderItem
.
getOutReelCount
()
+
1
);
liteOrderItem
.
setTotalOutNum
(
liteOrderItem
.
getTotalOutNum
()
+
task
.
getNum
());
liteOrderItem
.
setTotalOutNum
(
liteOrderItem
.
getTotalOutNum
()
+
task
.
getNum
());
liteOrderItem
.
setTotalOutReelCount
(
liteOrderItem
.
getTotalOutReelCount
()
+
1
);
liteOrderItem
.
setTotalOutReelCount
(
liteOrderItem
.
getTotalOutReelCount
()
+
1
);
liteOrderItem
.
setOutReelList
(
task
.
getBarcode
());
liteOrderItem
.
setOutReelList
(
task
.
getBarcode
());
liteOrderItem
.
setPositionList
(
task
.
getPosName
());
liteOrderItem
.
setPositionList
(
task
.
getPosName
());
liteOrderItem
=
liteOrderItemManager
.
save
(
liteOrderItem
);
liteOrderItem
=
liteOrderItemManager
.
save
(
liteOrderItem
);
}
liteOrderItems
.
add
(
liteOrderItem
);
}
}
liteOrderItems
.
add
(
liteOrderItem
);
}
}
//log.info(order.getOrderNo() + "更新工单详情:" + JsonUtil.toJsonStr(liteOrderItems));
order
.
setOrderItems
(
liteOrderItems
);
/* liteOrderManager.createWithItems(order);*/
}
}
//log.info(order.getOrderNo() + "更新工单详情:" + JsonUtil.toJsonStr(liteOrderItems));
}
else
{
order
.
setOrderItems
(
liteOrderItems
);
log
.
error
(
"工单["
+
orderNo
+
"]的任务["
+
task
.
getBarcode
()
+
"]完成时,状态为:"
+
task
.
getStatus
());
/* liteOrderManager.createWithItems(order);*/
}
}
}
else
{
log
.
error
(
"工单["
+
orderNo
+
"]的任务["
+
task
.
getBarcode
()
+
"]完成时,状态为:"
+
task
.
getStatus
());
}
if
(
LITEORDER_SOURCE
.
OUTTER
.
name
().
equals
(
order
.
getSource
())){
if
(
LITEORDER_SOURCE
.
OUTTER
.
name
().
equals
(
order
.
getSource
()))
{
if
(!
order
.
isClosed
())
{
if
(!
order
.
isClosed
())
{
//工单未关闭的话,检查状态,全部都出完进行关闭
//工单未关闭的话,检查状态,全部都出完进行关闭
boolean
closed
=
true
;
boolean
closed
=
true
;
for
(
LiteOrderItem
liteOrderItem
:
order
.
getOrderItems
())
{
for
(
LiteOrderItem
liteOrderItem
:
order
.
getOrderItems
())
{
if
(
order
.
isExcess
()){
if
(
order
.
isExcess
())
{
if
(
liteOrderItem
.
getOutNum
()
<
liteOrderItem
.
getNeedNum
()
||
liteOrderItem
.
getOutReelCount
()
<
liteOrderItem
.
getNeedReelCount
()){
if
(
liteOrderItem
.
getOutNum
()
<
liteOrderItem
.
getNeedNum
()
||
liteOrderItem
.
getOutReelCount
()
<
liteOrderItem
.
getNeedReelCount
())
{
closed
=
false
;
closed
=
false
;
break
;
break
;
}
}
}
else
{
}
else
{
if
(
liteOrderItem
.
getTotalOutNum
()
<
liteOrderItem
.
getNeedNum
()
||
liteOrderItem
.
getTotalOutReelCount
()
<
liteOrderItem
.
getNeedReelCount
()){
if
(
liteOrderItem
.
getTotalOutNum
()
<
liteOrderItem
.
getNeedNum
()
||
liteOrderItem
.
getTotalOutReelCount
()
<
liteOrderItem
.
getNeedReelCount
())
{
closed
=
false
;
closed
=
false
;
break
;
break
;
}
}
}
}
}
}
if
(
closed
)
{
if
(
closed
)
{
order
.
setClosed
(
closed
);
order
.
setClosed
(
closed
);
}
}
}
else
{
if
(!
order
.
isClosed
())
{
//工单未关闭的话,检查状态,全部都出完进行关闭
boolean
closed
=
true
;
for
(
LiteOrderItem
liteOrderItem
:
order
.
getOrderItems
())
{
if
(!
liteOrderItem
.
isOutFinished
())
{
closed
=
false
;
break
;
}
}
}
}
if
(
closed
)
{
}
else
{
Boolean
ignoreLineCheck
=
dataCache
.
getCache
(
Constants
.
CACHE_ignoreLineCheck
);
if
(!
order
.
isClosed
())
{
if
(
ignoreLineCheck
==
null
){
//工单未关闭的话,检查状态,全部都出完进行关闭
ignoreLineCheck
=
false
;
boolean
closed
=
true
;
for
(
LiteOrderItem
liteOrderItem
:
order
.
getOrderItems
())
{
if
(!
liteOrderItem
.
isOutFinished
())
{
closed
=
false
;
break
;
}
}
}
if
(
ignoreLineCheck
)
{
if
(
closed
)
{
log
.
info
(
"ignoreLineCheck为:"
+
ignoreLineCheck
+
"清空出料口信息:"
+
task
.
getExport
()
+
",工单号为:"
+
task
.
getSourceName
());
Boolean
ignoreLineCheck
=
dataCache
.
getCache
(
Constants
.
CACHE_ignoreLineCheck
);
if
(
StringUtils
.
isNotBlank
(
task
.
getExport
())){
if
(
ignoreLineCheck
==
null
)
{
StorageExport
export
=
StorageExportUtil
.
getExport
(
task
.
getExport
());
ignoreLineCheck
=
false
;
if
(
StringUtils
.
isNotBlank
(
export
.
getHSerial
()))
{
}
StorageExportUtil
.
clearExport
(
task
.
getExport
());
if
(
ignoreLineCheck
)
{
//StorageExportUtil.updateExport(task.getExport() + StorageExportUtil.OUT_STATION, export);
log
.
info
(
"ignoreLineCheck为:"
+
ignoreLineCheck
+
"清空出料口信息:"
+
task
.
getExport
()
+
",工单号为:"
+
task
.
getSourceName
());
if
(
StringUtils
.
isNotBlank
(
task
.
getExport
()))
{
StorageExport
export
=
StorageExportUtil
.
getExport
(
task
.
getExport
());
if
(
StringUtils
.
isNotBlank
(
export
.
getHSerial
()))
{
StorageExportUtil
.
clearExport
(
task
.
getExport
());
//StorageExportUtil.updateExport(task.getExport() + StorageExportUtil.OUT_STATION, export);
}
}
}
}
}
order
.
setClosed
(
closed
);
}
}
order
.
setClosed
(
closed
);
}
}
}
}
}
if
(
order
.
getFinishedReelCount
()
>=
order
.
getTaskReelCount
())
{
if
(
order
.
getFinishedReelCount
()
>=
order
.
getTaskReelCount
())
{
log
.
info
(
"工单["
+
orderNo
+
"]的出库任务已完成,共出库:"
+
order
.
getFinishedReelCount
()
+
" 盘"
);
log
.
info
(
"工单["
+
orderNo
+
"]的出库任务已完成,共出库:"
+
order
.
getFinishedReelCount
()
+
" 盘"
);
order
.
setFinishDate
(
new
Date
());
order
.
setFinishDate
(
new
Date
());
Boolean
ignoreLineCheck
=
dataCache
.
getCache
(
Constants
.
CACHE_ignoreLineCheck
);
Boolean
ignoreLineCheck
=
dataCache
.
getCache
(
Constants
.
CACHE_ignoreLineCheck
);
if
(
ignoreLineCheck
==
null
){
if
(
ignoreLineCheck
==
null
)
{
ignoreLineCheck
=
false
;
ignoreLineCheck
=
false
;
}
}
if
(
ignoreLineCheck
)
{
if
(
ignoreLineCheck
)
{
log
.
info
(
"ignoreLineCheck为:"
+
ignoreLineCheck
+
"清空出料口信息:"
+
task
.
getExport
()
+
",工单号为:"
+
task
.
getSourceName
());
log
.
info
(
"ignoreLineCheck为:"
+
ignoreLineCheck
+
"清空出料口信息:"
+
task
.
getExport
()
+
",工单号为:"
+
task
.
getSourceName
());
if
(
StringUtils
.
isNotBlank
(
task
.
getExport
())){
if
(
StringUtils
.
isNotBlank
(
task
.
getExport
()))
{
StorageExport
export
=
StorageExportUtil
.
getExport
(
task
.
getExport
());
StorageExport
export
=
StorageExportUtil
.
getExport
(
task
.
getExport
());
if
(
StringUtils
.
isNotBlank
(
export
.
getHSerial
()))
{
if
(
StringUtils
.
isNotBlank
(
export
.
getHSerial
()))
{
StorageExportUtil
.
clearExport
(
task
.
getExport
());
StorageExportUtil
.
clearExport
(
task
.
getExport
());
//StorageExportUtil.updateExport(task.getExport() + StorageExportUtil.OUT_STATION, export);
//StorageExportUtil.updateExport(task.getExport() + StorageExportUtil.OUT_STATION, export);
}
}
}
}
}
finishedOrderTasks
(
order
);
}
}
finishedOrderTasks
(
order
);
liteOrderManager
.
save
(
order
);
liteOrderMap
.
put
(
orderNo
,
order
);
}
else
{
log
.
error
(
"完成任务时,未找到工单["
+
orderNo
+
"]信息"
);
}
}
liteOrderManager
.
save
(
order
);
liteOrderMap
.
put
(
orderNo
,
order
);
}
else
{
log
.
error
(
"完成任务时,未找到工单["
+
orderNo
+
"]信息"
);
}
}
}
}
}
}
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论