src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -21,6 +21,9 @@
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.quality.dto.QualityInspectDto;
import com.ruoyi.quality.utils.FinalInspectExportUtil;
import com.ruoyi.quality.utils.ProcessInspectExportUtil;
import com.ruoyi.quality.utils.RawMaterialInspectExportUtil;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityTestStandardMapper;
import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
@@ -82,12 +85,15 @@
    public int add(QualityInspectDto qualityInspectDto) {
        QualityInspect qualityInspect = new QualityInspect();
        BeanUtils.copyProperties(qualityInspectDto, qualityInspect);
        qualityInspect.setId(null);//强制走数据库自增,避免前端误传id导致主键冲突
        qualityInspect.setInspectState(0);//默认未提交
        qualityInspectMapper.insert(qualityInspect);
        for (QualityInspectParam qualityInspectParam : qualityInspectDto.getQualityInspectParams()) {
            qualityInspectParam.setInspectId(qualityInspect.getId());
        if (ObjectUtils.isNotEmpty(qualityInspectDto.getQualityInspectParams())) {
            for (QualityInspectParam qualityInspectParam : qualityInspectDto.getQualityInspectParams()) {
                qualityInspectParam.setInspectId(qualityInspect.getId());
            }
            qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams());
        }
        qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams());
        // 保存附件
        fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.QUALITY_INSPECT, qualityInspect.getId(), qualityInspectDto.getStorageBlobDTOs());
        return 0;
@@ -110,9 +116,36 @@
    public int submit(QualityInspect inspect) {
        QualityInspect qualityInspect = qualityInspectMapper.selectById(inspect.getId());
        if (Integer.valueOf(1).equals(qualityInspect.getInspectState())) {
            throw new ServiceException("该记录已提交,不能重复提交");
        }
        // 原材料检验/过程检验/出厂检验:表单不再填写合格/不合格数量,改用「判定」字段
        boolean isVerdictInspect = qualityInspect.getInspectType() != null
                && (qualityInspect.getInspectType() == 0 || qualityInspect.getInspectType() == 1 || qualityInspect.getInspectType() == 2);
        //提交前必须判断是否合格
        if (ObjectUtils.isNull(qualityInspect.getCheckResult())) {
            throw new ServiceException("请先判断是否合格");
            if (isVerdictInspect) {
                // 改用「判定」字段
                if (ObjectUtils.isNull(qualityInspect.getVerdict())) {
                    throw new ServiceException("请先判定是否合格");
                }
            } else {
                throw new ServiceException("请先判断是否合格");
            }
        }
        // 由「判定」推导合格/不合格数量
        if (isVerdictInspect) {
            BigDecimal total = qualityInspect.getQuantity() == null ? BigDecimal.ZERO : qualityInspect.getQuantity();
            if ("合格".equals(qualityInspect.getVerdict())) {
                qualityInspect.setQualifiedQuantity(total);
                qualityInspect.setUnqualifiedQuantity(BigDecimal.ZERO);
            } else if ("不合格".equals(qualityInspect.getVerdict())) {
                qualityInspect.setQualifiedQuantity(BigDecimal.ZERO);
                qualityInspect.setUnqualifiedQuantity(total);
            }
        }
        if (ObjectUtils.isNull(qualityInspect.getQualifiedQuantity())) {
@@ -134,7 +167,9 @@
        }
        // 合格直接入库(过程检不入库)
        if(qualityInspect.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0 && qualityInspect.getInspectType()!=1){
        if (qualityInspect.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0 &&
                qualityInspect.getInspectType() != 1 &&
                qualityInspect.getInspectType() != 0) {
            //仅添加入库记录
            StockInventoryDto stockInventoryDto = new StockInventoryDto();
            //如果是采购质检合格入库选用CUSTOMIZATION_UNSTOCK_OUT,其余合格入库选用QUALITYINSPECT_STOCK_IN
@@ -164,7 +199,10 @@
            qualityUnqualified.setProductModelId(qualityInspect.getProductModelId());
            List<QualityInspectParam> inspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, inspect.getId()));
            String text = inspectParams.stream().map(QualityInspectParam::getParameterItem).collect(Collectors.joining(","));
            qualityUnqualified.setDefectivePhenomena(text + "这些指标中存在不合格");//不合格现象
            if (text == null || text.isEmpty()) {
                text = qualityInspect.getAbnormalRemark();
            }
            qualityUnqualified.setDefectivePhenomena((text == null || text.isEmpty()) ? "检验不合格" : text + "这些指标中存在不合格");//不合格现象
            qualityUnqualified.setInspectId(qualityInspect.getId());
            qualityUnqualifiedMapper.insert(qualityUnqualified);
@@ -206,6 +244,9 @@
            return R.ok("检验单已提交");
        }
        if (ObjectUtils.isNull(qualityInspect.getVerdict())) {
            qualityInspect.setVerdict("合格");
        }
        if (ObjectUtils.isNull(qualityInspect.getCheckResult())) {
            qualityInspect.setCheckResult("合格");
        }
@@ -334,6 +375,21 @@
    @Override
    public void qualityInspectExport(HttpServletResponse response, QualityInspect qualityInspect) {
        List<QualityInspect> qualityInspects = qualityInspectMapper.qualityInspectExport(qualityInspect);
        // 原材料检验:按纸质单据样式导出
        if (qualityInspect.getInspectType() != null && qualityInspect.getInspectType() == 0) {
            RawMaterialInspectExportUtil.export(response, qualityInspects);
            return;
        }
        // 过程检验:按纸质单据样式导出
        if (qualityInspect.getInspectType() != null && qualityInspect.getInspectType() == 1) {
            ProcessInspectExportUtil.export(response, qualityInspects);
            return;
        }
        // 出厂检验:按纸质单据样式导出
        if (qualityInspect.getInspectType() != null && qualityInspect.getInspectType() == 2) {
            FinalInspectExportUtil.export(response, qualityInspects);
            return;
        }
        ExcelUtil<QualityInspect> util = new ExcelUtil<QualityInspect>(QualityInspect.class);
        switch (qualityInspect.getInspectType()) {
            case 0: