From 05ec61e6de5afc124e1b3827b2ce6de98c64c7f8 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 22 Feb 2026 23:34:13 +0800 Subject: [PATCH] ✨ feat(mes): 添加到货通知单精简列表接口及状态筛选功能 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/arrivalnotice/MesWmArrivalNoticeController.java | 9 +++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptController.java | 18 ++++++++++++++---- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDO.java | 1 + yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java | 7 ++++--- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmArrivalNoticeStatusEnum.java | 4 ++-- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmItemReceiptStatusEnum.java | 7 ++++--- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeService.java | 14 +++++++++++--- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java | 31 ++++++++++++++++++++----------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptDetailServiceImpl.java | 14 +++++++++----- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptService.java | 15 +++++++++++---- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java | 27 ++++++++++++++++++++++----- 11 files changed, 107 insertions(+), 40 deletions(-) diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/arrivalnotice/MesWmArrivalNoticeController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/arrivalnotice/MesWmArrivalNoticeController.java index 75f7a58..059d11c 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/arrivalnotice/MesWmArrivalNoticeController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/arrivalnotice/MesWmArrivalNoticeController.java @@ -121,6 +121,15 @@ public class MesWmArrivalNoticeController { return success(true); } + @GetMapping("/simple-list") + @Operation(summary = "获得到货通知单精简列表") + @Parameter(name = "status", description = "状态", example = "2") + public CommonResult> getArrivalNoticeSimpleList( + @RequestParam(value = "status", required = false) Integer status) { + List list = arrivalNoticeService.getArrivalNoticeListByStatus(status); + return success(buildRespVOList(list)); + } + // ==================== 拼接 VO ==================== private List buildRespVOList(List list) { diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptController.java index 281364f..fe5079c 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptController.java @@ -137,12 +137,13 @@ public class MesWmItemReceiptController { return success(true); } - @PutMapping("/approve") - @Operation(summary = "审批采购入库单") + // TODO @芋艿:【待定,不要删除】这个是合适的单词么? + @PutMapping("/shelving") + @Operation(summary = "执行上架") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:update')") - public CommonResult approveItemReceipt(@RequestParam("id") Long id) { - itemReceiptService.approveItemReceipt(id); + public CommonResult shelvingItemReceipt(@RequestParam("id") Long id) { + itemReceiptService.shelvingItemReceipt(id); return success(true); } @@ -155,6 +156,15 @@ public class MesWmItemReceiptController { return success(true); } + @PutMapping("/cancel") + @Operation(summary = "取消采购入库单") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:update')") + public CommonResult cancelItemReceipt(@RequestParam("id") Long id) { + itemReceiptService.cancelItemReceipt(id); + return success(true); + } + // ==================== 拼接 VO ==================== private List buildRespVOList(List list) { diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDO.java index 30054b3..77cd54c 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDO.java @@ -53,6 +53,7 @@ public class MesWmItemReceiptDO extends BaseDO { * 关联 {@link MesWmArrivalNoticeDO#getId()} */ private Long noticeId; + // TODO @AI:不用存储,它冗余自 noticeId 订单,可以需要的时候去读取! /** * 采购订单编号 */ 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 ef318c7..18ffc98 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 @@ -322,8 +322,8 @@ public interface ErrorCodeConstants { ErrorCode WM_ARRIVAL_NOTICE_NOT_EXISTS = new ErrorCode(1_040_704_000, "到货通知单不存在"); ErrorCode WM_ARRIVAL_NOTICE_CODE_DUPLICATE = new ErrorCode(1_040_704_001, "到货通知单编码已存在"); ErrorCode WM_ARRIVAL_NOTICE_STATUS_NOT_PREPARE = new ErrorCode(1_040_704_002, "只有草稿状态才允许此操作"); - ErrorCode WM_ARRIVAL_NOTICE_STATUS_NOT_SUBMITTED = new ErrorCode(1_040_704_003, "只有已提交状态才允许审批"); - ErrorCode WM_ARRIVAL_NOTICE_STATUS_NOT_APPROVED = new ErrorCode(1_040_704_004, "只有已审批状态才允许完成"); + ErrorCode WM_ARRIVAL_NOTICE_STATUS_NOT_PENDING_QC = new ErrorCode(1_040_704_003, "只有待质检状态才允许审批"); + ErrorCode WM_ARRIVAL_NOTICE_STATUS_NOT_PENDING_RECEIPT = new ErrorCode(1_040_704_004, "只有待入库状态才允许完成"); ErrorCode WM_ARRIVAL_NOTICE_IQC_PENDING = new ErrorCode(1_040_704_005, "存在待检验行,无法审批通过"); ErrorCode WM_ARRIVAL_NOTICE_NO_LINE = new ErrorCode(1_040_704_006, "至少需要一条行项目"); ErrorCode WM_ARRIVAL_NOTICE_LINE_NOT_EXISTS = new ErrorCode(1_040_704_100, "到货通知单行不存在"); @@ -331,10 +331,11 @@ public interface ErrorCodeConstants { // ========== MES 仓库管理-采购入库单(1-040-705-000) ========== ErrorCode WM_ITEM_RECEIPT_NOT_EXISTS = new ErrorCode(1_040_705_000, "采购入库单不存在"); ErrorCode WM_ITEM_RECEIPT_CODE_DUPLICATE = new ErrorCode(1_040_705_001, "采购入库单编码已存在"); - ErrorCode WM_ITEM_RECEIPT_STATUS_NOT_PREPARE = new ErrorCode(1_040_705_002, "只有草稿状态才允许此操作"); + ErrorCode WM_ITEM_RECEIPT_STATUS_NOT_PREPARE = new ErrorCode(1_040_705_002, "只有草稿或待上架状态才允许此操作"); ErrorCode WM_ITEM_RECEIPT_NO_LINE = new ErrorCode(1_040_705_003, "至少需要一条行项目"); ErrorCode WM_ITEM_RECEIPT_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_705_004, "明细上架总数与行入库数量不匹配"); ErrorCode WM_ITEM_RECEIPT_STATUS_ERROR = new ErrorCode(1_040_705_005, "入库单状态不正确"); + ErrorCode WM_ITEM_RECEIPT_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_705_006, "已完成或已取消的入库单不允许取消"); ErrorCode WM_ITEM_RECEIPT_LINE_NOT_EXISTS = new ErrorCode(1_040_705_100, "采购入库单行不存在"); ErrorCode WM_ITEM_RECEIPT_DETAIL_NOT_EXISTS = new ErrorCode(1_040_705_200, "采购入库明细不存在"); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmArrivalNoticeStatusEnum.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmArrivalNoticeStatusEnum.java index 862b7fd..fe66902 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmArrivalNoticeStatusEnum.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmArrivalNoticeStatusEnum.java @@ -16,8 +16,8 @@ import java.util.Arrays; public enum MesWmArrivalNoticeStatusEnum implements ArrayValuable { PREPARE(0, "草稿"), - SUBMITTED(1, "已提交"), - APPROVED(2, "已审批"), + PENDING_QC(1, "待质检"), + PENDING_RECEIPT(2, "待入库"), FINISHED(3, "已完成"); public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesWmArrivalNoticeStatusEnum::getStatus).toArray(Integer[]::new); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmItemReceiptStatusEnum.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmItemReceiptStatusEnum.java index fc4b8b7..e52be57 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmItemReceiptStatusEnum.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/wm/MesWmItemReceiptStatusEnum.java @@ -16,9 +16,10 @@ import java.util.Arrays; public enum MesWmItemReceiptStatusEnum implements ArrayValuable { PREPARE(0, "草稿"), - SUBMITTED(1, "已提交"), - APPROVED(2, "已审批"), - FINISHED(3, "已完成"); + APPROVING(1, "待上架"), + APPROVED(2, "待入库"), + FINISHED(3, "已完成"), + CANCELED(4, "已取消"); public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesWmItemReceiptStatusEnum::getStatus).toArray(Integer[]::new); diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeService.java index 42cb60f..0d939c3 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeService.java @@ -56,21 +56,21 @@ public interface MesWmArrivalNoticeService { PageResult getArrivalNoticePage(MesWmArrivalNoticePageReqVO pageReqVO); /** - * 提交到货通知单(草稿 → 已提交) + * 提交到货通知单(草稿 → 待质检/待入库) * * @param id 编号 */ void submitArrivalNotice(Long id); /** - * 审批到货通知单(已提交 → 已审批) + * 审批到货通知单(待质检 → 待入库) * * @param id 编号 */ void approveArrivalNotice(Long id); /** - * 完成到货通知单(已审批 → 已完成),内部调用 + * 完成到货通知单(待入库 → 已完成),内部调用 * * @param id 编号 */ @@ -88,4 +88,12 @@ public interface MesWmArrivalNoticeService { return convertMap(getArrivalNoticeList(ids), MesWmArrivalNoticeDO::getId); } + /** + * 按状态获得到货通知单列表 + * + * @param status 状态 + * @return 到货通知单列表 + */ + List getArrivalNoticeListByStatus(Integer status); + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java index 39f86a9..47e2922 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/arrivalnotice/MesWmArrivalNoticeServiceImpl.java @@ -96,13 +96,13 @@ public class MesWmArrivalNoticeServiceImpl implements MesWmArrivalNoticeService // 检查所有行的 iqcCheckFlag:如果没有需要检验的行,则直接审批通过 boolean needCheck = CollectionUtils.anyMatch(lines, line -> Boolean.TRUE.equals(line.getIqcCheckFlag())); if (!needCheck) { - // 不需要检验,直接审批通过 + // 不需要检验,直接进入待入库 arrivalNoticeMapper.updateById(new MesWmArrivalNoticeDO() - .setId(id).setStatus(MesWmArrivalNoticeStatusEnum.APPROVED.getStatus())); + .setId(id).setStatus(MesWmArrivalNoticeStatusEnum.PENDING_RECEIPT.getStatus())); } else { - // 需要检验,提交待审批 + // 需要检验,进入待质检 arrivalNoticeMapper.updateById(new MesWmArrivalNoticeDO() - .setId(id).setStatus(MesWmArrivalNoticeStatusEnum.SUBMITTED.getStatus())); + .setId(id).setStatus(MesWmArrivalNoticeStatusEnum.PENDING_QC.getStatus())); } } @@ -111,9 +111,9 @@ public class MesWmArrivalNoticeServiceImpl implements MesWmArrivalNoticeService public void approveArrivalNotice(Long id) { // 校验存在 MesWmArrivalNoticeDO notice = validateArrivalNoticeExists(id); - // 校验状态:只有已提交才允许审批 - if (ObjUtil.notEqual(MesWmArrivalNoticeStatusEnum.SUBMITTED.getStatus(), notice.getStatus())) { - throw exception(WM_ARRIVAL_NOTICE_STATUS_NOT_SUBMITTED); + // 校验状态:只有待质检才允许审批 + if (ObjUtil.notEqual(MesWmArrivalNoticeStatusEnum.PENDING_QC.getStatus(), notice.getStatus())) { + throw exception(WM_ARRIVAL_NOTICE_STATUS_NOT_PENDING_QC); } // 校验所有 iqcCheckFlag=true 的行必须 iqcId 不为空 @@ -125,16 +125,16 @@ public class MesWmArrivalNoticeServiceImpl implements MesWmArrivalNoticeService } // 审批通过 arrivalNoticeMapper.updateById(new MesWmArrivalNoticeDO() - .setId(id).setStatus(MesWmArrivalNoticeStatusEnum.APPROVED.getStatus())); + .setId(id).setStatus(MesWmArrivalNoticeStatusEnum.PENDING_RECEIPT.getStatus())); } @Override public void finishArrivalNotice(Long id) { // 校验存在 MesWmArrivalNoticeDO notice = validateArrivalNoticeExists(id); - // 校验状态:只有已审批才允许完成 - if (ObjUtil.notEqual(MesWmArrivalNoticeStatusEnum.APPROVED.getStatus(), notice.getStatus())) { - throw exception(WM_ARRIVAL_NOTICE_STATUS_NOT_APPROVED); + // 校验状态:只有待入库才允许完成 + if (ObjUtil.notEqual(MesWmArrivalNoticeStatusEnum.PENDING_RECEIPT.getStatus(), notice.getStatus())) { + throw exception(WM_ARRIVAL_NOTICE_STATUS_NOT_PENDING_RECEIPT); } // 完成 @@ -150,6 +150,15 @@ public class MesWmArrivalNoticeServiceImpl implements MesWmArrivalNoticeService return arrivalNoticeMapper.selectByIds(ids); } + @Override + public List getArrivalNoticeListByStatus(Integer status) { + // TODO @AI:通过 selectListByStatus 方法实现,更通用; + if (status == null) { + return arrivalNoticeMapper.selectList(); + } + return arrivalNoticeMapper.selectList(MesWmArrivalNoticeDO::getStatus, status); + } + private MesWmArrivalNoticeDO validateArrivalNoticeExists(Long id) { MesWmArrivalNoticeDO notice = arrivalNoticeMapper.selectById(id); if (notice == null) { diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptDetailServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptDetailServiceImpl.java index 90c8622..08b83e1 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptDetailServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptDetailServiceImpl.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.mes.service.wm.itemreceipt; import cn.iocoder.yudao.framework.common.pojo.PageResult; 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.itemreceipt.vo.detail.MesWmItemReceiptDetailPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.detail.MesWmItemReceiptDetailSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDO; @@ -36,7 +37,7 @@ public class MesWmItemReceiptDetailServiceImpl implements MesWmItemReceiptDetail @Override public Long createItemReceiptDetail(MesWmItemReceiptDetailSaveReqVO createReqVO) { // 校验父单据存在且为草稿状态 - validateReceiptStatusDraft(createReqVO.getReceiptId()); + validateReceiptStatusForDetailEdit(createReqVO.getReceiptId()); MesWmItemReceiptDetailDO detail = BeanUtils.toBean(createReqVO, MesWmItemReceiptDetailDO.class); itemReceiptDetailMapper.insert(detail); @@ -48,7 +49,7 @@ public class MesWmItemReceiptDetailServiceImpl implements MesWmItemReceiptDetail // 校验存在 MesWmItemReceiptDetailDO detail = validateItemReceiptDetailExists(updateReqVO.getId()); // 校验父单据存在且为草稿状态 - validateReceiptStatusDraft(detail.getReceiptId()); + validateReceiptStatusForDetailEdit(detail.getReceiptId()); // 更新 MesWmItemReceiptDetailDO updateObj = BeanUtils.toBean(updateReqVO, MesWmItemReceiptDetailDO.class); @@ -101,15 +102,18 @@ public class MesWmItemReceiptDetailServiceImpl implements MesWmItemReceiptDetail return detail; } + // TODO @AI:在 itemReceiptService 里,封装一个这个方法;最好不要是 fordetail,而不是 prepare + approving 状态; /** - * 校验父采购入库单存在且为草稿状态 + * 校验父采购入库单存在且允许编辑明细(草稿或待上架状态) */ - private void validateReceiptStatusDraft(Long receiptId) { + private void validateReceiptStatusForDetailEdit(Long receiptId) { MesWmItemReceiptDO receipt = itemReceiptService.getItemReceipt(receiptId); if (receipt == null) { throw exception(WM_ITEM_RECEIPT_NOT_EXISTS); } - if (ObjUtil.notEqual(MesWmItemReceiptStatusEnum.PREPARE.getStatus(), receipt.getStatus())) { + // TODO @AI:在 ObjectUtils 里,封装一个 notEquals 方法,简化代码; + if (ObjUtil.notEqual(MesWmItemReceiptStatusEnum.PREPARE.getStatus(), receipt.getStatus()) + && ObjUtil.notEqual(MesWmItemReceiptStatusEnum.APPROVING.getStatus(), receipt.getStatus())) { throw exception(WM_ITEM_RECEIPT_STATUS_NOT_PREPARE); } } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptService.java index e8c34a2..8f20eaf 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptService.java @@ -50,24 +50,31 @@ public interface MesWmItemReceiptService { PageResult getItemReceiptPage(MesWmItemReceiptPageReqVO pageReqVO); /** - * 提交采购入库单(草稿 → 已提交) + * 提交采购入库单(草稿 → 待上架) * * @param id 编号 */ void submitItemReceipt(Long id); /** - * 审批采购入库单(已提交 → 已审批) + * 执行上架(待上架 → 待入库) * * @param id 编号 */ - void approveItemReceipt(Long id); + void shelvingItemReceipt(Long id); /** - * 执行入库(已审批 → 已完成),更新库存台账 + * 执行入库(待入库 → 已完成),更新库存台账 * * @param id 编号 */ void executeItemReceipt(Long id); + /** + * 取消采购入库单(任意非已完成/已取消状态 → 已取消) + * + * @param id 编号 + */ + void cancelItemReceipt(Long id); + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java index 362de2f..58fadab 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java @@ -107,17 +107,17 @@ public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService { throw exception(WM_ITEM_RECEIPT_NO_LINE); } - // 提交 + // 提交(草稿 → 待上架) itemReceiptMapper.updateById(new MesWmItemReceiptDO() - .setId(id).setStatus(MesWmItemReceiptStatusEnum.SUBMITTED.getStatus())); + .setId(id).setStatus(MesWmItemReceiptStatusEnum.APPROVING.getStatus())); } @Override @Transactional(rollbackFor = Exception.class) - public void approveItemReceipt(Long id) { + public void shelvingItemReceipt(Long id) { // 校验存在 MesWmItemReceiptDO receipt = validateItemReceiptExists(id); - if (ObjUtil.notEqual(MesWmItemReceiptStatusEnum.SUBMITTED.getStatus(), receipt.getStatus())) { + if (ObjUtil.notEqual(MesWmItemReceiptStatusEnum.APPROVING.getStatus(), receipt.getStatus())) { throw exception(WM_ITEM_RECEIPT_STATUS_ERROR); } // 校验每行的 SUM(detail.quantity) = line.receivedQuantity @@ -131,7 +131,7 @@ public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService { } } - // 审批 + // 执行上架(待上架 → 待入库) itemReceiptMapper.updateById(new MesWmItemReceiptDO() .setId(id).setStatus(MesWmItemReceiptStatusEnum.APPROVED.getStatus())); } @@ -162,6 +162,23 @@ public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService { } } + @Override + @Transactional(rollbackFor = Exception.class) + public void cancelItemReceipt(Long id) { + // 校验存在 + MesWmItemReceiptDO receipt = validateItemReceiptExists(id); + // 已完成和已取消不允许取消 + // TODO @AI:在 ObjectUtils 里,有个 equalsAny; + // TODO @芋艿:【待确定】是不是就这 2 个状态了; + if (ObjUtil.equal(MesWmItemReceiptStatusEnum.FINISHED.getStatus(), receipt.getStatus()) + || ObjUtil.equal(MesWmItemReceiptStatusEnum.CANCELED.getStatus(), receipt.getStatus())) { + throw exception(WM_ITEM_RECEIPT_CANCEL_NOT_ALLOWED); + } + // 取消 + itemReceiptMapper.updateById(new MesWmItemReceiptDO() + .setId(id).setStatus(MesWmItemReceiptStatusEnum.CANCELED.getStatus())); + } + private MesWmItemReceiptDO validateItemReceiptExists(Long id) { MesWmItemReceiptDO receipt = itemReceiptMapper.selectById(id); if (receipt == null) { -- libgit2 0.21.4