Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 4a9001b6
由
zshaohui
编写于
2022-10-17 10:31:24 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.内仓接口对接优化
1 个父辈
e29fb769
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
107 行增加
和
112 行删除
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/BaseDeviceHandler.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/SisoBoxHandler.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/custom/lizhen/LizhenController.java
src/main/java/com/neotel/smfcore/custom/lizhen/agvBox/rest/AgvBoxDeviceClientController.java
src/main/java/com/neotel/smfcore/custom/lizhen/agvBox/rest/WarehouseController.java
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/rest/InnerBoxRestController.java
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/util/PreWarningItemCache.java
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
查看文件 @
4a9001b
...
@@ -286,7 +286,7 @@ public class DataInitManager {
...
@@ -286,7 +286,7 @@ public class DataInitManager {
"inventory"
,
//报表->库存
"inventory"
,
//报表->库存
"bunker"
,
//设备管理
"bunker"
,
//设备管理
"storagePos"
,
//库位管理
"storagePos"
,
//库位管理
//
"sysSetting", //系统设置
"sysSetting"
,
//系统设置
"peoples"
,
//用户管理
"peoples"
,
//用户管理
"role"
//角色管理
"role"
//角色管理
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/BaseDeviceHandler.java
查看文件 @
4a9001b
...
@@ -394,7 +394,7 @@ public class BaseDeviceHandler implements IDeviceHandler {
...
@@ -394,7 +394,7 @@ public class BaseDeviceHandler implements IDeviceHandler {
}
else
if
(
BOX_STATUS
.
IN_FAILED
==
status
)
{
//入库失败
}
else
if
(
BOX_STATUS
.
IN_FAILED
==
status
)
{
//入库失败
//暂不处理
//暂不处理
}
else
if
(
BOX_STATUS
.
OUT_FINISHED
==
status
)
{
//出仓完成
}
else
if
(
BOX_STATUS
.
OUT_FINISHED
==
status
)
{
//出仓完成
finishedOutPos
(
statusBean
.
getCid
(),
posName
,
executeTime
);
//
finishedOutPos(statusBean.getCid(),posName,executeTime);
}
else
if
(
BOX_STATUS
.
OUT_END
==
status
)
{
//出库完成(放到仓门口
}
else
if
(
BOX_STATUS
.
OUT_END
==
status
)
{
//出库完成(放到仓门口
//暂不处理
//暂不处理
}
}
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/SisoBoxHandler.java
查看文件 @
4a9001b
...
@@ -31,8 +31,6 @@ public class SisoBoxHandler extends BaseDeviceHandler {
...
@@ -31,8 +31,6 @@ public class SisoBoxHandler extends BaseDeviceHandler {
if
(
humidityResult
!=
null
)
{
if
(
humidityResult
!=
null
)
{
return
humidityResult
;
return
humidityResult
;
}
}
if
(
statusBean
.
getOp
()
==
OP
.
PUT_IN
)
{
if
(
statusBean
.
getOp
()
==
OP
.
PUT_IN
)
{
log
.
debug
(
"入库:"
+
statusBean
.
toString
());
log
.
debug
(
"入库:"
+
statusBean
.
toString
());
statusBean
=
putInLine
(
storage
,
statusBean
);
statusBean
=
putInLine
(
storage
,
statusBean
);
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
4a9001b
...
@@ -218,6 +218,8 @@ public class LiteOrderCache {
...
@@ -218,6 +218,8 @@ public class LiteOrderCache {
}
else
if
(
liteOrder
.
isOutTails
()){
}
else
if
(
liteOrder
.
isOutTails
()){
// setStatus(LITEORDER_STATUS.TAILS_FINISHED);
// setStatus(LITEORDER_STATUS.TAILS_FINISHED);
liteOrder
.
setClosed
(
true
);
liteOrder
.
setClosed
(
true
);
}
else
if
(
liteOrder
.
isOutTails
()){
liteOrder
.
setClosed
(
true
);
}
}
liteOrder
.
setTaskFinishedTime
(
System
.
currentTimeMillis
());
liteOrder
.
setTaskFinishedTime
(
System
.
currentTimeMillis
());
...
@@ -473,8 +475,8 @@ public class LiteOrderCache {
...
@@ -473,8 +475,8 @@ public class LiteOrderCache {
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
DataLog
task
=
new
DataLog
(
storage
,
pos
.
getBarcode
(),
pos
);
DataLog
task
=
new
DataLog
(
storage
,
pos
.
getBarcode
(),
pos
);
String
operator
=
SecurityUtils
.
getCurrentUsername
();
/*
String operator = SecurityUtils.getCurrentUsername();
task
.
setOperator
(
operator
);
task.setOperator(operator);
*/
return
task
;
return
task
;
}
}
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/LizhenController.java
查看文件 @
4a9001b
...
@@ -9,6 +9,7 @@ import com.neotel.smfcore.core.order.service.po.LiteOrder;
...
@@ -9,6 +9,7 @@ import com.neotel.smfcore.core.order.service.po.LiteOrder;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.custom.lizhen.innerBox.bean.PreWarningItem
;
import
com.neotel.smfcore.custom.lizhen.innerBox.bean.PreWarningItem
;
import
com.neotel.smfcore.custom.lizhen.innerBox.util.PreWarningItemCache
;
import
com.neotel.smfcore.custom.lizhen.innerBox.util.PreWarningItemCache
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -111,6 +112,7 @@ public class LizhenController {
...
@@ -111,6 +112,7 @@ public class LizhenController {
@ApiOperation
(
"5.缺料预警"
)
@ApiOperation
(
"5.缺料预警"
)
@PostMapping
(
"/mPickingList"
)
@PostMapping
(
"/mPickingList"
)
@AnonymousAccess
public
ResultBean
mPickingList
(
@RequestBody
Map
<
String
,
List
<
Map
<
String
,
String
>>>
paramMap
)
{
public
ResultBean
mPickingList
(
@RequestBody
Map
<
String
,
List
<
Map
<
String
,
String
>>>
paramMap
)
{
List
<
Map
<
String
,
String
>>
datas
=
paramMap
.
get
(
"data"
);
List
<
Map
<
String
,
String
>>
datas
=
paramMap
.
get
(
"data"
);
if
(
datas
==
null
||
datas
.
isEmpty
())
{
if
(
datas
==
null
||
datas
.
isEmpty
())
{
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/agvBox/rest/AgvBoxDeviceClientController.java
查看文件 @
4a9001b
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
agvBox
.
rest
;
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
agvBox
.
rest
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.utils.JsonUtil
;
import
com.neotel.smfcore.common.utils.ReelLockPosUtil
;
import
com.neotel.smfcore.common.utils.ReelLockPosUtil
;
import
com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager
;
import
com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
...
@@ -239,12 +240,13 @@ public class AgvBoxDeviceClientController {
...
@@ -239,12 +240,13 @@ public class AgvBoxDeviceClientController {
DataLog
opTask
=
null
;
DataLog
opTask
=
null
;
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
for
(
DataLog
task
:
allTasks
)
{
for
(
DataLog
task
:
allTasks
)
{
if
(
rfid
.
startsWith
(
task
.
getBarcode
()))
{
if
(
rfid
.
startsWith
(
task
.
getBarcode
()))
{
if
(!
task
.
isCancel
()
&&
!
task
.
isFinished
())
{
if
(!
task
.
isCancel
()
&&
!
task
.
isFinished
())
{
opTask
=
task
;
opTask
=
task
;
break
;
}
}
break
;
}
}
}
}
if
(
opTask
==
null
)
{
if
(
opTask
==
null
)
{
...
@@ -282,8 +284,6 @@ public class AgvBoxDeviceClientController {
...
@@ -282,8 +284,6 @@ public class AgvBoxDeviceClientController {
if
(
OP_STATUS
.
OUT_ON_AGV
.
name
().
equals
(
statusStr
))
{
if
(
OP_STATUS
.
OUT_ON_AGV
.
name
().
equals
(
statusStr
))
{
//从库位中取出,需要移到完成队列中,并且清理库存
//从库位中取出,需要移到完成队列中,并且清理库存
outFromPos
(
opTask
);
outFromPos
(
opTask
);
//清理锁定库位
ReelLockPosUtil
.
removeReelLockPosInfo
(
rfid
.
replace
(
"A"
,
""
).
replace
(
"B"
,
""
));
}
}
taskService
.
updateFinishedTask
(
opTask
);
taskService
.
updateFinishedTask
(
opTask
);
...
@@ -299,8 +299,11 @@ public class AgvBoxDeviceClientController {
...
@@ -299,8 +299,11 @@ public class AgvBoxDeviceClientController {
opTask
.
setStatus
(
statusStr
);
opTask
.
setStatus
(
statusStr
);
//入库任务
//入库任务
if
(
OP_STATUS
.
FINISHED
.
name
().
equals
(
statusStr
))
{
if
(
OP_STATUS
.
FINISHED
.
name
().
equals
(
statusStr
))
{
taskService
.
moveTaskToFinished
(
opTask
);
lockRfidTarget
.
remove
(
opTask
.
getBarcode
());
lockRfidTarget
.
remove
(
opTask
.
getBarcode
());
intoPos
(
opTask
);
intoPos
(
opTask
);
//清理锁定库位
ReelLockPosUtil
.
removeReelLockPosInfo
(
rfid
.
replace
(
"A"
,
""
).
replace
(
"B"
,
""
));
}
else
{
}
else
{
taskService
.
updateQueueTask
(
opTask
);
taskService
.
updateQueueTask
(
opTask
);
}
}
...
@@ -345,7 +348,6 @@ public class AgvBoxDeviceClientController {
...
@@ -345,7 +348,6 @@ public class AgvBoxDeviceClientController {
//更新缓存中的库存信息
//更新缓存中的库存信息
opTask
.
setStatus
(
OP_STATUS
.
FINISHED
.
name
());
opTask
.
setStatus
(
OP_STATUS
.
FINISHED
.
name
());
taskService
.
updateFinishedTask
(
opTask
);
taskService
.
updateFinishedTask
(
opTask
);
taskService
.
removeFinishedTask
(
opTask
);
taskService
.
removeFinishedTask
(
opTask
);
}
}
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/agvBox/rest/WarehouseController.java
查看文件 @
4a9001b
...
@@ -4,6 +4,7 @@ import com.google.common.collect.Lists;
...
@@ -4,6 +4,7 @@ import com.google.common.collect.Lists;
import
com.neotel.smfcore.common.bean.ReelLockPosInfo
;
import
com.neotel.smfcore.common.bean.ReelLockPosInfo
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.JsonUtil
;
import
com.neotel.smfcore.common.utils.ReelLockPosUtil
;
import
com.neotel.smfcore.common.utils.ReelLockPosUtil
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
...
@@ -139,6 +140,8 @@ public class WarehouseController {
...
@@ -139,6 +140,8 @@ public class WarehouseController {
.
and
(
"enabled"
).
is
(
true
);
//可用
.
and
(
"enabled"
).
is
(
true
);
//可用
//排除掉正在执行的仓位
//排除掉正在执行的仓位
Collection
<
String
>
excludePosIds
=
taskService
.
excludePosIds
();
Collection
<
String
>
excludePosIds
=
taskService
.
excludePosIds
();
log
.
info
(
"excludePosIds--"
+
JsonUtil
.
toJsonStr
(
excludePosIds
));
if
(
excludePosIds
!=
null
&&
!
excludePosIds
.
isEmpty
())
{
if
(
excludePosIds
!=
null
&&
!
excludePosIds
.
isEmpty
())
{
c
.
and
(
"id"
).
nin
(
excludePosIds
);
c
.
and
(
"id"
).
nin
(
excludePosIds
);
}
}
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/rest/InnerBoxRestController.java
查看文件 @
4a9001b
...
@@ -64,6 +64,7 @@ public class InnerBoxRestController {
...
@@ -64,6 +64,7 @@ public class InnerBoxRestController {
@ApiOperation
(
"IA 出库更新任务状态"
)
@ApiOperation
(
"IA 出库更新任务状态"
)
@RequestMapping
(
"/updateLocInfo"
)
@RequestMapping
(
"/updateLocInfo"
)
@AnonymousAccess
public
ResultBean
updateLocInfo
(
HttpServletRequest
request
)
{
public
ResultBean
updateLocInfo
(
HttpServletRequest
request
)
{
String
code
=
request
.
getParameter
(
"barcode"
);
String
code
=
request
.
getParameter
(
"barcode"
);
String
status
=
request
.
getParameter
(
"status"
);
String
status
=
request
.
getParameter
(
"status"
);
...
@@ -121,30 +122,15 @@ public class InnerBoxRestController {
...
@@ -121,30 +122,15 @@ public class InnerBoxRestController {
}
}
//料箱与需求单进行绑定
//料箱与需求单进行绑定
String
boxNumber
=
""
;
String
boxNumber
=
loc
.
replaceAll
(
"A"
,
""
).
replaceAll
(
"B"
,
""
);
if
(
loc
.
contains
(
"-"
))
{
LiteOrder
liteOrder
=
liteOrderManager
.
get
(
opTask
.
getSourceId
());
boxNumber
=
loc
.
substring
(
0
,
loc
.
indexOf
(
"-"
));
if
(
liteOrder
!=
null
)
{
}
liteOrder
.
setBoxNumber
(
boxNumber
);
LiteOrderItem
orderItem
=
liteOrderItemManager
.
getOrderItemByBarcode
(
code
);
liteOrderManager
.
save
(
liteOrder
);
if
(
orderItem
!=
null
)
{
liteOrderCache
.
addOrderToMap
(
liteOrder
);
String
orderId
=
orderItem
.
getOrderId
();
LiteOrder
liteOrder
=
liteOrderManager
.
get
(
orderId
);
if
(
liteOrder
!=
null
)
{
liteOrder
.
setBoxNumber
(
boxNumber
);
liteOrderManager
.
save
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
}
}
}
}
}
}
}
}
else
{
opTask
.
setStatus
(
status
);
//入库任务
if
(
OP_STATUS
.
FINISHED
.
name
().
equals
(
status
))
{
intoPos
(
opTask
);
}
else
{
taskService
.
updateQueueTask
(
opTask
);
}
}
}
}
else
{
}
else
{
log
.
info
(
code
+
"更新状态时未找到状态:"
+
status
+
""
);
log
.
info
(
code
+
"更新状态时未找到状态:"
+
status
+
""
);
...
@@ -158,6 +144,7 @@ public class InnerBoxRestController {
...
@@ -158,6 +144,7 @@ public class InnerBoxRestController {
@ApiOperation
(
"IB 获取料箱状态信息"
)
@ApiOperation
(
"IB 获取料箱状态信息"
)
@RequestMapping
(
"/getBoxStatusInfo"
)
@RequestMapping
(
"/getBoxStatusInfo"
)
@AnonymousAccess
public
ResultBean
getBoxStatusInfo
(
HttpServletRequest
request
)
{
public
ResultBean
getBoxStatusInfo
(
HttpServletRequest
request
)
{
String
rfid
=
request
.
getParameter
(
"rfid"
);
//料箱RFID
String
rfid
=
request
.
getParameter
(
"rfid"
);
//料箱RFID
String
cid
=
request
.
getParameter
(
"cid"
);
String
cid
=
request
.
getParameter
(
"cid"
);
...
@@ -168,8 +155,9 @@ public class InnerBoxRestController {
...
@@ -168,8 +155,9 @@ public class InnerBoxRestController {
@ApiOperation
(
"IC 获取料架标签打印信息"
)
@ApiOperation
(
"IC 获取料架标签打印信息"
)
@RequestMapping
(
"/rack/getPrintInfo"
)
@RequestMapping
(
"/rack/getPrintInfo"
)
@AnonymousAccess
public
List
<
Map
<
String
,
String
>>
getPrintLabel
(
HttpServletRequest
request
)
{
public
List
<
Map
<
String
,
String
>>
getPrintLabel
(
HttpServletRequest
request
)
{
Collection
<
DataLog
>
dataLogs
=
taskService
.
get
Queue
Tasks
();
Collection
<
DataLog
>
dataLogs
=
taskService
.
get
All
Tasks
();
List
<
Map
<
String
,
String
>>
results
=
new
ArrayList
<>();
List
<
Map
<
String
,
String
>>
results
=
new
ArrayList
<>();
for
(
DataLog
dataLog
:
dataLogs
)
{
for
(
DataLog
dataLog
:
dataLogs
)
{
String
barcode
=
dataLog
.
getBarcode
();
String
barcode
=
dataLog
.
getBarcode
();
...
@@ -201,6 +189,7 @@ public class InnerBoxRestController {
...
@@ -201,6 +189,7 @@ public class InnerBoxRestController {
@ApiOperation
(
"ID 料架标签打印完成通知"
)
@ApiOperation
(
"ID 料架标签打印完成通知"
)
@RequestMapping
(
"/rack/finishPrint"
)
@RequestMapping
(
"/rack/finishPrint"
)
@AnonymousAccess
public
ResultBean
finishPrintLabel
(
HttpServletRequest
request
)
{
public
ResultBean
finishPrintLabel
(
HttpServletRequest
request
)
{
String
barcode
=
request
.
getParameter
(
"barcode"
);
String
barcode
=
request
.
getParameter
(
"barcode"
);
Collection
<
DataLog
>
dataLogs
=
taskService
.
getQueueTasks
();
Collection
<
DataLog
>
dataLogs
=
taskService
.
getQueueTasks
();
...
@@ -216,9 +205,10 @@ public class InnerBoxRestController {
...
@@ -216,9 +205,10 @@ public class InnerBoxRestController {
@ApiOperation
(
"IE 贴标前获取站位信息"
)
@ApiOperation
(
"IE 贴标前获取站位信息"
)
@RequestMapping
(
"/getFeederInfo"
)
@RequestMapping
(
"/getFeederInfo"
)
@AnonymousAccess
public
ResultBean
getFeederInfo
(
HttpServletRequest
request
)
{
public
ResultBean
getFeederInfo
(
HttpServletRequest
request
)
{
String
barcode
=
request
.
getParameter
(
"barcode"
);
String
barcode
=
request
.
getParameter
(
"barcode"
);
Collection
<
DataLog
>
dataLogs
=
taskService
.
get
Queue
Tasks
();
Collection
<
DataLog
>
dataLogs
=
taskService
.
get
All
Tasks
();
Map
<
String
,
String
>
resultMap
=
new
HashMap
<>();
Map
<
String
,
String
>
resultMap
=
new
HashMap
<>();
for
(
DataLog
dataLog
:
dataLogs
)
{
for
(
DataLog
dataLog
:
dataLogs
)
{
if
(
dataLog
.
getBarcode
().
equals
(
barcode
))
{
if
(
dataLog
.
getBarcode
().
equals
(
barcode
))
{
...
@@ -242,12 +232,12 @@ public class InnerBoxRestController {
...
@@ -242,12 +232,12 @@ public class InnerBoxRestController {
@ApiOperation
(
"周转箱取走"
)
@ApiOperation
(
"周转箱取走"
)
@RequestMapping
(
"/boxTakeAway"
)
@RequestMapping
(
"/boxTakeAway"
)
@AnonymousAccess
@AnonymousAccess
public
ResultBean
boxTakeAway
(
HttpServletRequest
request
){
public
ResultBean
boxTakeAway
(
HttpServletRequest
request
)
{
String
rfid
=
request
.
getParameter
(
"rfid"
);
String
rfid
=
request
.
getParameter
(
"rfid"
);
rfid
=
rfid
.
replaceAll
(
"A"
,
""
).
replaceAll
(
"B"
,
""
);
rfid
=
rfid
.
replaceAll
(
"A"
,
""
).
replaceAll
(
"B"
,
""
);
Pattern
pattern
=
Pattern
.
compile
(
"^"
+
rfid
+
".*$"
,
Pattern
.
CASE_INSENSITIVE
);
Pattern
pattern
=
Pattern
.
compile
(
"^"
+
rfid
+
".*$"
,
Pattern
.
CASE_INSENSITIVE
);
List
<
LiteOrder
>
liteOrders
=
liteOrderManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"boxNumber"
).
regex
(
pattern
)));
List
<
LiteOrder
>
liteOrders
=
liteOrderManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"boxNumber"
).
regex
(
pattern
)));
if
(
liteOrders
!=
null
&&
liteOrders
.
isEmpty
()){
if
(
liteOrders
!=
null
&&
liteOrders
.
isEmpty
())
{
for
(
LiteOrder
liteOrder
:
liteOrders
)
{
for
(
LiteOrder
liteOrder
:
liteOrders
)
{
liteOrder
.
setBoxNumber
(
""
);
liteOrder
.
setBoxNumber
(
""
);
liteOrderManager
.
save
(
liteOrder
);
liteOrderManager
.
save
(
liteOrder
);
...
@@ -259,42 +249,6 @@ public class InnerBoxRestController {
...
@@ -259,42 +249,6 @@ public class InnerBoxRestController {
/**
/**
* 物料放入
*/
private
void
intoPos
(
DataLog
opTask
)
{
//已完成,加入库存,并且从完成队列中清除
StoragePos
storagePos
=
storagePosManager
.
get
(
opTask
.
getPosId
());
//二维码状态
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
opTask
.
getBarcode
());
if
(
barcode
!=
null
)
{
barcode
.
setUsedCount
(
barcode
.
getUsedCount
()
+
1
);
barcode
.
setPutInTime
(
System
.
currentTimeMillis
());
barcode
.
setInOpor
(
""
);
barcode
.
setCheckOutDate
(
null
,
""
);
barcode
.
setPosName
(
opTask
.
getPosName
());
barcodeManager
.
save
(
barcode
);
}
/**
* 仓位状态
*/
storagePos
.
setBarcode
(
barcode
);
storagePos
.
setUsed
(
true
);
storagePos
.
setCanCheckOutTime
(
System
.
currentTimeMillis
());
storagePosManager
.
save
(
storagePos
);
if
(
barcode
!=
null
)
{
dataCache
.
updateInventory
(
storagePos
,
barcode
);
//需要更新料箱中物料的库存
}
//更新缓存中的库存信息
opTask
.
setStatus
(
OP_STATUS
.
FINISHED
.
name
());
taskService
.
updateFinishedTask
(
opTask
);
taskService
.
removeFinishedTask
(
opTask
);
}
/**
* 物料取出
* 物料取出
*/
*/
private
void
outFromPos
(
DataLog
opTask
)
{
private
void
outFromPos
(
DataLog
opTask
)
{
...
@@ -340,27 +294,38 @@ public class InnerBoxRestController {
...
@@ -340,27 +294,38 @@ public class InnerBoxRestController {
int
remainTaskCount
=
0
;
//所属需求单剩余当前料仓未完成任务数
int
remainTaskCount
=
0
;
//所属需求单剩余当前料仓未完成任务数
int
rackTaskCount
=
0
;
//所属需求单剩余料架任务数
int
rackTaskCount
=
0
;
//所属需求单剩余料架任务数
//当前料箱的隔口数量
//当前料箱的隔口数量
resultMap
.
put
(
"inCount"
,
0
);
resultMap
.
put
(
"outCount"
,
0
);
Pattern
pattern
=
Pattern
.
compile
(
"^"
+
boxNumber
+
".*$"
,
Pattern
.
CASE_INSENSITIVE
);
Pattern
pattern
=
Pattern
.
compile
(
"^"
+
boxNumber
+
".*$"
,
Pattern
.
CASE_INSENSITIVE
);
List
<
Barcode
>
barcodes
=
barcodeManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"posName"
).
regex
(
pattern
)));
List
<
Barcode
>
barcodes
=
barcodeManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"posName"
).
regex
(
pattern
)));
if
(
barcodes
!=
null
&&
!
barcodes
.
isEmpty
())
{
if
(
barcodes
!=
null
&&
!
barcodes
.
isEmpty
())
{
Map
<
String
,
Long
>
posCountMap
=
barcodes
.
stream
().
collect
(
Collectors
.
groupingBy
(
Barcode:
:
getPosName
,
Collectors
.
counting
()));
Map
<
String
,
Long
>
posCountMap
=
barcodes
.
stream
().
collect
(
Collectors
.
groupingBy
(
Barcode:
:
getPosName
,
Collectors
.
counting
()));
for
(
Map
.
Entry
<
String
,
Long
>
posCount
:
posCountMap
.
entrySet
())
{
if
(
posCount
.
getKey
().
contains
(
"A"
))
{
resultMap
.
put
(
"inCount"
,
posCount
.
getValue
());
}
else
{
resultMap
.
put
(
"outCount"
,
posCount
.
getValue
());
}
}
resultMap
.
putAll
(
posCountMap
);
resultMap
.
putAll
(
posCountMap
);
}
}
//获取当前工单数据
//获取当前工单数据
LiteOrder
liteOrder
=
n
ew
LiteOrder
()
;
LiteOrder
liteOrder
=
n
ull
;
List
<
LiteOrder
>
liteOrders
=
liteOrderManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"boxNumber"
).
regex
(
pattern
)));
List
<
LiteOrder
>
liteOrders
=
liteOrderManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"boxNumber"
).
regex
(
pattern
)));
if
(
liteOrders
!=
null
&&
!
liteOrders
.
isEmpty
())
{
if
(
liteOrders
!=
null
&&
!
liteOrders
.
isEmpty
())
{
liteOrder
=
liteOrders
.
get
(
0
);
liteOrder
=
liteOrders
.
get
(
0
);
}
}
resultMap
.
put
(
"hSerial"
,
""
);
resultMap
.
put
(
"line"
,
""
);
if
(
liteOrder
!=
null
)
{
if
(
liteOrder
!=
null
)
{
String
line
=
liteOrder
.
getLine
();
String
line
=
liteOrder
.
getLine
();
String
orderNo
=
liteOrder
.
getOrderNo
();
String
orderNo
=
liteOrder
.
getOrderNo
();
resultMap
.
put
(
"hSerial"
,
orderNo
);
resultMap
.
put
(
"hSerial"
,
orderNo
);
resultMap
.
put
(
"line"
,
line
);
resultMap
.
put
(
"line"
,
line
);
List
<
LiteOrderItem
>
orderItems
=
liteOrder
.
getOrderItems
(
);
List
<
LiteOrderItem
>
orderItems
=
liteOrder
ItemManager
.
findOrderItems
(
liteOrder
.
getId
()
);
if
(
orderItems
!=
null
&&
!
orderItems
.
isEmpty
())
{
if
(
orderItems
!=
null
&&
!
orderItems
.
isEmpty
())
{
for
(
LiteOrderItem
orderItem
:
orderItems
)
{
for
(
LiteOrderItem
orderItem
:
orderItems
)
{
Collection
<
DataLog
>
dataLogs
=
taskService
.
get
Queue
Tasks
();
Collection
<
DataLog
>
dataLogs
=
taskService
.
get
All
Tasks
();
for
(
DataLog
dataLog
:
dataLogs
)
{
for
(
DataLog
dataLog
:
dataLogs
)
{
if
(
dataLog
.
isFinished
()
||
dataLog
.
isCancel
())
{
if
(
dataLog
.
isFinished
()
||
dataLog
.
isCancel
())
{
continue
;
continue
;
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/util/PreWarningItemCache.java
查看文件 @
4a9001b
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
innerBox
.
util
;
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
innerBox
.
util
;
import
com.neotel.smfcore.common.base.AbstractBaseDao
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
...
@@ -16,6 +17,7 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
...
@@ -16,6 +17,7 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.custom.lizhen.LizhenApi
;
import
com.neotel.smfcore.custom.lizhen.LizhenApi
;
import
com.neotel.smfcore.custom.lizhen.innerBox.bean.PreWarningItem
;
import
com.neotel.smfcore.custom.lizhen.innerBox.bean.PreWarningItem
;
import
jdk.nashorn.internal.runtime.arrays.ArrayIndex
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.logging.log4j.util.Strings
;
import
org.apache.logging.log4j.util.Strings
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -26,6 +28,7 @@ import org.springframework.stereotype.Service;
...
@@ -26,6 +28,7 @@ import org.springframework.stereotype.Service;
import
java.util.*
;
import
java.util.*
;
import
java.util.concurrent.CopyOnWriteArrayList
;
import
java.util.concurrent.CopyOnWriteArrayList
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
java.util.concurrent.atomic.AtomicLong
;
import
java.util.concurrent.atomic.AtomicLong
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -36,7 +39,7 @@ import java.util.stream.Collectors;
...
@@ -36,7 +39,7 @@ import java.util.stream.Collectors;
*/
*/
@Slf4j
@Slf4j
@Service
@Service
public
class
PreWarningItemCache
{
public
class
PreWarningItemCache
extends
AbstractBaseDao
{
/**
/**
* 预警列表缓存
* 预警列表缓存
...
@@ -54,25 +57,26 @@ public class PreWarningItemCache {
...
@@ -54,25 +57,26 @@ public class PreWarningItemCache {
private
static
IStoragePosManager
storagePosManager
;
private
static
IStoragePosManager
storagePosManager
;
/**
/**
* 添加到预警列表缓存中
* 添加到预警列表缓存中
*/
*/
public
static
void
addItems
(
List
<
PreWarningItem
>
items
){
public
static
void
addItems
(
List
<
PreWarningItem
>
items
)
{
updateItem
(
items
,
false
);
updateItem
(
items
,
false
);
}
}
private
AtomicInteger
atomicInteger
=
new
AtomicInteger
(
0
);
/**
/**
* 从缓存列表中取出预警Item生成工单并执行
* 从缓存列表中取出预警Item生成工单并执行
*/
*/
private
static
void
generateTask
(){
private
static
void
generateTask
()
{
boolean
hasIdleBox
=
false
;
boolean
hasIdleBox
=
false
;
//有料仓空闲下来就需要生成任务,保证料仓不空闲,提高节拍
//有料仓空闲下来就需要生成任务,保证料仓不空闲,提高节拍
Collection
<
Storage
>
boxList
=
dataCache
.
getAllStorage
().
values
();
Collection
<
Storage
>
boxList
=
dataCache
.
getAllStorage
().
values
();
for
(
Storage
storage
:
boxList
)
{
for
(
Storage
storage
:
boxList
)
{
if
(
storage
.
isStorage
(
DeviceType
.
SMD_XLR
))
{
if
(
storage
.
isStorage
(
DeviceType
.
SMD_XLR
))
{
Collection
<
DataLog
>
boxQueueTasks
=
taskService
.
getQueueTasks
(
storage
.
getCid
());
Collection
<
DataLog
>
boxQueueTasks
=
taskService
.
getQueueTasks
(
storage
.
getCid
());
if
(
boxQueueTasks
.
isEmpty
())
{
if
(
boxQueueTasks
.
isEmpty
())
{
//料仓空闲,没有待执行的任务
//料仓空闲,没有待执行的任务
hasIdleBox
=
true
;
hasIdleBox
=
true
;
break
;
break
;
...
@@ -80,19 +84,22 @@ public class PreWarningItemCache {
...
@@ -80,19 +84,22 @@ public class PreWarningItemCache {
}
}
}
}
if
(
hasIdleBox
)
{
if
(
hasIdleBox
)
{
//最早的一条预警时间
//最早的一条预警时间
List
<
PreWarningItem
>
lineItems
=
new
ArrayList
<>();
List
<
PreWarningItem
>
lineItems
=
new
ArrayList
<>();
String
firstItemLine
=
""
;
String
firstItemLine
=
""
;
//每次最多出多少盘
//每次最多出多少盘
int
maxReelCount
=
30
;
int
maxReelCount
=
30
;
//如果取不到,从数据库中取
//如果取不到,从数据库中取
if
(
queueItemList
==
null
||
queueItemList
.
isEmpty
()){
if
(
queueItemList
==
null
||
queueItemList
.
isEmpty
())
{
queueItemList
=
dataCache
.
getCache
(
Constants
.
CACHE_preWarningItem
);
queueItemList
=
dataCache
.
getCache
(
Constants
.
CACHE_preWarningItem
);
}
}
if
(
queueItemList
==
null
||
queueItemList
.
isEmpty
())
{
return
;
}
for
(
PreWarningItem
preWarningItem
:
queueItemList
)
{
for
(
PreWarningItem
preWarningItem
:
queueItemList
)
{
String
itemLine
=
preWarningItem
.
getLine
();
String
itemLine
=
preWarningItem
.
getLine
();
if
(
Strings
.
isNotBlank
(
itemLine
))
{
if
(
Strings
.
isNotBlank
(
itemLine
))
{
if
(
firstItemLine
.
isEmpty
())
{
if
(
firstItemLine
.
isEmpty
())
{
firstItemLine
=
itemLine
;
firstItemLine
=
itemLine
;
if
(
System
.
currentTimeMillis
()
-
preWarningItem
.
getReceiveDate
().
getTime
()
<
1
*
60
*
1000
)
{
if
(
System
.
currentTimeMillis
()
-
preWarningItem
.
getReceiveDate
().
getTime
()
<
1
*
60
*
1000
)
{
...
@@ -101,18 +108,18 @@ public class PreWarningItemCache {
...
@@ -101,18 +108,18 @@ public class PreWarningItemCache {
}
}
}
}
//同一个线别的生成一个工单
//同一个线别的生成一个工单
if
(
itemLine
.
equals
(
firstItemLine
))
{
if
(
itemLine
.
equals
(
firstItemLine
))
{
lineItems
.
add
(
preWarningItem
);
lineItems
.
add
(
preWarningItem
);
}
}
if
(
lineItems
.
size
()
>
maxReelCount
)
{
if
(
lineItems
.
size
()
>
maxReelCount
)
{
break
;
break
;
}
}
}
}
}
}
if
(!
lineItems
.
isEmpty
())
{
if
(!
lineItems
.
isEmpty
())
{
createAndExecuteLiteOrder
(
lineItems
);
createAndExecuteLiteOrder
(
lineItems
);
//工单生成后,从缓存中清除
//工单生成后,从缓存中清除
updateItem
(
lineItems
,
true
);
updateItem
(
lineItems
,
true
);
}
}
}
}
}
}
...
@@ -120,6 +127,7 @@ public class PreWarningItemCache {
...
@@ -120,6 +127,7 @@ public class PreWarningItemCache {
/**
/**
* 根据预警信息挑选物料, 生成工单任务并执行
* 根据预警信息挑选物料, 生成工单任务并执行
*
* @param lineItems
* @param lineItems
*/
*/
private
static
void
createAndExecuteLiteOrder
(
List
<
PreWarningItem
>
lineItems
)
{
private
static
void
createAndExecuteLiteOrder
(
List
<
PreWarningItem
>
lineItems
)
{
...
@@ -137,14 +145,15 @@ public class PreWarningItemCache {
...
@@ -137,14 +145,15 @@ public class PreWarningItemCache {
//处理线别需求单
//处理线别需求单
LiteOrder
liteOrder
=
new
LiteOrder
();
LiteOrder
liteOrder
=
new
LiteOrder
();
liteOrder
.
setType
(
2
);
liteOrder
.
setType
(
2
);
liteOrder
.
setOrderNo
(
getSeq
());
liteOrder
.
setOrderNo
(
new
PreWarningItemCache
().
getSeq
());
liteOrder
.
setSo
(
getSeq
());
liteOrder
.
setSo
(
new
PreWarningItemCache
().
getSeq
());
List
<
LiteOrderItem
>
orderItems
=
new
ArrayList
<>();
List
<
LiteOrderItem
>
orderItems
=
new
ArrayList
<>();
for
(
PreWarningItem
item
:
lineItems
)
{
for
(
PreWarningItem
item
:
lineItems
)
{
liteOrder
.
setLine
(
item
.
getLine
());
liteOrder
.
setLine
(
item
.
getLine
());
//创建工单
//创建工单
LiteOrderItem
orderItem
=
new
LiteOrderItem
();
LiteOrderItem
orderItem
=
new
LiteOrderItem
();
while
(
true
)
{
boolean
flag
=
true
;
while
(
flag
)
{
String
partnumber
=
item
.
getPartnumber
();
String
partnumber
=
item
.
getPartnumber
();
Query
q
=
new
Query
();
Query
q
=
new
Query
();
//库位有数据
//库位有数据
...
@@ -157,16 +166,16 @@ public class PreWarningItemCache {
...
@@ -157,16 +166,16 @@ public class PreWarningItemCache {
}
}
//排除已经执行过的物料barcode
//排除已经执行过的物料barcode
if
(
outPosIds
!=
null
&&
!
outPosIds
.
isEmpty
())
{
if
(
outPosIds
!=
null
&&
!
outPosIds
.
isEmpty
())
{
c
.
and
(
"id"
).
nin
(
outPosIds
);
c
.
and
(
"id"
).
n
ot
().
in
(
outPosIds
);
}
}
//排除校验没通过的
//排除校验没通过的
if
(
noPossPosIds
!=
null
&&
!
noPossPosIds
.
isEmpty
())
{
if
(
noPossPosIds
!=
null
&&
!
noPossPosIds
.
isEmpty
())
{
c
.
and
(
"id"
).
n
in
(
noPossPosIds
);
// c.and("id").not().
in(noPossPosIds);
}
}
//排除正在执行出库的工位
//排除正在执行出库的工位
Collection
<
String
>
excludePosIds
=
taskService
.
excludePosIds
();
Collection
<
String
>
excludePosIds
=
taskService
.
excludePosIds
();
if
(
excludePosIds
!=
null
&&
!
excludePosIds
.
isEmpty
())
{
if
(
excludePosIds
!=
null
&&
!
excludePosIds
.
isEmpty
())
{
c
.
and
(
"id"
).
nin
(
noPoss
PosIds
);
// c.and("id").not().in(exclude
PosIds);
}
}
//排除正在执行的工单物料
//排除正在执行的工单物料
Collection
<
String
>
excludeBarcodeIds
=
liteOrderCache
.
excludeBarcodeIds
();
Collection
<
String
>
excludeBarcodeIds
=
liteOrderCache
.
excludeBarcodeIds
();
...
@@ -176,16 +185,17 @@ public class PreWarningItemCache {
...
@@ -176,16 +185,17 @@ public class PreWarningItemCache {
//然后最早入库的
//然后最早入库的
q
.
addCriteria
(
c
);
q
.
addCriteria
(
c
);
q
.
with
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"canCheckOutTime"
,
"barcode.subCodeList.usedCount"
)).
limit
(
5
);
q
.
with
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"canCheckOutTime"
,
"barcode.subCodeList.usedCount"
)).
limit
(
5
);
log
.
info
(
q
.
toString
());
//
log.info(q.toString());
List
<
StoragePos
>
storagePoss
=
storagePosManager
.
findByQuery
(
q
);
List
<
StoragePos
>
storagePoss
=
storagePosManager
.
findByQuery
(
q
);
orderItem
.
setPn
(
item
.
getPartnumber
());
orderItem
.
setPn
(
item
.
getPartnumber
());
orderItem
.
setSide
(
item
.
getSide
());
orderItem
.
setSide
(
item
.
getSide
());
orderItem
.
setFeederInfo
(
item
.
getSlot
());
orderItem
.
setFeederInfo
(
item
.
getSlot
());
orderItem
.
setTableNo
(
item
.
get
Machinename
());
orderItem
.
setTableNo
(
item
.
get
Station
());
if
(
storagePoss
==
null
||
storagePoss
.
isEmpty
())
{
if
(
storagePoss
==
null
||
storagePoss
.
isEmpty
())
{
orderItem
.
setRi
(
item
.
getPartnumber
());
orderItem
.
setRi
(
item
.
getPartnumber
());
orderItem
.
setNeedNum
(
0
);
orderItem
.
setNeedNum
(
0
);
orderItems
.
add
(
orderItem
);
orderItems
.
add
(
orderItem
);
flag
=
false
;
break
;
break
;
}
else
{
}
else
{
for
(
StoragePos
pos
:
storagePoss
)
{
for
(
StoragePos
pos
:
storagePoss
)
{
...
@@ -196,6 +206,8 @@ public class PreWarningItemCache {
...
@@ -196,6 +206,8 @@ public class PreWarningItemCache {
outPosIds
.
add
(
pos
.
getId
());
//防止其他地方出库
outPosIds
.
add
(
pos
.
getId
());
//防止其他地方出库
orderItem
.
setRi
(
barcode
.
getBarcode
());
orderItem
.
setRi
(
barcode
.
getBarcode
());
orderItem
.
setNeedNum
(
1
);
orderItem
.
setNeedNum
(
1
);
orderItems
.
add
(
orderItem
);
flag
=
false
;
break
;
break
;
}
else
{
}
else
{
log
.
info
(
"partNumber:{}校验失败:{}"
,
barcode
.
getPartNumber
(),
checkResult
);
log
.
info
(
"partNumber:{}校验失败:{}"
,
barcode
.
getPartNumber
(),
checkResult
);
...
@@ -205,13 +217,13 @@ public class PreWarningItemCache {
...
@@ -205,13 +217,13 @@ public class PreWarningItemCache {
}
}
}
}
}
}
if
(
orderItems
!=
null
&&
!
orderItems
.
isEmpty
())
{
}
liteOrder
.
setOrderItems
(
orderItems
);
if
(
orderItems
!=
null
&&
!
orderItems
.
isEmpty
())
{
liteOrder
.
setTaskReelCount
(
orderItems
.
size
()
);
liteOrder
.
setOrderItems
(
orderItems
);
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrder
.
setTaskReelCount
(
orderItems
.
size
()
);
liteOrderManager
.
save
(
liteOrder
);
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
liteOrderManager
.
save
(
liteOrder
);
}
liteOrderCache
.
addOrderToMap
(
liteOrder
);
}
}
}
}
...
@@ -231,16 +243,16 @@ public class PreWarningItemCache {
...
@@ -231,16 +243,16 @@ public class PreWarningItemCache {
/**
/**
* 定时执行,从缓存列表中取出预警Item生成工单并执行
* 定时执行,从缓存列表中取出预警Item生成工单并执行
*/
*/
public
static
void
runTimer
(){
public
static
void
runTimer
()
{
if
(
processing
)
{
if
(
processing
)
{
return
;
return
;
}
}
processing
=
true
;
processing
=
true
;
try
{
try
{
generateTask
();
generateTask
();
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"预警缓存定时器出错"
,
e
);
log
.
error
(
"预警缓存定时器出错"
,
e
);
}
finally
{
}
finally
{
processing
=
false
;
processing
=
false
;
}
}
}
}
...
@@ -271,7 +283,18 @@ public class PreWarningItemCache {
...
@@ -271,7 +283,18 @@ public class PreWarningItemCache {
PreWarningItemCache
.
storagePosManager
=
storagePosManager
;
PreWarningItemCache
.
storagePosManager
=
storagePosManager
;
}
}
private
static
String
getSeq
(){
return
UUID
.
randomUUID
().
toString
();
//待修改----
private
String
getSeq
()
{
// return "H" + getNextId(getEntityClass().getName());
int
seq
=
atomicInteger
.
addAndGet
(
1
);
return
"H"
+
seq
;
}
@Override
public
Class
getEntityClass
()
{
return
PreWarningItemCache
.
class
;
}
}
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论