| | |
| | | |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.aftersales.api.AfterSaleTicketApi; |
| | | import cn.iocoder.yudao.module.aftersales.api.dto.AfterSaleWarehouseReturnCreateReqDTO; |
| | | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| | |
| | | private MesMdmItemService mdmItemService; |
| | | @Resource |
| | | private MesWmTransactionService wmTransactionService; |
| | | @Resource |
| | | private AfterSaleTicketApi afterSaleTicketApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | MesWmReturnSalesDO returnSales = BeanUtils.toBean(createReqVO, MesWmReturnSalesDO.class); |
| | | returnSales.setStatus(MesWmReturnSalesStatusEnum.PREPARE.getStatus()); |
| | | returnSalesMapper.insert(returnSales); |
| | | |
| | | // 3. 同步关联售后工单:仓储退货留痕 + 工单进入待退货 |
| | | AfterSaleWarehouseReturnCreateReqDTO returnReqDTO = new AfterSaleWarehouseReturnCreateReqDTO(); |
| | | returnReqDTO.setSaleOrderId(createReqVO.getSaleOrderId()); |
| | | returnReqDTO.setReturnSalesId(returnSales.getId()); |
| | | returnReqDTO.setReturnSalesCode(createReqVO.getCode()); |
| | | returnReqDTO.setReturnReason(createReqVO.getReturnReason()); |
| | | afterSaleTicketApi.onWarehouseReturnCreated(returnReqDTO); |
| | | |
| | | return returnSales.getId(); |
| | | } |
| | | |
| | |
| | | } |
| | | // 1.2 检查每个行的明细数量是否完成上架 |
| | | List<MesWmReturnSalesLineDO> lines = returnSalesLineService.getReturnSalesLineListByReturnId(id); |
| | | if (CollUtil.isEmpty(lines)) { |
| | | throw exception(WM_RETURN_SALES_NO_LINE); |
| | | } |
| | | if (CollUtil.isNotEmpty(lines)) { |
| | | // 批量查询所有明细 |
| | | List<MesWmReturnSalesDetailDO> allDetails = returnSalesDetailService.getReturnSalesDetailListByReturnId(id); |
| | |
| | | allDetails, MesWmReturnSalesDetailDO::getLineId); |
| | | // 检查每行的明细数量 |
| | | for (MesWmReturnSalesLineDO line : lines) { |
| | | if (ObjUtil.notEqual(line.getQualityStatus(), MesWmQualityStatusEnum.PASS.getStatus())) { |
| | | throw exception(WM_RETURN_SALES_LINE_NOT_QUALIFIED); |
| | | } |
| | | List<MesWmReturnSalesDetailDO> details = detailMap.getOrDefault(line.getId(), Collections.emptyList()); |
| | | BigDecimal totalDetailQuantity = CollectionUtils.getSumValue(details, |
| | | MesWmReturnSalesDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO); |