From de998723479807c9f015542b2bd6d60b4eaef0aa Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Thu, 11 Dec 2025 14:56:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=B7=BB=E5=8A=A0=E5=8F=91?= =?UTF-8?q?=E8=B4=A7=E5=8D=95Word=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在服务接口中新增方法,组装Word导出所需数据 - 引入ruoyi-common-word依赖支持Word模板处理 - 控制器中实现导出接口,基于poi-tl模板引擎生成Word文件 - 组装导出数据包含主表字段及明细列表,支持模板循环渲染 - 文件名使用发货单号,增强导出文件识别性 - 增加操作日志记录,权限检查保障安全性 --- ruoyi-modules/ruoyi-wms/pom.xml | 6 ++ .../controller/WmsShippingBillController.java | 24 ++++++ .../wms/service/IWmsShippingBillService.java | 8 ++ .../impl/WmsShippingBillServiceImpl.java | 81 +++++++++++++++++- .../src/main/resources/发货单模板.docx | Bin 0 -> 29530 bytes 5 files changed, 115 insertions(+), 4 deletions(-) create mode 100644 ruoyi-modules/ruoyi-wms/src/main/resources/发货单模板.docx diff --git a/ruoyi-modules/ruoyi-wms/pom.xml b/ruoyi-modules/ruoyi-wms/pom.xml index 33416f01..8e2637a6 100644 --- a/ruoyi-modules/ruoyi-wms/pom.xml +++ b/ruoyi-modules/ruoyi-wms/pom.xml @@ -108,6 +108,12 @@ org.dromara ruoyi-common-bus + + + + org.dromara + ruoyi-common-word + diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsShippingBillController.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsShippingBillController.java index cd01df9a..2667ae5d 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsShippingBillController.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/controller/WmsShippingBillController.java @@ -15,6 +15,7 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; +import org.dromara.common.word.util.WordTemplateUtil; import org.dromara.wms.domain.bo.WmsShippingBillBo; import org.dromara.wms.domain.vo.WmsShippingBillVo; import org.dromara.wms.service.IWmsShippingBillService; @@ -22,6 +23,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; /** * 发货单 @@ -125,4 +127,26 @@ public class WmsShippingBillController extends BaseController { return R.ok(wmsShippingBillService.shippingBillSubmitAndFlowStart(bo)); } + /** + * 导出发货单Word文档 + * 使用poi-tl模板引擎,基于发货单模板.docx生成Word文件 + * + * @param shippingBillId 发货单ID + * @param response HttpServletResponse + */ + @SaCheckPermission("wms:wmsShippingBill:export") + @Log(title = "发货单Word导出", businessType = BusinessType.EXPORT) + @GetMapping("/exportWord/{shippingBillId}") + public void exportWord(@NotNull(message = "发货单ID不能为空") + @PathVariable("shippingBillId") Long shippingBillId, + HttpServletResponse response) { + // 组装模板数据 + Map data = wmsShippingBillService.buildWordExportData(shippingBillId); + // 生成文件名(发货单号) + WmsShippingBillVo vo = wmsShippingBillService.queryById(shippingBillId); + String fileName = "发货单_" + (vo != null && vo.getShippingCode() != null ? vo.getShippingCode() : shippingBillId); + // 渲染并输出Word文档(模板路径为classpath根目录) + WordTemplateUtil.renderToResponse("发货单模板.docx", fileName, data, response); + } + } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsShippingBillService.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsShippingBillService.java index b087a551..616f934c 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsShippingBillService.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/IWmsShippingBillService.java @@ -73,4 +73,12 @@ public interface IWmsShippingBillService { * @return 发货单VO */ WmsShippingBillVo shippingBillSubmitAndFlowStart(WmsShippingBillBo bo); + + /** + * 组装发货单Word导出数据 + * + * @param shippingBillId 发货单ID + * @return Word模板数据Map + */ + java.util.Map buildWordExportData(Long shippingBillId); } diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsShippingBillServiceImpl.java b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsShippingBillServiceImpl.java index 55b244cd..7b7a3dc1 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsShippingBillServiceImpl.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/org/dromara/wms/service/impl/WmsShippingBillServiceImpl.java @@ -34,10 +34,8 @@ import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.text.SimpleDateFormat; +import java.util.*; import java.util.stream.Collectors; /** @@ -336,4 +334,79 @@ public class WmsShippingBillServiceImpl implements IWmsShippingBillService { baseMapper.updateById(shippingBill); }); } + + /** + * 组装发货单 Word 导出数据。 + *

+ * 根据 {@code word.md} 中定义的模板结构,组装主表字段和明细列表数据,供 poi-tl 渲染使用。 + * 约定如下: + *

    + *
  • 主表字段:如 customerName、receiverName、receiverPhone、shippingDate、contractCode 等,对应 Word 模板中的 + * {{customerName}}、{{receiverName}}、{{receiverPhone}}、{{shippingDate}}、{{contractCode}} 等占位符;
  • + *
  • 明细列表:使用 {@code details} 作为列表占位符,内部每一行包含 seq、materialName、quantity、unit、remark 等字段, + * 对应 Word 模板表格中的 {{seq}}、{{materialName}}、{{quantity}}、{{unit}}、{{remark}}。
  • + *
+ * + * @param shippingBillId 发货单ID + * @return Word 模板数据 Map,建议直接传给 {@link org.dromara.common.word.util.WordTemplateUtil} + */ + @Override + public Map buildWordExportData(Long shippingBillId) { + // 查询发货单(包含明细列表) + WmsShippingBillVo vo = queryById(shippingBillId); + if (vo == null) { + throw new ServiceException("发货单不存在,ID:" + shippingBillId); + } + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Map data = new HashMap<>(); + + // === 主表字段 === + // 客户名称 + data.put("customerName", StringUtils.blankToDefault(vo.getCustomerName(), "")); + // 收货联系人(客户侧) + data.put("receiverName", StringUtils.blankToDefault(vo.getReceiverName(), "")); + // 收货联系电话(客户侧) + data.put("receiverPhone", StringUtils.blankToDefault(vo.getReceiverPhone(), "")); + // 发货日期(实际发货时间) + data.put("shippingDate", vo.getShippingTime() != null ? sdf.format(vo.getShippingTime()) : ""); + // 合同编号 + data.put("contractCode", StringUtils.blankToDefault(vo.getContractCode(), "")); + // 收货日期(留空,由客户签收时填写) + data.put("receivedDate", ""); + // === 落款信息(供应商/发货方) === + // 发货单位(供应商名称) + data.put("shippingUnit", StringUtils.blankToDefault(vo.getSupplier(), "")); + // 发货人(供应商联系人) + data.put("shipper", StringUtils.blankToDefault(vo.getContactUser(), "")); + // 发货方联系电话 + data.put("contactNumber", StringUtils.blankToDefault(vo.getContactNumber(), "")); + + // === 明细列表 === + // 对应 Word 模板中的 {{#details}}...{{/details}} 循环表格: + // - seq → {{seq}} (行号) + // - materialName → {{materialName}}(物料名称) + // - quantity → {{quantity}} (发货数量) + // - unit → {{unit}} (计量单位) + // - remark → {{remark}} (备注) + // 如需在模板中添加单价、金额、合计行等字段,可在此处扩展 row 中的字段,并在 data 中追加 totalQuantity、totalAmount 等汇总字段。 + List> details = new ArrayList<>(); + List itemsVo = vo.getItemsVo(); + if (CollUtil.isNotEmpty(itemsVo)) { + int seq = 1; + for (WmsShippingDetailsVo item : itemsVo) { + Map row = new HashMap<>(); + row.put("seq", String.valueOf(seq++)); + row.put("materialName", StringUtils.blankToDefault(item.getMaterialName(), "")); + row.put("quantity", item.getShippingStockAmount() != null ? item.getShippingStockAmount().toPlainString() : ""); + row.put("unit", StringUtils.blankToDefault(item.getUnitName(), "")); + row.put("remark", StringUtils.blankToDefault(item.getRemark(), "")); + details.add(row); + } + } + // poi-tl 列表占位符,对应 Word 模板中的 {{#details}}...{{/details}} + data.put("details", details); + + return data; + } } diff --git a/ruoyi-modules/ruoyi-wms/src/main/resources/发货单模板.docx b/ruoyi-modules/ruoyi-wms/src/main/resources/发货单模板.docx new file mode 100644 index 0000000000000000000000000000000000000000..b2cbd22f4d66ba6b6a5649ef9a57fd0288b0740d GIT binary patch literal 29530 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 literal 0 HcmV?d00001