Commit c9c362a294570aa3113058a96938c332395fd3b3
1 parent
e9998159
✨ feat(mes): 添加批量更新退货单行质量状态功能
Showing
3 changed files
with
51 additions
and
3 deletions
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 | } | ... | ... |