diff --git a/zc-business/src/main/java/com/zc/business/controller/DcTrafficIncidentsController.java b/zc-business/src/main/java/com/zc/business/controller/DcTrafficIncidentsController.java index 4c2f2547..4fd32ec0 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DcTrafficIncidentsController.java +++ b/zc-business/src/main/java/com/zc/business/controller/DcTrafficIncidentsController.java @@ -162,6 +162,8 @@ public class DcTrafficIncidentsController { * * @author liuwenge * @date 2024/1/15 17:31 + * @param searchType 查询条件(1:站点,2:原因) + * @param facilityIdList 站点id * @param controlType 类型(1:封闭,2:限行) * @param startTime 开始时间 * @param endTime 结束时间 @@ -169,10 +171,12 @@ public class DcTrafficIncidentsController { */ @ApiOperation("收费站统计分析table") @PostMapping("/selectTollStationAnalysis") - public AjaxResult selectTollStationAnalysis(@ApiParam(value="类型(1:封闭,2:限行)", name="controlType", required=true) @RequestParam ("controlType") String controlType, + 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(controlType,startTime,endTime); + return trafficIncidentsService.selectTollStationAnalysis(searchType,facilityIdList,controlType,startTime,endTime); } /** diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcTrafficIncidentsMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcTrafficIncidentsMapper.java index 601d1176..d0cfeb9b 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/DcTrafficIncidentsMapper.java +++ b/zc-business/src/main/java/com/zc/business/mapper/DcTrafficIncidentsMapper.java @@ -181,12 +181,25 @@ public interface DcTrafficIncidentsMapper { * * @author liuwenge * @date 2024/1/16 14:18 + * @param facilityIdList 站点id * @param controlType 类型(1:封闭,2:限行) * @param startTime 开始时间 * @param endTime 结束时间 * @return java.util.List> */ - List> selectTollStationAnalysis(@Param("controlType") String controlType,@Param("startTime") String startTime,@Param("endTime") String endTime); + List> selectTollStationAnalysis(@Param("facilityIdList") String[] facilityIdList,@Param("controlType") String controlType,@Param("startTime") String startTime,@Param("endTime") String endTime); + + /** + * @Description 收费站统计分析table 根据站点 + * + * @author liuwenge + * @date 2024/2/6 15:18 + * @param facilityIdList 站点id + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return java.util.List> + */ + List> selectTollStationAnalysisByFacility(@Param("facilityIdList") String[] facilityIdList,@Param("startTime") String startTime,@Param("endTime") String endTime); /** * @Description 收费站统计分析echarts diff --git a/zc-business/src/main/java/com/zc/business/service/IDcTrafficIncidentsService.java b/zc-business/src/main/java/com/zc/business/service/IDcTrafficIncidentsService.java index 9fe3c4ff..8687a48a 100644 --- a/zc-business/src/main/java/com/zc/business/service/IDcTrafficIncidentsService.java +++ b/zc-business/src/main/java/com/zc/business/service/IDcTrafficIncidentsService.java @@ -103,12 +103,14 @@ public interface IDcTrafficIncidentsService { * @return com.ruoyi.common.core.domain.AjaxResult * @Description 路网管控-事件管控分析-收费站统计分析table * @author liuwenge + * @param searchType 查询条件 + * @param facilityIdList 站点id * @param controlType 类型(1:封闭,2:限行) * @param startTime 开始时间 * @param endTime 结束时间 * @date 2024/1/15 17:31 */ - AjaxResult selectTollStationAnalysis(String controlType,String startTime,String endTime); + AjaxResult selectTollStationAnalysis(String searchType,String[] facilityIdList,String controlType,String startTime,String endTime); /** * @Description 路网管控-事件管控分析-收费站统计分析echarts(当月) diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcTrafficIncidentsServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcTrafficIncidentsServiceImpl.java index f29ad12a..4e0dea1e 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcTrafficIncidentsServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcTrafficIncidentsServiceImpl.java @@ -2,6 +2,7 @@ package com.zc.business.service.impl; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.StakeMarkUtils; +import com.ruoyi.common.utils.StringUtils; import com.zc.business.domain.DcEvent; import com.zc.business.domain.DcEventType; import com.zc.business.mapper.DcTrafficIncidentsMapper; @@ -15,6 +16,7 @@ import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.time.Year; import java.util.*; +import java.util.stream.Collectors; /** * @Description 交通事件统计Service业务层处理 @@ -352,111 +354,129 @@ public class DcTrafficIncidentsServiceImpl implements IDcTrafficIncidentsService * @Description 路网管控-事件管控分析-收费站统计分析table * @return com.ruoyi.common.core.domain.AjaxResult * @author liuwenge + * @param searchType 查询条件 + * @param facilityIdList 站点id * @param controlType 类型(1:封闭,2:限行) * @param startTime 开始时间 * @param endTime 结束时间 * @date 2024/1/15 17:31 */ @Override - public AjaxResult selectTollStationAnalysis(String controlType,String startTime,String endTime){ - - //目标时段 - List> list = trafficIncidentsMapper.selectTollStationAnalysis(controlType,startTime,endTime); - BigDecimal allNum = BigDecimal.ZERO; - BigDecimal allTime = BigDecimal.ZERO; - for (Map data : list) { - allNum = allNum.add(new BigDecimal(data.get("num").toString())); - allTime = allTime.add(new BigDecimal(data.get("minuteTime").toString())); - } - for (Map data : list) { - //计算站次占比 - if (allNum.compareTo(BigDecimal.ZERO) > 0){ - BigDecimal numRatio = new BigDecimal(data.get("num").toString()).multiply(new BigDecimal("100")).divide(allNum,2, RoundingMode.HALF_UP); - data.put("numRatio",numRatio); - } else { - data.put("numRatio",0); - } + public AjaxResult selectTollStationAnalysis(String searchType,String[] facilityIdList,String controlType,String startTime,String endTime){ - //计算时长占比 - if (allTime.compareTo(BigDecimal.ZERO) > 0){ - BigDecimal timeRatio = new BigDecimal(data.get("minuteTime").toString()).multiply(new BigDecimal("100")).divide(allTime,2, RoundingMode.HALF_UP); - data.put("timeRatio",timeRatio); - } else { - data.put("timeRatio",0); - } - } + //站点 + if ("1".equals(searchType)){ + List> list = trafficIncidentsMapper.selectTollStationAnalysisByFacility(facilityIdList,startTime,endTime); + return AjaxResult.success(list); - //去年同期 - try { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Calendar cal = Calendar.getInstance(); - - Date startDate = dateFormat.parse(startTime); - cal.setTime(startDate); - cal.add(Calendar.YEAR,-1); - String lastStartTime = dateFormat.format(cal.getTime()); - - Date endDate = dateFormat.parse(endTime); - cal.setTime(endDate); - cal.add(Calendar.YEAR,-1); - String lastEndTime = dateFormat.format(cal.getTime()); - - List> lastList = trafficIncidentsMapper.selectTollStationAnalysis(controlType,lastStartTime,lastEndTime); - BigDecimal lastAllNum = BigDecimal.ZERO; - BigDecimal lastAllTime = BigDecimal.ZERO; - - for (int i = 0; i < lastList.size(); i++) { - //去年同期站次 - lastAllNum = lastAllNum.add(new BigDecimal(lastList.get(i).get("num").toString())); - list.get(i).put("lastYearNum",lastList.get(i).get("num").toString()); - - //去年同期时长 - lastAllTime = lastAllTime.add(new BigDecimal(lastList.get(i).get("minuteTime").toString())); - list.get(i).put("lastYearTime",lastList.get(i).get("minuteTime").toString()); - } + } else { + //原因 - for (int i = 0; i < lastList.size(); i++) { - //去年同期站次占比 - if (lastAllNum.compareTo(BigDecimal.ZERO) > 0){ - BigDecimal numRatio = new BigDecimal(lastList.get(i).get("num").toString()).multiply(new BigDecimal("100")).divide(lastAllNum,2, RoundingMode.HALF_UP); - list.get(i).put("lastYearNumRatio",numRatio); + if (StringUtils.isEmpty(controlType)){ + return AjaxResult.error("请选择事件类型"); + } + //目标时段 + List> list = trafficIncidentsMapper.selectTollStationAnalysis(facilityIdList,controlType,startTime,endTime); + BigDecimal allNum = BigDecimal.ZERO; + BigDecimal allTime = BigDecimal.ZERO; + for (Map data : list) { + allNum = allNum.add(new BigDecimal(data.get("num").toString())); + allTime = allTime.add(new BigDecimal(data.get("minuteTime").toString())); + } + for (Map data : list) { + //计算站次占比 + if (allNum.compareTo(BigDecimal.ZERO) > 0){ + BigDecimal numRatio = new BigDecimal(data.get("num").toString()).multiply(new BigDecimal("100")).divide(allNum,2, RoundingMode.HALF_UP); + data.put("numRatio",numRatio); } else { - list.get(i).put("lastYearNumRatio",0); + data.put("numRatio",0); } - ////去年同期时长占比 - if (lastAllTime.compareTo(BigDecimal.ZERO) > 0) { - BigDecimal timeRatio = new BigDecimal(lastList.get(i).get("minuteTime").toString()).multiply(new BigDecimal("100")).divide(lastAllTime, 2, RoundingMode.HALF_UP); - list.get(i).put("lastYearTimeRatio", timeRatio); + + //计算时长占比 + if (allTime.compareTo(BigDecimal.ZERO) > 0){ + BigDecimal timeRatio = new BigDecimal(data.get("minuteTime").toString()).multiply(new BigDecimal("100")).divide(allTime,2, RoundingMode.HALF_UP); + data.put("timeRatio",timeRatio); } else { - list.get(i).put("lastYearTimeRatio", 0); + data.put("timeRatio",0); } } - //同比 - for (Map map : list) { - //站次同比 - if (new BigDecimal(map.get("lastYearNum").toString()).compareTo(BigDecimal.ZERO) > 0){ - BigDecimal yearNumRatio = new BigDecimal(map.get("num").toString()).multiply(new BigDecimal("100")).divide(new BigDecimal(map.get("lastYearNum").toString()),2, RoundingMode.HALF_UP); - map.put("yearNumRatio",yearNumRatio); - } else { - map.put("yearNumRatio",0); + //去年同期 + try { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar cal = Calendar.getInstance(); + + Date startDate = dateFormat.parse(startTime); + cal.setTime(startDate); + cal.add(Calendar.YEAR,-1); + String lastStartTime = dateFormat.format(cal.getTime()); + + Date endDate = dateFormat.parse(endTime); + cal.setTime(endDate); + cal.add(Calendar.YEAR,-1); + String lastEndTime = dateFormat.format(cal.getTime()); + + List> lastList = trafficIncidentsMapper.selectTollStationAnalysis(facilityIdList,controlType,lastStartTime,lastEndTime); + BigDecimal lastAllNum = BigDecimal.ZERO; + BigDecimal lastAllTime = BigDecimal.ZERO; + + for (int i = 0; i < lastList.size(); i++) { + //去年同期站次 + lastAllNum = lastAllNum.add(new BigDecimal(lastList.get(i).get("num").toString())); + list.get(i).put("lastYearNum",lastList.get(i).get("num").toString()); + + //去年同期时长 + lastAllTime = lastAllTime.add(new BigDecimal(lastList.get(i).get("minuteTime").toString())); + list.get(i).put("lastYearTime",lastList.get(i).get("minuteTime").toString()); } - //时长同比 - if (new BigDecimal(map.get("lastYearTime").toString()).compareTo(BigDecimal.ZERO) > 0){ - BigDecimal yearTimeRatio = new BigDecimal(map.get("minuteTime").toString()).multiply(new BigDecimal("100")).divide(new BigDecimal(map.get("lastYearTime").toString()),2, RoundingMode.HALF_UP); - map.put("yearTimeRatio",yearTimeRatio); - } else { - map.put("yearTimeRatio",0); + for (int i = 0; i < lastList.size(); i++) { + //去年同期站次占比 + if (lastAllNum.compareTo(BigDecimal.ZERO) > 0){ + BigDecimal numRatio = new BigDecimal(lastList.get(i).get("num").toString()).multiply(new BigDecimal("100")).divide(lastAllNum,2, RoundingMode.HALF_UP); + list.get(i).put("lastYearNumRatio",numRatio); + } else { + list.get(i).put("lastYearNumRatio",0); + } + ////去年同期时长占比 + if (lastAllTime.compareTo(BigDecimal.ZERO) > 0) { + BigDecimal timeRatio = new BigDecimal(lastList.get(i).get("minuteTime").toString()).multiply(new BigDecimal("100")).divide(lastAllTime, 2, RoundingMode.HALF_UP); + list.get(i).put("lastYearTimeRatio", timeRatio); + } else { + list.get(i).put("lastYearTimeRatio", 0); + } + } + + //同比 + for (Map map : list) { + //站次同比 + if (new BigDecimal(map.get("lastYearNum").toString()).compareTo(BigDecimal.ZERO) > 0){ + BigDecimal yearNumRatio = new BigDecimal(map.get("num").toString()).multiply(new BigDecimal("100")).divide(new BigDecimal(map.get("lastYearNum").toString()),2, RoundingMode.HALF_UP); + map.put("yearNumRatio",yearNumRatio); + } else { + map.put("yearNumRatio",0); + } + + //时长同比 + if (new BigDecimal(map.get("lastYearTime").toString()).compareTo(BigDecimal.ZERO) > 0){ + BigDecimal yearTimeRatio = new BigDecimal(map.get("minuteTime").toString()).multiply(new BigDecimal("100")).divide(new BigDecimal(map.get("lastYearTime").toString()),2, RoundingMode.HALF_UP); + map.put("yearTimeRatio",yearTimeRatio); + } else { + map.put("yearTimeRatio",0); + } } + + } catch (Exception e){ + e.printStackTrace(); } - } catch (Exception e){ - e.printStackTrace(); - } + return AjaxResult.success(list); - return AjaxResult.success(list); + } + } + private String customKey(Map map){ + return map.get("facilityId").toString(); } /** diff --git a/zc-business/src/main/resources/mapper/business/DcTrafficIncidentsMapper.xml b/zc-business/src/main/resources/mapper/business/DcTrafficIncidentsMapper.xml index e9337764..077f7aef 100644 --- a/zc-business/src/main/resources/mapper/business/DcTrafficIncidentsMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcTrafficIncidentsMapper.xml @@ -225,15 +225,46 @@ then TIMESTAMPDIFF(MINUTE,t1.start_time,t1.end_time) else 0 end) minuteTime from dc_event t1 LEFT JOIN dc_event_traffic_control t2 on t1.id = t2.id - where - t1.event_type = '3' and t1.event_subclass = '3-2' and t2.control_type = #{controlType} + + t1.event_type = '3' and t1.event_subclass = '3-2' + + AND t2.facility_id in + + #{facilityId} + + and date_format(t1.start_time,'%Y-%m-%d %H:%i:%s') <= date_format(#{endTime},'%Y-%m-%d %H:%i:%s') and (date_format(t1.end_time,'%Y-%m-%d %H:%i:%s') > date_format(#{startTime},'%Y-%m-%d %H:%i:%s') or ISNULL(t1.end_time)) + GROUP BY t2.control_cause,t2.cause_type) t4 on t3.control_cause = t4.control_cause and t3.cause_type = t4.cause_type ORDER BY t3.control_cause, t3.cause_type + +