diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnissue/MesWmReturnIssueController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnissue/MesWmReturnIssueController.java index ff0be99..3c61b0c 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnissue/MesWmReturnIssueController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnissue/MesWmReturnIssueController.java @@ -115,17 +115,8 @@ public class MesWmReturnIssueController { return success(true); } - @PutMapping("/confirm") - @Operation(summary = "确认生产退料单") - @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('mes:wm-return-issue:update')") - public CommonResult confirmReturnIssue(@RequestParam("id") Long id) { - issueService.confirmReturnIssue(id); - return success(true); - } - @PutMapping("/submit") - @Operation(summary = "提交生产退料单") + @Operation(summary = "提交生产退料单(草稿 → 待检验/待上架)") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('mes:wm-return-issue:update')") public CommonResult submitReturnIssue(@RequestParam("id") Long id) { 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 86660f6..66b183d 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 @@ -381,9 +381,13 @@ public interface ErrorCodeConstants { // ========== MES 仓库管理-生产退料单(1-040-710-000) ========== ErrorCode WM_RETURN_ISSUE_NOT_EXISTS = new ErrorCode(1_040_710_000, "生产退料单不存在"); ErrorCode WM_RETURN_ISSUE_STATUS_INVALID = new ErrorCode(1_040_710_001, "生产退料单状态不正确,无法执行该操作"); - ErrorCode WM_RETURN_ISSUE_NO_LINE = new ErrorCode(1_040_710_002, "生产退料单至少需要一条行数据"); - ErrorCode WM_RETURN_ISSUE_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_710_003, "退料单行数量与明细数量不一致"); - ErrorCode WM_RETURN_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_710_004, "生产退料单已完成或已取消,无法取消"); + ErrorCode WM_RETURN_ISSUE_NOT_PREPARE = new ErrorCode(1_040_710_002, "只有草稿状态的退料单才可操作"); + ErrorCode WM_RETURN_ISSUE_NOT_CONFIRMED = new ErrorCode(1_040_710_003, "只有待检验状态的退料单才可提交"); + ErrorCode WM_RETURN_ISSUE_NOT_APPROVING = new ErrorCode(1_040_710_004, "只有待上架状态的退料单才可入库上架"); + ErrorCode WM_RETURN_ISSUE_NOT_APPROVED = new ErrorCode(1_040_710_005, "只有待执行退料状态的退料单才可完成"); + ErrorCode WM_RETURN_ISSUE_NO_LINE = new ErrorCode(1_040_710_006, "生产退料单至少需要一条行数据"); + ErrorCode WM_RETURN_ISSUE_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_710_007, "退料单行数量与明细数量不一致"); + ErrorCode WM_RETURN_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_710_008, "生产退料单已完成或已取消,无法取消"); ErrorCode WM_RETURN_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_710_100, "生产退料单行不存在"); ErrorCode WM_RETURN_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_710_200, "生产退料单明细不存在"); ErrorCode WM_RETURN_ISSUE_DETAIL_QUANTITY_INVALID = new ErrorCode(1_040_710_201, "退料明细数量必须大于0"); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmReturnIssueStatusEnum.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmReturnIssueStatusEnum.java index a3acc0f..918b13d 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmReturnIssueStatusEnum.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmReturnIssueStatusEnum.java @@ -27,7 +27,7 @@ public enum MesWmReturnIssueStatusEnum implements ArrayValuable { /** * 待检验(已确认,等待质检) * - * 对应方法:{@link MesWmReturnIssueService#confirmReturnIssue(Long)} + * 对应方法:{@link MesWmReturnIssueService#submitReturnIssue(Long)} */ CONFIRMED(MesOrderStatusConstants.CONFIRMED, "待检验"), // "UNCHECK" /** diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueService.java index 13c13ca..b03959c 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueService.java @@ -58,14 +58,7 @@ public interface MesWmReturnIssueService { MesWmReturnIssueDO validateReturnIssueExists(Long id); /** - * 确认生产退料单(草稿 → 待检验) - * - * @param id 编号 - */ - void confirmReturnIssue(Long id); - - /** - * 提交生产退料单(待检验 → 待上架) + * 提交生产退料单(草稿 → 待检验/待上架) * * @param id 编号 */ diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueServiceImpl.java index c225b8d..87f5160 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueServiceImpl.java @@ -8,10 +8,11 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.MesWmReturnIssuePageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.returnissue.vo.MesWmReturnIssueSaveReqVO; -import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDetailDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDetailDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueLineDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnissue.MesWmReturnIssueMapper; +import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnIssueStatusEnum; import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; @@ -108,7 +109,7 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService { @Override @Transactional(rollbackFor = Exception.class) - public void confirmReturnIssue(Long id) { + public void submitReturnIssue(Long id) { // 校验存在 + 草稿状态 validateReturnIssueExistsAndPrepare(id); // 校验至少有一条行 @@ -117,37 +118,25 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService { throw exception(WM_RETURN_ISSUE_NO_LINE); } - // 确认(草稿 → 待检验) - issueMapper.updateById(new MesWmReturnIssueDO() - .setId(id).setStatus(MesWmReturnIssueStatusEnum.CONFIRMED.getStatus())); - } + // 2.1.1 检查是否有待检验的物料 + boolean hasPendingQc = CollUtil.contains(lines, + line -> MesWmQualityStatusEnum.PENDING.getStatus().equals(line.getQualityStatus())); + // 2.1.2 确定目标状态:1)有待检验物料 → 待检验状态;2)无待检验物料 → 待上架状态 + // TODO @芋艿:RQC 质量检测的接入 + Integer targetStatus = hasPendingQc ? MesWmReturnIssueStatusEnum.CONFIRMED.getStatus() + : MesWmReturnIssueStatusEnum.APPROVING.getStatus(); - @Override - @Transactional(rollbackFor = Exception.class) - public void submitReturnIssue(Long id) { - // 校验存在 + 待检验状态 - MesWmReturnIssueDO issue = validateReturnIssueExists(id); - if (ObjUtil.notEqual(MesWmReturnIssueStatusEnum.CONFIRMED.getStatus(), issue.getStatus())) { - throw exception(WM_RETURN_ISSUE_STATUS_INVALID); - } - // 校验至少有一条行 - List lines = issueLineService.getReturnIssueLineListByIssueId(id); - if (CollUtil.isEmpty(lines)) { - throw exception(WM_RETURN_ISSUE_NO_LINE); - } - - // 提交(待检验 → 待上架) - issueMapper.updateById(new MesWmReturnIssueDO() - .setId(id).setStatus(MesWmReturnIssueStatusEnum.APPROVING.getStatus())); + // 2.2 提交(草稿 → 待检验/待上架) + issueMapper.updateById(new MesWmReturnIssueDO().setId(id).setStatus(targetStatus)); } @Override @Transactional(rollbackFor = Exception.class) public void stockReturnIssue(Long id) { - // 校验存在 + // 校验存在 + 待上架状态 MesWmReturnIssueDO issue = validateReturnIssueExists(id); if (ObjUtil.notEqual(MesWmReturnIssueStatusEnum.APPROVING.getStatus(), issue.getStatus())) { - throw exception(WM_RETURN_ISSUE_STATUS_INVALID); + throw exception(WM_RETURN_ISSUE_NOT_APPROVING); } // 入库上架(待上架 → 待执行退料) issueMapper.updateById(new MesWmReturnIssueDO() @@ -157,10 +146,10 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService { @Override @Transactional(rollbackFor = Exception.class) public void finishReturnIssue(Long id) { - // 校验存在 + // 校验存在 + 待执行退料状态 MesWmReturnIssueDO issue = validateReturnIssueExists(id); if (ObjUtil.notEqual(MesWmReturnIssueStatusEnum.APPROVED.getStatus(), issue.getStatus())) { - throw exception(WM_RETURN_ISSUE_STATUS_INVALID); + throw exception(WM_RETURN_ISSUE_NOT_APPROVED); } // 完成退料(待执行退料 → 已完成),更新库存台账 @@ -224,7 +213,7 @@ public class MesWmReturnIssueServiceImpl implements MesWmReturnIssueService { private MesWmReturnIssueDO validateReturnIssueExistsAndPrepare(Long id) { MesWmReturnIssueDO issue = validateReturnIssueExists(id); if (ObjUtil.notEqual(MesWmReturnIssueStatusEnum.PREPARE.getStatus(), issue.getStatus())) { - throw exception(WM_RETURN_ISSUE_STATUS_INVALID); + throw exception(WM_RETURN_ISSUE_NOT_PREPARE); } return issue; }