Commit d5fa84c4 authored by fengyasheng's avatar fengyasheng

根据区域查路口,只查有信号灯标记的路口

干线周报-干线拥堵概况接口
parent e412c784
package net.wanji.opt.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Objects;
/**
* @author duanruiming
* @date 2024/12/10 17:27
*/
@Getter
@AllArgsConstructor
public enum PeakNameEnum {
MORNING_PEAK(1, "早高峰"),
EVENING_PEAK(2, "晚高峰"),
ALL_DAY(3, "全天");
private Integer code;
private String desc;
public static String getDesc(Integer code) {
for (PeakNameEnum value : PeakNameEnum.values()) {
if (Objects.equals(code, value.getCode())) {
return value.desc;
}
}
return "";
}
}
package net.wanji.opt.controllerv2.report;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
......@@ -13,13 +14,21 @@ import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.controllerv2.judgeanalysis.design.response.areaproblem.AreaCrossProblemAnalysisResult;
import net.wanji.opt.controllerv2.report.design.GreenReportOverviewAnalysisResult;
import net.wanji.opt.controllerv2.report.design.GreenReportSamePeriodCompareResult;
import net.wanji.opt.controllerv2.report.vo.GreenReportSamePeriodCompareData;
import net.wanji.opt.entity.report.GreenWaveWeekData;
import net.wanji.opt.servicev2.report.GreenWaveCrossRidService;
import net.wanji.opt.servicev2.report.GreenWaveWeekDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 干线概况 接口API
......@@ -36,6 +45,8 @@ public class GreenWaveOverviewController {
@Autowired
private GreenWaveCrossRidService greenWaveCrossRidService;
@Autowired
private GreenWaveWeekDataService greenWaveWeekDataService;
......@@ -43,7 +54,7 @@ public class GreenWaveOverviewController {
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔【为空时查询所有干线】", required = true, dataType = "String",defaultValue = "1,2"),
@ApiImplicitParam(name = "year", value = "年份", required = true, dataType = "String",defaultValue = "2025"),
@ApiImplicitParam(name = "week", value = "一年的第几周", required = true, dataType = "String",defaultValue = "20"),
@ApiImplicitParam(name = "week", value = "一年的第几周", required = true, dataType = "String",defaultValue = "13"),
})
@GetMapping(value = "/getOverallSituation")
@ApiResponses({
......@@ -52,6 +63,8 @@ public class GreenWaveOverviewController {
public JsonViewObject getGreenInfoList(Integer year,Integer week, String ids) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
JSONObject jsonObject = greenWaveWeekDataService.getGreenInfoList( year, week, ids);
jsonViewObject.success(jsonObject);
} catch (Exception e) {
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
......@@ -66,7 +79,7 @@ public class GreenWaveOverviewController {
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔", required = true, dataType = "String",defaultValue = "1,2"),
@ApiImplicitParam(name = "year", value = "年份", required = true, dataType = "String",defaultValue = "2025"),
@ApiImplicitParam(name = "week", value = "一年的第几周", required = true, dataType = "String",defaultValue = "20"),
@ApiImplicitParam(name = "week", value = "一年的第几周", required = true, dataType = "String",defaultValue = "13"),
})
@GetMapping(value = "/getSamePeriodCompare")
@ApiResponses({
......@@ -75,7 +88,8 @@ public class GreenWaveOverviewController {
public JsonViewObject getSamePeriodCompare(Integer year,Integer week, String ids) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
List<GreenReportSamePeriodCompareData> jsonObject = greenWaveWeekDataService.getSamePeriodCompare(year,week,ids);
jsonViewObject.success(jsonObject);
} catch (Exception e) {
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
......
package net.wanji.opt.controllerv2.report.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class GreenReportSamePeriodCompareData {
@ApiModelProperty(value = "路口ID", example = "")
private String greenId;
@ApiModelProperty(value = "干线名称", example = "")
private String greenName;
@ApiModelProperty(value = "早高峰流量情况", example = "减少")
private String amPeakSituation;
@ApiModelProperty(value = "晚高峰流量情况", example = "减少")
private String pmPeakSituation;
@ApiModelProperty(value = "行程时间同比情况", example = "增加20s")
private String amTravelTimeSituation;
@ApiModelProperty(value = "行程时间同比情况", example = "减少20s")
private String pmTravelTimeSituation;
private List<GreenReportSamePeriodData> dataList = new ArrayList<>();
}
\ No newline at end of file
package net.wanji.opt.controllerv2.report.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class GreenReportSamePeriodData {
@ApiModelProperty(value = "峰期类型 早高峰、晚高峰、全天", example = "早高峰")
private String peakName;
@ApiModelProperty(value = "通行量(辆)", example = "736278")
private Integer peakFlow;
@ApiModelProperty(value = "通行量同比", example = "-1.5%")
private Double peakFlowRatio;
@ApiModelProperty(value = "拥堵指数", example = "3.5")
private Double congestIndex;
@ApiModelProperty(value = "拥堵指数同比", example = "3.5%")
private Double congestIndexRatio;
@ApiModelProperty(value = "平均车速km/h", example = "30.5")
private Double avgSpeed;
@ApiModelProperty(value = "平均车速同比", example = "-1.5%")
private Double avgSpeedRatio;
@ApiModelProperty(value = "行程时间(分钟)", example = "6.5")
private Double travelTime;
@ApiModelProperty(value = "行程时间同比", example = "-1.5%")
private Double travelTimeRatio;
}
\ No newline at end of file
package net.wanji.opt.controllerv2.report.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "绿波干线周总体拥堵概况", description = "绿波干线周总体拥堵概况")
public class GreenWaveWeekDataVO {
@ApiModelProperty(value = "路口ID",example = "")
private Integer greenId ;
@ApiModelProperty(value = "干线名称",example = "")
private String greenName ;
@ApiModelProperty(value = "干线路段长度,单位米",example = "")
private double length ;
@ApiModelProperty(value = "干线道路类型,以文字形式描述",example = "主干道")
private String greenRoadType ;
@ApiModelProperty(value = "排名-按拥堵指数排名",example = "1")
private Integer rank ;
@ApiModelProperty(value = "平均拥堵指数",example = "1.5")
private Double congestIndex ;
@ApiModelProperty(value = "最大拥堵指数",example = "1.5")
private Double maxCongestIndex ;
@ApiModelProperty(value = "拥堵次数",example = "1.5")
private Double congestCount ;
@ApiModelProperty(value = "拥堵总时长,单位秒",example = "1.5")
private Double congestDuration;
@ApiModelProperty(value = "拥堵次数中的最大拥堵时长,单位秒",example = "2000")
private Double maxCongestDuration;
@ApiModelProperty(value = "平均拥堵时长,单位秒",example = "2000")
private Double avgCongestDuration;
@ApiModelProperty(value = "最长使时间拥堵时间分布",example = "周一7:30~8:15")
private String congestTimeDistribute;
@ApiModelProperty(value = "最长时间拥堵时段分布",example = "周一7:30~8:15")
private String maxCongestTimeDistribute;
@ApiModelProperty(value = "本周拥堵时段集中分布情况",example = "周一7:30~8:15,周五17:30~18:15")
private String weekCongestTimeDistribute;
}
\ No newline at end of file
......@@ -25,5 +25,7 @@ public interface GreenWaveWeekDataMapper extends BaseMapper<GreenWaveWeekData> {
void insertOrUpdateBatch(@Param("list") List<GreenWaveWeekData> greenWaveWeekDataList);
List<GreenwaveHistPO> selectAllByTime(@Param("greenId") Integer greenId,@Param("roadDirection") String roadDirection,@Param("startDate") String startDate,@Param("endDate") String endDate,@Param("startTime") String startTime,@Param("endTime") String endTime);
List<GreenWaveWeekData> getDataByWeek(@Param("greenIdList") List<Integer> greenIdList,@Param("yearWeek") Integer yearWeek);
// MyBatis-Plus 提供了基本的 CRUD 方法,这里无需额外定义
}
\ No newline at end of file
package net.wanji.opt.servicev2.report;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import net.wanji.opt.controllerv2.report.vo.GreenReportSamePeriodCompareData;
import net.wanji.opt.entity.report.GreenWaveWeekData;
import org.apache.ibatis.annotations.Param;
......@@ -10,4 +12,8 @@ public interface GreenWaveWeekDataService extends IService<GreenWaveWeekData> {
void insertGreenWaveWeekData();
void insertOrUpdateBatch(List<GreenWaveWeekData> greenWaveWeekDataList);
JSONObject getGreenInfoList(Integer year, Integer week, String ids);
List<GreenReportSamePeriodCompareData> getSamePeriodCompare(Integer year, Integer week, String ids);
}
\ No newline at end of file
......@@ -11,6 +11,7 @@ import net.wanji.databus.po.BaseAreaInfoPO;
import net.wanji.databus.po.BaseCrossInfoPO;
import lombok.extern.slf4j.Slf4j;
import net.wanji.databus.vo.CrossInfoVO;
import net.wanji.opt.servicev2.report.BaseAreaInfoService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
......@@ -93,7 +94,9 @@ public class BaseAreaInfoServiceImpl implements BaseAreaInfoService {
}
if(ObjectUtils.isEmpty(type) || type == 2){
String finalWkt1 = wkt;
List<BaseCrossInfoPO> baseCrossInfoPOS = baseCrossInfoMapper.selectAll().stream().filter(x->{
CrossInfoVO crossInfoVO = new CrossInfoVO();
crossInfoVO.setIsSignal(1);
List<BaseCrossInfoPO> baseCrossInfoPOS = baseCrossInfoMapper.selectAll(crossInfoVO).stream().filter(x->{
boolean contains = gtsService.contains(finalWkt1, convertPointString(x.getLocation()));
return contains;
......
......@@ -71,7 +71,7 @@
<select id="getFlowByTime" resultType="java.lang.Integer">
SELECT COALESCE(flow, 0) from
(select cross_id from t_greenwave_cross where green_id = #{greenId} and sort = 1) cross_data
(select cross_id from t_greenwave_cross where green_id = #{greenId} and is_key_route = 1) cross_data
left join
(SELECT sum(flow) as flow,cross_id from t_cross_dir_data_hist where start_time BETWEEN #{startDate} AND #{endDate} AND TIME( start_time ) BETWEEN #{startTime} AND #{endTime} and dir_type = #{dir} GROUP BY cross_id) cross_flow on cross_data.cross_id = cross_flow.cross_id
</select>
......@@ -83,4 +83,29 @@
and green_id = #{greenId}
and status >= 3 and road_direction = #{roadDirection} order by start_time
</select>
<select id="getDataByWeek" resultType="net.wanji.opt.entity.report.GreenWaveWeekData">
SELECT
green_id,
peak_type,
COALESCE ( avg( speed ), 0 ) AS speed,
COALESCE ( avg( flow ), 0 ) AS flow,
COALESCE ( avg( travel_time ), 0 ) AS travel_time,
COALESCE ( avg( congest_index ), 0 ) AS congest_index
FROM
t_analysis_green_wave_week_data
WHERE
year_week = #{yearWeek}
<if test="greenIdList != null and greenIdList.size() > 0">
AND green_id IN
<foreach collection="greenIdList" item="greenId" open="(" close=")" separator=",">
#{greenId}
</foreach>
</if>
<if test="greenIdList == null or greenIdList.size() == 0">
AND 1 = 0
</if>
GROUP BY
green_id,
peak_type
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment