Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 0e213b16
由
LN
编写于
2024-03-11 16:52:36 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
增加mimoG2
1 个父辈
7b9fe679
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
181 行增加
和
2 行删除
src/main/java/com/neotel/smfcore/core/device/handler/impl/MimoG2BoxHandler.java
src/main/java/com/neotel/smfcore/core/storage/enums/DeviceType.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/MimoG2BoxHandler.java
0 → 100644
查看文件 @
0e213b1
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.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
com.neotel.smfcore.custom.djk20388.util.AgvDataUtil
;
import
io.swagger.annotations.Api
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.Collection
;
import
java.util.Map
;
@Api
(
tags
=
"MIMOG2: 批量料仓"
)
@Service
@Slf4j
public
class
MimoG2BoxHandler
extends
BaseDeviceHandler
{
@Override
public
StatusBean
handleClientRequest
(
StatusBean
statusBean
,
HttpServletRequest
request
)
{
String
cid
=
statusBean
.
getCid
();
Storage
storage
=
dataCache
.
getStorage
(
cid
);
if
(
storage
==
null
)
{
log
.
error
(
"料仓cid: ["
+
cid
+
"]不存在"
);
return
null
;
}
statusBean
.
setClientIp
(
request
.
getRemoteHost
());
handleMsg
(
statusBean
);
// if(ObjectUtil.isNotEmpty(statusBean.getMsg())){
// log.info("cid["+cid+"],msgCode["+statusBean.getMsgCode()+"],msg["+statusBean.getMsg()+"]");
// }
statusBean
=
saveAlarmAndHumidity
(
statusBean
);
statusBean
=
handleInOutFinished
(
statusBean
);
StatusBean
humidityResult
=
handleHumidity
(
statusBean
);
statusBean
=
handleSelfAudit
(
statusBean
);
if
(
humidityResult
!=
null
)
{
return
humidityResult
;
}
if
(
statusBean
.
getOp
()
==
OP
.
PUT_IN
)
{
log
.
debug
(
"入库:"
+
statusBean
.
toString
());
statusBean
=
putInLine
(
storage
,
statusBean
);
}
else
{
//先查找紧急出库的物料
StatusBean
outSingleTaskResult
=
outSingleOutTask
(
storage
,
statusBean
);
if
(
outSingleTaskResult
!=
null
){
statusBean
=
outSingleTaskResult
;
}
else
{
//查看是否有要出库的操作
statusBean
=
taskService
.
checkOut
(
storage
,
statusBean
);
}
}
//获取操作
Map
<
String
,
String
>
opMap
=
DevicesStatusUtil
.
getAndRemoveOp
(
cid
);
statusBean
.
putOp
(
opMap
);
//agv附加操作
Map
<
String
,
String
>
agvToMimoOpMap
=
AgvDataUtil
.
getAndRemoveToMimoOp
(
cid
);
statusBean
.
putOp
(
agvToMimoOpMap
);
return
statusBean
;
}
@Override
protected
StatusBean
handleInOutFinished
(
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
,
OP_STATUS
.
OUT_BOX
);
}
else
if
(
BOX_STATUS
.
OUT_END
==
status
)
{
//出库完成(放到仓门口
endOutTask
(
statusBean
.
getCid
(),
posName
,
barcode
);
}
}
}
catch
(
ValidateException
e
)
{
log
.
error
(
"更新状态时出错"
+
e
.
getMessage
());
}
}
}
return
statusBean
;
}
/**
* 出库紧急物料
*/
public
StatusBean
outSingleOutTask
(
Storage
storage
,
StatusBean
statusBean
)
{
try
{
//准备更新暂停出入库
if
(
dataCache
.
getCache
(
Constants
.
CACHE_StopOut
))
{
return
statusBean
;
}
String
cid
=
storage
.
getCid
();
//紧急出库任务不论是否有入库任务都发到客户端,由客户端在入库间隙进行出库
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
();
int
excuttingOutTaskNum
=
0
;
DataLog
singleOutTask
=
null
;
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
isCheckOutTask
()){
if
(
cid
.
equals
(
queueTask
.
getCid
()))
{
if
(
queueTask
.
isExecuting
()){
excuttingOutTaskNum
++;
}
if
(
queueTask
.
isSingleOut
()
&&
queueTask
.
isWait
())
{
//单盘优先出库
if
(
singleOutTask
==
null
||
queueTask
.
getCreateDate
().
before
(
singleOutTask
.
getCreateDate
()))
{
singleOutTask
=
queueTask
;
}
}
}
}
}
//已经有2个出库任务在执行,不再发了
if
(
excuttingOutTaskNum
<
2
){
if
(
singleOutTask
!=
null
)
{
log
.
info
(
"MIMO料仓优先分配紧急出库任务"
+
singleOutTask
.
getBarcode
()
+
"["
+
singleOutTask
.
getPosName
()
+
"]到 "
+
cid
);
singleOutTask
.
setStatus
(
OP_STATUS
.
EXECUTING
.
name
());
taskService
.
updateQueueTask
(
singleOutTask
);
statusBean
.
setOp
(
OP
.
CHECKOUT
);
String
posName
=
singleOutTask
.
getPosName
();
Barcode
codeObj
=
barcodeManager
.
findByBarcode
(
singleOutTask
.
getBarcode
());
int
plateW
=
0
;
int
plateH
=
0
;
if
(
codeObj
!=
null
)
{
plateW
=
codeObj
.
getPlateSize
();
plateH
=
codeObj
.
getHeight
();
}
else
{
log
.
warn
(
"MIMO紧急出库无料仓位"
+
storage
.
getName
()
+
"["
+
posName
+
"]"
);
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
plateW
=
pos
.
getW
();
plateH
=
pos
.
getH
();
}
statusBean
.
addPosInfo
(
singleOutTask
.
getBarcode
(),
posName
,
plateW
,
plateH
,
true
);
log
.
info
(
"出库紧急物料"
+
storage
.
getName
()
+
"["
+
posName
+
"]物料["
+
singleOutTask
.
getBarcode
()
+
"]"
+
"发送到客户端"
+
cid
);
return
statusBean
;
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"出库紧急物料出错"
,
e
);
}
return
null
;
}
@Override
public
DeviceType
getDeviceType
()
{
return
DeviceType
.
SMD_MIMO_G2
;
}
}
src/main/java/com/neotel/smfcore/core/storage/enums/DeviceType.java
查看文件 @
0e213b1
...
...
@@ -137,7 +137,13 @@ public enum DeviceType {
/**
* 22 钢网料架 NLS
*/
NLS
(
"storage.type.nls"
);
NLS
(
"storage.type.nls"
),
/**
* 23 SMD_MIMO_G2
*/
SMD_MIMO_G2
(
"storage.type.smdMimoG2"
)
;
private
String
key
;
...
...
@@ -158,6 +164,6 @@ public enum DeviceType {
}
public
static
List
<
DeviceType
>
availableTypeList
(){
return
Lists
.
newArrayList
(
AUTO
,
LINE
,
BATCH
,
SOLDERPASTE
,
VERTICALBOX
,
SMD_XL
,
SMD_DUO
,
SMD_XLC
,
SMD_XLR
,
VIRTUAL
,
NL
,
NLP
,
NLM
,
NLL
,
NLS
,
SMDBOX_THIRD
);
return
Lists
.
newArrayList
(
AUTO
,
LINE
,
BATCH
,
SOLDERPASTE
,
VERTICALBOX
,
SMD_XL
,
SMD_DUO
,
SMD_XLC
,
SMD_XLR
,
VIRTUAL
,
NL
,
NLP
,
NLM
,
NLL
,
NLS
,
SMDBOX_THIRD
,
SMD_MIMO_G2
);
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论