package com.zc.business.controller; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.utils.poi.ExcelUtil; import com.zc.business.domain.DcDispatch; import com.zc.business.domain.DcWarning; import com.zc.business.domain.export.*; import com.zc.business.service.IDCPerceivedEventsWarningService; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; /** * @author 王思祥 * @ClassName DCPerceivedEventsWarningController */ @RestController @RequestMapping("/perceivedEvents/warning") public class DCPerceivedEventsWarningController extends BaseController { @Autowired private IDCPerceivedEventsWarningService perceivedEventsWarningService; //查询预警表与历史表所有感知事件的数量 @PostMapping("/warningTotal") public AjaxResult getPerceivedEventsWarning(){ return AjaxResult.success(perceivedEventsWarningService.perceivedEventsWarningNum()); } //感知事件类型 @PostMapping("/evenType") public AjaxResult getEvenTypeList(){ return AjaxResult.success(perceivedEventsWarningService.selectEventTypeList()); } //感知事件详情 @PostMapping("/getWarningById") public AjaxResult getWarningById(@RequestBody DcWarning dcWarning){ String id = dcWarning.getId(); if (id==null){ return AjaxResult.error("参数错误"); } return AjaxResult.success(perceivedEventsWarningService.selectWarningById(id)); } //告警事件列表 @PostMapping("/perceivedEventsList") public TableDataInfo getPerceivedEventsList(@RequestBody DcWarning dcWarning){ startPage(); List list = perceivedEventsWarningService.selectPerceivedEventsList(dcWarning); return getDataTable(list); } //非机预警列表 @PostMapping("/nonAutomaticWarningList") public TableDataInfo nonAutomaticWarningList(@RequestBody DcWarning dcWarning){ startPage(); List list = perceivedEventsWarningService.selectNonAutomaticWarningList(dcWarning); return getDataTable(list); } //首页感知事件列表 @PostMapping("/warningList") public AjaxResult getWarningList(@RequestBody DcWarning dcWarning){ return AjaxResult.success(perceivedEventsWarningService.selectWarningList(dcWarning)); } //首页感知事件列表分页 @PostMapping("/warningListPage") public TableDataInfo getWarningListPage(@RequestBody DcWarning dcWarning){ startPage(); return getDataTable(perceivedEventsWarningService.selectWarningList(dcWarning)); } //查询感知数量按照路段进行区分 @PostMapping("/sectionPerceivedNumber") public AjaxResult getSectionPerceivedNumber(){ return AjaxResult.success(perceivedEventsWarningService.selectSectionPerceivedNumber()); } //查询当前日,日累计感知事件,按照小时进行分组 @PostMapping("/dailyCumulative") public AjaxResult getDailyCumulative(){ return AjaxResult.success(perceivedEventsWarningService.selectDailyCumulative()); } //查询当前月,月累计感知事件,按照小时段进行分组 @PostMapping("/dailyCumulativeMonth") public AjaxResult getDailyCumulativeMonth(){ return AjaxResult.success(perceivedEventsWarningService.selectDailyCumulativeMonth()); } //按事件源统计感知事件统计信息 @PostMapping("/warningSourceGroup") public AjaxResult getWarningSourceGroup(){ HashMap map = new HashMap<>(); List> mapList = perceivedEventsWarningService.selectWarningSourceGroup(); String total = perceivedEventsWarningService.selectWarningSourceGroupCount(); map.put("warningSourceList", mapList); map.put("total", total); return AjaxResult.success(map); } //当日感知事件的处置情况占比 @PostMapping("/warningStateDay") public AjaxResult getWarningStateDay(){ return AjaxResult.success(perceivedEventsWarningService.selectWarningStateDay()); } //感知事件类型占比 @PostMapping("/warningTypeDay") public AjaxResult getWarningTypeDay(){ return AjaxResult.success(perceivedEventsWarningService.selectWarningTypeDay()); } //某一路段某一时间段的感知事件趋势 @PostMapping("/warningTrend") public AjaxResult getWarningTrend(@RequestBody DcWarning dcWarning){ String type = dcWarning.getType();//类型 String sectionId = dcWarning.getSectionId();//路段辖区id String direction = dcWarning.getDirection();//方向 if (StringUtils.isBlank(type)||StringUtils.isBlank(sectionId)||StringUtils.isBlank(direction)){ return AjaxResult.error("参数数据异常"); } if (!"day".equals(type) && !"month".equals(type) && !"year".equals(type) && !"quarter".equals(type)) { return AjaxResult.error("参数错误"); } if (type.equals("quarter")&&dcWarning.getQuarter()==null){ return AjaxResult.error("参数错误"); } if (!"quarter".equals(type)&&dcWarning.getCreateTime()==null){ return AjaxResult.error("参数错误"); } if (dcWarning.getCreateTime()!=null){ dcWarning.setWarningTime(dcWarning.getCreateTime()); } return AjaxResult.success(perceivedEventsWarningService.selectWarningTrend(dcWarning)); } //某一路段某一时间段的感知事件类型占比 @PostMapping("/warningSectionType") public AjaxResult getWarningSectionType(@RequestBody DcWarning dcWarning){ HashMap map = new HashMap<>(); String type = dcWarning.getType();//类型 String sectionId = dcWarning.getSectionId();//路段辖区id String direction = dcWarning.getDirection();//方向 if (StringUtils.isBlank(type)||StringUtils.isBlank(sectionId)||StringUtils.isBlank(direction)){ return AjaxResult.error("参数数据异常"); } if (!"day".equals(type) && !"month".equals(type) && !"year".equals(type) && !"quarter".equals(type)) { return AjaxResult.error("参数错误"); } if (type.equals("quarter")&&dcWarning.getQuarter()==null){ return AjaxResult.error("参数错误"); } if (!"quarter".equals(type)&&dcWarning.getCreateTime()==null){ return AjaxResult.error("参数错误"); } if (dcWarning.getCreateTime()!=null){ dcWarning.setWarningTime(dcWarning.getCreateTime()); } if (type.equals("quarter")) { String total = perceivedEventsWarningService.selectWarningSectionTypeCountQuarter(dcWarning); map.put("total",total); } else { String total = perceivedEventsWarningService.selectWarningSectionTypeCount(dcWarning); map.put("total",total); } List> mapList = perceivedEventsWarningService.selectWarningSectionType(dcWarning); map.put("warningTypeList",mapList); return AjaxResult.success(map); } //查询某个路段下的全部桩号 @PostMapping("/sectionMarkNumber") public AjaxResult getSectionMark(@RequestBody DcWarning dcWarning){ String sectionId = dcWarning.getSectionId(); if (StringUtils.isBlank(sectionId)){ return AjaxResult.error("参数异常"); } String direction = dcWarning.getDirection(); if (StringUtils.isBlank(direction)){ return AjaxResult.error("参数异常"); } if (dcWarning.getCreateTime()!=null){ dcWarning.setWarningTime(dcWarning.getCreateTime()); } String type = dcWarning.getType(); if (!"day".equals(type) && !"month".equals(type) && !"year".equals(type) && !"quarter".equals(type)) { return AjaxResult.error("参数错误"); } if (!"quarter".equals(type)&&dcWarning.getCreateTime()==null){ return AjaxResult.error("参数错误"); } if (type.equals("quarter")&&dcWarning.getQuarter()==null){ return AjaxResult.error("参数错误"); } return AjaxResult.success(perceivedEventsWarningService.selectSectionMarkOptimize(dcWarning)); } //查询某个路段下的全部桩号 // @PostMapping("/sectionMarkNumberOptimize") // public AjaxResult getSectionMarkOptimize(@RequestBody DcWarning dcWarning){ // String sectionId = dcWarning.getSectionId(); // if (StringUtils.isBlank(sectionId)){ // return AjaxResult.error("参数异常"); // } // String direction = dcWarning.getDirection(); // if (StringUtils.isBlank(direction)){ // return AjaxResult.error("参数异常"); // } // return AjaxResult.success(perceivedEventsWarningService.selectSectionMarkOptimize(dcWarning)); // } //预警事件,事件列表 查询状态为上报的感知事件 @PostMapping("/warningEscalation") public TableDataInfo getWarningEscalation(@RequestBody DcWarning dcWarning){ startPage(); List> list = perceivedEventsWarningService.selectWarningEscalation(dcWarning); return getDataTable(list); } //修改感知事件信息 @PostMapping("/updateWarning") public AjaxResult updateWarning(@RequestBody DcWarning dcWarning){ return toAjax(perceivedEventsWarningService.updateWarning(dcWarning)); } //查询非机预警类型,按照时间与类型查询(传入时间类型type与时间warningTime) @PostMapping("/nonAutomaticWarningType") public AjaxResult nonAutomaticWarningType(@RequestBody DcWarning dcWarning){ if (StringUtils.isBlank(dcWarning.getType())||dcWarning.getWarningTime()==null){ return AjaxResult.error("参数错误"); } return AjaxResult.success(perceivedEventsWarningService.selectTypeNonAutomaticWarning(dcWarning)); } //查询非机预警,按照时间查询(传入时间类型type与时间warningTime) @PostMapping("/nonAutomaticWarningTimeType") public AjaxResult nonAutomaticWarningTimeType(@RequestBody DcWarning dcWarning){ if (StringUtils.isBlank(dcWarning.getType())||dcWarning.getWarningTime()==null){ return AjaxResult.error("参数错误"); } return AjaxResult.success(perceivedEventsWarningService.selectNonAutomaticWarningTimeType(dcWarning)); } //查询非机预警,按照时间查询收费站分组(传入时间类型type与时间warningTime) @PostMapping("/nonAutomaticWarningFacility") public AjaxResult nonAutomaticWarningFacility(@RequestBody DcWarning dcWarning){ if (StringUtils.isBlank(dcWarning.getType())||dcWarning.getWarningTime()==null){ return AjaxResult.error("参数错误"); } return AjaxResult.success(perceivedEventsWarningService.selectNonAutomaticWarningFacility(dcWarning)); } //新-感知事件多发时段 @PostMapping("/manyTimesInterval") public AjaxResult manyTimesInterval(@RequestBody DcWarning dcWarning){ if (dcWarning==null||StringUtils.isBlank(dcWarning.getType())||dcWarning.getCurrently()==null||dcWarning.getLastYear()==null ||StringUtils.isBlank(dcWarning.getStartStakeMark())||StringUtils.isBlank(dcWarning.getEndStakeMark()) ||StringUtils.isBlank(dcWarning.getDirection())){ return AjaxResult.error("参数错误"); } return AjaxResult.success(perceivedEventsWarningService.selectManyTimesInterval(dcWarning)); } /** * @Description 导出感知事件多发时段 * * @author liuwenge * @date 2024/6/25 10:34 * @param response * @param dcWarning * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation(value = "导出感知事件多发时段",tags = {"ECharts导出"}) @GetMapping("/exportManyTimesInterval") public void exportManyTimesInterval(HttpServletResponse response,DcWarning dcWarning){ if (dcWarning==null||StringUtils.isBlank(dcWarning.getType())||dcWarning.getCurrently()==null||dcWarning.getLastYear()==null ||StringUtils.isBlank(dcWarning.getStartStakeMark())||StringUtils.isBlank(dcWarning.getEndStakeMark()) ||StringUtils.isBlank(dcWarning.getDirection())){ return ; } HashMap map = perceivedEventsWarningService.selectManyTimesInterval(dcWarning); List list = new ArrayList<>(); if (map != null){ List> currentlyMap = (List>) map.get("currentlyMap"); List> lastYearMap = (List>) map.get("lastYearMap"); for (int i = 0; i < currentlyMap.size(); i++) { ManyTimesInterval manyTimesInterval = new ManyTimesInterval(); int time = Integer.parseInt(currentlyMap.get(i).get("time").toString()); manyTimesInterval.setTime(time + "点至" + (time +1) + "点"); manyTimesInterval.setCurrentData(currentlyMap.get(i).get("number").toString()); manyTimesInterval.setContemporaneousData(lastYearMap.get(i).get("number").toString()); list.add(manyTimesInterval); } } ExcelUtil util = new ExcelUtil<>(ManyTimesInterval.class); util.exportExcel(response, list, "感知事件多发时段"); } //新-感知事件类型分析 @PostMapping("/selectWarningType") public AjaxResult selectWarningType(@RequestBody DcWarning dcWarning){ if (dcWarning==null||StringUtils.isBlank(dcWarning.getType())||dcWarning.getCurrently()==null||dcWarning.getLastYear()==null ||StringUtils.isBlank(dcWarning.getStartStakeMark())||StringUtils.isBlank(dcWarning.getEndStakeMark()) ||StringUtils.isBlank(dcWarning.getDirection())){ return AjaxResult.error("参数错误"); } return AjaxResult.success(perceivedEventsWarningService.newSelectWarningType(dcWarning)); } @ApiOperation(value = "导出感知事件类型分析",tags = {"ECharts导出"}) @GetMapping("/exportSelectWarningType") public void exportSelectWarningType(HttpServletResponse response,DcWarning dcWarning){ if (dcWarning==null||StringUtils.isBlank(dcWarning.getType())||dcWarning.getCurrently()==null||dcWarning.getLastYear()==null ||StringUtils.isBlank(dcWarning.getStartStakeMark())||StringUtils.isBlank(dcWarning.getEndStakeMark()) ||StringUtils.isBlank(dcWarning.getDirection())){ return; } HashMap map = perceivedEventsWarningService.newSelectWarningType(dcWarning); List list = new ArrayList<>(); if (map != null){ List> currentlyMap = (List>) map.get("currentlyMap"); Integer total = 0; for (HashMap stringObjectHashMap : currentlyMap) { total += Integer.parseInt(stringObjectHashMap.get("number").toString()); } for (int i = 0; i < currentlyMap.size(); i++) { SelectWarningType selectWarningType = new SelectWarningType(); selectWarningType.setWarningType(currentlyMap.get(i).get("warningType").toString()); selectWarningType.setNumber(currentlyMap.get(i).get("number").toString()); double ratio = Double.parseDouble(currentlyMap.get(i).get("number").toString()) / total * 100; selectWarningType.setRatio(String.format("%.2f", ratio) + "%"); list.add(selectWarningType); } } ExcelUtil util = new ExcelUtil<>(SelectWarningType.class); util.exportExcel(response, list, "感知事件类型分析"); } //新-感知事件桩号范围内事件分析 @PostMapping("/selectSection") public AjaxResult selectSection(@RequestBody DcWarning dcWarning){ if (dcWarning==null||StringUtils.isBlank(dcWarning.getType())||dcWarning.getCurrently()==null||dcWarning.getLastYear()==null ||StringUtils.isBlank(dcWarning.getStartStakeMark())||StringUtils.isBlank(dcWarning.getEndStakeMark()) ||StringUtils.isBlank(dcWarning.getDirection())){ return AjaxResult.error("参数错误"); } return AjaxResult.success(perceivedEventsWarningService.newSelectSection(dcWarning)); } @ApiOperation(value = "导出桩号范围内事件分析",tags = {"ECharts导出"}) @GetMapping("/exportSelectSection") public void exportSelectSection(HttpServletResponse response,DcWarning dcWarning){ if (dcWarning==null||StringUtils.isBlank(dcWarning.getType())||dcWarning.getCurrently()==null||dcWarning.getLastYear()==null ||StringUtils.isBlank(dcWarning.getStartStakeMark())||StringUtils.isBlank(dcWarning.getEndStakeMark()) ||StringUtils.isBlank(dcWarning.getDirection())){ return; } HashMap map = perceivedEventsWarningService.newSelectSection(dcWarning); List list = new ArrayList<>(); if (map != null){ HashMap currentlyMap = (HashMap) map.get("currentlyMap"); HashMap lastYearMap = (HashMap) map.get("lastYearMap"); Set allKeys = new HashSet<>(currentlyMap.keySet()); allKeys.addAll(lastYearMap.keySet()); for (String key : allKeys) { SelectSection selectSection = new SelectSection(); selectSection.setStakeMark(key); if (currentlyMap.containsKey(key)){ selectSection.setCurrentData(currentlyMap.get(key).toString()); } if (lastYearMap.containsKey(key)){ selectSection.setContemporaneousData(lastYearMap.get(key).toString()); } list.add(selectSection); } } ExcelUtil util = new ExcelUtil<>(SelectSection.class); util.exportExcel(response, list, "桩号范围内事件分析"); } //新-感知事件路段处置类型分析 @PostMapping("/selectStateType") public AjaxResult selectStateType(@RequestBody DcWarning dcWarning){ if (dcWarning==null||dcWarning.getCurrently()==null||dcWarning.getLastYear()==null){ return AjaxResult.error("参数错误"); } return AjaxResult.success(perceivedEventsWarningService.newSelectStateType(dcWarning)); } @ApiOperation(value = "导出感知事件路段分析",tags = {"ECharts导出"}) @GetMapping("/exportSelectStateType") public void exportSelectStateType(HttpServletResponse response, DcWarning dcWarning){ if (dcWarning==null||dcWarning.getCurrently()==null||dcWarning.getLastYear()==null){ return; } List list = new ArrayList<>(); HashMap map = perceivedEventsWarningService.newSelectStateType(dcWarning); List> currentlyMap = (List>) map.get("currentlyMap"); List> lastYearMap = (List>) map.get("lastYearMap"); List> stateDuration = (List>) map.get("stateDuration"); Map>> currentlyData = currentlyMap.stream().collect(Collectors.groupingBy(item -> item.get("sectionName").toString())); Map>> lastYearData = lastYearMap.stream().collect(Collectors.groupingBy(item -> item.get("sectionName").toString())); Map>> stateDurationData = stateDuration.stream().collect(Collectors.groupingBy(item -> item.get("sectionName").toString())); Set allKeys = new HashSet<>(currentlyData.keySet()); allKeys.addAll(lastYearData.keySet()); allKeys.addAll(stateDurationData.keySet()); for (String key : allKeys) { SelectStateType selectStateType = new SelectStateType(); selectStateType.setSectionName(key); selectStateType.setSectionName(key); if (currentlyData.containsKey(key)){ List> sectionData = currentlyData.get(key); for (int i = 0; i < sectionData.size(); i++) { if ("1".equals(sectionData.get(i).get("warningState").toString())){ selectStateType.setReporting(sectionData.get(i).get("num").toString()); } else if ("2".equals(sectionData.get(i).get("warningState").toString())){ selectStateType.setCompleted(sectionData.get(i).get("num").toString()); } else if ("3".equals(sectionData.get(i).get("warningState").toString())){ selectStateType.setTerminated(sectionData.get(i).get("num").toString()); } else if ("4".equals(sectionData.get(i).get("warningState").toString())){ selectStateType.setAutomaticTermination(sectionData.get(i).get("num").toString()); } } } if (lastYearData.containsKey(key)){ List> sectionData = lastYearData.get(key); Integer total = 0; for (Map sectionDatum : sectionData) { total += Integer.parseInt(sectionDatum.get("num").toString()); } selectStateType.setContemporaneousData(total.toString()); } if (stateDurationData.containsKey(key)){ List> sectionData = stateDurationData.get(key); selectStateType.setAverageDuration(sectionData.get(0).get("avg").toString()); } list.add(selectStateType); } ExcelUtil util = new ExcelUtil<>(SelectStateType.class); util.exportExcel(response, list, "感知事件路段分析"); } //查询感知数量按照路段数量进行排名 @PostMapping("/sectionPerceivedList") public AjaxResult getSectionPerceivedEventsList(){ return AjaxResult.success(perceivedEventsWarningService.selectSectionPerceivedEventsList()); } @ApiOperation(value = "导出感知事件路段排名",tags = {"ECharts导出"}) @GetMapping("/exportSectionPerceivedList") public void exportSectionPerceivedList(HttpServletResponse response){ List> dataList = perceivedEventsWarningService.selectSectionPerceivedEventsList(); List list = new ArrayList<>(); if (dataList != null && dataList.size() > 0){ for (int i = 0; i < dataList.size(); i++) { SectionPerceivedList sectionPerceivedList = new SectionPerceivedList(); sectionPerceivedList.setRank(i+1); sectionPerceivedList.setSectionName(dataList.get(i).get("sectionName").toString()); sectionPerceivedList.setNumber(dataList.get(i).get("number").toString()); list.add(sectionPerceivedList); } } ExcelUtil util = new ExcelUtil<>(SectionPerceivedList.class); util.exportExcel(response, list, "感知事件路段排名"); } }