Commit c9c362a294570aa3113058a96938c332395fd3b3

Authored by YunaiV
1 parent e9998159

✨ feat(mes): 添加批量更新退货单行质量状态功能

yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineService.java
... ... @@ -76,4 +76,12 @@ public interface MesWmReturnSalesLineService {
76 76 */
77 77 MesWmReturnSalesLineDO validateReturnSalesLineExists(Long id);
78 78  
  79 + /**
  80 + * 批量更新退货单行的质量状态
  81 + *
  82 + * @param returnId 退货单ID
  83 + * @param qualityStatus 质量状态
  84 + */
  85 + void updateQualityStatusByReturnId(Long returnId, String qualityStatus);
  86 +
79 87 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java
... ... @@ -101,6 +101,16 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ
101 101 return line;
102 102 }
103 103  
  104 + @Override
  105 + public void updateQualityStatusByReturnId(Long returnId, String qualityStatus) {
  106 + List<MesWmReturnSalesLineDO> lines = returnSalesLineMapper.selectListByReturnId(returnId);
  107 + for (MesWmReturnSalesLineDO line : lines) {
  108 + returnSalesLineMapper.updateById(new MesWmReturnSalesLineDO()
  109 + .setId(line.getId())
  110 + .setQualityStatus(qualityStatus));
  111 + }
  112 + }
  113 +
104 114 /**
105 115 * 校验物料批次管理
106 116 *
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesServiceImpl.java
... ... @@ -8,12 +8,15 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
8 8 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
9 9 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.MesWmReturnSalesPageReqVO;
10 10 import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.MesWmReturnSalesSaveReqVO;
  11 +import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
11 12 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDO;
12 13 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDetailDO;
13 14 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO;
14 15 import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesMapper;
  16 +import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum;
15 17 import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum;
16 18 import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService;
  19 +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
17 20 import jakarta.annotation.Resource;
18 21 import org.springframework.stereotype.Service;
19 22 import org.springframework.transaction.annotation.Transactional;
... ... @@ -21,6 +24,7 @@ import org.springframework.validation.annotation.Validated;
21 24  
22 25 import java.math.BigDecimal;
23 26 import java.util.List;
  27 +import java.util.Map;
24 28  
25 29 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
26 30 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
... ... @@ -43,6 +47,8 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService {
43 47 private MesWmReturnSalesDetailService returnSalesDetailService;
44 48 @Resource
45 49 private MesMdClientService clientService;
  50 + @Resource
  51 + private MesMdItemService itemService;
46 52  
47 53 @Override
48 54 @Transactional(rollbackFor = Exception.class)
... ... @@ -108,6 +114,10 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService {
108 114 // 提交(草稿 -> 待执行)
109 115 returnSalesMapper.updateById(new MesWmReturnSalesDO()
110 116 .setId(id).setStatus(MesWmReturnSalesStatusEnum.APPROVING.getStatus()));
  117 +
  118 + // DONE @AI:全部的行设置为待检验状态
  119 + returnSalesLineService.updateQualityStatusByReturnId(id,
  120 + String.valueOf(MesWmQualityStatusEnum.PENDING.getStatus()));
111 121 }
112 122  
113 123 @Override
... ... @@ -126,13 +136,33 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService {
126 136 @Override
127 137 @Transactional(rollbackFor = Exception.class)
128 138 public void stockReturnSales(Long id) {
129   - // 校验存在
  139 + // 1.1 校验存在 + 待上架状态
130 140 MesWmReturnSalesDO returnSales = validateReturnSalesExists(id);
131 141 if (ObjUtil.notEqual(MesWmReturnSalesStatusEnum.APPROVED.getStatus(), returnSales.getStatus())) {
132 142 throw exception(WM_RETURN_SALES_STATUS_NOT_APPROVED);
133 143 }
  144 + // 1.2 检查每个行的明细数量是否完成上架
  145 + List<MesWmReturnSalesLineDO> lines = returnSalesLineService.getReturnSalesLineListByReturnId(id);
  146 + if (CollUtil.isNotEmpty(lines)) {
  147 + // 批量查询所有明细
  148 + List<MesWmReturnSalesDetailDO> allDetails = returnSalesDetailService.getReturnSalesDetailListByReturnId(id);
  149 + Map<Long, List<MesWmReturnSalesDetailDO>> detailMap = CollectionUtils.convertMultiMap(
  150 + allDetails, MesWmReturnSalesDetailDO::getLineId);
  151 + // 检查每行的明细数量
  152 + for (MesWmReturnSalesLineDO line : lines) {
  153 + List<MesWmReturnSalesDetailDO> details = detailMap.getOrDefault(line.getId(), List.of());
  154 + BigDecimal totalDetailQuantity = CollectionUtils.getSumValue(details,
  155 + MesWmReturnSalesDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO);
  156 + // 对比行数量与明细总数量,不满足直接抛出
  157 + if (line.getQuantity().compareTo(totalDetailQuantity) > 0) {
  158 + MesMdItemDO item = itemService.validateItemExists(line.getItemId());
  159 + throw exception(WM_RETURN_SALES_DETAIL_QUANTITY_MISMATCH,
  160 + item.getCode() + " " + item.getName() + " 未完成上架");
  161 + }
  162 + }
  163 + }
134 164  
135   - // 遍历所有明细,更新库存台账(增加库存)
  165 + // 2. 遍历所有明细,更新库存台账(增加库存)
136 166 // DONE @芋艿:【后续在弄】这里需要库存更新;后面在弄(AI 未修复原因:标注为后续处理,需人工介入)
137 167 List<MesWmReturnSalesDetailDO> details = returnSalesDetailService.getReturnSalesDetailListByReturnId(id);
138 168 for (MesWmReturnSalesDetailDO detail : details) {
... ... @@ -141,7 +171,7 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService {
141 171 // detail.getBatchId(), detail.getQuantity(), null, null, null);
142 172 }
143 173  
144   - // 更新退货单状态
  174 + // 3. 更新退货单状态
145 175 returnSalesMapper.updateById(new MesWmReturnSalesDO()
146 176 .setId(id).setStatus(MesWmReturnSalesStatusEnum.FINISHED.getStatus()));
147 177 }
... ...