| | |
| | | |
| | | 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); |
| | | // 对比行数量与明细总数量,不满足直接抛出 |
| | | if (line.getQuantity().compareTo(totalDetailQuantity) > 0) { |
| | | if (line.getQuantity() == null || line.getQuantity().compareTo(totalDetailQuantity) != 0) { |
| | | MesMdmItemDO item = mdmItemService.validateItemExistsAndEnable(line.getItemId()); |
| | | throw exception(WM_RETURN_SALES_DETAIL_QUANTITY_MISMATCH, |
| | | item.getCode() + " " + item.getName() + " 未完成上架"); |