From 118a14831db33323bf85ad3b79c0393b57a9c4c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 21 Oct 2025 17:51:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=80=E4=BA=9B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InCostCenterBackController.java | 14 +-- .../controller/InProduceBackController.java | 75 +++---------- .../controller/OutAssistanceController.java | 12 -- .../controller/OutCostCenterController.java | 14 +-- .../controller/OutProduceController.java | 16 +-- .../controller/TransferCompanyController.java | 14 +-- .../controller/TransferFactoryController.java | 14 +-- .../admin/service/BinControllerService.java | 64 +++++++---- .../admin/service/BomControllerService.java | 3 +- .../service/StorageControllerService.java | 58 +++++++--- .../com/nflg/wms/common/constant/STATE.java | 2 +- .../common/pojo/dto/AllocationOrderDTO.java | 6 +- .../common/pojo/dto/BinExcelExportDTO.java | 19 +++- .../common/pojo/dto/BinExcelImportDTO.java | 28 +---- .../dto/DepartmentMaterialRequisitionDTO.java | 4 + .../dto/DepartmentMaterialReturnSlipDTO.java | 4 + .../pojo/dto/StorageExcelExportDTO.java | 26 +---- .../pojo/dto/StorageExcelImportDTO.java | 24 ++-- .../pojo/dto/SubcontractedOrderDTO.java | 4 + .../wms/common/pojo/dto/TransferOrderDTO.java | 4 + .../nflg/wms/common/pojo/dto/ZWM3A02QO.java | 29 +++++ .../qo/InProduceOrderGenerateMaterialsQO.java | 2 + .../nflg/wms/common/pojo/qo/QRCodeQO1.java | 2 + .../nflg/wms/common/pojo/qo/StorageAddQO.java | 18 ++- .../wms/common/pojo/vo/ZWM3A05ItemVO.java | 3 +- .../nflg/wms/common/pojo/vo/ZWM3A05VO.java | 4 + .../nflg/wms/common/pojo/vo/Zwm3a07VO.java | 4 + .../nflg/wms/common/pojo/vo/Zwm3a09VO.java | 4 + .../service/impl/WmsBomServiceImpl.java | 2 +- .../mapper/WmsOutProduceTicketItemMapper.xml | 5 +- .../SyncStorageFromSAPProcessor.java | 1 + .../wms/scheduled/service/SapService.java | 25 +++-- .../com/nflg/wms/scheduled/util/JCoUtil.java | 103 ++++++++++++++++++ .../java/com/nflg/scheduled/DeployTest.java | 4 +- 34 files changed, 353 insertions(+), 258 deletions(-) create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/ZWM3A02QO.java create mode 100644 nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/util/JCoUtil.java 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 d04e349a..4cd15379 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 @@ -331,12 +331,6 @@ public class InCostCenterBackController extends BaseController { VUtil.trueThrowBusinessError(Objects.isNull(info)).throwMessage("退料单不存在"); InCostcenterBackInfoVO order = Convert.convert(InCostcenterBackInfoVO.class, info); List list = Convert.toList(InCostcenterBackItemVO.class, inCostcenterBackItemService.getList(id)); -// InCostcenterBackInfoVO order = new InCostcenterBackInfoVO(); -// order.setNo(NoUtil.getOutCostcenterNo()); -// List list = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(1, 100); i < count; i++) { -// list.add(new WmsInCostcenterBackItem().setMatnr(RandomUtil.randomNumbers(11)).setMaktx("非金属联件和紧固件等 M6 DIN 982 不锈钢304")); -// } list.forEach(item -> item.setLgort(order.getLgort())); Map base = new HashMap<>(); base.put("date", DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd")); @@ -356,14 +350,8 @@ public class InCostCenterBackController extends BaseController { public void exportTicket(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception { InCostcenterBackInfoVO order = inCostcenterBackTicketService.getInfo(id); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("退料入库单不存在"); - order.setNo(order.getTicketNo()); +// order.setNo(order.getTicketNo()); List list = Convert.toList(InCostcenterBackItemVO.class, inCostcenterBackTicketItemService.getList(id)); -// InCostcenterBackInfoVO order = new InCostcenterBackInfoVO(); -// order.setNo(NoUtil.getOutCostcenterNo()); -// List list = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(1, 100); i < count; i++) { -// list.add(new WmsInCostcenterBackItem().setMatnr(RandomUtil.randomNumbers(11)).setMaktx("非金属联件和紧固件等 M6 DIN 982 不锈钢304")); -// } list.forEach(item -> item.setLgort(order.getLgort())); Map base = new HashMap<>(); base.put("date", DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd")); 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 a9be7833..5ae6163a 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 @@ -82,42 +82,6 @@ public class InProduceBackController extends BaseController { @PostMapping("searchSAP") public ApiResult> searchSAP(@Valid @RequestBody Zwm3a09QO request) { return ApiResult.success(sapService.zwm3a09(request)); -// List vos = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(3, 30); i < count; i++) { -// vos.add(new Zwm3a09VO() -// .setBdter(DateUtil.format(RandomUtil.randomDate(DateUtil.date(), DateField.DAY_OF_YEAR, 1, 300), "yyyy-MM-dd")) -// .setAufnr(RandomUtil.randomNumbers(10)) -// .setKtext(RandomUtil.randomString(10)) -// .setPlnbez(RandomUtil.randomString(10)) -// .setMaktx(RandomUtil.randomString(10)) -// .setLgpbe(RandomUtil.randomString(4)) -// .setMatnr(RandomUtil.randomString(11)) -// .setName(RandomUtil.randomString(10)) -// .setQlsl(RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("100"))) -// .setSqsl(RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("100"))) -// .setSqsl2(RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("100"))) -// .setSqsl3(RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("100"))) -// .setBdmng(RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("100"))) -// .setLabst(RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("100"))) -// .setKcqls(RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("100"))) -// .setLgort2(RandomUtil.randomString(4)) -// .setMeins(RandomUtil.randomString(4)) -// .setEkgrp(RandomUtil.randomString(4)) -// .setDispo(RandomUtil.randomString(4)) -// .setRsnum(RandomUtil.randomNumbers(10)) -// .setMaktx2(RandomUtil.randomString(10)) -// .setVornr(RandomUtil.randomNumbers(10)) -// .setSernr(RandomUtil.randomNumbers(10)) -// .setJtsn(RandomUtil.randomNumbers(10)) -// .setCusn(RandomUtil.randomNumbers(10)) -// .setDwerk(RandomUtil.randomString(4)) -// .setRsnum2(RandomUtil.randomNumbers(10)) -// .setRspos(RandomUtil.randomNumbers(10)) -// .setEnmng(RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("100"))) -// .setInsme(RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("100"))) -// ); -// } -// return ApiResult.success(vos); } /** @@ -218,6 +182,7 @@ public class InProduceBackController extends BaseController { .setItems(datas.stream() .filter(item -> item.getSqsl().compareTo(item.getNum()) > 0) .map(item -> new OutProduceItemVO() + .setId(item.getId()) .setLgort2(order.getLgort2()) .setLgpbe(item.getLgpbe()) .setMaktx2(item.getMaktx2()) @@ -277,21 +242,21 @@ public class InProduceBackController extends BaseController { 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()) + .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()) ); }); inProduceBackItemService.updateBatchById(datas); @@ -373,12 +338,6 @@ public class InProduceBackController extends BaseController { WmsInProduceBack order = inProduceBackService.getById(id); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("退料单不存在"); List list = inProduceBackItemService.getList(id); -// WmsInProduceBack order = new WmsInProduceBack() -// .setNo("IPB" + DateUtil.format(LocalDateTime.now(), "yyyyMMdd") + RandomUtil.randomNumbers(4)); -// List list = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(1, 100); i < count; i++) { -// list.add(new WmsInProduceBackItem().setMatnr(RandomUtil.randomNumbers(10))); -// } list.forEach(it -> it.setNum(null)); Map base = new HashMap<>(); base.put("date", DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd")); @@ -398,14 +357,8 @@ public class InProduceBackController extends BaseController { public void exportTicket(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception { InProduceBackTicketVO order = inProduceBackTicketService.getInfo(id); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("退料出库单不存在"); - order.setNo(order.getTicketNo()); +// order.setNo(order.getTicketNo()); List list = inProduceBackTicketItemService.getList(id); -// InProduceBackTicketVO order = new InProduceBackTicketVO(); -// order.setNo("IPB" + DateUtil.format(LocalDateTime.now(), "yyyyMMdd") + RandomUtil.randomNumbers(4)); -// List list = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(1, 100); i < count; i++) { -// list.add(new InProduceBackTicketItemVO().setMatnr(RandomUtil.randomNumbers(10))); -// } Map base = new HashMap<>(); base.put("date", DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd")); base.put("qrcode", QRCodeUtil.generateQRCodeBase64(order.getNo(), 100, 100)); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java index 83339ab4..81406dca 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java @@ -321,12 +321,6 @@ public class OutAssistanceController extends BaseController { WmsOutAssistance order = outAssistanceService.getById(id); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("领料单不存在"); List list = Convert.toList(OutAssistanceItemVO.class, outAssistanceItemService.getList(id)); -// WmsOutAssistance order = new WmsOutAssistance(); -// order.setNo(NoUtil.getOutAssistanceNo()); -// List list = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(1, 10); i < count; i++) { -// list.add(new OutAssistanceItemVO().setMatnr(RandomUtil.randomNumbers(11)).setMaktx("非金属联件和紧固件等 M6 DIN 982 不锈钢304")); -// } list.forEach(it -> { it.setEbeln(order.getEbeln()); it.setLgort1(order.getLgort1()); @@ -355,12 +349,6 @@ public class OutAssistanceController extends BaseController { OutAssistanceInfoVO order = outAssistanceTicketService.getInfo(id); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("领料出库单不存在"); List list = outAssistanceTicketItemService.getList(id); -// OutAssistanceInfoVO order = new OutAssistanceInfoVO(); -// order.setNo(NoUtil.getOutAssistanceNo()); -// List list = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(1, 50); i < count; i++) { -// list.add(new OutAssistanceItemVO().setMatnr1(RandomUtil.randomNumbers(11)).setMaktx1("非金属联件和紧固件等 M6 DIN 982 不锈钢304")); -// } list.forEach(it -> { it.setLgort1(order.getLgort1()); }); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java index 4c2a1beb..2ce23590 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java @@ -317,12 +317,6 @@ public class OutCostCenterController extends BaseController { VUtil.trueThrowBusinessError(Objects.isNull(info)).throwMessage("领料单不存在"); OutCostcenterVO order = Convert.convert(OutCostcenterVO.class, info); List list = outCostcenterItemService.getList(id); -// OutCostcenterVO order = new OutCostcenterVO(); -// order.setNo(NoUtil.getOutCostcenterNo()); -// List list = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(1, 100); i < count; i++) { -// list.add(new WmsOutCostcenterItem().setMatnr(RandomUtil.randomNumbers(11)).setMaktx("非金属联件和紧固件等 M6 DIN 982 不锈钢304")); -// } Map base = new HashMap<>(); base.put("date", DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd")); base.put("qrcode", QRCodeUtil.generateQRCodeBase64(order.getNo(), 100, 100)); @@ -341,14 +335,8 @@ public class OutCostCenterController extends BaseController { public void exportTicket(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception { OutCostcenterInfoVO order = outCostcenterTicketService.getInfo(id); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("领料出库单不存在"); - order.setNo(order.getTicketNo()); +// order.setNo(order.getTicketNo()); List list = outCostcenterTicketItemService.getList(id); -// OutCostcenterInfoVO order = new OutCostcenterInfoVO(); -// order.setNo(NoUtil.getOutCostcenterNo()); -// List list = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(1, 100); i < count; i++) { -// list.add(new OutCostcenterInfoItemVO().setMatnr(RandomUtil.randomNumbers(11)).setMaktx("非金属联件和紧固件等 M6 DIN 982 不锈钢304")); -// } list.forEach(it -> it.setLgort(order.getLgort())); Map base = new HashMap<>(); base.put("date", DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd")); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java index a8e5d63f..c04e9919 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java @@ -347,6 +347,8 @@ public class OutProduceController extends BaseController { .setUniqNo(qrCodeContent.getUniqNo()) .setFactoryNo(order.getDwerk()) .setWarehouseNo(request.getLgort()) + .setUnit(item.getMeins()) + .setRspos(item.getRspos()) .setNum(qrNum) .setCreateBy(UserUtil.getUserName()) .setCreateTime(Instant.now()) @@ -469,14 +471,8 @@ public class OutProduceController extends BaseController { public void exportTicket1(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception { OutProduceTicketVO order = outProduceTicketService.getInfo(id); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("补料出库单不存在"); - order.setNo(order.getTicketNo()); +// order.setNo(order.getTicketNo()); List list = outProduceTicketItemService.getList(id); -// OutProduceTicketVO order = new OutProduceTicketVO(); -// order.setNo(RandomUtil.randomNumbers(5)); -// List list = new ArrayList<>(); -// for (int i = 0, count = 22; i < count; i++) { -// list.add(new OutProduceInfoItemVO().setMatnr(RandomUtil.randomNumbers(10))); -// } list.forEach(it -> it.setAufnr(order.getAufnr())); Map base = new HashMap<>(); base.put("date", DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd")); @@ -497,12 +493,6 @@ public class OutProduceController extends BaseController { OutProduceTicketVO order = outProduceTicketService.getInfo(id); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("领料出库单不存在"); List list = outProduceTicketItemService.getList(id); -// OutProduceTicketVO order = new OutProduceTicketVO() -// .setTicketNo(RandomUtil.randomNumbers(5)); -// List list = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(1, 100); i < count; i++) { -// list.add(new OutProduceInfoItemVO().setMatnr(RandomUtil.randomNumbers(10))); -// } list.forEach(it -> it.setAufnr(order.getAufnr())); Map base = new HashMap<>(); base.put("createDate", DateUtil.format(order.getCreateTime(), "yyyy-MM-dd")); 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 aa38902f..12fc9037 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 @@ -492,12 +492,6 @@ public class TransferCompanyController extends BaseController { WmsTransferCompany order = transferCompanyService.getById(id); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("转储单不存在"); List list = Convert.toList(TransferCompanyItemVO.class, transferCompanyItemService.getList(id)); -// WmsTransferCompany order = new WmsTransferCompany(); -// order.setNo(NoUtil.getTransferCompanyNo()); -// List list = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(1, 100); i < count; i++) { -// list.add(new WmsTransferCompanyItem().setMatnr(RandomUtil.randomNumbers(11)).setMaktx("非金属联件和紧固件等 M6 DIN 982 不锈钢304")); -// } list.forEach(it -> { it.setEbeln(order.getEbeln()); }); @@ -520,19 +514,13 @@ public class TransferCompanyController extends BaseController { TransferCompanyTicketVO order = transferCompanyTicketService.getInfo(id); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("转储单不存在"); List list = transferCompanyTicketItemService.getList(id); -// TransferCompanyTicketVO order = new TransferCompanyTicketVO(); -// order.setNo(NoUtil.getTransferCompanyNo()); -// List list = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(1, 100); i < count; i++) { -// list.add(new TransferCompanyItemVO().setMatnr(RandomUtil.randomNumbers(11)).setMaktx("非金属联件和紧固件等 M6 DIN 982 不锈钢304")); -// } list.forEach(it -> { it.setLgort(order.getLgort()); it.setWerks(order.getWerks()); }); Map base = new HashMap<>(); base.put("date", DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd")); - base.put("qrcode", QRCodeUtil.generateQRCodeBase64(order.getTicketNo(), 100, 100)); + base.put("qrcode", QRCodeUtil.generateQRCodeBase64(order.getNo(), 100, 100)); Map variables = new HashMap<>(); variables.put("info", order); variables.put("base", base); 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 a782d5a1..b7756c8d 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 @@ -454,12 +454,6 @@ public class TransferFactoryController extends BaseController { WmsTransferFactory order = transferFactoryService.getById(id); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("调拨单不存在"); List list = Convert.toList(TransferFactoryItemVO.class, transferFactoryItemService.getList(id)); -// WmsTransferFactory order = new WmsTransferFactory(); -// order.setNo(NoUtil.getTransferFactoryNo()); -// List list = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(1, 100); i < count; i++) { -// list.add(new WmsTransferFactoryItem().setMatnr(RandomUtil.randomNumbers(11)).setMaktx("非金属联件和紧固件等 M6 DIN 982 不锈钢304")); -// } list.forEach(it -> { it.setLgort(order.getLgort()); it.setUmlgo(order.getUmlgo()); @@ -483,19 +477,13 @@ public class TransferFactoryController extends BaseController { TransferFactoryTicketInfoVO order = transferFactoryTicketService.getInfo(id); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("调拨单不存在"); List list = transferFactoryTicketItemService.getList(id); -// TransferFactoryTicketInfoVO order = new TransferFactoryTicketInfoVO(); -// order.setNo(NoUtil.getTransferFactoryNo()); -// List list = new ArrayList<>(); -// for (int i = 0, count = RandomUtil.randomInt(1, 100); i < count; i++) { -// list.add(new TransferFactoryItemVO().setMatnr(RandomUtil.randomNumbers(11)).setMaktx("非金属联件和紧固件等 M6 DIN 982 不锈钢304")); -// } list.forEach(it -> { it.setLgort(order.getLgort()); it.setUmlgo(order.getUmlgo()); }); Map base = new HashMap<>(); base.put("date", DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd")); - base.put("qrcode", QRCodeUtil.generateQRCodeBase64(order.getTicketNo(), 100, 100)); + base.put("qrcode", QRCodeUtil.generateQRCodeBase64(order.getNo(), 100, 100)); Map variables = new HashMap<>(); variables.put("info", order); variables.put("base", base); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BinControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BinControllerService.java index 0e30dea9..75c5290b 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BinControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BinControllerService.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; 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.Constant; import com.nflg.wms.common.constant.STATE; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.dto.BinExcelExportDTO; @@ -22,8 +23,10 @@ import com.nflg.wms.common.util.DateTimeUtil; import com.nflg.wms.common.util.EecExcelUtil; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; +import com.nflg.wms.repository.entity.DictionaryItem; import com.nflg.wms.repository.entity.WmsBin; import com.nflg.wms.repository.entity.WmsWarehouse; +import com.nflg.wms.repository.service.IDictionaryItemService; import com.nflg.wms.repository.service.IWmsBinService; import com.nflg.wms.repository.service.IWmsWarehouseService; import com.nflg.wms.starter.service.FileUploadService; @@ -62,6 +65,9 @@ public class BinControllerService { @Resource private FileUploadService fileUploadService; + @Resource + private IDictionaryItemService dictionaryItemService; + public void add(@Valid BinAddQO request) { WmsBin bin = Convert.convert(WmsBin.class, request); bin.setCreateBy(UserUtil.getUserName()); @@ -114,28 +120,38 @@ public class BinControllerService { for (BinExcelImportDTO dto : data) { WmsBin bin = new WmsBin(); StringBuilder sb = new StringBuilder(); - if (StrUtil.isBlank(dto.getWarehouseNo())) { - sb.append("仓库编号不能为空;"); - }else if(StrUtil.isBlank(dto.getNo())){ - sb.append("储位编号不能为空;"); + String factoryNo = StrUtil.trim(dto.getFactoryNo()); + DictionaryItem factory = null; + if (StrUtil.isBlank(dto.getFactoryNo())) { + sb.append("工厂编号不能为空;"); + } else { + factory = dictionaryItemService.getByCode(Constant.DICTIONARY_FACTORY, factoryNo); + if (Objects.isNull(factory)) { + sb.append("工厂编号无效;"); + } } - else { - WmsWarehouse warehouse=wmsWarehouseService.lambdaQuery().eq(WmsWarehouse::getNo, dto.getWarehouseNo()).one(); - if (Objects.isNull(warehouse)){ - sb.append("仓库编号无效;"); - }else { - bin = wmsBinService.lambdaQuery().eq(WmsBin::getNo, dto.getNo()).eq(WmsBin::getWarehouseId, warehouse.getId()).one(); - if (Objects.isNull(bin)) { - bin = new WmsBin() - .setNo(dto.getNo()) - .setWarehouseId(warehouse.getId()) - .setEnable(true) - .setCreateBy(UserUtil.getUserName()) - .setCreateTime(LocalDateTime.now()); - }else { - bin.setUpdateBy(UserUtil.getUserName()); - bin.setUpdateTime(LocalDateTime.now()); - } + String warehouseNo = StrUtil.trim(dto.getWarehouseNo()); + WmsWarehouse warehouse = null; + if (StrUtil.isBlank(warehouseNo)) { + sb.append("仓库编号不能为空;"); + } else if (Objects.nonNull(factory)) { + warehouse = wmsWarehouseService.lambdaQuery().eq(WmsWarehouse::getFactoryId, factory.getId()).eq(WmsWarehouse::getNo, warehouseNo).one(); + } + String binNos = StrUtil.trim(dto.getNo()); + if (StrUtil.isBlank(binNos)) { + sb.append("储位编号不能为空;"); + } else if (Objects.nonNull(warehouse)) { + bin = wmsBinService.lambdaQuery().eq(WmsBin::getNo, dto.getNo()).eq(WmsBin::getWarehouseId, warehouse.getId()).one(); + if (Objects.isNull(bin)) { + bin = new WmsBin() + .setNo(dto.getNo()) + .setWarehouseId(warehouse.getId()) + .setEnable(true) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()); + } else { + bin.setUpdateBy(UserUtil.getUserName()); + bin.setUpdateTime(LocalDateTime.now()); } } if (StrUtil.isBlank(dto.getName())){ @@ -161,8 +177,10 @@ public class BinControllerService { response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("储位导出.xlsx", StandardCharsets.UTF_8)); if (CollectionUtil.isEmpty(datas)) { datas.add(new BinExcelExportDTO() - .setNo("(必填)储位编号") - .setName("(必填)储位名称") + .setFactoryNo("(必填)工厂编号") + .setWarehouseNo("(必填)库位编号") + .setNo("(必填)仓位编号") + .setName("(必填)仓位名称") .setRemark("备注信息,此行为提示信息,导入时请删除")); } new Workbook() diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BomControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BomControllerService.java index 01cddfed..e2314c4c 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BomControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BomControllerService.java @@ -142,7 +142,7 @@ public class BomControllerService { sb.append("父级物料编号无效"); } else { WmsBom pb = bomForSave.stream() - .filter(it -> Objects.equals(it.getId(), 0L) && StrUtil.equals(it.getNo(), dto.getParentNo())) + .filter(it -> Objects.equals(it.getParentId(), 0L) && StrUtil.equals(it.getNo(), dto.getParentNo())) .findFirst() .orElse(null); if (Objects.isNull(pb)) { @@ -150,6 +150,7 @@ public class BomControllerService { if (Objects.isNull(pb)) { pb = new WmsBom() .setId(IdUtil.getSnowflakeNextId()) + .setParentId(0L) .setNo(dto.getParentNo()) .setDrawingNo(pm.getDrawingNo()) .setDescribe(pm.getMaterialDesc()) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StorageControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StorageControllerService.java index df165085..1f4141cc 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StorageControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StorageControllerService.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.nflg.wms.common.constant.Constant; import com.nflg.wms.common.constant.STATE; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.dto.BomMaterialDTO; @@ -20,12 +21,8 @@ import com.nflg.wms.common.util.DateTimeUtil; import com.nflg.wms.common.util.EecExcelUtil; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; -import com.nflg.wms.repository.entity.WmsBin; -import com.nflg.wms.repository.entity.WmsStorage; -import com.nflg.wms.repository.entity.WmsStorageBin; -import com.nflg.wms.repository.service.IWmsBinService; -import com.nflg.wms.repository.service.IWmsStorageBinService; -import com.nflg.wms.repository.service.IWmsStorageService; +import com.nflg.wms.repository.entity.*; +import com.nflg.wms.repository.service.*; import com.nflg.wms.starter.service.BomMaterialService; import com.nflg.wms.starter.service.FileUploadService; import jakarta.annotation.Resource; @@ -70,6 +67,12 @@ public class StorageControllerService { @Resource private IWmsBinService wmsBinService; + @Resource + private IDictionaryItemService dictionaryItemService; + + @Resource + private IWmsWarehouseService warehouseService; + @Transactional public void add(@Valid StorageAddQO request) { WmsStorage storage = Convert.convert(WmsStorage.class, request); @@ -116,7 +119,7 @@ public class StorageControllerService { @Transactional public ApiResult importFromExcel(HttpServletResponse response, MultipartFile file) throws IOException { - List data = EecExcelUtil.getExcelContext(file.getInputStream(), StorageExcelImportDTO.class); + List data = EecExcelUtil.getExcelContext(file.getInputStream(), StorageExcelExportDTO.class); VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(data)).throwMessage("导入文件内容为空"); if (updateCheckAndImport(data)) { return ApiResult.success(); @@ -135,10 +138,10 @@ public class StorageControllerService { } @Transactional - public boolean updateCheckAndImport(List data) { + public boolean updateCheckAndImport(List data) { List storages = new ArrayList<>(); List storageBinAll = new ArrayList<>(); - for (StorageExcelImportDTO dto : data) { + for (StorageExcelExportDTO dto : data) { WmsStorage storage = new WmsStorage(); List storageBins=new ArrayList<>(); StringBuilder sb = new StringBuilder(); @@ -164,15 +167,37 @@ public class StorageControllerService { } } } - if (StrUtil.isBlank(dto.getBinNos())) { - sb.append("储位编号不能为空;"); + String factoryNo = StrUtil.trim(dto.getFactoryNo()); + DictionaryItem item = null; + if (StrUtil.isBlank(factoryNo)) { + sb.append("工厂编号不能为空;"); } else { - List binNos = StrUtil.split(dto.getBinNos(), ","); - List bins = wmsBinService.lambdaQuery().in(WmsBin::getNo, binNos).list(); + item = dictionaryItemService.getByCode(Constant.DICTIONARY_FACTORY, factoryNo); + if (Objects.isNull(item)) { + sb.append("工厂编号无效;"); + } + } + String warehouseNo = StrUtil.trim(dto.getWarehouseNo()); + WmsWarehouse warehouse = null; + if (StrUtil.isBlank(warehouseNo)) { + sb.append("库位编号不能为空;"); + } else if (Objects.nonNull(item)) { + warehouse = warehouseService.lambdaQuery().eq(WmsWarehouse::getFactoryId, item.getId()).eq(WmsWarehouse::getNo, warehouseNo).one(); + if (Objects.isNull(warehouse)) { + sb.append("库位编号无效;"); + } else { + storage.setWarehouseId(warehouse.getId()); + } + } + if (StrUtil.isBlank(dto.getBinNos())) { + sb.append("仓位编号不能为空;"); + } else if (Objects.nonNull(warehouse)) { + List binNos = StrUtil.split(dto.getBinNos(), "/"); + List bins = wmsBinService.lambdaQuery().eq(WmsBin::getWarehouseId, warehouse.getId()).in(WmsBin::getNo, binNos).list(); List bs = bins.stream().map(WmsBin::getNo).toList(); binNos.removeAll(bs); if (CollectionUtil.isNotEmpty(binNos)) { - sb.append(StrUtil.join(";", binNos)); + sb.append("仓位编号无效:").append(StrUtil.join("/", binNos)).append(";"); }else { WmsStorage finalStorage = storage; storageBins = bins.stream().map(bin -> new WmsStorageBin() @@ -197,12 +222,13 @@ public class StorageControllerService { public void exportSelect(HttpServletResponse response, List ids) throws IOException { List storageVOS = CollectionUtil.isNotEmpty(ids) ? storageService.getList(ids) : new ArrayList<>(); - List datas = storageVOS.stream().map(bin -> Convert.convert(StorageExcelExportDTO.class, bin)).collect(Collectors.toList()); + List datas = storageVOS.stream().map(bin -> Convert.convert(StorageExcelImportDTO.class, bin)).collect(Collectors.toList()); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("物料存储导出.xlsx", StandardCharsets.UTF_8)); if (CollectionUtil.isEmpty(datas)) { - datas.add(new StorageExcelExportDTO() + datas.add(new StorageExcelImportDTO() .setMaterialNo("(必填)物料编号") + .setFactoryNo("(必填)工厂编号") .setWarehouseNo("(必填)库位编号") .setBinNos("(必填)储位编号") .setRemark("备注信息,此行为提示信息,导入时请删除")); diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/STATE.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/STATE.java index 664a7ea1..64e6068e 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/STATE.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/constant/STATE.java @@ -15,7 +15,7 @@ public enum STATE { PassportErr(105, "用户校验失败"), LoginError(106, "请重新登录"), UploadError(107, "上传失败"), - DataNoCheckPass(108, "数据不完整无法提交提交或审核,需显示问题数据"), + DataNoCheckPass(108, "数据不完整无法提交或审核,需显示问题数据"), ServiceConnectRefused(109, "服务连接异常,请稍后重试"), AddressNotFound(110, "访问地址不存在,请稍后重试"), RouteServiceError(111, "请求服务异常,请稍后重试"), diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/AllocationOrderDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/AllocationOrderDTO.java index f57ce888..6546a569 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/AllocationOrderDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/AllocationOrderDTO.java @@ -5,6 +5,8 @@ import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.annotation.JsonIgnore; import com.nflg.wms.common.util.BomUtil; import com.nflg.wms.common.util.DateTimeUtil; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; import lombok.Data; import lombok.experimental.Accessors; @@ -160,8 +162,10 @@ public class AllocationOrderDTO{ private String ekgrp; /** - * 转储数量 + * 申请数量 */ + @NotNull + @Positive(message = "申请数量必须大于0") private BigDecimal num; public BigDecimal getNum() { diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BinExcelExportDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BinExcelExportDTO.java index 2488fb5b..5d1bcaef 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BinExcelExportDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BinExcelExportDTO.java @@ -9,21 +9,28 @@ import org.ttzero.excel.annotation.ExcelColumn; public class BinExcelExportDTO { /** - * 仓库编码 + * *工厂编号 */ - @ExcelColumn("*仓库编码") + @ExcelColumn("*工厂编号") + private String factoryNo; + + + /** + * *库位编号 + */ + @ExcelColumn("*库位编号") private String warehouseNo; /** - * 储位编码 + * *仓位编号 */ - @ExcelColumn("*储位编码") + @ExcelColumn("*仓位编号") private String no; /** - * 储位名称 + * 仓位名称 */ - @ExcelColumn("*储位名称") + @ExcelColumn("*仓位名称") private String name; /** diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BinExcelImportDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BinExcelImportDTO.java index dad99517..50fb0dac 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BinExcelImportDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/BinExcelImportDTO.java @@ -4,35 +4,11 @@ import lombok.Data; import org.ttzero.excel.annotation.ExcelColumn; @Data -public class BinExcelImportDTO { - - /** - * 仓库编码 - */ - @ExcelColumn("*仓库编码") - private String warehouseNo; - - /** - * 储位编码 - */ - @ExcelColumn("*储位编码") - private String no; - - /** - * 储位名称 - */ - @ExcelColumn("*储位名称") - private String name; - - /** - * 备注 - */ - @ExcelColumn("备注") - private String remark; +public class BinExcelImportDTO extends BinExcelExportDTO { /** * 错误信息 */ - @ExcelColumn("错误信息") + @ExcelColumn(value = "错误信息", colIndex = 5) private String error; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/DepartmentMaterialRequisitionDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/DepartmentMaterialRequisitionDTO.java index 4099088e..ff8db931 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/DepartmentMaterialRequisitionDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/DepartmentMaterialRequisitionDTO.java @@ -3,6 +3,8 @@ package com.nflg.wms.common.pojo.dto; import cn.hutool.core.util.StrUtil; import com.nflg.wms.common.util.BomUtil; import com.nflg.wms.common.util.DateTimeUtil; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; import lombok.Data; import lombok.experimental.Accessors; @@ -142,6 +144,8 @@ public class DepartmentMaterialRequisitionDTO { /** * 领料数量 */ + @NotNull + @Positive(message = "领料数量必须大于0") private BigDecimal num; /** diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/DepartmentMaterialReturnSlipDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/DepartmentMaterialReturnSlipDTO.java index c54d3838..eededc7d 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/DepartmentMaterialReturnSlipDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/DepartmentMaterialReturnSlipDTO.java @@ -4,6 +4,8 @@ import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.annotation.JsonIgnore; import com.nflg.wms.common.util.BomUtil; import com.nflg.wms.common.util.DateTimeUtil; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; import lombok.Data; import lombok.experimental.Accessors; @@ -104,6 +106,8 @@ public class DepartmentMaterialReturnSlipDTO { /** * 退料数量 */ + @NotNull + @Positive(message = "退料数量必须大于0") private BigDecimal num; /** diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelExportDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelExportDTO.java index 63b52d80..fdfbd4d1 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelExportDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelExportDTO.java @@ -6,29 +6,11 @@ import org.ttzero.excel.annotation.ExcelColumn; @Data @Accessors(chain = true) -public class StorageExcelExportDTO { +public class StorageExcelExportDTO extends StorageExcelImportDTO { /** - * 物料编号 + * 错误信息 */ - @ExcelColumn("物料编号") - private String materialNo; - - /** - * 库位编号 - */ - @ExcelColumn("库位编号") - private String warehouseNo; - - /** - * 储位编号 - */ - @ExcelColumn("储位编号") - private String binNos; - - /** - * 备注 - */ - @ExcelColumn("备注") - private String remark; + @ExcelColumn(value = "错误信息", colIndex = 5) + private String error; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelImportDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelImportDTO.java index 65da5877..c9e31e9e 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelImportDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/StorageExcelImportDTO.java @@ -1,9 +1,11 @@ package com.nflg.wms.common.pojo.dto; import lombok.Data; +import lombok.experimental.Accessors; import org.ttzero.excel.annotation.ExcelColumn; @Data +@Accessors(chain = true) public class StorageExcelImportDTO { /** @@ -13,9 +15,21 @@ public class StorageExcelImportDTO { private String materialNo; /** - * 储位编号 + * 工厂编号 */ - @ExcelColumn("*储位编号") + @ExcelColumn("*工厂编号") + private String factoryNo; + + /** + * 库位编号 + */ + @ExcelColumn("*库位编号") + private String warehouseNo; + + /** + * 仓位编号 + */ + @ExcelColumn("*仓位编号") private String binNos; /** @@ -23,10 +37,4 @@ public class StorageExcelImportDTO { */ @ExcelColumn("备注") private String remark; - - /** - * 错误信息 - */ - @ExcelColumn("错误信息") - private String error; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/SubcontractedOrderDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/SubcontractedOrderDTO.java index 8e7441d8..4ce61eb5 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/SubcontractedOrderDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/SubcontractedOrderDTO.java @@ -2,6 +2,8 @@ package com.nflg.wms.common.pojo.dto; import com.nflg.wms.common.util.BomUtil; import com.nflg.wms.common.util.DateTimeUtil; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; import lombok.Data; import lombok.experimental.Accessors; @@ -147,6 +149,8 @@ public class SubcontractedOrderDTO { /** * 领料数量 */ + @NotNull + @Positive(message = "领料数量必须大于0") private BigDecimal num; private String key; diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/TransferOrderDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/TransferOrderDTO.java index 38731e96..c472352a 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/TransferOrderDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/TransferOrderDTO.java @@ -5,6 +5,8 @@ import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.annotation.JsonIgnore; import com.nflg.wms.common.util.BomUtil; import com.nflg.wms.common.util.DateTimeUtil; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; import lombok.Data; import lombok.experimental.Accessors; @@ -151,6 +153,8 @@ public class TransferOrderDTO { /** * 调库数量 */ + @NotNull + @Positive(message = "调库数量必须大于0") private BigDecimal num; @JsonIgnore diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/ZWM3A02QO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/ZWM3A02QO.java new file mode 100644 index 00000000..501933d6 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/ZWM3A02QO.java @@ -0,0 +1,29 @@ +package com.nflg.wms.common.pojo.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class ZWM3A02QO { + + /** + * 工厂 + */ + private String werks; + + /** + * 物料号 + */ + private String matnr; + + /** + * 库存地点 + */ + private String lgort; + + /** + * 库存仓位 + */ + private String lgpbe; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderGenerateMaterialsQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderGenerateMaterialsQO.java index b30d9f18..ab540898 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderGenerateMaterialsQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderGenerateMaterialsQO.java @@ -2,6 +2,7 @@ package com.nflg.wms.common.pojo.qo; import com.nflg.wms.common.pojo.dto.ZWM00MB007DTO; import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; import lombok.Data; import lombok.experimental.Accessors; @@ -21,5 +22,6 @@ public class InProduceOrderGenerateMaterialsQO extends ZWM00MB007DTO { * 收货数量 */ @NotNull + @Positive(message = "收货数量必须大于0") private BigDecimal num; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO1.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO1.java index 30bbf331..3e1b8eba 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO1.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QRCodeQO1.java @@ -2,6 +2,7 @@ package com.nflg.wms.common.pojo.qo; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; import lombok.Data; import java.math.BigDecimal; @@ -19,5 +20,6 @@ public class QRCodeQO1 { * 数量 */ @NotNull + @Positive(message = "数量必须大于0") private BigDecimal num; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/StorageAddQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/StorageAddQO.java index c95beade..9ff3dca8 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/StorageAddQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/StorageAddQO.java @@ -1,5 +1,6 @@ package com.nflg.wms.common.pojo.qo; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -11,11 +12,22 @@ import java.util.List; @Accessors(chain = true) public class StorageAddQO { +// /** +// * 物料id +// */ +// @NotNull +// private Long materialId; + /** - * 物料id + * 物料编号 */ - @NotNull - private Long materialId; + @NotBlank + private String materialNo; + + /** + * 物料描述 + */ + private String materialDesc; /** * 仓库ID diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05ItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05ItemVO.java index 9e1b41ae..d6e19c0b 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05ItemVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05ItemVO.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.nflg.wms.common.pojo.qo.QRCodeQO1; import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; import lombok.Data; import java.math.BigDecimal; @@ -62,6 +63,7 @@ public class ZWM3A05ItemVO { * 退货数量 */ @NotNull + @Positive(message = "退货数量必须大于0") private BigDecimal temng; /** @@ -73,7 +75,6 @@ public class ZWM3A05ItemVO { * 基本计量单位 */ private String meins; - /** * 库存地点 */ diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05VO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05VO.java index 399a4f75..f25267a2 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05VO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/ZWM3A05VO.java @@ -1,6 +1,8 @@ package com.nflg.wms.common.pojo.vo; import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; import lombok.Data; import lombok.experimental.Accessors; @@ -24,8 +26,10 @@ public class ZWM3A05VO { /** * 工厂 */ + @NotBlank private String werks; @Valid + @NotEmpty private List items = new ArrayList<>(); } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/Zwm3a07VO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/Zwm3a07VO.java index 2bed4b2c..3b61985d 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/Zwm3a07VO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/Zwm3a07VO.java @@ -4,6 +4,8 @@ import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.annotation.JsonIgnore; import com.nflg.wms.common.util.BomUtil; import com.nflg.wms.common.util.DateTimeUtil; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; import lombok.Data; import lombok.experimental.Accessors; @@ -56,6 +58,8 @@ public class Zwm3a07VO { private BigDecimal qlsl; //申请数量 + @NotNull + @Positive(message = "申请数量必须大于0") private BigDecimal sqsl; //领料物料号 diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/Zwm3a09VO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/Zwm3a09VO.java index a69c21ef..72be1cba 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/Zwm3a09VO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/Zwm3a09VO.java @@ -3,6 +3,8 @@ package com.nflg.wms.common.pojo.vo; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.annotation.JsonIgnore; import com.nflg.wms.common.util.BomUtil; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; import lombok.Data; import lombok.experimental.Accessors; @@ -56,6 +58,8 @@ public class Zwm3a09VO { private BigDecimal qlsl; //申请数量 + @NotNull + @Positive(message = "申请数量必须大于0") private BigDecimal sqsl; //领料物料号 diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsBomServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsBomServiceImpl.java index 5d8c7749..5c90ef99 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsBomServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsBomServiceImpl.java @@ -93,7 +93,6 @@ public class WmsBomServiceImpl extends ServiceImpl impleme List boms = lambdaQuery() .like(StrUtil.isNotBlank(request.getNo()), WmsBom::getNo, request.getNo()) .like(StrUtil.isNotBlank(request.getDescribe()), WmsBom::getDescribe, request.getDescribe()) - .orderByDesc(WmsBom::getId) .list(); Set parentIds = boms.stream().map(WmsBom::getParentId).filter(parentId -> !Objects.equals(parentId, 0L)).collect(Collectors.toSet()); if (CollectionUtil.isNotEmpty(parentIds)) { @@ -125,6 +124,7 @@ public class WmsBomServiceImpl extends ServiceImpl impleme .toList() ) ) + .sorted(Comparator.comparing(BomMaterialVO::getId).reversed()) .toList(); all.forEach(it -> { if (CollectionUtil.isEmpty(it.getChildren())) { diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsOutProduceTicketItemMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsOutProduceTicketItemMapper.xml index 2f05912e..be83818e 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsOutProduceTicketItemMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsOutProduceTicketItemMapper.xml @@ -3,9 +3,10 @@ diff --git a/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/SyncStorageFromSAPProcessor.java b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/SyncStorageFromSAPProcessor.java index bd09a950..9afacd5d 100644 --- a/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/SyncStorageFromSAPProcessor.java +++ b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/SyncStorageFromSAPProcessor.java @@ -177,6 +177,7 @@ public class SyncStorageFromSAPProcessor implements BasicProcessor { .setMaterialNo(dto.getMaterialNo()) .setWarehouseId(dbWarehouse.getId()) .setMaterialDesc(dto.getMaterialDesc()) + .setSapState((short) 1) .setRemark("从SAP同步") .setCreateBy("SAP同步") .setCreateTime(LocalDateTime.now()); diff --git a/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/service/SapService.java b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/service/SapService.java index 1263f2a2..266bc188 100644 --- a/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/service/SapService.java +++ b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/service/SapService.java @@ -4,7 +4,9 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.nflg.wms.common.pojo.dto.SAPSyncFromDTO; +import com.nflg.wms.common.pojo.dto.ZWM3A02QO; import com.nflg.wms.common.util.VUtil; +import com.nflg.wms.scheduled.util.JCoUtil; import com.sap.conn.jco.*; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -30,13 +32,18 @@ public class SapService { * @param binNos 储位编号列表 */ public void saveStorage(String factory,String materialNo,String warehouseNo,List binNos) throws JCoException { - Map parameters = new HashMap<>(); - parameters.put("WERKS", factory); - parameters.put("MATNR", materialNo); - parameters.put("LGORT", warehouseNo); - parameters.put("LGPBE", StrUtil.join("/",binNos)); + List qos = new ArrayList<>(); + qos.add(new ZWM3A02QO() + .setWerks(factory) + .setMatnr(materialNo) + .setLgort(warehouseNo) + .setLgpbe(StrUtil.join("/", binNos)) + ); - JCoTable tOut = exec("ZWM3A02", parameters); + Map>> tables = new HashMap<>(); + tables.put("T_OUT", JCoUtil.toMapList(qos)); + + JCoTable tOut = exec1("ZWM3A02", tables); if (tOut.getNumRows() > 0){ tOut.setRow(0); @@ -95,6 +102,10 @@ public class SapService { return exec(functionName, parameters, null); } + private JCoTable exec1(String functionName, Map>> tables) throws JCoException { + return exec(functionName, null, tables); + } + private JCoTable exec(String functionName, Map parameters, Map>> tables) throws JCoException { JCoFunction function = repository.getFunction(functionName); log.info("SAP ImportParameter:{}", JSONUtil.toJsonStr(parameters)); @@ -114,7 +125,7 @@ public class SapService { } function.execute(destination); JCoTable out = function.getTableParameterList().getTable("T_OUT"); - log.trace("SAP返回: {}", out); + log.info("SAP返回: {}", out); return out; } } diff --git a/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/util/JCoUtil.java b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/util/JCoUtil.java new file mode 100644 index 00000000..d3c79383 --- /dev/null +++ b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/util/JCoUtil.java @@ -0,0 +1,103 @@ +package com.nflg.wms.scheduled.util; + +import cn.hutool.core.collection.CollectionUtil; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.nflg.wms.common.util.BeanUtil; +import com.sap.conn.jco.*; + +import java.util.*; +import java.util.stream.Collectors; + +public class JCoUtil { + + private static final ObjectMapper MAPPER = JsonMapper.builder() + .enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES) + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .build(); + + /** + * 将 JCoTable 转换为 Java Bean 列表 + * @param table JCoTable 对象 + * @param clazz 目标实体类 + * @param 泛型 + * @return List 列表 + */ + public static List toBeanList(JCoTable table, Class clazz) { + List> mapList = toMapList(table); + List resultList = new ArrayList<>(mapList.size()); + for (Map map : mapList) { + resultList.add(MAPPER.convertValue(map, clazz)); + } + return resultList; + } + + public static List> toMapList(JCoTable table) { + if (CollectionUtil.isEmpty(table) || table.isEmpty()) { + return Collections.emptyList(); + } + List> mapList = new ArrayList<>(); + JCoRecordMetaData meta = table.getRecordMetaData(); + table.firstRow(); + do { + Map rowMap = new HashMap<>(); + for (int i = 0; i < meta.getFieldCount(); i++) { + rowMap.put(meta.getName(i), table.getField(i).getValue()); + } + mapList.add(rowMap); + } while (table.nextRow()); + return mapList; + } + + public static List> toMapList(List datas) { + return datas.stream().map(BeanUtil::toMap) + .map(list -> list.entrySet().stream() + .collect(Collectors.toMap(entry -> entry.getKey().toUpperCase(), + Map.Entry::getValue))) + .toList(); + } + + public static List> toMapList(T data) { + return Collections.singletonList(BeanUtil.toMap(data)); + } + + /** + * 将 JCoStructure 转换为 Java Bean + * @param structure JCoStructure 对象 + * @param clazz 目标实体类 + * @param 泛型 + * @return T 实体对象 + */ + public static T toBean(JCoStructure structure, Class clazz) { + if (Objects.isNull(structure)) { + return null; + } + JCoRecordMetaData meta = structure.getRecordMetaData(); + Map rowMap = new HashMap<>(); + for (int i = 0; i < meta.getFieldCount(); i++) { + rowMap.put(meta.getName(i), structure.getField(i).getValue()); + } + return MAPPER.convertValue(rowMap, clazz); + } + + /** + * 将 JCoParameterList 转换为 Java Bean + * @param parameters JCoParameterList 对象 + * @param clazz 目标实体类 + * @param 泛型 + * @return T 实体对象 + */ + public static T toBean(JCoParameterList parameters, Class clazz) { + if (Objects.isNull(parameters)) { + return null; + } + JCoListMetaData meta = parameters.getListMetaData(); + Map rowMap = new HashMap<>(); + for (int i = 0; i < meta.getFieldCount(); i++) { + rowMap.put(meta.getName(i), parameters.getField(i).getValue()); + } + return MAPPER.convertValue(rowMap, clazz); + } +} diff --git a/nflg-wms-scheduled/src/test/java/com/nflg/scheduled/DeployTest.java b/nflg-wms-scheduled/src/test/java/com/nflg/scheduled/DeployTest.java index 16509753..a8619231 100644 --- a/nflg-wms-scheduled/src/test/java/com/nflg/scheduled/DeployTest.java +++ b/nflg-wms-scheduled/src/test/java/com/nflg/scheduled/DeployTest.java @@ -35,8 +35,8 @@ public class DeployTest { sshUtil.connect("192.168.163.84", 22, "root", "CMP2025nf"); //处理主jar包 handleFile(sshUtil, localPath + jarName, remotePath + jarName); - //处理lib目录 - handleDir(sshUtil, localPath, remotePath, "lib"); +// //处理lib目录 +// handleDir(sshUtil, localPath, remotePath, "lib"); //执行脚本启动服务 sshUtil.exec("cd " + remotePath + " && ./restart.sh"); sshUtil.disconnect();