diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java index da6d53f1..a3ecc919 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java @@ -8,12 +8,15 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.DigestUtil; +import cn.hutool.crypto.digest.MD5; import com.nflg.wms.admin.pojo.document.SrmMaterialReceiptNoScanCodes; import com.nflg.wms.admin.pojo.document.SrmMaterialReceiptScanCodes; import com.nflg.wms.admin.pojo.dto.QCMaterialSyncDTO; import com.nflg.wms.admin.pojo.dto.ZWM3A17DTO; import com.nflg.wms.admin.pojo.dto.ZWM3A17Item1DTO; import com.nflg.wms.admin.pojo.dto.ZWM3A17Item2DTO; +import com.nflg.wms.admin.repository.SrmMaterialReceiptNoScanCodesRepository; import com.nflg.wms.admin.repository.SrmMaterialReceiptScanCodesRepository; import com.nflg.wms.admin.service.NormalPGIControllerService; import com.nflg.wms.admin.service.SAPCommonService; @@ -69,6 +72,8 @@ public class NormalPGIController extends BaseController { @Resource private SrmMaterialReceiptScanCodesRepository srmMaterialReceiptScanCodesRepository; + @Resource + private SrmMaterialReceiptNoScanCodesRepository srmMaterialReceiptNoScanCodesRepository; @Resource private IWmsPoReceiptService wmsPoReceiptService; @@ -690,6 +695,71 @@ public class NormalPGIController extends BaseController { return ApiResult.success(list); } + private List validateNoScanCodes(BarcodeLessReceivingVO item, SAPSyncParamsDTO materialInfoInOrder) { + String lbprt = materialInfoInOrder.getLbprt(); + //判断序列号、批次号是否规范 + // 1 - 批次号为空,序列号为空 + // 2 - 批次号必填,序列号为空 + // 3 - 批次号为空,序列号必填 + // 4 - 批次号必填,序列号必填 + if ("2".equals(lbprt) || "4".equals(lbprt)) { + VUtil.trueThrowBusinessError(StrUtil.isBlank(item.getBatchNumber())).throwMessage("此物料[" + item.getItemCode() + "]必须填写批次号,订单号:" + item.getPoNum()); + + } + + if ("3".equals(lbprt) || "4".equals(lbprt)) { + VUtil.trueThrowBusinessError(StrUtil.isBlank(item.getSerialNumbers())).throwMessage("此物料[" + item.getItemCode() + "]必须填写批次号,订单号:" + item.getPoNum()); + // 判断序列号的数量是否OK + Integer iQty = Convert.toInt(Math.ceil(item.getUnRecieveQty().doubleValue())); + Integer serialNumberCount = item.getSerialNumbers().split(",").length; + VUtil.trueThrowBusinessError(serialNumberCount < iQty).throwMessage("此物料[" + item.getItemCode() + "]的序列号数量不可以小于【" + iQty + "】个,订单号:" + item.getPoNum()); + } + List srmMaterialReceiptScanCodes = new ArrayList<>(); + List codeIds = new ArrayList<>(); + 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.getSerialNumbers(); + String codeId = DigestUtil.md5Hex(codeContent); + srmMaterialReceiptScanCodes.add(new SrmMaterialReceiptNoScanCodes() + .setCodeId(codeId) + .setOrderNo(item.getNoteNum()) + .setOrderItemId(item.getId()) + .setCodeNum(item.getUnRecieveQty()) + .setSerialNumbers(item.getSerialNumbers()) + .setCodeContent(codeContent) + .setIsIntoStorage(false)); + codeIds.add(codeId); + // 21602 + + } else { + String[] serialNumbers = item.getSerialNumbers().split(","); + for (int i = 0; i < serialNumbers.length; i++) { + String codeContent = item.getItemCode() + "&" + item.getPoNum() + "&" + item.getPoLineNumber() + + "&" + item.getLineNumber() + + "&" + item.getNoteNum() + "&" + item.getIuCode() + "&" + item.getSupplierNum() + "&1" + + "&" + item.getUomCode() + "&" + item.getReceivedWarehouse() + "&" + item.getBatchNumber() + + "&" + serialNumbers[i]; + String codeId = DigestUtil.md5Hex(codeContent); + srmMaterialReceiptScanCodes.add(new SrmMaterialReceiptNoScanCodes() + .setCodeId(codeId) + .setOrderNo(item.getNoteNum()) + .setOrderItemId(item.getId()) + .setCodeNum(new BigDecimal(1)) + .setSerialNumbers(item.getSerialNumbers()) + .setCodeContent(codeContent) + .setIsIntoStorage(false)); + codeIds.add(codeId); + } + } + //查看是否有重复的条码 + + List existingCodes = srmMaterialReceiptNoScanCodesRepository.findByCodeIdIn(codeIds); + VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(existingCodes)).throwMessage("存在已使用的条码,不能重复使用"); + + return srmMaterialReceiptScanCodes; + } @PostMapping("takeDeliveryByNoScan") @ApiMark(moduleName = "送货单管理", apiName = "一键收货") @@ -739,52 +809,12 @@ public class NormalPGIController extends BaseController { VUtil.trueThrowBusinessError(item.getUnRecieveQty().compareTo(materialInfoInOrder.getTransportNum()) > 0) .throwMessage("物料收货数量[" + item.getUnRecieveQty() + "]大于了未收数量[" + materialInfoInOrder.getTransportNum() + "],订单号:" + item.getPoNum()); //序列号和批次号验证 - //--------------------------------- - String lbprt = materialInfoInOrder.getLbprt(); - //判断序列号、批次号是否规范 - // 1 - 批次号为空,序列号为空 - // 2 - 批次号必填,序列号为空 - // 3 - 批次号为空,序列号必填 - // 4 - 批次号必填,序列号必填 - if ("2".equals(lbprt) || "4".equals(lbprt)) { - VUtil.trueThrowBusinessError(StrUtil.isBlank(item.getBatchNumber())).throwMessage("此物料[" + item.getItemCode() + "]必须填写批次号,订单号:" + item.getPoNum()); + List itemCodes = validateNoScanCodes(item, materialInfoInOrder) + if (CollectionUtil.isNotEmpty(itemCodes)) { + codes.addAll(itemCodes); } - - - if ("3".equals(lbprt) || "4".equals(lbprt)) { - Integer serialNumbers = item.getUnRecieveQty() - VUtil.trueThrowBusinessError( - StrUtil.isBlank(item.getSerialNumbers()) - - ).throwMessage("此物料[" + item.getItemCode() + "]必须填写序列号,订单号:" + item.getPoNum()); - - } - List srmMaterialReceiptScanCodes = new ArrayList<>(); - List codeIds = new ArrayList<>(); - for (PDAScanCodeQO scanCode : item.getScanCodes()) { - VUtil.trueThrowBusinessError(codeIds.contains(scanCode.getCodeId())).throwMessage("此物料[" + item.getItemCode() + "]中存在重复的条码" + scanCode.getCodeId()); - codeIds.add(scanCode.getCodeId()); - srmMaterialReceiptScanCodes.add( - new SrmMaterialReceiptScanCodes() - .setOrderItemId(item.getId()) - .setOrderNo(item.getNoteNum()) - .setCodeId(scanCode.getCodeId()) - .setCodeNum(scanCode.getCodeNum()) - .setBatchNumber(scanCode.getBatchNumber()) - .setSerialNumbers(scanCode.getSerialNumbers()) - .setIsIntoStorage(false) - .setCodeContent(scanCode.getCodeContent())); - } - //查看是否有重复的条码 - - List existingCodes = srmMaterialReceiptCanCodesRepository.findByCodeIdIn(codeIds); - VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(existingCodes)).throwMessage("存在已使用的条码,不能重复使用"); - - return srmMaterialReceiptScanCodes; - - //------------------------- - - +//------------------------------- 条码高点个都是法师打发手动阀手动阀手打 + asfdasdfasdf } WmsSrmOrder order = wmsSrmOrderService.lambdaQuery().eq(WmsSrmOrder::getNoteNum, request.get(0).getNoteNum()).one();