From 02a1ae81eba7b48223052fb833859f0a65dd7d21 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 19 十月 2026 17:31:08 +0800
Subject: [PATCH] feat(mes): 实现袋码大批量生成异步任务功能

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/bagcode/MesProBagCodeController.java |   41 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 41 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 1cb2a19..c5523de 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,6 +13,7 @@
 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;
@@ -21,10 +22,13 @@
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeTraceRespVO;
 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 +69,8 @@
     @Resource
     private MesProBagCodeService bagCodeService;
     @Resource
+    private MesProBagCodeGenerateTaskService generateTaskService;
+    @Resource
     private MesProBatchService batchService;
     @Resource
     private AdminUserApi adminUserApi;
@@ -88,6 +94,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")
@@ -251,6 +274,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