diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java index 6d86354b..988691fe 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java @@ -13,6 +13,7 @@ import com.nflg.wms.admin.util.NoUtil; import com.nflg.wms.admin.util.PdfGeneratorUtil; import com.nflg.wms.admin.util.QRCodeUtil; import com.nflg.wms.admin.util.ThymeleafUtil; +import com.nflg.wms.common.constant.BarCodeProcessStage; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.document.InMaterialScanRecord; @@ -24,10 +25,7 @@ import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.vo.*; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; -import com.nflg.wms.repository.entity.WmsInCostcenterBack; -import com.nflg.wms.repository.entity.WmsInCostcenterBackItem; -import com.nflg.wms.repository.entity.WmsInCostcenterBackTicket; -import com.nflg.wms.repository.entity.WmsInCostcenterBackTicketItem; +import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import com.nflg.wms.starter.BaseController; import jakarta.annotation.Resource; @@ -80,6 +78,12 @@ public class InCostCenterBackController extends BaseController { @Resource private BasdeSerialNumberControllerService serialNumberControllerService; + @Resource + private IWmsWarehouseService warehouseService; + + @Resource + private IWmsQrCodeMasterService qrCodeMasterService; + /** * 查询SAP领料订单数据 */ @@ -181,9 +185,8 @@ public class InCostCenterBackController extends BaseController { if (StrUtil.isBlank(vo.getLgort2())) { vo.setLgort2(CollectionUtil.get(storageService.getWarehouseNo(order.getWerks(), item.getMatnr()), 0)); } - if (StrUtil.isNotBlank(vo.getLgort2()) && StrUtil.isBlank(vo.getLgpbe())) { - vo.setLgpbe(StrUtil.join("/", storageService.getBinNos(item.getMatnr(), order.getWerks(), vo.getLgort2()))); - } + vo.setLgpbe(storageService.getBinNo(item.getMatnr(), order.getWerks(), vo.getLgort2())); + vo.setIsDisableLocation(warehouseService.isEnableLocation(order.getWerks(), vo.getLgort2())); return vo; }).toList() ) @@ -208,8 +211,17 @@ public class InCostCenterBackController extends BaseController { .setCreateTime(LocalDateTime.now()); List datas = inCostcenterBackItemService.getList(order.getId()); List records = new ArrayList<>(); -// List dtos = new ArrayList<>(); List ticketItems = new ArrayList<>(); + Set allQrCodes = new HashSet<>(); + request.getItems().forEach(it -> { + it.getItems().forEach(item -> { + allQrCodes.addAll(item.getQrCodes()); + }); + }); + List qrCodeMasters = qrCodeMasterService.lambdaQuery() + .lt(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState()) + .in(WmsQrCodeMaster::getBarcodeCode, allQrCodes) + .list(); request.getItems().forEach(it -> { WmsInCostcenterBackItem item = datas.stream().filter(d -> Objects.equals(it.getOrderItemId(), d.getId())).findFirst().orElse(null); VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("订单项无效"); @@ -217,40 +229,52 @@ public class InCostCenterBackController extends BaseController { .setId(IdUtil.getSnowflakeNextId()) .setTicketId(ticket.getId()) .setOrderItemId(item.getId()) - .setLgpbe(StrUtil.join(",", it.getBinNos())) + .setLgpbe(StrUtil.join(",", it.getItems().stream().map(InCostcenterBackSubmitItemQRQO::getBinNo).toList())) .setNum(BigDecimal.ZERO); ticketItems.add(ti); - it.getQrCodes().forEach(qrCode -> { - MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode); -// dtos.add(qrCodeContent); - String materialNo = qrCodeContent.getMaterialNo(); - VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr())) - .throwMessage("订单项与物料不符"); - item.setLeft(item.getLeft().subtract(qrCodeContent.getNum())); - VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0) - .throwMessage("物料" + materialNo + "的入库数量超出申请数量"); - ti.setNum(ti.getNum().add(qrCodeContent.getNum())); - records.add(new InMaterialScanRecord() - .setSource(2) - .setSourceId(order.getId()) - .setSourceItemId(item.getId()) - .setTicketItemId(ti.getId()) - .setMaterialNo(materialNo) - .setContent(qrCode) - .setBatchNo(qrCodeContent.getBatchNo()) - .setSerialNo(qrCodeContent.getSerialNo()) - .setFactoryNo(order.getWerks()) - .setWarehouseNo(request.getLgort()) - .setBinNos(StrUtil.split(it.getBinNos(), "/")) - .setUniqNo(qrCodeContent.getUniqNo()) - .setNum(qrCodeContent.getNum()) - .setCreateBy(UserUtil.getUserName()) - .setCreateTime(Instant.now()) - ); + it.getItems().forEach(iit -> { + iit.getQrCodes().forEach(qrCode -> { + MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode); + String materialNo = qrCodeContent.getMaterialNo(); + VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr())) + .throwMessage("订单项与物料不符"); + item.setLeft(item.getLeft().subtract(qrCodeContent.getNum())); + VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0) + .throwMessage("物料" + materialNo + "的入库数量超出申请数量"); + ti.setNum(ti.getNum().add(qrCodeContent.getNum())); + records.add(new InMaterialScanRecord() + .setSource(2) + .setSourceId(order.getId()) + .setSourceItemId(item.getId()) + .setTicketItemId(ti.getId()) + .setMaterialNo(materialNo) + .setContent(qrCode) + .setBatchNo(qrCodeContent.getBatchNo()) + .setSerialNo(qrCodeContent.getSerialNo()) + .setFactoryNo(order.getWerks()) + .setWarehouseNo(request.getLgort()) + .setBinNo(iit.getBinNo()) + .setUniqNo(qrCodeContent.getUniqNo()) + .setNum(qrCodeContent.getNum()) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(Instant.now()) + ); + WmsQrCodeMaster qrCodeMaster = qrCodeMasters.stream() + .filter(q -> StrUtil.equals(q.getBarcodeCode(), qrCode)) + .findFirst() + .orElse(null); + VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("二维码" + qrCode + "无效"); + qrCodeMaster.setProcessStage(BarCodeProcessStage.InBound.getState()); + qrCodeMaster.setFactoryCode(order.getWerks()); + qrCodeMaster.setStorageLocation(request.getLgort()); + qrCodeMaster.setBinLocation(iit.getBinNo()); + qrCodeMaster.setLastScanBy(UserUtil.getUserId()); + qrCodeMaster.setLastScanByname(UserUtil.getUserName()); + qrCodeMaster.setLastScanTime(LocalDateTime.now()); + }); }); }); inCostcenterBackItemService.updateBatchById(datas); - inMaterialScanRecordRespository.saveAll(records); inCostcenterBackTicketItemService.saveBatch(ticketItems); inCostcenterBackService.lambdaUpdate() .set(WmsInCostcenterBack::getSapStatus, true) @@ -260,6 +284,7 @@ public class InCostCenterBackController extends BaseController { .set(WmsInCostcenterBack::getState, datas.stream().map(WmsInCostcenterBackItem::getLeft).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(BigDecimal.ZERO) > 0 ? 1 : 2) .eq(WmsInCostcenterBack::getId, order.getId()) .update(); + qrCodeMasterService.updateBatchById(qrCodeMasters); inventoryService.in(records.stream() .collect(Collectors.groupingBy(InMaterialScanRecord::getKey)) .values() @@ -299,6 +324,7 @@ public class InCostCenterBackController extends BaseController { ticket.setDocYear(vo.getEMJahr()); ticket.setMatDoc(vo.getEMblnr()); inCostcenterBackTicketService.save(ticket); + inMaterialScanRecordRespository.saveAll(records); return ApiResult.success(); } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java index 14b3c628..3b16960b 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceBackController.java @@ -15,6 +15,7 @@ import com.nflg.wms.admin.util.NoUtil; import com.nflg.wms.admin.util.PdfGeneratorUtil; import com.nflg.wms.admin.util.QRCodeUtil; import com.nflg.wms.admin.util.ThymeleafUtil; +import com.nflg.wms.common.constant.BarCodeProcessStage; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.document.InMaterialScanRecord; @@ -23,10 +24,7 @@ import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.vo.*; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; -import com.nflg.wms.repository.entity.WmsInProduceBack; -import com.nflg.wms.repository.entity.WmsInProduceBackItem; -import com.nflg.wms.repository.entity.WmsInProduceBackTicket; -import com.nflg.wms.repository.entity.WmsInProduceBackTicketItem; +import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import com.nflg.wms.starter.BaseController; import jakarta.annotation.Resource; @@ -76,6 +74,15 @@ public class InProduceBackController extends BaseController { @Resource private BasdeSerialNumberControllerService serialNumberControllerService; + @Resource + private IWmsQrCodeMasterService qrCodeMasterService; + + @Resource + private IWmsStorageService storageService; + + @Resource + private IWmsWarehouseService warehouseService; + /** * 查询SAP领料订单数据 */ @@ -185,10 +192,11 @@ public class InProduceBackController extends BaseController { .map(item -> new OutProduceItemVO() .setId(item.getId()) .setLgort2(order.getLgort2()) - .setLgpbe(item.getLgpbe()) + .setLgpbe(storageService.getBinNo(item.getMatnr(), order.getDwerk(), order.getLgort2())) .setMaktx2(item.getMaktx2()) .setMatnr(item.getMatnr()) .setNum(item.getSqsl().subtract(item.getNum())) + .setIsDisableLocation(warehouseService.isEnableLocation(order.getDwerk(), order.getLgort2())) ).toList() ) ); @@ -213,55 +221,77 @@ public class InProduceBackController extends BaseController { // List dtos = new ArrayList<>(); List ticketItems = new ArrayList<>(); Multimap input2 = ArrayListMultimap.create(); - request.getQrCodes().forEach(qrCode -> { - MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode); + Set allQrCodes = new HashSet<>(); + request.getItems().forEach(it -> { + allQrCodes.addAll(it.getQrCodes()); + }); + List qrCodeMasters = qrCodeMasterService.lambdaQuery() + .lt(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState()) + .in(WmsQrCodeMaster::getBarcodeCode, allQrCodes) + .list(); + request.getItems().forEach(iit -> { + iit.getQrCodes().forEach(qrCode -> { + MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode); // dtos.add(qrCodeContent); - String materialNo = qrCodeContent.getMaterialNo(); - WmsInProduceBackItem item = datas.stream().filter(d -> StrUtil.equals(d.getMatnr(), materialNo)).findFirst().orElse(null); - VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("物料" + materialNo + "不需要退料"); + String materialNo = qrCodeContent.getMaterialNo(); + WmsInProduceBackItem item = datas.stream().filter(d -> StrUtil.equals(d.getMatnr(), materialNo)).findFirst().orElse(null); + VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("物料" + materialNo + "不需要退料"); // VUtil.trueThrowBusinessError(List.of("3","4").contains(item.getLbprt()) && StrUtil.isBlank(qrCodeContent.getSerialNo())) // .throwMessage("物料" + materialNo + "必须有序列号"); // if (List.of("3","4").contains(item.getLbprt())){ // input2.put(item.getRspos(),qrCodeContent.getSerialNo()); // } - input2.put(item.getRspos(), qrCodeContent.getSerialNo()); - WmsInProduceBackTicketItem pti = ticketItems.stream() - .filter(ti -> Objects.equals(ti.getProduceBackItemId(), item.getId())) - .findFirst() - .orElseGet(() -> { - WmsInProduceBackTicketItem ti = new WmsInProduceBackTicketItem() - .setId(IdUtil.getSnowflakeNextId()) - .setTicketId(ticket.getId()) - .setProduceBackItemId(item.getId()) - .setNum(BigDecimal.ZERO); - ticketItems.add(ti); - return ti; - }); - BigDecimal num = item.getSqsl().subtract(item.getNum()); - VUtil.trueThrowBusinessError(num.compareTo(qrCodeContent.getNum()) < 0) - .throwMessage("物料" + materialNo + "的入库数量超出申请数量"); - item.setNum(item.getNum().add(qrCodeContent.getNum())); - pti.setNum(pti.getNum().add(qrCodeContent.getNum())); - records.add(new InMaterialScanRecord() - .setSource(1) - .setSourceId(order.getId()) - .setSourceItemId(item.getId()) - .setTicketItemId(pti.getId()) - .setMaterialNo(materialNo) - .setContent(qrCode) - .setBatchNo(qrCodeContent.getBatchNo()) - .setSerialNo(qrCodeContent.getSerialNo()) - .setUniqNo(qrCodeContent.getUniqNo()) - .setFactoryNo(order.getDwerk()) - .setWarehouseNo(request.getLgort()) + input2.put(item.getRspos(), qrCodeContent.getSerialNo()); + WmsInProduceBackTicketItem pti = ticketItems.stream() + .filter(ti -> Objects.equals(ti.getProduceBackItemId(), item.getId())) + .findFirst() + .orElseGet(() -> { + WmsInProduceBackTicketItem ti = new WmsInProduceBackTicketItem() + .setId(IdUtil.getSnowflakeNextId()) + .setTicketId(ticket.getId()) + .setProduceBackItemId(item.getId()) + .setNum(BigDecimal.ZERO); + ticketItems.add(ti); + return ti; + }); + BigDecimal num = item.getSqsl().subtract(item.getNum()); + VUtil.trueThrowBusinessError(num.compareTo(qrCodeContent.getNum()) < 0) + .throwMessage("物料" + materialNo + "的入库数量超出申请数量"); + item.setNum(item.getNum().add(qrCodeContent.getNum())); + pti.setNum(pti.getNum().add(qrCodeContent.getNum())); + records.add(new InMaterialScanRecord() + .setSource(1) + .setSourceId(order.getId()) + .setSourceItemId(item.getId()) + .setTicketItemId(pti.getId()) + .setMaterialNo(materialNo) + .setContent(qrCode) + .setBatchNo(qrCodeContent.getBatchNo()) + .setSerialNo(qrCodeContent.getSerialNo()) + .setUniqNo(qrCodeContent.getUniqNo()) + .setFactoryNo(order.getDwerk()) + .setWarehouseNo(request.getLgort()) // .setBinNos(StrUtil.split(it.getBinNos(), "/")) - .setNum(qrCodeContent.getNum()) - .setCreateBy(UserUtil.getUserName()) - .setCreateTime(Instant.now()) - ); + .setNum(qrCodeContent.getNum()) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(Instant.now()) + ); + WmsQrCodeMaster qrCodeMaster = qrCodeMasters.stream() + .filter(q -> StrUtil.equals(q.getBarcodeCode(), qrCode)) + .findFirst() + .orElse(null); + VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("二维码" + qrCode + "无效"); + qrCodeMaster.setProcessStage(BarCodeProcessStage.InBound.getState()); + qrCodeMaster.setFactoryCode(order.getDwerk()); + qrCodeMaster.setStorageLocation(request.getLgort()); + qrCodeMaster.setBinLocation(iit.getBinNo()); + qrCodeMaster.setLastScanBy(UserUtil.getUserId()); + qrCodeMaster.setLastScanByname(UserUtil.getUserName()); + qrCodeMaster.setLastScanTime(LocalDateTime.now()); + }); }); inProduceBackItemService.updateBatchById(datas); - inMaterialScanRecordRespository.saveAll(records); + qrCodeMasterService.updateBatchById(qrCodeMasters); inProduceBackTicketItemService.saveBatch(ticketItems); inventoryService.in(records.stream() .collect(Collectors.groupingBy(InMaterialScanRecord::getKey)) @@ -310,6 +340,7 @@ public class InProduceBackController extends BaseController { .set(WmsInProduceBack::getState, inNum.compareTo(totalNum) >= 0 ? 2 : 1) .eq(WmsInProduceBack::getId, order.getId()) .update(); + inMaterialScanRecordRespository.saveAll(records); return ApiResult.success(); } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java index 4f5de08f..ecaec29d 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java @@ -108,6 +108,12 @@ public class InProduceOrderController extends BaseController { @Resource private IWmsQrCodeMasterService qrCodeMasterService; + @Resource + private IWmsStorageService storageService; + + @Resource + private IWmsWarehouseService warehouseService; + /** * 从SAP查询生产订单信息 * @param no 生产订单号 @@ -367,21 +373,21 @@ public class InProduceOrderController extends BaseController { if (Objects.equals(type, 0)) { child.setMustScan(false); } - child.setBinNos(binService.getBinNos(child.getMaterialNo(), child.getFactoryNo(), child.getWarehouseNo())); + child.setBinNo(binService.getBinNo(child.getMaterialNo(), child.getFactoryNo(), child.getWarehouseNo())); }); datas.addAll(children); }); return ApiResult.success(datas); } else { list.forEach(it -> { - it.setBinNos(binService.getBinNos(it.getMaterialNo(), it.getFactoryNo(), it.getWarehouseNo())); + it.setBinNo(binService.getBinNo(it.getMaterialNo(), it.getFactoryNo(), it.getWarehouseNo())); }); return ApiResult.success(list); } } /** - * 收货(PDA使用) + * 入库(PDA使用) * @param request 请求参数 */ @Transactional @@ -413,8 +419,18 @@ public class InProduceOrderController extends BaseController { List materialNos = new ArrayList<>(); List records = new ArrayList<>(); Map warehouseNoChange = new HashMap<>(); + Set allQrCodes = new HashSet<>(); + request.getMaterials().forEach(it -> { + it.getItems().forEach(item -> { + allQrCodes.addAll(item.getQrCodes()); + }); + }); + List qrCodeMasters = CollectionUtil.isEmpty(allQrCodes) ? Collections.emptyList() : qrCodeMasterService.lambdaQuery() + .lt(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState()) + .in(WmsQrCodeMaster::getBarcodeCode, allQrCodes) + .list(); datas.forEach(it -> { - InProduceOrderReceiveMaterialQO materialQO = request.getItems() + InProduceOrderReceiveMaterialQO materialQO = request.getMaterials() .stream() .filter(q -> StrUtil.equals(q.getMaterialNo(), it.getMaterialNo())) .findFirst() @@ -422,7 +438,7 @@ public class InProduceOrderController extends BaseController { if (Objects.isNull(materialQO)) { materialNos.add(it.getMaterialNo()); } else { - VUtil.trueThrowBusinessError(it.isMustScan() && CollectionUtil.isEmpty(materialQO.getQrCodes())) + VUtil.trueThrowBusinessError(it.isMustScan() && CollectionUtil.isEmpty(materialQO.getItems())) .throwMessage(materialQO.getMaterialNo() + "需要提供扫码信息"); if (!StrUtil.equals(it.getWarehouseNo(), materialQO.getWarehouseNo())) { warehouseNoChange.put(it.getId(), materialQO.getWarehouseNo()); @@ -437,34 +453,48 @@ public class InProduceOrderController extends BaseController { } } if (it.isMustScan()) { - BigDecimal num = BigDecimal.ZERO; - for (String qrCode : materialQO.getQrCodes()) { - MaterialQRCodeContentDTO content = NoUtil.getMaterialQRCodeContent(qrCode); - if (Objects.nonNull(content.getNum())) { - num = num.add(content.getNum()); + materialQO.getItems().forEach(item -> { + BigDecimal num = BigDecimal.ZERO; + for (String qrCode : item.getQrCodes()) { + MaterialQRCodeContentDTO content = NoUtil.getMaterialQRCodeContent(qrCode); + if (Objects.nonNull(content.getNum())) { + num = num.add(content.getNum()); + } + records.add(new InMaterialScanRecord() + .setSource(4) + .setSourceId(order.getId()) + .setSourceItemId(it.getId()) + .setTicketItemId(it.getId()) + .setMaterialNo(it.getMaterialNo()) + .setContent(qrCode) + .setBatchNo(content.getBatchNo()) + .setSerialNo(content.getSerialNo()) + .setUniqNo(content.getUniqNo()) + .setFactoryNo(it.getFactoryNo()) + .setWarehouseNo(it.getWarehouseNo()) + .setBinNo(item.getBinNo()) + .setNum(content.getNum()) + .setUnit(it.getUnit()) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(Instant.now()) + ); + WmsQrCodeMaster qrCodeMaster = qrCodeMasters.stream() + .filter(q -> StrUtil.equals(q.getBarcodeCode(), qrCode)) + .findFirst() + .orElse(null); + VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("二维码" + qrCode + "无效"); + qrCodeMaster.setProcessStage(BarCodeProcessStage.InBound.getState()); + qrCodeMaster.setFactoryCode(it.getFactoryNo()); + qrCodeMaster.setStorageLocation(it.getWarehouseNo()); + qrCodeMaster.setBinLocation(item.getBinNo()); + qrCodeMaster.setLastScanBy(UserUtil.getUserId()); + qrCodeMaster.setLastScanByname(UserUtil.getUserName()); + qrCodeMaster.setLastScanTime(LocalDateTime.now()); } - records.add(new InMaterialScanRecord() - .setSource(4) - .setSourceId(order.getId()) - .setSourceItemId(it.getId()) - .setTicketItemId(it.getId()) - .setMaterialNo(it.getMaterialNo()) - .setContent(qrCode) - .setBatchNo(content.getBatchNo()) - .setSerialNo(content.getSerialNo()) - .setUniqNo(content.getUniqNo()) - .setFactoryNo(it.getFactoryNo()) - .setWarehouseNo(it.getWarehouseNo()) - .setBinNos(StrUtil.split(materialQO.getBinNos(), "/")) - .setNum(content.getNum()) - .setUnit(it.getUnit()) - .setCreateBy(UserUtil.getUserName()) - .setCreateTime(Instant.now()) - ); - } - if (num.compareTo(it.getNum()) != 0) { - materialNos.add(it.getMaterialNo()); - } + if (num.compareTo(it.getNum()) != 0) { + materialNos.add(it.getMaterialNo()); + } + }); } // if (!order.getList()) { // //是否更改了储位 @@ -511,6 +541,9 @@ public class InProduceOrderController extends BaseController { .map(InMaterialScanRecord::getSerialNo) .toList(); } + if (CollectionUtil.isNotEmpty(qrCodeMasters)) { + qrCodeMasterService.updateBatchById(qrCodeMasters); + } inventoryService.in(list.stream() .filter(it -> Objects.equals(it.getParentId(), 0L)) .map(it -> new InventoryDTO() @@ -522,7 +555,6 @@ public class InProduceOrderController extends BaseController { .setSerialNo(it.getSernr()) ).toList() ); - inMaterialScanRecordRespository.saveAll(records); if (CollectionUtil.isNotEmpty(warehouseNoChange)) { produceOrderItemService.updateBatchById( warehouseNoChange.entrySet() @@ -541,6 +573,7 @@ public class InProduceOrderController extends BaseController { order.setUpdateBy(UserUtil.getUserName()); order.setUpdateTime(LocalDateTime.now()); produceOrderService.updateById(order); + inMaterialScanRecordRespository.saveAll(records); return ApiResult.success(); } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java index 25fd1ce5..871ba93e 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java @@ -21,7 +21,6 @@ import com.nflg.wms.common.pojo.dto.MaterialQRCodeContentDTO; import com.nflg.wms.common.pojo.dto.QrCodeMasterPrintDTO; import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.vo.*; -import com.nflg.wms.common.util.NumberUtil; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; @@ -47,7 +46,6 @@ import java.time.Instant; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; -import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -243,39 +241,41 @@ public class InProduceOrderSurplusController extends BaseController { .setId(IdUtil.getSnowflakeNextId()) .setTicketId(ticket.getId()) .setOrderItemId(item.getId()) - .setLgpbe(StrUtil.join(",", it.getBinNos())) + .setLgpbe(StrUtil.join(",", it.getItems().stream().map(InCostcenterBackSubmitItemQRQO::getBinNo).toList())) .setNum(BigDecimal.ZERO); ticketItems.add(ti); - it.getQrCodes().forEach(qrCode -> { - MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode); - String materialNo = qrCodeContent.getMaterialNo(); - VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr())) - .throwMessage("订单项与物料不符"); - item.setLeftNum(item.getLeftNum().subtract(qrCodeContent.getNum())); - VUtil.trueThrowBusinessError(item.getLeftNum().compareTo(BigDecimal.ZERO) < 0) - .throwMessage("物料" + materialNo + "的入库数量超出申请数量"); - ti.setNum(ti.getNum().add(qrCodeContent.getNum())); - records.add(new InMaterialScanRecord() - .setSource(7) - .setSourceId(order.getId()) - .setSourceItemId(item.getId()) - .setTicketId(ticket.getId()) - .setTicketItemId(ti.getId()) - .setMaterialNo(materialNo) - .setMaterialDesc(qrCodeContent.getMaterialDesc()) - .setUnit(item.getMeins()) - .setContent(qrCode) - .setBatchNo(qrCodeContent.getBatchNo()) - .setSerialNo(qrCodeContent.getSerialNo()) - .setFactoryNo(order.getDwerk()) - .setWarehouseNo(ticket.getLgort()) - .setBinNos(StrUtil.split(it.getBinNos(), "/")) - .setUniqNo(qrCodeContent.getUniqNo()) - .setRspos(item.getRspos()) - .setNum(qrCodeContent.getNum()) - .setCreateBy(UserUtil.getUserName()) - .setCreateTime(Instant.now()) - ); + it.getItems().forEach(iit -> { + iit.getQrCodes().forEach(qrCode -> { + MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode); + String materialNo = qrCodeContent.getMaterialNo(); + VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr())) + .throwMessage("订单项与物料不符"); + item.setLeftNum(item.getLeftNum().subtract(qrCodeContent.getNum())); + VUtil.trueThrowBusinessError(item.getLeftNum().compareTo(BigDecimal.ZERO) < 0) + .throwMessage("物料" + materialNo + "的入库数量超出申请数量"); + ti.setNum(ti.getNum().add(qrCodeContent.getNum())); + records.add(new InMaterialScanRecord() + .setSource(7) + .setSourceId(order.getId()) + .setSourceItemId(item.getId()) + .setTicketId(ticket.getId()) + .setTicketItemId(ti.getId()) + .setMaterialNo(materialNo) + .setMaterialDesc(qrCodeContent.getMaterialDesc()) + .setUnit(item.getMeins()) + .setContent(qrCode) + .setBatchNo(qrCodeContent.getBatchNo()) + .setSerialNo(qrCodeContent.getSerialNo()) + .setFactoryNo(order.getDwerk()) + .setWarehouseNo(ticket.getLgort()) + .setBinNo(iit.getBinNo()) + .setUniqNo(qrCodeContent.getUniqNo()) + .setRspos(item.getRspos()) + .setNum(qrCodeContent.getNum()) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(Instant.now()) + ); + }); }); }); inProduceOrderSurplusItemService.updateBatchById(datas); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java index b4e9a857..fa18f4b3 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutPurchaseController.java @@ -78,7 +78,7 @@ public class OutPurchaseController extends BaseController { public ApiResult searchSAP(@Valid @RequestBody @NotNull zwm3A05QO request) { ZWM3A05VO result = sapService.zwm3A05(request); result.getItems().parallelStream().forEach(it -> { - it.setBinNos(binService.getBinNos(it.getMatnr(), result.getWerks(), it.getLgort())); + it.setBinNos(binService.getBinNo(it.getMatnr(), result.getWerks(), it.getLgort())); }); return ApiResult.success(result); } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java index 5846b7a4..82b6fde6 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java @@ -881,7 +881,7 @@ public class StructuralPackageOrderController extends BaseController { log.error("{},{},{}未从SAP的ZIM_004接口查询仓库为空", it.getExternalOrderNo(), it.getSupplierCode(), it.getPackageNo()); } else { it.setWarehouseNo(dto.getWarehouseNo()); - it.setBinNos(binService.getBinNos(it.getPackageNo(), dto.getWerks(), dto.getWarehouseNo())); + it.setBinNos(binService.getBinNo(it.getPackageNo(), dto.getWerks(), dto.getWarehouseNo())); // if (dto.getTransportNum().compareTo(new BigDecimal(it.getNum()))<0){ // it.setNum(dto.getTransportNum().intValue()); // } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java index 65beec02..769936c7 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java @@ -484,7 +484,7 @@ public class TransferCompanyController extends BaseController { .setMatnr(item.getMatnr()) .setMaktx(item.getMaktx()) .setNum(item.getNum()) - .setBinIn(StrUtil.join("/", storageService.getBinNos(item.getMatnr(), ticket.getWerks(), ticket.getLgort()))) + .setBinIn(StrUtil.join("/", storageService.getBinNo(item.getMatnr(), ticket.getWerks(), ticket.getLgort()))) ).toList() ) ); @@ -515,7 +515,7 @@ public class TransferCompanyController extends BaseController { .setSerialNo(record.getSerialNo()) .setFactoryNo(ticket.getWerks()) .setWarehouseNo(qo.getLgort1()) - .setBinNos(Objects.isNull(itemQo) ? Collections.emptyList() : StrUtil.split(itemQo.getBinNos(), "/")) + .setBinNo(Objects.isNull(itemQo) ? "" : itemQo.getBinNos()) .setUniqNo(record.getUniqNo()) .setRspos(record.getRspos()) .setNum(record.getNum()) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java index 4a8f4ac0..90b089d2 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java @@ -212,8 +212,8 @@ public class TransferFactoryController extends BaseController { .setLgort(order.getLgort()) .setNum(item.getLeft()) .setMeins(item.getMeins()) - .setBinIn(StrUtil.join("/", storageService.getBinNos(item.getMatnr(), order.getWerks(), order.getUmlgo()))) - .setBinOut(StrUtil.join("/", storageService.getBinNos(item.getMatnr(), order.getWerks(), order.getLgort()))); + .setBinIn(StrUtil.join("/", storageService.getBinNo(item.getMatnr(), order.getWerks(), order.getUmlgo()))) + .setBinOut(StrUtil.join("/", storageService.getBinNo(item.getMatnr(), order.getWerks(), order.getLgort()))); vo.setQiTao(type > 0); if (Objects.equals(type, 1)) { vo.setChildren(bomService.getChildrenVO(item.getMatnr())); @@ -446,8 +446,8 @@ public class TransferFactoryController extends BaseController { .setLgort(ticket.getLgort()) .setLgort1(ticket.getUmlgo()) .setNum(it.getNum()) - .setBinIn(StrUtil.join("/", storageService.getBinNos(it.getMatnr(), ticket.getWerks(), ticket.getUmlgo()))) - .setBinOut(StrUtil.join("/", storageService.getBinNos(it.getMatnr(), ticket.getWerks(), ticket.getLgort()))) + .setBinIn(StrUtil.join("/", storageService.getBinNo(it.getMatnr(), ticket.getWerks(), ticket.getUmlgo()))) + .setBinOut(StrUtil.join("/", storageService.getBinNo(it.getMatnr(), ticket.getWerks(), ticket.getLgort()))) ).toList()) ); } @@ -479,12 +479,13 @@ public class TransferFactoryController extends BaseController { .setSerialNo(record.getSerialNo()) .setFactoryNo(ticket.getWerks()) .setWarehouseNo(qo.getLgort1()) - .setBinNos(StrUtil.split(qo.getItems() + .setBinNo(qo.getItems() .stream() .filter(it -> Objects.equals(it.getId(), record.getTicketItemId())) .findFirst() .orElse(new InSubmitItemQO()) - .getBinNos(), "/")) + .getBinNos() + ) .setUniqNo(record.getUniqNo()) .setRspos(record.getRspos()) .setNum(record.getNum()) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BinService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BinService.java index 6854517f..ba398fae 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BinService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BinService.java @@ -17,22 +17,7 @@ public class BinService { @Resource private IWmsStorageService storageService; - @Resource - private SapService sapService; - - public String getBinNos(String materialNo, String factory, String warehouseNo) { - Set bins = storageService.getBinNos(materialNo, factory, warehouseNo); -// if (CollectionUtil.isNotEmpty(bins)){ -// return String.join("/",bins); -// }else { -// List dtos = sapService.zwm3A01(factory, List.of(warehouseNo), List.of(materialNo), null, null); -// if (CollectionUtil.isEmpty(dtos)){ -// log.error("{},{},{}未从SAP的ZWM3A01接口查询到数据", factory, warehouseNo, materialNo); -// return null; -// }else { -// return dtos.get(0).getBinNos(); -// } -// } - return String.join("/",bins); + public String getBinNo(String materialNo, String factory, String warehouseNo) { + return storageService.getBinNo(materialNo, factory, warehouseNo); } } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/document/InMaterialScanRecord.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/document/InMaterialScanRecord.java index 0e75b981..a6ea32d1 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/document/InMaterialScanRecord.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/document/InMaterialScanRecord.java @@ -45,9 +45,9 @@ public class InMaterialScanRecord { private String warehouseNo; /** - * 储位列表 + * 储位 */ - private List binNos; + private String binNo; /** * 二维码内容 diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InCostcenterBackSubmitItemQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InCostcenterBackSubmitItemQO.java index 9f91d91a..e291b744 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InCostcenterBackSubmitItemQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InCostcenterBackSubmitItemQO.java @@ -1,5 +1,6 @@ package com.nflg.wms.common.pojo.qo; +import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; @@ -16,15 +17,10 @@ public class InCostcenterBackSubmitItemQO { @NotNull private Long orderItemId; - /** - * 实际入库储位编号列表 - */ - @NotBlank - private String binNos; - /** * 二维码列表 */ + @Valid @NotEmpty - private List qrCodes; + private List items; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InCostcenterBackSubmitItemQRQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InCostcenterBackSubmitItemQRQO.java new file mode 100644 index 00000000..bd357d7a --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InCostcenterBackSubmitItemQRQO.java @@ -0,0 +1,21 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; + +@Data +public class InCostcenterBackSubmitItemQRQO { + + /** + * 实际入库储位编号列表 + */ + private String binNo; + + /** + * 二维码列表 + */ + @NotEmpty + private List qrCodes; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceBackSubmitQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceBackSubmitQO.java index 667259c9..630a1749 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceBackSubmitQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceBackSubmitQO.java @@ -1,5 +1,6 @@ package com.nflg.wms.common.pojo.qo; +import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; import lombok.Data; @@ -21,6 +22,7 @@ public class InProduceBackSubmitQO { /** * 二维码列表 */ + @Valid @NotEmpty - private List qrCodes; + private List items; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderReceiveMaterialQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderReceiveMaterialQO.java index 68c5e985..5f3a39b2 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderReceiveMaterialQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderReceiveMaterialQO.java @@ -1,6 +1,8 @@ package com.nflg.wms.common.pojo.qo; +import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; import lombok.Data; import java.util.List; @@ -17,15 +19,12 @@ public class InProduceOrderReceiveMaterialQO { /** * 仓库编号 */ + @NotBlank private String warehouseNo; - /** - * 储位编号列表 - */ - private String binNos; - /** * 二维码列表 */ - private List qrCodes; + @Valid + private List items; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderReceiveQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderReceiveQO.java index 1bcd7677..75374f16 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderReceiveQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderReceiveQO.java @@ -21,5 +21,5 @@ public class InProduceOrderReceiveQO { */ @Valid @NotEmpty - private List items; + private List materials; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/InProduceOrderItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/InProduceOrderItemVO.java index c439e679..391cf1b8 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/InProduceOrderItemVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/InProduceOrderItemVO.java @@ -55,7 +55,7 @@ public class InProduceOrderItemVO { /** * 储位 */ - private String binNos; + private String binNo; /** * 批次号 diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/OutProduceItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/OutProduceItemVO.java index 3dd2666b..6c873de3 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/OutProduceItemVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/OutProduceItemVO.java @@ -76,4 +76,10 @@ public class OutProduceItemVO { public boolean getUseChildren() { return CollectionUtil.isNotEmpty(children); } + + /** + * 是否启用储位管理 + */ + @JsonProperty("isDisableLocation") + private Boolean isDisableLocation; } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStorageMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStorageMapper.java index e99c9333..33772e0b 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStorageMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStorageMapper.java @@ -29,7 +29,7 @@ public interface WmsStorageMapper extends BaseMapper { List getWarehouseNo(String factoryNo, String materialNo); - String getBinNos(String materialNo, String factoryNo, String warehouseNo); + String getBinNo(String materialNo, String factoryNo, String warehouseNo); List searchNonSync(); diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsWarehouseMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsWarehouseMapper.java index f4026ab9..408ccc95 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsWarehouseMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsWarehouseMapper.java @@ -32,4 +32,6 @@ public interface WmsWarehouseMapper extends BaseMapper { List getListByIds(List list); WarehouseVO getInfo(Long id); + + Boolean isEnableLocation(String factoryNo, String warehouseNo); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStorageService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStorageService.java index 7c331183..e040c0dd 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStorageService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStorageService.java @@ -39,7 +39,7 @@ public interface IWmsStorageService extends IService { List getWarehouseNo(String factoryNo, String materialNo); - Set getBinNos(String materialNo, @NotBlank String factoryNo, String warehouseNo); + String getBinNo(String materialNo, @NotBlank String factoryNo, String warehouseNo); List searchNonSync(); diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsWarehouseService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsWarehouseService.java index 9eb699a6..f41e75ba 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsWarehouseService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsWarehouseService.java @@ -43,4 +43,6 @@ public interface IWmsWarehouseService extends IService { List getListByIds(List list); WarehouseVO getInfo(Long id); + + Boolean isEnableLocation(String factoryNo, String warehouseNo); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStorageServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStorageServiceImpl.java index 91e39219..4c3047ed 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStorageServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStorageServiceImpl.java @@ -102,8 +102,8 @@ public class WmsStorageServiceImpl extends ServiceImpl getBinNos(String materialNo, String factoryNo, String warehouseNo) { - return new HashSet<>(StrUtil.split(baseMapper.getBinNos(materialNo,factoryNo,warehouseNo), ",")); + public String getBinNo(String materialNo, String factoryNo, String warehouseNo) { + return baseMapper.getBinNo(materialNo,factoryNo,warehouseNo); } @Override diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsWarehouseServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsWarehouseServiceImpl.java index 4d3c30b3..69c8d651 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsWarehouseServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsWarehouseServiceImpl.java @@ -120,4 +120,9 @@ public class WmsWarehouseServiceImpl extends ServiceImpl - SELECT bin.no FROM wms_storage s INNER JOIN wms_bin bin ON s.bin_id = bin.id diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsWarehouseMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsWarehouseMapper.xml index 8813f998..13801df3 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsWarehouseMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsWarehouseMapper.xml @@ -77,4 +77,11 @@ left join dictionary_item di on w.factory_id = di.id where w.id = #{id} + + diff --git a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java index e8d7cf73..4a1c1e6c 100644 --- a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java +++ b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java @@ -11,6 +11,7 @@ import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO; import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO; import com.nflg.wms.common.util.EecExcelUtil; +import com.nflg.wms.common.util.NumberUtil; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; @@ -113,12 +114,35 @@ public class MaterialCodeController extends BaseController { /** * 清单-删除 */ + @Transactional @PostMapping("delete") public ApiResult delete(@RequestBody @NotEmpty List ids) { - materialCodeService.lambdaUpdate() + List idsForDelete = materialCodeService.lambdaQuery() + .select(WmsShipmentMaterialCode::getId) .eq(WmsShipmentMaterialCode::getStatus, 0) .in(WmsShipmentMaterialCode::getId, ids) - .remove(); + .list() + .stream() + .map(WmsShipmentMaterialCode::getId) + .toList(); + if (CollectionUtil.isNotEmpty(idsForDelete)) { + materialCodeService.removeByIds(idsForDelete); + materialCodeForwardService.lambdaUpdate() + .in(WmsShipmentMaterialCodeForward::getMaterialCodeId) + .remove(); + idsForDelete = materialCodeItemService.lambdaQuery() + .in(WmsShipmentMaterialCodeItem::getMaterialCodeId, idsForDelete) + .list() + .stream() + .map(WmsShipmentMaterialCodeItem::getId) + .toList(); + if (CollectionUtil.isNotEmpty(idsForDelete)) { + materialCodeItemService.removeByIds(idsForDelete); + materialCodeItemQrService.lambdaUpdate() + .in(WmsShipmentMaterialCodeItemQr::getItemId, idsForDelete) + .remove(); + } + } return ApiResult.success(); } @@ -193,21 +217,21 @@ public class MaterialCodeController extends BaseController { log.debug("第{}行:{}", row.getRowNum(), row); if (row.getRowNum() == 1) { materialCode.setCustomerName(row.getString(2)); - VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getCustomerName())) + VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getCustomerName())) .throwMessage("客户名称不能为空"); } else if (row.getRowNum() == 2) { materialCode.setDeviceNo(row.getString(2)); - VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getDeviceNo())) + VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getDeviceNo())) .throwMessage("设备编号不能为空"); materialCode.setOrderDate(row.getLocalDate(6).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); - VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getOrderDate())) + VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getOrderDate())) .throwMessage("订单日期不能为空"); } else if (row.getRowNum() == 3) { materialCode.setSoNo(row.getString(2)); - VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getSoNo())) + VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getSoNo())) .throwMessage("销售订单号不能为空"); materialCode.setMaterialNo(row.getString(6)); - VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getMaterialNo())) + VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getMaterialNo())) .throwMessage("设备料号不能为空"); } else if (row.getRowNum() > 4 && StrUtil.isNotBlank(row.getString(1))) { WmsShipmentMaterialCodeItem item = new WmsShipmentMaterialCodeItem(); @@ -225,6 +249,8 @@ public class MaterialCodeController extends BaseController { item.setBoxNo(row.getString(9)); item.setCreateBy(UserUtil.getUserName()); item.setCreateTime(LocalDateTime.now()); + item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum())); + item.setPackingLeft(item.getPackingNum()); items.add(item); qrs.add(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) @@ -271,18 +297,20 @@ public class MaterialCodeController extends BaseController { item.setId(IdUtil.getSnowflakeNextId()); item.setCreateBy(UserUtil.getUserName()); item.setCreateTime(LocalDateTime.now()); - BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP); - BigDecimal decimalValue = result.remainder(BigDecimal.ONE); - item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue()); +// BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP); +// BigDecimal decimalValue = result.remainder(BigDecimal.ONE); +// item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue()); + item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum())); item.setPackingLeft(item.getPackingNum()); - int count = decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue(); +// int count = decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue(); for (int i = 1; i <= item.getPackingNum(); i++) { materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr() - .setItemId(item.getId()) - .setNo(KeyUtil.next()) - .setNum(i == count && decimalValue.compareTo(BigDecimal.ZERO) > 0 ? decimalValue : item.getMinPackagingNum()) - .setCreateBy(UserUtil.getUserName()) - .setCreateTime(LocalDateTime.now()) + .setItemId(item.getId()) + .setNo(KeyUtil.next()) +// .setNum(i == count && decimalValue.compareTo(BigDecimal.ZERO) > 0 ? decimalValue : item.getMinPackagingNum()) + .setNum(NumberUtil.getPackageNum(item.getNum(), item.getMinPackagingNum(), item.getPackingNum(), i)) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()) ); } materialCodeItemService.save(item); @@ -318,16 +346,17 @@ public class MaterialCodeController extends BaseController { materialCodeItemQrService.lambdaUpdate() .eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId()) .remove(); - BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP); - BigDecimal decimalValue = result.remainder(BigDecimal.ONE); - item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue()); +// BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP); +// BigDecimal decimalValue = result.remainder(BigDecimal.ONE); +// item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue()); + item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum())); item.setPackingLeft(item.getPackingNum()); - int count = decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue(); +// int count = decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue(); for (int i = 1; i <= item.getPackingNum(); i++) { materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) .setNo(KeyUtil.next()) - .setNum(i == count && decimalValue.compareTo(BigDecimal.ZERO) > 0 ? decimalValue : item.getMinPackagingNum()) + .setNum(NumberUtil.getPackageNum(item.getNum(), item.getMinPackagingNum(), item.getPackingNum(), i)) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) ); @@ -551,7 +580,7 @@ public class MaterialCodeController extends BaseController { return exportItemZip(datas); } - private ResponseEntity exportItemZip(List datas) throws Exception{ + private ResponseEntity exportItemZip(List datas) throws Exception { Map iamges = materialService.lambdaQuery() .select(WmsShipmentMaterial::getNo, WmsShipmentMaterial::getImage) .in(WmsShipmentMaterial::getNo, datas.stream().map(ShipmentMaterialCodeQRVO::getMaterialNo).collect(Collectors.toSet())) diff --git a/nflg-wms-shipment/src/main/resources/template/物料码打印导出模板.xlsx b/nflg-wms-shipment/src/main/resources/template/物料码打印导出模板.xlsx index bd2eb79e..f4c5fd94 100644 Binary files a/nflg-wms-shipment/src/main/resources/template/物料码打印导出模板.xlsx and b/nflg-wms-shipment/src/main/resources/template/物料码打印导出模板.xlsx differ