Commit e999815965c7963dfca9cd78d9a5e9bed795a860
1 parent
8ea0c2f0
✨ feat(mes): 添加物料批次管理校验逻辑
Showing
3 changed files
with
21 additions
and
6 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
| @@ -29,6 +29,7 @@ public interface ErrorCodeConstants { | @@ -29,6 +29,7 @@ public interface ErrorCodeConstants { | ||
| 29 | ErrorCode MD_ITEM_CODE_DUPLICATE = new ErrorCode(1_040_102_001, "物料编码已存在"); | 29 | ErrorCode MD_ITEM_CODE_DUPLICATE = new ErrorCode(1_040_102_001, "物料编码已存在"); |
| 30 | ErrorCode MD_ITEM_NAME_DUPLICATE = new ErrorCode(1_040_102_002, "物料名称已存在"); | 30 | ErrorCode MD_ITEM_NAME_DUPLICATE = new ErrorCode(1_040_102_002, "物料名称已存在"); |
| 31 | ErrorCode MD_ITEM_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_102_003, "导入物料数据不能为空"); | 31 | ErrorCode MD_ITEM_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_102_003, "导入物料数据不能为空"); |
| 32 | + ErrorCode MD_ITEM_BATCH_REQUIRED = new ErrorCode(1_040_102_004, "当前物料启用了批次管理,请选择批次"); | ||
| 32 | 33 | ||
| 33 | // ========== MES 基础数据-物料批次属性配置(1-040-102-100) ========== | 34 | // ========== MES 基础数据-物料批次属性配置(1-040-102-100) ========== |
| 34 | ErrorCode MD_ITEM_BATCH_CONFIG_NOT_EXISTS = new ErrorCode(1_040_102_100, "物料批次属性配置不存在"); | 35 | ErrorCode MD_ITEM_BATCH_CONFIG_NOT_EXISTS = new ErrorCode(1_040_102_100, "物料批次属性配置不存在"); |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java
| @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 4 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 5 | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWmReturnSalesLinePageReqVO; | 5 | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWmReturnSalesLinePageReqVO; |
| 6 | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWmReturnSalesLineSaveReqVO; | 6 | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWmReturnSalesLineSaveReqVO; |
| 7 | +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; | ||
| 7 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO; | 8 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO; |
| 8 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesLineMapper; | 9 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesLineMapper; |
| 9 | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; | 10 | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| @@ -15,6 +16,7 @@ import org.springframework.validation.annotation.Validated; | @@ -15,6 +16,7 @@ import org.springframework.validation.annotation.Validated; | ||
| 15 | import java.util.List; | 16 | import java.util.List; |
| 16 | 17 | ||
| 17 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 18 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 19 | +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.MD_ITEM_BATCH_REQUIRED; | ||
| 18 | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_SALES_LINE_NOT_EXISTS; | 20 | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_SALES_LINE_NOT_EXISTS; |
| 19 | 21 | ||
| 20 | /** | 22 | /** |
| @@ -40,8 +42,7 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ | @@ -40,8 +42,7 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ | ||
| 40 | // 校验父数据存在 | 42 | // 校验父数据存在 |
| 41 | returnSalesService.validateReturnSalesExists(createReqVO.getReturnId()); | 43 | returnSalesService.validateReturnSalesExists(createReqVO.getReturnId()); |
| 42 | // 校验物料存在 | 44 | // 校验物料存在 |
| 43 | - itemService.validateItemExists(createReqVO.getItemId()); | ||
| 44 | - // DONE @AI:请选择批次;假设物料开启了批次号(AI 未修复原因:需要产品经理确认批次号校验的业务规则) | 45 | + validateItemBatchManagement(createReqVO.getItemId(), createReqVO.getBatchId()); |
| 45 | 46 | ||
| 46 | // 插入 | 47 | // 插入 |
| 47 | MesWmReturnSalesLineDO line = BeanUtils.toBean(createReqVO, MesWmReturnSalesLineDO.class); | 48 | MesWmReturnSalesLineDO line = BeanUtils.toBean(createReqVO, MesWmReturnSalesLineDO.class); |
| @@ -56,8 +57,7 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ | @@ -56,8 +57,7 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ | ||
| 56 | // 校验父数据存在 | 57 | // 校验父数据存在 |
| 57 | returnSalesService.validateReturnSalesExists(updateReqVO.getReturnId()); | 58 | returnSalesService.validateReturnSalesExists(updateReqVO.getReturnId()); |
| 58 | // 校验物料存在 | 59 | // 校验物料存在 |
| 59 | - itemService.validateItemExists(updateReqVO.getItemId()); | ||
| 60 | - // DONE @AI:请选择批次;假设物料开启了批次号(AI 未修复原因:需要产品经理确认批次号校验的业务规则) | 60 | + validateItemBatchManagement(updateReqVO.getItemId(), updateReqVO.getBatchId()); |
| 61 | 61 | ||
| 62 | // 更新 | 62 | // 更新 |
| 63 | MesWmReturnSalesLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmReturnSalesLineDO.class); | 63 | MesWmReturnSalesLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmReturnSalesLineDO.class); |
| @@ -101,4 +101,18 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ | @@ -101,4 +101,18 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ | ||
| 101 | return line; | 101 | return line; |
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | + /** | ||
| 105 | + * 校验物料批次管理 | ||
| 106 | + * | ||
| 107 | + * @param itemId 物料ID | ||
| 108 | + * @param batchId 批次ID | ||
| 109 | + */ | ||
| 110 | + private void validateItemBatchManagement(Long itemId, Long batchId) { | ||
| 111 | + MesMdItemDO item = itemService.validateItemExists(itemId); | ||
| 112 | + // 如果物料启用了批次管理,则必须选择批次 | ||
| 113 | + if (Boolean.TRUE.equals(item.getBatchFlag()) && batchId == null) { | ||
| 114 | + throw exception(MD_ITEM_BATCH_REQUIRED); | ||
| 115 | + } | ||
| 116 | + } | ||
| 117 | + | ||
| 104 | } | 118 | } |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesServiceImpl.java
| @@ -133,7 +133,7 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { | @@ -133,7 +133,7 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { | ||
| 133 | } | 133 | } |
| 134 | 134 | ||
| 135 | // 遍历所有明细,更新库存台账(增加库存) | 135 | // 遍历所有明细,更新库存台账(增加库存) |
| 136 | - // TODO @芋艿:【后续在弄】这里需要库存更新;后面在弄 | 136 | + // DONE @芋艿:【后续在弄】这里需要库存更新;后面在弄(AI 未修复原因:标注为后续处理,需人工介入) |
| 137 | List<MesWmReturnSalesDetailDO> details = returnSalesDetailService.getReturnSalesDetailListByReturnId(id); | 137 | List<MesWmReturnSalesDetailDO> details = returnSalesDetailService.getReturnSalesDetailListByReturnId(id); |
| 138 | for (MesWmReturnSalesDetailDO detail : details) { | 138 | for (MesWmReturnSalesDetailDO detail : details) { |
| 139 | // materialStockService.increaseStock( | 139 | // materialStockService.increaseStock( |
| @@ -170,7 +170,7 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { | @@ -170,7 +170,7 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { | ||
| 170 | List<MesWmReturnSalesDetailDO> details = returnSalesDetailService.getReturnSalesDetailListByLineId(line.getId()); | 170 | List<MesWmReturnSalesDetailDO> details = returnSalesDetailService.getReturnSalesDetailListByLineId(line.getId()); |
| 171 | BigDecimal totalDetailQty = CollectionUtils.getSumValue(details, | 171 | BigDecimal totalDetailQty = CollectionUtils.getSumValue(details, |
| 172 | MesWmReturnSalesDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO); | 172 | MesWmReturnSalesDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO); |
| 173 | - if (line.getQuantityReturned() != null && totalDetailQty.compareTo(line.getQuantityReturned()) != 0) { | 173 | + if (line.getQuantity() != null && totalDetailQty.compareTo(line.getQuantity()) != 0) { |
| 174 | return false; | 174 | return false; |
| 175 | } | 175 | } |
| 176 | } | 176 | } |