云
3 天以前 251be431ad12399fe4ebce599c353d05dcec7888
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();