Commit 2644b91b LN

手动出入库逻辑

1 个父辈 851f730f
...@@ -907,8 +907,9 @@ public class BarcodeRule { ...@@ -907,8 +907,9 @@ public class BarcodeRule {
//codeStr = "B0700001A"; codeStr = "B0700001A";
//rule = "RI[0:8:1]PN[0:3:6]"; codeStr = "CS0413A-1";
rule = "RI[-1:6:1]PN[0:2:5]";
//codeStr = "=7x8=131S00650-017131|20240422-0831|20000|L130171311724000EK|TAIYO|"; //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"; //rule = "PN[-1:50:-1]PROVIDERNUMBER[-1:50:-1]|BATCH[-1:50:-1]DATECODE[-1:50:-1]|QTY|RI|SP|6";
......
...@@ -31,5 +31,5 @@ public interface IBarcodeManager extends IBaseManager<Barcode> { ...@@ -31,5 +31,5 @@ public interface IBarcodeManager extends IBaseManager<Barcode> {
int countByQuery(Query query); int countByQuery(Query query);
boolean partNumberIsAlreadyInThisOrNever(String bin, String partNumber); String getPNCurrGeKou( String partNumber);
} }
...@@ -23,7 +23,6 @@ import org.springframework.stereotype.Service; ...@@ -23,7 +23,6 @@ import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -215,17 +214,18 @@ public class BarcodeManagerImpl implements IBarcodeManager { ...@@ -215,17 +214,18 @@ public class BarcodeManagerImpl implements IBarcodeManager {
} }
@Override @Override
public boolean partNumberIsAlreadyInThisOrNever(String bin, String partNumber) { public String getPNCurrGeKou( String partNumber) {
Query query = new Query(Criteria.where("subCodeList.partNumber").is(partNumber)); Query query = new Query(Criteria.where("subCodeList.partNumber").is(partNumber));
List<String> barcodes = new ArrayList<>(); List<String> barcodes = new ArrayList<>();
for (Barcode barcode : (List<Barcode>) barcodeDao.findByQuery(query)) { for (Barcode barcode : (List<Barcode>) barcodeDao.findByQuery(query)) {
barcodes.addAll(barcode.getSubCodeList().stream() barcodes.addAll(barcode.getSubCodeList().stream()
.filter(b -> b.getPartNumber().equals(partNumber))
.map(Barcode::getBarcode).collect(Collectors.toList())); .map(Barcode::getBarcode).collect(Collectors.toList()));
} }
for (String barcode : barcodes) { for (String barcode : barcodes) {
return barcode.equals(bin); return barcode;
} }
return true; return "";
} }
protected boolean validateComponent(Barcode barcode) { protected boolean validateComponent(Barcode barcode) {
......
...@@ -149,7 +149,9 @@ public class StoragePos extends BasePo implements Serializable { ...@@ -149,7 +149,9 @@ public class StoragePos extends BasePo implements Serializable {
*/ */
private String source; private String source;
/**
* 库别
*/
private String wareHouseCode; private String wareHouseCode;
public String getLabelStr(){ public String getLabelStr(){
......
...@@ -85,10 +85,13 @@ public class SpBoxCheckOutController { ...@@ -85,10 +85,13 @@ public class SpBoxCheckOutController {
@AnonymousAccess @AnonymousAccess
public synchronized ResultBean reelOutBox(@RequestBody Map<String, String> paramMap) { public synchronized ResultBean reelOutBox(@RequestBody Map<String, String> paramMap) {
String boxStr = paramMap.get("boxStr"); String boxStr = paramMap.get("boxStr").trim();
String codeStr = paramMap.get("codeStr"); String rellCodeStr = paramMap.get("codeStr").trim();
String binCodeStr = paramMap.get("binCodeStr"); 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); Barcode boxBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + boxStr);
...@@ -97,76 +100,116 @@ public class SpBoxCheckOutController { ...@@ -97,76 +100,116 @@ public class SpBoxCheckOutController {
} }
//解析料格信息 //解析料格信息
Barcode binBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + binCodeStr); Barcode gekouBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + gekouCodeStr);
if (binBarcode == null) { if (gekouBarcode == null) {
return ResultBean.newErrorResult(-1, "", binCodeStr + "不是有效的条码"); return ResultBean.newErrorResult(-1, "", gekouCodeStr + "不是有效的条码");
} }
//2.解析条码信息
CodeBarcode codeBarcode = CodeUtil.getCodeBarcode(rellCodeStr);
if (codeBarcode == null) {
return ResultBean.newErrorResult(-1, "", rellCodeStr + "不是有效的条码");
}
//1.判断料格信息与料箱信息是否匹配 //1.判断料格信息与料箱信息是否匹配
if (!binBarcode.getBarcode().startsWith(boxBarcode.getBarcode())) { if (!gekouBarcode.getBarcode().startsWith(boxBarcode.getBarcode())) {
return ResultBean.newErrorResult(-1, "", binCodeStr + "不是当前料箱:" + boxStr + "的隔口"); return ResultBean.newErrorResult(-1, "", gekouCodeStr + "不是当前料箱:" + boxStr + "的格口");
} }
//2.解析条码信息
CodeBarcode codeBarcode = CodeUtil.getCodeBarcode(codeStr); int binCodeNum = Integer.parseInt(gekouCodeStr.split("-")[1]);
if (codeBarcode == null) { //判断格口数量是否超出
return ResultBean.newErrorResult(-1, "", codeStr + "不是有效的条码"); 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 liteOrder = null;
LiteOrder newLiteOrder = null;
if (isOrderCheckout) { if (isOrderCheckout) {
liteOrder = liteOrderManager.get(orderId); liteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo());
newLiteOrder = liteOrderCache.getLiteOrder(liteOrder.getOrderNo()); if (liteOrder == null) {
if (newLiteOrder == null){ liteOrder = liteOrderManager.get(gekouBarcode.getOrderId());
newLiteOrder = liteOrderManager.findByOrderNo(liteOrder.getOrderNo()); }
if (liteOrder == null || liteOrder.isClosed()) {
return ResultBean.newErrorResult(-1, "", boxBarcode.getBarcode() + "工单" + liteOrder.getOrderNo() + "已关闭,无法再出库");
} }
//4.判断当前需不需要出库 //4.判断当前需不需要出库
String itemId = binBarcode.getOrderItemId(); String itemId = gekouBarcode.getOrderItemId();
if (StringUtils.isEmpty(itemId)){ if (StringUtils.isEmpty(itemId)) {
return ResultBean.newErrorResult(-1,"",codeStr+"没有要出库的任务"); return ResultBean.newErrorResult(-1, "", boxStr + "没有要出库的任务");
} }
//判断所属的工单任务是否完成 //判断所属的工单任务是否完成
String result = handleOrderNo(newLiteOrder, itemId, codeBarcode.getQty()); String result = handleOrderNo(liteOrder, itemId, codeBarcode.getQty());
if (StringUtils.isNotEmpty(result)){ if (StringUtils.isNotEmpty(result)) {
return ResultBean.newErrorResult(-1,"",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.开始拿出料箱 //4.开始拿出料箱
binBarcode.setAmount(binBarcode.getAmount()-codeBarcode.getQty()); gekouBarcode.setAmount(gekouBarcode.getAmount() - codeBarcode.getQty());
boxBarcode.updateSubCodes(binBarcode); if (gekouBarcode.getAmount() <= 0) {
gekouBarcode.setAmount(0);
}
boxBarcode.updateSubCodes(gekouBarcode);
//5.寻找空库位 // //5.寻找空库位
StoragePos pos = SpBoxUtil.locOnePos(boxBarcode); // StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
if (pos == null){ // if (pos == null){
return ResultBean.newErrorResult(-1,"",boxStr+"未找到可用的库位"); // return ResultBean.newErrorResult(-1,"",boxStr+"未找到可用的库位");
} // }
log.info("reelOutBox : boxStr=" + boxStr + ",codeStr=" + rellCodeStr + ",binCodeStr=" + gekouCodeStr + "出库完成,数量" + codeBarcode.getQty() + ",剩余数量:" + gekouBarcode.getAmount());
//6.生成出库任务 //6.生成出库任务
DataLog dataLog = new DataLog(); DataLog dataLog = new DataLog();
dataLog.setBarcode(codeStr); dataLog.setBarcode(rellCodeStr);
dataLog.setPartNumber(codeBarcode.getPartNumber()); dataLog.setPartNumber(codeBarcode.getPartNumber());
dataLog.setOperator(SecurityUtils.getLoginUsername()); dataLog.setOperator(SecurityUtils.getLoginUsername());
dataLog.setStatus(OP_STATUS.FINISHED.name()); dataLog.setStatus(OP_STATUS.FINISHED.name());
dataLog.setPosName(binBarcode.getBarcode()); dataLog.setPosName(gekouBarcode.getBarcode());
dataLog.setNum(codeBarcode.getQty());
dataLog.setType(OP.CHECKOUT); dataLog.setType(OP.CHECKOUT);
if (liteOrder != null) {
dataLog.setSourceId(liteOrder.getId());
dataLog.setSourceName(liteOrder.getOrderNo());
}
taskService.updateFinishedTask(dataLog); taskService.updateFinishedTask(dataLog);
pos.setBarcode(boxBarcode); // pos.setBarcode(boxBarcode);
pos.setUsed(true); // pos.setUsed(true);
storagePosManager.save(pos); // storagePosManager.save(pos);
barcodeManager.save(gekouBarcode);
barcodeManager.save(boxBarcode); 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 { ...@@ -218,4 +261,95 @@ public class SpBoxCheckOutController {
liteOrderCache.addOrderToMap(liteOrder); liteOrderCache.addOrderToMap(liteOrder);
liteOrderManager.save(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("");
// }
} }
...@@ -112,15 +112,10 @@ public class SpBoxPutInController { ...@@ -112,15 +112,10 @@ public class SpBoxPutInController {
@RequestMapping("/reelToBox") @RequestMapping("/reelToBox")
@AnonymousAccess @AnonymousAccess
public synchronized ResultBean reelToBox(@RequestBody Map<String, String> paramMap) { public synchronized ResultBean reelToBox(@RequestBody Map<String, String> paramMap) {
// SpareNo spareNo1 = spareNoCache.getExecutIngSpareNo(); String boxStr = paramMap.get("boxStr").trim();
// ReturnInventoryNo returnInventoryNo1 = returnNoCache.getExecutingOrderNo(); String rellCodeStr = paramMap.get("codeStr").trim();
// if (ObjectUtil.isAllEmpty(spareNo1, returnInventoryNo1)) { String gekouCodeStr = paramMap.get("binCodeStr").trim();
// return ResultBean.newErrorResult(-1,"","没有找到正在执行的入库单或者退库单"); log.info("reelToBox : boxStr=" + boxStr + ",codeStr=" + rellCodeStr + ",binCodeStr=" + gekouCodeStr);
// }
String boxStr = paramMap.get("boxStr");
String codeStr = paramMap.get("codeStr");
String binCodeStr = paramMap.get("binCodeStr");
// boxStr = "C0700377A"; // boxStr = "C0700377A";
// codeStr = "1950090020044V&&2"; // codeStr = "1950090020044V&&2";
// binCodeStr = "C0700377-01"; // binCodeStr = "C0700377-01";
...@@ -132,53 +127,48 @@ public class SpBoxPutInController { ...@@ -132,53 +127,48 @@ public class SpBoxPutInController {
} }
//解析料格信息 //解析料格信息
Barcode binBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + binCodeStr); Barcode gekouBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + gekouCodeStr);
if (binBarcode == null) { if (gekouBarcode == null) {
return ResultBean.newErrorResult(-1, "", binCodeStr + "不是有效的条码"); return ResultBean.newErrorResult(-1, "", gekouCodeStr + "不是有效的条码");
} }
//2.解析条码信息 //2.解析条码信息
CodeBarcode codeBarcode = CodeUtil.getCodeBarcode(codeStr); CodeBarcode codeBarcode = CodeUtil.getCodeBarcode(rellCodeStr);
if (codeBarcode == null) { if (codeBarcode == null) {
return ResultBean.newErrorResult(-1, "", codeStr + "不是有效的条码"); return ResultBean.newErrorResult(-1, "", rellCodeStr + "不是有效的条码");
} }
//1.判断料格信息与料箱信息是否匹配
if (!gekouBarcode.getBarcode().startsWith(boxBarcode.getBarcode())) {
// 判断物料是否在其他格口 return ResultBean.newErrorResult(-1, "", gekouCodeStr + "不是当前料箱:" + boxStr + "的格口");
boolean isAlreadyInThisOrNever = barcodeManager.partNumberIsAlreadyInThisOrNever(binCodeStr, codeBarcode.getPartNumber());
if (!isAlreadyInThisOrNever) {
return ResultBean.newErrorResult(-1, "", codeBarcode.getPartNumber() + "已经存在其他料格");
} }
if (boxBarcode.getPartNumber().equals(binBarcode.getPartNumber())) { int binCodeNum = Integer.parseInt(gekouCodeStr.split("-")[1]);
binBarcode.setPartNumber(null); //判断格口数量是否超出
} int count = SpBoxUtil.GetBoxSubCount(boxBarcode.getBarcode());
if (ObjectUtil.isEmpty(binBarcode.getPartNumber())) { if (binCodeNum > count) {
binBarcode.setPartNumber(codeBarcode.getPartNumber()); return ResultBean.newErrorResult(-1, "", boxBarcode.getBarcode() + "最多格口数" + count + ",请扫描正确的格口码");
} }
//此格口为空
if (ObjectUtil.isEmpty(gekouBarcode.getPartNumber()) || gekouBarcode.getPartNumber().equals(boxBarcode.getPartNumber())) {
//1.判断料格信息与料箱信息是否匹配 // 判断物料是否在其他格口
if (!binBarcode.getBarcode().startsWith(boxBarcode.getBarcode())) { String currP= barcodeManager.getPNCurrGeKou( codeBarcode.getPartNumber());
return ResultBean.newErrorResult(-1, "", binCodeStr + "不是当前料箱:" + boxStr + "的隔口"); if (ObjectUtil.isNotEmpty(currP)&&(!currP.equals(gekouCodeStr))) {
} return ResultBean.newErrorResult(-1, "", codeBarcode.getPartNumber() + "已在"+currP+"中");
// 匹配是否存在该料格
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);
} }
}
//是新格口物料
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(); SpareNo spareNo = spareNoCache.getExecutIngSpareNo();
...@@ -187,54 +177,27 @@ public class SpBoxPutInController { ...@@ -187,54 +177,27 @@ public class SpBoxPutInController {
boolean isOrderPutIn = false; boolean isOrderPutIn = false;
if (ObjectUtil.isAllEmpty(spareNo, returnInventoryNo)) { if (ObjectUtil.isAllEmpty(spareNo, returnInventoryNo)) {
// return ResultBean.newErrorResult(-1,"","没有找到正在执行的入库单或者退库单"); // return ResultBean.newErrorResult(-1,"","没有找到正在执行的入库单或者退库单");
}else { } else {
baseNo = ObjectUtil.isEmpty(spareNo) ? returnInventoryNo : spareNo; 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]); List<String> needInPn = new ArrayList<>();
String codePartNumber = codeBarcode.getPartNumber(); for (Barcode barcode :
for (Barcode barcode : boxBarcode.getSubCodeList()) { boxBarcode.getSubCodeList()) {
String pn = barcode.getPartNumber(); String inNum = barcode.getExtraData("needInNum");
int binNum = Integer.parseInt(barcode.getBarcode().split("-")[1]); if (ObjectUtil.isEmpty(inNum) || inNum.equals("0")) {
if ((binNum == binCodeNum)) { continue;
// 要入的料格找到了 } else {
if (StringUtils.isNotBlank(barcode.getPartNumber())) { needInPn.add(barcode.getPartNumber());
if (pn.equals(codePartNumber)) { isOrderPutIn = true;
isMatch = true;
}
}else {
if (isOrderPutIn) {
}else {
isMatch = true;
barcode.setPartNumber(codePartNumber);
}
} }
break;
} }
} if (needInPn.size() > 0 && (!needInPn.contains(codeBarcode.getPartNumber()))) {
// if (StringUtils.isEmpty(binPartNumber)) { return ResultBean.newErrorResult(-1, "", "有未完成的入库单任务,请先入入库单物料");
// 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; boolean finish = true;
//判断当前入库的是否和入库单一样 //判断当前入库的是否和入库单一样
if (isOrderPutIn) { if (isOrderPutIn) {
...@@ -244,7 +207,7 @@ public class SpBoxPutInController { ...@@ -244,7 +207,7 @@ public class SpBoxPutInController {
for (SpareNoDetail detail : detailList) { for (SpareNoDetail detail : detailList) {
//如果相同的话,判断数量是否大于需求数量 //如果相同的话,判断数量是否大于需求数量
if (detail.getPartno().equals(codePartNumber)) { if (detail.getPartno().equals(codeBarcode.getPartNumber())) {
if (detail.getAlrInQty() + codeBarcode.getQty() <= detail.getInQty()) { if (detail.getAlrInQty() + codeBarcode.getQty() <= detail.getInQty()) {
spareNoDetail = detail; spareNoDetail = detail;
break; break;
...@@ -253,23 +216,22 @@ public class SpBoxPutInController { ...@@ -253,23 +216,22 @@ public class SpBoxPutInController {
} }
if (spareNoDetail == null) { 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); baseNo.updateDetailList(spareNoDetail);
log.info("开始判断是否完成入库单"); log.info("开始判断是否完成入库单");
for (SpareNoDetail noDetail : baseNo.getDetailList()) { for (SpareNoDetail noDetail : baseNo.getDetailList()) {
if (noDetail.getInQty() > noDetail.getAlrInQty()){ if (noDetail.getInQty() > noDetail.getAlrInQty()) {
log.info("入库未完成"); log.info("入库未完成");
finish = false; finish = false;
break; 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 { ...@@ -277,36 +239,35 @@ public class SpBoxPutInController {
//4.开始放入料箱 //4.开始放入料箱
binBarcode.setPartNumber(codePartNumber); gekouBarcode.setPartNumber(codeBarcode.getPartNumber());
binBarcode.setAmount(binBarcode.getAmount()+codeBarcode.getQty()); gekouBarcode.setAmount(gekouBarcode.getAmount() + codeBarcode.getQty());
boxBarcode.updateSubCodes(gekouBarcode);
boxBarcode.updateSubCodes(binBarcode); // //5.寻找空库位
// StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
// if (pos == null){
// if (!finish) { // return ResultBean.newErrorResult(-1,"",boxStr+"未找到可用的库位");
// return ResultBean.newOkResult("");
// } // }
//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.生成入库任务 //6.生成入库任务
DataLog dataLog = new DataLog(); DataLog dataLog = new DataLog();
dataLog.setBarcode(codeStr); dataLog.setBarcode(rellCodeStr);
dataLog.setPartNumber(codeBarcode.getPartNumber()); dataLog.setPartNumber(codeBarcode.getPartNumber());
dataLog.setOperator(SecurityUtils.getLoginUsername()); dataLog.setOperator(SecurityUtils.getLoginUsername());
dataLog.setStatus(OP_STATUS.FINISHED.name()); dataLog.setStatus(OP_STATUS.FINISHED.name());
dataLog.setPosName(binBarcode.getBarcode()); dataLog.setPosName(gekouBarcode.getBarcode());
dataLog.setNum(codeBarcode.getQty());
dataLog.setType(OP.PUT_IN); dataLog.setType(OP.PUT_IN);
pos.setBarcode(boxBarcode);
pos.setUsed(true); // pos.setBarcode(boxBarcode);
if (finish && isOrderPutIn){ // pos.setUsed(true);
if (finish && isOrderPutIn) {
// 调用入库接口 // 调用入库接口
if (baseNo.getClass().equals(SpareNo.class)) { if (baseNo.getClass().equals(SpareNo.class)) {
dataLog.setSourceId(baseNo.getId());
dataLog.setSourceName(((SpareNo) baseNo).getSpareNo());
List<SpareInHourseDetail> details = new ArrayList<>(); List<SpareInHourseDetail> details = new ArrayList<>();
for (SpareNoDetail detail : baseNo.getDetailList()) { for (SpareNoDetail detail : baseNo.getDetailList()) {
SpareInHourseDetail spareInHourseDetail = new SpareInHourseDetail(); SpareInHourseDetail spareInHourseDetail = new SpareInHourseDetail();
...@@ -318,25 +279,265 @@ public class SpBoxPutInController { ...@@ -318,25 +279,265 @@ public class SpBoxPutInController {
// spareInHourseDetail.setLocationCode(binBarcode.getBarcode()); // spareInHourseDetail.setLocationCode(binBarcode.getBarcode());
details.add(spareInHourseDetail); 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 (isOrderPutIn) {
if ( baseNo.getClass().equals(SpareNo.class)) { if (baseNo.getClass().equals(SpareNo.class)) {
spareNoCache.addToMap(spareNo); spareNoCache.addToMap(spareNo);
spareNoManager.save(spareNo); spareNoManager.save(spareNo);
}else { } else {
returnNoCache.addToMap(returnInventoryNo); returnNoCache.addToMap(returnInventoryNo);
returnNoManager.save(returnInventoryNo); returnNoManager.save(returnInventoryNo);
} }
} }
storagePosManager.save(pos); barcodeManager.save(gekouBarcode);
barcodeManager.save(binBarcode);
barcodeManager.save(boxBarcode); barcodeManager.save(boxBarcode);
taskService.updateFinishedTask(dataLog); 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!