Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 94b98a50
由
LN
编写于
2022-05-05 17:49:19 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1. 增加配置,当仅为mimo料仓使用时,不显示入库单,料架设置等菜单。
2. 元器件供应商改为在列表中可以并可以编辑。 3. mimo料仓增加单盘出库查找功能。 4.提示消息bug修改
1 个父辈
ccfa0e3c
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
166 行增加
和
17 行删除
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
src/main/java/com/neotel/smfcore/core/device/bean/StatusBean.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/MimoBoxHandler.java
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/BoxStatusDto.java
src/main/java/com/neotel/smfcore/core/system/util/DevicesStatusUtil.java
src/main/resources/config/application.yml
src/main/resources/messages.properties
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
查看文件 @
94b98a5
...
...
@@ -57,10 +57,16 @@ public class DataInitManager {
@Value
(
"${app.version}"
)
private
String
version
;
/**
* 是否是mimo专用版本
*/
@Value
(
"${app.type}"
)
private
String
appType
=
""
;
@PostConstruct
public
void
DataInit
()
{
try
{
log
.
info
(
"smfcore版本号:["
+
version
+
"]。初始化环境..."
);
log
.
info
(
"smfcore版本号:["
+
version
+
"]
,类型["
+
appType
+
"]
。初始化环境..."
);
//查询admin的用户是否存在
String
userName
=
Constants
.
SUPER_USERNAME
;
User
admin
=
userManager
.
findByUserName
(
userName
);
...
...
@@ -180,6 +186,7 @@ public class DataInitManager {
private
Set
<
String
>
MenuInitNew
()
{
boolean
isMimo
=
appType
.
equals
(
"mimo"
);
List
<
Menu
>
menus
=
new
ArrayList
<
Menu
>();
//设备看板
Menu
menukanban
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"boxkanban"
,
"设备看板"
,
1
,
"lockMaterial"
,
"lockMaterial/material/index"
,
""
,
0
,
"kanban"
);
...
...
@@ -221,6 +228,8 @@ public class DataInitManager {
posOut
.
setHidden
(
true
);
zhuanruMenu
.
setHidden
(
true
);
singleMenu
.
setHidden
(
true
);
inOrderMenu
.
setHidden
(
isMimo
);
putinMenu
.
setHidden
(
isMimo
);
// orderSet.setHidden(true);
menus
.
addAll
(
createMenus
(
poutOut
,
menuOrder
,
out
,
posOut
,
groupOut
,
materialBox
,
outSet
,
inOrderMenu
,
putinMenu
,
zhuanruMenu
,
singleMenu
,
sluggishMaterials
,
safetyInventory
));
...
...
@@ -278,6 +287,7 @@ public class DataInitManager {
Menu
pMenuWulian
=
Menu
.
CreatePMenu
(
"物联网"
,
30
,
"internet"
,
2
,
"interMenu"
);
Menu
orderSet
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"orderSetting"
,
"共享文件夹"
,
1
,
"orderSetting"
,
"system/orderSetting/index"
,
""
,
0
,
"sysSet"
);
orderSet
.
setHidden
(
true
);
pMenuWulian
.
setHidden
(
true
);
menus
.
addAll
(
createMenus
(
pMenuWulian
,
orderSet
));
...
...
@@ -297,6 +307,7 @@ public class DataInitManager {
// orderSet.setHidden(true);
menuMenu
.
setHidden
(
true
);
translationSet
.
setHidden
(
true
);
shelfMenu
.
setHidden
(
isMimo
);
menus
.
addAll
(
createMenus
(
poutSet
,
menuStorage
,
menuStoragePos
,
menuMenu
,
sysSet
,
translationSet
,
shelfMenu
));
...
...
src/main/java/com/neotel/smfcore/core/device/bean/StatusBean.java
查看文件 @
94b98a5
...
...
@@ -55,13 +55,12 @@ public class StatusBean {
*/
private
Map
<
String
,
String
>
msgData
=
new
HashMap
<>();
/// <summary>
/// 整体料仓状态
/// 1=正常运行中
/// 2=急停中
/// 3=故障(气压检测不到等,用msg发送详细故障说明)
/// 4=警告(用msg发送提醒,如出库到达工位但是没有工人操作)
/// </summary>
/**
* 0=离线,1=正常运行中, 2=急停,
* 3=故障(气压检测不到等,用msg发送详细故障说明)
* ,4=警告(用msg发送提醒,如出库到达工位但是没有工人操作)
* 5=调试中,6入库执行中,7入仓位完成,8入库失败, 9出库执行中,10出仓位完成,11出库失败,12移栽出库,13 重置中,14 扫码入库失败
*/
private
int
status
;
/// <summary>
/// 提示消息
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/MimoBoxHandler.java
查看文件 @
94b98a5
package
com
.
neotel
.
smfcore
.
core
.
device
.
handler
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
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.device.api.IOpAuthApi
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.storage.bean.InventoryItem
;
import
com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE
;
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.util.DevicesStatusUtil
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
/**
* Created by sunke on 2021/7/12.
*/
@Service
@Api
(
tags
=
"MIMO: 批量料仓"
)
@RestController
@Slf4j
public
class
MimoBoxHandler
extends
BaseDeviceHandler
{
...
...
@@ -59,6 +71,66 @@ public class MimoBoxHandler extends BaseDeviceHandler {
return
statusBean
;
}
@ApiOperation
(
"单盘出库获取库存的PN"
)
@PostMapping
(
"/api/mimo/getInventory"
)
@PreAuthorize
(
"@el.check('storagePos')"
)
public
List
<
String
>
getInventory
(
@RequestBody
Map
<
String
,
String
>
mapValues
,
HttpServletRequest
request
)
{
String
storageId
=
mapValues
.
get
(
"storageId"
);
String
blurry
=
mapValues
.
get
(
"blurry"
);
Storage
storage
=
dataCache
.
getStorageById
(
storageId
);
if
(
storage
==
null
)
{
throw
new
ValidateException
(
"smfcore.storage.error.notExist"
,
"未找到料仓{0}"
,
new
String
[]{
storageId
});
}
Map
<
String
,
InventoryItem
>
inventoryItemMap
=
dataCache
.
getStorageInventory
(
storageId
,
blurry
);
List
<
String
>
list
=
new
ArrayList
<>();
for
(
InventoryItem
item
:
inventoryItemMap
.
values
())
{
list
.
add
(
item
.
getPartNumber
());
}
return
list
;
}
@ApiOperation
(
"根据PN单盘出库"
)
@PostMapping
(
"/api/mimo/singleOut"
)
@PreAuthorize
(
"@el.check('storagePos')"
)
public
ResultBean
singleOut
(
@RequestBody
Map
<
String
,
String
>
mapValues
,
HttpServletRequest
request
)
{
String
storageId
=
mapValues
.
get
(
"storageId"
);
String
pn
=
mapValues
.
get
(
"pn"
);
if
(
ObjectUtil
.
isEmpty
(
pn
))
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"PN"
});
}
Storage
storage
=
dataCache
.
getStorageById
(
storageId
);
if
(
storage
==
null
)
{
throw
new
ValidateException
(
"smfcore.storage.error.notExist"
,
"未找到料仓{0}"
,
new
String
[]{
storageId
});
}
Collection
<
String
>
excludePosIds
=
taskService
.
excludePosIds
();
CHECKOUT_TYPE
checkoutType
=
dataCache
.
getCheckOutType
();
List
<
String
>
ids
=
new
ArrayList
<>();
ids
.
add
(
storageId
);
//查找一盘料单盘出库
StoragePos
pos
=
storagePosManager
.
findPartNumberInStorages
(
ids
,
pn
,
excludePosIds
,
checkoutType
);
if
(
pos
==
null
)
{
throw
new
ValidateException
(
"smfcore.error.mimo.outFial"
,
"未找到可出库的物料"
,
new
String
[]{
storageId
});
}
else
{
log
.
info
(
"根据PN单盘出库:【"
+
storage
.
getName
()
+
"_"
+
storage
.
getCid
()
+
"】位置仓位【"
+
pos
.
getPosName
()
+
"】"
);
String
outResult
=
taskService
.
checkout
(
storage
,
pos
,
true
,
SecurityUtils
.
getCurrentUsername
());
if
(!
Strings
.
isNullOrEmpty
(
outResult
))
{
throw
new
ValidateException
(
"smfcore.error"
,
outResult
);
}
}
return
ResultBean
.
newOkResult
(
""
);
}
@Override
public
DeviceType
getDeviceType
()
{
return
DeviceType
.
BATCH
;
...
...
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
查看文件 @
94b98a5
...
...
@@ -474,7 +474,63 @@ public class DataCache {
}
return
resultMap
;
}
/**
* 获取库存信息,key 为 PN
*/
public
Map
<
String
,
InventoryItem
>
getStorageInventory
(
String
storageId
,
String
blurry
)
{
Map
<
String
,
Storage
>
allStorages
=
getAllStorage
();
List
<
Storage
>
storages
=
Lists
.
newArrayList
();
for
(
Storage
storage
:
allStorages
.
values
())
{
if
(
ObjectUtil
.
isNotEmpty
(
storageId
)
&&
storageId
.
equals
(
storage
.
getId
()))
{
storages
.
add
(
storage
);
}
}
Map
<
String
,
InventoryItem
>
map
=
getInventory
(
storages
);
if
(
ObjectUtil
.
isEmpty
(
blurry
))
{
return
map
;
}
Map
<
String
,
InventoryItem
>
resultMap
=
new
HashMap
<>();
for
(
InventoryItem
item
:
map
.
values
())
{
boolean
blurryOk
=
false
;
if
(
ObjectUtil
.
isNotEmpty
(
blurry
))
{
String
[]
blurrys
=
blurry
.
split
(
","
);
String
[]
valueArray
=
new
String
[]{
item
.
getPartNumber
()};
for
(
String
s
:
blurrys
)
{
if
(
ObjectUtil
.
isNotEmpty
(
s
))
{
String
v
=
item
.
getPartNumber
();
if
(
ObjectUtil
.
isEmpty
(
v
))
{
continue
;
}
try
{
Pattern
pattern
=
Pattern
.
compile
(
QueryHelp
.
escapeExprSpecialWord
(
s
),
Pattern
.
CASE_INSENSITIVE
);
Matcher
m
=
pattern
.
matcher
(
v
);
while
(
m
.
find
())
{
blurryOk
=
true
;
break
;
}
if
(
blurryOk
)
break
;
}
catch
(
Exception
ex
)
{
log
.
error
(
ex
.
toString
());
}
if
(
blurryOk
)
break
;
}
else
{
blurryOk
=
true
;
}
}
}
else
{
blurryOk
=
true
;
}
if
(
blurryOk
)
{
resultMap
.
put
(
item
.
getPartNumber
(),
item
);
}
}
return
resultMap
;
}
/**
* 获取某些料仓的库存信息
*/
...
...
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/BoxStatusDto.java
查看文件 @
94b98a5
...
...
@@ -29,7 +29,7 @@ public class BoxStatusDto {
@ApiModelProperty
(
"是否在线"
)
private
boolean
onLine
=
false
;
@ApiModelProperty
(
"单台BOX状态,0=离线,1=正常运行中, 2=急停,3=故障,4=警告,5=调试中,6入库执行中,7入仓位完成,8入库失败, 9出库执行中,10出仓位完成,11出库失败"
)
@ApiModelProperty
(
"单台BOX状态,0=离线,1=正常运行中, 2=急停,3=故障,4=警告,5=调试中,6入库执行中,7入仓位完成,8入库失败, 9出库执行中,10出仓位完成,11出库失败
,12移栽出库,13 重置中,14 扫码入库失败
"
)
private
int
status
=
0
;
@ApiModelProperty
(
"温度"
)
private
String
temperature
;
...
...
src/main/java/com/neotel/smfcore/core/system/util/DevicesStatusUtil.java
查看文件 @
94b98a5
...
...
@@ -62,14 +62,22 @@ public class DevicesStatusUtil {
clientMsg
=
""
;
clientMsgEn
=
""
;
}
if
(
msgCode
==
null
){
msgCode
=
""
;
}
if
(
clientMsg
==
null
){
clientMsg
=
""
;
}
//判断消息是否有内容
if
(
ObjectUtil
.
isNotEmpty
(
msgCode
)||
ObjectUtil
.
isNotEmpty
(
clientMsg
)){
boolean
newMsg
=
true
;
//和上个消息是否一样
StatusBean
msgBean
=
clientMsgs
.
get
(
cid
);
if
(
msgBean
!=
null
){
if
(
msgBean
.
getMsgCode
().
equals
(
msgCode
)&&
msgBean
.
getMsg
().
equals
(
clientMsg
)){
newMsg
=
false
;
if
(
msgBean
!=
null
)
{
if
(
msgBean
.
msgTimeOut
())
{
newMsg
=
true
;
}
else
if
(
msgBean
.
getMsgCode
().
equals
(
msgCode
)
&&
msgBean
.
getMsg
().
equals
(
clientMsg
))
{
newMsg
=
false
;
}
}
if
(
newMsg
){
...
...
@@ -78,6 +86,7 @@ public class DevicesStatusUtil {
}
StatusBean
statusBean
=
new
StatusBean
();
statusBean
.
setCid
(
cid
);
statusBean
.
setLastSaveTime
(
System
.
currentTimeMillis
());
statusBean
.
setMsg
(
clientMsg
);
statusBean
.
setMsgEn
(
clientMsgEn
);
...
...
src/main/resources/config/application.yml
查看文件 @
94b98a5
...
...
@@ -34,4 +34,5 @@ rsa:
app
:
version
:
'
1.23.0211'
\ No newline at end of file
version
:
'
1.25.0517'
type
:
"
"
\ No newline at end of file
src/main/resources/messages.properties
查看文件 @
94b98a5
...
...
@@ -255,6 +255,7 @@ smfcore.equipmentView=\u8BBE\u5907\u4E92\u8054
smfcore.greaterThanZero
=
\u6570\u
91CF
\u
5FC5
\u
987B
\u5927\u
4E8E0
smfcore.error.virtualOut.num
=
\u6570\u
91CF
\u
4E0D
\u
80FD
\u
8D85
\u
8FC7{0}
smfcore.error.virtualOut.noItem
=
\u
5DE5
\u5355
{0}
\u
4E2D
\u
672A
\u
627E
\u5230\u
5BF9
\u
5E94
\u7684
PN
\u6216\u7269\u6599\u
7F16
\u
53F7
smfcore.error.mimo.outFial
=
\u
672A
\u
627E
\u5230\u
53EF
\u
51FA
\u
5E93
\u7684\u7269\u6599
#smfclient.nlp.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0}
#smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1}
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论