Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 07b3795c
由
张少辉
编写于
2026-03-20 15:05:36 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.电子仓CTU出库逻辑修改
1 个父辈
2f39a58c
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
89 行增加
和
3 行删除
src/main/java/com/neotel/smfcore/core/barcode/rest/bean/dto/BarcodeDto.java
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
src/main/java/com/neotel/smfcore/custom/aiqingzhiyin1643/electronicWarehouse/AgvElecDeviceController.java
src/main/java/com/neotel/smfcore/core/barcode/rest/bean/dto/BarcodeDto.java
查看文件 @
07b3795
...
...
@@ -153,6 +153,12 @@ public class BarcodeDto implements Serializable {
private
String
pidBarcode
;
//出库增加的参数
private
String
stockoutNo
;
//出库单号
private
String
stockoutNoLine
;
//出库对应的行数
private
String
lastStockOutNum
;
//上一次出库的数量
private
int
needStockNum
;
/**
* 关联条码,夹具时关联相关的物料,用于入库完成时插入相关物料
*/
...
...
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
查看文件 @
07b3795
...
...
@@ -544,4 +544,17 @@ public class Barcode extends BasePo implements Serializable {
}
}
}
public
Barcode
getSubCodeByBarcode
(
String
barcodeStr
)
{
if
(
subCodeList
==
null
)
{
return
null
;
}
for
(
Barcode
barcode
:
subCodeList
)
{
if
(
barcode
.
getBarcode
().
equals
(
barcodeStr
))
{
return
barcode
;
}
}
return
null
;
}
}
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
07b3795
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
查看文件 @
07b3795
...
...
@@ -108,4 +108,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos
dualPosNameGetEmptyPosByStorage
(
Storage
storage
,
Barcode
barcode
,
Collection
<
String
>
operatingPosIds
,
String
lastPosId
,
String
needMovePosName
,
String
endStr
,
List
<
String
>
needExcludePosName
);
StoragePos
getBySubBarcode
(
String
container
);
List
<
StoragePos
>
findPosListByPartNumber
(
List
<
String
>
availableStorageIds
,
String
partNumber
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkoutType
,
Map
<
String
,
String
>
appendDate
);
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
07b3795
...
...
@@ -517,6 +517,29 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
@Override
public
List
<
StoragePos
>
findPosListByPartNumber
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
,
Map
<
String
,
String
>
appendData
)
{
Criteria
c
=
Criteria
.
where
(
"id"
).
nin
(
excludePosIds
)
.
and
(
"enabled"
).
is
(
true
)
//可用
.
and
(
"barcode.lockId"
).
is
(
null
);
//没有被锁定的仓位;
if
(
storageIdList
!=
null
)
{
c
=
c
.
and
(
"storageId"
).
in
(
storageIdList
);
}
if
(
appendData
!=
null
)
{
c
=
addAppendData
(
c
,
appendData
);
}
List
<
Criteria
>
orCriterialList
=
Lists
.
newArrayList
();
orCriterialList
.
add
(
Criteria
.
where
(
"barcode.partNumber"
).
is
(
pn
));
orCriterialList
.
add
(
Criteria
.
where
(
"barcode.subCodeList.partNumber"
).
is
(
pn
));
c
.
orOperator
(
orCriterialList
);
Query
q
=
new
Query
(
c
);
Sort
sort
=
getSortByCheckOutType
(
checkOutType
);
q
.
with
(
sort
);
return
storagePosDao
.
findByQuery
(
q
);
}
@Override
public
PageData
<
StoragePos
>
findByPage
(
Query
query
,
Pageable
pageable
)
{
int
totalCount
=
storagePosDao
.
countByQuery
(
query
);
List
<
StoragePos
>
list
=
storagePosDao
.
findByQuery
(
query
,
pageable
);
...
...
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
查看文件 @
07b3795
...
...
@@ -35,6 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* Created by sunke on 2021/7/13.
...
...
@@ -1572,4 +1573,46 @@ public class TaskService {
return
dualPosNameFindEmptyPosInStorages
(
barcode
,
availbleStorageList
,
hasOutTaskStorageIds
,
lastPosId
,
needMovePosName
,
endStr
);
}
public
List
<
Barcode
>
barcodeListByCheckOutType
(
CHECKOUT_TYPE
checkoutType
,
List
<
Barcode
>
barcodeList
)
{
// 处理barcodeList为null的情况
if
(
barcodeList
==
null
)
{
return
Collections
.
emptyList
();
}
// 使用Comparator.nullsFirst或nullsLast处理可能的null值
Comparator
<
Barcode
>
comparator
=
null
;
if
(
CHECKOUT_TYPE
.
EXPIRE_FIRST
.
equals
(
checkoutType
))
{
// 先过期先出
comparator
=
Comparator
.
comparing
(
Barcode:
:
getExpireDate
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()))
.
thenComparing
(
Barcode:
:
getPutInDate
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()));
}
else
if
(
CHECKOUT_TYPE
.
FIFO
.
equals
(
checkoutType
))
{
// 严格的先进先出
comparator
=
Comparator
.
comparing
(
Barcode:
:
getPutInDate
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()))
.
thenComparing
(
Barcode:
:
getUsedCount
);
}
else
if
(
CHECKOUT_TYPE
.
USED_FIRST
.
equals
(
checkoutType
))
{
// 尾料优先
comparator
=
Comparator
.
comparing
(
Barcode:
:
getAmount
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()))
.
thenComparing
(
Barcode:
:
getPutInDate
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()));
}
else
if
(
CHECKOUT_TYPE
.
PRODUCE_DATE
.
equals
(
checkoutType
))
{
comparator
=
Comparator
.
comparing
(
Barcode:
:
getProduceDate
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()))
.
thenComparing
(
Barcode:
:
getAmount
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()))
.
thenComparing
(
Barcode:
:
getPutInDate
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()));
}
else
if
(
CHECKOUT_TYPE
.
BATCH_FIRST
.
equals
(
checkoutType
))
{
comparator
=
Comparator
.
comparing
(
Barcode:
:
getBatch
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()))
.
thenComparing
(
Barcode:
:
getProduceDate
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()))
.
thenComparing
(
Barcode:
:
getAmount
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()))
.
thenComparing
(
Barcode:
:
getPutInDate
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()));
}
else
{
// 效率优先
comparator
=
Comparator
.
comparing
(
Barcode:
:
getPutInDate
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()))
.
thenComparing
(
Barcode:
:
getCreateDate
,
Comparator
.
nullsFirst
(
Comparator
.
naturalOrder
()));
}
return
barcodeList
.
stream
()
.
filter
(
Objects:
:
nonNull
)
// 过滤掉可能的null元素
.
sorted
(
comparator
)
.
collect
(
Collectors
.
toList
());
}
}
src/main/java/com/neotel/smfcore/custom/aiqingzhiyin1643/electronicWarehouse/AgvElecDeviceController.java
查看文件 @
07b3795
...
...
@@ -75,7 +75,6 @@ public class AgvElecDeviceController {
if
(
StringUtils
.
isNotEmpty
(
barcode
.
getPosName
()))
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.materialBox.inPos"
,
"物料已在库位{0}中"
,
new
String
[]{
barcode
.
getBarcode
()});
}
//判断出库任务有没有结束
List
<
DataLog
>
dataLogList
=
taskService
.
getAllTasks
();
for
(
DataLog
dataLog
:
dataLogList
)
{
...
...
@@ -223,10 +222,10 @@ public class AgvElecDeviceController {
opTask
.
setOutFromPos
(
true
);
}
taskService
.
updateFinishedTask
(
opTask
);
if
(!
opTask
.
isNotifyMomo
())
{
/*
if (!opTask.isNotifyMomo()) {
opTask.setNotifyMomo(true);
taskService.updateFinishedTask(opTask);
}
}
*/
if
(
OP_STATUS
.
FINISHED
.
name
().
equals
(
statusStr
))
{
//已完成,从完成缓存中清除
taskService
.
removeFinishedTask
(
opTask
);
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论