Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit e8f5305b
由
zshaohui
编写于
2025-01-03 15:11:17 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.移库问题修改
2.获取不到料串目的地修改
1 个父辈
a8bc1204
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
150 行增加
和
127 行删除
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/StackerController.java
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
查看文件 @
e8f5305
...
...
@@ -837,7 +837,7 @@ public class DeviceController {
// 2024-05-18 16:55:46.593 INFO [DeviceController.java:862] - 查找到锁定的外侧库位为目标库位:20768B_02_B01_008
String
checkOutPosName
=
paramMap
.
get
(
"checkOutPosName"
);
String
needMovePosName
=
paramMap
.
get
(
"needMovePosName"
);
log
.
info
(
"出库的库位为:"
+
checkOutPosName
+
",需要移动的库位为:"
+
needMovePosName
);
log
.
info
(
"出库的库位为:"
+
checkOutPosName
+
",需要移动的库位为:"
+
needMovePosName
);
StoragePos
checkOutPos
=
storagePosManager
.
getByPosName
(
checkOutPosName
);
if
(
checkOutPos
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueNotExist"
,
"{0}[{1}]不存在"
,
new
String
[]{
"posName"
,
checkOutPosName
});
...
...
@@ -850,7 +850,7 @@ public class DeviceController {
//如果barcode不为空,则提前锁定目标库位
boolean
hasReel
=
true
;
Barcode
barcode
=
needMovePos
.
getBarcode
();
String
posName
=
""
;
String
posName
=
""
;
if
(
barcode
!=
null
)
{
// Storage storage = dataCache.getStorageById(checkOutPos.getStorageId());
// ReelLockPosInfo reelLocInfo = new ReelLockPosInfo();
...
...
@@ -862,139 +862,160 @@ public class DeviceController {
// log.info("提前锁定库位:" + checkOutPos.getPosName() + ",barcode为:" + barcode.getBarcode());
//有料,先查找锁定的lockS库位,有的话返回
ReelLockPosInfo
lockPosInfo
=
ReelLockPosUtil
.
getLockPosInfoByCode
(
getLockPosSKey
(
needMovePos
.
getStorageId
()));
if
(
lockPosInfo
!=
null
&&
ObjectUtil
.
isNotEmpty
(
lockPosInfo
.
getLockPosName
())){
posName
=
lockPosInfo
.
getLockPosName
();
log
.
info
(
"查找到锁定的内侧库位为目标库位:"
+
posName
+
" "
);
}
else
{
lockPosInfo
=
ReelLockPosUtil
.
getLockPosInfoByCode
(
getLockPosKey
(
needMovePos
.
getStorageId
()));
if
(
lockPosInfo
!=
null
&&
ObjectUtil
.
isNotEmpty
(
lockPosInfo
.
getLockPosName
())){
posName
=
lockPosInfo
.
getLockPosName
();
log
.
info
(
"查找到锁定的外侧库位为目标库位:"
+
posName
+
" "
);
}
else
{
//查找一个库位号
StoragePos
pos
=
null
;
int
loopCount
=
0
;
List
<
Storage
>
storageList
=
new
ArrayList
<>();
Storage
storage
=
dataCache
.
getStorageById
(
needMovePos
.
getStorageId
());
storageList
.
add
(
storage
);
List
<
String
>
cidList
=
new
ArrayList
<>();
cidList
.
add
(
storage
.
getCid
());
while
(
pos
==
null
){
loopCount
++;
if
(
loopCount
>=
10
){
log
.
info
(
barcode
.
getBarcode
()+
"已循环查找10次 直接跳出循环"
);
}
//优先找B结束的,如果没有再找F的
String
endStr
=
"B"
;
pos
=
taskService
.
findEmptyPosForMoveIn
(
storageList
,
barcode
,
""
,
""
,
needMovePosName
,
endStr
);
if
(
pos
==
null
){
endStr
=
"F"
;
pos
=
taskService
.
findEmptyPosForMoveIn
(
storageList
,
barcode
,
""
,
""
,
needMovePosName
,
endStr
);
break
;
}
if
(
pos
==
null
){
break
;
}
//如果是以S结尾的,则判断不带S的有没有料
posName
=
pos
.
getPosName
();
String
wPosName
=
""
;
if
(
posName
.
endsWith
(
"B"
)
||
posName
.
endsWith
(
"b"
)){
log
.
info
(
posName
+
"以B结尾,需要判断外层有没有物料"
);
wPosName
=
posName
.
substring
(
0
,
posName
.
length
()-
1
);
wPosName
=
wPosName
+
"F"
;
StoragePos
storagePos
=
storagePosManager
.
getByPosName
(
wPosName
);
if
(
storagePos
!=
null
){
if
(
storagePos
.
getBarcode
()
!=
null
){
log
.
info
(
"查找到目标库位:"
+
pos
.
getPosName
()+
" 的外侧库位"
+
wPosName
+
"有物料信息,重新查找库位 "
);
ReelLockPosInfo
reelLocInfo
=
new
ReelLockPosInfo
();
reelLocInfo
.
setBarcode
(
pos
.
getId
());
reelLocInfo
.
setCid
(
dataCache
.
getStorageById
(
pos
.
getStorageId
()).
getCid
());
reelLocInfo
.
setLockPosName
(
pos
.
getPosName
());
reelLocInfo
.
setLockPosId
(
pos
.
getId
());
ReelLockPosUtil
.
addReelLockPosInfo
(
reelLocInfo
,
cidList
);
pos
=
null
;
posName
=
""
;
}
else
{
log
.
info
(
"查找到目标库位:"
+
pos
.
getPosName
()+
" 且外侧库位"
+
wPosName
+
"无料,锁定两个库位 :"
+
pos
.
getPosName
()
+
"="
+
getLockPosSKey
(
needMovePos
.
getStorageId
())
+
",wPosName="
+
getLockPosKey
(
needMovePos
.
getStorageId
()));
//是内侧库位,且外侧库位也无料,锁定两个库位
AddLock
(
pos
,
getLockPosSKey
(
needMovePos
.
getStorageId
()),
cidList
);
AddLock
(
storagePos
,
getLockPosKey
(
needMovePos
.
getStorageId
()),
cidList
);
//如果外侧有任务,则改成新库位一样的
DataLog
dataLog
=
null
;
for
(
DataLog
queueTask
:
taskService
.
getQueueTasks
())
{
if
(
barcode
.
getBarcode
().
equals
(
queueTask
)){
dataLog
=
queueTask
;
break
;
}
}
if
(
dataLog
!=
null
){
log
.
info
(
"posName:[{}],barcode为[{}]有任务,需要重新设置任务库位:[{}]"
,
dataLog
.
getPosName
(),
barcode
.
getBarcode
(),
pos
.
getPosName
());
dataLog
.
setPosName
(
pos
.
getPosName
());
dataLog
.
setPosId
(
pos
.
getId
());
if
(
dataLog
.
isExecuting
()
||
dataLog
.
isWait
()){
dataLog
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
taskService
.
updateQueueTask
(
dataLog
);
}
else
{
taskService
.
updateFinishedTask
(
dataLog
);
}
}
}
}
}
else
{
//是外侧库位,直接锁定外侧库位
log
.
info
(
"查找到外侧库位作为目标库位,锁定库位 :"
+
pos
.
getPosName
()
+
"="
+
getLockPosKey
(
needMovePos
.
getStorageId
()));
AddLock
(
pos
,
getLockPosKey
(
needMovePos
.
getStorageId
()),
cidList
);
//如果外侧有任务,则改成新库位一样的
DataLog
dataLog
=
null
;
for
(
DataLog
queueTask
:
taskService
.
getQueueTasks
())
{
if
(
barcode
.
getBarcode
().
equals
(
queueTask
)){
dataLog
=
queueTask
;
break
;
}
}
if
(
dataLog
!=
null
){
log
.
info
(
"posName:[{}],barcode为[{}]有任务,需要重新设置任务库位:[{}]"
,
dataLog
.
getPosName
(),
barcode
.
getBarcode
(),
pos
.
getPosName
());
dataLog
.
setPosName
(
pos
.
getPosName
());
dataLog
.
setPosId
(
pos
.
getId
());
if
(
dataLog
.
isExecuting
()
||
dataLog
.
isWait
()){
dataLog
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
taskService
.
updateQueueTask
(
dataLog
);
}
else
{
taskService
.
updateFinishedTask
(
dataLog
);
}
}
}
}
}
}
ReelLockPosInfo
lockPosInfo
=
ReelLockPosUtil
.
getLockPosInfoByCode
(
getLockPosSKey
(
needMovePos
.
getStorageId
()));
if
(
lockPosInfo
!=
null
&&
ObjectUtil
.
isNotEmpty
(
lockPosInfo
.
getLockPosName
()))
{
posName
=
lockPosInfo
.
getLockPosName
();
log
.
info
(
"查找到锁定的内侧库位为目标库位:"
+
posName
+
" "
);
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
pos
!=
null
)
{
if
(
pos
.
getW
()
!=
needMovePos
.
getW
()
&&
pos
.
getH
()
!=
needMovePos
.
getH
())
{
log
.
info
(
posName
+
"对应的w{},h{}与移动的宽{},高{}不一致,重新找"
,
pos
.
getW
(),
pos
.
getH
(),
needMovePos
.
getW
(),
needMovePos
.
getH
());
posName
=
""
;
}
}
else
{
posName
=
""
;
}
}
if
(
StringUtils
.
isEmpty
(
posName
))
{
lockPosInfo
=
ReelLockPosUtil
.
getLockPosInfoByCode
(
getLockPosKey
(
needMovePos
.
getStorageId
()));
if
(
lockPosInfo
!=
null
&&
ObjectUtil
.
isNotEmpty
(
lockPosInfo
.
getLockPosName
()))
{
posName
=
lockPosInfo
.
getLockPosName
();
log
.
info
(
"查找到锁定的外侧库位为目标库位:"
+
posName
+
" "
);
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
pos
!=
null
)
{
if
(
pos
.
getW
()
!=
needMovePos
.
getW
()
&&
pos
.
getH
()
!=
needMovePos
.
getH
())
{
log
.
info
(
posName
+
"对应的w{},h{}与移动的宽{},高{}不一致,重新找"
,
pos
.
getW
(),
pos
.
getH
(),
needMovePos
.
getW
(),
needMovePos
.
getH
());
posName
=
""
;
}
}
else
{
posName
=
""
;
}
}
}
if
(
StringUtils
.
isEmpty
(
posName
))
{
//查找一个库位号
StoragePos
pos
=
null
;
int
loopCount
=
0
;
List
<
Storage
>
storageList
=
new
ArrayList
<>();
Storage
storage
=
dataCache
.
getStorageById
(
needMovePos
.
getStorageId
());
storageList
.
add
(
storage
);
List
<
String
>
cidList
=
new
ArrayList
<>();
cidList
.
add
(
storage
.
getCid
());
while
(
pos
==
null
)
{
loopCount
++;
if
(
loopCount
>=
10
)
{
log
.
info
(
barcode
.
getBarcode
()
+
"已循环查找10次 直接跳出循环"
);
}
//优先找B结束的,如果没有再找F的
String
endStr
=
"B"
;
pos
=
taskService
.
findEmptyPosForMoveIn
(
storageList
,
barcode
,
""
,
""
,
needMovePosName
,
endStr
);
if
(
pos
==
null
)
{
endStr
=
"F"
;
pos
=
taskService
.
findEmptyPosForMoveIn
(
storageList
,
barcode
,
""
,
""
,
needMovePosName
,
endStr
);
break
;
}
if
(
pos
==
null
)
{
break
;
}
//如果是以S结尾的,则判断不带S的有没有料
posName
=
pos
.
getPosName
();
String
wPosName
=
""
;
if
(
posName
.
endsWith
(
"B"
)
||
posName
.
endsWith
(
"b"
))
{
log
.
info
(
posName
+
"以B结尾,需要判断外层有没有物料"
);
wPosName
=
posName
.
substring
(
0
,
posName
.
length
()
-
1
);
wPosName
=
wPosName
+
"F"
;
StoragePos
storagePos
=
storagePosManager
.
getByPosName
(
wPosName
);
if
(
storagePos
!=
null
)
{
if
(
storagePos
.
getBarcode
()
!=
null
)
{
log
.
info
(
"查找到目标库位:"
+
pos
.
getPosName
()
+
" 的外侧库位"
+
wPosName
+
"有物料信息,重新查找库位 "
);
ReelLockPosInfo
reelLocInfo
=
new
ReelLockPosInfo
();
reelLocInfo
.
setBarcode
(
pos
.
getId
());
reelLocInfo
.
setCid
(
dataCache
.
getStorageById
(
pos
.
getStorageId
()).
getCid
());
reelLocInfo
.
setLockPosName
(
pos
.
getPosName
());
reelLocInfo
.
setLockPosId
(
pos
.
getId
());
ReelLockPosUtil
.
addReelLockPosInfo
(
reelLocInfo
,
cidList
);
pos
=
null
;
posName
=
""
;
}
else
{
log
.
info
(
"查找到目标库位:"
+
pos
.
getPosName
()
+
" 且外侧库位"
+
wPosName
+
"无料,锁定两个库位 :"
+
pos
.
getPosName
()
+
"="
+
getLockPosSKey
(
needMovePos
.
getStorageId
())
+
",wPosName="
+
getLockPosKey
(
needMovePos
.
getStorageId
()));
//是内侧库位,且外侧库位也无料,锁定两个库位
AddLock
(
pos
,
getLockPosSKey
(
needMovePos
.
getStorageId
()),
cidList
);
AddLock
(
storagePos
,
getLockPosKey
(
needMovePos
.
getStorageId
()),
cidList
);
//如果外侧有任务,则改成新库位一样的
DataLog
dataLog
=
null
;
for
(
DataLog
queueTask
:
taskService
.
getQueueTasks
())
{
if
(
barcode
.
getBarcode
().
equals
(
queueTask
))
{
dataLog
=
queueTask
;
break
;
}
}
if
(
dataLog
!=
null
)
{
log
.
info
(
"posName:[{}],barcode为[{}]有任务,需要重新设置任务库位:[{}]"
,
dataLog
.
getPosName
(),
barcode
.
getBarcode
(),
pos
.
getPosName
());
dataLog
.
setPosName
(
pos
.
getPosName
());
dataLog
.
setPosId
(
pos
.
getId
());
if
(
dataLog
.
isExecuting
()
||
dataLog
.
isWait
())
{
dataLog
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
taskService
.
updateQueueTask
(
dataLog
);
}
else
{
taskService
.
updateFinishedTask
(
dataLog
);
}
}
}
}
}
else
{
//是外侧库位,直接锁定外侧库位
log
.
info
(
"查找到外侧库位作为目标库位,锁定库位 :"
+
pos
.
getPosName
()
+
"="
+
getLockPosKey
(
needMovePos
.
getStorageId
()));
AddLock
(
pos
,
getLockPosKey
(
needMovePos
.
getStorageId
()),
cidList
);
//如果外侧有任务,则改成新库位一样的
DataLog
dataLog
=
null
;
for
(
DataLog
queueTask
:
taskService
.
getQueueTasks
())
{
if
(
barcode
.
getBarcode
().
equals
(
queueTask
))
{
dataLog
=
queueTask
;
break
;
}
}
if
(
dataLog
!=
null
)
{
log
.
info
(
"posName:[{}],barcode为[{}]有任务,需要重新设置任务库位:[{}]"
,
dataLog
.
getPosName
(),
barcode
.
getBarcode
(),
pos
.
getPosName
());
dataLog
.
setPosName
(
pos
.
getPosName
());
dataLog
.
setPosId
(
pos
.
getId
());
if
(
dataLog
.
isExecuting
()
||
dataLog
.
isWait
())
{
dataLog
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
taskService
.
updateQueueTask
(
dataLog
);
}
else
{
taskService
.
updateFinishedTask
(
dataLog
);
}
}
}
}
}
//然后找lock库位,有的话返回
//没库位查找一个库位,如果是里面的,判断外面需要没料
//如果是外面的锁定为Lock
}
else
{
hasReel
=
false
;
else
{
hasReel
=
false
;
}
}
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"hasReel"
,
hasReel
);
if
(
hasReel
){
if
(
hasReel
)
{
resultMap
.
put
(
"barcode"
,
barcode
.
getBarcode
());
resultMap
.
put
(
"partNumber"
,
barcode
.
getPartNumber
());
resultMap
.
put
(
"partNumber"
,
barcode
.
getPartNumber
());
if
(
ObjectUtil
.
isEmpty
(
posName
))
{
if
(
ObjectUtil
.
isEmpty
(
posName
))
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.shelf.msg.inError"
,
"未找到适合[{0}]的库位"
,
new
String
[]{
"posName"
,
needMovePosName
});
}
else
{
}
else
{
resultMap
.
put
(
"posName"
,
posName
);
}
}
return
ResultBean
.
newOkResult
(
resultMap
);
}
...
...
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/StackerController.java
查看文件 @
e8f5305
...
...
@@ -121,8 +121,9 @@ public class StackerController {
List
<
Storage
>
noMsdStorageList
=
new
ArrayList
<>();
for
(
Storage
storage
:
dataCache
.
getAllStorage
().
values
())
{
if
(
StringUtils
.
isNotEmpty
(
storageCid
)){
if
(
storageCid
.
equals
(
storage
.
getCid
()));
continue
;
if
(
storageCid
.
equals
(
storage
.
getCid
()))
{
continue
;
}
}
if
(!
msdCidList
.
contains
(
storage
.
getCid
()))
{
noMsdStorageList
.
add
(
storage
);
...
...
@@ -136,8 +137,9 @@ public class StackerController {
List
<
Storage
>
msdStorageList
=
new
ArrayList
<>();
for
(
Storage
storage
:
dataCache
.
getAllStorage
().
values
())
{
if
(
StringUtils
.
isNotEmpty
(
storageCid
)){
if
(
storageCid
.
equals
(
storage
.
getCid
()));
continue
;
if
(
storageCid
.
equals
(
storage
.
getCid
()))
{
continue
;
}
}
if
(
msdCidList
.
contains
(
storage
.
getCid
()))
{
msdStorageList
.
add
(
storage
);
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论