Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit a4eca56d
由
孙克
编写于
2024-10-15 18:10:29 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
获取料仓下一个出库任务逻辑整理修改
1 个父辈
b0a3ac6e
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
137 行增加
和
6 行删除
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
查看文件 @
a4eca56
...
...
@@ -102,11 +102,11 @@ public class TaskService {
*/
public
static
Map
<
String
,
String
>
exportMap
=
Maps
.
newConcurrentMap
();
// public TaskService(List<ITaskListener> listenerList){
// for (ITaskListener taskListener: listenerList) {
// taskListenerList.add(taskListener);
// }
// }
/**
* 某个料仓上一盘任务的所属工单
*/
private
static
Map
<
String
,
String
>
sourceIdMap
=
Maps
.
newConcurrentMap
();
/**
* 条码入库,加入要执行的任务
...
...
@@ -552,7 +552,7 @@ public class TaskService {
if
(
outTask
!=
null
)
{
log
.
info
(
outTask
.
getSourceName
()+
"barcode为:"
+
outTask
.
getBarcode
()+
"面别为:"
+
outTask
.
getSide
());
log
.
info
(
outTask
.
getSourceName
()+
"
barcode为:"
+
outTask
.
getBarcode
()+
"面别为:"
+
outTask
.
getSide
());
if
(
StringUtils
.
isNotBlank
(
outTask
.
getSide
()))
{
exportMap
.
put
(
cid
,
outTask
.
getExport
());
...
...
@@ -613,6 +613,137 @@ public class TaskService {
}
/**
* 获取料仓的下一个出库任务(与上一个工单号不同,先找大盘,再找小盘)
* @param cid
* @return
*/
public
DataLog
getNextTaskInStorage
(
String
cid
){
DataLog
needOutTask
=
null
;
String
sourceId
=
sourceIdMap
.
get
(
cid
);
List
<
String
>
taskSourceIds
=
getTaskSourceIds
(
cid
);
int
startSourceIdIndex
=
0
;
if
(
sourceId
!=
null
&&
taskSourceIds
.
contains
(
sourceId
)){
startSourceIdIndex
=
taskSourceIds
.
indexOf
(
sourceId
)
+
1
;
//如果要优先出最早的工单,去掉这里的注释
//if(startSourceIdIndex > 1){
// startSourceIdIndex = 0;
//}
}
for
(
int
i
=
startSourceIdIndex
;
i
<
taskSourceIds
.
size
();
i
++)
{
String
needOutSourceId
=
taskSourceIds
.
get
(
i
);
needOutTask
=
findBigReelTask
(
cid
,
needOutSourceId
);
if
(
needOutTask
==
null
){
needOutTask
=
findSmallReelTask
(
cid
,
needOutSourceId
);
}
if
(
needOutTask
!=
null
){
sourceIdMap
.
put
(
cid
,
needOutSourceId
);
log
.
info
(
"当前料仓所有工单为: "
+
String
.
join
(
","
,
taskSourceIds
)
+
", 上一盘工单ID为:"
+
sourceId
+
" 找到出库物料["
+
needOutTask
.
getBarcode
()+
"]工单["
+
needOutTask
.
getSourceName
()+
"]ID为:"
+
needOutSourceId
);
return
needOutTask
;
}
}
if
(
needOutTask
==
null
){
//如果没找到, 从第一个工单重新找
for
(
String
needOutSourceId
:
taskSourceIds
)
{
needOutTask
=
findBigReelTask
(
cid
,
needOutSourceId
);
if
(
needOutTask
==
null
){
needOutTask
=
findSmallReelTask
(
cid
,
needOutSourceId
);
}
if
(
needOutTask
!=
null
){
sourceIdMap
.
put
(
cid
,
needOutSourceId
);
log
.
info
(
"当前料仓所有工单为: "
+
String
.
join
(
","
,
taskSourceIds
)
+
", 上一盘工单ID为:"
+
sourceId
+
" 第二轮找到出库物料["
+
needOutTask
.
getBarcode
()+
"]工单["
+
needOutTask
.
getSourceName
()+
"]ID为:"
+
needOutSourceId
);
return
needOutTask
;
}
}
}
return
needOutTask
;
}
/**
* 获取料仓指定工单的大盘任务
* @param cid
* @param sourceId
* @return
*/
private
DataLog
findBigReelTask
(
String
cid
,
String
sourceId
){
List
<
DataLog
>
allTasks
=
getAllTasks
();
for
(
DataLog
task
:
allTasks
)
{
if
(
cid
.
equals
(
task
.
getCid
())
&&
task
.
isCheckOutTask
()
&&
task
.
isWait
())
{
if
(
task
.
getPlateSize
()
>
7
){
String
taskSourceId
=
task
.
getSourceId
();
if
(
taskSourceId
==
null
){
taskSourceId
=
""
;
}
if
(
taskSourceId
.
equals
(
sourceId
)){
return
task
;
}
}
}
}
return
null
;
}
/**
* 获取料仓的所有未执行任务的工单ID(按时间排序)
* @param cid
* @return
*/
private
List
<
String
>
getTaskSourceIds
(
String
cid
){
List
<
DataLog
>
allTasks
=
getAllTasks
();
allTasks
.
sort
(
new
Comparator
<
DataLog
>()
{
@Override
public
int
compare
(
DataLog
o1
,
DataLog
o2
)
{
return
o1
.
getCreateDate
().
compareTo
(
o2
.
getCreateDate
());
}
});
List
<
String
>
sourceIds
=
new
ArrayList
<>();
for
(
DataLog
task
:
allTasks
)
{
if
(
cid
.
equals
(
task
.
getCid
())
&&
task
.
isCheckOutTask
()
&&
task
.
isWait
())
{
String
sourceId
=
task
.
getSourceId
();
if
(!
Strings
.
isNullOrEmpty
(
sourceId
)
&&
!
sourceIds
.
contains
(
sourceId
)){
sourceIds
.
add
(
sourceId
);
}
}
}
return
sourceIds
;
}
/**
* 查找料仓指定工单的小盘任务(如果其他料仓有大料盘未出,优先出)
* @param cid
* @param sourceId
* @return
*/
private
DataLog
findSmallReelTask
(
String
cid
,
String
sourceId
){
List
<
DataLog
>
allTasks
=
getAllTasks
();
boolean
otherStorageHasBigReel
=
otherStorageHasBigReel
(
allTasks
,
sourceId
);
String
limitSide
=
""
;
if
(
otherStorageHasBigReel
){
//其他仓有大料盘未出,限制T面出库(即出B面的小盘)
limitSide
=
"T"
;
}
for
(
DataLog
task
:
allTasks
)
{
if
(
cid
.
equals
(
task
.
getCid
())
&&
task
.
isCheckOutTask
()
&&
task
.
isWait
())
{
if
(
task
.
getPlateSize
()
<=
7
){
String
taskSourceId
=
task
.
getSourceId
();
if
(
taskSourceId
==
null
){
taskSourceId
=
""
;
}
String
side
=
task
.
getSide
();
if
(
side
==
null
){
side
=
""
;
}
if
(
taskSourceId
.
equals
(
sourceId
)
&&
!
limitSide
.
equals
(
side
)){
return
task
;
}
}
}
}
return
null
;
}
public
DataLog
getNeedOutTask
(
Collection
<
DataLog
>
allTasks
,
String
exportStr
,
String
cid
,
boolean
hasExport
)
{
DataLog
outTask
=
null
;
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论