Commit f2673388 authored by fengyasheng's avatar fengyasheng

路口周报4.1.路口优化总体分析

parent c99c2857
package net.wanji.opt.common.enums;
public enum StrategyEnum {
NO_STRATEGY(0, "无策略"),
GREEN_LIGHT_IDLE(1, "绿灯空放"),
IMBALANCE(2, "失衡"),
OVERFLOW(3, "溢出"),
CONGESTION(4, "拥堵");
// 策略编号
private final int code;
// 策略名称
private final String name;
/**
* 构造函数
*
* @param code 策略编号
* @param name 策略名称
*/
StrategyEnum(int code, String name) {
this.code = code;
this.name = name;
}
/**
* 获取策略编号
*
* @return 策略编号
*/
public int getCode() {
return code;
}
/**
* 获取策略名称
*
* @return 策略名称
*/
public String getName() {
return name;
}
/**
* 根据编号获取对应的枚举实例
*
* @param code 策略编号
* @return 对应的枚举实例,如果未找到则返回 null
*/
public static StrategyEnum fromCode(int code) {
for (StrategyEnum strategy : values()) {
if (strategy.getCode() == code) {
return strategy;
}
}
return null; // 或者抛出异常:throw new IllegalArgumentException("未知的策略编号: " + code);
}
/**
* 根据名称获取对应的枚举实例
*
* @param name 策略名称
* @return 对应的枚举实例,如果未找到则返回 null
*/
public static StrategyEnum fromName(String name) {
for (StrategyEnum strategy : values()) {
if (strategy.getName().equals(name)) {
return strategy;
}
}
return null; // 或者抛出异常:throw new IllegalArgumentException("未知的策略名称: " + name);
}
/**
* 覆盖 toString 方法,方便打印枚举信息
*
* @return 枚举的字符串表示
*/
@Override
public String toString() {
return String.format("StrategyEnum[code=%d, name=%s]", code, name);
}
}
\ No newline at end of file
......@@ -13,9 +13,11 @@ import net.wanji.opt.controllerv2.report.design.CrossOptimizeAnalysisResult;
import net.wanji.opt.controllerv2.report.design.GreenWaveOptimizeAnalysisResult;
import net.wanji.opt.controllerv2.report.design.ImportCrossReportAnalysis;
import net.wanji.opt.controllerv2.report.design.ImportGreenReportAnalysis;
import net.wanji.opt.controllerv2.report.vo.CrossOptimizeResultResponseVO;
import net.wanji.opt.controllerv2.report.vo.GreenWaveOptimizeAnalysisResultResponseDTO;
import net.wanji.opt.controllerv2.report.vo.ImportGreenReportAnalysisResponseVO;
import net.wanji.opt.servicev2.report.AnalysisGreenWaveOptimizeWeekService;
import net.wanji.opt.servicev2.report.CrossRidLaneService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -38,12 +40,14 @@ import java.util.List;
@Api(value="CrossOptimizeAnalysisController", description="路口分析报告", tags = "路口分析报告-周报")
public class CrossOptimizeAnalysisController {
@Autowired
private CrossRidLaneService crossRidLaneService;
@ApiOperation(httpMethod="GET",value="4.1-路口优化-总体分析", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "crossIds", value = "干线ID,多个id用','分隔【为空时查询所有干线】", required = false, dataType = "String",defaultValue = "13NEJ0B5R80,13N650B5P30"),
@ApiImplicitParam(name = "crossIds", value = "干线ID,多个id用','分隔【为空时查询所有干线】", required = false, dataType = "String",defaultValue = "13MNM0B5OR0,13N650B5P30"),
@ApiImplicitParam(name = "year", value = "年份", required = true, dataType = "String",defaultValue = "2025"),
@ApiImplicitParam(name = "week", value = "一年的第几周", required = true, dataType = "String",defaultValue = "14"),
@ApiImplicitParam(name = "week", value = "一年的第几周", required = true, dataType = "String",defaultValue = "15"),
})
@GetMapping(value = "/getTotalityData")
@ApiResponses({
......@@ -52,7 +56,8 @@ public class CrossOptimizeAnalysisController {
public JsonViewObject getTotalityData(Integer year,Integer week,@RequestParam(required = false) String crossIds) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
List<CrossOptimizeResultResponseVO> resultResponseVOS = crossRidLaneService.getTotalityData(year,week,crossIds);
jsonViewObject.success(resultResponseVOS);
} 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 lombok.Data;
import java.util.Date;
@Data
public class AnalysisReportCrossOptimizeDetailVO{
/**
* 路口ID
*/
private String crossId;
/**
* 星期几:1~7代表周一至周日
*/
private Integer weekDay;
/**
* 优化时段开始时间
*/
private Date optimizeStartTime;
/**
* 优化时段截止时间
*/
private Date optimizeEndTime;
/**
* 策略类型 干线当前策略:1单条 2垂直 3平行
*/
private Integer stragetyId;
/**
* 策略时段内优化次数
*/
private Integer optimizeCount;
/**
* 策略时段内优化总时长,单位秒
*/
private Integer optimizeDuration;
/**
* 通行能力(辆)
*/
private Integer capacity;
/**
* 停车次数
*/
private Double stopTimes;
/**
* 延误时间,单位秒
*/
private Double delayTime;
/**
* 最大排队长度
*/
private Integer maxQueueLength;
/**
* 一年中的第几周
*/
private Integer yearWeek;
/**
* 一一年中的第几周,格式yyyyw,如20251
*/
private Date weekStartTime;
/**
* 一周的第二天
*/
private Date weekEndTime;
/**
* 数据插入时间
*/
private Date insertTime;
/**
* 上周通行能力(辆)
*/
private Integer lastWeekCapacity;
/**
* 上周停车次数
*/
private Double lastWeekStopTimes;
/**
* 上周延误时间,单位秒
*/
private Double lastWeekDelayTime;
/**
* 上周最大排队长度
*/
private Integer lastWeekMaxQueueLength;
/**
* 上周平均速度,单位km/h
*/
private Double lastWeekSpeed;
/**
* 上周拥堵指数
*/
private Double lastWeekCongestIndex;
/**
* 事件问题方向[]
*/
private String dirs;
}
package net.wanji.opt.controllerv2.report.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CrossOptimizeAnalysisDataVO {
@ApiModelProperty(value = "通行能力",example = "8900")
private Integer capacity ;
@ApiModelProperty(value = "停车次数",example = "5")
private Double stopTimes ;
@ApiModelProperty(value = "延误时间,单位秒",example = "40")
private Double delayTime ;
@ApiModelProperty(value = "最大排队长度",example = "6.9")
private Double maxQueueLength ;
}
\ No newline at end of file
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 CrossOptimizeResultResponseVO {
@ApiModelProperty(value = "路口名称", example = "经十路(舜耕路-山大路)",position = 0)
private String crossName;
@ApiModelProperty(value = "本周优化次数", example = "300",position = 1)
private String weekOptimizeCount;
@ApiModelProperty(value = "本周优化时长", example = "98",position = 2)
private String weekOptimizeDuration;
@ApiModelProperty(value = "本周溢出次数", example = "98",position = 3)
private String weekOptimizeOverflowCount;
@ApiModelProperty(value = "本周拥堵次数", example = "98",position = 4)
private String weekOptimizeCongestCount;
@ApiModelProperty(value = "本周空放优化次数", example = "98",position = 5)
private String weekOptimizeEmptyCount;
@ApiModelProperty(value = "本周失衡优化次数", example = "98",position = 6)
private String weekOptimizeUnbalanceCount;
@ApiModelProperty(value = "本周通行能力同比情况", example = "提升10%",position = 7)
private String weekCapacitySituation;
@ApiModelProperty(value = "本周通停车次数同比情况", example = "减少10%",position = 8)
private String weekStopTimesSituation;
@ApiModelProperty(value = "本周通延误时间同比情况", example = "增加10%",position = 9)
private String weekDelayTimeSituation;
@ApiModelProperty(value = "本周通最大排队同比情况", example = "降低10%",position = 10)
private String weekMaxQueueLengthSituation;
@ApiModelProperty(value = "本周总体情况", example = "明显提升",position = 11)
private String weekTotalitySituation;
//================================================================================================//
@ApiModelProperty(value = "时段列表",example = "[\"本周\",\"上周\"]")
private List<String> timeList = new ArrayList<>();
private List<CrossOptimizeAnalysisDataVO> dataList=new ArrayList<>();
}
\ No newline at end of file
package net.wanji.opt.dao.mapper.report;
import net.wanji.opt.controllerv2.report.vo.AnalysisReportCrossOptimizeDetailVO;
import net.wanji.opt.controllerv2.report.vo.CrossPeakAnalysis;
import net.wanji.opt.entity.report.AnalysisReportCrossOptimizeDetail;
import net.wanji.opt.entity.report.AnalysisReportCrossPeakDetail;
import net.wanji.opt.entity.report.CrossRidLaneDTO;
import org.apache.ibatis.annotations.Param;
......@@ -13,4 +15,6 @@ public interface CrossRidLaneMapper {
List<CrossPeakAnalysis> getTotalitySituation(@Param("crossIdList") List<String> crossIdList,@Param("yearWeek") Integer yearWeek,@Param("dayType") String dayType,@Param("peakType") String peakType);
List<AnalysisReportCrossPeakDetail> getPeakData(@Param("crossIdList") List<String> crossIdList,@Param("yearWeek") Integer yearWeek);
List<AnalysisReportCrossOptimizeDetailVO> getTotalityData(@Param("yearWeek") Integer yearWeek, @Param("crossIdList") List<String> crossIdList);
}
package net.wanji.opt.servicev2.report;
import com.alibaba.fastjson.JSONObject;
import net.wanji.opt.controllerv2.report.vo.CrossOptimizeResultResponseVO;
import net.wanji.opt.controllerv2.report.vo.CrossRunStateAnalysisResultResponseDTO;
import net.wanji.opt.controllerv2.report.vo.CrossRunStatePeakResultResponseVO;
import net.wanji.opt.vo2.report.CrossRidLaneResult;
......@@ -13,4 +14,6 @@ public interface CrossRidLaneService {
CrossRunStateAnalysisResultResponseDTO getTotalitySituation(String crossIds, Integer year, Integer week);
List<CrossRunStatePeakResultResponseVO> getPeakData(String crossIds, Integer year, Integer week);
List<CrossOptimizeResultResponseVO> getTotalityData(Integer year, Integer week, String crossIds);
}
......@@ -68,5 +68,19 @@
</foreach>
</if>
</select>
<select id="getTotalityData" resultType="net.wanji.opt.controllerv2.report.vo.AnalysisReportCrossOptimizeDetailVO">
SELECT
*
FROM
t_analysis_report_cross_optimize_detail
WHERE
year_week = #{yearWeek}
<if test="crossIdList != null">
AND cross_id IN
<foreach collection="crossIdList" open="(" separator="," close=")" item="crossId">
#{crossId}
</foreach>
</if>
</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