Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit ab1e95f6
由
LN
编写于
2022-03-03 13:05:14 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
增加getBoxDoorStatus接口
1 个父辈
ee5cac00
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
134 行增加
和
49 行删除
src/main/java/com/neotel/smfcore/core/device/handler/impl/RobotBoxHandler.java
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
src/main/resources/messages.properties
src/main/resources/messages_en_US.properties
src/main/resources/messages_ja_JP.properties
src/main/resources/messages_zh_CN.properties
src/main/resources/messages_zh_TW.properties
src/main/java/com/neotel/smfcore/core/device/handler/impl/RobotBoxHandler.java
查看文件 @
ab1e95f
...
...
@@ -73,20 +73,27 @@ public class RobotBoxHandler extends BaseDeviceHandler {
return
statusBean
;
}
@ApiOperation
(
"
机器人料仓查找空的料格
"
)
@ApiOperation
(
"
扫码后获取库位号
"
)
@PostMapping
(
value
=
"/service/store/robotBox/emptyPosForPutin"
)
@ResponseBody
@AnonymousAccess
public
Map
<
String
,
Object
>
emptyPosForPutin
(
HttpServletRequest
request
)
{
String
code
=
request
.
getParameter
(
"code"
);
String
cids
=
request
.
getParameter
(
"cids"
);
String
rfid
=
request
.
getParameter
(
"rfid"
);
String
rfidLoc
=
request
.
getParameter
(
"rfidLoc"
);
String
lastPosId
=
request
.
getParameter
(
"lastPosId"
);
String
lastPosId
=
""
;
String
lineMsg
=
""
;
log
.
info
(
"流水线["
+
cids
+
"]获取["
+
rfid
+
"]["
+
code
+
"]的入库库位"
);
log
.
info
(
"流水线["
+
cids
+
"]获取["
+
code
+
"]的入库库位"
);
Map
<
String
,
Object
>
resultMap
=
Maps
.
newHashMap
();
//返回值说明:
// =0:获取库位号成功
// result= 99:暂时不能入库,需要重新获取库位。
// result= 100:服务器需要更新,需要重新获取库位
// result=105:查找空库位失败
// result=98:物料已有出库任务,需继续执行出库动作
//
//
if
(
dataCache
.
getCache
(
Constants
.
CACHE_StopOut
))
{
lineMsg
=
"系统更新中,暂停出入库"
;
...
...
@@ -98,12 +105,16 @@ public class RobotBoxHandler extends BaseDeviceHandler {
String
okMsg
=
""
;
String
errorMsg
=
""
;
List
<
Storage
>
storageList
=
Lists
.
newArrayList
();
List
<
String
>
cidList
=
new
ArrayList
<>();
if
(
Strings
.
isNullOrEmpty
(
cids
))
{
resultMap
.
put
(
"result"
,
"101"
);
resultMap
.
put
(
"msg"
,
"未指定料仓 cids "
);
//自动获取在线的料仓列表
cidList
=
dataCache
.
getAvailableStorageIds
(
this
.
getDeviceType
());
// resultMap.put("result", "101");
// resultMap.put("msg", "未指定料仓 cids ");
}
else
{
List
<
Storage
>
storage
List
=
Lists
.
newArrayList
();
List
<
String
>
cidList
=
Lists
.
newArrayList
();
cid
List
=
Lists
.
newArrayList
();
}
for
(
String
cid
:
cids
.
split
(
","
))
{
String
notIntoCids
=
dataCache
.
getSettings
().
getNotIntoCids
();
if
(
notIntoCids
!=
null
)
{
...
...
@@ -120,7 +131,7 @@ public class RobotBoxHandler extends BaseDeviceHandler {
Collection
<
DataLog
>
tasks
=
taskService
.
getQueueTasks
();
for
(
DataLog
task
:
tasks
)
{
if
(
task
.
isCheckOutTask
()
&&
task
.
getStorageId
().
equals
(
storage
.
getId
()))
{
if
(
task
.
isExecuting
()
||
task
.
isBoxdoor
()
||
task
.
isInRobot
()
)
{
if
(
task
.
isExecuting
()
||
task
.
isBoxdoor
()
)
{
hasOutTask
=
true
;
break
;
}
...
...
@@ -182,7 +193,7 @@ public class RobotBoxHandler extends BaseDeviceHandler {
}
}
StoragePos
pos
=
taskService
.
findEmptyPosForPutIn
(
storageList
,
barcode
,
rfid
,
lastPosId
);
StoragePos
pos
=
taskService
.
findEmptyPosForPutIn
(
storageList
,
barcode
,
""
,
lastPosId
);
if
(
pos
!=
null
)
{
...
...
@@ -192,14 +203,14 @@ public class RobotBoxHandler extends BaseDeviceHandler {
resultMap
.
put
(
"msg"
,
""
);
okMsg
=
"["
+
rfid
+
"]["
+
barcode
.
getBarcode
()
+
"]锁定库位["
+
pos
.
getPosName
()
+
"]优先级["
+
pos
.
getPriority
()
+
"] 上个库位号["
+
lastPosId
+
"]"
;
okMsg
=
"["
+
barcode
.
getBarcode
()
+
"]锁定库位["
+
pos
.
getPosName
()
+
"]优先级["
+
pos
.
getPriority
()
+
"] 上个库位号["
+
lastPosId
+
"]"
;
ReelLockPosInfo
oldLockInfo
=
ReelLockPosUtil
.
getLockPosInfoByCode
(
barcode
.
getBarcode
());
if
(
oldLockInfo
!=
null
)
{
if
(!
oldLockInfo
.
getBarcode
().
equals
(
barcode
.
getBarcode
()))
{
String
result
=
"-1"
;
okMsg
=
rfid
+
"["
+
rfidLoc
+
"]
["
+
barcode
.
getBarcode
()
+
"]锁定库位["
+
pos
.
getPosName
()
+
"],清理旧有锁定信息"
;
okMsg
=
"
["
+
barcode
.
getBarcode
()
+
"]锁定库位["
+
pos
.
getPosName
()
+
"],清理旧有锁定信息"
;
resultMap
.
put
(
"result"
,
result
);
resultMap
.
put
(
"msg"
,
okMsg
);
//已经锁定过库位,但不是同一个条码,需要把对应位置的锁定信息清理掉
...
...
@@ -256,7 +267,7 @@ public class RobotBoxHandler extends BaseDeviceHandler {
resultMap
.
put
(
"msg"
,
errorMsg
);
}
}
}
//
}
//没入成功
if
(!
errorMsg
.
isEmpty
())
{
...
...
@@ -281,7 +292,7 @@ public class RobotBoxHandler extends BaseDeviceHandler {
return
resultMap
;
}
@ApiOperation
(
"机器人
料仓
更新任务状态"
)
@ApiOperation
(
"机器人更新任务状态"
)
@PostMapping
(
value
=
"/service/store/robotBox/updateLocInfo"
)
@ResponseBody
@AnonymousAccess
...
...
@@ -335,29 +346,30 @@ public class RobotBoxHandler extends BaseDeviceHandler {
}
@ApiOperation
(
"机器人定时获取
出入库
任务"
)
@ApiOperation
(
"机器人定时获取任务"
)
@PostMapping
(
value
=
"/service/store/robotBox/getRobotTask"
)
@ResponseBody
@AnonymousAccess
public
ResultBean
getRobotTask
(
HttpServletRequest
request
)
{
//TODO 先查找是否有出库任务
,在查找入库任务
//TODO 先查找是否有出库任务
Collection
<
DataLog
>
datalogs
=
taskService
.
getQueueTasks
();
//先查找已在机器人的
for
(
DataLog
task
:
datalogs
)
{
if
(
task
.
isInRobot
())
{
//获取任务失败,还有未完成的任务
return
ResultBean
.
newErrorResult
(
30
1
,
"smfcore.task.lastNotEnd"
,
"上个任务未结束{0}{1}"
,
new
String
[]{
task
.
getPosName
(),
task
.
getBarcode
()});
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.task.lastNotEnd"
,
"上个任务未结束{0}{1}"
,
new
String
[]{
task
.
getPosName
(),
task
.
getBarcode
()});
}
}
//查找出库已经到门口的
for
(
DataLog
task
:
datalogs
)
{
if
(
OP
.
CHECKOUT
==
task
.
getType
())
{
if
(
task
.
isCheckOutTask
())
{
if
(
task
.
isBoxdoor
())
{
Map
<
String
,
String
>
taskMap
=
new
HashMap
<>();
taskMap
.
put
(
"cid"
,
task
.
getCid
());
//取料位置
taskMap
.
put
(
"targetPos"
,
"out"
);
//放料位置
// taskMap.put("targetPos", "out");//放料位置
taskMap
.
put
(
"type"
,
task
.
getType
()+
""
);
//类型,1=入库,2=出库
taskMap
.
put
(
"posId"
,
task
.
getPosName
());
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
task
.
getBarcode
());
...
...
@@ -381,6 +393,37 @@ public class RobotBoxHandler extends BaseDeviceHandler {
}
@ApiOperation
(
"料仓判断仓门口是否可以放料"
)
@PostMapping
(
value
=
"/service/store/robotBox/getBoxDoorStatus"
)
@ResponseBody
@AnonymousAccess
public
ResultBean
getBoxDoorStatus
(
HttpServletRequest
request
)
{
String
cid
=
request
.
getParameter
(
"cid"
);
//判断仓门口状态,0=空闲,返回其他表示仓门口有料或机器人正在取料
Storage
storage
=
dataCache
.
getStorage
(
cid
);
if
(
storage
==
null
)
{
return
ResultBean
.
newErrorResult
(
99
,
"smfcore.robotBox.notFound"
,
"未找到机器人料仓[{0}]"
,
new
String
[]{
cid
});
}
if
(!
storage
.
isRobotBox
())
{
return
ResultBean
.
newErrorResult
(
99
,
"smfcore.robotBox.notFound"
,
"未找到机器人料仓[{0}]"
,
new
String
[]{
cid
});
}
Collection
<
DataLog
>
tasks
=
taskService
.
getQueueTasks
();
for
(
DataLog
task
:
tasks
)
{
if
(
task
.
getStorageId
().
equals
(
storage
.
getId
()))
{
if
(
task
.
isBoxdoor
())
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.robotBox.boxHasTask"
,
"任务[{0}][{1}]类型{2}状态{3}"
,
new
String
[]{
task
.
getPosName
(),
task
.
getBarcode
(),
task
.
getType
()+
""
,
task
.
getStatus
()});
}
else
if
(
task
.
isPutInTask
()&&
task
.
isInRobot
()){
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.robotBox.boxHasTask"
,
"任务[{0}][{1}]类型{2}状态{3}"
,
new
String
[]{
task
.
getPosName
(),
task
.
getBarcode
(),
task
.
getType
()+
""
,
task
.
getStatus
()});
}
}
}
return
ResultBean
.
newOkResult
(
""
);
}
@Override
public
DeviceType
getDeviceType
()
{
return
DeviceType
.
ROBOT_BOX
;
...
...
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
查看文件 @
ab1e95f
...
...
@@ -11,6 +11,7 @@ import com.neotel.smfcore.common.utils.StringUtils;
import
com.neotel.smfcore.common.utils.YmlUpdateUtil
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.inList.util.InListCache
;
import
com.neotel.smfcore.core.language.service.bean.LanguageInfo
;
import
com.neotel.smfcore.core.language.service.po.LanguageMsg
;
...
...
@@ -29,6 +30,7 @@ import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import
com.neotel.smfcore.core.system.service.po.CacheItem
;
import
com.neotel.smfcore.core.system.service.po.Settings
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.system.util.DevicesStatusUtil
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -658,7 +660,23 @@ public class DataCache {
}
return
availableStorageIds
;
}
public
List
<
String
>
getAvailableStorageIds
(
DeviceType
deviceType
){
List
<
String
>
availableStorageIds
=
new
ArrayList
<>();
for
(
Storage
storage
:
getAllStorage
().
values
())
{
if
(
storage
.
getType
().
equals
(
deviceType
.
name
()))
{
StatusBean
bean
=
DevicesStatusUtil
.
getStatusBean
(
storage
.
getCid
());
if
(
bean
==
null
||
bean
.
timeOut
())
{
continue
;
}
if
(
bean
.
getStatus
()
==
1
)
{
availableStorageIds
.
add
(
storage
.
getId
());
}
}
}
return
availableStorageIds
;
}
public
Storage
AutoCreateStorage
(
String
cid
)
{
//判断cid存在
Storage
storage
=
null
;
...
...
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
查看文件 @
ab1e95f
...
...
@@ -325,18 +325,51 @@ public class TaskService {
return
false
;
}
private
DataLog
findPutInBoxTask
(
Storage
storage
)
{
private
StatusBean
findPutInBoxTask
(
Storage
storage
,
StatusBean
statusBean
)
{
if
(
storage
.
isRobotBox
()){
DataLog
putInTask
=
null
;
//如果是机器人料仓,需要查找入库任务发给料仓
if
(
storage
.
isRobotBox
())
{
for
(
DataLog
task
:
taskMap
.
values
())
{
if
(
OP
.
PUT_IN
==
task
.
getType
()
&&
task
.
getCid
().
equals
(
storage
.
getCid
()))
{
if
(
task
.
isBoxdoor
()){
return
task
;
}
if
(
task
.
isBoxdoor
())
{
//仓门口的料需要直接发给料仓入库
putInTask
=
task
;
}
//如果有正在执行中,还未结束的入库,也不能执行出库任务
else
if
(
task
.
isExecuting
()
||
task
.
isInRobot
())
{
putInTask
=
task
;
}
}
}
}
return
null
;
if
(
putInTask
!=
null
)
{
if
(
putInTask
.
isInRobot
())
{
//发送入库任务到BOX
putInTask
.
setStatus
(
OP_STATUS
.
EXECUTING
.
name
());
taskMap
.
put
(
putInTask
.
getId
(),
putInTask
);
putInTask
=
dataLogDao
.
save
(
putInTask
);
String
posName
=
putInTask
.
getPosName
();
Barcode
codeObj
=
barcodeManager
.
findByBarcode
(
putInTask
.
getBarcode
());
int
plateW
=
0
;
int
plateH
=
0
;
if
(
codeObj
!=
null
)
{
plateW
=
codeObj
.
getPlateSize
();
plateH
=
codeObj
.
getHeight
();
}
else
{
log
.
warn
(
"入库未找到条码"
+
storage
.
getName
()
+
"["
+
posName
+
"],条码["
+
putInTask
.
getBarcode
()
+
"]"
);
}
statusBean
.
setOp
(
OP
.
PUT_IN
);
statusBean
.
addPosInfo
(
putInTask
.
getBarcode
(),
posName
,
plateW
,
plateH
,
true
);
log
.
info
(
"入库"
+
storage
.
getName
()
+
"["
+
posName
+
"]物料["
+
putInTask
.
getBarcode
()
+
"]["
+
putInTask
.
getStatus
()
+
"]到 "
+
storage
.
getCid
());
}
return
statusBean
;
}
return
null
;
}
...
...
@@ -408,28 +441,9 @@ public class TaskService {
*/
public
StatusBean
checkOut
(
Storage
storage
,
StatusBean
statusBean
)
{
try
{
DataLog
putInTask
=
findPutInBoxTask
(
storage
);
if
(
putInTask
!=
null
){
//发送入库任务到BOX
putInTask
.
setStatus
(
OP_STATUS
.
EXECUTING
.
name
());
taskMap
.
put
(
putInTask
.
getId
(),
putInTask
);
putInTask
=
dataLogDao
.
save
(
putInTask
);
String
posName
=
putInTask
.
getPosName
();
Barcode
codeObj
=
barcodeManager
.
findByBarcode
(
putInTask
.
getBarcode
());
int
plateW
=
0
;
int
plateH
=
0
;
if
(
codeObj
!=
null
)
{
plateW
=
codeObj
.
getPlateSize
();
plateH
=
codeObj
.
getHeight
();
}
else
{
log
.
warn
(
"入库未找到条码"
+
storage
.
getName
()
+
"["
+
posName
+
"],条码["
+
putInTask
.
getBarcode
()+
"]"
);
}
statusBean
.
setOp
(
OP
.
PUT_IN
);
statusBean
.
addPosInfo
(
putInTask
.
getBarcode
(),
posName
,
plateW
,
plateH
,
true
);
log
.
info
(
"入库"
+
storage
.
getName
()
+
"["
+
posName
+
"]物料["
+
putInTask
.
getBarcode
()
+
"]["
+
putInTask
.
getStatus
()+
"]到 "
+
storage
.
getCid
());
return
statusBean
;
StatusBean
statusBean1
=
findPutInBoxTask
(
storage
,
statusBean
);
if
(
statusBean1
!=
null
){
return
statusBean1
;
}
//准备更新暂停出入库
...
...
src/main/resources/messages.properties
查看文件 @
ab1e95f
...
...
@@ -227,4 +227,6 @@ smfcore.linemsg.update=\u7CFB\u7EDF\u66F4\u65B0\u4E2D,\u6682\u505C\u51FA\u5165\u
smfcore.linemsg.posLock
=
[{0}]
\u
5E93
\u
4F4D[{1}]
\u
5DF2
\u
88AB
\u9501\u
5B9A,
\u6682\u
505C
\u5165\u
5E93
smfcore.task.notExist
=
\u
4EFB
\u
52A1
\u
4E0D
\u
5B58
\u5728
smfcore.task.hasEnd
=
\u
4EFB
\u
52A1
\u
5DF2
\u
5B8C
\u6210
smfcore.task.hasCancel
=
\u
66F4
\u
65B0
\u
72B6
\u6001\u
65F6{0}
\u7684\u
51FA
\u
5E93
\u
4EFB
\u
52A1[{1}]
\u
5DF2
\u
88AB
\u
53D6
\u
6D88
\ No newline at end of file
smfcore.task.hasCancel
=
\u
66F4
\u
65B0
\u
72B6
\u6001\u
65F6{0}
\u7684\u
51FA
\u
5E93
\u
4EFB
\u
52A1[{1}]
\u
5DF2
\u
88AB
\u
53D6
\u
6D88
smfcore.robotBox.notFound
=
\u
672A
\u
627E
\u5230\u
673A
\u5668\u
4EBA
\u6599\u
4ED3[{0}]
smfcore.robotBox.boxHasTask
=
\u
4EFB
\u
52A1[{0}][{1}]
\u
7C7B
\u
578B{2}
\u
72B6
\u6001
{3}
\ No newline at end of file
src/main/resources/messages_en_US.properties
查看文件 @
ab1e95f
...
...
@@ -228,4 +228,6 @@ smfcore.linemsg.posLock=The [{0}] storage space [{1}] has been locked, suspend s
smfcore.task.notExist
=
Task does not exist
smfcore.task.hasEnd
=
Mission completed
smfcore.task.hasCancel
=
{0}'s outgoing task [{1}] has been cancelled
smfcore.robotBox.notFound
=
ROBOT BOX{0} does not exist
smfcore.robotBox.boxHasTask
=
\u
30BF
\u
30B9
\u
30AF [{0}][{1}]
\u
30BF
\u
30A4
\u
30D7 {2}
\u
72B6
\u
614B {3
\u
FF5D
src/main/resources/messages_ja_JP.properties
查看文件 @
ab1e95f
...
...
@@ -228,4 +228,6 @@ smfcore.linemsg.posLock=[{0}] \u30B9\u30C8\u30EC\u30FC\u30B8\u30B9\u30DA\u30FC\u
smfcore.task.notExist
=
\u
30DF
\u
30C3
\u
30B7
\u
30E7
\u
30F3
\u
304C
\u
5B58
\u5728\u3057\u
306A
\u3044
smfcore.task.hasEnd
=
\u
30DF
\u
30C3
\u
30B7
\u
30E7
\u
30F3
\u9054\u6210
smfcore.task.hasCancel
=
{0}
\u
306E
\u9001\u
4FE1
\u
30BF
\u
30B9
\u
30AF[{1}]
\u
306F
\u
30AD
\u
30E3
\u
30F3
\u
30BB
\u
30EB
\u3055\u
308C
\u
307E
\u3057\u
305F
smfcore.robotBox.notFound
=
\u
30D3
\u
30F3
\u
304C
\u
898B
\u3064\u
304B
\u
308A
\u
307E
\u
305B
\u3093\u3067\u3057\u
305F{0}
smfcore.robotBox.boxHasTask
=
Task [{0}][{1}] Type {2} Status {3}
src/main/resources/messages_zh_CN.properties
查看文件 @
ab1e95f
...
...
@@ -228,3 +228,5 @@ smfcore.linemsg.posLock=[{0}]\u5E93\u4F4D[{1}]\u5DF2\u88AB\u9501\u5B9A,\u6682\u5
smfcore.task.notExist
=
\u
4EFB
\u
52A1
\u
4E0D
\u
5B58
\u5728
smfcore.task.hasEnd
=
\u
4EFB
\u
52A1
\u
5DF2
\u
5B8C
\u6210
smfcore.task.hasCancel
=
\u
66F4
\u
65B0
\u
72B6
\u6001\u
65F6{0}
\u7684\u
51FA
\u
5E93
\u
4EFB
\u
52A1[{1}]
\u
5DF2
\u
88AB
\u
53D6
\u
6D88
smfcore.robotBox.notFound
=
\u
672A
\u
627E
\u5230\u
673A
\u5668\u
4EBA
\u6599\u
4ED3[{0}]
smfcore.robotBox.boxHasTask
=
\u
4EFB
\u
52A1[{0}][{1}]
\u
7C7B
\u
578B{2}
\u
72B6
\u6001
{3}
src/main/resources/messages_zh_TW.properties
查看文件 @
ab1e95f
...
...
@@ -228,4 +228,6 @@ smfcore.linemsg.posLock=[{0}]\u5EAB\u4F4D[{1}]\u5DF2\u88AB\u9396\u5B9A\uFF0C\u66
smfcore.task.notExist
=
\u
4EFB
\u
52D9
\u
4E0D
\u
5B58
\u5728
smfcore.task.hasEnd
=
\u
4EFB
\u
52D9
\u
5DF2
\u
5B8C
\u6210
smfcore.task.hasCancel
=
\u
66F4
\u
65B0
\u
72C0
\u
614B
\u6642
{0}
\u7684\u
51FA
\u
5EAB
\u
4EFB
\u
52D9[{1}]
\u
5DF2
\u
88AB
\u
53D6
\u
6D88
smfcore.robotBox.notFound
=
\u
672A
\u
627E
\u5230\u
6A5F
\u5668\u
4EBA
\u6599\u5009
[{0}]
smfcore.robotBox.boxHasTask
=
\u
4EFB
\u
52D9[{0}][{1}]
\u
985E
\u
578B{2}
\u
72C0
\u
614B{3}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论