package com.zc.business.controller; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.poi.ExcelUtil; import com.zc.business.domain.DcEventListQuery; import com.zc.business.domain.export.*; import com.zc.business.enums.UniversalEnum; import com.zc.business.service.IDcTrafficIncidentsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Description 交通事件统计 * * @author liuwenge * @date 2024/1/13 9:41 */ @Api(tags = "交通事件统计") @RestController @RequestMapping("/business/trafficIncidents") public class DcTrafficIncidentsController { @Autowired private IDcTrafficIncidentsService trafficIncidentsService; /** * @Description 首页-重点数据 * * @author liuwenge * @date 2024/1/13 10:10 * @param * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation("首页-重点监控") @GetMapping("/getKeyData") public AjaxResult getKeyData(){ return trafficIncidentsService.getKeyData(); } /** * @Description 首页-事件专题-根据事件类型获取事件列表 * * @author liuwenge * @date 2024/1/13 14:27 * @param * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation("根据类型获取事件列表") @PostMapping("/getEventList") public AjaxResult getEventList(DcEventListQuery dcEventListQuery){ return trafficIncidentsService.getEventListByType(dcEventListQuery); } /** * @Description 首页-事件专题-根据事件id获取事件详情 * * @author liuwenge * @date 2024/1/13 14:43 * @param eventId * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation("获取交通事件详情") @GetMapping("/getEventInfo/{eventId}") public AjaxResult getEventInfo(@ApiParam(value = "事件id", name = "eventId",required = true) @PathVariable("eventId") String eventId){ return trafficIncidentsService.getEventInfo(eventId); } /** * @Description 首页-状况统计-获取日周月年交通事件数量 * * @author liuwenge * @date 2024/1/13 15:07 * @param * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation("获取日、周、月、年的交通事件数量") @GetMapping("/getTrafficIncidentsNum") public AjaxResult getTrafficIncidentsNum(){ return trafficIncidentsService.getTrafficIncidentsNum(); } /** * @Description 路网管控-事件管控分析-各类事件的状态数量 * * @author liuwenge * @date 2024/1/13 15:07 * @param * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation("各类事件的状态数量") @GetMapping("/getEventStatusNum") public AjaxResult getEventStatusNum(){ return trafficIncidentsService.getEventStatusNum(); } /** * @Description 路网管控-事件管控分析-事件类型分析占比 * * @author liuwenge * @date 2024/1/13 15:07 * @param * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation("事件类型分析占比") @GetMapping("/getAllEventNum") public AjaxResult getAllEventNum(){ return trafficIncidentsService.getAllEventNum(); } @ApiOperation(value = "导出事件类型分析",tags = {"ECharts导出"}) @GetMapping("/exportGetAllEventNum") public void exportGetAllEventNum(HttpServletResponse response){ AjaxResult ajaxResult = trafficIncidentsService.getAllEventNum(); List list = new ArrayList<>(); if (ajaxResult.get("code").equals(UniversalEnum.TWO_HUNDRED.getNumber())) { List> data = (List>) ajaxResult.get("data"); Long total = data.stream().mapToLong(item -> (long) item.get("num")).sum(); for (Map datum : data) { AllEventNum allEventNum = new AllEventNum(); allEventNum.setEventName(datum.get("eventName").toString()); allEventNum.setNum(datum.get("num").toString()); //计算百分比 double ratio = (double) Long.parseLong(datum.get("num").toString()) / total * 100; ratio = Math.round(ratio * 100.0) / 100.0; allEventNum.setRatio(ratio + "%"); list.add(allEventNum); } } ExcelUtil util = new ExcelUtil<>(AllEventNum.class); util.exportExcel(response, list, "事件类型分析"); } /** * @Description 路网管控-事件管控分析-事件源分析占比 * * @author liuwenge * @date 2024/1/13 15:07 * @param * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation("事件源分析占比") @GetMapping("/getEventSourceRatio") public AjaxResult getEventSourceRatio(){ return trafficIncidentsService.getEventSourceRatio(); } /** * @Description 路网管控-事件管控分析-今日事件趋势 * * @author liuwenge * @date 2024/1/15 14:30 * @param * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation("今日事件趋势") @GetMapping("/getEventTrend") public AjaxResult getEventTrend(){ return trafficIncidentsService.getEventTrend(); } @ApiOperation(value="导出今日事件趋势",tags = {"ECharts导出"}) @GetMapping("/exportGetEventTrend") public void exportGetEventTrend(HttpServletResponse response){ AjaxResult ajaxResult = trafficIncidentsService.getEventTrend(); List list = new ArrayList<>(); if (ajaxResult.get("code").equals(UniversalEnum.TWO_HUNDRED.getNumber())) { Map data = (Map) ajaxResult.get("data"); List> perception = (List>)data.get("perception"); List> traffic = (List>)data.get("traffic"); for (int i = 0; i < perception.size(); i++) { EventTrend eventTrend = new EventTrend(); eventTrend.setHours(perception.get(i).get("hours").toString() + "时"); eventTrend.setPerception(perception.get(i).get("num").toString()); eventTrend.setTraffic(traffic.get(i).get("num").toString()); list.add(eventTrend); } } ExcelUtil util = new ExcelUtil<>(EventTrend.class); util.exportExcel(response, list, "今日事件趋势"); } /** * @Description 路网管控-事件管控分析-事故车型分析 * * @author liuwenge * @date 2024/1/15 15:38 * @param direction 方向 * @param direction 类型(1:日, 2:月, 3:季度, 4-年) * @param direction 时间 * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation("事故车型分析") // @GetMapping("/getAccidentVehicleAnalysis") @PostMapping("/selectAccidentVehicleAnalysis") public AjaxResult getAccidentVehicleAnalysis(@ApiParam(value="方向", name="direction", required=true) @RequestParam ("direction") String direction, @ApiParam(value="类型(1:日, 2:月, 3:季度, 4-年)", name="type", required=true) @RequestParam ("type") String type, @ApiParam(value="时间", name="startTime", required=true) @RequestParam ("startTime") String startTime){ return trafficIncidentsService.getAccidentVehicleAnalysis(direction,type,startTime); } @ApiOperation(value="导出事故车型分析",tags = {"ECharts导出"}) @GetMapping("/exportSelectAccidentVehicleAnalysis") public void exportSelectAccidentVehicleAnalysis(HttpServletResponse response, @ApiParam(value="方向", name="direction", required=true) @RequestParam ("direction") String direction, @ApiParam(value="类型(1:日, 2:月, 3:季度, 4-年)", name="type", required=true) @RequestParam ("type") String type, @ApiParam(value="时间", name="startTime", required=true) @RequestParam ("startTime") String startTime){ AjaxResult ajaxResult = trafficIncidentsService.getAccidentVehicleAnalysis(direction,type,startTime); List list = new ArrayList<>(); if (ajaxResult.get("code").equals(UniversalEnum.TWO_HUNDRED.getNumber())) { List> data = (List>) ajaxResult.get("data"); for (Map datum : data) { AccidentVehicleAnalysis accidentVehicleAnalysis = new AccidentVehicleAnalysis(); accidentVehicleAnalysis.setTypeName(datum.get("typeName").toString()); accidentVehicleAnalysis.setNum(datum.get("num").toString()); accidentVehicleAnalysis.setAvgTime(datum.get("avgTime").toString()); list.add(accidentVehicleAnalysis); } } ExcelUtil util = new ExcelUtil<>(AccidentVehicleAnalysis.class); util.exportExcel(response, list, "事故车型分析"); } /** * @Description 路网管控-事件管控分析-收费站统计分析table * * @author liuwenge * @date 2024/1/15 17:31 * @param searchType 查询条件(1:站点,2:原因) * @param facilityIdList 站点id * @param controlType 类型(1:封闭,2:限行) * @param startTime 开始时间 * @param endTime 结束时间 * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation("收费站统计分析table") @PostMapping("/selectTollStationAnalysis") public AjaxResult selectTollStationAnalysis(@ApiParam(value="查询条件(1:站点,2:原因)", name="searchType", required=true) @RequestParam ("searchType") String searchType, @ApiParam(value="站点id", name="facilityId", required=false) @RequestParam (name="facilityId",required = false) String[] facilityIdList, @ApiParam(value="类型(1:封闭,2:限行)", name="controlType", required=false) @RequestParam (name="controlType",required = false) String controlType, @ApiParam(value="开始时间", name="startTime", required=true) @RequestParam ("startTime") String startTime, @ApiParam(value="结束时间", name="endTime", required=true) @RequestParam ("endTime") String endTime){ return trafficIncidentsService.selectTollStationAnalysis(searchType,facilityIdList,controlType,startTime,endTime); } /** * @Description 路网管控-事件管控分析-收费站统计分析echarts(当月) * * @author liuwenge * @date 2024/1/16 11:09 * @param * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation("收费站统计分析echarts(当月)") @GetMapping("/getTollStationAnalysis") public AjaxResult getTollStationAnalysis(){ return trafficIncidentsService.getTollStationAnalysis(); } @ApiOperation(value="导出收费站管制分析",tags = {"ECharts导出"}) @GetMapping("/exportGetTollStationAnalysis") public void exportGetTollStationAnalysis(HttpServletResponse response){ AjaxResult ajaxResult = trafficIncidentsService.getTollStationAnalysis(); List list = new ArrayList<>(); if (ajaxResult.get("code").equals(UniversalEnum.TWO_HUNDRED.getNumber())) { List> data = (List>) ajaxResult.get("data"); for (Map datum : data) { TollStationAnalysis tollStationAnalysis = new TollStationAnalysis(); tollStationAnalysis.setFacilityName(datum.get("facilityName").toString()); tollStationAnalysis.setTrafficClose(datum.get("trafficClose").toString()); tollStationAnalysis.setTrafficRestriction(datum.get("trafficRestriction").toString()); list.add(tollStationAnalysis); } } ExcelUtil util = new ExcelUtil<>(TollStationAnalysis.class); util.exportExcel(response, list, "收费站管制分析"); } /** * @Description 路网管控-事件管控分析-事故多发路段分析 * * @author liuwenge * @date 2024/1/16 15:52 * @param direction 方向 * @param direction 类型(1:日, 2:月, 3:季度, 4-年) * @param direction 时间 * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation("事故多发路段分析") @PostMapping("/selectRoadSectionAnalysis") public AjaxResult selectRoadSectionAnalysis(@ApiParam(value="方向", name="direction", required=true) @RequestParam ("direction") String direction, @ApiParam(value="类型(1:日, 2:月, 3:季度, 4-年)", name="type", required=true) @RequestParam ("type") String type, @ApiParam(value="时间", name="startTime", required=true) @RequestParam ("startTime") String startTime){ return trafficIncidentsService.selectRoadSectionAnalysis(direction,type,startTime); } @ApiOperation(value="导出事故多发路段分析",tags = {"ECharts导出"}) @GetMapping("/exportSelectRoadSectionAnalysis") public void exportSelectRoadSectionAnalysis(HttpServletResponse response, @ApiParam(value="方向", name="direction", required=true) @RequestParam ("direction") String direction, @ApiParam(value="类型(1:日, 2:月, 3:季度, 4-年)", name="type", required=true) @RequestParam ("type") String type, @ApiParam(value="时间", name="startTime", required=true) @RequestParam ("startTime") String startTime){ AjaxResult ajaxResult = trafficIncidentsService.selectRoadSectionAnalysis(direction,type,startTime); List list = new ArrayList<>(); if (ajaxResult.get("code").equals(UniversalEnum.TWO_HUNDRED.getNumber())) { List> data = (List>) ajaxResult.get("data"); for (Map datum : data) { RoadSectionAnalysis roadSectionAnalysis = new RoadSectionAnalysis(); roadSectionAnalysis.setSection_name(datum.get("section_name").toString()); roadSectionAnalysis.setNum(datum.get("num").toString()); roadSectionAnalysis.setAvgNum(datum.get("avgNum").toString()); roadSectionAnalysis.setLastNum(datum.get("lastNum").toString()); roadSectionAnalysis.setMileage(datum.get("mileage").toString()); list.add(roadSectionAnalysis); } } ExcelUtil util = new ExcelUtil<>(RoadSectionAnalysis.class); util.exportExcel(response, list, "事故多发路段分析"); } /** * @Description 路网管控-事件管控分析-事故类型分析 * * @author liuwenge * @date 2024/1/16 15:52 * @param direction 方向 * @param direction 类型(1:日, 2:月, 3:季度, 4-年) * @param direction 时间 * @return com.ruoyi.common.core.domain.AjaxResult */ @ApiOperation("事故类型分析") @PostMapping("/selectEventTypeAnalysis") public AjaxResult selectEventTypeAnalysis(@ApiParam(value="方向", name="direction", required=true) @RequestParam ("direction") String direction, @ApiParam(value="类型(1:日, 2:月, 3:季度, 4-年)", name="type", required=true) @RequestParam ("type") String type, @ApiParam(value="时间", name="startTime", required=true) @RequestParam ("startTime") String startTime){ return trafficIncidentsService.selectEventTypeAnalysis(direction,type,startTime); } @ApiOperation(value="导出事故类型分析",tags = {"ECharts导出"}) @GetMapping("/exportSelectEventTypeAnalysis") public void exportSelectEventTypeAnalysis(HttpServletResponse response, @ApiParam(value="方向", name="direction", required=true) @RequestParam ("direction") String direction, @ApiParam(value="类型(1:日, 2:月, 3:季度, 4-年)", name="type", required=true) @RequestParam ("type") String type, @ApiParam(value="时间", name="startTime", required=true) @RequestParam ("startTime") String startTime){ AjaxResult ajaxResult = trafficIncidentsService.selectEventTypeAnalysis(direction,type,startTime); List list = new ArrayList<>(); if (ajaxResult.get("code").equals(UniversalEnum.TWO_HUNDRED.getNumber())) { List> data = (List>) ajaxResult.get("data"); for (Map datum : data) { EventTypeAnalysis eventTypeAnalysis = new EventTypeAnalysis(); eventTypeAnalysis.setEventSubclassName(datum.get("eventSubclassName").toString()); eventTypeAnalysis.setNum(datum.get("num").toString()); eventTypeAnalysis.setLastNum(datum.get("lastNum").toString()); eventTypeAnalysis.setAvgTime(datum.get("avgTime").toString()); eventTypeAnalysis.setLastAvgTime(datum.get("lastAvgTime").toString()); list.add(eventTypeAnalysis); } } ExcelUtil util = new ExcelUtil<>(EventTypeAnalysis.class); util.exportExcel(response, list, "事故类型分析"); } }