From 8ac5704591f0fd6f6830c8ccbf4f935f5b09e6ac Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 29 Mar 2026 21:01:14 +0800 Subject: [PATCH] ✨ feat(mes): 增强退货单功能,新增行数据校验与删除逻辑 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnvendor/vo/detail/MesWmReturnVendorDetailSaveReqVO.java | 3 +++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/returnvendor/MesWmReturnVendorDetailMapper.java | 4 ++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/returnvendor/MesWmReturnVendorMapper.java | 4 ++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java | 4 ++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java | 1 + yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorDetailService.java | 7 +++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorDetailServiceImpl.java | 25 +++++++++++++++++++++++-- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java | 35 ++++++++++++++++++++++++----------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorService.java | 8 ++++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorServiceImpl.java | 55 +++++++++++++++++++++++++++++++++++++++++-------------- 10 files changed, 119 insertions(+), 27 deletions(-) diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnvendor/vo/detail/MesWmReturnVendorDetailSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnvendor/vo/detail/MesWmReturnVendorDetailSaveReqVO.java index b2906ac..b93148f 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnvendor/vo/detail/MesWmReturnVendorDetailSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnvendor/vo/detail/MesWmReturnVendorDetailSaveReqVO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.detail; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.DecimalMin; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -27,6 +28,7 @@ public class MesWmReturnVendorDetailSaveReqVO { @Schema(description = "退货数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "300.00") @NotNull(message = "退货数量不能为空") + @DecimalMin(value = "0", inclusive = false, message = "退货数量必须大于 0") private BigDecimal quantity; @Schema(description = "批次编号", example = "1") @@ -48,3 +50,4 @@ public class MesWmReturnVendorDetailSaveReqVO { private String remark; } + diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/returnvendor/MesWmReturnVendorDetailMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/returnvendor/MesWmReturnVendorDetailMapper.java index c515d82..da49ae0 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/returnvendor/MesWmReturnVendorDetailMapper.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/returnvendor/MesWmReturnVendorDetailMapper.java @@ -24,4 +24,8 @@ public interface MesWmReturnVendorDetailMapper extends BaseMapperX details = returnVendorDetailService.getReturnVendorDetailListByReturnId(id); + if (CollUtil.isEmpty(details)) { + throw exception(WM_RETURN_VENDOR_NO_DETAIL); + } // 2. 遍历所有明细,创建库存事务(扣减库存 + 记录流水) - createTransactionList(returnVendor); + createTransactionList(returnVendor, details); // 3. 更新退货单状态 returnVendorMapper.updateById(new MesWmReturnVendorDO() .setId(id).setStatus(MesWmReturnVendorStatusEnum.FINISHED.getStatus())); } - private void createTransactionList(MesWmReturnVendorDO returnVendor) { - List details = returnVendorDetailService.getReturnVendorDetailListByReturnId(returnVendor.getId()); + private void createTransactionList(MesWmReturnVendorDO returnVendor, List details) { wmTransactionService.createTransactionList(convertList(details, detail -> new MesWmTransactionSaveReqDTO() .setType(MesWmTransactionTypeEnum.OUT.getType()).setItemId(detail.getItemId()) .setQuantity(detail.getQuantity().negate()) // 出库数量为负数 @@ -197,10 +199,8 @@ public class MesWmReturnVendorServiceImpl implements MesWmReturnVendorService { return returnVendor; } - /** - * 校验供应商退货单存在且为准备中状态 - */ - private MesWmReturnVendorDO validateReturnVendorExistsAndPrepare(Long id) { + @Override + public MesWmReturnVendorDO validateReturnVendorExistsAndPrepare(Long id) { MesWmReturnVendorDO returnVendor = validateReturnVendorExists(id); if (ObjUtil.notEqual(MesWmReturnVendorStatusEnum.PREPARE.getStatus(), returnVendor.getStatus())) { throw exception(WM_RETURN_VENDOR_STATUS_INVALID); @@ -208,6 +208,33 @@ public class MesWmReturnVendorServiceImpl implements MesWmReturnVendorService { return returnVendor; } + /** + * 校验退货单创建/修改的公共数据 + */ + private void validateReturnVendorSaveData(MesWmReturnVendorSaveReqVO reqVO) { + // 校验存在 + 草稿状态(仅修改时) + if (reqVO.getId() != null) { + validateReturnVendorExistsAndPrepare(reqVO.getId()); + } + // 校验供应商存在 + vendorService.validateVendorExists(reqVO.getVendorId()); + // 校验编码唯一 + validateCodeUnique(reqVO.getId(), reqVO.getCode()); + } + + /** + * 校验退货单编号唯一 + */ + private void validateCodeUnique(Long id, String code) { + MesWmReturnVendorDO existing = returnVendorMapper.selectByCode(code); + if (existing == null) { + return; + } + if (ObjUtil.notEqual(id, existing.getId())) { + throw exception(WM_RETURN_VENDOR_CODE_DUPLICATE); + } + } + @Override public Long getReturnVendorCountByVendorId(Long vendorId) { return returnVendorMapper.selectCountByVendorId(vendorId); -- libgit2 0.21.4