Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 07b04f6e
由
zshaohui
编写于
2023-10-23 16:59:51 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.取消任务代码优化
2.人工喂料增加禁用信息 3.外仓呼叫空箱优化
1 个父辈
33a60f6c
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
102 行增加
和
51 行删除
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/system/util/TaskService.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/core/order/LiteOrderCache.java
查看文件 @
07b04f6
...
@@ -873,6 +873,9 @@ public class LiteOrderCache {
...
@@ -873,6 +873,9 @@ public class LiteOrderCache {
List
<
String
>
partNumberList
=
cacheOrder
.
getOrderItems
().
stream
().
map
(
item
->
item
.
getPn
()).
collect
(
Collectors
.
toList
());
List
<
String
>
partNumberList
=
cacheOrder
.
getOrderItems
().
stream
().
map
(
item
->
item
.
getPn
()).
collect
(
Collectors
.
toList
());
List
<
StoragePos
>
allStoragePosList
=
storagePosManager
.
findStoragePosByPartNumber
(
partNumberList
);
List
<
StoragePos
>
allStoragePosList
=
storagePosManager
.
findStoragePosByPartNumber
(
partNumberList
);
//已经校验过的料箱信息
List
<
String
>
alreadyCheckBox
=
new
ArrayList
<>();
List
<
StoragePos
>
needOutPoss
=
new
ArrayList
<>();
List
<
StoragePos
>
needOutPoss
=
new
ArrayList
<>();
int
orderTaskReelCount
=
0
;
int
orderTaskReelCount
=
0
;
//开始循环处理工单详情
//开始循环处理工单详情
...
@@ -941,7 +944,22 @@ public class LiteOrderCache {
...
@@ -941,7 +944,22 @@ public class LiteOrderCache {
//调用批量禁用料接口
//调用批量禁用料接口
List
<
String
>
batchCheckList
=
new
ArrayList
<>();
List
<
String
>
batchCheckList
=
new
ArrayList
<>();
try
{
try
{
if
(
alreadyCheckBox
!=
null
&&
!
alreadyCheckBox
.
isEmpty
()){
if
(
alreadyCheckBox
.
contains
(
barcode
.
getBarcode
())){
}
else
{
log
.
info
(
"当前料箱已经校验过:"
+
barcode
.
getBarcode
());
batchCheckList
=
lizhenApi
.
batchCheck
(
subCodeList
);
batchCheckList
=
lizhenApi
.
batchCheck
(
subCodeList
);
if
(
batchCheckList
==
null
||
batchCheckList
.
isEmpty
()){
alreadyCheckBox
.
add
(
barcode
.
getBarcode
());
}
}
}
else
{
batchCheckList
=
lizhenApi
.
batchCheck
(
subCodeList
);
if
(
batchCheckList
==
null
||
batchCheckList
.
isEmpty
()){
alreadyCheckBox
.
add
(
barcode
.
getBarcode
());
}
}
}
catch
(
Exception
e
){
}
catch
(
Exception
e
){
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
...
...
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
查看文件 @
07b04f6
...
@@ -274,46 +274,52 @@ public class TaskService {
...
@@ -274,46 +274,52 @@ public class TaskService {
return
tasks
;
return
tasks
;
}
}
private
boolean
cancelTask
(
DataLog
task
)
{
private
synchronized
boolean
cancelTask
(
DataLog
task
)
{
if
(
task
!=
null
)
{
if
(
task
!=
null
)
{
//从正在执行和等待列表中移除
//进行库位屏蔽
removeQueueTask
(
task
);
if
(!
task
.
isFinished
())
{
task
.
setStatus
(
OP_STATUS
.
CANCEL
.
name
());
task
.
setUpdateDate
(
new
Date
());
updateFinishedTask
(
task
);
log
.
info
(
"任务["
+
task
.
getId
()
+
"] posName["
+
task
.
getPosName
()
+
"] Reel Id["
+
task
.
getBarcode
()
+
"]取消成功"
);
//同时进行库位屏蔽
if
(
/*task.isPutInTask() &&*/
!
task
.
isFinished
()){
String
posName
=
task
.
getPosName
();
String
posName
=
task
.
getPosName
();
if
(
StringUtils
.
isNotBlank
(
posName
)){
if
(
StringUtils
.
isNotBlank
(
posName
))
{
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
pos
!=
null
){
if
(
pos
!=
null
)
{
//排查料架
String
storageId
=
pos
.
getStorageId
();
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
Storage
storage
=
dataCache
.
getStorageById
(
storageId
);
if
(!
storage
.
isNLShelf
()
&&
!
storage
.
isNLMShelf
()
&&
!
storage
.
isNLPShelf
()
&&
!
storage
.
isShelf
())
{
//1.排除料架
if
(!
storage
.
isNLShelf
()
&&
!
storage
.
isNLMShelf
()
&&
!
storage
.
isShelf
()
&&
!
storage
.
isNLPShelf
()){
pos
.
setEnabled
(
false
);
pos
.
setEnabled
(
false
);
pos
.
setMsg
(
"任务取消,屏蔽库位"
);
pos
.
setMsg
(
"任务取消,屏蔽库位"
);
storagePosManager
.
save
(
pos
);
log
.
info
(
"任务取消,屏蔽库位:库位号["
+
pos
.
getId
()
+
"]["
+
pos
.
getPosName
()
+
"]barcode["
+
task
.
getBarcode
()
+
"]"
);
//2.判断库位中barcode是否为空
DeviceMessageUtil
.
addEnabledPosMessage
(
pos
,
SecurityUtils
.
getCurrentUsername
());
if
(
task
.
isCheckOutTask
()){
}
Barcode
barcode
=
pos
.
getBarcode
();
//清除标记
if
(
barcode
!=
null
){
Barcode
barcode
=
clearOut
(
pos
.
getBarcode
());
barcode
=
clearOut
(
barcode
);
//如果是出库任务,同时更新库位信息
if
(
task
.
isCheckOutTask
())
{
if
(
pos
.
getBarcode
()
!=
null
)
{
pos
.
setBarcode
(
barcode
);
pos
.
setBarcode
(
barcode
);
storagePosManager
.
save
(
pos
);
}
else
{
Barcode
oriBarcode
=
barcodeManager
.
findByBarcode
(
task
.
getBarcode
());
if
(
oriBarcode
!=
null
){
clearOut
(
oriBarcode
);
}
}
}
}
storagePosManager
.
save
(
pos
);
log
.
info
(
"任务取消,屏蔽库位:库位号["
+
pos
.
getId
()
+
"]["
+
pos
.
getPosName
()
+
"]barcode["
+
task
.
getBarcode
()
+
"]"
);
}
}
}
}
}
}
//从正在执行和等待列表中移除
removeQueueTask
(
task
);
task
.
setStatus
(
OP_STATUS
.
CANCEL
.
name
());
task
.
setUpdateDate
(
new
Date
());
updateFinishedTask
(
task
);
log
.
info
(
"任务["
+
task
.
getId
()
+
"] posName["
+
task
.
getPosName
()
+
"] Reel Id["
+
task
.
getBarcode
()
+
"]取消成功"
);
//解除绑定
//解除绑定
ReelLockPosUtil
.
removeReelLockPosInfo
(
task
.
getBarcode
());
ReelLockPosUtil
.
removeReelLockPosInfo
(
task
.
getBarcode
());
}
return
true
;
return
true
;
}
}
}
return
false
;
return
false
;
}
}
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/agvBox/rest/WarehouseController.java
查看文件 @
07b04f6
...
@@ -1351,37 +1351,15 @@ public class WarehouseController {
...
@@ -1351,37 +1351,15 @@ public class WarehouseController {
private
synchronized
DataLog
getCallEmptyBoxTask
(
String
platsize
,
String
name
)
{
private
synchronized
DataLog
getCallEmptyBoxTask
(
String
platsize
,
String
name
)
{
//获取料箱id
String
storageId
=
""
;
Collection
<
Storage
>
storages
=
dataCache
.
getAllStorage
().
values
();
for
(
Storage
storage
:
storages
)
{
if
(
storage
.
isType
(
new
DeviceType
[]{
DeviceType
.
AGV_BOX
}))
{
storageId
=
storage
.
getId
();
}
}
Criteria
c
=
Criteria
.
where
(
"barcode"
).
exists
(
true
).
and
(
"enabled"
).
is
(
true
);
//可用
//排除掉正在使用的仓位
Collection
<
String
>
excludePosIds
=
taskService
.
excludePosIds
();
if
(
excludePosIds
!=
null
&&
!
excludePosIds
.
isEmpty
())
{
c
.
and
(
"id"
).
nin
(
excludePosIds
);
}
//料仓id
if
(
StringUtils
.
isNotBlank
(
storageId
))
{
c
.
and
(
"storageId"
).
is
(
storageId
);
}
//料盘数量小于70盘
c
.
and
(
"barcode.reelAmount"
).
lte
(
70
);
//进行排序方式
Query
q
=
new
Query
(
c
).
with
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.amount"
));
StoragePos
pos
=
null
;
StoragePos
pos
=
null
;
List
<
StoragePos
>
poss
=
new
ArrayList
<>();
List
<
StoragePos
>
poss
=
new
ArrayList
<>();
if
(
"15"
.
equals
(
platsize
))
{
if
(
"15"
.
equals
(
platsize
))
{
poss
=
storagePosManager
.
findByQuery
(
q
.
addCriteria
(
Criteria
.
where
(
"barcode.partNumber"
).
regex
(
Pattern
.
compile
(
QueryHelp
.
escapeExprSpecialWord
(
"CM"
),
Pattern
.
CASE_INSENSITIVE
))
));
poss
=
storagePosManager
.
findByQuery
(
getCallEmptyBox
(
"CM"
));
}
else
{
}
else
{
poss
=
storagePosManager
.
findByQuery
(
q
.
addCriteria
(
Criteria
.
where
(
"barcode.partNumber"
).
regex
(
Pattern
.
compile
(
QueryHelp
.
escapeExprSpecialWord
(
"CS"
),
Pattern
.
CASE_INSENSITIVE
))
));
poss
=
storagePosManager
.
findByQuery
(
getCallEmptyBox
(
"CS"
));
if
(
poss
==
null
||
poss
.
isEmpty
())
{
if
(
poss
==
null
||
poss
.
isEmpty
())
{
poss
=
storagePosManager
.
findByQuery
(
q
.
addCriteria
(
Criteria
.
where
(
"barcode.partNumber"
).
regex
(
Pattern
.
compile
(
QueryHelp
.
escapeExprSpecialWord
(
"CB"
),
Pattern
.
CASE_INSENSITIVE
))
));
poss
=
storagePosManager
.
findByQuery
(
getCallEmptyBox
(
"CB"
));
}
}
}
}
//找隔口中 没有物料的箱子
//找隔口中 没有物料的箱子
...
@@ -1432,6 +1410,42 @@ public class WarehouseController {
...
@@ -1432,6 +1410,42 @@ public class WarehouseController {
}
}
private
Query
getCallEmptyBox
(
String
partNUmber
)
{
//获取料箱id
String
storageId
=
""
;
Collection
<
Storage
>
storages
=
dataCache
.
getAllStorage
().
values
();
for
(
Storage
storage
:
storages
)
{
if
(
storage
.
isType
(
new
DeviceType
[]{
DeviceType
.
AGV_BOX
}))
{
storageId
=
storage
.
getId
();
}
}
Criteria
c
=
Criteria
.
where
(
"barcode"
).
exists
(
true
).
and
(
"enabled"
).
is
(
true
);
//可用
//排除掉正在使用的仓位
Collection
<
String
>
excludePosIds
=
taskService
.
excludePosIds
();
if
(
excludePosIds
!=
null
&&
!
excludePosIds
.
isEmpty
())
{
c
.
and
(
"id"
).
nin
(
excludePosIds
);
}
//料仓id
if
(
StringUtils
.
isNotBlank
(
storageId
))
{
c
.
and
(
"storageId"
).
is
(
storageId
);
}
//料盘数量小于70盘
c
.
and
(
"barcode.reelAmount"
).
lte
(
70
);
//匹配料箱
c
.
and
(
"barcode.partNumber"
).
regex
(
Pattern
.
compile
(
QueryHelp
.
escapeExprSpecialWord
(
partNUmber
),
Pattern
.
CASE_INSENSITIVE
));
//进行排序方式
Query
q
=
new
Query
(
c
);
q
.
with
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.amount"
));
//包含哪些字段
q
.
fields
().
include
(
"id"
,
"storageId"
,
"posName"
,
"barcode.partNumber"
,
"barcode.barcode"
,
"barcode.amount"
,
"barcode.memo"
,
"barcode.putInDate"
,
"barcode.putInTime"
,
"barcode.describe"
,
"barcode.subCodeList.posName"
);
return
q
;
}
/**
/**
* 获取正在执行的任务
* 获取正在执行的任务
*
*
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/rest/InnerBoxRestController.java
查看文件 @
07b04f6
...
@@ -6,6 +6,7 @@ import com.neotel.smfcore.common.utils.JsonUtil;
...
@@ -6,6 +6,7 @@ import com.neotel.smfcore.common.utils.JsonUtil;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.common.utils.ReelLockPosUtil
;
import
com.neotel.smfcore.common.utils.ReelLockPosUtil
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.api.SmfApi
;
import
com.neotel.smfcore.core.barcode.bean.CodeBean
;
import
com.neotel.smfcore.core.barcode.bean.CodeBean
;
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
;
...
@@ -84,6 +85,9 @@ public class InnerBoxRestController {
...
@@ -84,6 +85,9 @@ public class InnerBoxRestController {
@Autowired
@Autowired
private
IDataLogManager
dataLogManager
;
private
IDataLogManager
dataLogManager
;
@Autowired
private
SmfApi
smfApi
;
//料架缓存id
//料架缓存id
private
static
Map
<
String
,
String
>
labelOrderItemMap
=
new
ConcurrentHashMap
<>();
private
static
Map
<
String
,
String
>
labelOrderItemMap
=
new
ConcurrentHashMap
<>();
...
@@ -511,6 +515,15 @@ public class InnerBoxRestController {
...
@@ -511,6 +515,15 @@ public class InnerBoxRestController {
if
(
barcode
==
null
)
{
if
(
barcode
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.error.barcode.invalid"
,
"{0}不是有效的条码"
,
new
String
[]{
barcodestr
});
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.error.barcode.invalid"
,
"{0}不是有效的条码"
,
new
String
[]{
barcodestr
});
}
}
//手动喂料时,增加判断是不是禁用料
try
{
smfApi
.
canPutInAfterResolve
(
barcode
);
}
catch
(
ValidateException
e
)
{
e
.
printStackTrace
();
return
ResultBean
.
newErrorResult
(-
1
,
""
,
e
.
getMessage
());
}
//不在仓中,不允许出库
//不在仓中,不允许出库
StoragePos
storagePos
=
storagePosManager
.
getByBarcode
(
barcode
.
getBarcode
());
StoragePos
storagePos
=
storagePosManager
.
getByBarcode
(
barcode
.
getBarcode
());
if
(
storagePos
==
null
){
if
(
storagePos
==
null
){
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论