xiaoyi
2 天以前 14c80fbd16a51a355138345ecf69df9ca37746bf
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java
@@ -14,16 +14,20 @@
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;
@@ -49,6 +53,8 @@
    @Resource
    @Lazy
    private MesWmReturnSalesDetailService returnSalesDetailService;
    @Resource
    private ObjectProvider<AfterSaleTicketApi> afterSaleTicketApiProvider;
    @Override
    public Long createReturnSalesLine(MesWmReturnSalesLineSaveReqVO createReqVO) {
@@ -169,6 +175,7 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateReturnSalesLineWhenRqcFinish(Long sourceLineId, Long sourceDocId, Integer checkResult,
                                                    BigDecimal qualifiedQuantity, BigDecimal unqualifiedQuantity) {
        MesWmReturnSalesLineDO sourceLine = validateReturnSalesLineExists(sourceLineId);
@@ -207,10 +214,21 @@
        // 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("售后退货检验结果同步失败");
                }
            }
        }
    }