Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit db2e662c
由
LN
编写于
2024-12-10 18:41:38 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
韩华接口修改
1 个父辈
eb3a560b
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
136 行增加
和
39 行删除
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/storage/rest/StorageController.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/TMS_Code.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSPart.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
db2e662
...
...
@@ -730,6 +730,19 @@ public class LiteOrderCache {
}
}
}
List
<
StoragePos
>
lockPosList
=
storagePosManager
.
findLockPos
(
liteOrder
.
getOrderNo
());
//缓存清除锁定 TODO
if
(
lockPosList
!=
null
){
for
(
StoragePos
pos
:
lockPosList
)
{
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
dataCache
.
unLockOneReel
(
storage
.
getCid
(),
pos
.
getBarcode
().
getPartNumber
());
}
}
//绑定料需要解绑
storagePosManager
.
clearLockPos
(
liteOrder
.
getOrderNo
());
...
...
@@ -922,7 +935,7 @@ public class LiteOrderCache {
}
else
if
(
Strings
.
isNullOrEmpty
(
reelId
)
&&
Strings
.
isNullOrEmpty
(
partNumber
)
&&
!
Strings
.
isNullOrEmpty
(
mpn
)){
pos
=
storagePosManager
.
findMpnInStorages
(
availableStorageIds
,
mpn
,
excludePosIds
,
checkoutType
,
orderItem
.
getAppendData
());
}
if
(
pos
=
=
null
)
{
if
(
pos
!
=
null
)
{
// //锁定物料
assignNum
=
assignNum
+
pos
.
getBarcode
().
getAmount
();
assignReelCount
=
assignReelCount
+
1
;
...
...
@@ -934,6 +947,10 @@ public class LiteOrderCache {
pos
.
setBarcode
(
barcode
);
storagePosManager
.
save
(
pos
);
//增加物料锁定
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
dataCache
.
lockOneReel
(
storage
.
getCid
(),
pos
.
getBarcode
().
getPartNumber
());
}
//如果是RI出库,只有一盘,出完就结束
if
(!
Strings
.
isNullOrEmpty
(
reelId
)){
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/StorageController.java
查看文件 @
db2e662
...
...
@@ -507,10 +507,22 @@ public class StorageController {
Integer
width
=
0
;
String
labelName
=
""
;
Integer
posType
=
0
;
String
column
=
lineValues
[
columnIndex
];
//lie
String
magazine
=
lineValues
[
magazineIndex
];
//模组
String
layer
=
lineValues
[
layerIndex
];
//层
String
slot
=
lineValues
[
slotIndex
];
//槽位
String
column
=
""
;
String
magazine
=
""
;
String
layer
=
""
;
String
slot
=
""
;
if
(
columnIndex
>=
0
){
column
=
lineValues
[
columnIndex
];
//lie
}
if
(
magazineIndex
>=
0
)
{
magazine
=
lineValues
[
magazineIndex
];
//模组
}
if
(
layerIndex
>=
0
)
{
layer
=
lineValues
[
layerIndex
];
//层
}
if
(
slotIndex
>=
0
)
{
slot
=
lineValues
[
slotIndex
];
//槽位
}
try
{
priority
=
Integer
.
parseInt
(
lineValues
[
priIndex
])
;
height
=
Integer
.
parseInt
(
lineValues
[
hIndex
]);
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/handler/HanwhaApiHandler.java
查看文件 @
db2e662
...
...
@@ -139,7 +139,11 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
log
.
info
(
"barcode["
+
params
.
getCode
()
+
"] RequestGetPartInfo ,PN=["
+
pn
+
"],code=["
+
code
+
"],count=["
+
count
+
"]新增条码准备入库"
);
return
barcode
;
}
return
null
;
else
{
log
.
info
(
"barcode["
+
params
.
getCode
()
+
"] 解析条码到完整条码:"
+
fullCode
+
",调用 RequestGetPartInfo 未收到反馈"
);
throw
new
ValidateException
(
"smfcore.mesApi.inCheck.error"
,
"RequestGetPartInfo no data"
);
}
// return null;
}
private
Date
getDate
(
String
str
)
{
...
...
@@ -154,7 +158,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
@Override
public
Barcode
canPutInAfterResolve
(
String
inCheckUrl
,
CodeValidateParam
params
,
Barcode
barcode
)
throws
ValidateException
{
log
.
info
(
"barcode["
+
barcode
.
getBarcode
()
+
"] 准备入库,
调用 RequestGetPartInfo
"
);
log
.
info
(
"barcode["
+
barcode
.
getBarcode
()
+
"] 准备入库,
直接返回
"
);
// List<TMSPart> result = tmsApis.RequestGetPartInfo(0, barcode.getFullCode());
// if (result.size() > 0) {
// String pn = result.get(0).getPartName();
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSCommunicator.java
查看文件 @
db2e662
...
...
@@ -465,7 +465,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
List
<
String
>
rackList
;
List
<
TMSPos
>
Locations
;
List
<
String
>
reelCds
;
boolean
towerLamp
;
boolean
towerLamp
=
false
;
String
registerID
;
String
reelCode
;
int
count
;
...
...
@@ -473,32 +473,32 @@ public class TMSCommunicator implements WsMsgReceivedListener {
switch
(
topic
)
{
case
"RequestDeliveryOrder"
:
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
partItems
=
getMapValue
(
msgMap
,
"PartNames"
);
partCounts
=
getMapValue
(
msgMap
,
"Counts"
);
towerLamp
=
(
boolean
)
getMapValue
(
msgMap
,
"TowerLamp"
);
rackList
=
getMapValue
(
msgMap
,
"RackList"
);
if
(
rackList
==
null
)
{
rackList
=
new
ArrayList
<>();
rackList
=
getMapValue
(
msgMap
,
"RackList"
);
if
(
rackList
==
null
)
{
rackList
=
new
ArrayList
<>();
}
//3.8 RequestDeliveryOrder
RequestDeliveryOrder
(
requestID
,
partItems
,
partCounts
,
towerLamp
,
rackList
);
RequestDeliveryOrder
(
requestID
,
partItems
,
partCounts
,
towerLamp
,
rackList
);
break
;
case
"RequestDeliveryOrderByLocation"
:
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
Locations
=
getMapValue
(
msgMap
,
"Locations"
);
//3.10 RequestDeliveryOrderByLocation
RequestDeliveryOrderByLocation
(
requestID
,
Locations
);
break
;
case
"RequestDeliveryOrderByReelCd"
:
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
reelCds
=
getMapValue
(
msgMap
,
"ReelCds"
);
rackList
=
getMapValue
(
msgMap
,
"RackList"
);
rackList
=
getMapValue
(
msgMap
,
"RackList"
);
//3.12 RequestDeliveryOrderByReelCd
RequestDeliveryOrderByReelCd
(
requestID
,
reelCds
,
rackList
);
RequestDeliveryOrderByReelCd
(
requestID
,
reelCds
,
rackList
);
break
;
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
<
Integer
>
resultCodes
=
getMapValue
(
msgMap
,
"ResultCodes"
);
//
...
...
@@ -506,31 +506,35 @@ public class TMSCommunicator implements WsMsgReceivedListener {
RequestUpdateDeliveryReserveState
(
requestID
,
reserveCodes
,
resultCodes
);
break
;
case
"RequestDeliveryReserve"
:
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
// 2024-12-10 10:49:05.223 ERROR [TMSCommunicator.java:585] - 处理消息出错:message=
// [{"PartNames":["EP16-000689B"],"Counts":[5000],"RackList":[],"Topic":"RequestDeliveryReserve","id":4,"uid":463433}],error:java.lang.NullPointerException
partItems
=
getMapValue
(
msgMap
,
"PartNames"
);
partCounts
=
getMapValue
(
msgMap
,
"Counts"
);
towerLamp
=
(
boolean
)
getMapValue
(
msgMap
,
"TowerLamp"
);
rackList
=
getMapValue
(
msgMap
,
"RackList"
);
if
(
rackList
==
null
)
{
rackList
=
new
ArrayList
<>();
//
towerLamp = (boolean) getMapValue(msgMap, "TowerLamp");
rackList
=
getMapValue
(
msgMap
,
"RackList"
);
if
(
rackList
==
null
)
{
rackList
=
new
ArrayList
<>();
}
//3.14 RequestDeliveryReserve
RequestDeliveryReserve
(
requestID
,
partItems
,
partCounts
,
towerLamp
,
rackList
);
RequestDeliveryReserve
(
requestID
,
partItems
,
partCounts
,
towerLamp
,
rackList
);
break
;
case
"RequestDeliveryReserveByLocation"
:
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
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
+
"],"
);
log
.
info
(
"onMsgReceived: requestID=["
+
requestID
+
"],Topic=["
+
topic
+
"],message:["
+
message
+
"],"
);
reelCds
=
getMapValue
(
msgMap
,
"ReelCds"
);
rackList
=
getMapValue
(
msgMap
,
"RackList"
);
rackList
=
getMapValue
(
msgMap
,
"RackList"
);
//3.18 RequestDeliveryOrderByReelCd
RequestDeliveryReserveByReelCd
(
requestID
,
reelCds
,
rackList
);
RequestDeliveryReserveByReelCd
(
requestID
,
reelCds
,
rackList
);
break
;
// case "RequestResultOfDeliveryReserve":
...
...
@@ -575,7 +579,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
break
;
default
:
// log.info("onMsgReceived: requestID=["+requestID+"],Topic=["+topic+"],message:["+message+"],");
log
.
debug
(
"onMsgReceived:未找到对应的TOPIC: Topic=["
+
topic
+
"],requestID=["
+
requestID
+
"],message:["
+
message
+
"]"
);
// log.info("onMsgReceived:未找到对应的TOPIC: Topic=[" + topic + "],requestID=[" + requestID + "],message:[" + message +
"]");
// log.debug("onMsgReceived:未找到对应的TOPIC: Topic=["+topic+"] ");
return
;
...
...
@@ -902,6 +906,8 @@ public class TMSCommunicator implements WsMsgReceivedListener {
String
responseCmd
=
"ResponseDeliveryReserve"
;
try
{
//成功返回2010
//2001:, 2002: ,2003:
if
(
partItem
==
null
||
partCount
==
null
||
partItem
.
size
()
<=
0
||
partCount
.
size
()
<=
0
)
{
log
.
info
(
requestCmd
+
" 数据不完整,直接返回"
);
...
...
@@ -911,6 +917,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
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
)
{
...
...
@@ -919,7 +926,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
ResponseDeliveryReserve
(
responseCmd
,
requestID
,
parts
,
""
,
""
);
}
else
{
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
if
(
liteOrder
!=
null
)
{
List
<
TMSPart
>
parts
=
tmsUtil
.
GetReserveList
(
requestCmd
,
liteOrder
);
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSUtil.java
查看文件 @
db2e662
...
...
@@ -3,13 +3,16 @@ 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.manager.IComponentManager
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.service.po.Component
;
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.bean.InventoryItem
;
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
;
...
...
@@ -47,6 +50,8 @@ public class TMSUtil {
private
DataCache
dataCache
;
@Autowired
private
TaskService
taskService
;
@Autowired
private
IComponentManager
componentManager
;
public
TMSReserve
GetOrderInfo
(
LiteOrder
liteOrder
)
{
...
...
@@ -128,12 +133,25 @@ public class TMSUtil {
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
;
if
(
autoOut
){
//判断是否有已执行的工单,有的话创建失败
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
ne
(
LITEORDER_STATUS
.
CLOSED
).
ne
(
LITEORDER_STATUS
.
NEW
));
List
<
LiteOrder
>
orderList
=
liteOrderManager
.
findByQuery
(
query
);
List
<
LiteOrder
>
orders
=
new
ArrayList
<>();
for
(
LiteOrder
order:
orderList
)
{
if
(
order
.
isNew
())
{
continue
;
}
orders
.
add
(
order
);
}
if
(
orders
.
size
()
>
0
)
{
log
.
info
(
requestCmd
+
": 当前有未关闭的工单"
+
orderList
.
size
()
+
",创建工单失败"
);
return
null
;
}
}
else
{
}
LiteOrder
liteOrder
=
new
LiteOrder
(
orderNo
,
items
);
...
...
@@ -164,8 +182,6 @@ public class TMSUtil {
//先锁定物料
liteOrderCache
.
LiteOrderLockReel
(
liteOrder
.
getOrderNo
(),
false
,
false
,
true
,
rackList
);
}
return
liteOrder
;
}
...
...
@@ -197,6 +213,44 @@ public class TMSUtil {
}
}
if
(
curroNum
<=
0
)
{
//预留失败
List
<
InventoryItem
>
items
=
dataCache
.
getInventoryByPN
(
item
.
getPn
());
TMSPart
p
;
if
(
items
.
size
()
>
0
)
{
//如果库存的料都是已锁定的,需要返回2003 .已锁定的需要更新缓存
InventoryItem
inventoryItem
=
items
.
get
(
0
);
if
(
inventoryItem
.
getLockReel
()>=
inventoryItem
.
getStockReel
())
{
//如果是有库存但是库存不足,发送2001
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
item
.
getOutNum
(),
TMS_Code
.
CODE_2003
,
""
,
""
);
log
.
info
(
requestCmd
+
" pn="
+
item
.
getPn
()
+
",出库失败缺料,库存不足:code="
+
TMS_Code
.
CODE_2003
);
}
else
{
//如果是有库存但是库存不足,发送2001
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
item
.
getOutNum
(),
TMS_Code
.
CODE_2001
,
""
,
""
);
log
.
info
(
requestCmd
+
" pn="
+
item
.
getPn
()
+
",出库失败缺料,库存不足:code="
+
TMS_Code
.
CODE_2001
);
}
}
else
{
//判断pn是否存在,存在返回2002,否则返回2003
Component
component
=
componentManager
.
findOneByPN
(
item
.
getPn
());
if
(
component
==
null
)
{
//pn不存在,返回2002
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
item
.
getOutNum
(),
TMS_Code
.
CODE_2002
,
""
,
""
);
log
.
info
(
requestCmd
+
" pn="
+
item
.
getPn
()
+
",出库失败缺料,PN不存在:code="
+
TMS_Code
.
CODE_2002
);
}
else
{
//库存无此物料,发送2003
p
=
TMSPart
.
newBean
(
parts
.
size
(),
item
.
getPn
(),
""
,
item
.
getNeedNum
(),
item
.
getOutNum
(),
TMS_Code
.
CODE_2003
,
""
,
""
);
log
.
info
(
requestCmd
+
" pn="
+
item
.
getPn
()
+
",出库失败缺料,库存无此料:code="
+
TMS_Code
.
CODE_2003
);
}
}
parts
.
add
(
p
);
}
}
catch
(
Exception
ex
)
{
log
.
error
(
requestCmd
+
" "
+
item
.
getPn
()
+
",error::"
,
ex
.
toString
());
}
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMS_Code.java
查看文件 @
db2e662
...
...
@@ -84,11 +84,13 @@ public class TMS_Code {
/**
* 2002 Out of part 无材料
* 从来没有的PN
*/
public
static
final
String
CODE_2002
=
"2002"
;
/**
* 2003 Registered part but not on the rack 缺料
* 有PN,但是当前无库存
*/
public
static
final
String
CODE_2003
=
"2003"
;
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/handler/bean/TMSPart.java
查看文件 @
db2e662
...
...
@@ -25,11 +25,12 @@ public class TMSPart extends TMSPos implements Serializable {
private
String
resultCode
=
""
;
//生产日期
public
String
ProductionDate
=
""
;
//过期日期
public
String
ExpiryDate
=
""
;
//登录韩华系统的日期。 TODO 需要保存下来
public
String
WarehousingDate
=
""
;
public
static
TMSPart
newBean
(
int
index
,
String
pn
,
String
barcode
,
int
requestCount
,
int
responseCount
,
String
resultCode
,
String
cid
,
String
posName
)
{
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论