1、条码添加一个入库单的ID号

2、测试普通物料非质检的无码收货、上架流程
This commit is contained in:
zhangke 2025-09-25 16:05:44 +08:00
parent 9eeb24819c
commit 038b61449b
9 changed files with 65 additions and 41 deletions

View File

@ -196,17 +196,18 @@ public class NormalPGIController extends BaseController {
//数量验证(判断收货数量是否大于了未收数量)
VUtil.trueThrowBusinessError(item.getReceiptNum().compareTo(materialInfoInOrder.getTransportNum()) > 0).throwMessage("物料收货数量[" + item.getReceiptNum() + "]大于了未收数量[" + materialInfoInOrder.getTransportNum() + "],订单号:" + item.getPoNum());
Long orderItemId = IdUtil.getSnowflakeNextId();
//序列号和批次号验证
List<SrmMaterialReceiptScanCodes> codes = normalPGIControllerService.validateScanCodes(item, materialInfoInOrder);
List<SrmMaterialReceiptScanCodes> codes = normalPGIControllerService.validateScanCodes(item, materialInfoInOrder, orderItemId);
if (CollectionUtil.isNotEmpty(codes)) {
srmMaterialReceiptScanCodes.addAll(codes);
}
boolean isQuality = materialInfoInOrder.getKzkri().equals("X");
// 如果是质检单
if (isQuality) {
setQcMaterialSyncDto(qcMaterialSyncDTOS, item, order, codes, materialInfoInOrder, wmsQcReceiveItems, wmsQcReceive.getId());
setQcMaterialSyncDto(qcMaterialSyncDTOS, item, order, codes, materialInfoInOrder, wmsQcReceiveItems, wmsQcReceive.getId(), orderItemId);
} else {
setPoReceive(item, wmsPoReceiptItems, wmsPoReceipt.getId(), materialInfoInOrder);
setPoReceive(item, wmsPoReceiptItems, wmsPoReceipt.getId(), materialInfoInOrder, orderItemId);
}
}
// 盘点条码是否重复
@ -333,7 +334,7 @@ public class NormalPGIController extends BaseController {
List<ZWM3A17Item1DTO> item1 = zwm3A17DTO.getItem1();
List<ZWM3A17Item2DTO> item2 = zwm3A17DTO.getItem2();
List<SrmMaterialReceiptScanCodes> scanCode = srmMaterialReceiptScanCodesRepository.findByOrderItemId(item.getOrderItemId());
List<SrmMaterialReceiptScanCodes> scanCode = srmMaterialReceiptScanCodesRepository.findByReceiveItemId(item.getId());
if (CollectionUtil.isNotEmpty(scanCode)) {
scanCode = scanCode.stream().filter(code -> code.getIsIntoStorage() == false)
.toList();
@ -438,11 +439,12 @@ public class NormalPGIController extends BaseController {
private void setPoReceive(SrmMaterialReceiptQO item,
List<WmsPoReceiptItem> wmsPoReceiptItems,
Long receiveId,
SAPSyncParamsDTO materialInfoInOrder
SAPSyncParamsDTO materialInfoInOrder,
Long receiveItemId
) {
WmsPoReceiptItem receiptItem = new WmsPoReceiptItem()
.setId(IdUtil.getSnowflakeNextId())
.setId(receiveItemId)
.setLineNumber(item.getLineNumber())
.setItemCode(item.getItemCode())
.setUomCode(materialInfoInOrder.getMeins())
@ -570,7 +572,8 @@ public class NormalPGIController extends BaseController {
List<SrmMaterialReceiptScanCodes> codes,
SAPSyncParamsDTO materialInfoInOrder,
List<WmsQcReceiveItem> wmsQcReceiveItems,
Long receiveId
Long receiveId,
Long receiveItemId
) {
ZWM3A17DTO zwm3A17DTO = null;
QCMaterialSyncDTO qcDto = null;
@ -619,7 +622,7 @@ public class NormalPGIController extends BaseController {
setSrmData(srmPushDto, codes, item, materialInfoInOrder);
WmsQcReceiveItem qmsReceiptItem = new WmsQcReceiveItem()
.setId(IdUtil.getSnowflakeNextId())
.setId(receiveItemId)
.setLineNumber(item.getLineNumber())
.setItemCode(item.getItemCode())
.setUomCode(materialInfoInOrder.getMeins())
@ -668,6 +671,7 @@ public class NormalPGIController extends BaseController {
.eq(WmsSrmOrder::getNoteNum, request.getOrderNo())
.eq(WmsSrmOrder::getIsCompleted, false)
.list();
request.setId(CollectionUtil.isNotEmpty(orders) ? orders.get(0).getId() : 0L);
}
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orders)).throwMessage("不存在未完成收货的物料!");
@ -716,7 +720,9 @@ public class NormalPGIController extends BaseController {
private List<SrmMaterialReceiptNoScanCodes> validateNoScanCodes(BarcodeLessReceivingVO item,
SAPSyncParamsDTO materialInfoInOrder,
List<SrmMaterialReceiptScanCodes> scanCodeQOS) {
List<SrmMaterialReceiptScanCodes> scanCodeQOS
, Long receiveItemId
) {
String lbprt = materialInfoInOrder.getLbprt();
//判断序列号批次号是否规范
// 1 - 批次号为空序列号为空
@ -737,19 +743,22 @@ public class NormalPGIController extends BaseController {
}
List<SrmMaterialReceiptNoScanCodes> srmMaterialReceiptScanCodes = new ArrayList<>();
List<String> codeIds = new ArrayList<>();
String batchCode = Objects.isNull(item.getBatchNumber()) ? "" : item.getBatchNumber();
if (StrUtil.isBlank(item.getSerialNumbers())) {
String codeContent = item.getItemCode() + "&" + item.getPoNum() + "&" + item.getPoLineNumber() + "&" + item.getLineNumber()
+ "&" + item.getNoteNum() + "&" + item.getIuCode() + "&" + item.getSupplierNum() + "&" + item.getUnRecieveQty()
+ "&" + item.getUomCode() + "&" + item.getReceivedWarehouse() + "&" + item.getBatchNumber()
+ "&" + item.getUomCode() + "&" + item.getReceivedWarehouse() + "&" + batchCode
+ "&" + item.getSerialNumbers() + "&" + LocalDateTime.now();
String codeId = DigestUtil.md5Hex(codeContent);
srmMaterialReceiptScanCodes.add(new SrmMaterialReceiptNoScanCodes()
.setCodeId(codeId)
.setOrderNo(item.getNoteNum())
.setOrderItemId(item.getId())
.setBatchNumber(batchCode)
.setCodeNum(item.getUnRecieveQty())
.setSerialNumbers(item.getSerialNumbers())
.setCodeContent(codeContent)
.setReceiveItemId(receiveItemId)
.setIsIntoStorage(false));
scanCodeQOS.add(new SrmMaterialReceiptScanCodes()
@ -757,6 +766,8 @@ public class NormalPGIController extends BaseController {
.setOrderNo(item.getNoteNum())
.setOrderItemId(item.getId())
.setIsIntoStorage(false)
.setBatchNumber(batchCode)
.setReceiveItemId(receiveItemId)
.setCodeNum(item.getUnRecieveQty())
.setBatchNumber(item.getBatchNumber())
.setSerialNumbers(item.getSerialNumbers())
@ -771,24 +782,29 @@ public class NormalPGIController extends BaseController {
String codeContent = item.getItemCode() + "&" + item.getPoNum() + "&" + item.getPoLineNumber()
+ "&" + item.getLineNumber()
+ "&" + item.getNoteNum() + "&" + item.getIuCode() + "&" + item.getSupplierNum() + "&1"
+ "&" + item.getUomCode() + "&" + item.getReceivedWarehouse() + "&" + item.getBatchNumber()
+ "&" + item.getUomCode() + "&" + item.getReceivedWarehouse() + "&" + batchCode
+ "&" + serialNumbers[i] + "&" + LocalDateTime.now();
String codeId = DigestUtil.md5Hex(codeContent);
srmMaterialReceiptScanCodes.add(new SrmMaterialReceiptNoScanCodes()
.setCodeId(codeId)
.setOrderNo(item.getNoteNum())
.setOrderItemId(item.getId())
.setBatchNumber(batchCode)
.setCodeNum(new BigDecimal(1))
.setSerialNumbers(serialNumbers[i])
.setCodeContent(codeContent)
.setReceiveItemId(receiveItemId)
.setIsIntoStorage(false));
scanCodeQOS.add(new SrmMaterialReceiptScanCodes()
.setCodeId(codeId)
.setOrderNo(item.getNoteNum())
.setOrderItemId(item.getId())
.setBatchNumber(batchCode)
.setIsIntoStorage(false)
.setCodeNum(new BigDecimal(1))
.setBatchNumber(item.getBatchNumber())
.setReceiveItemId(receiveItemId)
.setSerialNumbers(serialNumbers[i])
.setCodeContent(codeContent)
);
@ -860,8 +876,9 @@ public class NormalPGIController extends BaseController {
VUtil.trueThrowBusinessError(item.getUnRecieveQty().compareTo(materialInfoInOrder.getTransportNum()) > 0)
.throwMessage("物料收货数量[" + item.getUnRecieveQty() + "]大于了未收数量[" + materialInfoInOrder.getTransportNum() + "],订单号:" + item.getPoNum());
//序列号和批次号验证以及条码信息的组装
Long receiveItemId = IdUtil.getSnowflakeNextId();
List<SrmMaterialReceiptScanCodes> scanCodeQOS = new ArrayList<>();
List<SrmMaterialReceiptNoScanCodes> itemCodes = validateNoScanCodes(item, materialInfoInOrder, scanCodeQOS);
List<SrmMaterialReceiptNoScanCodes> itemCodes = validateNoScanCodes(item, materialInfoInOrder, scanCodeQOS,receiveItemId);
if (CollectionUtil.isNotEmpty(itemCodes)) {
codes.addAll(itemCodes);
}
@ -885,18 +902,16 @@ public class NormalPGIController extends BaseController {
.setReceiptNum(item.getUnRecieveQty());
// 如果是质检单
if (isQuality) {
setQcMaterialSyncDto(qcMaterialSyncDTOS, materialSyncDTO, order, scanCodeQOS, materialInfoInOrder, wmsQcReceiveItems, wmsQcReceive.getId());
setQcMaterialSyncDto(qcMaterialSyncDTOS, materialSyncDTO, order, scanCodeQOS, materialInfoInOrder, wmsQcReceiveItems, wmsQcReceive.getId(), receiveItemId);
} else {
WmsPoReceipt wmsPoReceipt = wmsPoReceipts.stream().filter(it -> it.getOrderNo().equals(item.getNoteNum()))
.findFirst().orElse(null);
if (Objects.isNull(wmsPoReceipt)) {
continue;
}
setPoReceive(materialSyncDTO, wmsPoReceiptItems, wmsPoReceipt.getId(), materialInfoInOrder);
setPoReceive(materialSyncDTO, wmsPoReceiptItems, wmsPoReceipt.getId(), materialInfoInOrder, receiveItemId);
}
}
// 盘点条码是否重复
Map<String, Long> duplicateCodes = codes.stream()
.collect(Collectors.groupingBy(
@ -970,7 +985,7 @@ public class NormalPGIController extends BaseController {
List<ZWM3A17Item1DTO> item1 = zwm3A17DTO.getItem1();
List<ZWM3A17Item2DTO> item2 = zwm3A17DTO.getItem2();
List<SrmMaterialReceiptNoScanCodes> scanCode = srmMaterialReceiptNoScanCodesRepository.findByOrderItemId(item.getOrderItemId());
List<SrmMaterialReceiptNoScanCodes> scanCode = srmMaterialReceiptNoScanCodesRepository.findByReceiveItemId(item.getId());
if (CollectionUtil.isNotEmpty(scanCode)) {
scanCode = scanCode.stream().filter(code -> code.getIsIntoStorage() == false)
.toList();
@ -981,7 +996,7 @@ public class NormalPGIController extends BaseController {
// 库存
InventoryDTO inventoryDTO = inventories.stream()
.filter(inventoriesDTO -> inventoriesDTO.getMaterialNo().equals(item.getItemCode())
&& inventoriesDTO.getBatchNumber().equals(code.getBatchNumber())
&& inventoriesDTO.getBatchNumber().equals(Objects.isNull(code.getBatchNumber()) ? "" : code.getBatchNumber())
&& inventoriesDTO.getFactoryNo().equals(wmsPoReceipt.getFactoryCode())
&& inventoriesDTO.getWarehouseNo().equals(item.getReceivedWarehouse())
).findFirst().orElse(null);
@ -991,7 +1006,7 @@ public class NormalPGIController extends BaseController {
.setMaterialNo(item.getItemCode())
.setFactoryNo(wmsPoReceipt.getFactoryCode())
.setWarehouseNo(item.getReceivedWarehouse())
.setBatchNumber(code.getBatchNumber())
.setBatchNumber(Objects.isNull(code.getBatchNumber()) ? "" : code.getBatchNumber())
.setNum(code.getCodeNum());
inventories.add(inventoryDTO);
} else {
@ -1002,7 +1017,7 @@ public class NormalPGIController extends BaseController {
dto1.getEBELP().equals(item.getPoLineNumber())
&& dto1.getMATNR().equals(item.getItemCode())
&& dto1.getMeins().equals(item.getUomCode())
&& dto1.getCHARG().equals(code.getBatchNumber())
&& dto1.getCHARG().equals(Objects.isNull(code.getBatchNumber()) ? "" : code.getBatchNumber())
&& dto1.getWERKS().equals(wmsPoReceipt.getFactoryCode())
&& dto1.getLGORT().equals(item.getReceivedWarehouse())
).findFirst().orElse(null);
@ -1012,7 +1027,7 @@ public class NormalPGIController extends BaseController {
.setMATNR(item.getItemCode())
.setERFMG(code.getCodeNum())
.setMEINS(item.getUomCode())
.setCHARG(code.getBatchNumber())
.setCHARG(Objects.isNull(code.getBatchNumber()) ? "" : code.getBatchNumber())
.setWERKS(wmsPoReceipt.getFactoryCode())
.setLGORT(item.getReceivedWarehouse())
.setKZKRI("")

View File

@ -66,7 +66,7 @@ public class POReceiptController {
@GetMapping("getScanCodes")
@ApiMark(moduleName = "采购单入库管理", apiName = "获取扫码的详情信息")
public ApiResult<List<PDAScanCodeVO>> getScanCodes(@RequestParam Long orderItemId) {
List<SrmMaterialReceiptScanCodes> scanCodes = srmMaterialReceiptCanCodesRepository.findByOrderItemId(orderItemId);
List<SrmMaterialReceiptScanCodes> scanCodes = srmMaterialReceiptCanCodesRepository.findByReceiveItemId(orderItemId);
List<PDAScanCodeVO> pdas = Convert.toList(PDAScanCodeVO.class, scanCodes);
return ApiResult.success(pdas);
}

View File

@ -70,7 +70,7 @@ public class QCReceiptController {
@GetMapping("getScanCodes")
@ApiMark(moduleName = "质检物料入库单", apiName = "获取扫码的详情信息")
public ApiResult<List<PDAScanCodeVO>> getScanCodes(@RequestParam Long orderItemId) {
List<SrmMaterialReceiptScanCodes> scanCodes = srmMaterialReceiptCanCodesRepository.findByOrderItemId(orderItemId);
List<SrmMaterialReceiptScanCodes> scanCodes = srmMaterialReceiptCanCodesRepository.findByReceiveItemId(orderItemId);
List<PDAScanCodeVO> pdas = Convert.toList(PDAScanCodeVO.class, scanCodes);
return ApiResult.success(pdas);
}

View File

@ -17,12 +17,12 @@ public class SrmMaterialReceiptNoScanCodes {
private String id;
/**
* 货单的单号
* 货单的单号
*/
private String orderNo;
/***
* 货单的单行ID号
* 货单的单行ID号
*
*/
private Long orderItemId;
@ -62,4 +62,9 @@ public class SrmMaterialReceiptNoScanCodes {
* 是否已上架
*/
private Boolean IsIntoStorage;
/**
* 收货单的单行ID号
*/
private Long receiveItemId;
}

View File

@ -63,4 +63,8 @@ public class SrmMaterialReceiptScanCodes {
*/
private Boolean IsIntoStorage;
/**
* 收货单的单行ID号
*/
private Long receiveItemId;
}

View File

@ -12,7 +12,7 @@ import java.util.List;
public interface SrmMaterialReceiptNoScanCodesRepository
extends MongoRepository<SrmMaterialReceiptNoScanCodes, String> {
List<SrmMaterialReceiptNoScanCodes> findByOrderItemId(Long orderItemId);
List<SrmMaterialReceiptNoScanCodes> findByReceiveItemId(Long receiveItemId);
List<SrmMaterialReceiptNoScanCodes> findByCodeIdIn(List<String> attr0);
@Query("{ 'codeId' : { $in : ?0 } }")

View File

@ -12,6 +12,7 @@ import java.util.List;
public interface SrmMaterialReceiptScanCodesRepository
extends MongoRepository<SrmMaterialReceiptScanCodes, String> {
List<SrmMaterialReceiptScanCodes> findByOrderItemId(Long orderItemId);
List<SrmMaterialReceiptScanCodes> findByReceiveItemId(Long receiveItemId);
List<SrmMaterialReceiptScanCodes> findByCodeIdIn(List<String> attr0);

View File

@ -167,7 +167,7 @@ public class NormalPGIControllerService {
}
public List<SrmMaterialReceiptScanCodes> validateScanCodes(SrmMaterialReceiptQO item, SAPSyncParamsDTO materialInfoInOrder) {
public List<SrmMaterialReceiptScanCodes> validateScanCodes(SrmMaterialReceiptQO item, SAPSyncParamsDTO materialInfoInOrder, Long receiveItemId) {
String lbprt = materialInfoInOrder.getLbprt();
//判断序列号批次号是否规范
// 1 - 批次号为空序列号为空
@ -199,6 +199,7 @@ public class NormalPGIControllerService {
.setCodeId(scanCode.getCodeId())
.setCodeNum(scanCode.getCodeNum())
.setBatchNumber(scanCode.getBatchNumber())
.setReceiveItemId(receiveItemId)
.setSerialNumbers(scanCode.getSerialNumbers())
.setIsIntoStorage(false)
.setCodeContent(scanCode.getCodeContent()));
@ -325,15 +326,15 @@ public class NormalPGIControllerService {
.update();
}
}
//修改二维码的入库状态
if (CollectionUtil.isNotEmpty(scanCodes)) {
List<String> codeIds = scanCodes.stream().map(SrmMaterialReceiptScanCodes::getId).toList();
srmMaterialReceiptCanCodesRepository.updateIsIntoStorage(codeIds, true);
}
// //修改二维码的入库状态
// if (CollectionUtil.isNotEmpty(scanCodes)) {
// List<String> codeIds = scanCodes.stream().map(SrmMaterialReceiptScanCodes::getId).toList();
// srmMaterialReceiptCanCodesRepository.updateIsIntoStorage(codeIds, true);
// }
}
@Transactional
public void takeNoScanDelivery(List<WmsPoReceipt> wmsPoReceipts, List<WmsQcReceive> wmsQcReceives
, List<WmsPoReceiptItem> wmsPoReceiptItems
, List<WmsQcReceiveItem> wmsQcReceiveItems, List<SrmMaterialReceiptNoScanCodes> codes
@ -355,7 +356,6 @@ public class NormalPGIControllerService {
for (WmsPoReceiptItem wmsPoReceiptItem : items) {
wmsSrmOrderItemService.addReceiveQty(wmsPoReceiptItem.getOrderItemId(), wmsPoReceiptItem.getReceiptNum());
}
}
}
}
@ -378,7 +378,6 @@ public class NormalPGIControllerService {
}
for (Long orderId : orderIds) {
//更新收货单的完结状态
List<WmsSrmOrder> orders = wmsSrmOrderService.getUnCompletedItem(orderId);
@ -415,7 +414,7 @@ public class NormalPGIControllerService {
}
}
@Transactional
public void takeDeliveryConfirmUnScan(List<WmsPoReceiptItem> receiptItems, List<StorageLocationDTO> storageLocationDTOS,
List<InventoryDTO> inventories, List<ZWM3A17DTO> zwm3A17DTOS, Long id,
List<SrmMaterialReceiptNoScanCodes> scanCodes) {
@ -460,10 +459,10 @@ public class NormalPGIControllerService {
}
}
//修改二维码的入库状态
if (CollectionUtil.isNotEmpty(scanCodes)) {
List<String> codeIds = scanCodes.stream().map(SrmMaterialReceiptNoScanCodes::getId).toList();
srmMaterialReceiptNoCodesRepository.updateIsIntoStorage(codeIds, true);
}
// if (CollectionUtil.isNotEmpty(scanCodes)) {
// List<String> codeIds = scanCodes.stream().map(SrmMaterialReceiptNoScanCodes::getId).toList();
// srmMaterialReceiptNoCodesRepository.updateIsIntoStorage(codeIds, true);
// }
}
/**

View File

@ -36,7 +36,7 @@ public class DeployTest {
//处理主jar包
handleFile(sshUtil, localPath + jarName, remotePath + jarName);
//处理lib目录
handleDir(sshUtil, localPath, remotePath, "lib");
// handleDir(sshUtil, localPath, remotePath, "lib");
//执行脚本启动服务
sshUtil.exec("cd " + remotePath + " && ./restart.sh");
sshUtil.disconnect();