Commit a2d6a89b authored by 黄伟铭's avatar 黄伟铭

Merge remote-tracking branch 'origin/master'

parents 716b430a f9bdf634
......@@ -71,16 +71,22 @@ public class EsDateIndexUtil {
List<String> sortedSet = new ArrayList<>();
//===========================根据开始、结束时间输出完整时刻点=================================================//
DateTime start = DateTime.parse(startTime, DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER));
//对于输入时间不是整5分钟情况,规约到5分钟
String formatStartDate = startTime.substring(0,startTime.indexOf(" ")+1) + Tools.fillZeroFront(start.getHourOfDay()+"",2)+":"+Tools.fillZeroFront((int)Math.ceil(start.getMinuteOfHour()/5)*5+"",2)+":00";
start = DateTime.parse(formatStartDate, DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER));
DateTime end = DateTime.parse(endTime, DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER));
if (Objects.equals("0", groupType)) {
//对于输入时间不是整5分钟情况,规约到5分钟
String formatStartDate = startTime.substring(0,startTime.indexOf(" ")+1) + Tools.fillZeroFront(start.getHourOfDay()+"",2)+":"+Tools.fillZeroFront((int)Math.ceil(start.getMinuteOfHour()/5)*5+"",2)+":00";
start = DateTime.parse(formatStartDate, DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER));
sortedSet.addAll(EsDateIndexUtil.getTimeScopeList(start, end, TimeGranularityEnum.FIVE_MINUTE, "yyyy-MM-dd HH:mm:00"));
} else if (Objects.equals("1", groupType)) {
//对于输入时间不是整5分钟情况,规约到15分钟
String formatStartDate = startTime.substring(0,startTime.indexOf(" ")+1) + Tools.fillZeroFront(start.getHourOfDay()+"",2)+":"+Tools.fillZeroFront((int)Math.ceil(start.getMinuteOfHour()/15)*15+"",2)+":00";
start = DateTime.parse(formatStartDate, DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER));
sortedSet.addAll(EsDateIndexUtil.getTimeScopeList(start, end, TimeGranularityEnum.FIFTEEN_MINUTE, "yyyy-MM-dd HH:mm:00"));
} else if (Objects.equals("2", groupType)) {
//对于输入时间不是整5分钟情况,规约到30分钟
String formatStartDate = startTime.substring(0,startTime.indexOf(" ")+1) + Tools.fillZeroFront(start.getHourOfDay()+"",2)+":"+Tools.fillZeroFront((int)Math.ceil(start.getMinuteOfHour()/30)*30+"",2)+":00";
start = DateTime.parse(formatStartDate, DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER));
sortedSet.addAll(EsDateIndexUtil.getTimeScopeList(start, end, TimeGranularityEnum.THIRTY_MINUTE, "yyyy-MM-dd HH:mm:00"));
} else if (Objects.equals("3", groupType)) {
sortedSet.addAll(EsDateIndexUtil.getTimeScopeList(start, end, TimeGranularityEnum.ONE_HOUR, "yyyy-MM-dd HH:00:00"));
......
package net.wanji.opt.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Objects;
/**
* @author duanruiming
* @date 2024/12/11 20:33
*/
@Getter
@AllArgsConstructor
public enum ConsgestionStatusEnum {
AMBLE_STATUS(2, "缓行"),
CONSGESTION_STATUS(3, "拥堵");
private Integer code;
private String desc;
public static String getDesc(Integer code) {
for (ConsgestionStatusEnum value : ConsgestionStatusEnum.values()) {
if (Objects.equals(code, value.getCode())) {
return value.getDesc();
}
}
return ConsgestionStatusEnum.AMBLE_STATUS.getDesc();
}
}
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 "";
}
}
......@@ -33,6 +33,6 @@ public enum RoadLevelEnum {
return value.desc;
}
}
return "";
return URBAN_SECONDARY_ROAD.desc;
}
}
package net.wanji.opt.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Objects;
/**
* @author duanruiming
* @date 2024/12/11 20:33
*/
@Getter
@AllArgsConstructor
public enum WeekEnum {
MON(1, "周一"),
TUE(2, "周二"),
WED(3, "周三"),
THU(4, "周四"),
FRI(5, "周五"),
SAT(6, "周六"),
SUN(7, "周日");
private Integer code;
private String desc;
public static String getDesc(Integer code) {
for (WeekEnum value : WeekEnum.values()) {
if (Objects.equals(code, value.getCode())) {
return value.getDesc();
}
}
return WeekEnum.MON.getDesc();
}
}
package net.wanji.opt.constant;
/**
* @author fengyi
* @date 2025/4/8
* @description
*/
public enum PeakEnum {
AM_PEAK(1, "早高峰"),
PM_PEAK(2,"晚高峰"),
PF_PEAK(3,"平峰");
private Integer code;
private String name;
PeakEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
public static PeakEnum getNameByCode(Integer code){
for (PeakEnum abnormalEnum : PeakEnum.values()) {
if(abnormalEnum.getCode().equals(code)){
return abnormalEnum;
}
}
return null;
}
public Integer getCode() {
return code;
}
public String getName() {
return name;
}
}
package net.wanji.opt.constant;
/**
* @author fengyi
* @date 2025/4/8
* @description
*/
public enum WeekDayEnum {
MONDAY(1, "周一"),
TUESDAY(2,"周二"),
WEDNESDAY(3,"周三"),
THURSDAY(4,"周四"),
FRIDAY(5,"周五"),
SATURDAY(6,"周六"),
SUNDAY(7,"周日");
private Integer code;
private String name;
WeekDayEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
public static WeekDayEnum getNameByCode(Integer code){
for (WeekDayEnum abnormalEnum : WeekDayEnum.values()) {
if(abnormalEnum.getCode().equals(code)){
return abnormalEnum;
}
}
return null;
}
public Integer getCode() {
return code;
}
public String getName() {
return name;
}
}
package net.wanji.opt.controllerv2.report;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.controllerv2.report.design.GreenReportProblemDetailAnalysis;
import net.wanji.opt.controllerv2.report.design.GreenReportProblemOverallAnalysis;
import net.wanji.opt.controllerv2.report.design.GreenWaveOptimizeAnalysisResult;
import net.wanji.opt.controllerv2.report.design.ImportGreenReportAnalysis;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 干线概况 接口API
* </p>
* @version 1.0
* @author
* @Date 2025-03-18
*/
@RestController
@Slf4j
@RequestMapping("/green-wave-optimize")
@Api(value="GreenWaveOptimizeAnalysisController", description="干线分析报告接口", tags = "干线分析报告-周报")
public class GreenWaveOptimizeAnalysisController {
@ApiOperation(httpMethod="GET",value="5.1-干线优化-总体分析", notes="")
@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"),
})
@GetMapping(value = "/getTotalityData")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenWaveOptimizeAnalysisResult.class),
})
public JsonViewObject getTotalityData(Integer year,Integer week, String ids) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
} catch (Exception e) {
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonViewObject;
}
@ApiOperation(httpMethod="GET",value="5.2-重点干线优化分析", notes="")
@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"),
})
@GetMapping(value = "/getProblemDetail")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = ImportGreenReportAnalysis.class),
})
public JsonViewObject getProblemDetail(Integer year,Integer week, String ids) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
} catch (Exception e) {
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonViewObject;
}
}
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);
......
......@@ -9,13 +9,19 @@ import io.swagger.annotations.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.controllerv2.report.design.GreenReportOverviewAnalysisResult;
import net.wanji.opt.controllerv2.report.design.GreenReportProblemDetailAnalysis;
import net.wanji.opt.controllerv2.report.design.GreenReportProblemOverallAnalysis;
import net.wanji.opt.controllerv2.report.vo.GreenReportProblemDetailAnalysisResult;
import net.wanji.opt.controllerv2.report.vo.GreenReportProblemOverallAnalysisResult;
import net.wanji.opt.servicev2.judgeanalysis.AnalysisGreenCongestionPeriodService;
import org.springframework.beans.factory.annotation.Autowired;
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.List;
/**
* <p>
* 干线概况 接口API
......@@ -30,21 +36,25 @@ import org.springframework.web.bind.annotation.RestController;
@Api(value="GreenWaveProblemAnalysisController", description="干线分析报告接口", tags = "干线分析报告-周报")
public class GreenWaveProblemAnalysisController {
@Autowired
private AnalysisGreenCongestionPeriodService analysisGreenCongestionPeriodService;
@ApiOperation(httpMethod="GET",value="4.1-干线问题-总体分析", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔【为空时查询所有干线】", required = true, dataType = "String",defaultValue = "1,2"),
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔【为空时查询所有干线】", required = false, 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 = "/getProblemData")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenReportProblemOverallAnalysis.class),
})
public JsonViewObject getGreenInfoList(Integer year,Integer week, String ids) {
public JsonViewObject getGreenInfoList(Integer year,Integer week,@RequestParam(required = false) String ids) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
GreenReportProblemOverallAnalysisResult greenReportProblemOverallAnalysisResult = analysisGreenCongestionPeriodService.selectListByWeek(year,week,ids);
jsonViewObject.success(greenReportProblemOverallAnalysisResult);
} catch (Exception e) {
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
......@@ -55,18 +65,19 @@ public class GreenWaveProblemAnalysisController {
//GreenReportProblemDetailAnalysis
@ApiOperation(httpMethod="GET",value="4.2-干线问题-问题详情", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔【为空时查询所有干线】", required = true, dataType = "String",defaultValue = "1,2"),
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔【为空时查询所有干线】", required = false, 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 = "/getProblemDetail")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenReportProblemDetailAnalysis.class),
})
public JsonViewObject getProblemDetail(Integer year,Integer week, String ids) {
public JsonViewObject getProblemDetail(Integer year,Integer week,@RequestParam(required = false) String ids) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
List<GreenReportProblemDetailAnalysisResult> greenReportProblemDetailAnalysisResponseList = analysisGreenCongestionPeriodService.getProblemDetail(year,week,ids);
jsonViewObject.success(greenReportProblemDetailAnalysisResponseList);
} catch (Exception e) {
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
......
......@@ -12,12 +12,17 @@ import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.controllerv2.report.design.GreenReportOverviewAnalysisResult;
import net.wanji.opt.controllerv2.report.design.GreenReportRunStateResult;
import net.wanji.opt.controllerv2.report.design.GreenReportSamePeriodCompareResult;
import net.wanji.opt.servicev2.report.AnalysisGreenWavePeakDetailService;
import net.wanji.opt.servicev2.report.GreenWaveCrossRidService;
import net.wanji.opt.vo2.report.GreenReportRunStateResponseVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>
* 干线概况 接口API
......@@ -32,6 +37,8 @@ import org.springframework.web.bind.annotation.RestController;
@Api(value="GreenWaveRunStateController", description="干线分析报告接口", tags = "干线分析报告-周报")
public class GreenWaveRunStateController {
@Resource
private AnalysisGreenWavePeakDetailService analysisGreenWavePeakDetailService;
@ApiOperation(httpMethod="GET",value="3.1-干线运行分析", notes="")
@ApiImplicitParams({
......@@ -43,10 +50,11 @@ public class GreenWaveRunStateController {
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenReportRunStateResult.class),
})
public JsonViewObject getData(Integer year,Integer week, String ids) {
public JsonViewObject getData(String ids,Integer year,Integer week) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
try {
List<GreenReportRunStateResponseVO> list = analysisGreenWavePeakDetailService.selectWeekRunStateSituation(ids,year,week);
jsonViewObject.success(list);
} catch (Exception e) {
jsonViewObject.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
......
......@@ -33,6 +33,12 @@ public class GreenReportProblemDetailAnalysis extends ParentResult {
@Data
class GreenReportProblemDetailAnalysisResponse {
@ApiModelProperty(value = "干线ID", example = "")
private String greenId;
@ApiModelProperty(value = "干线名称", example = "经十路(舜耕路-山大路)")
private String greenName;
@ApiModelProperty(value = "干线工作日拥堵时段分布情况", example = "7:00~8:00,12:00~13:30,17:30~18:40")
private String workDayCongestSpan;
......
......@@ -42,7 +42,7 @@ class GreenReportProblemOverallAnalysisResponse {
@ApiModelProperty(value = "拥堵严重干线",example = "经十路(舜耕路-山大路)、经十路(洪山路-舜华路)")
private String congestHeavyGreenWave;
private List<GreenReportSamePeriodData> dataList = new ArrayList<>();
private List<GreenReportProblemOverallData> dataList = new ArrayList<>();
}
......@@ -50,9 +50,11 @@ class GreenReportProblemOverallAnalysisResponse {
@Data
class GreenReportProblemOverallData {
@ApiModelProperty(value = "排序", example = "")
private String sort;
@ApiModelProperty(value = "干线ID", example = "")
private String greenId;
@ApiModelProperty(value = "干线名称", example = "")
@ApiModelProperty(value = "干线名称", example = "经十路(舜耕路-山大路)")
private String greenName;
List<GreenWaveDirProblemData> list = new ArrayList<>();
......
......@@ -36,7 +36,7 @@ class GreenReportRunStateResponse {
@ApiModelProperty(value = "干线ID", example = "")
private String greenId;
@ApiModelProperty(value = "干线名称", example = "")
@ApiModelProperty(value = "干线名称", example = "经十路(舜耕路-山大路)")
private String greenName;
@ApiModelProperty(value = "本周早高峰时段集中情况", example = "7:30~8:30")
......
......@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.opt.controllerv2.judgeanalysis.design.response.ParentResult;
import net.wanji.opt.controllerv2.report.vo.GreenReportSamePeriodData;
import java.util.ArrayList;
import java.util.List;
......@@ -52,13 +53,13 @@ class GreenReportSamePeriodCompareDataResponse {
private String pmTravelTimeSituation;
private List<GreenReportSamePeriodData> dataList = new ArrayList<>();
private List<GreenReportSamePeriodDataBody> dataList = new ArrayList<>();
}
@Data
class GreenReportSamePeriodData {
class GreenReportSamePeriodDataBody {
@ApiModelProperty(value = "峰期类型 早高峰、晚高峰、全天", example = "早高峰")
private String peakName;
......
package net.wanji.opt.controllerv2.report.design;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.opt.controllerv2.judgeanalysis.design.response.ParentResult;
import java.util.ArrayList;
import java.util.List;
@Data
public class GreenWaveOptimizeAnalysisResult extends ParentResult {
private GreenWaveOptimizeAnalysisResultResponse content;
public GreenWaveOptimizeAnalysisResultResponse getContent() {
return content;
}
public GreenWaveOptimizeAnalysisResult setContent(GreenWaveOptimizeAnalysisResultResponse content) {
this.content = content;
return this;
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}
@Data
class GreenWaveOptimizeAnalysisResultResponse {
@ApiModelProperty(value = "干线ID", example = "")
private String greenId;
@ApiModelProperty(value = "干线名称", example = "经十路(舜耕路-山大路)")
private String greenName;
@ApiModelProperty(value = "本周优化次数", example = "300次")
private String weekOptimizeCount;
@ApiModelProperty(value = "本周优化时长", example = "98小时")
private String weekOptimizeDuration;
@ApiModelProperty(value = "本周通行能力同比情况", example = "提升10%")
private String weekCapacitySituation;
@ApiModelProperty(value = "本周通停车次数同比情况", example = "减少10%")
private String weekStopTimesSituation;
@ApiModelProperty(value = "本周通行程时间数同比情况", example = "增加10%")
private String weekTravelTimeSituation;
@ApiModelProperty(value = "本周通延误时间同比情况", example = "增加10%")
private String weekDelayTimeSituation;
@ApiModelProperty(value = "本周通平均速度同比情况", example = "降低10%")
private String weekAvgSpeedSituation;
@ApiModelProperty(value = "本周总体情况", example = "降低10%")
private String weekTotalitySituation;
//================================================================================================//
@ApiModelProperty(value = "时段列表",example = "[\"本周\",\"上周\"]")
private List<String> timeList = new ArrayList<>();
private List<GreenWaveOptimizeAnalysisData> dataList=new ArrayList<>();
}
@Data
class GreenWaveOptimizeAnalysisData {
@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 travelTime ;
@ApiModelProperty(value = "平均速度",example = "39")
private Double avgSpeed ;
}
package net.wanji.opt.controllerv2.report.design;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.opt.controllerv2.judgeanalysis.design.response.ParentResult;
import java.util.ArrayList;
import java.util.List;
@Data
public class ImportGreenReportAnalysis extends ParentResult {
private List<ImportGreenReportAnalysisResponse> content;
public List<ImportGreenReportAnalysisResponse> getContent() {
return content;
}
public ImportGreenReportAnalysis setContent(List<ImportGreenReportAnalysisResponse> content) {
this.content = content;
return this;
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}
@Data
class ImportGreenReportAnalysisResponse {
@ApiModelProperty(value = "干线ID", example = "")
private String greenId;
@ApiModelProperty(value = "干线名称", example = "经十路(舜耕路-山大路)")
private String greenName;
@ApiModelProperty(value = "本周优化集中时段分布情况", example = "7:00~8:00,12:00~13:30,17:30~18:40")
private String optimizeSpan;
@ApiModelProperty(value = "本周平均通行能力", example = "7800辆/小时")
private String avgCapacity;
@ApiModelProperty(value = "平均通行能力与上周相比情况",example = "提升")
private String avgCapacityCompareSituation;
//================================================================================================//
@ApiModelProperty(value = "本周平均拥堵指数", example = "2.3")
private String avgCongestIndex;
@ApiModelProperty(value = "平均拥堵指数与上周相比情况", example = "增加【减少】10%")
private String avgCongestIndexCompare;
//================================================================================================//
@ApiModelProperty(value = "本周平均速度", example = "2.3")
private String avgSpeed;
@ApiModelProperty(value = "本周平均速度与上周相比情况", example = "提升【降低】10%")
private String avgSpeedCompare;
//================================================================================================//
@ApiModelProperty(value = "本周行程时间", example = "15")
private String avgTravelTime;
@ApiModelProperty(value = "本周平均行程时间与上周相比情况", example = "增加【减少】2分钟")
private String avgTravelTimeCompare;
//================================================================================================//
@ApiModelProperty(value = "本周总体效果情况", example = "明显提升")
private String weekTotalitySituation;
private List<ImportGreenReportAnalysisData> dataList = new ArrayList<>();
}
@Data
class ImportGreenReportAnalysisData {
@ApiModelProperty(value = "星期", example = "星期一")
private String weekName;
@ApiModelProperty(value = "策略优化时段", example = "7:35~8:40")
private String optimizeTimeSpan;
@ApiModelProperty(value = "本周通行能力", example = "3466")
private Integer thisWeekCapacity;
@ApiModelProperty(value = "上周通行能力", example = "5600")
private Integer lastWeekCapacity;
@ApiModelProperty(value = "本周拥堵指数", example = "3.5")
private Double thisWeekCongestIndex;
@ApiModelProperty(value = "上周拥堵指数", example = "3.0")
private Double lastWeekCongestIndex;
@ApiModelProperty(value = "本周平均车速km/h", example = "30.5")
private Double thisWeekAvgSpeed;
@ApiModelProperty(value = "上周平均车速km", example = "30.2")
private Double lastWeekAvgSpeed;
@ApiModelProperty(value = "本周行程时间(分钟)", example = "6.5")
private Double thisWeekTravelTime;
@ApiModelProperty(value = "上周行程时间(分钟)", example = "-1.5%")
private Double lastWeekTravelTime;
}
package net.wanji.opt.controllerv2.report.util;
import lombok.Data;
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
public class TimeIntervalMerger {
// 定义时间区间类
@Data
static class TimeInterval {
private LocalTime start;
private LocalTime end;
public TimeInterval(LocalTime start, LocalTime end) {
this.start = start;
this.end = end;
}
// 判断两个区间是否重叠
public boolean overlapsWith(TimeInterval other) {
return !this.end.isBefore(other.start) && !other.end.isBefore(this.start);
}
// 合并两个区间
public TimeInterval mergeWith(TimeInterval other) {
return new TimeInterval(
this.start.isBefore(other.start) ? this.start : other.start,
this.end.isAfter(other.end) ? this.end : other.end
);
}
// 计算时间段的持续时间(以秒为单位)
public long getDurationInSeconds() {
return Duration.between(start, end).getSeconds();
}
}
// 定义支持单个数字小时部分的 DateTimeFormatter
private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("H:mm");
public static String timeString(List<String> timeStrings) {
// 解析时间字符串为 TimeInterval 对象
List<TimeInterval> intervals = timeStrings.stream()
.map(timeStr -> {
String[] parts = timeStr.split("~");
LocalTime start = LocalTime.parse(parts[0].trim(), TIME_FORMATTER);
LocalTime end = LocalTime.parse(parts[1].trim(), TIME_FORMATTER);
return new TimeInterval(start, end);
})
.sorted(Comparator.comparing(TimeInterval::getStart)) // 按开始时间排序
.collect(Collectors.toList());
// 合并重叠的区间
List<TimeInterval> mergedIntervals = new ArrayList<>();
for (TimeInterval current : intervals) {
if (mergedIntervals.isEmpty() || !current.overlapsWith(mergedIntervals.get(mergedIntervals.size() - 1))) {
mergedIntervals.add(current); // 如果不重叠,直接添加
} else {
// 如果重叠,合并当前区间与最后一个区间
TimeInterval last = mergedIntervals.get(mergedIntervals.size() - 1);
mergedIntervals.set(mergedIntervals.size() - 1, last.mergeWith(current));
}
}
// 按时间段长度从大到小排序
mergedIntervals.sort((t1, t2) -> Long.compare(t2.getDurationInSeconds(), t1.getDurationInSeconds()));
// 截取前三个时间段
List<TimeInterval> topThreeIntervals = mergedIntervals.stream()
.limit(3)
.sorted(Comparator.comparing(TimeInterval::getStart)) // 按开始时间重新排序
.collect(Collectors.toList());
// 拼接结果字符串
StringBuilder result = new StringBuilder();
for (int i = 0; i < topThreeIntervals.size(); i++) {
TimeInterval interval = topThreeIntervals.get(i);
if (i > 0) {
result.append(",");
}
result.append(interval.getStart()).append("~").append(interval.getEnd());
}
return result.toString();
}
// 测试代码
public static void main(String[] args) {
List<String> timeStrings = Arrays.asList(
"7:00~8:00",
"12:00~13:30",
"17:30~18:40",
"7:30~9:00",
"17:00~18:00"
);
String result = timeString(timeStrings);
System.out.println(result); // 输出结果
}
}
\ 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;
import java.util.Date;
@Data
@ApiModel(description = "绿波干线高峰时段分析实体类")
public class AnalysisGreenCongestionPeriodVO {
@ApiModelProperty(value = "干线ID", example = "1")
private Integer greenId;
@ApiModelProperty(value = "干线车流运行方向 (w2e/e2w/s2n/n2s)", example = "w2e")
private String roadDirection;
@ApiModelProperty(value = "星期几:1~7代表周一至周日", example = "1")
private Integer weekDay;
@ApiModelProperty(value = "拥堵开始时间", example = "2025-04-07 08:00:00")
private Date congestStartTime;
@ApiModelProperty(value = "拥堵截止时间", example = "2025-04-07 10:00:00")
private Date congestEndTime;
@ApiModelProperty(value = "平均拥堵指数", example = "1.5")
private Double congestIndex;
@ApiModelProperty(value = "拥堵类型:2缓行;3拥堵", example = "2")
private Integer status;
@ApiModelProperty(value = "行程时间,单位秒", example = "3600")
private Integer travelTime;
@ApiModelProperty(value = "平均速度 (km/h)", example = "40.5")
private Double speed;
@ApiModelProperty(value = "高峰类型:1早高峰;2晚高峰", example = "1")
private String peakType;
@ApiModelProperty(value = "一年中的第几周,格式yyyyw,如20251", example = "20251")
private Integer yearWeek;
@ApiModelProperty(value = "一周的第一天", example = "2025-04-07 00:00:00")
private Date weekStartTime;
@ApiModelProperty(value = "一周的最后一天", example = "2025-04-13 23:59:59")
private Date weekEndTime;
@ApiModelProperty(value = "数据插入时间", example = "2025-04-07 12:30:00")
private Date insertTime;
}
\ No newline at end of file
......@@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.RequestParam;
public class AreaParamBody {
@ApiModelProperty(value = "区域名称", example = "",required = true)
String name;
@ApiModelProperty(required = true,value = "区域边界坐标,格式:x1,y1;...;xn,yn", example = "117.049347926,36.654744674;117.066122093,36.654772445;117.0800809517208,36.65440636491661;117.07979265456723,36.65214909599633;117.07706941120558,36.63829789737139;117.07414217382905,36.63736765765722;117.0707410731053,36.636677059391445;117.06550839703021,36.63722151604908;117.06267677771574,36.63667912391616;117.0577271202223,36.63483777099411;117.05251580910459,36.63437969486462;117.04433347163972,36.63696466063367;117.04843387376732,36.637934238407;117.04968488845323,36.638408635754985;117.049347926,36.654744674;117.066122093,36.654772445;117.0800809517208,36.65440636491661;117.07979265456723,36.65214909599633;117.07706941120558,36.63829789737139;117.07414217382905,36.63736765765722;117.0707410731053,36.636677059391445;117.06550839703021,36.63722151604908;117.06267677771574,36.63667912391616;117.0577271202223,36.63483777099411;117.05251580910459,36.63437969486462;117.04433347163972,36.63696466063367;117.04843387376732,36.637934238407;117.04968488845323,36.638408635754985;117.049347926,36.654744674")
......
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 GreenReportProblemDetailAnalysisResult {
@ApiModelProperty(value = "干线ID", example = "")
private String greenId;
@ApiModelProperty(value = "干线名称", example = "经十路(舜耕路-山大路)")
private String greenName;
@ApiModelProperty(value = "干线工作日拥堵时段分布情况", example = "7:00~8:00,12:00~13:30,17:30~18:40")
private String workDayCongestSpan;
@ApiModelProperty(value = "干线工作日平均拥堵时长", example = "1小时")
private String workDayAvgCongestTime;
@ApiModelProperty(value = "干线工作日平均拥堵指数",example = "3.5")
private String workDayAvgCongestIndex;
//================================================================================================//
@ApiModelProperty(value = "干线工作日缓行时段分布情况", example = "7:00~8:00,12:00~13:30,17:30~18:40")
private String workDaySlowRunSpan;
@ApiModelProperty(value = "干线工作日平均缓行时长", example = "0.5小时")
private String workDayAvgSlowRunTime;
@ApiModelProperty(value = "干线工作日缓行平均拥堵指数",example = "3.5")
private String workDayAvgSlowAvgCongestIndex;
//================================================================================================//
@ApiModelProperty(value = "干线周末拥堵时段分布情况", example = "7:00~8:00,12:00~13:30,17:30~18:40")
private String weekEndCongestSpan;
@ApiModelProperty(value = "干线周末平均拥堵时长", example = "1小时")
private String weekEndAvgCongestTime;
@ApiModelProperty(value = "干线周末平均拥堵指数",example = "3.5")
private String weekEndAvgCongestIndex;
//================================================================================================//
@ApiModelProperty(value = "干线周末缓行时段分布情况", example = "7:00~8:00,12:00~13:30,17:30~18:40")
private String weekEndSlowRunSpan;
@ApiModelProperty(value = "干线周末平均缓行时长", example = "0.5小时")
private String weekEndAvgSlowRunTime;
@ApiModelProperty(value = "干线周末缓行平均拥堵指数",example = "3.5")
private String weekEndAvgSlowAvgCongestIndex;
private List<GreenReportProblemDetailVO> 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 GreenReportProblemDetailVO {
@ApiModelProperty(value = "星期", example = "周一")
private String week;
@ApiModelProperty(value = "问题时段", example = "7:35~8:40")
private String problemSpan;
@ApiModelProperty(value = "状态:缓行/拥堵", example = "拥堵")
private String status;
@ApiModelProperty(value = "拥堵指数", example = "4.5")
private Double congestIndex;
@ApiModelProperty(value = "平均速度", example = "10")
private Double avgSpeed;
@ApiModelProperty(value = "行程时间,单位分钟", example = "10")
private Integer travelTime;
}
\ 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 GreenReportProblemOverallAnalysisResult {
@ApiModelProperty(value = "区域干线总拥堵次数", example = "56次")
private String totalCongestCount;
@ApiModelProperty(value = "区域干线总拥堵时长", example = "11小时")
private String totalCongestDuration;
@ApiModelProperty(value = "拥堵严重干线",example = "经十路(舜耕路-山大路)、经十路(洪山路-舜华路)")
private String congestHeavyGreenWave;
private List<GreenReportProblemOverallDataVO> dataList = new ArrayList<>();
}
\ 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 GreenReportProblemOverallDataVO {
@ApiModelProperty(value = "排序", example = "")
private String sort;
@ApiModelProperty(value = "干线ID", example = "")
private String greenId;
@ApiModelProperty(value = "干线名称", example = "经十路(舜耕路-山大路)")
private String greenName;
List<GreenWaveDirProblemDataVO> list = new ArrayList<>();
}
\ 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
class GreenReportRunStateResponseDTO {
@ApiModelProperty(value = "干线ID", example = "")
private String greenId;
@ApiModelProperty(value = "干线名称", example = "经十路(舜耕路-山大路)")
private String greenName;
@ApiModelProperty(value = "本周早高峰时段集中情况", example = "7:30~8:30")
private String weekAmPeakSpan;
@ApiModelProperty(value = "本周早高峰时段开始时间同比(上周)情况", example = "提前20分钟")
private String amStartSameRatioSituation;
@ApiModelProperty(value = "本周早高峰时段截止时间同比(上周)情况", example = "延后20分钟")
private String amEndSameRatioSituation;
@ApiModelProperty(value = "本周早高峰时段持续时长", example = "45分钟")
private String amDuration;
@ApiModelProperty(value = "本周早高峰时段持续时长同比(上周)情况", example = "增加5分钟")
private String amDurationSameRatioSituation;
@ApiModelProperty(value = "本周早高峰最大行程时间", example = "30分钟")
private String amMaxTravelTime;
@ApiModelProperty(value = "本周早高峰最大行程时间同比(上周)情况", example = "减少6分钟")
private String amMaxTravelTimeSameRatioSituation;
@ApiModelProperty(value = "平均拥堵指数", example = "4.5")
private String amAvgContestIndex;
@ApiModelProperty(value = "平均拥堵指数同比(上周)情况", example = "减少0.5")
private String amAvgContestIndexSameRatioSituation;
@ApiModelProperty(value = "本周早高峰时段集中情况", example = "7:30~8:30")
private String weekPmPeakSpan;
@ApiModelProperty(value = "本周早高峰时段开始时间同比(上周)情况", example = "提前20分钟")
private String pmStartSameRatioSituation;
@ApiModelProperty(value = "本周早高峰时段截止时间同比(上周)情况", example = "延后20分钟")
private String pmEndSameRatioSituation;
@ApiModelProperty(value = "本周早高峰时段持续时长", example = "45分钟")
private String pmDuration;
@ApiModelProperty(value = "本周早高峰时段持续时长同比(上周)情况", example = "增加5分钟")
private String pmDurationSameRatioSituation;
@ApiModelProperty(value = "本周早高峰最大行程时间", example = "30分钟")
private String pmMaxTravelTime;
@ApiModelProperty(value = "本周早高峰最大行程时间同比(上周)情况", example = "减少6分钟")
private String pmMaxTravelTimeSameRatioSituation;
@ApiModelProperty(value = "平均拥堵指数", example = "4.5")
private String pmAvgContestIndex;
@ApiModelProperty(value = "平均拥堵指数同比(上周)情况", example = "减少0.5")
private String pmAvgContestIndexSameRatioSituation;
private List<GreenReportRunStatedDataDTO> dataList = new ArrayList<>();
}
package net.wanji.opt.controllerv2.report.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
class GreenReportRunStatedDataDTO {
@ApiModelProperty(value = "星期", example = "星期一")
private String weekName;
@ApiModelProperty(value = "峰期类型 早高峰、晚高峰、全天", example = "早高峰")
private String peakName;
@ApiModelProperty(value = "本周拥堵时段", example = "7:35~8:40")
private String thisWeekCongestSpan;
@ApiModelProperty(value = "上周拥堵时段", example = "7:50~8:40")
private String lastWeekCongestSpan;
@ApiModelProperty(value = "本周拥堵指数", example = "3.5")
private Double thisWeekCongestIndex;
@ApiModelProperty(value = "上周拥堵指数", example = "3.0")
private Double lastWeekCongestIndex;
@ApiModelProperty(value = "本周平均车速km/h", example = "30.5")
private Double thisWeekAvgSpeed;
@ApiModelProperty(value = "上周平均车速km", example = "30.2")
private Double lastWeekAvgSpeed;
@ApiModelProperty(value = "本周行程时间(分钟)", example = "6.5")
private Double thisWeekTravelTime;
@ApiModelProperty(value = "上周行程时间(分钟)", example = "-1.5%")
private Double lastWeekTravelTime;
}
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.ApiModelProperty;
import lombok.Data;
@Data
public class GreenWaveDirProblemDataVO {
@ApiModelProperty(value = "干线类型", example = "主干路")
private String greenWaveType;
@ApiModelProperty(value = "方向", example = "东向西")
private String dir;
@ApiModelProperty(value = "拥堵指数", example = "4.5")
private Double congestIndex;
@ApiModelProperty(value = "拥堵次数", example = "10")
private Integer congestCount;
@ApiModelProperty(value = "拥堵时长,单位秒", example = "10")
private Integer congestDuration;
}
\ 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 = "1")
private Integer greenId ;
@ApiModelProperty(value = "干线名称",example = "")
private String greenName ;
@ApiModelProperty(value = "干线路段长度,单位米",example = "232.5")
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
......@@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.entity.eventoptimize.TEventOptimizeInfo;
import net.wanji.opt.entity.strategy.StrategyParameterConfig;
import net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo;
......@@ -218,4 +219,38 @@ public class StrategyPriorityController {
return jsonView;
}
@ApiOperation(value = "策略管理-策略参数配置批量保存", notes = "批量保存", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON,hidden = false)
@ApiImplicitParams({
@ApiImplicitParam(name = "strategyPriorityGroup", value = "参数配置数据", required = false, dataType = "String"),
})
@PostMapping("/saveParamterConfig")
public JsonViewObject saveParamterConfig(@RequestBody StrategyPriorityGroup strategyPriorityGroup){
JsonViewObject jsonView = JsonViewObject.newInstance();
try {
strategyPriorityService.saveParamterConfig(strategyPriorityGroup);
jsonView.success();
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("SAVE_FAILED_MSG"));
log.error("{} StrategyPriorityController-saveParamterConfig", this.getClass().getSimpleName(), e);
}
return jsonView;
}
@ApiOperation(value = "策略管理-参数配置数据回显", notes = "数据回显", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON,hidden = false)
@ApiImplicitParams({
@ApiImplicitParam(name = "crossId", value = "路口id", required = true, dataType = "String")
})
@GetMapping("/getParamConfigData")
public JsonViewObject getParamConfigData(@RequestParam(required = true) String crossId){
JsonViewObject jsonView = JsonViewObject.newInstance();
try {
List<StrategyParameterConfig>list=strategyPriorityService.getParamConfigData(crossId);
jsonView.success(list);
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("SAVE_FAILED_MSG"));
log.error("{} StrategyPriorityController-getPriorityData", this.getClass().getSimpleName(), e);
}
return jsonView;
}
}
\ No newline at end of file
......@@ -2,6 +2,7 @@ package net.wanji.opt.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.opt.dto.induce.MessageParam;
import net.wanji.opt.dto.report.StrategyGreenOptHistDTO;
import net.wanji.opt.po.StrategyGreenOptHistEntity;
import net.wanji.opt.vo2.dto.GreenLastOptResultDTO;
......@@ -19,4 +20,6 @@ public interface StrategyGreenOptHistMapper extends BaseMapper<StrategyGreenOptH
List<MessageParam> selectGreenOptEndTimeEquipCode();
List<GreenLastOptResultDTO> selectLastGreenOptResultList();
List<StrategyGreenOptHistDTO> findGreenWaveOptHist();
}
package net.wanji.opt.dao.mapper.judgeanalysis;
import net.wanji.opt.controllerv2.report.vo.AnalysisGreenCongestionPeriodVO;
import net.wanji.opt.entity.judgeanalysis.AnalysisGreenCongestionPeriod;
import org.apache.ibatis.annotations.Param;
......@@ -9,4 +10,6 @@ import java.util.Map;
public interface AnalysisGreenCongestionPeriodMapper {
List<AnalysisGreenCongestionPeriod> selectGreenDataHist(@Param("date") String date);
void insertGreenCongestionPeriodData(Map<String, Object> map);
List<AnalysisGreenCongestionPeriodVO> selectListByWeek(@Param("yearWeek") Integer yearWeek);
}
......@@ -7,7 +7,7 @@ import java.util.Map;
public interface CrossSignalPlanMapper {
List<Map<String, String>> getSpecialDate(@Param("crossId") String crossId);
List<Map<String, String>> getSpecialDate(@Param("crossId") String crossId,@Param("startTime") String startTime,@Param("endTime") String endTime);
List<Map<String, String>> getByDateScope(@Param("crossId") String crossId,@Param("weekNumber") Integer weekNumber);
......
package net.wanji.opt.dao.mapper.report;
import net.wanji.opt.entity.report.AnalysisGreenWaveOptimizeWeek;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface AnalysisGreenWaveOptimizeWeekMapper extends BaseMapper<AnalysisGreenWaveOptimizeWeek>{
/**
* 查询表t_analysis_green_wave_optimize_week所有信息
*/
List<AnalysisGreenWaveOptimizeWeek> findAllAnalysisGreenWaveOptimizeWeek();
/**
* 根据主键greenId查询表t_analysis_green_wave_optimize_week信息
* @param greenId
*/
AnalysisGreenWaveOptimizeWeek findAnalysisGreenWaveOptimizeWeekBygreenId(@Param("greenId") Integer greenId);
/**
* 根据条件查询表t_analysis_green_wave_optimize_week信息
* @param analysisGreenWaveOptimizeWeek
*/
List<AnalysisGreenWaveOptimizeWeek> findAnalysisGreenWaveOptimizeWeekByCondition(AnalysisGreenWaveOptimizeWeek analysisGreenWaveOptimizeWeek);
/**
* 根据主键greenId查询表t_analysis_green_wave_optimize_week信息
* @param greenId
*/
Integer deleteAnalysisGreenWaveOptimizeWeekBygreenId(@Param("greenId") Integer greenId);
/**
* 根据主键greenId更新表t_analysis_green_wave_optimize_week信息
* @param analysisGreenWaveOptimizeWeek
*/
Integer updateAnalysisGreenWaveOptimizeWeekBygreenId(AnalysisGreenWaveOptimizeWeek analysisGreenWaveOptimizeWeek);
/**
* 新增表t_analysis_green_wave_optimize_week信息
* @param analysisGreenWaveOptimizeWeek
*/
Integer addAnalysisGreenWaveOptimizeWeek(AnalysisGreenWaveOptimizeWeek analysisGreenWaveOptimizeWeek);
}
package net.wanji.opt.dao.mapper.report;
import net.wanji.opt.entity.report.AnalysisGreenWavePeakDetail;
import java.util.Date;
import java.util.List;
import java.util.Map;
import net.wanji.opt.vo2.report.GreenCongestTimeSpanVO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import net.wanji.common.framework.mapper.BaseInterfaceMapper;
/**
* <p>
*
* </p>
*
* @Author fengyi
* @Date 2025-04-07
*/
public interface AnalysisGreenWavePeakDetailMapper extends BaseInterfaceMapper<AnalysisGreenWavePeakDetail> {
List<GreenCongestTimeSpanVO> findCongestTimeSpanInPeakTime(@Param("yearWeek") Integer yearWeek,
@Param("greenId") Integer greenId,
@Param("peakStartTime") Date peakStartTime,
@Param("peakEndTime") Date peakEndTime
);
}
......@@ -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.dao.mapper.strategy;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.wanji.opt.entity.strategy.StrategyParameterConfig;
import net.wanji.opt.entity.strategy.StrategyPriorityConfig;
import net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo;
import java.util.List;
import java.util.Map;
import net.wanji.opt.entity.strategy.dto.StrategyPriorityGroup;
import net.wanji.opt.synthesis.pojo.StrategyFactoryEntity;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
......@@ -79,5 +81,14 @@ public interface StrategyPriorityMapper extends BaseMapper<StrategyPriorityDaily
List<StrategyPriorityDailyInfo> getPlanConfigData(String crossId);
List<StrategyParameterConfig> paramterConfigTable(String crossId);
void deleteParamterConfig(String crossId);
void saveParamConfig(@Param("savePlanList") List<StrategyParameterConfig> savePlanList);
List<StrategyParameterConfig> getParamConfigData(String crossId);
}
package net.wanji.opt.dto;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* @author duanruiming
* @date 2025/04/08 14:24
*/
@Data
public class GreenBeltChartDTO {
private Integer greenId;
private Integer dir;
private Integer backDir;
private Double speed;
private Double backSpeed;
private List<Double> offsets;
private List<Double> backOffsets;
private List<Double> distances;
private List<Double> backDistances;
private Map<String, List<List<Double>>> crossRedTimesMap;
private Map<String, List<List<Double>>> backCrossRedTimesMap;
private Map<String, List<List<Double>>> crossGreenTimesMap;
private Map<String, List<List<Double>>> backCrossGreenTimesMap;
private List<Map<String, List<Double>>> greenwaveStartGroup;
}
package net.wanji.opt.dto.report;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* @author duanruiming
* @date 2024/11/19 17:48
*/
@Data
public class StrategyGreenOptHistDTO {
@TableField("green_id")
private Integer greenId;
@TableField("length")
private Double length;
@TableField("cycle")
private Integer cycle;
@TableField("control_time")
private String controlTime;
@TableField("control_duration")
private Integer controlDuration;
@TableField("control_method")
private Integer controlMethod;
@TableField("type")
private Integer type;
@TableField("dynamic")
private Integer dynamic;
@TableField("dir_type")
private Integer dirType;
@TableField("dir")
private String dir;
@TableField("max_speed")
private Double maxSpeed;
@TableField("min_speed")
private Double minSpeed;
@TableField("green_width_time")
private Double greenWidthTime;
@TableField("cross_green_detail")
private String crossGreenDetail;
@TableField("key_cross")
private String keyCross;
@TableField("response_code")
private Integer responseCode;
@TableField("response_content")
private String responseContent;
@TableField("duration")
private Integer duration;
}
package net.wanji.opt.entity.report;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.baomidou.mybatisplus.annotation.TableName;
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("t_analysis_green_wave_optimize_week")
public class AnalysisGreenWaveOptimizeWeek implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "green_id", type = IdType.AUTO)
private Integer greenId;
/**
* 干线车流运行方向 w2e/e2w/s2n/n2s
*/
private String roadDirection;
/**
* 星期几:1~7代表周一至周日
*/
private Integer weekDay;
/**
* 优化时段开始时间
*/
private LocalDateTime optimizeStartTime;
/**
* 优化时段截止时间
*/
private LocalDateTime optimizeEndTime;
/**
* 策略ID
*/
private Integer stragetyId;
/**
* 策略时段内优化次数
*/
private Integer optimizeCount;
/**
* 策略时段内优化总时长,单位秒
*/
private Integer optimizeDuration;
/**
* 通行能力(辆)
*/
private Integer capacity;
/**
* 停车次数
*/
private Double stopTimes;
/**
* 延误时间,单位秒
*/
private Double delayTime;
/**
* 行程时间,单位秒
*/
private Integer travelTime;
/**
* 平均速度,单位km/h
*/
private Double speed;
/**
* 一年中的第几周
*/
private Integer yearWeek;
/**
* 一一年中的第几周,格式yyyyw,如20251
*/
private LocalDateTime weekStartTime;
/**
* 一周的第二天
*/
private LocalDateTime weekEndTime;
/**
* 数据插入时间
*/
private LocalDateTime insertTime;
}
package net.wanji.opt.entity.report;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import net.wanji.common.framework.domain.TrackableEntity;
import java.util.Date;
import java.math.BigDecimal;
/**
* <p>
*
* </p>
*
* @Author fengyi
* @Date 2025-04-07
*/
@Data
@ApiModel(value="AnalysisGreenWavePeakDetail对象", description="")
public class AnalysisGreenWavePeakDetail extends TrackableEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "干线ID")
private Integer greenId;
@ApiModelProperty(value = "干线车流运行方向 w2e/e2w/s2n/n2s")
private String roadDirection;
@ApiModelProperty(value = "星期几:1~7代表周一至周日")
private Integer weekDay;
@ApiModelProperty(value = "峰期开始时间")
private Date peakStartTime;
@ApiModelProperty(value = "峰期截止时间")
private Date peakEndTime;
@ApiModelProperty(value = "平均拥堵指数")
private Double trafficIndex;
@ApiModelProperty(value = "拥堵类型:2缓行;3拥堵")
private Integer status;
@ApiModelProperty(value = "行程时间,单位秒")
private Integer travelTime;
@ApiModelProperty(value = "平均速度 km/h")
private Double speed;
@ApiModelProperty(value = "车流量")
private Integer flow;
@ApiModelProperty(value = "高峰类型 1早高峰 2晚高峰 3平峰")
private String peakType;
@ApiModelProperty(value = "一年中的第几周,格式yyyyw,如20251")
private Integer yearWeek;
@ApiModelProperty(value = "一周的第一天")
private Date weekStartTime;
@ApiModelProperty(value = "一周的第二天")
private Date weekEndTime;
@ApiModelProperty(value = "数据插入时间")
private Date insertTime;
}
package net.wanji.opt.entity.strategy;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("t_strategy_parameter_config")
@NoArgsConstructor
@AllArgsConstructor
public class StrategyParameterConfig implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 自增主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 策略编号
*/
private String strategyNo;
/**
* 路口编号
*/
private String crossId;
/**
* 参数配置执行详情
*/
private String paramDetails;
/**
* 调度配置执行详情
*/
private String schedulingParam;
}
......@@ -42,20 +42,14 @@ public class StrategyPriorityDailyInfo implements Serializable {
* 路口编号
*/
private String crossId;
//非数据库字段
//非数据库字段
/**
* 干线名称
* 干线名称 (路由列表返回用)
*/
private String waveName;
/**
* 路口名称
* 路口名称 (路由列表返回用)
*/
private String crossName;
/**
* 时间数组
*/
private List<String> times;
}
package net.wanji.opt.entity.strategy;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/*
策略参数场景参数配置
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class StrategyPriorityParamter {
/**
* 主键
*/
private Long id;
/**
* 参数中文名
*/
private String paramCN;
/**
* 参数英文名
*/
private String paramEN;
/**
* 数据类型
*/
private String dataType;
/**
* 参数说明
*/
private String description;
/**
* 阈值范围
*/
private String threshold;
/**
* 参数值
*/
private String value;
/**
* 参数场景配置选择的数组ID
*/
private String arrayId;
/**
* type:1:参数配置,2:场景配置
*/
private String type;
}
package net.wanji.opt.entity.strategy;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.List;
/*
策略日计划配置详情
*/
@Data
@EqualsAndHashCode(callSuper = false)
@NoArgsConstructor
@AllArgsConstructor
public class StrategyPriorityPlanDetails {
/**
* 主键
*/
private Long id;
/**
* 开始时间前端用
*/
private String start;
/**
* 结束时间前端用
*/
private String end;
/**
* 开始结束时间
*/
private List<String> times;
/**
* 组ID
*/
private Integer groupId;
/**
* 场景
*/
private String content;
}
package net.wanji.opt.entity.strategy;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.List;
/*
策略调度参数
*/
@Data
@EqualsAndHashCode(callSuper = false)
@NoArgsConstructor
@AllArgsConstructor
public class StrategySchedulingItem {
/**
* 参数中文名
*/
private String paramCN;
/**
* 参数英文名
*/
private String paramEN;
/**
* 阈值范围
*/
private String threshold;
/**
* 运算符
*/
private String operator;
/**
* 逻辑关系 ||,&&
*/
private String logical;
/**
* 参数值
*/
private String paramValue;
}
package net.wanji.opt.entity.strategy;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.List;
/*
策略调度启动停止参数
*/
@Data
@EqualsAndHashCode(callSuper = false)
@NoArgsConstructor
@AllArgsConstructor
public class StrategySchedulingParam {
/*
* 策略启动控制参数
* */
private List<StrategySchedulingItem> start;
/*
* 策略停止控制参数
* */
private List<StrategySchedulingItem> end;
}
package net.wanji.opt.entity.strategy.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.models.auth.In;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import net.wanji.opt.entity.strategy.StrategyPriorityConfig;
import net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo;
import net.wanji.opt.entity.strategy.*;
import java.util.List;
import java.util.Objects;
@Data
@EqualsAndHashCode(callSuper=false)
......@@ -22,13 +22,20 @@ public class StrategyPriorityGroup {
private String label;
//路口Id
private String crossId;
//路口Id
private List<String> crossIds;
//执行时间
private String weekExecute;
//日计划编号
private Integer dailyPlanId;
//策略编号
private String strategyNo;
//优先级的配置信息
private List<StrategyPriorityConfig> data;
//计划表的配置信息
private Object dailyPlanDetails;
//计划表的配置信息日计划详情
private List<StrategyPriorityPlanDetails> dailyPlanDetails;
// 参数配置表的配置信息
private List<StrategyPriorityParamter> parameterConfigList;
// 调度配置表的配置信息
private StrategySchedulingParam schedulingParamters;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.judgeanalysis.AiOptimizeStatisticMapper">
<!-- 通用设置 -->
<!-- 通用查询列 -->
<sql id="Base_Column_List">
cross_id, strategy, optimize_count, optimize_duration, statistic_time, gmt_create, gmt_modified, type
</sql>
<!-- 通用条件列 -->
<sql id="AiOptimizeStatisticByCondition">
<if test="crossId!=null and crossId!=''">
AND cross_id = #{crossId}
</if>
<if test="strategy!=null and strategy!=''">
AND strategy = #{strategy}
</if>
<if test="optimizeCount!=null and optimizeCount!=''">
AND optimize_count = #{optimizeCount}
</if>
<if test="optimizeDuration!=null and optimizeDuration!=''">
AND optimize_duration = #{optimizeDuration}
</if>
<if test="statisticTime!=null and statisticTime!=''">
AND statistic_time = #{statisticTime}
</if>
<if test="gmtCreate!=null">
AND gmt_create = #{gmtCreate}
</if>
<if test="gmtModified!=null">
AND gmt_modified = #{gmtModified}
</if>
<if test="type!=null and type!=''">
AND type = #{type}
</if>
</sql>
<!-- 通用设置列 -->
<sql id="AiOptimizeStatisticSetColumns">
<if test="strategy!=null and strategy!=''">
strategy = #{strategy},
</if>
<if test="optimizeCount!=null and optimizeCount!=''">
optimize_count = #{optimizeCount},
</if>
<if test="optimizeDuration!=null and optimizeDuration!=''">
optimize_duration = #{optimizeDuration},
</if>
<if test="statisticTime!=null and statisticTime!=''">
statistic_time = #{statisticTime},
</if>
<if test="gmtCreate!=null">
gmt_create = #{gmtCreate},
</if>
<if test="gmtModified!=null">
gmt_modified = #{gmtModified},
</if>
<if test="type!=null and type!=''">
type = #{type},
</if>
</sql>
<!-- 通用查询映射结果 -->
<resultMap id="AiOptimizeStatisticMap" type="net.wanji.opt.entity.judgeanalysis.AiOptimizeStatistic">
<id column="cross_id" property="crossId"/>
<result column="strategy" property="strategy"/>
<result column="optimize_count" property="optimizeCount"/>
<result column="optimize_duration" property="optimizeDuration"/>
<result column="statistic_time" property="statisticTime"/>
<result column="gmt_create" property="gmtCreate"/>
<result column="gmt_modified" property="gmtModified"/>
<result column="type" property="type"/>
</resultMap>
<!-- 查询表t_ai_optimize_statistic所有信息 -->
<select id="findAllAiOptimizeStatistic" resultMap="AiOptimizeStatisticMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_ai_optimize_statistic
</select>
<!-- 根据主键crossId查询表t_ai_optimize_statistic信息 -->
<select id="findAiOptimizeStatisticBycrossId" resultMap="AiOptimizeStatisticMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_ai_optimize_statistic
WHERE cross_id=#{crossId}
</select>
<!-- 根据条件查询表t_ai_optimize_statistic信息 -->
<select id="findAiOptimizeStatisticByCondition" resultMap="AiOptimizeStatisticMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_ai_optimize_statistic
WHERE 1=1
<include refid="AiOptimizeStatisticByCondition" />
</select>
<!-- 根据主键crossId删除表t_ai_optimize_statistic信息 -->
<delete id="deleteAiOptimizeStatisticBycrossId">
DELETE FROM
t_ai_optimize_statistic
WHERE cross_id=#{crossId}
</delete>
<!-- 根据主键crossId更新表t_ai_optimize_statistic信息 -->
<update id="updateAiOptimizeStatisticBycrossId" parameterType="net.wanji.opt.entity.judgeanalysis.AiOptimizeStatistic">
UPDATE t_ai_optimize_statistic
<set>
<include refid="AiOptimizeStatisticSetColumns"/>
</set>
WHERE
cross_id=#{crossId}
</update>
<!-- 新增表t_ai_optimize_statistic信息 -->
<insert id="addAiOptimizeStatistic">
INSERT INTO t_ai_optimize_statistic (
cross_id
,strategy
,optimize_count
,optimize_duration
,statistic_time
,gmt_create
,gmt_modified
,type
) VALUES (
#{crossId}
,#{strategy}
,#{optimizeCount}
,#{optimizeDuration}
,#{statisticTime}
,#{gmtCreate}
,#{gmtModified}
,#{type}
)
</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.judgeanalysis.AnalysisProblemCrossDirHourMapper">
<!-- 通用设置 -->
<!-- 通用查询列 -->
<sql id="Base_Column_List">
id, area_id, event_category, event_type, event_number, event_total_time, window_start_time, window_end_time, cross_id, dir, dt, insert_time
</sql>
<!-- 通用条件列 -->
<sql id="AnalysisProblemCrossDirHourByCondition">
<if test="id!=null and id!=''">
AND id = #{id}
</if>
<if test="areaId!=null and areaId!=''">
AND area_id = #{areaId}
</if>
<if test="eventCategory!=null and eventCategory!=''">
AND event_category = #{eventCategory}
</if>
<if test="eventType!=null and eventType!=''">
AND event_type = #{eventType}
</if>
<if test="eventNumber!=null and eventNumber!=''">
AND event_number = #{eventNumber}
</if>
<if test="eventTotalTime!=null and eventTotalTime!=''">
AND event_total_time = #{eventTotalTime}
</if>
<if test="windowStartTime!=null">
AND window_start_time = #{windowStartTime}
</if>
<if test="windowEndTime!=null">
AND window_end_time = #{windowEndTime}
</if>
<if test="crossId!=null and crossId!=''">
AND cross_id = #{crossId}
</if>
<if test="dir!=null and dir!=''">
AND dir = #{dir}
</if>
<if test="dt!=null and dt!=''">
AND dt = #{dt}
</if>
<if test="insertTime!=null">
AND insert_time = #{insertTime}
</if>
</sql>
<!-- 通用设置列 -->
<sql id="AnalysisProblemCrossDirHourSetColumns">
<if test="id!=null and id!=''">
id = #{id},
</if>
<if test="areaId!=null and areaId!=''">
area_id = #{areaId},
</if>
<if test="eventCategory!=null and eventCategory!=''">
event_category = #{eventCategory},
</if>
<if test="eventNumber!=null and eventNumber!=''">
event_number = #{eventNumber},
</if>
<if test="eventTotalTime!=null and eventTotalTime!=''">
event_total_time = #{eventTotalTime},
</if>
<if test="windowStartTime!=null">
window_start_time = #{windowStartTime},
</if>
<if test="windowEndTime!=null">
window_end_time = #{windowEndTime},
</if>
<if test="crossId!=null and crossId!=''">
cross_id = #{crossId},
</if>
<if test="dir!=null and dir!=''">
dir = #{dir},
</if>
<if test="dt!=null and dt!=''">
dt = #{dt},
</if>
<if test="insertTime!=null">
insert_time = #{insertTime},
</if>
</sql>
<!-- 通用查询映射结果 -->
<resultMap id="AnalysisProblemCrossDirHourMap" type="net.wanji.opt.entity.judgeanalysis.AnalysisProblemCrossDirHour">
<id column="event_type" property="eventType"/>
<result column="id" property="id"/>
<result column="area_id" property="areaId"/>
<result column="event_category" property="eventCategory"/>
<result column="event_number" property="eventNumber"/>
<result column="event_total_time" property="eventTotalTime"/>
<result column="window_start_time" property="windowStartTime"/>
<result column="window_end_time" property="windowEndTime"/>
<result column="cross_id" property="crossId"/>
<result column="dir" property="dir"/>
<result column="dt" property="dt"/>
<result column="insert_time" property="insertTime"/>
</resultMap>
<!-- 查询表t_analysis_problem_cross_dir_hour所有信息 -->
<select id="findAllAnalysisProblemCrossDirHour" resultMap="AnalysisProblemCrossDirHourMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_analysis_problem_cross_dir_hour
</select>
<!-- 根据主键eventType查询表t_analysis_problem_cross_dir_hour信息 -->
<select id="findAnalysisProblemCrossDirHourByeventType" resultMap="AnalysisProblemCrossDirHourMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_analysis_problem_cross_dir_hour
WHERE event_type=#{eventType}
</select>
<!-- 根据条件查询表t_analysis_problem_cross_dir_hour信息 -->
<select id="findAnalysisProblemCrossDirHourByCondition" resultMap="AnalysisProblemCrossDirHourMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_analysis_problem_cross_dir_hour
WHERE 1=1
<include refid="AnalysisProblemCrossDirHourByCondition" />
</select>
<!-- 根据主键eventType删除表t_analysis_problem_cross_dir_hour信息 -->
<delete id="deleteAnalysisProblemCrossDirHourByeventType">
DELETE FROM
t_analysis_problem_cross_dir_hour
WHERE event_type=#{eventType}
</delete>
<!-- 根据主键eventType更新表t_analysis_problem_cross_dir_hour信息 -->
<update id="updateAnalysisProblemCrossDirHourByeventType" parameterType="net.wanji.opt.entity.judgeanalysis.AnalysisProblemCrossDirHour">
UPDATE t_analysis_problem_cross_dir_hour
<set>
<include refid="AnalysisProblemCrossDirHourSetColumns"/>
</set>
WHERE
event_type=#{eventType}
</update>
<!-- 新增表t_analysis_problem_cross_dir_hour信息 -->
<insert id="addAnalysisProblemCrossDirHour">
INSERT INTO t_analysis_problem_cross_dir_hour (
id
,area_id
,event_category
,event_type
,event_number
,event_total_time
,window_start_time
,window_end_time
,cross_id
,dir
,dt
,insert_time
) VALUES (
#{id}
,#{areaId}
,#{eventCategory}
,#{eventType}
,#{eventNumber}
,#{eventTotalTime}
,#{windowStartTime}
,#{windowEndTime}
,#{crossId}
,#{dir}
,#{dt}
,#{insertTime}
)
</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.judgeanalysis.AnalysisProblemGreenHourMapper">
<!-- 通用设置 -->
<!-- 通用查询列 -->
<sql id="Base_Column_List">
id, area_id, event_category, event_type, event_number, event_total_time, window_start_time, window_end_time, green_id, dir, dt, insert_time
</sql>
<!-- 通用条件列 -->
<sql id="AnalysisProblemGreenHourByCondition">
<if test="id!=null and id!=''">
AND id = #{id}
</if>
<if test="areaId!=null and areaId!=''">
AND area_id = #{areaId}
</if>
<if test="eventCategory!=null and eventCategory!=''">
AND event_category = #{eventCategory}
</if>
<if test="eventType!=null and eventType!=''">
AND event_type = #{eventType}
</if>
<if test="eventNumber!=null and eventNumber!=''">
AND event_number = #{eventNumber}
</if>
<if test="eventTotalTime!=null and eventTotalTime!=''">
AND event_total_time = #{eventTotalTime}
</if>
<if test="windowStartTime!=null">
AND window_start_time = #{windowStartTime}
</if>
<if test="windowEndTime!=null">
AND window_end_time = #{windowEndTime}
</if>
<if test="greenId!=null and greenId!=''">
AND green_id = #{greenId}
</if>
<if test="dir!=null and dir!=''">
AND dir = #{dir}
</if>
<if test="dt!=null and dt!=''">
AND dt = #{dt}
</if>
<if test="insertTime!=null">
AND insert_time = #{insertTime}
</if>
</sql>
<!-- 通用设置列 -->
<sql id="AnalysisProblemGreenHourSetColumns">
<if test="id!=null and id!=''">
id = #{id},
</if>
<if test="areaId!=null and areaId!=''">
area_id = #{areaId},
</if>
<if test="eventCategory!=null and eventCategory!=''">
event_category = #{eventCategory},
</if>
<if test="eventNumber!=null and eventNumber!=''">
event_number = #{eventNumber},
</if>
<if test="eventTotalTime!=null and eventTotalTime!=''">
event_total_time = #{eventTotalTime},
</if>
<if test="windowStartTime!=null">
window_start_time = #{windowStartTime},
</if>
<if test="windowEndTime!=null">
window_end_time = #{windowEndTime},
</if>
<if test="greenId!=null and greenId!=''">
green_id = #{greenId},
</if>
<if test="dir!=null and dir!=''">
dir = #{dir},
</if>
<if test="dt!=null and dt!=''">
dt = #{dt},
</if>
<if test="insertTime!=null">
insert_time = #{insertTime},
</if>
</sql>
<!-- 通用查询映射结果 -->
<resultMap id="AnalysisProblemGreenHourMap" type="net.wanji.opt.entity.judgeanalysis.AnalysisProblemGreenHour">
<id column="event_type" property="eventType"/>
<result column="id" property="id"/>
<result column="area_id" property="areaId"/>
<result column="event_category" property="eventCategory"/>
<result column="event_number" property="eventNumber"/>
<result column="event_total_time" property="eventTotalTime"/>
<result column="window_start_time" property="windowStartTime"/>
<result column="window_end_time" property="windowEndTime"/>
<result column="green_id" property="greenId"/>
<result column="dir" property="dir"/>
<result column="dt" property="dt"/>
<result column="insert_time" property="insertTime"/>
</resultMap>
<!-- 查询表t_analysis_problem_green_hour所有信息 -->
<select id="findAllAnalysisProblemGreenHour" resultMap="AnalysisProblemGreenHourMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_analysis_problem_green_hour
</select>
<!-- 根据主键eventType查询表t_analysis_problem_green_hour信息 -->
<select id="findAnalysisProblemGreenHourByeventType" resultMap="AnalysisProblemGreenHourMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_analysis_problem_green_hour
WHERE event_type=#{eventType}
</select>
<!-- 根据条件查询表t_analysis_problem_green_hour信息 -->
<select id="findAnalysisProblemGreenHourByCondition" resultMap="AnalysisProblemGreenHourMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_analysis_problem_green_hour
WHERE 1=1
<include refid="AnalysisProblemGreenHourByCondition" />
</select>
<!-- 根据主键eventType删除表t_analysis_problem_green_hour信息 -->
<delete id="deleteAnalysisProblemGreenHourByeventType">
DELETE FROM
t_analysis_problem_green_hour
WHERE event_type=#{eventType}
</delete>
<!-- 根据主键eventType更新表t_analysis_problem_green_hour信息 -->
<update id="updateAnalysisProblemGreenHourByeventType" parameterType="net.wanji.opt.entity.judgeanalysis.AnalysisProblemGreenHour">
UPDATE t_analysis_problem_green_hour
<set>
<include refid="AnalysisProblemGreenHourSetColumns"/>
</set>
WHERE
event_type=#{eventType}
</update>
<!-- 新增表t_analysis_problem_green_hour信息 -->
<insert id="addAnalysisProblemGreenHour">
INSERT INTO t_analysis_problem_green_hour (
id
,area_id
,event_category
,event_type
,event_number
,event_total_time
,window_start_time
,window_end_time
,green_id
,dir
,dt
,insert_time
) VALUES (
#{id}
,#{areaId}
,#{eventCategory}
,#{eventType}
,#{eventNumber}
,#{eventTotalTime}
,#{windowStartTime}
,#{windowEndTime}
,#{greenId}
,#{dir}
,#{dt}
,#{insertTime}
)
</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.strategy.StrategyPriorityMapper">
<!-- 通用设置 -->
<!-- 通用查询列 -->
<sql id="Base_Column_List">
id, daily_plan_id, week_execute, daily_plan_details, cross_id
</sql>
<!-- 通用条件列 -->
<sql id="StrategyPriorityDailyInfoByCondition">
<if test="id!=null and id!=''">
AND id = #{id}
</if>
<if test="dailyPlanId!=null and dailyPlanId!=''">
AND daily_plan_id = #{dailyPlanId}
</if>
<if test="weekExecute!=null and weekExecute!=''">
AND week_execute = #{weekExecute}
</if>
<if test="dailyPlanDetails!=null and dailyPlanDetails!=''">
AND daily_plan_details = #{dailyPlanDetails}
</if>
<if test="crossId!=null and crossId!=''">
AND cross_id = #{crossId}
</if>
</sql>
<!-- 通用设置列 -->
<sql id="StrategyPriorityDailyInfoSetColumns">
<if test="dailyPlanId!=null and dailyPlanId!=''">
daily_plan_id = #{dailyPlanId},
</if>
<if test="weekExecute!=null and weekExecute!=''">
week_execute = #{weekExecute},
</if>
<if test="dailyPlanDetails!=null and dailyPlanDetails!=''">
daily_plan_details = #{dailyPlanDetails},
</if>
<if test="crossId!=null and crossId!=''">
cross_id = #{crossId},
</if>
</sql>
<!-- 通用查询映射结果 -->
<resultMap id="StrategyPriorityDailyInfoMap" type="net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo">
<id column="id" property="id"/>
<result column="daily_plan_id" property="dailyPlanId"/>
<result column="week_execute" property="weekExecute"/>
<result column="daily_plan_details" property="dailyPlanDetails"/>
<result column="cross_id" property="crossId"/>
</resultMap>
<!-- 查询表t_strategy_priority_daily_info所有信息 -->
<select id="findAllStrategyPriorityDailyInfo" resultMap="StrategyPriorityDailyInfoMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_strategy_priority_daily_info
</select>
<!-- 根据主键id查询表t_strategy_priority_daily_info信息 -->
<select id="findStrategyPriorityDailyInfoByid" resultMap="StrategyPriorityDailyInfoMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_strategy_priority_daily_info
WHERE id=#{id}
</select>
<!-- 根据条件查询表t_strategy_priority_daily_info信息 -->
<select id="findStrategyPriorityDailyInfoByCondition" resultMap="StrategyPriorityDailyInfoMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_strategy_priority_daily_info
WHERE 1=1
<include refid="StrategyPriorityDailyInfoByCondition" />
</select>
<!-- 根据主键id删除表t_strategy_priority_daily_info信息 -->
<delete id="deleteStrategyPriorityDailyInfoByid">
DELETE FROM
t_strategy_priority_daily_info
WHERE id=#{id}
</delete>
<!-- 根据主键id更新表t_strategy_priority_daily_info信息 -->
<update id="updateStrategyPriorityDailyInfoByid" parameterType="net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo">
UPDATE t_strategy_priority_daily_info
<set>
<include refid="StrategyPriorityDailyInfoSetColumns"/>
</set>
WHERE
id=#{id}
</update>
<!-- 新增表t_strategy_priority_daily_info信息 -->
<insert id="addStrategyPriorityDailyInfo">
INSERT INTO t_strategy_priority_daily_info (
id
,daily_plan_id
,week_execute
,daily_plan_details
,cross_id
) VALUES (
#{id}
,#{dailyPlanId}
,#{weekExecute}
,#{dailyPlanDetails}
,#{crossId}
)
</insert>
</mapper>
package net.wanji.opt.servicev2.judgeanalysis;
import net.wanji.opt.controllerv2.report.vo.GreenReportProblemDetailAnalysisResult;
import net.wanji.opt.controllerv2.report.vo.GreenReportProblemOverallAnalysisResult;
import java.text.ParseException;
import java.util.List;
public interface AnalysisGreenCongestionPeriodService {
public void selectCountByCongestionPeriod() throws ParseException;
GreenReportProblemOverallAnalysisResult selectListByWeek(Integer year, Integer week, String ids);
List<GreenReportProblemDetailAnalysisResult> getProblemDetail(Integer year, Integer week, String ids);
}
......@@ -24,7 +24,7 @@ public class CrossSignalPlanServiceImpl implements CrossSignalPlanService {
List<String> dateRange = generateDateRange(startTime, endTime);
//查询路口特殊日期
List<Map<String,String>> specialDates = crossSignalPlanMapper.getSpecialDate(crossId);
List<Map<String,String>> specialDates = crossSignalPlanMapper.getSpecialDate(crossId,startTime,endTime);
List<Map<String,String>> result = new ArrayList<>();
dateRange.forEach(x->{
//非特殊日期周期查询
......
package net.wanji.opt.servicev2.report;
import net.wanji.opt.entity.report.AnalysisGreenWaveOptimizeWeek;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author fengyi
* @since 2025-04-09
*/
public interface AnalysisGreenWaveOptimizeWeekService extends IService<AnalysisGreenWaveOptimizeWeek> {
/**
* 详情
* @param id
* @return
*/
AnalysisGreenWaveOptimizeWeek info(Long id);
/**
* 新增
* @param param 根据需要进行传值
* @return
*/
void add(AnalysisGreenWaveOptimizeWeek param);
/**
* 修改
* @param param 根据需要进行传值
* @return
*/
void modify(AnalysisGreenWaveOptimizeWeek param);
/**
* 删除(单个条目)
* @param id
* @return
*/
void remove(Long id);
/**
* 删除(多个条目)
* @param ids
* @return
*/
void removes(List<Long> ids);
void getTotalityData(Integer year, Integer week, String ids);
}
package net.wanji.opt.servicev2.report;
import net.wanji.opt.entity.report.AnalysisGreenWavePeakDetail;
import net.wanji.common.framework.dubbointerface.BaseDubboInterface;
import net.wanji.opt.vo2.report.GreenReportRunStateResponseVO;
import java.util.List;
/**
* <p>
*
* </p>
*
* @Author fengyi
* @Date 2025-04-07
*/
public interface AnalysisGreenWavePeakDetailService extends BaseDubboInterface<AnalysisGreenWavePeakDetail> {
public List<GreenReportRunStateResponseVO> selectWeekRunStateSituation(String ids, Integer year, Integer week);
}
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
package net.wanji.opt.servicev2.report.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
import net.wanji.opt.entity.report.AnalysisGreenWaveOptimizeWeek;
import net.wanji.opt.dao.mapper.report.AnalysisGreenWaveOptimizeWeekMapper;
import net.wanji.opt.servicev2.report.AnalysisGreenWaveOptimizeWeekService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 服务实现类
* </p>
*
* @author fengyi
* @since 2025-04-09
*/
@Service
public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<AnalysisGreenWaveOptimizeWeekMapper, AnalysisGreenWaveOptimizeWeek> implements AnalysisGreenWaveOptimizeWeekService {
@Resource
private AnalysisGreenWaveOptimizeWeekMapper analysisGreenWaveOptimizeWeekMapper;
@Autowired
private GreenwaveInfoMapper greenwaveInfoMapper;
/**
* 详情
* @param id
* @return
*/
@Override
public AnalysisGreenWaveOptimizeWeek info(Long id) {
return getById(id);
}
/**
* 新增
* @param param 根据需要进行传值
* @return
*/
@Override
public void add(AnalysisGreenWaveOptimizeWeek param) {
save(param);
}
/**
* 修改
* @param param 根据需要进行传值
* @return
*/
@Override
public void modify(AnalysisGreenWaveOptimizeWeek param) {
updateById(param);
}
/**
* 删除(单个条目)
* @param id
* @return
*/
@Override
public void remove(Long id) {
removeById(id);
}
/**
* 删除(多个条目)
* @param ids
* @return
*/
@Override
public void removes(List<Long> ids) {
removeByIds(ids);
}
@Override
public void getTotalityData(Integer year, Integer week, String ids) {
Integer yearWeek = Integer.valueOf(year + "" + week);
List<Integer> greenIdList = new ArrayList<>();
if(ObjectUtils.isEmpty(ids)){
List<GreenwaveInfoPO> greenwaveInfoPOList = greenwaveInfoMapper.selectAll();
greenIdList = greenwaveInfoPOList.stream().map(GreenwaveInfoPO::getId).collect(Collectors.toList());
}else {
greenIdList = Arrays.stream(ids.split(","))
.map(String::trim) // 去除可能的空格
.filter(s -> !s.isEmpty()) // 过滤掉空字符串
.map(Integer::parseInt) // 转换为整数
.collect(Collectors.toList());
}
LambdaQueryWrapper<AnalysisGreenWaveOptimizeWeek> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AnalysisGreenWaveOptimizeWeek::getYearWeek,yearWeek);
queryWrapper.in(AnalysisGreenWaveOptimizeWeek::getGreenId,greenIdList);
List<AnalysisGreenWaveOptimizeWeek> analysisGreenWaveOptimizeWeeks = analysisGreenWaveOptimizeWeekMapper.selectList(queryWrapper);
}
}
......@@ -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;
......
......@@ -3,6 +3,7 @@ package net.wanji.opt.servicev2.strategy;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.entity.strategy.StrategyParameterConfig;
import net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
......@@ -74,4 +75,8 @@ public interface StrategyPriorityService extends IService<StrategyPriorityDailyI
List<StrategyPriorityDailyInfo> getPlanConfigData(String crossId);
void saveParamterConfig(StrategyPriorityGroup strategyPriorityGroup) throws JsonProcessingException;
List<StrategyParameterConfig> getParamConfigData(String crossId);
}
package net.wanji.opt.servicev2.strategy.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.alibaba.nacos.common.utils.StringUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.opt.dao.mapper.strategy.StrategyPriorityMapper;
import net.wanji.opt.entity.strategy.StrategyPriorityConfig;
import net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo;
import net.wanji.opt.entity.strategy.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import net.wanji.opt.entity.strategy.dto.StrategyPriorityGroup;
import net.wanji.opt.servicev2.strategy.StrategyPriorityService;
......@@ -17,10 +16,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.*;
/**
* <p>
......@@ -145,31 +141,33 @@ import java.util.List;
String label = group.getLabel();
Integer labelCode = group.getLabelCode();
//路口id
String crossId = group.getCrossId();
//先判断表里有没有数据,有的话删除t_strategy_priority_config
List<StrategyPriorityConfig> priorityConfig = strategyPriorityMapper.selectPriorityTable(crossId);
if (priorityConfig.size() > 0) {
strategyPriorityMapper.deletePriorityConfig(crossId);
}
List<String> crossList = group.getCrossIds();
//选中多个路口存多条数据
for (String crossId : crossList) {
//先判断表里有没有数据,有的话删除t_strategy_priority_config
List<StrategyPriorityConfig> priorityConfig = strategyPriorityMapper.selectPriorityTable(crossId);
if (priorityConfig.size() > 0) {
strategyPriorityMapper.deletePriorityConfig(crossId);
}
if (CollectionUtils.isNotEmpty(group.getData())) {
for (StrategyPriorityConfig item : group.getData()) {
StrategyPriorityConfig strategyPriorityConfig = new StrategyPriorityConfig();
strategyPriorityConfig.setCrossId(crossId);
//分组id
strategyPriorityConfig.setGroupId(labelCode);
//分组名称
strategyPriorityConfig.setGroupName(label);
//策略编号
strategyPriorityConfig.setStrategyNo(item.getStrategyNo());
//优先级
strategyPriorityConfig.setPriority(item.getPriority());
saveList.add(strategyPriorityConfig);
if (CollectionUtils.isNotEmpty(group.getData())) {
for (StrategyPriorityConfig item : group.getData()) {
StrategyPriorityConfig strategyPriorityConfig = new StrategyPriorityConfig();
strategyPriorityConfig.setCrossId(crossId);
//分组id
strategyPriorityConfig.setGroupId(labelCode);
//分组名称
strategyPriorityConfig.setGroupName(label);
//策略编号
strategyPriorityConfig.setStrategyNo(item.getStrategyNo());
//优先级
strategyPriorityConfig.setPriority(item.getPriority());
saveList.add(strategyPriorityConfig);
}
}
}
}
strategyPriorityMapper.savePriorityInsert(saveList);
} catch (Exception e) {
log.error("{} savePriority", this.getClass().getSimpleName(), e);
......@@ -184,6 +182,9 @@ import java.util.List;
try {
//先获取策略编号
List<String> strategyNo = strategyPriorityMapper.getstrategyNo(crossId);
if (CollectionUtils.isEmpty(strategyNo)){
strategyNo.add("0");
}
List<StrategyFactoryEntity> priorityList = strategyPriorityMapper.getPriorityConfigData(strategyNo,crossId);
return priorityList;
}catch (Exception e){
......@@ -201,35 +202,31 @@ import java.util.List;
List<StrategyPriorityDailyInfo> savePlanList = new ArrayList<>();
ObjectMapper objectMapper = new ObjectMapper();
for (StrategyPriorityGroup group : dailyPlanDetails) {
StrategyPriorityDailyInfo strategyPriorityDailyInfo = new StrategyPriorityDailyInfo();
//路口ID
String crossId = group.getCrossId();
strategyPriorityDailyInfo.setCrossId(crossId);
//日计划编号
Integer dailyPlanId = group.getDailyPlanId();
strategyPriorityDailyInfo.setDailyPlanId(dailyPlanId);
//执行时间
String weekExecute = group.getWeekExecute();
strategyPriorityDailyInfo.setWeekExecute(weekExecute);
//先判断表里有没有数据,有的话删除t_strategy_priority_daily_info
List<StrategyPriorityDailyInfo> planConfig = strategyPriorityMapper.selectPlanTable(crossId);
if (planConfig.size() > 0) {
strategyPriorityMapper.deletePlanConfig(crossId);
}
List<String> crossList = group.getCrossIds();
//选中多个路口存多条数据
for (String crossId : crossList) {
StrategyPriorityDailyInfo strategyPriorityDailyInfo = new StrategyPriorityDailyInfo();
strategyPriorityDailyInfo.setCrossId(crossId);
//日计划编号
Integer dailyPlanId = group.getDailyPlanId();
strategyPriorityDailyInfo.setDailyPlanId(dailyPlanId);
//执行时间
String weekExecute = group.getWeekExecute();
strategyPriorityDailyInfo.setWeekExecute(weekExecute);
//先判断表里有没有数据,有的话删除t_strategy_priority_daily_info
List<StrategyPriorityDailyInfo> planConfig = strategyPriorityMapper.selectPlanTable(crossId);
if (planConfig.size() > 0) {
strategyPriorityMapper.deletePlanConfig(crossId);
}
Object dailyPlanDetails1 = group.getDailyPlanDetails();
// 如果是数组,转换为字符串化的 JSON
if (dailyPlanDetails instanceof List) {
String serializedDailyPlanDetails = objectMapper.writeValueAsString(dailyPlanDetails1);
group.setDailyPlanDetails(serializedDailyPlanDetails); // 转换为字符串
log.debug("Converted dailyPlanDetails to JSON string: {}", serializedDailyPlanDetails);
//存储
strategyPriorityDailyInfo.setDailyPlanDetails(serializedDailyPlanDetails);
}else{
strategyPriorityDailyInfo.setDailyPlanDetails(group.getDailyPlanDetails().toString());
}
//取出日计划详情
List<StrategyPriorityPlanDetails> dailyPlanDetails1 = group.getDailyPlanDetails();
String dailyPlanDetailsJson = JSON.toJSONString(dailyPlanDetails1);
strategyPriorityDailyInfo.setDailyPlanDetails(dailyPlanDetailsJson);
savePlanList.add(strategyPriorityDailyInfo);
savePlanList.add(strategyPriorityDailyInfo);
}
}
strategyPriorityMapper.savePlanConfig(savePlanList);
}catch (Exception e){
......@@ -244,4 +241,56 @@ import java.util.List;
List<StrategyPriorityDailyInfo> planList = strategyPriorityMapper.getPlanConfigData(crossId);
return planList;
}
/*
* 策略参数配置
* */
@Override
@Transactional
public void saveParamterConfig(StrategyPriorityGroup group) throws JsonProcessingException {
try {
List<StrategyParameterConfig> savePlanList = new ArrayList<>();
StrategyParameterConfig strategyParameterConfig = new StrategyParameterConfig();
//策略编号
String strategyNo = group.getStrategyNo();
strategyParameterConfig.setStrategyNo(strategyNo);
//路口id
String crossId = group.getCrossId();
strategyParameterConfig.setCrossId(crossId);
//先判断表里有没有数据,有的话删除t_strategy_priority_parameter
List<StrategyParameterConfig> paramterConfig = strategyPriorityMapper.paramterConfigTable(crossId);
if (paramterConfig.size() > 0) {
strategyPriorityMapper.deleteParamterConfig(crossId);
}
//参数 场景配置
List<StrategyPriorityParamter> parameterConfigList = group.getParameterConfigList();
String jsonString = JSON.toJSONString(parameterConfigList);
strategyParameterConfig.setParamDetails(jsonString);
//策略调度参数配置
StrategySchedulingParam schedulingParamters = group.getSchedulingParamters();
ObjectMapper objectMapper = new ObjectMapper();
String schedulingParamter = objectMapper.writeValueAsString(schedulingParamters);
strategyParameterConfig.setSchedulingParam(schedulingParamter);
//添加到最终数据
savePlanList.add(strategyParameterConfig);
strategyPriorityMapper.saveParamConfig(savePlanList);
}catch (Exception e){
log.error("{} saveParamterConfig", this.getClass().getSimpleName(), e);
throw e;
}
}
/*
* 策略参数配置数据回显
* */
@Override
public List<StrategyParameterConfig> getParamConfigData(String crossId) {
try {
List<StrategyParameterConfig> paraterConfigList = strategyPriorityMapper.getParamConfigData(crossId);
return paraterConfigList;
}catch (Exception e){
log.error("{} getParamConfigData", this.getClass().getSimpleName(), e);
throw e;
}
}
}
......@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime;
//@Component
@Component
@Slf4j
public class GreenWaveWeekDataTask implements ApplicationRunner {
@Resource
......
package net.wanji.opt.vo2.report;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class GreenCongestTimeSpanVO {
@ApiModelProperty(value = "拥堵开始时间" )
private Date congestStartTime;
@ApiModelProperty(value = "拥堵截止时间" )
private Date congestEndTime;
}
package net.wanji.opt.vo2.report;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class GreenReportRunStatedDataVO {
@ApiModelProperty(value = "星期", example = "星期一")
private String weekName;
@ApiModelProperty(value = "峰期类型 早高峰、晚高峰、平峰、全天", example = "早高峰")
private String peakName;
@ApiModelProperty(value = "本周拥堵时段", example = "7:35~8:40")
private String thisWeekCongestSpan;
@ApiModelProperty(value = "上周拥堵时段", example = "7:50~8:40")
private String lastWeekCongestSpan;
@ApiModelProperty(value = "本周拥堵指数", example = "3.5")
private Double thisWeekCongestIndex;
@ApiModelProperty(value = "上周拥堵指数", example = "3.0")
private Double lastWeekCongestIndex;
@ApiModelProperty(value = "本周平均车速km/h", example = "30.5")
private Double thisWeekAvgSpeed;
@ApiModelProperty(value = "上周平均车速km", example = "30.2")
private Double lastWeekAvgSpeed;
@ApiModelProperty(value = "本周行程时间(分钟)", example = "6.5")
private Double thisWeekTravelTime;
@ApiModelProperty(value = "上周行程时间(分钟)", example = "8.5")
private Double lastWeekTravelTime;
@ApiModelProperty(value = "峰期时段", example = "7:35~8:40")
private String thisWeekDayPeakSpan;
@ApiModelProperty(value = "上周拥堵时段", example = "7:50~8:40")
private String lastWeekDayPeakSpan;
}
......@@ -26,6 +26,7 @@
AND opt_duration >= #{startOptDuration}
AND opt_duration &lt;=#{endOptDuration}
</if>
ORDER BY happen_start_time desc
</select>
<select id="selectPageWithCrossIdAndGreenId" parameterType="map" resultType="net.wanji.opt.entity.eventoptimize.TEventOptimizeInfo">
SELECT *
......
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