Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 9f21ba77
由
LN
编写于
2024-12-09 15:07:47 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
增加DeliveryReserve处理,预留成功默认返回2010
1 个父辈
132da977
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
141 行增加
和
3 行删除
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 {
}
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
)
{
List
<
String
>
availableStorageIds
=
new
ArrayList
<>();
for
(
Storage
storage
:
getAllStorage
().
values
())
{
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
9f21ba7
...
...
@@ -430,10 +430,13 @@ public class LiteOrderCache {
public
synchronized
String
checkOutLiteOrder
(
String
orderNo
,
boolean
outBom
,
boolean
singleOut
)
{
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
);
if
(
cacheOrder
==
null
)
{
...
...
@@ -484,7 +487,8 @@ public class LiteOrderCache {
return
"smfcore.order.out.noTask"
;
}
List
<
String
>
availableStorageIds
=
dataCache
.
getAvailableStorageIds
();
List
<
String
>
availableStorageIds
=
dataCache
.
getAvailableStorageIds
(
cidList
);
//其他出库模式一次性全部生成任务
for
(
LiteOrderItem
orderItem
:
cacheOrder
.
getOrderItems
())
{
orderItem
.
setOutNum
(
0
);
...
...
@@ -829,4 +833,122 @@ public class LiteOrderCache {
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 {
private
IStoragePosManager
storagePosManager
;
@Autowired
private
TMSCommunicator
tmsCommunicator
;
@Autowired
private
TMSUtil
tmsUtil
;
@Autowired
private
IComponentManager
componentManager
;
...
...
@@ -228,7 +230,7 @@ public class HanwhaApiHandler extends BaseSmfApiListener {
log
.
info
(
"工单取消处理中,此处不通知TMS"
);
}
else
{
log
.
info
(
"工单关闭,通知TMS"
);
TMSReserve
tmsReserve
=
tms
Communicator
.
GetOrderInfo
(
liteOrder
);
TMSReserve
tmsReserve
=
tms
Util
.
GetOrderInfo
(
liteOrder
);
List
<
TMSReserve
>
list
=
new
ArrayList
<>();
list
.
add
(
tmsReserve
);
tmsCommunicator
.
ResponseUpdateDeliveryReserveState
(
0
,
list
,
0
);
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSCommunicator.java
查看文件 @
9f21ba7
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSUtil.java
0 → 100644
查看文件 @
9f21ba7
此文件的差异被折叠,
点击展开。
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论