Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit d7dfa33d
由
zshaohui
编写于
2024-06-18 17:25:06 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.增加物料追溯接口
2.半成品仓odn出库修改
1 个父辈
ae524b11
显示空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
322 行增加
和
142 行删除
src/main/java/com/neotel/smfcore/common/init/DataInitManager.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/custom/luxsan/factory_c/rawstor/util/BinCacheUtil.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/rawstor/util/BoxHandleUtil.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/third/MaterialRestController.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/third/bean/MaterialLoc.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/third/enums/MaterialLocEnum.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/third/util/MaterialLocUtil.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/WipStorCheckOutController.java
src/main/resources/config/application-21088prod.yml
src/main/resources/config/application-21088test.yml
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
查看文件 @
d7dfa33
...
@@ -223,13 +223,15 @@ public class DataInitManager {
...
@@ -223,13 +223,15 @@ public class DataInitManager {
addNewFunctionMenu
(
1
,
wip
,
"manualWork"
,
"人工作业"
,
"manualWork"
,
"SemiFinishProducts/manualWork/index"
,
"manualWork"
,
functionMenuMap
);
addNewFunctionMenu
(
1
,
wip
,
"manualWork"
,
"人工作业"
,
"manualWork"
,
"SemiFinishProducts/manualWork/index"
,
"manualWork"
,
functionMenuMap
);
addNewFunctionMenu
(
2
,
wip
,
"
requisition"
,
"领用"
,
"requisition"
,
"SemiFinishProducts/requisition/index"
,
"requisiti
on"
,
functionMenuMap
);
addNewFunctionMenu
(
2
,
wip
,
"
bindCarton"
,
"人工绑定"
,
"bindCarton"
,
"SemiFinishProducts/bindCarton/index"
,
"bCart
on"
,
functionMenuMap
);
addNewFunctionMenu
(
3
,
wip
,
"Shipment"
,
"出货"
,
"Shipment"
,
"SemiFinishProducts/Shipment/index"
,
"Shipment"
,
functionMenuMap
);
addNewFunctionMenu
(
3
,
wip
,
"Shipment"
,
"ODN出货"
,
"Shipment"
,
"SemiFinishProducts/Shipment/index"
,
"Shipment"
,
functionMenuMap
);
addNewFunctionMenu
(
4
,
wip
,
"requisition"
,
"261&931领用"
,
"requisition"
,
"SemiFinishProducts/requisition/index"
,
"requisition"
,
functionMenuMap
);
addNewFunctionMenu
(
5
,
wip
,
"transferInventory"
,
"311转库"
,
"transferInventory"
,
"SemiFinishProducts/transferInventory/index"
,
"transferInventory"
,
functionMenuMap
);
addNewFunctionMenu
(
4
,
wip
,
"transferInventory"
,
"转库"
,
"transferInventory"
,
"SemiFinishProducts/transferInventory/index"
,
"transferInventory"
,
functionMenuMap
);
addNewFunctionMenu
(
5
,
wip
,
"bindCarton"
,
"人工绑定"
,
"bindCarton"
,
"SemiFinishProducts/bindCarton/index"
,
"bindCarton"
,
functionMenuMap
);
//MSD管理:MSD库存.MSD追溯性.MSD设置
//MSD管理:MSD库存.MSD追溯性.MSD设置
Menu
msd
=
Menu
.
CreatePMenu
(
"MSD管理"
,
2
,
"msd"
,
2
,
"MSD"
,
null
);
Menu
msd
=
Menu
.
CreatePMenu
(
"MSD管理"
,
2
,
"msd"
,
2
,
"MSD"
,
null
);
...
@@ -278,6 +280,8 @@ public class DataInitManager {
...
@@ -278,6 +280,8 @@ public class DataInitManager {
addNewFunctionMenu
(
82
,
pMenuReport
,
"pkSearch"
,
"PK查询"
,
"pkSearch"
,
"neolight/pkSearch/index"
,
"findOut"
,
functionMenuMap
);
addNewFunctionMenu
(
82
,
pMenuReport
,
"pkSearch"
,
"PK查询"
,
"pkSearch"
,
"neolight/pkSearch/index"
,
"findOut"
,
functionMenuMap
);
addNewFunctionMenu
(
83
,
pMenuReport
,
"sysInReport"
,
"盘点"
,
"sysInReport"
,
"neolight/sysInReport/index"
,
"mIDList"
,
functionMenuMap
);
addNewFunctionMenu
(
83
,
pMenuReport
,
"sysInReport"
,
"盘点"
,
"sysInReport"
,
"neolight/sysInReport/index"
,
"mIDList"
,
functionMenuMap
);
addNewFunctionMenu
(
84
,
pMenuReport
,
"materialTrack"
,
"物料追溯"
,
"materialTrack"
,
"report/materialTrack/index"
,
"mTrack"
,
functionMenuMap
);
//内仓
//内仓
addNewFunctionMenu
(
84
,
pMenuReport
,
"feeding"
,
"喂料"
,
"feeding"
,
"neolight/feeding/index"
,
"feeding"
,
functionMenuMap
);
addNewFunctionMenu
(
84
,
pMenuReport
,
"feeding"
,
"喂料"
,
"feeding"
,
"neolight/feeding/index"
,
"feeding"
,
functionMenuMap
);
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
d7dfa33
...
@@ -853,7 +853,7 @@ public class LiteOrderCache {
...
@@ -853,7 +853,7 @@ public class LiteOrderCache {
Collection
<
LiteOrder
>
liteOrders
=
getAllLiteOrder
();
Collection
<
LiteOrder
>
liteOrders
=
getAllLiteOrder
();
if
(
liteOrders
!=
null
&&
!
liteOrders
.
isEmpty
())
{
if
(
liteOrders
!=
null
&&
!
liteOrders
.
isEmpty
())
{
for
(
LiteOrder
liteOrder
:
liteOrders
)
{
for
(
LiteOrder
liteOrder
:
liteOrders
)
{
if
(
!
liteOrder
.
isTaskFinished
()
&&
!
liteOrder
.
isNew
()
&&
!
liteOrder
.
isClosed
())
{
if
(
liteOrder
.
isOutTails
())
{
return
liteOrder
.
getOrderNo
();
return
liteOrder
.
getOrderNo
();
}
}
}
}
...
@@ -920,11 +920,11 @@ public class LiteOrderCache {
...
@@ -920,11 +920,11 @@ public class LiteOrderCache {
Collection
excludeIdList
=
excludeOutPosIds
();
Collection
excludeIdList
=
excludeOutPosIds
();
//7.判断是否指定的itemId
//7.判断是否指定的itemId
if
(
orderItemIds
!=
null
&&
!
orderItemIds
.
isEmpty
())
{
/*
if (orderItemIds != null && !orderItemIds.isEmpty()) {
if (!orderItemIds.contains(orderItem.getId())) {
if (!orderItemIds.contains(orderItem.getId())) {
continue;
continue;
}
}
}
}
*/
//8.设置出库数量和出库盘数(超发和不超发)
//8.设置出库数量和出库盘数(超发和不超发)
int
outReelCount
=
0
;
int
outReelCount
=
0
;
...
@@ -972,9 +972,11 @@ public class LiteOrderCache {
...
@@ -972,9 +972,11 @@ public class LiteOrderCache {
//判断禁用料信息
//判断禁用料信息
for
(
Barcode
subCode
:
subCodeList
)
{
for
(
Barcode
subCode
:
subCodeList
)
{
if
(
disablePosNameList
!=
null
&&
!
disablePosNameList
.
isEmpty
())
{
if
(
disablePosNameList
.
contains
(
subCode
.
getPosName
()))
{
if
(
disablePosNameList
.
contains
(
subCode
.
getPosName
()))
{
continue
;
continue
;
}
}
}
try
{
try
{
smfApi
.
canPutInAfterResolve
(
subCode
);
smfApi
.
canPutInAfterResolve
(
subCode
);
}
catch
(
ValidateException
e
)
{
}
catch
(
ValidateException
e
)
{
...
@@ -989,9 +991,11 @@ public class LiteOrderCache {
...
@@ -989,9 +991,11 @@ public class LiteOrderCache {
List
<
String
>
subCodeIds
=
new
ArrayList
<>();
List
<
String
>
subCodeIds
=
new
ArrayList
<>();
for
(
Barcode
subCode
:
subCodeList
)
{
for
(
Barcode
subCode
:
subCodeList
)
{
if
(
disablePosNameList
!=
null
&&
!
disablePosNameList
.
isEmpty
()){
if
(
disablePosNameList
.
contains
(
subCode
.
getPosName
()))
{
if
(
disablePosNameList
.
contains
(
subCode
.
getPosName
()))
{
continue
;
continue
;
}
}
}
if
(
outReelCount
>=
orderItem
.
getNeedReelCount
()
&&
outNumCount
>=
orderItem
.
getNeedNum
())
{
if
(
outReelCount
>=
orderItem
.
getNeedReelCount
()
&&
outNumCount
>=
orderItem
.
getNeedNum
())
{
break
;
break
;
...
@@ -1199,96 +1203,84 @@ public class LiteOrderCache {
...
@@ -1199,96 +1203,84 @@ public class LiteOrderCache {
return
lackItems
;
return
lackItems
;
}
}
public
synchronized
List
<
String
>
findNeedOutBox
(
String
orderNo
,
List
<
String
>
boxList
)
{
List
<
String
>
resultList
=
new
ArrayList
<>();
//1.判断工单是否存在
public
synchronized
void
wipTicketOut
(
String
orderNo
)
{
LiteOrder
cacheOrder
=
liteOrderMap
.
get
(
orderNo
);
LiteOrder
cacheOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
cacheOrder
==
null
)
{
if
(
cacheOrder
==
null
)
{
cacheOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
cacheOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
}
}
if
(
cacheOrder
==
null
)
{
if
(
cacheOrder
==
null
)
{
log
.
info
(
"未找到工单:"
+
orderNo
+
"的信息"
);
throw
new
ValidateException
(
"smfcore.order.out.notFound"
,
"未找到工单"
);
throw
new
ValidateException
(
"smfcore.order.out.notFound"
,
"未找到工单"
);
}
}
//2.判断工单任务是否结束
if
(
cacheOrder
.
isClosed
())
{
log
.
info
(
"工单:"
+
orderNo
+
"已经关闭"
);
throw
new
ValidateException
(
"smfcore.order.hasClose"
,
"工单已关闭"
);
}
if
(!
cacheOrder
.
isTaskFinished
()
&&
!
cacheOrder
.
isNew
())
{
if
(!
cacheOrder
.
isTaskFinished
()
&&
!
cacheOrder
.
isNew
())
{
log
.
info
(
"工单:"
+
orderNo
+
"正在执行中"
);
throw
new
ValidateException
(
"smfcore.order.out.executing"
,
"工单正在执行"
);
throw
new
ValidateException
(
"smfcore.order.out.executing"
,
"工单正在执行"
);
}
}
//3.设置工单状态
log
.
info
(
"开始执行工单:"
+
orderNo
);
cacheOrder
.
setTaskReelCount
(
0
);
cacheOrder
.
setTaskReelCount
(
0
);
cacheOrder
.
setFinishedReelCount
(
0
);
cacheOrder
.
setFinishedReelCount
(
0
);
cacheOrder
.
setStatus
(
LITEORDER_STATUS
.
TAILS
);
cacheOrder
.
setStatus
(
LITEORDER_STATUS
.
TAILS
);
//4.获取料仓id
CHECKOUT_TYPE
checkoutType
=
dataCache
.
getCheckOutType
();
List
<
String
>
storageIdList
=
new
ArrayList
<>();
List
<
String
>
storageIdList
=
new
ArrayList
<>();
for
(
Storage
storage
:
dataCache
.
getAllStorage
().
values
())
{
for
(
Storage
storage
:
dataCache
.
getAllStorage
().
values
())
{
storageIdList
.
add
(
storage
.
getId
());
storageIdList
.
add
(
storage
.
getId
());
}
}
//查找用户所输入的料箱信息
int
taskReelCount
=
0
;
List
<
StoragePos
>
storagePosList
=
new
ArrayList
<>();
if
(
boxList
!=
null
&&
!
boxList
.
isEmpty
())
{
storagePosList
=
storagePosManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"barcode.barcode"
).
in
(
boxList
)));
}
CHECKOUT_TYPE
checkoutType
=
dataCache
.
getCheckOutType
();
//4.开始循环处理
for
(
LiteOrderItem
orderItem
:
cacheOrder
.
getOrderItems
())
{
for
(
LiteOrderItem
orderItem
:
cacheOrder
.
getOrderItems
())
{
//5.判断剩余数量
int
remainNum
=
orderItem
.
getTotalOutNum
()
-
orderItem
.
getOutNum
();
int
assignReelNum
=
0
;
String
pn
=
orderItem
.
getPn
();
String
partNumber
=
orderItem
.
getPn
();
String
warehouseCode
=
orderItem
.
getWarehouseCode
();
int
taskNum
=
0
;
int
remainNum
=
orderItem
.
getNeedNum
()
-
orderItem
.
getTotalOutNum
();
while
(
assignReelNum
<=
remainNum
)
{
if
(
storagePosList
!=
null
&&
!
storagePosList
.
isEmpty
())
{
for
(
StoragePos
storagePos
:
storagePosList
)
{
Barcode
barcode
=
storagePos
.
getBarcode
();
if
(!
storagePos
.
isLocked
())
{
if
(
barcode
.
getPartNumber
().
equals
(
pn
)
&&
barcode
.
getWarehouseCode
().
equals
(
warehouseCode
))
{
barcode
.
setOrderItemId
(
orderItem
.
getId
());
barcode
.
setOrderId
(
cacheOrder
.
getId
());
barcode
.
setLockId
(
cacheOrder
.
getId
());
barcode
.
setLockName
(
cacheOrder
.
getOrderNo
());
storagePos
.
setBarcode
(
barcode
);
assignReelNum
=
assignReelNum
+
barcode
.
getAmount
();
resultList
.
add
(
barcode
.
getPosName
());
storagePosManager
.
save
(
storagePos
);
barcodeManager
.
save
(
barcode
);
}
}
}
}
break
;
}
while
(
assignReelNum
<=
remainNum
)
{
while
(
taskNum
<
remainNum
)
{
Collection
<
String
>
excludePosIds
=
taskService
.
exclude
PosIds
();
Collection
<
String
>
excludePosIds
=
excludeOut
PosIds
();
StoragePos
storagePos
=
storagePosManager
.
findOdnPnInStorages
(
storageIdList
,
""
,
pn
,
excludePosIds
,
checkoutType
);
StoragePos
pos
=
storagePosManager
.
findPartNumberInStorages
(
storageIdList
,
partNumber
,
excludePosIds
,
checkoutType
,
orderItem
.
getBrand
()
);
if
(
storageP
os
==
null
)
{
if
(
p
os
==
null
)
{
break
;
break
;
}
else
{
Barcode
barcode
=
pos
.
getBarcode
();
log
.
info
(
barcode
.
getBarcode
()
+
"需要生成出库任务,工单号为:"
+
orderNo
);
taskNum
=
taskNum
+
barcode
.
getAmount
();
taskReelCount
=
taskReelCount
+
1
;
DataLog
task
=
newTask
(
pos
);
task
.
setSourceId
(
cacheOrder
.
getId
());
task
.
setSourceName
(
cacheOrder
.
getOrderNo
());
task
.
setSubSourceId
(
orderItem
.
getId
());
task
.
setSubSourceInfo
(
orderItem
.
getFeederInfo
());
task
.
setType
(
OP
.
CHECKOUT
);
task
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
taskService
.
addTaskToExecute
(
task
);
}
}
Barcode
barcode
=
storagePos
.
getBarcode
();
barcode
.
setOrderItemId
(
orderItem
.
getId
());
barcode
.
setOrderId
(
cacheOrder
.
getId
());
barcode
.
setLockId
(
cacheOrder
.
getId
());
barcode
.
setLockName
(
cacheOrder
.
getOrderNo
());
storagePos
.
setBarcode
(
barcode
);
assignReelNum
=
assignReelNum
+
barcode
.
getAmount
();
resultList
.
add
(
barcode
.
getPosName
());
storagePosManager
.
save
(
storagePos
);
barcodeManager
.
save
(
barcode
);
}
}
}
}
return
resultList
;
if
(
taskReelCount
<=
0
)
{
log
.
info
(
"工单:"
+
orderNo
+
"没有找到对应的任务"
);
finishedOrderTasks
(
cacheOrder
);
throw
new
ValidateException
(
"smfcore.order.out.noTask"
,
"工单无可执行的任务"
);
}
}
public
synchronized
void
wipTicketOut
(
String
orderNo
)
{
cacheOrder
.
setTaskReelCount
(
taskReelCount
);
liteOrderManager
.
save
(
cacheOrder
);
liteOrderMap
.
put
(
cacheOrder
.
getOrderNo
(),
cacheOrder
);
log
.
info
(
"生成工单"
+
orderNo
+
"任务结束,数量为:"
+
taskReelCount
);
}
public
void
odnCheckOut
(
String
orderNo
,
List
<
StoragePos
>
storagePosList
)
{
LiteOrder
cacheOrder
=
liteOrderMap
.
get
(
orderNo
);
LiteOrder
cacheOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
cacheOrder
==
null
)
{
if
(
cacheOrder
==
null
)
{
cacheOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
cacheOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
...
@@ -1330,8 +1322,26 @@ public class LiteOrderCache {
...
@@ -1330,8 +1322,26 @@ public class LiteOrderCache {
while
(
taskNum
<
remainNum
)
{
while
(
taskNum
<
remainNum
)
{
Collection
<
String
>
excludePosIds
=
excludeOutPosIds
();
Collection
<
String
>
excludePosIds
=
excludeOutPosIds
();
StoragePos
pos
=
storagePosManager
.
findPartNumberInStorages
(
storageIdList
,
partNumber
,
excludePosIds
,
checkoutType
,
orderItem
.
getBrand
());
//1.先从执行的料箱中出库
StoragePos
pos
=
null
;
if
(
storagePosList
!=
null
&&
!
storageIdList
.
isEmpty
())
{
for
(
StoragePos
storagePos
:
storagePosList
)
{
if
(
excludePosIds
.
contains
(
storagePos
.
getId
()))
{
continue
;
}
if
(
partNumber
.
equals
(
storagePos
.
getBarcode
().
getPartNumber
()))
{
pos
=
storagePos
;
break
;
}
}
}
if
(
pos
==
null
)
{
pos
=
storagePosManager
.
findPartNumberInStorages
(
storageIdList
,
partNumber
,
excludePosIds
,
checkoutType
,
orderItem
.
getBrand
(),
orderItem
.
getWarehouseCode
());
}
if
(
pos
==
null
)
{
if
(
pos
==
null
)
{
break
;
break
;
}
else
{
}
else
{
...
...
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
查看文件 @
d7dfa33
...
@@ -37,6 +37,8 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
...
@@ -37,6 +37,8 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
);
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
);
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
,
String
brand
,
String
wareHouseCode
);
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
,
String
brand
);
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
,
String
brand
);
List
<
StoragePos
>
findByQuery
(
Query
query
,
Pageable
pageable
);
List
<
StoragePos
>
findByQuery
(
Query
query
,
Pageable
pageable
);
...
...
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
d7dfa33
...
@@ -374,6 +374,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
...
@@ -374,6 +374,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override
@Override
public
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
,
String
brand
)
{
public
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
,
String
brand
)
{
return
findPartNumberInStorages
(
storageIdList
,
pn
,
excludePosIds
,
checkOutType
,
brand
,
""
);
}
public
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
,
String
brand
,
String
wareHouseCode
){
Criteria
c
=
Criteria
.
where
(
"barcode.partNumber"
).
is
(
pn
)
Criteria
c
=
Criteria
.
where
(
"barcode.partNumber"
).
is
(
pn
)
.
and
(
"id"
).
nin
(
excludePosIds
)
.
and
(
"id"
).
nin
(
excludePosIds
)
.
and
(
"enabled"
).
is
(
true
)
//可用
.
and
(
"enabled"
).
is
(
true
)
//可用
...
@@ -384,9 +388,12 @@ public class StoragePosManagerImpl implements IStoragePosManager {
...
@@ -384,9 +388,12 @@ public class StoragePosManagerImpl implements IStoragePosManager {
if
(
StringUtils
.
isNotBlank
(
brand
))
{
if
(
StringUtils
.
isNotBlank
(
brand
))
{
c
.
and
(
"barcode.provider"
).
is
(
brand
);
c
.
and
(
"barcode.provider"
).
is
(
brand
);
}
}
if
(
StringUtils
.
isNotBlank
(
wareHouseCode
)){
c
.
and
(
"barcode.warehouseCode"
).
is
(
wareHouseCode
);
}
Query
q
=
new
Query
(
c
);
Query
q
=
new
Query
(
c
);
//Sort sort = getSortByCheckOutType(checkOutType);
//Sort sort = getSortByCheckOutType(checkOutType);
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.amount"
,
"barcode.expireDate"
,
"barcode.createDate"
);
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"barcode.amount"
,
"barcode.expireDate"
,
"barcode.createDate"
);
q
.
with
(
sort
);
q
.
with
(
sort
);
StoragePos
pos
=
storagePosDao
.
findOne
(
q
);
StoragePos
pos
=
storagePosDao
.
findOne
(
q
);
if
(
pos
==
null
)
{
if
(
pos
==
null
)
{
...
...
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/rawstor/util/BinCacheUtil.java
查看文件 @
d7dfa33
...
@@ -169,7 +169,7 @@ public class BinCacheUtil {
...
@@ -169,7 +169,7 @@ public class BinCacheUtil {
List
<
String
>
emptyBoxList
=
new
ArrayList
<>();
List
<
String
>
emptyBoxList
=
new
ArrayList
<>();
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
for
(
DataLog
dataLog
:
allTasks
)
{
for
(
DataLog
dataLog
:
allTasks
)
{
if
(
dataLog
.
isCheckOutTask
()
&&
!
dataLog
.
isCancel
())
{
if
(
dataLog
.
isCheckOutTask
()
&&
!
dataLog
.
isCancel
()
&&
!
dataLog
.
isFinished
()
)
{
if
(
source
.
equals
(
dataLog
.
getCurrentLoc
()))
{
if
(
source
.
equals
(
dataLog
.
getCurrentLoc
()))
{
log
.
info
(
"找到当前工位上的料箱为:"
+
dataLog
.
getBarcode
()
+
",位置为:"
+
dataLog
.
getCurrentLoc
());
log
.
info
(
"找到当前工位上的料箱为:"
+
dataLog
.
getBarcode
()
+
",位置为:"
+
dataLog
.
getCurrentLoc
());
emptyBoxList
.
add
(
dataLog
.
getBarcode
());
emptyBoxList
.
add
(
dataLog
.
getBarcode
());
...
...
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/rawstor/util/BoxHandleUtil.java
查看文件 @
d7dfa33
...
@@ -171,7 +171,7 @@ public class BoxHandleUtil {
...
@@ -171,7 +171,7 @@ public class BoxHandleUtil {
List
<
Criteria
>
criteriaList
=
new
ArrayList
<>();
List
<
Criteria
>
criteriaList
=
new
ArrayList
<>();
for
(
String
needBinCodeStr
:
needBinCodeList
)
{
for
(
String
needBinCodeStr
:
needBinCodeList
)
{
Criteria
criteria
=
Criteria
.
where
(
"barcode.subCodeList.posName"
).
regex
(
Pattern
.
compile
(
QueryHelp
.
escapeExprSpecialWord
(
"-"
+
needBinCodeStr
),
Pattern
.
CASE_INSENSITIVE
));
Criteria
criteria
=
Criteria
.
where
(
"barcode.subCodeList.posName"
).
regex
(
Pattern
.
compile
(
QueryHelp
.
escapeExprSpecialWord
(
"-
0
"
+
needBinCodeStr
),
Pattern
.
CASE_INSENSITIVE
));
criteriaList
.
add
(
criteria
);
criteriaList
.
add
(
criteria
);
}
}
c
.
orOperator
(
criteriaList
);
c
.
orOperator
(
criteriaList
);
...
...
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/third/MaterialRestController.java
查看文件 @
d7dfa33
...
@@ -2,6 +2,8 @@ package com.neotel.smfcore.custom.luxsan.factory_c.third;
...
@@ -2,6 +2,8 @@ package com.neotel.smfcore.custom.luxsan.factory_c.third;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.custom.luxsan.factory_c.third.bean.MaterialLoc
;
import
com.neotel.smfcore.custom.luxsan.factory_c.third.util.MaterialLocUtil
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.Data
;
import
lombok.Data
;
...
@@ -18,28 +20,25 @@ import java.util.Map;
...
@@ -18,28 +20,25 @@ import java.util.Map;
@RestController
@RestController
@RequestMapping
(
"/material/api"
)
@RequestMapping
(
"/material/api"
)
public
class
MaterialRestController
{
public
class
MaterialRestController
{
public
static
final
String
CACHE_MATERIAL_LOC
=
"CACHE_MATERIAL_LOC"
;
@Autowired
private
DataCache
dataCache
;
@ApiOperation
(
"更新料串位置"
)
@ApiOperation
(
"更新料串位置"
)
@RequestMapping
(
"/updateLoc"
)
@RequestMapping
(
"/updateLoc"
)
@AnonymousAccess
@AnonymousAccess
public
ResultBean
updateLoc
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
public
ResultBean
updateLoc
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
String
materialStr
=
paramMap
.
get
(
"materialStr"
);
String
materialStr
=
paramMap
.
get
(
"materialStr"
);
String
loc
=
paramMap
.
get
(
"loc"
);
String
loc
=
paramMap
.
get
(
"loc"
);
//log.info("收到料串位置更新,料串为:"+materialStr+",位置为:"+loc);
log
.
info
(
"收到料串位置更新,料串为:"
+
materialStr
+
",位置为:"
+
loc
);
MaterialLocUtil
.
updateMaterialLoc
(
materialStr
,
loc
,
null
);
Map
<
String
,
String
>
cacheMap
=
dataCache
.
getCache
(
CACHE_MATERIAL_LOC
);
return
ResultBean
.
newOkResult
(
""
);
if
(
cacheMap
==
null
){
cacheMap
=
new
HashMap
<>();
}
}
cacheMap
.
put
(
materialStr
,
loc
);
dataCache
.
updateCache
(
CACHE_MATERIAL_LOC
,
cacheMap
);
return
ResultBean
.
newOkResult
(
""
);
@ApiOperation
(
"获取料串位置信息"
)
@RequestMapping
(
"/getMaterialLoc"
)
@AnonymousAccess
public
ResultBean
getMaterialLoc
()
{
return
ResultBean
.
newOkResult
(
MaterialLocUtil
.
getMaterialLoc
());
}
}
}
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/third/bean/MaterialLoc.java
0 → 100644
查看文件 @
d7dfa33
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
factory_c
.
third
.
bean
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
lombok.Data
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
@Data
public
class
MaterialLoc
{
private
String
material
;
private
String
loc
;
private
int
amount
=
0
;
private
List
<
Barcode
>
barcodeList
=
new
ArrayList
<>();
private
Date
createDate
=
new
Date
();
private
Date
updateDate
=
new
Date
();
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/third/enums/MaterialLocEnum.java
0 → 100644
查看文件 @
d7dfa33
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
factory_c
.
third
.
enums
;
public
enum
MaterialLocEnum
{
MATERIAL_STRING_STATION
(
"料串工位"
,
"1"
),
DIVERSION_STATION
(
"分流工位"
,
"2"
),
WAREHOUSE_IN_ROLLER_LINE_1
(
"1号入库滚筒线"
,
"3"
),
WAREHOUSE_IN_ROLLER_LINE_2
(
"2号入库滚筒线"
,
"4"
),
WAREHOUSE_OUT_ROLLER_LINE_1
(
"1号出库滚筒线"
,
" 5"
),
WAREHOUSE_OUT_ROLLER_LINE_2
(
"2号出库滚筒线"
,
"6"
),
W2_1F_CONFLUENCE_LINE
(
"W2 1F汇流线"
,
"7"
),
W2_1F_LIFTING_WELL
(
"W2 1F提升井"
,
"8"
),
W2_3F_CORRIDOR_ROLLER_LINE
(
"W2 3F连廊滚筒线"
,
"9"
),
C2_3F_BG_ROLLER_LINE
(
"C2 3F BG滚筒线"
,
"10"
),
C2_3F_CG_ROLLER_LINE
(
"C2 3F CG滚筒线"
,
"11"
),
C2_3F_BG_FULL_MATERIAL_STRING_CACHE_LINE
(
"C2 3F BG满料串缓存线"
,
"12"
),
C2_3F_CG_FULL_MATERIAL_STRING_CACHE_LINE
(
"C2 3F CG满料串缓存线"
,
"13"
);
private
final
String
name
;
private
final
String
id
;
// 私有构造方法,用于在枚举常量实例化时传入参数
MaterialLocEnum
(
String
name
,
String
id
)
{
this
.
name
=
name
;
this
.
id
=
id
;
}
// 获取工位名称
public
String
getName
()
{
return
name
;
}
// 获取工位ID
public
String
getId
()
{
return
id
;
}
// 提供一个根据ID查找枚举常量的静态方法
public
static
String
findNameById
(
String
id
)
{
for
(
MaterialLocEnum
locEnum
:
MaterialLocEnum
.
values
())
{
if
(
locEnum
.
getId
().
equals
(
id
))
{
return
locEnum
.
getName
();
}
}
return
""
;
}
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/third/util/MaterialLocUtil.java
0 → 100644
查看文件 @
d7dfa33
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
factory_c
.
third
.
util
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.custom.luxsan.factory_c.third.bean.MaterialLoc
;
import
com.neotel.smfcore.custom.luxsan.factory_c.third.enums.MaterialLocEnum
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.*
;
@Component
public
class
MaterialLocUtil
{
public
static
final
String
CACHE_MATERIAL_LOC
=
"CACHE_MATERIAL_LOC"
;
private
static
DataCache
dataCache
;
@Autowired
public
void
setDataCache
(
DataCache
cache
)
{
MaterialLocUtil
.
dataCache
=
cache
;
}
public
static
void
updateMaterialLoc
(
String
materialStr
,
String
loc
,
Barcode
barcode
)
{
Map
<
String
,
MaterialLoc
>
cacheMap
=
dataCache
.
getCache
(
CACHE_MATERIAL_LOC
);
if
(
cacheMap
==
null
)
{
cacheMap
=
new
HashMap
<>();
}
MaterialLoc
materialLoc
=
cacheMap
.
get
(
materialStr
);
if
(
materialLoc
==
null
)
{
materialLoc
=
new
MaterialLoc
();
}
String
name
=
MaterialLocEnum
.
findNameById
(
loc
);
materialLoc
.
setLoc
(
name
);
materialLoc
.
setMaterial
(
materialStr
);
materialLoc
.
setUpdateDate
(
new
Date
());
List
<
Barcode
>
barcodeList
=
materialLoc
.
getBarcodeList
();
if
(
barcode
!=
null
)
{
if
(
barcodeList
!=
null
&&
!
barcodeList
.
isEmpty
())
{
barcodeList
.
removeIf
(
t
->
t
.
getBarcode
().
equals
(
barcode
.
getBarcode
()));
}
barcode
.
setUpdateDate
(
new
Date
());
barcodeList
.
add
(
barcode
);
}
int
amount
=
barcodeList
.
stream
().
mapToInt
(
Barcode:
:
getAmount
).
sum
();
materialLoc
.
setAmount
(
amount
);
materialLoc
.
setBarcodeList
(
barcodeList
);
materialLoc
.
setUpdateDate
(
new
Date
());
cacheMap
.
put
(
materialStr
,
materialLoc
);
dataCache
.
updateCache
(
CACHE_MATERIAL_LOC
,
cacheMap
);
}
public
static
void
removeMaterialLoc
(
String
materialStr
){
Map
<
String
,
MaterialLoc
>
cacheMap
=
dataCache
.
getCache
(
CACHE_MATERIAL_LOC
);
if
(
cacheMap
==
null
)
{
cacheMap
=
new
HashMap
<>();
}
cacheMap
.
remove
(
materialStr
);
dataCache
.
updateCache
(
CACHE_MATERIAL_LOC
,
cacheMap
);
}
public
static
Collection
<
MaterialLoc
>
getMaterialLoc
()
{
Map
<
String
,
MaterialLoc
>
cacheMap
=
dataCache
.
getCache
(
CACHE_MATERIAL_LOC
);
if
(
cacheMap
==
null
)
{
cacheMap
=
new
HashMap
<>();
}
return
cacheMap
.
values
();
}
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/WipStorCheckOutController.java
查看文件 @
d7dfa33
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
factory_c
.
wipstor
.
controller
;
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
factory_c
.
wipstor
.
controller
;
import
com.alibaba.fastjson.JSON
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
...
@@ -36,7 +37,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
...
@@ -36,7 +37,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Api
(
tags
=
"半成品出库"
)
@Api
(
tags
=
"半成品出库"
)
@Slf4j
@Slf4j
...
@@ -68,8 +71,11 @@ public class WipStorCheckOutController {
...
@@ -68,8 +71,11 @@ public class WipStorCheckOutController {
@ApiOperation
(
"获取ODN详情"
)
@ApiOperation
(
"获取ODN详情"
)
@RequestMapping
(
"/getOdnDetail"
)
@RequestMapping
(
"/getOdnDetail"
)
@AnonymousAccess
//
@AnonymousAccess
public
ResultBean
getOdnDetail
(
String
odn
)
{
public
ResultBean
getOdnDetail
(
String
odn
)
{
if
(
StringUtils
.
isBlank
(
odn
))
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"odn"
});
}
List
<
FetchShipmentInfoResult
>
resultList
=
LuxsanApi
.
fetchShipmentInfo
(
new
FetchShipmentInfoRequest
(
CommonUtil
.
plantCode
,
odn
));
List
<
FetchShipmentInfoResult
>
resultList
=
LuxsanApi
.
fetchShipmentInfo
(
new
FetchShipmentInfoRequest
(
CommonUtil
.
plantCode
,
odn
));
return
ResultBean
.
newOkResult
(
FetchShipmentInfoDto
.
convertFetchShipmentInfoDto
(
resultList
));
return
ResultBean
.
newOkResult
(
FetchShipmentInfoDto
.
convertFetchShipmentInfoDto
(
resultList
));
}
}
...
@@ -77,7 +83,7 @@ public class WipStorCheckOutController {
...
@@ -77,7 +83,7 @@ public class WipStorCheckOutController {
@ApiOperation
(
"判断料箱是否在库"
)
@ApiOperation
(
"判断料箱是否在库"
)
@RequestMapping
(
"boxInStor"
)
@RequestMapping
(
"boxInStor"
)
@AnonymousAccess
//
@AnonymousAccess
public
ResultBean
boxInStor
(
String
odn
,
String
box
)
{
public
ResultBean
boxInStor
(
String
odn
,
String
box
)
{
log
.
info
(
"收到odn信息为:"
+
odn
+
",料箱信息为:"
+
box
);
log
.
info
(
"收到odn信息为:"
+
odn
+
",料箱信息为:"
+
box
);
Barcode
barcode
=
codeResolve
.
resolveOneValideBarcode
(
box
);
Barcode
barcode
=
codeResolve
.
resolveOneValideBarcode
(
box
);
...
@@ -108,26 +114,31 @@ public class WipStorCheckOutController {
...
@@ -108,26 +114,31 @@ public class WipStorCheckOutController {
@ApiOperation
(
"ODN出库"
)
@ApiOperation
(
"ODN出库"
)
@RequestMapping
(
"/odnOut"
)
@RequestMapping
(
"/odnOut"
)
@AnonymousAccess
//
@AnonymousAccess
public
synchronized
ResultBean
odnOut
(
@RequestBody
OdnOut
odnOut
)
{
public
synchronized
ResultBean
odnOut
(
@RequestBody
OdnOut
odnOut
)
{
log
.
info
(
"收到odn出库信息为:"
+
JSON
.
toJSONString
(
odnOut
));
String
odn
=
odnOut
.
getOdn
();
String
odn
=
odnOut
.
getOdn
();
if
(
StringUtils
.
isBlank
(
odn
))
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"odn"
});
}
List
<
String
>
boxList
=
odnOut
.
getBoxList
();
List
<
String
>
boxList
=
odnOut
.
getBoxList
();
//1.判断是否正在执行中
//判断是否存在odn信息
LiteOrder
liteOrder
=
liteOrderCache
.
getLiteOrder
(
odn
);
LiteOrder
liteOrder
=
liteOrderCache
.
getLiteOrder
(
odn
);
if
(
liteOrder
==
null
)
{
if
(
liteOrder
==
null
)
{
liteOrder
=
liteOrderManager
.
findByOrderNo
(
odn
);
liteOrder
=
liteOrderManager
.
findByOrderNo
(
odn
);
}
}
if
(
liteOrder
!=
null
)
{
if
(!
liteOrder
.
isTaskFinished
()
&&
!
liteOrder
.
isNew
())
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
odn
+
"任务未结束"
);
}
liteOrder
.
setOrderNo
(
odn
+
"_bak_"
+
System
.
currentTimeMillis
());
liteOrderManager
.
createWithItems
(
liteOrder
);
}
//2.生成工单任务
if
(
liteOrder
==
null
)
{
LiteOrder
newOrder
=
new
LiteOrder
();
liteOrder
=
new
LiteOrder
();
liteOrder
.
setOrderNo
(
odn
);
List
<
LiteOrderItem
>
itemList
=
new
ArrayList
<>();
List
<
LiteOrderItem
>
itemList
=
new
ArrayList
<>();
List
<
FetchShipmentInfoResult
>
resultList
=
LuxsanApi
.
fetchShipmentInfo
(
new
FetchShipmentInfoRequest
(
CommonUtil
.
plantCode
,
odn
));
List
<
FetchShipmentInfoResult
>
resultList
=
LuxsanApi
.
fetchShipmentInfo
(
new
FetchShipmentInfoRequest
(
CommonUtil
.
plantCode
,
odn
));
...
@@ -149,76 +160,74 @@ public class WipStorCheckOutController {
...
@@ -149,76 +160,74 @@ public class WipStorCheckOutController {
orderItem
.
setImportMode
(
result
.
getIMPORT_MODE
());
orderItem
.
setImportMode
(
result
.
getIMPORT_MODE
());
orderItem
.
setImportCode
(
result
.
getIMPORT_CODE
());
orderItem
.
setImportCode
(
result
.
getIMPORT_CODE
());
orderItem
.
setShipTo
(
result
.
getSHIP_TO
());
orderItem
.
setShipTo
(
result
.
getSHIP_TO
());
orderItem
.
setPn
(
result
.
getMATERIAL_CODE
());
//
orderItem.setPn(result.getMATERIAL_CODE());
orderItem
.
setNeedNum
(
result
.
getQTY
());
orderItem
.
setNeedNum
(
result
.
getQTY
());
itemList
.
add
(
orderItem
);
itemList
.
add
(
orderItem
);
}
}
liteOrder
.
setOrderItems
(
itemList
);
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
}
newOrder
.
setOrderNo
(
odn
);
newOrder
.
setOrderItems
(
itemList
);
newOrder
=
liteOrderManager
.
createWithItems
(
newOrder
);
liteOrderCache
.
addOrderToMap
(
newOrder
);
List
<
String
>
needOutBoxList
=
liteOrderCache
.
findNeedOutBox
(
odn
,
boxList
);
List
<
LiteOrderItem
>
orderItems
=
liteOrder
.
getOrderItems
(
);
if
(
needOutBoxList
==
null
||
needOutBoxList
.
isEmpty
()){
return
ResultBean
.
newErrorResult
(-
1
,
""
,
"未找到可以出库的物料"
);
//判断是否在库,有没有出库任务
}
List
<
StoragePos
>
storagePosList
=
new
ArrayList
<>();
return
ResultBean
.
newOkResult
(
needOutBoxList
);
if
(
boxList
!=
null
&&
!
boxList
.
isEmpty
())
{
for
(
String
box
:
boxList
)
{
if
(
StringUtils
.
isBlank
(
box
)){
return
ResultBean
.
newErrorResult
(-
1
,
""
,
"请核实传入的料箱号是否为空"
);
}
}
Barcode
barcode
=
codeResolve
.
resolveOneValideBarcode
(
box
);
if
(
barcode
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
box
+
"条码无效"
);
}
@ApiOperation
(
"取消odn出库"
)
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
@RequestMapping
(
"/cancelOdnOut"
)
for
(
DataLog
dataLog
:
allTasks
)
{
@AnonymousAccess
if
(
box
.
startsWith
(
dataLog
.
getBarcode
())
&&
!
dataLog
.
isFinished
()
&&
!
dataLog
.
isCancel
())
{
public
ResultBean
cancelOdnOut
(
String
odn
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
box
+
"有正在执行的任务,请核实"
);
if
(
StringUtils
.
isEmpty
(
odn
))
{
}
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"odn"
});
}
}
List
<
StoragePos
>
posList
=
storagePosManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"barcode.lockName"
).
is
(
odn
)));
if
(
posList
!=
null
&&
!
posList
.
isEmpty
()){
for
(
StoragePos
storagePos
:
posList
)
{
Barcode
barcode
=
storagePos
.
getBarcode
();
barcode
.
setOrderId
(
""
);
barcode
.
setOrderItemId
(
""
);
barcode
.
setLockId
(
""
);
barcode
.
setLockName
(
""
);
barcodeManager
.
save
(
barcode
);
storagePos
.
setBarcode
(
barcode
);
//判断当前工单的料号与出库的是否相同
storagePosManager
.
save
(
storagePos
);
boolean
hasSame
=
false
;
for
(
LiteOrderItem
orderItem
:
orderItems
)
{
if
(
barcode
.
getPartNumber
().
equals
(
orderItem
.
getPn
())
||
barcode
.
getPn
().
equals
(
orderItem
.
getPn
()))
{
if
(
StringUtils
.
isNotBlank
(
barcode
.
getWarehouseCode
()))
{
if
(
barcode
.
getWarehouseCode
().
equals
(
orderItem
.
getWarehouseCode
()))
{
hasSame
=
true
;
}
}
}
}
}
return
ResultBean
.
newOkResult
(
""
);
}
}
if
(!
hasSame
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
box
+
"不符合当前odn的料号与库别"
);
}
@ApiOperation
(
"ODN确认出库"
)
StoragePos
pos
=
storagePosManager
.
getByBarcode
(
barcode
.
getBarcode
());
@RequestMapping
(
"/odnConfirmOut"
)
if
(
pos
==
null
)
{
@AnonymousAccess
return
ResultBean
.
newErrorResult
(-
1
,
""
,
box
+
"不在库位中,请核实"
);
public
synchronized
ResultBean
odnConfirmOut
(
String
odn
)
{
//生成出库任务
List
<
StoragePos
>
posList
=
storagePosManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"barcode.lockName"
).
is
(
odn
)));
for
(
StoragePos
storagePos
:
posList
)
{
Storage
storage
=
dataCache
.
getStorageById
(
storagePos
.
getStorageId
());
Barcode
barcode
=
storagePos
.
getBarcode
();
DataLog
dataLog
=
new
DataLog
(
storage
,
barcode
,
storagePos
);
dataLog
.
setSourceId
(
barcode
.
getLockId
());
dataLog
.
setSourceName
(
barcode
.
getLockName
());
dataLog
.
setSubSourceId
(
barcode
.
getOrderItemId
());
dataLog
.
setType
(
OP
.
CHECKOUT
);
dataLog
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
taskService
.
updateQueueTask
(
dataLog
);
}
}
storagePosList
.
add
(
pos
);
return
ResultBean
.
newOkResult
(
""
);
}
}
}
liteOrderCache
.
odnCheckOut
(
odn
,
storagePosList
);
return
ResultBean
.
newOkResult
(
Arrays
.
asList
(
"111"
,
"222"
));
}
@ApiOperation
(
"人员调用wms手动解绑"
)
@ApiOperation
(
"人员调用wms手动解绑"
)
@RequestMapping
(
"/unBindPallet"
)
@RequestMapping
(
"/unBindPallet"
)
@AnonymousAccess
//
@AnonymousAccess
public
ResultBean
unBindPallet
()
{
public
ResultBean
unBindPallet
()
{
return
ResultBean
.
newOkResult
(
""
);
return
ResultBean
.
newOkResult
(
""
);
...
...
src/main/resources/config/application-21088prod.yml
查看文件 @
d7dfa33
...
@@ -151,7 +151,7 @@ api:
...
@@ -151,7 +151,7 @@ api:
brandQtyUrl
:
http://10.68.30.22:8082/api/wcs/brandQty
brandQtyUrl
:
http://10.68.30.22:8082/api/wcs/brandQty
#自动仓获取ODN单信息
#自动仓获取ODN单信息
fetchShipmentInfo
:
http://10.68.30.22:8082/api/FetchShipment
fetchShipmentInfo
:
http://10.68.30.22:8082/api/
mlb/
FetchShipment
#储位转移
#储位转移
binMove
:
http://10.68.30.22:8082/api/mlb/BinMove
binMove
:
http://10.68.30.22:8082/api/mlb/BinMove
...
...
src/main/resources/config/application-21088test.yml
查看文件 @
d7dfa33
...
@@ -151,7 +151,7 @@ api:
...
@@ -151,7 +151,7 @@ api:
brandQtyUrl
:
http://10.42.220.171:8082/api/mlb/brandQty
brandQtyUrl
:
http://10.42.220.171:8082/api/mlb/brandQty
#自动仓获取ODN单信息
#自动仓获取ODN单信息
fetchShipmentInfo
:
http://10.42.220.171:8082/api/FetchShipment
fetchShipmentInfo
:
http://10.42.220.171:8082/api/
mlb/
FetchShipment
#储位转移
#储位转移
binMove
:
http://10.42.220.171:8082/api/mlb/BinMove
binMove
:
http://10.42.220.171:8082/api/mlb/BinMove
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论