Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 2644b91b
由
LN
编写于
2024-07-26 21:35:32 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
手动出入库逻辑
1 个父辈
851f730f
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
501 行增加
和
163 行删除
src/main/java/com/neotel/smfcore/core/barcode/bean/BarcodeRule.java
src/main/java/com/neotel/smfcore/core/barcode/service/manager/IBarcodeManager.java
src/main/java/com/neotel/smfcore/core/barcode/service/manager/impl/BarcodeManagerImpl.java
src/main/java/com/neotel/smfcore/core/storage/service/po/StoragePos.java
src/main/java/com/neotel/smfcore/custom/luxsan_sp/controller/SpBoxCheckOutController.java
src/main/java/com/neotel/smfcore/custom/luxsan_sp/controller/SpBoxPutInController.java
src/main/java/com/neotel/smfcore/core/barcode/bean/BarcodeRule.java
查看文件 @
2644b91
...
...
@@ -907,8 +907,9 @@ public class BarcodeRule {
//codeStr = "B0700001A";
//rule = "RI[0:8:1]PN[0:3:6]";
codeStr
=
"B0700001A"
;
codeStr
=
"CS0413A-1"
;
rule
=
"RI[-1:6:1]PN[0:2:5]"
;
//codeStr = "=7x8=131S00650-017131|20240422-0831|20000|L130171311724000EK|TAIYO|";
//rule = "PN[-1:50:-1]PROVIDERNUMBER[-1:50:-1]|BATCH[-1:50:-1]DATECODE[-1:50:-1]|QTY|RI|SP|6";
...
...
src/main/java/com/neotel/smfcore/core/barcode/service/manager/IBarcodeManager.java
查看文件 @
2644b91
...
...
@@ -31,5 +31,5 @@ public interface IBarcodeManager extends IBaseManager<Barcode> {
int
countByQuery
(
Query
query
);
boolean
partNumberIsAlreadyInThisOrNever
(
String
bin
,
String
partNumber
);
String
getPNCurrGeKou
(
String
partNumber
);
}
src/main/java/com/neotel/smfcore/core/barcode/service/manager/impl/BarcodeManagerImpl.java
查看文件 @
2644b91
...
...
@@ -23,7 +23,6 @@ import org.springframework.stereotype.Service;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.util.*
;
import
java.util.function.Function
;
import
java.util.regex.Pattern
;
import
java.util.stream.Collectors
;
...
...
@@ -215,17 +214,18 @@ public class BarcodeManagerImpl implements IBarcodeManager {
}
@Override
public
boolean
partNumberIsAlreadyInThisOrNever
(
String
bin
,
String
partNumber
)
{
public
String
getPNCurrGeKou
(
String
partNumber
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"subCodeList.partNumber"
).
is
(
partNumber
));
List
<
String
>
barcodes
=
new
ArrayList
<>();
for
(
Barcode
barcode
:
(
List
<
Barcode
>)
barcodeDao
.
findByQuery
(
query
))
{
barcodes
.
addAll
(
barcode
.
getSubCodeList
().
stream
()
.
filter
(
b
->
b
.
getPartNumber
().
equals
(
partNumber
))
.
map
(
Barcode:
:
getBarcode
).
collect
(
Collectors
.
toList
()));
}
for
(
String
barcode
:
barcodes
)
{
return
barcode
.
equals
(
bin
)
;
return
barcode
;
}
return
true
;
return
""
;
}
protected
boolean
validateComponent
(
Barcode
barcode
)
{
...
...
src/main/java/com/neotel/smfcore/core/storage/service/po/StoragePos.java
查看文件 @
2644b91
...
...
@@ -149,7 +149,9 @@ public class StoragePos extends BasePo implements Serializable {
*/
private
String
source
;
/**
* 库别
*/
private
String
wareHouseCode
;
public
String
getLabelStr
(){
...
...
src/main/java/com/neotel/smfcore/custom/luxsan_sp/controller/SpBoxCheckOutController.java
查看文件 @
2644b91
...
...
@@ -85,10 +85,13 @@ public class SpBoxCheckOutController {
@AnonymousAccess
public
synchronized
ResultBean
reelOutBox
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
String
boxStr
=
paramMap
.
get
(
"boxStr"
);
String
codeStr
=
paramMap
.
get
(
"codeStr"
);
String
binCodeStr
=
paramMap
.
get
(
"binCodeStr"
);
String
boxStr
=
paramMap
.
get
(
"boxStr"
).
trim
();
String
rellCodeStr
=
paramMap
.
get
(
"codeStr"
).
trim
();
String
gekouCodeStr
=
paramMap
.
get
(
"binCodeStr"
).
trim
();
log
.
info
(
"reelOutBox : boxStr="
+
boxStr
+
",codeStr="
+
rellCodeStr
+
",binCodeStr="
+
gekouCodeStr
);
// boxStr = "C0700377A";
// codeStr = "1950090020044V&&2";
// binCodeStr = "C0700377-01";
//解析料箱信息
Barcode
boxBarcode
=
codeResolve
.
resolveOneValideBarcode
(
"=2x2="
+
boxStr
);
...
...
@@ -97,76 +100,116 @@ public class SpBoxCheckOutController {
}
//解析料格信息
Barcode
binBarcode
=
codeResolve
.
resolveOneValideBarcode
(
"=2x2="
+
bin
CodeStr
);
if
(
bin
Barcode
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
bin
CodeStr
+
"不是有效的条码"
);
Barcode
gekouBarcode
=
codeResolve
.
resolveOneValideBarcode
(
"=2x2="
+
gekou
CodeStr
);
if
(
gekou
Barcode
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
gekou
CodeStr
+
"不是有效的条码"
);
}
//2.解析条码信息
CodeBarcode
codeBarcode
=
CodeUtil
.
getCodeBarcode
(
rellCodeStr
);
if
(
codeBarcode
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
rellCodeStr
+
"不是有效的条码"
);
}
//1.判断料格信息与料箱信息是否匹配
if
(!
bin
Barcode
.
getBarcode
().
startsWith
(
boxBarcode
.
getBarcode
()))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
binCodeStr
+
"不是当前料箱:"
+
boxStr
+
"的隔
口"
);
if
(!
gekou
Barcode
.
getBarcode
().
startsWith
(
boxBarcode
.
getBarcode
()))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
gekouCodeStr
+
"不是当前料箱:"
+
boxStr
+
"的格
口"
);
}
//2.解析条码信息
CodeBarcode
codeBarcode
=
CodeUtil
.
getCodeBarcode
(
codeStr
);
if
(
codeBarcode
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
codeStr
+
"不是有效的条码"
);
int
binCodeNum
=
Integer
.
parseInt
(
gekouCodeStr
.
split
(
"-"
)[
1
]);
//判断格口数量是否超出
int
count
=
SpBoxUtil
.
GetBoxSubCount
(
boxBarcode
.
getBarcode
());
if
(
binCodeNum
>
count
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
boxBarcode
.
getBarcode
()
+
"最多格口数"
+
count
+
",请扫描正确的格口码"
);
}
//3.获取当前预约单
String
orderId
=
binBarcode
.
getOrderId
();
// 判断是不是工单出库
boolean
isOrderCheckout
=
StringUtils
.
isNotBlank
(
orderId
);
boolean
isOrderCheckout
=
ObjectUtil
.
isNotEmpty
(
gekouBarcode
.
getOrderId
()
);
LiteOrder
liteOrder
=
null
;
LiteOrder
newLiteOrder
=
null
;
if
(
isOrderCheckout
)
{
liteOrder
=
liteOrderManager
.
get
(
orderId
);
newLiteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
if
(
newLiteOrder
==
null
){
newLiteOrder
=
liteOrderManager
.
findByOrderNo
(
liteOrder
.
getOrderNo
());
liteOrder
=
liteOrderCache
.
getLiteOrder
(
liteOrder
.
getOrderNo
());
if
(
liteOrder
==
null
)
{
liteOrder
=
liteOrderManager
.
get
(
gekouBarcode
.
getOrderId
());
}
if
(
liteOrder
==
null
||
liteOrder
.
isClosed
())
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
boxBarcode
.
getBarcode
()
+
"工单"
+
liteOrder
.
getOrderNo
()
+
"已关闭,无法再出库"
);
}
//4.判断当前需不需要出库
String
itemId
=
bin
Barcode
.
getOrderItemId
();
if
(
StringUtils
.
isEmpty
(
itemId
)){
return
ResultBean
.
newErrorResult
(-
1
,
""
,
codeStr
+
"没有要出库的任务"
);
String
itemId
=
gekou
Barcode
.
getOrderItemId
();
if
(
StringUtils
.
isEmpty
(
itemId
))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
boxStr
+
"没有要出库的任务"
);
}
//判断所属的工单任务是否完成
String
result
=
handleOrderNo
(
newLiteOrder
,
itemId
,
codeBarcode
.
getQty
());
if
(
StringUtils
.
isNotEmpty
(
result
)){
return
ResultBean
.
newErrorResult
(-
1
,
""
,
result
);
String
result
=
handleOrderNo
(
liteOrder
,
itemId
,
codeBarcode
.
getQty
());
if
(
StringUtils
.
isNotEmpty
(
result
))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
result
);
}
}
else
{
//判断此物料是否在此格口
//此格口为空
if
(
gekouBarcode
.
getPartNumber
().
equals
(
codeBarcode
.
getPartNumber
()))
{
//pn已在此格口
if
(
gekouBarcode
.
getAmount
()
>
0
&&
gekouBarcode
.
getAmount
()
>=
codeBarcode
.
getQty
())
{
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
boxStr
+
"格口"
+
gekouCodeStr
+
"中物料"
+
gekouBarcode
.
getPartNumber
()
+
"数量为"
+
gekouBarcode
.
getAmount
()
+
"小于要出库数量"
+
codeBarcode
.
getQty
());
}
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
boxStr
+
"格口"
+
gekouCodeStr
+
"中物料"
+
gekouBarcode
.
getPartNumber
()
+
"与出库物料"
+
codeBarcode
.
getPartNumber
()
+
"不匹配"
);
}
}
//4.开始拿出料箱
binBarcode
.
setAmount
(
binBarcode
.
getAmount
()-
codeBarcode
.
getQty
());
boxBarcode
.
updateSubCodes
(
binBarcode
);
gekouBarcode
.
setAmount
(
gekouBarcode
.
getAmount
()
-
codeBarcode
.
getQty
());
if
(
gekouBarcode
.
getAmount
()
<=
0
)
{
gekouBarcode
.
setAmount
(
0
);
}
boxBarcode
.
updateSubCodes
(
gekouBarcode
);
//5.寻找空库位
StoragePos
pos
=
SpBoxUtil
.
locOnePos
(
boxBarcode
);
if
(
pos
==
null
){
return
ResultBean
.
newErrorResult
(-
1
,
""
,
boxStr
+
"未找到可用的库位"
);
}
//
//5.寻找空库位
//
StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
//
if (pos == null){
//
return ResultBean.newErrorResult(-1,"",boxStr+"未找到可用的库位");
//
}
log
.
info
(
"reelOutBox : boxStr="
+
boxStr
+
",codeStr="
+
rellCodeStr
+
",binCodeStr="
+
gekouCodeStr
+
"出库完成,数量"
+
codeBarcode
.
getQty
()
+
",剩余数量:"
+
gekouBarcode
.
getAmount
());
//6.生成出库任务
DataLog
dataLog
=
new
DataLog
();
dataLog
.
setBarcode
(
c
odeStr
);
dataLog
.
setBarcode
(
rellC
odeStr
);
dataLog
.
setPartNumber
(
codeBarcode
.
getPartNumber
());
dataLog
.
setOperator
(
SecurityUtils
.
getLoginUsername
());
dataLog
.
setStatus
(
OP_STATUS
.
FINISHED
.
name
());
dataLog
.
setPosName
(
binBarcode
.
getBarcode
());
dataLog
.
setPosName
(
gekouBarcode
.
getBarcode
());
dataLog
.
setNum
(
codeBarcode
.
getQty
());
dataLog
.
setType
(
OP
.
CHECKOUT
);
if
(
liteOrder
!=
null
)
{
dataLog
.
setSourceId
(
liteOrder
.
getId
());
dataLog
.
setSourceName
(
liteOrder
.
getOrderNo
());
}
taskService
.
updateFinishedTask
(
dataLog
);
pos
.
setBarcode
(
boxBarcode
);
pos
.
setUsed
(
true
);
storagePosManager
.
save
(
pos
);
// pos.setBarcode(boxBarcode);
// pos.setUsed(true);
// storagePosManager.save(pos);
barcodeManager
.
save
(
gekouBarcode
);
barcodeManager
.
save
(
boxBarcode
);
return
ResultBean
.
newOkResult
(
""
);
Map
<
String
,
String
>
res
=
new
HashMap
<>();
res
.
put
(
"PN"
,
codeBarcode
.
getPartNumber
());
res
.
put
(
"InPutNum"
,
codeBarcode
.
getQty
()+
""
);
res
.
put
(
"CurrNum"
,
gekouBarcode
.
getAmount
()+
""
);
res
.
put
(
"Code"
,
gekouBarcode
.
getBarcode
());
return
ResultBean
.
newOkResult
(
""
,
rellCodeStr
+
"出库成功"
,
res
);
}
...
...
@@ -218,4 +261,95 @@ public class SpBoxCheckOutController {
liteOrderCache
.
addOrderToMap
(
liteOrder
);
liteOrderManager
.
save
(
liteOrder
);
}
// //以料格为维度,一个料格
// @ApiOperation("物料拿出料格")
// @RequestMapping("/reelOutBox")
// @AnonymousAccess
// public synchronized ResultBean reelOutBox(@RequestBody Map<String, String> paramMap) {
//
// String boxStr = paramMap.get("boxStr");
// String codeStr = paramMap.get("codeStr");
// String binCodeStr = paramMap.get("binCodeStr");
//
//
// //解析料箱信息
// Barcode boxBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + boxStr);
// if (boxBarcode == null) {
// return ResultBean.newErrorResult(-1, "", boxStr + "不是有效的条码");
// }
//
// //解析料格信息
// Barcode binBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + binCodeStr);
// if (binBarcode == null) {
// return ResultBean.newErrorResult(-1, "", binCodeStr + "不是有效的条码");
// }
//
// //1.判断料格信息与料箱信息是否匹配
// if (!binBarcode.getBarcode().startsWith(boxBarcode.getBarcode())) {
// return ResultBean.newErrorResult(-1, "", binCodeStr + "不是当前料箱:" + boxStr + "的隔口");
// }
//
// //2.解析条码信息
// CodeBarcode codeBarcode = CodeUtil.getCodeBarcode(codeStr);
// if (codeBarcode == null) {
// return ResultBean.newErrorResult(-1, "", codeStr + "不是有效的条码");
// }
//
// //3.获取当前预约单
// String orderId = binBarcode.getOrderId();
// // 判断是不是工单出库
// boolean isOrderCheckout = StringUtils.isNotBlank(orderId);
// LiteOrder liteOrder = null;
// LiteOrder newLiteOrder = null;
// if (isOrderCheckout) {
// liteOrder = liteOrderManager.get(orderId);
// newLiteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
// if (newLiteOrder == null){
// newLiteOrder = liteOrderManager.findByOrderNo(liteOrder.getOrderNo());
// }
//
// //4.判断当前需不需要出库
// String itemId = binBarcode.getOrderItemId();
// if (StringUtils.isEmpty(itemId)){
// return ResultBean.newErrorResult(-1,"",codeStr+"没有要出库的任务");
// }
//
// //判断所属的工单任务是否完成
// String result = handleOrderNo(newLiteOrder, itemId, codeBarcode.getQty());
// if (StringUtils.isNotEmpty(result)){
// return ResultBean.newErrorResult(-1,"",result);
// }
//
// }
//
// //4.开始拿出料箱
// binBarcode.setAmount(binBarcode.getAmount()-codeBarcode.getQty());
// boxBarcode.updateSubCodes(binBarcode);
//
//
// //5.寻找空库位
// StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
// if (pos == null){
// return ResultBean.newErrorResult(-1,"",boxStr+"未找到可用的库位");
// }
//
// //6.生成出库任务
// DataLog dataLog = new DataLog();
// dataLog.setBarcode(codeStr);
// dataLog.setPartNumber(codeBarcode.getPartNumber());
// dataLog.setOperator(SecurityUtils.getLoginUsername());
// dataLog.setStatus(OP_STATUS.FINISHED.name());
// dataLog.setPosName(binBarcode.getBarcode());
// dataLog.setType(OP.CHECKOUT);
// taskService.updateFinishedTask(dataLog);
//
// pos.setBarcode(boxBarcode);
// pos.setUsed(true);
// storagePosManager.save(pos);
// barcodeManager.save(boxBarcode);
//
// return ResultBean.newOkResult("");
// }
}
src/main/java/com/neotel/smfcore/custom/luxsan_sp/controller/SpBoxPutInController.java
查看文件 @
2644b91
...
...
@@ -112,15 +112,10 @@ public class SpBoxPutInController {
@RequestMapping
(
"/reelToBox"
)
@AnonymousAccess
public
synchronized
ResultBean
reelToBox
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
// SpareNo spareNo1 = spareNoCache.getExecutIngSpareNo();
// ReturnInventoryNo returnInventoryNo1 = returnNoCache.getExecutingOrderNo();
// if (ObjectUtil.isAllEmpty(spareNo1, returnInventoryNo1)) {
// return ResultBean.newErrorResult(-1,"","没有找到正在执行的入库单或者退库单");
// }
String
boxStr
=
paramMap
.
get
(
"boxStr"
);
String
codeStr
=
paramMap
.
get
(
"codeStr"
);
String
binCodeStr
=
paramMap
.
get
(
"binCodeStr"
);
String
boxStr
=
paramMap
.
get
(
"boxStr"
).
trim
();
String
rellCodeStr
=
paramMap
.
get
(
"codeStr"
).
trim
();
String
gekouCodeStr
=
paramMap
.
get
(
"binCodeStr"
).
trim
();
log
.
info
(
"reelToBox : boxStr="
+
boxStr
+
",codeStr="
+
rellCodeStr
+
",binCodeStr="
+
gekouCodeStr
);
// boxStr = "C0700377A";
// codeStr = "1950090020044V&&2";
// binCodeStr = "C0700377-01";
...
...
@@ -132,53 +127,48 @@ public class SpBoxPutInController {
}
//解析料格信息
Barcode
binBarcode
=
codeResolve
.
resolveOneValideBarcode
(
"=2x2="
+
bin
CodeStr
);
if
(
bin
Barcode
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
bin
CodeStr
+
"不是有效的条码"
);
Barcode
gekouBarcode
=
codeResolve
.
resolveOneValideBarcode
(
"=2x2="
+
gekou
CodeStr
);
if
(
gekou
Barcode
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
gekou
CodeStr
+
"不是有效的条码"
);
}
//2.解析条码信息
CodeBarcode
codeBarcode
=
CodeUtil
.
getCodeBarcode
(
c
odeStr
);
CodeBarcode
codeBarcode
=
CodeUtil
.
getCodeBarcode
(
rellC
odeStr
);
if
(
codeBarcode
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
c
odeStr
+
"不是有效的条码"
);
return
ResultBean
.
newErrorResult
(-
1
,
""
,
rellC
odeStr
+
"不是有效的条码"
);
}
// 判断物料是否在其他格口
boolean
isAlreadyInThisOrNever
=
barcodeManager
.
partNumberIsAlreadyInThisOrNever
(
binCodeStr
,
codeBarcode
.
getPartNumber
());
if
(!
isAlreadyInThisOrNever
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
codeBarcode
.
getPartNumber
()
+
"已经存在其他料格"
);
//1.判断料格信息与料箱信息是否匹配
if
(!
gekouBarcode
.
getBarcode
().
startsWith
(
boxBarcode
.
getBarcode
()))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
gekouCodeStr
+
"不是当前料箱:"
+
boxStr
+
"的格口"
);
}
i
f
(
boxBarcode
.
getPartNumber
().
equals
(
binBarcode
.
getPartNumber
()))
{
binBarcode
.
setPartNumber
(
null
);
}
if
(
ObjectUtil
.
isEmpty
(
binBarcode
.
getPartNumber
())
)
{
binBarcode
.
setPartNumber
(
codeBarcode
.
getPartNumber
()
);
i
nt
binCodeNum
=
Integer
.
parseInt
(
gekouCodeStr
.
split
(
"-"
)[
1
]);
//判断格口数量是否超出
int
count
=
SpBoxUtil
.
GetBoxSubCount
(
boxBarcode
.
getBarcode
());
if
(
binCodeNum
>
count
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
boxBarcode
.
getBarcode
()
+
"最多格口数"
+
count
+
",请扫描正确的格口码"
);
}
//此格口为空
if
(
ObjectUtil
.
isEmpty
(
gekouBarcode
.
getPartNumber
())
||
gekouBarcode
.
getPartNumber
().
equals
(
boxBarcode
.
getPartNumber
()))
{
//1.判断料格信息与料箱信息是否匹配
if
(!
binBarcode
.
getBarcode
().
startsWith
(
boxBarcode
.
getBarcode
()))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
binCodeStr
+
"不是当前料箱:"
+
boxStr
+
"的隔口"
);
}
// 匹配是否存在该料格
List
<
Barcode
>
subCodeList
=
boxBarcode
.
getSubCodeList
();
if
(
ObjectUtil
.
isNull
(
subCodeList
))
{
boxBarcode
.
setSubCodeList
(
new
ArrayList
<>());
subCodeList
=
boxBarcode
.
getSubCodeList
();
subCodeList
.
add
(
binBarcode
);
}
else
{
if
(!
(
subCodeList
.
stream
()
.
map
(
Barcode:
:
getBarcode
)
.
collect
(
Collectors
.
toList
())
.
contains
(
binCodeStr
))
)
{
subCodeList
.
add
(
binBarcode
);
// 判断物料是否在其他格口
String
currP
=
barcodeManager
.
getPNCurrGeKou
(
codeBarcode
.
getPartNumber
());
if
(
ObjectUtil
.
isNotEmpty
(
currP
)&&(!
currP
.
equals
(
gekouCodeStr
)))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
codeBarcode
.
getPartNumber
()
+
"已在"
+
currP
+
"中"
);
}
}
//是新格口物料
gekouBarcode
.
setPartNumber
(
codeBarcode
.
getPartNumber
());
gekouBarcode
.
setAmount
(
0
);
gekouBarcode
.
setOut
(
false
);
}
else
if
(
gekouBarcode
.
getPartNumber
().
equals
(
codeBarcode
.
getPartNumber
()))
{
//pn已在此格口
}
else
{
//不匹配,直接返回
return
ResultBean
.
newErrorResult
(-
1
,
""
,
rellCodeStr
+
"的料号与隔口:"
+
gekouCodeStr
+
"的料号["
+
gekouBarcode
.
getPartNumber
()
+
"]不匹配"
);
}
//判断有没有正在执行入库单
SpareNo
spareNo
=
spareNoCache
.
getExecutIngSpareNo
();
...
...
@@ -187,54 +177,27 @@ public class SpBoxPutInController {
boolean
isOrderPutIn
=
false
;
if
(
ObjectUtil
.
isAllEmpty
(
spareNo
,
returnInventoryNo
))
{
// return ResultBean.newErrorResult(-1,"","没有找到正在执行的入库单或者退库单");
}
else
{
}
else
{
baseNo
=
ObjectUtil
.
isEmpty
(
spareNo
)
?
returnInventoryNo
:
spareNo
;
isOrderPutIn
=
true
;
}
//3.判断与当前隔口的料号是否匹配
// String binPartNumber = binBarcode.getPartNumber();
// if (binPartNumber.equals("CS") || binPartNumber.equals("CB") || binPartNumber.equals("CM")) {
// binPartNumber = "";
// }
boolean
isMatch
=
false
;
int
binCodeNum
=
Integer
.
parseInt
(
binCodeStr
.
split
(
"-"
)[
1
]);
String
codePartNumber
=
codeBarcode
.
getPartNumber
();
for
(
Barcode
barcode
:
boxBarcode
.
getSubCodeList
())
{
String
pn
=
barcode
.
getPartNumber
();
int
binNum
=
Integer
.
parseInt
(
barcode
.
getBarcode
().
split
(
"-"
)[
1
]);
if
((
binNum
==
binCodeNum
))
{
// 要入的料格找到了
if
(
StringUtils
.
isNotBlank
(
barcode
.
getPartNumber
()))
{
if
(
pn
.
equals
(
codePartNumber
))
{
isMatch
=
true
;
}
}
else
{
if
(
isOrderPutIn
)
{
}
else
{
isMatch
=
true
;
barcode
.
setPartNumber
(
codePartNumber
);
}
//判断此料箱有没有待执行的出入库任务
List
<
String
>
needInPn
=
new
ArrayList
<>();
for
(
Barcode
barcode
:
boxBarcode
.
getSubCodeList
())
{
String
inNum
=
barcode
.
getExtraData
(
"needInNum"
);
if
(
ObjectUtil
.
isEmpty
(
inNum
)
||
inNum
.
equals
(
"0"
))
{
continue
;
}
else
{
needInPn
.
add
(
barcode
.
getPartNumber
());
isOrderPutIn
=
true
;
}
break
;
}
}
// if (StringUtils.isEmpty(binPartNumber)) {
// binPartNumber = codePartNumber;
// } else {
// if (!binPartNumber.equals(codePartNumber)) {
// return ResultBean.newErrorResult(-1, "", codeStr + "与隔口:" + binCodeStr + "的料号不匹配");
// }
// }
if
(!
isMatch
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
codeStr
+
"的料号["
+
codePartNumber
+
"]与隔口:"
+
binCodeStr
+
"的料号["
+
binBarcode
.
getPartNumber
()+
"]不匹配"
);
if
(
needInPn
.
size
()
>
0
&&
(!
needInPn
.
contains
(
codeBarcode
.
getPartNumber
())))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
"有未完成的入库单任务,请先入入库单物料"
);
}
}
//判断是否已经完成了
boolean
finish
=
true
;
//判断当前入库的是否和入库单一样
if
(
isOrderPutIn
)
{
...
...
@@ -244,7 +207,7 @@ public class SpBoxPutInController {
for
(
SpareNoDetail
detail
:
detailList
)
{
//如果相同的话,判断数量是否大于需求数量
if
(
detail
.
getPartno
().
equals
(
code
PartNumber
))
{
if
(
detail
.
getPartno
().
equals
(
code
Barcode
.
getPartNumber
()
))
{
if
(
detail
.
getAlrInQty
()
+
codeBarcode
.
getQty
()
<=
detail
.
getInQty
())
{
spareNoDetail
=
detail
;
break
;
...
...
@@ -253,23 +216,22 @@ public class SpBoxPutInController {
}
if
(
spareNoDetail
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
codePartNumber
+
"没有入退库需求,请检查是否存在或者不符合入退库数量"
);
return
ResultBean
.
newErrorResult
(-
1
,
""
,
codeBarcode
.
getPartNumber
()
+
"没有入退库需求,请检查是否存在或者不符合入退库数量"
);
}
//数量加
spareNoDetail
.
setAlrInQty
(
spareNoDetail
.
getAlrInQty
()+
codeBarcode
.
getQty
());
spareNoDetail
.
setAlrInQty
(
spareNoDetail
.
getAlrInQty
()
+
codeBarcode
.
getQty
());
baseNo
.
updateDetailList
(
spareNoDetail
);
log
.
info
(
"开始判断是否完成入库单"
);
for
(
SpareNoDetail
noDetail
:
baseNo
.
getDetailList
())
{
if
(
noDetail
.
getInQty
()
>
noDetail
.
getAlrInQty
()){
if
(
noDetail
.
getInQty
()
>
noDetail
.
getAlrInQty
())
{
log
.
info
(
"入库未完成"
);
finish
=
false
;
break
;
}
log
.
info
(
"入料noDetail.getInQty()"
+
noDetail
.
getInQty
()+
"noDetail.getAlrInQty()"
+
noDetail
.
getAlrInQty
());
log
.
info
(
"入料noDetail.getInQty()"
+
noDetail
.
getInQty
()
+
"noDetail.getAlrInQty()"
+
noDetail
.
getAlrInQty
());
}
...
...
@@ -277,36 +239,35 @@ public class SpBoxPutInController {
//4.开始放入料箱
binBarcode
.
setPartNumber
(
codePartNumber
);
binBarcode
.
setAmount
(
binBarcode
.
getAmount
()+
codeBarcode
.
getQty
());
boxBarcode
.
updateSubCodes
(
binBarcode
);
// if (!finish) {
// return ResultBean.newOkResult("");
gekouBarcode
.
setPartNumber
(
codeBarcode
.
getPartNumber
());
gekouBarcode
.
setAmount
(
gekouBarcode
.
getAmount
()
+
codeBarcode
.
getQty
());
boxBarcode
.
updateSubCodes
(
gekouBarcode
);
// //5.寻找空库位
// StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
// if (pos == null){
// return ResultBean.newErrorResult(-1,"",boxStr+"未找到可用的库位");
// }
//5.寻找空库位
StoragePos
pos
=
SpBoxUtil
.
locOnePos
(
boxBarcode
);
if
(
pos
==
null
){
return
ResultBean
.
newErrorResult
(-
1
,
""
,
boxStr
+
"未找到可用的库位"
);
}
log
.
info
(
"reelToBox 入库成功 : boxStr="
+
boxStr
+
",codeStr="
+
rellCodeStr
+
",binCodeStr="
+
gekouCodeStr
+
",数量:"
+
codeBarcode
.
getQty
()+
",当前数量:"
+
gekouBarcode
.
getAmount
());
//6.生成入库任务
DataLog
dataLog
=
new
DataLog
();
dataLog
.
setBarcode
(
c
odeStr
);
dataLog
.
setBarcode
(
rellC
odeStr
);
dataLog
.
setPartNumber
(
codeBarcode
.
getPartNumber
());
dataLog
.
setOperator
(
SecurityUtils
.
getLoginUsername
());
dataLog
.
setStatus
(
OP_STATUS
.
FINISHED
.
name
());
dataLog
.
setPosName
(
binBarcode
.
getBarcode
());
dataLog
.
setPosName
(
gekouBarcode
.
getBarcode
());
dataLog
.
setNum
(
codeBarcode
.
getQty
());
dataLog
.
setType
(
OP
.
PUT_IN
);
pos
.
setBarcode
(
boxBarcode
);
pos
.
setUsed
(
true
);
if
(
finish
&&
isOrderPutIn
){
// pos.setBarcode(boxBarcode);
// pos.setUsed(true);
if
(
finish
&&
isOrderPutIn
)
{
// 调用入库接口
if
(
baseNo
.
getClass
().
equals
(
SpareNo
.
class
))
{
dataLog
.
setSourceId
(
baseNo
.
getId
());
dataLog
.
setSourceName
(((
SpareNo
)
baseNo
).
getSpareNo
());
List
<
SpareInHourseDetail
>
details
=
new
ArrayList
<>();
for
(
SpareNoDetail
detail
:
baseNo
.
getDetailList
())
{
SpareInHourseDetail
spareInHourseDetail
=
new
SpareInHourseDetail
();
...
...
@@ -318,25 +279,265 @@ public class SpBoxPutInController {
// spareInHourseDetail.setLocationCode(binBarcode.getBarcode());
details
.
add
(
spareInHourseDetail
);
}
LuxsanSpApi
.
spareInHourse
(
new
SpareInHourseRequest
(
baseNo
.
getDeptId
(),
baseNo
.
getNo
(),
baseNo
.
getWhCode
(),
details
));
LuxsanSpApi
.
spareInHourse
(
new
SpareInHourseRequest
(
baseNo
.
getDeptId
(),
baseNo
.
getNo
(),
baseNo
.
getWhCode
(),
details
));
}
}
if
(
isOrderPutIn
)
{
if
(
baseNo
.
getClass
().
equals
(
SpareNo
.
class
))
{
if
(
baseNo
.
getClass
().
equals
(
SpareNo
.
class
))
{
spareNoCache
.
addToMap
(
spareNo
);
spareNoManager
.
save
(
spareNo
);
}
else
{
}
else
{
returnNoCache
.
addToMap
(
returnInventoryNo
);
returnNoManager
.
save
(
returnInventoryNo
);
}
}
storagePosManager
.
save
(
pos
);
barcodeManager
.
save
(
binBarcode
);
barcodeManager
.
save
(
gekouBarcode
);
barcodeManager
.
save
(
boxBarcode
);
taskService
.
updateFinishedTask
(
dataLog
);
return
ResultBean
.
newOkResult
(
""
);
Map
<
String
,
String
>
res
=
new
HashMap
<>();
res
.
put
(
"PN"
,
codeBarcode
.
getPartNumber
());
res
.
put
(
"InPutNum"
,
codeBarcode
.
getQty
()+
""
);
res
.
put
(
"CurrNum"
,
gekouBarcode
.
getAmount
()+
""
);
res
.
put
(
"Code"
,
gekouBarcode
.
getBarcode
());
return
ResultBean
.
newOkResult
(
""
,
rellCodeStr
+
"入库成功"
,
res
);
}
// //以料格为维度,一个料格
// @ApiOperation("物料放入料格")
// @RequestMapping("/reelToBox")
// @AnonymousAccess
// public synchronized ResultBean reelToBox(@RequestBody Map<String, String> paramMap) {
//// SpareNo spareNo1 = spareNoCache.getExecutIngSpareNo();
//// ReturnInventoryNo returnInventoryNo1 = returnNoCache.getExecutingOrderNo();
//// if (ObjectUtil.isAllEmpty(spareNo1, returnInventoryNo1)) {
//// return ResultBean.newErrorResult(-1,"","没有找到正在执行的入库单或者退库单");
//// }
// String boxStr = paramMap.get("boxStr");
// String codeStr = paramMap.get("codeStr");
// String binCodeStr = paramMap.get("binCodeStr");
// log.info("reelToBox : boxStr="+boxStr+",codeStr="+codeStr+",binCodeStr="+binCodeStr);
//// boxStr = "C0700377A";
//// codeStr = "1950090020044V&&2";
//// binCodeStr = "C0700377-01";
//
// //解析料箱信息
// Barcode boxBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + boxStr);
// if (boxBarcode == null) {
// return ResultBean.newErrorResult(-1, "", boxStr + "不是有效的条码");
// }
//
// //解析料格信息
// Barcode binBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + binCodeStr);
// if (binBarcode == null) {
// return ResultBean.newErrorResult(-1, "", binCodeStr + "不是有效的条码");
// }
//
// //2.解析条码信息
// CodeBarcode codeBarcode = CodeUtil.getCodeBarcode(codeStr);
// if (codeBarcode == null) {
// return ResultBean.newErrorResult(-1, "", codeStr + "不是有效的条码");
// }
//
//
// // 判断物料是否在其他格口
// boolean isAlreadyInThisOrNever = barcodeManager.partNumberIsAlreadyInThisOrNever(binCodeStr, codeBarcode.getPartNumber());
// if (!isAlreadyInThisOrNever) {
// return ResultBean.newErrorResult(-1, "", codeBarcode.getPartNumber() + "已经存在其他料格");
// }
//
//
// if (boxBarcode.getPartNumber().equals(binBarcode.getPartNumber())) {
// binBarcode.setPartNumber(null);
// }
// if (ObjectUtil.isEmpty(binBarcode.getPartNumber())) {
// binBarcode.setPartNumber(codeBarcode.getPartNumber());
// }
//
// //1.判断料格信息与料箱信息是否匹配
// if (!binBarcode.getBarcode().startsWith(boxBarcode.getBarcode())) {
// return ResultBean.newErrorResult(-1, "", binCodeStr + "不是当前料箱:" + boxStr + "的隔口");
// }
// // 匹配是否存在该料格
// List<Barcode> subCodeList = boxBarcode.getSubCodeList();
// if (ObjectUtil.isNull(subCodeList)) {
// boxBarcode.setSubCodeList(new ArrayList<>());
// subCodeList = boxBarcode.getSubCodeList();
// subCodeList.add(binBarcode);
// }else {
// if (! (subCodeList.stream()
// .map(Barcode::getBarcode)
// .collect(Collectors.toList())
// .contains(binCodeStr))
// ) {
// subCodeList.add(binBarcode);
// }
// }
//
//
//
// //判断有没有正在执行入库单
// SpareNo spareNo = spareNoCache.getExecutIngSpareNo();
// ReturnInventoryNo returnInventoryNo = returnNoCache.getExecutingOrderNo();
// BaseNo baseNo = null;
// boolean isOrderPutIn = false;
// if (ObjectUtil.isAllEmpty(spareNo, returnInventoryNo)) {
//// return ResultBean.newErrorResult(-1,"","没有找到正在执行的入库单或者退库单");
// }else {
// baseNo = ObjectUtil.isEmpty(spareNo) ? returnInventoryNo : spareNo;
// isOrderPutIn = true;
// }
//
//
// //3.判断与当前隔口的料号是否匹配
//// String binPartNumber = binBarcode.getPartNumber();
//// if (binPartNumber.equals("CS") || binPartNumber.equals("CB") || binPartNumber.equals("CM")) {
//// binPartNumber = "";
//// }
//
// boolean isMatch = false;
// int binCodeNum = Integer.parseInt(binCodeStr.split("-")[1]);
// //判断格口数量
// int count = SpBoxUtil.GetBoxSubCount(boxBarcode.getBarcode());
// if(binCodeNum>count){
// return ResultBean.newErrorResult(-1, "", boxBarcode.getBarcode() + "最多格口数"+count+",请扫描正确的格口码");
// }
// String codePartNumber = codeBarcode.getPartNumber();
// for (Barcode barcode : boxBarcode.getSubCodeList()) {
// String pn = barcode.getPartNumber();
// int binNum = Integer.parseInt(barcode.getBarcode().split("-")[1]);
// if ((binNum == binCodeNum)) {
// // 要入的料格找到了
// if (StringUtils.isNotBlank(barcode.getPartNumber())) {
// if (pn.equals(codePartNumber)) {
// isMatch = true;
// }
// }else {
// if (isOrderPutIn) {
//
// }else {
// isMatch = true;
// barcode.setPartNumber(codePartNumber);
// }
// }
// break;
// }
// }
//// if (StringUtils.isEmpty(binPartNumber)) {
//// binPartNumber = codePartNumber;
//// } else {
//// if (!binPartNumber.equals(codePartNumber)) {
//// return ResultBean.newErrorResult(-1, "", codeStr + "与隔口:" + binCodeStr + "的料号不匹配");
//// }
//// }
// if (!isMatch) {
// return ResultBean.newErrorResult(-1, "", codeStr + "的料号["+codePartNumber+"]与隔口:" + binCodeStr + "的料号["+binBarcode.getPartNumber()+"]不匹配");
// }
//
//
// //判断是否已经完成了
// boolean finish = true;
// //判断当前入库的是否和入库单一样
// if (isOrderPutIn) {
// List<SpareNoDetail> detailList = baseNo.getDetailList();
//
// SpareNoDetail spareNoDetail = null;
//
// for (SpareNoDetail detail : detailList) {
// //如果相同的话,判断数量是否大于需求数量
// if (detail.getPartno().equals(codePartNumber)) {
// if (detail.getAlrInQty() + codeBarcode.getQty() <= detail.getInQty()) {
// spareNoDetail = detail;
// break;
// }
// }
// }
//
// if (spareNoDetail == null) {
// return ResultBean.newErrorResult(-1,"",codePartNumber+"没有入退库需求,请检查是否存在或者不符合入退库数量");
// }
//
//
//
// //数量加
// spareNoDetail.setAlrInQty(spareNoDetail.getAlrInQty()+ codeBarcode.getQty());
// baseNo.updateDetailList(spareNoDetail);
//
// log.info("开始判断是否完成入库单");
// for (SpareNoDetail noDetail : baseNo.getDetailList()) {
// if (noDetail.getInQty() > noDetail.getAlrInQty()){
// log.info("入库未完成");
// finish = false;
// break;
// }
// log.info("入料noDetail.getInQty()"+noDetail.getInQty()+"noDetail.getAlrInQty()"+noDetail.getAlrInQty());
// }
//
//
// }
//
//
// //4.开始放入料箱
// binBarcode.setPartNumber(codePartNumber);
// binBarcode.setAmount(binBarcode.getAmount()+codeBarcode.getQty());
//
//
// boxBarcode.updateSubCodes(binBarcode);
//
//
//// if (!finish) {
//// return ResultBean.newOkResult("");
//// }
// //5.寻找空库位
// StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
// if (pos == null){
// return ResultBean.newErrorResult(-1,"",boxStr+"未找到可用的库位");
// }
//
// //6.生成入库任务
// DataLog dataLog = new DataLog();
// dataLog.setBarcode(codeStr);
// dataLog.setPartNumber(codeBarcode.getPartNumber());
// dataLog.setOperator(SecurityUtils.getLoginUsername());
// dataLog.setStatus(OP_STATUS.FINISHED.name());
// dataLog.setPosName(binBarcode.getBarcode());
// dataLog.setType(OP.PUT_IN);
//
// pos.setBarcode(boxBarcode);
// pos.setUsed(true);
// if (finish && isOrderPutIn){
// // 调用入库接口
// if (baseNo.getClass().equals(SpareNo.class)) {
// List<SpareInHourseDetail> details = new ArrayList<>();
// for (SpareNoDetail detail : baseNo.getDetailList()) {
// SpareInHourseDetail spareInHourseDetail = new SpareInHourseDetail();
// spareInHourseDetail.setInQty(detail.getInQty());
// spareInHourseDetail.setPartno(detail.getPartno());
// String location = boxStr;
//// String location = SpareNostatus.LOCATION_CODE.get(baseNo.getWhCode());
// spareInHourseDetail.setLocationCode(location);
//// spareInHourseDetail.setLocationCode(binBarcode.getBarcode());
// details.add(spareInHourseDetail);
// }
// LuxsanSpApi.spareInHourse(new SpareInHourseRequest(baseNo.getDeptId(),baseNo.getNo(),baseNo.getWhCode(), details));
// }
// }
//
// if (isOrderPutIn) {
// if ( baseNo.getClass().equals(SpareNo.class)) {
// spareNoCache.addToMap(spareNo);
// spareNoManager.save(spareNo);
// }else {
// returnNoCache.addToMap(returnInventoryNo);
// returnNoManager.save(returnInventoryNo);
// }
// }
// storagePosManager.save(pos);
// barcodeManager.save(binBarcode);
// barcodeManager.save(boxBarcode);
// taskService.updateFinishedTask(dataLog);
//
// return ResultBean.newOkResult("");
// }
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论