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,4 +76,12 @@ public interface MesWmReturnSalesLineService { | ||
| 76 | */ | 76 | */ |
| 77 | MesWmReturnSalesLineDO validateReturnSalesLineExists(Long id); | 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,6 +101,16 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ | ||
| 101 | return line; | 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,12 +8,15 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 8 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; | 8 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| 9 | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.MesWmReturnSalesPageReqVO; | 9 | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.MesWmReturnSalesPageReqVO; |
| 10 | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.MesWmReturnSalesSaveReqVO; | 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 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDO; | 12 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDO; |
| 12 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDetailDO; | 13 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDetailDO; |
| 13 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO; | 14 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO; |
| 14 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesMapper; | 15 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesMapper; |
| 16 | +import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; | ||
| 15 | import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum; | 17 | import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum; |
| 16 | import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService; | 18 | import cn.iocoder.yudao.module.mes.service.md.client.MesMdClientService; |
| 19 | +import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; | ||
| 17 | import jakarta.annotation.Resource; | 20 | import jakarta.annotation.Resource; |
| 18 | import org.springframework.stereotype.Service; | 21 | import org.springframework.stereotype.Service; |
| 19 | import org.springframework.transaction.annotation.Transactional; | 22 | import org.springframework.transaction.annotation.Transactional; |
| @@ -21,6 +24,7 @@ import org.springframework.validation.annotation.Validated; | @@ -21,6 +24,7 @@ import org.springframework.validation.annotation.Validated; | ||
| 21 | 24 | ||
| 22 | import java.math.BigDecimal; | 25 | import java.math.BigDecimal; |
| 23 | import java.util.List; | 26 | import java.util.List; |
| 27 | +import java.util.Map; | ||
| 24 | 28 | ||
| 25 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 29 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 26 | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; | 30 | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| @@ -43,6 +47,8 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { | @@ -43,6 +47,8 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { | ||
| 43 | private MesWmReturnSalesDetailService returnSalesDetailService; | 47 | private MesWmReturnSalesDetailService returnSalesDetailService; |
| 44 | @Resource | 48 | @Resource |
| 45 | private MesMdClientService clientService; | 49 | private MesMdClientService clientService; |
| 50 | + @Resource | ||
| 51 | + private MesMdItemService itemService; | ||
| 46 | 52 | ||
| 47 | @Override | 53 | @Override |
| 48 | @Transactional(rollbackFor = Exception.class) | 54 | @Transactional(rollbackFor = Exception.class) |
| @@ -108,6 +114,10 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { | @@ -108,6 +114,10 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { | ||
| 108 | // 提交(草稿 -> 待执行) | 114 | // 提交(草稿 -> 待执行) |
| 109 | returnSalesMapper.updateById(new MesWmReturnSalesDO() | 115 | returnSalesMapper.updateById(new MesWmReturnSalesDO() |
| 110 | .setId(id).setStatus(MesWmReturnSalesStatusEnum.APPROVING.getStatus())); | 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 | @Override | 123 | @Override |
| @@ -126,13 +136,33 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { | @@ -126,13 +136,33 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { | ||
| 126 | @Override | 136 | @Override |
| 127 | @Transactional(rollbackFor = Exception.class) | 137 | @Transactional(rollbackFor = Exception.class) |
| 128 | public void stockReturnSales(Long id) { | 138 | public void stockReturnSales(Long id) { |
| 129 | - // 校验存在 | 139 | + // 1.1 校验存在 + 待上架状态 |
| 130 | MesWmReturnSalesDO returnSales = validateReturnSalesExists(id); | 140 | MesWmReturnSalesDO returnSales = validateReturnSalesExists(id); |
| 131 | if (ObjUtil.notEqual(MesWmReturnSalesStatusEnum.APPROVED.getStatus(), returnSales.getStatus())) { | 141 | if (ObjUtil.notEqual(MesWmReturnSalesStatusEnum.APPROVED.getStatus(), returnSales.getStatus())) { |
| 132 | throw exception(WM_RETURN_SALES_STATUS_NOT_APPROVED); | 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 | // DONE @芋艿:【后续在弄】这里需要库存更新;后面在弄(AI 未修复原因:标注为后续处理,需人工介入) | 166 | // DONE @芋艿:【后续在弄】这里需要库存更新;后面在弄(AI 未修复原因:标注为后续处理,需人工介入) |
| 137 | List<MesWmReturnSalesDetailDO> details = returnSalesDetailService.getReturnSalesDetailListByReturnId(id); | 167 | List<MesWmReturnSalesDetailDO> details = returnSalesDetailService.getReturnSalesDetailListByReturnId(id); |
| 138 | for (MesWmReturnSalesDetailDO detail : details) { | 168 | for (MesWmReturnSalesDetailDO detail : details) { |
| @@ -141,7 +171,7 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { | @@ -141,7 +171,7 @@ public class MesWmReturnSalesServiceImpl implements MesWmReturnSalesService { | ||
| 141 | // detail.getBatchId(), detail.getQuantity(), null, null, null); | 171 | // detail.getBatchId(), detail.getQuantity(), null, null, null); |
| 142 | } | 172 | } |
| 143 | 173 | ||
| 144 | - // 更新退货单状态 | 174 | + // 3. 更新退货单状态 |
| 145 | returnSalesMapper.updateById(new MesWmReturnSalesDO() | 175 | returnSalesMapper.updateById(new MesWmReturnSalesDO() |
| 146 | .setId(id).setStatus(MesWmReturnSalesStatusEnum.FINISHED.getStatus())); | 176 | .setId(id).setStatus(MesWmReturnSalesStatusEnum.FINISHED.getStatus())); |
| 147 | } | 177 | } |