From 704265308b1227dbada5a36b2027b588c062ded2 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 12 十月 2026 09:14:37 +0800
Subject: [PATCH] feat(mes): 新增业务码支持并优化追溯查询功能

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/bagcode/MesProBagCodeController.java |   37 ++++++++++++++++++++++++++++++++-----
 1 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/bagcode/MesProBagCodeController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/bagcode/MesProBagCodeController.java
index 8e6ca6e..1e28b26 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/bagcode/MesProBagCodeController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/bagcode/MesProBagCodeController.java
@@ -142,11 +142,12 @@
     }
 
     @GetMapping("/get-by-code")
-    @Operation(summary = "鎵爜杩芥函锛氭牴鎹鐮侊紙浜岀淮鐮佸唴瀹癸級鍙嶆煡鎵规銆佷骇绾裤�佽矗浠讳汉绛変俊鎭�")
-    @Parameter(name = "code", description = "琚嬬爜锛堜簩缁寸爜鍐呭锛�", required = true, example = "PC20260818L01001-0001")
+    @Operation(summary = "鍐呴儴鎵爜鏌ヨ锛氭牴鎹拷婧爜鎴栦笟鍔$爜鍙嶆煡琚嬨�佹壒娆°�佷骇绾夸俊鎭�")
+    @Parameter(name = "code", description = "鍗曞厓璇嗗埆浠g爜锛堝浗鏍囷細涓嶈秴杩� 20 涓瓧绗︼紝鏁板瓧鎴栧瓧姣嶆暟瀛楃粍鍚堬級",
+            required = true, example = "0286267849370923")
     @PreAuthorize("@ss.hasPermission('mes:pro-bag-code:query')")
     public CommonResult<MesProBagCodeTraceRespVO> getBagCodeByCode(@RequestParam("code") String code) {
-        MesProBagCodeDO bagCode = bagCodeService.getBagCodeByCode(code);
+        MesProBagCodeDO bagCode = bagCodeService.getBagCodeByScanCode(code);
         if (bagCode == null) {
             throw exception(PRO_BAG_CODE_NOT_EXISTS);
         }
@@ -197,11 +198,12 @@
                                 HttpServletResponse response) throws IOException {
         List<MesProBagCodeDO> list;
         String zipName;
+        // 鍙鍑哄彲鍗板埛鐨勮鐮侊細宸蹭綔搴熻鐮佺殑鏍囩涓嶅緱鍐嶅嵃鍒凤紙璐村埌浜у搧涓婁細琚壂鐮佹彁绀�"宸蹭綔搴燂紝璋ㄩ槻鍋囧啋"锛�
         if (StrUtil.isNotEmpty(uuid)) {
-            list = bagCodeService.getBagCodeListByUuid(uuid);
+            list = bagCodeService.getPrintableBagCodeListByUuid(uuid);
             zipName = "琚嬬爜浜岀淮鐮�-" + uuid;
         } else if (batchId != null) {
-            list = bagCodeService.getBagCodeListByBatchId(batchId);
+            list = bagCodeService.getPrintableBagCodeListByBatchId(batchId);
             zipName = "琚嬬爜浜岀淮鐮�-" + batchId;
         } else {
             throw exception(PRO_QR_EXPORT_PARAMS_INVALID);
@@ -217,6 +219,31 @@
 
     // ==================== 鎷兼帴 VO ====================
 
+    @PostMapping("/generate-business-code")
+    @Operation(summary = "琛ョ敓鎴愬凡鏈夎鐮佺殑鍑哄叆搴撲笟鍔$爜锛堝凡鏈夌爜鍊间笉鍙橈級")
+    @PreAuthorize("@ss.hasPermission('mes:pro-bag-code:create')")
+    public CommonResult<Integer> generateBusinessCodes(@Valid @RequestBody
+            cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagBusinessCodeGenerateReqVO reqVO) {
+        return success(bagCodeService.generateBusinessCodes(reqVO.getIds()));
+    }
+
+    @GetMapping("/export-business-qr")
+    @Operation(summary = "瀵煎嚭鍑哄叆搴撲笟鍔$爜浜岀淮鐮� ZIP锛堜簩缁寸爜浠呯紪鐮佷笟鍔$爜鍊硷級")
+    @PreAuthorize("@ss.hasPermission('mes:pro-bag-code:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportBusinessQr(@RequestParam(value = "uuid", required = false) String uuid,
+                                 @RequestParam(value = "batchId", required = false) Long batchId,
+                                 HttpServletResponse response) throws IOException {
+        List<MesProBagCodeDO> list;
+        if (StrUtil.isNotBlank(uuid)) list = bagCodeService.getPrintableBagCodeListByUuid(uuid);
+        else if (batchId != null) list = bagCodeService.getPrintableBagCodeListByBatchId(batchId);
+        else throw exception(PRO_QR_EXPORT_PARAMS_INVALID);
+        if (CollUtil.isEmpty(list)) throw exception(PRO_BAG_CODE_NOT_EXISTS);
+        if (list.size() > QrCodeImageUtils.MAX_QR_EXPORT) throw exception(PRO_QR_EXPORT_TOO_MANY);
+        List<QrLabelInfo> labels = list.stream().map(MesProQrLabelBuilder::buildBagBusinessCodeLabel).toList();
+        QrCodeImageUtils.writeZip(response, "琚嬬爜涓氬姟浜岀淮鐮�-" + (StrUtil.isNotBlank(uuid) ? uuid : batchId), labels);
+    }
+
     private List<MesProBagCodeRespVO> buildBagCodeRespVOList(List<MesProBagCodeDO> list) {
         if (CollUtil.isEmpty(list)) {
             return Collections.emptyList();

--
Gitblit v1.9.3