Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 03d764e5
由
zshaohui
编写于
2025-10-31 13:34:34 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.尾料柜功能优化
1 个父辈
cc0203f6
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
77 行增加
和
4 行删除
src/main/java/com/neotel/smfcore/core/barcode/service/manager/impl/ComponentManagerImpl.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/TailingMaterialBoxHandler.java
src/main/java/com/neotel/smfcore/core/barcode/service/manager/impl/ComponentManagerImpl.java
查看文件 @
03d764e
...
...
@@ -65,8 +65,9 @@ public class ComponentManagerImpl implements IComponentManager {
@Override
public
Component
findByPartNumberAndProvider
(
String
partNumber
,
String
provider
)
{
if
(
StringUtils
.
isEmpty
(
partNumber
))
if
(
StringUtils
.
isEmpty
(
partNumber
))
{
return
null
;
}
else
{
Component
component
=
componentDao
.
findOneByCondition
(
new
String
[]{
"partNumber"
,
"provider"
},
new
String
[]{
partNumber
,
provider
});
if
(
component
==
null
)
{
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/TailingMaterialBoxHandler.java
查看文件 @
03d764e
...
...
@@ -5,11 +5,13 @@ import com.google.common.base.Strings;
import
com.neotel.smfcore.common.bean.ReelLockPosInfo
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.DateUtil
;
import
com.neotel.smfcore.common.utils.ReelLockPosUtil
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.api.bean.CodeValidateParam
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.service.po.Component
;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.device.bean.NLShelfOperateBean
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
...
...
@@ -41,11 +43,15 @@ import org.springframework.security.access.prepost.PreAuthorize;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.PostConstruct
;
import
javax.servlet.http.HttpServletRequest
;
import
java.awt.*
;
import
java.util.*
;
import
java.util.List
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.ScheduledExecutorService
;
import
java.util.concurrent.TimeUnit
;
@Api
(
tags
=
"尾料仓"
)
@RestController
...
...
@@ -53,6 +59,7 @@ import java.util.concurrent.ConcurrentHashMap;
@RequestMapping
(
"/tailingMaterialBox"
)
public
class
TailingMaterialBoxHandler
extends
BaseDeviceHandler
{
private
final
String
putInColor
=
"green"
;
private
final
String
expiredColor
=
"red"
;
@Autowired
private
CodeResolve
codeResolve
;
...
...
@@ -66,6 +73,42 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
@Autowired
private
TaskService
taskService
;
private
Map
<
String
,
String
>
expirePosMap
=
new
ConcurrentHashMap
<>();
// 创建定时任务执行器
ScheduledExecutorService
scheduler
=
Executors
.
newScheduledThreadPool
(
1
);
@PostConstruct
public
void
init
()
{
scheduler
.
scheduleAtFixedRate
(()
->
{
for
(
Storage
storage
:
dataCache
.
getAllStorage
().
values
())
{
if
(
storage
.
getType
().
equals
(
DeviceType
.
TAILING_MATERIAL
.
getName
()))
{
//只查询posName和barcode.expireTime的时间
Query
query
=
new
Query
(
Criteria
.
where
(
"storageId"
).
is
(
storage
.
getId
()));
query
.
fields
().
include
(
"posName"
,
"barcode.subCodeList.expireDate"
,
"barcode.subCodeList.barcode"
,
"storageId"
);
List
<
StoragePos
>
storagePosList
=
storagePosManager
.
findByQuery
(
query
);
if
(
storagePosList
!=
null
&&
!
storagePosList
.
isEmpty
())
{
for
(
StoragePos
pos
:
storagePosList
)
{
Barcode
posBarcode
=
pos
.
getBarcode
();
if
(
posBarcode
!=
null
)
{
List
<
Barcode
>
subCodeList
=
posBarcode
.
getSubCodeList
();
if
(
subCodeList
!=
null
&&
!
subCodeList
.
isEmpty
())
{
for
(
Barcode
subCode
:
subCodeList
)
{
if
(
subCode
.
isExpired
())
{
log
.
info
(
"加载到过期物料的库位:"
+
pos
.
getPosName
()+
"需要亮红灯"
);
expirePosMap
.
put
(
pos
.
getPosName
(),
storage
.
getCid
());
break
;
}
}
}
}
}
}
}
}
},
1
,
5
,
TimeUnit
.
MINUTES
);
}
@ApiOperation
(
"寻找柜体"
)
@RequestMapping
(
"/findPosByCode"
)
...
...
@@ -162,6 +205,20 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
Barcode
barcode
=
codeResolve
.
resolveOneValideBarcode
(
"=2x2="
+
code
);
barcode
.
setBarcode
(
barcode
.
getPartNumber
()+
"_"
+
barcode
.
getBatch
()+
"_"
+
System
.
currentTimeMillis
());
barcode
.
setAmount
(
Integer
.
parseInt
(
num
));
//查询过期天数,看看是不是已经过期了
if
(
barcode
.
getProduceDate
()
!=
null
)
{
Component
component
=
componentManager
.
findByPartNumberAndProvider
(
barcode
.
getPartNumber
(),
barcode
.
getProvider
());
if
(
component
==
null
){
component
=
componentManager
.
findOneByPN
(
barcode
.
getPartNumber
());
}
if
(
component
!=
null
)
{
int
validDay
=
component
.
getValidDay
();
if
(
validDay
>
0
){
Date
date
=
DateUtil
.
addDays
(
barcode
.
getProduceDate
(),
validDay
);
barcode
.
setExpireDate
(
date
);
}
}
}
//判断库位中的物料是否一样
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
pos
==
null
)
{
...
...
@@ -198,7 +255,7 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
//生成入库任务
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
DataLog
dataLog
=
new
DataLog
(
storage
,
posB
arcode
,
pos
);
DataLog
dataLog
=
new
DataLog
(
storage
,
b
arcode
,
pos
);
dataLog
.
setType
(
OP
.
PUT_IN
);
dataLog
.
setNum
(
Integer
.
parseInt
(
num
));
dataLog
.
setOperator
(
SecurityUtils
.
getLoginUsername
());
...
...
@@ -279,8 +336,8 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
if
(
pos
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueNotExist"
,
"{0}[{1}]不存在"
,
new
String
[]{
"柜体"
,
posName
});
}
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
Barcode
posBarcode
=
getPosBarcode
(
pos
);
//直到出库物料位置
int
outNum
=
0
;
int
num
=
Integer
.
parseInt
(
numStr
);
...
...
@@ -301,7 +358,6 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
}
log
.
info
(
"寻找到对应的料盘信息为:"
+
barcode
.
getBarcode
()
+
",对应的入库时间为:"
+
barcode
.
getPutInDate
());
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
DataLog
dataLog
=
new
DataLog
(
storage
,
barcode
,
pos
);
dataLog
.
setType
(
OP
.
CHECKOUT
);
dataLog
.
setNum
(
remainNum
);
...
...
@@ -331,9 +387,14 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
posBarcode
.
setAmount
(
0
);
pos
.
setBarcode
(
null
);
pos
.
setUsed
(
false
);
//如果为空了,就把当前库位的值给清空
expirePosMap
.
remove
(
posName
);
}
else
{
for
(
Barcode
barcode
:
posBarcode
.
getSubCodeList
())
{
amount
=
amount
+
barcode
.
getAmount
();
if
(
barcode
.
isExpired
()){
expirePosMap
.
put
(
posName
,
storage
.
getCid
());
}
}
posBarcode
.
setAmount
(
amount
);
pos
.
setBarcode
(
posBarcode
);
...
...
@@ -352,6 +413,12 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
@Override
public
StatusBean
handleClientRequest
(
StatusBean
statusBean
,
HttpServletRequest
request
)
{
if
(
expirePosMap
!=
null
&&
!
expirePosMap
.
isEmpty
()){
for
(
String
key
:
expirePosMap
.
keySet
())
{
log
.
info
(
"添加亮灯执指令,cid为:"
+
expirePosMap
.
get
(
key
)+
",key为openLed"
+
",value为:"
+
key
+
"="
+
expiredColor
);
DevicesStatusUtil
.
appendOp
(
expirePosMap
.
get
(
key
),
"openLed"
,
key
+
"="
+
expiredColor
);
}
}
statusBean
.
setClientIp
(
request
.
getRemoteHost
());
handleMsg
(
statusBean
);
statusBean
=
saveAlarmAndHumidity
(
statusBean
);
...
...
@@ -414,4 +481,9 @@ public class TailingMaterialBoxHandler extends BaseDeviceHandler {
DevicesStatusUtil
.
appendOp
(
storage
.
getCid
(),
opKey
,
opStr
);
log
.
info
(
"操作库位["
+
pos
.
getPosName
()
+
"]"
+
opKey
+
" : "
+
opStr
);
}
@Override
public
DeviceType
getDeviceType
()
{
return
DeviceType
.
TAILING_MATERIAL
;
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论