Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 08deb920
由
zshaohui
编写于
2025-03-08 09:46:04 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.工单挑料问题修改
2.不按顺序出 提交
1 个父辈
174d18dc
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
111 行增加
和
43 行删除
src/main/java/com/neotel/smfcore/core/device/handler/impl/XLRBoxHandler.java
src/main/java/com/neotel/smfcore/core/order/listener/DefaultOrderFileListener.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/bean/dto/StorageExportDto.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/JkemController.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/StorageExportController.java
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/UmExportSettingController.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/XLRBoxHandler.java
查看文件 @
08deb92
package
com
.
neotel
.
smfcore
.
core
.
device
.
handler
.
impl
;
package
com
.
neotel
.
smfcore
.
core
.
device
.
handler
.
impl
;
import
cn.hutool.core.thread.FinalizableDelegatedExecutorService
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.google.common.base.Strings
;
import
com.google.common.base.Strings
;
...
@@ -305,7 +306,7 @@ public class XLRBoxHandler extends BaseDeviceHandler {
...
@@ -305,7 +306,7 @@ public class XLRBoxHandler extends BaseDeviceHandler {
//先提取出料口不为空的
//先提取出料口不为空的
List
<
DataLog
>
notEmptyExportList
=
new
ArrayList
<>();
List
<
DataLog
>
notEmptyExportList
=
new
ArrayList
<>();
for
(
DataLog
dataLog
:
dataLogList
)
{
for
(
DataLog
dataLog
:
dataLogList
)
{
if
(
dataLog
.
isCheckOutTask
()
&&
!
dataLog
.
isCancel
()
&&
!
dataLog
.
isFinished
()
&&
!
dataLog
.
isOnLine
()
&&
!
dataLog
.
isInLine
(
))
{
if
(
dataLog
.
isCheckOutTask
()
&&
dataLog
.
isWait
()
&&
cid
.
equals
(
dataLog
.
getCid
()
))
{
String
export
=
dataLog
.
getExport
();
String
export
=
dataLog
.
getExport
();
Boolean
isBox
=
dataLog
.
getAppendData
(
"isBox"
);
Boolean
isBox
=
dataLog
.
getAppendData
(
"isBox"
);
if
(
isBox
==
null
)
{
if
(
isBox
==
null
)
{
...
@@ -316,66 +317,76 @@ public class XLRBoxHandler extends BaseDeviceHandler {
...
@@ -316,66 +317,76 @@ public class XLRBoxHandler extends BaseDeviceHandler {
}
}
}
}
}
}
//获取到站位相同的任务
//最多有2个工单正在执行
List
<
DataLog
>
resultList
=
new
ArrayList
<>();
List
<
DataLog
>
needOutTaskList
=
new
ArrayList
<>();
//获取到站位相同的任务
Map
<
String
,
List
<
DataLog
>>
map
=
notEmptyExportList
.
stream
().
collect
(
Collectors
.
groupingBy
(
DataLog:
:
getExport
));
for
(
DataLog
dataLog
:
notEmptyExportList
)
{
for
(
String
key
:
map
.
keySet
())
{
String
export
=
dataLog
.
getExport
();
List
<
DataLog
>
groupByList
=
map
.
get
(
key
);
String
feederInfo
=
dataLog
.
getAppendData
(
"feederInfo"
);
Collections
.
sort
(
groupByList
,
(
o1
,
o2
)
->
{
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
feederInfo1
=
o1
.
getAppendData
(
"feederInfo"
);
String
feederInfo2
=
o2
.
getAppendData
(
"feederInfo"
);
String
feederInfo2
=
o2
.
getAppendData
(
"feederInfo"
);
return
feederInfo1
.
compareTo
(
feederInfo2
);
return
feederInfo1
.
compareTo
(
feederInfo2
);
});
});
DataLog
dataLog
=
null
;
if
(
groupByList
!=
null
&&
!
groupByList
.
isEmpty
())
{
String
lastExportMap
=
lastOutExportMap
.
get
(
cid
);
dataLog
=
groupByList
.
get
(
0
);
log
.
info
(
cid
+
"对应的上一次出料口为:"
+
lastExportMap
);
}
if
(
dataLog
!=
null
&&
dataLog
.
isWait
()
&&
cid
.
equals
(
dataLog
.
getCid
()))
{
//获取到所有的出料口
String
feederInfo
=
dataLog
.
getAppendData
(
"feederInfo"
);
List
<
String
>
allEportList
=
new
ArrayList
<>(
);
String
feeder
=
StorageExportUtil
.
getCurrentExportFeeder
(
key
);
for
(
DataLog
dataLog
:
resultList
)
{
log
.
info
(
"UM口对应的feeder为:"
+
feeder
+
",当前任务的feeder为:"
+
feederInfo
);
String
export
=
dataLog
.
getExport
(
);
if
(
feederInfo
.
startsWith
(
feeder
))
{
if
(
allEportList
.
isEmpty
(
))
{
needOutTaskList
.
add
(
dataLog
);
allEportList
.
add
(
export
);
}
else
{
}
else
{
//smfcore.barcode.noMatchFeeder=出料口feeder[{0}]与当前物料feeder[{1}]不匹配
if
(!
allEportList
.
contains
(
export
))
{
dataLog
.
setRemark
(
MessageUtils
.
getText
(
"smfcore.barcode.noMatchFeeder"
,
new
String
[]{
feeder
,
feederInfo
},
new
Locale
(
SecurityUtils
.
getCurrentUserLanguage
()),
"出料口feeder[{0}]与当前物料feeder[{1}]不匹配"
)
);
allEportList
.
add
(
export
);
taskService
.
updateQueueTask
(
dataLog
);
}
}
}
}
}
}
String
lastOutSourceId
=
lastOutSourceIdMap
.
get
(
cid
);
allEportList
=
allEportList
.
stream
().
sorted
().
collect
(
Collectors
.
toList
()
);
if
(
needOutTaskList
!=
null
&&
!
needOutTaskList
.
isEmpty
())
{
int
index
=
0
;
for
(
DataLog
dataLog
:
needOutTaskList
)
{
//寻找到对应的index
if
(
StringUtils
.
isNotEmpty
(
lastOutSourceId
))
{
for
(
int
i
=
0
;
i
<
allEportList
.
size
();
i
++)
{
if
(!
lastOutSourceId
.
equals
(
dataLog
.
getSourceId
()))
{
String
export
=
allEportList
.
get
(
i
);
orderTask
=
dataLog
;
if
(
export
.
equals
(
lastExportMap
)){
break
;
index
=
i
;
}
}
else
{
orderTask
=
dataLog
;
break
;
break
;
}
}
}
}
if
(
orderTask
==
null
)
{
if
(
index
!=
0
)
{
needOutTaskList
=
needOutTaskList
.
stream
().
sorted
(
Comparator
.
comparing
(
DataLog:
:
getCreateDate
)).
collect
(
Collectors
.
toList
());
index
=
index
+
1
;
orderTask
=
needOutTaskList
.
get
(
0
);
if
(
index
>=
allEportList
.
size
())
{
index
=
0
;
}
}
String
nextExport
=
allEportList
.
get
(
index
);
log
.
info
(
cid
+
"获取到下一个出料口为:"
+
nextExport
);
for
(
DataLog
dataLog
:
resultList
)
{
if
(
nextExport
.
equals
(
dataLog
.
getExport
())){
orderTask
=
dataLog
;
break
;
}
}
}
}
}
if
(
orderTask
!=
null
)
{
if
(
orderTask
!=
null
)
{
log
.
info
(
"分配出库任务,站位号为:"
+
orderTask
.
getAppendData
(
"feederInfo"
)
+
",出料口为:"
+
orderTask
.
getExport
()
+
",barcode为:"
+
orderTask
.
getBarcode
());
log
.
info
(
"分配出库任务,站位号为:"
+
orderTask
.
getAppendData
(
"feederInfo"
)
+
",出料口为:"
+
orderTask
.
getExport
()
+
",barcode为:"
+
orderTask
.
getBarcode
());
lastOut
SourceIdMap
.
put
(
cid
,
orderTask
.
getSourceId
());
lastOut
ExportMap
.
put
(
cid
,
orderTask
.
getExport
());
}
else
{
}
else
{
lastOut
SourceId
Map
.
put
(
cid
,
""
);
lastOut
Export
Map
.
put
(
cid
,
""
);
}
}
return
orderTask
;
return
orderTask
;
}
}
Map
<
String
,
String
>
lastOutSourceId
Map
=
Maps
.
newConcurrentMap
();
Map
<
String
,
String
>
lastOutExport
Map
=
Maps
.
newConcurrentMap
();
@Override
@Override
public
DeviceType
getDeviceType
()
{
public
DeviceType
getDeviceType
()
{
...
...
src/main/java/com/neotel/smfcore/core/order/listener/DefaultOrderFileListener.java
查看文件 @
08deb92
...
@@ -427,7 +427,7 @@ public class DefaultOrderFileListener implements IOrderFileListener {
...
@@ -427,7 +427,7 @@ public class DefaultOrderFileListener implements IOrderFileListener {
}
}
return
itemMap
;
return
itemMap
;
}
catch
(
Exception
ex
)
{
}
catch
(
Exception
ex
)
{
log
.
error
(
"解析上传的工单出错:"
+
ex
.
toString
()
);
log
.
error
(
"解析上传的工单出错:"
,
ex
);
}
finally
{
}
finally
{
if
(
csvRead
!=
null
){
if
(
csvRead
!=
null
){
csvRead
.
close
();
csvRead
.
close
();
...
...
src/main/java/com/neotel/smfcore/custom/Jkem21481/bean/dto/StorageExportDto.java
查看文件 @
08deb92
...
@@ -16,4 +16,5 @@ public class StorageExportDto {
...
@@ -16,4 +16,5 @@ public class StorageExportDto {
private
List
<
StorageExport
>
outDetailList
;
private
List
<
StorageExport
>
outDetailList
;
private
boolean
showButton
=
true
;
}
}
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/JkemController.java
查看文件 @
08deb92
...
@@ -557,7 +557,8 @@ public class JkemController {
...
@@ -557,7 +557,8 @@ public class JkemController {
@RequestMapping
(
"/jkem/canPutInLine"
)
@RequestMapping
(
"/jkem/canPutInLine"
)
@AnonymousAccess
@AnonymousAccess
public
ResultBean
canPutInLine
(
String
barcodeStr
)
{
public
ResultBean
canPutInLine
(
String
barcodeStr
)
{
CodeBean
codeBean
=
codeResolve
.
resolveSingleCode
(
barcodeStr
);
return
ResultBean
.
newOkResult
(
""
);
/* CodeBean codeBean = codeResolve.resolveSingleCode(barcodeStr);
Barcode barcode = codeBean.getBarcode();
Barcode barcode = codeBean.getBarcode();
if (barcode == null) {
if (barcode == null) {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.noValidCode", "无效的条码");
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.noValidCode", "无效的条码");
...
@@ -639,7 +640,7 @@ public class JkemController {
...
@@ -639,7 +640,7 @@ public class JkemController {
}
}
log.info(barcodeStr+" 上一盘的料盘为["+dataLog.getBarcode()+"],状态为["+status+"],对应的feeder为["+dataLog.getAppendData("feederInfo")+"],不允许放到皮带线上");
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")});
return ResultBean.newErrorResult(-1,"smf.barcode.cannotPutInLine","上一盘的料盘为[{0}],状态为[{1}],对应的feeder为[{2}],不允许放到皮带线上",new String[]{dataLog.getBarcode(),status,dataLog.getAppendData("feederInfo")});
}
*/
}
@ApiOperation
(
"获取出料口剩余数量"
)
@ApiOperation
(
"获取出料口剩余数量"
)
...
...
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/StorageExportController.java
查看文件 @
08deb92
...
@@ -187,6 +187,36 @@ public class StorageExportController {
...
@@ -187,6 +187,36 @@ public class StorageExportController {
}
}
}
}
outDetailList
=
outDetailList
.
stream
().
sorted
(
Comparator
.
comparing
(
StorageExport:
:
getExportName
)).
collect
(
Collectors
.
toList
());
outDetailList
=
outDetailList
.
stream
().
sorted
(
Comparator
.
comparing
(
StorageExport:
:
getExportName
)).
collect
(
Collectors
.
toList
());
//判断是否隐藏按钮
boolean
showButton
=
true
;
boolean
allEmpty
=
true
;
for
(
StorageExport
storageExport
:
outDetailList
)
{
List
<
StorageExportOutDetail
>
detailList
=
storageExport
.
getDetailList
();
if
(
detailList
!=
null
&&
!
detailList
.
isEmpty
()){
allEmpty
=
false
;
}
}
if
(
allEmpty
){
showButton
=
false
;
}
else
{
for
(
StorageExport
storageExport
:
outDetailList
)
{
List
<
StorageExportOutDetail
>
detailList
=
storageExport
.
getDetailList
();
if
(
detailList
!=
null
&&
!
detailList
.
isEmpty
()){
for
(
StorageExportOutDetail
detail
:
detailList
)
{
if
(
StringUtils
.
isNotEmpty
(
detail
.
getBarcode
())){
if
(!
OP_STATUS
.
ABNORMAL
.
name
().
equals
(
detail
.
getStatus
())
&&
!
OP_STATUS
.
FINISHED
.
name
().
equals
(
detail
.
getStatus
())
&&
!
OP_STATUS
.
CANCEL
.
name
().
equals
(
detail
.
getStatus
())){
showButton
=
false
;
break
;
}
}
}
}
}
}
dto
.
setShowButton
(
showButton
);
dto
.
setOutDetailList
(
outDetailList
);
dto
.
setOutDetailList
(
outDetailList
);
return
dto
;
return
dto
;
}
}
...
...
src/main/java/com/neotel/smfcore/custom/Jkem21481/controller/UmExportSettingController.java
查看文件 @
08deb92
...
@@ -2,10 +2,12 @@ package com.neotel.smfcore.custom.Jkem21481.controller;
...
@@ -2,10 +2,12 @@ package com.neotel.smfcore.custom.Jkem21481.controller;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.bean.ResultBean
;
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.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.system.service.manager.IDataLogManager
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
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.Jkem21481.bean.StorageExportOutDetail
;
import
com.neotel.smfcore.custom.Jkem21481.bean.StorageExportOutDetail
;
...
@@ -17,6 +19,9 @@ import com.neotel.smfcore.security.annotation.AnonymousAccess;
...
@@ -17,6 +19,9 @@ 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
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
...
@@ -41,6 +46,9 @@ public class UmExportSettingController {
...
@@ -41,6 +46,9 @@ public class UmExportSettingController {
@Autowired
@Autowired
private
TaskService
taskService
;
private
TaskService
taskService
;
@Autowired
private
IDataLogManager
dataLogManager
;
@ApiOperation
(
"获取平板上出料口设置"
)
@ApiOperation
(
"获取平板上出料口设置"
)
@RequestMapping
(
"/getUmSetting"
)
@RequestMapping
(
"/getUmSetting"
)
...
@@ -123,6 +131,23 @@ public class UmExportSettingController {
...
@@ -123,6 +131,23 @@ public class UmExportSettingController {
StorageExportOutDetailDto
dto
=
StorageExportUtil
.
getFeederByBarcode
(
barcodeStr
);
StorageExportOutDetailDto
dto
=
StorageExportUtil
.
getFeederByBarcode
(
barcodeStr
);
if
(
dto
!=
null
){
if
(
dto
!=
null
){
return
ResultBean
.
newOkResult
(
dto
);
return
ResultBean
.
newOkResult
(
dto
);
}
else
{
log
.
info
(
barcodeStr
+
"对应的出料口任务为空,寻找最后一个出入库记录"
);
DataLog
lastTask
=
dataLogManager
.
findOne
(
new
Query
(
Criteria
.
where
(
"barcode"
).
is
(
barcodeStr
)).
with
(
Sort
.
by
(
Sort
.
Direction
.
DESC
,
"createDate"
)));
if
(
lastTask
!=
null
&&
lastTask
.
isCheckOutTask
()){
String
export
=
lastTask
.
getExport
();
if
(
StringUtils
.
isNotEmpty
(
export
))
{
String
feederInfo
=
lastTask
.
getAppendData
(
"feederInfo"
);
StorageExportOutDetailDto
resultDto
=
new
StorageExportOutDetailDto
();
resultDto
.
setFeederInfo
(
feederInfo
);
resultDto
.
setExport
(
export
);
resultDto
.
setPartNumber
(
lastTask
.
getPartNumber
());
resultDto
.
setBarcode
(
barcodeStr
);
resultDto
.
setStatus
(
lastTask
.
getStatus
());
resultDto
.
setLastStatus
(
lastTask
.
getStatus
());
return
ResultBean
.
newOkResult
(
resultDto
);
}
}
}
}
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueNotFind"
,
"未找到{0}[{1}]"
,
new
String
[]{
"feeder"
,
barcodeStr
});
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueNotFind"
,
"未找到{0}[{1}]"
,
new
String
[]{
"feeder"
,
barcodeStr
});
}
}
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论