package com.ruoyi.project.tr.report.service; import com.alibaba.fastjson.JSON; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.project.system.company.domain.Company; import com.ruoyi.project.system.company.service.ICompanyService; import com.ruoyi.project.tr.report.domain.Danger; import com.ruoyi.project.tr.report.domain.DangerByTime; import com.ruoyi.project.tr.report.domain.Report; import com.ruoyi.project.tr.report.domain.RiskDomain; import com.ruoyi.project.tr.report.mapper.ReportMapper; import io.swagger.models.auth.In; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.ui.ModelMap; import java.text.DecimalFormat; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; @Service public class ReportService { @Autowired private ReportMapper reportMapper; @Autowired private ICompanyService companyService; //获取公司四色图数据 public List getFourColorPic(long companyId) { Company company = companyService.selectCompanyById(companyId); String companyFourColorMapUrl = company.getCompanyFourColorMapUrl(); Map colorPicMap = JSON.parseObject(companyFourColorMapUrl); Collection values = colorPicMap.values(); ArrayList colorPic = new ArrayList<>(); values.forEach(v -> { v = v.replaceAll("^http:\\/\\/[^/]+", ""); colorPic.add(v); }); return colorPic; } //查询公示上半部分信息 public ModelMap selectPublicityHeadData(long companyId, ModelMap map) { //获取四色图 List fourColorPic = getFourColorPic(companyId); //四色图 map.put("fourColorMapUrl", fourColorPic); //获取风险数据 List riskDomains = reportMapper.selectPublicityRisk(companyId); //风险总量 map.put("allRiskCount", riskDomains.size()); AtomicReference lowRiskCount = new AtomicReference<>(0); AtomicReference normalRiskCount = new AtomicReference<>(0); AtomicReference middleRiskCount = new AtomicReference<>(0); AtomicReference seriesRiskCount = new AtomicReference<>(0); ArrayList seriesRisks = new ArrayList<>(); riskDomains.forEach(riskDomain -> { if (StringUtils.isNotEmpty(riskDomain.getRiskColor())) { switch (riskDomain.getRiskColor()) { case "蓝色": lowRiskCount.getAndSet(lowRiskCount.get() + 1); break; case "黄色": normalRiskCount.getAndSet(normalRiskCount.get() + 1); break; case "橙色": middleRiskCount.getAndSet(middleRiskCount.get() + 1); break; case "红色": seriesRiskCount.getAndSet(seriesRiskCount.get() + 1); seriesRisks.add(riskDomain); break; } } }); //低风险数量 map.put("lowRiskCount", lowRiskCount); //一般风险数量 map.put("normalRiskCount", normalRiskCount); //较大风险数量 map.put("middleRiskCount", middleRiskCount); //重大风险数量 map.put("seriesRiskCount", seriesRiskCount); //重大风险公示信息 map.put("seriesRisks", seriesRisks); //获取隐患数据 List dangers = reportMapper.selectPublicityDanger(companyId); ArrayList seriesDangers = new ArrayList<>(); AtomicReference unRectifyDangerCount = new AtomicReference<>(0); dangers.forEach(danger -> { if (danger != null) { if (StringUtils.isNotEmpty(danger.getDangerLevel()) && "1".equals(danger.getDangerLevel())) { seriesDangers.add(danger); } if (StringUtils.isNotEmpty(danger.getRectifyStatus()) && "0".equals(danger.getRectifyStatus())) { unRectifyDangerCount.getAndSet(unRectifyDangerCount.get() + 1); } } }); //重大隐患公示信息 map.put("seriesDangers", seriesDangers); //未整改隐患数量 map.put("unRectifyDangerCount", unRectifyDangerCount); Map monthlyDangerMap = selectMonthlyDangers(companyId); ArrayList normalDanger = (ArrayList) monthlyDangerMap.get("normalDanger"); long thisMonthNormalDangerCount = (long) normalDanger.get(normalDanger.size() - 1); ArrayList highDanger = (ArrayList) monthlyDangerMap.get("highDanger"); long thisMonthHighDangerCount = (long) highDanger.get(highDanger.size() - 1); //当月一般隐患数量 map.put("thisMonthNormalDangerCount", thisMonthNormalDangerCount); //当月重大隐患数量 map.put("thisMonthHighDangerCount", thisMonthHighDangerCount); //月度隐患总量 map.put("thisMonthDangerCount", thisMonthHighDangerCount + thisMonthNormalDangerCount); Map yearlyDangersMap = selectYearlyDangers(companyId); ArrayList normalDanger1 = (ArrayList) yearlyDangersMap.get("normalDanger"); ArrayList highDanger1 = (ArrayList) yearlyDangersMap.get("highDanger"); long yearlyDangerCount = (long) normalDanger1.get(normalDanger1.size() - 1) + (long) highDanger1.get(highDanger1.size() - 1); //年度隐患总量 map.put("yearlyDangerCount", yearlyDangerCount); Long allDangers = (Long) yearlyDangersMap.get("allDangers"); double tempPercent = 1.00; if (allDangers != 0) { tempPercent = (double) (allDangers - unRectifyDangerCount.get()) / allDangers; } String dangerRectifyPercent = new DecimalFormat("0.00%").format(tempPercent); //隐患整改率 map.put("dangerRectifyPercent", dangerRectifyPercent); return map; } //查询公示所需报表信息 public Map selectPublicityReportData(long companyId) { HashMap map = new HashMap<>(); //获取隐患和风险报表数据 Map regionRiskMap = selectRiskByRegion(companyId); //区域风险柱状图数据 map.put("regionRiskMap", regionRiskMap); Map deptRiskMap = selectRiskByDept(companyId); //部门风险柱状图数据 map.put("deptRiskMap", deptRiskMap); Map deptDangerMap = selectDeptDangers(companyId); //部门隐患柱状图数据 map.put("deptDangerMap", deptDangerMap); Map regionDangerMap = selectDangerByRegion(companyId); //区域隐患柱状图数据 map.put("regionDangerMap", regionDangerMap); Map typeDangerMap = selectTroubleTypeDangers(companyId); //类别隐患柱状图数据 map.put("typeDangerMap", typeDangerMap); Map dangerTrendMap = selectMonthlyDangers(companyId); //隐患趋势折线图数据 map.put("dangerTrendMap", dangerTrendMap); List deviceRiskPointList = reportMapper.selectRiskPoint(1, companyId); Map deviceRiskPointMap = handlePublicityRiskPoint(deviceRiskPointList); //设备设施风险单元柱状图数据 map.put("deviceRiskPointMap", deviceRiskPointMap); List workRiskPointList = reportMapper.selectRiskPoint(2, companyId); Map workRiskPointMap = handlePublicityRiskPoint(workRiskPointList); //作业活动风险单元柱状图数据 map.put("workRiskPointMap", workRiskPointMap); List craftRiskPointList = reportMapper.selectRiskPoint(3, companyId); Map craftRiskPointMap = handlePublicityRiskPoint(craftRiskPointList); //工艺节点风险单元柱状图数据 map.put("craftRiskPointMap", craftRiskPointMap); return map; } private Map handlePublicityRiskPoint(List list) { ArrayList reportName = new ArrayList<>(); ArrayList reportCount = new ArrayList<>(); list.forEach(drp -> { reportName.add(drp.getName()); reportCount.add(drp.getCount()); }); HashMap listHashMap = new HashMap<>(); listHashMap.put("riskPointName", reportName); listHashMap.put("riskPointCount", reportCount); return listHashMap; } public Map selectReportCount(long companyId, long userId) { int identityCount = reportMapper.selectRiskIdentityCount(companyId, userId); int evaluationCount = reportMapper.selectRiskEvaluationCount(userId); int reviewCount = reportMapper.selectRiskReviewCount(userId); int troubleCheckCount = reportMapper.selectTroubleCheckCount(userId); int troubleReportCount = reportMapper.selectTroubleReportCount(userId); int troubleExamineCount = reportMapper.selectTroubleExamineCount(userId); int troubleRectifyCount = reportMapper.selectTroubleRectifyCount(userId); int troubleAcceptCount = reportMapper.selectTroubleAcceptCount(userId); HashMap countReport = new HashMap<>(); countReport.put("identityCount", identityCount); countReport.put("evaluationCount", evaluationCount); countReport.put("reviewCount", reviewCount); countReport.put("troubleCheckCount", troubleCheckCount); countReport.put("troubleReportCount", troubleReportCount); countReport.put("troubleExamineCount", troubleExamineCount); countReport.put("troubleRectifyCount", troubleRectifyCount); countReport.put("troubleAcceptCount", troubleAcceptCount); return countReport; } //查询隐患区域数据 public Map selectDangerByRegion(long companyId) { List reports = new ArrayList<>(); if(147l==companyId){ reports = reportMapper.selectDangerByRegionByCompanyId147(companyId); }else { reports = reportMapper.selectDangerByRegion(companyId); } return handleResult(reports); } //查询风险单元数据 public Map selectRiskPoint(int riskType, long companyId) { List risks = reportMapper.selectRiskPoint(riskType, companyId); ArrayList reportNames = new ArrayList<>(); ArrayList data = new ArrayList<>(); risks.forEach(risk -> { if (risk != null) { reportNames.add(risk.getName()); HashMap temp = new HashMap<>(); temp.put("name", risk.getName()); temp.put("value", risk.getCount()); data.add(temp); } }); HashMap reportMap = new HashMap<>(); reportMap.put("reportNames", reportNames); reportMap.put("data", data); return reportMap; } //查询风险趋势数据 public Map selectRiskTrend(long companyId) { List risks = reportMapper.selectRiskTrend(companyId); String nowYear = DateUtils.parseDateToStr("YYYY", DateUtils.getNowDate()); Integer startYear = Integer.parseInt(nowYear); if (risks != null && risks.size() != 0 && risks.get(0) != null) { startYear = Integer.parseInt(risks.get(0).getName()); } ArrayList reportNames = new ArrayList<>(); ArrayList lowRisk = new ArrayList<>(); ArrayList normalRisk = new ArrayList<>(); ArrayList middleRisk = new ArrayList<>(); ArrayList seriesRisk = new ArrayList<>(); for (int i = 0; i <= Integer.parseInt(nowYear) - startYear; i++) { reportNames.add(startYear + i); lowRisk.add(0); normalRisk.add(0); middleRisk.add(0); seriesRisk.add(0); } risks.forEach(risk -> { if (risk != null) { int i = reportNames.indexOf(Integer.parseInt(risk.getName())); if (StringUtils.isNotEmpty(risk.getRiskColor())) { switch (risk.getRiskColor()) { case "蓝色": lowRisk.set(i, risk.getCount()); break; case "黄色": normalRisk.set(i, risk.getCount()); break; case "橙色": middleRisk.set(i, risk.getCount()); break; case "红色": seriesRisk.set(i, risk.getCount()); break; } } } }); HashMap reportMap = new HashMap<>(); reportMap.put("reportNames", reportNames); reportMap.put("lowRisk", lowRisk); reportMap.put("normalRisk", normalRisk); reportMap.put("middleRisk", middleRisk); reportMap.put("seriesRisk", seriesRisk); return reportMap; } //查询区域风险明细 public Map selectRiskByRegion(long companyId) { List risks = reportMapper.selectRiskByRegion(companyId); //查询公司所属二级区域 List region = reportMapper.selectRegion(companyId); ArrayList reportNames = new ArrayList<>(); ArrayList lowRisk = new ArrayList<>(); ArrayList normalRisk = new ArrayList<>(); ArrayList middleRisk = new ArrayList<>(); ArrayList seriesRisk = new ArrayList<>(); for (int i = 0; i < region.size(); i++) { reportNames.add(region.get(i).getName()); Integer lowRiskTemp = new Integer(0); Integer normalRiskTemp = new Integer(0); Integer middleRiskTemp = new Integer(0); Integer seriesRiskTemp = new Integer(0); for (RiskDomain risk : risks) { if (risk.getAncestors().contains(String.valueOf(region.get(i).getId())) || risk.getId() == region.get(i).getId()){ switch (risk.getRiskColor()) { case "蓝色": lowRiskTemp+=risk.getCount(); break; case "黄色": normalRiskTemp+=risk.getCount(); break; case "橙色": middleRiskTemp+=risk.getCount(); break; case "红色": seriesRiskTemp+=risk.getCount(); break; } } } lowRisk.add(lowRiskTemp); normalRisk.add(normalRiskTemp); middleRisk.add(middleRiskTemp); seriesRisk.add(seriesRiskTemp); } HashMap reportMap = new HashMap<>(); reportMap.put("reportNames", reportNames); reportMap.put("lowRisk", lowRisk); reportMap.put("normalRisk", normalRisk); reportMap.put("middleRisk", middleRisk); reportMap.put("seriesRisk", seriesRisk); return reportMap; } //查询部门风险明细 public Map selectRiskByDept(long companyId) { List risks = reportMapper.selectRiskByDept(companyId); List dept = reportMapper.selectDept(companyId); return handleRiskData(risks, dept); } //处理风险查询数据 private Map handleRiskData(List risks, List temp) { ArrayList reportId = new ArrayList<>(); ArrayList reportNames = new ArrayList<>(); ArrayList lowRisk = new ArrayList<>(); ArrayList normalRisk = new ArrayList<>(); ArrayList middleRisk = new ArrayList<>(); ArrayList seriesRisk = new ArrayList<>(); for (int i = 0; i < temp.size(); i++) { reportId.add(temp.get(i).getId()); reportNames.add(temp.get(i).getName()); lowRisk.add(0); normalRisk.add(0); middleRisk.add(0); seriesRisk.add(0); } risks.forEach(risk -> { if (risk != null) { int i = reportId.indexOf(risk.getId()); if (StringUtils.isNotEmpty(risk.getRiskColor())) { switch (risk.getRiskColor()) { case "蓝色": lowRisk.set(i, risk.getCount()); break; case "黄色": normalRisk.set(i, risk.getCount()); break; case "橙色": middleRisk.set(i, risk.getCount()); break; case "红色": seriesRisk.set(i, risk.getCount()); break; } } } }); HashMap reportMap = new HashMap<>(); reportMap.put("reportNames", reportNames); reportMap.put("lowRisk", lowRisk); reportMap.put("normalRisk", normalRisk); reportMap.put("middleRisk", middleRisk); reportMap.put("seriesRisk", seriesRisk); return reportMap; } //查询部门隐患明细 public Map selectDeptDangers(long companyId) { List reports = reportMapper.selectDeptDangers(companyId); return handleResult(reports); } //查询隐患类别隐患明细 public Map selectTroubleTypeDangers(long companyId) { List reports = reportMapper.selectTroubleTypeDangers(companyId); return handleResult(reports); } //查询按月统计隐患数据 public Map selectMonthlyDangers(long companyId) { Date date = DateUtils.addMonths(DateUtils.getNowDate(), -12); List dangerByTimes = reportMapper.selectDangersByMonths(date, companyId); return handleMonthlyDangers(date, dangerByTimes); } //查询按年统计隐患数据 public Map selectYearlyDangers(long companyId) { List dangerByTimes = reportMapper.selectDangersByYear(companyId); return handleYearlyDangers(dangerByTimes); } //处理按年统计报表数据 private Map handleYearlyDangers(List list) { String nowYear = DateUtils.parseDateToStr("YYYY", DateUtils.getNowDate()); Long allDangers = 0l; String startYear = nowYear; if (list.size() != 0) { startYear = list.get(0).getDateTime(); for (int i = 0; i < list.size(); i++) { allDangers += list.get(i).getCount(); } } ArrayList reportNames = new ArrayList<>(); ArrayList normalDanger = new ArrayList<>(); ArrayList highDanger = new ArrayList<>(); for (int i = 0; i <= Integer.parseInt(nowYear) - Integer.parseInt(startYear); i++) { Integer temp = Integer.parseInt(startYear) + i; reportNames.add(temp); normalDanger.add(0l); highDanger.add(0l); int finalI = i; list.forEach(dt -> { if (dt != null) { if (temp.toString().equals(dt.getDateTime()) && dt.getDangerLevel() != null) { switch (dt.getDangerLevel()) { case "0": normalDanger.set(finalI, dt.getCount()); break; case "1": highDanger.set(finalI, dt.getCount()); break; } } } }); } HashMap reportMap = new HashMap<>(); reportMap.put("reportNames", reportNames); reportMap.put("normalDanger", normalDanger); reportMap.put("highDanger", highDanger); reportMap.put("allDangers", allDangers); return reportMap; } //处理按月统计报表数据 private Map handleMonthlyDangers(Date date, List list) { ArrayList reportNames = new ArrayList<>(); ArrayList normalDanger = new ArrayList<>(); ArrayList highDanger = new ArrayList<>(); for (int i = 0; i < 12; i++) { date = DateUtils.addMonths(date, 1); String str = DateUtils.parseDateToStr("YYYY-MM", date); reportNames.add(str); normalDanger.add(0l); highDanger.add(0l); int finalI = i; list.forEach(dt -> { if (dt != null) { if (str.equals(dt.getDateTime()) && dt.getDangerLevel() != null) { switch (dt.getDangerLevel()) { case "0": normalDanger.set(finalI, dt.getCount()); break; case "1": highDanger.set(finalI, dt.getCount()); break; } } } }); } HashMap reportMap = new HashMap<>(); reportMap.put("reportNames", reportNames); reportMap.put("normalDanger", normalDanger); reportMap.put("highDanger", highDanger); return reportMap; } //处理查询结果为map返回 private Map handleResult(List reports) { ArrayList reportNames = new ArrayList<>(); ArrayList normalDanger = new ArrayList<>(); ArrayList highDanger = new ArrayList<>(); reports.forEach(report -> { if (report != null) { reportNames.add(report.getReportName()); AtomicInteger normalCount = new AtomicInteger(); AtomicInteger highCount = new AtomicInteger(); if (report.getDangers() != null) { report.getDangers().forEach(danger -> { if (StringUtils.isNotEmpty(danger.getDangerLevel()) && "1".equals(danger.getWhetherDanger()) && (StringUtils.isNotEmpty(danger.getRectifyUserName()))) { switch (danger.getDangerLevel()) { case "0": normalCount.addAndGet(1); break; case "1": highCount.getAndIncrement(); break; } } }); } normalDanger.add(normalCount.toString()); highDanger.add(highCount.toString()); } }); HashMap reportMap = new HashMap<>(); reportMap.put("reportNames", reportNames); reportMap.put("normalDanger", normalDanger); reportMap.put("highDanger", highDanger); return reportMap; } }