Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 31d914f3
由
zshaohui
编写于
2025-01-21 09:28:57 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.出库任务分配逻辑修改
2.平板上扫码展示对应的出料口
1 个父辈
e66998d0
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
119 行增加
和
37 行删除
src/main/java/com/neotel/smfcore/core/device/handler/impl/XLRBoxHandler.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/bean/dto/StorageExportOutDetailDto.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/JkemController.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/UmExportSettingController.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/util/StorageExportUtil.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/XLRBoxHandler.java
查看文件 @
31d914f
package
com
.
neotel
.
smfcore
.
core
.
device
.
handler
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.google.common.base.Strings
;
import
com.google.common.collect.Maps
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.StringUtils
;
...
...
@@ -185,10 +187,10 @@ public class XLRBoxHandler extends BaseDeviceHandler {
List
<
DataLog
>
dataLogList
=
new
ArrayList
<>();
for
(
DataLog
dataLog
:
allTasks
)
{
if
(
dataLog
.
isPutInTask
()){
if
(
dataLog
.
isPutInTask
())
{
continue
;
}
if
(
dataLog
.
isFinished
()
||
dataLog
.
isCancel
()){
if
(
dataLog
.
isFinished
()
||
dataLog
.
isCancel
())
{
continue
;
}
/*for (StoragePos pos : usedPosList.values()) {
...
...
@@ -274,7 +276,7 @@ public class XLRBoxHandler extends BaseDeviceHandler {
String
posName
=
task
.
getPosName
();
if
(!
Strings
.
isNullOrEmpty
(
posName
))
{
//有库位号
Boolean
isBox
=
task
.
getAppendData
(
"isBox"
);
if
(
isBox
==
null
){
if
(
isBox
==
null
)
{
isBox
=
false
;
}
if
(
isBox
)
{
...
...
@@ -284,14 +286,14 @@ public class XLRBoxHandler extends BaseDeviceHandler {
}
}
else
{
String
barcode
=
task
.
getBarcode
();
if
(
barcode
.
startsWith
(
"T0"
)
&&
barcode
.
length
()
==
9
){
if
(
barcode
.
startsWith
(
"T0"
)
&&
barcode
.
length
()
==
9
)
{
boxTask
=
task
;
}
}
}
}
}
if
(
boxTask
!=
null
){
if
(
boxTask
!=
null
)
{
log
.
info
(
"分配优先治具的出库任务"
+
boxTask
.
getBarcode
()
+
"["
+
boxTask
.
getPosName
()
+
"]到 "
+
cid
);
return
boxTask
;
}
...
...
@@ -304,7 +306,7 @@ public class XLRBoxHandler extends BaseDeviceHandler {
if
(
dataLog
.
isCheckOutTask
()
&&
!
dataLog
.
isCancel
()
&&
!
dataLog
.
isFinished
()
&&
!
dataLog
.
isOnLine
()
&&
!
dataLog
.
isInLine
())
{
String
export
=
dataLog
.
getExport
();
Boolean
isBox
=
dataLog
.
getAppendData
(
"isBox"
);
if
(
isBox
==
null
){
if
(
isBox
==
null
)
{
isBox
=
false
;
}
if
(
StringUtils
.
isNotEmpty
(
export
)
&&
!
isBox
)
{
...
...
@@ -313,38 +315,86 @@ public class XLRBoxHandler extends BaseDeviceHandler {
}
}
//获取到上一个出料口和下一个出料口
String
lastOutExport
=
lastOutExportMap
.
get
(
cid
);
List
<
String
>
nextOutExportList
=
getNextOutExport
(
lastOutExport
);
log
.
info
(
cid
+
"对应的上一个出料口为:"
+
lastOutExport
+
"获取到的出料口顺序为:"
+
JSON
.
toJSONString
(
nextOutExportList
));
//按出料口进行分组
Map
<
String
,
List
<
DataLog
>>
map
=
notEmptyExportList
.
stream
().
collect
(
Collectors
.
groupingBy
(
DataLog:
:
getExport
));
for
(
String
key
:
map
.
keySet
())
{
List
<
DataLog
>
groupByList
=
map
.
get
(
key
);
Collections
.
sort
(
groupByList
,
new
Comparator
<
DataLog
>()
{
@Override
public
int
compare
(
DataLog
o1
,
DataLog
o2
)
{
for
(
String
nextOutExport
:
nextOutExportList
)
{
Map
<
String
,
List
<
DataLog
>>
map
=
notEmptyExportList
.
stream
().
collect
(
Collectors
.
groupingBy
(
DataLog:
:
getExport
));
for
(
String
key
:
map
.
keySet
())
{
if
(!
key
.
startsWith
(
nextOutExport
))
{
continue
;
}
List
<
DataLog
>
groupByList
=
map
.
get
(
key
);
Collections
.
sort
(
groupByList
,
(
o1
,
o2
)
->
{
String
feederInfo1
=
o1
.
getAppendData
(
"feederInfo"
);
String
feederInfo2
=
o2
.
getAppendData
(
"feederInfo"
);
return
feederInfo1
.
compareTo
(
feederInfo2
);
});
DataLog
dataLog
=
null
;
if
(
groupByList
!=
null
&&
!
groupByList
.
isEmpty
())
{
dataLog
=
groupByList
.
get
(
0
);
}
});
if
(
groupByList
!=
null
&&
!
groupByList
.
isEmpty
())
{
DataLog
dataLog
=
groupByList
.
get
(
0
);
if
(
cid
.
equals
(
dataLog
.
getCid
()))
{
//判断出料口信息是否相同
if
(
dataLog
.
isWait
())
{
String
feederInfo
=
dataLog
.
getAppendData
(
"feederInfo"
);
String
feeder
=
StorageExportUtil
.
getCurrentExportFeeder
(
key
);
log
.
info
(
"UM口对应的feeder为:"
+
feeder
+
",当前任务的feeder为:"
+
feederInfo
);
if
(
feederInfo
.
startsWith
(
feeder
))
{
log
.
info
(
"分配出库任务,站位号为:"
+
dataLog
.
getAppendData
(
"feederInfo"
)
+
",出料口为:"
+
key
+
",barcode为:"
+
dataLog
.
getBarcode
());
orderTask
=
dataLog
;
break
;
}
if
(
dataLog
!=
null
&&
dataLog
.
isWait
()
&&
cid
.
equals
(
dataLog
.
getCid
()))
{
String
feederInfo
=
dataLog
.
getAppendData
(
"feederInfo"
);
String
feeder
=
StorageExportUtil
.
getCurrentExportFeeder
(
key
);
log
.
info
(
"UM口对应的feeder为:"
+
feeder
+
",当前任务的feeder为:"
+
feederInfo
);
if
(
feederInfo
.
startsWith
(
feeder
))
{
log
.
info
(
"分配出库任务,站位号为:"
+
dataLog
.
getAppendData
(
"feederInfo"
)
+
",出料口为:"
+
key
+
",barcode为:"
+
dataLog
.
getBarcode
());
orderTask
=
dataLog
;
break
;
}
}
}
if
(
orderTask
!=
null
)
{
log
.
info
(
cid
+
"对应的下一个出料口为:"
+
orderTask
.
getExport
());
break
;
}
}
//如果没有找到,从头开始找
if
(
orderTask
==
null
){
lastOutExportMap
.
put
(
cid
,
""
);
}
else
{
lastOutExportMap
.
put
(
cid
,
orderTask
.
getExport
());
}
return
orderTask
;
}
Map
<
String
,
String
>
lastOutExportMap
=
Maps
.
newConcurrentMap
();
private
static
List
<
String
>
getNextOutExport
(
String
lastOutExport
)
{
List
<
String
>
exportList
=
new
ArrayList
<>();
exportList
.
add
(
"UM1"
);
exportList
.
add
(
"UM5"
);
exportList
.
add
(
"UM2"
);
exportList
.
add
(
"UM6"
);
exportList
.
add
(
"UM3"
);
exportList
.
add
(
"UM7"
);
exportList
.
add
(
"UM4"
);
exportList
.
add
(
"UM8"
);
int
index
=
0
;
if
(
StringUtils
.
isEmpty
(
lastOutExport
))
{
return
exportList
;
}
for
(
int
i
=
0
;
i
<
exportList
.
size
();
i
++)
{
String
export
=
exportList
.
get
(
i
);
if
(
lastOutExport
.
startsWith
(
export
))
{
index
=
i
;
break
;
}
}
index
=
(
index
+
1
)
>=
exportList
.
size
()
?
0
:
(
index
+
1
);
List
<
String
>
resultList
=
new
ArrayList
<>();
for
(
int
i
=
index
;
i
<
exportList
.
size
();
i
++)
{
resultList
.
add
(
exportList
.
get
(
i
));
}
return
resultList
;
}
@Override
public
DeviceType
getDeviceType
()
{
return
DeviceType
.
SMD_XLR
;
...
...
src/main/java/com/neotel/smfcore/custom/Jkem21481/bean/dto/StorageExportOutDetailDto.java
0 → 100644
查看文件 @
31d914f
package
com
.
neotel
.
smfcore
.
custom
.
Jkem21481
.
bean
.
dto
;
import
com.neotel.smfcore.custom.Jkem21481.bean.StorageExportOutDetail
;
import
lombok.Data
;
@Data
public
class
StorageExportOutDetailDto
extends
StorageExportOutDetail
{
private
String
export
;
}
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/JkemController.java
查看文件 @
31d914f
...
...
@@ -603,15 +603,28 @@ public class JkemController {
String
feederInfo2
=
o2
.
getAppendData
(
"feederInfo"
);
return
feederInfo1
.
compareTo
(
feederInfo2
);
});
//找到第一盘
DataLog
dataLog
=
sameExportDatalogList
.
get
(
0
);
if
(
dataLog
.
getBarcode
().
equals
(
task
.
getBarcode
())){
//获取到当前任务的坐标
int
index
=
-
1
;
for
(
int
i
=
0
;
i
<
sameExportDatalogList
.
size
()
;
i
++)
{
DataLog
dataLog
=
sameExportDatalogList
.
get
(
i
);
if
(
dataLog
.
getBarcode
().
equals
(
task
.
getBarcode
())){
index
=
i
;
break
;
}
}
if
(
index
<=
0
){
log
.
info
(
task
.
getBarcode
()+
"为工单:"
+
task
.
getBarcode
()+
"任务的第一盘,直接返回ok,index为:"
+
index
);
return
ResultBean
.
newOkResult
(
""
);
}
//如果storageId一样的话,则直接进行出库
if
(
task
.
getStorageId
().
equals
(
dataLog
.
getStorageId
())){
log
.
info
(
task
.
getBarcode
()+
"对的的设备为"
+
task
.
getStorageName
()+
"与"
+
dataLog
.
getBarcode
()+
"的设备相同,直接出库"
);
//找到上一盘
int
lastIndex
=
index
-
1
;
DataLog
dataLog
=
sameExportDatalogList
.
get
(
lastIndex
);
if
(
task
.
getStorageId
().
equals
(
dataLog
.
getStorageId
())
&&
!
task
.
isWait
()
&&
!
task
.
isExecuting
()
&&
!
OP_STATUS
.
OUTBOX
.
name
().
equals
(
task
.
getStatus
())
&&
!
OP_STATUS
.
OUTTING
.
name
().
equals
(
task
.
getStatus
()))
{
log
.
info
(
task
.
getBarcode
()
+
"对的的设备为"
+
task
.
getStorageName
()
+
"与"
+
dataLog
.
getBarcode
()
+
"的设备相同,直接出库"
);
return
ResultBean
.
newOkResult
(
""
);
}
...
...
@@ -624,6 +637,7 @@ public class JkemController {
if
(
dataLog
.
isOnLine
()
||
dataLog
.
isFinished
()
||
dataLog
.
isCancel
()
||
isBox
){
return
ResultBean
.
newOkResult
(
""
);
}
log
.
info
(
barcodeStr
+
" 上一盘的料盘为["
+
dataLog
.
getBarcode
()+
"],状态为["
+
status
+
"],对应的feeder为["
+
dataLog
.
getAppendData
(
"feederInfo"
)+
"],不允许放到皮带线上"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smf.barcode.cannotPutInLine"
,
"上一盘的料盘为[{0}],状态为[{1}],对应的feeder为[{2}],不允许放到皮带线上"
,
new
String
[]{
dataLog
.
getBarcode
(),
status
,
dataLog
.
getAppendData
(
"feederInfo"
)});
}
...
...
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/UmExportSettingController.java
查看文件 @
31d914f
...
...
@@ -10,6 +10,7 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.custom.Jkem21481.bean.StorageExportOutDetail
;
import
com.neotel.smfcore.custom.Jkem21481.bean.UmSettingMacAndIp
;
import
com.neotel.smfcore.custom.Jkem21481.bean.dto.StorageExportOutDetailDto
;
import
com.neotel.smfcore.custom.Jkem21481.util.StorageExportUtil
;
import
com.neotel.smfcore.custom.Jkem21481.util.UmSettingUtil
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
...
...
@@ -119,9 +120,9 @@ public class UmExportSettingController {
taskService
.
updateFinishedTask
(
dataLog
);
}
StorageExportOutDetail
detail
=
StorageExportUtil
.
getFeederByBarcode
(
barcodeStr
);
if
(
d
etail
!=
null
){
return
ResultBean
.
newOkResult
(
d
etail
);
StorageExportOutDetail
Dto
dto
=
StorageExportUtil
.
getFeederByBarcode
(
barcodeStr
);
if
(
d
to
!=
null
){
return
ResultBean
.
newOkResult
(
d
to
);
}
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueNotFind"
,
"未找到{0}[{1}]"
,
new
String
[]{
"feeder"
,
barcodeStr
});
}
...
...
src/main/java/com/neotel/smfcore/custom/Jkem21481/util/StorageExportUtil.java
查看文件 @
31d914f
...
...
@@ -5,6 +5,7 @@ import com.neotel.smfcore.core.device.util.DataCache;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.custom.Jkem21481.bean.StorageExport
;
import
com.neotel.smfcore.custom.Jkem21481.bean.StorageExportOutDetail
;
import
com.neotel.smfcore.custom.Jkem21481.bean.dto.StorageExportOutDetailDto
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
...
...
@@ -278,7 +279,7 @@ public class StorageExportUtil {
dataCache
.
updateCache
(
EXPORT_PREFIX
+
"_"
+
export
,
storageExport
);
}
public
static
StorageExportOutDetail
getFeederByBarcode
(
String
barcodeStr
)
{
public
static
StorageExportOutDetail
Dto
getFeederByBarcode
(
String
barcodeStr
)
{
for
(
StorageExport
export
:
exportMap
.
values
())
{
List
<
StorageExportOutDetail
>
detailList
=
export
.
getDetailList
();
if
(
detailList
!=
null
&&
!
detailList
.
isEmpty
())
{
...
...
@@ -286,7 +287,14 @@ public class StorageExportUtil {
String
barcode
=
detail
.
getBarcode
();
if
(
StringUtils
.
isNotEmpty
(
barcode
))
{
if
(
barcode
.
equals
(
barcodeStr
)){
return
detail
;
StorageExportOutDetailDto
dto
=
new
StorageExportOutDetailDto
();
dto
.
setBarcode
(
detail
.
getBarcode
());
dto
.
setExport
(
export
.
getExportName
());
dto
.
setStatus
(
detail
.
getStatus
());
dto
.
setFeederInfo
(
detail
.
getFeederInfo
());
dto
.
setPartNumber
(
detail
.
getPartNumber
());
dto
.
setLastStatus
(
detail
.
getLastStatus
());
return
dto
;
}
}
}
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论