yaowanxin
2025-08-11 1b5604f8a88000e2f51d4c989fd179989468ee67
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -2,17 +2,25 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.quality.dto.QualityInspectDto;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityInspectParamMapper;
import com.ruoyi.quality.mapper.QualityTestStandardMapper;
import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityInspectParam;
import com.ruoyi.quality.pojo.QualityTestStandard;
import com.ruoyi.quality.pojo.QualityUnqualified;
import com.ruoyi.quality.service.IQualityInspectParamService;
import com.ruoyi.quality.service.IQualityInspectService;
import com.ruoyi.staff.mapper.StaffJoinLeaveRecordMapper;
@@ -26,6 +34,10 @@
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@@ -40,48 +52,112 @@
    private QualityTestStandardMapper qualityTestStandardMapper;
    private QualityUnqualifiedMapper qualityUnqualifiedMapper;
    @Override
    public int add(QualityInspect qualityInspect) {
        String[] ignoreProperties = {"id"};//排除id属性
        //根据产品id查询指标维护对应新增检验参数
        List<QualityTestStandard> qualityTestStandards = qualityTestStandardMapper.selectList(Wrappers.<QualityTestStandard>lambdaQuery()
                .eq(QualityTestStandard::getProductId, qualityInspect.getProductId()));
        if (qualityTestStandards.size()>0){
            qualityInspectMapper.insert(qualityInspect);
            List<QualityInspectParam> qualityInspectParams = qualityTestStandards.stream().map(qualityTestStandard -> {
                QualityInspectParam qualityInspectParam = new QualityInspectParam();
                BeanUtils.copyProperties(qualityTestStandard, qualityInspectParam,ignoreProperties);
                qualityInspectParam.setInspectId(qualityInspect.getId());
                return qualityInspectParam;
            }).collect(Collectors.toList());
            qualityInspectParamService.saveBatch(qualityInspectParams);
        }else{
            throw new BaseException("该产品没有维护检验指标,请检查!!!!!!!!");
    public int add(QualityInspectDto qualityInspectDto) {
        QualityInspect qualityInspect = new QualityInspect();
        BeanUtils.copyProperties(qualityInspectDto,qualityInspect);
        qualityInspect.setInspectState(0);//默认未提交
        qualityInspectMapper.insert(qualityInspect);
        for (QualityInspectParam qualityInspectParam : qualityInspectDto.getQualityInspectParams()) {
            qualityInspectParam.setInspectId(qualityInspect.getId());
        }
        qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams());
        return 0;
    }
    @Override
    public int updateQualityInspect(QualityInspect qualityInspect) {
        String[] ignoreProperties = {"id"};//排除id属性
        //先删除所有检验参数再新增
        qualityInspectParamService.remove(Wrappers.<QualityInspectParam>lambdaQuery()
                .eq(QualityInspectParam::getInspectId,qualityInspect.getId()));
        //根据产品id查询指标维护对应新增检验参数
        List<QualityTestStandard> qualityTestStandards = qualityTestStandardMapper.selectList(Wrappers.<QualityTestStandard>lambdaQuery()
                .eq(QualityTestStandard::getProductId, qualityInspect.getProductId()));
        if (qualityTestStandards.size()>0){
            List<QualityInspectParam> qualityInspectParams = qualityTestStandards.stream().map(qualityTestStandard -> {
                QualityInspectParam qualityInspectParam = new QualityInspectParam();
                BeanUtils.copyProperties(qualityTestStandard, qualityInspectParam,ignoreProperties);
                qualityInspectParam.setInspectId(qualityInspect.getId());
                return qualityInspectParam;
            }).collect(Collectors.toList());
            qualityInspectParamService.saveBatch(qualityInspectParams);
        }else{
            throw new BaseException("该产品没有维护检验指标,请检查!!!!!!!!");
    public QualityInspectDto getDetailById(Integer id) {
        QualityInspect qualityInspect = qualityInspectMapper.selectById(id);
        List<QualityInspectParam> qualityInspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, id));
        QualityInspectDto qualityInspectDto = new QualityInspectDto();
        BeanUtils.copyProperties(qualityInspect,qualityInspectDto);
        qualityInspectDto.setQualityInspectParams(qualityInspectParams);
        return qualityInspectDto;
    }
    //提交
    @Override
    public int submit(Integer id) {
        QualityInspect qualityInspect = qualityInspectMapper.selectById(id);
        /*判断不合格*/
        if (ObjectUtils.isNotNull(qualityInspect.getCheckResult()) && qualityInspect.getCheckResult().equals("不合格")){
            QualityUnqualified qualityUnqualified = new QualityUnqualified();
            BeanUtils.copyProperties(qualityInspect,qualityUnqualified);
            qualityUnqualified.setInspectState(0);//待处理
            List<QualityInspectParam> inspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, id));
            String text = inspectParams.stream().map(QualityInspectParam::getParameterItem).collect(Collectors.joining(","));
            qualityUnqualified.setDefectivePhenomena(text+"这些指标中存在不合格");//不合格现象
            qualityUnqualifiedMapper.insert(qualityUnqualified);
        }
        return  qualityInspectMapper.updateById(qualityInspect);
        qualityInspect.setInspectState(1);//已提交
        return qualityInspectMapper.updateById(qualityInspect);
    }
    /*生成检验报告*/
    @Override
    public void down(HttpServletResponse response, Integer id) {
        QualityInspect inspect = qualityInspectMapper.selectById(id);
        String inspectType="";
        switch (inspect.getInspectType()){
            case 0:
                inspectType="原材料检验";
                break;
            case 1:
                inspectType="过程检验";
                break;
            case 2:
                inspectType="出厂检验";
                break;
        }
        List<QualityInspectParam> paramList = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, id));
        int index = 1;
        for (QualityInspectParam detail : paramList) {
            detail.setIndex(index);
            index++;
        }
        InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
        Configure configure = Configure.builder()
                .bind("paramList", new HackLoopTableRenderPolicy())
                .build();
        String finalInspectType = inspectType;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("inspect", inspect);
                    put("inspectType", finalInspectType);
                    put("paramList", paramList);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "检验报告", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
    @Override
    public int updateQualityInspect(QualityInspectDto qualityInspectDto) {
        if (qualityInspectDto.getQualityInspectParams().size()>0) {
            qualityInspectParamService.remove(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId,qualityInspectDto.getId()));
            for (QualityInspectParam qualityInspectParam : qualityInspectDto.getQualityInspectParams()) {
                qualityInspectParam.setInspectId(qualityInspectDto.getId());
            }
            qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams());
        }
        QualityInspect qualityInspect = new QualityInspect();
        BeanUtils.copyProperties(qualityInspectDto,qualityInspect);
        return qualityInspectMapper.updateById(qualityInspect);
    }
    @Override
@@ -106,4 +182,6 @@
        }
    }
}