Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 4f2170f2
由
LN
编写于
2022-03-15 16:13:37 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
NLM料架出库亮灯处理
1 个父辈
aea41fc3
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
127 行增加
和
21 行删除
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLMShelfHandler.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLMShelfHandler.java
查看文件 @
4f2170f
...
...
@@ -5,15 +5,21 @@ import com.google.common.base.Strings;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.core.barcode.bean.CodeBean
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.api.IOpAuthApi
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.inList.util.InListCache
;
import
com.neotel.smfcore.core.order.enums.ORDER_COLOR
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.storage.enums.DeviceType
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.bean.OrderSetting
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.DevicesStatusUtil
;
import
com.neotel.smfcore.security.TokenProvider
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
...
...
@@ -50,15 +56,77 @@ public class NLMShelfHandler extends BaseDeviceHandler {
handleMsg
(
statusBean
);
statusBean
=
saveAlarmAndHumidity
(
statusBean
);
if
(
statusBean
!=
null
){
OrderSetting
orderSetting
=
dataCache
.
getOrderSetting
();
boolean
openZhiYin
=
orderSetting
.
getShelfLightType
().
equals
(
1
);
Map
<
String
,
List
<
DataLog
>>
outMap
=
new
HashMap
<>();
if
(
statusBean
!=
null
)
{
Map
<
String
,
String
>
opMap
=
DevicesStatusUtil
.
getAndRemoveOp
(
statusBean
.
getCid
());
statusBean
.
addOp
(
opMap
);
}
//亮灯
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
(
statusBean
.
getCid
());
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
isWait
())
{
queueTask
.
setStatus
(
OP_STATUS
.
EXECUTING
.
name
());
taskService
.
updateQueueTask
(
queueTask
);
String
rgb
=
queueTask
.
getLightColor
();
ORDER_COLOR
color
=
ORDER_COLOR
.
fromRgb
(
rgb
);
if
(
color
==
null
)
{
// if(queueTask.isPutInTask()){
// color = ORDER_COLOR.DARKGREEN;
// }else{
if
(
openZhiYin
&&
ObjectUtil
.
isNotEmpty
(
queueTask
.
getSourceId
()))
{
List
<
DataLog
>
dataLogList
=
outMap
.
get
(
queueTask
.
getSourceId
());
if
(
dataLogList
==
null
)
{
dataLogList
=
new
ArrayList
<>();
}
dataLogList
.
add
(
queueTask
);
outMap
.
put
(
queueTask
.
getSourceId
(),
dataLogList
);
}
else
{
color
=
ORDER_COLOR
.
BLUE
;
}
// }
}
// statusBean.addData("open",queueTask.getPosName()+"="+color.name());
addMergeData
(
statusBean
,
queueTask
,
"open"
,
color
.
name
());
log
.
info
(
"库位["
+
queueTask
.
getPosName
()
+
"]+亮灯:"
+
color
.
name
());
}
}
List
<
DataLog
>
dataLogs
=
getLightGuideTask
(
outMap
);
for
(
DataLog
task
:
dataLogs
)
{
// statusBean.addData("open", task.getPosName() + "=" + ORDER_COLOR.fromRgb(task.getLightColor()).name());
String
color
=
ORDER_COLOR
.
fromRgb
(
task
.
getLightColor
()).
name
();
addMergeData
(
statusBean
,
task
,
"open"
,
color
);
}
return
statusBean
;
}
private
StatusBean
addMergeData
(
StatusBean
statusBean
,
DataLog
task
,
String
opKey
,
String
color
){
StoragePos
pos
=
storagePosManager
.
getByPosName
(
task
.
getPosName
());
if
(
pos
!=
null
){
List
<
String
>
relatedPosNames
=
pos
.
getMergePosList
();
if
(
relatedPosNames
==
null
||
relatedPosNames
.
isEmpty
()){
relatedPosNames
=
new
ArrayList
<>();
relatedPosNames
.
add
(
pos
.
getPosName
());
// log.info("操作库位["+pos.getPosName()+"]" + opKey);
}
else
{
// log.info("操作合并库位["+pos.getPosName()+"]" + opKey);
}
for
(
String
posName
:
relatedPosNames
){
statusBean
.
addData
(
opKey
,
posName
+
"="
+
color
);
}
}
return
statusBean
;
}
/**
* 操作库位灯(开灯,或关灯),如果有关联的合并库位,一起开关灯
* @param opKey
...
...
@@ -68,45 +136,57 @@ public class NLMShelfHandler extends BaseDeviceHandler {
*/
private
void
opPosLight
(
String
opKey
,
Storage
storage
,
StoragePos
pos
,
String
colorStr
){
List
<
String
>
relatedPosNames
=
pos
.
getMergePosList
();
String
str
=
"操作合并库位["
+
pos
.
getPosName
()+
"]"
+
opKey
;
if
(
relatedPosNames
==
null
||
relatedPosNames
.
isEmpty
()){
relatedPosNames
=
new
ArrayList
<>();
relatedPosNames
.
add
(
pos
.
getPosName
());
log
.
info
(
"操作库位["
+
pos
.
getPosName
()+
"]"
+
opKey
);
str
=
"操作库位["
+
pos
.
getPosName
()+
"]"
+
opKey
;
// log.info("操作库位["+pos.getPosName()+"]" + opKey);
}
else
{
log
.
info
(
"操作合并库位["
+
pos
.
getPosName
()+
"]"
+
opKey
);
//
log.info("操作合并库位["+pos.getPosName()+"]" + opKey);
}
String
allOpStr
=
""
;
for
(
String
posName
:
relatedPosNames
){
String
opStr
=
posName
;
if
(!
Strings
.
isNullOrEmpty
(
colorStr
)){
opStr
=
opStr
+
"="
+
colorStr
;
}
DevicesStatusUtil
.
appendOp
(
storage
.
getCid
(),
opKey
,
opStr
);
log
.
info
(
opKey
+
" : "
+
opStr
);
allOpStr
+=
opStr
+
","
;
// log.info(opKey + " : " + opStr);
}
log
.
info
(
str
+
":"
+
allOpStr
);
}
/**
* 开灯, 等6秒后关闭
*/
private
void
openAndCloseLights
(
final
Storage
storage
,
final
List
<
String
>
posNameList
,
final
long
delayCloseTime
,
String
color
){
private
void
openAndCloseLights
(
final
Storage
storage
,
final
List
<
String
>
posNameList
,
final
long
delayCloseTime
,
String
color
)
{
final
String
cid
=
storage
.
getCid
();
if
(
posNameList
==
null
)
{
if
(
posNameList
==
null
)
{
return
;
}
String
allLightOnStr
=
""
;
for
(
final
String
posName
:
posNameList
)
{
String
lightOnStr
=
posName
+
"="
+
color
;
DevicesStatusUtil
.
appendOp
(
cid
,
"open"
,
lightOnStr
);
log
.
info
(
"点亮库位:"
+
lightOnStr
);
DevicesStatusUtil
.
appendOp
(
cid
,
"open"
,
lightOnStr
);
allLightOnStr
+=
lightOnStr
+
","
;
}
log
.
info
(
"["
+
cid
+
"]点亮库位:"
+
allLightOnStr
);
//5秒后灭灯
Thread
closeTask
=
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
try
{
String
allCloseStr
=
""
;
for
(
final
String
posName
:
posNameList
)
{
Thread
.
sleep
(
delayCloseTime
);
log
.
info
(
storage
.
getName
()+
"["
+
cid
+
"]库位["
+
posName
+
"]灭灯"
);
DevicesStatusUtil
.
appendOp
(
cid
,
"close"
,
posName
);
}
catch
(
Exception
e
){
// log.info(storage.getName() + "[" + cid + "]库位[" + posName + "]灭灯");
DevicesStatusUtil
.
appendOp
(
cid
,
"close"
,
posName
);
allCloseStr
+=
posName
+
","
;
}
log
.
info
(
storage
.
getName
()
+
"["
+
cid
+
"]库位["
+
allCloseStr
+
"]灭灯"
);
}
catch
(
Exception
e
)
{
}
}
...
...
@@ -114,8 +194,6 @@ public class NLMShelfHandler extends BaseDeviceHandler {
closeTask
.
start
();
}
}
//上一次入库的库位,用于扫下一条码时灭灯,key=storageId
private
static
Map
<
String
,
StoragePos
>
lastPutinPosMap
=
new
ConcurrentHashMap
<>();
...
...
@@ -128,6 +206,7 @@ public class NLMShelfHandler extends BaseDeviceHandler {
String
code
=
mapValues
.
get
(
"code"
).
trim
();
String
groupId
=
mapValues
.
get
(
"group"
);
String
storageId
=
mapValues
.
get
(
"storageId"
);
String
sourceId
=
mapValues
.
get
(
"sourceId"
);
if
(
ObjectUtils
.
isEmpty
(
code
))
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"code"
});
}
...
...
@@ -180,6 +259,28 @@ public class NLMShelfHandler extends BaseDeviceHandler {
}
posName
=
posName
.
substring
(
1
);
}
//判断是否有出库任务,有的话直接结束任务
String
loginUser
=
SecurityUtils
.
getLoginUsername
();
Collection
<
DataLog
>
allTasks
=
taskService
.
getQueueTasks
();
for
(
DataLog
task
:
allTasks
)
{
if
(
task
.
isCheckOutTask
()
&&
task
.
getBarcode
()
!=
null
&&
task
.
getBarcode
().
equals
(
barcode
.
getBarcode
()))
{
if
(
ObjectUtil
.
isNotEmpty
(
sourceId
)
&&
!
sourceId
.
equals
(
task
.
getSourceId
()))
{
LiteOrder
liteOrder
=
liteOrderManager
.
get
(
sourceId
);
if
(
liteOrder
!=
null
)
{
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.error.orderError"
,
"任务与指定工单[{0}]不一致"
,
new
String
[]{
liteOrder
.
getOrderNo
()});
}
else
{
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.error.orderError"
,
"任务与指定工单[{0}]不一致"
,
new
String
[]{
sourceId
});
}
}
Storage
storage
=
dataCache
.
getStorage
(
task
.
getCid
());
taskService
.
addTaskToFinished
(
inPos
,
null
,
loginUser
);
opPosLight
(
"close"
,
storage
,
inPos
,
null
);
log
.
info
(
barcode
.
getBarcode
()
+
" 出库完成, 库位["
+
inPos
.
getPosName
()
+
"]灭灯"
);
return
ResultBean
.
newErrorResult
(
1
,
"smfcore.shelf.msg.outConfirm"
,
"出库完成, 库位[{0}]灭灯"
,
new
String
[]{
inPos
.
getPosName
()});
}
}
return
ResultBean
.
newErrorResult
(
99
,
"smfcore.shelf.msg.alreadyInPos"
,
"该物料已在库位["
+
posName
+
"]中"
,
new
String
[]{
posName
});
}
...
...
@@ -237,18 +338,19 @@ public class NLMShelfHandler extends BaseDeviceHandler {
List
<
String
>
mergePosNameList
=
new
ArrayList
<>();
String
mergePosStr
=
""
;
for
(
StoragePos
storagePos
:
continuitEmptyPosList
)
{
log
.
info
(
"设置库位["
+
storagePos
.
getPosName
()
+
"]使用状态为:true"
);
//
log.info("设置库位[" + storagePos.getPosName() + "]使用状态为:true");
storagePos
.
setUsed
(
true
);
storagePosManager
.
save
(
storagePos
);
mergePosNameList
.
add
(
storagePos
.
getPosName
());
mergePosStr
=
mergePosStr
+
" , "
+
storagePos
.
getPosName
()
;
mergePosStr
+=
storagePos
.
getPosName
()+
","
;
}
log
.
info
(
"设置合并库位["
+
mergePosStr
+
"]使用状态为:true"
);
mainPos
.
setUsed
(
true
);
mainPos
.
setMergePosList
(
mergePosNameList
);
storagePosManager
.
save
(
mainPos
);
pos
=
mainPos
;
lastPutinPosMap
.
put
(
currentStorage
.
getCid
(),
pos
);
log
.
info
(
"合并库位["
+
mergePosStr
+
"]到
"
+
pos
.
getPosName
()
+
"
中"
);
log
.
info
(
"合并库位["
+
mergePosStr
+
"]到
["
+
pos
.
getPosName
()
+
"]
中"
);
log
.
info
(
barcode
.
getPartNumber
()
+
" [ "
+
barcode
.
getBarcode
()
+
" ] "
+
"入库到:"
+
currentStorage
.
getName
()
+
"["
+
currentStorage
.
getCid
()
+
"] "
+
pos
.
getPosName
());
taskService
.
addTaskToFinished
(
pos
,
barcode
,
currentStorage
.
getName
()
+
"-op"
);
openAndCloseLights
(
currentStorage
,
mergePosNameList
,
delayCloseTime
,
color
);
...
...
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
4f2170f
...
...
@@ -192,16 +192,20 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
@Override
public
StoragePos
save
(
StoragePos
storagePos
)
throws
ValidateException
{
if
(!
storagePos
.
isUsed
()){
if
(!
storagePos
.
isUsed
())
{
//出库
List
<
String
>
mergePosNames
=
storagePos
.
getMergePosList
();
List
<
StoragePos
>
mergePosList
=
findPosList
(
storagePos
.
getStorageId
(),
mergePosNames
);
String
allPos
=
""
;
//解除相关合并库位的占用状态
for
(
StoragePos
mergePos
:
mergePosList
)
{
for
(
StoragePos
mergePos
:
mergePosList
)
{
mergePos
.
setUsed
(
false
);
mergePos
.
setMergePosList
(
null
);
storagePosDao
.
save
(
mergePos
);
log
.
info
(
"设置合并的关联库位["
+
mergePos
.
getPosName
()+
"]使用状态为:false"
);
allPos
+=
mergePos
.
getPosName
()
+
","
;
}
if
(
ObjectUtil
.
isNotEmpty
(
allPos
))
{
log
.
info
(
"设置库位["
+
storagePos
.
getPosName
()+
"]合并的关联库位[ "
+
allPos
+
" ]使用状态为:false"
);
}
storagePos
.
setMergePosList
(
null
);
}
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论