Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 09c282a7
由
sunke
编写于
2022-10-11 10:25:13 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
感应料架优化
1 个父辈
9cb5f8a9
显示空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
234 行增加
和
188 行删除
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLPShelfHandler.java
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLPShelfHandler.java
查看文件 @
09c282a
...
...
@@ -5,8 +5,8 @@ import com.google.common.base.Strings;
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.service.po.Barcode
;
import
com.neotel.smfcore.core.api.bean.CodeValidateParam
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
...
...
@@ -40,7 +40,7 @@ import java.util.*;
@Api
(
tags
=
"SHELF: NLP感应料架"
)
@RestController
@Slf4j
public
class
NLPShelfHandler
extends
BaseDeviceHandler
{
public
class
NLPShelfHandler
extends
BaseDeviceHandler
{
@Autowired
private
TokenProvider
tokenProvider
;
...
...
@@ -53,28 +53,27 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@ApiOperation
(
"扫码入库"
)
@PostMapping
(
"/api/sensorShelf/codeIn"
)
@PreAuthorize
(
"@el.check('sensorShelf:putIn')"
)
public
ResultBean
codeIn
(
@RequestBody
Map
<
String
,
String
>
mapValues
,
HttpServletRequest
request
)
{
public
ResultBean
codeIn
(
@RequestBody
Map
<
String
,
String
>
mapValues
,
HttpServletRequest
request
)
{
String
code
=
mapValues
.
get
(
"code"
);
String
groupId
=
mapValues
.
get
(
"group"
);
String
storageId
=
mapValues
.
get
(
"storageId"
);
String
sourceId
=
mapValues
.
get
(
"sourceId"
);
String
storageId
=
mapValues
.
get
(
"storageId"
);
String
sourceId
=
mapValues
.
get
(
"sourceId"
);
String
token
=
tokenProvider
.
getToken
(
request
);
if
(
ObjectUtils
.
isEmpty
(
code
))
{
if
(
ObjectUtils
.
isEmpty
(
code
))
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"code"
});
}
if
(
groupId
==
null
&&
storageId
==
null
)
{
if
(
groupId
==
null
&&
storageId
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"group"
});
}
if
(
groupId
==
null
&&
storageId
!=
null
)
{
Storage
storage
=
dataCache
.
getStorageById
(
storageId
);
if
(
storage
!=
null
)
{
groupId
=
storage
.
getGroupId
();
if
(
groupId
==
null
&&
storageId
!=
null
)
{
Storage
storage
=
dataCache
.
getStorageById
(
storageId
);
if
(
storage
!=
null
)
{
groupId
=
storage
.
getGroupId
();
}
}
if
(
groupId
!=
null
&&
groupId
.
equals
(
"-1"
))
{
groupId
=
""
;
if
(
groupId
!=
null
&&
groupId
.
equals
(
"-1"
))
{
groupId
=
""
;
}
// WebSocketServer.sendMsg("", new SocketMsg("{0}未找到库位:{1}"+code, MsgType.INFO,"smfclient.nlp.cannotFindPos",new String[]{"消息测试","库位号"}));
...
...
@@ -82,7 +81,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
();
ResultBean
resultBean
=
null
;
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
isPutInTask
()
&&
(
queueTask
.
isWait
()||
queueTask
.
isExecuting
())
)
{
if
(
queueTask
.
isPutInTask
()
&&
(
queueTask
.
isWait
()
||
queueTask
.
isExecuting
())
)
{
if
(!
Strings
.
isNullOrEmpty
(
groupId
)
&&
queueTask
.
getGroupId
().
equals
(
groupId
))
{
log
.
info
(
"codeIn ["
+
code
+
"]["
+
groupId
+
"]入库失败:条码["
+
queueTask
.
getBarcode
()
+
"]的任务还未结束 "
);
throw
new
ValidateException
(
"smfcore.unfinished"
,
"the task of [{0}] is unfinished"
,
new
String
[]{
queueTask
.
getBarcode
()});
...
...
@@ -94,23 +93,23 @@ public class NLPShelfHandler extends BaseDeviceHandler{
}
}
CodeValidateParam
params
=
new
CodeValidateParam
(
loginUser
,
groupId
,
storageId
,
code
,
token
);
CodeValidateParam
params
=
new
CodeValidateParam
(
loginUser
,
groupId
,
storageId
,
code
,
token
);
Barcode
barcodeSave
=
smfApi
.
canPutInBeforeResolve
(
params
);
if
(
barcodeSave
==
null
)
{
barcodeSave
=
codeResolve
.
resolveOneValideBarcode
(
"=1x1="
+
code
);
if
(
barcodeSave
==
null
)
{
barcodeSave
=
codeResolve
.
resolveOneValideBarcode
(
"=1x1="
+
code
);
}
//从API验证
Barcode
verResult
=
smfApi
.
canPutInAfterResolve
(
barcodeSave
);
if
(
verResult
!=
null
)
{
if
(
verResult
!=
null
)
{
barcodeSave
=
verResult
;
}
return
putIn
(
loginUser
,
groupId
,
storageId
,
barcodeSave
,
token
);
return
putIn
(
loginUser
,
groupId
,
storageId
,
barcodeSave
,
token
);
}
protected
ResultBean
putIn
(
String
loginUser
,
String
groupId
,
String
storageId
,
Barcode
barcode
,
String
token
)
{
protected
ResultBean
putIn
(
String
loginUser
,
String
groupId
,
String
storageId
,
Barcode
barcode
,
String
token
)
{
// CodeBean codeBean = codeResolve.resolveSingleCode(codeStr);
if
(
barcode
==
null
||
barcode
.
getBarcode
()
==
null
)
{
...
...
@@ -124,7 +123,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
}
if
(
barcode
.
getAmount
()
<=
0
)
{
throw
new
ValidateException
(
"smfcore.error.barcode.wrongQty"
,
"条码[{0}]对应的数量<=0为: {1}"
,
new
String
[]{
barcode
.
getBarcode
(),
barcode
.
getAmount
()
+
""
});
throw
new
ValidateException
(
"smfcore.error.barcode.wrongQty"
,
"条码[{0}]对应的数量<=0为: {1}"
,
new
String
[]{
barcode
.
getBarcode
(),
barcode
.
getAmount
()
+
""
});
}
Date
expireDate
=
barcode
.
getExpireDate
();
...
...
@@ -168,7 +167,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
try
{
taskService
.
addTaskToExecute
(
dataLog
);
}
catch
(
Exception
e
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfclient.nlp.error"
,
"入库失败:"
+
e
.
getMessage
(),
new
String
[]{
e
.
getMessage
()});
return
ResultBean
.
newErrorResult
(-
1
,
"smfclient.nlp.error"
,
"入库失败:"
+
e
.
getMessage
(),
new
String
[]{
e
.
getMessage
()});
}
...
...
@@ -190,10 +189,10 @@ public class NLPShelfHandler extends BaseDeviceHandler{
String
cid
=
statusBean
.
getCid
();
List
<
DataLog
>
finishedTasks
=
taskService
.
getFinishedTasks
();
for
(
DataLog
finishedTask
:
finishedTasks
)
{
if
(
finishedTask
.
getCid
().
equals
(
cid
)
&&
finishedTask
.
isCheckOutTask
()
&&
finishedTask
.
isCancel
())
{
if
(
finishedTask
.
getCid
().
equals
(
cid
)
&&
finishedTask
.
isCheckOutTask
()
&&
finishedTask
.
isCancel
())
{
//取消的任务,需要关灯
taskService
.
removeFinishedTask
(
finishedTask
);
statusBean
.
addData
(
"close"
,
finishedTask
.
getPosName
());
statusBean
.
addData
(
"close"
,
finishedTask
.
getPosName
());
}
}
...
...
@@ -209,15 +208,15 @@ public class NLPShelfHandler extends BaseDeviceHandler{
//亮灯
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
(
statusBean
.
getCid
());
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
isWait
())
{
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
())
{
if
(
color
==
null
)
{
if
(
queueTask
.
isPutInTask
())
{
color
=
ORDER_COLOR
.
DARKGREEN
;
}
else
{
}
else
{
if
(
openZhiYin
&&
ObjectUtil
.
isNotEmpty
(
queueTask
.
getSourceId
()))
{
List
<
DataLog
>
dataLogList
=
outMap
.
get
(
queueTask
.
getSourceId
());
if
(
dataLogList
==
null
)
{
...
...
@@ -230,8 +229,8 @@ public class NLPShelfHandler extends BaseDeviceHandler{
}
}
}
statusBean
.
addData
(
"open"
,
queueTask
.
getPosName
()+
"="
+
color
.
name
());
log
.
info
(
"库位["
+
queueTask
.
getPosName
()+
"]+亮灯:"
+
color
.
name
());
statusBean
.
addData
(
"open"
,
queueTask
.
getPosName
()
+
"="
+
color
.
name
());
log
.
info
(
"库位["
+
queueTask
.
getPosName
()
+
"]+亮灯:"
+
color
.
name
());
}
// else if(queueTask.isCancel()){
// if(queueTask.isCheckOutTask()){
...
...
@@ -258,235 +257,226 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@RequestMapping
(
"/service/store/sensorShelf/sensorChange"
)
@ResponseBody
@AnonymousAccess
public
ResultBean
sensorChange
(
HttpServletRequest
request
,
HttpSession
httpSession
){
public
ResultBean
sensorChange
(
HttpServletRequest
request
,
HttpSession
httpSession
)
{
String
cid
=
request
.
getParameter
(
"cid"
);
Storage
storage
=
dataCache
.
getStorage
(
cid
);
if
(
storage
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.shelfNotExist"
,
"{0}对应的料架不存在"
,
new
String
[]{
cid
}
);
if
(
storage
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.shelfNotExist"
,
"{0}对应的料架不存在"
,
new
String
[]{
cid
}
);
}
String
groupId
=
storage
.
getGroupId
();
// String groupName = "";
// Group group = groupManager.get(groupId);
// if(group != null){
// groupName = group.getGroupName();
// }
if
(
groupId
.
equals
(
""
)){
groupId
=
"-1"
;
if
(
groupId
.
equals
(
""
))
{
groupId
=
"-1"
;
}
String
[]
hasReelPosList
=
request
.
getParameterValues
(
"hasReelPosList"
);
String
[]
noReelPosList
=
request
.
getParameterValues
(
"noReelPosList"
);
String
[]
hasReelPosErrorList
=
request
.
getParameterValues
(
"hasReelPosErrorList"
);
//实际信号有料,数据库无信息
String
[]
noReelPosErrorList
=
request
.
getParameterValues
(
"noReelPosErrorList"
);
//实际信号无料,数据库有信息
if
(
hasReelPosErrorList
==
null
){
hasReelPosErrorList
=
new
String
[]{};
//实际信号有料,数据库无信息
String
[]
hasReelPosErrorList
=
request
.
getParameterValues
(
"hasReelPosErrorList"
);
//实际信号无料,数据库有信息
String
[]
noReelPosErrorList
=
request
.
getParameterValues
(
"noReelPosErrorList"
);
if
(
hasReelPosErrorList
==
null
)
{
hasReelPosErrorList
=
new
String
[]{};
}
if
(
noReelPosErrorList
==
null
)
{
if
(
noReelPosErrorList
==
null
)
{
noReelPosErrorList
=
new
String
[]{};
}
List
<
String
>
ngToOk
=
new
ArrayList
<>();
// //数据库无信息,实际有料
// if(hasReelPosErrorList.length>0){
// Query query=new Query(Criteria.where("posName").in(hasReelPosErrorList));
// List<StoragePos> posList= storagePosManager.findByQuery(query);
// for (StoragePos pos:posList
// ) {
// if(pos.isUsed()){
// ngToOk.add(pos.getPosName());
// log.info("sensorChange 客户端上传 hasReelPosErrorList 库位["+pos.getPosName()+"]数据库有信息,放入ngToOk");
// }
// }
// }
List
<
String
>
usedPosNameList
=
dataCache
.
getUsedPosNameList
(
storage
.
getCid
());
List
<
String
>
ngToOk
=
new
ArrayList
<>();
//数据库有信息,实际无料
if
(
noReelPosErrorList
.
length
>
0
){
Query
query
=
new
Query
(
Criteria
.
where
(
"posName"
).
in
(
noReelPosErrorList
));
List
<
StoragePos
>
posList
=
storagePosManager
.
findByQuery
(
query
);
for
(
StoragePos
pos:
posList
)
{
if
(!
pos
.
isUsed
()){
if
(
noReelPosErrorList
.
length
>
0
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"posName"
).
in
(
noReelPosErrorList
));
List
<
StoragePos
>
posList
=
storagePosManager
.
findByQuery
(
query
);
for
(
StoragePos
pos
:
posList
)
{
if
(!
pos
.
isUsed
())
{
ngToOk
.
add
(
pos
.
getPosName
());
log
.
info
(
"sensorChange 客户端上传 noReelPosErrorList 库位["
+
pos
.
getPosName
()+
"]数据库无信息,放入ngToOk"
);
log
.
info
(
"sensorChange 客户端上传 noReelPosErrorList 库位["
+
pos
.
getPosName
()
+
"]数据库无信息,放入ngToOk"
);
}
}
}
List
<
List
<
String
>>
data
=
new
ArrayList
<>();
data
.
add
(
Arrays
.
asList
(
hasReelPosErrorList
)
);
List
<
List
<
String
>>
data
=
new
ArrayList
<>();
data
.
add
(
Arrays
.
asList
(
hasReelPosErrorList
));
data
.
add
(
Arrays
.
asList
(
noReelPosErrorList
));
DevicesStatusUtil
.
updateDeviceData
(
cid
,
data
);
DevicesStatusUtil
.
updateDeviceData
(
cid
,
data
);
List
<
String
>
inOkList
=
new
ArrayList
<>();
List
<
String
>
inNgList
=
new
ArrayList
<>();
List
<
String
>
outOkList
=
new
ArrayList
<>();
List
<
String
>
outNgList
=
new
ArrayList
<>();
if
(
hasReelPosList
!=
null
)
{
if
(
hasReelPosList
!=
null
)
{
Set
<
String
>
disabledPosNameSet
=
dataCache
.
getDisabledPosNameSet
();
List
<
String
>
newList
=
new
ArrayList
<>();
for
(
String
posName
:
hasReelPosList
)
{
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
pos
==
null
)
{
log
.
info
(
"sensorChange 未找到库位 hasReelPosList ["
+
posName
+
"]"
);
for
(
String
posName
:
hasReelPosList
)
{
if
(
disabledPosNameSet
.
contains
(
posName
)){
log
.
info
(
cid
+
"sensorChange hasReelPosList ["
+
posName
+
"]库位被禁用,忽略"
);
continue
;
}
if
(!
pos
.
isEnabled
())
{
continue
;
}
newList
.
add
(
posName
);
}
hasReelPosList
=
newList
.
toArray
(
new
String
[
newList
.
size
()]);
hasReelPosList
=
newList
.
toArray
(
new
String
[
newList
.
size
()]);
//入库的库位列表
if
(
hasReelPosList
.
length
>
1
)
{
String
msg
=
"不可同时放入多盘物料:"
+
String
.
join
(
","
,
hasReelPosList
);
if
(
hasReelPosList
.
length
>
1
)
{
String
msg
=
"不可同时放入多盘物料:"
+
String
.
join
(
","
,
hasReelPosList
);
log
.
error
(
msg
);
List
<
String
>
notifyUsers
=
userManager
.
findByDeviceGroupId
(
storage
.
getGroupId
());
SocketMsg
socketMsg
=
new
SocketMsg
(
notifyUsers
,
msg
,
MsgType
.
ERROR
,
"smfclient.nlp.onlyOneTray"
,
new
String
[]{
String
.
join
(
","
,
hasReelPosList
)});
WebSocketServer
.
sendMsg
(
socketMsg
);
for
(
String
posStr
:
hasReelPosList
)
{
inNgList
.
add
(
posStr
);
}
}
else
if
(
hasReelPosList
.
length
==
1
){
}
else
if
(
hasReelPosList
.
length
==
1
)
{
log
.
info
(
cid
+
"开始检测执行入库到库位:["
+
hasReelPosList
[
0
]+
"]"
);
StoragePos
pos
=
storagePosManager
.
getByPosName
(
hasReelPosList
[
0
]);
if
(
pos
==
null
)
{
String
msg
=
"未找到库位:"
+
String
.
join
(
","
,
hasReelPosList
)
;
if
(
pos
==
null
)
{
String
msg
=
"未找到库位:"
+
String
.
join
(
","
,
hasReelPosList
)
;
log
.
error
(
msg
);
List
<
String
>
notifyUsers
=
userManager
.
findByDeviceGroupId
(
storage
.
getGroupId
());
WebSocketServer
.
sendMsg
(
new
SocketMsg
(
notifyUsers
,
msg
,
MsgType
.
ERROR
,
"smfclient.nlp.cannotFindPos"
,
new
String
[]{
""
,
String
.
join
(
","
,
hasReelPosList
)}));
}
else
if
(!
pos
.
getStorageId
().
equals
(
storage
.
getId
())){
String
msg
=
"["
+
storage
.
getName
()+
"]未找到库位:"
+
String
.
join
(
","
,
hasReelPosList
)
;
}
else
if
(!
pos
.
getStorageId
().
equals
(
storage
.
getId
()))
{
String
msg
=
"["
+
storage
.
getName
()
+
"]未找到库位:"
+
String
.
join
(
","
,
hasReelPosList
);
log
.
error
(
msg
);
List
<
String
>
notifyUsers
=
userManager
.
findByDeviceGroupId
(
storage
.
getGroupId
());
WebSocketServer
.
sendMsg
(
new
SocketMsg
(
notifyUsers
,
msg
,
MsgType
.
ERROR
,
"smfclient.nlp.cannotFindPos"
,
new
String
[]{
storage
.
getName
(),
String
.
join
(
","
,
hasReelPosList
)}));
}
//如果库位有料,直接结束
else
if
(
pos
.
getBarcode
()!=
null
)
{
else
if
(
pos
.
getBarcode
()
!=
null
)
{
log
.
info
(
"料架["
+
cid
+
"]入库库位["
+
pos
.
getPosName
()
+
"]已有料: ["
+
pos
.
getBarcode
().
getBarcode
()
+
"]"
);
}
else
{
log
.
info
(
cid
+
"处理有料库位:["
+
pos
.
getPosName
()+
"]"
);
boolean
posInResult
=
handlePosIn
(
groupId
,
storage
,
pos
);
log
.
info
(
cid
+
"处理有料库位:["
+
pos
.
getPosName
()+
"]完成,结果:"
+
posInResult
);
if
(
posInResult
){
inOkList
.
add
(
pos
.
getPosName
());
}
else
{
inNgList
.
add
(
pos
.
getPosName
());
}
}
}
}
if
(
noReelPosList
!=
null
)
{
//出库
for
(
String
noReelPosName
:
noReelPosList
)
{
log
.
info
(
cid
+
"处理无料库位:["
+
noReelPosName
+
"]"
);
boolean
handleNoReelPosResult
=
handleNoReelPos
(
storage
,
usedPosNameList
,
noReelPosName
);
log
.
info
(
cid
+
"处理无料库位:["
+
noReelPosName
+
"]完成,结果:"
+
handleNoReelPosResult
);
if
(
handleNoReelPosResult
)
{
outOkList
.
add
(
noReelPosName
);
}
else
{
outNgList
.
add
(
noReelPosName
);
}
else
{
}
}
Map
<
String
,
List
<
String
>>
dataMap
=
new
HashMap
<>();
dataMap
.
put
(
"inOkList"
,
inOkList
);
dataMap
.
put
(
"inNgList"
,
inNgList
);
dataMap
.
put
(
"outOkList"
,
outOkList
);
dataMap
.
put
(
"outNgList"
,
outNgList
);
dataMap
.
put
(
"ngToOk"
,
ngToOk
);
return
ResultBean
.
newOkResult
(
dataMap
);
}
/**
* 处理库位入库
* @param storage
* @param pos
* @return
*/
private
boolean
handlePosIn
(
String
groupId
,
Storage
storage
,
StoragePos
pos
){
boolean
inResult
=
false
;
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
();
for
(
DataLog
queueTask
:
queueTasks
)
{
boolean
isPutInTask
=
false
;
if
(
ObjectUtil
.
isNotEmpty
(
queueTask
.
getStorageId
())
){
if
(
queueTask
.
isPutInTask
()&&
queueTask
.
getStorageId
().
equals
(
storage
.
getId
())){
isPutInTask
=
true
;
}
boolean
isPutInTask
=
false
;
if
(
ObjectUtil
.
isNotEmpty
(
queueTask
.
getStorageId
()))
{
if
(
queueTask
.
isPutInTask
()
&&
queueTask
.
getStorageId
().
equals
(
storage
.
getId
()))
{
isPutInTask
=
true
;
}
else
if
(
queueTask
.
isPutInTask
()
&&
queueTask
.
getGroupId
().
equals
(
groupId
))
{
}
else
if
(
queueTask
.
isPutInTask
()
&&
queueTask
.
getGroupId
().
equals
(
groupId
))
{
isPutInTask
=
true
;
}
if
(
isPutInTask
)
{
queueTask
.
setCid
(
cid
);
if
(
isPutInTask
)
{
queueTask
.
setCid
(
storage
.
getCid
()
);
queueTask
.
setPosId
(
pos
.
getId
());
queueTask
.
setPosName
(
pos
.
getPosName
());
queueTask
.
setStorageId
(
storage
.
getId
());
queueTask
.
setStorageName
(
storage
.
getName
());
try
{
//入库完成,发送入库完成请求
super
.
finishedPutIn
(
cid
,
pos
.
getPosName
()
);
inOkList
.
add
(
hasReelPosList
[
0
]
);
log
.
info
(
queueTask
.
getBarcode
()
+
"入库完成,发送入库完成请求"
);
super
.
finishedPutIn
(
storage
.
getCid
(),
pos
.
getPosName
()
);
String
msg
=
queueTask
.
getBarcode
()
+
"入库到"
+
pos
.
getPosName
()
+
"成功"
;
log
.
info
(
msg
);
//List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
//WebSocketServer.sendMsg(new SocketMsg(notifyUsers, msg, MsgType.INFO,"smfclient.nlp.inputOk",new String[]{queueTask.getBarcode(),pos.getPosName()}));
inResult
=
true
;
break
;
}
catch
(
Exception
e
)
{
log
.
error
(
"入库出错"
+
e
.
getMessage
());
List
<
String
>
notifyUsers
=
userManager
.
findByDeviceGroupId
(
storage
.
getGroupId
());
WebSocketServer
.
sendMsg
(
new
SocketMsg
(
notifyUsers
,
"入库出错:"
+
e
.
getMessage
(),
MsgType
.
ERROR
,
"smfclient.nlp.inputError"
,
new
String
[]{
e
.
getMessage
()}));
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.inputError"
,
"入库出错:{0}"
,
new
String
[]{
e
.
getMessage
()});
}
}
}
if
(
inOkList
.
size
()
==
0
){
inNgList
.
add
(
hasReelPosList
[
0
]);
log
.
error
(
"未找到["
+
pos
.
getPosName
()+
"]的入库任务"
);
}
}
log
.
error
(
"入库出错"
+
e
.
getMessage
());
}
return
inResult
;
}
if
(
noReelPosList
!=
null
){
//出库
for
(
String
posName
:
noReelPosList
)
{
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
pos
==
null
){
log
.
info
(
"sensorChange 未找到库位 noReelPosList ["
+
posName
+
"]"
);
continue
;
}
if
(!
pos
.
isEnabled
()){
continue
;
log
.
warn
(
"未找到["
+
pos
.
getPosName
()+
"]的入库任务"
);
return
inResult
;
}
if
(
pos
==
null
){
String
msg
=
"未找到库位:"
+
String
.
join
(
","
,
hasReelPosList
)
;
log
.
error
(
msg
);
List
<
String
>
notifyUsers
=
userManager
.
findByDeviceGroupId
(
storage
.
getGroupId
());
WebSocketServer
.
sendMsg
(
new
SocketMsg
(
notifyUsers
,
msg
,
MsgType
.
ERROR
,
"smfclient.nlp.cannotFindPos"
,
new
String
[]{
""
,
String
.
join
(
","
,
hasReelPosList
)}));
}
else
if
(!
pos
.
getStorageId
().
equals
(
storage
.
getId
())){
String
msg
=
"["
+
storage
.
getName
()+
"]未找到库位:"
+
String
.
join
(
","
,
hasReelPosList
)
;
/**
* 处理客户端发上来的无料库位
*
* @param storage
* @param usedPosNameList
* @param noReelPosName
* @return
*/
private
boolean
handleNoReelPos
(
Storage
storage
,
List
<
String
>
usedPosNameList
,
String
noReelPosName
)
{
boolean
handleResult
=
false
;
if
(!
usedPosNameList
.
contains
(
noReelPosName
))
{
log
.
info
(
"库位: "
+
noReelPosName
+
" 中数据库中已无物料信息,加入outOkList"
);
handleResult
=
true
;
}
else
{
StoragePos
pos
=
storagePosManager
.
getByPosName
(
noReelPosName
);
if
(
pos
==
null
)
{
log
.
error
(
"sensorChange 未找到库位 noReelPosList ["
+
noReelPosName
+
"],加入outOkList"
);
handleResult
=
true
;
}
else
{
if
(!
pos
.
isEnabled
())
{
log
.
error
(
"sensorChange noReelPosList ["
+
noReelPosName
+
"]已禁用,加入outOkList"
);
handleResult
=
true
;
}
else
if
(!
pos
.
getStorageId
().
equals
(
storage
.
getId
()))
{
String
msg
=
"["
+
storage
.
getName
()
+
"]未找到库位:"
+
noReelPosName
+
",加入outOkList"
;
log
.
error
(
msg
);
List
<
String
>
notifyUsers
=
userManager
.
findByDeviceGroupId
(
storage
.
getGroupId
());
WebSocketServer
.
sendMsg
(
new
SocketMsg
(
notifyUsers
,
msg
,
MsgType
.
ERROR
,
"smfclient.nlp.cannotFindPos"
,
new
String
[]{
storage
.
getName
(),
String
.
join
(
","
,
hasReelPosList
)}));
}
else
if
(
pos
.
getBarcode
()==
null
){
log
.
info
(
"料架["
+
cid
+
"]出库库位["
+
pos
.
getPosName
()
+
"]已为空 "
);
}
else
{
String
outResult
=
""
;
handleResult
=
true
;
}
else
if
(
pos
.
getBarcode
()
==
null
)
{
log
.
info
(
"库位: "
+
noReelPosName
+
" 数据库中已无物料信息,加入outOkList"
);
handleResult
=
true
;
}
else
{
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
();
String
outResult
=
""
;
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
isCheckOutTask
()
&&
queueTask
.
getPosName
().
equals
(
posName
)){
//只有执行中的任务才可以正常出库
if
(
queueTask
.
isExecuting
()
&&
queueTask
.
isCheckOutTask
()
&&
queueTask
.
getPosName
().
equals
(
noReelPosName
))
{
//出库完成
try
{
outResult
=
posName
;
super
.
finishedOutPos
(
cid
,
posName
);
String
msg
=
queueTask
.
getBarcode
()+
"从"
+
posName
+
"出库成功"
;
log
.
error
(
msg
);
List
<
String
>
notifyUsers
=
userManager
.
findByDeviceGroupId
(
storage
.
getGroupId
());
WebSocketServer
.
sendMsg
(
new
SocketMsg
(
notifyUsers
,
msg
,
MsgType
.
INFO
,
"smfclient.nlp.outputOk"
,
new
String
[]{
queueTask
.
getBarcode
(),
posName
}));
outResult
=
noReelPosName
;
super
.
finishedOutPos
(
storage
.
getCid
(),
noReelPosName
);
String
msg
=
queueTask
.
getBarcode
()
+
"从"
+
noReelPosName
+
"出库成功"
;
log
.
info
(
msg
);
break
;
}
catch
(
Exception
e
)
{
log
.
error
(
"出库出错"
+
e
.
getMessage
());
List
<
String
>
notifyUsers
=
userManager
.
findByDeviceGroupId
(
storage
.
getGroupId
());
WebSocketServer
.
sendMsg
(
new
SocketMsg
(
notifyUsers
,
"出库出错:"
+
e
.
getMessage
(),
MsgType
.
ERROR
,
"smfclient.nlp.outputError"
,
new
String
[]{
e
.
getMessage
()}));
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.checkoutError"
,
"出库出错:{0}"
,
new
String
[]{
e
.
getMessage
()});
log
.
error
(
"库位:"
+
noReelPosName
+
"出库出错"
,
e
);
break
;
}
}
}
if
(
outResult
.
isEmpty
())
{
outNgList
.
add
(
posName
)
;
String
msg
=
"未找到["
+
posName
+
"]的出库任务"
;
if
(
outResult
.
isEmpty
())
{
handleResult
=
false
;
String
msg
=
"未找到["
+
noReelPosName
+
"]的出库任务"
;
log
.
error
(
msg
);
//WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR,"smfclient.nlp.noOutTask",new String[]{posName,storage.getName()}));
}
else
{
outOkList
.
add
(
outResult
)
;
}
else
{
handleResult
=
true
;
}
}
}
}
Map
<
String
,
List
<
String
>>
dataMap
=
new
HashMap
<>();
dataMap
.
put
(
"inOkList"
,
inOkList
);
dataMap
.
put
(
"inNgList"
,
inNgList
);
dataMap
.
put
(
"outOkList"
,
outOkList
);
dataMap
.
put
(
"outNgList"
,
outNgList
);
dataMap
.
put
(
"ngToOk"
,
ngToOk
);
return
ResultBean
.
newOkResult
(
dataMap
);
return
handleResult
;
}
...
...
@@ -496,27 +486,32 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@RequestMapping
(
"/service/store/sensorShelf/shelfStatus"
)
@ResponseBody
@AnonymousAccess
public
ResultBean
shelfStatus
(
HttpServletRequest
request
){
public
ResultBean
shelfStatus
(
HttpServletRequest
request
)
{
String
cid
=
request
.
getParameter
(
"cid"
);
List
<
String
>
posList
=
dataCache
.
getUsedPosNameList
(
cid
);
List
<
String
>
outTaskPosList
=
new
ArrayList
<>();
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
(
cid
);
for
(
DataLog
task
:
queueTasks
)
{
//只发执行中的任务
if
(
task
.
isCheckOutTask
()&&
task
.
isExecuting
())
{
if
(
task
.
isCheckOutTask
()
&&
task
.
isExecuting
())
{
String
rgb
=
task
.
getLightColor
();
ORDER_COLOR
color
=
ORDER_COLOR
.
fromRgb
(
rgb
);
if
(
color
==
null
)
{
if
(
color
==
null
)
{
color
=
ORDER_COLOR
.
BLUE
;
}
String
outTaskPos
=
task
.
getPosName
()
+
"="
+
color
.
name
();
String
outTaskPos
=
task
.
getPosName
()
+
"="
+
color
.
name
();
outTaskPosList
.
add
(
outTaskPos
);
}
}
Map
<
String
,
List
<
String
>>
dataMap
=
new
HashMap
<>();
dataMap
.
put
(
"hasReelPosList"
,
posList
);
dataMap
.
put
(
"outTaskList"
,
outTaskPosList
);
String
hasReelPosColor
=
"orange"
;
// if(lightPosCidList.contains(cid)){
// hasReelPosColor = ORDER_COLOR.LIGHTBLUE.name();
// }
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<>();
dataMap
.
put
(
"hasReelPosList"
,
posList
);
dataMap
.
put
(
"hasReelPosColor"
,
hasReelPosColor
);
dataMap
.
put
(
"outTaskList"
,
outTaskPosList
);
//log.info("客户端获取["+cid+"]库位占用情况返回");
return
ResultBean
.
newOkResult
(
dataMap
);
}
...
...
@@ -527,11 +522,12 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@RequestMapping
(
"/service/store/sensorShelf/hasReelPosList"
)
@ResponseBody
@AnonymousAccess
public
ResultBean
checkAll
(
HttpServletRequest
request
){
public
ResultBean
checkAll
(
HttpServletRequest
request
)
{
String
cid
=
request
.
getParameter
(
"cid"
);
List
<
String
>
posList
=
dataCache
.
getUsedPosNameList
(
cid
);
return
ResultBean
.
newOkResult
(
posList
);
}
@Override
public
DeviceType
getDeviceType
()
{
return
DeviceType
.
NLP
;
...
...
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
查看文件 @
09c282a
...
...
@@ -389,6 +389,7 @@ public class DeviceController {
}
pos
.
setEnabled
(
false
);
storagePosManager
.
save
(
pos
);
dataCache
.
updateDisablePos
(
pos
);
log
.
info
(
"屏蔽库位:库位号["
+
pos
.
getId
()
+
"]["
+
pos
.
getPosName
()
+
"]barcode["
+
barcode
+
"]"
);
DeviceMessageUtil
.
addEnabledPosMessage
(
pos
,
""
);
...
...
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
查看文件 @
09c282a
...
...
@@ -94,6 +94,11 @@ public class DataCache {
*/
private
static
Map
<
String
,
List
<
String
>>
usedPosNameMap
=
new
ConcurrentHashMap
<>();
/**
* 禁用库位名称列表
*/
private
static
Set
<
String
>
disabledPosNameSet
;
@PostConstruct
public
void
initialize
()
{
settings
=
getSettings
();
...
...
@@ -382,6 +387,39 @@ public class DataCache {
}
}
/**
* 获取禁用库位缓存
*/
public
Set
<
String
>
getDisabledPosNameSet
(){
initDisabledPosNameSet
();
return
disabledPosNameSet
;
}
/**
* 初始化禁用库位缓存
*/
private
synchronized
void
initDisabledPosNameSet
(){
if
(
disabledPosNameSet
==
null
){
disabledPosNameSet
=
new
HashSet
<>();
List
<
StoragePos
>
disabledPosList
=
storagePosManager
.
findDisabled
();
for
(
StoragePos
disabledPos
:
disabledPosList
)
{
disabledPosNameSet
.
add
(
disabledPos
.
getPosName
());
}
log
.
info
(
"加载禁用库位缓存,共"
+
disabledPosNameSet
.
size
()
+
"个"
);
}
}
/**
* 更新禁用库位缓存
*/
public
void
updateDisablePos
(
StoragePos
pos
){
initDisabledPosNameSet
();
if
(
pos
.
isEnabled
()){
disabledPosNameSet
.
remove
(
pos
.
getPosName
());
}
else
{
disabledPosNameSet
.
add
(
pos
.
getPosName
());
}
}
/**
* 出库时清除使用库位列表
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
查看文件 @
09c282a
...
...
@@ -225,6 +225,7 @@ public class StoragePosController {
}
pos
.
setEnabled
(
enabledDto
.
isEnabled
());
storagePosManager
.
save
(
pos
);
dataCache
.
updateDisablePos
(
pos
);
log
.
info
(
"启用禁用库位:库位号["
+
pos
.
getId
()
+
"]["
+
pos
.
getPosName
()
+
"]="
+
enabledDto
.
isEnabled
());
DeviceMessageUtil
.
addEnabledPosMessage
(
pos
,
SecurityUtils
.
getCurrentUsername
());
...
...
@@ -254,6 +255,7 @@ public class StoragePosController {
String
enabledStr
=
""
;
if
(
pos
.
isEnabled
()!=
saveDto
.
isEnabled
()){
pos
.
setEnabled
(
saveDto
.
isEnabled
());
dataCache
.
updateDisablePos
(
pos
);
enabledStr
=
saveDto
.
isEnabled
()?
",启用库位"
:
",禁用库位"
;
DeviceMessageUtil
.
addEnabledPosMessage
(
pos
,
SecurityUtils
.
getCurrentUsername
());
}
...
...
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
查看文件 @
09c282a
...
...
@@ -68,4 +68,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
List
<
StoragePos
>
getSameSizeContinuityEmptyPosList
(
Storage
storage
,
Barcode
barcode
)
throws
ValidateException
;
List
<
StoragePos
>
findByBarcodesAndPartNums
(
List
<
String
>
storageIds
,
List
<
String
>
partNums
,
List
<
String
>
reelIds
);
List
<
StoragePos
>
findDisabled
();
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
09c282a
...
...
@@ -598,4 +598,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return
storagePosDao
.
findByQuery
(
query
);
}
@Override
public
List
<
StoragePos
>
findDisabled
(){
Criteria
c
=
Criteria
.
where
(
"enabled"
).
is
(
false
);
//不可用;
Query
query
=
new
Query
(
c
);
return
storagePosDao
.
findByQuery
(
query
);
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论