package com.gkhy.labRiskManage.domain.riskReport.service.impl; import com.gkhy.labRiskManage.api.controller.riskReport.dto.repDto.RiskAssessPlanEvaluateDeleteReqBO; import com.gkhy.labRiskManage.commons.enums.MethodEnum; import com.gkhy.labRiskManage.commons.enums.ResultCode; import com.gkhy.labRiskManage.commons.enums.StatusEnum; import com.gkhy.labRiskManage.commons.exception.BusinessException; import com.gkhy.labRiskManage.commons.utils.BeanCopyUtils; import com.gkhy.labRiskManage.domain.riskReport.entity.RiskAssessPlanEvaluateRs; import com.gkhy.labRiskManage.domain.riskReport.model.bo.AssessRsInsertBO; import com.gkhy.labRiskManage.domain.riskReport.model.dto.EvaluateInsertDTO; import com.gkhy.labRiskManage.domain.riskReport.model.dto.EvaluateMethodDeleteDTO; import com.gkhy.labRiskManage.domain.riskReport.model.dto.RsInsertDTO; import com.gkhy.labRiskManage.domain.riskReport.model.dto.RsQueryDTO; import com.gkhy.labRiskManage.domain.riskReport.repository.jpa.RiskAssessPlanEvaluateRsRepository; import com.gkhy.labRiskManage.domain.riskReport.service.RiskAssessPlanEvaluateRsService; import com.gkhy.labRiskManage.domain.riskReport.utils.IdentificationMethodCheck; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; /** * 评价方法RS */ @Service public class RiskAssessPlanEvaluateRsServiceImpl implements RiskAssessPlanEvaluateRsService { @Autowired private RiskAssessPlanEvaluateRsRepository rsRepository; /** * 评价方法RS - 插入 */ @Override public RsInsertDTO InsertRs(Long currentUserId, AssessRsInsertBO rsInsertBO) { EvaluateInsertDTO insertDTO = new EvaluateInsertDTO(); insertDTO.setResult(1); IdentificationMethodCheck methodCheck = new IdentificationMethodCheck(); //校验辨识方法是否存在 int result = methodCheck.identificationMethodCheck(rsInsertBO.getIdentificationId(), rsInsertBO.getIdentificationMethod()); if (result == 0){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "辨识方法不存在"); } if (ObjectUtils.isEmpty(rsInsertBO.getAssessPlanId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "评价的计划不能为空"); } if (ObjectUtils.isEmpty(rsInsertBO.getRsR())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "RS_R的数值不能为空"); } if (ObjectUtils.isEmpty(rsInsertBO.getRsS())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "RS_S的数值不能为空"); } if (ObjectUtils.isEmpty(rsInsertBO.getRiskValue())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险数值不能为空"); } if (ObjectUtils.isEmpty(rsInsertBO.getOriginalRsR())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "固有RS_R的数值不能为空"); } if (ObjectUtils.isEmpty(rsInsertBO.getOriginalRsS())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "固有RS_S的数值不能为空"); } if (ObjectUtils.isEmpty(rsInsertBO.getOriginalRiskValue())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "固有风险数值不能为空"); } RiskAssessPlanEvaluateRs rsByIdentification = rsRepository.getRsByIdentification(rsInsertBO.getIdentificationId(), rsInsertBO.getIdentificationMethod()); if (!ObjectUtils.isEmpty(rsByIdentification)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "该辨识已经被评价,无需重复操作"); } if (ObjectUtils.isEmpty(rsInsertBO.getEvaluateDesc())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "评价专家意见不能为空"); } BigDecimal value = rsInsertBO.getRsR().multiply(rsInsertBO.getRsS()); //BigDecimal类型比较,结果为0是相等 if (value.compareTo(rsInsertBO.getRiskValue()) != 0){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险数值计算有误,无法保存"); } if (ObjectUtils.isEmpty(rsInsertBO.getSafeRiskAnalysis())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "安全风险分析内容不能为空"); } //设置参数 LocalDateTime date = LocalDateTime.now(); RiskAssessPlanEvaluateRs rs = new RiskAssessPlanEvaluateRs(); if (value.compareTo(new BigDecimal(10)) < 0){ rs.setRiskLevel(MethodEnum.RISK_LEVEL_1.getCode()); rs.setRiskLevelValue(MethodEnum.RISK_LEVEL_1.getCode()); rs.setRiskColor(MethodEnum.RISK_LEVEL_1.getCode()); }else if (value.compareTo(new BigDecimal(MethodEnum.RISK_EVALUATE_VALUE_1.getCode())) > 0 && value.compareTo(new BigDecimal(MethodEnum.RISK_EVALUATE_VALUE_2.getCode())) < 0){ rs.setRiskLevel(MethodEnum.RISK_LEVEL_2.getCode()); rs.setRiskLevelValue(MethodEnum.RISK_LEVEL_2.getCode()); rs.setRiskColor(MethodEnum.RISK_LEVEL_2.getCode()); }else if (value.compareTo(new BigDecimal(MethodEnum.RISK_EVALUATE_VALUE_2.getCode())) > 0 && value.compareTo(new BigDecimal(MethodEnum.RISK_EVALUATE_VALUE_3.getCode())) < 0){ rs.setRiskLevel(MethodEnum.RISK_LEVEL_3.getCode()); rs.setRiskLevelValue(MethodEnum.RISK_LEVEL_3.getCode()); rs.setRiskColor(MethodEnum.RISK_LEVEL_3.getCode()); }else if (value.compareTo(new BigDecimal(MethodEnum.RISK_EVALUATE_VALUE_3.getCode())) > 0){ rs.setRiskLevel(MethodEnum.RISK_LEVEL_4.getCode()); rs.setRiskLevelValue(MethodEnum.RISK_LEVEL_4.getCode()); rs.setRiskColor(MethodEnum.RISK_LEVEL_4.getCode()); } rs.setIdentificationId(rsInsertBO.getIdentificationId()); rs.setIdentificationMethod(rsInsertBO.getIdentificationMethod()); rs.setAssessPlanId(rs.getAssessPlanId()); rs.setRsR(rsInsertBO.getRsR()); rs.setRsS(rsInsertBO.getRsS()); rs.setDeleteStatus(StatusEnum.DELETE_NOT.getCode().byteValue()); rs.setCreateTime(date); rs.setUpdateTime(date); rs.setRiskValue(rsInsertBO.getRiskValue()); rs.setManageLevel(rsInsertBO.getManageLevel()); rs.setEvaluateDesc(rsInsertBO.getEvaluateDesc()); rs.setStatus((byte) 1); rs.setEducationMeasure(rsInsertBO.getEducationMeasure()); rs.setTechnologyMeasure(rsInsertBO.getTechnologyMeasure()); rs.setManageMeasure(rsInsertBO.getManageMeasure()); rs.setPersonalProtectionMeasure(rsInsertBO.getPersonalProtectionMeasure()); rs.setEmergencyMeasure(rsInsertBO.getEmergencyMeasure()); rs.setRsR(rsInsertBO.getRsR()); rs.setRsS(rsInsertBO.getRsS()); rs.setOriginalRiskValue(rsInsertBO.getOriginalRiskValue()); rs.setOriginalRiskLevelValue(rsInsertBO.getOriginalRiskLevelValue()); rs.setOriginalRiskLevel(rsInsertBO.getOriginalRiskLevel()); rs.setOriginalRiskColor(rsInsertBO.getOriginalRiskColor()); rs.setOriginalManageLevel(rsInsertBO.getOriginalManageLevel()); rs.setAdviseTechnologyMeasure(rsInsertBO.getAdviseTechnologyMeasure()); rs.setAdviseManageMeasure(rsInsertBO.getAdviseManageMeasure()); rs.setAdviseEmergencyMeasure(rsInsertBO.getAdviseEmergencyMeasure()); rs.setAdviseEducationMeasure(rsInsertBO.getAdviseEducationMeasure()); rs.setAdvisePersonalProtectionMeasure(rsInsertBO.getAdvisePersonalProtectionMeasure()); rs.setSafeRiskAnalysis(rsInsertBO.getSafeRiskAnalysis()); RiskAssessPlanEvaluateRs insertResult = rsRepository.save(rs); return BeanCopyUtils.copyBean(insertResult, RsInsertDTO.class); } /** * 评价方法RS - 修改 */ @Override public RsInsertDTO updateRs(Long currentUserId, AssessRsInsertBO rsInsertBO) { EvaluateInsertDTO insertDTO = new EvaluateInsertDTO(); insertDTO.setResult(1); if (ObjectUtils.isEmpty(rsInsertBO.getId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "要修改的评价内容不能为空"); } RiskAssessPlanEvaluateRs rsById = rsRepository.getRsById(rsInsertBO.getId()); if (ObjectUtils.isEmpty(rsById)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "要修改的评价不存在"); } if (ObjectUtils.isEmpty(rsInsertBO.getAssessPlanId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "评价的计划不能为空"); } if (ObjectUtils.isEmpty(rsInsertBO.getRsR())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "RS_R的数值不能为空"); } if (ObjectUtils.isEmpty(rsInsertBO.getRsS())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "RS_S的数值不能为空"); } if (ObjectUtils.isEmpty(rsInsertBO.getRiskValue())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险数值不能为空"); } if (ObjectUtils.isEmpty(rsInsertBO.getOriginalRsR())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "固有RS_R的数值不能为空"); } if (ObjectUtils.isEmpty(rsInsertBO.getOriginalRsS())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "固有RS_S的数值不能为空"); } if (ObjectUtils.isEmpty(rsInsertBO.getOriginalRiskValue())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "固有风险数值不能为空"); } if (ObjectUtils.isEmpty(rsInsertBO.getEvaluateDesc())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "评价专家意见不能为空"); } BigDecimal value = rsInsertBO.getRsR().multiply(rsInsertBO.getRsS()); //BigDecimal类型比较,结果为0是相等 if (value.compareTo(rsInsertBO.getRiskValue()) != 0){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险数值计算有误,无法保存"); } if (ObjectUtils.isEmpty(rsInsertBO.getSafeRiskAnalysis())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "安全风险分析内容不能为空"); } //设置参数 LocalDateTime date = LocalDateTime.now(); RiskAssessPlanEvaluateRs rs = BeanCopyUtils.copyBean(rsById, RiskAssessPlanEvaluateRs.class); if (value.compareTo(new BigDecimal(10)) < 0){ rs.setRiskLevel(MethodEnum.RISK_LEVEL_1.getCode()); rs.setRiskLevelValue(MethodEnum.RISK_LEVEL_1.getCode()); rs.setRiskColor(MethodEnum.RISK_LEVEL_1.getCode()); }else if (value.compareTo(new BigDecimal(MethodEnum.RISK_EVALUATE_VALUE_1.getCode())) > 0 && value.compareTo(new BigDecimal(MethodEnum.RISK_EVALUATE_VALUE_2.getCode())) < 0){ rs.setRiskLevel(MethodEnum.RISK_LEVEL_2.getCode()); rs.setRiskLevelValue(MethodEnum.RISK_LEVEL_2.getCode()); rs.setRiskColor(MethodEnum.RISK_LEVEL_2.getCode()); }else if (value.compareTo(new BigDecimal(MethodEnum.RISK_EVALUATE_VALUE_2.getCode())) > 0 && value.compareTo(new BigDecimal(MethodEnum.RISK_EVALUATE_VALUE_3.getCode())) < 0){ rs.setRiskLevel(MethodEnum.RISK_LEVEL_3.getCode()); rs.setRiskLevelValue(MethodEnum.RISK_LEVEL_3.getCode()); rs.setRiskColor(MethodEnum.RISK_LEVEL_3.getCode()); }else if (value.compareTo(new BigDecimal(MethodEnum.RISK_EVALUATE_VALUE_3.getCode())) > 0){ rs.setRiskLevel(MethodEnum.RISK_LEVEL_4.getCode()); rs.setRiskLevelValue(MethodEnum.RISK_LEVEL_4.getCode()); rs.setRiskColor(MethodEnum.RISK_LEVEL_4.getCode()); } rs.setRsR(rsInsertBO.getRsR()); rs.setRsS(rsInsertBO.getRsS()); rs.setUpdateTime(date); rs.setRiskValue(rsInsertBO.getRiskValue()); rs.setManageLevel(rsInsertBO.getManageLevel()); rs.setStatus(StatusEnum.REPORT_NOT_START.getCode().byteValue()); rs.setEvaluateDesc(rsInsertBO.getEvaluateDesc()); rs.setEducationMeasure(rsInsertBO.getEducationMeasure()); rs.setTechnologyMeasure(rsInsertBO.getTechnologyMeasure()); rs.setManageMeasure(rsInsertBO.getManageMeasure()); rs.setPersonalProtectionMeasure(rsInsertBO.getPersonalProtectionMeasure()); rs.setEmergencyMeasure(rsInsertBO.getEmergencyMeasure()); rs.setRsR(rsInsertBO.getRsR()); rs.setRsS(rsInsertBO.getRsS()); rs.setOriginalRiskValue(rsInsertBO.getOriginalRiskValue()); rs.setOriginalRiskLevelValue(rsInsertBO.getOriginalRiskLevelValue()); rs.setOriginalRiskLevel(rsInsertBO.getOriginalRiskLevel()); rs.setOriginalRiskColor(rsInsertBO.getOriginalRiskColor()); rs.setOriginalManageLevel(rsInsertBO.getOriginalManageLevel()); rs.setAdviseTechnologyMeasure(rsInsertBO.getAdviseTechnologyMeasure()); rs.setAdviseManageMeasure(rsInsertBO.getAdviseManageMeasure()); rs.setAdviseEmergencyMeasure(rsInsertBO.getAdviseEmergencyMeasure()); rs.setAdviseEducationMeasure(rsInsertBO.getAdviseEducationMeasure()); rs.setAdvisePersonalProtectionMeasure(rsInsertBO.getAdvisePersonalProtectionMeasure()); rs.setSafeRiskAnalysis(rsInsertBO.getSafeRiskAnalysis()); RiskAssessPlanEvaluateRs insertResult = rsRepository.save(rs); return BeanCopyUtils.copyBean(insertResult, RsInsertDTO.class); } /** * 评价方法RS - 查询 */ @Override public RsQueryDTO getRsByPlanId(Long id) { RiskAssessPlanEvaluateRs rsById = rsRepository.getRsById(id); if (ObjectUtils.isEmpty(rsById)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "rs评价方法不存在或已被删除"); } return BeanCopyUtils.copyBean(rsById, RsQueryDTO.class); } /** * 评价方法RS - 删除 */ @Override public EvaluateMethodDeleteDTO deleteRsByPlanId(Long currentUserId, RiskAssessPlanEvaluateDeleteReqBO deleteReqBO) { if (ObjectUtils.isEmpty(deleteReqBO.getRsId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "要删除的评价项目不能为空"); } RiskAssessPlanEvaluateRs rsById = rsRepository.getRsById(deleteReqBO.getRsId()); if (ObjectUtils.isEmpty(rsById)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "要删除的评价项目为空,或已被删除"); } if (!rsById.getAssessPlanId().equals(deleteReqBO.getId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "评估计划与评价项不匹配,无法删除"); } EvaluateMethodDeleteDTO deleteDTO = new EvaluateMethodDeleteDTO(); rsById.setDeleteStatus(StatusEnum.DELETED.getCode().byteValue()); LocalDateTime date = LocalDateTime.now(); rsById.setUpdateTime(date); RiskAssessPlanEvaluateRs deleteResult = rsRepository.save(rsById); if (ObjectUtils.isEmpty(deleteResult)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "评价方法不存在或已被删除"); } deleteDTO.setResult(StatusEnum.DELETED.getCode().byteValue()); return deleteDTO; } /** * 评价方法RS - list */ @Override public List listRsByPlanId(Long id) { List rsList = rsRepository.listRsByPlanId(id); return BeanCopyUtils.copyBeanList(rsList, RsQueryDTO.class); } @Override public List getRsByIds(List assessPlanIds) { return rsRepository.getRsByIds(assessPlanIds); } @Override public int deleteRsByAssessPlanId(Long id) { List rsList = rsRepository.geByAssessPlanId(id); if (rsList.size() < 1){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "评价方法不存在或已被删除"); } int i = 1; for (RiskAssessPlanEvaluateRs rs : rsList) { rs.setDeleteStatus(StatusEnum.DELETED.getCode().byteValue()); RiskAssessPlanEvaluateRs save = rsRepository.save(rs); if (ObjectUtils.isEmpty(save)){ i = 1; } } return i; } @Override public int deleteRsByPlan(Long id) { List rsListByPlanId = rsRepository.getRsByPlanId(id); if (ObjectUtils.isEmpty(rsListByPlanId)){ return StatusEnum.SUCCESS.getCode(); } for (RiskAssessPlanEvaluateRs riskAssessPlanEvaluateRs : rsListByPlanId) { riskAssessPlanEvaluateRs.setDeleteStatus(StatusEnum.DELETED.getCode().byteValue()); } List result = rsRepository.saveAll(rsListByPlanId); if (result.size() != rsListByPlanId.size()){ return StatusEnum.FAIL.getCode(); } return StatusEnum.SUCCESS.getCode(); } @Override public RiskAssessPlanEvaluateRs getRsByIdentificationId(Long id, Byte identificationMethod) { return rsRepository.getRsByIdentification(id, identificationMethod); } }