Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit bebb1b14
由
LN
编写于
2024-01-12 16:44:55 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
NS200看板
1 个父辈
fefb6495
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
170 行增加
和
33 行删除
src/main/java/com/neotel/smfcore/core/dashboard/box/SmdBoxController.java
src/main/java/com/neotel/smfcore/core/equipment/bean/EquipStatusBean.java
src/main/java/com/neotel/smfcore/core/equipment/handler/impl/BaseEquipHandler.java
src/main/java/com/neotel/smfcore/core/equipment/rest/EquipCommunicationController.java
src/main/java/com/neotel/smfcore/core/equipment/rest/EquipViewController.java
src/main/java/com/neotel/smfcore/core/equipment/rest/dto/NsViewDto.java
src/main/java/com/neotel/smfcore/core/equipment/service/po/Equipment.java
src/main/java/com/neotel/smfcore/core/solder/rest/SpBoxController.java
src/main/java/com/neotel/smfcore/core/system/util/DevicesStatusUtil.java
src/main/java/com/neotel/smfcore/core/system/util/EquipStatusUtil.java
src/main/java/com/neotel/smfcore/custom/duo/DuoController.java → src/main/java/com/neotel/smfcore/custom/deif20861/DEIF20861Controller.java
src/main/java/com/neotel/smfcore/core/dashboard/box/SmdBoxController.java
查看文件 @
bebb1b1
...
...
@@ -2,7 +2,9 @@ package com.neotel.smfcore.core.dashboard.box;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.JsonUtil
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto
;
import
com.neotel.smfcore.core.dashboard.bean.dto.first.ElecKanbanBoxStatusDto
;
import
com.neotel.smfcore.core.device.bean.BoxStatusBean
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
...
...
@@ -142,6 +144,10 @@ public class SmdBoxController {
dto
.
setMinTemperature
(
msdSettiings
.
getMinTemperature
());
dto
.
setMaxTemperature
(
msdSettiings
.
getMaxTemperature
());
dto
.
setUsageMap
(
storage
.
getUsageMap
());
MesInfoDto
mesInfoDto
=
DevicesStatusUtil
.
getLastAgvInfo
(
cid
);
if
(
mesInfoDto
!=
null
){
dto
.
getData
().
put
(
"AGV"
,
JsonUtil
.
toJsonStr
(
mesInfoDto
));
}
resultList
.
add
(
dto
);
}
return
resultList
;
...
...
src/main/java/com/neotel/smfcore/core/equipment/bean/EquipStatusBean.java
查看文件 @
bebb1b1
...
...
@@ -55,9 +55,20 @@ public class EquipStatusBean implements Serializable {
* key=tPCount,value=今天已打印数量
* key=tNGCount,value=今天NG数量
* key=MES,value=MES最后一次对接信息:格式参考NsMesInfo
*
* key=inShelfStatus ,value=入口料串状态:
* key=outShelfStatus ,value=出口料串状态:
*/
private
Map
<
String
,
Object
>
data
=
new
HashMap
<>();
// 料串状态定义 IDLE=空闲;
// LOADING=入库中;
// UNLOADING=出库中;
// NEED_EMPTY=需要空料串出库;
// EMPTY_OUT=空料串需要取走
// FULL_OUT=满料串需要取走
/**
* 离线时间,用于判断是否已经处理过离线
*/
...
...
src/main/java/com/neotel/smfcore/core/equipment/handler/impl/BaseEquipHandler.java
查看文件 @
bebb1b1
...
...
@@ -2,9 +2,9 @@ package com.neotel.smfcore.core.equipment.handler.impl;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.core.agv.util.AgvCache
;
import
com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto
;
import
com.neotel.smfcore.core.equipment.bean.EquipMsg
;
import
com.neotel.smfcore.core.equipment.bean.EquipStatusBean
;
import
com.neotel.smfcore.core.equipment.bean.ns.NsMesInfo
;
import
com.neotel.smfcore.core.equipment.enums.EquipmentType
;
import
com.neotel.smfcore.core.equipment.handler.IEquipmentHandler
;
import
com.neotel.smfcore.core.message.util.DeviceMessageUtil
;
...
...
@@ -77,7 +77,7 @@ public class BaseEquipHandler implements IEquipmentHandler {
if
(
statusBean
.
getData
().
containsKey
(
"MES"
))
{
try
{
NsMesInfo
mesInfo
=
(
NsMesInf
o
)
statusBean
.
getData
().
get
(
"MES"
);
MesInfoDto
mesInfo
=
(
MesInfoDt
o
)
statusBean
.
getData
().
get
(
"MES"
);
if
(
mesInfo
!=
null
){
EquipStatusUtil
.
updateNsMesInfo
(
statusBean
.
getCid
(),
mesInfo
);
}
...
...
src/main/java/com/neotel/smfcore/core/equipment/rest/EquipCommunicationController.java
查看文件 @
bebb1b1
package
com
.
neotel
.
smfcore
.
core
.
equipment
.
rest
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.equipment.util.EquipmentCache
;
import
com.neotel.smfcore.core.equipment.bean.EquipStatusBean
;
...
...
@@ -53,10 +54,19 @@ public class EquipCommunicationController {
return
null
;
}
}
else
{
if
(
StringUtils
.
isNotBlank
(
name
)){
if
(!
name
.
equals
(
equipment
.
getName
())){
if
(
StringUtils
.
isNotBlank
(
name
))
{
if
(!
name
.
equals
(
equipment
.
getName
()))
{
log
.
info
(
"自动修改设备 cid["
+
equipment
.
getCid
()
+
"] name["
+
equipment
.
getName
()
+
"] 的名字为="
+
name
);
equipment
.
setName
(
name
);
equipment
=
equipmentCache
.
reloadEquipment
(
equipment
,
equipment
.
getCid
());
equipment
=
equipmentCache
.
reloadEquipment
(
equipment
,
equipment
.
getCid
());
}
}
String
type
=
statusBean
.
getType
();
if
(
ObjectUtil
.
isNotEmpty
(
type
))
{
if
(!
type
.
equals
(
equipment
.
getType
()))
{
log
.
info
(
"自动修改设备 cid["
+
equipment
.
getCid
()
+
"] type ["
+
equipment
.
getType
()
+
"] 的类型为="
+
type
);
equipment
.
setType
(
type
);
equipment
=
equipmentCache
.
reloadEquipment
(
equipment
,
equipment
.
getCid
());
}
}
}
...
...
src/main/java/com/neotel/smfcore/core/equipment/rest/EquipViewController.java
查看文件 @
bebb1b1
package
com
.
neotel
.
smfcore
.
core
.
equipment
.
rest
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.equipment.bean.ns.NsMesInfo
;
import
com.neotel.smfcore.core.equipment.rest.dto.NsViewDto
;
import
com.neotel.smfcore.core.equipment.util.EquipmentCache
;
import
com.neotel.smfcore.core.equipment.bean.EquipMsg
;
...
...
@@ -86,12 +86,12 @@ public class EquipViewController {
return
resultList
;
}
@ApiOperation
(
"获取看板数据"
)
@ApiOperation
(
"获取
NS
看板数据"
)
@GetMapping
(
"nsView"
)
@PreAuthorize
(
"@el.check('equipmentView:info')"
)
public
NsViewDto
nsView
(
String
cid
,
HttpServletRequest
servletRequest
){
Equipment
equip
=
equipmentCache
.
getEquipment
(
cid
);
if
(
equip
==
null
)
{
if
(
equip
==
null
||(!
equip
.
isNEOSCAN
())
)
{
throw
new
ValidateException
(
"smfcore.equip.notExist"
,
"设备不存在"
);
}
NsViewDto
dto
=
new
NsViewDto
();
...
...
@@ -107,13 +107,26 @@ public class EquipViewController {
dto
.
setMsg
(
bean
.
getShowMsg
(
servletRequest
.
getLocale
()));
dto
.
setData
(
bean
.
getData
());
dto
.
setShowLogs
(
bean
.
getMsgList
());
NsMesInf
o
mesInfo
=
EquipStatusUtil
.
getNsMesInfo
(
cid
);
MesInfoDt
o
mesInfo
=
EquipStatusUtil
.
getNsMesInfo
(
cid
);
if
(
mesInfo
!=
null
){
dto
.
setMesInfo
(
mesInfo
);
}
}
}
if
(
dto
.
getShowLogs
().
size
()<=
0
){
EquipMsg
msg
=
new
EquipMsg
();
msg
.
setModule
(
"module1"
);
msg
.
setMsg
(
"msg1111111111111111111"
);
dto
.
getShowLogs
().
add
(
msg
);
}
if
(
dto
.
getMesInfo
()==
null
){
MesInfoDto
mesInfoDto
=
EquipStatusUtil
.
getLastAgvInfo
(
cid
);
if
(
mesInfoDto
!=
null
){
dto
.
setAgvInfo
(
mesInfoDto
);
}
}
return
dto
;
}
...
...
src/main/java/com/neotel/smfcore/core/equipment/rest/dto/NsViewDto.java
查看文件 @
bebb1b1
package
com
.
neotel
.
smfcore
.
core
.
equipment
.
rest
.
dto
;
import
com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto
;
import
com.neotel.smfcore.core.equipment.bean.EquipMsg
;
import
com.neotel.smfcore.core.equipment.bean.ns.NsMesInfo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
@@ -29,7 +29,10 @@ public class NsViewDto implements Serializable {
@ApiModelProperty
(
"Mes信息"
)
private
NsMesInfo
mesInfo
=
null
;
private
MesInfoDto
mesInfo
=
null
;
@ApiModelProperty
(
"agv通信信息"
)
private
MesInfoDto
agvInfo
=
null
;
@ApiModelProperty
(
"仅显示的日志消息集合"
)
private
List
<
EquipMsg
>
showLogs
=
new
ArrayList
<>();
...
...
src/main/java/com/neotel/smfcore/core/equipment/service/po/Equipment.java
查看文件 @
bebb1b1
...
...
@@ -26,4 +26,8 @@ public class Equipment extends BasePo implements Serializable {
* 是否可用
*/
private
boolean
available
=
true
;
public
boolean
isNEOSCAN
()
{
return
EquipmentType
.
NEOSCAN
.
name
().
equals
(
type
);
}
}
src/main/java/com/neotel/smfcore/core/solder/rest/SpBoxController.java
查看文件 @
bebb1b1
...
...
@@ -266,7 +266,7 @@ public class SpBoxController {
return
new
ArrayList
<>();
}
Storage
storage
=
dataCache
.
getStorageById
(
storageId
);
if
(!
storage
.
isSolderPaste
())
{
if
(
storage
==
null
||
!
storage
.
isSolderPaste
())
{
return
new
ArrayList
<>();
}
Criteria
c
=
Criteria
.
where
(
"storageId"
).
is
(
storageId
)
...
...
src/main/java/com/neotel/smfcore/core/system/util/DevicesStatusUtil.java
查看文件 @
bebb1b1
package
com
.
neotel
.
smfcore
.
core
.
system
.
util
;
import
cn.hutool.core.date.DateTime
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.collect.Maps
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto
;
import
com.neotel.smfcore.core.device.bean.MsgInfo
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.message.enums.MessageType
;
...
...
@@ -10,6 +12,7 @@ import com.neotel.smfcore.core.message.util.DeviceMessageUtil;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
...
...
@@ -259,4 +262,26 @@ public class DevicesStatusUtil {
log
.
error
(
"设备状态定时器执行出错:"
,
ex
);
}
}
private
static
Map
<
String
,
MesInfoDto
>
lastAgvMesMap
=
new
HashMap
<>();
public
static
void
UpdateAgvInfo
(
String
key
,
String
request
,
String
response
,
String
status
){
MesInfoDto
mesInfo
=
new
MesInfoDto
(
status
,
DateTime
.
now
(),
request
,
response
);
if
(
ObjectUtil
.
isEmpty
(
key
)){
key
=
""
;
}
lastAgvMesMap
.
put
(
key
,
mesInfo
);
}
public
static
MesInfoDto
getLastAgvInfo
(
String
key
)
{
if
(
lastAgvMesMap
.
containsKey
(
key
))
{
return
lastAgvMesMap
.
get
(
key
);
}
return
lastAgvMesMap
.
get
(
""
);
}
}
src/main/java/com/neotel/smfcore/core/system/util/EquipStatusUtil.java
查看文件 @
bebb1b1
package
com
.
neotel
.
smfcore
.
core
.
system
.
util
;
import
cn.hutool.core.date.DateTime
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.collect.Maps
;
import
com.neotel.smfcore.core.dashboard.bean.dto.box.MesInfoDto
;
import
com.neotel.smfcore.core.equipment.bean.EquipStatusBean
;
import
com.neotel.smfcore.core.equipment.bean.ns.NsMesInfo
;
import
com.neotel.smfcore.core.message.util.DeviceMessageUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
@Slf4j
public
class
EquipStatusUtil
{
...
...
@@ -22,7 +20,7 @@ public class EquipStatusUtil {
/**
* NS设备最后一次MES通信信息(key 为 cid,value是最后一次MesInfo)
*/
private
static
Map
<
String
,
NsMesInf
o
>
NsMesInfoMap
=
Maps
.
newConcurrentMap
();
private
static
Map
<
String
,
MesInfoDt
o
>
NsMesInfoMap
=
Maps
.
newConcurrentMap
();
/**
...
...
@@ -41,7 +39,7 @@ public class EquipStatusUtil {
}
public
static
void
updateNsMesInfo
(
String
cid
,
NsMesInf
o
nsMesInfo
)
{
public
static
void
updateNsMesInfo
(
String
cid
,
MesInfoDt
o
nsMesInfo
)
{
if
(
nsMesInfo
==
null
){
return
;
}
...
...
@@ -51,8 +49,8 @@ public class EquipStatusUtil {
NsMesInfoMap
.
put
(
cid
,
nsMesInfo
);
}
public
static
NsMesInf
o
getNsMesInfo
(
String
cid
){
NsMesInf
o
mesInfo
=
NsMesInfoMap
.
get
(
cid
);
public
static
MesInfoDt
o
getNsMesInfo
(
String
cid
){
MesInfoDt
o
mesInfo
=
NsMesInfoMap
.
get
(
cid
);
return
mesInfo
;
}
...
...
@@ -84,4 +82,24 @@ public class EquipStatusUtil {
log
.
error
(
"设备状态定时器执行出错:"
,
ex
);
}
}
private
static
Map
<
String
,
MesInfoDto
>
lastAgvMesMap
=
new
HashMap
<>();
public
static
void
UpdateAgvInfo
(
String
key
,
String
request
,
String
response
,
String
status
){
MesInfoDto
mesInfo
=
new
MesInfoDto
(
status
,
DateTime
.
now
(),
request
,
response
);
if
(
ObjectUtil
.
isEmpty
(
key
)){
key
=
""
;
}
lastAgvMesMap
.
put
(
key
,
mesInfo
);
}
public
static
MesInfoDto
getLastAgvInfo
(
String
key
)
{
if
(
lastAgvMesMap
.
containsKey
(
key
))
{
return
lastAgvMesMap
.
get
(
key
);
}
return
lastAgvMesMap
.
get
(
""
);
}
}
src/main/java/com/neotel/smfcore/custom/d
uo/Duo
Controller.java
→
src/main/java/com/neotel/smfcore/custom/d
eif20861/DEIF20861
Controller.java
查看文件 @
bebb1b1
package
com
.
neotel
.
smfcore
.
custom
.
d
uo
;
package
com
.
neotel
.
smfcore
.
custom
.
d
eif20861
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.collect.Lists
;
...
...
@@ -8,9 +8,11 @@ import com.neotel.smfcore.common.utils.StorageConstants;
import
com.neotel.smfcore.core.device.bean.BoxStatusBean
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.storage.bean.UsageItem
;
import
com.neotel.smfcore.core.equipment.service.po.Equipment
;
import
com.neotel.smfcore.core.equipment.util.EquipmentCache
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.system.util.DevicesStatusUtil
;
import
com.neotel.smfcore.core.system.util.EquipStatusUtil
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -25,10 +27,12 @@ import java.util.*;
@Slf4j
@RestController
@RequestMapping
(
"/rest/api"
)
public
class
D
uo
Controller
{
public
class
D
EIF20861
Controller
{
@Autowired
private
DataCache
dataCache
;
@Autowired
private
EquipmentCache
equipmentCache
;
@ApiOperation
(
"S001 MES或AGV系统获取料仓状态信息"
)
@RequestMapping
(
"/boxDoorInfo"
)
...
...
@@ -39,6 +43,9 @@ public class DuoController {
storageList
.
addAll
(
dataCache
.
getAllStorage
().
values
());
List
<
Map
<
String
,
Object
>>
results
=
Lists
.
newArrayList
();
for
(
Storage
storage
:
storageList
)
{
if
(!
storage
.
isSmdDuo
()){
continue
;
}
StatusBean
statusBean
=
DevicesStatusUtil
.
getStatusBean
(
storage
.
getCid
());
if
(
statusBean
==
null
)
{
statusBean
=
new
StatusBean
();
...
...
@@ -59,25 +66,20 @@ public class DuoController {
//离线
shelfS
=
"OFFLINE"
;
}
String
msg
=
statusBean
.
getMsg
();
String
msgType
=
statusBean
.
getDeviceType
();
Map
<
String
,
Object
>
itemMap
=
new
HashMap
<>();
itemMap
.
put
(
"cid"
,
storage
.
getCid
());
// Map<String, UsageItem> usageMap = storage.getUsageMap();
// List<String> reelSize = new ArrayList<>();
// for (UsageItem usageItem : usageMap.values()) {
// String sizeStr = usageItem.getSizeStr();
// reelSize.add(sizeStr);
// }
String
reelSize
=
shelfType
.
replace
(
"smallReel"
,
"7"
).
replace
(
"bigReel"
,
"15"
);
String
s
=
StringUtil
.
join
(
reelSize
);
itemMap
.
put
(
"reelSize"
,
s
);
itemMap
.
put
(
"status"
,
shelfS
);
itemMap
.
put
(
"hSerial"
,
hserial
);
results
.
add
(
itemMap
);
}
return
ResultBean
.
newOkResult
(
results
);
ResultBean
<
Object
>
bean
=
ResultBean
.
newOkResult
(
results
);
DevicesStatusUtil
.
UpdateAgvInfo
(
""
,
JsonUtil
.
toJsonStr
(
paramMap
),
JsonUtil
.
toJsonStr
(
bean
),
"OK"
);
return
bean
;
}
...
...
@@ -129,4 +131,49 @@ public class DuoController {
}
return
ResultBean
.
newErrorResult
(
2
,
"smfcore.msg.op.fail"
,
"操作失败"
);
}
@ApiOperation
(
"S003 NS200设备状态查询"
)
@RequestMapping
(
"/nsShelfInfo"
)
@AnonymousAccess
public
ResultBean
nsShelfInfo
(
@RequestBody
Map
<
String
,
Object
>
paramMap
)
{
Collection
<
Equipment
>
storageList
=
Lists
.
newArrayList
();
storageList
.
addAll
(
equipmentCache
.
getAllEquipment
().
values
());
List
<
Map
<
String
,
Object
>>
results
=
Lists
.
newArrayList
();
for
(
Equipment
equipment
:
storageList
)
{
if
(!
equipment
.
isNEOSCAN
()){
continue
;
}
StatusBean
statusBean
=
DevicesStatusUtil
.
getStatusBean
(
equipment
.
getCid
());
if
(
statusBean
==
null
)
{
statusBean
=
new
StatusBean
();
}
Map
<
String
,
BoxStatusBean
>
boxStatusMap
=
statusBean
.
getBoxStatus
();
int
status
=
-
1
;
String
outShelfStatus
=
statusBean
.
getData
().
getOrDefault
(
"outShelfStatus "
,
"OFFLINE"
);
String
inShelfStatus
=
statusBean
.
getData
().
getOrDefault
(
"inShelfStatus "
,
"OFFLINE"
);
if
(
boxStatusMap
!=
null
)
{
BoxStatusBean
boxStatusBean
=
boxStatusMap
.
get
(
"1"
);
if
(
boxStatusBean
!=
null
)
{
status
=
boxStatusBean
.
getStatus
();
}
}
if
(
status
==
StorageConstants
.
STATUS
.
OFFLINE
||
statusBean
.
timeOut
())
{
//离线
outShelfStatus
=
"OFFLINE"
;
inShelfStatus
=
"OFFLINE"
;
}
Map
<
String
,
Object
>
itemMap
=
new
HashMap
<>();
itemMap
.
put
(
"cid"
,
equipment
.
getCid
());
itemMap
.
put
(
"reelSize"
,
"7,15"
);
itemMap
.
put
(
"inShelfStatus"
,
inShelfStatus
);
itemMap
.
put
(
"outShelfStatus"
,
outShelfStatus
);
results
.
add
(
itemMap
);
}
ResultBean
<
Object
>
bean
=
ResultBean
.
newOkResult
(
results
);
EquipStatusUtil
.
UpdateAgvInfo
(
""
,
JsonUtil
.
toJsonStr
(
paramMap
),
JsonUtil
.
toJsonStr
(
bean
),
"OK"
);
return
bean
;
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论