zhuo
2025-05-06 25e115da7815430fdc5d078d4a01d76edacb4e6f
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java
@@ -1,9 +1,12 @@
package com.ruoyi.process.service.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -21,6 +24,7 @@
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.WxCpUtils;
import com.ruoyi.device.pojo.DeviceExamineRecord;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.inspect.util.UserUtils;
@@ -50,6 +54,7 @@
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
@@ -177,6 +182,7 @@
                    detailsUploadList.add(superviseDetails);
                }
                @Override
                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
@@ -349,8 +355,66 @@
        QualitySuperviseDetailsRecord detailsRecord;
        detailsRecord = qualitySuperviseDetailsRecordMapper.selectOne(Wrappers.<QualitySuperviseDetailsRecord>lambdaQuery()
                .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, superviseDetailsId));
        // 查询上一个月第一条的记录信息, 判断被监督人去另外一个
        if (detailsRecord == null) {
            // 查询详情信息
            QualitySuperviseDetails qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectById(superviseDetailsId);
            // 查询上一个月第一条的记录信息, 判断被监督人去另外一个
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.M");
            YearMonth yearMonth = YearMonth.parse(qualitySuperviseDetails.getSuperviseTime(), formatter);
            YearMonth previousYearMonth = yearMonth.minusMonths(1);
            LocalDate startDate = previousYearMonth.atDay(1);
            LocalDate endDate = previousYearMonth.atEndOfMonth();
            LocalDateTime startDateTime = startDate.atStartOfDay();
            LocalDateTime endDateTime = endDate.atTime(23, 59, 59);
            DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            // 获取开始时间和结束时间
            String startDateTimeStr = startDateTime.format(outputFormatter);
            String endDateTimeStr = endDateTime.format(outputFormatter);
            QualitySuperviseDetailsRecord laseRecord = qualitySuperviseDetailsRecordMapper.selectOne(Wrappers.<QualitySuperviseDetailsRecord>lambdaQuery()
                    .between(QualitySuperviseDetailsRecord::getCreateTime, startDateTimeStr, endDateTimeStr)
                    .isNotNull(QualitySuperviseDetailsRecord::getSupervisor)
                    .last("limit 1"));
            String supervisor = null;
            if (laseRecord != null) {
                // 查询计划获取另一个监督员
                QualitySupervise qualitySupervise = baseMapper.selectById(qualitySuperviseDetails.getSuperviseId());
                if (StringUtils.isNotBlank(qualitySupervise.getRecordUserIds())) {
                    List<String> recordUserIds = StrUtil.split(qualitySupervise.getRecordUserIds(), ',');
                    List<User> users = userMapper.selectList(Wrappers.<User>lambdaQuery()
                            .in(User::getId, recordUserIds));
                    if (CollectionUtils.isNotEmpty(users) && users.size() == 2) {
                        // 判断是否一样, 一样获取另外一个
                        if (users.get(0).getName().equals(laseRecord.getSupervisor())) {
                            supervisor = users.get(1).getName();
                        } else {
                            supervisor = users.get(0).getName();
                        }
                    }
                }
            }
            detailsRecord = new QualitySuperviseDetailsRecord();
            detailsRecord.setSuperviseDetailsId(superviseDetailsId);
            detailsRecord.setTestMember(qualitySuperviseDetails.getSupervisee());
            detailsRecord.setSupervisor(supervisor);
            detailsRecord.setPersonnel(SecurityUtils.getLoginUser().getUser().getNickName() + "有相应检测员的上岗证");
            detailsRecord.setEnvironment("温度:()℃ 湿度:()%");
            detailsRecord.setInspectionRecord("检测人员" + SecurityUtils.getLoginUser().getUser().getNickName() + "进行检测记录,记录内容真实有效");
            detailsRecord.setExaminingReport("由" + SecurityUtils.getLoginUser().getUser().getNickName() + "出示的检测报告符合规范要求");
            detailsRecord.setSupervisionEvaluation("检测按照要求进行,判定为满意");
            detailsRecord.setHandlingAdvice("/");
        }
        // 添加批准人名称
        if (detailsRecord.getRatifyUserId() != null) {
@@ -370,7 +434,11 @@
        if (qualitySuperviseDetailsRecord.getSuperviseDetailsId() == null) {
            throw new ErrorException("缺少监督详细信息id");
        }
        qualitySuperviseDetailsRecordMapper.insert(qualitySuperviseDetailsRecord);
        if (qualitySuperviseDetailsRecord.getSuperviseDetailsRecordId() == null) {
            qualitySuperviseDetailsRecordMapper.insert(qualitySuperviseDetailsRecord);
        } else {
            qualitySuperviseDetailsRecordMapper.updateById(qualitySuperviseDetailsRecord);
        }
        if (qualitySuperviseDetailsRecord.getRatifyUserId() != null) {
@@ -408,6 +476,10 @@
                }
            });
        }
        // 清空状态
        qualitySuperviseDetailsRecordMapper.update(null, Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate()
                .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsRecordId, qualitySuperviseDetailsRecord.getSuperviseDetailsRecordId())
                .set(QualitySuperviseDetailsRecord::getIsFinish, null));
        return true;
    }
@@ -419,16 +491,27 @@
     */
    @Override
    public boolean addSuperviseRecordOpinion(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) {
        if (qualitySuperviseDetailsRecord.getIsAccording() == null) {
            throw new ErrorException("缺少最终结果");
        if (qualitySuperviseDetailsRecord.getIsFinish() == null) {
            throw new RuntimeException("缺少记录结果状态");
        }
        qualitySuperviseDetailsRecordMapper.update(null, Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate()
        LambdaUpdateWrapper<QualitySuperviseDetailsRecord> wrapper = Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate()
                .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, qualitySuperviseDetailsRecord.getSuperviseDetailsId())
                .set(QualitySuperviseDetailsRecord::getRatifyOpinion, qualitySuperviseDetailsRecord.getRatifyOpinion())
                .set(QualitySuperviseDetailsRecord::getRatifyTime, LocalDateTime.now())
                .set(QualitySuperviseDetailsRecord::getIsAccording, qualitySuperviseDetailsRecord.getIsAccording())
                .set(QualitySuperviseDetailsRecord::getIsFinish, 1));
                .set(QualitySuperviseDetailsRecord::getIsFinish, qualitySuperviseDetailsRecord.getIsFinish());
        // 为0清除审核人
        if (qualitySuperviseDetailsRecord.getIsFinish().equals(0)) {
            wrapper.set(QualitySuperviseDetailsRecord::getRatifyUserId, null)
                    .set(QualitySuperviseDetailsRecord::getRatifyTime, null);
        } else {
            wrapper.set(QualitySuperviseDetailsRecord::getRatifyTime, LocalDateTime.now());
        }
        qualitySuperviseDetailsRecordMapper.update(null, wrapper);
        return true;
    }
@@ -439,27 +522,27 @@
     */
    @Override
    public void exportSuperviseDetailRecord(Integer superviseDetailsId, HttpServletResponse response) {
        QualitySuperviseDetailsRecord recordDto =  qualitySuperviseDetailsRecordMapper.selectSuperviseDetailRecord(superviseDetailsId);
        QualitySuperviseDetailsRecord recordDto = qualitySuperviseDetailsRecordMapper.selectSuperviseDetailRecord(superviseDetailsId);
        //获取技术负责人的签名地址
        String ratifyUrl = null;
        if (recordDto.getRatifyUserId() != null) {
            ratifyUrl = userMapper.selectById(recordDto.getRatifyUserId()).getSignatureUrl();
            if (StringUtils.isBlank(ratifyUrl)) {
                throw new ErrorException("找不到技术负责人的签名");
            }
        // 查询检测人员
        User tserUser = new User();
        if (StringUtils.isNotBlank(recordDto.getTestMember())) {
            tserUser = userMapper.selectOne(Wrappers.<User>lambdaQuery()
                    .eq(User::getName, recordDto.getTestMember())
                    .last("limit 1"));
        }
        // 获取路径
        InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-detail-record.docx");
        ConfigureBuilder builder = Configure.builder();
        builder.useSpringEL(true);
        String finalRatifyUrl = ratifyUrl;
        User finalTserUser = tserUser;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
                new HashMap<String, Object>() {{
                    put("supervision", recordDto);
                    put("testMemberUrl", UserUtils.getFinalUserSignatureUrl(finalTserUser.getId()));
                    put("supervisoruUrl", UserUtils.getFinalUserSignatureUrl(recordDto.getSupervisor()));
                    put("technicalDirectorUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
                    put("technicalDirectorUrl", UserUtils.getFinalUserSignatureUrl(recordDto.getRatifyUserId()));
                    put("technicalDirectorDateUrl", recordDto.getRatifyTime() != null ?
                            Pictures.ofStream(DateImageUtil.createDateImage(recordDto.getRatifyTime())).create() : null);
                }});
@@ -491,10 +574,10 @@
    public boolean addSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) {
        QualitySuperviseDetailsAccording according = new QualitySuperviseDetailsAccording();
        // 当前登录用户信息和部门
        User user = userMapper.selectById( SecurityUtils.getUserId().intValue());
        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
        switch (detailsAccording.getFlowType()) {
                // 不符合工作情况记录
            // 不符合工作情况记录
            case 0:
                if (detailsAccording.getSuperviseDetailsId() == null) {
                    throw new ErrorException("缺少质量监督详情Id");
@@ -527,7 +610,7 @@
                qualitySuperviseDetailsAccordingMapper.insert(according);
                break;
                // 1处理措施
            // 1处理措施
            case 1:
                according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
                according.setEliminateMeasure(detailsAccording.getEliminateMeasure());//清除不符合措施
@@ -542,7 +625,7 @@
                qualitySuperviseDetailsAccordingMapper.updateById(according);
                break;
                // 纠正措施
            // 纠正措施
            case 2:
                according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
                according.setCorrectContent(detailsAccording.getCorrectContent());//纠正措施内容
@@ -557,7 +640,7 @@
                qualitySuperviseDetailsAccordingMapper.updateById(according);
                break;
                //是否通知客户可恢复工作
            //是否通知客户可恢复工作
            case 3:
                according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
                according.setNotifyCustomer(detailsAccording.getNotifyCustomer());//通知客户
@@ -592,7 +675,12 @@
        // 被监督人
        User supervisedUser = userMapper.selectById(detailsAccording.getSupervisedUserId());
        detailsAccording.setSupervisedUserName(supervisedUser.getName());//被监督
        qualitySuperviseDetailsAccordingMapper.insert(detailsAccording);
        if (detailsAccording.getSuperviseDetailsAccordingId() == null) {
            qualitySuperviseDetailsAccordingMapper.insert(detailsAccording);
        } else {
            qualitySuperviseDetailsAccordingMapper.updateById(detailsAccording);
        }
        if (detailsAccording.getApproverUserId() != null) {
            // 查询详情信息
@@ -628,6 +716,11 @@
            });
        }
        // 清空状态
        qualitySuperviseDetailsAccordingMapper.update(null, Wrappers.<QualitySuperviseDetailsAccording>lambdaUpdate()
                .eq(QualitySuperviseDetailsAccording::getSuperviseDetailsAccordingId, detailsAccording.getSuperviseDetailsAccordingId())
                .set(QualitySuperviseDetailsAccording::getIsFinish, null));
        return true;
    }
@@ -639,22 +732,41 @@
     */
    @Override
    public boolean approverEquipSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) {
        if (detailsAccording.getIsFinish() == null) {
            throw new RuntimeException("缺少批准状态");
        }
        QualitySuperviseDetailsAccording according = new QualitySuperviseDetailsAccording();
        according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
        // 当前登录用户信息和部门
        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
        according.setResponsibleDepartment(departmentLimsName);//责任部门
        according.setActionsUserId(user.getId());//处理人id
        according.setActionsUserName(user.getName());//处理人
        if (detailsAccording.getIsFinish().equals(1)) {
            // 当前登录用户信息和部门
            User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
            String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
        according.setCorrectUserId(user.getId());//纠正负责人id
        according.setCorrectUserName(user.getName());//纠正负责人
            according.setResponsibleDepartment(departmentLimsName);//责任部门
            according.setActionsUserId(user.getId());//处理人id
            according.setActionsUserName(user.getName());//处理人
        according.setQualityManagerUserId(user.getId());//质量负责人id
        according.setQualityManagerUserName(user.getName());//质量负责人
        according.setIsFinish(1);
            according.setCorrectUserId(user.getId());//纠正负责人id
            according.setCorrectUserName(user.getName());//纠正负责人
            according.setQualityManagerUserId(user.getId());//质量负责人id
            according.setQualityManagerUserName(user.getName());//质量负责人
        } else {
            qualitySuperviseDetailsAccordingMapper.update(null, Wrappers.<QualitySuperviseDetailsAccording>lambdaUpdate()
                    .eq(QualitySuperviseDetailsAccording::getSuperviseDetailsAccordingId, detailsAccording.getSuperviseDetailsAccordingId())
                    .set(QualitySuperviseDetailsAccording::getResponsibleDepartment, null)
                    .set(QualitySuperviseDetailsAccording::getActionsUserId, null)
                    .set(QualitySuperviseDetailsAccording::getActionsUserName, null)
                    .set(QualitySuperviseDetailsAccording::getCorrectUserId, null)
                    .set(QualitySuperviseDetailsAccording::getCorrectUserName, null)
                    .set(QualitySuperviseDetailsAccording::getQualityManagerUserId, null)
                    .set(QualitySuperviseDetailsAccording::getQualityManagerUserName, null)
                    .set(QualitySuperviseDetailsAccording::getApproverUserId, null));
        }
        according.setIsFinish(detailsAccording.getIsFinish());
        qualitySuperviseDetailsAccordingMapper.updateById(according);
        return true;
    }
@@ -675,6 +787,7 @@
            detailsAccording = new QualitySuperviseDetailsAccording();
            // 查询监督计划详情
            QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(superviseDetailsId);
            superviseDetails.setSuperviseDetailsId(superviseDetailsId);
            detailsAccording.setSupervisedUserId(superviseDetails.getSupervisedUserId());
            detailsAccording.setSupervisedUserName(superviseDetails.getSupervisee());
        }
@@ -779,7 +892,7 @@
        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
        switch (detailsCorrect.getFlowType()) {
                // 不合格提出
            // 不合格提出
            case 0:
                if (detailsCorrect.getSuperviseDetailsId() == null) {
                    throw new ErrorException("缺少质量监督详情Id");
@@ -803,7 +916,7 @@
                break;
                // 原因分析
            // 原因分析
            case 1:
                correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
                correct.setCauseResult(detailsCorrect.getCauseResult());//原因分析
@@ -819,7 +932,7 @@
                qualitySuperviseDetailsCorrectMapper.updateById(correct);
                break;
                // 纠正措施
            // 纠正措施
            case 2:
                correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
                correct.setCorrectResult(detailsCorrect.getCorrectResult());//2纠正措施
@@ -836,7 +949,7 @@
                qualitySuperviseDetailsCorrectMapper.updateById(correct);
                break;
                // 验证结果
            // 验证结果
            case 3:
                correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
                correct.setValidationResult(detailsCorrect.getValidationResult());//3验证结果
@@ -866,7 +979,11 @@
        detailsCorrect.setRaiseDepartment(departmentLimsName);//提出部门
        detailsCorrect.setRaiseUserId(user.getId());//提出人id
        detailsCorrect.setRaiseUserName(user.getName());// 提出人
        qualitySuperviseDetailsCorrectMapper.insert(detailsCorrect);
        if (detailsCorrect.getSuperviseDetailsCorrectId() == null) {
            qualitySuperviseDetailsCorrectMapper.insert(detailsCorrect);
        } else {
            qualitySuperviseDetailsCorrectMapper.updateById(detailsCorrect);
        }
        if (detailsCorrect.getApproverUserId() != null) {
            // 查询详情信息
@@ -902,6 +1019,10 @@
            });
        }
        // 清空状态
        qualitySuperviseDetailsCorrectMapper.update(null, Wrappers.<QualitySuperviseDetailsCorrect>lambdaUpdate()
                .eq(QualitySuperviseDetailsCorrect::getSuperviseDetailsCorrectId, detailsCorrect.getSuperviseDetailsCorrectId())
                .set(QualitySuperviseDetailsCorrect::getIsFinish, null));
        return true;
    }
@@ -911,24 +1032,45 @@
     */
    @Override
    public boolean approveEquipSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect) {
        if (detailsCorrect.getIsFinish() == null) {
            throw new RuntimeException("缺少批准状态");
        }
        QualitySuperviseDetailsCorrect correct = new QualitySuperviseDetailsCorrect();
        // 当前登录用户信息和部门
        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
        correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
        correct.setCauseDepartment(departmentLimsName);//原因分析责任部门
        correct.setCauseUserId(user.getId());//1原因分析人id
        correct.setCauseUserName(user.getName());// 1原因分析人
        if (detailsCorrect.getIsFinish().equals(1)) {
            correct.setCauseDepartment(departmentLimsName);//原因分析责任部门
            correct.setCauseUserId(user.getId());//1原因分析人id
            correct.setCauseUserName(user.getName());// 1原因分析人
        correct.setCorrectDepartment(departmentLimsName);//2纠正责任部门
        correct.setCorrectUserId(user.getId());//2纠正人id
        correct.setCorrectUserName(user.getName());// 2纠正人
            correct.setCorrectDepartment(departmentLimsName);//2纠正责任部门
            correct.setCorrectUserId(user.getId());//2纠正人id
            correct.setCorrectUserName(user.getName());// 2纠正人
        correct.setValidationDepartment(departmentLimsName);//3验证部门
        correct.setValidationUserId(user.getId());//3验证人id
        correct.setValidationUserName(user.getName());// 3验证人
        correct.setIsFinish(1);
            correct.setValidationDepartment(departmentLimsName);//3验证部门
            correct.setValidationUserId(user.getId());//3验证人id
            correct.setValidationUserName(user.getName());// 3验证人
        } else {
            qualitySuperviseDetailsCorrectMapper.update(null, Wrappers.<QualitySuperviseDetailsCorrect>lambdaUpdate()
                    .eq(QualitySuperviseDetailsCorrect::getSuperviseDetailsCorrectId, detailsCorrect.getSuperviseDetailsCorrectId())
                    .set(QualitySuperviseDetailsCorrect::getCauseDepartment, null)
                    .set(QualitySuperviseDetailsCorrect::getCauseUserId, null)
                    .set(QualitySuperviseDetailsCorrect::getCauseUserName, null)
                    .set(QualitySuperviseDetailsCorrect::getCorrectDepartment, null)
                    .set(QualitySuperviseDetailsCorrect::getCorrectUserId, null)
                    .set(QualitySuperviseDetailsCorrect::getCorrectUserName, null)
                    .set(QualitySuperviseDetailsCorrect::getValidationDepartment, null)
                    .set(QualitySuperviseDetailsCorrect::getValidationUserId, null)
                    .set(QualitySuperviseDetailsCorrect::getValidationUserName, null)
                    .set(QualitySuperviseDetailsCorrect::getApproverUserId, null)
            );
        }
        correct.setIsFinish(detailsCorrect.getIsFinish());
        qualitySuperviseDetailsCorrectMapper.updateById(correct);
        return true;
@@ -948,6 +1090,7 @@
        if (detailsCorrect == null) {
            detailsCorrect = new QualitySuperviseDetailsCorrect();
            detailsCorrect.setSuperviseDetailsId(superviseDetailsId);
        }
        return detailsCorrect;
    }