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.evaluation.EventInfoMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="net.wanji.opt.entity.evaluation.EventInfo">
<id column="start_time" property="startTime" />
<result column="oid" property="oid" />
<result column="plate_no" property="plateNo" />
<result column="object_type" property="objectType" />
<result column="confidence" property="confidence" />
<result column="detect_time" property="detectTime" />
<result column="grade" property="grade" />
<result column="place_desc" property="placeDesc" />
<result column="lng" property="lng" />
<result column="lat" property="lat" />
<result column="category" property="category" />
<result column="type" property="type" />
<result column="end_time" property="endTime" />
<result column="duration" property="duration" />
<result column="source" property="source" />
<result column="ruksj" property="ruksj" />
<result column="lane_id" property="laneId" />
<result column="rid" property="rid" />
<result column="segment_id" property="segmentId" />
<result column="cross_id" property="crossId" />
<result column="green_id" property="greenId" />
<result column="camera_oid" property="cameraOid" />
<result column="event_serial_number" property="eventSerialNumber" />
<result column="data_status" property="dataStatus" />
<result column="global_id" property="globalId" />
<result column="station_id" property="stationId" />
<result column="event_id" property="eventId" />
<result column="remark" property="remark" />
<result column="extend" property="extend" />
<result column="dt" property="dt" />
<result column="video_urls" property="videoUrls" />
<result column="target_type" property="targetType" />
<result column="alarm_status" property="alarmStatus" />
<result column="opt_status" property="optStatus" />
<result column="modify_time" property="modifyTime" />
<result column="dir" property="dir" />
<result column="turn" property="turn" />
<result column="unbalance_index" property="unbalanceIndex" />
<result column="spillover_index" property="spilloverIndex" />
<result column="traffic_index" property="trafficIndex" />
</resultMap>
<sql id="Table_Name">
t_event_info
</sql>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
oid, plate_no, object_type, confidence, detect_time, grade, place_desc, lng, lat, category, type, start_time, end_time, duration, source, ruksj, lane_id, rid, segment_id, cross_id, green_id, camera_oid, event_serial_number, data_status, global_id, station_id, event_id, remark, extend, dt, video_urls, target_type, alarm_status, opt_status, modify_time, dir, turn, unbalance_index, spillover_index, traffic_index
</sql>
<!--新增操作 -->
<insert id="save" parameterType="net.wanji.opt.entity.evaluation.EventInfo">
insert into
<include refid="Table_Name"/>
(<include refid="Base_Column_List"/>)
values(
#{oid}
,#{plateNo}
,#{objectType}
,#{confidence}
,#{detectTime}
,#{grade}
,#{placeDesc}
,#{lng}
,#{lat}
,#{category}
,#{type}
,#{startTime}
,#{endTime}
,#{duration}
,#{source}
,#{ruksj}
,#{laneId}
,#{rid}
,#{segmentId}
,#{crossId}
,#{greenId}
,#{cameraOid}
,#{eventSerialNumber}
,#{dataStatus}
,#{globalId}
,#{stationId}
,#{eventId}
,#{remark}
,#{extend}
,#{dt}
,#{videoUrls}
,#{targetType}
,#{alarmStatus}
,#{optStatus}
,#{modifyTime}
,#{dir}
,#{turn}
,#{unbalanceIndex}
,#{spilloverIndex}
,#{trafficIndex}
)
</insert>
<!--根据ID查询-->
<select id="findById" resultMap="BaseResultMap" parameterType="String">
select
<include refid="Base_Column_List"/>
from
<include refid="Table_Name"/>
where id = #{id}
</select>
<!--获取数据总数-->
<select id="getCount" parameterType="java.util.Map" resultType="int">
select count(*) from
<include refid="Table_Name"/>
where 1=1
<include refid="sql_query"/>
<include refid="fuzzySearch"/>
</select>
<!-- 查询所有数据-->
<select id="findAll" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from
<include refid="Table_Name"/>
<!--ORDER BY `dt_create_date` DESC-->
</select>
<!-- 通过条件查询所有数据-->
<select id="findByMap" parameterType="java.util.Map" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from
<include refid="Table_Name"/>
<where>
<include refid="sql_query"/>
<include refid="fuzzySearch"/>
</where>
<!--ORDER BY `dt_create_date` DESC-->
</select>
<!--分组分页查询-->
<select id="findByPage" parameterType="java.util.Map" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM
<include refid="Table_Name"/>
<where>
<include refid="sql_query"/>
<include refid="fuzzySearch"/>
</where>
<!--ORDER BY `dt_create_date` DESC-->
limit #{startRowNum}, #{pageSize}
</select>
<!--更新-->
<update id="update" parameterType="net.wanji.opt.entity.evaluation.EventInfo">
update
<include refid="Table_Name"/>
<include refid="sql_update"/>
where
start_time = #{startTime}
</update>
<!--根据ID删除-->
<delete id="deleteById" parameterType="String">
delete from
<include refid="Table_Name"/>
where
start_time = #{startTime}
</delete>
<sql id="fuzzySearch">
<if test="keyword != null and keyword !=''">
and (locate(#{keyword,jdbcType=VARCHAR}, s_name)>0
)
</if>
</sql>
<sql id="sql_query">
<if test="oid != null and oid != '' ">
<![CDATA[ and oid = #{oid}]]>
</if>
<if test="plateNo != null and plateNo != '' ">
<![CDATA[ and plate_no = #{plateNo}]]>
</if>
<if test="objectType != null and objectType != '' ">
<![CDATA[ and object_type = #{objectType}]]>
</if>
<if test="confidence != null and confidence != '' ">
<![CDATA[ and confidence = #{confidence}]]>
</if>
<if test="detectTime != null and detectTime != '' ">
<![CDATA[ and detect_time = #{detectTime}]]>
</if>
<if test="grade != null and grade != '' ">
<![CDATA[ and grade = #{grade}]]>
</if>
<if test="placeDesc != null and placeDesc != '' ">
<![CDATA[ and place_desc = #{placeDesc}]]>
</if>
<if test="lng != null and lng != '' ">
<![CDATA[ and lng = #{lng}]]>
</if>
<if test="lat != null and lat != '' ">
<![CDATA[ and lat = #{lat}]]>
</if>
<if test="category != null and category != '' ">
<![CDATA[ and category = #{category}]]>
</if>
<if test="type != null and type != '' ">
<![CDATA[ and type = #{type}]]>
</if>
<if test="startTime != null and startTime != '' ">
<![CDATA[ and start_time = #{startTime}]]>
</if>
<if test="endTime != null and endTime != '' ">
<![CDATA[ and end_time = #{endTime}]]>
</if>
<if test="duration != null and duration != '' ">
<![CDATA[ and duration = #{duration}]]>
</if>
<if test="source != null and source != '' ">
<![CDATA[ and source = #{source}]]>
</if>
<if test="ruksj != null and ruksj != '' ">
<![CDATA[ and ruksj = #{ruksj}]]>
</if>
<if test="laneId != null and laneId != '' ">
<![CDATA[ and lane_id = #{laneId}]]>
</if>
<if test="rid != null and rid != '' ">
<![CDATA[ and rid = #{rid}]]>
</if>
<if test="segmentId != null and segmentId != '' ">
<![CDATA[ and segment_id = #{segmentId}]]>
</if>
<if test="crossId != null and crossId != '' ">
<![CDATA[ and cross_id = #{crossId}]]>
</if>
<if test="greenId != null and greenId != '' ">
<![CDATA[ and green_id = #{greenId}]]>
</if>
<if test="cameraOid != null and cameraOid != '' ">
<![CDATA[ and camera_oid = #{cameraOid}]]>
</if>
<if test="eventSerialNumber != null and eventSerialNumber != '' ">
<![CDATA[ and event_serial_number = #{eventSerialNumber}]]>
</if>
<if test="dataStatus != null and dataStatus != '' ">
<![CDATA[ and data_status = #{dataStatus}]]>
</if>
<if test="globalId != null and globalId != '' ">
<![CDATA[ and global_id = #{globalId}]]>
</if>
<if test="stationId != null and stationId != '' ">
<![CDATA[ and station_id = #{stationId}]]>
</if>
<if test="eventId != null and eventId != '' ">
<![CDATA[ and event_id = #{eventId}]]>
</if>
<if test="remark != null and remark != '' ">
<![CDATA[ and remark = #{remark}]]>
</if>
<if test="extend != null and extend != '' ">
<![CDATA[ and extend = #{extend}]]>
</if>
<if test="dt != null and dt != '' ">
<![CDATA[ and dt = #{dt}]]>
</if>
<if test="videoUrls != null and videoUrls != '' ">
<![CDATA[ and video_urls = #{videoUrls}]]>
</if>
<if test="targetType != null and targetType != '' ">
<![CDATA[ and target_type = #{targetType}]]>
</if>
<if test="alarmStatus != null and alarmStatus != '' ">
<![CDATA[ and alarm_status = #{alarmStatus}]]>
</if>
<if test="optStatus != null and optStatus != '' ">
<![CDATA[ and opt_status = #{optStatus}]]>
</if>
<if test="modifyTime != null and modifyTime != '' ">
<![CDATA[ and modify_time = #{modifyTime}]]>
</if>
<if test="dir != null and dir != '' ">
<![CDATA[ and dir = #{dir}]]>
</if>
<if test="turn != null and turn != '' ">
<![CDATA[ and turn = #{turn}]]>
</if>
<if test="unbalanceIndex != null and unbalanceIndex != '' ">
<![CDATA[ and unbalance_index = #{unbalanceIndex}]]>
</if>
<if test="spilloverIndex != null and spilloverIndex != '' ">
<![CDATA[ and spillover_index = #{spilloverIndex}]]>
</if>
<if test="trafficIndex != null and trafficIndex != '' ">
<![CDATA[ and traffic_index = #{trafficIndex}]]>
</if>
</sql>
<!--更新操作-->
<sql id="sql_update">
<set>
<if test="oid != null and oid != '' ">
<![CDATA[ oid = #{oid}, ]]>
</if>
<if test="plateNo != null and plateNo != '' ">
<![CDATA[ plate_no = #{plateNo}, ]]>
</if>
<if test="objectType != null and objectType != '' ">
<![CDATA[ object_type = #{objectType}, ]]>
</if>
<if test="confidence != null and confidence != '' ">
<![CDATA[ confidence = #{confidence}, ]]>
</if>
<if test="detectTime != null and detectTime != '' ">
<![CDATA[ detect_time = #{detectTime}, ]]>
</if>
<if test="grade != null and grade != '' ">
<![CDATA[ grade = #{grade}, ]]>
</if>
<if test="placeDesc != null and placeDesc != '' ">
<![CDATA[ place_desc = #{placeDesc}, ]]>
</if>
<if test="lng != null and lng != '' ">
<![CDATA[ lng = #{lng}, ]]>
</if>
<if test="lat != null and lat != '' ">
<![CDATA[ lat = #{lat}, ]]>
</if>
<if test="category != null and category != '' ">
<![CDATA[ category = #{category}, ]]>
</if>
<if test="type != null and type != '' ">
<![CDATA[ type = #{type}, ]]>
</if>
<if test="startTime != null and startTime != '' ">
<![CDATA[ start_time = #{startTime}, ]]>
</if>
<if test="endTime != null and endTime != '' ">
<![CDATA[ end_time = #{endTime}, ]]>
</if>
<if test="duration != null and duration != '' ">
<![CDATA[ duration = #{duration}, ]]>
</if>
<if test="source != null and source != '' ">
<![CDATA[ source = #{source}, ]]>
</if>
<if test="ruksj != null and ruksj != '' ">
<![CDATA[ ruksj = #{ruksj}, ]]>
</if>
<if test="laneId != null and laneId != '' ">
<![CDATA[ lane_id = #{laneId}, ]]>
</if>
<if test="rid != null and rid != '' ">
<![CDATA[ rid = #{rid}, ]]>
</if>
<if test="segmentId != null and segmentId != '' ">
<![CDATA[ segment_id = #{segmentId}, ]]>
</if>
<if test="crossId != null and crossId != '' ">
<![CDATA[ cross_id = #{crossId}, ]]>
</if>
<if test="greenId != null and greenId != '' ">
<![CDATA[ green_id = #{greenId}, ]]>
</if>
<if test="cameraOid != null and cameraOid != '' ">
<![CDATA[ camera_oid = #{cameraOid}, ]]>
</if>
<if test="eventSerialNumber != null and eventSerialNumber != '' ">
<![CDATA[ event_serial_number = #{eventSerialNumber}, ]]>
</if>
<if test="dataStatus != null and dataStatus != '' ">
<![CDATA[ data_status = #{dataStatus}, ]]>
</if>
<if test="globalId != null and globalId != '' ">
<![CDATA[ global_id = #{globalId}, ]]>
</if>
<if test="stationId != null and stationId != '' ">
<![CDATA[ station_id = #{stationId}, ]]>
</if>
<if test="eventId != null and eventId != '' ">
<![CDATA[ event_id = #{eventId}, ]]>
</if>
<if test="remark != null and remark != '' ">
<![CDATA[ remark = #{remark}, ]]>
</if>
<if test="extend != null and extend != '' ">
<![CDATA[ extend = #{extend}, ]]>
</if>
<if test="dt != null and dt != '' ">
<![CDATA[ dt = #{dt}, ]]>
</if>
<if test="videoUrls != null and videoUrls != '' ">
<![CDATA[ video_urls = #{videoUrls}, ]]>
</if>
<if test="targetType != null and targetType != '' ">
<![CDATA[ target_type = #{targetType}, ]]>
</if>
<if test="alarmStatus != null and alarmStatus != '' ">
<![CDATA[ alarm_status = #{alarmStatus}, ]]>
</if>
<if test="optStatus != null and optStatus != '' ">
<![CDATA[ opt_status = #{optStatus}, ]]>
</if>
<if test="modifyTime != null and modifyTime != '' ">
<![CDATA[ modify_time = #{modifyTime}, ]]>
</if>
<if test="dir != null and dir != '' ">
<![CDATA[ dir = #{dir}, ]]>
</if>
<if test="turn != null and turn != '' ">
<![CDATA[ turn = #{turn}, ]]>
</if>
<if test="unbalanceIndex != null and unbalanceIndex != '' ">
<![CDATA[ unbalance_index = #{unbalanceIndex}, ]]>
</if>
<if test="spilloverIndex != null and spilloverIndex != '' ">
<![CDATA[ spillover_index = #{spilloverIndex}, ]]>
</if>
<if test="trafficIndex != null and trafficIndex != '' ">
<![CDATA[ traffic_index = #{trafficIndex}, ]]>
</if>
</set>
</sql>
</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);
}
package net.wanji.opt.servicev2.judgeanalysis.impl;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
import net.wanji.opt.common.enums.*;
import net.wanji.opt.controllerv2.report.util.TimeIntervalMerger;
import net.wanji.opt.controllerv2.report.vo.*;
import net.wanji.opt.dao.mapper.judgeanalysis.AnalysisGreenCongestionPeriodMapper;
import net.wanji.opt.dao.mapper.report.GreenWaveCrossRidMapper;
import net.wanji.opt.entity.judgeanalysis.AnalysisGreenCongestionPeriod;
import net.wanji.opt.entity.report.GreenWaveCrossRidInfo;
import net.wanji.opt.servicev2.judgeanalysis.AnalysisGreenCongestionPeriodService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.text.DateFormat;
......@@ -29,6 +38,10 @@ import java.util.stream.Collectors;
public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCongestionPeriodService {
@Resource
private AnalysisGreenCongestionPeriodMapper analysisGreenCongestionPeriodMapper;
@Autowired
private GreenWaveCrossRidMapper greenWaveCrossRidMapper;
@Autowired
private GreenwaveInfoMapper greenwaveInfoMapper;
public void selectCountByCongestionPeriod() throws ParseException {
LocalDate currentDate = LocalDate.now();
......@@ -53,131 +66,422 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
String roadDirection = "";
String startTime = "";
String endTime = "";
for(AnalysisGreenCongestionPeriod temp : greenList){
if(temp.getGreenId().equals(greenId) && temp.getRoadDirection().equals(roadDirection)){
if(temp.getStatus().equals("2")){
for (AnalysisGreenCongestionPeriod temp : greenList) {
if (temp.getGreenId().equals(greenId) && temp.getRoadDirection().equals(roadDirection)) {
if (temp.getStatus().equals("2")) {
List<AnalysisGreenCongestionPeriod> list = queue.stream().filter(item -> item.getStatus().equals("3")).collect(Collectors.toList());
if(!CollectionUtils.isNotEmpty(list)){
if (!CollectionUtils.isNotEmpty(list)) {
List<AnalysisGreenCongestionPeriod> list1 = queue.stream().filter(item -> item.getStatus().equals("2")).collect(Collectors.toList());
if(!CollectionUtils.isNotEmpty(list1)){
if (!CollectionUtils.isNotEmpty(list1)) {
startTime = temp.getStartTime();
}
}else {
if(list.size() == 1 && queue.getFirst().getStatus().equals("3") ){
} else {
if (list.size() == 1 && queue.getFirst().getStatus().equals("3")) {
endTime = queue.getFirst().getStartTime();
Map<String,Object> map = new HashMap<>();
map.put("startTime",startTime);
map.put("endTime",endTime);
map.put("weekNumber",weekNumber);
map.put("weekDay",i + 1);
map.put("roadDirection",roadDirection);
map.put("peakType",isMoning(startTime));
map.put("weekStartTime",todayOfWeek);
map.put("weekEndTime",endOfWeek);
map.put("greenId",greenId);
map.put("status",queue.getFirst().getStatus());
Map<String, Object> map = new HashMap<>();
map.put("startTime", startTime);
map.put("endTime", endTime);
map.put("weekNumber", weekNumber);
map.put("weekDay", i + 1);
map.put("roadDirection", roadDirection);
map.put("peakType", isMoning(startTime));
map.put("weekStartTime", todayOfWeek);
map.put("weekEndTime", endOfWeek);
map.put("greenId", greenId);
map.put("status", queue.getFirst().getStatus());
//写入缓行数据
analysisGreenCongestionPeriodMapper.insertGreenCongestionPeriodData(map);
//记录缓行开始时间
if(queue.get(1).getStatus().equals("2")) {
if (queue.get(1).getStatus().equals("2")) {
startTime = queue.get(1).getStartTime();
}else if (queue.getLast().getStatus().equals("2")) {
} else if (queue.getLast().getStatus().equals("2")) {
startTime = queue.getLast().getStartTime();
}else {
} else {
startTime = temp.getStartTime();
}
}
}
}else if(temp.getStatus().equals("1")){
} else if (temp.getStatus().equals("1")) {
List<AnalysisGreenCongestionPeriod> list = queue.stream().filter(item -> item.getStatus().equals("3")).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(list) && queue.size() > 2 && list.size() == 1 && queue.getFirst().getStatus().equals("3")){
if (CollectionUtils.isNotEmpty(list) && queue.size() > 2 && list.size() == 1 && queue.getFirst().getStatus().equals("3")) {
endTime = queue.getFirst().getStartTime();
Map<String,Object> map = new HashMap<>();
map.put("startTime",startTime);
map.put("endTime",endTime);
map.put("weekNumber",weekNumber);
map.put("weekDay",i + 1);
map.put("roadDirection",roadDirection);
map.put("peakType",isMoning(startTime));
map.put("weekStartTime",todayOfWeek);
map.put("weekEndTime",endOfWeek);
map.put("greenId",greenId);
map.put("status",queue.getFirst().getStatus());
Map<String, Object> map = new HashMap<>();
map.put("startTime", startTime);
map.put("endTime", endTime);
map.put("weekNumber", weekNumber);
map.put("weekDay", i + 1);
map.put("roadDirection", roadDirection);
map.put("peakType", isMoning(startTime));
map.put("weekStartTime", todayOfWeek);
map.put("weekEndTime", endOfWeek);
map.put("greenId", greenId);
map.put("status", queue.getFirst().getStatus());
//写入缓行数据
analysisGreenCongestionPeriodMapper.insertGreenCongestionPeriodData(map);
if(queue.get(1).getStatus().equals("2")) {
if (queue.get(1).getStatus().equals("2")) {
startTime = queue.get(1).getStartTime();
}
}else {
} else {
List<AnalysisGreenCongestionPeriod> list1 = queue.stream().filter(item -> item.getStatus().equals("2")).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(list1) && queue.size() > 2 && list1.size() == 1 && queue.getFirst().getStatus().equals("2") && !queue.get(1).getStatus().equals("3")){
if (CollectionUtils.isNotEmpty(list1) && queue.size() > 2 && list1.size() == 1 && queue.getFirst().getStatus().equals("2") && !queue.get(1).getStatus().equals("3")) {
endTime = queue.getFirst().getStartTime();
Map<String,Object> map = new HashMap<>();
map.put("startTime",startTime);
map.put("endTime",endTime);
map.put("weekNumber",weekNumber);
map.put("weekDay",i + 1);
map.put("roadDirection",roadDirection);
map.put("peakType",isMoning(startTime));
map.put("weekStartTime",todayOfWeek);
map.put("weekEndTime",endOfWeek);
map.put("greenId",greenId);
map.put("status",queue.getFirst().getStatus());
Map<String, Object> map = new HashMap<>();
map.put("startTime", startTime);
map.put("endTime", endTime);
map.put("weekNumber", weekNumber);
map.put("weekDay", i + 1);
map.put("roadDirection", roadDirection);
map.put("peakType", isMoning(startTime));
map.put("weekStartTime", todayOfWeek);
map.put("weekEndTime", endOfWeek);
map.put("greenId", greenId);
map.put("status", queue.getFirst().getStatus());
//写入缓行数据
analysisGreenCongestionPeriodMapper.insertGreenCongestionPeriodData(map);
}
}
}else if(temp.getStatus().equals("3")){
} else if (temp.getStatus().equals("3")) {
List<AnalysisGreenCongestionPeriod> list = queue.stream().filter(item -> item.getStatus().equals("3")).collect(Collectors.toList());
if(!CollectionUtils.isNotEmpty(list)){
if (!CollectionUtils.isNotEmpty(list)) {
List<AnalysisGreenCongestionPeriod> list1 = queue.stream().filter(item -> item.getStatus().equals("2")).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(list1) && list1.size() >= 1 && queue.getLast().getStatus().equals("2") ){
if (CollectionUtils.isNotEmpty(list1) && list1.size() >= 1 && queue.getLast().getStatus().equals("2")) {
endTime = queue.getLast().getStartTime();
Map<String,Object> map = new HashMap<>();
map.put("startTime",startTime);
map.put("endTime",endTime);
map.put("weekNumber",weekNumber);
map.put("weekDay",i + 1);
map.put("roadDirection",roadDirection);
map.put("peakType",isMoning(startTime));
map.put("weekStartTime",todayOfWeek);
map.put("weekEndTime",endOfWeek);
map.put("greenId",greenId);
map.put("status",queue.getLast().getStatus());
Map<String, Object> map = new HashMap<>();
map.put("startTime", startTime);
map.put("endTime", endTime);
map.put("weekNumber", weekNumber);
map.put("weekDay", i + 1);
map.put("roadDirection", roadDirection);
map.put("peakType", isMoning(startTime));
map.put("weekStartTime", todayOfWeek);
map.put("weekEndTime", endOfWeek);
map.put("greenId", greenId);
map.put("status", queue.getLast().getStatus());
//写入缓行数据
analysisGreenCongestionPeriodMapper.insertGreenCongestionPeriodData(map);
//记录拥堵开始时间
startTime = temp.getStartTime();
}else {
} else {
startTime = temp.getStartTime();
}
}
}
enqueue(queue,temp);
}else if(temp.getGreenId().equals(greenId) && !temp.getRoadDirection().equals(roadDirection)){
enqueue(queue, temp);
} else if (temp.getGreenId().equals(greenId) && !temp.getRoadDirection().equals(roadDirection)) {
queue.clear();
roadDirection = temp.getRoadDirection();
if(temp.getStatus().equals("2")){
if (temp.getStatus().equals("2")) {
startTime = temp.getStartTime();
}
enqueue(queue,temp);
}else {
enqueue(queue, temp);
} else {
queue.clear();
greenId = temp.getGreenId();
roadDirection = temp.getRoadDirection();
if(temp.getStatus().equals("2")){
if (temp.getStatus().equals("2")) {
startTime = temp.getStartTime();
}
enqueue(queue,temp);
enqueue(queue, temp);
}
}
}
}
public void enqueue(LinkedList<AnalysisGreenCongestionPeriod> queue , AnalysisGreenCongestionPeriod temp ){
if(queue.size() >= 3 ){
@Override
public GreenReportProblemOverallAnalysisResult selectListByWeek(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());
}
//周干线问题分析
List<AnalysisGreenCongestionPeriodVO> analysisGreenCongestionPeriodVOS = analysisGreenCongestionPeriodMapper.selectListByWeek(yearWeek);
GreenReportProblemOverallAnalysisResult greenReportProblemOverallAnalysisResult = new GreenReportProblemOverallAnalysisResult();
long countTime = 0;
//筛选拥堵
List<AnalysisGreenCongestionPeriodVO> voList = analysisGreenCongestionPeriodVOS.stream().filter(x -> x.getStatus() == 3).collect(Collectors.toList());
//按干线分组
Map<Integer, List<AnalysisGreenCongestionPeriodVO>> listMap = voList.stream().collect(Collectors.groupingBy(AnalysisGreenCongestionPeriodVO::getGreenId));
List<GreenReportProblemOverallDataVO> greenList = new ArrayList<>();
//干线循环
for (Integer greenId : greenIdList) {
List<AnalysisGreenCongestionPeriodVO> periodVOS = listMap.get(greenId);
//按方向分组
if(ObjectUtils.isEmpty(periodVOS)){
continue;
}
Map<String, List<AnalysisGreenCongestionPeriodVO>> dirMap = periodVOS.stream().collect(Collectors.groupingBy(AnalysisGreenCongestionPeriodVO::getRoadDirection));
//获取干线信息
List<GreenWaveCrossRidInfo> greenInfoList = greenWaveCrossRidMapper.getGreenInfoList(String.valueOf(greenId));
GreenReportProblemOverallDataVO greenReportProblemOverallData = new GreenReportProblemOverallDataVO();
greenReportProblemOverallData.setGreenId(String.valueOf(greenId));
greenReportProblemOverallData.setGreenName(greenInfoList.get(0).getGreenwaveName());
List<GreenWaveDirProblemDataVO> dataList = new ArrayList<>();
//方向循环
for (List<AnalysisGreenCongestionPeriodVO> congestionPeriodVOS : dirMap.values()) {
GreenWaveDirProblemDataVO greenWaveDirProblemData = new GreenWaveDirProblemDataVO();
greenWaveDirProblemData.setDir(congestionPeriodVOS.get(0).getRoadDirection());
greenWaveDirProblemData.setCongestCount(congestionPeriodVOS.size());
greenWaveDirProblemData.setGreenWaveType(RoadLevelEnum.getDesc(greenInfoList.get(0).getLevel()));
greenWaveDirProblemData.setDir(GreenBeltDirEnum.getDesc(congestionPeriodVOS.get(0).getRoadDirection()));
long dirCountTime = 0;
double congestIndexCount = 0;
for (AnalysisGreenCongestionPeriodVO congestionPeriodVO : congestionPeriodVOS) {
congestIndexCount += congestionPeriodVO.getCongestIndex();
long time = congestionPeriodVO.getCongestEndTime().getTime() - congestionPeriodVO.getCongestStartTime().getTime();
dirCountTime += time;
countTime += time;
}
long dirHour = dirCountTime / 1000;
double congestIndexCountAvg = 0;
if (congestionPeriodVOS.size() != 0) {
congestIndexCountAvg = Math.round(congestIndexCount / congestionPeriodVOS.size()*100)/100.0;
}
greenWaveDirProblemData.setCongestIndex(congestIndexCountAvg);
greenWaveDirProblemData.setCongestDuration(Integer.valueOf(String.valueOf(dirHour)));
dataList.add(greenWaveDirProblemData);
}
greenReportProblemOverallData.setList(dataList);
greenList.add(greenReportProblemOverallData);
}
//按拥堵指数降序排序
List<AnalysisGreenCongestionPeriodVO> periodVOS = voList.stream().sorted(Comparator.comparing(AnalysisGreenCongestionPeriodVO::getCongestIndex).reversed())
.collect(Collectors.toList());
Set<Integer> greenIds = new HashSet<>();
for (AnalysisGreenCongestionPeriodVO periodVO : periodVOS) {
greenIds.add(periodVO.getGreenId());
if (greenIds.size() >= 2) {
break;
}
}
//拼接干线名称
String congestHeavyGreenWave = "";
for (Integer greenId : greenIds) {
List<GreenWaveCrossRidInfo> greenInfoList = greenWaveCrossRidMapper.getGreenInfoList(String.valueOf(greenId));
if ("".equals(congestHeavyGreenWave)) {
congestHeavyGreenWave = congestHeavyGreenWave + greenInfoList.get(0).getGreenwaveName();
} else {
congestHeavyGreenWave = congestHeavyGreenWave + "、" + greenInfoList.get(0).getGreenwaveName();
}
}
List<GreenReportProblemOverallDataVO> overallDataVOS = greenList.stream().sorted(Comparator.comparing(x -> {
double congestIndexAll = 0;
for (GreenWaveDirProblemDataVO dataVO : x.getList()) {
congestIndexAll += dataVO.getCongestIndex();
}
return congestIndexAll;
})).collect(Collectors.toList());
for (int i = 0; i < overallDataVOS.size(); i++) {
overallDataVOS.get(i).setSort(String.valueOf(i+1));
}
greenReportProblemOverallAnalysisResult.setCongestHeavyGreenWave(congestHeavyGreenWave);
greenReportProblemOverallAnalysisResult.setTotalCongestCount(String.valueOf(voList.size())+"次");
greenReportProblemOverallAnalysisResult.setTotalCongestDuration(String.valueOf(countTime / 60 / 60 / 1000.0)+"小时");
greenReportProblemOverallAnalysisResult.setDataList(overallDataVOS);
return greenReportProblemOverallAnalysisResult;
}
private SimpleDateFormat format = new SimpleDateFormat("HH:mm");
@Override
public List<GreenReportProblemDetailAnalysisResult> getProblemDetail(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());
}
//周干线问题分析
List<AnalysisGreenCongestionPeriodVO> analysisGreenCongestionPeriodVOS = analysisGreenCongestionPeriodMapper.selectListByWeek(yearWeek);
//按干线分组
Map<Integer, List<AnalysisGreenCongestionPeriodVO>> greenMap = analysisGreenCongestionPeriodVOS.stream().collect(Collectors.groupingBy(AnalysisGreenCongestionPeriodVO::getGreenId));
List<GreenReportProblemDetailAnalysisResult> resultList = new ArrayList<>();
for (Integer greenId : greenIdList) {
List<AnalysisGreenCongestionPeriodVO> greenCongestionPeriodVOS = greenMap.get(greenId);
GreenReportProblemDetailAnalysisResult greenReportProblemDetailAnalysisResponse = new GreenReportProblemDetailAnalysisResult();
List<String> workDayCongestSpanList = new ArrayList<>();
double workDayCongestTime = 0;
double workDayCongestIndex = 0;
int workDayCongestCount = 0;
List<String> workDaySlowRunSpanList = new ArrayList<>();
double workDaySlowRunTime = 0;
double workDaySlowCongestIndex = 0;
int workDaySlowCongestCount = 0;
List<String> weekEndCongestSpanList = new ArrayList<>();
double weekEndCongestTime = 0;
double weekEndCongestIndex = 0;
int weekEndCongestCount = 0;
List<String> weekEndSlowRunSpanList = new ArrayList<>();
double weekEndSlowRunTime = 0;
double weekEndSlowCongestIndex = 0;
int weekEndSlowCongestCount = 0;
List<GreenReportProblemDetailVO> greenReportProblemDetailList = new ArrayList<>();
for (AnalysisGreenCongestionPeriodVO periodVO : greenCongestionPeriodVOS) {
if (periodVO.getStatus() == ConsgestionStatusEnum.CONSGESTION_STATUS.getCode() && periodVO.getWeekDay() <= WeekEnum.FRI.getCode()) {
workDayCongestCount++;
workDayCongestTime += (periodVO.getCongestEndTime().getTime() - periodVO.getCongestStartTime().getTime());
workDayCongestIndex += periodVO.getCongestIndex();
String time = getTimeString(periodVO);
workDayCongestSpanList.add(time);
if (periodVO.getCongestEndTime().getTime() - periodVO.getCongestStartTime().getTime() >= 10 * 60 * 1000) {
GreenReportProblemDetailVO greenReportProblemDetail = getGreenReportProblemDetail(periodVO);
greenReportProblemDetailList.add(greenReportProblemDetail);
}
} else if (periodVO.getStatus() == ConsgestionStatusEnum.CONSGESTION_STATUS.getCode() && periodVO.getWeekDay() > WeekEnum.FRI.getCode()) {
weekEndCongestCount++;
weekEndCongestTime += (periodVO.getCongestEndTime().getTime() - periodVO.getCongestStartTime().getTime());
weekEndCongestIndex += periodVO.getCongestIndex();
String time = getTimeString(periodVO);
weekEndCongestSpanList.add(time);
if (periodVO.getCongestEndTime().getTime() - periodVO.getCongestStartTime().getTime() >= 10 * 60 * 1000) {
GreenReportProblemDetailVO greenReportProblemDetail = getGreenReportProblemDetail(periodVO);
greenReportProblemDetailList.add(greenReportProblemDetail);
}
} else if (periodVO.getStatus() == ConsgestionStatusEnum.AMBLE_STATUS.getCode() && periodVO.getWeekDay() <= WeekEnum.FRI.getCode()) {
workDaySlowCongestCount++;
workDaySlowRunTime += (periodVO.getCongestEndTime().getTime() - periodVO.getCongestStartTime().getTime());
workDaySlowCongestIndex += periodVO.getCongestIndex();
String time = getTimeString(periodVO);
workDaySlowRunSpanList.add(time);
if (periodVO.getCongestEndTime().getTime() - periodVO.getCongestStartTime().getTime() >= 10 * 60 * 1000) {
GreenReportProblemDetailVO greenReportProblemDetail = getGreenReportProblemDetail(periodVO);
greenReportProblemDetailList.add(greenReportProblemDetail);
}
} else if (periodVO.getStatus() == ConsgestionStatusEnum.AMBLE_STATUS.getCode() && periodVO.getWeekDay() > WeekEnum.FRI.getCode()) {
weekEndSlowCongestCount++;
weekEndSlowRunTime += (periodVO.getCongestEndTime().getTime() - periodVO.getCongestStartTime().getTime());
weekEndSlowCongestIndex += periodVO.getCongestIndex();
String time = getTimeString(periodVO);
weekEndSlowRunSpanList.add(time);
if (periodVO.getCongestEndTime().getTime() - periodVO.getCongestStartTime().getTime() >= 10 * 60 * 1000) {
GreenReportProblemDetailVO greenReportProblemDetail = getGreenReportProblemDetail(periodVO);
greenReportProblemDetailList.add(greenReportProblemDetail);
}
}
}
greenReportProblemDetailAnalysisResponse.setDataList(greenReportProblemDetailList);
List<GreenWaveCrossRidInfo> greenInfoList = greenWaveCrossRidMapper.getGreenInfoList(String.valueOf(greenId));
greenReportProblemDetailAnalysisResponse.setGreenId(String.valueOf(greenId));
greenReportProblemDetailAnalysisResponse.setGreenName(greenInfoList.get(0).getGreenwaveName());
greenReportProblemDetailAnalysisResponse.setWorkDayCongestSpan(TimeIntervalMerger.timeString(workDayCongestSpanList));
greenReportProblemDetailAnalysisResponse.setWorkDaySlowRunSpan(TimeIntervalMerger.timeString(workDaySlowRunSpanList));
greenReportProblemDetailAnalysisResponse.setWeekEndCongestSpan(TimeIntervalMerger.timeString(weekEndCongestSpanList));
greenReportProblemDetailAnalysisResponse.setWeekEndSlowRunSpan(TimeIntervalMerger.timeString(weekEndSlowRunSpanList));
// 工作日平均拥堵时间
if (workDayCongestCount != 0) {
greenReportProblemDetailAnalysisResponse.setWorkDayAvgCongestTime(
String.valueOf(Math.round(workDayCongestTime / 1000.0 / 60 / 60 / workDayCongestCount * 100) / 100.0) + "小时"
);
} else {
greenReportProblemDetailAnalysisResponse.setWorkDayAvgCongestTime("0小时");
}
// 工作日平均拥堵指数
if (workDayCongestCount != 0) {
greenReportProblemDetailAnalysisResponse.setWorkDayAvgCongestIndex(
String.valueOf(Math.round(workDayCongestIndex / workDayCongestCount * 100) / 100.0)
);
} else {
greenReportProblemDetailAnalysisResponse.setWorkDayAvgCongestIndex("0");
}
// 工作日平均缓行时间
if (workDaySlowCongestCount != 0) {
greenReportProblemDetailAnalysisResponse.setWorkDayAvgSlowRunTime(
String.valueOf(Math.round(workDaySlowRunTime / 1000.0 / 60 / 60 / workDaySlowCongestCount * 100) / 100.0) + "小时"
);
} else {
greenReportProblemDetailAnalysisResponse.setWorkDayAvgSlowRunTime("0小时");
}
// 工作日平均缓行拥堵指数
if (workDaySlowCongestCount != 0) {
greenReportProblemDetailAnalysisResponse.setWorkDayAvgSlowAvgCongestIndex(
String.valueOf(Math.round(workDaySlowCongestIndex / workDaySlowCongestCount * 100) / 100.0)
);
} else {
greenReportProblemDetailAnalysisResponse.setWorkDayAvgSlowAvgCongestIndex("0");
}
// 周末平均拥堵时间
if (weekEndCongestCount != 0) {
greenReportProblemDetailAnalysisResponse.setWeekEndAvgCongestTime(
String.valueOf(Math.round(weekEndCongestTime / 1000.0 / 60 / 60 / weekEndCongestCount * 100) / 100.0) + "小时"
);
} else {
greenReportProblemDetailAnalysisResponse.setWeekEndAvgCongestTime("0小时");
}
// 周末平均拥堵指数
if (weekEndCongestCount != 0) {
greenReportProblemDetailAnalysisResponse.setWeekEndAvgCongestIndex(
String.valueOf(Math.round(weekEndCongestIndex / weekEndCongestCount * 100) / 100.0)
);
} else {
greenReportProblemDetailAnalysisResponse.setWeekEndAvgCongestIndex("0");
}
// 周末平均缓行时间
if (weekEndSlowCongestCount != 0) {
greenReportProblemDetailAnalysisResponse.setWeekEndAvgSlowRunTime(
String.valueOf(Math.round(weekEndSlowRunTime / 1000.0 / 60 / 60 / weekEndSlowCongestCount * 100) / 100.0) + "小时"
);
} else {
greenReportProblemDetailAnalysisResponse.setWeekEndAvgSlowRunTime("0小时");
}
// 周末平均缓行拥堵指数
if (weekEndSlowCongestCount != 0) {
greenReportProblemDetailAnalysisResponse.setWeekEndAvgSlowAvgCongestIndex(
String.valueOf(Math.round(weekEndSlowCongestIndex / weekEndSlowCongestCount * 100) / 100.0)
);
} else {
greenReportProblemDetailAnalysisResponse.setWeekEndAvgSlowAvgCongestIndex("0");
}
resultList.add(greenReportProblemDetailAnalysisResponse);
}
return resultList;
}
private GreenReportProblemDetailVO getGreenReportProblemDetail(AnalysisGreenCongestionPeriodVO periodVO) {
GreenReportProblemDetailVO greenReportProblemDetail = new GreenReportProblemDetailVO();
greenReportProblemDetail.setWeek(WeekEnum.getDesc(periodVO.getWeekDay()));
greenReportProblemDetail.setProblemSpan(getTimeString(periodVO));
greenReportProblemDetail.setStatus(ConsgestionStatusEnum.getDesc(periodVO.getStatus()));
greenReportProblemDetail.setAvgSpeed(Math.round(periodVO.getSpeed() * 100) / 100.0);
greenReportProblemDetail.setTravelTime(periodVO.getTravelTime() / 60);
greenReportProblemDetail.setCongestIndex(Math.round(periodVO.getCongestIndex() * 100) / 100.0);
return greenReportProblemDetail;
}
private String getTimeString(AnalysisGreenCongestionPeriodVO periodVO) {
String start = format.format(periodVO.getCongestStartTime());
String end = format.format(periodVO.getCongestEndTime());
return start + "~" + end;
}
public void enqueue(LinkedList<AnalysisGreenCongestionPeriod> queue, AnalysisGreenCongestionPeriod temp) {
if (queue.size() >= 3) {
queue.poll();
}
queue.offer(temp);
......@@ -187,9 +491,9 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date temp = fmt.parse(date);
int hour = temp.getHours();
if(hour <= 12){
if (hour <= 12) {
return 1;
}else {
} else {
return 2;
}
}
......
......@@ -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);
}
}
package net.wanji.opt.servicev2.report.impl;
import net.wanji.common.enums.WeekEnum;
import net.wanji.common.framework.dubbointerface.impl.BaseDubboInterfaceImpl;
import net.wanji.common.framework.exception.DubboProviderException;
import net.wanji.common.framework.mapper.BaseInterfaceMapper;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.utils.tool.DateUtil;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
import net.wanji.opt.common.ArithOfBigDecmial;
import net.wanji.opt.common.enums.PeakNameEnum;
import net.wanji.opt.constant.PeakEnum;
import net.wanji.opt.constant.WeekDayEnum;
import net.wanji.opt.entity.report.AnalysisGreenWavePeakDetail;
import net.wanji.opt.servicev2.report.AnalysisGreenWavePeakDetailService;
import net.wanji.opt.dao.mapper.report.AnalysisGreenWavePeakDetailMapper;
import lombok.extern.slf4j.Slf4j;
import net.wanji.opt.vo2.report.GreenCongestTimeSpanVO;
import net.wanji.opt.vo2.report.GreenReportRunStateResponseVO;
import net.wanji.opt.vo2.report.GreenReportRunStatedDataVO;
import org.joda.time.DateTime;
import org.joda.time.Minutes;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* <p>
*
* </p>
*
* @Author fengyi
* @Date 2025-04-07
*/
@Slf4j
@Component
@Service
public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceImpl<AnalysisGreenWavePeakDetail> implements AnalysisGreenWavePeakDetailService {
@Resource
private AnalysisGreenWavePeakDetailMapper analysisGreenWavePeakDetailMapper;
@Resource
private GreenwaveInfoMapper greenwaveInfoMapper;
@Override
public BaseInterfaceMapper<AnalysisGreenWavePeakDetail> getBaseInterfaceMapper() {
return this.analysisGreenWavePeakDetailMapper;
}
@Override
public List<GreenReportRunStateResponseVO> selectWeekRunStateSituation(String ids, Integer year, Integer week) {
List<GreenReportRunStateResponseVO> retList = new ArrayList<>();
List<Integer> greenList = Stream.of(ids.split(",")).map(o -> Integer.valueOf(o)).collect(Collectors.toList());
Integer yearWeek = Integer.valueOf(year.toString() + week.toString());
Integer lastWeek = yearWeek;//Integer.valueOf(year.toString() + (week - 1);
Map<String, Object> params = new HashMap<>();
params.put("greenIdList", greenList);
params.put("yearWeek", yearWeek);
//本周数据
List<AnalysisGreenWavePeakDetail> thisWeekList = analysisGreenWavePeakDetailMapper.findByMap(params);
Map<Integer, List<AnalysisGreenWavePeakDetail>> thisWeekDataById = thisWeekList.stream().collect(Collectors.groupingBy(o -> o.getGreenId()));
params.put("yearWeek", lastWeek);
//上周数据
List<AnalysisGreenWavePeakDetail> lastWeekList = analysisGreenWavePeakDetailMapper.findByMap(params);
Map<Integer, List<AnalysisGreenWavePeakDetail>> lastWeekDataById = lastWeekList.stream().collect(Collectors.groupingBy(o -> o.getGreenId()));
List<GreenwaveInfoPO> greenInfoList = greenwaveInfoMapper.selectAll();
Map<Integer, String> greenNameMap = greenInfoList.stream().collect(Collectors.toMap(GreenwaveInfoPO::getId, GreenwaveInfoPO::getName));
//遍历本周各条干线
thisWeekDataById.forEach((k, v) -> {
//上周数据
List<AnalysisGreenWavePeakDetail> lastWeekDataList = lastWeekDataById.get(k);
//总体运行情况
GreenReportRunStateResponseVO runOverviewData = this.getRunOverview(v, lastWeekDataList);
runOverviewData.setGreenId(k+"");
runOverviewData.setGreenName(greenNameMap.get(k));
//按星期、峰期类型排序
List<AnalysisGreenWavePeakDetail> sortByWeekPeakList = v.stream().sorted(Comparator.comparing(o -> o.getWeekDay() + "_" + o.getPeakType())).collect(Collectors.toList());
List<GreenReportRunStatedDataVO> tableDataList = new ArrayList<>();
//输出每周几峰值阶段相关数据
for (AnalysisGreenWavePeakDetail detail : sortByWeekPeakList) {
GreenReportRunStatedDataVO weekData = new GreenReportRunStatedDataVO();
weekData.setWeekName(WeekDayEnum.getNameByCode(detail.getWeekDay()).getName());
weekData.setPeakName(PeakEnum.getNameByCode(Integer.valueOf(detail.getPeakType())).getName());
weekData.setThisWeekAvgSpeed(detail.getSpeed());
weekData.setThisWeekCongestIndex(detail.getTrafficIndex());
weekData.setThisWeekTravelTime(detail.getTravelTime() == null ? 0D : ArithOfBigDecmial.div(detail.getTravelTime().doubleValue(), 60));
weekData.setThisWeekDayPeakSpan(DateUtil.formatDate(detail.getPeakStartTime(), "HH:mm") + "~" + DateUtil.formatDate(detail.getPeakEndTime(), "HH:mm"));
//本周峰期内拥堵时段数据获取
List<GreenCongestTimeSpanVO> congestTimeSpan1 = analysisGreenWavePeakDetailMapper.findCongestTimeSpanInPeakTime(yearWeek, k, detail.getPeakStartTime(), detail.getPeakEndTime());
GreenCongestTimeSpanVO vo1 = congestTimeSpan1.stream().min(Comparator.comparing(GreenCongestTimeSpanVO::getCongestStartTime)).orElse(new GreenCongestTimeSpanVO());
GreenCongestTimeSpanVO vo2 = congestTimeSpan1.stream().max(Comparator.comparing(GreenCongestTimeSpanVO::getCongestEndTime)).orElse(new GreenCongestTimeSpanVO());
if (vo1.getCongestStartTime() !=null && vo2.getCongestEndTime() !=null) {
weekData.setThisWeekCongestSpan(DateUtil.formatDate(vo1.getCongestStartTime(), "HH:mm") + "~" + DateUtil.formatDate(vo2.getCongestEndTime(), "HH:mm"));
}
//上周高峰指标数据
Optional<AnalysisGreenWavePeakDetail> optional = lastWeekDataList.stream().filter(o -> Objects.equals(o.getWeekDay(), detail.getWeekDay()) && Objects.equals(o.getPeakType(), detail.getPeakType())).findFirst();
if (optional.isPresent()) {
weekData.setLastWeekAvgSpeed(optional.get().getSpeed());
weekData.setLastWeekCongestIndex(optional.get().getTrafficIndex());
weekData.setLastWeekTravelTime(optional.get().getTravelTime() == null ? 0D : ArithOfBigDecmial.div(optional.get().getTravelTime().doubleValue(), 60));
//上周峰期内拥堵时段数据获取
List<GreenCongestTimeSpanVO> congestTimeSpan2 = analysisGreenWavePeakDetailMapper.findCongestTimeSpanInPeakTime(lastWeek, k, optional.get().getPeakStartTime(), optional.get().getPeakEndTime());
GreenCongestTimeSpanVO vo3 = congestTimeSpan2.stream().min(Comparator.comparing(GreenCongestTimeSpanVO::getCongestStartTime)).orElse(new GreenCongestTimeSpanVO());
GreenCongestTimeSpanVO vo4 = congestTimeSpan2.stream().max(Comparator.comparing(GreenCongestTimeSpanVO::getCongestEndTime)).orElse(new GreenCongestTimeSpanVO());
if (vo3.getCongestStartTime() !=null && vo4.getCongestEndTime() !=null) {
weekData.setLastWeekCongestSpan(DateUtil.formatDate(vo3.getCongestStartTime(),"HH:mm")+"~"+DateUtil.formatDate(vo4.getCongestEndTime(),"HH:mm"));
}
weekData.setLastWeekDayPeakSpan(DateUtil.formatDate(optional.get().getPeakStartTime(), "HH:mm") + "~" + DateUtil.formatDate(optional.get().getPeakEndTime(), "HH:mm"));
}
tableDataList.add(weekData);
}
runOverviewData.setDataList(tableDataList);
retList.add(runOverviewData);
});
return retList;
}
/**
* 周运行概况同比
*
* @param thisWeekDataList 本周数据
* @param lastWeekDataList 上周数据
*/
public GreenReportRunStateResponseVO getRunOverview(List<AnalysisGreenWavePeakDetail> thisWeekDataList, List<AnalysisGreenWavePeakDetail> lastWeekDataList) {
GreenReportRunStateResponseVO amPeakData = this.analysisWeekAmPeakSituation(thisWeekDataList, lastWeekDataList, 1);
GreenReportRunStateResponseVO pmPeakData = this.analysisWeekAmPeakSituation(thisWeekDataList, lastWeekDataList, 2);
GreenReportRunStateResponseVO ret = new GreenReportRunStateResponseVO();
BeanUtils.copyProperties(amPeakData, ret);
BeanUtils.copyProperties(pmPeakData, ret,new String[]{"thisWeekPeakEarliestStartTime","thisWeekPeakLatestEndTime","weekAmPeakSpan","amStartSameRatioSituation","amEndSameRatioSituation","amDuration","amDurationSameRatioSituation","amMaxTravelTime","amMaxTravelTimeSameRatioSituation","amAvgContestIndex","amAvgContestIndexSameRatioSituation"});
return ret;
}
/**
* 分析周高峰时段情况
*
* @param thisWeekList 本周数据
* @param lastWeekDataList 上周数据
* @param peakType 1早高峰 2晚高峰 3平峰
* @return
*/
private GreenReportRunStateResponseVO analysisWeekAmPeakSituation(List<AnalysisGreenWavePeakDetail> thisWeekList, List<AnalysisGreenWavePeakDetail> lastWeekDataList, Integer peakType) {
GreenReportRunStateResponseVO vo = new GreenReportRunStateResponseVO();
//本周早高峰最早开始时间
AnalysisGreenWavePeakDetail earliestStartTimePo = this.getPeakTimeBoundary(thisWeekList, 1, peakType);
//本周早高峰最晚结束时间
AnalysisGreenWavePeakDetail lastEndTimePo = this.getPeakTimeBoundary(thisWeekList, 2, peakType);
//上周早高峰最早开始时间
AnalysisGreenWavePeakDetail lastWeekEarliestStartTimePo = this.getPeakTimeBoundary(lastWeekDataList, 1, peakType);
//上周早高峰最晚结束时间
AnalysisGreenWavePeakDetail lastWeekLastEndTimePo = this.getPeakTimeBoundary(lastWeekDataList, 2, peakType);
//本周与上周高峰最早开始时间差距
int minutesStart = Minutes.minutesBetween(new DateTime(earliestStartTimePo.getPeakStartTime().getTime()), new DateTime(lastWeekEarliestStartTimePo.getPeakStartTime().getTime())).getMinutes();
//本周与上周高峰最晚结束时间差距
int minutesEnd = Minutes.minutesBetween(new DateTime(earliestStartTimePo.getPeakEndTime().getTime()), new DateTime(lastWeekEarliestStartTimePo.getPeakEndTime().getTime())).getMinutes();
//====================================================================================================================================================//
//早高峰集中时段
String amPeakScope = DateUtil.formatDate(earliestStartTimePo.getPeakStartTime(), "HH:mm") + "~" + DateUtil.formatDate(lastEndTimePo.getPeakEndTime(), "HH:mm");
//====================================================================================================================================================//
//开始时间比上周
String amPeakStartSituation = "";
if (minutesStart > 0) {
amPeakStartSituation = "提前" + minutesStart + "分钟";
} else {
amPeakStartSituation = "延后" + minutesStart + "分钟";
}
//====================================================================================================================================================//
//结束时间比上周
String amPeakEndSituation = "";
if (minutesEnd > 0) {
amPeakEndSituation = "提前" + minutesEnd + "分钟";
} else {
amPeakEndSituation = "延后" + minutesEnd + "分钟";
}
//====================================================================================================================================================//
//持续时长
int amDuration1 = Minutes.minutesBetween(new DateTime(earliestStartTimePo.getPeakStartTime().getTime()), new DateTime(lastEndTimePo.getPeakEndTime().getTime())).getMinutes();
//持续时长
int amDuration2 = Minutes.minutesBetween(new DateTime(lastWeekEarliestStartTimePo.getPeakStartTime().getTime()), new DateTime(lastWeekLastEndTimePo.getPeakEndTime().getTime())).getMinutes();
//本周高峰持续时长
String amPeakDuration = amDuration1 + "分钟";
String amDurationSameRatioSituation = "";
if (amDuration1 > amDuration2) {
amDurationSameRatioSituation = "增加" + (amDuration1 - amDuration2) + "分钟";
} else {
amDurationSameRatioSituation = "减少" + (amDuration2 - amDuration1) + "分钟";
}
//====================================================================================================================================================//
//本周最大行程时间
Integer thisMaxTravelTime = thisWeekList.stream().map(AnalysisGreenWavePeakDetail::getTravelTime).max(Comparator.comparing(Integer::intValue)).orElse(0);
//上周最大行程时间
Integer lastMaxTravelTime = lastWeekDataList.stream().map(AnalysisGreenWavePeakDetail::getTravelTime).max(Comparator.comparing(Integer::intValue)).orElse(0);
//最大行程时间状况
String maxTravelTimeSituation = "";
if (thisMaxTravelTime > lastMaxTravelTime) {
maxTravelTimeSituation = "增加" + (Math.abs(thisMaxTravelTime - lastMaxTravelTime)) + "分钟";
} else {
maxTravelTimeSituation = "减少" + (Math.abs(thisMaxTravelTime - lastMaxTravelTime)) + "分钟";
}
//====================================================================================================================================================//
//本周平均拥堵指数
Double thisAvgCongestIndex = thisWeekList.stream().map(AnalysisGreenWavePeakDetail::getTrafficIndex).max(Comparator.comparing(Double::doubleValue)).orElse(0D);
//上周平均拥堵指数
Double lastAvgCongestIndex = lastWeekDataList.stream().map(AnalysisGreenWavePeakDetail::getTrafficIndex).max(Comparator.comparing(Double::doubleValue)).orElse(0D);
//平均拥堵指数状况
String amAvgCongestIndex = "";
if (thisAvgCongestIndex > lastAvgCongestIndex) {
amAvgCongestIndex = "增加" + (Math.abs(thisAvgCongestIndex - lastAvgCongestIndex)) + "";
} else {
amAvgCongestIndex = "减少" + (Math.abs(thisAvgCongestIndex - lastAvgCongestIndex)) + "";
}
//====================================================================================================================================================//
if (Objects.equals(peakType, 1)) {
vo.setWeekAmPeakSpan(amPeakScope);
vo.setAmStartSameRatioSituation(amPeakStartSituation);
vo.setAmEndSameRatioSituation(amPeakEndSituation);
vo.setAmDuration(amPeakDuration);
vo.setAmDurationSameRatioSituation(amDurationSameRatioSituation);
vo.setAmMaxTravelTime(thisMaxTravelTime + "分钟");
vo.setAmMaxTravelTimeSameRatioSituation(maxTravelTimeSituation);
vo.setAmAvgContestIndex(thisAvgCongestIndex + "");
vo.setAmAvgContestIndexSameRatioSituation(amAvgCongestIndex);
vo.setThisWeekPeakEarliestStartTime(earliestStartTimePo.getPeakStartTime());
vo.setThisWeekPeakLatestEndTime(lastEndTimePo.getPeakEndTime());
} else if (Objects.equals(peakType, 2)) {
vo.setWeekPmPeakSpan(amPeakScope);
vo.setPmStartSameRatioSituation(amPeakStartSituation);
vo.setPmEndSameRatioSituation(amPeakEndSituation);
vo.setPmDuration(amPeakDuration);
vo.setPmDurationSameRatioSituation(amDurationSameRatioSituation);
vo.setPmMaxTravelTime(thisMaxTravelTime + "分钟");
vo.setPmMaxTravelTimeSameRatioSituation(maxTravelTimeSituation);
vo.setPmAvgContestIndex(thisAvgCongestIndex + "");
vo.setPmAvgContestIndexSameRatioSituation(amAvgCongestIndex);
vo.setLastWeekPeakEarliestStartTime(earliestStartTimePo.getPeakStartTime());
vo.setLastWeekPeakLatestEndTime(lastEndTimePo.getPeakEndTime());
}
return vo;
}
/**
* 获取峰值时间边界
*
* @param list 包含波峰详情的列表
* @param type 类型 1:高峰开始时间 2高峰截止时间
* @param peakType 波峰类型,1高峰 2晚峰 3平峰
* @return 符合条件的波峰详情对象;如果没有找到符合条件的对象,则返回null
*/
private AnalysisGreenWavePeakDetail getPeakTimeBoundary(List<AnalysisGreenWavePeakDetail> list, Integer type, Integer peakType) {
AnalysisGreenWavePeakDetail ret = null;
if (Objects.equals(1, type)) {
Optional<AnalysisGreenWavePeakDetail> optional = list.stream().filter(o -> Objects.equals(peakType.toString(), o.getPeakType())).min(Comparator.comparing(o -> o.getPeakStartTime()));
if (optional.isPresent()){
ret = optional.get();
}
} else {
Optional<AnalysisGreenWavePeakDetail> optional = list.stream().filter(o -> Objects.equals(peakType.toString(), o.getPeakType())).max(Comparator.comparing(o -> o.getPeakEndTime())) ;
if (optional.isPresent()){
ret = optional.get();
}
}
return ret;
}
}
......@@ -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;
......
package net.wanji.opt.servicev2.report.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import net.wanji.databus.dao.entity.GreenwaveHistPO;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.mapper.GreenwaveHistMapper;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
import net.wanji.opt.common.enums.PeakNameEnum;
import net.wanji.opt.common.enums.RoadLevelEnum;
import net.wanji.opt.controllerv2.report.design.GreenReportSamePeriodCompareResult;
import net.wanji.opt.controllerv2.report.vo.GreenReportSamePeriodCompareData;
import net.wanji.opt.controllerv2.report.vo.GreenReportSamePeriodData;
import net.wanji.opt.controllerv2.report.vo.GreenWaveWeekDataVO;
import net.wanji.opt.dao.mapper.report.GreenWaveCrossRidMapper;
import net.wanji.opt.dao.mapper.report.GreenWaveWeekDataMapper;
import net.wanji.opt.entity.report.ConfigPeakHours;
import net.wanji.opt.entity.report.GreenWaveCrossRidInfo;
import net.wanji.opt.entity.report.GreenWaveWeekData;
import net.wanji.opt.servicev2.report.GreenWaveWeekDataService;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -19,6 +31,7 @@ import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.WeekFields;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Slf4j
......@@ -29,7 +42,7 @@ public class GreenWaveWeekDataServiceImpl extends ServiceImpl<GreenWaveWeekDataM
@Autowired
private GreenWaveWeekDataMapper greenWaveWeekDataMapper;
@Autowired
private GreenwaveHistMapper greenwaveHistMapper;
private GreenWaveCrossRidMapper greenWaveCrossRidMapper;
private static final int TIME_GAP_THRESHOLD = 900; // 时间间隔阈值,单位为秒
private static final int MINUTES_PER_RECORD = 5; // 每条记录对应的时间,单位为分钟
......@@ -243,6 +256,268 @@ public class GreenWaveWeekDataServiceImpl extends ServiceImpl<GreenWaveWeekDataM
greenWaveWeekDataMapper.insertOrUpdateBatch(greenWaveWeekDataList);
}
@Override
public JSONObject getGreenInfoList(Integer year, Integer week, String ids) {
Integer yearWeek = Integer.valueOf(year + "" + week);
LambdaQueryWrapper<GreenWaveWeekData> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(GreenWaveWeekData::getYearWeek,yearWeek);
queryWrapper.eq(GreenWaveWeekData::getPeakType,3);
if(!ObjectUtils.isEmpty(ids)){
List<Integer> greenIdList = Arrays.stream(ids.split(","))
.map(String::trim) // 去除可能的空格
.filter(s -> !s.isEmpty()) // 过滤掉空字符串
.map(Integer::parseInt) // 转换为整数
.collect(Collectors.toList());
queryWrapper.in(GreenWaveWeekData::getGreenId,greenIdList);
}
List<GreenWaveWeekData> greenWaveWeekData = greenWaveWeekDataMapper.selectList(queryWrapper);
Map<Integer, List<GreenWaveWeekData>> collectMap = greenWaveWeekData.stream().collect(Collectors.groupingBy(GreenWaveWeekData::getGreenId));
List<GreenWaveWeekDataVO> greenWaveWeekDataVOList = new ArrayList<>();
for (List<GreenWaveWeekData> list : collectMap.values()) {
GreenWaveWeekDataVO greenWaveWeekDataVO = new GreenWaveWeekDataVO();
for (GreenWaveWeekData waveWeekData : list) {
greenWaveWeekDataVO.setGreenId(waveWeekData.getGreenId());
greenWaveWeekDataVO.setCongestIndex((ObjectUtils.isEmpty(greenWaveWeekDataVO.getCongestIndex())?0:greenWaveWeekDataVO.getCongestIndex()) + waveWeekData.getCongestIndex());
greenWaveWeekDataVO.setMaxCongestIndex((ObjectUtils.isEmpty(greenWaveWeekDataVO.getMaxCongestIndex())?0:greenWaveWeekDataVO.getMaxCongestIndex())+waveWeekData.getMaxCongestIndex());
greenWaveWeekDataVO.setCongestCount((ObjectUtils.isEmpty(greenWaveWeekDataVO.getCongestCount())?0:greenWaveWeekDataVO.getCongestCount())+waveWeekData.getCongestCount());
greenWaveWeekDataVO.setCongestDuration((ObjectUtils.isEmpty(greenWaveWeekDataVO.getCongestDuration())?0:greenWaveWeekDataVO.getCongestDuration())+waveWeekData.getCongestDuration());
greenWaveWeekDataVO.setMaxCongestDuration((ObjectUtils.isEmpty(greenWaveWeekDataVO.getMaxCongestDuration())?0:greenWaveWeekDataVO.getMaxCongestDuration())+waveWeekData.getMaxCongestDuration());
if(ObjectUtils.isEmpty(waveWeekData.getCongestCount()) || waveWeekData.getCongestCount() == 0){
greenWaveWeekDataVO.setAvgCongestDuration((ObjectUtils.isEmpty(greenWaveWeekDataVO.getAvgCongestDuration())?0:greenWaveWeekDataVO.getAvgCongestDuration())+0);
}else {
greenWaveWeekDataVO.setAvgCongestDuration((ObjectUtils.isEmpty(greenWaveWeekDataVO.getAvgCongestDuration())?0:greenWaveWeekDataVO.getAvgCongestDuration())+(waveWeekData.getCongestDuration()/waveWeekData.getCongestCount()));
}
greenWaveWeekDataVO.setCongestTimeDistribute(greenWaveWeekDataVO.getMaxCongestDuration()<=waveWeekData.getMaxCongestDuration()?waveWeekData.getMaxCongestionPeriod():greenWaveWeekDataVO.getCongestTimeDistribute());
greenWaveWeekDataVO.setMaxCongestTimeDistribute(greenWaveWeekDataVO.getMaxCongestDuration()<=waveWeekData.getMaxCongestDuration()?waveWeekData.getMaxCongestionPeriod():greenWaveWeekDataVO.getMaxCongestTimeDistribute());
if(!ObjectUtils.isEmpty(waveWeekData.getMaxCongestionPeriod())){
String period = waveWeekData.getMaxCongestionPeriod();
if(!ObjectUtils.isEmpty(waveWeekData.getSecondCongestionPeriod())){
period = period +","+ waveWeekData.getSecondCongestionPeriod();
}
greenWaveWeekDataVO.setWeekCongestTimeDistribute(greenWaveWeekDataVO.getMaxCongestDuration()<=waveWeekData.getMaxCongestDuration()?period:greenWaveWeekDataVO.getWeekCongestTimeDistribute());
}
}
double congestIndex = greenWaveWeekDataVO.getCongestIndex() / list.size();
double maxCongestIndex = greenWaveWeekDataVO.getMaxCongestIndex() / list.size();
double congestCount = greenWaveWeekDataVO.getCongestCount() / list.size();
double congestDuration = greenWaveWeekDataVO.getCongestDuration() / list.size();
double maxCongestDuration = greenWaveWeekDataVO.getMaxCongestDuration() / list.size();
double avgCongestDuration = greenWaveWeekDataVO.getAvgCongestDuration() / list.size();
greenWaveWeekDataVO.setCongestIndex(Math.round(congestIndex*100.0)/100.0);
greenWaveWeekDataVO.setMaxCongestIndex(Math.round(maxCongestIndex*100.0)/100.0);
greenWaveWeekDataVO.setCongestCount(Math.round(congestCount)*1.0);
greenWaveWeekDataVO.setCongestDuration(Math.round(congestDuration*100.0)/100.0);
greenWaveWeekDataVO.setMaxCongestDuration(Math.round(maxCongestDuration*100.0)/100.0);
greenWaveWeekDataVO.setAvgCongestDuration(Math.round(avgCongestDuration*100.0)/100.0);
List<GreenWaveCrossRidInfo> greenInfoList = greenWaveCrossRidMapper.getGreenInfoList(String.valueOf(list.get(0).getGreenId()));
greenWaveWeekDataVO.setLength(Double.valueOf(greenInfoList.get(0).getLength()));
greenWaveWeekDataVO.setGreenName(greenInfoList.get(0).getGreenwaveName());
greenWaveWeekDataVO.setGreenRoadType(RoadLevelEnum.getDesc(greenInfoList.get(0).getLevel()));
greenWaveWeekDataVOList.add(greenWaveWeekDataVO);
}
List<GreenWaveWeekDataVO> collect = greenWaveWeekDataVOList.stream().sorted(Comparator.comparingDouble(GreenWaveWeekDataVO::getMaxCongestIndex).reversed()).collect(Collectors.toList());
collect.forEach(x->{
x.setRank(collect.indexOf(x)+1);
});
JSONObject jsonObject = new JSONObject();
jsonObject.put("dataList",collect);
return jsonObject;
}
@Override
public List<GreenReportSamePeriodCompareData> getSamePeriodCompare(Integer year, Integer week, String ids) {
Integer yearWeek = Integer.valueOf(year + "" + week);
Integer yearWeekLast = Integer.valueOf(year + "" + (week-1));
List<Integer> greenIdList = Arrays.stream(ids.split(","))
.map(String::trim) // 去除可能的空格
.filter(s -> !s.isEmpty()) // 过滤掉空字符串
.map(Integer::parseInt) // 转换为整数
.collect(Collectors.toList());
List<GreenWaveWeekData> greenWaveWeekDatas = greenWaveWeekDataMapper.getDataByWeek(greenIdList,yearWeek);
List<GreenWaveWeekData> greenWaveWeekDatasLast = greenWaveWeekDataMapper.getDataByWeek(greenIdList,yearWeek-1);
List<GreenReportSamePeriodCompareData> result = new ArrayList<>();
if(!ObjectUtils.isEmpty(greenWaveWeekDatas) && !ObjectUtils.isEmpty(greenWaveWeekDatasLast)){
Map<Integer, List<GreenWaveWeekData>> collect = greenWaveWeekDatas.stream().collect(Collectors.groupingBy(GreenWaveWeekData::getGreenId));
Map<Integer, List<GreenWaveWeekData>> collectLast = greenWaveWeekDatasLast.stream().collect(Collectors.groupingBy(GreenWaveWeekData::getGreenId));
for (List<GreenWaveWeekData> value : collect.values()) {
GreenReportSamePeriodCompareData samePeriodData = new GreenReportSamePeriodCompareData();
List<GreenReportSamePeriodData> dataList = new ArrayList<>();
samePeriodData.setGreenId(String.valueOf(value.get(0).getGreenId()));
List<GreenWaveCrossRidInfo> greenInfoList = greenWaveCrossRidMapper.getGreenInfoList(String.valueOf(value.get(0).getGreenId()));
samePeriodData.setGreenName(greenInfoList.get(0).getGreenwaveName());
for (GreenWaveWeekData greenWaveWeekData : value) {
if("1".equals(greenWaveWeekData.getPeakType())){
GreenReportSamePeriodData greenReportSamePeriodData = new GreenReportSamePeriodData();
List<GreenWaveWeekData> greenWaveWeekDataLast = collectLast.get(greenWaveWeekData.getGreenId());
for (GreenWaveWeekData waveWeekData : greenWaveWeekDataLast) {
if("1".equals(waveWeekData.getPeakType())){
greenReportSamePeriodData.setPeakName(PeakNameEnum.getDesc(Integer.valueOf(greenWaveWeekData.getPeakType())));
greenReportSamePeriodData.setPeakFlow(greenWaveWeekData.getFlow());
greenReportSamePeriodData.setCongestIndex(greenWaveWeekData.getCongestIndex());
greenReportSamePeriodData.setAvgSpeed(greenWaveWeekData.getSpeed());
greenReportSamePeriodData.setTravelTime(Double.valueOf(greenWaveWeekData.getTravelTime()));
double speed = greenWaveWeekData.getSpeed() - waveWeekData.getSpeed();
double flow = greenWaveWeekData.getFlow() - waveWeekData.getFlow();
double travelTime = greenWaveWeekData.getTravelTime() - waveWeekData.getTravelTime();
double congestIndex = greenWaveWeekData.getCongestIndex() - waveWeekData.getCongestIndex();
if(flow<0){
samePeriodData.setAmPeakSituation("减少");
}else if(flow == 0){
samePeriodData.setAmPeakSituation("相等");
}else {
samePeriodData.setAmPeakSituation("增加");
}
if(travelTime<0){
samePeriodData.setAmTravelTimeSituation("减少");
}else if(travelTime == 0){
samePeriodData.setAmTravelTimeSituation("相等");
}else {
samePeriodData.setAmTravelTimeSituation("增加");
}
if(waveWeekData.getSpeed()!=0){
greenReportSamePeriodData.setAvgSpeedRatio(Math.round((speed/waveWeekData.getSpeed()*10000))/100.0);
}else{
greenReportSamePeriodData.setAvgSpeedRatio(100.0);
}
if(waveWeekData.getFlow()!=0){
greenReportSamePeriodData.setPeakFlowRatio(Math.round((flow/waveWeekData.getFlow()*10000))/100.0);
}else{
greenReportSamePeriodData.setPeakFlowRatio(100.0);
}
if(waveWeekData.getCongestIndex()!=0){
greenReportSamePeriodData.setCongestIndexRatio(Math.round((congestIndex/waveWeekData.getCongestIndex()*10000))/100.0);
}else{
greenReportSamePeriodData.setCongestIndexRatio(100.0);
}
if(waveWeekData.getSpeed()!=0){
greenReportSamePeriodData.setTravelTimeRatio(Math.round((speed/waveWeekData.getTravelTime()*10000))/100.0);
}else{
greenReportSamePeriodData.setTravelTimeRatio(100.0);
}
}
}
dataList.add(greenReportSamePeriodData);
}
if("2".equals(greenWaveWeekData.getPeakType())){
GreenReportSamePeriodData greenReportSamePeriodData = new GreenReportSamePeriodData();
List<GreenWaveWeekData> greenWaveWeekDataLast = collectLast.get(greenWaveWeekData.getGreenId());
for (GreenWaveWeekData waveWeekData : greenWaveWeekDataLast) {
if("2".equals(waveWeekData.getPeakType())){
greenReportSamePeriodData.setPeakName(PeakNameEnum.getDesc(Integer.valueOf(greenWaveWeekData.getPeakType())));
greenReportSamePeriodData.setPeakFlow(greenWaveWeekData.getFlow());
greenReportSamePeriodData.setCongestIndex(greenWaveWeekData.getCongestIndex());
greenReportSamePeriodData.setAvgSpeed(greenWaveWeekData.getSpeed());
greenReportSamePeriodData.setTravelTime(Double.valueOf(greenWaveWeekData.getTravelTime()));
double speed = greenWaveWeekData.getSpeed() - waveWeekData.getSpeed();
double flow = greenWaveWeekData.getFlow() - waveWeekData.getFlow();
double travelTime = greenWaveWeekData.getTravelTime() - waveWeekData.getTravelTime();
double congestIndex = greenWaveWeekData.getCongestIndex() - waveWeekData.getCongestIndex();
if(flow<0){
samePeriodData.setPmPeakSituation("减少");
}else if(flow == 0){
samePeriodData.setPmPeakSituation("相等");
}else {
samePeriodData.setPmPeakSituation("增加");
}
if(travelTime<0){
samePeriodData.setPmTravelTimeSituation("减少");
}else if(travelTime == 0){
samePeriodData.setPmTravelTimeSituation("相等");
}else {
samePeriodData.setPmTravelTimeSituation("增加");
}
if(waveWeekData.getSpeed()!=0){
greenReportSamePeriodData.setAvgSpeedRatio(Math.round((speed/waveWeekData.getSpeed()*10000))/100.0);
}else{
greenReportSamePeriodData.setAvgSpeedRatio(100.0);
}
if(waveWeekData.getFlow()!=0){
greenReportSamePeriodData.setPeakFlowRatio(Math.round((flow/waveWeekData.getFlow()*10000))/100.0);
}else{
greenReportSamePeriodData.setPeakFlowRatio(100.0);
}
if(waveWeekData.getCongestIndex()!=0){
greenReportSamePeriodData.setCongestIndexRatio(Math.round((congestIndex/waveWeekData.getCongestIndex()*10000))/100.0);
}else{
greenReportSamePeriodData.setCongestIndexRatio(100.0);
}
if(waveWeekData.getSpeed()!=0){
greenReportSamePeriodData.setTravelTimeRatio(Math.round((speed/waveWeekData.getTravelTime()*10000))/100.0);
}else{
greenReportSamePeriodData.setTravelTimeRatio(100.0);
}
}
}
dataList.add(greenReportSamePeriodData);
}
if("3".equals(greenWaveWeekData.getPeakType())){
GreenReportSamePeriodData greenReportSamePeriodData = new GreenReportSamePeriodData();
List<GreenWaveWeekData> greenWaveWeekDataLast = collectLast.get(greenWaveWeekData.getGreenId());
for (GreenWaveWeekData waveWeekData : greenWaveWeekDataLast) {
if("3".equals(waveWeekData.getPeakType())){
greenReportSamePeriodData.setPeakName(PeakNameEnum.getDesc(Integer.valueOf(greenWaveWeekData.getPeakType())));
greenReportSamePeriodData.setPeakFlow(greenWaveWeekData.getFlow());
greenReportSamePeriodData.setCongestIndex(greenWaveWeekData.getCongestIndex());
greenReportSamePeriodData.setAvgSpeed(greenWaveWeekData.getSpeed());
greenReportSamePeriodData.setTravelTime(Double.valueOf(greenWaveWeekData.getTravelTime()));
double speed = greenWaveWeekData.getSpeed() - waveWeekData.getSpeed();
double flow = greenWaveWeekData.getFlow() - waveWeekData.getFlow();
double travelTime = greenWaveWeekData.getTravelTime() - waveWeekData.getTravelTime();
double congestIndex = greenWaveWeekData.getCongestIndex() - waveWeekData.getCongestIndex();
if(flow<0){
samePeriodData.setAmPeakSituation("减少");
}else if(flow == 0){
samePeriodData.setAmPeakSituation("相等");
}else {
samePeriodData.setAmPeakSituation("增加");
}
if(travelTime<0){
samePeriodData.setAmTravelTimeSituation("减少");
}else if(travelTime == 0){
samePeriodData.setAmTravelTimeSituation("相等");
}else {
samePeriodData.setAmTravelTimeSituation("增加");
}
if(waveWeekData.getSpeed()!=0){
greenReportSamePeriodData.setAvgSpeedRatio(Math.round((speed/waveWeekData.getSpeed()*10000))/100.0);
}else{
greenReportSamePeriodData.setAvgSpeedRatio(100.0);
}
if(waveWeekData.getFlow()!=0){
greenReportSamePeriodData.setPeakFlowRatio(Math.round((flow/waveWeekData.getFlow()*10000))/100.0);
}else{
greenReportSamePeriodData.setPeakFlowRatio(100.0);
}
if(waveWeekData.getCongestIndex()!=0){
greenReportSamePeriodData.setCongestIndexRatio(Math.round((congestIndex/waveWeekData.getCongestIndex()*10000))/100.0);
}else{
greenReportSamePeriodData.setCongestIndexRatio(100.0);
}
if(waveWeekData.getSpeed()!=0){
greenReportSamePeriodData.setTravelTimeRatio(Math.round((speed/waveWeekData.getTravelTime()*10000))/100.0);
}else{
greenReportSamePeriodData.setTravelTimeRatio(100.0);
}
}
}
dataList.add(greenReportSamePeriodData);
}
}
samePeriodData.setDataList(dataList);
result.add(samePeriodData);
}
}
return result;
}
private Integer getDir(String roadDirection) {
switch (roadDirection) {
......
......@@ -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
......
......@@ -14,8 +14,10 @@ import net.wanji.opt.cache.GreenCrossDirInfoCache;
import net.wanji.opt.common.CommonUtils;
import net.wanji.opt.common.RedisUtils;
import net.wanji.opt.common.enums.GreenBeltDirEnum;
import net.wanji.opt.dto.GreenBeltChartDTO;
import net.wanji.opt.dto.RingPhaseInfoDTO;
import net.wanji.opt.dto.SchemeGreenDirGreenTimeDTO;
import org.jetbrains.annotations.NotNull;
import org.springframework.context.annotation.Profile;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
......@@ -41,10 +43,11 @@ public class HisenseGreenChartTask {
private GreenwaveRealtimeMapper greenwaveRealtimeMapper;
@Scheduled(fixedRate = 10 * 60 * 1000, initialDelay = 1 * 60 * 1000)
//@Scheduled(fixedRate = 1 * 60 * 1000, initialDelay = 30 * 1000)
//@Scheduled(fixedRate = 10 * 60 * 1000, initialDelay = 1 * 60 * 1000)
@Scheduled(fixedRate = 1 * 60 * 1000, initialDelay = 30 * 1000)
public void getGreenChart() {
try {
ObjectMapper mapper = JacksonUtils.getInstance();
Map<String, GreenwaveRealtimePO> realTimeMap = getGreenRealTimeMap();
// 绿波路口数据
List<GreenCrossDirDTO> greenCrossDirCache = GreenCrossDirInfoCache.greenCrossDirCache;
......@@ -58,64 +61,185 @@ public class HisenseGreenChartTask {
greenDirGreenTimeMap.put(CommonUtils.getStrJoin(crossId, String.valueOf(dir)), dto);
}
// 计算绿灯红灯点位
// 1.现根据绿波长度和速度计算行程时间
// 2.在多个周期中计算相位差绿灯时间
// 3.从相位差绿的时间通过两个路口距离和速度计算两个路口绿灯开始时间
// 1.根据绿波带长度和速度计算行程时间
// 2.根据相位差,行程时间,海信环图计算绿灯红灯点位 正向 crossRedTimesMap 反向backCrossRedTimesMap
Map<Integer, List<GreenCrossDirDTO>> greenMap = greenCrossDirCache.stream().collect(Collectors.groupingBy(GreenCrossDirDTO::getGreenId));
List<GreenBeltChartDTO> greenBeltChartDTOS = new ArrayList<>();
for (Map.Entry<Integer, List<GreenCrossDirDTO>> entry : greenMap.entrySet()) {
GreenBeltChartDTO greenBeltChartDTO = new GreenBeltChartDTO();
Integer greenId = entry.getKey();
List<GreenCrossDirDTO> value = entry.getValue();
// 1.获取行程时间
GreenCrossDirDTO indexDTO = value.get(0);
Integer sort = indexDTO.getSort();
Integer indexDir = indexDTO.getInDir();
Integer totalDistance = indexDTO.getTotalDistance();
String greenKey = CommonUtils.getStrJoin(String.valueOf(greenId), String.valueOf(indexDir));
GreenwaveRealtimePO greenwaveRealtimePO = realTimeMap.get(greenKey);
// km/h速度换成m/s
Double speed = greenwaveRealtimePO.getSpeed() / 3.6;
Double travelTime = totalDistance / speed;
for (GreenCrossDirDTO greenCrossDirDTO : value) {
String crossId = greenCrossDirDTO.getCrossId();
String crossKey = CommonUtils.getStrJoin(String.valueOf(crossId), String.valueOf(indexDir));
// 获取海信环相位信息
SchemeGreenDirGreenTimeDTO firstGreenTimeDTO = greenDirGreenTimeMap.get(crossKey);
Integer cycleLen = firstGreenTimeDTO.getCycleLen();
Integer offset = firstGreenTimeDTO.getOffset();
Integer greenEndTime = firstGreenTimeDTO.getEnd();
// 计算出绿灯结束时间到周期结束时间:
Integer redEndTime = cycleLen - greenEndTime;
// 通过行程时间计算周期数量 + 1
double cycleSum = Math.ceil(travelTime / cycleLen) + 1;
for (int i = 0; i < cycleSum; i++) {
Double cycleIndex = i * Double.valueOf(cycleLen);
if (redEndTime > offset) {
Double travelTime = getTravelTime(realTimeMap, greenId, indexDir, totalDistance);
List<Double> offsets = new ArrayList<>();
List<Double> distances = new ArrayList<>();
// 正向红灯时间
Map<String, List<List<Double>>> crossRedTimesMap = new LinkedHashMap<>();
Map<String, List<List<Double>>> crossGreenTimesMap = new LinkedHashMap<>();
getCrossRedTimeMap(mapper, greenDirGreenTimeMap, value, indexDir, travelTime, offsets, distances, crossRedTimesMap, crossGreenTimesMap);
// 反向红灯时间
Integer indexOutDir = indexDTO.getOutDir();
List<GreenCrossDirDTO> backValue = value.stream().sorted(Comparator.comparingInt(GreenCrossDirDTO::getSort).reversed()).collect(Collectors.toList());
List<Double> backOffsets = new ArrayList<>();
List<Double> backDistances = new ArrayList<>();
Double backTravelTime = getTravelTime(realTimeMap, greenId, indexOutDir, totalDistance);
Map<String, List<List<Double>>> backCrossRedTimesMap = new LinkedHashMap<>();
Map<String, List<List<Double>>> backCrossGreenTimesMap = new LinkedHashMap<>();
getCrossRedTimeMap(mapper, greenDirGreenTimeMap, backValue, indexOutDir, backTravelTime, backOffsets, backDistances, crossGreenTimesMap, backCrossGreenTimesMap);
greenBeltChartDTO.setGreenId(greenId);
greenBeltChartDTO.setDir(indexDir);
greenBeltChartDTO.setBackDir(indexOutDir);
greenBeltChartDTO.setSpeed(totalDistance / travelTime);
greenBeltChartDTO.setBackSpeed(totalDistance / backTravelTime);
greenBeltChartDTO.setOffsets(offsets);
greenBeltChartDTO.setBackOffsets(backOffsets);
greenBeltChartDTO.setDistances(distances);
greenBeltChartDTO.setBackDistances(backDistances);
greenBeltChartDTO.setCrossRedTimesMap(crossRedTimesMap);
greenBeltChartDTO.setBackCrossRedTimesMap(backCrossRedTimesMap);
greenBeltChartDTO.setCrossGreenTimesMap(crossGreenTimesMap);
greenBeltChartDTO.setBackCrossGreenTimesMap(backCrossGreenTimesMap);
greenBeltChartDTOS.add(greenBeltChartDTO);
}
// 3.计算每两个路口绿灯开始、结束时间
for (Map.Entry<Integer, List<GreenCrossDirDTO>> entry : greenMap.entrySet()) {
Integer greenId = entry.getKey();
List<GreenCrossDirDTO> value = entry.getValue();
if (!CollectionUtils.isEmpty(value)) {
for (int i = 0; i < value.size(); i++) {
GreenCrossDirDTO firstDto = value.get(i);
String firstCrossId = firstDto.getCrossId();
Integer inDir = firstDto.getInDir();
if (i < value.size()) {
GreenCrossDirDTO secondDto = value.get(i + 1);
String secondCrossId = secondDto.getCrossId();
for (GreenBeltChartDTO greenBeltChartDTO : greenBeltChartDTOS) {
Integer beltGreenId = greenBeltChartDTO.getGreenId();
Integer beltDir = greenBeltChartDTO.getDir();
if (Objects.equals(greenId, beltGreenId) && Objects.equals(inDir, beltDir)) {
Double speed = greenBeltChartDTO.getSpeed();
List<Double> distances = greenBeltChartDTO.getDistances();
Double distance = distances.get(i);
Double travelTime = distance / speed;
Map<String, List<List<Double>>> crossGreenTimesMap = greenBeltChartDTO.getCrossGreenTimesMap();
List<List<Double>> firstList = crossGreenTimesMap.get(firstCrossId);
List<List<Double>> secondList = crossGreenTimesMap.get(secondCrossId);
// 第一个路口循环绿灯开始时间
for (int i1 = 0; i1 < firstList.size(); i1++) {
List<Double> greenStartEnd = firstList.get(i1);
for (int i2 = 0; i2 < greenStartEnd.size(); i2++) {
Double greenStart = greenStartEnd.get(0);
Double greenEnd = greenStartEnd.get(1);
for (int j = greenStart.intValue(); j <= greenEnd.intValue(); j++) {
int firstStartPoint = j + travelTime.intValue();
}
}
}
}
}
}
}
}
}
log.error("绿波实体参数:{}", mapper.writeValueAsString(greenBeltChartDTOS));
}
}
log.error("=================");
} catch (Exception e) {
log.error("通过海信方案处理绿波波定时任务失败:{}", e);
//throw new RuntimeException(e);
}
}
@NotNull
private static Double getTravelTime(Map<String, GreenwaveRealtimePO> realTimeMap, Integer greenId, Integer indexDir,
Integer totalDistance) {
String greenKey = CommonUtils.getStrJoin(String.valueOf(greenId), String.valueOf(indexDir));
GreenwaveRealtimePO greenwaveRealtimePO = realTimeMap.get(greenKey);
// km/h速度换成m/s
Double speed = Objects.isNull(greenwaveRealtimePO.getSpeed()) ? 0 : greenwaveRealtimePO.getSpeed() / 3.6;
Double travelTime = totalDistance / speed;
return travelTime;
}
private static Map<String, List<List<Double>>> getCrossRedTimeMap(ObjectMapper mapper, HashMap<String, SchemeGreenDirGreenTimeDTO> greenDirGreenTimeMap,
List<GreenCrossDirDTO> value, Integer indexDir, Double travelTime,
List<Double> offsets, List<Double> distances, Map<String, List<List<Double>>> crossRedTimesMap,
Map<String, List<List<Double>>> crossGreenTimesMap) throws Exception {
for (GreenCrossDirDTO greenCrossDirDTO : value) {
List<List<Double>> crossRedTimes = new ArrayList<>();
List<List<Double>> crossGreenTimes = new ArrayList<>();
String crossId = greenCrossDirDTO.getCrossId();
Integer distance = greenCrossDirDTO.getDistance();
distances.add(distance * 1.0);
//String crossId = "13MQJ0B5SI0";
String crossKey = CommonUtils.getStrJoin(String.valueOf(crossId), String.valueOf(indexDir));
// 获取海信环相位信息
SchemeGreenDirGreenTimeDTO firstGreenTimeDTO = greenDirGreenTimeMap.get(crossKey);
Integer cycleLen = firstGreenTimeDTO.getCycleLen();
// * 1.0转Double
Double offset = firstGreenTimeDTO.getOffset() * 1.0;
offsets.add(offset);
Integer greenStartTime = firstGreenTimeDTO.getStart();
Integer greenEndTime = firstGreenTimeDTO.getEnd();
// 计算出绿灯结束时间到周期结束时间:
Integer redEndTime = cycleLen - greenEndTime;
// 通过行程时间计算周期数量
double cycleSum = Math.floor(travelTime / cycleLen);
for (int i = 0; i < cycleSum; i++) {
Double cycleIndex = i * Double.valueOf(cycleLen);
// 多个周期后,需要在最后补充的时间
Double endCycleExt = cycleLen - offset;
// 红灯结束时间 > 相位差, 相位差都是红灯,endCycleExt包含绿灯
if (redEndTime >= offset) {
// offset+cycleLen 中红灯时间
crossRedTimes.add(Arrays.asList(cycleIndex, cycleIndex + offset + greenStartTime));
crossRedTimes.add(Arrays.asList(cycleIndex + offset + greenEndTime, cycleIndex + offset + cycleLen + greenStartTime));
// 两个周期,第二个周期是补充相位差
crossRedTimes.add(Arrays.asList(cycleIndex + offset + cycleLen + greenEndTime, cycleIndex + offset + cycleLen + endCycleExt));
// 绿灯时间
crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime, cycleIndex + offset + greenEndTime));
crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime + cycleLen, cycleIndex + offset + greenEndTime + cycleLen));
} else { // 红灯结束时间 < 相位差, 相位差包含绿灯,endCycleExt都是红灯
// 相位差中绿灯时间
Double offsetGreen = greenEndTime - endCycleExt;
crossRedTimes.add(Arrays.asList(cycleIndex + offsetGreen, cycleIndex + offset + greenStartTime));
crossRedTimes.add(Arrays.asList(cycleIndex + offset + greenEndTime, cycleIndex + offset + cycleLen + greenStartTime));
// 绿灯时间
crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime, cycleIndex + offset + greenEndTime));
}
}
crossRedTimesMap.put(crossId, crossRedTimes);
crossGreenTimesMap.put(crossId, crossGreenTimes);
log.debug("当前路口编号:{},当前协调方向:{}, 红灯点位信息:{}", crossId, indexDir, mapper.writeValueAsString(crossRedTimes));
}
return crossRedTimesMap;
}
private Map<String, GreenwaveRealtimePO> getGreenRealTimeMap() {
Map<String, GreenwaveRealtimePO> realTimeMap = new HashMap<>();
LambdaQueryWrapper<GreenwaveRealtimePO> queryWrapper = new LambdaQueryWrapper<>();
// todo 测试绿波1
queryWrapper.eq(GreenwaveRealtimePO::getGreenId, 1);
List<GreenwaveRealtimePO> greenwaveRealtimePOList = greenwaveRealtimeMapper.selectList(queryWrapper);
for (GreenwaveRealtimePO greenwaveRealtimePO : greenwaveRealtimePOList) {
Integer greenId = greenwaveRealtimePO.getGreenId();
String roadDirection = greenwaveRealtimePO.getRoadDirection();
Integer inDir = GreenBeltDirEnum.getInDir(roadDirection);
realTimeMap.put(String.valueOf(greenId).concat("_").concat(String.valueOf(inDir)), greenwaveRealtimePO);
realTimeMap.put(CommonUtils.getStrJoin(String.valueOf(greenId), String.valueOf(inDir)), greenwaveRealtimePO);
}
return realTimeMap;
}
......
package net.wanji.opt.task;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import net.wanji.opt.dao.mapper.GreenwaveHistoryMapper;
import net.wanji.opt.dao.mapper.StrategyGreenOptHistMapper;
import net.wanji.opt.dto.report.StrategyGreenOptHistDTO;
import org.joda.time.DateTime;
import org.joda.time.Seconds;
import org.joda.time.format.DateTimeFormat;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Profile;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author fengyi
* @date 2023/1/13
* @description
*/
//@Component
@Configurable
@EnableScheduling
@Slf4j
@Profile("!dev")
public class OptimizeStatisticTask {
@Resource
StrategyGreenOptHistMapper strategyGreenOptHistMapper;
@Resource
GreenwaveHistoryMapper historyMapper;
/**
* 干线策略优化时长计算
*/
// @Scheduled(cron查询上周优化记录
public void optimizeGreenWaveDurationCal() {
long st = System.currentTimeMillis();
try {
long et = System.currentTimeMillis();
List<StrategyGreenOptHistDTO> durationList = new ArrayList<>();
List<StrategyGreenOptHistDTO> list = strategyGreenOptHistMapper.findGreenWaveOptHist();
Map<Integer, List<StrategyGreenOptHistDTO>> groupByGreenId = list.stream().collect(Collectors.groupingBy(o -> o.getGreenId()));
for (Map.Entry<Integer, List<StrategyGreenOptHistDTO>> entry : groupByGreenId.entrySet()) {
List<StrategyGreenOptHistDTO> value = entry.getValue();
value = value.stream().sorted(Comparator.comparing(StrategyGreenOptHistDTO::getControlTime)).collect(Collectors.toList());
int i = 0;
for (StrategyGreenOptHistDTO result : value) {
int seconds = 900;
if (i != value.size() - 1) {
if (value.get(i + 1).getControlMethod() == -1) {
//下一条记录为取消状态,当前取消时间-上次下方时间
seconds = Seconds.secondsBetween(new DateTime(result.getControlTime()), new DateTime(value.get(i + 1).getControlTime())).getSeconds();
//超过设定的ControlDuration取ControlDuration
if (seconds > result.getControlDuration()) {
seconds = result.getControlDuration();
}
//log.info("greenId={}:干线绿波方案持续时间计算,下一条记录为取消状态 开始时间:{},截止时间:{},持续时长:{}秒",
// result.getGreenId(),
// new DateTime(result.getControlTime()).toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")),
// new DateTime(value.get(i + 1).getControlTime()).toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")),
// seconds);
} else if(result.getControlMethod() != -1) {
//两条记录之前没有取消状态,取ControlDuration
seconds = result.getControlDuration();
//log.info("greenId={}:干线绿波方案持续时间计算,两条记录之前没有取消状态 开始时间:{},截止时间:{},持续时长:{}秒",
// result.getGreenId(),
// new DateTime(result.getControlTime()).toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")),
// new DateTime(value.get(i + 1).getControlTime()).toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")),
// seconds);
}
} else if (result.getControlMethod() != -1) {
//最后一天记录不为-1取消状态
seconds = Seconds.secondsBetween(new DateTime(result.getControlTime()), new DateTime(new Date())).getSeconds();
if (seconds > result.getControlDuration()) {
seconds = result.getControlDuration();
}
//log.info("greenId={}:干线绿波方案持续时间计算,最后一天记录不为取消状态 开始时间:{},截止时间:{},持续时长:{}秒",
// result.getGreenId(),
// new DateTime(result.getControlTime()).toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")),
// new DateTime(new Date()).toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")),
// seconds);
}
result.setDuration(seconds);
//优化控制时段-开始时间
String controlStartTime = result.getControlTime();
//优化控制时段-截止时间
String controlEndTime = new DateTime(result.getControlTime()).plusSeconds(seconds).toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));
durationList.add(result);
i++;
}
}
if (!durationList.isEmpty()) {
}
log.info("更新干线策略持续时间据耗时:{}ms,size:{}", et - st, durationList.size());
} catch (Exception e) {
log.error("", e);
}
}
}
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 com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.common.utils.tool.DateUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Data
public class GreenReportRunStateResponseVO {
@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;
@ApiModelProperty(value = "本周峰期最早开始时间")
@JSONField(format = "yyyy-MM-dd HH:mm:ss",serialize = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date thisWeekPeakEarliestStartTime;
@ApiModelProperty(value = "本周峰期最晚截止时间")
@JSONField(format = "yyyy-MM-dd HH:mm:ss",serialize = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date thisWeekPeakLatestEndTime;
@ApiModelProperty(value = "上周峰期最早开始时间")
@JSONField(format = "yyyy-MM-dd HH:mm:ss",serialize = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date lastWeekPeakEarliestStartTime;
@ApiModelProperty(value = "上周峰期最晚截止时间")
@JSONField(format = "yyyy-MM-dd HH:mm:ss",serialize = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date lastWeekPeakLatestEndTime;
private List<GreenReportRunStatedDataVO> dataList = new ArrayList<>();
}
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;
}
......@@ -270,7 +270,12 @@
<!-- 统一接口:绿波路口车道级指标趋势,支持按5分钟粒度、15分钟粒度、30分钟粒度、1小时粒度汇聚 -->
<select id="findCrossObjectIndex"
resultType="net.wanji.opt.po.base.CrossLaneDataHistPoExtend">
SELECT MIN(ifnull(t.unit_time,#{startDate})) start_time,
SELECT (case
when #{groupType}=4 then date_format(dt,'%Y-%m-%d 00:00:00')
else
MIN(ifnull(t.unit_time,#{startDate}))
end
) start_time,
cross_id ,
lane_no ,
dir_type ,
......@@ -289,12 +294,12 @@
group_concat(service_level) service_level
FROM
(
SELECT start_time,
SELECT start_time,dt,
(case
when #{groupType}=0 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 5 ) * 5 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=1 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 15 ) * 15 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=2 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 30 ) * 30 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=3 then DATE_FORMAT(start_time,'%Y-%m-%d %H:00:00' )
when #{groupType}=0 then start_time
when #{groupType}=1 then dt_15min
when #{groupType}=2 then dt_30min
when #{groupType}=3 then dt
when #{groupType}=4 then DATE_FORMAT(start_time,'%Y-%m-%d 00:00:00' )
else DATE_FORMAT(start_time,'%Y-01-01 00:00:00') <!-- 按查询时间范围不分粒度进行聚合处理 -->
end
......@@ -405,15 +410,15 @@
<choose>
<!-- 方向级 -->
<when test="objectType==1">
GROUP BY t.cross_id,t.dir_type,unit_time
GROUP BY t.cross_id,unit_time,t.dir_type
</when>
<!-- 转向级 -->
<when test="objectType==2">
GROUP BY t.cross_id,t.dir_type,t.turn_type,unit_time
GROUP BY t.cross_id,unit_time,t.dir_type,t.turn_type
</when>
<!-- 车道级 -->
<when test="objectType==3">
GROUP BY t.cross_id,t.lane_no,t.dir_type,t.turn_type,unit_time
GROUP BY t.cross_id,unit_time,t.lane_no,t.dir_type,t.turn_type
</when>
<!-- 路口级 -->
<when test="objectType==4">
......@@ -787,12 +792,7 @@
<select id="findCrossObjectIndexByDay"
resultType="net.wanji.opt.po.base.CrossLaneDataHistPoExtend">
SELECT
(case
when #{groupType}=4 then date_format(dt,'%Y-%m-%d 00:00:00')
else
MIN(ifnull(t.unit_time,#{startDate}))
end
) start_time,
MIN(ifnull(t.unit_time,#{startDate})) start_time,
cross_id ,
lane_no ,
dir_type ,
......@@ -813,11 +813,10 @@
(
SELECT start_time,
(case
when #{groupType}=0 then start_time
when #{groupType}=1 then dt_15min
when #{groupType}=2 then dt_30min
when #{groupType}=3 then dt_60min
when #{groupType}=4 then dt
when #{groupType}=0 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 5 ) * 5 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=1 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 15 ) * 15 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=2 then DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 30 ) * 30 ),'%Y-%m-%d %H:%i:00' )
when #{groupType}=3 then DATE_FORMAT(start_time,'%Y-%m-%d %H:00:00' )
else DATE_FORMAT(now(),'%Y-01-01 00:00:00') <!-- 按查询时间范围不分粒度进行聚合处理 -->
end
) unit_time,
......
......@@ -4,30 +4,62 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.StrategyGreenOptHistMapper">
<select id="selectByGreenId" resultType="net.wanji.opt.po.StrategyGreenOptHistEntity" parameterType="String" >
select * from t_strategy_green_opt_hist a
inner join (
-- 先查询出最后一条数据的时间
select `green_id`, MAX(`control_time`) control_time from t_strategy_green_opt_hist group by `green_id`
) b on a.`green_id` = b.`green_id` and a.`control_time` = b.`control_time`
and a.`green_id` = #{greenId} and a.`control_method` = 1
and TIMESTAMPDIFF(SECOND,a.`control_time`, now()) &lt; a.`control_duration`
<select id="selectByGreenId" resultType="net.wanji.opt.po.StrategyGreenOptHistEntity" parameterType="String">
select *
from t_strategy_green_opt_hist a
inner join (
-- 先查询出最后一条数据的时间
select `green_id`, MAX(`control_time`) control_time from t_strategy_green_opt_hist group by `green_id`
) b on a.`green_id` = b.`green_id` and a.`control_time` = b.`control_time`
and a.`green_id` = #{greenId} and a.`control_method` = 1
and TIMESTAMPDIFF(SECOND,a.`control_time`, now()) &lt; a.`control_duration`
</select>
<!-- 查询绿波优化记录表当天结束的绿波-->
<select id="selectGreenOptEndTimeEquipCode" resultType="net.wanji.opt.dto.induce.MessageParam">
select t1.green_id as greenId, t1.control_time as endTime, t2.equip_code as equipCode, t2.id as induceId, t2.source_id as sourceId from
(select green_id, max(control_time) control_time from t_strategy_green_opt_hist t1 where control_time > CURDATE() and control_method = -1 group by green_id) t1
left join t_greenwave_induces t2 on t1.green_id = t2.green_id
select t1.green_id as greenId,
t1.control_time as endTime,
t2.equip_code as equipCode,
t2.id as induceId,
t2.source_id as sourceId
from (select green_id, max(control_time) control_time
from t_strategy_green_opt_hist t1
where control_time > CURDATE()
and control_method = -1
group by green_id) t1
left join t_greenwave_induces t2 on t1.green_id = t2.green_id
</select>
<!-- 查询最新的绿波优化记录列表 -->
<select id="selectLastGreenOptResultList" resultType="net.wanji.opt.vo2.dto.GreenLastOptResultDTO">
select t2.green_id as greenId, DATE_FORMAT(t2.control_time, '%Y-%m-%d %H:%i:%s') as optTime,
t2.control_duration as duration,
t2.response_code as responseCode, t2.control_method as controlMethod
from (select max(id) id, green_id from t_strategy_green_opt_hist where control_time > curdate() group by green_id) t1
inner join t_strategy_green_opt_hist t2 on t1.id = t2.id and t1.green_id = t2.green_id
select t2.green_id as greenId,
DATE_FORMAT(t2.control_time, '%Y-%m-%d %H:%i:%s') as optTime,
t2.control_duration as duration,
t2.response_code as responseCode,
t2.control_method as controlMethod
from (select max(id) id, green_id
from t_strategy_green_opt_hist
where control_time > curdate()
group by green_id) t1
inner join t_strategy_green_opt_hist t2 on t1.id = t2.id and t1.green_id = t2.green_id
</select>
<!-- 查询上周优化记录 -->
<select id="findGreenWaveOptHist" resultType="net.wanji.opt.dto.report.StrategyGreenOptHistDTO">
SELECT a.green_id,
a.control_time,
a.control_duration,
a.control_method,
min(DATE_SUB(CURDATE(), INTERVAL (WEEKDAY(CURDATE()) + 7) DAY)) week_start_day,
max(DATE_SUB(CURDATE(), INTERVAL (WEEKDAY(CURDATE()) ) +1 DAY)) week_end_day,
(week(control_time)+1) year_week,
(WEEKDAY(control_time)+1) week_day
FROM t_strategy_green_opt_hist a
WHERE control_time >= DATE_SUB(CURDATE(), INTERVAL (WEEKDAY(CURDATE()) + 7) DAY)
and control_time &lt; DATE_SUB(CURDATE(), INTERVAL (WEEKDAY(CURDATE()) ) DAY)
and control_method in (-1, 1)
group by green_id, control_time, control_duration, control_method
ORDER BY green_id,control_time
</select>
</mapper>
\ No newline at end of file
......@@ -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 *
......
......@@ -15,6 +15,10 @@
and a.green_id is not null
order by a.green_id,a.road_direction,a.start_time
</select>
<select id="selectListByWeek"
resultType="net.wanji.opt.controllerv2.report.vo.AnalysisGreenCongestionPeriodVO">
select * from t_analysis_green_wave_congest_time_span where year_week = #{yearWeek}
</select>
<insert id="insertGreenCongestionPeriodData" parameterType="map">
insert into t_analysis_green_wave_congest_time_span (green_id,road_direction,week_day,congest_start_time,congest_end_time,congest_index,status,travel_time,speed,peak_type,year_week,week_start_time,week_end_time,insert_time)
......
......@@ -6,7 +6,13 @@
</select>
<select id="getSpecialDate" resultType="java.util.Map">
SELECT special_date,plan_id FROM t_base_cross_schedules_plan where cross_id = #{crossId} and week = 0
SELECT DATE_FORMAT(special_date, '%Y-%m-%d %H:%i:%s') AS special_date, plan_id
FROM t_base_cross_schedules_plan
WHERE cross_id = #{crossId}
<if test="endTime != null and endTime != '' and startTime != null and startTime !='' ">
and special_date between #{startTime} and #{endTime}
</if>
AND week = 0
</select>
<select id="getSpecialByDateScope" resultType="java.util.Map">
SELECT b.start_time as startTime,b.end_time as endTime,cycle from t_base_cross_section as b LEFT JOIN t_base_cross_scheme as c on b.scheme_id = c.id where b.cross_id = #{crossId} and b.plan_id = #{planId} ORDER BY start_time
......
<?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.report.AnalysisGreenWaveOptimizeWeekMapper">
<!-- 通用设置 -->
<!-- 通用查询列 -->
<sql id="Base_Column_List">
green_id, road_direction, week_day, optimize_start_time, optimize_end_time, stragety_id, optimize_count, optimize_duration, capacity, stop_times, delay_time, travel_time, speed, year_week, week_start_time, week_end_time, insert_time
</sql>
<!-- 通用条件列 -->
<sql id="AnalysisGreenWaveOptimizeWeekByCondition">
<if test="greenId!=null and greenId!=''">
AND green_id = #{greenId}
</if>
<if test="roadDirection!=null and roadDirection!=''">
AND road_direction = #{roadDirection}
</if>
<if test="weekDay!=null and weekDay!=''">
AND week_day = #{weekDay}
</if>
<if test="optimizeStartTime!=null">
AND optimize_start_time = #{optimizeStartTime}
</if>
<if test="optimizeEndTime!=null">
AND optimize_end_time = #{optimizeEndTime}
</if>
<if test="stragetyId!=null and stragetyId!=''">
AND stragety_id = #{stragetyId}
</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="capacity!=null and capacity!=''">
AND capacity = #{capacity}
</if>
<if test="stopTimes!=null and stopTimes!=''">
AND stop_times = #{stopTimes}
</if>
<if test="delayTime!=null and delayTime!=''">
AND delay_time = #{delayTime}
</if>
<if test="travelTime!=null and travelTime!=''">
AND travel_time = #{travelTime}
</if>
<if test="speed!=null and speed!=''">
AND speed = #{speed}
</if>
<if test="yearWeek!=null and yearWeek!=''">
AND year_week = #{yearWeek}
</if>
<if test="weekStartTime!=null">
AND week_start_time = #{weekStartTime}
</if>
<if test="weekEndTime!=null">
AND week_end_time = #{weekEndTime}
</if>
<if test="insertTime!=null">
AND insert_time = #{insertTime}
</if>
</sql>
<!-- 通用设置列 -->
<sql id="AnalysisGreenWaveOptimizeWeekSetColumns">
<if test="roadDirection!=null and roadDirection!=''">
road_direction = #{roadDirection},
</if>
<if test="weekDay!=null and weekDay!=''">
week_day = #{weekDay},
</if>
<if test="optimizeStartTime!=null">
optimize_start_time = #{optimizeStartTime},
</if>
<if test="optimizeEndTime!=null">
optimize_end_time = #{optimizeEndTime},
</if>
<if test="stragetyId!=null and stragetyId!=''">
stragety_id = #{stragetyId},
</if>
<if test="optimizeCount!=null and optimizeCount!=''">
optimize_count = #{optimizeCount},
</if>
<if test="optimizeDuration!=null and optimizeDuration!=''">
optimize_duration = #{optimizeDuration},
</if>
<if test="capacity!=null and capacity!=''">
capacity = #{capacity},
</if>
<if test="stopTimes!=null and stopTimes!=''">
stop_times = #{stopTimes},
</if>
<if test="delayTime!=null and delayTime!=''">
delay_time = #{delayTime},
</if>
<if test="travelTime!=null and travelTime!=''">
travel_time = #{travelTime},
</if>
<if test="speed!=null and speed!=''">
speed = #{speed},
</if>
<if test="yearWeek!=null and yearWeek!=''">
year_week = #{yearWeek},
</if>
<if test="weekStartTime!=null">
week_start_time = #{weekStartTime},
</if>
<if test="weekEndTime!=null">
week_end_time = #{weekEndTime},
</if>
<if test="insertTime!=null">
insert_time = #{insertTime},
</if>
</sql>
<!-- 通用查询映射结果 -->
<resultMap id="AnalysisGreenWaveOptimizeWeekMap" type="net.wanji.opt.entity.report.AnalysisGreenWaveOptimizeWeek">
<id column="green_id" property="greenId"/>
<result column="road_direction" property="roadDirection"/>
<result column="week_day" property="weekDay"/>
<result column="optimize_start_time" property="optimizeStartTime"/>
<result column="optimize_end_time" property="optimizeEndTime"/>
<result column="stragety_id" property="stragetyId"/>
<result column="optimize_count" property="optimizeCount"/>
<result column="optimize_duration" property="optimizeDuration"/>
<result column="capacity" property="capacity"/>
<result column="stop_times" property="stopTimes"/>
<result column="delay_time" property="delayTime"/>
<result column="travel_time" property="travelTime"/>
<result column="speed" property="speed"/>
<result column="year_week" property="yearWeek"/>
<result column="week_start_time" property="weekStartTime"/>
<result column="week_end_time" property="weekEndTime"/>
<result column="insert_time" property="insertTime"/>
</resultMap>
<!-- 查询表t_analysis_green_wave_optimize_week所有信息 -->
<select id="findAllAnalysisGreenWaveOptimizeWeek" resultMap="AnalysisGreenWaveOptimizeWeekMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_analysis_green_wave_optimize_week
</select>
<!-- 根据主键greenId查询表t_analysis_green_wave_optimize_week信息 -->
<select id="findAnalysisGreenWaveOptimizeWeekBygreenId" resultMap="AnalysisGreenWaveOptimizeWeekMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_analysis_green_wave_optimize_week
WHERE green_id=#{greenId}
</select>
<!-- 根据条件查询表t_analysis_green_wave_optimize_week信息 -->
<select id="findAnalysisGreenWaveOptimizeWeekByCondition" resultMap="AnalysisGreenWaveOptimizeWeekMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_analysis_green_wave_optimize_week
WHERE 1=1
<include refid="AnalysisGreenWaveOptimizeWeekByCondition" />
</select>
<!-- 根据主键greenId删除表t_analysis_green_wave_optimize_week信息 -->
<delete id="deleteAnalysisGreenWaveOptimizeWeekBygreenId">
DELETE FROM
t_analysis_green_wave_optimize_week
WHERE green_id=#{greenId}
</delete>
<!-- 根据主键greenId更新表t_analysis_green_wave_optimize_week信息 -->
<update id="updateAnalysisGreenWaveOptimizeWeekBygreenId" parameterType="net.wanji.opt.entity.report.AnalysisGreenWaveOptimizeWeek">
UPDATE t_analysis_green_wave_optimize_week
<set>
<include refid="AnalysisGreenWaveOptimizeWeekSetColumns"/>
</set>
WHERE
green_id=#{greenId}
</update>
<!-- 新增表t_analysis_green_wave_optimize_week信息 -->
<insert id="addAnalysisGreenWaveOptimizeWeek">
INSERT INTO t_analysis_green_wave_optimize_week (
green_id
,road_direction
,week_day
,optimize_start_time
,optimize_end_time
,stragety_id
,optimize_count
,optimize_duration
,capacity
,stop_times
,delay_time
,travel_time
,speed
,year_week
,week_start_time
,week_end_time
,insert_time
) VALUES (
#{greenId}
,#{roadDirection}
,#{weekDay}
,#{optimizeStartTime}
,#{optimizeEndTime}
,#{stragetyId}
,#{optimizeCount}
,#{optimizeDuration}
,#{capacity}
,#{stopTimes}
,#{delayTime}
,#{travelTime}
,#{speed}
,#{yearWeek}
,#{weekStartTime}
,#{weekEndTime}
,#{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.report.AnalysisGreenWavePeakDetailMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="net.wanji.opt.entity.report.AnalysisGreenWavePeakDetail">
<id column="green_id" property="greenId" />
<result column="road_direction" property="roadDirection" />
<result column="week_day" property="weekDay" />
<result column="peak_start_time" property="peakStartTime" />
<result column="peak_end_time" property="peakEndTime" />
<result column="traffic_index" property="trafficIndex" />
<result column="status" property="status" />
<result column="travel_time" property="travelTime" />
<result column="speed" property="speed" />
<result column="flow" property="flow" />
<result column="peak_type" property="peakType" />
<result column="year_week" property="yearWeek" />
<result column="week_start_time" property="weekStartTime" />
<result column="week_end_time" property="weekEndTime" />
<result column="insert_time" property="insertTime" />
</resultMap>
<sql id="Table_Name">
t_analysis_green_wave_peak_detail
</sql>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
green_id, road_direction, week_day, peak_start_time, peak_end_time, traffic_index, status, travel_time, speed, flow, peak_type, year_week, week_start_time, week_end_time, insert_time
</sql>
<!-- 查询峰期内拥堵时段 -->
<select id="findCongestTimeSpanInPeakTime" resultType="net.wanji.opt.vo2.report.GreenCongestTimeSpanVO">
select congest_start_time,congest_end_time
from t_analysis_green_wave_congest_time_span
where
year_week=#{yearWeek} and green_id=#{greenId}
and congest_start_time > #{peakStartTime} and congest_end_time &lt; #{peakEndTime}
<!-- and status=3 -->
</select>
<!--新增操作 -->
<insert id="save" parameterType="net.wanji.opt.entity.report.AnalysisGreenWavePeakDetail">
insert into
<include refid="Table_Name"/>
(<include refid="Base_Column_List"/>)
values(
#{greenId}
,#{roadDirection}
,#{weekDay}
,#{peakStartTime}
,#{peakEndTime}
,#{trafficIndex}
,#{status}
,#{travelTime}
,#{speed}
,#{flow}
,#{peakType}
,#{yearWeek}
,#{weekStartTime}
,#{weekEndTime}
,#{insertTime}
)
</insert>
<!--根据ID查询-->
<select id="findById" resultMap="BaseResultMap" parameterType="String">
select
<include refid="Base_Column_List"/>
from
<include refid="Table_Name"/>
where id = #{id}
</select>
<!--获取数据总数-->
<select id="getCount" parameterType="java.util.Map" resultType="int">
select count(*) from
<include refid="Table_Name"/>
where 1=1
<include refid="sql_query"/>
<include refid="fuzzySearch"/>
</select>
<!-- 查询所有数据-->
<select id="findAll" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from
<include refid="Table_Name"/>
<!--ORDER BY `dt_create_date` DESC-->
</select>
<!-- 通过条件查询所有数据-->
<select id="findByMap" parameterType="java.util.Map" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from
<include refid="Table_Name"/>
<where>
<include refid="sql_query"/>
<include refid="fuzzySearch"/>
<if test="greenIdList != null and greenIdList.size() > 0">
AND green_id IN
<foreach collection="greenIdList" item="greenId" open="(" close=")" separator=",">
#{greenId}
</foreach>
</if>
</where>
<!--ORDER BY `dt_create_date` DESC-->
</select>
<!--分组分页查询-->
<select id="findByPage" parameterType="java.util.Map" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM
<include refid="Table_Name"/>
<where>
<include refid="sql_query"/>
<include refid="fuzzySearch"/>
</where>
<!--ORDER BY `dt_create_date` DESC-->
limit #{startRowNum}, #{pageSize}
</select>
<!--更新-->
<update id="update" parameterType="net.wanji.opt.entity.report.AnalysisGreenWavePeakDetail">
update
<include refid="Table_Name"/>
<include refid="sql_update"/>
where
green_id = #{greenId}
</update>
<!--根据ID删除-->
<delete id="deleteById" parameterType="String">
delete from
<include refid="Table_Name"/>
where
green_id = #{greenId}
</delete>
<sql id="fuzzySearch">
<if test="keyword != null and keyword !=''">
and (locate(#{keyword,jdbcType=VARCHAR}, s_name)>0
)
</if>
</sql>
<sql id="sql_query">
<if test="greenId != null and greenId != '' ">
<![CDATA[ and green_id = #{greenId}]]>
</if>
<if test="roadDirection != null and roadDirection != '' ">
<![CDATA[ and road_direction = #{roadDirection}]]>
</if>
<if test="weekDay != null and weekDay != '' ">
<![CDATA[ and week_day = #{weekDay}]]>
</if>
<if test="peakStartTime != null and peakStartTime != '' ">
<![CDATA[ and peak_start_time = #{peakStartTime}]]>
</if>
<if test="peakEndTime != null and peakEndTime != '' ">
<![CDATA[ and peak_end_time = #{peakEndTime}]]>
</if>
<if test="trafficIndex != null and trafficIndex != '' ">
<![CDATA[ and traffic_index = #{trafficIndex}]]>
</if>
<if test="status != null and status != '' ">
<![CDATA[ and status = #{status}]]>
</if>
<if test="travelTime != null and travelTime != '' ">
<![CDATA[ and travel_time = #{travelTime}]]>
</if>
<if test="speed != null and speed != '' ">
<![CDATA[ and speed = #{speed}]]>
</if>
<if test="flow != null and flow != '' ">
<![CDATA[ and flow = #{flow}]]>
</if>
<if test="peakType != null and peakType != '' ">
<![CDATA[ and peak_type = #{peakType}]]>
</if>
<if test="yearWeek != null and yearWeek != '' ">
<![CDATA[ and year_week = #{yearWeek}]]>
</if>
<if test="weekStartTime != null and weekStartTime != '' ">
<![CDATA[ and week_start_time = #{weekStartTime}]]>
</if>
<if test="weekEndTime != null and weekEndTime != '' ">
<![CDATA[ and week_end_time = #{weekEndTime}]]>
</if>
<if test="insertTime != null and insertTime != '' ">
<![CDATA[ and insert_time = #{insertTime}]]>
</if>
</sql>
<!--更新操作-->
<sql id="sql_update">
<set>
<if test="greenId != null and greenId != '' ">
<![CDATA[ green_id = #{greenId}, ]]>
</if>
<if test="roadDirection != null and roadDirection != '' ">
<![CDATA[ road_direction = #{roadDirection}, ]]>
</if>
<if test="weekDay != null and weekDay != '' ">
<![CDATA[ week_day = #{weekDay}, ]]>
</if>
<if test="peakStartTime != null and peakStartTime != '' ">
<![CDATA[ peak_start_time = #{peakStartTime}, ]]>
</if>
<if test="peakEndTime != null and peakEndTime != '' ">
<![CDATA[ peak_end_time = #{peakEndTime}, ]]>
</if>
<if test="trafficIndex != null and trafficIndex != '' ">
<![CDATA[ traffic_index = #{trafficIndex}, ]]>
</if>
<if test="status != null and status != '' ">
<![CDATA[ status = #{status}, ]]>
</if>
<if test="travelTime != null and travelTime != '' ">
<![CDATA[ travel_time = #{travelTime}, ]]>
</if>
<if test="speed != null and speed != '' ">
<![CDATA[ speed = #{speed}, ]]>
</if>
<if test="flow != null and flow != '' ">
<![CDATA[ flow = #{flow}, ]]>
</if>
<if test="peakType != null and peakType != '' ">
<![CDATA[ peak_type = #{peakType}, ]]>
</if>
<if test="yearWeek != null and yearWeek != '' ">
<![CDATA[ year_week = #{yearWeek}, ]]>
</if>
<if test="weekStartTime != null and weekStartTime != '' ">
<![CDATA[ week_start_time = #{weekStartTime}, ]]>
</if>
<if test="weekEndTime != null and weekEndTime != '' ">
<![CDATA[ week_end_time = #{weekEndTime}, ]]>
</if>
<if test="insertTime != null and insertTime != '' ">
<![CDATA[ insert_time = #{insertTime}, ]]>
</if>
</set>
</sql>
</mapper>
......@@ -71,7 +71,7 @@
<select id="getFlowByTime" resultType="java.lang.Integer">
SELECT COALESCE(flow, 0) from
(select cross_id from t_greenwave_cross where green_id = #{greenId} and sort = 1) cross_data
(select cross_id from t_greenwave_cross where green_id = #{greenId} and is_key_route = 1) cross_data
left join
(SELECT sum(flow) as flow,cross_id from t_cross_dir_data_hist where start_time BETWEEN #{startDate} AND #{endDate} AND TIME( start_time ) BETWEEN #{startTime} AND #{endTime} and dir_type = #{dir} GROUP BY cross_id) cross_flow on cross_data.cross_id = cross_flow.cross_id
</select>
......@@ -83,4 +83,29 @@
and green_id = #{greenId}
and status >= 3 and road_direction = #{roadDirection} order by start_time
</select>
<select id="getDataByWeek" resultType="net.wanji.opt.entity.report.GreenWaveWeekData">
SELECT
green_id,
peak_type,
COALESCE ( avg( speed ), 0 ) AS speed,
COALESCE ( avg( flow ), 0 ) AS flow,
COALESCE ( avg( travel_time ), 0 ) AS travel_time,
COALESCE ( avg( congest_index ), 0 ) AS congest_index
FROM
t_analysis_green_wave_week_data
WHERE
year_week = #{yearWeek}
<if test="greenIdList != null and greenIdList.size() > 0">
AND green_id IN
<foreach collection="greenIdList" item="greenId" open="(" close=")" separator=",">
#{greenId}
</foreach>
</if>
<if test="greenIdList == null or greenIdList.size() == 0">
AND 1 = 0
</if>
GROUP BY
green_id,
peak_type
</select>
</mapper>
\ No newline at end of file
......@@ -112,17 +112,15 @@
<select id="pageStrategyCrossList" parameterType="map" resultType="net.wanji.opt.entity.strategy.StrategyPriorityDailyInfo">
SELECT
t2.id,
DISTINCT
t4.`name` as waveName, t3.`name` as crossName,
t3.id as crossId, t2.daily_plan_details as dailyPlanDetails
FROM
t_strategy_priority_config t1
LEFT JOIN t_strategy_priority_daily_info t2 on t1.cross_id = t2.cross_id
LEFT JOIN t_base_cross_info t3 on t1.cross_id = t3.id
t_base_cross_info t3
LEFT JOIN t_strategy_priority_daily_info t2 on t3.id = t2.cross_id
LEFT JOIN t_strategy_priority_config t1 on t3.id=t1.cross_id
LEFT JOIN t_greenwave_info t4 on t4.id = t1.green_id
WHERE
1=1
and t2.id is not null
WHERE t3.is_signal='1'
</select>
<select id="getStrategyList" parameterType="map" resultType="net.wanji.opt.synthesis.pojo.StrategyFactoryEntity">
SELECT
......@@ -175,13 +173,13 @@
</delete>
<select id="getPriorityConfigData" parameterType="map" resultType="net.wanji.opt.synthesis.pojo.StrategyFactoryEntity">
SELECT
SELECT t2.status,
t2.method,t2.strategy_name,t2.strategy_no,
t2.mark,t2.company,t1.priority as priority,t1.id,
t1.group_id as labelCode ,t1.group_name as label,t1.cross_id as crossId
FROM
t_strategy_priority_config t1
LEFT JOIN t_strategy_factory_info t2 on t1.strategy_no=t2.strategy_no
LEFT JOIN t_strategy_factory_info t2 on t1.strategy_no=t2.strategy_no and t2.status='1'
WHERE
1=1
AND t1.strategy_no IN
......@@ -239,4 +237,39 @@
and cross_id = #{crossId}
</if>
</select>
<select id="paramterConfigTable" parameterType="map" resultType="net.wanji.opt.entity.strategy.StrategyParameterConfig">
SELECT
id,cross_id
FROM t_strategy_priority_parameter
WHERE
1=1
<if test="crossId!=null">
AND cross_id =#{crossId}
</if>
</select>
<delete id="deleteParamterConfig">
DELETE
FROM t_strategy_priority_parameter
WHERE cross_id =#{crossId}
</delete>
<insert id="saveParamConfig" parameterType="list" >
INSERT INTO t_strategy_priority_parameter
(cross_id,strategy_no,param_details,scheduling_param)
VALUES
<foreach collection="savePlanList" item="item" separator=",">
(#{item.crossId},#{item.strategyNo},#{item.paramDetails},#{item.schedulingParam})
</foreach>
</insert>
<select id="getParamConfigData" parameterType="map" resultType="net.wanji.opt.entity.strategy.StrategyParameterConfig">
SELECT
id,strategy_no,cross_id,param_details,scheduling_param
FROM
t_strategy_priority_parameter
WHERE
1=1
<if test="crossId!=null">
AND cross_id =#{crossId}
</if>
</select>
</mapper>
package net.wanji.opt.controllerv2.judgeanalysis;
import net.wanji.common.framework.Constants;
import net.wanji.common.framework.dubbointerface.BaseDubboInterface;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.framework.rest.AbstractRestServer;
import net.wanji.common.framework.dubbointerface.BaseDubboInterface;
import net.wanji.common.framework.exception.DubboProviderException;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.common.framework.rest.AbstractRestServer;
import net.wanji.common.framework.rest.impl.AbstractRestServerImpl;
import net.wanji.opt.servicev2.judgeanalysis.BaseAreaInfoService;
import net.wanji.opt.entity.judgeanalysis.BaseAreaInfo;
import net.wanji.common.framework.rest.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiImplicitParam;
import lombok.extern.slf4j.Slf4j;
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 org.springframework.web.bind.annotation.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import javax.ws.rs.core.MediaType;
import java.util.List;
import java.util.Map;
/**
* <p>
* 区域基础信息 接口API
* </p>
* @version 1.0
* @author wangtao
* @Date 2025-03-18
*/
@RestController
@Slf4j
@RequestMapping("/base-area-info")
@Api(value="BaseAreaInfoController", description="区域基础信息接口", tags = "区域基础信息")
public class BaseAreaInfoController extends AbstractRestServerImpl<BaseAreaInfo> implements AbstractRestServer<BaseAreaInfo>{
@Autowired
private BaseAreaInfoService baseAreaInfoService;
@Override
public BaseAreaInfoService getBaseDubboInterface() {
return this.baseAreaInfoService;
}
/**
* 获取所有区域基础信息记录
*
* @return JsonViewObject
*/
@ApiOperation(value = "区域基础信息-获取所有记录", notes = "获取所有区域基础信息记录", response = BaseAreaInfo.class, produces = MediaType.APPLICATION_JSON,hidden = true)
@GetMapping(value = "/byAll", produces = MediaType.APPLICATION_JSON)
@Override
public JsonViewObject getAll() {
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try {
List<BaseAreaInfo> list = this.getBaseDubboInterface().findAll();
jsonView.success(list);
} catch (DubboProviderException e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonView;
}
/**
* 根据id查询区域基础信息记录
*
* @param id
* @return JsonViewObject
*/
@ApiOperation(value = "区域基础信息-根据id查询记录", notes = "根据id查询区域基础信息记录", response = BaseAreaInfo.class, produces = MediaType.APPLICATION_JSON,hidden = true)
@GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON)
@Override
public JsonViewObject getById(@PathVariable String id) {
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try {
BaseAreaInfo entity = this.getBaseDubboInterface().findById(id);
jsonView.success(entity);
} catch (DubboProviderException e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("AbstractRestServerImpl getById error, id:{}", id, e);
}
return jsonView;
}
@ApiOperation(value = "区域基础信息-根据条件查询记录", notes = "根据条件查询记录", consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/byCondition", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@Override
public JsonViewObject getByWhere(@RequestBody BaseAreaInfo entity) {
return super.getByWhere(entity);
}
@ApiOperation(value = "区域基础信息-根据条件分页查询记录", notes = "根据条件分页查询记录", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON,hidden = true)
@PostMapping(value = "/byPage", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ResponseBody
public JsonViewObject getPage(@RequestBody Page<BaseAreaInfo> page){
return super.getPage(page);
}
/**
* 根据id删除
*
* @param ids
* @return JsonViewObject
*/
@ApiOperation(value = "区域基础信息-根据多个id删除记录", notes = "根据多个id删除记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON ,hidden = true)
@ApiImplicitParams(value = {
@ApiImplicitParam(paramType = "query", name = "ids", dataType = "String", required = true, value = "多个记录id,用逗号分隔", example = "1,2")
})
@GetMapping(value = "/deleting", produces = MediaType.APPLICATION_JSON)
public JsonViewObject deleteByIds(String ids) {
return super.deleteByIds(ids);
}
/**
* 新建记录
*
* @param entity
* @return JsonViewObject
*/
@ApiOperation(value = "区域基础信息-新建记录", notes = "新建记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON,hidden = true)
@PostMapping(value = "/creating", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
public JsonViewObject save( @RequestBody BaseAreaInfo entity){
return super.save(entity);
}
/**
* 修改记录
*
* @param entity
* @return
*/
@ApiOperation(value = "区域基础信息-修改记录", notes = "修改记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON,hidden = true)
@PostMapping(value = "/updating", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
public JsonViewObject update(@RequestBody BaseAreaInfo entity){
return super.update(entity);
}
}
package net.wanji.opt.controllerv2.report;
import net.wanji.common.framework.Constants;
import net.wanji.common.framework.dubbointerface.BaseDubboInterface;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.framework.rest.AbstractRestServer;
import net.wanji.common.framework.dubbointerface.BaseDubboInterface;
import net.wanji.common.framework.exception.DubboProviderException;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.common.framework.rest.AbstractRestServer;
import net.wanji.common.framework.rest.impl.AbstractRestServerImpl;
import net.wanji.opt.servicev2.report.AnalysisGreenWavePeakDetailService;
import net.wanji.opt.entity.report.AnalysisGreenWavePeakDetail;
import net.wanji.common.framework.rest.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiImplicitParam;
import lombok.extern.slf4j.Slf4j;
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 org.springframework.web.bind.annotation.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import javax.ws.rs.core.MediaType;
import java.util.List;
import java.util.Map;
/**
* <p>
* 接口API
* </p>
* @version 1.0
* @author fengyi
* @Date 2025-04-07
*/
@RestController
@Slf4j
@RequestMapping("/analysis-green-wave-peak-detail")
@Api(value="AnalysisGreenWavePeakDetailController", description="接口", tags = "")
public class AnalysisGreenWavePeakDetailController extends AbstractRestServerImpl<AnalysisGreenWavePeakDetail> implements AbstractRestServer<AnalysisGreenWavePeakDetail>{
@Autowired
private AnalysisGreenWavePeakDetailService analysisGreenWavePeakDetailService;
@Override
public AnalysisGreenWavePeakDetailService getBaseDubboInterface() {
return this.analysisGreenWavePeakDetailService;
}
/**
* 获取所有记录
*
* @return JsonViewObject
*/
@ApiOperation(value = "-获取所有记录", notes = "获取所有记录", response = AnalysisGreenWavePeakDetail.class, produces = MediaType.APPLICATION_JSON,hidden = true)
@GetMapping(value = "/byAll", produces = MediaType.APPLICATION_JSON)
@Override
public JsonViewObject getAll() {
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try {
List<AnalysisGreenWavePeakDetail> list = this.getBaseDubboInterface().findAll();
jsonView.success(list);
} catch (DubboProviderException e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonView;
}
/**
* 根据id查询记录
*
* @param id
* @return JsonViewObject
*/
@ApiOperation(value = "-根据id查询记录", notes = "根据id查询记录", response = AnalysisGreenWavePeakDetail.class, produces = MediaType.APPLICATION_JSON,hidden = true)
@GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON)
@Override
public JsonViewObject getById(@PathVariable String id) {
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try {
AnalysisGreenWavePeakDetail entity = this.getBaseDubboInterface().findById(id);
jsonView.success(entity);
} catch (DubboProviderException e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("AbstractRestServerImpl getById error, id:{}", id, e);
}
return jsonView;
}
@ApiOperation(value = "-根据条件查询记录", notes = "根据条件查询记录", consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/byCondition", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@Override
public JsonViewObject getByWhere(@RequestBody AnalysisGreenWavePeakDetail entity) {
return super.getByWhere(entity);
}
@ApiOperation(value = "-根据条件分页查询记录", notes = "根据条件分页查询记录", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON,hidden = true)
@PostMapping(value = "/byPage", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ResponseBody
public JsonViewObject getPage(@RequestBody Page<AnalysisGreenWavePeakDetail> page){
return super.getPage(page);
}
/**
* 根据id删除
*
* @param ids
* @return JsonViewObject
*/
@ApiOperation(value = "-根据多个id删除记录", notes = "根据多个id删除记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON ,hidden = true)
@ApiImplicitParams(value = {
@ApiImplicitParam(paramType = "query", name = "ids", dataType = "String", required = true, value = "多个记录id,用逗号分隔", example = "1,2")
})
@GetMapping(value = "/deleting", produces = MediaType.APPLICATION_JSON)
public JsonViewObject deleteByIds(String ids) {
return super.deleteByIds(ids);
}
/**
* 新建记录
*
* @param entity
* @return JsonViewObject
*/
@ApiOperation(value = "-新建记录", notes = "新建记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON,hidden = true)
@PostMapping(value = "/creating", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
public JsonViewObject save( @RequestBody AnalysisGreenWavePeakDetail entity){
return super.save(entity);
}
/**
* 修改记录
*
* @param entity
* @return
*/
@ApiOperation(value = "-修改记录", notes = "修改记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON,hidden = true)
@PostMapping(value = "/updating", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
public JsonViewObject update(@RequestBody AnalysisGreenWavePeakDetail entity){
return super.update(entity);
}
}
package net.wanji.opt.dao.mapper.judgeanalysis;
import net.wanji.opt.entity.judgeanalysis.BaseAreaInfo;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import net.wanji.common.framework.mapper.BaseInterfaceMapper;
/**
* <p>
* 区域基础信息
* </p>
*
* @Author wangtao
* @Date 2025-03-18
*/
public interface BaseAreaInfoMapper extends BaseInterfaceMapper<BaseAreaInfo> {
}
package net.wanji.opt.dao.mapper.report;
import net.wanji.opt.entity.report.AnalysisGreenWavePeakDetail;
import java.util.List;
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> {
}
package net.wanji.opt.entity.judgeanalysis;
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 wangtao
* @Date 2025-03-18
*/
@Data
@ApiModel(value="BaseAreaInfo对象", description="区域基础信息")
public class BaseAreaInfo extends TrackableEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "行政区划代码")
private Long code;
@ApiModelProperty(value = "行政区划名称")
private String name;
@ApiModelProperty(value = "道路名称")
private String roadName;
@ApiModelProperty(value = "区划类型:1行政区划;2交警辖区;3商圈;4交通小区;5热点区域;6道路")
private Integer type;
@ApiModelProperty(value = "父节点")
private Integer parentCode;
@ApiModelProperty(value = "区域中心点")
private String location;
@ApiModelProperty(value = "区域边界")
private String polylines;
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "创建时间")
private Date gmtCreate;
@ApiModelProperty(value = "修改时间")
private Date gmtModified;
}
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 congestIndex;
@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.servicev2.judgeanalysis;
import net.wanji.opt.entity.judgeanalysis.BaseAreaInfo;
import net.wanji.common.framework.dubbointerface.BaseDubboInterface;
/**
* <p>
* 区域基础信息
* </p>
*
* @Author wangtao
* @Date 2025-03-18
*/
public interface BaseAreaInfoService extends BaseDubboInterface<BaseAreaInfo> {
}
package net.wanji.opt.servicev2.judgeanalysis.impl;
import net.wanji.common.framework.dubbointerface.impl.BaseDubboInterfaceImpl;
import net.wanji.common.framework.exception.DubboProviderException;
import net.wanji.common.framework.mapper.BaseInterfaceMapper;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.entity.judgeanalysis.BaseAreaInfo;
import net.wanji.opt.servicev2.judgeanalysis.BaseAreaInfoService;
import net.wanji.opt.dao.mapper.judgeanalysis.BaseAreaInfoMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* <p>
* 区域基础信息
* </p>
*
* @Author wangtao
* @Date 2025-03-18
*/
@Slf4j
@Component
@Service
public class BaseAreaInfoServiceImpl extends BaseDubboInterfaceImpl<BaseAreaInfo> implements BaseAreaInfoService {
@Resource
private BaseAreaInfoMapper baseAreaInfoMapper;
@Override
public BaseInterfaceMapper<BaseAreaInfo> getBaseInterfaceMapper() {
return this.baseAreaInfoMapper;
}
}
package net.wanji.opt.servicev2.report;
import net.wanji.opt.entity.report.AnalysisGreenWavePeakDetail;
import net.wanji.common.framework.dubbointerface.BaseDubboInterface;
/**
* <p>
*
* </p>
*
* @Author fengyi
* @Date 2025-04-07
*/
public interface AnalysisGreenWavePeakDetailService extends BaseDubboInterface<AnalysisGreenWavePeakDetail> {
}
package net.wanji.opt.servicev2.report.impl;
import net.wanji.common.framework.dubbointerface.impl.BaseDubboInterfaceImpl;
import net.wanji.common.framework.exception.DubboProviderException;
import net.wanji.common.framework.mapper.BaseInterfaceMapper;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.entity.report.AnalysisGreenWavePeakDetail;
import net.wanji.opt.servicev2.report.AnalysisGreenWavePeakDetailService;
import net.wanji.opt.dao.mapper.report.AnalysisGreenWavePeakDetailMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* <p>
*
* </p>
*
* @Author fengyi
* @Date 2025-04-07
*/
@Slf4j
@Component
@Service
public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceImpl<AnalysisGreenWavePeakDetail> implements AnalysisGreenWavePeakDetailService {
@Resource
private AnalysisGreenWavePeakDetailMapper analysisGreenWavePeakDetailMapper;
@Override
public BaseInterfaceMapper<AnalysisGreenWavePeakDetail> getBaseInterfaceMapper() {
return this.analysisGreenWavePeakDetailMapper;
}
}
<?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.report.AnalysisGreenWavePeakDetailMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="net.wanji.opt.entity.report.AnalysisGreenWavePeakDetail">
<id column="green_id" property="greenId" />
<result column="road_direction" property="roadDirection" />
<result column="week_day" property="weekDay" />
<result column="peak_start_time" property="peakStartTime" />
<result column="peak_end_time" property="peakEndTime" />
<result column="congest_index" property="congestIndex" />
<result column="status" property="status" />
<result column="travel_time" property="travelTime" />
<result column="speed" property="speed" />
<result column="flow" property="flow" />
<result column="peak_type" property="peakType" />
<result column="year_week" property="yearWeek" />
<result column="week_start_time" property="weekStartTime" />
<result column="week_end_time" property="weekEndTime" />
<result column="insert_time" property="insertTime" />
</resultMap>
<sql id="Table_Name">
t_analysis_green_wave_peak_detail
</sql>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
green_id, road_direction, week_day, peak_start_time, peak_end_time, congest_index, status, travel_time, speed, flow, peak_type, year_week, week_start_time, week_end_time, insert_time
</sql>
<!--新增操作 -->
<insert id="save" parameterType="net.wanji.opt.entity.report.AnalysisGreenWavePeakDetail">
insert into
<include refid="Table_Name"/>
(<include refid="Base_Column_List"/>)
values(
#{greenId}
,#{roadDirection}
,#{weekDay}
,#{peakStartTime}
,#{peakEndTime}
,#{congestIndex}
,#{status}
,#{travelTime}
,#{speed}
,#{flow}
,#{peakType}
,#{yearWeek}
,#{weekStartTime}
,#{weekEndTime}
,#{insertTime}
)
</insert>
<!--根据ID查询-->
<select id="findById" resultMap="BaseResultMap" parameterType="String">
select
<include refid="Base_Column_List"/>
from
<include refid="Table_Name"/>
where id = #{id}
</select>
<!--获取数据总数-->
<select id="getCount" parameterType="java.util.Map" resultType="int">
select count(*) from
<include refid="Table_Name"/>
where 1=1
<include refid="sql_query"/>
<include refid="fuzzySearch"/>
</select>
<!-- 查询所有数据-->
<select id="findAll" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from
<include refid="Table_Name"/>
<!--ORDER BY `dt_create_date` DESC-->
</select>
<!-- 通过条件查询所有数据-->
<select id="findByMap" parameterType="java.util.Map" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from
<include refid="Table_Name"/>
<where>
<include refid="sql_query"/>
<include refid="fuzzySearch"/>
</where>
<!--ORDER BY `dt_create_date` DESC-->
</select>
<!--分组分页查询-->
<select id="findByPage" parameterType="java.util.Map" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM
<include refid="Table_Name"/>
<where>
<include refid="sql_query"/>
<include refid="fuzzySearch"/>
</where>
<!--ORDER BY `dt_create_date` DESC-->
limit #{startRowNum}, #{pageSize}
</select>
<!--更新-->
<update id="update" parameterType="net.wanji.opt.entity.report.AnalysisGreenWavePeakDetail">
update
<include refid="Table_Name"/>
<include refid="sql_update"/>
where
green_id = #{greenId}
</update>
<!--根据ID删除-->
<delete id="deleteById" parameterType="String">
delete from
<include refid="Table_Name"/>
where
green_id = #{greenId}
</delete>
<sql id="fuzzySearch">
<if test="keyword != null and keyword !=''">
and (locate(#{keyword,jdbcType=VARCHAR}, s_name)>0
)
</if>
</sql>
<sql id="sql_query">
<if test="greenId != null and greenId != '' ">
<![CDATA[ and green_id = #{greenId}]]>
</if>
<if test="roadDirection != null and roadDirection != '' ">
<![CDATA[ and road_direction = #{roadDirection}]]>
</if>
<if test="weekDay != null and weekDay != '' ">
<![CDATA[ and week_day = #{weekDay}]]>
</if>
<if test="peakStartTime != null and peakStartTime != '' ">
<![CDATA[ and peak_start_time = #{peakStartTime}]]>
</if>
<if test="peakEndTime != null and peakEndTime != '' ">
<![CDATA[ and peak_end_time = #{peakEndTime}]]>
</if>
<if test="congestIndex != null and congestIndex != '' ">
<![CDATA[ and congest_index = #{congestIndex}]]>
</if>
<if test="status != null and status != '' ">
<![CDATA[ and status = #{status}]]>
</if>
<if test="travelTime != null and travelTime != '' ">
<![CDATA[ and travel_time = #{travelTime}]]>
</if>
<if test="speed != null and speed != '' ">
<![CDATA[ and speed = #{speed}]]>
</if>
<if test="flow != null and flow != '' ">
<![CDATA[ and flow = #{flow}]]>
</if>
<if test="peakType != null and peakType != '' ">
<![CDATA[ and peak_type = #{peakType}]]>
</if>
<if test="yearWeek != null and yearWeek != '' ">
<![CDATA[ and year_week = #{yearWeek}]]>
</if>
<if test="weekStartTime != null and weekStartTime != '' ">
<![CDATA[ and week_start_time = #{weekStartTime}]]>
</if>
<if test="weekEndTime != null and weekEndTime != '' ">
<![CDATA[ and week_end_time = #{weekEndTime}]]>
</if>
<if test="insertTime != null and insertTime != '' ">
<![CDATA[ and insert_time = #{insertTime}]]>
</if>
</sql>
<!--更新操作-->
<sql id="sql_update">
<set>
<if test="greenId != null and greenId != '' ">
<![CDATA[ green_id = #{greenId}, ]]>
</if>
<if test="roadDirection != null and roadDirection != '' ">
<![CDATA[ road_direction = #{roadDirection}, ]]>
</if>
<if test="weekDay != null and weekDay != '' ">
<![CDATA[ week_day = #{weekDay}, ]]>
</if>
<if test="peakStartTime != null and peakStartTime != '' ">
<![CDATA[ peak_start_time = #{peakStartTime}, ]]>
</if>
<if test="peakEndTime != null and peakEndTime != '' ">
<![CDATA[ peak_end_time = #{peakEndTime}, ]]>
</if>
<if test="congestIndex != null and congestIndex != '' ">
<![CDATA[ congest_index = #{congestIndex}, ]]>
</if>
<if test="status != null and status != '' ">
<![CDATA[ status = #{status}, ]]>
</if>
<if test="travelTime != null and travelTime != '' ">
<![CDATA[ travel_time = #{travelTime}, ]]>
</if>
<if test="speed != null and speed != '' ">
<![CDATA[ speed = #{speed}, ]]>
</if>
<if test="flow != null and flow != '' ">
<![CDATA[ flow = #{flow}, ]]>
</if>
<if test="peakType != null and peakType != '' ">
<![CDATA[ peak_type = #{peakType}, ]]>
</if>
<if test="yearWeek != null and yearWeek != '' ">
<![CDATA[ year_week = #{yearWeek}, ]]>
</if>
<if test="weekStartTime != null and weekStartTime != '' ">
<![CDATA[ week_start_time = #{weekStartTime}, ]]>
</if>
<if test="weekEndTime != null and weekEndTime != '' ">
<![CDATA[ week_end_time = #{weekEndTime}, ]]>
</if>
<if test="insertTime != null and insertTime != '' ">
<![CDATA[ insert_time = #{insertTime}, ]]>
</if>
</set>
</sql>
</mapper>
......@@ -24,12 +24,12 @@ import java.util.List;
public class CodeGeneratorMyBatis1 {
private static final String dburl = "jdbc:mysql://37.12.182.29:3306/wjdit_ecosystem_db_v1.0.0?serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&characterEncoding=utf8";
private static final String dburl = "jdbc:mysql://localhost:3306/wjdit_ecosystem_db_v1.0.0?serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&characterEncoding=utf8";
private static final String userName = "root";
private static final String password = "Wanji300552";
private static final String TABLE_NAMES ="t_base_area_info";
private static final String password = "123456";
private static final String TABLE_NAMES ="t_analysis_green_wave_peak_detail";
private static String ENTITY_NAME = null;
private static final String AUTHOR ="wangtao";
private static final String AUTHOR ="fengyi";
private static final boolean OVERITE_FILE = true; //是否覆盖源文件
private static final String PARENT_PACAGE = "net.wanji";
......@@ -38,7 +38,7 @@ public class CodeGeneratorMyBatis1 {
//表头标识
private static final String TABLE_PREFIX="t_";
static String subModulePackage = ".judgeanalysis";
static String subModulePackage = ".report";
private static String toEntityName(String tableName) {
if (tableName.startsWith(TABLE_PREFIX)) {
......@@ -69,8 +69,8 @@ public class CodeGeneratorMyBatis1 {
// 全局配置
GlobalConfig gc = new GlobalConfig();
// String projectPath = "./signal-optimize-service";
String projectPath = "./wj-gernerator/output";
String projectPath = "./signal-optimize-service";
// String projectPath = "./wj-gernerator/output";
gc.setOutputDir(projectPath+"/src/main/java");
gc.setAuthor(AUTHOR);
......
......@@ -10,7 +10,7 @@ import ${package.Service}.${entity}Service;
import ${package.Mapper}.${table.mapperName};
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
......
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