package com.gkhy.safePlatform.riskCtrl.utils; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import com.gkhy.safePlatform.account.rpc.apimodel.model.enums.DepartmentLevelEnum; import com.gkhy.safePlatform.doublePrevent.rpc.apimodel.model.resp.RPCDataCountI1RespDTO; import com.gkhy.safePlatform.doublePrevent.rpc.apimodel.model.resp.RPCDataCountI2RespDTO; import com.gkhy.safePlatform.emergency.rpc.api.model.dto.resp.EmergencyExecuteNumDetailRPCResp; import com.gkhy.safePlatform.emergency.rpc.api.model.dto.resp.EmergencyExecuteNumRPCResp; import com.gkhy.safePlatform.emergency.rpc.api.model.dto.resp.EmergencyExecuteTimeRPCResp; import com.gkhy.safePlatform.incidentManage.rpc.api.model.dto.resp.IncidentManageCountDetailRPCResp; import com.gkhy.safePlatform.incidentManage.rpc.api.model.dto.resp.IncidentManageCountRPCResp; import com.gkhy.safePlatform.incidentManage.rpc.api.model.dto.resp.IncidentManageRPCResp; import com.gkhy.safePlatform.riskCtrl.constant.SpiWeighValue; import com.gkhy.safePlatform.riskCtrl.model.bo.EmergencyCountBO; import com.gkhy.safePlatform.riskCtrl.model.bo.EmergencyDataBO; import com.gkhy.safePlatform.riskCtrl.model.bo.IncidentDataBO; import com.gkhy.safePlatform.riskCtrl.model.bo.RiskDataBO; import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; import java.util.List; public class SpiItemAnalysisHandler { /** * 计算I1 * @param riskDataBO * @return */ public BigDecimal calI1(RiskDataBO riskDataBO){ if(riskDataBO == null) return null; BigDecimal A = BigDecimal.valueOf(riskDataBO.getGeneralRiskData().getRiskCount()+riskDataBO.getMajorRiskData().getRiskCount()); BigDecimal A1 = BigDecimal.valueOf(riskDataBO.getCauseDeathCount()); BigDecimal A2 = BigDecimal.valueOf(riskDataBO.getCauseHeavyInjureCount()); BigDecimal A3 = BigDecimal.valueOf(riskDataBO.getCauseLightInjureCount()); BigDecimal a123 = A1.add(A2).add(A3); BigDecimal I1 = BigDecimal.valueOf(0); if(a123.compareTo(BigDecimal.valueOf(0)) != 0){ I1 = A.divide(A1.add(A2).add(A3),BigDecimal.ROUND_CEILING) .multiply(A1.multiply(SpiWeighValue.RISK_A1).add(A2.multiply(SpiWeighValue.RISK_A2)).add(A3.multiply(SpiWeighValue.RISK_A3))); } return I1; } /** * 计算I2 * @param riskDataBO * @return */ public BigDecimal calI2(RiskDataBO riskDataBO){ if(riskDataBO == null) return null; BigDecimal B1 = BigDecimal.valueOf(riskDataBO.getMajorRiskData().getRiskCount()); BigDecimal B2 = BigDecimal.valueOf(riskDataBO.getGeneralRiskData().getRiskCount()); BigDecimal I2 = B1.multiply(SpiWeighValue.RISK_B1).add(B2.multiply(SpiWeighValue.RISK_B2)); return I2; } /** * 计算I3 * @param riskDataBO * @return */ public BigDecimal calI3(RiskDataBO riskDataBO){ if(riskDataBO == null) return null; BigDecimal B1 = BigDecimal.valueOf(riskDataBO.getMajorRiskData().getRiskCount()); BigDecimal B2 = BigDecimal.valueOf(riskDataBO.getGeneralRiskData().getRiskCount()); BigDecimal Cn1 = BigDecimal.valueOf(0); if(riskDataBO.getMajorRiskData().getRiskCount() != null && riskDataBO.getMajorRiskData().getRiskCount() > 0){ BigDecimal rate = BigDecimal.valueOf(riskDataBO.getMajorRiskData().getRectifyCount()).divide(BigDecimal.valueOf(riskDataBO.getMajorRiskData().getRiskCount()),BigDecimal.ROUND_CEILING); if(rate.compareTo(BigDecimal.valueOf(1)) == 0){ Cn1 = SpiWeighValue.RISK_CN1_L1; }else if(rate.compareTo(BigDecimal.valueOf(0.8)) >= 0 && rate.compareTo(BigDecimal.valueOf(1)) < 1){ Cn1 = SpiWeighValue.RISK_CN1_L2; }else if(rate.compareTo(BigDecimal.valueOf(0.5)) >= 0 && rate.compareTo(BigDecimal.valueOf(0.8)) < 1){ Cn1 = SpiWeighValue.RISK_CN1_L3; }else if(rate.compareTo(BigDecimal.valueOf(0.3)) >= 0 && rate.compareTo(BigDecimal.valueOf(0.5)) < 1){ Cn1 = SpiWeighValue.RISK_CN1_L4; }else if(rate.compareTo(BigDecimal.valueOf(0.3)) < 0){ Cn1 = SpiWeighValue.RISK_CN1_L5; } } BigDecimal Cn2 = BigDecimal.valueOf(0); if(riskDataBO.getGeneralRiskData().getRiskCount() != null && riskDataBO.getGeneralRiskData().getRiskCount() > 0){ BigDecimal rate = BigDecimal.valueOf(riskDataBO.getGeneralRiskData().getRectifyCount()).divide(BigDecimal.valueOf(riskDataBO.getGeneralRiskData().getRiskCount())); if(rate.compareTo(BigDecimal.valueOf(1)) == 0){ Cn2 = SpiWeighValue.RISK_CN2_L1; }else if(rate.compareTo(BigDecimal.valueOf(0.8)) >= 0 && rate.compareTo(BigDecimal.valueOf(1)) < 1){ Cn2 = SpiWeighValue.RISK_CN2_L2; }else if(rate.compareTo(BigDecimal.valueOf(0.5)) >= 0 && rate.compareTo(BigDecimal.valueOf(0.8)) < 1){ Cn2 = SpiWeighValue.RISK_CN2_L3; }else if(rate.compareTo(BigDecimal.valueOf(0.3)) >= 0 && rate.compareTo(BigDecimal.valueOf(0.5)) < 1){ Cn2 = SpiWeighValue.RISK_CN2_L4; }else if(rate.compareTo(BigDecimal.valueOf(0.3)) < 0){ Cn2 = SpiWeighValue.RISK_CN2_L5; } } BigDecimal I3 = B1.multiply(SpiWeighValue.RISK_B1).multiply(Cn1).add(B2.multiply(SpiWeighValue.RISK_B2).multiply(Cn2)); return I3; } /** * 计算I6 * @param emergencyDataBO * @return */ public BigDecimal calI6(EmergencyDataBO emergencyDataBO){ if(emergencyDataBO == null || emergencyDataBO.getPracticeData() == null || emergencyDataBO.getPracticeData().isEmpty()) return null; //公司级演练数量统计 BigDecimal emergencyCountLevelCompany = BigDecimal.valueOf(0); //事业部级演练数量统计 BigDecimal emergencyCountLevelBUSINESS = BigDecimal.valueOf(0); //车间级演练数量统计 BigDecimal emergencyCountLevelWORKSHOP = BigDecimal.valueOf(0); //班组级演练数量统计 BigDecimal emergencyCountLevelGROUP = BigDecimal.valueOf(0); for(EmergencyCountBO countBO : emergencyDataBO.getPracticeData()){ if(countBO.getDepLevel().equals(DepartmentLevelEnum.COMPANY.code)){ //公司级 emergencyCountLevelCompany = BigDecimal.valueOf(countBO.getPracticeCount()); }else if(countBO.getDepLevel().equals(DepartmentLevelEnum.BUSINESS.code)){ //事业部级 emergencyCountLevelBUSINESS = BigDecimal.valueOf(countBO.getPracticeCount()); }else if(countBO.getDepLevel().equals(DepartmentLevelEnum.WORKSHOP.code)){ //车间级 emergencyCountLevelWORKSHOP = BigDecimal.valueOf(countBO.getPracticeCount()); }else if(countBO.getDepLevel().equals(DepartmentLevelEnum.GROUP.code)){ //班组级 emergencyCountLevelGROUP = BigDecimal.valueOf(countBO.getPracticeCount()); } } BigDecimal I6 = emergencyCountLevelCompany.multiply(SpiWeighValue.EMERGENCY_F1) .add(emergencyCountLevelBUSINESS.multiply(SpiWeighValue.EMERGENCY_F2)) .add(emergencyCountLevelWORKSHOP.multiply(SpiWeighValue.EMERGENCY_F3)) .add(emergencyCountLevelGROUP.multiply(SpiWeighValue.EMERGENCY_F4)); return I6; } /** * 计算I7值 * @param emergencyDataBO * @param isCalMonth * @param year * @param month * @return */ public BigDecimal calI7(EmergencyDataBO emergencyDataBO, boolean isCalMonth, Integer year, Integer month){ if(emergencyDataBO == null || emergencyDataBO.getPracticeData() == null || emergencyDataBO.getPracticeData().isEmpty()) return null; //1、计算应急演练次数 //公司级演练数量统计 BigDecimal emergencyCountLevelCompany = BigDecimal.valueOf(0); //事业部级演练数量统计 BigDecimal emergencyCountLevelBUSINESS = BigDecimal.valueOf(0); //车间级演练数量统计 BigDecimal emergencyCountLevelWORKSHOP = BigDecimal.valueOf(0); //班组级演练数量统计 BigDecimal emergencyCountLevelGROUP = BigDecimal.valueOf(0); for(EmergencyCountBO countBO : emergencyDataBO.getPracticeData()){ if(countBO.getDepLevel().equals(DepartmentLevelEnum.COMPANY.code)){ //公司级 emergencyCountLevelCompany = BigDecimal.valueOf(countBO.getPracticeCount()); }else if(countBO.getDepLevel().equals(DepartmentLevelEnum.BUSINESS.code)){ //事业部级 emergencyCountLevelBUSINESS = BigDecimal.valueOf(countBO.getPracticeCount()); }else if(countBO.getDepLevel().equals(DepartmentLevelEnum.WORKSHOP.code)){ //车间级 emergencyCountLevelWORKSHOP = BigDecimal.valueOf(countBO.getPracticeCount()); }else if(countBO.getDepLevel().equals(DepartmentLevelEnum.GROUP.code)){ //班组级 emergencyCountLevelGROUP = BigDecimal.valueOf(countBO.getPracticeCount()); } } //2、分析演练后时间 //当前时间 LocalDateTime nowTime = LocalDateTime.now(); if(isCalMonth == true){ //月度统计,则计算该月最后的时间 LocalDateTime ld = LocalDateTime.of(year,month,1,0,0,0); DateTime dt = DateUtil.endOfMonth(Date.from(ld.atZone(ZoneId.systemDefault()).toInstant())); if(year == nowTime.getYear() && month == nowTime.getMonthValue()){ //查询的是当月 }else { //查询的是往年往月 nowTime = dt.toLocalDateTime(); } } //公司级最后一次演练时间 LocalDateTime lastExecuteTimeCompany = null; //事业部级最后一次演练时间 LocalDateTime lastExecuteTimeBUSINESS = null; //车间级最后一次演练时间 LocalDateTime lastExecuteTimeWORKSHOP = null; //班组级最后一次演练时间 LocalDateTime lastExecuteTimeGROUP = null; for(EmergencyCountBO countBO : emergencyDataBO.getPracticeData()){ LocalDateTime lastExecTime = countBO.getLastPracticeTime(); if(countBO.getDepLevel().equals(DepartmentLevelEnum.COMPANY.code)){ //公司级 if(lastExecuteTimeCompany == null) { lastExecuteTimeCompany = lastExecTime; } else { if(lastExecuteTimeCompany.isBefore(lastExecTime)) lastExecuteTimeCompany = lastExecTime; } }else if(countBO.getDepLevel().equals(DepartmentLevelEnum.BUSINESS.code)){ //事业部级 if(lastExecuteTimeBUSINESS == null) { lastExecuteTimeBUSINESS = lastExecTime; } else { if(lastExecuteTimeBUSINESS.isBefore(lastExecTime)) lastExecuteTimeBUSINESS = lastExecTime; } }else if(countBO.getDepLevel().equals(DepartmentLevelEnum.WORKSHOP.code)){ //车间级 if(lastExecuteTimeWORKSHOP == null) { lastExecuteTimeWORKSHOP = lastExecTime; } else { if(lastExecuteTimeWORKSHOP.isBefore(lastExecTime)) lastExecuteTimeWORKSHOP = lastExecTime; } }else if(countBO.getDepLevel().equals(DepartmentLevelEnum.GROUP.code)){ //班组级 if(lastExecuteTimeGROUP == null) { lastExecuteTimeGROUP = lastExecTime; } else { if(lastExecuteTimeGROUP.isBefore(lastExecTime)) lastExecuteTimeGROUP = lastExecTime; } } } //公司级演练后权值 BigDecimal i7WeightValCompany = BigDecimal.valueOf(0); //事业部级演练后权值 BigDecimal i7WeightValBUSINESS = BigDecimal.valueOf(0); //车间级演练后权值 BigDecimal i7WeightValWORKSHOP = BigDecimal.valueOf(0); //班组级演练后权值 BigDecimal i7WeightValGROUP = BigDecimal.valueOf(0); //计算各级别演习间隔天数对应权值 //公司级 if(lastExecuteTimeCompany != null){ if(lastExecuteTimeCompany.plusDays(21).isBefore(nowTime)){ i7WeightValCompany = SpiWeighValue.EMERGENCY_GN1_L4; }else if(lastExecuteTimeCompany.plusDays(14).isBefore(nowTime)){ i7WeightValCompany = SpiWeighValue.EMERGENCY_GN1_L3; }else if(lastExecuteTimeCompany.plusDays(7).isBefore(nowTime)){ i7WeightValCompany = SpiWeighValue.EMERGENCY_GN1_L2; }else { i7WeightValCompany = SpiWeighValue.EMERGENCY_GN1_L1; } } //事业部级 if(lastExecuteTimeBUSINESS != null){ if(lastExecuteTimeBUSINESS.plusDays(21).isBefore(nowTime)){ i7WeightValBUSINESS = SpiWeighValue.EMERGENCY_GN2_L4; }else if(lastExecuteTimeBUSINESS.plusDays(14).isBefore(nowTime)){ i7WeightValBUSINESS = SpiWeighValue.EMERGENCY_GN2_L3; }else if(lastExecuteTimeBUSINESS.plusDays(7).isBefore(nowTime)){ i7WeightValBUSINESS = SpiWeighValue.EMERGENCY_GN2_L2; }else { i7WeightValBUSINESS = SpiWeighValue.EMERGENCY_GN2_L1; } } //车间级 if(lastExecuteTimeWORKSHOP != null){ if(lastExecuteTimeWORKSHOP.plusDays(21).isBefore(nowTime)){ i7WeightValWORKSHOP = SpiWeighValue.EMERGENCY_GN3_L4; }else if(lastExecuteTimeWORKSHOP.plusDays(14).isBefore(nowTime)){ i7WeightValWORKSHOP = SpiWeighValue.EMERGENCY_GN3_L3; }else if(lastExecuteTimeWORKSHOP.plusDays(7).isBefore(nowTime)){ i7WeightValWORKSHOP = SpiWeighValue.EMERGENCY_GN3_L2; }else { i7WeightValWORKSHOP = SpiWeighValue.EMERGENCY_GN3_L1; } } //班组级 if(lastExecuteTimeGROUP != null){ if(lastExecuteTimeGROUP.plusDays(21).isBefore(nowTime)){ i7WeightValGROUP = SpiWeighValue.EMERGENCY_GN4_L4; }else if(lastExecuteTimeGROUP.plusDays(14).isBefore(nowTime)){ i7WeightValGROUP = SpiWeighValue.EMERGENCY_GN4_L3; }else if(lastExecuteTimeGROUP.plusDays(7).isBefore(nowTime)){ i7WeightValGROUP = SpiWeighValue.EMERGENCY_GN4_L2; }else { i7WeightValGROUP = SpiWeighValue.EMERGENCY_GN4_L1; } } //计算I7值 BigDecimal i7 = emergencyCountLevelCompany.multiply(SpiWeighValue.EMERGENCY_F1).multiply(i7WeightValCompany) .add(emergencyCountLevelBUSINESS.multiply(SpiWeighValue.EMERGENCY_F2).multiply(i7WeightValBUSINESS)) .add(emergencyCountLevelWORKSHOP.multiply(SpiWeighValue.EMERGENCY_F3).multiply(i7WeightValWORKSHOP)) .add(emergencyCountLevelGROUP.multiply(SpiWeighValue.EMERGENCY_F4).multiply(i7WeightValGROUP)); return i7; } /** * 计算I8值 * @param incidentDataBO * @return */ public BigDecimal calI8Val(IncidentDataBO incidentDataBO){ if(incidentDataBO == null) return null; //特大事故计数 BigDecimal lv1Count = BigDecimal.valueOf(0); if(incidentDataBO.getL1AccidentData() != null){ lv1Count = BigDecimal.valueOf(incidentDataBO.getL1AccidentData().getAccidentCount()); } //重大事故计数 BigDecimal lv2Count = BigDecimal.valueOf(0); if(incidentDataBO.getL2AccidentData() != null){ lv2Count = BigDecimal.valueOf(incidentDataBO.getL2AccidentData().getAccidentCount()); } //较大事故计数 BigDecimal lv3Count = BigDecimal.valueOf(0); if(incidentDataBO.getL3AccidentData() != null){ lv3Count = BigDecimal.valueOf(incidentDataBO.getL3AccidentData().getAccidentCount()); } //一般事故计数 BigDecimal lv4Count = BigDecimal.valueOf(0); if(incidentDataBO.getL4AccidentData() != null){ lv4Count = BigDecimal.valueOf(incidentDataBO.getL4AccidentData().getAccidentCount()); } //未遂事故 BigDecimal lv5Count = BigDecimal.valueOf(0); if(incidentDataBO.getL5AccidentData() != null){ lv5Count = BigDecimal.valueOf(incidentDataBO.getL5AccidentData().getAccidentCount()); } //计算I8值 BigDecimal I8 = lv1Count.multiply(SpiWeighValue.INCIDENT_H1).add(lv2Count.multiply(SpiWeighValue.INCIDENT_H2)) .add(lv3Count.multiply(SpiWeighValue.INCIDENT_H3)) .add(lv4Count.multiply(SpiWeighValue.INCIDENT_H4)) .add(lv5Count.multiply(SpiWeighValue.INCIDENT_H5)); return I8; } /** * 计算I9 * @param incidentDataBO * @return */ public BigDecimal calI9Val(IncidentDataBO incidentDataBO){ if(incidentDataBO == null) return null; //特大事故计数 BigDecimal lv1Count = BigDecimal.valueOf(0); //重大事故计数 BigDecimal lv2Count = BigDecimal.valueOf(0); //较大事故计数 BigDecimal lv3Count = BigDecimal.valueOf(0); //一般事故计数 BigDecimal lv4Count = BigDecimal.valueOf(0); //未遂事故计数 BigDecimal lv5Count = BigDecimal.valueOf(0); //特别重大事故导致的死亡计数 BigDecimal lv1DeathCount = BigDecimal.valueOf(0); //特别重大事故导致的轻伤计数 BigDecimal lv1LightInjuryCount = BigDecimal.valueOf(0); //特别重大事故导致的重伤计数 BigDecimal lv1HeavyInjuryCount = BigDecimal.valueOf(0); //特别重大事故导致的经济损失 BigDecimal lv1LossMoney = BigDecimal.valueOf(0); //重大事故导致的死亡计数 BigDecimal lv2DeathCount = BigDecimal.valueOf(0); //重大事故导致的轻伤计数 BigDecimal lv2LightInjuryCount = BigDecimal.valueOf(0); //重大事故导致的重伤计数 BigDecimal lv2HeavyInjuryCount = BigDecimal.valueOf(0); //重大事故导致的经济损失 BigDecimal lv2LossMoney = BigDecimal.valueOf(0); //较大事故导致的死亡计数 BigDecimal lv3DeathCount = BigDecimal.valueOf(0); //较大事故导致的轻伤计数 BigDecimal lv3LightInjuryCount = BigDecimal.valueOf(0); //较大事故导致的重伤计数 BigDecimal lv3HeavyInjuryCount = BigDecimal.valueOf(0); //较大事故导致的经济损失 BigDecimal lv3LossMoney = BigDecimal.valueOf(0); //一般事故导致的死亡计数 BigDecimal lv4DeathCount = BigDecimal.valueOf(0); //一般事故导致的轻伤计数 BigDecimal lv4LightInjuryCount = BigDecimal.valueOf(0); //一般事故导致的重伤计数 BigDecimal lv4HeavyInjuryCount = BigDecimal.valueOf(0); //一般事故导致的经济损失 BigDecimal lv4LossMoney = BigDecimal.valueOf(0); //未遂事故导致的死亡计数 BigDecimal lv5DeathCount = BigDecimal.valueOf(0); //未遂事故导致的轻伤计数 BigDecimal lv5LightInjuryCount = BigDecimal.valueOf(0); //未遂事故导致的重伤计数 BigDecimal lv5HeavyInjuryCount = BigDecimal.valueOf(0); //未遂事故导致的经济损失 BigDecimal lv5LossMoney = BigDecimal.valueOf(0); if(incidentDataBO.getL1AccidentData() != null){ lv1Count = BigDecimal.valueOf(incidentDataBO.getL1AccidentData().getAccidentCount()); lv1DeathCount = BigDecimal.valueOf(incidentDataBO.getL1AccidentData().getCauseDeathCount()); lv1HeavyInjuryCount = BigDecimal.valueOf(incidentDataBO.getL1AccidentData().getCauseHeavyInjureCount()); lv1LightInjuryCount = BigDecimal.valueOf(incidentDataBO.getL1AccidentData().getCauseLightInjureCount()); lv1LossMoney = incidentDataBO.getL1AccidentData().getLoss(); } if(incidentDataBO.getL2AccidentData() != null){ lv2Count = BigDecimal.valueOf(incidentDataBO.getL2AccidentData().getAccidentCount()); lv2DeathCount = BigDecimal.valueOf(incidentDataBO.getL2AccidentData().getCauseDeathCount()); lv2HeavyInjuryCount = BigDecimal.valueOf(incidentDataBO.getL2AccidentData().getCauseHeavyInjureCount()); lv2LightInjuryCount = BigDecimal.valueOf(incidentDataBO.getL2AccidentData().getCauseLightInjureCount()); lv2LossMoney = incidentDataBO.getL2AccidentData().getLoss(); } if(incidentDataBO.getL3AccidentData() != null){ lv3Count = BigDecimal.valueOf(incidentDataBO.getL3AccidentData().getAccidentCount()); lv3DeathCount = BigDecimal.valueOf(incidentDataBO.getL3AccidentData().getCauseDeathCount()); lv3HeavyInjuryCount = BigDecimal.valueOf(incidentDataBO.getL3AccidentData().getCauseHeavyInjureCount()); lv3LightInjuryCount = BigDecimal.valueOf(incidentDataBO.getL3AccidentData().getCauseLightInjureCount()); lv3LossMoney = incidentDataBO.getL3AccidentData().getLoss(); } if(incidentDataBO.getL4AccidentData() != null){ lv4Count = BigDecimal.valueOf(incidentDataBO.getL4AccidentData().getAccidentCount()); lv4DeathCount = BigDecimal.valueOf(incidentDataBO.getL4AccidentData().getCauseDeathCount()); lv4HeavyInjuryCount = BigDecimal.valueOf(incidentDataBO.getL4AccidentData().getCauseHeavyInjureCount()); lv4LightInjuryCount = BigDecimal.valueOf(incidentDataBO.getL4AccidentData().getCauseLightInjureCount()); lv4LossMoney = incidentDataBO.getL4AccidentData().getLoss(); } if(incidentDataBO.getL5AccidentData() != null){ lv5Count = BigDecimal.valueOf(incidentDataBO.getL5AccidentData().getAccidentCount()); lv5DeathCount = BigDecimal.valueOf(incidentDataBO.getL5AccidentData().getCauseDeathCount()); lv5HeavyInjuryCount = BigDecimal.valueOf(incidentDataBO.getL5AccidentData().getCauseHeavyInjureCount()); lv5LightInjuryCount = BigDecimal.valueOf(incidentDataBO.getL5AccidentData().getCauseLightInjureCount()); lv5LossMoney = incidentDataBO.getL5AccidentData().getLoss(); } //计算Jn值 //特别重大事故 BigDecimal J1 = lv1DeathCount.multiply(SpiWeighValue.INCIDENT_JX1) .add(lv1HeavyInjuryCount.multiply(SpiWeighValue.INCIDENT_JX2)) .add(lv1LightInjuryCount.multiply(SpiWeighValue.INCIDENT_JX3)) .add(lv1LossMoney.divide(BigDecimal.valueOf(100000),BigDecimal.ROUND_CEILING).multiply(SpiWeighValue.INCIDENT_JX4)); //重大事故 BigDecimal J2 = lv2DeathCount.multiply(SpiWeighValue.INCIDENT_JX1) .add(lv2HeavyInjuryCount.multiply(SpiWeighValue.INCIDENT_JX2)) .add(lv2LightInjuryCount.multiply(SpiWeighValue.INCIDENT_JX3)) .add(lv2LossMoney.divide(BigDecimal.valueOf(100000),BigDecimal.ROUND_CEILING).multiply(SpiWeighValue.INCIDENT_JX4)); //较大事故 BigDecimal J3 = lv3DeathCount.multiply(SpiWeighValue.INCIDENT_JX1) .add(lv3HeavyInjuryCount.multiply(SpiWeighValue.INCIDENT_JX2)) .add(lv3LightInjuryCount.multiply(SpiWeighValue.INCIDENT_JX3)) .add(lv3LossMoney.divide(BigDecimal.valueOf(100000),BigDecimal.ROUND_CEILING).multiply(SpiWeighValue.INCIDENT_JX4)); //一般事故 BigDecimal J4 = lv4DeathCount.multiply(SpiWeighValue.INCIDENT_JX1) .add(lv4HeavyInjuryCount.multiply(SpiWeighValue.INCIDENT_JX2)) .add(lv4LightInjuryCount.multiply(SpiWeighValue.INCIDENT_JX3)) .add(lv4LossMoney.divide(BigDecimal.valueOf(100000),BigDecimal.ROUND_CEILING).multiply(SpiWeighValue.INCIDENT_JX4)); //计算I9值 BigDecimal I9 = lv1Count.multiply(J1).add(lv2Count.multiply(J2)).add(lv3Count.multiply(J3)).add(lv4Count.multiply(J4)); return I9; } }