From 251be431ad12399fe4ebce599c353d05dcec7888 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 29 十月 2026 12:28:34 +0800
Subject: [PATCH] feat(mes): 支持追溯二维码解析功能

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/bagcode/MesProBagCodeController.java |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 56 insertions(+), 0 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 dc7c482..28ba9bc 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
@@ -13,18 +13,23 @@
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeBindReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeGenerateRespVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeGenerateReqVO;
+import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeGenerateTaskRespVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodePageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeRawGenerateReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeReplaceReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeReplaceRespVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeRespVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeTraceRespVO;
+import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeUnboundTonBagPageReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.bagcode.MesProBagCodeDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pro.bagcode.MesProBagCodeGenerateTaskDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.batch.MesProBatchDO;
+import cn.iocoder.yudao.module.mes.enums.pro.MesProBagCodeGenerateTaskStatusEnum;
 import cn.iocoder.yudao.module.mes.framework.qrcode.QrCodeImageUtils;
 import cn.iocoder.yudao.module.mes.framework.qrexport.MesProQrExportProperties;
 import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
+import cn.iocoder.yudao.module.mes.service.pro.bagcode.MesProBagCodeGenerateTaskService;
 import cn.iocoder.yudao.module.mes.service.pro.bagcode.MesProBagCodeService;
 import cn.iocoder.yudao.module.mes.service.pro.batch.MesProBatchService;
 import cn.iocoder.yudao.module.mes.service.pro.qrexport.MesProQrLabelAssembler;
@@ -65,6 +70,8 @@
     @Resource
     private MesProBagCodeService bagCodeService;
     @Resource
+    private MesProBagCodeGenerateTaskService generateTaskService;
+    @Resource
     private MesProBatchService batchService;
     @Resource
     private AdminUserApi adminUserApi;
@@ -88,6 +95,23 @@
     public CommonResult<MesProBagCodeGenerateRespVO> generateRawBagCodes(
             @Valid @RequestBody MesProBagCodeRawGenerateReqVO rawGenerateReqVO) {
         return success(bagCodeService.generateRawBagCodes(rawGenerateReqVO));
+    }
+
+    @GetMapping("/generate-task/get")
+    @Operation(summary = "鑾峰緱琚嬬爜鐢熸垚浠诲姟锛堝ぇ鎵归噺鐢熸垚鐨勮繘搴﹁疆璇級")
+    @Parameter(name = "id", description = "浠诲姟缂栧彿", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('mes:pro-bag-code:query')")
+    public CommonResult<MesProBagCodeGenerateTaskRespVO> getGenerateTask(@RequestParam("id") Long id) {
+        return success(buildGenerateTaskRespVO(generateTaskService.getTask(id)));
+    }
+
+    @PostMapping("/generate-task/cancel")
+    @Operation(summary = "鍙栨秷琚嬬爜鐢熸垚浠诲姟锛堝仠姝㈢敓鎴愬苟娓呯悊鍗婃垚鍝侊級")
+    @Parameter(name = "id", description = "浠诲姟缂栧彿", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('mes:pro-bag-code:create')")
+    public CommonResult<Boolean> cancelGenerateTask(@RequestParam("id") Long id) {
+        generateTaskService.cancel(id);
+        return success(true);
     }
 
     @PostMapping("/replace")
@@ -161,6 +185,20 @@
     @PreAuthorize("@ss.hasPermission('mes:pro-bag-code:query')")
     public CommonResult<PageResult<MesProBagCodeRespVO>> getBagCodePage(@Valid MesProBagCodePageReqVO pageReqVO) {
         PageResult<MesProBagCodeDO> pageResult = bagCodeService.getBagCodePage(pageReqVO);
+        return success(new PageResult<>(buildBagCodeRespVOList(pageResult.getList()), pageResult.getTotal()));
+    }
+
+    @GetMapping("/unbound-ton-bag-page")
+    @Operation(summary = "鍒嗛〉鑾峰緱鍙粦瀹氱敓浜ф壒娆$殑鍚ㄨ")
+    @Parameters({
+            @Parameter(name = "pageNo", description = "椤电爜锛屼粠 1 寮�濮�", example = "1"),
+            @Parameter(name = "pageSize", description = "姣忛〉鏉℃暟", example = "50"),
+            @Parameter(name = "keyword", description = "鍏抽敭瀛楋細琚嬬爜銆佸搧绉嶇紪鐮佹垨鍝佺鍚嶇О", example = "0286267849370923")
+    })
+    @PreAuthorize("@ss.hasAnyPermissions('mes:pro-batch:create', 'mes:pro-batch:update', 'mes:pro-bag-code:query')")
+    public CommonResult<PageResult<MesProBagCodeRespVO>> getUnboundTonBagPage(
+            @Valid MesProBagCodeUnboundTonBagPageReqVO reqVO) {
+        PageResult<MesProBagCodeDO> pageResult = bagCodeService.getUnboundTonBagPage(reqVO);
         return success(new PageResult<>(buildBagCodeRespVOList(pageResult.getList()), pageResult.getTotal()));
     }
 
@@ -244,6 +282,24 @@
                 labelAssembler.buildBagBusinessLabels(list));
     }
 
+    private MesProBagCodeGenerateTaskRespVO buildGenerateTaskRespVO(MesProBagCodeGenerateTaskDO task) {
+        MesProBagCodeGenerateTaskRespVO respVO = BeanUtils.toBean(task, MesProBagCodeGenerateTaskRespVO.class);
+        for (MesProBagCodeGenerateTaskStatusEnum value : MesProBagCodeGenerateTaskStatusEnum.values()) {
+            if (value.getStatus().equals(task.getStatus())) {
+                respVO.setStatusName(value.getName());
+                break;
+            }
+        }
+        Integer total = task.getTotalCount();
+        if (total == null || total <= 0) {
+            respVO.setProgress(0);
+        } else {
+            int finished = task.getFinishedCount() == null ? 0 : task.getFinishedCount();
+            respVO.setProgress((int) Math.min(100L, (long) finished * 100 / total));
+        }
+        return respVO;
+    }
+
     private List<MesProBagCodeRespVO> buildBagCodeRespVOList(List<MesProBagCodeDO> list) {
         if (CollUtil.isEmpty(list)) {
             return Collections.emptyList();

--
Gitblit v1.9.3