Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit c5e87e4d
由
LN
编写于
2024-05-15 17:14:47 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
科博达移库逻辑修改
1 个父辈
2bbb59bd
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
257 行增加
和
12 行删除
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSCommunicator.java
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
查看文件 @
c5e87e4
...
...
@@ -50,6 +50,7 @@ import org.springframework.web.bind.annotation.*;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.*
;
import
java.util.List
;
@Slf4j
...
...
@@ -702,6 +703,121 @@ public class DeviceController {
}
// @ApiOperation("获取需要移动的库位是否有料")
// @RequestMapping("/service/store/needMovePosHasReel")
// @ResponseBody
// @AnonymousAccess
// public ResultBean needMovePosHasReel(@RequestBody Map<String, String> paramMap) {
// String checkOutPosName = paramMap.get("checkOutPosName");
// String needMovePosName = paramMap.get("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});
// }
// StoragePos needMovePos = storagePosManager.getByPosName(needMovePosName);
// if (needMovePos == null) {
// return ResultBean.newErrorResult(-1, "smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{"posName", needMovePosName});
// }
//
// //如果barcode不为空,则提前锁定目标库位
// boolean hasReel = true;
// Barcode barcode = needMovePos.getBarcode();
// if (barcode != null) {
// Storage storage = dataCache.getStorageById(checkOutPos.getStorageId());
// ReelLockPosInfo reelLocInfo = new ReelLockPosInfo();
// reelLocInfo.setBarcode(barcode.getBarcode());
// reelLocInfo.setCid(storage.getCid());
// reelLocInfo.setLockPosName(checkOutPos.getPosName());
// reelLocInfo.setLockPosId(checkOutPos.getId());
// ReelLockPosUtil.addReelLockPosInfo(reelLocInfo, Arrays.asList(storage.getCid()));
// log.info("提前锁定库位:" + checkOutPos.getPosName() + ",barcode为:" + barcode.getBarcode());
// } else {
// hasReel = false;
// }
//
// Map<String, Object> resultMap = new HashMap<>();
// resultMap.put("hasReel", hasReel);
// if (hasReel){
// resultMap.put("barcode", barcode.getBarcode());
// resultMap.put("partNumber",barcode.getPartNumber());
// }
// return ResultBean.newOkResult(resultMap);
// }
//
//
// @ApiOperation("移动物料到另外一个库位")
// @RequestMapping("/service/store/moveToOtherPos")
// @ResponseBody
// @AnonymousAccess
// public ResultBean moveToOtherPos(@RequestBody Map<String, String> paramMap) {
// String needMovePosName = paramMap.get("needMovePosName"); //需要移动的库位
// String targetPosName = paramMap.get("targetPosName"); //目标库位
// log.info("需要移动的库位为:" + needMovePosName + ",目标库位为:" + targetPosName);
//
// //判断有没有物料
// StoragePos needMovePos = storagePosManager.getByPosName(needMovePosName);
// Barcode barcode = needMovePos.getBarcode();
// if (barcode == null) {
// return ResultBean.newErrorResult(-1, "smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{needMovePosName, "barcode"});
// }
//
// //判断目标库位是否存在
// StoragePos targetPos = storagePosManager.getByPosName(targetPosName);
// if (targetPos == null) {
// return ResultBean.newErrorResult(-1, "smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{"posName", targetPosName});
// }
//
// //把外侧相同的任务给改成内侧的
// List<DataLog> allTasks = taskService.getAllTasks();
// for (DataLog dataLog : allTasks) {
// if (dataLog.isCheckOutTask()) {
// if (!dataLog.isFinished() && !dataLog.isCancel()) {
// if (dataLog.getPosId().equals(needMovePos.getId())) {
// dataLog.setPosId(targetPos.getId());
// dataLog.setPosName(targetPos.getPosName());
// taskService.updateQueueTask(dataLog);
// log.info(dataLog.getBarcode()+":外测有任务,原始库位为:"+dataLog.getPosName()+"更改后的库位为:"+targetPos.getPosName());
// break;
// }
// }
// }
// }
//
// //生成一条出库任务
// Storage storage = dataCache.getStorageById(needMovePos.getStorageId());
// DataLog needMovePosTask = new DataLog(storage, barcode, needMovePos);
// needMovePosTask.setOperator("admin-move");
// needMovePosTask.setType(OP.CHECKOUT);
// needMovePosTask.setStatus(OP_STATUS.FINISHED.name());
// taskService.updateFinishedTask(needMovePosTask);
// needMovePos.setBarcode(null);
// needMovePos.setUsed(false);
// storagePosManager.save(needMovePos);
// log.info(barcode.getBarcode() + "转移库位,清空仓位: " + needMovePos.getId() + "[" + needMovePos.getPosName() + "]");
// dataCache.updateInventory(needMovePos, barcode);
//
//
//
// //生成一条入库任务
// DataLog targetPosTask = new DataLog(storage, barcode, targetPos);
// targetPosTask.setOperator("admin-move");
// targetPosTask.setType(OP.PUT_IN);
// targetPosTask.setStatus(OP_STATUS.FINISHED.name());
// taskService.updateFinishedTask(targetPosTask);
// targetPos.setBarcode(barcode);
// targetPos.setUsed(true);
// targetPos.setCanCheckOutTime(System.currentTimeMillis());
// storagePosManager.save(targetPos);
// log.info(barcode.getBarcode() + "转移库位,入库库位: " + needMovePos.getId() + "[" + needMovePos.getPosName() + "]");
// dataCache.updateInventory(targetPos, barcode);
//
// //解除库位绑定
// ReelLockPosUtil.removeReelLockPosInfo(barcode.getBarcode());
//
// return ResultBean.newOkResult("");
// }
@ApiOperation
(
"获取需要移动的库位是否有料"
)
@RequestMapping
(
"/service/store/needMovePosHasReel"
)
@ResponseBody
...
...
@@ -722,15 +838,86 @@ public class DeviceController {
//如果barcode不为空,则提前锁定目标库位
boolean
hasReel
=
true
;
Barcode
barcode
=
needMovePos
.
getBarcode
();
String
posName
=
""
;
if
(
barcode
!=
null
)
{
Storage
storage
=
dataCache
.
getStorageById
(
checkOutPos
.
getStorageId
());
// Storage storage = dataCache.getStorageById(checkOutPos.getStorageId());
// ReelLockPosInfo reelLocInfo = new ReelLockPosInfo();
// reelLocInfo.setBarcode(barcode.getBarcode());
// reelLocInfo.setCid(storage.getCid());
// reelLocInfo.setLockPosName(checkOutPos.getPosName());
// reelLocInfo.setLockPosId(checkOutPos.getId());
// ReelLockPosUtil.addReelLockPosInfo(reelLocInfo, Arrays.asList(storage.getCid()));
// log.info("提前锁定库位:" + checkOutPos.getPosName() + ",barcode为:" + barcode.getBarcode());
//有料,先查找锁定的lockS库位,有的话返回
ReelLockPosInfo
lockPosInfo
=
ReelLockPosUtil
.
getLockPosInfoByCode
(
Constants
.
XLR_lockPosS
);
if
(
lockPosInfo
!=
null
&&
ObjectUtil
.
isNotEmpty
(
lockPosInfo
.
getLockPosName
())){
posName
=
lockPosInfo
.
getLockPosName
();
log
.
info
(
"查找到锁定的内侧库位为目标库位:"
+
posName
+
" "
);
}
else
{
lockPosInfo
=
ReelLockPosUtil
.
getLockPosInfoByCode
(
Constants
.
XLR_lockPos
);
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次 直接跳出循环"
);
}
pos
=
taskService
.
findEmptyPosForPutIn
(
storageList
,
barcode
,
""
,
""
);
if
(
pos
==
null
){
break
;
}
//如果是以S结尾的,则判断不带S的有没有料
posName
=
pos
.
getPosName
();
String
wPosName
=
""
;
if
(
posName
.
endsWith
(
"S"
)
||
posName
.
endsWith
(
"s"
)){
log
.
info
(
posName
+
"以S结尾,需要判断外层有没有物料"
);
wPosName
=
posName
.
substring
(
0
,
posName
.
length
()-
1
);
StoragePos
storagePos
=
storagePosManager
.
getByPosName
(
wPosName
);
if
(
storagePos
!=
null
){
if
(
storagePos
.
getBarcode
()
!=
null
){
log
.
info
(
"查找到目标库位:"
+
pos
.
getPosName
()+
" 的外侧库位"
+
wPosName
+
"有物料信息,重新查找库位 "
);
ReelLockPosInfo
reelLocInfo
=
new
ReelLockPosInfo
();
reelLocInfo
.
setBarcode
(
barcode
.
getBarcode
());
reelLocInfo
.
setCid
(
storage
.
getCid
());
reelLocInfo
.
setLockPosName
(
checkOutPos
.
getPosName
());
reelLocInfo
.
setLockPosId
(
checkOutPos
.
getId
());
ReelLockPosUtil
.
addReelLockPosInfo
(
reelLocInfo
,
Arrays
.
asList
(
storage
.
getCid
()));
log
.
info
(
"提前锁定库位:"
+
checkOutPos
.
getPosName
()
+
",barcode为:"
+
barcode
.
getBarcode
());
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
()
+
"="
+
Constants
.
XLR_lockPosS
+
",wPosName="
+
Constants
.
XLR_lockPos
);
//是内侧库位,且外侧库位也无料,锁定两个库位
AddLock
(
pos
,
Constants
.
XLR_lockPosS
,
cidList
);
AddLock
(
storagePos
,
Constants
.
XLR_lockPos
,
cidList
);
}
}
}
else
{
//是外侧库位,直接锁定外侧库位
log
.
info
(
"查找到外侧库位作为目标库位,锁定库位 :"
+
pos
.
getPosName
()
+
"="
+
Constants
.
XLR_lockPos
);
AddLock
(
pos
,
Constants
.
XLR_lockPos
,
cidList
);
}
}
}
}
//然后找lock库位,有的话返回
//没库位查找一个库位,如果是里面的,判断外面需要没料
//如果是外面的锁定为Lock
}
else
{
hasReel
=
false
;
}
...
...
@@ -740,10 +927,24 @@ public class DeviceController {
if
(
hasReel
){
resultMap
.
put
(
"barcode"
,
barcode
.
getBarcode
());
resultMap
.
put
(
"partNumber"
,
barcode
.
getPartNumber
());
if
(
ObjectUtil
.
isEmpty
(
posName
)){
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.shelf.msg.inError"
,
"未找到适合[{0}]的库位"
,
new
String
[]{
"posName"
,
needMovePosName
});
}
else
{
resultMap
.
put
(
"posName"
,
posName
);
}
}
return
ResultBean
.
newOkResult
(
resultMap
);
}
private
void
AddLock
(
StoragePos
pos
,
String
key
,
List
<
String
>
cidList
)
{
ReelLockPosInfo
lockS
=
new
ReelLockPosInfo
();
lockS
.
setBarcode
(
key
);
lockS
.
setCid
(
dataCache
.
getStorageById
(
pos
.
getStorageId
()).
getCid
());
lockS
.
setLockPosName
(
pos
.
getPosName
());
lockS
.
setLockPosId
(
pos
.
getId
());
ReelLockPosUtil
.
addReelLockPosInfo
(
lockS
,
cidList
);
}
@ApiOperation
(
"移动物料到另外一个库位"
)
@RequestMapping
(
"/service/store/moveToOtherPos"
)
...
...
@@ -776,7 +977,7 @@ public class DeviceController {
dataLog
.
setPosId
(
targetPos
.
getId
());
dataLog
.
setPosName
(
targetPos
.
getPosName
());
taskService
.
updateQueueTask
(
dataLog
);
log
.
info
(
dataLog
.
getBarcode
()
+
":外测有任务,原始库位为:"
+
dataLog
.
getPosName
()+
"更改后的库位为:"
+
targetPos
.
getPosName
());
log
.
info
(
dataLog
.
getBarcode
()
+
":外测有任务,原始库位为:"
+
dataLog
.
getPosName
()
+
"更改后的库位为:"
+
targetPos
.
getPosName
());
break
;
}
}
...
...
@@ -797,7 +998,6 @@ public class DeviceController {
dataCache
.
updateInventory
(
needMovePos
,
barcode
);
//生成一条入库任务
DataLog
targetPosTask
=
new
DataLog
(
storage
,
barcode
,
targetPos
);
targetPosTask
.
setOperator
(
"admin-move"
);
...
...
@@ -814,6 +1014,44 @@ public class DeviceController {
//解除库位绑定
ReelLockPosUtil
.
removeReelLockPosInfo
(
barcode
.
getBarcode
());
ReelLockPosInfo
lockS
=
ReelLockPosUtil
.
getLockPosInfoByCode
(
Constants
.
XLR_lockPosS
);
if
(
lockS
!=
null
&&
ObjectUtil
.
isNotEmpty
(
lockS
.
getLockPosName
())
&&
lockS
.
getLockPosName
().
equals
(
targetPosName
))
{
ReelLockPosUtil
.
removeReelLockPosInfo
(
Constants
.
XLR_lockPosS
);
}
else
{
ReelLockPosInfo
lock
=
ReelLockPosUtil
.
getLockPosInfoByCode
(
Constants
.
XLR_lockPos
);
if
(
lock
!=
null
&&
ObjectUtil
.
isNotEmpty
(
lock
.
getLockPosName
())
&&
lock
.
getLockPosName
().
equals
(
targetPosName
))
{
ReelLockPosUtil
.
removeReelLockPosInfo
(
Constants
.
XLR_lockPos
);
lock
=
null
;
}
if
(
lock
==
null
)
{
if
(
needMovePosName
.
endsWith
(
"S"
)
||
needMovePosName
.
endsWith
(
"s"
))
{
log
.
info
(
"需要移动的库位为:"
+
needMovePosName
+
"是内侧库位,不需要锁定库位"
);
}
else
{
String
sPosname
=
needMovePosName
+
"S"
;
StoragePos
sPos
=
storagePosManager
.
getByPosName
(
sPosname
);
if
(
sPos
!=
null
)
{
String
cid
=
dataCache
.
getStorageById
(
sPos
.
getStorageId
()).
getCid
();
List
<
String
>
cidList
=
new
ArrayList
<>();
cidList
.
add
(
cid
);
//如果两个库位锁定都为空了,将当前库位锁定为缓存库位
log
.
info
(
"重新锁定两个缓存库位 :"
+
sPos
.
getPosName
()
+
"="
+
Constants
.
XLR_lockPosS
+
","
+
needMovePos
.
getPosName
()+
"="
+
Constants
.
XLR_lockPos
);
//是内侧库位,且外侧库位也无料,锁定两个库位
AddLock
(
sPos
,
Constants
.
XLR_lockPosS
,
cidList
);
AddLock
(
needMovePos
,
Constants
.
XLR_lockPos
,
cidList
);
}
}
}
}
return
ResultBean
.
newOkResult
(
""
);
}
...
...
src/main/java/com/neotel/smfcore/custom/hanwha/handler/TMSCommunicator.java
查看文件 @
c5e87e4
...
...
@@ -222,11 +222,13 @@ public class TMSCommunicator implements WsMsgReceivedListener {
Thread
thread
=
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
//
在这里编写您要执行的方法逻辑
//
同步数据
List
<
String
>
cids
=
new
ArrayList
<>(
dataCache
.
getAllStorage
().
keySet
());
SyncStorageConnectionInfo
(
cids
.
toArray
(
new
String
[
cids
.
size
()]),
new
Integer
[]{});
List
<
Map
<
String
,
StoragePos
>>
allUsedPoss
=
dataCache
.
getAllUsedPosMap
();
SyncReelData
(
allUsedPoss
);
// List<TMSPart> result= tmsApis.RequestGetPartInfo(0,"20180126153040-001");
}
});
...
...
@@ -296,6 +298,7 @@ public class TMSCommunicator implements WsMsgReceivedListener {
return
;
}
log
.
info
(
"WebSocket 已连接,开始同步物料信息"
);
List
<
TMSPartReelPos
>
list
=
new
ArrayList
<>();
for
(
Map
<
String
,
StoragePos
>
map
:
allUsedPosList
)
{
...
...
@@ -304,7 +307,6 @@ public class TMSCommunicator implements WsMsgReceivedListener {
if
(
pos
.
getBarcode
()
==
null
)
{
continue
;
}
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
if
(
storage
==
null
){
log
.
error
(
"posName["
+
pos
.
getPosName
()+
"],storageId["
+
pos
.
getStorageId
()+
"]未找到料仓"
);
...
...
@@ -315,6 +317,9 @@ public class TMSCommunicator implements WsMsgReceivedListener {
storage
.
getCid
(),
pos
.
getPosName
(),
4
,
barcode
.
getPutInDate
().
getTime
(),
-
1
);
list
.
add
(
bean
);
if
(
list
.
size
()>=
10
){
break
;
}
}
}
...
...
@@ -422,6 +427,8 @@ public class TMSCommunicator implements WsMsgReceivedListener {
TMSDockingCartInfo
dockingCartInfo
=
getMapValue
(
msgMap
,
"DockingCartInfo"
);
RequestPrintLabelDockingCart
(
requestID
,
dockingCartInfo
);
break
;
case
"NotifyLog"
:
break
;
default
:
log
.
error
(
"onMsgReceived:未找到对应的TOPIC: Topic=["
+
topic
+
"],requestID=["
+
requestID
+
"],message:["
+
message
+
"]"
);
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论