Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit d3ed66f7
由
LN
编写于
2024-08-22 11:19:53 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
重试需要从API010预扣开始重试。所有接口失败增加提示
1 个父辈
7f15d5b8
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
379 行增加
和
272 行删除
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/custom/micron1053/api/MicronApi.java
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronDispatchController.java
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronPreTaskController.java
src/main/resources/messages.properties
src/main/resources/messages_en_US.properties
src/main/resources/messages_ja_JP.properties
src/main/resources/messages_zh_CN.properties
src/main/resources/messages_zh_TW.properties
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
d3ed66f
...
...
@@ -92,11 +92,12 @@ public class LiteOrderCache {
}
}
}
public
void
addOrderToMap
(
LiteOrder
order
){
if
(
order
==
null
||
order
.
getOrderNo
()==
null
){
public
void
addOrderToMap
(
LiteOrder
order
)
{
if
(
order
==
null
||
order
.
getOrderNo
()
==
null
)
{
return
;
}
if
(
liteOrderMap
.
containsKey
(
order
.
getOrderNo
()))
{
if
(
liteOrderMap
.
containsKey
(
order
.
getOrderNo
()))
{
liteOrderMap
.
remove
(
order
.
getOrderNo
());
}
liteOrderMap
.
put
(
order
.
getOrderNo
(),
order
);
...
...
@@ -116,19 +117,19 @@ public class LiteOrderCache {
private
boolean
isProcessTimer
=
false
;
public
void
runTimer
(){
if
(!
isProcessTimer
)
{
public
void
runTimer
()
{
if
(!
isProcessTimer
)
{
isProcessTimer
=
true
;
try
{
boolean
startJob
=
dataCache
.
getCache
(
Constants
.
CACHE_StartJob
);
if
(
startJob
)
{
if
(
startJob
)
{
//定时执行工单任务
executeOrderTask
();
}
}
catch
(
Exception
e
)
{
log
.
error
(
"需求单定时器执行出错:"
,
e
);
}
finally
{
}
catch
(
Exception
e
)
{
log
.
error
(
"需求单定时器执行出错:"
,
e
);
}
finally
{
isProcessTimer
=
false
;
}
}
...
...
@@ -145,22 +146,22 @@ public class LiteOrderCache {
}
}
public
void
executeOrderTask
(){
public
void
executeOrderTask
()
{
for
(
LiteOrder
order
:
liteOrderMap
.
values
())
{
if
(
order
.
isClosed
())
{
if
(
order
.
isClosed
())
{
continue
;
}
if
(
order
.
isNew
()||
order
.
isTaskFinished
())
{
//判断是否到达时间
Date
curr
=
new
Date
();
if
(
order
.
getSDate
().
before
(
curr
))
{
if
(
order
.
isNew
()
||
order
.
isTaskFinished
())
{
//判断是否到达时间
Date
curr
=
new
Date
();
if
(
order
.
getSDate
().
before
(
curr
))
{
//开始自动出库
String
result
=
checkOutLiteOrder
(
order
.
getOrderNo
(),
false
);
if
(!
ObjectUtil
.
isEmpty
(
result
))
{
String
msg
=
MessageUtils
.
getText
(
result
,
MessageUtils
.
getDefaultLocal
(),
""
);
log
.
info
(
"自动执行工单 【"
+
order
.
getOrderNo
()+
"】 失败:"
+
msg
);
}
else
{
log
.
info
(
"自动执行工单 【"
+
order
.
getOrderNo
()+
"】 成功"
);
String
result
=
checkOutLiteOrder
(
order
.
getOrderNo
(),
false
);
if
(!
ObjectUtil
.
isEmpty
(
result
))
{
String
msg
=
MessageUtils
.
getText
(
result
,
MessageUtils
.
getDefaultLocal
(),
""
);
log
.
info
(
"自动执行工单 【"
+
order
.
getOrderNo
()
+
"】 失败:"
+
msg
);
}
else
{
log
.
info
(
"自动执行工单 【"
+
order
.
getOrderNo
()
+
"】 成功"
);
}
break
;
...
...
@@ -175,18 +176,18 @@ public class LiteOrderCache {
ORDER_COLOR
nextColor
=
getNextColor
();
if
(
nextColor
==
null
)
{
log
.
info
(
"执行工单["
+
liteOrder
.
getOrderNo
()
+
"] 时,已达最大可执行工单数"
);
throw
new
ValidateException
(
"order.out.maxOrder"
,
"已达最大可执行工单数"
);
throw
new
ValidateException
(
"order.out.maxOrder"
,
"已达最大可执行工单数"
);
}
//其他出库模式一次性全部生成任务
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
liteOrder
.
getOrderNo
());
if
(
lockPosList
==
null
)
{
throw
new
ValidateException
(
"smfcore.notFindPos"
,
"未找到锁定库位"
);
if
(
lockPosList
==
null
)
{
throw
new
ValidateException
(
"smfcore.notFindPos"
,
"未找到锁定库位"
);
}
int
taskReelCount
=
0
;
for
(
StoragePos
lockPos
:
lockPosList
)
{
Storage
storage
=
dataCache
.
getStorageById
(
lockPos
.
getStorageId
());
Barcode
barcode
=
lockPos
.
getBarcode
();
DataLog
task
=
new
DataLog
(
storage
,
barcode
,
lockPos
);
DataLog
task
=
new
DataLog
(
storage
,
barcode
,
lockPos
);
task
.
setSourceId
(
liteOrder
.
getId
());
task
.
setSourceName
(
liteOrder
.
getOrderNo
());
...
...
@@ -203,7 +204,7 @@ public class LiteOrderCache {
}
liteOrder
.
setTaskReelCount
(
taskReelCount
);
liteOrder
.
setTotalTaskReelCount
(
liteOrder
.
getTotalTaskReelCount
()
+
taskReelCount
);
liteOrder
.
setTotalTaskReelCount
(
liteOrder
.
getTotalTaskReelCount
()
+
taskReelCount
);
liteOrder
.
setStatus
(
LITEORDER_STATUS
.
TAILS
);
log
.
info
(
"工单["
+
liteOrder
.
getOrderNo
()
+
"]任务分配结束,任务数["
+
taskReelCount
+
"]"
);
smfApi
.
onOrderStatusChange
(
liteOrder
);
...
...
@@ -211,28 +212,28 @@ public class LiteOrderCache {
if
(
taskReelCount
<=
0
)
{
//没有任务,直接结束
finishedOrderTasks
(
liteOrder
);
}
else
{
}
else
{
//有需要出库的 ,更新状态
liteOrder
.
setStatus
(
LITEORDER_STATUS
.
TAILS
);
}
liteOrder
=
liteOrderManager
.
save
(
liteOrder
);
liteOrderMap
.
put
(
liteOrder
.
getOrderNo
(),
liteOrder
);
liteOrderMap
.
put
(
liteOrder
.
getOrderNo
(),
liteOrder
);
if
(
taskReelCount
<=
0
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.notask"
,
"No task in this order"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.notask"
,
"No task in this order"
);
}
return
ResultBean
.
newOkResult
(
"smfcore.taskCount"
,
"total task is :{0}"
,
new
String
[]{
taskReelCount
+
""
},
""
);
return
ResultBean
.
newOkResult
(
"smfcore.taskCount"
,
"total task is :{0}"
,
new
String
[]{
taskReelCount
+
""
},
""
);
}
/**
* 结束当前的任务
*/
public
void
finishedOrderTasks
(
LiteOrder
liteOrder
){
if
(
liteOrder
.
isOutOne
())
{
public
void
finishedOrderTasks
(
LiteOrder
liteOrder
)
{
if
(
liteOrder
.
isOutOne
())
{
// setStatus(LITEORDER_STATUS.ONE_FINISHED);
liteOrder
.
setClosed
(
true
);
}
else
if
(
liteOrder
.
isOutBom
())
{
}
else
if
(
liteOrder
.
isOutBom
())
{
liteOrder
.
setStatus
(
LITEORDER_STATUS
.
BOM_FINISHED
);
}
else
if
(
liteOrder
.
isOutTails
())
{
}
else
if
(
liteOrder
.
isOutTails
())
{
// setStatus(LITEORDER_STATUS.TAILS_FINISHED);
liteOrder
.
setClosed
(
true
);
}
...
...
@@ -241,12 +242,12 @@ public class LiteOrderCache {
smfApi
.
onOrderStatusChange
(
liteOrder
);
}
public
LiteOrder
getLiteOrder
(
String
orderNo
){
public
LiteOrder
getLiteOrder
(
String
orderNo
)
{
LiteOrder
order
=
liteOrderMap
.
get
(
orderNo
);
if
(
order
==
null
)
{
log
.
info
(
"缓存中未找到["
+
orderNo
+
"],从数据库中重新加载"
);
order
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
order
!=
null
)
{
if
(
order
!=
null
)
{
List
<
LiteOrderItem
>
items
=
liteOrderItemManager
.
findOrderItems
(
order
.
getId
());
order
.
setOrderItems
(
items
);
}
...
...
@@ -283,13 +284,12 @@ public class LiteOrderCache {
liteOrderMap
.
put
(
orderNo
,
order
);
//如果是preTask,不需要重新出库
if
(
ObjectUtil
.
isNotEmpty
(
order
.
getMode
()))
{
if
(
ObjectUtil
.
isNotEmpty
(
order
.
getMode
()))
{
checkoutAgain
(
task
,
order
);
}
}
else
if
(
task
.
isFinished
())
{
}
else
if
(
task
.
isFinished
())
{
order
.
setFinishedReelCount
(
order
.
getFinishedReelCount
()
+
1
);
order
.
setTotalFinishedReelCount
(
order
.
getTotalFinishedReelCount
()
+
1
);
order
.
setTotalFinishedReelCount
(
order
.
getTotalFinishedReelCount
()
+
1
);
String
orderItemId
=
task
.
getSubSourceId
();
List
<
LiteOrderItem
>
items
=
new
ArrayList
<>();
for
(
LiteOrderItem
liteOrderItem
:
order
.
getOrderItems
())
{
...
...
@@ -298,8 +298,8 @@ public class LiteOrderCache {
//更新对应条目的已出库数量和出库盘数
liteOrderItem
.
setOutNum
(
liteOrderItem
.
getOutNum
()
+
task
.
getNum
());
liteOrderItem
.
setOutReelCount
(
liteOrderItem
.
getOutReelCount
()
+
1
);
liteOrderItem
.
setTotalOutNum
(
liteOrderItem
.
getTotalOutNum
()
+
task
.
getNum
());
liteOrderItem
.
setTotalOutReelCount
(
liteOrderItem
.
getTotalOutReelCount
()
+
1
);
liteOrderItem
.
setTotalOutNum
(
liteOrderItem
.
getTotalOutNum
()
+
task
.
getNum
());
liteOrderItem
.
setTotalOutReelCount
(
liteOrderItem
.
getTotalOutReelCount
()
+
1
);
liteOrderItem
.
setStatus
(
task
.
getStatus
());
liteOrderItem
.
setLocInfo
(
task
.
getLocInfo
());
liteOrderItem
.
setStatus
(
OrderItemStatus
.
finish
);
...
...
@@ -332,37 +332,36 @@ public class LiteOrderCache {
//判断位置信息是否以"-"开头,如果是,则获取相同位置的orderItemId,进行通知
// if (StringUtils.isNotBlank(task.getLocInfo()) && task.getLocInfo().startsWith("-")) {
if
(
ObjectUtil
.
isNotEmpty
(
order
.
getMode
())&&
StringUtils
.
isNotBlank
(
task
.
getLocInfo
())
)
{
if
(
ObjectUtil
.
isNotEmpty
(
order
.
getMode
())
&&
StringUtils
.
isNotBlank
(
task
.
getLocInfo
())
)
{
String
locInfo
=
task
.
getLocInfo
();
List
<
String
>
itemIdList
=
new
ArrayList
<>();
itemIdList
.
add
(
task
.
getSubSourceId
());
String
locInfo
=
task
.
getLocInfo
();
List
<
String
>
itemIdList
=
new
ArrayList
<>();
itemIdList
.
add
(
task
.
getSubSourceId
());
// for (LiteOrderItem item : items) {
// if (locInfo.contains(item.getLocInfo())) {
// itemIdList.add(item.getId());
// }
// }
//先改为单盘上传
List
<
DataLog
>
dataLogList
=
dataLogManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"subSourceId"
).
in
(
itemIdList
)));
if
(
dataLogList
!=
null
&&
!
dataLogList
.
isEmpty
())
{
String
msg
=
MicronApi
.
Api007
(
order
.
getOrderNo
(),
task
.
getLocInfo
(),
dataLogList
);
for
(
LiteOrderItem
item
:
items
)
{
if
(
itemIdList
.
contains
(
item
.
getId
()))
{
if
(
ObjectUtil
.
isEmpty
(
msg
))
{
item
.
setStatus
(
OrderItemStatus
.
notify_success
);
}
else
{
item
.
setExecutFailReason
(
msg
);
item
.
setStatus
(
OrderItemStatus
.
notify_fail
);
item
.
setExecutFailReason
(
msg
);
}
//先改为单盘上传
List
<
DataLog
>
dataLogList
=
dataLogManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"subSourceId"
).
in
(
itemIdList
)));
if
(
dataLogList
!=
null
&&
!
dataLogList
.
isEmpty
())
{
String
msg
=
MicronApi
.
Api007
(
order
.
getOrderNo
(),
task
.
getLocInfo
(),
dataLogList
);
for
(
LiteOrderItem
item
:
items
)
{
if
(
itemIdList
.
contains
(
item
.
getId
()))
{
if
(
ObjectUtil
.
isEmpty
(
msg
))
{
item
.
setStatus
(
OrderItemStatus
.
notify_success
);
}
else
{
item
.
setExecutFailReason
(
msg
);
item
.
setStatus
(
OrderItemStatus
.
notify_fail
);
item
.
setExecutFailReason
(
msg
);
}
liteOrderItemManager
.
save
(
item
);
}
order
.
setOrderItems
(
items
);
liteOrderItemManager
.
save
(
item
);
}
order
.
setOrderItems
(
items
);
}
}
if
(!
order
.
isClosed
())
{
...
...
@@ -382,19 +381,19 @@ public class LiteOrderCache {
}
}
//判断是否发送成功
if
(
ObjectUtil
.
isNotEmpty
(
order
.
getMode
()))
{
if
(
liteOrderItem
.
getStatus
()==
OrderItemStatus
.
notify_fail
)
{
closed
=
false
;
if
(
ObjectUtil
.
isNotEmpty
(
order
.
getMode
()))
{
if
(
liteOrderItem
.
getStatus
()
==
OrderItemStatus
.
notify_fail
)
{
closed
=
false
;
break
;
}
}
}
if
(
closed
)
{
if
(
closed
)
{
order
.
setClosed
(
closed
);
if
(
ObjectUtil
.
isNotEmpty
(
order
.
getMode
()))
{
String
key
=
Constants
.
CACHE_DISPATCH
+
order
.
getMode
();
log
.
info
(
" mode="
+
order
.
getMode
()+
"的出库已结束,清空 key="
+
key
+
" 的cache"
);
dataCache
.
updateCache
(
key
,
""
);
if
(
ObjectUtil
.
isNotEmpty
(
order
.
getMode
()))
{
String
key
=
Constants
.
CACHE_DISPATCH
+
order
.
getMode
();
log
.
info
(
" mode="
+
order
.
getMode
()
+
"的出库已结束,清空 key="
+
key
+
" 的cache"
);
dataCache
.
updateCache
(
key
,
""
);
}
}
}
...
...
@@ -415,10 +414,10 @@ public class LiteOrderCache {
}
}
private
LiteOrder
checkoutAgain
(
DataLog
task
,
LiteOrder
order
)
{
try
{
private
LiteOrder
checkoutAgain
(
DataLog
task
,
LiteOrder
order
)
{
try
{
//出库任务,如果是工单任务,如果此料仓离线,需要补发一盘
if
(
ObjectUtil
.
isNotEmpty
(
task
.
getSourceId
()))
{
if
(
ObjectUtil
.
isNotEmpty
(
task
.
getSourceId
()))
{
StatusBean
bean
=
DevicesStatusUtil
.
getStatusBean
(
task
.
getCid
());
if
(
bean
!=
null
&&
(!
bean
.
timeOut
()))
{
//如果当前料仓在线,不处理
...
...
@@ -431,7 +430,7 @@ public class LiteOrderCache {
return
order
;
}
if
(
order
.
isClosed
()
||
order
.
isTaskFinished
())
{
if
(
order
.
isClosed
()
||
order
.
isTaskFinished
())
{
return
order
;
}
for
(
LiteOrderItem
item
:
...
...
@@ -469,28 +468,28 @@ public class LiteOrderCache {
}
log
.
info
(
"工单["
+
orderNo
+
"]任务["
+
task
.
getPosName
()+
"]取消,补发结束,任务数["
+
order
.
getTaskReelCount
()
+
"]"
);
log
.
info
(
"工单["
+
orderNo
+
"]任务["
+
task
.
getPosName
()
+
"]取消,补发结束,任务数["
+
order
.
getTaskReelCount
()
+
"]"
);
liteOrderManager
.
save
(
order
);
liteOrderMap
.
put
(
order
.
getOrderNo
(),
order
);
}
catch
(
Exception
ex
)
{
log
.
error
(
"任务["
+
task
.
getPosName
()+
"]["
+
task
.
getPartNumber
()+
"]["
+
task
.
getBarcode
()+
"]取消时,对应工单["
+
task
.
getSourceId
()+
"]["
+
task
.
getSourceName
()+
"]补发任务出错:"
+
ex
.
getMessage
());
}
catch
(
Exception
ex
)
{
log
.
error
(
"任务["
+
task
.
getPosName
()
+
"]["
+
task
.
getPartNumber
()
+
"]["
+
task
.
getBarcode
()
+
"]取消时,对应工单["
+
task
.
getSourceId
()
+
"]["
+
task
.
getSourceName
()
+
"]补发任务出错:"
+
ex
.
getMessage
());
}
return
order
;
}
public
ORDER_COLOR
getNextColor
()
{
//设置颜色
Set
<
String
>
currentColors
=
new
HashSet
<>();
// for (DataLog dataLog :taskService. getQueueTasks()) {
// currentColors.add(dataLog.getLightColor());
// }
for
(
DataLog
dataLog
:
taskService
.
getAllTasks
())
{
if
(
dataLog
.
isFinished
()||
dataLog
.
isCancel
()||
dataLog
.
isEnd
())
{
for
(
DataLog
dataLog
:
taskService
.
getAllTasks
())
{
if
(
dataLog
.
isFinished
()
||
dataLog
.
isCancel
()
||
dataLog
.
isEnd
())
{
continue
;
}
if
(
dataLog
.
isCheckOutTask
()
&&
ObjectUtil
.
isNotEmpty
(
dataLog
.
getSourceId
())&&
ObjectUtil
.
isNotEmpty
(
dataLog
.
getLightColor
()))
{
if
(
dataLog
.
isCheckOutTask
()
&&
ObjectUtil
.
isNotEmpty
(
dataLog
.
getSourceId
())
&&
ObjectUtil
.
isNotEmpty
(
dataLog
.
getLightColor
()))
{
currentColors
.
add
(
dataLog
.
getLightColor
());
}
}
...
...
@@ -501,14 +500,15 @@ public class LiteOrderCache {
/**
* 执行工单出库,批量料仓默认出库到料串上
*/
public
String
checkOutLiteOrder
(
String
orderNo
,
boolean
outBom
){
public
String
checkOutLiteOrder
(
String
orderNo
,
boolean
outBom
)
{
boolean
singleOut
=
false
;
return
checkOutLiteOrder
(
orderNo
,
outBom
,
singleOut
);
return
checkOutLiteOrder
(
orderNo
,
outBom
,
singleOut
);
}
/**
* 执行工单出库
*/
public
synchronized
String
checkOutLiteOrder
(
String
orderNo
,
boolean
outBom
,
boolean
singleOut
)
{
public
synchronized
String
checkOutLiteOrder
(
String
orderNo
,
boolean
outBom
,
boolean
singleOut
)
{
LiteOrder
cacheOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
cacheOrder
==
null
)
{
...
...
@@ -519,17 +519,16 @@ public class LiteOrderCache {
return
"smfcore.order.out.notFound"
;
}
if
(
!
cacheOrder
.
isTaskFinished
()
&&
!
cacheOrder
.
isNew
())
{
if
(!
cacheOrder
.
isTaskFinished
()
&&
!
cacheOrder
.
isNew
())
{
log
.
info
(
"工单["
+
orderNo
+
"]正在执行"
);
return
"smfcore.order.out.executing"
;
}
if
(
cacheOrder
.
isClosed
())
{
if
(
cacheOrder
.
isClosed
())
{
log
.
info
(
"工单["
+
orderNo
+
"]已关闭,无法出库"
);
return
"smfcore.order.hasClose"
;
}
ORDER_COLOR
nextColor
=
getNextColor
();
if
(
nextColor
==
null
)
{
log
.
info
(
"执行工单["
+
orderNo
+
"] outBom="
+
outBom
+
"时,已达最大可执行工单数"
);
...
...
@@ -538,8 +537,8 @@ public class LiteOrderCache {
//先查找是否已经锁定过库位,如果已经锁定过,出锁定的库位
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
cacheOrder
.
getOrderNo
());
if
(
lockPosList
!=
null
&&
lockPosList
.
size
()>
0
)
{
return
checkOutOrder
(
cacheOrder
).
getMsgKey
();
if
(
lockPosList
!=
null
&&
lockPosList
.
size
()
>
0
)
{
return
checkOutOrder
(
cacheOrder
).
getMsgKey
();
}
log
.
info
(
"开始执行工单["
+
orderNo
+
"] outBom="
+
outBom
);
...
...
@@ -580,27 +579,27 @@ public class LiteOrderCache {
int
assignNum
=
0
;
int
assignReelCount
=
0
;
while
(
assignNum
<
remainNum
||
assignReelCount
<
remainReelCount
)
{
Collection
<
String
>
excludePosIds
=
excludeOutPosIds
();
Collection
<
String
>
excludePosIds
=
excludeOutPosIds
();
String
partNumber
=
orderItem
.
getPn
();
String
reelId
=
orderItem
.
getRi
();
String
mpn
=
orderItem
.
getMpn
();
StoragePos
pos
=
null
;
if
(!
Strings
.
isNullOrEmpty
(
reelId
))
{
if
(!
Strings
.
isNullOrEmpty
(
reelId
))
{
//RI
pos
=
storagePosManager
.
getByBarcode
(
reelId
);
if
(
pos
!=
null
)
{
if
(
excludePosIds
.
contains
(
pos
.
getId
()))
{
pos
=
storagePosManager
.
getByBarcode
(
reelId
);
if
(
pos
!=
null
)
{
if
(
excludePosIds
.
contains
(
pos
.
getId
()))
{
log
.
info
(
"工单["
+
orderNo
+
"]RI出库,任务数["
+
taskReelCount
+
"]出库位置仓位【"
+
pos
.
getPosName
()
+
"】RI=["
+
pos
.
getBarcode
().
getBarcode
()
+
"]已在操作队列中,跳过不处理"
);
break
;
}
}
else
{
log
.
info
(
"工单["
+
orderNo
+
"]RI出库时,库存中未找到料盘["
+
reelId
+
"]"
);
}
else
{
log
.
info
(
"工单["
+
orderNo
+
"]RI出库时,库存中未找到料盘["
+
reelId
+
"]"
);
}
}
else
if
(
Strings
.
isNullOrEmpty
(
reelId
)
&&
!
Strings
.
isNullOrEmpty
(
partNumber
))
{
}
else
if
(
Strings
.
isNullOrEmpty
(
reelId
)
&&
!
Strings
.
isNullOrEmpty
(
partNumber
))
{
//PN
pos
=
storagePosManager
.
findPartNumberInStorages
(
availableStorageIds
,
""
,
partNumber
,
excludePosIds
,
checkoutType
,
orderItem
.
getAppendData
());
}
else
if
(
Strings
.
isNullOrEmpty
(
reelId
)
&&
Strings
.
isNullOrEmpty
(
partNumber
)
&&
!
Strings
.
isNullOrEmpty
(
mpn
)){
pos
=
storagePosManager
.
findMpnInStorages
(
availableStorageIds
,
mpn
,
excludePosIds
,
checkoutType
,
orderItem
.
getAppendData
());
pos
=
storagePosManager
.
findPartNumberInStorages
(
availableStorageIds
,
""
,
partNumber
,
excludePosIds
,
checkoutType
,
orderItem
.
getAppendData
());
}
else
if
(
Strings
.
isNullOrEmpty
(
reelId
)
&&
Strings
.
isNullOrEmpty
(
partNumber
)
&&
!
Strings
.
isNullOrEmpty
(
mpn
))
{
pos
=
storagePosManager
.
findMpnInStorages
(
availableStorageIds
,
mpn
,
excludePosIds
,
checkoutType
,
orderItem
.
getAppendData
());
}
if
(
pos
==
null
)
{
// log.error("未找到可以出库的物料[" + partNumber + "]");
...
...
@@ -610,7 +609,7 @@ public class LiteOrderCache {
assignReelCount
=
assignReelCount
+
1
;
taskReelCount
=
taskReelCount
+
1
;
log
.
info
(
"工单["
+
orderNo
+
"],任务数["
+
taskReelCount
+
"]出库位置仓位【"
+
pos
.
getPosName
()
+
"】RI=["
+
pos
.
getBarcode
().
getBarcode
()
+
"] PN=["
+
partNumber
+
"] num:"
+
pos
.
getBarcode
().
getAmount
());
DataLog
task
=
newTask
(
pos
)
;
DataLog
task
=
newTask
(
pos
);
task
.
setSourceId
(
cacheOrder
.
getId
());
task
.
setSourceName
(
cacheOrder
.
getOrderNo
());
...
...
@@ -624,7 +623,7 @@ public class LiteOrderCache {
taskService
.
addTaskToExecute
(
task
);
}
//如果是RI出库,只有一盘,出完就结束
if
(!
Strings
.
isNullOrEmpty
(
reelId
))
{
if
(!
Strings
.
isNullOrEmpty
(
reelId
))
{
break
;
}
}
...
...
@@ -633,7 +632,7 @@ public class LiteOrderCache {
}
cacheOrder
.
setTaskReelCount
(
taskReelCount
);
cacheOrder
.
setTotalTaskReelCount
(
cacheOrder
.
getTotalTaskReelCount
()
+
taskReelCount
);
cacheOrder
.
setTotalTaskReelCount
(
cacheOrder
.
getTotalTaskReelCount
()
+
taskReelCount
);
log
.
info
(
"工单["
+
orderNo
+
"]任务分配结束,任务数["
+
taskReelCount
+
"]"
);
smfApi
.
onOrderStatusChange
(
cacheOrder
);
//有需要出库的
...
...
@@ -650,6 +649,7 @@ public class LiteOrderCache {
}
return
""
;
}
/**
* 防止仓位任务重复,需要排除掉已经分配掉的出库仓位
*/
...
...
@@ -658,7 +658,7 @@ public class LiteOrderCache {
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
Collection
<
String
>
operatingPosIds
=
new
HashSet
<>();
for
(
DataLog
task
:
allTasks
)
{
if
(
task
.
isCheckOutTask
())
{
if
(
task
.
isCheckOutTask
())
{
String
posId
=
task
.
getPosId
();
if
(!
Strings
.
isNullOrEmpty
(
posId
))
{
operatingPosIds
.
add
(
task
.
getPosId
());
...
...
@@ -671,7 +671,7 @@ public class LiteOrderCache {
private
DataLog
newTask
(
StoragePos
pos
)
{
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
DataLog
task
=
new
DataLog
(
storage
,
pos
.
getBarcode
(),
pos
);
DataLog
task
=
new
DataLog
(
storage
,
pos
.
getBarcode
(),
pos
);
String
operator
=
SecurityUtils
.
getLoginUsername
();
task
.
setOperator
(
operator
);
return
task
;
...
...
@@ -679,25 +679,26 @@ public class LiteOrderCache {
/**
* 关闭工单
*
* @param orderNo
*/
public
String
closeOrder
(
String
orderNo
)
{
LiteOrder
liteOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
liteOrder
==
null
)
{
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
==
null
)
{
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
==
null
)
{
return
"smfcore.order.out.notFound"
;
}
}
//有任务的工单不能关闭
List
<
DataLog
>
allTask
=
taskService
.
getAllTasks
();
for
(
DataLog
task
:
allTask
)
{
if
(
OP
.
CHECKOUT
==
task
.
getType
()
&&
(!
task
.
isEnd
()))
{
List
<
DataLog
>
allTask
=
taskService
.
getAllTasks
();
for
(
DataLog
task
:
allTask
)
{
if
(
OP
.
CHECKOUT
==
task
.
getType
()
&&
(!
task
.
isEnd
()))
{
//更新工单状态
String
taskSourceName
=
task
.
getSourceName
();
if
(!
Strings
.
isNullOrEmpty
(
taskSourceName
)
&&
orderNo
.
equals
(
taskSourceName
))
{
log
.
info
(
"关闭工单["
+
orderNo
+
"]失败,有未完成的出库任务:"
+
task
.
getPosName
());
log
.
info
(
"关闭工单["
+
orderNo
+
"]失败,有未完成的出库任务:"
+
task
.
getPosName
());
return
"smfcore.order.close.taskNotEnd"
;
}
}
...
...
@@ -709,11 +710,12 @@ public class LiteOrderCache {
liteOrder
.
setClosed
(
true
);
liteOrderManager
.
save
(
liteOrder
);
smfApi
.
onOrderStatusChange
(
liteOrder
);
return
"smfcore.order.close.success"
;
return
"smfcore.order.close.success"
;
}
/**
* 工单详情补料出库
*
* @param orderNo
* @param orderItemId
* @return
...
...
@@ -721,46 +723,46 @@ public class LiteOrderCache {
public
ResultBean
orderItemSupplementOut
(
String
orderNo
,
String
orderItemId
)
{
LiteOrder
cacheOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
cacheOrder
==
null
)
{
cacheOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
cacheOrder
==
null
)
{
cacheOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
cacheOrder
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.order.out.notFound"
,
"未找到工单"
);
}
}
if
(
cacheOrder
.
isClosed
())
{
if
(
cacheOrder
.
isClosed
())
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.order.hasClose"
,
"工单已关闭"
);
}
List
<
String
>
orderItemIds
=
Lists
.
newArrayList
(
orderItemId
.
split
(
","
));
String
resultMsg
=
""
;
int
outCount
=
0
;
for
(
LiteOrderItem
orderItem
:
cacheOrder
.
getOrderItems
())
{
if
(
orderItemIds
.
contains
(
orderItem
.
getId
()))
{
Collection
<
String
>
excludePosIds
=
excludeOutPosIds
();
for
(
LiteOrderItem
orderItem
:
cacheOrder
.
getOrderItems
())
{
if
(
orderItemIds
.
contains
(
orderItem
.
getId
()))
{
Collection
<
String
>
excludePosIds
=
excludeOutPosIds
();
StoragePos
pos
=
null
;
String
reelId
=
orderItem
.
getRi
();
if
(
Strings
.
isNullOrEmpty
(
reelId
))
{
if
(
Strings
.
isNullOrEmpty
(
reelId
))
{
CHECKOUT_TYPE
checkoutType
=
dataCache
.
getCheckOutType
();
List
<
String
>
availableStorageIds
=
dataCache
.
getAvailableStorageIds
();
String
partNumber
=
orderItem
.
getPn
();
//PN
pos
=
storagePosManager
.
findPartNumberInStorages
(
availableStorageIds
,
partNumber
,
excludePosIds
,
checkoutType
);
}
else
{
}
else
{
//RI
pos
=
storagePosManager
.
getByBarcode
(
orderItem
.
getRi
());
pos
=
storagePosManager
.
getByBarcode
(
orderItem
.
getRi
());
}
if
(
pos
==
null
)
{
log
.
info
(
"PN["
+
orderItem
.
getRi
()+
"]RI["
+
orderItem
.
getPn
()+
"]出库时,未找到物料,忽略"
);
log
.
info
(
"PN["
+
orderItem
.
getRi
()
+
"]RI["
+
orderItem
.
getPn
()
+
"]出库时,未找到物料,忽略"
);
//return "smfcore.order.supplementOutFail";
continue
;
}
if
(
excludePosIds
.
contains
(
pos
.
getId
()))
{
if
(
excludePosIds
.
contains
(
pos
.
getId
()))
{
log
.
info
(
"工单["
+
orderNo
+
"]RI出库,仓位【"
+
pos
.
getPosName
()
+
"】RI=["
+
pos
.
getBarcode
().
getBarcode
()
+
"]已在操作队列中,跳过不处理"
);
}
else
{
}
else
{
outCount
=
outCount
+
1
;
log
.
info
(
"工单["
+
orderNo
+
"]["
+
orderItem
.
getId
()+
"]补料出库:仓位["
+
pos
.
getPosName
()
+
"]RI=["
+
pos
.
getBarcode
().
getBarcode
()
+
"] PN=["
+
orderItem
.
getPn
()
+
"] num:"
+
pos
.
getBarcode
().
getAmount
());
DataLog
task
=
newTask
(
pos
)
;
log
.
info
(
"工单["
+
orderNo
+
"]["
+
orderItem
.
getId
()
+
"]补料出库:仓位["
+
pos
.
getPosName
()
+
"]RI=["
+
pos
.
getBarcode
().
getBarcode
()
+
"] PN=["
+
orderItem
.
getPn
()
+
"] num:"
+
pos
.
getBarcode
().
getAmount
());
DataLog
task
=
newTask
(
pos
);
task
.
setSourceId
(
cacheOrder
.
getId
());
task
.
setSourceName
(
cacheOrder
.
getOrderNo
());
...
...
@@ -770,23 +772,23 @@ public class LiteOrderCache {
// task.setLightColor(nextColor.getRgb());
task
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
// task = dataLogDao.save(task);
try
{
try
{
taskService
.
addTaskToExecute
(
task
);
}
catch
(
Exception
e
)
{
String
msg
=
"工单["
+
orderNo
+
"]["
+
orderItem
.
getId
()+
"]补料出库:仓位["
+
pos
.
getPosName
()
+
"]RI=["
+
pos
.
getBarcode
().
getBarcode
()
+
"] PN=["
+
orderItem
.
getPn
()
+
"] num:"
+
pos
.
getBarcode
().
getAmount
();
log
.
error
(
"补料生成任务出错["
+
msg
+
"]:"
+
e
.
getMessage
());
}
catch
(
Exception
e
)
{
String
msg
=
"工单["
+
orderNo
+
"]["
+
orderItem
.
getId
()
+
"]补料出库:仓位["
+
pos
.
getPosName
()
+
"]RI=["
+
pos
.
getBarcode
().
getBarcode
()
+
"] PN=["
+
orderItem
.
getPn
()
+
"] num:"
+
pos
.
getBarcode
().
getAmount
();
log
.
error
(
"补料生成任务出错["
+
msg
+
"]:"
+
e
.
getMessage
());
}
}
}
}
if
(
outCount
>
0
)
{
if
(
outCount
>
0
)
{
cacheOrder
.
setTaskReelCount
(
outCount
);
cacheOrder
.
setTaskFinishedTime
(-
1
);
cacheOrder
.
setFinishedReelCount
(
0
);
liteOrderManager
.
save
(
cacheOrder
);
liteOrderMap
.
put
(
cacheOrder
.
getOrderNo
(),
cacheOrder
);
return
ResultBean
.
newErrorResult
(
0
,
"smfcore.order.supplement.result"
,
"操作成功,共出库"
+
outCount
+
"盘物料"
);
return
ResultBean
.
newErrorResult
(
0
,
"smfcore.order.supplement.result"
,
"操作成功,共出库"
+
outCount
+
"盘物料"
);
}
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.order.supplementOutFail"
,
"补料出库失败,无可出库料盘"
);
}
...
...
@@ -825,26 +827,47 @@ public class LiteOrderCache {
}
public
synchronized
void
preTaskCheckOut
(
LiteOrder
order
,
String
operationId
,
List
<
Material
>
materialList
)
{
public
synchronized
String
preTaskCheckOut
(
LiteOrder
order
,
String
operationId
,
List
<
Material
>
materialList
,
boolean
isRetry
)
{
order
.
setStatus
(
LITEORDER_STATUS
.
TAILS
);
order
.
setTaskReelCount
(
0
);
order
.
setFinishedReelCount
(
0
);
log
.
info
(
"preTaskCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] operatetionId ["
+
order
.
getOperationId
()
+
"]开始出库
"
);
log
.
info
(
"preTaskCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] operatetionId ["
+
order
.
getOperationId
()
+
"]开始出库
,isRetry="
+
isRetry
);
int
taskReelCount
=
0
;
List
<
StoragePos
>
storagePosList
=
new
ArrayList
<>();
List
<
String
>
barcodeList
=
new
ArrayList
<>();
if
(
isRetry
)
{
materialList
=
new
ArrayList
<>();
for
(
LiteOrderItem
orderItem
:
order
.
getOrderItems
())
{
if
(
orderItem
.
getStatus
().
equals
(
OrderItemStatus
.
executFail
))
{
Material
material
=
new
Material
();
material
.
setSerialNum
(
orderItem
.
getRi
());
material
.
setPartNumber
(
orderItem
.
getPn
());
materialList
.
add
(
material
);
barcodeList
.
add
(
orderItem
.
getRi
());
}
}
if
(
materialList
.
size
()
<
0
)
{
log
.
info
(
"preTaskCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] 未找到可以retry的物料"
);
return
""
;
}
storagePosList
=
storagePosManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"barcode.barcode"
).
in
(
barcodeList
)));
}
else
{
//提取barcode
barcodeList
=
materialList
.
stream
().
map
(
item
->
item
.
getSerialNum
()).
collect
(
Collectors
.
toList
());
storagePosList
=
storagePosManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"barcode.barcode"
).
in
(
barcodeList
)));
if
(
storagePosList
!=
null
&&
!
storagePosList
.
isEmpty
())
{
materialList
=
storagePosList
.
stream
().
map
(
item
->
{
Material
material
=
new
Material
();
material
.
setSerialNum
(
item
.
getBarcode
().
getBarcode
());
material
.
setPartNumber
(
item
.
getBarcode
().
getPartNumber
());
return
material
;
}).
collect
(
Collectors
.
toList
());
}
//mes提前扣除,扣除成功的直接出库,失败的标记状态
//提取barcode
List
<
String
>
barcodeList
=
materialList
.
stream
().
map
(
item
->
item
.
getSerialNum
()).
collect
(
Collectors
.
toList
());
List
<
StoragePos
>
storagePosList
=
storagePosManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"barcode.barcode"
).
in
(
barcodeList
)));
if
(
storagePosList
!=
null
&&
!
storagePosList
.
isEmpty
())
{
materialList
=
storagePosList
.
stream
().
map
(
item
->
{
Material
material
=
new
Material
();
material
.
setSerialNum
(
item
.
getBarcode
().
getBarcode
());
material
.
setPartNumber
(
item
.
getBarcode
().
getPartNumber
());
return
material
;
}).
collect
(
Collectors
.
toList
());
}
//mes提前扣除,扣除成功的直接出库,失败的标记状态
List
<
TrackStatus
>
trackStatusList
=
new
ArrayList
<>();
...
...
@@ -867,7 +890,9 @@ public class LiteOrderCache {
}
else
{
orderItem
.
setNeedNum
(
storagePos
.
getBarcode
().
getAmount
());
TrackStatus
trackStatus
=
trackStatusList
.
stream
().
filter
(
item
->
ri
.
equals
(
item
.
getSerialNum
())).
findAny
().
orElse
(
null
);
if
(
ObjectUtil
.
isEmpty
(
orderItem
.
getPn
()))
{
orderItem
.
setPn
(
storagePos
.
getBarcode
().
getPartNumber
());
}
if
(
trackStatus
!=
null
&&
trackStatus
.
isSuccess
())
{
//生成任务
...
...
@@ -882,6 +907,7 @@ public class LiteOrderCache {
taskReelCount
++;
//设置状态.正在出库
orderItem
.
setStatus
(
OrderItemStatus
.
executing
);
orderItem
.
setExecutFailReason
(
""
);
log
.
info
(
"preTaskCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] operatetionId ["
+
order
.
getOperationId
()
+
"] ,pn["
+
orderItem
.
getPn
()
+
"] ,RI["
+
ri
+
"] 验证成功,开始出库,累计出库盘数="
+
taskReelCount
);
}
else
{
...
...
@@ -903,6 +929,21 @@ public class LiteOrderCache {
log
.
info
(
"preTaskCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] operatetionId ["
+
order
.
getOperationId
()
+
"] 出库完成,累计任务数="
+
taskReelCount
);
order
.
setTaskReelCount
(
taskReelCount
);
order
.
setTotalTaskReelCount
(
order
.
getTotalTaskReelCount
()
+
taskReelCount
);
int
currTask
=
0
;
if
(
isRetry
)
{
//判断是否之前有未结束任务
List
<
DataLog
>
dataLogs
=
new
ArrayList
<>();
dataLogs
.
addAll
(
taskService
.
getQueueTasks
());
for
(
DataLog
log
:
dataLogs
)
{
if
(
log
.
isCheckOutTask
()
&&
ObjectUtil
.
isNotEmpty
(
log
.
getSourceId
())
&&
log
.
getSourceId
().
equals
(
order
.
getId
()))
{
currTask
++;
}
}
if
(
currTask
>
0
)
{
log
.
info
(
"dispatchCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] 还有 ["
+
currTask
+
"] 未完成的出库任务"
);
}
}
if
(
taskReelCount
<=
0
)
{
if
(
order
.
isOutTails
())
{
order
.
setStatus
(
LITEORDER_STATUS
.
TAILS_FINISHED
);
...
...
@@ -911,12 +952,13 @@ public class LiteOrderCache {
}
liteOrderManager
.
save
(
order
);
addOrderToMap
(
order
);
return
""
;
}
/**
* 工单挑料,OutSide Shelf Dispatch Controlled Dispatch
*/
public
synchronized
String
OrderReady
(
String
orderNo
,
String
lineId
)
{
public
synchronized
String
OrderReady
(
String
orderNo
,
String
lineId
)
{
LiteOrder
cacheOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
cacheOrder
==
null
)
{
...
...
@@ -1054,9 +1096,9 @@ public class LiteOrderCache {
//调用API009进行验证
Map
<
String
,
MaterialStatus
>
apiResultMap
=
MicronApi
.
Api009
(
cacheOrder
.
getOperationId
(),
lineId
,
allBarcodes
);
Map
<
String
,
MaterialStatus
>
apiResultMap
=
MicronApi
.
Api009
(
cacheOrder
.
getOperationId
(),
lineId
,
allBarcodes
);
List
<
StoragePos
>
lockPos
=
new
ArrayList
<>();
List
<
StoragePos
>
lockPos
=
new
ArrayList
<>();
for
(
LiteOrderItem
item
:
newItems
)
{
item
.
setOutNum
(
0
);
...
...
@@ -1066,7 +1108,7 @@ public class LiteOrderCache {
for
(
LiteOrderItem
reelItem
:
item
.
getSelectItems
())
{
MaterialStatus
s
=
apiResultMap
.
get
(
reelItem
.
getRi
());
if
(
s
!=
null
&&
s
.
isAvailable
())
{
if
(
s
!=
null
&&
s
.
isAvailable
())
{
reelItem
.
setStatus
(
OrderItemStatus
.
CheckOk
);
StoragePos
pos
=
storagePosManager
.
getByBarcode
(
s
.
getSerialNum
());
log
.
info
(
"工单【"
+
orderNo
+
"】PN ["
+
item
.
getPn
()
+
"] RI ["
+
item
.
getRi
()
+
"] API009 验证成功,更改状态为 CheckOk ,锁定库位【"
+
pos
.
getPosName
()
+
"】"
);
...
...
@@ -1112,13 +1154,12 @@ public class LiteOrderCache {
}
public
synchronized
void
dispatchCheckOut
(
LiteOrder
order
)
{
public
synchronized
String
dispatchCheckOut
(
LiteOrder
order
,
boolean
isRetry
)
{
order
.
setStatus
(
LITEORDER_STATUS
.
TAILS
);
order
.
setTaskReelCount
(
0
);
order
.
setFinishedReelCount
(
0
);
log
.
info
(
"dispatchCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] operatetionId ["
+
order
.
getOperationId
()
+
"]开始出库
"
);
log
.
info
(
"dispatchCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] operatetionId ["
+
order
.
getOperationId
()
+
"]开始出库
,isRetry="
+
isRetry
);
int
taskReelCount
=
0
;
List
<
String
>
needOutBarcode
=
new
ArrayList
<>();
...
...
@@ -1127,13 +1168,24 @@ public class LiteOrderCache {
for
(
LiteOrderItem
selItem
:
item
.
getSelectItems
())
{
if
(
selItem
.
getStatus
().
equals
(
OrderItemStatus
.
CheckOk
))
{
//只出checkOK的
needOutBarcode
.
add
(
selItem
.
getRi
());
if
(
isRetry
)
{
if
(
selItem
.
getStatus
().
equals
(
OrderItemStatus
.
executFail
))
{
//retry检查出库失败的
needOutBarcode
.
add
(
selItem
.
getRi
());
}
}
else
{
if
(
selItem
.
getStatus
().
equals
(
OrderItemStatus
.
CheckOk
))
{
//只出checkOK的
needOutBarcode
.
add
(
selItem
.
getRi
());
}
}
}
}
if
(
needOutBarcode
.
size
()
<
0
)
{
log
.
info
(
"dispatchCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] 未找到可以retry的物料"
);
return
""
;
}
List
<
StoragePos
>
storagePosList
=
storagePosManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"barcode.barcode"
).
in
(
needOutBarcode
)));
List
<
Material
>
materialList
=
new
ArrayList
<>();
...
...
@@ -1173,11 +1225,12 @@ public class LiteOrderCache {
taskReelCount
++;
//设置状态.正在出库
selItem
.
setStatus
(
OrderItemStatus
.
executing
);
selItem
.
setExecutFailReason
(
""
);
outNum
+=
storagePos
.
getBarcode
().
getAmount
();
outReelCount
+=
1
;
log
.
info
(
"dispatchCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] operatetionId ["
+
order
.
getOperationId
()
+
"] ,pn["
+
orderItem
.
getPn
()
+
"] ,RI["
+
ri
+
"] 验证成功,开始出库,累计出库盘数="
+
taskReelCount
);
}
else
{
if
(
trackStatus
!=
null
)
{
if
(
trackStatus
!=
null
)
{
selItem
.
setExecutFailReason
(
trackStatus
.
getDescription
());
}
selItem
.
setStatus
(
OrderItemStatus
.
executFail
);
...
...
@@ -1198,7 +1251,24 @@ public class LiteOrderCache {
log
.
info
(
"dispatchCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] operatetionId ["
+
order
.
getOperationId
()
+
"] 出库完成,累计任务数="
+
taskReelCount
);
order
.
setTaskReelCount
(
taskReelCount
);
order
.
setTotalTaskReelCount
(
order
.
getTotalTaskReelCount
()
+
taskReelCount
);
if
(
taskReelCount
<=
0
)
{
int
currTask
=
0
;
if
(
isRetry
)
{
//判断是否之前有未结束任务
List
<
DataLog
>
dataLogs
=
new
ArrayList
<>();
dataLogs
.
addAll
(
taskService
.
getQueueTasks
());
for
(
DataLog
log
:
dataLogs
)
{
if
(
log
.
isCheckOutTask
()
&&
ObjectUtil
.
isNotEmpty
(
log
.
getSourceId
())
&&
log
.
getSourceId
().
equals
(
order
.
getId
()))
{
currTask
++;
}
}
if
(
currTask
>
0
)
{
log
.
info
(
"dispatchCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] 还有 ["
+
currTask
+
"] 未完成的出库任务"
);
}
}
if
(
taskReelCount
<=
0
&&
currTask
<=
0
)
{
if
(
order
.
isOutTails
())
{
order
.
setStatus
(
LITEORDER_STATUS
.
TAILS_FINISHED
);
}
...
...
@@ -1206,5 +1276,6 @@ public class LiteOrderCache {
}
liteOrderManager
.
save
(
order
);
addOrderToMap
(
order
);
return
""
;
}
}
src/main/java/com/neotel/smfcore/custom/micron1053/api/MicronApi.java
查看文件 @
d3ed66f
...
...
@@ -203,7 +203,7 @@ public class MicronApi {
throw
new
ApiException
(
"smfcore.api.001."
+
errmsg
,
error
+
";"
+
errmsg
,
new
String
[]{});
}
else
{
log
.
info
(
"API001 ,验证失败,获取数据失败:"
+
errmsg
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API001
"
});
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API001
: "
+
result
.
getResponseData
()
});
}
}
...
...
@@ -357,7 +357,7 @@ public class MicronApi {
}
else
{
log
.
info
(
"API002 ,接口通信失败"
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API002
"
});
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API002
: "
+
result
.
getResponseData
()
});
}
return
resultMap
;
}
...
...
@@ -433,7 +433,7 @@ public class MicronApi {
log
.
info
(
"API004 ,接口通信失败"
);
//throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API004"});
String
msg
=
"API004 Failed to get data"
;
String
msg
=
"API004
: "
+
result
.
getResponseData
()+
"
Failed to get data"
;
Object
message
=
result
.
getResult
(
"message"
,
false
);
if
(
message
!=
null
){
msg
=
message
.
toString
();
...
...
@@ -453,40 +453,46 @@ public class MicronApi {
String
url
=
config
.
getUrl
(
config
.
api_name_005
);
List
<
Material
>
materialList
=
new
ArrayList
<>();
if
(
Debug
)
{
materialList
.
add
(
new
Material
(
"serialNum1"
,
"partNumber1"
));
if
(
Debug
)
{
materialList
.
add
(
new
Material
(
"serialNum1"
,
"partNumber1"
));
return
materialList
;
}
url
=
MessageFormat
.
format
(
url
,
operationId
,
linePrepOrderId
);
url
=
MessageFormat
.
format
(
url
,
operationId
,
linePrepOrderId
);
try
{
log
.
info
(
"调用MES接口 API005: url="
+
url
+
""
);
MicronResult
result
=
HttpHelper
.
getMicronJson
(
url
);
String
errMsg
=
getDErrorMsg
(
result
);
if
(
result
.
isOk
()
)
{
List
<
Object
>
objects
=
result
.
getResult
(
"materials"
,
false
);
if
(
objects
==
null
||
objects
.
size
()<=
0
){
log
.
info
(
"API005 ,接口通信失败"
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API005"
});
String
errMsg
=
getDErrorMsg
(
result
);
if
(
result
.
isOk
())
{
List
<
Object
>
objects
=
result
.
getResult
(
"materials"
,
false
);
if
(
objects
==
null
||
objects
.
size
()
<=
0
)
{
if
(
ObjectUtil
.
isNotEmpty
(
errMsg
))
{
log
.
info
(
"API005 ,接口通信失败:"
+
errMsg
);
throw
new
ApiException
(
errMsg
);
}
else
{
log
.
info
(
"API005 ,接口通信失败 :"
+
result
.
getResponseData
());
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API005 : "
+
result
.
getResponseData
()});
}
}
for
(
Object
object
:
objects
)
{
Material
material
=
JsonUtil
.
toObj
(
JsonUtil
.
toJsonStr
(
object
)
,
Material
.
class
);
Material
material
=
JsonUtil
.
toObj
(
JsonUtil
.
toJsonStr
(
object
),
Material
.
class
);
materialList
.
add
(
material
);
}
return
materialList
;
}
else
if
(
ObjectUtil
.
isNotEmpty
(
errMsg
))
{
return
materialList
;
}
else
if
(
ObjectUtil
.
isNotEmpty
(
errMsg
))
{
log
.
info
(
"API005 ,接口通信失败:"
+
errMsg
);
throw
new
ApiException
(
errMsg
);
}
else
{
}
else
{
log
.
info
(
"API005 ,接口通信失败
"
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API005
"
});
log
.
info
(
"API005 ,接口通信失败
:"
+
result
.
getResponseData
()
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API005
: "
+
result
.
getResponseData
()
});
}
}
catch
(
Exception
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
return
null
;
return
null
;
}
}
...
...
@@ -524,8 +530,14 @@ public class MicronApi {
List
<
Object
>
objects
=
result
.
getResult
(
"materials"
,
false
);
if
(
objects
==
null
||
objects
.
size
()<=
0
){
log
.
info
(
"API006 ,接口通信失败"
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API006"
});
if
(
ObjectUtil
.
isNotEmpty
(
errMsg
)){
log
.
info
(
"API006 ,接口通信失败:"
+
errMsg
);
throw
new
ApiException
(
errMsg
);
}
else
{
log
.
info
(
"API006 ,接口通信失败"
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API006:"
+
result
.
getResponseData
()});
}
}
for
(
Object
object
:
objects
)
{
...
...
@@ -539,7 +551,7 @@ public class MicronApi {
}
else
{
log
.
info
(
"API006 ,接口通信失败"
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API006
"
});
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API006
:"
+
result
.
getResponseData
()
});
}
}
catch
(
Exception
e
)
{
...
...
@@ -603,7 +615,7 @@ public class MicronApi {
// throw new ApiException(errMsg);
}
else
{
log
.
info
(
"API007 ,接口通信失败"
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API007
"
});
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API007
: "
+
micronResult
.
getResponseData
()
});
}
}
catch
(
ApiException
e
)
{
...
...
@@ -650,7 +662,7 @@ public class MicronApi {
}
else
{
log
.
info
(
"API008 ,接口通信失败"
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API008
"
});
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API008
: "
+
micronResult
.
getResponseData
()
});
}
}
catch
(
ApiException
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
...
...
@@ -731,7 +743,7 @@ public class MicronApi {
}
else
{
log
.
info
(
"API009 ,接口通信失败"
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API009
"
});
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API009
: "
+
micronResult
.
getResponseData
()
});
}
}
catch
(
ApiException
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
...
...
@@ -741,7 +753,7 @@ public class MicronApi {
public
static
List
<
TrackStatus
>
Api010
(
String
operationId
,
List
<
Material
>
materialList
)
{
//出库前预扣
List
<
TrackStatus
>
statusList
=
new
ArrayList
<>();
if
(
Debug
){
for
(
Material
m
:
...
...
@@ -780,11 +792,6 @@ public class MicronApi {
TrackStatus
s
=
JsonUtil
.
toObj
(
JsonUtil
.
toJsonStr
(
obj
)
,
TrackStatus
.
class
);
statusList
.
add
(
s
);
}
// if(statusList==null||statusList.size()<=0){
//
// log.info("API010 ,接口通信失败");
// throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API010"});
// }
}
if
(
ObjectUtil
.
isNotEmpty
(
errMsg
)&&(
statusList
==
null
||
statusList
.
size
()<=
0
)
){
for
(
Material
m
:
...
...
@@ -804,7 +811,7 @@ public class MicronApi {
}
else
{
log
.
info
(
"API010 ,接口通信失败"
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API010
"
});
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"API010
: "
+
micronResult
.
getResponseData
()
});
}
//statusList = micronResult.getResult("trackStatus");
}
catch
(
Exception
e
)
{
...
...
@@ -847,7 +854,7 @@ public class MicronApi {
}
else
{
log
.
info
(
"Api011 ,接口通信失败"
);
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"Api011
"
});
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"Api011
: "
+
result
.
getResponseData
()
});
}
}
catch
(
Exception
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
...
...
@@ -946,7 +953,7 @@ public class MicronApi {
if
(
ObjectUtil
.
isNotEmpty
(
msg
))
{
return
msg
;
}
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"Api201
"
});
throw
new
ApiException
(
"smfcore.api.fail"
,
"{0} Failed to get data"
,
new
String
[]{
"Api201
: "
+
result
.
getResponseData
()
});
}
catch
(
ApiException
e
)
{
log
.
error
(
url
+
"出错"
,
e
);
return
e
.
getMessage
();
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronDispatchController.java
查看文件 @
d3ed66f
...
...
@@ -534,6 +534,7 @@ private IStoragePosManager storagePosManager;
public
ResultBean
checkOut
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
String
mode
=
params
.
get
(
"mode"
).
toString
();
log
.
info
(
" checkOut :mode="
+
mode
+
",开始确认出库"
);
//判断有没有生成任务
LiteOrder
order
=
getOrderByMode
(
mode
);
...
...
@@ -542,7 +543,7 @@ private IStoragePosManager storagePosManager;
}
//调用API010扣除库存,扣除成功的才可以出库
liteOrderCache
.
dispatchCheckOut
(
order
);
liteOrderCache
.
dispatchCheckOut
(
order
,
false
);
//工单开始出库
...
...
@@ -556,48 +557,58 @@ private IStoragePosManager storagePosManager;
public
ResultBean
retry
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
String
mode
=
params
.
get
(
"mode"
).
toString
();
log
.
info
(
" retry :mode="
+
mode
+
",
入库完成发送失败的,重新发送,其他状态暂不处理
"
);
log
.
info
(
" retry :mode="
+
mode
+
",
重新出库
"
);
//判断有没有生成任务
LiteOrder
order
=
getOrderByMode
(
mode
);
LiteOrder
order
=
getOrderByMode
(
mode
);
if
(
order
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
List
<
LiteOrderItem
>
liteOrderItemList
=
order
.
getOrderItems
();
List
<
LiteOrderItem
>
orderItems
=
new
ArrayList
<>();
boolean
canClose
=
true
;
for
(
LiteOrderItem
orderItem
:
liteOrderItemList
)
{
if
(
orderItem
.
getStatus
()
==
OrderItemStatus
.
notify_fail
)
{
String
id
=
orderItem
.
getId
();
List
<
DataLog
>
dataLogList
=
dataLogManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"subSourceId"
).
is
(
id
)));
if
(
dataLogList
!=
null
&&
!
dataLogList
.
isEmpty
())
{
log
.
info
(
"retry: ["
+
order
.
getOrderNo
()
+
"] ["
+
orderItem
.
getRi
()
+
"] 重发API007 "
);
String
msg
=
MicronApi
.
Api007
(
order
.
getOrderNo
(),
order
.
getId
(),
dataLogList
);
if
(
ObjectUtil
.
isEmpty
(
msg
))
{
orderItem
.
setStatus
(
OrderItemStatus
.
notify_success
);
}
else
{
orderItem
.
setExecutFailReason
(
msg
);
orderItem
.
setStatus
(
OrderItemStatus
.
notify_fail
);
canClose
=
false
;
}
liteOrderItemManager
.
save
(
orderItem
);
}
}
else
if
(
orderItem
.
getStatus
()==
OrderItemStatus
.
executing
){
canClose
=
false
;
}
orderItems
.
add
(
orderItem
);
}
order
.
setOrderItems
(
orderItems
);
if
(
canClose
){
//可以关闭工单
CloseOrder
(
order
);
}
else
{
liteOrderCache
.
addOrderToMap
(
order
);
}
liteOrderCache
.
dispatchCheckOut
(
order
,
true
);
return
ResultBean
.
newOkResult
(
""
);
// //判断有没有生成任务
// LiteOrder order=getOrderByMode(mode);
// if (order == null) {
// return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
// }
// List<LiteOrderItem> liteOrderItemList=order.getOrderItems();
// List<LiteOrderItem> orderItems = new ArrayList<>();
// boolean canClose=true;
// for (LiteOrderItem orderItem :
// liteOrderItemList) {
// if (orderItem.getStatus() == OrderItemStatus.notify_fail) {
// String id = orderItem.getId();
// List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").is(id)));
// if (dataLogList != null && !dataLogList.isEmpty()) {
//
// log.info("retry: [" + order.getOrderNo() + "] [" + orderItem.getRi() + "] 重发API007 ");
// String msg = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList);
// if (ObjectUtil.isEmpty(msg)) {
// orderItem.setStatus(OrderItemStatus.notify_success);
// } else {
// orderItem.setExecutFailReason(msg);
// orderItem.setStatus(OrderItemStatus.notify_fail);
// canClose=false;
// }
// liteOrderItemManager.save(orderItem);
//
// }
// }else if(orderItem.getStatus()==OrderItemStatus.executing){
// canClose=false;
// }
// orderItems.add(orderItem);
// }
// order.setOrderItems(orderItems);
// if(canClose){
// //可以关闭工单
// CloseOrder(order);
// }else{
//
// liteOrderCache.addOrderToMap(order);
// }
// return ResultBean.newOkResult("");
}
private
void
CloseOrder
(
LiteOrder
order
)
{
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronPreTaskController.java
查看文件 @
d3ed66f
...
...
@@ -221,7 +221,8 @@ public class MicronPreTaskController {
liteOrderCache
.
addOrderToMap
(
liteOrder
);
log
.
info
(
"submit 勾选后,生成工单:["
+
operationId
+
"]["
+
mode
+
"]"
);
//开始查询是否可以出库
liteOrderCache
.
preTaskCheckOut
(
liteOrder
,
operationId
,
materialList
);
String
msg
=
liteOrderCache
.
preTaskCheckOut
(
liteOrder
,
operationId
,
materialList
,
false
);
}
}
catch
(
Exception
ex
){
...
...
@@ -258,53 +259,65 @@ public class MicronPreTaskController {
@AnonymousAccess
public
ResultBean
retry
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
String
mode
=
params
.
get
(
"mode"
).
toString
();
log
.
info
(
" retry :mode="
+
mode
+
",
入库完成发送失败的,重新发送,其他状态暂不处理
"
);
String
mode
=
params
.
get
(
"mode"
).
toString
();
log
.
info
(
" retry :mode="
+
mode
+
",
重新出库
"
);
TaskDto
dto
=
getTaskDtoByMode
(
mode
);
if
(
dto
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
//判断有没有生成任务
LiteOrder
order
=
getOrderByMode
(
mode
);
LiteOrder
order
=
getOrderByMode
(
mode
);
if
(
order
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
List
<
LiteOrderItem
>
liteOrderItemList
=
order
.
getOrderItems
();
List
<
LiteOrderItem
>
orderItems
=
new
ArrayList
<>();
boolean
canClose
=
true
;
for
(
LiteOrderItem
orderItem
:
liteOrderItemList
)
{
if
(
orderItem
.
getStatus
()
==
OrderItemStatus
.
notify_fail
)
{
String
id
=
orderItem
.
getId
();
List
<
DataLog
>
dataLogList
=
dataLogManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"subSourceId"
).
is
(
id
)));
if
(
dataLogList
!=
null
&&
!
dataLogList
.
isEmpty
())
{
log
.
info
(
"retry: ["
+
order
.
getOrderNo
()
+
"] ["
+
orderItem
.
getRi
()
+
"] 重发API007 "
);
String
msg
=
MicronApi
.
Api007
(
order
.
getOrderNo
(),
order
.
getId
(),
dataLogList
);
if
(
ObjectUtil
.
isEmpty
(
msg
))
{
orderItem
.
setStatus
(
OrderItemStatus
.
notify_success
);
}
else
{
orderItem
.
setExecutFailReason
(
msg
);
orderItem
.
setStatus
(
OrderItemStatus
.
notify_fail
);
canClose
=
false
;
}
liteOrderItemManager
.
save
(
orderItem
);
}
}
else
if
(
orderItem
.
getStatus
()==
OrderItemStatus
.
executing
){
canClose
=
false
;
try
{
//开始查询是否可以出库
String
msg
=
liteOrderCache
.
preTaskCheckOut
(
order
,
dto
.
getOperationId
(),
new
ArrayList
<>(),
true
);
if
(
ObjectUtil
.
isNotEmpty
(
msg
))
{
return
ResultBean
.
newErrorResult
(-
1
,
msg
,
"操作失败"
);
}
orderItems
.
add
(
orderItem
);
}
catch
(
Exception
ex
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
order
.
setOrderItems
(
orderItems
);
if
(
canClose
){
//可以关闭工单
CloseOrder
(
order
);
}
else
{
liteOrderCache
.
addOrderToMap
(
order
);
}
return
ResultBean
.
newOkResult
(
""
);
// List<LiteOrderItem> liteOrderItemList=order.getOrderItems();
// List<LiteOrderItem> orderItems = new ArrayList<>();
// boolean canClose=true;
// for (LiteOrderItem orderItem :
// liteOrderItemList) {
// if (orderItem.getStatus() == OrderItemStatus.notify_fail) {
// String id = orderItem.getId();
// List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").is(id)));
// if (dataLogList != null && !dataLogList.isEmpty()) {
//
// log.info("retry: [" + order.getOrderNo() + "] [" + orderItem.getRi() + "] 重发API007 ");
// String msg = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList);
// if (ObjectUtil.isEmpty(msg)) {
// orderItem.setStatus(OrderItemStatus.notify_success);
// } else {
// orderItem.setExecutFailReason(msg);
// orderItem.setStatus(OrderItemStatus.notify_fail);
// canClose=false;
// }
// liteOrderItemManager.save(orderItem);
//
// }
// }else if(orderItem.getStatus()==OrderItemStatus.executing){
// canClose=false;
// }
// orderItems.add(orderItem);
// }
// order.setOrderItems(orderItems);
// if(canClose){
// //可以关闭工单
// CloseOrder(order);
// }else{
//
// liteOrderCache.addOrderToMap(order);
// }
// return ResultBean.newOkResult("");
}
...
...
src/main/resources/messages.properties
查看文件 @
d3ed66f
...
...
@@ -360,6 +360,7 @@ smfcore.paretoChart=\u5E15\u7D2F\u6258\u56FE
smfcore.selfAudit.hasOutTask
=
\u
5E93
\u
4F4D[{0}]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1
smfcore.error.barcode.hastask
=
\u6761\u7801
[0]
\u
5DF2
\u6709\u5165\u
5E93
\u
4EFB
\u
52A1
smfcore.error.barcode.hasOutTask
=
\u
5E8F
\u5217\u
53F7[0]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1
\u
FF0C
\u
51FA
\u
5E93
\u
524D
\u
4E0D
\u
5F97
\u5165\u
5E93
\u
76F8
\u
540C
\u
5E8F
\u5217\u
53F7
\u7269\u6599
smfcore.error.noRetryReel=No material found to retry
#smfclient.nlp.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0}
#smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1}
#smfclient.nlp.inputOk={0}\u5165\u5E93\u5230{1}\u6210\u529F
...
...
src/main/resources/messages_en_US.properties
查看文件 @
d3ed66f
...
...
@@ -358,4 +358,5 @@ smfcore.api.toXray={0}Need to Xray
smfcore.paretoChart
=
Pareto chart
smfcore.selfAudit.hasOutTask
=
The location [{0}] already has a release task
smfcore.error.barcode.hastask
=
Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask
=
Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
\ No newline at end of file
smfcore.error.barcode.hasOutTask
=
Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
smfcore.error.noRetryReel
=
No material found to retry
\ No newline at end of file
src/main/resources/messages_ja_JP.properties
查看文件 @
d3ed66f
...
...
@@ -353,4 +353,5 @@ smfcore.micron.apiClose=Not yet open
smfcore.paretoChart
=
\u
30D1
\u
30EC
\u
30FC
\u
30C8
\u
56F3
smfcore.selfAudit.hasOutTask
=
\u
5E93
\u
4F4D[{0}]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1
smfcore.error.barcode.hastask
=
Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask
=
Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
\ No newline at end of file
smfcore.error.barcode.hasOutTask
=
Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
smfcore.error.noRetryReel
=
No material found to retry
\ No newline at end of file
src/main/resources/messages_zh_CN.properties
查看文件 @
d3ed66f
...
...
@@ -353,4 +353,5 @@ smfcore.micron.apiClose=API\u529F\u80FD\u672A\u5F00\u653E
smfcore.paretoChart
=
\u
5E15
\u
7D2F
\u6258\u
56FE
smfcore.selfAudit.hasOutTask
=
\u
5E93
\u
4F4D[{0}]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1
smfcore.error.barcode.hastask
=
Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask
=
\u
5E8F
\u5217\u
53F7[0]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1
\u
FF0C
\u
51FA
\u
5E93
\u
524D
\u
4E0D
\u
5F97
\u5165\u
5E93
\u
76F8
\u
540C
\u
5E8F
\u5217\u
53F7
\u7269\u6599
\ No newline at end of file
smfcore.error.barcode.hasOutTask
=
\u
5E8F
\u5217\u
53F7[0]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1
\u
FF0C
\u
51FA
\u
5E93
\u
524D
\u
4E0D
\u
5F97
\u5165\u
5E93
\u
76F8
\u
540C
\u
5E8F
\u5217\u
53F7
\u7269\u6599
smfcore.error.noRetryReel
=
\u
6CA1
\u6709\u
53EF
\u
4EE5
\u
91CD
\u
8BD5
\u7684\u7269\u6599
\ No newline at end of file
src/main/resources/messages_zh_TW.properties
查看文件 @
d3ed66f
...
...
@@ -354,4 +354,5 @@ smfcore.api.fail={0} \u83B7\u53D6\u6570\u636E\u5931\u8D25
smfcore.micron.apiClose
=
API
\u
529F
\u
80FD
\u
672A
\u
5F00
\u
653E
smfcore.paretoChart
=
\u
5E15
\u
7D2F
\u6258\u5716
smfcore.selfAudit.hasOutTask
=
\u
5E93
\u
4F4D[{0}]
\u
5DF2
\u6709\u
51FA
\u
5E93
\u
4EFB
\u
52A1
smfcore.error.barcode.hasOutTask
=
\u
5E8F
\u5217\u
865F[0]
\u
5DF2
\u6709\u
51FA
\u
5EAB
\u
4EFB
\u
52D9
\u
FF0C
\u
51FA
\u
5EAB
\u
524D
\u
4E0D
\u
5F97
\u5165\u
5EAB
\u
76F8
\u
540C
\u
5E8F
\u5217\u
865F
\u7269\u6599
\ No newline at end of file
smfcore.error.barcode.hasOutTask
=
\u
5E8F
\u5217\u
865F[0]
\u
5DF2
\u6709\u
51FA
\u
5EAB
\u
4EFB
\u
52D9
\u
FF0C
\u
51FA
\u
5EAB
\u
524D
\u
4E0D
\u
5F97
\u5165\u
5EAB
\u
76F8
\u
540C
\u
5E8F
\u5217\u
865F
\u7269\u6599
smfcore.error.noRetryReel
=
\u
6C92
\u6709\u
53EF
\u
4EE5
\u
91CD
\u
8A66
\u7684\u7269\u6599
\ No newline at end of file
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论