From 3d5c33eb4029e810a4f89e218ec716a904a2e204 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 5 Aug 2025 18:07:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=9F=E4=BA=A7=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E5=8D=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/InProduceOrderController.java | 327 ++++++++++++++++++ .../controller/NormalOrderController.java | 2 + .../nflg/wms/admin/service/SapService.java | 14 +- .../java/com/nflg/wms/admin/util/NoUtil.java | 8 + .../template/生产入库单模版.xlsx | Bin 0 -> 28880 bytes .../qo/InProduceOrderGenerateMaterialsQO.java | 25 ++ .../common/pojo/qo/InProduceOrderSaveQO.java | 9 + .../pojo/qo/InProduceOrderSearchQO.java | 12 + .../pojo/vo/InProduceOrderMaterialVO.java | 66 ++++ .../pojo/vo/WmsInProduceOrderItemVO.java | 51 +++ .../repository/entity/WmsInProduceOrder.java | 83 +++++ .../entity/WmsInProduceOrderItem.java | 83 +++++ .../wms/repository/mapper/WmsBomMapper.java | 3 + .../mapper/WmsInProduceOrderItemMapper.java | 20 ++ .../mapper/WmsInProduceOrderMapper.java | 16 + .../repository/service/IWmsBomService.java | 2 + .../IWmsInProduceOrderItemService.java | 26 ++ .../service/IWmsInProduceOrderService.java | 20 ++ .../service/impl/WmsBomServiceImpl.java | 5 + .../WmsInProduceOrderItemServiceImpl.java | 38 ++ .../impl/WmsInProduceOrderServiceImpl.java | 38 ++ .../main/resources/mapper/WmsBomMapper.xml | 6 + .../mapper/WmsInProduceOrderItemMapper.xml | 11 + .../mapper/WmsInProduceOrderMapper.xml | 5 + .../wms/repository/CodeGeneratorTest.java | 2 +- 25 files changed, 866 insertions(+), 6 deletions(-) create mode 100644 nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java create mode 100644 nflg-wms-admin/src/main/resources/template/生产入库单模版.xlsx create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderGenerateMaterialsQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderSaveQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderSearchQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/InProduceOrderMaterialVO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WmsInProduceOrderItemVO.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsInProduceOrder.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsInProduceOrderItem.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsInProduceOrderItemMapper.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsInProduceOrderMapper.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsInProduceOrderItemService.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsInProduceOrderService.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsInProduceOrderItemServiceImpl.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsInProduceOrderServiceImpl.java create mode 100644 nflg-wms-repository/src/main/resources/mapper/WmsInProduceOrderItemMapper.xml create mode 100644 nflg-wms-repository/src/main/resources/mapper/WmsInProduceOrderMapper.xml 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 new file mode 100644 index 00000000..c7672fca --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java @@ -0,0 +1,327 @@ +package com.nflg.wms.admin.controller; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import cn.idev.excel.EasyExcel; +import cn.idev.excel.enums.CellDataTypeEnum; +import cn.idev.excel.metadata.data.ImageData; +import cn.idev.excel.metadata.data.WriteCellData; +import cn.idev.excel.write.metadata.WriteSheet; +import cn.idev.excel.write.metadata.fill.FillConfig; +import com.nflg.wms.admin.service.SapService; +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.pojo.ApiResult; +import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.dto.DeliverNormalOrderItemDTO; +import com.nflg.wms.common.pojo.dto.ZWM00MB007DTO; +import com.nflg.wms.common.pojo.qo.InProduceOrderGenerateMaterialsQO; +import com.nflg.wms.common.pojo.qo.InProduceOrderSaveQO; +import com.nflg.wms.common.pojo.qo.InProduceOrderSearchQO; +import com.nflg.wms.common.pojo.vo.InProduceOrderMaterialVO; +import com.nflg.wms.common.pojo.vo.WmsInProduceOrderItemVO; +import com.nflg.wms.common.util.DateTimeUtil; +import com.nflg.wms.common.util.UserUtil; +import com.nflg.wms.common.util.VUtil; +import com.nflg.wms.repository.entity.WmsBom; +import com.nflg.wms.repository.entity.WmsInProduceOrder; +import com.nflg.wms.repository.entity.WmsInProduceOrderItem; +import com.nflg.wms.repository.service.IWmsBomService; +import com.nflg.wms.repository.service.IWmsInProduceOrderItemService; +import com.nflg.wms.repository.service.IWmsInProduceOrderService; +import com.nflg.wms.starter.BaseController; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import java.math.BigDecimal; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.text.DecimalFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; + +/** + * 生产订单入库管理 + */ +@Slf4j +@RestController +@RequestMapping("/in/produce") +public class InProduceOrderController extends BaseController { + + private static final DecimalFormat DF = new DecimalFormat("0.00"); + @Resource + private SapService sapService; + @Resource + private IWmsInProduceOrderService produceOrderService; + @Resource + private IWmsInProduceOrderItemService produceOrderItemService; + @Resource + private IWmsBomService bomService; + + /** + * 从SAP查询生产订单信息 + * @param no 生产订单号 + * @return 订单信息 + */ + @GetMapping("searchFromSAP") + public ApiResult searchFromSAP(@Valid @RequestParam @NotBlank String no){ + return ApiResult.success(sapService.zwm00Mb007(no)); + } + + /** + * 生成物料列表 + * @param request 请求参数 + * @return 生成结果 + */ + @PostMapping("generateMaterials") + public ApiResult generateMaterials(@Valid @RequestBody InProduceOrderGenerateMaterialsQO request) { + InProduceOrderMaterialVO vo=new InProduceOrderMaterialVO() + .setMaterialNo(request.getMATNR()) + .setMaterialDesc(request.getMAKTX()) + .setUnit(request.getMEINS()) + .setNum(request.getNum()) + .setFactoryNo(request.getPWERK()) + .setWarehouseNo(request.getLGORT()) + .setOderNum(request.getPSMNG()); + if (request.getList()){ + List children = bomService.getChildren(request.getMATNR()); + vo.setChildren(children.stream().map(it -> new InProduceOrderMaterialVO() + .setMaterialNo(it.getNo()) + .setMaterialDesc(it.getDescribe()) + .setUnit(request.getMEINS()) + .setNum(request.getNum().multiply(it.getNum())) + .setFactoryNo(request.getPWERK()) + .setWarehouseNo(request.getLGORT()) + .setOderNum(request.getPSMNG()) + ).toList() + ); + } + return ApiResult.success(vo); + } + + /** + * 保存 + * @param request 请求参数 + */ + @Transactional + @PostMapping("save") + public ApiResult save(@Valid @RequestBody InProduceOrderSaveQO request){ + if (Objects.isNull(request.getId())){ + WmsInProduceOrder order=new WmsInProduceOrder() + .setNo(NoUtil.getInProduceNo()) + .setOrderNo(request.getAUFNR()) + .setList(request.getList()) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()); + produceOrderService.save(order); + request.setId(order.getId()); + }else { + WmsInProduceOrder order=produceOrderService.getById(request.getId()); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + VUtil.trueThrowBusinessError(!Objects.equals(order.getState(),(short)0)) + .throwMessage("保存失败:非待收货状态"); + order.setUpdateBy(UserUtil.getUserName()); + order.setUpdateTime(LocalDateTime.now()); + produceOrderService.updateById(order); + produceOrderItemService.deleteByOrderId(order.getId()); + } + WmsInProduceOrderItem parent=new WmsInProduceOrderItem() + .setOrderId(request.getId()) + .setParentId(0L) + .setNum(request.getNum()) + .setMaterialNo(request.getMATNR()) + .setMaterialDesc(request.getMAKTX()) + .setUnit(request.getMEINS()) + .setFactoryNo(request.getPWERK()) + .setWarehouseNo(request.getLGORT()) + .setOrderNum(request.getPSMNG()); +// .setBatchNo(NoUtil.getBatchNo("")); + produceOrderItemService.save(parent); + if (request.getList()){ + List children = bomService.getChildren(request.getMATNR()); + produceOrderItemService.saveBatch(children.stream().map(it -> new WmsInProduceOrderItem() + .setOrderId(request.getId()) + .setParentId(parent.getId()) + .setNum(request.getNum().multiply(it.getNum())) + .setMaterialNo(it.getNo()) + .setMaterialDesc(it.getDescribe()) + .setUnit(request.getMEINS()) + .setFactoryNo(request.getPWERK()) + .setWarehouseNo(request.getLGORT()) + .setOrderNum(request.getPSMNG()) +// .setBatchNo(NoUtil.getBatchNo("")) + ).toList() + ); + } + return ApiResult.success(); + } + + /** + * 搜索 + * @param request 搜索参数 + * @return 搜索结果 + */ + @PostMapping("search") + public ApiResult> search(@Valid @RequestBody InProduceOrderSearchQO request){ + return ApiResult.success(produceOrderService.search(request)); + } + + /** + * 获取订单的物料列表 + * @param id 订单ID + * @return 列表 + */ + @GetMapping("getList") + public ApiResult getList(@Valid @RequestParam @NotNull Long id){ + List list=produceOrderItemService.getByOrderId(id); + WmsInProduceOrderItem parent=list.stream().filter(item -> Objects.equals(item.getParentId(), 0L)).findFirst().get(); + InProduceOrderMaterialVO vo=new InProduceOrderMaterialVO() + .setMaterialNo(parent.getMaterialNo()) + .setMaterialDesc(parent.getMaterialDesc()) + .setUnit(parent.getUnit()) + .setNum(parent.getNum()) + .setFactoryNo(parent.getFactoryNo()) + .setWarehouseNo(parent.getWarehouseNo()) + .setOderNum(parent.getOrderNum()); + vo.setChildren(list.stream() + .filter(item -> Objects.equals(item.getParentId(), parent.getId())) + .map(item -> new InProduceOrderMaterialVO() + .setMaterialNo(item.getMaterialNo()) + .setMaterialDesc(item.getMaterialDesc()) + .setUnit(item.getUnit()) + .setNum(item.getNum()) + .setFactoryNo(item.getFactoryNo()) + .setWarehouseNo(item.getWarehouseNo()) + .setOderNum(item.getOrderNum()) + ).toList() + ); + return ApiResult.success(vo); + } + + /** + * 删除 + * @param id 订单ID + */ + @Transactional + @GetMapping("delete") + public ApiResult delete(@Valid @RequestParam @NotNull Long id){ + WmsInProduceOrder order=produceOrderService.getById(id); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + VUtil.trueThrowBusinessError(!Objects.equals(order.getState(),(short)0)) + .throwMessage("删除失败:非待收货状态"); + produceOrderService.removeById(id); + produceOrderItemService.deleteByOrderId(id); + return ApiResult.success(); + } + + /** + * 导出物料条码pdf(逐个) + * @param id 订单ID + * @param type 1:逐个,2:一页 + */ + @GetMapping("exportMaterialsPdf") + public void exportMaterials(HttpServletResponse response, @Valid @RequestParam @NotNull Long id,@Valid @RequestParam @NotNull Integer type) throws Exception { + WmsInProduceOrder order = produceOrderService.getById(id); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List list = produceOrderItemService.getByOrderId(id); + if (order.getList()) { + list.removeIf(item -> Objects.equals(item.getParentId(), 0L)); + } + List datas = new ArrayList<>(); + for (WmsInProduceOrderItem item : list) { + BigDecimal[] result = item.getNum().divideAndRemainder(BigDecimal.ONE); + for (int i = 0, count = result[0].intValue(); i < count; i++) { + DeliverNormalOrderItemDTO dto = new DeliverNormalOrderItemDTO(); + dto.setMaterialNo(item.getMaterialNo()); + dto.setMaterialDesc(item.getMaterialDesc()); + dto.setExternalOrderNo(order.getOrderNo()); + dto.setRowNo(""); + dto.setIndex(i); + dto.setPrintNo(IdUtil.getSnowflakeNextIdStr()); + if (i == count - 1 && result[1].compareTo(BigDecimal.ZERO) > 0) { + dto.setPrintNum(DF.format(result[1])); + } else { + dto.setPrintNum(DF.format(BigDecimal.ONE)); + } + dto.setBatchNo("");//NoUtil.getBatchNo("") + dto.setQrCode("data:image/png;base64," + Base64.getEncoder().encodeToString(QRCodeUtil.generateQRCode(generateQRContent(dto, ""), 100, 100))); + datas.add(dto); + } + } + Map variables = new HashMap<>(); + variables.put("list", datas); + if (Objects.equals(type,1)) { + String html = ThymeleafUtil.generator("/template/qrcode/", "dp-1", ".html", variables); + URL baseUrl = new ClassPathResource("template/qrcode/").getURL(); + PdfGeneratorUtil.generatePdf("普通物料条码(逐个)", html, baseUrl.toString(), response); + }else { + String html = ThymeleafUtil.generator("/template/qrcode/", "dp-2", ".html", variables); + URL baseUrl = new ClassPathResource("template/qrcode/").getURL(); + PdfGeneratorUtil.generatePdf("普通物料条码(整张)", html, baseUrl.toString(), response); + } + } + + private String generateQRContent(DeliverNormalOrderItemDTO order,String indexNo){ + String content= StrUtil.format("{}${}${}${}${}${}${}${}" + , order.getPrintNo(), order.getExternalOrderNo(),order.getRowNo(),order.getMaterialNo(),order.getPrintNum() + ,order.getMaterialDesc(),order.getBatchNo(),Optional.ofNullable(indexNo).orElse("")); + log.debug("二维码内容:"+ content); + return content; + } + + /** + * 导出报工单PDF + * @param id 订单id + */ + @GetMapping("exportOrderPdf") + public void exportDeliverOrder(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception { + WmsInProduceOrder order = produceOrderService.getById(id); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List list = produceOrderItemService.getVOByOrderId(id); + if (order.getList()) { + list.removeIf(item -> Objects.equals(item.getParentId(), 0L)); + } + WmsInProduceOrderItemVO first=list.get(0); + Map info = new HashMap<>(); + info.put("no", order.getNo()); + info.put("factory", first.getFactoryNo()); + info.put("warehouse", first.getWarehouseNo()); + info.put("today", DateTimeUtil.format(LocalDate.now(), "yyyy-MM-dd")); + WriteCellData writeCellData = new WriteCellData<>(); + writeCellData.setType(CellDataTypeEnum.EMPTY); + ImageData imageData = new ImageData(); + imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG); + imageData.setImage(QRCodeUtil.generateQRCode(order.getNo(), 100, 100)); + imageData.setTop(5); + imageData.setRight(5); + imageData.setBottom(5); + imageData.setLeft(5); + imageData.setRelativeFirstRowIndex(0); + imageData.setRelativeFirstColumnIndex(0); + imageData.setRelativeLastRowIndex(2); + imageData.setRelativeLastColumnIndex(2); + writeCellData.setImageDataList(List.of(imageData)); + info.put("qrCodeUrl", writeCellData); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode(order.getNo() + "生产入库单.xlsx", StandardCharsets.UTF_8)); + try (cn.idev.excel.ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(new ClassPathResource("template/生产入库单模版.xlsx").getInputStream()).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + excelWriter.fill(list, fillConfig, writeSheet); + excelWriter.fill(info, writeSheet); + } + } +} diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalOrderController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalOrderController.java index 5be6c55f..da5ec370 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalOrderController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalOrderController.java @@ -301,6 +301,8 @@ public class NormalOrderController extends BaseController { DeliverNormalOrderItemDTO dto = new DeliverNormalOrderItemDTO(); dto.setMaterialNo(order.getItemCode()); dto.setMaterialDesc(order.getItemName()); + dto.setExternalOrderNo(order.getPoNum()); + dto.setRowNo(order.getPoLineNumber()); dto.setIndex(0); dto.setPrintNo(order.getId() + "-" + 0); dto.setPrintNum(DF.format(order.getOrderQty())); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java index a4ebc4e0..04d6af08 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java @@ -93,13 +93,17 @@ public class SapService { JCoFunction function = exec("ZWM00_MB107", parameters, tables); - JCoStructure sreturn = function.getExportParameterList().getStructure("E_RETURN"); - VUtil.trueThrowBusinessError(!StrUtil.equals(sreturn.getString("TYPE"), "S")) - .throwMessage("SAP错误:" + sreturn.getString("MSG")); + JCoParameterList pl = function.getExportParameterList(); + VUtil.trueThrowBusinessError(StrUtil.isBlank(pl.getString("E_MBLNR"))) + .throwMessage("SAP错误"); + VUtil.trueHandle(StrUtil.isBlank(pl.getString("E_MBLNR"))).trueHandle(() -> { + JCoTable table = function.getTableParameterList().getTable("T_RETURN"); + log.error("SAP错误信息:{}", table); + }); return new Zwm00Mb107DTO() - .setE_MBLNR(function.getExportParameterList().getString("E_MBLNR")) - .setE_MJAHR(function.getExportParameterList().getString("E_MJAHR")); + .setE_MBLNR(pl.getString("E_MBLNR")) + .setE_MJAHR(pl.getString("E_MJAHR")); } /** diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/NoUtil.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/NoUtil.java index c2cc2824..830aed3e 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/NoUtil.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/util/NoUtil.java @@ -32,4 +32,12 @@ public class NoUtil { public static String getOutPurchaseNo(){ return "OP"+DateTimeUtil.format(LocalDateTime.now(), "yyyyMMddHHmmss"); } + + /** + * 生成生产入库订单单号 + * @return 单号 + */ + public static String getInProduceNo(){ + return "IP"+DateTimeUtil.format(LocalDateTime.now(), "yyyyMMddHHmmss"); + } } diff --git a/nflg-wms-admin/src/main/resources/template/生产入库单模版.xlsx b/nflg-wms-admin/src/main/resources/template/生产入库单模版.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..64ddafbbc648aa2d6533479bdf7947cdf0933fa0 GIT binary patch literal 28880 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 l$8QI-Gz literal 0 HcmV?d00001 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 new file mode 100644 index 00000000..b30d9f18 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderGenerateMaterialsQO.java @@ -0,0 +1,25 @@ +package com.nflg.wms.common.pojo.qo; + +import com.nflg.wms.common.pojo.dto.ZWM00MB007DTO; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +@Data +@Accessors(chain = true) +public class InProduceOrderGenerateMaterialsQO extends ZWM00MB007DTO { + + /** + * 是否清单件 + */ + @NotNull + private Boolean list; + + /** + * 收货数量 + */ + @NotNull + private BigDecimal num; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderSaveQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderSaveQO.java new file mode 100644 index 00000000..4aecff63 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderSaveQO.java @@ -0,0 +1,9 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; + +@Data +public class InProduceOrderSaveQO extends InProduceOrderGenerateMaterialsQO{ + + private Long id; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderSearchQO.java new file mode 100644 index 00000000..95b6f466 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/InProduceOrderSearchQO.java @@ -0,0 +1,12 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; + +@Data +public class InProduceOrderSearchQO extends SearchBaseQO{ + + /** + * 报工单号或生产订单号 + */ + private String no; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/InProduceOrderMaterialVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/InProduceOrderMaterialVO.java new file mode 100644 index 00000000..118de4b1 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/InProduceOrderMaterialVO.java @@ -0,0 +1,66 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@Accessors(chain = true) +public class InProduceOrderMaterialVO { + + private Long id; + + /** + * 订单id + */ + private Long orderId; + + /** + * 父级id + */ + private Long parentId; + + /** + * 物料编号 + */ + private String materialNo; + + /** + * 物料描述 + */ + private String materialDesc; + + /** + * 订单数量 + */ + private BigDecimal oderNum; + + /** + * 数量 + */ + private BigDecimal num; + + /** + * 单位 + */ + private String unit; + + /** + * 工厂 + */ + private String factoryNo; + + /** + * 仓库 + */ + private String warehouseNo; + + /** + * 批次号 + */ + private String batchNo; + + private List children; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WmsInProduceOrderItemVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WmsInProduceOrderItemVO.java new file mode 100644 index 00000000..b74599e5 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WmsInProduceOrderItemVO.java @@ -0,0 +1,51 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +@Data +@Accessors(chain = true) +public class WmsInProduceOrderItemVO { + + /** + * 父级id + */ + private Long parentId; + + /** + * 生产订单号 + */ + private String orderNo; + + /** + * 物料编号 + */ + private String materialNo; + + /** + * 物料描述 + */ + private String materialDesc; + + /** + * 数量 + */ + private BigDecimal num; + + /** + * 单位 + */ + private String unit; + + /** + * 工厂 + */ + private String factoryNo; + + /** + * 仓库 + */ + private String warehouseNo; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsInProduceOrder.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsInProduceOrder.java new file mode 100644 index 00000000..df5a1827 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsInProduceOrder.java @@ -0,0 +1,83 @@ +package com.nflg.wms.repository.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 生产入库订单 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("wms_in_produce_order") +public class WmsInProduceOrder implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 单据号 + */ + private String no; + + /** + * 生产订单号 + */ + private String orderNo; + + /** + * 是否清单件 + */ + private Boolean list; + + /** + * 状态,0:待收货;1:已收货; + */ + private Short state; + + /** + * 物料凭证编号 + */ + private String mblnr; + + /** + * 物料凭证年度 + */ + private String mjahr; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新人 + */ + private String updateBy; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsInProduceOrderItem.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsInProduceOrderItem.java new file mode 100644 index 00000000..06751c6d --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsInProduceOrderItem.java @@ -0,0 +1,83 @@ +package com.nflg.wms.repository.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + *

+ * + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("wms_in_produce_order_item") +public class WmsInProduceOrderItem implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 订单id + */ + private Long orderId; + + /** + * 父级id + */ + private Long parentId; + + /** + * 物料编号 + */ + private String materialNo; + + /** + * 物料描述 + */ + private String materialDesc; + + /** + * 订单数量 + */ + private BigDecimal orderNum; + + /** + * 数量 + */ + private BigDecimal num; + + /** + * 单位 + */ + private String unit; + + /** + * 工厂 + */ + private String factoryNo; + + /** + * 仓库 + */ + private String warehouseNo; + + /** + * 批次号 + */ + private String batchNo; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsBomMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsBomMapper.java index 3e11c653..1c31eece 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsBomMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsBomMapper.java @@ -3,6 +3,8 @@ package com.nflg.wms.repository.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.nflg.wms.repository.entity.WmsBom; +import java.util.List; + /** *

* 齐套 Mapper 接口 @@ -13,4 +15,5 @@ import com.nflg.wms.repository.entity.WmsBom; */ public interface WmsBomMapper extends BaseMapper { + List getChildren(String materialNo); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsInProduceOrderItemMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsInProduceOrderItemMapper.java new file mode 100644 index 00000000..c1a9cf18 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsInProduceOrderItemMapper.java @@ -0,0 +1,20 @@ +package com.nflg.wms.repository.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nflg.wms.common.pojo.vo.WmsInProduceOrderItemVO; +import com.nflg.wms.repository.entity.WmsInProduceOrderItem; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface WmsInProduceOrderItemMapper extends BaseMapper { + + List getVOByOrderId(Long id); +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsInProduceOrderMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsInProduceOrderMapper.java new file mode 100644 index 00000000..d9553bfa --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsInProduceOrderMapper.java @@ -0,0 +1,16 @@ +package com.nflg.wms.repository.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nflg.wms.repository.entity.WmsInProduceOrder; + +/** + *

+ * 生产入库订单 Mapper 接口 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface WmsInProduceOrderMapper extends BaseMapper { + +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsBomService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsBomService.java index 378f41e8..ba584580 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsBomService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsBomService.java @@ -26,4 +26,6 @@ public interface IWmsBomService extends IService { PageData search(@Valid BomSearchQO request); List searchNonPage(@Valid BomSearchQO request); + + List getChildren(String materialNo); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsInProduceOrderItemService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsInProduceOrderItemService.java new file mode 100644 index 00000000..7fef7af5 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsInProduceOrderItemService.java @@ -0,0 +1,26 @@ +package com.nflg.wms.repository.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nflg.wms.common.pojo.vo.WmsInProduceOrderItemVO; +import com.nflg.wms.repository.entity.WmsInProduceOrderItem; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface IWmsInProduceOrderItemService extends IService { + + void deleteByOrderId(Long id); + + List getByOrderId(@Valid @NotNull Long id); + + List getVOByOrderId(@Valid @NotNull Long id); +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsInProduceOrderService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsInProduceOrderService.java new file mode 100644 index 00000000..66f7d2b3 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsInProduceOrderService.java @@ -0,0 +1,20 @@ +package com.nflg.wms.repository.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.nflg.wms.common.pojo.qo.InProduceOrderSearchQO; +import com.nflg.wms.repository.entity.WmsInProduceOrder; +import jakarta.validation.Valid; + +/** + *

+ * 生产入库订单 服务类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface IWmsInProduceOrderService extends IService { + + IPage search(@Valid InProduceOrderSearchQO request); +} 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 cf9e1e10..1efb25e7 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 @@ -105,4 +105,9 @@ public class WmsBomServiceImpl extends ServiceImpl impleme .toList() )).toList(); } + + @Override + public List getChildren(String materialNo) { + return baseMapper.getChildren(materialNo); + } } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsInProduceOrderItemServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsInProduceOrderItemServiceImpl.java new file mode 100644 index 00000000..f0af48d6 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsInProduceOrderItemServiceImpl.java @@ -0,0 +1,38 @@ +package com.nflg.wms.repository.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.wms.common.pojo.vo.WmsInProduceOrderItemVO; +import com.nflg.wms.repository.entity.WmsInProduceOrderItem; +import com.nflg.wms.repository.mapper.WmsInProduceOrderItemMapper; +import com.nflg.wms.repository.service.IWmsInProduceOrderItemService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Service +public class WmsInProduceOrderItemServiceImpl extends ServiceImpl implements IWmsInProduceOrderItemService { + + @Override + public void deleteByOrderId(Long id) { + remove(new LambdaQueryWrapper().eq(WmsInProduceOrderItem::getOrderId, id)); + } + + @Override + public List getByOrderId(Long id) { + return lambdaQuery().eq(WmsInProduceOrderItem::getOrderId, id).list(); + } + + @Override + public List getVOByOrderId(Long id) { + return baseMapper.getVOByOrderId(id); + } +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsInProduceOrderServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsInProduceOrderServiceImpl.java new file mode 100644 index 00000000..636ade74 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsInProduceOrderServiceImpl.java @@ -0,0 +1,38 @@ +package com.nflg.wms.repository.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.wms.common.pojo.qo.InProduceOrderSearchQO; +import com.nflg.wms.repository.entity.WmsInProduceOrder; +import com.nflg.wms.repository.mapper.WmsInProduceOrderMapper; +import com.nflg.wms.repository.service.IWmsInProduceOrderService; +import org.springframework.stereotype.Service; + +import java.util.Objects; + +/** + *

+ * 生产入库订单 服务实现类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Service +public class WmsInProduceOrderServiceImpl extends ServiceImpl implements IWmsInProduceOrderService { + + @Override + public IPage search(InProduceOrderSearchQO request) { + return lambdaQuery() + .and(StrUtil.isNotBlank(request.getNo()),wrapper -> + wrapper.like(WmsInProduceOrder::getNo, request.getNo()) + .or() + .like(WmsInProduceOrder::getOrderNo, request.getNo()) + ) + .ge(Objects.nonNull(request.getStartDate()), WmsInProduceOrder::getCreateTime, request.getStartDate()) + .le(Objects.nonNull(request.getEndDate()), WmsInProduceOrder::getCreateTime, request.getEndDate()) + .page(new Page<>(request.getPage(), request.getPageSize())); + } +} diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsBomMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsBomMapper.xml index 7d612ad7..a0d8f1cd 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsBomMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsBomMapper.xml @@ -2,4 +2,10 @@ + diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsInProduceOrderItemMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsInProduceOrderItemMapper.xml new file mode 100644 index 00000000..9b09c8aa --- /dev/null +++ b/nflg-wms-repository/src/main/resources/mapper/WmsInProduceOrderItemMapper.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsInProduceOrderMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsInProduceOrderMapper.xml new file mode 100644 index 00000000..0b65691d --- /dev/null +++ b/nflg-wms-repository/src/main/resources/mapper/WmsInProduceOrderMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java b/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java index 2a8c63ab..1e446cd5 100644 --- a/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java +++ b/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java @@ -33,7 +33,7 @@ public class CodeGeneratorTest { ) .strategyConfig(builder -> { builder - .addInclude("basde_serial_number") //只生成指定表 + .addInclude("wms_in_produce_order_item") //只生成指定表 .entityBuilder().idType(IdType.ASSIGN_ID) .enableLombok() .enableChainModel()