Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit a6ea5055
由
LN
编写于
2024-12-11 20:17:59 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
工单锁定取消物料需要将锁定状态上传到TMS. reelID出库修改。websocket连接后延几秒再同步数据。
1 个父辈
112657c3
显示空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
191 行增加
和
59 行删除
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.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/custom/hanwha/handler/bean/TMSPartReelPos.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSPos.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
a6ea505
...
...
@@ -438,7 +438,7 @@ public class LiteOrderCache {
return
checkOutLiteOrder
(
orderNo
,
outBom
,
singleOut
,
false
);
}
public
synchronized
String
checkOutLiteOrder
(
String
orderNo
,
boolean
outBom
,
boolean
singleOut
,
boolean
needCheck
)
{
return
checkOutLiteOrder
(
orderNo
,
outBom
,
singleOut
,
needCheck
);
return
checkOutLiteOrder
(
orderNo
,
outBom
,
singleOut
,
needCheck
,
new
ArrayList
<>()
);
}
/**
* 执行工单出库
...
...
@@ -740,19 +740,26 @@ public class LiteOrderCache {
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
liteOrder
.
getOrderNo
());
//绑定料需要解绑
storagePosManager
.
clearLockPos
(
liteOrder
.
getOrderNo
());
List
<
StoragePos
>
newPosLis
=
new
ArrayList
<>();
//缓存清除锁定 TODO
if
(
lockPosList
!=
null
)
{
if
(
lockPosList
!=
null
&&
lockPosList
.
size
()>
0
)
{
for
(
StoragePos
pos
:
lockPosList
)
{
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
dataCache
.
unLockOneReel
(
storage
.
getCid
(),
pos
.
getBarcode
().
getPartNumber
());
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
dataCache
.
unLockOneReel
(
storage
.
getCid
(),
pos
.
getBarcode
().
getPartNumber
());
pos
.
getBarcode
().
setLockId
(
null
);
newPosLis
.
add
(
pos
);
}
//TODO 需要转移到工单状态改变中处理
liteOrder
.
setLockReelList
(
newPosLis
);
}
//绑定料需要解绑
storagePosManager
.
clearLockPos
(
liteOrder
.
getOrderNo
());
log
.
info
(
"关闭工单["
+
orderNo
+
"]成功"
);
liteOrder
.
setClosed
(
true
);
liteOrderManager
.
save
(
liteOrder
);
...
...
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
查看文件 @
a6ea505
...
...
@@ -4,6 +4,7 @@ import com.neotel.smfcore.common.base.BasePo;
import
com.neotel.smfcore.common.utils.StorageConstants
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
lombok.Data
;
import
org.springframework.data.annotation.Transient
;
import
org.springframework.data.mongodb.core.mapping.Document
;
...
...
@@ -92,6 +93,13 @@ public class LiteOrder extends BasePo implements Serializable {
@Transient
private
List
<
LiteOrderItem
>
orderItems
;
/**
* 锁定的物料,关闭工单时,TMS需要更新锁定物料状态
*/
@Transient
private
List
<
StoragePos
>
lockReelList
;
/**
* 建议出仓时间
*/
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/handler/HanwhaApiHandler.java
查看文件 @
a6ea505
...
...
@@ -72,12 +72,16 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
@Override
public
Barcode
canPutInBeforeResolve
(
String
codeResolveUrl
,
CodeValidateParam
params
)
throws
ValidateException
{
log
.
info
(
"barcode["
+
params
.
getCode
()
+
"] 解析条码"
);
CodeBean
codeBean
=
BarcodeRule
.
splitCodeAndSize
(
params
.
getCode
());
String
[]
codeStr
=
params
.
getCode
().
split
(
"##"
);
for
(
int
i
=
codeStr
.
length
-
1
;
i
>=
0
;
i
--)
{
String
codeStr1
=
codeStr
[
i
];
CodeBean
codeBean
=
BarcodeRule
.
splitCodeAndSize
(
codeStr1
);
String
fullCode
=
codeBean
.
getCodeStr
();
if
(
fullCode
.
endsWith
(
"##"
))
{
fullCode
=
fullCode
.
substring
(
0
,
fullCode
.
length
()
-
2
);
}
log
.
info
(
"barcode["
+
params
.
getCode
()
+
"] 解析条码到完整条码:"
+
fullCode
+
",调用 RequestGetPartInfo"
);
log
.
info
(
"barcode["
+
params
.
getCode
()
+
"] 解析条码到完整条码:"
+
fullCode
+
",调用 RequestGetPartInfo"
);
List
<
TMSPart
>
result
=
tmsApis
.
RequestGetPartInfo
(
0
,
fullCode
);
if
(
result
.
size
()
>
0
)
{
String
pn
=
result
.
get
(
0
).
getPartName
();
...
...
@@ -138,12 +142,13 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
barcode
=
barcodeManager
.
saveBarcode
(
barcode
);
log
.
info
(
"barcode["
+
params
.
getCode
()
+
"] RequestGetPartInfo ,PN=["
+
pn
+
"],code=["
+
code
+
"],count=["
+
count
+
"]新增条码准备入库"
);
return
barcode
;
}
else
{
log
.
info
(
"barcode["
+
params
.
getCode
()
+
"] 解析条码到完整条码:"
+
fullCode
+
",调用 RequestGetPartInfo 未收到反馈"
);
throw
new
ValidateException
(
"smfcore.mesApi.inCheck.error"
,
"RequestGetPartInfo no data"
,
new
String
[]{
" no data "
});
}
else
{
log
.
info
(
"barcode["
+
params
.
getCode
()
+
"] 解析条码到完整条码:"
+
fullCode
+
",调用 RequestGetPartInfo 未收到反馈"
);
throw
new
ValidateException
(
"smfcore.mesApi.inCheck.error"
,
"RequestGetPartInfo no data"
);
}
// return null;
return
null
;
}
private
Date
getDate
(
String
str
)
{
...
...
@@ -196,7 +201,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
}
if
(
task
.
isFinished
()||
task
.
isEnd
())
{
List
<
TMSPartReelPos
>
list
=
new
ArrayList
<>();
TMSPartReelPos
bean
=
TMSPartReelPos
.
newBean
(
task
.
getPartNumber
(),
task
.
getBarcode
(),
task
.
getNum
(),
task
.
getCid
(),
task
.
getPosName
(),
1
,
task
.
getUpdateDate
().
getTime
(),
-
1
);
TMSPartReelPos
bean
=
TMSPartReelPos
.
newBean
(
task
.
getPartNumber
(),
task
.
getBarcode
(),
task
.
getNum
(),
task
.
getCid
(),
task
.
getPosName
(),
1
,
task
.
getUpdateDate
().
getTime
(),
-
1
,
0
);
list
.
add
(
bean
);
log
.
info
(
"barcode["
+
task
.
getBarcode
()
+
"],pn["
+
task
.
getPartNumber
()
+
"],posName["
+
task
.
getPosName
()
+
"]入库完成,调用 RequestSyncPartReelPosInfo"
);
...
...
@@ -211,7 +216,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
}
if
(
task
.
isFinished
()||
task
.
isEnd
())
{
List
<
TMSPartReelPos
>
list
=
new
ArrayList
<>();
TMSPartReelPos
bean
=
TMSPartReelPos
.
newBean
(
task
.
getPartNumber
(),
task
.
getBarcode
(),
task
.
getNum
(),
task
.
getCid
(),
task
.
getPosName
(),
2
,
-
1
,
task
.
getUpdateDate
().
getTime
());
TMSPartReelPos
bean
=
TMSPartReelPos
.
newBean
(
task
.
getPartNumber
(),
task
.
getBarcode
(),
task
.
getNum
(),
task
.
getCid
(),
task
.
getPosName
(),
2
,
-
1
,
task
.
getUpdateDate
().
getTime
()
,
0
);
list
.
add
(
bean
);
log
.
info
(
"barcode["
+
task
.
getBarcode
()
+
"],pn["
+
task
.
getPartNumber
()
+
"],posName["
+
task
.
getPosName
()
+
"]出库完成,调用 RequestSyncPartReelPosInfo"
);
...
...
@@ -224,11 +229,17 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
}
@Override
public
void
onOrderStatusChange
(
String
orderNotifyUrl
,
LiteOrder
liteOrder
)
{
public
void
onOrderStatusChange
(
String
orderNotifyUrl
,
LiteOrder
liteOrder
)
{
//ResponseUpdateDeliveryReserveState-all work order
if
(
liteOrder
.
isClosed
())
{
//工单取消,且解锁了物料,需要通知TMS
if
(
liteOrder
.
getLockReelList
()
!=
null
&&
liteOrder
.
getLockReelList
().
size
()>
0
){
tmsUtil
.
SyncReelLockS
(
liteOrder
.
getLockReelList
());
}
String
isCancel
=
liteOrder
.
getAppend
(
"cancel"
);
if
(
isCancel
.
equals
(
"true"
)){
log
.
info
(
"工单取消处理中,此处不通知TMS"
);
...
...
@@ -348,13 +359,14 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
if
(
pos
.
getBarcode
()
==
null
)
{
TMSPartReelPos
bean
=
TMSPartReelPos
.
newBean
(
""
,
""
,
-
1
,
storage
.
getCid
(),
pos
.
getPosName
(),
4
,
-
1
,
-
1
);
storage
.
getCid
(),
pos
.
getPosName
(),
4
,
-
1
,
-
1
,
0
);
list
.
add
(
bean
);
}
else
{
Barcode
barcode
=
pos
.
getBarcode
();
int
s
=
ObjectUtil
.
isNotEmpty
(
barcode
.
getLockId
())?
1
:
0
;
TMSPartReelPos
bean
=
TMSPartReelPos
.
newBean
(
barcode
.
getPartNumber
(),
barcode
.
getBarcode
(),
barcode
.
getAmount
(),
storage
.
getCid
(),
pos
.
getPosName
(),
4
,
barcode
.
getPutInDate
().
getTime
(),
-
1
);
storage
.
getCid
(),
pos
.
getPosName
(),
4
,
barcode
.
getPutInDate
().
getTime
(),
-
1
,
s
);
list
.
add
(
bean
);
}
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSCommunicator.java
查看文件 @
a6ea505
...
...
@@ -143,10 +143,13 @@ public class TMSCommunicator implements WsMsgReceivedListener {
log
.
info
(
"启动 webService 状态检查"
);
while
(
true
)
{
try
{
TimeUnit
.
SECONDS
.
sleep
(
5
);
TimeUnit
.
SECONDS
.
sleep
(
4
);
if
(
needCheck
)
{
stateCheck
();
}
if
(
waitSync
&&
System
.
currentTimeMillis
()>
syncTime
){
SyncData
();
}
}
catch
(
Exception
e
)
{
log
.
error
(
"webService"
+
e
.
getMessage
());
}
...
...
@@ -183,6 +186,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
websocket
=
new
MyWebSocketClient
(
new
URI
(
wsURL
),
this
);
websocket
.
setConnectionLostTimeout
(
3000
);
websocket
.
connect
();
SetNeedSync
(
false
);
}
catch
(
URISyntaxException
e
)
{
e
.
printStackTrace
();
}
...
...
@@ -193,10 +197,19 @@ public class TMSCommunicator implements WsMsgReceivedListener {
parseMessage
(
message
);
}
private
boolean
waitSync
=
false
;
private
Long
syncTime
=
0L
;
private
void
SetNeedSync
(
boolean
needS
){
waitSync
=
needS
;
syncTime
=
System
.
currentTimeMillis
()+
5000
;
}
@Override
public
void
onOpen
()
{
Initialize
(
clientType
,
clientSubType
);
SyncData
();
SetNeedSync
(
true
);
//三到五秒后再同步数据
// SyncData();
}
public
static
boolean
isEnable
()
{
...
...
@@ -285,6 +298,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
@Override
public
void
run
()
{
try
{
SetNeedSync
(
false
);
// 同步数据
List
<
String
>
cids
=
new
ArrayList
<>(
dataCache
.
getAllStorage
().
keySet
());
SyncStorageConnectionInfo
(
cids
.
toArray
(
new
String
[
cids
.
size
()]),
new
Integer
[]{});
...
...
@@ -325,13 +339,15 @@ public class TMSCommunicator implements WsMsgReceivedListener {
if
(
pos
.
getBarcode
()
==
null
)
{
TMSPartReelPos
bean
=
TMSPartReelPos
.
newBean
(
""
,
""
,
-
1
,
storage
.
getCid
(),
pos
.
getPosName
(),
4
,
-
1
,
-
1
);
storage
.
getCid
(),
pos
.
getPosName
(),
4
,
-
1
,
-
1
,
0
);
list
.
add
(
bean
);
}
else
{
Barcode
barcode
=
pos
.
getBarcode
();
int
s
=
ObjectUtil
.
isNotEmpty
(
barcode
.
getLockId
())?
1
:
0
;
TMSPartReelPos
bean
=
TMSPartReelPos
.
newBean
(
barcode
.
getPartNumber
(),
barcode
.
getBarcode
(),
barcode
.
getAmount
(),
storage
.
getCid
(),
pos
.
getPosName
(),
4
,
barcode
.
getPutInDate
().
getTime
(),
-
1
);
storage
.
getCid
(),
pos
.
getPosName
(),
4
,
barcode
.
getPutInDate
().
getTime
(),
-
1
,
s
);
list
.
add
(
bean
);
}
...
...
@@ -486,7 +502,10 @@ public class TMSCommunicator implements WsMsgReceivedListener {
break
;
case
"RequestDeliveryOrderByLocation"
:
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
Locations
=
getMapValue
(
msgMap
,
"Locations"
);
Locations
=
getTMSPosList
(
msgMap
,
"Locations"
);
// 2024-12-11 18:05:08.428 INFO [TMSCommunicator.java:504] - onMsgReceived: requestID=[1],Topic=[RequestDeliveryOrderByLocation],message:
// [{"Locations":[{"RackID":"01","RowID":"111","ColID":"11"}],"Topic":"RequestDeliveryOrderByLocation","id":1,"uid":74240}],
//3.10 RequestDeliveryOrderByLocation
RequestDeliveryOrderByLocation
(
requestID
,
Locations
);
break
;
...
...
@@ -524,7 +543,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
case
"RequestDeliveryReserveByLocation"
:
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
Locations
=
get
MapValue
(
msgMap
,
"Locations"
);
Locations
=
get
TMSPosList
(
msgMap
,
"Locations"
);
// 3.16 ,RequestDeliveryReserveByLocation
RequestDeliveryReserveByLocation
(
requestID
,
Locations
);
break
;
...
...
@@ -601,6 +620,21 @@ public class TMSCommunicator implements WsMsgReceivedListener {
return
null
;
}
private
static
List
<
TMSPos
>
getTMSPosList
(
Map
<
String
,
Object
>
resultMap
,
String
key
)
throws
ApiException
{
List
<
TMSPos
>
results
=
new
ArrayList
<>();
if
(
key
!=
null
&&
!
key
.
isEmpty
())
{
Object
value
=
resultMap
.
get
(
key
);
if
(
value
!=
null
)
{
List
<
Object
>
result
=(
List
<
Object
>)
value
;
for
(
Object
str
:
result
)
{
TMSPos
obj
=
TMSPos
.
ToBean
((
Map
<
String
,
Object
>)
str
);
results
.
add
(
obj
);
}
}
}
return
results
;
}
public
void
OrderProEndUpdateState
(
String
requestCmd
,
int
requestID
,
LiteOrder
liteOrder
){
...
...
@@ -929,8 +963,10 @@ public class TMSCommunicator implements WsMsgReceivedListener {
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
if
(
liteOrder
!=
null
)
{
List
<
TMSPart
>
parts
=
tmsUtil
.
GetReserveList
(
requestCmd
,
liteOrder
);
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
liteOrder
.
getOrderNo
());
//同步锁定物料状态
tmsUtil
.
SyncReelLockS
(
lockPosList
);
List
<
TMSPart
>
parts
=
tmsUtil
.
GetReserveList
(
requestCmd
,
liteOrder
,
lockPosList
);
ResponseDeliveryReserve
(
responseCmd
,
requestID
,
parts
,
liteOrder
.
getOrderNo
(),
""
);
...
...
@@ -1004,6 +1040,8 @@ public class TMSCommunicator implements WsMsgReceivedListener {
posResultMap
.
put
(
pos
.
getPosName
(),
TMS_Code
.
CODE_2010
);
//准备出库
log
.
info
(
requestCmd
+
" : pos="
+
pos
.
getPosName
()
+
",锁定成功,code="
+
TMS_Code
.
CODE_2010
);
}
//同步锁定物料状态
tmsUtil
.
SyncReelLockS
(
lockPosList
);
}
//返回消息
...
...
@@ -1074,6 +1112,8 @@ public class TMSCommunicator implements WsMsgReceivedListener {
posResultMap
.
put
(
pos
.
getBarcode
().
getBarcode
(),
TMS_Code
.
CODE_2010
);
//准备出库
log
.
info
(
requestCmd
+
" : barcode="
+
pos
.
getBarcode
().
getBarcode
()
+
",锁定成功,code="
+
TMS_Code
.
CODE_2010
);
}
//同步锁定物料状态
tmsUtil
.
SyncReelLockS
(
lockPosList
);
}
//返回消息
...
...
@@ -1217,22 +1257,6 @@ public class TMSCommunicator implements WsMsgReceivedListener {
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);
}
/**
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSUtil.java
查看文件 @
a6ea505
...
...
@@ -20,6 +20,7 @@ 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.TMSPartReelPos
;
import
com.neotel.smfcore.custom.hanwha.handler.bean.TMSReserve
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -53,6 +54,9 @@ public class TMSUtil {
@Autowired
private
IComponentManager
componentManager
;
@Autowired
private
TMSApis
tmsApis
;
public
TMSReserve
GetOrderInfo
(
LiteOrder
liteOrder
)
{
TMSReserve
tmsReserve
=
new
TMSReserve
();
...
...
@@ -115,8 +119,9 @@ public class TMSUtil {
for
(
StoragePos
pos
:
lockPosList
)
{
Barcode
code
=
pos
.
getBarcode
();
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
TMSPart
part
=
TMSPart
.
newBean
(
tmsParts
.
size
(),
code
.
getPartNumber
(),
code
.
getBarcode
(),
code
.
getAmount
(),
code
.
getAmount
(),
TMS_Code
.
CODE_2010
,
""
,
pos
.
getPosName
());
TMS_Code
.
CODE_2010
,
storage
.
getCid
()
,
pos
.
getPosName
());
tmsParts
.
add
(
part
);
}
}
...
...
@@ -182,6 +187,8 @@ public class TMSUtil {
//先锁定物料
liteOrderCache
.
LiteOrderLockReel
(
liteOrder
.
getOrderNo
(),
false
,
false
,
true
,
rackList
);
}
return
liteOrder
;
}
...
...
@@ -219,8 +226,8 @@ public class TMSUtil {
}
return
p
;
}
public
List
<
TMSPart
>
GetReserveList
(
String
requestCmd
,
LiteOrder
liteOrder
)
{
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
liteOrder
.
getOrderNo
());
public
List
<
TMSPart
>
GetReserveList
(
String
requestCmd
,
LiteOrder
liteOrder
,
List
<
StoragePos
>
lockPosList
)
{
List
<
TMSPart
>
parts
=
new
ArrayList
<>();
for
(
LiteOrderItem
item
:
...
...
@@ -232,7 +239,7 @@ public class TMSUtil {
for
(
StoragePos
pos
:
lockPosList
)
{
if
(
pos
.
getBarcode
().
getPartNumber
().
equals
(
item
.
getPn
()))
{
if
(
pos
.
getBarcode
().
getPartNumber
().
equals
(
item
.
getPn
())
)
{
int
requestNum
=
pos
.
getBarcode
().
getAmount
();
curroNum
+=
requestNum
;
if
(
curroNum
>
item
.
getNeedNum
())
{
...
...
@@ -291,12 +298,39 @@ public class TMSUtil {
return
parts
;
}
public
void
SyncReelLockS
(
List
<
StoragePos
>
posList
){
if
(
posList
==
null
||
posList
.
size
()<=
0
){
return
;
}
List
<
TMSPartReelPos
>
list
=
new
ArrayList
<>();
for
(
StoragePos
pos:
posList
)
{
int
s
=
ObjectUtil
.
isNotEmpty
(
pos
.
getBarcode
().
getLockId
())?
1
:
0
;
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
TMSPartReelPos
bean
=
TMSPartReelPos
.
newBean
(
pos
.
getBarcode
().
getPartNumber
(),
pos
.
getBarcode
().
getBarcode
(),
pos
.
getBarcode
().
getAmount
(),
storage
.
getCid
(),
pos
.
getPosName
(),
1
,
pos
.
getUpdateDate
().
getTime
(),
-
1
,
s
);
list
.
add
(
bean
);
}
tmsApis
.
RequestSyncPartReelPosInfo
(
0
,
list
);
}
public
boolean
HasExeOrder
(){
if
(
liteOrderCache
.
SingleOrderMode
()){
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
ne
(
LITEORDER_STATUS
.
CLOSED
)
.
ne
(
LITEORDER_STATUS
.
NEW
)
);
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
ne
(
LITEORDER_STATUS
.
CLOSED
));
List
<
LiteOrder
>
orderList
=
liteOrderManager
.
findByQuery
(
query
);
if
(
orderList
.
size
()
>
0
)
{
List
<
LiteOrder
>
nOder
=
new
ArrayList
<>();
for
(
LiteOrder
or:
orderList
)
{
if
(
or
.
isNew
()){
continue
;
}
nOder
.
add
(
or
);
}
if
(
nOder
.
size
()
>
0
)
{
log
.
info
(
" 有正在执行的工单"
+
orderList
.
size
()
+
""
);
return
true
;
}
...
...
@@ -314,14 +348,26 @@ public class TMSUtil {
LiteOrder
order
=
liteOrderCache
.
getLiteOrder
(
reserveCode
);
if
(
order
!=
null
)
{
if
(
order
.
isOutBom
()
||
order
.
isOutTails
()
||
order
.
isOutOne
())
{
if
(
order
.
isOutBom
()
||
order
.
isOutTails
()
||
order
.
isOutOne
()
||
order
.
isNew
()
)
{
log
.
info
(
"ProcessOrder 准备取消工单:"
+
reserveCode
+
"
,
设置取消标记"
);
log
.
info
(
"ProcessOrder 准备取消工单:"
+
reserveCode
+
"
,当前状态:"
+
order
.
getStatus
()+
",
设置取消标记"
);
order
.
addAppendDate
(
"cancel"
,
"true"
);
liteOrderManager
.
save
(
order
);
liteOrderCache
.
addOrderToMap
(
order
);
if
(
order
.
isNew
()){
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
order
.
getOrderNo
());
for
(
StoragePos
pos
:
lockPosList
)
{
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
log
.
info
(
"RequestUpdateDeliveryReserveState 取消锁定物料,工单:"
+
order
.
getOrderNo
()
+
", barcode:"
+
pos
.
getBarcode
().
getBarcode
()
+
", posName:"
+
pos
.
getPosName
()
);
TMSPart
part
=
TMSPart
.
newBean
(
tmsParts
.
size
(),
pos
.
getBarcode
().
getPartNumber
(),
pos
.
getBarcode
().
getBarcode
(),
pos
.
getBarcode
().
getAmount
(),
pos
.
getBarcode
().
getAmount
(),
TMS_Code
.
CODE_2012
,
storage
.
getCid
(),
pos
.
getPosName
());
tmsParts
.
add
(
part
);
}
}
else
{
//查找工单的所有任务
Criteria
c
=
Criteria
.
where
(
"sourceName"
).
is
(
order
.
getOrderNo
()).
and
(
"type"
).
is
(
2
);
List
<
DataLog
>
dataLogs
=
dataLogManager
.
findByQuery
(
new
Query
(
c
));
...
...
@@ -352,7 +398,7 @@ public class TMSUtil {
tmsParts
.
add
(
part
);
}
}
}
//判断工单是否可以取消,
liteOrderCache
.
closeOrder
(
order
.
getOrderNo
());
if
(
order
.
isClosed
())
{
...
...
@@ -374,8 +420,8 @@ public class TMSUtil {
}
else
{
log
.
error
(
"ProcessOrder 未找到工单号:"
+
reserveCode
);
}
}
else
if
(
res
erve
Code
.
equals
(
TMS_Code
.
CODE_2011
))
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_201
4
);
}
else
if
(
res
ult
Code
.
equals
(
TMS_Code
.
CODE_2011
))
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_201
0
);
//工单出库
LiteOrder
order
=
liteOrderCache
.
getLiteOrder
(
reserveCode
);
if
(
order
!=
null
)
{
...
...
@@ -383,15 +429,20 @@ public class TMSUtil {
if
(
HasExeOrder
())
{
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
order
.
getOrderNo
());
log
.
info
(
"ProcessOrder: 当前有未关闭的工单 ,工单出库失败"
);
tmsParts
=
GetReserveList
(
"ProcessOrder"
,
order
);
tmsParts
=
GetReserveList
(
"ProcessOrder"
,
order
,
lockPosList
);
}
else
{
//工单出库
liteOrderCache
.
checkOutLiteOrder
(
order
.
getOrderNo
(),
false
,
false
,
true
);
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
order
.
getOrderNo
(),
false
,
false
,
true
);
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2011
);
//查找工单的所有任务
Criteria
c
=
Criteria
.
where
(
"sourceName"
).
is
(
order
.
getOrderNo
()).
and
(
"type"
).
is
(
2
);
List
<
DataLog
>
dataLogs
=
dataLogManager
.
findByQuery
(
new
Query
(
c
));
if
(
dataLogs
==
null
||
dataLogs
.
size
()
<=
0
)
{
tmsReserve
.
setResultCode
(
TMS_Code
.
CODE_2010
);
log
.
info
(
"ProcessOrder 工单出库:"
+
order
.
getOrderNo
()
+
"失败:code="
+
result
+
" :任务数为0"
);
}
else
{
for
(
DataLog
task
:
dataLogs
)
{
//是工单出库任务
...
...
@@ -405,6 +456,7 @@ public class TMSUtil {
}
}
}
}
}
else
{
log
.
error
(
"ProcessOrder 未找到工单号:"
+
reserveCode
);
}
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSPartReelPos.java
查看文件 @
a6ea505
...
...
@@ -22,7 +22,10 @@ public class TMSPartReelPos extends TMSPos implements Serializable {
*/
private
int
flag
=
0
;
private
int
state
=
0
;
/**
* 1=锁定,0=未锁定
*/
private
int
state
=
0
;
//yyyy-MM-dd HH:mm:ss
private
String
indate
;
...
...
@@ -51,17 +54,18 @@ public class TMSPartReelPos extends TMSPos implements Serializable {
map
.
put
(
"Flag"
,
getFlag
());
map
.
put
(
"Indate"
,
getIndate
());
map
.
put
(
"Outdate"
,
getOutdate
());
map
.
put
(
"State"
,
getState
());
return
map
;
}
public
static
TMSPartReelPos
newBean
(
String
pn
,
String
barcode
,
int
count
,
String
cid
,
String
posName
,
int
flag
,
long
inTime
,
long
outTime
)
{
public
static
TMSPartReelPos
newBean
(
String
pn
,
String
barcode
,
int
count
,
String
cid
,
String
posName
,
int
flag
,
long
inTime
,
long
outTime
,
int
reelS
)
{
TMSPartReelPos
bean
=
new
TMSPartReelPos
();
bean
.
setPartName
(
pn
);
bean
.
setReelCode
(
barcode
);
bean
.
setCount
(
count
);
bean
.
setRackID
(
cid
);
bean
.
setFlag
(
flag
);
bean
.
setState
(
0
);
bean
.
setState
(
reelS
);
bean
.
setPosName
(
posName
);
String
format
=
"yyyy-MM-dd HH:mm:ss"
;
if
(
inTime
>
0
)
{
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSPos.java
查看文件 @
a6ea505
...
...
@@ -28,6 +28,31 @@ public class TMSPos implements Serializable {
jObject
.
put
(
"ColID"
,
ColID
);
return
jObject
;
}
public
static
TMSPos
ToBean
(
Map
<
String
,
Object
>
map
)
{
try
{
TMSPos
obj
=
new
TMSPos
();
obj
.
setRackID
(
getMapValue
(
map
,
"RackID"
));
obj
.
setRowID
(
getMapValue
(
map
,
"RowID"
));
obj
.
setColID
(
getMapValue
(
map
,
"ColID"
));
return
obj
;
}
catch
(
Exception
ex
)
{
log
.
error
(
"转换为TMSPos出错:"
+
ex
.
toString
());
return
null
;
}
}
private
static
<
T
>
T
getMapValue
(
Map
<
String
,
Object
>
resultMap
,
String
key
)
{
if
(
key
!=
null
&&
!
key
.
isEmpty
())
{
Object
value
=
resultMap
.
get
(
key
);
if
(
value
!=
null
)
{
return
(
T
)
value
;
}
}
return
null
;
}
public
String
getPosName
(){
return
getRowID
()+
"_"
+
getColID
();
}
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论