Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit a67e51bc
由
LN
编写于
2024-10-31 20:14:39 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
Outside Shelf Dispatch 和ControlledDispatch 新界面接口调整
1 个父辈
2ff2619c
显示空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
646 行增加
和
342 行删除
src/main/java/com/neotel/smfcore/common/bean/ResultBean.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/order/listener/DefaultOrderFileListener.java
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrderItem.java
src/main/java/com/neotel/smfcore/custom/micron1053/api/MicronApi.java
src/main/java/com/neotel/smfcore/custom/micron1053/loading/dto/MaterialDispatchDto.java
src/main/java/com/neotel/smfcore/custom/micron1053/loading/dto/SelReelDetialDto.java
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronDispatchController.java
src/main/java/com/neotel/smfcore/common/bean/ResultBean.java
查看文件 @
a67e51b
package
com
.
neotel
.
smfcore
.
common
.
bean
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.core.language.util.MessageUtils
;
...
...
@@ -32,8 +33,11 @@ public class ResultBean<T> {
result
.
setMsgKey
(
msgKey
);
result
.
setParams
(
params
);
result
.
setMsg
(
MessageUtils
.
getText
(
msgKey
,
params
,
new
Locale
(
SecurityUtils
.
getCurrentUserLanguage
()),
msg
));
if
(
writeLog
)
{
log
.
info
(
result
.
getMsg
());
if
(
writeLog
)
{
String
showmsg
=
result
.
getMsg
();
if
(
ObjectUtil
.
isNotEmpty
(
showmsg
)){
log
.
info
(
showmsg
);
}
}
return
result
;
}
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
a67e51b
...
...
@@ -35,6 +35,7 @@ import com.neotel.smfcore.custom.micron1053.api.bean.Material;
import
com.neotel.smfcore.custom.micron1053.api.bean.MaterialStatus
;
import
com.neotel.smfcore.custom.micron1053.api.bean.TrackStatus
;
import
com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus
;
import
com.neotel.smfcore.custom.micron1053.util.MicronDataCache
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.query.Criteria
;
...
...
@@ -90,7 +91,7 @@ public class LiteOrderCache {
if
(
now
-
order
.
getCreateDate
().
getTime
()
>
7
*
24
*
60
*
60
*
1000
)
{
//7天前的需求单,关闭,并解绑
log
.
info
(
"需求单 =["
+
order
.
getOrderNo
()
+
"]为7天前,关闭并解绑工单"
);
close
Order
(
order
.
getOrderNo
()
);
close
LiteOrder
(
order
);
}
else
{
addOrderToMap
(
order
);
...
...
@@ -272,6 +273,20 @@ public class LiteOrderCache {
}
}
}
else
{
Query
query2
=
new
Query
(
Criteria
.
where
(
"barcode.lockId"
).
is
(
order
.
getOrderNo
()));
List
<
StoragePos
>
posList
=
storagePosManager
.
findByQuery
(
query2
);
for
(
StoragePos
pos:
posList
)
{
if
(
pos
.
getBarcode
()==
null
){
continue
;
}
pos
.
getBarcode
().
setLockId
(
null
);
pos
.
getBarcode
().
setLockName
(
null
);
storagePosManager
.
save
(
pos
);
log
.
info
(
"工单"
+
order
.
getOrderNo
()
+
"已关闭,解除物料锁定:"
+
pos
.
getBarcode
().
getBarcode
()
+
",所在库位:"
+
pos
.
getPosName
());
}
}
}
catch
(
Exception
exception
)
{
log
.
error
(
"工单"
+
order
.
getOrderNo
()
+
"关闭时,解除锁定物料出错:"
,
exception
);
...
...
@@ -312,10 +327,10 @@ public class LiteOrderCache {
List
<
LiteOrderItem
>
items
=
new
ArrayList
<>();
for
(
LiteOrderItem
orderItem
:
order
.
getOrderItems
())
{
if
(
orderItem
.
getId
().
equals
(
task
.
getSubSourceId
()))
{
if
(
orderItem
.
getSelectItems
().
size
()
>=
0
)
{
orderItem
.
updateSelItemS
(
task
.
getBarcode
(),
OrderItemStatus
.
cancel
,
"Cancel"
);
}
else
if
(
orderItem
.
getId
().
equals
(
task
.
getSubSourceId
()))
{
orderItem
.
setStatus
(
OrderItemStatus
.
cancel
);
}
else
if
(
orderItem
.
getSelectItems
().
size
()
>=
0
)
{
orderItem
.
updateSelItemS
(
task
.
getSubSourceId
(),
OrderItemStatus
.
cancel
,
"Cancel"
);
}
items
.
add
(
orderItem
);
}
...
...
@@ -324,7 +339,8 @@ public class LiteOrderCache {
liteOrderMap
.
put
(
orderNo
,
order
);
//如果是preTask,不需要重新出库
if
(
ObjectUtil
.
isNotEmpty
(
order
.
getMode
()))
{
//普通工单需要自动补发出库。
if
(
ObjectUtil
.
isEmpty
(
order
.
getMode
()))
{
checkoutAgain
(
task
,
order
);
}
}
else
if
(
task
.
isFinished
())
{
...
...
@@ -334,11 +350,8 @@ public class LiteOrderCache {
List
<
LiteOrderItem
>
items
=
new
ArrayList
<>();
for
(
LiteOrderItem
liteOrderItem
:
order
.
getOrderItems
())
{
boolean
isItemTask
=
false
;
if
(
liteOrderItem
.
getId
().
equals
(
orderItemId
))
{
isItemTask
=
true
;
liteOrderItem
.
setStatus
(
OrderItemStatus
.
finish
);
}
else
{
boolean
result
=
liteOrderItem
.
updateSelItemS
(
task
.
getSubSourceId
(),
OrderItemStatus
.
finish
,
""
);
if
(
liteOrderItem
.
getSelectItems
().
size
()>
0
)
{
boolean
result
=
liteOrderItem
.
updateSelItemS
(
task
.
getBarcode
(),
OrderItemStatus
.
finish
,
""
);
if
(
result
)
{
isItemTask
=
true
;
//如果全部完成,更改任务状态为完成
...
...
@@ -347,6 +360,9 @@ public class LiteOrderCache {
liteOrderItem
.
setStatus
(
OrderItemStatus
.
finish
);
}
}
}
else
if
(
liteOrderItem
.
getId
().
equals
(
orderItemId
))
{
isItemTask
=
true
;
liteOrderItem
.
setStatus
(
OrderItemStatus
.
finish
);
}
if
(
isItemTask
)
{
log
.
info
(
"工单["
+
orderNo
+
"]的任务"
+
task
.
getPartNumber
()
+
"["
+
task
.
getBarcode
()
+
"]出库完成,已完成数量+1="
+
order
.
getFinishedReelCount
()
+
"/"
+
order
.
getTaskReelCount
());
...
...
@@ -372,12 +388,8 @@ public class LiteOrderCache {
items
=
new
ArrayList
<>();
for
(
LiteOrderItem
liteOrderItem
:
order
.
getOrderItems
())
{
boolean
isItemTask
=
false
;
if
(
liteOrderItem
.
getId
().
equals
(
orderItemId
))
{
isItemTask
=
true
;
liteOrderItem
.
setStatus
(
newS
);
liteOrderItem
.
setExecutFailReason
(
msg
);
}
else
{
boolean
result
=
liteOrderItem
.
updateSelItemS
(
task
.
getSubSourceId
(),
newS
,
msg
);
if
(
liteOrderItem
.
getSelectItems
().
size
()>
0
)
{
boolean
result
=
liteOrderItem
.
updateSelItemS
(
task
.
getBarcode
(),
newS
,
msg
);
if
(
result
)
{
isItemTask
=
true
;
//如果全部完成,更改任务状态为完成
...
...
@@ -386,6 +398,10 @@ public class LiteOrderCache {
liteOrderItem
.
setStatus
(
OrderItemStatus
.
notify_success
);
}
}
}
else
if
(
liteOrderItem
.
getId
().
equals
(
orderItemId
))
{
isItemTask
=
true
;
liteOrderItem
.
setStatus
(
newS
);
liteOrderItem
.
setExecutFailReason
(
msg
);
}
if
(
isItemTask
)
{
log
.
info
(
"工单["
+
orderNo
+
"]的任务"
+
task
.
getPartNumber
()
+
"["
+
task
.
getBarcode
()
+
"]完成,API007结果:"
+
msg
+
",更新状态="
+
newS
);
...
...
@@ -725,19 +741,8 @@ public class LiteOrderCache {
return
task
;
}
/**
* 关闭工单
*
* @param orderNo
*/
public
String
closeOrder
(
String
orderNo
)
{
LiteOrder
liteOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
liteOrder
==
null
)
{
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
==
null
)
{
return
"smfcore.order.out.notFound"
;
}
}
public
String
closeLiteOrder
(
LiteOrder
liteOrder
)
{
String
orderNo
=
liteOrder
.
getOrderNo
();
//有任务的工单不能关闭
List
<
DataLog
>
allTask
=
taskService
.
getAllTasks
();
for
(
DataLog
task
:
allTask
...
...
@@ -756,11 +761,27 @@ public class LiteOrderCache {
log
.
info
(
"关闭工单["
+
orderNo
+
"]成功"
);
liteOrder
.
setClosed
(
true
);
liteOrder
.
setStatus
(
LITEORDER_STATUS
.
CLOSED
);
liteOrderManager
.
save
(
liteOrder
);
smfApi
.
onOrderStatusChange
(
liteOrder
);
clearOrderLock
(
liteOrder
);
return
"smfcore.order.close.success"
;
}
/**
* 关闭工单
*
* @param orderNo
*/
public
String
closeOrder
(
String
orderNo
)
{
LiteOrder
liteOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
liteOrder
==
null
)
{
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
==
null
)
{
return
"smfcore.order.out.notFound"
;
}
}
return
closeLiteOrder
(
liteOrder
);
}
/**
* 工单详情补料出库
...
...
@@ -1031,24 +1052,14 @@ public class LiteOrderCache {
return
"smfcore.order.hasClose"
;
}
//先查找是否已经锁定过库位,如果已经锁定过,出锁定的库位
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
cacheOrder
.
getOrderNo
());
if
(
lockPosList
!=
null
&&
lockPosList
.
size
()
>
0
)
{
return
checkOutOrder
(
cacheOrder
).
getMsgKey
();
}
//
//先查找是否已经锁定过库位,如果已经锁定过,出锁定的库位
//
List<StoragePos> lockPosList = storagePosManager.findLockPos(cacheOrder.getOrderNo());
//
if (lockPosList != null && lockPosList.size() > 0) {
//
return checkOutOrder(cacheOrder).getMsgKey();
//
}
boolean
outBom
=
false
;
log
.
info
(
"开始为工单挑料["
+
orderNo
+
"] "
);
// cacheOrder.setTaskReelCount(0);
// cacheOrder.setTaskFinishedTime(-1);
// cacheOrder.setFinishedReelCount(0);
//不需要更改工单状态
// if (outBom) {
// cacheOrder.setStatus(LITEORDER_STATUS.BOM);
// } else {
// cacheOrder.setStatus(LITEORDER_STATUS.TAILS);
// }
//liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
int
taskReelCount
=
0
;
CHECKOUT_TYPE
checkoutType
=
dataCache
.
getCheckOutType
();
List
<
String
>
availableStorageIds
=
dataCache
.
getAvailableStorageIds
();
...
...
@@ -1098,6 +1109,7 @@ public class LiteOrderCache {
log
.
info
(
"工单["
+
orderNo
+
"]RI出库,任务数["
+
taskReelCount
+
"]出库位置仓位【"
+
pos
.
getPosName
()
+
"】RI=["
+
pos
.
getBarcode
().
getBarcode
()
+
"]已在操作队列中,跳过不处理"
);
break
;
}
orderItem
.
setPn
(
pos
.
getBarcode
().
getPartNumber
());
}
else
{
log
.
info
(
"工单["
+
orderNo
+
"]RI出库时,库存中未找到料盘["
+
reelId
+
"]"
);
}
...
...
@@ -1114,24 +1126,17 @@ public class LiteOrderCache {
assignNum
=
assignNum
+
pos
.
getBarcode
().
getAmount
();
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) ;
//
// task.setSourceId(cacheOrder.getId());
// task.setSourceName(cacheOrder.getOrderNo());
// task.setSubSourceId(orderItem.getId());
// task.setSubSourceInfo(orderItem.getFeederInfo());
// task.setType(OP.CHECKOUT);
// task.setLightColor(nextColor.getRgb());
// task.setStatus(OP_STATUS.WAIT.name());
// task.setSingleOut(singleOut);
//// task = dataLogDao.save(task);
// taskService.addTaskToExecute(task);
log
.
info
(
"工单["
+
orderNo
+
"],挑料盘数["
+
taskReelCount
+
"]挑料信息:【"
+
pos
.
getPosName
()
+
"】RI=["
+
pos
.
getBarcode
().
getBarcode
()
+
"] PN=["
+
partNumber
+
"] num:"
+
pos
.
getBarcode
().
getAmount
());
LiteOrderItem
selItem
=
new
LiteOrderItem
();
selItem
.
setRi
(
pos
.
getBarcode
().
getBarcode
());
selItem
.
setPn
(
pos
.
getBarcode
().
getPartNumber
());
selItem
.
setStatus
(
OrderItemStatus
.
wait
);
selItem
.
setNeedNum
(
pos
.
getBarcode
().
getAmount
());
selItem
.
setOutNum
(
pos
.
getBarcode
().
getAmount
());
//物料类型
String
mtype
=
MicronDataCache
.
GetReelType
(
pos
.
getBarcode
().
getPlateSize
(),
pos
.
getBarcode
().
getHeight
());
selItem
.
updateAppendData
(
"mtype"
,
mtype
);
selectReelItems
.
add
(
selItem
);
allBarcodes
.
add
(
pos
.
getBarcode
());
findPosList
.
add
(
pos
.
getId
()
);
...
...
@@ -1154,20 +1159,23 @@ public class LiteOrderCache {
Map
<
String
,
MaterialStatus
>
apiResultMap
=
MicronApi
.
Api009
(
cacheOrder
.
getOperationId
(),
lineId
,
allBarcodes
);
List
<
LiteOrderItem
>
finItem
=
new
ArrayList
<>();
List
<
StoragePos
>
lockPos
=
new
ArrayList
<>();
taskReelCount
=
0
;
for
(
LiteOrderItem
item
:
newItems
)
{
item
.
setOutNum
(
0
);
item
.
setOutReelCount
(
0
);
int
outNum
=
0
;
int
outReelCount
=
0
;
List
<
LiteOrderItem
>
selItemList
=
new
ArrayList
<>();
for
(
LiteOrderItem
reelItem
:
item
.
getSelectItems
())
{
MaterialStatus
s
=
apiResultMap
.
get
(
reelItem
.
getRi
());
if
(
s
!=
null
&&
s
.
isAvailable
())
{
reelItem
.
setStatus
(
OrderItemStatus
.
CheckOk
);
StoragePos
pos
=
storagePosManager
.
getByBarcode
(
s
.
getSerialNum
());
log
.
info
(
"工单【"
+
orderNo
+
"】PN ["
+
item
.
getPn
()
+
"] RI ["
+
i
tem
.
getRi
()
+
"] API009 验证成功,更改状态为 CheckOk ,锁定库位【"
+
pos
.
getPosName
()
+
"】"
);
log
.
info
(
"工单【"
+
orderNo
+
"】PN ["
+
reelItem
.
getPn
()
+
"] RI ["
+
reelI
tem
.
getRi
()
+
"] API009 验证成功,更改状态为 CheckOk ,锁定库位【"
+
pos
.
getPosName
()
+
"】"
);
pos
.
getBarcode
().
setLockId
(
cacheOrder
.
getOrderNo
());
...
...
@@ -1175,6 +1183,7 @@ public class LiteOrderCache {
storagePosManager
.
save
(
pos
);
outNum
+=
pos
.
getBarcode
().
getAmount
();
outReelCount
+=
1
;
taskReelCount
+=
1
;
}
else
if
(
s
!=
null
&&
s
.
isReserved
()){
String
str
=
s
.
getDescription
();
...
...
@@ -1188,7 +1197,7 @@ public class LiteOrderCache {
reelItem
.
setExecutFailReason
(
"no result "
);
reelItem
.
setStatus
(
OrderItemStatus
.
CheckFail
);
log
.
info
(
"工单【"
+
orderNo
+
"】PN ["
+
item
.
getPn
()
+
"] RI ["
+
i
tem
.
getRi
()
+
"] API009 验证失败,更改状态为 CheckFail"
);
log
.
info
(
"工单【"
+
orderNo
+
"】PN ["
+
reelItem
.
getPn
()
+
"] RI ["
+
reelI
tem
.
getRi
()
+
"] API009 验证失败,更改状态为 CheckFail"
);
}
else
{
String
str
=
s
.
getDescription
();
...
...
@@ -1197,30 +1206,33 @@ public class LiteOrderCache {
}
reelItem
.
setExecutFailReason
(
str
);
reelItem
.
setStatus
(
OrderItemStatus
.
CheckFail
);
log
.
info
(
"工单【"
+
orderNo
+
"】PN ["
+
item
.
getPn
()
+
"] RI ["
+
i
tem
.
getRi
()
+
"] API009 验证失败,更改状态为 CheckFail"
);
log
.
info
(
"工单【"
+
orderNo
+
"】PN ["
+
reelItem
.
getPn
()
+
"] RI ["
+
reelI
tem
.
getRi
()
+
"] API009 验证失败,更改状态为 CheckFail"
);
}
selItemList
.
add
(
reelItem
);
}
item
.
setSelectItems
(
selItemList
);
item
.
setOutNum
(
outNum
);
item
.
setOutReelCount
(
outReelCount
);
//判断是否缺料
if
(
outNum
>=
item
.
getNeedNum
()&&
outReelCount
>=
item
.
getNeedReelCount
()){
//已有足够物料
item
.
setStatus
(
OrderItemStatus
.
CheckOk
);
}
else
{
//缺料
item
.
setStatus
(
OrderItemStatus
.
shortage
);
}
liteOrderItemManager
.
save
(
item
);
finItem
.
add
(
item
);
}
//锁定库位
cacheOrder
.
setOrderItems
(
newItems
);
cacheOrder
.
setOrderItems
(
finItem
);
cacheOrder
.
setTaskReelCount
(
taskReelCount
);
cacheOrder
.
setTotalTaskReelCount
(
cacheOrder
.
getTotalTaskReelCount
()
+
taskReelCount
);
log
.
info
(
"工单["
+
orderNo
+
"]任务分配结束,任务数["
+
taskReelCount
+
"]"
);
// smfApi.onOrderStatusChange(cacheOrder);
// //有需要出库的
// if (taskReelCount <= 0) {
// finishedOrderTasks(cacheOrder);
// }
//
// liteOrderManager.save(cacheOrder);
//
// liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
liteOrderManager
.
save
(
cacheOrder
);
addOrderToMap
(
cacheOrder
);
log
.
info
(
"工单["
+
orderNo
+
"]物料验证结束,验证成功盘数["
+
taskReelCount
+
"]"
);
if
(
taskReelCount
<=
0
)
{
//return "工单无可执行的任务";
return
"smfcore.order.out.noTask"
;
...
...
@@ -1228,13 +1240,44 @@ public class LiteOrderCache {
return
""
;
}
public
LiteOrderItem
NewSelItem
(
StoragePos
pos
){
LiteOrderItem
selItem
=
new
LiteOrderItem
();
selItem
.
setRi
(
pos
.
getBarcode
().
getBarcode
());
selItem
.
setPn
(
pos
.
getBarcode
().
getPartNumber
());
selItem
.
setStatus
(
OrderItemStatus
.
wait
);
selItem
.
setNeedNum
(
pos
.
getBarcode
().
getAmount
());
selItem
.
setOutNum
(
pos
.
getBarcode
().
getAmount
());
//物料类型
String
mtype
=
MicronDataCache
.
GetReelType
(
pos
.
getBarcode
().
getPlateSize
(),
pos
.
getBarcode
().
getHeight
());
selItem
.
updateAppendData
(
"mtype"
,
mtype
);
return
selItem
;
}
public
boolean
dispatchOrderIsCheckOk
(
LiteOrder
liteOrder
)
{
//判断是否所有pn都已经有足够的物料
boolean
isCheckOk
=
true
;
for
(
LiteOrderItem
item
:
liteOrder
.
getOrderItems
())
{
if
(
item
.
getStatus
().
equalsIgnoreCase
(
OrderItemStatus
.
shortage
))
{
isCheckOk
=
false
;
break
;
}
}
return
isCheckOk
;
}
public
synchronized
String
dispatchCheckOut
(
LiteOrder
order
,
boolean
isRetry
,
boolean
isOver
)
{
ORDER_COLOR
nextColor
=
getNextColor
();
if
(
nextColor
==
null
)
{
log
.
info
(
"执行工单["
+
order
.
getOrderNo
()
+
"] 时,已达最大可执行工单数"
);
throw
new
ValidateException
(
"order.out.maxOrder"
,
"已达最大可执行工单数"
);
}
String
resultMsg
=
"smfcore.label.noReel"
;
log
.
info
(
"dispatchCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] operatetionId ["
+
order
.
getOperationId
()
+
"]开始出库,isRetry="
+
isRetry
+
",isOver="
+
isOver
);
int
taskReelCount
=
0
;
List
<
String
>
needOutBarcode
=
new
ArrayList
<>();
for
(
LiteOrderItem
item
:
...
...
@@ -1264,8 +1307,14 @@ public class LiteOrderCache {
return
resultMsg
;
}
order
.
setStatus
(
LITEORDER_STATUS
.
TAILS
);
int
taskReelCount
=
0
;
if
(
isRetry
){
taskReelCount
=
order
.
getTaskReelCount
();
log
.
info
(
"dispatchCheckOut 出库单["
+
order
.
getOrderNo
()
+
"] operatetionId ["
+
order
.
getOperationId
()
+
"] retry出库,原来任务数="
+
taskReelCount
);
}
else
{
order
.
setTaskReelCount
(
0
);
order
.
setFinishedReelCount
(
0
);
}
List
<
StoragePos
>
storagePosList
=
storagePosManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"barcode.barcode"
).
in
(
needOutBarcode
)));
List
<
Material
>
materialList
=
new
ArrayList
<>();
...
...
@@ -1283,8 +1332,13 @@ public class LiteOrderCache {
for
(
LiteOrderItem
orderItem
:
order
.
getOrderItems
())
{
int
outNum
=
0
;
int
outReelCount
=
0
;
if
(
isRetry
){
outNum
=
orderItem
.
getOutNum
();
outReelCount
=
orderItem
.
getOutReelCount
();
}
List
<
LiteOrderItem
>
newSelItems
=
new
ArrayList
<>();
for
(
LiteOrderItem
selItem
:
orderItem
.
getSelectItems
())
{
...
...
src/main/java/com/neotel/smfcore/core/order/listener/DefaultOrderFileListener.java
查看文件 @
a67e51b
...
...
@@ -123,12 +123,15 @@ public class DefaultOrderFileListener implements IOrderFileListener {
itemMap
=
readExcelFile
(
fileName
,
orderFile
.
getAbsolutePath
());
}
//新增为一个工单
String
orderName
=
reason
;
if
(
ObjectUtil
.
isEmpty
(
reason
))
{
List
<
LiteOrder
>
orders
=
liteOrderManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"mode"
).
is
(
mode
)));
orderName
=
mode
+
(
orders
.
size
()
+
1
);
if
(
ObjectUtil
.
isEmpty
(
reason
)){
reason
=
""
;
}
//新增为一个工单
String
orderName
=
mode
+
"_"
+
reason
+
"_"
+
operId
;
// if(ObjectUtil.isEmpty(reason)) {
// List<LiteOrder> orders = liteOrderManager.findByQuery(new Query(Criteria.where("mode").is(mode)));
// orderName = mode + (orders.size() + 1);
// }
LiteOrder
dbOrder
=
liteOrderManager
.
findByOrderNo
(
orderName
);
if
(
dbOrder
!=
null
)
{
...
...
@@ -137,7 +140,7 @@ public class DefaultOrderFileListener implements IOrderFileListener {
String
newOrderNo
=
orderName
+
"-"
+
format
.
format
(
new
Date
());
dbOrder
=
liteOrderManager
.
findByOrderNo
(
newOrderNo
);
if
(
dbOrder
==
null
)
{
orderName
=
newOrderNo
;
}
else
{
log
.
info
(
"watchOrderDir,mode=["
+
mode
+
"],reason=["
+
reason
+
"]:数据库中已存在工单号为["
+
orderName
+
"],忽略文件:"
+
orderFile
.
getAbsolutePath
());
//resultFile = new File(localDir+File.separator + "error",backupFileName);
...
...
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrderItem.java
查看文件 @
a67e51b
...
...
@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.order.service.po;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.base.BasePo
;
import
com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.data.annotation.Transient
;
...
...
@@ -9,6 +10,7 @@ import org.springframework.data.mongodb.core.index.Indexed;
import
org.springframework.data.mongodb.core.mapping.Document
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -120,16 +122,46 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
* 自定义的附加字段,key=字段名,value=值
*/
public
Map
<
String
,
String
>
appendData
=
new
HashMap
<>();
/**
* 添加或更新自定义附加信息
* @param appendKey
* @param appendValue
*/
public
void
updateAppendData
(
String
appendKey
,
String
appendValue
){
appendData
.
put
(
appendKey
,
appendValue
);
}
/**
* 获取自定义附加信息
* @param appendKey
* @param <T>
* @return
*/
public
<
T
>
T
getAppendData
(
String
appendKey
){
Object
value
=
appendData
.
get
(
appendKey
);
if
(
value
!=
null
){
return
(
T
)
value
;
}
return
null
;
}
public
List
<
LiteOrderItem
>
selectItems
;
public
boolean
updateSelItemS
(
String
subItemId
,
String
selItemStatus
,
String
reason
)
{
public
List
<
LiteOrderItem
>
getSelectItems
(){
if
(
selectItems
==
null
){
return
new
ArrayList
<>();
}
return
selectItems
;
}
public
boolean
updateSelItemS
(
String
barcode
,
String
selItemStatus
,
String
reason
)
{
try
{
if
(
selectItems
==
null
||
selectItems
.
size
()
<=
0
)
{
return
false
;
}
for
(
int
i
=
0
;
i
<
selectItems
.
size
();
i
++)
{
if
(
selectItems
.
get
(
i
).
get
Id
().
equals
(
subItemId
))
{
if
(
selectItems
.
get
(
i
).
get
Ri
().
equals
(
barcode
))
{
selectItems
.
get
(
i
).
setStatus
(
selItemStatus
);
if
(
ObjectUtil
.
isNotEmpty
(
reason
))
{
selectItems
.
get
(
i
).
setExecutFailReason
(
reason
);
...
...
@@ -161,4 +193,24 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
}
return
this
.
getId
().
compareTo
(
o
.
getId
());
}
public
boolean
isSuccess
(){
return
status
.
equalsIgnoreCase
(
OrderItemStatus
.
executing
)||
status
.
equalsIgnoreCase
(
OrderItemStatus
.
wait
)||
status
.
equalsIgnoreCase
(
OrderItemStatus
.
notify_success
)||
status
.
equalsIgnoreCase
(
OrderItemStatus
.
finish
)
||
status
.
equalsIgnoreCase
(
OrderItemStatus
.
CheckOk
);
}
public
boolean
isNg
()
{
return
status
.
equalsIgnoreCase
(
OrderItemStatus
.
executFail
)||
status
.
equalsIgnoreCase
(
OrderItemStatus
.
CheckFail
)||
status
.
equalsIgnoreCase
(
OrderItemStatus
.
cancel
)
||
status
.
equalsIgnoreCase
(
OrderItemStatus
.
Reserved
);
}
public
boolean
isTranFail
()
{
return
status
.
equalsIgnoreCase
(
OrderItemStatus
.
notify_fail
);
}
}
src/main/java/com/neotel/smfcore/custom/micron1053/api/MicronApi.java
查看文件 @
a67e51b
...
...
@@ -1004,6 +1004,9 @@ public class MicronApi {
public
static
boolean
Api012
(
String
operationId
,
String
action
)
{
if
(
Debug
){
return
true
;
}
String
url
=
config
.
getUrl
(
config
.
api_name_012
);
url
=
MessageFormat
.
format
(
url
,
operationId
);
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/loading/dto/MaterialDispatchDto.java
0 → 100644
查看文件 @
a67e51b
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
loading
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
MaterialDispatchDto
implements
Serializable
{
@ApiModelProperty
(
"物料类型"
)
private
String
materialType
;
@ApiModelProperty
(
"成功盘数"
)
private
int
successQty
;
@ApiModelProperty
(
"NG盘数"
)
private
int
ng
;
@ApiModelProperty
(
"失败盘数"
)
private
int
failure
;
}
src/main/java/com/neotel/smfcore/custom/micron1053/loading/dto/SelReelDetialDto.java
0 → 100644
查看文件 @
a67e51b
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
loading
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
SelReelDetialDto
implements
Serializable
{
@ApiModelProperty
(
"PN"
)
private
String
pn
;
@ApiModelProperty
(
"RI"
)
private
String
ri
;
@ApiModelProperty
(
"qty"
)
private
int
qty
;
@ApiModelProperty
(
"状态,CheckOK的不可勾选,Reserved 和CheckFail 的可勾选"
)
private
String
status
;
@ApiModelProperty
(
"执行失败原因"
)
private
String
executFailReason
;
}
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronDispatchController.java
查看文件 @
a67e51b
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
task
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.base.Strings
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
...
...
@@ -8,9 +9,9 @@ import com.neotel.smfcore.common.utils.FileUtil;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.inList.service.po.InListItem
;
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
;
...
...
@@ -27,11 +28,14 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.custom.micron1053.api.MicronApi
;
import
com.neotel.smfcore.custom.micron1053.api.bean.MaterialStatus
;
import
com.neotel.smfcore.custom.micron1053.loading.dto.MaterialDispatchDto
;
import
com.neotel.smfcore.custom.micron1053.loading.dto.MaterialDtialDto
;
import
com.neotel.smfcore.custom.micron1053.loading.dto.SelReelDetialDto
;
import
com.neotel.smfcore.custom.micron1053.task.bean.DispatchItemMapper
;
import
com.neotel.smfcore.custom.micron1053.task.bean.dto.DispatchItemDto
;
import
com.neotel.smfcore.custom.micron1053.task.bean.dto.ItemDetialDto
;
import
com.neotel.smfcore.custom.micron1053.task.bean.dto.TaskDto
;
import
com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus
;
import
com.neotel.smfcore.custom.micron1053.util.MicronDataCache
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.bean.FileProperties
;
import
io.swagger.annotations.Api
;
...
...
@@ -55,32 +59,11 @@ import java.util.stream.Collectors;
@RequestMapping
(
"/rest/micron/dispatch"
)
@RequiredArgsConstructor
public
class
MicronDispatchController
{
//
// @ApiOperation("上传工单")
// @PostMapping(value = "/upload")
// @AnonymousAccess
// public ResultBean updateAvatar(@RequestParam MultipartFile orderFile) {
//
// String csv = "csv";
// String excel="xlsx";
// String fileType = FileUtil.getExtensionName(orderFile.getOriginalFilename());
// String fileName = FileUtil.getFileNameNoEx(orderFile.getOriginalFilename());
// if (fileType != null &&(!csv.contains(fileType))&&(!excel.contains(fileType)) ) {
// throw new ValidateException("smfcore.feleFormatError", "文件格式错误!, 仅支持{0}格式", new String[]{csv+","+excel});
// }
// File folder = new File(properties.getPath(), "pos");
// File localFile = FileUtil.upload(orderFile, folder.getAbsolutePath());
// boolean result = orderFileWatch.handleOrderFile(localFile);
// if (result) {
// return ResultBean.newOkResult("smfcore.order.uploadOK", "工单上传成功");
// } else {
// return ResultBean.newErrorResult(-1,"smfcore.order.uploadFailure","上传失败");
// }
// }
@Autowired
private
ILiteOrderManager
liteOrderManager
;
@Autowired
private
DataCache
dataCache
;
@Autowired
private
ILiteOrderManager
liteOrderManager
;
@Autowired
private
DataCache
dataCache
;
@Autowired
private
IDataLogManager
dataLogManager
;
@Autowired
...
...
@@ -99,23 +82,32 @@ private DataCache dataCache;
private
TaskService
taskService
;
@Autowired
private
IStoragePosManager
storagePosManager
;
@Autowired
private
IStoragePosManager
storagePosManager
;
private
String
Mode_RACK
=
"RACK"
;
private
TaskDto
getTaskDtoByMode
(
String
mode
){
private
TaskDto
getTaskDtoByMode
(
String
mode
)
{
TaskDto
dto
=
new
TaskDto
();
//记录
String
key
=
Constants
.
CACHE_DISPATCH
+
mode
;
//先从缓存中获取数据
try
{
try
{
dto
=
dataCache
.
getCache
(
key
);
return
dto
;
}
catch
(
Exception
ex
)
{
}
catch
(
Exception
ex
)
{
return
null
;
}
}
private
boolean
NeedInputLineId
(
String
mode
){
if
(
mode
.
equalsIgnoreCase
(
Mode_RACK
)){
return
false
;
}
return
true
;
}
@ApiOperation
(
"点 Outside Shelf Dispatch 或 Controlled Dispatch 按钮,调用此接口获取出库页详情"
)
@AnonymousAccess
@GetMapping
(
"/getList"
)
...
...
@@ -129,26 +121,29 @@ private IStoragePosManager storagePosManager;
}
//判断是否生成,未关闭的工单
TaskDto
dto
=
getTaskDtoByMode
(
mode
);
//获取是否有此类型的工单信息
//code=0,,如果已经存在,
直接返回列表页面
//code=0,,如果已经存在,
调用获取页面数据接口获取列表数据
//code=1,没有数据,OutSide按钮进入上传工单页面 ,ControlledDispatch 按钮进入选择Pn或上传工单页面
//code=2,ControlledDispatch 进入输入lineID页面
List
<
LiteOrderItem
>
itemList
=
getLiteOrderItemList
(
mode
);
if
(
dto
!=
null
&&
ObjectUtil
.
isNotEmpty
(
dto
.
getOperationId
())
&&
ObjectUtil
.
isNotEmpty
(
dto
.
getLineId
())
&&
itemList
!=
null
&&
!
itemList
.
isEmpty
())
{
//已存在,直接返回列表页面
List
<
DispatchItemDto
>
list
=
dispatchItemMapper
.
toDto
(
itemList
);
return
ResultBean
.
newOkResult
(
list
);
//
List<LiteOrderItem> itemList = getLiteOrderItemList(mode);
//
if (dto!=null &&ObjectUtil.isNotEmpty(dto.getOperationId()) && ObjectUtil.isNotEmpty(dto.getLineId()) && itemList != null && !itemList.isEmpty()) {
//
//已存在,直接返回列表页面
//
List<DispatchItemDto> list = dispatchItemMapper.toDto(itemList);
//
return ResultBean.newOkResult(list);
LiteOrder
order
=
getOrderByMode
(
mode
);
if
(
dto
!=
null
&&
ObjectUtil
.
isNotEmpty
(
dto
.
getOperationId
())
&&
ObjectUtil
.
isNotEmpty
(
dto
.
getLineId
())
&&
order
!=
null
)
{
return
getTaskInfo
(
order
);
}
else
{
if
(
dto
!=
null
&&
ObjectUtil
.
isNotEmpty
(
dto
.
getOperationId
()))
{
if
(
ObjectUtil
.
isNotEmpty
(
dto
.
getLineId
())||(
mode
.
equals
(
"RACK"
)))
{
if
(
ObjectUtil
.
isNotEmpty
(
dto
.
getLineId
())
||
(!
NeedInputLineId
(
mode
)))
{
//已有 operationId ,需要进入上传工单页面
return
ResultBean
.
newErrorResult
(
1
,
""
,
""
);
}
else
{
return
ResultBean
.
newErrorResult
(
1
,
""
,
""
,
new
String
[]{},
false
);
}
else
{
//已有 operationId ,没有lineID,需要输入lineID
return
ResultBean
.
newErrorResult
(
2
,
""
,
""
);
return
ResultBean
.
newErrorResult
(
2
,
""
,
""
,
new
String
[]{},
false
);
}
}
else
{
...
...
@@ -162,11 +157,21 @@ private IStoragePosManager storagePosManager;
if
(
StringUtils
.
isNotBlank
(
operationId
))
{
dto
.
setOperationId
(
operationId
);
dto
.
setLineId
(
""
);
dataCache
.
updateCache
(
Constants
.
CACHE_DISPATCH
+
mode
,
dto
);
MicronApi
.
ActionUpdate
(
operationId
,
MicronApi
.
START
);
//需要输入lineID
return
ResultBean
.
newErrorResult
(
2
,
""
,
""
);
MicronApi
.
ActionUpdate
(
operationId
,
MicronApi
.
START
);
//判断是否是RACK
if
(
ObjectUtil
.
isNotEmpty
(
dto
.
getLineId
())
||
(!
NeedInputLineId
(
mode
)))
{
//已有 operationId ,需要进入上传工单页面
return
ResultBean
.
newErrorResult
(
1
,
""
,
""
,
new
String
[]{},
false
);
}
else
{
//已有 operationId ,没有lineID,需要输入lineID
return
ResultBean
.
newErrorResult
(
2
,
""
,
""
,
new
String
[]{},
false
);
}
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.api.fail"
,
"Api011 获取数据失败"
,
new
String
[]{
"API011"
});
}
...
...
@@ -176,11 +181,120 @@ private IStoragePosManager storagePosManager;
}
private
ResultBean
getTaskInfo
(
LiteOrder
order
)
{
//如果工单还未出库
if
(
order
.
isNew
())
{
//返回可以勾选的物料及已验证成功的物料列表
List
<
SelReelDetialDto
>
reelDetialDtos
=
getReelDetialList
(
order
);
ResultBean
resultBean
=
ResultBean
.
newErrorResult
(
3
,
""
,
""
,
new
String
[]{},
false
);
resultBean
.
setData
(
reelDetialDtos
);
return
resultBean
;
}
else
{
//返回出库信息
List
<
MaterialDispatchDto
>
materialDispatchDtos
=
getOrderMaterialList
(
order
);
ResultBean
resultBean
=
ResultBean
.
newErrorResult
(
4
,
""
,
""
,
new
String
[]{},
false
);
resultBean
.
setData
(
materialDispatchDtos
);
return
resultBean
;
}
}
private
List
<
SelReelDetialDto
>
getReelDetialList
(
LiteOrder
order
)
{
List
<
SelReelDetialDto
>
reelDetialDtos
=
new
ArrayList
<>();
//先取已验证过的数据
for
(
LiteOrderItem
item
:
order
.
getOrderItems
())
{
for
(
LiteOrderItem
selItem
:
item
.
getSelectItems
())
{
SelReelDetialDto
dto
=
new
SelReelDetialDto
(
selItem
.
getPn
(),
selItem
.
getRi
(),
selItem
.
getOutNum
(),
selItem
.
getStatus
(),
selItem
.
getExecutFailReason
());
reelDetialDtos
.
add
(
dto
);
}
}
for
(
LiteOrderItem
item
:
order
.
getOrderItems
())
{
if
(
ObjectUtil
.
isNotEmpty
(
item
.
getRi
())){
}
//判断是否需要勾选其他物料
else
if
(
item
.
getOutNum
()
<
item
.
getNeedNum
()||
item
.
getNeedReelCount
()<
item
.
getSelectItems
().
size
())
{
//需要勾选
CHECKOUT_TYPE
checkoutType
=
dataCache
.
getCheckOutType
();
List
<
String
>
availableStorageIds
=
dataCache
.
getAvailableStorageIds
();
Collection
<
String
>
excludePosIds
=
liteOrderCache
.
excludeOutPosIds
();
List
<
StoragePos
>
otherPosList
=
storagePosManager
.
findInStoragesByPN
(
excludePosIds
,
item
.
getPn
(),
checkoutType
);
for
(
StoragePos
pos
:
otherPosList
)
{
SelReelDetialDto
dto
=
new
SelReelDetialDto
(
pos
.
getBarcode
().
getPartNumber
(),
pos
.
getBarcode
().
getBarcode
(),
pos
.
getBarcode
().
getAmount
(),
""
,
""
);
reelDetialDtos
.
add
(
dto
);
}
}
}
// if (MicronApi.Debug) {
// if (reelDetialDtos.size() <= 0) {
// for (int i = 0; i < 5; i++) {
// String ok = (i <= 1) ? "CheckOk" : "CheckFail";
// SelReelDetialDto dto = new SelReelDetialDto("PN" + i, "barcode" + i, i * 100, ok, "msg" + i);
// reelDetialDtos.add(dto);
// }
// for (int i = 6; i < 9; i++) {
// SelReelDetialDto dto = new SelReelDetialDto("PN" + i, "barcode" + i, i * 100, "", "");
// reelDetialDtos.add(dto);
// }
// }
// }
return
reelDetialDtos
;
}
private
List
<
MaterialDispatchDto
>
getOrderMaterialList
(
LiteOrder
order
)
{
Map
<
String
,
MaterialDispatchDto
>
dtoMap
=
new
HashMap
<>();
for
(
LiteOrderItem
item
:
order
.
getOrderItems
())
{
for
(
LiteOrderItem
selItem
:
item
.
getSelectItems
())
{
String
mtype
=
selItem
.
getAppendData
(
"mtype"
);
MaterialDispatchDto
dto
=
dtoMap
.
getOrDefault
(
mtype
,
new
MaterialDispatchDto
(
mtype
,
0
,
0
,
0
));
// if (item.isSuccess()) {
// } else
if
(
selItem
.
isNg
())
{
dto
.
setNg
(
dto
.
getNg
()
+
1
);
}
else
if
(
selItem
.
isTranFail
())
{
dto
.
setFailure
(
dto
.
getFailure
()
+
1
);
}
else
{
dto
.
setSuccessQty
(
dto
.
getSuccessQty
()
+
1
);
}
dtoMap
.
put
(
dto
.
getMaterialType
(),
dto
);
}
}
List
<
MaterialDispatchDto
>
resultList
=
new
ArrayList
<>();
for
(
MaterialDispatchDto
dto
:
dtoMap
.
values
())
{
resultList
.
add
(
dto
);
}
// if (resultList.size() <= 0 && MicronApi.Debug) {
// resultList.add(new MaterialDispatchDto(MicronDataCache.PIZZABOX, 2, 3, 9));
// resultList.add(new MaterialDispatchDto(MicronDataCache.REEL, 23, 2, 54));
// resultList.add(new MaterialDispatchDto(MicronDataCache.PCB, 22, 2, 52));
// }
return
resultList
;
}
@ApiOperation
(
"Submit 选择工单文件后确认上传 mode=RACK时需要输入reason,mode=CTRLDISPATCH时reason传空字符串 "
)
@AnonymousAccess
@PostMapping
(
"/submit"
)
public
ResultBean
outSideSubmit
(
@RequestParam
MultipartFile
orderFile
,
@RequestParam
String
mode
,
@RequestParam
String
reason
)
{
public
ResultBean
outSideSubmit
(
@RequestParam
MultipartFile
orderFile
,
@RequestParam
String
mode
,
@RequestParam
String
reason
)
{
try
{
// public ResultBean outSideSubmit(@RequestBody String mode,@RequestBody String reason ,@RequestBody MultipartFile orderFile) {
...
...
@@ -197,7 +311,7 @@ private IStoragePosManager storagePosManager;
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
//判断是否生成,未关闭的工单
if
(
ObjectUtil
.
isEmpty
(
dto
.
getOperationId
())
||
ObjectUtil
.
isEmpty
(
dto
.
getLineId
(
)))
{
if
(
ObjectUtil
.
isEmpty
(
dto
.
getOperationId
())
||
(
NeedInputLineId
(
dto
.
getMode
())
&&
ObjectUtil
.
isEmpty
(
dto
.
getLineId
()
)))
{
log
.
info
(
"outSideSubmit 操作失败,taskDto数据不完整"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
...
...
@@ -218,18 +332,8 @@ private IStoragePosManager storagePosManager;
dto
.
setLineId
(
reason
);
}
String
lineId
=
dto
.
getLineId
();
dataCache
.
updateCache
(
Constants
.
CACHE_DISPATCH
+
mode
,
dto
);
//工单上传成功,开始挑料
LiteOrder
order
=
getOrderByMode
(
mode
);
liteOrderCache
.
OrderReady
(
order
.
getOrderNo
(),
lineId
);
// ,直接返回列表页面
List
<
LiteOrderItem
>
itemList
=
getLiteOrderItemList
(
mode
);
List
<
DispatchItemDto
>
list
=
dispatchItemMapper
.
toDto
(
itemList
);
return
ResultBean
.
newOkResult
(
list
);
return
NewOrderProcess
(
mode
,
lineId
);
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
...
...
@@ -242,11 +346,27 @@ private IStoragePosManager storagePosManager;
}
}
private
ResultBean
NewOrderProcess
(
String
mode
,
String
lineId
)
{
//工单上传成功,开始挑料
LiteOrder
order
=
getOrderByMode
(
mode
);
liteOrderCache
.
OrderReady
(
order
.
getOrderNo
(),
lineId
);
if
(
liteOrderCache
.
dispatchOrderIsCheckOk
(
order
))
{
log
.
info
(
order
.
getOrderNo
()
+
"工单已备料完成,直接出料"
);
//直接开始出库
liteOrderCache
.
dispatchCheckOut
(
order
,
false
,
false
);
}
return
getTaskInfo
(
order
);
}
@ApiOperation
(
"Controlled Dispatch 输入lineID后调用此方法"
)
@AnonymousAccess
@PostMapping
(
"/controlledDisSure"
)
public
ResultBean
controlledDisSure
(
@RequestParam
String
mode
,
@RequestParam
String
lineId
)
{
public
ResultBean
controlledDisSure
(
@RequestParam
String
mode
,
@RequestParam
String
lineId
)
{
//判断是否验证
if
(!
MicronApi
.
isEnable
())
{
return
ResultBean
.
newErrorResult
(
9
,
"smfcore.micron.apiClose"
,
" Not yet open"
);
...
...
@@ -259,11 +379,13 @@ private IStoragePosManager storagePosManager;
//code=1,没有数据,OutSide按钮进入上传工单页面 ,ControlledDispatch 按钮进入选择Pn或上传工单页面
//code=2,ControlledDispatch 进入输入lineID页面
//code=-1:出错提示信息
List
<
LiteOrderItem
>
itemList
=
getLiteOrderItemList
(
mode
);
if
(
itemList
!=
null
&&
!
itemList
.
isEmpty
())
{
//已存在,直接返回列表页面
List
<
DispatchItemDto
>
list
=
dispatchItemMapper
.
toDto
(
itemList
);
return
ResultBean
.
newOkResult
(
list
);
// List<LiteOrderItem> itemList = getLiteOrderItemList(mode);
LiteOrder
order
=
getOrderByMode
(
mode
);
if
(
order
!=
null
&&
!
order
.
getOrderItems
().
isEmpty
())
{
// //已存在,直接返回列表页面
// List<DispatchItemDto> list = dispatchItemMapper.toDto(itemList);
// return ResultBean.newOkResult(list);
return
getTaskInfo
(
order
);
}
else
{
...
...
@@ -274,7 +396,7 @@ private IStoragePosManager storagePosManager;
dto
.
setLineId
(
lineId
);
//调用API201
String
result
=
MicronApi
.
Api201
(
lineId
,
dto
.
getOperationId
());
if
(
ObjectUtil
.
isEmpty
(
result
))
{
if
(
ObjectUtil
.
isEmpty
(
result
))
{
//成功
dto
.
setLineId
(
lineId
);
dataCache
.
updateCache
(
Constants
.
CACHE_DISPATCH
+
mode
,
dto
);
...
...
@@ -296,7 +418,7 @@ private IStoragePosManager storagePosManager;
if
(
StringUtils
.
isNotBlank
(
operationId
))
{
dto
.
setOperationId
(
operationId
);
dataCache
.
updateCache
(
Constants
.
CACHE_DISPATCH
+
mode
,
dto
);
MicronApi
.
ActionUpdate
(
operationId
,
MicronApi
.
START
);
MicronApi
.
ActionUpdate
(
operationId
,
MicronApi
.
START
);
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.api.fail"
,
"Api011 获取数据失败"
,
new
String
[]{
"API011"
});
}
...
...
@@ -308,7 +430,7 @@ private IStoragePosManager storagePosManager;
@ApiOperation
(
"Controlled Dispatch ,勾选Pn出库提交"
)
@AnonymousAccess
@PostMapping
(
"/pnSubmit"
)
public
ResultBean
pnSubmit
(
@RequestBody
Set
<
TacticsOutDto
>
outDtoSet
)
{
public
ResultBean
pnSubmit
(
@RequestBody
Set
<
TacticsOutDto
>
outDtoSet
)
{
try
{
//判断是否验证
if
(!
MicronApi
.
isEnable
())
{
...
...
@@ -370,17 +492,7 @@ private IStoragePosManager storagePosManager;
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
//开始挑料
LiteOrder
order
=
getOrderByMode
(
mode
);
liteOrderCache
.
OrderReady
(
order
.
getOrderNo
(),
taskDto
.
getLineId
());
// ,直接返回列表页面
List
<
LiteOrderItem
>
itemList
=
getLiteOrderItemList
(
mode
);
List
<
DispatchItemDto
>
list
=
dispatchItemMapper
.
toDto
(
itemList
);
return
ResultBean
.
newOkResult
(
list
);
return
NewOrderProcess
(
mode
,
taskDto
.
getLineId
());
}
catch
(
Exception
exception
)
{
log
.
error
(
exception
.
toString
());
return
ResultBean
.
newErrorResult
(-
1
,
exception
.
toString
(),
exception
.
toString
());
...
...
@@ -388,87 +500,92 @@ private IStoragePosManager storagePosManager;
}
@ApiOperation
(
"可用列表详情,点详情时,发送itemId,获取详细信息"
)
@PostMapping
(
"/itemDetial"
)
@AnonymousAccess
public
ResultBean
itemDetial
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
String
mode
=
params
.
get
(
"mode"
).
toString
();
String
itemId
=
params
.
get
(
"itemId"
).
toString
();
log
.
info
(
" itemDetial :mode="
+
mode
+
", itemId="
+
itemId
);
//判断有没有生成任务
LiteOrder
order
=
getOrderByMode
(
mode
);
if
(
order
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
List
<
LiteOrderItem
>
items
=
order
.
getOrderItems
().
stream
()
.
filter
(
item
->
(
item
.
getId
().
equals
(
itemId
)))
.
collect
(
Collectors
.
toList
());
if
(
items
.
size
()
<=
0
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.notFound"
,
"未找到数据"
);
}
LiteOrderItem
selItem
=
items
.
get
(
0
);
List
<
ItemDetialDto
>
detialDtos
=
new
ArrayList
<>();
for
(
LiteOrderItem
item
:
selItem
.
getSelectItems
()
)
{
ItemDetialDto
dto
=
new
ItemDetialDto
(
item
.
getRi
(),
item
.
getNeedNum
(),
item
.
getStatus
(),
item
.
getExecutFailReason
());
detialDtos
.
add
(
dto
);
}
//判断是否需要勾选其他物料
if
(
selItem
.
getOutNum
()
<
selItem
.
getNeedNum
())
{
//需要勾选
CHECKOUT_TYPE
checkoutType
=
dataCache
.
getCheckOutType
();
List
<
String
>
availableStorageIds
=
dataCache
.
getAvailableStorageIds
();
Collection
<
String
>
excludePosIds
=
liteOrderCache
.
excludeOutPosIds
();
List
<
StoragePos
>
otherPosList
=
storagePosManager
.
findInStoragesByPN
(
excludePosIds
,
selItem
.
getPn
(),
checkoutType
);
for
(
StoragePos
pos
:
otherPosList
)
{
ItemDetialDto
dto
=
new
ItemDetialDto
(
pos
.
getBarcode
().
getBarcode
(),
pos
.
getBarcode
().
getAmount
(),
""
,
""
);
detialDtos
.
add
(
dto
);
}
}
if
(
MicronApi
.
Debug
){
if
(
detialDtos
.
size
()<=
0
){
for
(
int
i
=
0
;
i
<
5
;
i
++)
{
String
ok
=
(
i
<=
1
)
?
"CheckOk"
:
"CheckFail"
;
ItemDetialDto
dto
=
new
ItemDetialDto
(
"barcode"
+
i
,
i
*
100
,
ok
,
"msg"
+
i
);
detialDtos
.
add
(
dto
);
}
for
(
int
i
=
6
;
i
<
9
;
i
++)
{
ItemDetialDto
dto
=
new
ItemDetialDto
(
"barcode"
+
i
,
i
*
100
,
""
,
""
);
detialDtos
.
add
(
dto
);
}
}
}
//判断是否需要勾选
return
ResultBean
.
newOkResult
(
detialDtos
);
}
// @ApiOperation("可用列表详情,点详情时,发送itemId,获取详细信息")
// @PostMapping("/itemDetial")
// @AnonymousAccess
// public ResultBean itemDetial(@RequestBody Map<String,Object> params) {
//
// String mode = params.get("mode").toString();
// String itemId = params.get("itemId").toString();
// log.info(" itemDetial :mode=" + mode + ", itemId=" + itemId);
// //判断有没有生成任务
// LiteOrder order = getOrderByMode(mode);
// if (order == null) {
// return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
// }
//
// List<LiteOrderItem> items = order.getOrderItems().stream()
// .filter(item -> (item.getId().equals(itemId)))
// .collect(Collectors.toList());
//
// if (items.size() <= 0) {
// return ResultBean.newErrorResult(-1, "smfcore.micron.notFound", "未找到数据");
// }
//
// LiteOrderItem selItem = items.get(0);
//
// List<ItemDetialDto> detialDtos = new ArrayList<>();
//
// for (LiteOrderItem item : selItem.getSelectItems()
// ) {
// ItemDetialDto dto = new ItemDetialDto(item.getRi(), item.getNeedNum(), item.getStatus(),item.getExecutFailReason());
// detialDtos.add(dto);
// }
//
// //判断是否需要勾选其他物料
// if (selItem.getOutNum() < selItem.getNeedNum()) {
// //需要勾选
//
// CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
// List<String> availableStorageIds = dataCache.getAvailableStorageIds();
// Collection<String> excludePosIds = liteOrderCache.excludeOutPosIds();
// List<StoragePos> otherPosList = storagePosManager.findInStoragesByPN(excludePosIds, selItem.getPn(), checkoutType);
//
// for (StoragePos pos :
// otherPosList) {
//
// ItemDetialDto dto = new ItemDetialDto(pos.getBarcode().getBarcode(), pos.getBarcode().getAmount(), "","");
// detialDtos.add(dto);
// }
// }
//
// if(MicronApi.Debug){
// if(detialDtos.size()<=0){
// for (int i=0;i<5;i++) {
// String ok = (i <= 1) ? "CheckOk" : "CheckFail";
// ItemDetialDto dto = new ItemDetialDto("barcode" + i, i * 100, ok, "msg" + i);
// detialDtos.add(dto);
// }
// for (int i=6;i<9;i++) {
// ItemDetialDto dto = new ItemDetialDto("barcode" + i, i * 100, "", "");
// detialDtos.add(dto);
// }
// }
// }
//
// //判断是否需要勾选
//
// return ResultBean.newOkResult(detialDtos);
// }
@ApiOperation
(
"勾选列表中的Ri,确认提交"
)
@PostMapping
(
"/itemSubmit"
)
@AnonymousAccess
public
ResultBean
itemSubmit
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
public
ResultBean
itemSubmit
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
try
{
String
mode
=
params
.
get
(
"mode"
).
toString
();
String
itemId
=
params
.
get
(
"itemId"
).
toString
();
String
itemId
=
""
;
if
(
params
.
containsKey
(
"itemId"
))
{
itemId
=
params
.
get
(
"itemId"
).
toString
();
}
Object
overrideOut
=
params
.
get
(
"isOverride"
);
boolean
isOver
=
false
;
if
(
ObjectUtil
.
isNotEmpty
(
overrideOut
)
&&
overrideOut
.
toString
().
equalsIgnoreCase
(
"true"
))
{
isOver
=
true
;
}
List
<
Object
>
selectRiList
=
(
List
<
Object
>)
params
.
get
(
"submitRIS"
);
log
.
info
(
" itemDetial :mode="
+
mode
+
", itemId="
+
itemId
);
log
.
info
(
" itemDetial :mode="
+
mode
+
", itemId="
+
itemId
+
""
);
//判断有没有生成任务
LiteOrder
order
=
getOrderByMode
(
mode
);
if
(
order
==
null
)
{
...
...
@@ -479,17 +596,6 @@ private IStoragePosManager storagePosManager;
log
.
info
(
"pnSubmit 操作失败,taskDto数据不完整"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
List
<
LiteOrderItem
>
items
=
order
.
getOrderItems
().
stream
()
.
filter
(
item
->
(
item
.
getId
().
equals
(
itemId
)))
.
collect
(
Collectors
.
toList
());
if
(
items
.
size
()
<=
0
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.notFound"
,
"未找到数据"
);
}
for
(
LiteOrderItem
item
:
items
)
{
if
(
item
.
getId
().
equals
(
itemId
))
{
List
<
Barcode
>
allBarcodes
=
new
ArrayList
<>();
//查找到详情,循环RI,生成API009数据
for
(
Object
ri
:
...
...
@@ -499,18 +605,33 @@ private IStoragePosManager storagePosManager;
allBarcodes
.
add
(
pos
.
getBarcode
());
}
}
//调用API009
Map
<
String
,
MaterialStatus
>
apiResultMap
=
MicronApi
.
Api009
(
order
.
getOperationId
(),
taskDto
.
getLineId
(),
allBarcodes
);
List
<
LiteOrderItem
>
newItems
=
new
ArrayList
<>();
for
(
LiteOrderItem
item
:
order
.
getOrderItems
())
{
List
<
Barcode
>
itemBarcode
=
allBarcodes
.
stream
()
.
filter
(
barcode
->
(
barcode
.
getPartNumber
().
equals
(
item
.
getPn
())))
.
collect
(
Collectors
.
toList
());
List
<
LiteOrderItem
>
selectReelItems
=
item
.
selectItems
;
for
(
Barcode
barcode
:
allBarcodes
)
{
itemBarcode
)
{
LiteOrderItem
reelItem
=
new
LiteOrderItem
();
StoragePos
pos
=
storagePosManager
.
getByBarcode
(
barcode
.
getBarcode
());
reelItem
.
setRi
(
pos
.
getBarcode
().
getBarcode
());
reelItem
.
setNeedNum
(
pos
.
getBarcode
().
getAmount
());
LiteOrderItem
reelItem
=
null
;
List
<
LiteOrderItem
>
findes
=
selectReelItems
.
stream
()
.
filter
(
obj
->
(
obj
.
getRi
().
equals
(
barcode
.
getBarcode
()))).
collect
(
Collectors
.
toList
());
if
(
findes
.
size
()
>
0
)
{
reelItem
=
findes
.
get
(
0
);
}
//如果是之前验证成功的,直接跳过
if
(
reelItem
==
null
)
{
reelItem
=
liteOrderCache
.
NewSelItem
(
pos
);
}
else
if
(
reelItem
.
isSuccess
()
&&
(!
reelItem
.
getStatus
().
equalsIgnoreCase
(
OrderItemStatus
.
wait
)))
{
continue
;
}
MaterialStatus
s
=
apiResultMap
.
get
(
barcode
.
getBarcode
());
if
(
s
!=
null
&&
s
.
isAvailable
())
{
...
...
@@ -523,6 +644,8 @@ private IStoragePosManager storagePosManager;
pos
.
getBarcode
().
setLockName
(
item
.
getPn
());
storagePosManager
.
save
(
pos
);
item
.
setOutNum
(
item
.
getOutNum
()
+
pos
.
getBarcode
().
getAmount
());
item
.
setOutReelCount
(
item
.
getOutReelCount
()
+
1
);
order
.
setTaskReelCount
(
order
.
getTaskReelCount
()
+
1
);
}
else
if
(
s
!=
null
&&
s
.
isReserved
())
{
String
str
=
s
.
getDescription
();
...
...
@@ -545,15 +668,21 @@ private IStoragePosManager storagePosManager;
selectReelItems
.
add
(
reelItem
);
}
item
.
setSelectItems
(
selectReelItems
);
liteOrderItemManager
.
save
(
item
);
newItems
.
add
(
item
);
}
}
order
.
setOrderItems
(
newItems
);
liteOrderManager
.
save
(
order
);
liteOrderCache
.
addOrderToMap
(
order
);
//返回新增列表
log
.
info
(
order
.
getOrderNo
()
+
"已勾选物料完成,直接出料"
);
//直接开始出库
liteOrderCache
.
dispatchCheckOut
(
order
,
false
,
isOver
);
return
getTaskInfo
(
order
);
//判断是否需要勾选
return
ResultBean
.
newOkResult
(
""
);
//
return ResultBean.newOkResult("");
}
catch
(
Exception
exception
)
{
...
...
@@ -563,11 +692,10 @@ private IStoragePosManager storagePosManager;
}
@ApiOperation
(
"工单确认出库"
)
@PostMapping
(
"/checkOut"
)
@AnonymousAccess
public
ResultBean
checkOut
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
public
ResultBean
checkOut
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
try
{
String
mode
=
params
.
get
(
"mode"
).
toString
();
Object
overrideOut
=
params
.
get
(
"isOverride"
);
...
...
@@ -602,72 +730,31 @@ private IStoragePosManager storagePosManager;
@ApiOperation
(
"重试按钮"
)
@PostMapping
(
"/retry"
)
@AnonymousAccess
public
ResultBean
retry
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
public
ResultBean
retry
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
String
mode
=
params
.
get
(
"mode"
).
toString
();
Object
overrideOut
=
params
.
get
(
"isOverride"
);
boolean
isOver
=
false
;
if
(
ObjectUtil
.
isNotEmpty
(
overrideOut
)&&
overrideOut
.
toString
().
equalsIgnoreCase
(
"true"
))
{
Object
overrideOut
=
params
.
get
(
"isOverride"
);
boolean
isOver
=
false
;
if
(
ObjectUtil
.
isNotEmpty
(
overrideOut
)
&&
overrideOut
.
toString
().
equalsIgnoreCase
(
"true"
))
{
isOver
=
true
;
}
log
.
info
(
" retry :mode="
+
mode
+
",重新出库, isOver="
+
isOver
);
log
.
info
(
" retry :mode="
+
mode
+
",重新出库, isOver="
+
isOver
);
//判断有没有生成任务
LiteOrder
order
=
getOrderByMode
(
mode
);
if
(
order
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
String
msg
=
liteOrderCache
.
dispatchCheckOut
(
order
,
true
,
isOver
);
if
(
ObjectUtil
.
isNotEmpty
(
msg
))
{
return
ResultBean
.
newErrorResult
(-
1
,
msg
,
msg
);
String
msg
=
liteOrderCache
.
dispatchCheckOut
(
order
,
true
,
isOver
);
if
(
ObjectUtil
.
isNotEmpty
(
msg
))
{
return
ResultBean
.
newErrorResult
(-
1
,
msg
,
msg
);
}
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
)
{
private
String
CloseOrder
(
LiteOrder
order
)
{
try
{
...
...
@@ -684,7 +771,10 @@ private IStoragePosManager storagePosManager;
if
(
sItem
.
getStatus
()
==
OrderItemStatus
.
notify_fail
||
sItem
.
getStatus
()
==
OrderItemStatus
.
cancel
||
sItem
.
getStatus
()
==
OrderItemStatus
.
executing
)
{
List
<
DataLog
>
dataLogList
=
dataLogManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"subSourceId"
).
is
(
sItem
.
getId
())).
addCriteria
(
Criteria
.
where
(
"status"
).
is
(
OP_STATUS
.
FINISHED
.
name
())));
Query
(
Criteria
.
where
(
"subSourceId"
).
is
(
orderItem
.
getId
())).
addCriteria
(
Criteria
.
where
(
"status"
).
is
(
OP_STATUS
.
FINISHED
.
name
())).
addCriteria
(
Criteria
.
where
(
"barcode"
).
is
(
sItem
.
getRi
())));
if
(
dataLogList
.
size
()
>
0
)
{
needSendList
.
addAll
(
dataLogList
);
...
...
@@ -717,12 +807,13 @@ private IStoragePosManager storagePosManager;
MicronApi
.
ActionUpdate
(
order
.
getOperationId
(),
MicronApi
.
ABORT
);
}
liteOrderCache
.
clearOrderLock
(
order
);
return
""
;
}
@ApiOperation
(
"放弃出库"
)
@PostMapping
(
"/abort"
)
@AnonymousAccess
public
ResultBean
abort
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
public
ResultBean
abort
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
String
mode
=
params
.
get
(
"mode"
).
toString
();
log
.
info
(
" abort :mode="
+
mode
);
...
...
@@ -734,38 +825,33 @@ private IStoragePosManager storagePosManager;
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
if
(
order
!=
null
)
{
List
<
LiteOrderItem
>
liteOrderItemList
=
order
.
getOrderItems
();
List
<
LiteOrderItem
>
newList
=
new
ArrayList
<>();
for
(
LiteOrderItem
orderItem
:
liteOrderItemList
)
{
if
(
orderItem
.
getStatus
()
==
OrderItemStatus
.
notify_fail
)
{
List
<
DataLog
>
dataLogList
=
dataLogManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"subSourceId"
).
is
(
orderItem
.
getId
())));
//如果任务未结束,结束任务
for
(
DataLog
dataLog
:
dataLogList
//有任务的工单不能关闭
List
<
DataLog
>
allTask
=
taskService
.
getAllTasks
();
for
(
DataLog
task
:
allTask
)
{
if
(
dataLog
.
isExecuting
())
{
if
(
OP
.
CHECKOUT
==
task
.
getType
()
&&
(!
task
.
isEnd
()))
{
//更新工单状态
String
taskSourceName
=
task
.
getSourceName
();
if
(!
Strings
.
isNullOrEmpty
(
taskSourceName
)
&&
order
.
getOrderNo
().
equals
(
taskSourceName
))
{
if
(
task
.
isExecuting
()||
task
.
isWait
())
{
taskService
.
cancelTask
(
dataLog
.
getId
());
log
.
info
(
"abort 终止出库,mode="
+
mode
+
",取消正在执行的出库任务:barcode="
+
dataLog
.
getBarcode
()
+
",posName="
+
dataLog
.
getPosName
());
log
.
info
(
"abort 终止出库,mode="
+
mode
+
",还有正在执行的任务:barcode="
+
task
.
getBarcode
()
+
",posName="
+
task
.
getPosName
());
// taskService.cancelTask(task.getId());
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.order.close.taskNotEnd"
,
"操作失败,工单还有未完成的任务"
);
}
}
orderItem
.
setStatus
(
OrderItemStatus
.
cancel
);
orderItem
=
liteOrderItemManager
.
save
(
orderItem
);
newList
.
add
(
orderItem
);
log
.
info
(
" abort :barcode=["
+
orderItem
.
getPn
()
+
"] 取消出库任务"
);
}
}
log
.
info
(
"abort 终止出库,mode="
+
mode
+
",取消正在执行的出库任务:关闭工单="
+
order
.
getOrderNo
());
CloseOrder
(
order
);
}
else
{
String
key
=
Constants
.
CACHE_DISPATCH
+
mode
;
String
msg
=
CloseOrder
(
order
);
log
.
info
(
"abort 终止出库,mode="
+
mode
+
",取消正在执行的出库任务:关闭工单="
+
order
.
getOrderNo
()
+
",结果="
+
msg
);
}
else
{
String
key
=
Constants
.
CACHE_DISPATCH
+
mode
;
log
.
info
(
"abort mode="
+
mode
+
" 清空 key="
+
key
+
" 的cache,更改action=ABORT"
);
MicronApi
.
ActionUpdate
(
order
.
getOperationId
(),
MicronApi
.
ABORT
);
MicronApi
.
ActionUpdate
(
taskDto
.
getOperationId
(),
MicronApi
.
ABORT
);
dataCache
.
updateCache
(
key
,
""
);
}
return
ResultBean
.
newOkResult
(
""
);
...
...
@@ -774,7 +860,7 @@ private IStoragePosManager storagePosManager;
public
LiteOrder
getOrderByMode
(
String
mode
)
{
Collection
<
LiteOrder
>
liteOrder
=
liteOrderCache
.
getAllLiteOrder
();
for
(
LiteOrder
order
:
liteOrder
)
{
if
(
ObjectUtil
.
isNotEmpty
(
order
.
getMode
())&&
mode
.
equals
(
order
.
getMode
())
&&
!
order
.
isClosed
())
{
if
(
ObjectUtil
.
isNotEmpty
(
order
.
getMode
())
&&
mode
.
equals
(
order
.
getMode
())
&&
!
order
.
isClosed
())
{
return
order
;
}
...
...
@@ -782,11 +868,62 @@ private IStoragePosManager storagePosManager;
return
null
;
}
public
List
<
LiteOrderItem
>
getLiteOrderItemList
(
String
mode
)
{
LiteOrder
order
=
getOrderByMode
(
mode
);
if
(
order
!=
null
){
return
order
.
getOrderItems
();
@ApiOperation
(
"点击对应物料的数量, 获取料盘详细数据"
)
@GetMapping
(
"/reelDetial"
)
@AnonymousAccess
public
ResultBean
reelDetial
(
@RequestParam
Map
<
String
,
Object
>
params
)
{
//参数:mType 物料类型:pcb/shoebox/pizzaBox/reel/tray
//参数:state 状态: success/failure/ng
//参数:mode (点大按钮时的mode)
String
mType
=
params
.
get
(
"mType"
).
toString
();
String
state
=
params
.
get
(
"state"
).
toString
();
String
mode
=
params
.
get
(
"mode"
).
toString
();
LiteOrder
order
=
getOrderByMode
(
mode
);
List
<
MaterialDtialDto
>
dtos
=
new
ArrayList
<>();
for
(
LiteOrderItem
item
:
order
.
getOrderItems
())
{
if
(
item
.
getSelectItems
()
==
null
)
{
continue
;
}
return
null
;
for
(
LiteOrderItem
selItem
:
item
.
getSelectItems
())
{
try
{
String
mtype
=
selItem
.
getAppendData
(
"mtype"
);
if
(
mtype
.
equalsIgnoreCase
(
mType
))
{
boolean
is
=
false
;
if
(
selItem
.
isSuccess
()
&&
state
.
equalsIgnoreCase
(
"success"
))
{
is
=
true
;
}
else
if
(
selItem
.
isNg
()
&&
state
.
equalsIgnoreCase
(
"ng"
))
{
is
=
true
;
}
else
if
(
selItem
.
isTranFail
()
&&
state
.
equalsIgnoreCase
(
"failure"
))
{
is
=
true
;
}
if
(
is
)
{
MaterialDtialDto
dto
=
new
MaterialDtialDto
(
selItem
.
getRi
(),
selItem
.
getPn
(),
new
Date
(),
""
,
selItem
.
getOutNum
(),
0
,
0
,
""
,
""
,
""
,
""
,
selItem
.
getExecutFailReason
(),
selItem
.
getStatus
());
dtos
.
add
(
dto
);
}
}
}
catch
(
Exception
exception
)
{
log
.
error
(
"error :"
+
exception
.
toString
());
}
}
}
return
ResultBean
.
newOkResult
(
dtos
);
}
// public List<LiteOrderItem> getLiteOrderItemList(String mode) {
// LiteOrder order=getOrderByMode(mode);
// if(order!=null){
// return order.getOrderItems();
// }
// return null;
// }
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论