Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 59765f11
由
zshaohui
编写于
2023-02-15 15:18:33 +0800
浏览文件
选项
浏览文件
标签
下载
差异文件
Merge branch 'master' of
http://106.15.194.121:8083/sunke/smf-core
2 个父辈
6ae91781
c4a633b0
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
276 行增加
和
43 行删除
src/main/java/com/neotel/smfcore/core/device/bean/BoxStatusBean.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/RobotBoxHandler.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/ThirdBoxHandler.java
src/main/java/com/neotel/smfcore/core/storage/service/po/Storage.java
src/main/java/com/neotel/smfcore/custom/micron1053/controller/MicronML5Controller.java
src/main/java/com/neotel/smfcore/custom/micron1053/util/MicronDataCache.java
src/main/java/com/neotel/smfcore/core/device/bean/BoxStatusBean.java
查看文件 @
59765f1
package
com
.
neotel
.
smfcore
.
core
.
device
.
bean
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.core.device.enums.BOX_STATUS
;
import
java.util.HashMap
;
...
...
@@ -148,6 +149,30 @@ public class BoxStatusBean {
return
data
.
get
(
"barcode"
);
}
public
Map
<
String
,
Integer
>
getCapacity
()
{
String
capacity
=
data
.
get
(
"capacity"
);
Map
<
String
,
Integer
>
caMap
=
new
HashMap
<>();
try
{
if
(
ObjectUtil
.
isNotEmpty
(
capacity
))
{
String
[]
arr
=
capacity
.
split
(
";"
);
for
(
String
ar
:
arr
)
{
if
(
ObjectUtil
.
isNotEmpty
(
ar
))
{
String
[]
ar2
=
ar
.
split
(
"="
);
if
(
ar2
.
length
==
2
)
{
caMap
.
put
(
ar2
[
0
],
Integer
.
valueOf
(
ar2
[
1
]));
}
}
}
}
}
catch
(
Exception
ex
)
{
}
return
caMap
;
// boxStatus.data.Add("capacity", "7X8=1000;7X12=345;13X32=100;");
}
/**
* 从data中获取值
*/
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/RobotBoxHandler.java
查看文件 @
59765f1
...
...
@@ -228,9 +228,9 @@ public class RobotBoxHandler extends BaseDeviceHandler {
String
code
=
request
.
getParameter
(
"code"
);
String
cids
=
request
.
getParameter
(
"cids"
);
String
lastPosId
=
""
;
String
lineMsg
=
""
;
log
.
info
(
"流水线["
+
cids
+
"]获取["
+
code
+
"]的入库库位"
);
String
[]
cidArray
=
cids
.
split
(
","
);
Map
<
String
,
Object
>
resultMap
=
Maps
.
newHashMap
();
String
okMsg
=
""
;
String
errorMsg
=
""
;
...
...
@@ -238,19 +238,22 @@ public class RobotBoxHandler extends BaseDeviceHandler {
List
<
String
>
cidList
=
dataCache
.
getAvailableStorageIds
(
this
.
getDeviceType
());
List
<
String
>
thirdList
=
dataCache
.
getAvailableStorageIds
(
DeviceType
.
SMDBOX_THIRD
);
cidList
.
addAll
(
thirdList
);
for
(
String
cid
:
cidList
)
{
String
notIntoCids
=
dataCache
.
getSettings
().
getNotIntoCids
();
if
(
notIntoCids
!=
null
)
{
if
(
notIntoCids
.
contains
(
cid
))
{
log
.
info
(
"料仓["
+
cid
+
"]已被屏蔽入库"
);
continue
;
// for (String cid : cidList) {
for
(
String
cid:
cidArray
)
{
if
(
cidList
.
contains
(
cid
))
{
String
notIntoCids
=
dataCache
.
getSettings
().
getNotIntoCids
();
if
(
notIntoCids
!=
null
)
{
if
(
notIntoCids
.
contains
(
cid
))
{
log
.
info
(
"料仓["
+
cid
+
"]已被屏蔽入库"
);
continue
;
}
}
Storage
storage
=
dataCache
.
getStorage
(
cid
);
if
(
storage
!=
null
)
{
storageList
.
add
(
storage
);
}
}
}
Storage
storage
=
dataCache
.
getStorage
(
cid
);
if
(
storage
!=
null
)
{
storageList
.
add
(
storage
);
}
}
if
(
storageList
.
isEmpty
())
{
resultMap
.
put
(
"result"
,
"99"
);
errorMsg
=
"无可用的料仓"
;
...
...
@@ -305,7 +308,36 @@ public class RobotBoxHandler extends BaseDeviceHandler {
return resultMap;
}*/
StoragePos
pos
=
taskService
.
findEmptyPosForPutIn
(
storageList
,
barcode
,
""
,
lastPosId
);
//根据尺寸获取指定的料仓
// 13*44,13*56,13*72这三个料入到我们的料仓,其他的13寸,15寸都入迈康尼的料仓
int
inStorageType
=
0
;
//0=所有料仓都可以,1=只能入我们料仓。2=只能入麦康尼料仓
if
(
barcode
.
getPlateSize
()==
13
){
if
(
barcode
.
getHeight
()==
44
||
barcode
.
getHeight
()==
56
||
barcode
.
getHeight
()==
72
){
//只能入robot
inStorageType
=
1
;
}
else
{
inStorageType
=
2
;
}
}
else
if
(
barcode
.
getPlateSize
()==
15
){
inStorageType
=
2
;
}
List
<
Storage
>
storages
=
new
ArrayList
<>();
for
(
Storage
storage
:
storageList
)
{
if
(
inStorageType
==
1
){
if
(
storage
.
isRobotBox
())
{
storages
.
add
(
storage
);
}
}
else
if
(
inStorageType
==
2
){
if
(
storage
.
isTHIRDBox
()){
storages
.
add
(
storage
);
}
}
else
{
storages
.
add
(
storage
);
}
}
StoragePos
pos
=
taskService
.
findEmptyPosForPutIn
(
storages
,
barcode
,
""
,
lastPosId
);
if
(
pos
!=
null
)
{
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/ThirdBoxHandler.java
查看文件 @
59765f1
package
com
.
neotel
.
smfcore
.
core
.
device
.
handler
.
impl
;
import
com.google.common.base.Strings
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.bean.BoxStatusBean
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.enums.BOX_STATUS
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.message.util.DeviceMessageUtil
;
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.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.DevicesStatusUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.Collection
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
@Service
@Slf4j
public
class
ThirdBoxHandler
extends
BaseDeviceHandler
{
@Override
public
StatusBean
handleClientRequest
(
StatusBean
statusBean
,
HttpServletRequest
request
)
{
statusBean
.
setClientIp
(
request
.
getRemoteHost
());
String
cid
=
statusBean
.
getCid
();
Storage
storage
=
dataCache
.
getStorage
(
cid
);
if
(
storage
==
null
)
{
log
.
error
(
"料仓cid: ["
+
cid
+
"]不存在"
);
return
null
;
}
statusBean
.
setClientIp
(
request
.
getRemoteHost
());
handleMsg
(
statusBean
);
statusBean
=
saveAlarmAndHumidity
(
statusBean
);
statusBean
=
handle
InOut
Finished
(
statusBean
);
statusBean
=
handleFinished
(
statusBean
);
StatusBean
humidityResult
=
handleHumidity
(
statusBean
);
if
(
humidityResult
!=
null
)
{
return
humidityResult
;
...
...
@@ -33,15 +48,163 @@ public class ThirdBoxHandler extends BaseDeviceHandler{
if
(
statusBean
.
getOp
()
==
OP
.
PUT_IN
)
{
log
.
debug
(
"入库:"
+
statusBean
.
toString
());
statusBean
=
putInLine
(
storage
,
statusBean
);
//判断是否有放在门口状态的入库任务
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
();
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
getCid
().
equals
(
statusBean
.
getCid
())
&&
queueTask
.
isPutInTask
()
&&
queueTask
.
isBoxdoor
())
{
String
posId
=
queueTask
.
getPosName
();
String
reelId
=
queueTask
.
getBarcode
();
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
reelId
);
int
plateW
=
barcode
.
getPlateSize
();
int
plateH
=
barcode
.
getHeight
();
statusBean
.
addPosInfo
(
reelId
,
posId
,
plateW
,
plateH
,
false
);
log
.
info
(
reelId
+
"["
+
plateW
+
"x"
+
plateH
+
"]开始入库到"
+
storage
.
getCid
()
+
"["
+
posId
+
"]"
);
return
statusBean
;
}
}
//statusBean = putInLine(storage, statusBean);
}
else
{
//查看是否有要出库的操作
statusBean
=
taskService
.
checkOut
(
storage
,
statusBean
);
statusBean
=
findCheckOutTask
(
storage
,
statusBean
);
}
//获取操作
Map
<
String
,
String
>
opMap
=
DevicesStatusUtil
.
getAndRemoveOp
(
cid
);
statusBean
.
putOp
(
opMap
);
return
statusBean
;
}
/**
* 出库处理
*/
public
StatusBean
findCheckOutTask
(
Storage
storage
,
StatusBean
statusBean
)
{
try
{
//准备更新暂停出入库
if
(
dataCache
.
getCache
(
Constants
.
CACHE_StopOut
))
{
return
statusBean
;
}
String
cid
=
statusBean
.
getCid
();
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
();
int
executingOutTaskSize
=
0
;
DataLog
outTask
=
null
;
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
getCid
().
equals
(
cid
))
{
//有入库任务不分配出库任务
if
(
queueTask
.
isPutInTask
())
{
return
statusBean
;
}
else
{
if
(
queueTask
.
isExecuting
())
{
executingOutTaskSize
++;
//已经有出库任务正在执行,超过60秒仍未完成的出库再次发送到客户端
if
(
queueTask
.
needReSendToClient
())
{
outTask
=
queueTask
;
log
.
error
(
"cid["
+
cid
+
"]的出库任务["
+
queueTask
.
getPosName
()
+
"]超过60秒仍未完成,重新发送到客户端!"
);
queueTask
.
setUpdateDate
(
new
Date
());
break
;
}
}
else
if
(
queueTask
.
isWait
())
{
if
(
executingOutTaskSize
>=
2
)
{
//log.error("cid["+cid + "]的BOX["+ boxId+"]的出库任务已经超过2个,不再分配!");
outTask
=
null
;
break
;
}
outTask
=
queueTask
;
if
(
queueTask
.
isUrgentReel
())
{
break
;
}
}
}
}
}
if
(
outTask
!=
null
)
{
log
.
info
(
"分配出库任务"
+
outTask
.
getBarcode
()
+
"["
+
outTask
.
getPosName
()
+
"]到 "
+
cid
);
outTask
.
setStatus
(
OP_STATUS
.
EXECUTING
.
name
());
taskService
.
updateQueueTask
(
outTask
);
statusBean
.
setOp
(
OP
.
CHECKOUT
);
String
posName
=
outTask
.
getPosName
();
Barcode
codeObj
=
barcodeManager
.
findByBarcode
(
outTask
.
getBarcode
());
int
plateW
=
0
;
int
plateH
=
0
;
if
(
codeObj
!=
null
)
{
plateW
=
codeObj
.
getPlateSize
();
plateH
=
codeObj
.
getHeight
();
}
else
{
log
.
warn
(
"出库无料仓位"
+
storage
.
getName
()
+
"["
+
posName
+
"]"
);
}
statusBean
.
addPosInfo
(
outTask
.
getBarcode
(),
posName
,
plateW
,
plateH
,
false
);
log
.
info
(
"出库"
+
storage
.
getName
()
+
"["
+
posName
+
"]物料["
+
outTask
.
getBarcode
()
+
"] 发送到客户端"
+
cid
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"出库出错"
,
e
);
}
return
statusBean
;
}
protected
StatusBean
handleFinished
(
StatusBean
statusBean
)
{
Map
<
String
,
BoxStatusBean
>
statusOfBoxes
=
statusBean
.
getBoxStatus
();
if
(
statusOfBoxes
!=
null
)
{
for
(
BoxStatusBean
boxStatus
:
statusOfBoxes
.
values
())
{
try
{
//出库入库完成处理
int
status
=
boxStatus
.
getStatus
();
String
posName
=
boxStatus
.
getPosId
();
String
barcode
=
boxStatus
.
getBarcode
();
int
executeTime
=
boxStatus
.
getExecuteTime
();
if
((!
Strings
.
isNullOrEmpty
(
posName
))||(!
Strings
.
isNullOrEmpty
(
barcode
)))
{
//客户端发一次完成之后,会发空的 posName,不需要处理
if
(
BOX_STATUS
.
IN_FINISHED
==
status
)
{
//入仓完成
finishedPutIn
(
statusBean
.
getCid
(),
posName
,
barcode
,
executeTime
);
}
else
if
(
BOX_STATUS
.
IN_FAILED
==
status
)
{
//入库失败
//暂不处理
}
else
if
(
BOX_STATUS
.
OUT_FINISHED
==
status
)
{
//出仓完成
finishedOutPos
(
statusBean
.
getCid
(),
posName
,
barcode
,
executeTime
);
}
else
if
(
BOX_STATUS
.
OUT_END
==
status
)
{
//出库完成(放到仓门口
//更改出库状态为OUT_DOOR
List
<
DataLog
>
finishedTasks
=
taskService
.
getFinishedTasks
();
for
(
DataLog
finishedTask
:
finishedTasks
)
{
if
(
finishedTask
.
getCid
().
equals
(
statusBean
.
getCid
())
&&
finishedTask
.
isCheckOutTask
()
&&
finishedTask
.
isOutBox
())
{
if
(
posName
.
equals
(
finishedTask
.
getPosName
()))
{
//已出仓但未放到门口,更改状态
finishedTask
.
setStatus
(
OP_STATUS
.
BOXDOOR
.
name
());
taskService
.
updateFinishedTask
(
finishedTask
);
log
.
info
(
"物料"
+
finishedTask
.
getBarcode
()
+
"已从库位"
+
finishedTask
.
getPosName
()
+
"取出放到门口"
);
return
statusBean
;
}
}
}
log
.
error
(
posName
+
"出库放到门口时,未找到对应的出库任务"
);
}
else
if
(
BOX_STATUS
.
OUT_FAILED
==
status
)
{
//更改出库状态为OUT_DOOR
List
<
DataLog
>
finishedTasks
=
taskService
.
getFinishedTasks
();
for
(
DataLog
finishedTask
:
finishedTasks
)
{
if
(
finishedTask
.
getCid
().
equals
(
statusBean
.
getCid
())
&&
finishedTask
.
isCheckOutTask
()
&&
finishedTask
.
isOutBox
())
{
if
(
posName
.
equals
(
finishedTask
.
getPosName
()))
{
//已出仓但未放到门口,更改状态
finishedTask
.
setStatus
(
OP_STATUS
.
BOXDOOR_NOREEL
.
name
());
log
.
info
(
"物料"
+
finishedTask
.
getBarcode
()
+
"已从库位"
+
finishedTask
.
getPosName
()
+
"取出放到门口,但未感应到料盘,屏蔽库位"
);
StoragePos
pos
=
storagePosManager
.
getByPosName
(
finishedTask
.
getPosName
());
if
(
pos
!=
null
)
{
pos
.
setEnabled
(
false
);
storagePosManager
.
save
(
pos
);
DeviceMessageUtil
.
addEnabledPosMessage
(
pos
,
"SYSTEM"
);
}
taskService
.
updateFinishedTask
(
finishedTask
);
return
statusBean
;
}
}
}
}
}
}
catch
(
ValidateException
e
)
{
log
.
error
(
"更新状态时出错"
+
e
.
getMessage
());
}
}
}
return
statusBean
;
}
@Override
...
...
src/main/java/com/neotel/smfcore/core/storage/service/po/Storage.java
查看文件 @
59765f1
...
...
@@ -312,4 +312,7 @@ public class Storage extends BasePo implements Serializable {
public
boolean
isRobotBox
()
{
return
DeviceType
.
ROBOT_BOX
.
name
().
equals
(
type
);
}
public
boolean
isTHIRDBox
()
{
return
DeviceType
.
SMDBOX_THIRD
.
name
().
equals
(
type
);
}
}
src/main/java/com/neotel/smfcore/custom/micron1053/controller/MicronML5Controller.java
查看文件 @
59765f1
...
...
@@ -33,11 +33,11 @@ public class MicronML5Controller {
@GetMapping
(
"/status"
)
@AnonymousAccess
public
ML5StatusDto
ml5Status
(
)
{
ML5StatusDto
dto
=
new
ML5StatusDto
();
MicronEquipStatus
r1
=
MicronDataCache
.
getStatus
(
MicronEquipName
.
ML5_R1
.
getName
());
MicronEquipStatus
r2
=
MicronDataCache
.
getStatus
(
MicronEquipName
.
ML5_R2
.
getName
());
MicronEquipStatus
l1
=
MicronDataCache
.
getStatus
(
MicronEquipName
.
ML5_L1
.
getName
());
MicronEquipStatus
l2
=
MicronDataCache
.
getStatus
(
MicronEquipName
.
ML5_L2
.
getName
());
ML5StatusDto
dto
=
new
ML5StatusDto
();
MicronEquipStatus
r1
=
MicronDataCache
.
getStatus
(
MicronEquipName
.
ML5_R1
.
getName
());
MicronEquipStatus
r2
=
MicronDataCache
.
getStatus
(
MicronEquipName
.
ML5_R2
.
getName
());
MicronEquipStatus
l1
=
MicronDataCache
.
getStatus
(
MicronEquipName
.
ML5_L1
.
getName
());
MicronEquipStatus
l2
=
MicronDataCache
.
getStatus
(
MicronEquipName
.
ML5_L2
.
getName
());
dto
.
setL1Status
(
l1
.
getStatus
());
dto
.
setL2Status
(
l2
.
getStatus
());
...
...
@@ -46,27 +46,37 @@ public class MicronML5Controller {
dto
.
setNg1Count
(
l1
.
getNgCount
());
dto
.
setNg2Count
(
r1
.
getNgCount
());
List
<
EquipMsg
>
msgs
=
new
ArrayList
<>();
msgs
.
addAll
(
r1
.
getMsgList
());
msgs
.
addAll
(
r2
.
getMsgList
());
msgs
.
addAll
(
l1
.
getMsgList
());
msgs
.
addAll
(
l2
.
getMsgList
());
dto
.
setMsgList
(
msgs
);
List
<
EquipMsg
>
msgs
=
new
ArrayList
<>();
if
(
r1
.
getMsgList
()
!=
null
&&
r1
.
getMsgList
().
size
()
>
0
)
{
msgs
.
addAll
(
r1
.
getMsgList
());
}
if
(
r2
.
getMsgList
()
!=
null
&&
r2
.
getMsgList
().
size
()
>
0
)
{
msgs
.
addAll
(
r2
.
getMsgList
());
}
if
(
l1
.
getMsgList
()
!=
null
&&
l1
.
getMsgList
().
size
()
>
0
)
{
msgs
.
addAll
(
l1
.
getMsgList
());
}
if
(
l2
.
getMsgList
()
!=
null
&&
l2
.
getMsgList
().
size
()
>
0
)
{
msgs
.
addAll
(
l2
.
getMsgList
());
}
if
(
msgs
.
size
()
>
0
)
{
dto
.
setMsgList
(
msgs
);
}
Map
<
String
,
Integer
>
needShelfs
=
new
HashMap
<>();
List
<
DataLog
>
dataLogs
=
taskService
.
getAllTasks
();
for
(
DataLog
task
:
dataLogs
Map
<
String
,
Integer
>
needShelfs
=
new
HashMap
<>();
List
<
DataLog
>
dataLogs
=
taskService
.
getAllTasks
();
for
(
DataLog
task
:
dataLogs
)
{
String
taskType
=
MicronDataCache
.
GetMaterialType
(
task
);
String
shelf
=
MicronDataCache
.
getShelfType
(
taskType
);
if
(
needShelfs
.
containsKey
(
shelf
))
{
int
newCount
=
needShelfs
.
get
(
shelf
)+
1
;
needShelfs
.
put
(
shelf
,
newCount
);
}
else
{
needShelfs
.
put
(
shelf
,
1
);
String
taskType
=
MicronDataCache
.
GetMaterialType
(
task
);
String
shelf
=
MicronDataCache
.
getShelfType
(
taskType
);
if
(
needShelfs
.
containsKey
(
shelf
))
{
int
newCount
=
needShelfs
.
get
(
shelf
)
+
1
;
needShelfs
.
put
(
shelf
,
newCount
);
}
else
{
needShelfs
.
put
(
shelf
,
1
);
}
}
if
(
needShelfs
.
size
()>
0
)
{
if
(
needShelfs
.
size
()
>
0
)
{
dto
.
setNeedShelfs
(
needShelfs
);
}
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/util/MicronDataCache.java
查看文件 @
59765f1
...
...
@@ -94,7 +94,7 @@ public class MicronDataCache {
}
else
if
(
materialType
.
equals
(
TRAY
)){
return
"M03"
;
}
return
""
;
return
"
S007
"
;
}
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论