| | |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum; |
| | | import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService; |
| | | import cn.iocoder.yudao.module.aftersales.api.AfterSaleTicketApi; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.beans.factory.ObjectProvider; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.invalidParamException; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.MD_ITEM_BATCH_REQUIRED; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_SALES_LINE_NOT_EXISTS; |
| | | |
| | |
| | | @Resource |
| | | @Lazy |
| | | private MesWmReturnSalesDetailService returnSalesDetailService; |
| | | @Resource |
| | | private ObjectProvider<AfterSaleTicketApi> afterSaleTicketApiProvider; |
| | | |
| | | @Override |
| | | public Long createReturnSalesLine(MesWmReturnSalesLineSaveReqVO createReqVO) { |
| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateReturnSalesLineWhenRqcFinish(Long sourceLineId, Long sourceDocId, Integer checkResult, |
| | | BigDecimal qualifiedQuantity, BigDecimal unqualifiedQuantity) { |
| | | MesWmReturnSalesLineDO sourceLine = validateReturnSalesLineExists(sourceLineId); |
| | |
| | | // 2. 检查退货单下是否还有待检验的行,若全检完则将退货单状态设为"待上架" |
| | | if (sourceDocId != null) { |
| | | List<MesWmReturnSalesLineDO> allLines = returnSalesLineMapper.selectListByReturnId(sourceDocId); |
| | | boolean allInspected = !CollUtil.contains(allLines, |
| | | line -> Objects.equals(line.getQualityStatus(), MesWmQualityStatusEnum.PENDING.getStatus())); |
| | | boolean allInspected = CollUtil.isNotEmpty(allLines) && allLines.stream().allMatch(line -> |
| | | Objects.equals(line.getQualityStatus(), MesWmQualityStatusEnum.PASS.getStatus()) |
| | | || Objects.equals(line.getQualityStatus(), MesWmQualityStatusEnum.FAIL.getStatus())); |
| | | if (allInspected) { |
| | | returnSalesService.updateReturnSalesStatus(sourceDocId, MesWmReturnSalesStatusEnum.APPROVING.getStatus()); |
| | | MesWmReturnSalesDO source = returnSalesService.validateReturnSalesExists(sourceDocId); |
| | | if (source.getAfterSaleReturnId() != null) { |
| | | AfterSaleTicketApi api = afterSaleTicketApiProvider.getIfAvailable(); |
| | | if (api == null) throw invalidParamException("售后服务不可用,无法同步退货检验结果"); |
| | | boolean hasFailed = allLines.stream().anyMatch(line -> |
| | | Objects.equals(line.getQualityStatus(), MesWmQualityStatusEnum.FAIL.getStatus())); |
| | | var response = api.onReturnQualityFinished(source.getAfterSaleReturnId(), hasFailed ? "存在不合格" : "合格", null); |
| | | if (response == null || !Boolean.TRUE.equals(response.getCheckedData())) |
| | | throw invalidParamException("售后退货检验结果同步失败"); |
| | | } |
| | | } |
| | | } |
| | | } |