Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 0048a539
由
孙克
编写于
2025-03-08 15:31:43 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
修改出库任务分配逻辑,按照工痊13572468的顺序进行出库
1 个父辈
08deb920
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
104 行增加
和
57 行删除
src/main/java/com/neotel/smfcore/core/device/handler/impl/XLRBoxHandler.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/XLRBoxHandler.java
查看文件 @
0048a53
...
@@ -2,8 +2,10 @@ package com.neotel.smfcore.core.device.handler.impl;
...
@@ -2,8 +2,10 @@ package com.neotel.smfcore.core.device.handler.impl;
import
cn.hutool.core.thread.FinalizableDelegatedExecutorService
;
import
cn.hutool.core.thread.FinalizableDelegatedExecutorService
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.google.common.base.Strings
;
import
com.google.common.base.Strings
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.google.common.collect.Maps
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.Constants
;
...
@@ -301,10 +303,8 @@ public class XLRBoxHandler extends BaseDeviceHandler {
...
@@ -301,10 +303,8 @@ public class XLRBoxHandler extends BaseDeviceHandler {
return
boxTask
;
return
boxTask
;
}
}
//分配出料口不为空的
//先提取当前料仓出料口不为空的待执行任务
DataLog
orderTask
=
null
;
List
<
DataLog
>
boxTaskListToExecute
=
new
ArrayList
<>();
//先提取出料口不为空的
List
<
DataLog
>
notEmptyExportList
=
new
ArrayList
<>();
for
(
DataLog
dataLog
:
dataLogList
)
{
for
(
DataLog
dataLog
:
dataLogList
)
{
if
(
dataLog
.
isCheckOutTask
()
&&
dataLog
.
isWait
()
&&
cid
.
equals
(
dataLog
.
getCid
()))
{
if
(
dataLog
.
isCheckOutTask
()
&&
dataLog
.
isWait
()
&&
cid
.
equals
(
dataLog
.
getCid
()))
{
String
export
=
dataLog
.
getExport
();
String
export
=
dataLog
.
getExport
();
...
@@ -313,78 +313,125 @@ public class XLRBoxHandler extends BaseDeviceHandler {
...
@@ -313,78 +313,125 @@ public class XLRBoxHandler extends BaseDeviceHandler {
isBox
=
false
;
isBox
=
false
;
}
}
if
(
StringUtils
.
isNotEmpty
(
export
)
&&
!
isBox
)
{
if
(
StringUtils
.
isNotEmpty
(
export
)
&&
!
isBox
)
{
notEmptyExportList
.
add
(
dataLog
);
boxTaskListToExecute
.
add
(
dataLog
);
}
}
}
}
}
}
//获取到站位相同的任务
List
<
DataLog
>
resultList
=
new
ArrayList
<>();
//获取到站位相同的任务
for
(
DataLog
dataLog
:
notEmptyExportList
)
{
String
export
=
dataLog
.
getExport
();
String
feederInfo
=
dataLog
.
getAppendData
(
"feederInfo"
);
String
feeder
=
StorageExportUtil
.
getCurrentExportFeeder
(
export
);
if
(
feederInfo
.
startsWith
(
feeder
))
{
resultList
.
add
(
dataLog
);
}
}
if
(
resultList
!=
null
&&
!
resultList
.
isEmpty
())
{
Collections
.
sort
(
resultList
,
(
o1
,
o2
)
->
{
String
feederInfo1
=
o1
.
getAppendData
(
"feederInfo"
);
String
feederInfo2
=
o2
.
getAppendData
(
"feederInfo"
);
return
feederInfo1
.
compareTo
(
feederInfo2
);
});
String
lastExportMap
=
lastOutExportMap
.
get
(
cid
);
String
lastExport
=
lastOutExportMap
.
get
(
cid
);
log
.
info
(
cid
+
"对应的上一次出料口为:"
+
lastExportMap
);
log
.
info
(
cid
+
"对应的上一次出料口为:"
+
lastExport
);
//查找下一出口的任务, 出口顺序为13572468, 桶的顺序为3,2,1
DataLog
orderTask
=
findNextTask
(
boxTaskListToExecute
,
lastExport
);
//获取到所有的出料口
if
(
orderTask
!=
null
)
{
List
<
String
>
allEportList
=
new
ArrayList
<>();
log
.
info
(
"分配出库任务,站位号为:"
+
orderTask
.
getAppendData
(
"feederInfo"
)
+
",出料口为:"
+
orderTask
.
getExport
()
+
",barcode为:"
+
orderTask
.
getBarcode
());
for
(
DataLog
dataLog
:
resultList
)
{
lastOutExportMap
.
put
(
cid
,
orderTask
.
getExport
());
String
export
=
dataLog
.
getExport
();
if
(
allEportList
.
isEmpty
())
{
allEportList
.
add
(
export
);
}
else
{
}
else
{
if
(!
allEportList
.
contains
(
export
))
{
lastOutExportMap
.
put
(
cid
,
""
);
allEportList
.
add
(
export
);
}
}
}
return
orderTask
;
}
}
allEportList
=
allEportList
.
stream
().
sorted
().
collect
(
Collectors
.
toList
());
int
index
=
0
;
//寻找到对应的index
for
(
int
i
=
0
;
i
<
allEportList
.
size
();
i
++)
{
String
export
=
allEportList
.
get
(
i
);
//工位出库顺序UM1,UM3,UM5,UM7,UM2,UM4,UM6,UM8,工位排布顺序为UM8,MU7,UM4,UM3,|料仓出口皮带|,UM2,UM1,UM6,UM5,NG口, 这样可以同一个工单可以同时用上左右两边的皮带
if
(
export
.
equals
(
lastExportMap
)){
List
<
String
>
outStationSequence
=
Lists
.
newArrayList
(
"UM1"
,
"UM3"
,
"UM5"
,
"UM7"
,
"UM2"
,
"UM4"
,
"UM6"
,
"UM8"
);
index
=
i
;
break
;
//工位上料桶的出库顺序为3,2,1,即首盘优先
List
<
String
>
outBucketSequence
=
Lists
.
newArrayList
(
"_3"
,
"_2"
,
"_1"
);
/**
* 查找下一个任务
* @param taskListToExcute
* @param lastTaskExport
* @return
*/
public
DataLog
findNextTask
(
List
<
DataLog
>
taskListToExcute
,
String
lastTaskExport
){
if
(
taskListToExcute
==
null
||
taskListToExcute
.
isEmpty
()){
return
null
;
}
}
boolean
start
=
false
;
//第一盘,从头出
if
(
Strings
.
isNullOrEmpty
(
lastTaskExport
)){
start
=
true
;
}
}
if
(
index
!=
0
)
{
for
(
String
station
:
outStationSequence
)
{
index
=
index
+
1
;
if
(
start
){
if
(
index
>=
allEportList
.
size
())
{
//task的顺序按照3,2,1出,
index
=
0
;
for
(
String
bucket
:
outBucketSequence
)
{
String
export
=
station
+
bucket
;
DataLog
exportTask
=
findExportTask
(
taskListToExcute
,
export
);
if
(
exportTask
!=
null
){
return
exportTask
;
}
}
}
}
String
nextExport
=
allEportList
.
get
(
index
);
}
else
{
log
.
info
(
cid
+
"获取到下一个出料口为:"
+
nextExport
);
String
currentExport
=
lastTaskExport
;
for
(
DataLog
dataLog
:
resultList
)
{
if
(
currentExport
.
startsWith
(
station
)){
if
(
nextExport
.
equals
(
dataLog
.
getExport
())){
start
=
true
;
orderTask
=
dataLog
;
break
;
}
}
}
}
}
}
if
(
orderTask
!=
null
)
{
log
.
info
(
"分配出库任务,站位号为:"
+
orderTask
.
getAppendData
(
"feederInfo"
)
+
",出料口为:"
+
orderTask
.
getExport
()
+
",barcode为:"
+
orderTask
.
getBarcode
());
//到这里还没有返回, 需要从第一个再找一遍
lastOutExportMap
.
put
(
cid
,
orderTask
.
getExport
());
for
(
String
station
:
outStationSequence
)
{
}
else
{
//task的顺序按照3,2,1出,
lastOutExportMap
.
put
(
cid
,
""
);
for
(
String
bucket
:
outBucketSequence
)
{
String
export
=
station
+
bucket
;
DataLog
exportTask
=
findExportTask
(
taskListToExcute
,
export
);
if
(
exportTask
!=
null
){
return
exportTask
;
}
}
}
return
orderTask
;
}
}
return
null
;
}
/**
* 查找某个出口的任务
* @param taskListToExcute
* @param export
* @return
*/
private
static
DataLog
findExportTask
(
List
<
DataLog
>
taskListToExcute
,
String
export
){
for
(
DataLog
task
:
taskListToExcute
)
{
String
taskExport
=
task
.
getExport
();
if
(
taskExport
.
startsWith
(
export
)){
return
task
;
}
}
return
null
;
}
// public static void main(String[] args) {
// List<DataLog> taskListToExcute = new ArrayList<>();
// int index = 1;
// for (int i = 1; i <= 8; i++) {
// for (int bucket = 1; bucket <=3; bucket ++){
// int taskCount = RandomUtil.getRandom().nextInt(5);
// for (int count = 0; count< taskCount;count++){
// String export = "UM" + i +"_" + bucket;
// DataLog dataLog = new DataLog();
// dataLog.setId("" + index++);
// dataLog.setExport(export);
// taskListToExcute.add(dataLog);
// System.out.print(export+";");
// }
// }
// }
// int totleCount = taskListToExcute.size();
// System.out.println("任务数:" + totleCount);
// String lastExport = "";
// for (int i = 0; i < totleCount; i++) {
// DataLog nextTask = new XLRBoxHandler().findNextTask(taskListToExcute,lastExport);
// System.out.println(nextTask.getId() + "\t"+nextTask.getExport());
// lastExport = nextTask.getExport();
// taskListToExcute.remove(nextTask);
// }
// }
Map
<
String
,
String
>
lastOutExportMap
=
Maps
.
newConcurrentMap
();
Map
<
String
,
String
>
lastOutExportMap
=
Maps
.
newConcurrentMap
();
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论