heheng
2025-05-21 a05869a12d95375df2333459c8fa4079de7e5953
src/main/java/com/gkhy/labRiskManage/domain/riskReport/service/impl/ReportRiskAssessInfoServiceImpl.java
@@ -1,5 +1,7 @@
package com.gkhy.labRiskManage.domain.riskReport.service.impl;
import com.gkhy.labRiskManage.api.controller.basic.dto.respDto.OldRiskAssessResDTO;
import com.gkhy.labRiskManage.api.controller.experiment.dto.req.ExperimentAndPersonInsertReqBO;
import com.gkhy.labRiskManage.api.controller.riskReport.dto.repDto.ReportReqBO;
import com.gkhy.labRiskManage.api.controller.riskReport.dto.respDto.ReportExperimentSiteQueryRespDTO;
import com.gkhy.labRiskManage.api.controller.riskReport.dto.respDto.ReportPersonQueryRespDTO;
@@ -19,17 +21,21 @@
import com.gkhy.labRiskManage.domain.account.model.dto.UserInfoDomainDTO;
import com.gkhy.labRiskManage.domain.account.service.UserDomainService;
import com.gkhy.labRiskManage.domain.basic.entity.BasicRiskUnitType;
import com.gkhy.labRiskManage.domain.basic.model.dto.PersonQueryDTO;
import com.gkhy.labRiskManage.domain.basic.entity.OldRiskAssess;
import com.gkhy.labRiskManage.domain.basic.model.dto.SiteQueryDTO;
import com.gkhy.labRiskManage.domain.basic.service.BasicExperimentPersonService;
import com.gkhy.labRiskManage.domain.basic.service.BasicExperimentSiteService;
import com.gkhy.labRiskManage.domain.basic.service.BasicRiskUnitTypeService;
import com.gkhy.labRiskManage.domain.basic.service.OldRiskAssessService;
import com.gkhy.labRiskManage.domain.experiment.entity.ExperimentAndSite;
import com.gkhy.labRiskManage.domain.experiment.entity.ExperimentAssessLog;
import com.gkhy.labRiskManage.domain.experiment.entity.ExperimentInfo;
import com.gkhy.labRiskManage.domain.experiment.enums.ExperimentApprovalStatusEnum;
import com.gkhy.labRiskManage.domain.experiment.enums.ExperimentRectifyStatusEnum;
import com.gkhy.labRiskManage.domain.experiment.model.dto.ExperimentInfoDTO;
import com.gkhy.labRiskManage.domain.experiment.service.ExperimentAndSiteService;
import com.gkhy.labRiskManage.domain.experiment.service.ExperimentAndTypeService;
import com.gkhy.labRiskManage.domain.experiment.service.ExperimentAssessLogService;
import com.gkhy.labRiskManage.domain.experiment.service.ExperimentInfoService;
import com.gkhy.labRiskManage.domain.riskReport.entity.*;
import com.gkhy.labRiskManage.domain.riskReport.model.bo.ReportQueryBO;
@@ -39,7 +45,6 @@
import com.gkhy.labRiskManage.domain.riskReport.service.*;
import com.gkhy.labRiskManage.domain.riskReport.utils.GetRoleTagUtils;
import com.gkhy.labRiskManage.domain.riskReport.utils.RiskSourceTypeUtils;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
@@ -48,16 +53,15 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -91,6 +95,8 @@
    private ReportExperimentRiskSourceTypeService reportSourceTypeService;
    @Autowired
    private ReportExperimentRiskSourceService reportSourceService;
    @Autowired
    private ExperimentAssessLogService experimentAssessLogService;
    @Autowired
    private UserDomainService userDomainService;
@@ -103,6 +109,12 @@
    private RiskAssessPlanEvaluateMesService mesService;
    @Autowired
    private RiskAssessPlanEvaluateRsService rsService;
    @Autowired
    private ExperimentAndTypeService experimentAndTypeService;
    @Autowired
    private OldRiskAssessService oldRiskAssessService;
    /**
@@ -122,7 +134,7 @@
        if (ObjectUtils.isEmpty(queryBO.getTag())){
            throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR.getCode() ,"查询报告类别参数缺失");
        }
        if (queryBO.getExperimentName() == "null"){
        if (queryBO.getExperimentName() == ""){
            queryBO.setExperimentName(null);
        }
        UserInfoDomainDTO user = userDomainService.getUserById(currentUserId);
@@ -157,7 +169,7 @@
                    predicateList.add(criteriaBuilder.equal(root.get("experimentId"),queryParam.getExperimentId()));
                }
                if (!ObjectUtils.isEmpty(queryParam.getExperimentName())){
                    predicateList.add(criteriaBuilder.equal(root.get("experimentName"), queryParam.getExperimentName()));
                    predicateList.add(criteriaBuilder.like(root.get("experimentName"),"%"+queryParam.getExperimentName()+"%"));
                }
                if (roleTag == UserTagEnum.USER_TAG_0.getCode()){
                    predicateList.add(criteriaBuilder.equal(root.get("personUserId"), currentUserId));
@@ -165,7 +177,8 @@
                if (queryParam.getTag() == 1){
                    predicateList.add(criteriaBuilder.isNull(root.get("assessPerson")));
                }else if (queryParam.getTag() == 2){
                    predicateList.add(criteriaBuilder.isNotNull(root.get("assessPerson")));
                    predicateList.add(criteriaBuilder.isNotNull(root.get("assessPerson"))
                    );
                }
                //现在领导能查看所有的报告
//                if (roleTag == UserTagEnum.USER_TAG_2.getCode()){
@@ -190,6 +203,8 @@
        List<ReportAppQueryDTO> reportAppQueryDTOS = BeanCopyUtils.copyBeanList(reportQueryDTOS, ReportAppQueryDTO.class);
        List<UserInfoDomainDTO> userList = userDomainService.getUserList();
        for (ReportAppQueryDTO reportQueryDTO : reportAppQueryDTOS) {
            //获取审批人员
            List<ReportPersonQueryRespDTO> personByReportId = reportPersonService.listPersonByReportId(reportQueryDTO.getId());
@@ -204,12 +219,19 @@
            //获取评估计划
            List<AssessPlanQueryDTO> assessPlanByExperimentId = assessPlanService.getAssessPlanByExperimentId(reportQueryDTO.getExperimentId());
            reportQueryDTO.setEvaluateTime(experimentById.getCreateTime());
            if (!ObjectUtils.isEmpty(experimentById.getProcess())){
                reportQueryDTO.setProcess(experimentById.getProcess());
            }
            if (!ObjectUtils.isEmpty(assessPlanByExperimentId)){
                for (AssessPlanQueryDTO assessPlan : assessPlanByExperimentId) {
                    if (reportQueryDTO.getEvaluateTime().isBefore(assessPlan.getEvaluateTime())){
                        reportQueryDTO.setEvaluateTime(assessPlan.getEvaluateTime());
                    if (assessPlan.getEvaluateTime() != null){
                        if (reportQueryDTO.getEvaluateTime().isBefore(assessPlan.getEvaluateTime())){
                            reportQueryDTO.setEvaluateTime(assessPlan.getEvaluateTime());
                        }
                    }
                }
            }
@@ -224,6 +246,16 @@
            }
            if (!ObjectUtils.isEmpty(siteByReportId)){
                reportQueryDTO.setExperimentSite(BeanCopyUtils.copyBeanList(siteByReportId, ReportExperimentSiteQueryRespDTO.class));
                if (queryBO.getExperimentId() != null){
                    List<ReportExperimentSiteQueryRespDTO> experimentSite = reportQueryDTO.getExperimentSite();
                    List<String> collect = experimentSite.stream().map(ReportExperimentSiteQueryRespDTO::getSiteName).collect(Collectors.toList());
                    List<OldRiskAssessResDTO> oldRiskAssessListByRegion = oldRiskAssessService.getOldRiskAssessListByRegion(collect);
                    if (!ObjectUtils.isEmpty(oldRiskAssessListByRegion)){
                        reportQueryDTO.setOldRiskAssess(oldRiskAssessListByRegion);
                    }
                    reportQueryDTO.setExperimentAndType(experimentAndTypeService.getByExperimentId(reportQueryDTO.getExperimentId()));
                }
            }
            reportQueryDTO.setExperimentCode(experimentById.getExperimentCode());
@@ -235,6 +267,9 @@
                    reportQueryDTO.setUpdateByUserName(userInfo.getRealName());
                }
            }
        }
        searchResult.setData(reportAppQueryDTOS);
@@ -242,12 +277,13 @@
        return searchResult;
    }
    /**
     * 风险评估报告 - 生成报告信息
     */
    @Transactional
    @Override
    public ReportInsertDTO insertRiskReport(Long currentUserId, Long id) {
    public ReportInsertDTO insertRiskReport(Long currentUserId, Long id,String reSubmit) {
        if (currentUserId < 0){
            throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"当前用户无效,请重新登陆");
@@ -268,9 +304,20 @@
        if (roleTag == 0){
            throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"不是管理员,无权生成报告");
        }
        if (experimentById.getStage() == StatusEnum.EXPERIMENT_STATUS_REPORT.getCode().byteValue()){
            throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"该实验已经生成报告,无需重复操作");
        if (!ObjectUtils.isEmpty(reSubmit) && "1".equals(reSubmit) && experimentById.getStage() >= StatusEnum.EXPERIMENT_STATUS_FINISH.getCode().byteValue()){
            //删除已生成的报告数据
            delReportData(id,currentUserId);
        }else {
            if (experimentById.getStage() == StatusEnum.EXPERIMENT_STATUS_REPORT.getCode().byteValue()){
                throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"该实验已经生成报告,无需重复操作");
            }
        }
        ReportRiskAssessInfo byExperimentId = reportRepository.getByExperimentId(id);
        if (!ObjectUtils.isEmpty(byExperimentId)){
            throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"该实验已经生成报告,请勿重复操作");
        }
        //定义初始风险等级0级
        Byte level = 0;
        //获取该实验的所有计划信息
@@ -290,14 +337,16 @@
        if (tag == 1){
            throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR.getCode() ,"该实验有未完成的评估计划" + info);
        }
        UserInfoDomainDTO liabilityUser = userDomainService.getUserInfoById(experimentById.getLiabilityUserId());
        if (ObjectUtils.isEmpty(liabilityUser)){
            throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR.getCode() ,"实验责任人信息不存在");
        }
//20250520实验责任人去掉验证
//        UserInfoDomainDTO liabilityUser = userDomainService.getUserInfoById(experimentById.getLiabilityUserId());
//        if (ObjectUtils.isEmpty(liabilityUser)){
//            throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR.getCode() ,"实验责任人信息不存在");
//        }
        //检查该实验所有的评价结果,遍历评价结果等级
        Set<Byte> riskLevelList = new HashSet<>();
        int a = 1;
        StringBuilder analysis = new StringBuilder();
        List<RiskAssessPlanEvaluateLec> lecByIds = lecService.getLecByIds(assessPlanIds);
@@ -308,6 +357,7 @@
        if (lecByIds .size() > 0){
            for (RiskAssessPlanEvaluateLec lecById : lecByIds) {
                if (lecById.getRiskLevel() > level){
                    riskLevelList.add(lecById.getRiskLevel());
                    level = lecById.getRiskLevel();
                    analysis.append(a + lecById.getSafeRiskAnalysis() + ";");//todo 安全风险分析
                    a++;
@@ -317,6 +367,7 @@
        if (lsByIds .size() > 0){
            for (RiskAssessPlanEvaluateLs lsById : lsByIds) {
                if (lsById.getRiskLevel() > level){
                    riskLevelList.add(lsById.getRiskLevel());
                    level = lsById.getRiskLevel();
                    analysis.append(a + lsById.getSafeRiskAnalysis() + ";");
                    a++;
@@ -326,6 +377,7 @@
        if (mesByIds .size() > 0){
            for (RiskAssessPlanEvaluateMes mesById : mesByIds) {
                if (mesById.getRiskLevel() > level){
                    riskLevelList.add(mesById.getRiskLevel());
                    level = mesById.getRiskLevel();
                    analysis.append(a + mesById.getSafeRiskAnalysis() + ";");
                    a++;
@@ -336,6 +388,7 @@
        if (rsByIds .size() > 0){
            for (RiskAssessPlanEvaluateRs rsById : rsByIds) {
                if (rsById.getRiskLevel() > level){
                    riskLevelList.add(rsById.getRiskLevel());
                    level = rsById.getRiskLevel();
                    analysis.append(a + rsById.getSafeRiskAnalysis() + ";");
                    a++;
@@ -368,9 +421,26 @@
        reportInfo.setSafeRiskAnalysis(analysis.toString());
        reportInfo.setAssessPerson(null);
        reportInfo.setAssessLevel(null);
        reportInfo.setDepId(null); //todo 不确定是否需要部门
        reportInfo.setSafeRiskAnalysis(null); //todo 安全风险分析,暂时不知道数据来源,先设空
        if (ObjectUtils.isEmpty(riskLevelList)){
            reportInfo.setAssessLevel(StatusEnum.REPORT_LEVEL_4.getCode().byteValue());
        }else {
            byte b = riskLevelList.stream().max(Comparator.comparing(Integer::valueOf)).get();
            if (b == StatusEnum.REPORT_LEVEL_1.getCode().byteValue()){
                reportInfo.setAssessLevel(StatusEnum.REPORT_LEVEL_4.getCode().byteValue());
            }else if (b == StatusEnum.REPORT_LEVEL_2.getCode().byteValue()){
                reportInfo.setAssessLevel(StatusEnum.REPORT_LEVEL_3.getCode().byteValue());
            }else if (b == StatusEnum.REPORT_LEVEL_3.getCode().byteValue()){
                reportInfo.setAssessLevel(StatusEnum.REPORT_LEVEL_2.getCode().byteValue());
            }else if (b == StatusEnum.REPORT_LEVEL_4.getCode().byteValue()){
                reportInfo.setAssessLevel(StatusEnum.REPORT_LEVEL_1.getCode().byteValue());
            }
        }
        //todo 不确定是否需要部门
        reportInfo.setDepId(null);
//       reportInfo.setSafeRiskAnalysis(null);
        //修改实验  4 生成报告,
@@ -453,6 +523,16 @@
        return BeanCopyUtils.copyBean(saveResult, ReportInsertDTO.class);
    }
    private void delReportData(Long id,Long userId){
        ReportRiskAssessInfo byExperimentId = reportRepository.getByExperimentId(id);
        if (!ObjectUtils.isEmpty(byExperimentId)){
            reportRepository.delReport(userId, byExperimentId.getId());
            reportExperimentSiteService.delReportData(byExperimentId.getId());
            reportSourceTypeService.delReportData(byExperimentId.getId());
        }
    }
    /**
@@ -555,8 +635,10 @@
        reportById.setAssessPerson(reportUpdateBO.getAssessPerson());
        reportById.setAssessLevel(reportUpdateBO.getAssessLevel());
//        reportById.setSafeRiskAnalysis(reportUpdateBO.getSafeRiskAnalysis());
        reportById.setDescription(reportUpdateBO.getDescription());
        if(!ObjectUtils.isEmpty(reportUpdateBO.getSafeRiskAnalysis())){
            reportById.setSafeRiskAnalysis(reportUpdateBO.getSafeRiskAnalysis());
        }
        reportById.setUpdateTime(LocalDateTime.now());
        reportById.setUpdateByUserId(currentUserId);
@@ -724,6 +806,7 @@
     * 风险评估报告 - 报告审核 - 新 - 单次审核
     */
    @Override
    @Transactional
    public int reportNew(Long currentUserId, ReportReqBO reportReqBO) {
        if (currentUserId < 0){
@@ -820,6 +903,19 @@
                if (ObjectUtils.isEmpty(experimentInfo)){
                    throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"实验信息状态修改失败");
                }
                //添加评估记录  todo
                ExperimentAssessLog experimentAssessLog = new ExperimentAssessLog();
                experimentAssessLog.setExperimentCode(experimentInfo.getExperimentCode());
                experimentAssessLog.setAssessEndTime(date);
                experimentAssessLog.setAssessUser(user.getRealName());
                experimentAssessLog.setAssessResult(StatusEnum.APPROVED_PASS.getCode().byteValue());
                ExperimentAssessLog experimentAssessLogResult = experimentAssessLogService.saveExperimentAssessLog(experimentAssessLog);
                if (ObjectUtils.isEmpty(experimentAssessLogResult)){
                    throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"实验信息评估记录写入失败");
                }
            }else {
                throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"无操作权限");
            }
        }
@@ -843,6 +939,8 @@
                if (ObjectUtils.isEmpty(assessPerson)){
                    throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"审核信息保存失败");
                }
            }else {
                throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"无操作权限");
            }
            //修改报告状态
            reportById.setApprovePlanStatus(StatusEnum.REPORT_NOT_APPROVED.getCode().byteValue());
@@ -860,6 +958,18 @@
            if (ObjectUtils.isEmpty(experimentInfo)){
                throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"实验信息状态修改失败");
            }
            //添加评估记录 todo
            ExperimentAssessLog experimentAssessLog = new ExperimentAssessLog();
            experimentAssessLog.setExperimentCode(experimentInfo.getExperimentCode());
            experimentAssessLog.setAssessEndTime(date);
            experimentAssessLog.setAssessUser(user.getRealName());
            experimentAssessLog.setAssessResult(StatusEnum.APPROVED_NOT_PASS.getCode().byteValue());
            ExperimentAssessLog experimentAssessLogResult = experimentAssessLogService.saveExperimentAssessLog(experimentAssessLog);
            if (ObjectUtils.isEmpty(experimentAssessLogResult)){
                throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"实验信息评估记录写入失败");
            }
        }
        return StatusEnum.SUCCESS.getCode();