Commit 2644b91b LN

手动出入库逻辑

1 个父辈 851f730f
......@@ -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";
......
......@@ -31,5 +31,5 @@ public interface IBarcodeManager extends IBaseManager<Barcode> {
int countByQuery(Query query);
boolean partNumberIsAlreadyInThisOrNever(String bin, String partNumber);
String getPNCurrGeKou( String partNumber);
}
......@@ -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) {
......
......@@ -149,7 +149,9 @@ public class StoragePos extends BasePo implements Serializable {
*/
private String source;
/**
* 库别
*/
private String wareHouseCode;
public String getLabelStr(){
......
......@@ -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=" + binCodeStr);
if (binBarcode == null) {
return ResultBean.newErrorResult(-1, "", binCodeStr + "不是有效的条码");
Barcode gekouBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + gekouCodeStr);
if (gekouBarcode == null) {
return ResultBean.newErrorResult(-1, "", gekouCodeStr + "不是有效的条码");
}
//2.解析条码信息
CodeBarcode codeBarcode = CodeUtil.getCodeBarcode(rellCodeStr);
if (codeBarcode == null) {
return ResultBean.newErrorResult(-1, "", rellCodeStr + "不是有效的条码");
}
//1.判断料格信息与料箱信息是否匹配
if (!binBarcode.getBarcode().startsWith(boxBarcode.getBarcode())) {
return ResultBean.newErrorResult(-1, "", binCodeStr + "不是当前料箱:" + boxStr + "的隔口");
if (!gekouBarcode.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 = binBarcode.getOrderItemId();
if (StringUtils.isEmpty(itemId)){
return ResultBean.newErrorResult(-1,"",codeStr+"没有要出库的任务");
String itemId = gekouBarcode.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(codeStr);
dataLog.setBarcode(rellCodeStr);
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("");
// }
}
......@@ -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=" + binCodeStr);
if (binBarcode == null) {
return ResultBean.newErrorResult(-1, "", binCodeStr + "不是有效的条码");
Barcode gekouBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + gekouCodeStr);
if (gekouBarcode == null) {
return ResultBean.newErrorResult(-1, "", gekouCodeStr + "不是有效的条码");
}
//2.解析条码信息
CodeBarcode codeBarcode = CodeUtil.getCodeBarcode(codeStr);
CodeBarcode codeBarcode = CodeUtil.getCodeBarcode(rellCodeStr);
if (codeBarcode == null) {
return ResultBean.newErrorResult(-1, "", codeStr + "不是有效的条码");
return ResultBean.newErrorResult(-1, "", rellCodeStr + "不是有效的条码");
}
// 判断物料是否在其他格口
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 + "的格口");
}
if (boxBarcode.getPartNumber().equals(binBarcode.getPartNumber())) {
binBarcode.setPartNumber(null);
}
if (ObjectUtil.isEmpty(binBarcode.getPartNumber())) {
binBarcode.setPartNumber(codeBarcode.getPartNumber());
int 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(codePartNumber)) {
if (detail.getPartno().equals(codeBarcode.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(codeStr);
dataLog.setBarcode(rellCodeStr);
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!