From 756fc771960629d6c518473cf4c60e27e8bce73c Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 9 Mar 2026 22:29:50 +0800 Subject: [PATCH] ✨ feat(mes): 添加盘点方案状态更新功能及参数校验 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/MesWmStockTakingPlanController.java | 49 ++++++++++++++++++++++++++----------------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/MesWmStockTakingPlanParamController.java | 8 ++++---- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java | 1 + yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/MesBizTypeConstants.java | 4 ++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingPlanParamTypeEnum.java | 3 ++- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanParamService.java | 10 ++++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanParamServiceImpl.java | 7 +++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanServiceImpl.java | 8 ++++++++ 8 files changed, 62 insertions(+), 28 deletions(-) diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/MesWmStockTakingPlanController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/MesWmStockTakingPlanController.java index 0fd192a..f010a6b 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/MesWmStockTakingPlanController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/MesWmStockTakingPlanController.java @@ -40,23 +40,36 @@ public class MesWmStockTakingPlanController { @PostMapping("/create") @Operation(summary = "创建盘点方案") - @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:create')") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-plan:create')") public CommonResult createStockTakingPlan(@Valid @RequestBody MesWmStockTakingPlanSaveReqVO createReqVO) { return success(stockTakingPlanService.createStockTakingPlan(createReqVO)); } @PutMapping("/update") @Operation(summary = "修改盘点方案") - @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:update')") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-plan:update')") public CommonResult updateStockTakingPlan(@Valid @RequestBody MesWmStockTakingPlanSaveReqVO updateReqVO) { stockTakingPlanService.updateStockTakingPlan(updateReqVO); return success(true); } + @PutMapping("/update-status") + @Operation(summary = "更新盘点方案状态") + @Parameters({ + @Parameter(name = "id", description = "编号", required = true), + @Parameter(name = "status", description = "状态", required = true) + }) + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-plan:update')") + public CommonResult updateStockTakingPlanStatus(@RequestParam("id") Long id, + @RequestParam("status") Integer status) { + stockTakingPlanService.updateStockTakingPlanStatus(id, status); + return success(true); + } + @DeleteMapping("/delete") @Operation(summary = "删除盘点方案") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:delete')") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-plan:delete')") public CommonResult deleteStockTakingPlan(@RequestParam("id") Long id) { stockTakingPlanService.deleteStockTakingPlan(id); return success(true); @@ -65,7 +78,7 @@ public class MesWmStockTakingPlanController { @GetMapping("/get") @Operation(summary = "获得盘点方案") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:query')") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-plan:query')") public CommonResult getStockTakingPlan(@RequestParam("id") Long id) { MesWmStockTakingPlanDO plan = stockTakingPlanService.getStockTakingPlan(id); return success(plan == null ? null : BeanUtils.toBean(plan, MesWmStockTakingPlanRespVO.class)); @@ -73,7 +86,7 @@ public class MesWmStockTakingPlanController { @GetMapping("/page") @Operation(summary = "获得盘点方案分页") - @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:query')") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-plan:query')") public CommonResult> getStockTakingPlanPage(@Valid MesWmStockTakingPlanPageReqVO pageReqVO) { PageResult pageResult = stockTakingPlanService.getStockTakingPlanPage(pageReqVO); return success(BeanUtils.toBean(pageResult, MesWmStockTakingPlanRespVO.class)); @@ -81,7 +94,7 @@ public class MesWmStockTakingPlanController { @GetMapping("/export-excel") @Operation(summary = "导出盘点方案 Excel") - @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:export')") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-plan:export')") @ApiAccessLog(operateType = EXPORT) public void exportStockTakingPlanExcel(@Valid MesWmStockTakingPlanPageReqVO pageReqVO, HttpServletResponse response) throws IOException { @@ -91,23 +104,13 @@ public class MesWmStockTakingPlanController { BeanUtils.toBean(pageResult.getList(), MesWmStockTakingPlanRespVO.class)); } - private List buildRespVOList(List list, boolean includeParams) { - if (CollUtil.isEmpty(list)) { - return Collections.emptyList(); - } - final Map> finalParamMap; - if (includeParams) { - Collection planIds = convertSet(list, MesWmStockTakingPlanDO::getId); - Map> paramMap = new java.util.HashMap<>(); - stockTakingPlanParamService.getStockTakingPlanParamMap(planIds) - .forEach((planId, params) -> paramMap.put(planId, - BeanUtils.toBean(params, MesWmStockTakingPlanParamRespVO.class))); - finalParamMap = paramMap; - } else { - finalParamMap = Collections.emptyMap(); - } - return BeanUtils.toBean(list, MesWmStockTakingPlanRespVO.class, - vo -> vo.setParams(finalParamMap.getOrDefault(vo.getId(), Collections.emptyList()))); + @GetMapping("/simple-list") + @Operation(summary = "获得已启用的盘点方案精简列表") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:query')") + public CommonResult> getEnabledStockTakingPlanSimpleList() { + List list = stockTakingPlanService.getStockTakingPlanListByStatus( + CommonStatusEnum.ENABLE.getStatus()); + return success(BeanUtils.toBean(list, MesWmStockTakingPlanRespVO.class)); } } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/MesWmStockTakingPlanParamController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/MesWmStockTakingPlanParamController.java index eb7c6ef..f3494ab 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/MesWmStockTakingPlanParamController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/MesWmStockTakingPlanParamController.java @@ -30,14 +30,14 @@ public class MesWmStockTakingPlanParamController { @PostMapping("/create") @Operation(summary = "创建盘点方案参数") - @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:update')") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-plan:update')") public CommonResult createStockTakingPlanParam(@Valid @RequestBody MesWmStockTakingPlanParamSaveReqVO createReqVO) { return success(stockTakingPlanParamService.createStockTakingPlanParam(createReqVO)); } @PutMapping("/update") @Operation(summary = "修改盘点方案参数") - @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:update')") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-plan:update')") public CommonResult updateStockTakingPlanParam(@Valid @RequestBody MesWmStockTakingPlanParamSaveReqVO updateReqVO) { stockTakingPlanParamService.updateStockTakingPlanParam(updateReqVO); return success(true); @@ -46,7 +46,7 @@ public class MesWmStockTakingPlanParamController { @DeleteMapping("/delete") @Operation(summary = "删除盘点方案参数") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:update')") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-plan:update')") public CommonResult deleteStockTakingPlanParam(@RequestParam("id") Long id) { stockTakingPlanParamService.deleteStockTakingPlanParam(id); return success(true); @@ -55,7 +55,7 @@ public class MesWmStockTakingPlanParamController { @GetMapping("/get") @Operation(summary = "获得盘点方案参数") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('mes:wm-stocktaking-plan:query')") + @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-plan:query')") public CommonResult getStockTakingPlanParam(@RequestParam("id") Long id) { MesWmStockTakingPlanParamDO param = stockTakingPlanParamService.getStockTakingPlanParam(id); return success(param == null ? null : BeanUtils.toBean(param, MesWmStockTakingPlanParamRespVO.class)); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java index ac9f356..8f010b3 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java @@ -475,6 +475,7 @@ public interface ErrorCodeConstants { ErrorCode WM_STOCK_TAKING_PLAN_NOT_DISABLED = new ErrorCode(1_040_714_102, "只有禁用状态的盘点方案才允许修改、删除或维护参数"); ErrorCode WM_STOCK_TAKING_PLAN_NOT_ENABLED = new ErrorCode(1_040_714_103, "只有启用状态的盘点方案才允许生成任务"); ErrorCode WM_STOCK_TAKING_PLAN_PARAM_NOT_EXISTS = new ErrorCode(1_040_714_104, "盘点方案参数不存在"); + ErrorCode WM_STOCK_TAKING_PLAN_PARAM_EMPTY = new ErrorCode(1_040_714_105, "盘点方案参数不能为空,请先配置盘点参数"); ErrorCode WM_STOCK_TAKING_TASK_NOT_EXISTS = new ErrorCode(1_040_714_110, "盘点任务不存在"); ErrorCode WM_STOCK_TAKING_TASK_CODE_DUPLICATE = new ErrorCode(1_040_714_111, "盘点任务编码已存在"); ErrorCode WM_STOCK_TAKING_TASK_NOT_PREPARE = new ErrorCode(1_040_714_112, "只有草稿状态的盘点任务才允许此操作"); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/MesBizTypeConstants.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/MesBizTypeConstants.java index d1f0e0b..c61a7a1 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/MesBizTypeConstants.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/MesBizTypeConstants.java @@ -58,4 +58,8 @@ public final class MesBizTypeConstants { public static final int MD_USER = 604; // 人员:系统用户 public static final int MD_CLIENT = 605; // 客户:MesMdClientDO + // ========== 特殊类型(非业务实体) [900, 1000) ========== + + public static final int QUALITY_STATUS = 900; // 质量状态:非实体,用于盘点等场景的状态筛选 + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingPlanParamTypeEnum.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingPlanParamTypeEnum.java index 5ebab92..d45078a 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingPlanParamTypeEnum.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmStockTakingPlanParamTypeEnum.java @@ -18,7 +18,8 @@ public enum MesWmStockTakingPlanParamTypeEnum implements ArrayValuable LOCATION(MesBizTypeConstants.WM_LOCATION, "库区"), AREA(MesBizTypeConstants.WM_AREA, "库位"), ITEM(MesBizTypeConstants.MD_ITEM, "物料"), - BATCH(MesBizTypeConstants.WM_BATCH, "批次"); + BATCH(MesBizTypeConstants.WM_BATCH, "批次"), + QUALITY_STATUS(MesBizTypeConstants.QUALITY_STATUS, "质量状态"); public static final Integer[] ARRAYS = Arrays.stream(values()) .map(MesWmStockTakingPlanParamTypeEnum::getType).toArray(Integer[]::new); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanParamService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanParamService.java index b1ced63..77a6da5 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanParamService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanParamService.java @@ -6,6 +6,8 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.param import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO; import jakarta.validation.Valid; +import java.util.List; + /** * MES 盘点方案参数 Service 接口 */ @@ -64,4 +66,12 @@ public interface MesWmStockTakingPlanParamService { */ MesWmStockTakingPlanParamDO validateStockTakingPlanParamExists(Long id); + /** + * 根据盘点方案编号获取参数列表 + * + * @param planId 盘点方案编号 + * @return 盘点方案参数列表 + */ + List getStockTakingPlanParamListByPlanId(Long planId); + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanParamServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanParamServiceImpl.java index ed7f739..fbe06bc 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanParamServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanParamServiceImpl.java @@ -11,6 +11,8 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.List; + import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_STOCK_TAKING_PLAN_PARAM_NOT_EXISTS; @@ -86,4 +88,9 @@ public class MesWmStockTakingPlanParamServiceImpl implements MesWmStockTakingPla return param; } + @Override + public List getStockTakingPlanParamListByPlanId(Long planId) { + return stockTakingPlanParamMapper.selectListByPlanId(planId); + } + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanServiceImpl.java index caea6fd..8b785c6 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/plan/MesWmStockTakingPlanServiceImpl.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.MesWmStockTakingPlanPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.plan.vo.MesWmStockTakingPlanSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.plan.MesWmStockTakingPlanParamDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.plan.MesWmStockTakingPlanMapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -73,6 +74,13 @@ public class MesWmStockTakingPlanServiceImpl implements MesWmStockTakingPlanServ public void updateStockTakingPlanStatus(Long id, Integer status) { // 校验盘点方案存在 validateStockTakingPlanExists(id); + // 开启时,需要校验 params 非空 + if (CommonStatusEnum.isEnable(status)) { + List params = stockTakingPlanParamService.getStockTakingPlanParamListByPlanId(id); + if (CollUtil.isEmpty(params)) { + throw exception(WM_STOCK_TAKING_PLAN_PARAM_EMPTY); + } + } // 更新状态 stockTakingPlanMapper.updateById(new MesWmStockTakingPlanDO().setId(id).setStatus(status)); -- libgit2 0.21.4