Compare commits

..

2 Commits

Author SHA1 Message Date
曹鹏飞 adf80b96e6 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalQMController.java
2026-04-01 09:47:52 +08:00
曹鹏飞 2a5a58b163 feat(wms): 添加退货申请和生产订单副产品管理功能
- 新增 ApplyReturnRequestItemVO 和 ApplyReturnRequestVO 数据传输对象
- 添加 InProduceOrderSurplusController 实现生产订单副产品管理功能
- 添加 NormalPGIController 实现普通物料收货单管理功能
- 实现出库入库、扫码记录、订单详情等核心业务逻辑
- 集成 SAP 接口实现数据同步和处理
- 实现 PDF 导出和条码生成功能
2026-04-01 09:44:51 +08:00
8 changed files with 133 additions and 107 deletions

View File

@ -487,7 +487,7 @@ public class InProduceOrderSurplusController extends BaseController {
List<WmsInProduceOrderSurplusItem> list = inProduceOrderSurplusItemService.getList(id); List<WmsInProduceOrderSurplusItem> list = inProduceOrderSurplusItemService.getList(id);
list.forEach(it -> it.setNum(null)); list.forEach(it -> it.setNum(null));
Map<String, String> base = new HashMap<>(); Map<String, String> base = new HashMap<>();
base.put("title", "副产品退料单"); base.put("title", "返修退料单");
base.put("date", DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd")); base.put("date", DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd"));
base.put("qrcode", QRCodeUtil.generateQRCodeBase64(order.getNo(), 100, 100)); base.put("qrcode", QRCodeUtil.generateQRCodeBase64(order.getNo(), 100, 100));
Map<String, Object> variables = new HashMap<>(); Map<String, Object> variables = new HashMap<>();
@ -495,7 +495,7 @@ public class InProduceOrderSurplusController extends BaseController {
variables.put("base", base); variables.put("base", base);
variables.put("pages", PdfPageDTO.create(list, 17, new WmsInProduceOrderSurplusItem())); variables.put("pages", PdfPageDTO.create(list, 17, new WmsInProduceOrderSurplusItem()));
String html = ThymeleafUtil.generator("/template/", "生产退料单", ".html", variables); String html = ThymeleafUtil.generator("/template/", "生产退料单", ".html", variables);
PdfGeneratorUtil.generatePdf("副产品退料单" + order.getNo(), html, response); PdfGeneratorUtil.generatePdf("返修退料单" + order.getNo(), html, response);
} }
/** /**

View File

@ -1160,7 +1160,7 @@ public class NormalPGIController extends BaseController {
VUtil.trueThrowBusinessError(!wmsPoReceipt.getSourceType().equals(1)).throwMessage("不属于无码收货的采购单"); VUtil.trueThrowBusinessError(!wmsPoReceipt.getSourceType().equals(1)).throwMessage("不属于无码收货的采购单");
//首先判断是否已经确认 //首先判断是否已经确认
VUtil.trueThrowBusinessError(Objects.isNull(wmsPoReceipt)).throwMessage("收货单不存在"); // VUtil.trueThrowBusinessError(Objects.isNull(wmsPoReceipt)).throwMessage("收货单不存在");
VUtil.trueThrowBusinessError(Objects.equals(wmsPoReceipt.getIsCompleted(), true)).throwMessage("此任务已入库"); VUtil.trueThrowBusinessError(Objects.equals(wmsPoReceipt.getIsCompleted(), true)).throwMessage("此任务已入库");
@ -1207,6 +1207,8 @@ public class NormalPGIController extends BaseController {
if (CollectionUtil.isNotEmpty(scanCode)) { if (CollectionUtil.isNotEmpty(scanCode)) {
scanCode.forEach(code -> { scanCode.forEach(code -> {
WmsQrCodeMaster qrCodeMaster = wmsQrCodeMasterService.getByCode(code.getCodeId());
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("条码不存在:" + code.getCodeId());
// 库存 // 库存
InventoryInDTO inventoryDTO = inventories.stream() InventoryInDTO inventoryDTO = inventories.stream()
.filter(inventoriesDTO -> inventoriesDTO.getMaterialNo().equals(item.getItemCode()) .filter(inventoriesDTO -> inventoriesDTO.getMaterialNo().equals(item.getItemCode())
@ -1214,6 +1216,7 @@ public class NormalPGIController extends BaseController {
&& inventoriesDTO.getSerialNo().equals(Objects.isNull(code.getSerialNumbers()) ? "" : code.getSerialNumbers()) && inventoriesDTO.getSerialNo().equals(Objects.isNull(code.getSerialNumbers()) ? "" : code.getSerialNumbers())
&& inventoriesDTO.getFactoryNo().equals(wmsPoReceipt.getFactoryCode()) && inventoriesDTO.getFactoryNo().equals(wmsPoReceipt.getFactoryCode())
&& inventoriesDTO.getWarehouseNo().equals(item.getReceivedWarehouse()) && inventoriesDTO.getWarehouseNo().equals(item.getReceivedWarehouse())
&& StrUtil.equals(inventoriesDTO.getBinLocation(), qrCodeMaster.getBinLocation())
).findFirst().orElse(null); ).findFirst().orElse(null);
if (Objects.isNull(inventoryDTO)) { if (Objects.isNull(inventoryDTO)) {
@ -1221,6 +1224,7 @@ public class NormalPGIController extends BaseController {
.setMaterialNo(item.getItemCode()) .setMaterialNo(item.getItemCode())
.setFactoryNo(wmsPoReceipt.getFactoryCode()) .setFactoryNo(wmsPoReceipt.getFactoryCode())
.setWarehouseNo(item.getReceivedWarehouse()) .setWarehouseNo(item.getReceivedWarehouse())
.setBinLocation(qrCodeMaster.getBinLocation())
.setBatchNo(Objects.isNull(code.getBatchNumber()) ? "" : code.getBatchNumber()) .setBatchNo(Objects.isNull(code.getBatchNumber()) ? "" : code.getBatchNumber())
.setSerialNo(Objects.isNull(code.getSerialNumbers()) ? "" : code.getSerialNumbers()) .setSerialNo(Objects.isNull(code.getSerialNumbers()) ? "" : code.getSerialNumbers())
.setNum(code.getCodeNum()); .setNum(code.getCodeNum());
@ -1265,6 +1269,7 @@ public class NormalPGIController extends BaseController {
.setMaterialNo(item.getItemCode()) .setMaterialNo(item.getItemCode())
.setFactoryNo(wmsPoReceipt.getFactoryCode()) .setFactoryNo(wmsPoReceipt.getFactoryCode())
.setWarehouseNo(item.getReceivedWarehouse()) .setWarehouseNo(item.getReceivedWarehouse())
.setBinLocation("")
.setBatchNo("") .setBatchNo("")
.setSerialNo("") .setSerialNo("")
.setNum(item.getInQty()); .setNum(item.getInQty());

View File

@ -42,6 +42,7 @@ import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -144,6 +145,77 @@ public class NormalQMController extends BaseController {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request)).throwMessage("不存在待入库的物料(或此物料已入库)"); VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request)).throwMessage("不存在待入库的物料(或此物料已入库)");
List<String> qrCodes = CollectionUtil.unionAll(
request.stream()
.filter(Objects::nonNull)
.map(QCReceiveTaskConfirmQO::getReceiveItems)
.flatMap(List::stream)
.filter(Objects::nonNull)
.map(InCostCenterBackSubmitItemQRQO::getQrCode)
.toList()
, request.stream()
.filter(Objects::nonNull)
.map(QCReceiveTaskConfirmQO::getRejectItems)
.flatMap(List::stream)
.filter(Objects::nonNull)
.map(InCostCenterBackSubmitItemQRQO::getQrCode)
.toList()
);
List<WmsQrCodeMaster> qrCodeMasters = qrCodeMasterService.getChildrenWithParent(qrCodes);
request.forEach(rit -> {
if (CollectionUtil.isNotEmpty(rit.getReceiveItems())) {
rit.getReceiveItems().forEach(item -> {
WmsQrCodeMaster p = qrCodeMasters.stream()
.filter(q -> q.getBarcodeCode().equals(item.getQrCode()))
.findFirst()
.get();
p.setProcessStage(BarCodeProcessStage.InBound.getState());
p.setFactoryCode(rit.getFactoryCode());
p.setStorageLocation(rit.getReceivedWarehouse());
p.setBinLocation(item.getBinNo());
p.setLastScanBy(UserUtil.getUserId());
p.setLastScanByname(UserUtil.getUserName());
p.setLastScanTime(LocalDateTime.now());
qrCodeMasters.stream()
.filter(q -> q.getParentBarcodeId().equals(p.getId()))
.forEach(c -> {
c.setProcessStage(p.getProcessStage());
c.setLastScanBy(UserUtil.getUserId());
c.setLastScanByname(UserUtil.getUserName());
c.setLastScanTime(LocalDateTime.now());
c.setFactoryCode(p.getFactoryCode());
c.setStorageLocation(p.getStorageLocation());
c.setBinLocation(p.getBinLocation());
// c.setReceiptItemId(p.getReceiptItemId());
});
});
}
if (CollectionUtil.isNotEmpty(rit.getRejectItems())) {
rit.getRejectItems().forEach(item -> {
WmsQrCodeMaster p = qrCodeMasters.stream()
.filter(q -> q.getBarcodeCode().equals(item.getQrCode()))
.findFirst()
.get();
p.setProcessStage(BarCodeProcessStage.Reject.getState());
p.setBinLocation(item.getBinNo());
p.setLastScanBy(UserUtil.getUserId());
p.setLastScanByname(UserUtil.getUserName());
p.setLastScanTime(LocalDateTime.now());
qrCodeMasters.stream()
.filter(q -> q.getParentBarcodeId().equals(p.getId()))
.forEach(c -> {
c.setProcessStage(p.getProcessStage());
c.setLastScanBy(UserUtil.getUserId());
c.setLastScanByname(UserUtil.getUserName());
c.setLastScanTime(LocalDateTime.now());
c.setFactoryCode(p.getFactoryCode());
c.setStorageLocation(p.getStorageLocation());
c.setBinLocation(p.getBinLocation());
// c.setReceiptItemId(p.getReceiptItemId());
});
});
}
});
//首先根据采购单的编号进行分类 //首先根据采购单的编号进行分类
List<String> poNums = request.stream() List<String> poNums = request.stream()
.map(QCReceiveTaskConfirmQO::getPoNum) // 提取每个对象的 ID .map(QCReceiveTaskConfirmQO::getPoNum) // 提取每个对象的 ID
@ -258,109 +330,36 @@ public class NormalQMController extends BaseController {
.setEbelp(Integer.valueOf(code.getPoLineNumber())) .setEbelp(Integer.valueOf(code.getPoLineNumber()))
.setMenge(code.getRejectQty()) .setMenge(code.getRejectQty())
.setMatDoc(code.getReceiveNum()) .setMatDoc(code.getReceiveNum())
.setDocYear(DateTimeUtil.format(LocalDate.now(),"yyyy")) .setDocYear(DateTimeUtil.format(LocalDate.now(), "yyyy"))
); );
} }
if (code.getReceiveQty().compareTo(BigDecimal.ZERO) > 0) { if (code.getReceiveQty().compareTo(BigDecimal.ZERO) > 0) {
// 合格品数量大于0时的处理逻辑 // 合格品数量大于0时的处理逻辑
InventoryInDTO inventoryDTO = qcReceiveDTO.getQualifiednventories() List<WmsQrCodeMaster> itemQrCodeMasters = qrCodeMasters.stream()
.stream() .filter(qr -> Objects.equals(qr.getProcessStage(), BarCodeProcessStage.InBound.getState())
.filter(inventoryDTO1 -> && qr.getMaterialCode().equals(code.getItemCode())
inventoryDTO1.getMaterialNo().equals(code.getItemCode()) )
&& inventoryDTO1.getWarehouseNo().equals(item.getReceivedWarehouse()) .toList();
&& inventoryDTO1.getBatchNo().equals(code.getMaterialBatch()) Map<String, List<WmsQrCodeMaster>> qrCodeMastersMap = itemQrCodeMasters.stream()
&& inventoryDTO1.getSerialNo().equals(code.getSerialNum()) .collect(Collectors.groupingBy(WmsQrCodeMaster::getKey1));
&& inventoryDTO1.getFactoryNo().equals(code.getFactory())) qrCodeMastersMap.values().forEach(vqrs -> {
.findFirst() WmsQrCodeMaster qf = vqrs.get(0);
.orElse(null);
if (Objects.isNull(inventoryDTO)) {
qcReceiveDTO.getQualifiednventories().add(new InventoryInDTO() qcReceiveDTO.getQualifiednventories().add(new InventoryInDTO()
.setMaterialNo(code.getItemCode()) .setMaterialNo(qf.getMaterialCode())
.setFactoryNo(code.getFactory()) .setFactoryNo(qf.getFactoryCode())
.setWarehouseNo(item.getReceivedWarehouse()) // 不合格仓固定 .setWarehouseNo(qf.getStorageLocation()) // 不合格仓固定
.setNum(code.getReceiveQty()) .setBinLocation(qf.getBinLocation())
.setBatchNo(code.getMaterialBatch()) .setBatchNo(qf.getBatchNo())
.setSerialNo(code.getSerialNum()) .setSerialNo(qf.getSerialNo())
.setNum(vqrs.stream().map(WmsQrCodeMaster::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add))
); );
} else { });
inventoryDTO.setNum(inventoryDTO.getNum().add(code.getReceiveQty()));
}
} }
} }
} }
} }
qcReceiveDTOS.add(qcReceiveDTO); qcReceiveDTOS.add(qcReceiveDTO);
} }
List<String> qrCodes = CollectionUtil.unionAll(
request.stream()
.map(QCReceiveTaskConfirmQO::getReceiveItems)
.filter(Objects::nonNull)
.flatMap(List::stream)
.map(InCostCenterBackSubmitItemQRQO::getQrCode)
.filter(Objects::nonNull)
.toList()
, request.stream()
.map(QCReceiveTaskConfirmQO::getRejectItems)
.filter(Objects::nonNull)
.flatMap(List::stream)
.map(InCostCenterBackSubmitItemQRQO::getQrCode)
.filter(Objects::nonNull)
.toList()
);
List<WmsQrCodeMaster> qrCodeMasters = qrCodeMasterService.getChildrenWithParent(qrCodes);
request.forEach(rit -> {
if (CollectionUtil.isNotEmpty(rit.getReceiveItems())) {
rit.getReceiveItems().forEach(item -> {
WmsQrCodeMaster p = qrCodeMasters.stream()
.filter(q -> q.getBarcodeCode().equals(item.getQrCode()))
.findFirst()
.get();
p.setProcessStage(BarCodeProcessStage.InBound.getState());
p.setBinLocation(item.getBinNo());
p.setLastScanBy(UserUtil.getUserId());
p.setLastScanByname(UserUtil.getUserName());
p.setLastScanTime(LocalDateTime.now());
qrCodeMasters.stream()
.filter(q -> q.getParentBarcodeId().equals(p.getId()))
.forEach(c -> {
c.setProcessStage(p.getProcessStage());
c.setLastScanBy(UserUtil.getUserId());
c.setLastScanByname(UserUtil.getUserName());
c.setLastScanTime(LocalDateTime.now());
c.setFactoryCode(p.getFactoryCode());
c.setStorageLocation(p.getStorageLocation());
c.setBinLocation(p.getBinLocation());
c.setReceiptItemId(p.getReceiptItemId());
});
});
}
if (CollectionUtil.isNotEmpty(rit.getRejectItems())) {
rit.getRejectItems().forEach(item -> {
WmsQrCodeMaster p = qrCodeMasters.stream()
.filter(q -> q.getBarcodeCode().equals(item.getQrCode()))
.findFirst()
.get();
p.setProcessStage(BarCodeProcessStage.Reject.getState());
p.setBinLocation(item.getBinNo());
p.setLastScanBy(UserUtil.getUserId());
p.setLastScanByname(UserUtil.getUserName());
p.setLastScanTime(LocalDateTime.now());
qrCodeMasters.stream()
.filter(q -> q.getParentBarcodeId().equals(p.getId()))
.forEach(c -> {
c.setProcessStage(p.getProcessStage());
c.setLastScanBy(UserUtil.getUserId());
c.setLastScanByname(UserUtil.getUserName());
c.setLastScanTime(LocalDateTime.now());
c.setFactoryCode(p.getFactoryCode());
c.setStorageLocation(p.getStorageLocation());
c.setBinLocation(p.getBinLocation());
c.setReceiptItemId(p.getReceiptItemId());
});
});
}
});
qrCodeMasterService.updateBarCode(qrCodeMasters); qrCodeMasterService.updateBarCode(qrCodeMasters);
normalQMControllerService.confirmReceive(qcReceiveDTOS); normalQMControllerService.confirmReceive(qcReceiveDTOS);
return ApiResult.success(); return ApiResult.success();
@ -390,7 +389,7 @@ public class NormalQMController extends BaseController {
//VUtil.trueThrowBusinessError(!qcReceive.getSourceType().equals(1)).throwMessage("不属于无码收货的采购单"); //VUtil.trueThrowBusinessError(!qcReceive.getSourceType().equals(1)).throwMessage("不属于无码收货的采购单");
//根据ID获取到任务单 //根据ID获取到任务单
List<QCReceiveTaskConfirmQO> taskConfirmQOS = new ArrayList<>(); List<QCReceiveTaskConfirmQO> taskConfirmQOS = new ArrayList<>();
List<InCostCenterBackSubmitItemQRQO> qrCodes=new ArrayList<>(); List<InCostCenterBackSubmitItemQRQO> qrCodes = new ArrayList<>();
for (WmsQcReceive qcReceive : qcReceives) { for (WmsQcReceive qcReceive : qcReceives) {
List<QCTaskItemVO> tasks = normalQMControllerService.getTaskItem(qcReceive.getId()); List<QCTaskItemVO> tasks = normalQMControllerService.getTaskItem(qcReceive.getId());
if (CollectionUtil.isNotEmpty(tasks)) { if (CollectionUtil.isNotEmpty(tasks)) {
@ -398,7 +397,7 @@ public class NormalQMController extends BaseController {
.anyMatch(task -> task.getUnqualifiedQty().compareTo(BigDecimal.ZERO) > 0) .anyMatch(task -> task.getUnqualifiedQty().compareTo(BigDecimal.ZERO) > 0)
).throwMessage("含有质检不合格物料,请扫码入库!"); ).throwMessage("含有质检不合格物料,请扫码入库!");
qrCodeMasterService.getByExtendIds(tasks.stream().map(QCTaskItemVO::getId).toList()) qrCodeMasterService.getByExtendIds(tasks.stream().map(QCTaskItemVO::getId).toList())
.forEach(code->{ .forEach(code -> {
qrCodes.add(new InCostCenterBackSubmitItemQRQO() qrCodes.add(new InCostCenterBackSubmitItemQRQO()
.setBinNo("") .setBinNo("")
.setQrCode(code.getBarcodeCode()) .setQrCode(code.getBarcodeCode())
@ -457,7 +456,7 @@ public class NormalQMController extends BaseController {
zwm3A18DTO.getItem1().add(item1DTO); zwm3A18DTO.getItem1().add(item1DTO);
} else { } else {
item1DTO.setErfmg1(item1DTO.getErfmg1().add(code.getQualifiedQty())); item1DTO.setErfmg1(item1DTO.getErfmg1().add(code.getQualifiedQty()));
item1DTO.setErfmg2(BigDecimal.ZERO); item1DTO.setErfmg2(BigDecimal.ZERO);
} }
if (StrUtil.isNotBlank(code.getSerialNum())) { if (StrUtil.isNotBlank(code.getSerialNum())) {
String flag = code.getInspectionResult().equals("合格") ? "X" : ""; String flag = code.getInspectionResult().equals("合格") ? "X" : "";

View File

@ -212,7 +212,7 @@ public class OutPurchaseController extends BaseController {
items.add(item); items.add(item);
input1.add(new ZWM3A06Input1DTO() input1.add(new ZWM3A06Input1DTO()
.setEbelp(it.getEbelp()) .setEbelp(it.getEbelp())
.setRetpo(it.getRetpo()) .setRetpo("X")
.setMatnr(it.getMatnr()) .setMatnr(it.getMatnr())
.setMaktx(it.getMaktx()) .setMaktx(it.getMaktx())
.setErfmg(item.getNum()) .setErfmg(item.getNum())

View File

@ -201,8 +201,8 @@ public class PurchaseReturnController extends BaseController {
User user = userService.getById(UserUtil.getUserId()); User user = userService.getById(UserUtil.getUserId());
VUtil.trueThrowBusinessError(StrUtil.equals(user.getPurchasingGroup(), returnRequest.getPurchaseGroup())) VUtil.trueThrowBusinessError(StrUtil.equals(user.getPurchasingGroup(), returnRequest.getPurchaseGroup()))
.throwMessage("无权限审核此单"); .throwMessage("无权限审核此单");
VUtil.trueThrowBusinessError(returnRequest.getApprovalStatus() == 1) // VUtil.trueThrowBusinessError(returnRequest.getApprovalStatus() == 1)
.throwMessage("此单已审核通过,不可以再此审核"); // .throwMessage("此单已审核通过,不可以再此审核");
if (request.getApprovalStatus().equals(2)) { if (request.getApprovalStatus().equals(2)) {
VUtil.trueThrowBusinessError(returnRequest.getApprovalStatus() == 2) VUtil.trueThrowBusinessError(returnRequest.getApprovalStatus() == 2)
@ -280,6 +280,7 @@ public class PurchaseReturnController extends BaseController {
} }
//修改状态 //修改状态
returnRequestService.lambdaUpdate() returnRequestService.lambdaUpdate()
.set(WmsReturnRequest::getPoNumberNew, returnRequest.getPoNumberNew())
.set(WmsReturnRequest::getApprovalStatus, request.getApprovalStatus()) .set(WmsReturnRequest::getApprovalStatus, request.getApprovalStatus())
.set(WmsReturnRequest::getDocumentType, request.getDocumentType()) .set(WmsReturnRequest::getDocumentType, request.getDocumentType())
.set(WmsReturnRequest::getApproveTime, LocalDateTime.now()) .set(WmsReturnRequest::getApproveTime, LocalDateTime.now())

View File

@ -111,12 +111,7 @@ public class ApplyReturnRequestItemVO {
private String unit; private String unit;
/** /**
* sap过账的行号 * 新采购单行号
*/ */
private Integer poLineNumberNew; private Integer poLineNumberNew;
/**
* 新的采购单号
*/
private String poNumberNew;
} }

View File

@ -99,4 +99,9 @@ public class ApplyReturnRequestVO {
* 0 PC端1 PDA端 * 0 PC端1 PDA端
*/ */
private Short dataSource; private Short dataSource;
/**
* 新的采购单号
*/
private String poNumberNew;
} }

View File

@ -1,5 +1,6 @@
package com.nflg.wms.repository.entity; package com.nflg.wms.repository.entity;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@ -14,6 +15,7 @@ import java.time.LocalDateTime;
* <p> * <p>
* *
* </p> * </p>
*
* @author 代码生成器生成 * @author 代码生成器生成
* @since 2026 * @since 2026
*/ */
@ -74,11 +76,19 @@ public class WmsQrCodeMaster implements Serializable {
*/ */
private String batchNo; private String batchNo;
public String getBatchNo() {
return StrUtil.isBlank(batchNo) ? "" : batchNo;
}
/** /**
* 序列号 * 序列号
*/ */
private String serialNo; private String serialNo;
public String getSerialNo() {
return StrUtil.isBlank(serialNo) ? "" : serialNo;
}
/** /**
* 供应商编号 * 供应商编号
*/ */
@ -109,6 +119,10 @@ public class WmsQrCodeMaster implements Serializable {
*/ */
private String binLocation; private String binLocation;
public String getBinLocation() {
return StrUtil.isBlank(binLocation) ? "" : binLocation;
}
/** /**
* 最后扫描时间 * 最后扫描时间
*/ */
@ -190,6 +204,13 @@ public class WmsQrCodeMaster implements Serializable {
private String key; private String key;
public String getKey() { public String getKey() {
return factoryCode + "|" + storageLocation + "|"; return factoryCode + "|" + storageLocation;
}
@TableField(exist = false)
private String key1;
public String getKey1() {
return factoryCode + "|" + storageLocation + "|" + getBinLocation() + "|" + getBatchNo() + "|" + getSerialNo();
} }
} }