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 | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 48 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..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")
@@ -162,6 +185,13 @@
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-bags")
+ @Operation(summary = "鑾峰緱鍙粦瀹氱敓浜ф壒娆$殑鍚ㄨ")
+ @PreAuthorize("@ss.hasAnyPermissions('mes:pro-batch:create', 'mes:pro-batch:update', 'mes:pro-bag-code:query')")
+ public CommonResult<List<MesProBagCodeRespVO>> getUnboundTonBags() {
+ return success(buildBagCodeRespVOList(bagCodeService.getUnboundTonBags()));
}
@GetMapping("/list-by-uuid")
@@ -244,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