From ceb6c19a2eef68edc59f87b8463b4e54f06caf72 Mon Sep 17 00:00:00 2001 From: funny <834502597@qq.com> Date: Tue, 14 Apr 2026 13:42:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A2=84=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/NormalPGIControllerService.java | 5 + .../common/pojo/vo/MaterialItemPrintVO.java | 84 +++++++++++++ .../WmsShipmentMaterialCodeItemMapper.java | 5 + .../WmsShipmentMaterialCodeItemQrMapper.java | 3 + ...IWmsShipmentMaterialCodeItemQrService.java | 3 + .../IWmsShipmentMaterialCodeItemService.java | 5 + ...ShipmentMaterialCodeItemQrServiceImpl.java | 6 + ...msShipmentMaterialCodeItemServiceImpl.java | 11 ++ .../WmsShipmentMaterialCodeItemMapper.xml | 24 ++++ .../WmsShipmentMaterialCodeItemQrMapper.xml | 11 ++ .../controller/MaterialCodeController.java | 112 ++++++++++++++++-- 11 files changed, 260 insertions(+), 9 deletions(-) create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/MaterialItemPrintVO.java diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalPGIControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalPGIControllerService.java index e64adcf2..320eca4a 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalPGIControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalPGIControllerService.java @@ -9,6 +9,7 @@ import com.nflg.wms.admin.pojo.dto.QCMaterialSyncDTO; import com.nflg.wms.admin.pojo.dto.ZWM3A17DTO; import com.nflg.wms.admin.repository.SrmMaterialReceiptNoScanCodesRepository; import com.nflg.wms.admin.repository.SrmMaterialReceiptScanCodesRepository; +import com.nflg.wms.common.constant.BarCodeProcessStage; import com.nflg.wms.common.pojo.document.SrmMaterialReceiptNoScanCodes; import com.nflg.wms.common.pojo.document.SrmMaterialReceiptScanCodes; import com.nflg.wms.common.pojo.dto.*; @@ -634,6 +635,10 @@ public class NormalPGIControllerService { boolean exists = dto.getQrCodes().stream().anyMatch(qrCode -> qrCode.getBarcodeCode().equals(parent.getBarcodeCode())); if (!exists) { + parent.setProcessStage(BarCodeProcessStage.Received.getState()); + parent.setLastScanBy(UserUtil.getUserId()); + parent.setLastScanByname(UserUtil.getUserName()); + parent.setLastScanTime(LocalDateTime.now()); dto.getQrCodes().add(parent); } } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/MaterialItemPrintVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/MaterialItemPrintVO.java new file mode 100644 index 00000000..15539d31 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/MaterialItemPrintVO.java @@ -0,0 +1,84 @@ +package com.nflg.wms.common.pojo.vo; + +import com.nflg.wms.common.util.NumberUtil; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 物料明细打印预览VO + */ +@Data +public class MaterialItemPrintVO { + + private Long id; + + /** + * 物料编号 + */ + private String materialNo; + + /** + * 物料描述 + */ + private String materialDescribe; + + /** + * 数量 + */ + private BigDecimal num; + + /** + * 数量文本 + */ + private String numText; + + public String getNumText() { + return NumberUtil.format(num); + } + + /** + * 实发数量 + */ + private BigDecimal actualNum; + + /** + * 单位 + */ + private String unit; + + /** + * 项目类型 + */ + private String projectType; + + /** + * 生产订单号 + */ + private String productionOrderNumber; + + /** + * 箱号 + */ + private String boxNo; + + /** + * 机台编号 + */ + private String deviceNo; + + /** + * 客户名称 + */ + private String customerName; + + /** + * 二维码(Base64) + */ + private String qrCode; + + /** + * 图片(Base64) + */ + private String image; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsShipmentMaterialCodeItemMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsShipmentMaterialCodeItemMapper.java index 148d3c40..9ff1427e 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsShipmentMaterialCodeItemMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsShipmentMaterialCodeItemMapper.java @@ -1,6 +1,7 @@ package com.nflg.wms.repository.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nflg.wms.common.pojo.vo.MaterialItemPrintVO; import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO; import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItem; @@ -20,4 +21,8 @@ public interface WmsShipmentMaterialCodeItemMapper extends BaseMapper getByCodeId(Long codeId); void updatePackingNum(Set ids); + + List getListByMaterialNos(Set materialNos); + + List getListByItemIds(List ids); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsShipmentMaterialCodeItemQrMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsShipmentMaterialCodeItemQrMapper.java index 117e210f..aab075f9 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsShipmentMaterialCodeItemQrMapper.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsShipmentMaterialCodeItemQrMapper.java @@ -5,6 +5,7 @@ import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO; import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItemQr; import java.util.List; +import java.util.Set; /** *

@@ -21,4 +22,6 @@ public interface WmsShipmentMaterialCodeItemQrMapper extends BaseMapper getListVOByItemIds(List ids); List getListVOByCodeIds(List ids); + + List getListVOByMaterialNos(Set materialNos); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsShipmentMaterialCodeItemQrService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsShipmentMaterialCodeItemQrService.java index 16aae7de..c01ff95a 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsShipmentMaterialCodeItemQrService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsShipmentMaterialCodeItemQrService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import jakarta.validation.constraints.NotEmpty; import java.util.List; +import java.util.Set; /** *

@@ -22,4 +23,6 @@ public interface IWmsShipmentMaterialCodeItemQrService extends IService getListVOByItemIds(List ids); List getListVOByCodeIds(List ids); + + List getListVOByMaterialNos(Set materialNos); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsShipmentMaterialCodeItemService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsShipmentMaterialCodeItemService.java index 559274ec..602f11d1 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsShipmentMaterialCodeItemService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsShipmentMaterialCodeItemService.java @@ -1,5 +1,6 @@ package com.nflg.wms.repository.service; +import com.nflg.wms.common.pojo.vo.MaterialItemPrintVO; import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO; import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItem; import com.baomidou.mybatisplus.extension.service.IService; @@ -20,4 +21,8 @@ public interface IWmsShipmentMaterialCodeItemService extends IService getByCodeId(Long codeId); void updatePackingNum(Set ids); + + List getListByMaterialNos(Set materialNos); + + List getListByItemIds(List ids); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemQrServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemQrServiceImpl.java index cd48a864..eb2315bf 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemQrServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemQrServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Set; /** *

@@ -34,4 +35,9 @@ public class WmsShipmentMaterialCodeItemQrServiceImpl extends ServiceImpl getListVOByCodeIds(List ids) { return baseMapper.getListVOByCodeIds(ids); } + + @Override + public List getListVOByMaterialNos(Set materialNos) { + return baseMapper.getListVOByMaterialNos(materialNos); + } } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemServiceImpl.java index 400af821..818a8141 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsShipmentMaterialCodeItemServiceImpl.java @@ -1,5 +1,6 @@ package com.nflg.wms.repository.service.impl; +import com.nflg.wms.common.pojo.vo.MaterialItemPrintVO; import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO; import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItem; import com.nflg.wms.repository.mapper.WmsShipmentMaterialCodeItemMapper; @@ -30,4 +31,14 @@ public class WmsShipmentMaterialCodeItemServiceImpl extends ServiceImpl ids) { baseMapper.updatePackingNum(ids); } + + @Override + public List getListByMaterialNos(Set materialNos) { + return baseMapper.getListByMaterialNos(materialNos); + } + + @Override + public List getListByItemIds(List ids) { + return baseMapper.getListByItemIds(ids); + } } diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsShipmentMaterialCodeItemMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsShipmentMaterialCodeItemMapper.xml index 4849f5bb..76e4110a 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsShipmentMaterialCodeItemMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsShipmentMaterialCodeItemMapper.xml @@ -25,4 +25,28 @@ #{id} + + + + diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsShipmentMaterialCodeItemQrMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsShipmentMaterialCodeItemQrMapper.xml index b579e906..b822d9ab 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsShipmentMaterialCodeItemQrMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsShipmentMaterialCodeItemQrMapper.xml @@ -31,4 +31,15 @@ #{item} + + diff --git a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java index db413d77..deefd3ca 100644 --- a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java +++ b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java @@ -13,6 +13,7 @@ import com.nflg.wms.common.pojo.dto.MaterialCodePrintDTO; import com.nflg.wms.common.pojo.dto.MaterialPdfDTO; import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.vo.MaterialPdfVO; +import com.nflg.wms.common.pojo.vo.MaterialItemPrintVO; import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO; import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO; import com.nflg.wms.common.util.EecExcelUtil; @@ -826,21 +827,26 @@ public class MaterialCodeController extends BaseController { * 导出标签图片PDF(打印预览) * * @param response HTTP响应 - * @param ids 清单明细id列表 + * @param ids 物料主数据id列表(wms_shipment_material.id) */ @PostMapping("exportToPdf") public void exportToPdf(HttpServletResponse response, @RequestBody @NotEmpty List ids) throws Exception { - List datas = materialCodeItemQrService.getListVOByItemIds(ids); - VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(datas)).throwMessage("没有需要导出的数据"); + // 根据物料主数据ID查询物料编号 + List materials = materialService.listByIds(ids); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(materials)).throwMessage("物料数据不存在"); - // 获取物料图片 - Map images = materialService.lambdaQuery() - .select(WmsShipmentMaterial::getNo, WmsShipmentMaterial::getImage) - .in(WmsShipmentMaterial::getNo, datas.stream().map(ShipmentMaterialCodeQRVO::getMaterialNo).collect(Collectors.toSet())) - .list() - .stream() + Set materialNos = materials.stream() + .map(WmsShipmentMaterial::getNo) + .collect(Collectors.toSet()); + + // 根据物料编号查询物料图片 + Map images = materials.stream() .collect(Collectors.toMap(WmsShipmentMaterial::getNo, WmsShipmentMaterial::getImage)); + // 根据物料编号查询清单明细二维码数据 + List datas = materialCodeItemQrService.getListVOByMaterialNos(materialNos); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(datas)).throwMessage("没有需要导出的数据"); + // 构建打印数据 Map variables = new HashMap<>(); variables.put("list", datas.stream() @@ -862,4 +868,92 @@ public class MaterialCodeController extends BaseController { URL baseUrl = new ClassPathResource("template/label/").getURL(); PdfGeneratorUtil.generatePdf("物料码标签", html, baseUrl.toString(), response); } + + /** + * 根据明细ID导出物料明细PDF(打印预览) + * + * @param response HTTP响应 + * @param ids 明细id列表(wms_shipment_material_code_item.id) + */ + @PostMapping("exportItemToPdf") + public void exportItemToPdf(HttpServletResponse response, @RequestBody @NotEmpty List ids) throws Exception { + // 根据明细ID查询数据 + List datas = materialCodeItemService.getListByItemIds(ids); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(datas)).throwMessage("没有需要导出的数据"); + + // 获取物料图片 + Map images = materialService.lambdaQuery() + .select(WmsShipmentMaterial::getNo, WmsShipmentMaterial::getImage) + .in(WmsShipmentMaterial::getNo, datas.stream().map(MaterialItemPrintVO::getMaterialNo).collect(Collectors.toSet())) + .list() + .stream() + .collect(Collectors.toMap(WmsShipmentMaterial::getNo, WmsShipmentMaterial::getImage)); + + // 构建打印数据 + Map variables = new HashMap<>(); + variables.put("list", datas.stream() + .map(data -> new MaterialCodePrintDTO() + .setNo(data.getMaterialNo() + "-" + data.getId()) + .setQrCode(QRCodeUtil.generateQRCodeBase64(data.getMaterialNo() + "-" + data.getId(), 200, 200)) + .setMaterialNo(data.getMaterialNo()) + .setMaterialDescribe(data.getMaterialDescribe()) + .setNum(data.getNum()) + .setNumText(data.getNumText()) + .setUnit(data.getUnit()) + .setDeviceNo(data.getDeviceNo()) + .setCustomerName(data.getCustomerName()) + .setLst(images.get(data.getMaterialNo())) + ).toList() + ); + + String html = ThymeleafUtil.generator("/template/label/", "material-pdf", ".html", variables); + URL baseUrl = new ClassPathResource("template/label/").getURL(); + PdfGeneratorUtil.generatePdf("物料明细标签", html, baseUrl.toString(), response); + } + + /** + * 根据物料主数据ID导出物料明细PDF(打印预览) + * + * @param response HTTP响应 + * @param ids 物料主数据id列表(wms_shipment_material.id) + */ + @PostMapping("exportMaterialItemToPdf") + public void exportMaterialItemToPdf(HttpServletResponse response, @RequestBody @NotEmpty List ids) throws Exception { + // 根据物料主数据ID查询物料编号 + List materials = materialService.listByIds(ids); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(materials)).throwMessage("物料数据不存在"); + + Set materialNos = materials.stream() + .map(WmsShipmentMaterial::getNo) + .collect(Collectors.toSet()); + + // 根据物料编号查询物料图片 + Map images = materials.stream() + .collect(Collectors.toMap(WmsShipmentMaterial::getNo, WmsShipmentMaterial::getImage)); + + // 根据物料编号查询明细数据 + List datas = materialCodeItemService.getListByMaterialNos(materialNos); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(datas)).throwMessage("没有需要导出的数据"); + + // 构建打印数据 + Map variables = new HashMap<>(); + variables.put("list", datas.stream() + .map(data -> new MaterialCodePrintDTO() + .setNo(data.getMaterialNo() + "-" + data.getId()) + .setQrCode(QRCodeUtil.generateQRCodeBase64(data.getMaterialNo() + "-" + data.getId(), 200, 200)) + .setMaterialNo(data.getMaterialNo()) + .setMaterialDescribe(data.getMaterialDescribe()) + .setNum(data.getNum()) + .setNumText(data.getNumText()) + .setUnit(data.getUnit()) + .setDeviceNo(data.getDeviceNo()) + .setCustomerName(data.getCustomerName()) + .setLst(images.get(data.getMaterialNo())) + ).toList() + ); + + String html = ThymeleafUtil.generator("/template/label/", "material-pdf", ".html", variables); + URL baseUrl = new ClassPathResource("template/label/").getURL(); + PdfGeneratorUtil.generatePdf("物料明细标签", html, baseUrl.toString(), response); + } } \ No newline at end of file