Commit e999815965c7963dfca9cd78d9a5e9bed795a860

Authored by YunaiV
1 parent 8ea0c2f0

✨ feat(mes): 添加物料批次管理校验逻辑

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 }