6 天以前 1e123568c2f561013f5636e45dc0db30b17a3517
src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -7,6 +7,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.procurementrecord.utils.StockUtils;
@@ -30,12 +31,15 @@
import com.ruoyi.stock.service.StockUninventoryService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import jakarta.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -68,9 +72,28 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int deal(QualityUnqualified qualityUnqualified) {
        QualityUnqualified unqualified = qualityUnqualifiedMapper.selectById(qualityUnqualified.getId());
        if (unqualified == null) {
            throw new ServiceException("不合格记录不存在");
        }
        //幂等:已处理的不允许重复处理,防止重复入库/重复报工单
        if (Integer.valueOf(1).equals(unqualified.getInspectState())) {
            throw new ServiceException("该不合格记录已处理,请勿重复操作");
        }
        if (ObjectUtils.isNull(qualityUnqualified.getDealResult())) {
            throw new ServiceException("请选择处理结果");
        }
        QualityInspect qualityInspect = qualityInspectService.getById(unqualified.getInspectId());
        //处理结果枚举校验:原材料仅报废/让步放行;过程/出厂检额外支持返修/返工
        List<String> allowedResults = new ArrayList<>(Arrays.asList("报废", "让步放行"));
        if (qualityInspect == null || qualityInspect.getInspectType() == null || qualityInspect.getInspectType() != 0) {
            allowedResults.addAll(Arrays.asList("返修", "返工"));
        }
        if (!allowedResults.contains(qualityUnqualified.getDealResult())) {
            throw new ServiceException("处理结果不合法,仅支持:" + String.join("/", allowedResults));
        }
        String batchNo = qualityInspect == null ? null
                : resolveProductionBatchNo(qualityInspect.getProductMainId(), qualityInspect.getId(), qualityInspect.getProductModelId());
        if (ObjectUtils.isNotNull(qualityInspect) && qualityInspect.getInspectType() != 0) {
@@ -111,8 +134,14 @@
                    break;
            }
        }
        qualityUnqualified.setInspectState(1);
        return qualityUnqualifiedMapper.updateById(qualityUnqualified);
        //以库中记录为准回写,防止请求体篡改数量/状态等字段
        unqualified.setDealResult(qualityUnqualified.getDealResult());
        unqualified.setDealName(ObjectUtils.isNotNull(qualityUnqualified.getDealName())
                ? qualityUnqualified.getDealName() : SecurityUtils.getUsername());
        unqualified.setDealTime(qualityUnqualified.getDealTime() != null
                ? qualityUnqualified.getDealTime() : new Date());
        unqualified.setInspectState(1);
        return qualityUnqualifiedMapper.updateById(unqualified);
    }
    @Override