Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 9f21ba77
由
LN
编写于
2024-12-09 15:07:47 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
增加DeliveryReserve处理,预留成功默认返回2010
1 个父辈
132da977
显示空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
899 行增加
和
301 行删除
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/HanwhaApiHandler.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSCommunicator.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSUtil.java
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
查看文件 @
9f21ba7
...
@@ -810,6 +810,20 @@ public class DataCache {
...
@@ -810,6 +810,20 @@ public class DataCache {
}
}
return
availableStorageIds
;
return
availableStorageIds
;
}
}
public
List
<
String
>
getAvailableStorageIds
(
List
<
String
>
cidList
)
{
List
<
String
>
availableStorageIds
=
new
ArrayList
<>();
for
(
Storage
storage
:
getAllStorage
().
values
())
{
if
(!
cidList
.
contains
(
storage
)){
continue
;
}
StatusBean
bean
=
DevicesStatusUtil
.
getStatusBean
(
storage
.
getCid
());
if
(
bean
==
null
||
bean
.
timeOut
()
||
!
bean
.
isAvailable
())
{
continue
;
}
availableStorageIds
.
add
(
storage
.
getId
());
}
return
availableStorageIds
;
}
public
List
<
String
>
getAvailableStorageIds
(
DeviceType
deviceType
)
{
public
List
<
String
>
getAvailableStorageIds
(
DeviceType
deviceType
)
{
List
<
String
>
availableStorageIds
=
new
ArrayList
<>();
List
<
String
>
availableStorageIds
=
new
ArrayList
<>();
for
(
Storage
storage
:
getAllStorage
().
values
())
{
for
(
Storage
storage
:
getAllStorage
().
values
())
{
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
9f21ba7
...
@@ -430,10 +430,13 @@ public class LiteOrderCache {
...
@@ -430,10 +430,13 @@ public class LiteOrderCache {
public
synchronized
String
checkOutLiteOrder
(
String
orderNo
,
boolean
outBom
,
boolean
singleOut
)
{
public
synchronized
String
checkOutLiteOrder
(
String
orderNo
,
boolean
outBom
,
boolean
singleOut
)
{
return
checkOutLiteOrder
(
orderNo
,
outBom
,
singleOut
,
false
);
return
checkOutLiteOrder
(
orderNo
,
outBom
,
singleOut
,
false
);
}
}
public
synchronized
String
checkOutLiteOrder
(
String
orderNo
,
boolean
outBom
,
boolean
singleOut
,
boolean
needCheck
)
{
return
checkOutLiteOrder
(
orderNo
,
outBom
,
singleOut
,
needCheck
);
}
/**
/**
* 执行工单出库
* 执行工单出库
*/
*/
public
synchronized
String
checkOutLiteOrder
(
String
orderNo
,
boolean
outBom
,
boolean
singleOut
,
boolean
needCheck
)
{
public
synchronized
String
checkOutLiteOrder
(
String
orderNo
,
boolean
outBom
,
boolean
singleOut
,
boolean
needCheck
,
List
<
String
>
cidList
)
{
LiteOrder
cacheOrder
=
liteOrderMap
.
get
(
orderNo
);
LiteOrder
cacheOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
cacheOrder
==
null
)
{
if
(
cacheOrder
==
null
)
{
...
@@ -484,7 +487,8 @@ public class LiteOrderCache {
...
@@ -484,7 +487,8 @@ public class LiteOrderCache {
return
"smfcore.order.out.noTask"
;
return
"smfcore.order.out.noTask"
;
}
}
List
<
String
>
availableStorageIds
=
dataCache
.
getAvailableStorageIds
();
List
<
String
>
availableStorageIds
=
dataCache
.
getAvailableStorageIds
(
cidList
);
//其他出库模式一次性全部生成任务
//其他出库模式一次性全部生成任务
for
(
LiteOrderItem
orderItem
:
cacheOrder
.
getOrderItems
())
{
for
(
LiteOrderItem
orderItem
:
cacheOrder
.
getOrderItems
())
{
orderItem
.
setOutNum
(
0
);
orderItem
.
setOutNum
(
0
);
...
@@ -829,4 +833,122 @@ public class LiteOrderCache {
...
@@ -829,4 +833,122 @@ public class LiteOrderCache {
return
liteOrderMap
.
values
();
return
liteOrderMap
.
values
();
}
}
/**
* 预锁定物料
*/
public
synchronized
String
LiteOrderLockReel
(
String
orderNo
,
boolean
outBom
,
boolean
singleOut
,
boolean
needCheck
,
List
<
String
>
cidList
)
{
LiteOrder
cacheOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
cacheOrder
==
null
)
{
cacheOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
}
if
(
cacheOrder
==
null
)
{
return
"smfcore.order.out.notFound"
;
}
if
(
!
cacheOrder
.
isTaskFinished
()
&&
!
cacheOrder
.
isNew
())
{
log
.
info
(
"工单["
+
orderNo
+
"]正在执行"
);
return
"smfcore.order.out.executing"
;
}
if
(
cacheOrder
.
isClosed
())
{
log
.
info
(
"工单["
+
orderNo
+
"]已关闭,无法出库"
);
return
"smfcore.order.hasClose"
;
}
//先查找是否已经锁定过库位,如果已经锁定过,出锁定的库位
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
cacheOrder
.
getOrderNo
());
if
(
lockPosList
!=
null
&&
lockPosList
.
size
()>
0
){
return
"ok"
;
}
if
(
needCheck
&&(
shortageCheck
(
cacheOrder
,
outBom
)))
{
return
"smfcore.order.out.noTask"
;
}
log
.
info
(
"开始为工单挑料["
+
orderNo
+
"] outBom="
+
outBom
);
//liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
int
taskReelCount
=
0
;
CHECKOUT_TYPE
checkoutType
=
dataCache
.
getCheckOutType
();
List
<
String
>
availableStorageIds
=
dataCache
.
getAvailableStorageIds
(
cidList
);
//其他出库模式一次性全部生成任务
for
(
LiteOrderItem
orderItem
:
cacheOrder
.
getOrderItems
())
{
//剩余未出数量
Float
totalNum
=
orderItem
.
getNeedNum
()
*
cacheOrder
.
getOrderTimes
();
int
remainNum
=
totalNum
.
intValue
()
-
orderItem
.
getTotalOutNum
();
//剩余未出盘数
int
remainReelCount
=
orderItem
.
getNeedReelCount
()
-
orderItem
.
getTotalOutReelCount
();
//此PN未完成
if
(
remainNum
>
0
||
remainReelCount
>
0
)
{
if
(
outBom
)
{
//套料出库,设置剩余数量为1,这样就只会出一盘
remainNum
=
1
;
remainReelCount
=
0
;
}
int
assignNum
=
0
;
int
assignReelCount
=
0
;
while
(
assignNum
<
remainNum
||
assignReelCount
<
remainReelCount
)
{
Collection
<
String
>
excludePosIds
=
excludeOutPosIds
();
String
partNumber
=
orderItem
.
getPn
();
String
reelId
=
orderItem
.
getRi
();
String
mpn
=
orderItem
.
getMpn
();
StoragePos
pos
=
null
;
if
(!
Strings
.
isNullOrEmpty
(
reelId
)){
//RI
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
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
());
}
if
(
pos
==
null
)
{
// //锁定物料
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
());
Barcode
barcode
=
pos
.
getBarcode
();
barcode
.
setLockId
(
cacheOrder
.
getOrderNo
());
pos
.
setBarcode
(
barcode
);
storagePosManager
.
save
(
pos
);
}
//如果是RI出库,只有一盘,出完就结束
if
(!
Strings
.
isNullOrEmpty
(
reelId
)){
break
;
}
}
}
}
log
.
info
(
"工单["
+
orderNo
+
"]挑料完成,锁定物料盘数["
+
taskReelCount
+
"]"
);
if
(
taskReelCount
<=
0
)
{
//return "工单无可执行的任务";
return
"smfcore.order.out.noTask"
;
}
return
""
;
}
}
}
src/main/java/com/neotel/smfcore/custom/hanwha/handler/HanwhaApiHandler.java
查看文件 @
9f21ba7
...
@@ -55,6 +55,8 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
...
@@ -55,6 +55,8 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
private
IStoragePosManager
storagePosManager
;
private
IStoragePosManager
storagePosManager
;
@Autowired
@Autowired
private
TMSCommunicator
tmsCommunicator
;
private
TMSCommunicator
tmsCommunicator
;
@Autowired
private
TMSUtil
tmsUtil
;
@Autowired
@Autowired
private
IComponentManager
componentManager
;
private
IComponentManager
componentManager
;
...
@@ -228,7 +230,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
...
@@ -228,7 +230,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
log
.
info
(
"工单取消处理中,此处不通知TMS"
);
log
.
info
(
"工单取消处理中,此处不通知TMS"
);
}
else
{
}
else
{
log
.
info
(
"工单关闭,通知TMS"
);
log
.
info
(
"工单关闭,通知TMS"
);
TMSReserve
tmsReserve
=
tms
Communicator
.
GetOrderInfo
(
liteOrder
);
TMSReserve
tmsReserve
=
tms
Util
.
GetOrderInfo
(
liteOrder
);
List
<
TMSReserve
>
list
=
new
ArrayList
<>();
List
<
TMSReserve
>
list
=
new
ArrayList
<>();
list
.
add
(
tmsReserve
);
list
.
add
(
tmsReserve
);
tmsCommunicator
.
ResponseUpdateDeliveryReserveState
(
0
,
list
,
0
);
tmsCommunicator
.
ResponseUpdateDeliveryReserveState
(
0
,
list
,
0
);
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSCommunicator.java
查看文件 @
9f21ba7
...
@@ -93,12 +93,15 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -93,12 +93,15 @@ public class TMSCommunicator implements WsMsgReceivedListener {
@Autowired
@Autowired
private
IStoragePosManager
storagePosManager
;
private
IStoragePosManager
storagePosManager
;
@Autowired
//
@Autowired
private
IDataLogManager
dataLogManager
;
//
private IDataLogManager dataLogManager;
@Autowired
@Autowired
private
IComponentManager
componentManager
;
private
IComponentManager
componentManager
;
@Autowired
private
TMSUtil
tmsUtil
;
private
static
int
gRequestID
=
1000
;
private
static
int
gRequestID
=
1000
;
public
static
int
GetRequestID
()
public
static
int
GetRequestID
()
{
{
...
@@ -309,28 +312,6 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -309,28 +312,6 @@ public class TMSCommunicator implements WsMsgReceivedListener {
}
}
log
.
info
(
"WebSocket 已连接,开始同步物料信息 RequestSyncPartReelPosInfo"
);
log
.
info
(
"WebSocket 已连接,开始同步物料信息 RequestSyncPartReelPosInfo"
);
// for (Map<String, StoragePos> map : allUsedPosList) {
//
// for (StoragePos pos :
// map.values()) {
// if (pos.getBarcode() == null) {
// continue;
// }
// Storage storage = dataCache.getStorageById(pos.getStorageId());
// if (storage == null) {
// log.error("posName[" + pos.getPosName() + "],storageId[" + pos.getStorageId() + "]未找到料仓");
// continue;
// }
// Barcode barcode = pos.getBarcode();
// TMSPartReelPos bean = TMSPartReelPos.newBean(barcode.getPartNumber(), barcode.getBarcode(), barcode.getAmount(),
// storage.getCid(), pos.getPosName(), 4, barcode.getPutInDate().getTime(), -1);
//
// list.add(bean);
//// if(list.size()>=10){
//// break;
//// }
// }
// }
Map
<
String
,
Storage
>
allStorage
=
dataCache
.
getAllStorage
();
Map
<
String
,
Storage
>
allStorage
=
dataCache
.
getAllStorage
();
for
(
Storage
storage
:
for
(
Storage
storage
:
allStorage
.
values
())
{
allStorage
.
values
())
{
...
@@ -446,7 +427,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -446,7 +427,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
List
<
LiteOrder
>
orders
=
liteOrderManager
.
findByQuery
(
query
);
List
<
LiteOrder
>
orders
=
liteOrderManager
.
findByQuery
(
query
);
for
(
LiteOrder
order:
orders
for
(
LiteOrder
order:
orders
)
{
)
{
TMSReserve
tmsReserve
=
GetOrderInfo
(
order
);
TMSReserve
tmsReserve
=
tmsUtil
.
GetOrderInfo
(
order
);
if
(
tmsReserve
!=
null
&&
tmsReserve
.
getPartList
().
size
()>
0
){
if
(
tmsReserve
!=
null
&&
tmsReserve
.
getPartList
().
size
()>
0
){
tmsReserves
.
add
(
tmsReserve
);
tmsReserves
.
add
(
tmsReserve
);
}
}
...
@@ -456,71 +437,6 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -456,71 +437,6 @@ public class TMSCommunicator implements WsMsgReceivedListener {
}
}
public
TMSReserve
GetOrderInfo
(
LiteOrder
liteOrder
)
{
TMSReserve
tmsReserve
=
new
TMSReserve
();
tmsReserve
.
setReserveCode
(
liteOrder
.
getOrderNo
());
SimpleDateFormat
formatter
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
String
dateString
=
formatter
.
format
(
liteOrder
.
getCreateDate
());
tmsReserve
.
setDate
(
dateString
);
List
<
TMSPart
>
tmsParts
=
new
ArrayList
<>();
//查找工单的所有任务
Criteria
c
=
Criteria
.
where
(
"sourceName"
).
is
(
liteOrder
.
getOrderNo
()).
and
(
"type"
).
is
(
2
);
List
<
DataLog
>
dataLogs
=
dataLogManager
.
findByQuery
(
new
Query
(
c
));
boolean
hasCancelTask
=
false
;
boolean
allCancel
=
true
;
for
(
DataLog
task
:
dataLogs
)
{
// if(ObjectUtil.isNotEmpty(item.getPn())&&task.getPartNumber().equals(task.getPartNumber())){
//
// }else if(ObjectUtil.isNotEmpty(item.getRi())&&task.getBarcode().equals(task.getBarcode())){
//
// }else{
// continue;
// }
//是工单出库任务
if
(
task
.
isCheckOutTask
()
&&
task
.
getSourceName
().
equals
(
liteOrder
.
getOrderNo
()))
{
int
responseNum
=
task
.
getNum
();
String
logCode
=
TMS_Code
.
CODE_2013
;
//默认已完成
if
(
task
.
isCancel
())
{
hasCancelTask
=
true
;
responseNum
=
0
;
logCode
=
TMS_Code
.
CODE_2012
;
//取消成功
}
else
if
(
task
.
isExecuting
()
||
task
.
isWait
())
{
logCode
=
TMS_Code
.
CODE_2011
;
//出库中
allCancel
=
false
;
}
else
{
logCode
=
TMS_Code
.
CODE_2013
;
//已完成
allCancel
=
false
;
}
TMSPart
part
=
TMSPart
.
newBean
(
tmsParts
.
size
(),
task
.
getPartNumber
(),
task
.
getBarcode
(),
task
.
getNum
(),
responseNum
,
logCode
,
task
.
getCid
(),
task
.
getPosName
());
tmsParts
.
add
(
part
);
}
}
//有取消且有完成的返回2016.全部取消返回2012
if
(
liteOrder
.
isClosed
())
{
//如果工单全部取消,需要发送2012
if
(
allCancel
)
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2012
);
}
else
if
(
hasCancelTask
)
{
//有取消任务返回2016
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2016
);
}
else
if
(
tmsParts
.
size
()
>
0
)
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2013
);
}
else
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2001
);
}
}
else
if
(
liteOrder
.
isOutOne
()
||
liteOrder
.
isOutTails
()
||
liteOrder
.
isOutOne
())
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2011
);
}
tmsReserve
.
setPartList
(
tmsParts
);
return
tmsReserve
;
}
private
void
parseMessage
(
String
message
)
{
private
void
parseMessage
(
String
message
)
{
...
@@ -546,6 +462,9 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -546,6 +462,9 @@ public class TMSCommunicator implements WsMsgReceivedListener {
}
}
List
<
String
>
partItems
;
List
<
String
>
partItems
;
List
<
Integer
>
partCounts
;
List
<
Integer
>
partCounts
;
List
<
String
>
rackList
;
List
<
TMSPos
>
Locations
;
List
<
String
>
reelCds
;
boolean
towerLamp
;
boolean
towerLamp
;
String
registerID
;
String
registerID
;
String
reelCode
;
String
reelCode
;
...
@@ -558,35 +477,62 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -558,35 +477,62 @@ public class TMSCommunicator implements WsMsgReceivedListener {
partItems
=
getMapValue
(
msgMap
,
"PartNames"
);
partItems
=
getMapValue
(
msgMap
,
"PartNames"
);
partCounts
=
getMapValue
(
msgMap
,
"Counts"
);
partCounts
=
getMapValue
(
msgMap
,
"Counts"
);
towerLamp
=
(
boolean
)
getMapValue
(
msgMap
,
"TowerLamp"
);
towerLamp
=
(
boolean
)
getMapValue
(
msgMap
,
"TowerLamp"
);
rackList
=
getMapValue
(
msgMap
,
"RackList"
);
if
(
rackList
==
null
){
rackList
=
new
ArrayList
<>();
}
//3.8 RequestDeliveryOrder
//3.8 RequestDeliveryOrder
RequestDeliveryOrder
(
requestID
,
partItems
,
partCounts
,
towerLamp
);
RequestDeliveryOrder
(
requestID
,
partItems
,
partCounts
,
towerLamp
,
rackList
);
break
;
break
;
case
"RequestDeliveryOrderByLocation"
:
case
"RequestDeliveryOrderByLocation"
:
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
L
ist
<
TMSPos
>
L
ocations
=
getMapValue
(
msgMap
,
"Locations"
);
Locations
=
getMapValue
(
msgMap
,
"Locations"
);
//3.10 RequestDeliveryOrderByLocation
//3.10 RequestDeliveryOrderByLocation
RequestDeliveryOrderByLocation
(
requestID
,
Locations
);
RequestDeliveryOrderByLocation
(
requestID
,
Locations
);
break
;
break
;
case
"RequestDeliveryOrderByReelCd"
:
case
"RequestDeliveryOrderByReelCd"
:
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
List
<
String
>
reelCds
=
getMapValue
(
msgMap
,
"ReelCds"
);
reelCds
=
getMapValue
(
msgMap
,
"ReelCds"
);
rackList
=
getMapValue
(
msgMap
,
"RackList"
);
//3.12 RequestDeliveryOrderByReelCd
//3.12 RequestDeliveryOrderByReelCd
RequestDeliveryOrderByReelCd
(
requestID
,
reelCds
);
RequestDeliveryOrderByReelCd
(
requestID
,
reelCds
,
rackList
);
break
;
break
;
case
"RequestUpdateDeliveryReserveState"
:
case
"RequestUpdateDeliveryReserveState"
:
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
List
<
String
>
reserveCodes
=
getMapValue
(
msgMap
,
"ReserveCodes"
);
List
<
String
>
reserveCodes
=
getMapValue
(
msgMap
,
"ReserveCodes"
);
List
<
Integer
>
resultCodes
=
getMapValue
(
msgMap
,
"ResultCodes"
);
List
<
Integer
>
resultCodes
=
getMapValue
(
msgMap
,
"ResultCodes"
);
//
//
//3.
14
RequestUpdateDeliveryReserveState
//3.
20
RequestUpdateDeliveryReserveState
RequestUpdateDeliveryReserveState
(
requestID
,
reserveCodes
,
resultCodes
);
RequestUpdateDeliveryReserveState
(
requestID
,
reserveCodes
,
resultCodes
);
break
;
break
;
// case "RequestDeliveryReserve":
case
"RequestDeliveryReserve"
:
// partItems = getMapValue(msgMap, "PartNames");
partItems
=
getMapValue
(
msgMap
,
"PartNames"
);
// partCounts = getMapValue(msgMap, "Counts");
partCounts
=
getMapValue
(
msgMap
,
"Counts"
);
// RequestDeliveryReserve(requestID, partItems, partCounts);
towerLamp
=
(
boolean
)
getMapValue
(
msgMap
,
"TowerLamp"
);
//
rackList
=
getMapValue
(
msgMap
,
"RackList"
);
// break;
if
(
rackList
==
null
){
rackList
=
new
ArrayList
<>();
}
//3.14 RequestDeliveryReserve
RequestDeliveryReserve
(
requestID
,
partItems
,
partCounts
,
towerLamp
,
rackList
);
break
;
case
"RequestDeliveryReserveByLocation"
:
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
Locations
=
getMapValue
(
msgMap
,
"Locations"
);
// 3.16 ,RequestDeliveryReserveByLocation
RequestDeliveryReserveByLocation
(
requestID
,
Locations
);
break
;
case
"RequestDeliveryReserveByReelCd"
:
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
reelCds
=
getMapValue
(
msgMap
,
"ReelCds"
);
rackList
=
getMapValue
(
msgMap
,
"RackList"
);
//3.18 RequestDeliveryOrderByReelCd
RequestDeliveryReserveByReelCd
(
requestID
,
reelCds
,
rackList
);
break
;
// case "RequestResultOfDeliveryReserve":
// case "RequestResultOfDeliveryReserve":
// String reserveCode = getMapValue(msgMap, "ReserveCode");
// String reserveCode = getMapValue(msgMap, "ReserveCode");
// RequestResultOfDeliveryReserve(requestID, reserveCode);
// RequestResultOfDeliveryReserve(requestID, reserveCode);
...
@@ -651,48 +597,20 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -651,48 +597,20 @@ public class TMSCommunicator implements WsMsgReceivedListener {
return
null
;
return
null
;
}
}
private
LiteOrder
createOrder
(
int
requestID
,
List
<
LiteOrderItem
>
items
,
String
orderNo
,
boolean
autoOut
)
{
if
(
items
.
size
()
<=
0
)
{
return
null
;
}
//判断是否有已执行的工单,有的话创建失败
public
void
OrderProEndUpdateState
(
String
requestCmd
,
int
requestID
,
LiteOrder
liteOrder
){
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
ne
(
LITEORDER_STATUS
.
CLOSED
));
List
<
LiteOrder
>
orderList
=
liteOrderManager
.
findByQuery
(
query
);
if
(
orderList
.
size
()>
0
){
log
.
info
(
"RequestDelivery: 当前有未关闭的工单"
+
orderList
.
size
()+
",创建工单失败"
);
return
null
;
}
LiteOrder
liteOrder
=
new
LiteOrder
(
orderNo
,
items
);
//如果工单执行中,发送ResponseUpdateDeliveryReserveState,否则不需要
liteOrder
.
setSource
(
"DeliveryOrder"
);
if
(
liteOrder
.
isClosed
())
{
LiteOrder
dbOrder
=
liteOrderManager
.
findByOrderNo
(
liteOrder
.
getOrderNo
());
log
.
info
(
requestCmd
+
" 工单已关闭,不需要发送 发送ResponseUpdateDeliveryReserveState"
);
if
(
dbOrder
!=
null
)
{
orderNo
=
orderNo
+
"-"
+
requestID
;
dbOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
dbOrder
==
null
)
{
liteOrder
.
setOrderNo
(
orderNo
);
}
else
{
}
else
{
log
.
info
(
"RequestDelivery :数据库中已存在工单号为["
+
orderNo
+
"],创建工单失败"
);
return
null
;
}
}
log
.
info
(
"RequestDelivery:新建工单:"
+
liteOrder
.
getOrderNo
()
+
",共"
+
items
.
size
()
+
"条工单详情,自动执行:"
+
autoOut
);
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
if
(
autoOut
)
{
try
{
liteOrderCache
.
checkOutLiteOrder
(
liteOrder
.
getOrderNo
(),
false
,
false
,
true
);
TMSReserve
tmsReserve
=
tmsUtil
.
GetOrderInfo
(
liteOrder
);
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
List
<
TMSReserve
>
tmsReserves
=
new
ArrayList
<>();
}
catch
(
ValidateException
ex
)
{
tmsReserves
.
add
(
tmsReserve
);
log
.
error
(
"RequestDelivery 自动执行工单["
+
liteOrder
.
getOrderNo
()
+
"] error:"
+
ex
.
toString
());
ResponseUpdateDeliveryReserveState
(
requestID
,
tmsReserves
,
0
);
}
}
}
return
liteOrder
;
}
}
/**
/**
* 3.8 RequestDeliveryOrder
* 3.8 RequestDeliveryOrder
* @param requestID
* @param requestID
...
@@ -700,42 +618,27 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -700,42 +618,27 @@ public class TMSCommunicator implements WsMsgReceivedListener {
* @param partCount
* @param partCount
* @param towerLamp
* @param towerLamp
*/
*/
private
synchronized
void
RequestDeliveryOrder
(
int
requestID
,
List
<
String
>
partItem
,
List
<
Integer
>
partCount
,
boolean
towerLamp
)
{
private
synchronized
void
RequestDeliveryOrder
(
int
requestID
,
List
<
String
>
partItem
,
List
<
Integer
>
partCount
,
boolean
towerLamp
,
List
<
String
>
rackList
)
{
// 3.9 ResponseDeliveryOrder
// 3.9 ResponseDeliveryOrder
TMSReserve
tmsReserve
=
null
;
String
requestCmd
=
"RequestDeliveryOrder"
;
String
responseCmd
=
"ResponseDeliveryOrder"
;
try
{
try
{
if
(
partItem
==
null
||
partCount
==
null
||
partItem
.
size
()
<=
0
||
partCount
.
size
()
<=
0
)
{
if
(
partItem
==
null
||
partCount
==
null
||
partItem
.
size
()
<=
0
||
partCount
.
size
()
<=
0
)
{
log
.
info
(
"RequestDeliveryOrder
数据不完整,直接返回"
);
log
.
info
(
requestCmd
+
"
数据不完整,直接返回"
);
ResponseDeliveryOrder
(
requestID
,
new
ArrayList
<>(),
""
,
""
);
ResponseDeliveryOrder
(
re
sponseCmd
,
re
questID
,
new
ArrayList
<>(),
""
,
""
);
return
;
return
;
}
}
String
soName
=
"DO"
+
DateUtil
.
toDateString
(
new
Date
(),
"yyyyMMddHHmmss"
);
String
soName
=
"DO"
+
DateUtil
.
toDateString
(
new
Date
(),
"yyyyMMddHHmmss"
);
List
<
LiteOrderItem
>
liteOrderItems
=
new
ArrayList
<>();
int
index
=
0
;
List
<
LiteOrderItem
>
liteOrderItems
=
tmsUtil
.
partToItems
(
partItem
,
partCount
);
for
(
String
pn
:
partItem
)
{
LiteOrder
liteOrder
=
tmsUtil
.
createOrder
(
responseCmd
,
requestID
,
liteOrderItems
,
soName
,
true
,
rackList
);
int
count
=
Convert
.
toInt
(
partCount
.
get
(
index
));
if
(
ObjectUtil
.
isNotEmpty
(
pn
)
&&
count
>
0
)
{
LiteOrderItem
item
=
new
LiteOrderItem
();
item
.
setPn
(
pn
);
item
.
setNeedNum
(
count
);
liteOrderItems
.
add
(
item
);
}
index
++;
}
LiteOrder
liteOrder
=
createOrder
(
requestID
,
liteOrderItems
,
soName
,
true
);
if
(
liteOrder
==
null
){
if
(
liteOrder
==
null
){
//同时只能有一个工单执行,创建工单时不能有未关闭的工单。返回2014
//同时只能有一个工单执行,创建工单时不能有未关闭的工单。返回2014
List
<
TMSPart
>
parts
=
new
ArrayList
<>();
List
<
TMSPart
>
parts
=
tmsUtil
.
itemsToTMSPartList
(
liteOrderItems
)
;
for
(
LiteOrderItem
item
:
ResponseDeliveryOrder
(
responseCmd
,
requestID
,
parts
,
""
,
""
);
liteOrderItems
)
{
TMSPart
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
0
,
TMS_Code
.
CODE_2014
,
""
,
""
);
parts
.
add
(
p
);
}
ResponseDeliveryOrder
(
requestID
,
parts
,
""
,
""
);
}
else
{
}
else
{
//能够出库成功返回2010,库存不足范围2002 Out Of Part
//能够出库成功返回2010,库存不足范围2002 Out Of Part
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
...
@@ -761,13 +664,13 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -761,13 +664,13 @@ public class TMSCommunicator implements WsMsgReceivedListener {
requestNum
=
task
.
getNum
()
-
(
curroNum
-
item
.
getNeedNum
());
requestNum
=
task
.
getNum
()
-
(
curroNum
-
item
.
getNeedNum
());
}
}
TMSPart
p
=
TMSPart
.
newBean
(
parts
.
size
(),
task
.
getPartNumber
(),
task
.
getBarcode
(),
requestNum
,
task
.
getNum
(),
TMS_Code
.
CODE_2010
,
task
.
getCid
(),
task
.
getPosName
());
TMSPart
p
=
TMSPart
.
newBean
(
parts
.
size
(),
task
.
getPartNumber
(),
task
.
getBarcode
(),
requestNum
,
task
.
getNum
(),
TMS_Code
.
CODE_2010
,
task
.
getCid
(),
task
.
getPosName
());
log
.
info
(
"RequestDeliveryOrder
pn="
+
task
.
getPartNumber
()
+
",出库成功:code="
+
TMS_Code
.
CODE_2010
+
",posName="
+
task
.
getPosName
()
+
",barcode="
+
task
.
getBarcode
());
log
.
info
(
requestCmd
+
"
pn="
+
task
.
getPartNumber
()
+
",出库成功:code="
+
TMS_Code
.
CODE_2010
+
",posName="
+
task
.
getPosName
()
+
",barcode="
+
task
.
getBarcode
());
parts
.
add
(
p
);
parts
.
add
(
p
);
}
}
}
}
}
}
}
catch
(
Exception
ex
)
{
}
catch
(
Exception
ex
)
{
log
.
error
(
" RequestDeliveryOrder
查找 "
+
item
.
getPn
()
+
"的出库任务出错:error::"
,
ex
.
toString
());
log
.
error
(
requestCmd
+
"
查找 "
+
item
.
getPn
()
+
"的出库任务出错:error::"
,
ex
.
toString
());
}
}
if
(
curroNum
<=
0
)
{
if
(
curroNum
<=
0
)
{
...
@@ -784,7 +687,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -784,7 +687,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
if
(
itmes
.
size
()
>
0
)
{
if
(
itmes
.
size
()
>
0
)
{
//如果是有库存但是库存不足,发送2003
//如果是有库存但是库存不足,发送2003
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
item
.
getOutNum
(),
TMS_Code
.
CODE_2001
,
""
,
""
);
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
item
.
getOutNum
(),
TMS_Code
.
CODE_2001
,
""
,
""
);
log
.
info
(
"RequestDeliveryOrder
pn="
+
item
.
getPn
()
+
",出库失败缺料,库存不足:code="
+
TMS_Code
.
CODE_2001
);
log
.
info
(
requestCmd
+
"
pn="
+
item
.
getPn
()
+
",出库失败缺料,库存不足:code="
+
TMS_Code
.
CODE_2001
);
}
else
{
}
else
{
//判断pn是否存在,存在返回2002,否则返回2003
//判断pn是否存在,存在返回2002,否则返回2003
...
@@ -792,24 +695,24 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -792,24 +695,24 @@ public class TMSCommunicator implements WsMsgReceivedListener {
if
(
component
==
null
){
if
(
component
==
null
){
//pn不存在,返回2003
//pn不存在,返回2003
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
item
.
getOutNum
(),
TMS_Code
.
CODE_2003
,
""
,
""
);
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
item
.
getOutNum
(),
TMS_Code
.
CODE_2003
,
""
,
""
);
log
.
info
(
"RequestDeliveryOrder
pn="
+
item
.
getPn
()
+
",出库失败缺料,PN不存在:code="
+
TMS_Code
.
CODE_2003
);
log
.
info
(
requestCmd
+
"
pn="
+
item
.
getPn
()
+
",出库失败缺料,PN不存在:code="
+
TMS_Code
.
CODE_2003
);
}
else
{
}
else
{
//库存无此物料,发送2002
//库存无此物料,发送2002
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
item
.
getOutNum
(),
TMS_Code
.
CODE_2002
,
""
,
""
);
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
item
.
getOutNum
(),
TMS_Code
.
CODE_2002
,
""
,
""
);
log
.
info
(
"RequestDeliveryOrder
pn="
+
item
.
getPn
()
+
",出库失败缺料,库存无此料:code="
+
TMS_Code
.
CODE_2002
);
log
.
info
(
requestCmd
+
"
pn="
+
item
.
getPn
()
+
",出库失败缺料,库存无此料:code="
+
TMS_Code
.
CODE_2002
);
}
}
}
}
parts
.
add
(
p
);
parts
.
add
(
p
);
}
else
{
}
else
{
TMSPart
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
item
.
getOutNum
(),
TMS_Code
.
CODE_2010
,
""
,
""
);
TMSPart
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
item
.
getOutNum
(),
TMS_Code
.
CODE_2010
,
""
,
""
);
log
.
info
(
"RequestDeliveryOrder
pn="
+
item
.
getPn
()
+
",未出库成功:code="
+
TMS_Code
.
CODE_2010
);
log
.
info
(
requestCmd
+
"
pn="
+
item
.
getPn
()
+
",未出库成功:code="
+
TMS_Code
.
CODE_2010
);
parts
.
add
(
p
);
parts
.
add
(
p
);
}
}
}
}
}
catch
(
Exception
ex
)
{
}
catch
(
Exception
ex
)
{
log
.
error
(
" RequestDeliveryOrder
"
+
item
.
getPn
()
+
",error::"
,
ex
.
toString
());
log
.
error
(
requestCmd
+
"
"
+
item
.
getPn
()
+
",error::"
,
ex
.
toString
());
}
}
}
}
...
@@ -817,25 +720,16 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -817,25 +720,16 @@ public class TMSCommunicator implements WsMsgReceivedListener {
// TMSPart part = TMSPart.newBean("PN1", "Barcode1", 999, 999, TMS_Code.CODE_2002, "", "");
// TMSPart part = TMSPart.newBean("PN1", "Barcode1", 999, 999, TMS_Code.CODE_2002, "", "");
// parts.add(part);
// parts.add(part);
ResponseDeliveryOrder
(
requestID
,
parts
,
liteOrder
.
getOrderNo
(),
""
);
ResponseDeliveryOrder
(
re
sponseCmd
,
re
questID
,
parts
,
liteOrder
.
getOrderNo
(),
""
);
OrderProEndUpdateState
(
requestCmd
,
requestID
,
liteOrder
);
//如果工单执行中,发送ResponseUpdateDeliveryReserveState,否则不需要
if
(
liteOrder
.
isClosed
())
{
log
.
info
(
"RequestDeliveryOrder 工单已关闭,不需要发送 发送ResponseUpdateDeliveryReserveState"
);
}
else
{
tmsReserve
=
GetOrderInfo
(
liteOrder
);
List
<
TMSReserve
>
tmsReserves
=
new
ArrayList
<>();
tmsReserves
.
add
(
tmsReserve
);
ResponseUpdateDeliveryReserveState
(
requestID
,
tmsReserves
,
0
);
}
}
}
}
}
}
catch
(
Exception
exception
)
{
}
catch
(
Exception
exception
)
{
log
.
error
(
"RequestDeliveryOrder
error:"
+
exception
.
toString
());
log
.
error
(
requestCmd
+
"
error:"
+
exception
.
toString
());
}
}
ResponseDeliveryOrder
(
requestID
,
new
ArrayList
<>(),
""
,
""
);
ResponseDeliveryOrder
(
re
sponseCmd
,
re
questID
,
new
ArrayList
<>(),
""
,
""
);
}
}
/**
/**
...
@@ -845,10 +739,12 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -845,10 +739,12 @@ public class TMSCommunicator implements WsMsgReceivedListener {
*/
*/
private
void
RequestDeliveryOrderByLocation
(
int
requestID
,
List
<
TMSPos
>
Locations
)
{
private
void
RequestDeliveryOrderByLocation
(
int
requestID
,
List
<
TMSPos
>
Locations
)
{
// 3.11 ResponseDeliveryOrderByLocation
// 3.11 ResponseDeliveryOrderByLocation
String
requestCmd
=
"RequestDeliveryOrderByLocation"
;
String
responseCmd
=
"ResponseDeliveryOrderByLocation"
;
try
{
try
{
Map
<
String
,
String
>
posResultMap
=
new
HashMap
<>();
Map
<
String
,
String
>
posResultMap
=
new
HashMap
<>();
if
(
Locations
==
null
||
Locations
.
size
()
<=
0
)
{
if
(
Locations
==
null
||
Locations
.
size
()
<=
0
)
{
ResponseDeliveryOrderByLocation
(
requestID
,
new
ArrayList
<>(),
new
ArrayList
<>(),
""
);
ResponseDeliveryOrderByLocation
(
re
sponseCmd
,
re
questID
,
new
ArrayList
<>(),
new
ArrayList
<>(),
""
);
return
;
return
;
}
}
String
soName
=
"DOL"
+
DateUtil
.
toDateString
(
new
Date
(),
"yyyyMMddHHmmss"
);
String
soName
=
"DOL"
+
DateUtil
.
toDateString
(
new
Date
(),
"yyyyMMddHHmmss"
);
...
@@ -869,15 +765,15 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -869,15 +765,15 @@ public class TMSCommunicator implements WsMsgReceivedListener {
}
}
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
pos
==
null
)
{
if
(
pos
==
null
)
{
log
.
info
(
"RequestDeliveryOrderByLocation
: cid="
+
cid
+
", pos="
+
posName
+
",未找到库位号,出库结果:code="
+
TMS_Code
.
CODE_2002
);
log
.
info
(
requestCmd
+
"
: cid="
+
cid
+
", pos="
+
posName
+
",未找到库位号,出库结果:code="
+
TMS_Code
.
CODE_2002
);
posResultMap
.
put
(
posName
,
TMS_Code
.
CODE_2002
);
posResultMap
.
put
(
posName
,
TMS_Code
.
CODE_2002
);
}
else
if
(
pos
.
getBarcode
()
==
null
)
{
}
else
if
(
pos
.
getBarcode
()
==
null
)
{
log
.
info
(
"RequestDeliveryOrderByLocation
: cid="
+
cid
+
", pos="
+
posName
+
",库位为空,出库失败,结果:code="
+
TMS_Code
.
CODE_2002
);
log
.
info
(
requestCmd
+
"
: cid="
+
cid
+
", pos="
+
posName
+
",库位为空,出库失败,结果:code="
+
TMS_Code
.
CODE_2002
);
posResultMap
.
put
(
posName
,
TMS_Code
.
CODE_2002
);
posResultMap
.
put
(
posName
,
TMS_Code
.
CODE_2002
);
}
else
{
}
else
{
posResultMap
.
put
(
posName
,
TMS_Code
.
CODE_1011
);
//默认是开始送货时失败
posResultMap
.
put
(
posName
,
TMS_Code
.
CODE_1011
);
//默认是开始送货时失败
log
.
info
(
"RequestDeliveryOrderByLocation
: cid="
+
cid
+
", pos="
+
posName
+
",可出库,准备创建工单"
);
log
.
info
(
requestCmd
+
"
: cid="
+
cid
+
", pos="
+
posName
+
",可出库,准备创建工单"
);
LiteOrderItem
item
=
new
LiteOrderItem
();
LiteOrderItem
item
=
new
LiteOrderItem
();
item
.
setRi
(
pos
.
getBarcode
().
getBarcode
());
item
.
setRi
(
pos
.
getBarcode
().
getBarcode
());
item
.
setNeedNum
(
1
);
item
.
setNeedNum
(
1
);
...
@@ -885,7 +781,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -885,7 +781,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
}
}
}
}
LiteOrder
liteOrder
=
createOrder
(
requestID
,
liteOrderItems
,
soName
,
true
);
LiteOrder
liteOrder
=
tmsUtil
.
createOrder
(
requestCmd
,
requestID
,
liteOrderItems
,
soName
,
true
,
new
ArrayList
<>()
);
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
if
(
liteOrder
!=
null
)
{
if
(
liteOrder
!=
null
)
{
...
@@ -896,7 +792,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -896,7 +792,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
dataLogs
)
{
dataLogs
)
{
if
(
task
.
isCheckOutTask
()
&&
task
.
getSourceName
().
equals
(
liteOrder
.
getOrderNo
())
&&
task
.
getBarcode
().
equals
(
item
.
getRi
()))
{
if
(
task
.
isCheckOutTask
()
&&
task
.
getSourceName
().
equals
(
liteOrder
.
getOrderNo
())
&&
task
.
getBarcode
().
equals
(
item
.
getRi
()))
{
posResultMap
.
put
(
task
.
getPosName
(),
TMS_Code
.
CODE_2011
);
//状态改为开始送货
posResultMap
.
put
(
task
.
getPosName
(),
TMS_Code
.
CODE_2011
);
//状态改为开始送货
log
.
info
(
"RequestDeliveryOrderByLocation
: cid="
+
task
.
getCid
()+
", pos="
+
task
.
getPosName
()+
",出库成功,code="
+
TMS_Code
.
CODE_2011
);
log
.
info
(
requestCmd
+
"
: cid="
+
task
.
getCid
()+
", pos="
+
task
.
getPosName
()+
",出库成功,code="
+
TMS_Code
.
CODE_2011
);
break
;
break
;
}
}
}
}
...
@@ -914,12 +810,13 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -914,12 +810,13 @@ public class TMSCommunicator implements WsMsgReceivedListener {
rCodes
.
add
(
Integer
.
parseInt
(
code
));
rCodes
.
add
(
Integer
.
parseInt
(
code
));
}
}
ResponseDeliveryOrderByLocation
(
requestID
,
Locations
,
rCodes
,
liteOrder
.
getOrderNo
());
ResponseDeliveryOrderByLocation
(
re
sponseCmd
,
re
questID
,
Locations
,
rCodes
,
liteOrder
.
getOrderNo
());
OrderProEndUpdateState
(
requestCmd
,
requestID
,
liteOrder
);
}
catch
(
Exception
exception
)
{
}
catch
(
Exception
exception
)
{
log
.
error
(
"RequestDeliveryOrderByLocation
error:"
+
exception
.
toString
());
log
.
error
(
requestCmd
+
"
error:"
+
exception
.
toString
());
}
}
ResponseDeliveryOrderByLocation
(
requestID
,
Locations
,
new
ArrayList
<>(),
""
);
ResponseDeliveryOrderByLocation
(
re
sponseCmd
,
re
questID
,
Locations
,
new
ArrayList
<>(),
""
);
}
}
/**
/**
...
@@ -927,12 +824,17 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -927,12 +824,17 @@ public class TMSCommunicator implements WsMsgReceivedListener {
* @param requestID
* @param requestID
* @param ReelCds
* @param ReelCds
*/
*/
private
void
RequestDeliveryOrderByReelCd
(
int
requestID
,
List
<
String
>
ReelCds
)
{
private
void
RequestDeliveryOrderByReelCd
(
int
requestID
,
List
<
String
>
ReelCds
,
List
<
String
>
rackList
)
{
// 3.13 ResponseDeliveryOrderByReelCd
// 3.13 ResponseDeliveryOrderByReelCd
String
requestCmd
=
"RequestDeliveryOrderByReelCd"
;
String
responseCmd
=
"ResponseDeliveryOrderByReelCd"
;
try
{
try
{
if
(
rackList
==
null
){
rackList
=
new
ArrayList
<>();
}
Map
<
String
,
String
>
posResultMap
=
new
HashMap
<>();
Map
<
String
,
String
>
posResultMap
=
new
HashMap
<>();
if
(
ReelCds
==
null
||
ReelCds
.
size
()
<=
0
)
{
if
(
ReelCds
==
null
||
ReelCds
.
size
()
<=
0
)
{
ResponseDeliveryOrderByReelCd
(
requestID
,
new
ArrayList
<>(),
new
ArrayList
<>(),
""
);
ResponseDeliveryOrderByReelCd
(
re
sponseCmd
,
re
questID
,
new
ArrayList
<>(),
new
ArrayList
<>(),
""
);
return
;
return
;
}
}
String
soName
=
"DOR"
+
DateUtil
.
toDateString
(
new
Date
(),
"yyyyMMddHHmmss"
);
String
soName
=
"DOR"
+
DateUtil
.
toDateString
(
new
Date
(),
"yyyyMMddHHmmss"
);
...
@@ -943,7 +845,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -943,7 +845,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
StoragePos
pos
=
storagePosManager
.
getByBarcode
(
ri
);
StoragePos
pos
=
storagePosManager
.
getByBarcode
(
ri
);
if
(
pos
==
null
)
{
if
(
pos
==
null
)
{
posResultMap
.
put
(
ri
,
TMS_Code
.
CODE_2041
);
posResultMap
.
put
(
ri
,
TMS_Code
.
CODE_2041
);
log
.
info
(
"RequestDeliveryOrderByLocation
: ri="
+
ri
+
", 未找到物料,出库失败,code="
+
TMS_Code
.
CODE_2041
);
log
.
info
(
requestCmd
+
"
: ri="
+
ri
+
", 未找到物料,出库失败,code="
+
TMS_Code
.
CODE_2041
);
}
else
{
}
else
{
posResultMap
.
put
(
ri
,
TMS_Code
.
CODE_1011
);
//默认是开始送货时失败
posResultMap
.
put
(
ri
,
TMS_Code
.
CODE_1011
);
//默认是开始送货时失败
...
@@ -951,22 +853,21 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -951,22 +853,21 @@ public class TMSCommunicator implements WsMsgReceivedListener {
item
.
setRi
(
pos
.
getBarcode
().
getBarcode
());
item
.
setRi
(
pos
.
getBarcode
().
getBarcode
());
item
.
setNeedNum
(
1
);
item
.
setNeedNum
(
1
);
liteOrderItems
.
add
(
item
);
liteOrderItems
.
add
(
item
);
log
.
info
(
"RequestDeliveryOrderByLocation
: ri="
+
ri
+
", 可出库,准备创建工单"
);
log
.
info
(
requestCmd
+
"
: ri="
+
ri
+
", 可出库,准备创建工单"
);
}
}
}
}
LiteOrder
liteOrder
=
createOrder
(
requestID
,
liteOrderItems
,
soName
,
true
);
LiteOrder
liteOrder
=
tmsUtil
.
createOrder
(
requestCmd
,
requestID
,
liteOrderItems
,
soName
,
true
,
rackList
);
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
if
(
liteOrder
!=
null
)
{
if
(
liteOrder
!=
null
)
{
List
<
DataLog
>
dataLogs
=
taskService
.
getAllTasks
();
List
<
DataLog
>
dataLogs
=
taskService
.
getAllTasks
();
List
<
TMSPart
>
parts
=
new
ArrayList
<>();
for
(
LiteOrderItem
item
:
liteOrder
.
getOrderItems
())
{
for
(
LiteOrderItem
item
:
liteOrder
.
getOrderItems
())
{
for
(
DataLog
task
:
for
(
DataLog
task
:
dataLogs
)
{
dataLogs
)
{
if
(
task
.
isCheckOutTask
()
&&
task
.
getSourceName
().
equals
(
liteOrder
.
getOrderNo
())
&&
task
.
getBarcode
().
equals
(
item
.
getRi
()))
{
if
(
task
.
isCheckOutTask
()
&&
task
.
getSourceName
().
equals
(
liteOrder
.
getOrderNo
())
&&
task
.
getBarcode
().
equals
(
item
.
getRi
()))
{
posResultMap
.
put
(
task
.
getBarcode
(),
TMS_Code
.
CODE_2011
);
//状态改为开始送货
posResultMap
.
put
(
task
.
getBarcode
(),
TMS_Code
.
CODE_2011
);
//状态改为开始送货
log
.
info
(
"RequestDeliveryOrderByLocation
: ri="
+
task
.
getBarcode
()+
", 出库成功,code="
+
TMS_Code
.
CODE_2011
);
log
.
info
(
requestCmd
+
"
: ri="
+
task
.
getBarcode
()+
", 出库成功,code="
+
TMS_Code
.
CODE_2011
);
break
;
break
;
}
}
}
}
...
@@ -984,122 +885,242 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -984,122 +885,242 @@ public class TMSCommunicator implements WsMsgReceivedListener {
rCodes
.
add
(
Integer
.
parseInt
(
code
));
rCodes
.
add
(
Integer
.
parseInt
(
code
));
}
}
ResponseDeliveryOrderByReelCd
(
requestID
,
ReelCds
,
rCodes
,
liteOrder
.
getOrderNo
());
ResponseDeliveryOrderByReelCd
(
re
sponseCmd
,
re
questID
,
ReelCds
,
rCodes
,
liteOrder
.
getOrderNo
());
OrderProEndUpdateState
(
requestCmd
,
requestID
,
liteOrder
);
}
catch
(
Exception
exception
)
{
}
catch
(
Exception
exception
)
{
log
.
error
(
"RequestDeliveryOrderByLocation error:"
+
exception
.
toString
());
log
.
error
(
requestCmd
+
" error:"
+
exception
.
toString
());
}
ResponseDeliveryOrderByReelCd
(
responseCmd
,
requestID
,
ReelCds
,
new
ArrayList
<>(),
""
);
}
}
ResponseDeliveryOrderByReelCd
(
requestID
,
ReelCds
,
new
ArrayList
<>(),
""
);
/**
* 3.14 RequestDeliveryReserve
*/
private
void
RequestDeliveryReserve
(
int
requestID
,
List
<
String
>
partItem
,
List
<
Integer
>
partCount
,
boolean
towerLamp
,
List
<
String
>
rackList
)
{
//创建工单,锁定物料,但不出库
String
requestCmd
=
"RequestDeliveryReserve"
;
String
responseCmd
=
"ResponseDeliveryReserve"
;
try
{
if
(
partItem
==
null
||
partCount
==
null
||
partItem
.
size
()
<=
0
||
partCount
.
size
()
<=
0
)
{
log
.
info
(
requestCmd
+
" 数据不完整,直接返回"
);
ResponseDeliveryReserve
(
responseCmd
,
requestID
,
new
ArrayList
<>(),
""
,
""
);
return
;
}
}
String
soName
=
"DO"
+
DateUtil
.
toDateString
(
new
Date
(),
"yyyyMMddHHmmss"
);
List
<
LiteOrderItem
>
liteOrderItems
=
tmsUtil
.
partToItems
(
partItem
,
partCount
);
LiteOrder
liteOrder
=
tmsUtil
.
createOrder
(
responseCmd
,
requestID
,
liteOrderItems
,
soName
,
false
,
rackList
);
if
(
liteOrder
==
null
)
{
//同时只能有一个工单执行,创建工单时不能有未关闭的工单。返回2014
List
<
TMSPart
>
parts
=
tmsUtil
.
itemsToTMSPartList
(
liteOrderItems
);
ResponseDeliveryReserve
(
responseCmd
,
requestID
,
parts
,
""
,
""
);
}
else
{
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
if
(
liteOrder
!=
null
)
{
List
<
TMSPart
>
parts
=
tmsUtil
.
GetReserveList
(
requestCmd
,
liteOrder
);
ResponseDeliveryReserve
(
responseCmd
,
requestID
,
parts
,
liteOrder
.
getOrderNo
(),
""
);
OrderProEndUpdateState
(
requestCmd
,
requestID
,
liteOrder
);
}
}
}
catch
(
Exception
exception
)
{
log
.
error
(
requestCmd
+
" error:"
+
exception
.
toString
());
}
ResponseDeliveryReserve
(
responseCmd
,
requestID
,
new
ArrayList
<>(),
""
,
""
);
}
/**
/**
* 3.1
4 RequestUpdateDeliveryReserveState
* 3.1
6 RequestDeliveryReserveByLocation
* @param requestID
* @param requestID
* @param reserveCodes
* @param Locations
* @param resultCodes
*/
*/
private
void
RequestUpdateDeliveryReserveState
(
int
requestID
,
List
<
String
>
reserveCodes
,
List
<
Integer
>
resultCodes
)
{
private
void
RequestDeliveryReserveByLocation
(
int
requestID
,
List
<
TMSPos
>
Locations
)
{
//3.15 ResponseUpdateDeliveryReserveState
String
requestCmd
=
"RequestDeliveryReserveByLocation"
;
String
responseCmd
=
"ResponseDeliveryReserveByLocation"
;
try
{
Map
<
String
,
String
>
posResultMap
=
new
HashMap
<>();
if
(
Locations
==
null
||
Locations
.
size
()
<=
0
)
{
ResponseDeliveryOrderByLocation
(
responseCmd
,
requestID
,
new
ArrayList
<>(),
new
ArrayList
<>(),
""
);
return
;
}
String
soName
=
"DOL"
+
DateUtil
.
toDateString
(
new
Date
(),
"yyyyMMddHHmmss"
);
//2016也需要取消工单,返回的时候整体的code需要返回2016
List
<
LiteOrderItem
>
liteOrderItems
=
new
ArrayList
<>();
for
(
TMSPos
tmsPos
:
Locations
)
{
if
(
ObjectUtil
.
isEmpty
(
tmsPos
.
getColID
())
&&
ObjectUtil
.
isEmpty
(
tmsPos
.
getRowID
()))
{
continue
;
}
String
cid
=
tmsPos
.
getRackID
();
Storage
storage
=
dataCache
.
getStorage
(
cid
);
List
<
TMSReserve
>
ReserveList
=
new
ArrayList
<>();
String
posName
=
tmsPos
.
getPosName
();
int
state
=
0
;
if
(
storage
==
null
||
ObjectUtil
.
isEmpty
(
posName
))
{
try
{
posResultMap
.
put
(
""
,
TMS_Code
.
CODE_2002
);
log
.
info
(
"RequestUpdateDeliveryReserveState : reserveCodes="
+
JsonUtil
.
toJsonStr
(
reserveCodes
)+
",resultCodes="
+
JsonUtil
.
toJsonStr
(
resultCodes
)+
" "
);
continue
;
if
(
reserveCodes
!=
null
&&
resultCodes
!=
null
&&
reserveCodes
.
size
()==
resultCodes
.
size
())
{
}
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
pos
==
null
)
{
log
.
info
(
"RequestDeliveryOrderByLocation : cid="
+
cid
+
", pos="
+
posName
+
",未找到库位号,出库结果:code="
+
TMS_Code
.
CODE_2002
);
posResultMap
.
put
(
posName
,
TMS_Code
.
CODE_2002
);
}
else
if
(
pos
.
getBarcode
()
==
null
)
{
log
.
info
(
"RequestDeliveryOrderByLocation : cid="
+
cid
+
", pos="
+
posName
+
",库位为空,出库失败,结果:code="
+
TMS_Code
.
CODE_2002
);
posResultMap
.
put
(
posName
,
TMS_Code
.
CODE_2002
);
}
else
{
posResultMap
.
put
(
posName
,
TMS_Code
.
CODE_1011
);
//默认是开始送货时失败
Collection
<
DataLog
>
dataLogCollections
=
taskService
.
getQueueTasks
();
log
.
info
(
"RequestDeliveryOrderByLocation : cid="
+
cid
+
", pos="
+
posName
+
",可出库,准备创建工单"
);
for
(
int
i
=
0
;
i
<
reserveCodes
.
size
();
i
++){
LiteOrderItem
item
=
new
LiteOrderItem
();
String
reserveCode
=
reserveCodes
.
get
(
i
);
item
.
setRi
(
pos
.
getBarcode
().
getBarcode
());
Integer
code
=
Convert
.
toInt
(
resultCodes
.
get
(
i
))
;
item
.
setNeedNum
(
1
);
liteOrderItems
.
add
(
item
);
}
TMSReserve
tmsReserve
=
ProcessOrder
(
reserveCode
,
code
+
""
);
ReserveList
.
add
(
tmsReserve
);
}
}
LiteOrder
liteOrder
=
tmsUtil
.
createOrder
(
requestCmd
,
requestID
,
liteOrderItems
,
soName
,
false
,
new
ArrayList
<>());
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
if
(
liteOrder
!=
null
)
{
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
liteOrder
.
getOrderNo
());
for
(
StoragePos
pos
:
lockPosList
)
{
posResultMap
.
put
(
pos
.
getPosName
(),
TMS_Code
.
CODE_2010
);
//准备出库
log
.
info
(
requestCmd
+
" : pos="
+
pos
.
getPosName
()
+
",锁定成功,code="
+
TMS_Code
.
CODE_2010
);
}
}
}
catch
(
Exception
exception
)
{
log
.
error
(
"RequestUpdateDeliveryReserveState error:"
+
exception
.
toString
());
}
}
ResponseUpdateDeliveryReserveState
(
requestID
,
ReserveList
,
state
);
//返回消息
List
<
Integer
>
rCodes
=
new
ArrayList
<>();
for
(
TMSPos
tmsPos
:
Locations
)
{
String
code
=
TMS_Code
.
CODE_1011
;
String
posName
=
tmsPos
.
getPosName
();
if
(
posResultMap
.
containsKey
(
posName
))
{
code
=
posResultMap
.
get
(
posName
);
}
rCodes
.
add
(
Integer
.
parseInt
(
code
));
}
}
private
TMSReserve
ProcessOrder
(
String
reserveCode
,
String
resultCode
)
{
ResponseDeliveryReserveByLocation
(
responseCmd
,
requestID
,
Locations
,
rCodes
,
liteOrder
.
getOrderNo
());
TMSReserve
tmsReserve
=
new
TMSReserve
();
OrderProEndUpdateState
(
requestCmd
,
requestID
,
liteOrder
);
tmsReserve
.
setReserveCode
(
reserveCode
);
tmsReserve
.
setResultCode
(
resultCode
);
tmsReserve
.
setPartList
(
new
ArrayList
<>());
List
<
TMSPart
>
tmsParts
=
new
ArrayList
<>();
if
(
resultCode
.
equals
(
TMS_Code
.
CODE_2012
)||
resultCode
.
equals
(
TMS_Code
.
CODE_2016
))
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2014
);
LiteOrder
order
=
liteOrderCache
.
getLiteOrder
(
reserveCode
);
if
(
order
!=
null
)
{
if
(
order
.
isOutBom
()
||
order
.
isOutTails
()
||
order
.
isOutOne
())
{
}
catch
(
Exception
exception
)
{
log
.
error
(
requestCmd
+
" error:"
+
exception
.
toString
());
}
ResponseDeliveryReserveByLocation
(
responseCmd
,
requestID
,
Locations
,
new
ArrayList
<>(),
""
);
}
log
.
info
(
"ProcessOrder 准备取消工单:"
+
reserveCode
+
",设置取消标记"
);
/**
* 3.18 RequestDeliveryReserveByReelCd
* @param requestID
* @param ReelCds
*/
private
void
RequestDeliveryReserveByReelCd
(
int
requestID
,
List
<
String
>
ReelCds
,
List
<
String
>
rackList
)
{
order
.
addAppendDate
(
"cancel"
,
"true"
);
String
requestCmd
=
"RequestDeliveryReserveByReelCd"
;
liteOrderManager
.
save
(
order
);
String
responseCmd
=
"ReponseDeliveryReserveByReelCd"
;
liteOrderCache
.
addOrderToMap
(
order
);
try
{
if
(
rackList
==
null
)
{
rackList
=
new
ArrayList
<>();
}
Map
<
String
,
String
>
posResultMap
=
new
HashMap
<>();
if
(
ReelCds
==
null
||
ReelCds
.
size
()
<=
0
)
{
ResponseDeliveryOrderByReelCd
(
responseCmd
,
requestID
,
new
ArrayList
<>(),
new
ArrayList
<>(),
""
);
return
;
}
String
soName
=
"DOR"
+
DateUtil
.
toDateString
(
new
Date
(),
"yyyyMMddHHmmss"
);
List
<
LiteOrderItem
>
liteOrderItems
=
new
ArrayList
<>();
//查找工单的所有任务
for
(
String
ri
:
ReelCds
)
{
Criteria
c
=
Criteria
.
where
(
"sourceName"
).
is
(
order
.
getOrderNo
()).
and
(
"type"
).
is
(
2
);
List
<
DataLog
>
dataLogs
=
dataLogManager
.
findByQuery
(
new
Query
(
c
));
StoragePos
pos
=
storagePosManager
.
getByBarcode
(
ri
);
for
(
DataLog
task
:
if
(
pos
==
null
)
{
dataLogs
)
{
posResultMap
.
put
(
ri
,
TMS_Code
.
CODE_2041
);
//是工单出库任务
log
.
info
(
requestCmd
+
" : ri="
+
ri
+
", 未找到物料,出库失败,code="
+
TMS_Code
.
CODE_2041
);
if
(
task
.
isCheckOutTask
()
&&
task
.
getSourceName
().
equals
(
order
.
getOrderNo
()))
{
boolean
cancelResult
=
false
;
String
logCode
=
TMS_Code
.
CODE_2014
;
//默认不能取消
if
(
task
.
isCancel
())
{
logCode
=
TMS_Code
.
CODE_2012
;
//取消成功
}
else
if
(
task
.
isExecuting
()
||
task
.
isWait
())
{
//判断任务是否可取消
cancelResult
=
taskService
.
cancelTask
(
task
.
getId
());
if
(
cancelResult
)
{
logCode
=
TMS_Code
.
CODE_2012
;
//取消成功
}
else
{
}
else
{
posResultMap
.
put
(
ri
,
TMS_Code
.
CODE_1011
);
//默认是开始送货时失败
logCode
=
TMS_Code
.
CODE_2014
;
//取消失败
LiteOrderItem
item
=
new
LiteOrderItem
();
item
.
setRi
(
pos
.
getBarcode
().
getBarcode
());
item
.
setNeedNum
(
1
);
liteOrderItems
.
add
(
item
);
log
.
info
(
requestCmd
+
" : ri="
+
ri
+
", 可出库,准备创建工单"
);
}
}
}
else
{
logCode
=
TMS_Code
.
CODE_2013
;
//已完成
}
}
log
.
info
(
"RequestUpdateDeliveryReserveState 取消出库任务,工单:"
+
order
.
getOrderNo
()
+
", barcode:"
+
task
.
getBarcode
()
+
", taskID:"
+
task
.
getId
()
+
"取消结果:"
+
cancelResul
t
);
LiteOrder
liteOrder
=
tmsUtil
.
createOrder
(
requestCmd
,
requestID
,
liteOrderItems
,
soName
,
false
,
rackLis
t
);
TMSPart
part
=
TMSPart
.
newBean
(
tmsParts
.
size
(),
task
.
getPartNumber
(),
task
.
getBarcode
(),
task
.
getNum
(),
task
.
getNum
(),
logCode
,
task
.
getCid
(),
task
.
getPosName
());
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
tmsParts
.
add
(
part
);
if
(
liteOrder
!=
null
)
{
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
liteOrder
.
getOrderNo
());
for
(
StoragePos
pos
:
lockPosList
)
{
posResultMap
.
put
(
pos
.
getBarcode
().
getBarcode
(),
TMS_Code
.
CODE_2010
);
//准备出库
log
.
info
(
requestCmd
+
" : barcode="
+
pos
.
getBarcode
().
getBarcode
()
+
",锁定成功,code="
+
TMS_Code
.
CODE_2010
);
}
}
}
}
//判断工单是否可以取消,
//返回消息
liteOrderCache
.
closeOrder
(
order
.
getOrderNo
()
);
List
<
Integer
>
rCodes
=
new
ArrayList
<>(
);
if
(
order
.
isClosed
()
)
{
for
(
String
ri
:
ReelCds
)
{
if
(
resultCode
.
equals
(
TMS_Code
.
CODE_2016
))
{
String
code
=
TMS_Code
.
CODE_1011
;
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2016
);
//取消成功
}
else
{
if
(
posResultMap
.
containsKey
(
ri
))
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2012
);
//取消成功
code
=
posResultMap
.
get
(
ri
);
}
}
}
else
{
rCodes
.
add
(
Integer
.
parseInt
(
code
));
order
.
addAppendDate
(
"cancel"
,
""
);
liteOrderManager
.
save
(
order
);
liteOrderCache
.
addOrderToMap
(
order
);
log
.
info
(
"ProcessOrder 取消工单失败,清空取消标记 "
);
}
}
}
else
{
ResponseDeliveryReserveByReelCd
(
responseCmd
,
requestID
,
ReelCds
,
rCodes
,
liteOrder
.
getOrderNo
());
log
.
error
(
"ProcessOrder 无法取消工单:"
+
reserveCode
+
",未开始或已结束"
);
OrderProEndUpdateState
(
requestCmd
,
requestID
,
liteOrder
);
}
catch
(
Exception
exception
)
{
log
.
error
(
requestCmd
+
" error:"
+
exception
.
toString
());
}
}
}
else
{
ResponseDeliveryReserveByReelCd
(
responseCmd
,
requestID
,
ReelCds
,
new
ArrayList
<>(),
""
);
log
.
error
(
"ProcessOrder 未找到工单号:"
+
reserveCode
);
}
}
/**
* 3.14 RequestUpdateDeliveryReserveState
* @param requestID
* @param reserveCodes
* @param resultCodes
*/
private
void
RequestUpdateDeliveryReserveState
(
int
requestID
,
List
<
String
>
reserveCodes
,
List
<
Integer
>
resultCodes
)
{
//3.15 ResponseUpdateDeliveryReserveState
//2016也需要取消工单,返回的时候整体的code需要返回2016
List
<
TMSReserve
>
ReserveList
=
new
ArrayList
<>();
int
state
=
0
;
try
{
log
.
info
(
"RequestUpdateDeliveryReserveState : reserveCodes="
+
JsonUtil
.
toJsonStr
(
reserveCodes
)+
",resultCodes="
+
JsonUtil
.
toJsonStr
(
resultCodes
)+
" "
);
if
(
reserveCodes
!=
null
&&
resultCodes
!=
null
&&
reserveCodes
.
size
()==
resultCodes
.
size
())
{
Collection
<
DataLog
>
dataLogCollections
=
taskService
.
getQueueTasks
();
for
(
int
i
=
0
;
i
<
reserveCodes
.
size
();
i
++){
String
reserveCode
=
reserveCodes
.
get
(
i
);
Integer
code
=
Convert
.
toInt
(
resultCodes
.
get
(
i
))
;
TMSReserve
tmsReserve
=
tmsUtil
.
ProcessOrder
(
reserveCode
,
code
+
""
);
ReserveList
.
add
(
tmsReserve
);
}
}
}
catch
(
Exception
exception
)
{
log
.
error
(
"RequestUpdateDeliveryReserveState error:"
+
exception
.
toString
());
}
}
tmsReserve
.
setPartList
(
tmsParts
);
ResponseUpdateDeliveryReserveState
(
requestID
,
ReserveList
,
state
);
return
tmsReserve
;
}
}
...
@@ -1115,19 +1136,12 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -1115,19 +1136,12 @@ public class TMSCommunicator implements WsMsgReceivedListener {
* @param Parts
* @param Parts
* @param OrderCode
* @param OrderCode
*/
*/
public
void
ResponseDeliveryOrder
(
int
requestID
,
List
<
TMSPart
>
Parts
,
String
OrderCode
,
String
ReserveCode
)
{
public
void
ResponseDeliveryOrder
(
String
topic
,
int
requestID
,
List
<
TMSPart
>
Parts
,
String
OrderCode
,
String
ReserveCode
)
{
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<>();
dataMap
.
put
(
"Topic"
,
"ResponseDeliveryOrder"
);
dataMap
.
put
(
"Topic"
,
topic
);
dataMap
.
put
(
"RequestID"
,
requestID
);
dataMap
.
put
(
"RequestID"
,
requestID
);
List
<
Map
<
String
,
Object
>>
arrayList
=
new
ArrayList
<>();
List
<
Map
<
String
,
Object
>>
arrayList
=
new
ArrayList
<>();
for
(
TMSPart
Part
:
Parts
)
{
for
(
TMSPart
Part
:
Parts
)
{
// Map<String, Object> dataMap2 = new HashMap<>();
// dataMap2.put("index", Part.index);
// dataMap2.put("PartName", Part.PartName);
// dataMap2.put("ReelCode", Part.ReelCode);
// dataMap2.put("RequestCount", Part.RequestCount);
// dataMap2.put("ResponseCount", Part.ResponseCount);
// dataMap2.put("ResultCode", Part.ResultCode);
arrayList
.
add
(
Part
.
getJson
());
arrayList
.
add
(
Part
.
getJson
());
}
}
...
@@ -1148,9 +1162,9 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -1148,9 +1162,9 @@ public class TMSCommunicator implements WsMsgReceivedListener {
* @param ResultCodes
* @param ResultCodes
* @param OrderCode
* @param OrderCode
*/
*/
public
void
ResponseDeliveryOrderByLocation
(
int
requestID
,
List
<
TMSPos
>
Locations
,
List
<
Integer
>
ResultCodes
,
String
OrderCode
)
{
public
void
ResponseDeliveryOrderByLocation
(
String
topic
,
int
requestID
,
List
<
TMSPos
>
Locations
,
List
<
Integer
>
ResultCodes
,
String
OrderCode
)
{
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<>();
dataMap
.
put
(
"Topic"
,
"ResponseDeliveryOrderByLocation"
);
dataMap
.
put
(
"Topic"
,
topic
);
dataMap
.
put
(
"RequestID"
,
requestID
);
dataMap
.
put
(
"RequestID"
,
requestID
);
List
<
Object
>
jArray
=
new
ArrayList
<>();
List
<
Object
>
jArray
=
new
ArrayList
<>();
for
(
TMSPos
pos
:
Locations
)
{
for
(
TMSPos
pos
:
Locations
)
{
...
@@ -1175,9 +1189,9 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -1175,9 +1189,9 @@ public class TMSCommunicator implements WsMsgReceivedListener {
* @param ResultCodes
* @param ResultCodes
* @param OrderCode
* @param OrderCode
*/
*/
public
void
ResponseDeliveryOrderByReelCd
(
int
requestID
,
List
<
String
>
ReelCds
,
List
<
Integer
>
ResultCodes
,
String
OrderCode
)
{
public
void
ResponseDeliveryOrderByReelCd
(
String
topic
,
int
requestID
,
List
<
String
>
ReelCds
,
List
<
Integer
>
ResultCodes
,
String
OrderCode
)
{
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<>();
dataMap
.
put
(
"Topic"
,
"ResponseDeliveryOrderByReelCd"
);
dataMap
.
put
(
"Topic"
,
topic
);
dataMap
.
put
(
"RequestID"
,
requestID
);
dataMap
.
put
(
"RequestID"
,
requestID
);
dataMap
.
put
(
"ReelCds"
,
ReelCds
);
dataMap
.
put
(
"ReelCds"
,
ReelCds
);
dataMap
.
put
(
"ResultCodes"
,
ResultCodes
);
dataMap
.
put
(
"ResultCodes"
,
ResultCodes
);
...
@@ -1187,6 +1201,75 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -1187,6 +1201,75 @@ public class TMSCommunicator implements WsMsgReceivedListener {
}
}
/**
/**
* 3.15 ResponseDeliveryReserve
* @param requestID
* @param Parts
* @param OrderCode
*/
public
void
ResponseDeliveryReserve
(
String
topic
,
int
requestID
,
List
<
TMSPart
>
Parts
,
String
OrderCode
,
String
ReserveCode
)
{
ResponseDeliveryOrder
(
topic
,
requestID
,
Parts
,
OrderCode
,
ReserveCode
);
// Map<String, Object> dataMap = new HashMap<>();
// dataMap.put("Topic", topic);
// dataMap.put("RequestID", requestID);
// List<Map<String, Object>> arrayList = new ArrayList<>();
// for (TMSPart Part : Parts) {
// arrayList.add(Part.getJson());
// }
//
// if(ObjectUtil.isEmpty(ReserveCode)){
// ReserveCode= OrderCode;
// }
//
// dataMap.put("PartList", arrayList);
// dataMap.put("OrderCode", OrderCode);
// dataMap.put("ReserveCode", ReserveCode);
// SendData(dataMap);
}
/**
* 3.17 ResponseDeliveryReserveByLocation
* @param requestID
* @param Locations
* @param ResultCodes
* @param OrderCode
*/
public
void
ResponseDeliveryReserveByLocation
(
String
topic
,
int
requestID
,
List
<
TMSPos
>
Locations
,
List
<
Integer
>
ResultCodes
,
String
OrderCode
)
{
ResponseDeliveryReserveByLocation
(
topic
,
requestID
,
Locations
,
ResultCodes
,
OrderCode
);
// Map<String, Object> dataMap = new HashMap<>();
// dataMap.put("Topic", topic);
// dataMap.put("RequestID", requestID);
// List<Object> jArray = new ArrayList<>();
// for (TMSPos pos : Locations) {
// jArray.add(pos.getJson());
// }
//
// dataMap.put("Locations", jArray);
// dataMap.put("ResultCodes", ResultCodes);
// dataMap.put("OrderCode", OrderCode);
// dataMap.put("ReserveCode", OrderCode);
// SendData(dataMap);
}
/**
* 3.19 ResponseDeliveryReserveByReelCd
* @param requestID
* @param ReelCds
* @param ResultCodes
* @param OrderCode
*/
public
void
ResponseDeliveryReserveByReelCd
(
String
topic
,
int
requestID
,
List
<
String
>
ReelCds
,
List
<
Integer
>
ResultCodes
,
String
OrderCode
)
{
ResponseDeliveryOrderByReelCd
(
topic
,
requestID
,
ReelCds
,
ResultCodes
,
OrderCode
);
// Map<String, Object> dataMap = new HashMap<>();
// dataMap.put("Topic", topic);
// dataMap.put("RequestID", requestID);
// dataMap.put("ReelCds", ReelCds);
// dataMap.put("ResultCodes", ResultCodes);
// dataMap.put("OrderCode", OrderCode);
// dataMap.put("ReserveCode", OrderCode);
// SendData(dataMap);
}
/**
* 3.15 ResponseUpdateDeliveryReserveState
* 3.15 ResponseUpdateDeliveryReserveState
* @param requestID
* @param requestID
* @param ReserveList
* @param ReserveList
...
@@ -1208,15 +1291,6 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -1208,15 +1291,6 @@ public class TMSCommunicator implements WsMsgReceivedListener {
List
<
Object
>
jArray2
=
new
ArrayList
<>();
List
<
Object
>
jArray2
=
new
ArrayList
<>();
for
(
TMSPart
part
:
Reserve
.
getPartList
())
{
for
(
TMSPart
part
:
Reserve
.
getPartList
())
{
Map
<
String
,
Object
>
dataMap3
=
new
HashMap
<>();
Map
<
String
,
Object
>
dataMap3
=
new
HashMap
<>();
// dataMap3.put("Index", part.index);
// dataMap3.put("PartName", part.PartName);
// dataMap3.put("RequestCount", part.RequestCount);
// dataMap3.put("ResponseCount", part.ResponseCount);
// dataMap3.put("ResultCode", part.ResultCode);
// dataMap3.put("ReelCode", part.ReelCode);
// dataMap3.put("RackID", part.RackID);
// dataMap3.put("RowID", part.RowID);
// dataMap3.put("ColID", part.ColID);
jArray2
.
add
(
part
.
getAJson
());
jArray2
.
add
(
part
.
getAJson
());
}
}
...
@@ -1228,4 +1302,53 @@ public class TMSCommunicator implements WsMsgReceivedListener {
...
@@ -1228,4 +1302,53 @@ public class TMSCommunicator implements WsMsgReceivedListener {
SendData
(
dataMap
);
SendData
(
dataMap
);
}
}
//[order]
//
// 4-1) Request Material to smart rack. : “API” RequestDeliveryOrder << Hanwha -> Smart Rack/Storage >>
//
// 4-2) Response about request : “API” ResponseDeliveryOrder
//
//4-3) Response about reservation information : “API” ResponseUpdateDeliveryReserveState ( History / state = 2011)
//
//
//
//[Reserve]
//
// 5-1) Reserve Material to smart rack : “API” RequestDeliveryReserve << Hanwha -> Smart Rack/Storage >>
//
// 5-2) Response about request : “API” ResponseDeliveryReserve
//
//5-3) Response about reservation information : “API” ResponseUpdateDeliveryReserveState ( History / state = 2010)
//
//
//
// We can change status reservation from Reserve to Order
//
//5-4) “API” RequestUpdateDeliveryReserveState ( code = 2011 ) << Hanwha -> Smart Rack / Storage>>
//
// 5-5) Responding to the result of cancellation request : “API” ResponseUpdateDeliveryReserveState ( History / state = 2011)
//
//
//
// You can synchronize in real time or synchronize all at once when dispensing materials
//
//6) Sync Material List : “API” RequestSyncPartReelPosInfo ( state = 0 )
//
//
//
// We can cancel the requested reservation.
//
// 7-1) “API” RequestUpdateDeliveryReserveState ( code = 2012 ) << Hanwha -> Smart Rack / Storage>>
//
// 7-2) Responding to the result of cancellation request : “API” ResponseUpdateDeliveryReserveState ( History / state = 2012)
//
//
//
// When all requested materials out from rack, the status of the reservation list must also be changed
//
//8) “API” ResponseUpdateDeliveryReserveState ( History / state = 2013)
}
}
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSUtil.java
0 → 100644
查看文件 @
9f21ba7
package
com
.
neotel
.
smfcore
.
custom
.
hanwha
.
handler
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.service.manager.IDataLogManager
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.custom.hanwha.handler.bean.TMSPart
;
import
com.neotel.smfcore.custom.hanwha.handler.bean.TMSReserve
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.List
;
@Slf4j
@Service
public
class
TMSUtil
{
@Autowired
private
IDataLogManager
dataLogManager
;
@Autowired
private
IStoragePosManager
storagePosManager
;
@Autowired
private
ILiteOrderManager
liteOrderManager
;
@Autowired
private
LiteOrderCache
liteOrderCache
;
@Autowired
private
DataCache
dataCache
;
@Autowired
private
TaskService
taskService
;
public
TMSReserve
GetOrderInfo
(
LiteOrder
liteOrder
)
{
TMSReserve
tmsReserve
=
new
TMSReserve
();
tmsReserve
.
setReserveCode
(
liteOrder
.
getOrderNo
());
SimpleDateFormat
formatter
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
String
dateString
=
formatter
.
format
(
liteOrder
.
getCreateDate
());
tmsReserve
.
setDate
(
dateString
);
List
<
TMSPart
>
tmsParts
=
new
ArrayList
<>();
//查找工单的所有任务
Criteria
c
=
Criteria
.
where
(
"sourceName"
).
is
(
liteOrder
.
getOrderNo
()).
and
(
"type"
).
is
(
2
);
List
<
DataLog
>
dataLogs
=
dataLogManager
.
findByQuery
(
new
Query
(
c
));
boolean
hasCancelTask
=
false
;
boolean
allCancel
=
true
;
for
(
DataLog
task
:
dataLogs
)
{
//是工单出库任务
if
(
task
.
isCheckOutTask
()
&&
task
.
getSourceName
().
equals
(
liteOrder
.
getOrderNo
()))
{
int
responseNum
=
task
.
getNum
();
String
logCode
=
TMS_Code
.
CODE_2013
;
//默认已完成
if
(
task
.
isCancel
())
{
hasCancelTask
=
true
;
responseNum
=
0
;
logCode
=
TMS_Code
.
CODE_2012
;
//取消成功
}
else
if
(
task
.
isExecuting
()
||
task
.
isWait
())
{
logCode
=
TMS_Code
.
CODE_2011
;
//出库中
allCancel
=
false
;
}
else
{
logCode
=
TMS_Code
.
CODE_2013
;
//已完成
allCancel
=
false
;
}
TMSPart
part
=
TMSPart
.
newBean
(
tmsParts
.
size
(),
task
.
getPartNumber
(),
task
.
getBarcode
(),
task
.
getNum
(),
responseNum
,
logCode
,
task
.
getCid
(),
task
.
getPosName
());
tmsParts
.
add
(
part
);
}
}
//有取消且有完成的返回2016.全部取消返回2012
if
(
liteOrder
.
isClosed
())
{
//如果工单全部取消,需要发送2012
if
(
allCancel
)
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2012
);
}
else
if
(
hasCancelTask
)
{
//有取消任务返回2016
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2016
);
}
else
if
(
tmsParts
.
size
()
>
0
)
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2013
);
}
else
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2001
);
}
}
else
if
(
liteOrder
.
isOutOne
()
||
liteOrder
.
isOutTails
()
||
liteOrder
.
isOutOne
())
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2011
);
}
else
if
(
liteOrder
.
isNew
())
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2010
);
//查找锁定的物料
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
liteOrder
.
getOrderNo
());
for
(
StoragePos
pos
:
lockPosList
)
{
Barcode
code
=
pos
.
getBarcode
();
TMSPart
part
=
TMSPart
.
newBean
(
tmsParts
.
size
(),
code
.
getPartNumber
(),
code
.
getBarcode
(),
code
.
getAmount
(),
code
.
getAmount
(),
TMS_Code
.
CODE_2010
,
""
,
pos
.
getPosName
());
tmsParts
.
add
(
part
);
}
}
tmsReserve
.
setPartList
(
tmsParts
);
return
tmsReserve
;
}
public
LiteOrder
createOrder
(
String
requestCmd
,
int
requestID
,
List
<
LiteOrderItem
>
items
,
String
orderNo
,
boolean
autoOut
,
List
<
String
>
rackList
)
{
if
(
items
.
size
()
<=
0
)
{
return
null
;
}
if
(
rackList
==
null
)
{
rackList
=
new
ArrayList
<>();
}
//判断是否有已执行的工单,有的话创建失败
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
ne
(
LITEORDER_STATUS
.
CLOSED
));
List
<
LiteOrder
>
orderList
=
liteOrderManager
.
findByQuery
(
query
);
if
(
orderList
.
size
()
>
0
)
{
log
.
info
(
requestCmd
+
": 当前有未关闭的工单"
+
orderList
.
size
()
+
",创建工单失败"
);
return
null
;
}
LiteOrder
liteOrder
=
new
LiteOrder
(
orderNo
,
items
);
liteOrder
.
setSource
(
"DeliveryOrder"
);
LiteOrder
dbOrder
=
liteOrderManager
.
findByOrderNo
(
liteOrder
.
getOrderNo
());
if
(
dbOrder
!=
null
)
{
orderNo
=
orderNo
+
"-"
+
requestID
;
dbOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
dbOrder
==
null
)
{
liteOrder
.
setOrderNo
(
orderNo
);
}
else
{
log
.
info
(
requestCmd
+
" :数据库中已存在工单号为["
+
orderNo
+
"],创建工单失败"
);
return
null
;
}
}
log
.
info
(
requestCmd
+
":新建工单:"
+
liteOrder
.
getOrderNo
()
+
",共"
+
items
.
size
()
+
"条工单详情,自动执行:"
+
autoOut
);
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
if
(
autoOut
)
{
try
{
liteOrderCache
.
checkOutLiteOrder
(
liteOrder
.
getOrderNo
(),
false
,
false
,
true
,
rackList
);
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
}
catch
(
ValidateException
ex
)
{
log
.
error
(
requestCmd
+
" 自动执行工单["
+
liteOrder
.
getOrderNo
()
+
"] error:"
+
ex
.
toString
());
}
}
else
{
//先锁定物料
liteOrderCache
.
LiteOrderLockReel
(
liteOrder
.
getOrderNo
(),
false
,
false
,
true
,
rackList
);
}
return
liteOrder
;
}
public
List
<
TMSPart
>
GetReserveList
(
String
requestCmd
,
LiteOrder
liteOrder
)
{
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
liteOrder
.
getOrderNo
());
List
<
TMSPart
>
parts
=
new
ArrayList
<>();
for
(
LiteOrderItem
item
:
liteOrder
.
getOrderItems
())
{
try
{
int
curroNum
=
0
;
for
(
StoragePos
pos
:
lockPosList
)
{
if
(
pos
.
getBarcode
().
getPartNumber
().
equals
(
item
.
getPn
()))
{
int
requestNum
=
pos
.
getBarcode
().
getAmount
();
curroNum
+=
requestNum
;
if
(
curroNum
>
item
.
getNeedNum
())
{
requestNum
=
pos
.
getBarcode
().
getAmount
()
-
(
curroNum
-
item
.
getNeedNum
());
}
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
//准备出库
TMSPart
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
pos
.
getBarcode
().
getBarcode
(),
requestNum
,
pos
.
getBarcode
().
getAmount
(),
TMS_Code
.
CODE_2010
,
storage
.
getCid
(),
pos
.
getPosName
());
log
.
info
(
requestCmd
+
" pn="
+
item
.
getPn
()
+
",锁定物料成功:code="
+
TMS_Code
.
CODE_2010
+
",posName="
+
pos
.
getPosName
()
+
",barcode="
+
pos
.
getBarcode
().
getBarcode
());
parts
.
add
(
p
);
}
}
}
catch
(
Exception
ex
)
{
log
.
error
(
requestCmd
+
" "
+
item
.
getPn
()
+
",error::"
,
ex
.
toString
());
}
}
return
parts
;
}
public
TMSReserve
ProcessOrder
(
String
reserveCode
,
String
resultCode
)
{
TMSReserve
tmsReserve
=
new
TMSReserve
();
tmsReserve
.
setReserveCode
(
reserveCode
);
tmsReserve
.
setResultCode
(
resultCode
);
tmsReserve
.
setPartList
(
new
ArrayList
<>());
List
<
TMSPart
>
tmsParts
=
new
ArrayList
<>();
if
(
resultCode
.
equals
(
TMS_Code
.
CODE_2012
)
||
resultCode
.
equals
(
TMS_Code
.
CODE_2016
))
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2014
);
LiteOrder
order
=
liteOrderCache
.
getLiteOrder
(
reserveCode
);
if
(
order
!=
null
)
{
if
(
order
.
isOutBom
()
||
order
.
isOutTails
()
||
order
.
isOutOne
())
{
log
.
info
(
"ProcessOrder 准备取消工单:"
+
reserveCode
+
",设置取消标记"
);
order
.
addAppendDate
(
"cancel"
,
"true"
);
liteOrderManager
.
save
(
order
);
liteOrderCache
.
addOrderToMap
(
order
);
//查找工单的所有任务
Criteria
c
=
Criteria
.
where
(
"sourceName"
).
is
(
order
.
getOrderNo
()).
and
(
"type"
).
is
(
2
);
List
<
DataLog
>
dataLogs
=
dataLogManager
.
findByQuery
(
new
Query
(
c
));
for
(
DataLog
task
:
dataLogs
)
{
//是工单出库任务
if
(
task
.
isCheckOutTask
()
&&
task
.
getSourceName
().
equals
(
order
.
getOrderNo
()))
{
boolean
cancelResult
=
false
;
String
logCode
=
TMS_Code
.
CODE_2014
;
//默认不能取消
if
(
task
.
isCancel
())
{
logCode
=
TMS_Code
.
CODE_2012
;
//取消成功
}
else
if
(
task
.
isExecuting
()
||
task
.
isWait
())
{
//判断任务是否可取消
cancelResult
=
taskService
.
cancelTask
(
task
.
getId
());
if
(
cancelResult
)
{
logCode
=
TMS_Code
.
CODE_2012
;
//取消成功
}
else
{
logCode
=
TMS_Code
.
CODE_2014
;
//取消失败
}
}
else
{
logCode
=
TMS_Code
.
CODE_2013
;
//已完成
}
log
.
info
(
"RequestUpdateDeliveryReserveState 取消出库任务,工单:"
+
order
.
getOrderNo
()
+
", barcode:"
+
task
.
getBarcode
()
+
", taskID:"
+
task
.
getId
()
+
"取消结果:"
+
cancelResult
);
TMSPart
part
=
TMSPart
.
newBean
(
tmsParts
.
size
(),
task
.
getPartNumber
(),
task
.
getBarcode
(),
task
.
getNum
(),
task
.
getNum
(),
logCode
,
task
.
getCid
(),
task
.
getPosName
());
tmsParts
.
add
(
part
);
}
}
//判断工单是否可以取消,
liteOrderCache
.
closeOrder
(
order
.
getOrderNo
());
if
(
order
.
isClosed
())
{
if
(
resultCode
.
equals
(
TMS_Code
.
CODE_2016
))
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2016
);
//取消成功
}
else
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2012
);
//取消成功
}
}
else
{
order
.
addAppendDate
(
"cancel"
,
""
);
liteOrderManager
.
save
(
order
);
liteOrderCache
.
addOrderToMap
(
order
);
log
.
info
(
"ProcessOrder 取消工单失败,清空取消标记 "
);
}
}
else
{
log
.
error
(
"ProcessOrder 无法取消工单:"
+
reserveCode
+
",未开始或已结束"
);
}
}
else
{
log
.
error
(
"ProcessOrder 未找到工单号:"
+
reserveCode
);
}
}
else
if
(
reserveCode
.
equals
(
TMS_Code
.
CODE_2011
))
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2014
);
//工单出库
LiteOrder
order
=
liteOrderCache
.
getLiteOrder
(
reserveCode
);
if
(
order
!=
null
)
{
log
.
error
(
"ProcessOrder 工单开始出库:"
+
reserveCode
+
""
);
//工单出库
liteOrderCache
.
checkOutLiteOrder
(
order
.
getOrderNo
(),
false
,
false
,
true
);
//查找工单的所有任务
Criteria
c
=
Criteria
.
where
(
"sourceName"
).
is
(
order
.
getOrderNo
()).
and
(
"type"
).
is
(
2
);
List
<
DataLog
>
dataLogs
=
dataLogManager
.
findByQuery
(
new
Query
(
c
));
for
(
DataLog
task
:
dataLogs
)
{
//是工单出库任务
if
(
task
.
isCheckOutTask
()
&&
task
.
getSourceName
().
equals
(
order
.
getOrderNo
()))
{
String
logCode
=
TMS_Code
.
CODE_2011
;
log
.
info
(
"ProcessOrder 工单出库:"
+
order
.
getOrderNo
()
+
", barcode:"
+
task
.
getBarcode
()
+
", taskID:"
+
task
.
getId
()
+
" ,postName="
+
task
.
getPosName
());
TMSPart
part
=
TMSPart
.
newBean
(
tmsParts
.
size
(),
task
.
getPartNumber
(),
task
.
getBarcode
(),
task
.
getNum
(),
task
.
getNum
(),
logCode
,
task
.
getCid
(),
task
.
getPosName
());
tmsParts
.
add
(
part
);
}
}
}
else
{
log
.
error
(
"ProcessOrder 未找到工单号:"
+
reserveCode
);
}
}
tmsReserve
.
setPartList
(
tmsParts
);
return
tmsReserve
;
}
public
List
<
LiteOrderItem
>
partToItems
(
List
<
String
>
partItem
,
List
<
Integer
>
partCount
)
{
List
<
LiteOrderItem
>
liteOrderItems
=
new
ArrayList
<>();
int
index
=
0
;
for
(
String
pn
:
partItem
)
{
int
count
=
Convert
.
toInt
(
partCount
.
get
(
index
));
if
(
ObjectUtil
.
isNotEmpty
(
pn
)
&&
count
>
0
)
{
LiteOrderItem
item
=
new
LiteOrderItem
();
item
.
setPn
(
pn
);
item
.
setNeedNum
(
count
);
liteOrderItems
.
add
(
item
);
}
index
++;
}
return
liteOrderItems
;
}
public
List
<
TMSPart
>
itemsToTMSPartList
(
List
<
LiteOrderItem
>
liteOrderItems
)
{
List
<
TMSPart
>
parts
=
new
ArrayList
<>();
for
(
LiteOrderItem
item
:
liteOrderItems
)
{
TMSPart
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
0
,
TMS_Code
.
CODE_2014
,
""
,
""
);
parts
.
add
(
p
);
}
return
parts
;
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论