Commit 1f051dd4 authored by wangyecheng's avatar wangyecheng

Merge remote-tracking branch 'origin/master'

parents 8fc6cb0f 67556959
...@@ -6,6 +6,7 @@ import net.wanji.databus.po.BaseCrossInfoPO; ...@@ -6,6 +6,7 @@ import net.wanji.databus.po.BaseCrossInfoPO;
import net.wanji.databus.vo.CrossInfoVO; import net.wanji.databus.vo.CrossInfoVO;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -20,6 +21,7 @@ import java.util.stream.Collectors; ...@@ -20,6 +21,7 @@ import java.util.stream.Collectors;
* @date 2023/03/14 10:42 * @date 2023/03/14 10:42
*/ */
@Component @Component
@Order(1)
@Slf4j @Slf4j
public class BaseCrossInfoCache implements CommandLineRunner { public class BaseCrossInfoCache implements CommandLineRunner {
......
package net.wanji.opt.common;
/**
* @author duanruiming
* @date 2025/04/02 15:44
*/
public class CommonUtils {
/**
* 分隔符:下划线
**/
public static final String SEPARATOR_UNDER_LINE = "_";
public static String getStrJoin(String ... str) {
String join = String.join(SEPARATOR_UNDER_LINE, str);
return join;
}
}
...@@ -65,10 +65,16 @@ public class EsDateIndexUtil { ...@@ -65,10 +65,16 @@ public class EsDateIndexUtil {
* @return * @return
*/ */
public static List<String> getTimeGranularityAxisAll(String groupType,String startTime, String endTime) { public static List<String> getTimeGranularityAxisAll(String groupType,String startTime, String endTime) {
//DATE_FORMAT(concat( date( start_time ), ' ', HOUR ( start_time ), ':', floor( MINUTE ( start_time ) / 15 ) * 15 ),'%Y-%m-%d %H:%i:00' )
//存放时段 //存放时段
List<String> sortedSet = new ArrayList<>(); List<String> sortedSet = new ArrayList<>();
//===========================根据开始、结束时间输出完整时刻点=================================================// //===========================根据开始、结束时间输出完整时刻点=================================================//
DateTime start = DateTime.parse(startTime, DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER)); 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)); DateTime end = DateTime.parse(endTime, DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER));
if (Objects.equals("0", groupType)) { if (Objects.equals("0", groupType)) {
sortedSet.addAll(EsDateIndexUtil.getTimeScopeList(start, end, TimeGranularityEnum.FIVE_MINUTE, "yyyy-MM-dd HH:mm:00")); sortedSet.addAll(EsDateIndexUtil.getTimeScopeList(start, end, TimeGranularityEnum.FIVE_MINUTE, "yyyy-MM-dd HH:mm:00"));
...@@ -285,11 +291,13 @@ public class EsDateIndexUtil { ...@@ -285,11 +291,13 @@ public class EsDateIndexUtil {
// DateTime start = DateTime.now().withTimeAtStartOfDay(); // DateTime start = DateTime.now().withTimeAtStartOfDay();
// DateTime end = DateTime.now(); // DateTime end = DateTime.now();
// List<String> indexByTime = EsDateIndexUtil.getTimeScopeList(start, end, TimeGranularityEnum.ONE_HOUR,"HH:mm"); // List<String> indexByTime = EsDateIndexUtil.getTimeScopeList(start, end, TimeGranularityEnum.ONE_HOUR,"HH:mm");
String start = "2025-03-21 00:00:00"; String startTime = "2025-03-21 00:23:00";
String end = "2025-03-21 23:00:00"; String end = "2025-03-21 23:00:00";
List<String> indexByTime = EsDateIndexUtil.getTimeGranularityAxisAll("1",start, end); DateTime start = DateTime.parse(startTime, DateTimeFormat.forPattern(EsDateIndexUtil.YMD_HM_FORMATTER));
String formatStartDate = startTime.substring(0,startTime.indexOf(" ")+1) + Tools.fillZeroFront(start.getHourOfDay()+"",2)+":"+Tools.fillZeroFront((int)Math.floor(start.getMinuteOfHour()/5)*5+"",2)+":00";
System.out.println(indexByTime); System.out.println(formatStartDate);
} }
......
...@@ -28,7 +28,7 @@ import java.util.List; ...@@ -28,7 +28,7 @@ import java.util.List;
@RestController @RestController
@Slf4j @Slf4j
@RequestMapping("/green-wave-cross-rid") @RequestMapping("/green-wave-cross-rid")
@Api(value="GreenWaveCrossRidController", description="干线分析报告接口", tags = "干线分析报告") @Api(value="GreenWaveCrossRidController", description="干线分析报告接口", tags = "干线分析报告-周报")
public class GreenWaveCrossRidController { public class GreenWaveCrossRidController {
@Autowired @Autowired
...@@ -36,7 +36,7 @@ public class GreenWaveCrossRidController { ...@@ -36,7 +36,7 @@ public class GreenWaveCrossRidController {
@ApiOperation(httpMethod="GET",value="干线拥堵信息", notes="") @ApiOperation(httpMethod="GET",value="1.1-干线拥堵信息", notes="")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔", required = true, dataType = "String",defaultValue = "1,2"), @ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔", required = true, dataType = "String",defaultValue = "1,2"),
@ApiImplicitParam(name = "dayType", value = "高峰类型 1早高峰 2晚高峰 3全天", required = true, dataType = "String",defaultValue = "1"), @ApiImplicitParam(name = "dayType", value = "高峰类型 1早高峰 2晚高峰 3全天", required = true, dataType = "String",defaultValue = "1"),
...@@ -56,7 +56,7 @@ public class GreenWaveCrossRidController { ...@@ -56,7 +56,7 @@ public class GreenWaveCrossRidController {
return jsonViewObject; return jsonViewObject;
} }
@ApiOperation(httpMethod="GET",value="干线基础信息", notes="") @ApiOperation(httpMethod="GET",value="1.1-干线基础信息", notes="")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔", required = true, dataType = "String",defaultValue = "1,2"), @ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔", required = true, dataType = "String",defaultValue = "1,2"),
}) })
......
...@@ -31,7 +31,7 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -31,7 +31,7 @@ import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
@Slf4j @Slf4j
@RequestMapping("/green-wave-overview") @RequestMapping("/green-wave-overview")
@Api(value="GreenWaveCrossRidController", description="干线分析报告接口", tags = "干线分析报告") @Api(value="GreenWaveCrossRidController", description="干线分析报告接口", tags = "干线分析报告-周报")
public class GreenWaveOverviewController { public class GreenWaveOverviewController {
@Autowired @Autowired
...@@ -39,7 +39,7 @@ public class GreenWaveOverviewController { ...@@ -39,7 +39,7 @@ public class GreenWaveOverviewController {
@ApiOperation(httpMethod="GET",value="干线概况-总体情况说明", notes="") @ApiOperation(httpMethod="GET",value="2.1-干线概况-总体情况说明", notes="")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔【为空时查询所有干线】", required = true, dataType = "String",defaultValue = "1,2"), @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 = "year", value = "年份", required = true, dataType = "String",defaultValue = "2025"),
...@@ -62,7 +62,7 @@ public class GreenWaveOverviewController { ...@@ -62,7 +62,7 @@ public class GreenWaveOverviewController {
@ApiOperation(httpMethod="GET",value="干线概况-工作日同期对比", notes="") @ApiOperation(httpMethod="GET",value="2.2-干线概况-工作日同期对比", notes="")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "干线ID,多个id用','分隔", required = true, dataType = "String",defaultValue = "1,2"), @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 = "year", value = "年份", required = true, dataType = "String",defaultValue = "2025"),
......
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.GreenReportOverviewAnalysisResult;
import net.wanji.opt.controllerv2.report.design.GreenReportProblemDetailAnalysis;
import net.wanji.opt.controllerv2.report.design.GreenReportProblemOverallAnalysis;
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-problem")
@Api(value="GreenWaveProblemAnalysisController", description="干线分析报告接口", tags = "干线分析报告-周报")
public class GreenWaveProblemAnalysisController {
@ApiOperation(httpMethod="GET",value="4.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 = "/getProblemData")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenReportProblemOverallAnalysis.class),
})
public JsonViewObject getGreenInfoList(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;
}
//GreenReportProblemDetailAnalysis
@ApiOperation(httpMethod="GET",value="4.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 = GreenReportProblemDetailAnalysis.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 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.GreenReportOverviewAnalysisResult;
import net.wanji.opt.controllerv2.report.design.GreenReportRunStateResult;
import net.wanji.opt.controllerv2.report.design.GreenReportSamePeriodCompareResult;
import net.wanji.opt.servicev2.report.GreenWaveCrossRidService;
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;
/**
* <p>
* 干线概况 接口API
* </p>
* @version 1.0
* @author
* @Date 2025-03-18
*/
@RestController
@Slf4j
@RequestMapping("/green-wave-run-state")
@Api(value="GreenWaveRunStateController", description="干线分析报告接口", tags = "干线分析报告-周报")
public class GreenWaveRunStateController {
@ApiOperation(httpMethod="GET",value="3.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 = "/getData")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenReportRunStateResult.class),
})
public JsonViewObject getData(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;
}
}
...@@ -11,13 +11,13 @@ import java.util.List; ...@@ -11,13 +11,13 @@ import java.util.List;
@Data @Data
public class GreenReportOverviewAnalysisResult extends ParentResult { public class GreenReportOverviewAnalysisResult extends ParentResult {
private GreenReportOverviewResultResponse content; private List<GreenReportOverviewResultResponse> content;
public GreenReportOverviewResultResponse getContent() { public List<GreenReportOverviewResultResponse> getContent() {
return content; return content;
} }
public GreenReportOverviewAnalysisResult setContent(GreenReportOverviewResultResponse content) { public GreenReportOverviewAnalysisResult setContent(List<GreenReportOverviewResultResponse> content) {
this.content = content; this.content = content;
return this; return this;
} }
...@@ -81,6 +81,9 @@ class GreenReportOverview { ...@@ -81,6 +81,9 @@ class GreenReportOverview {
@ApiModelProperty(value = "本周拥堵时段集中分布情况",example = "周一7:30~8:15,周五17:30~18:15") @ApiModelProperty(value = "本周拥堵时段集中分布情况",example = "周一7:30~8:15,周五17:30~18:15")
private String weekCongestTimeDistribute; private String weekCongestTimeDistribute;
@ApiModelProperty(value = "拥堵严重干线",example = "经十路(舜耕路-山大路)、经十路(洪山路-舜华路)")
private String congestHeavyGreenWave;
} }
......
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 GreenReportProblemDetailAnalysis extends ParentResult {
private List<GreenReportProblemDetailAnalysisResponse> content;
public List<GreenReportProblemDetailAnalysisResponse> getContent() {
return content;
}
public GreenReportProblemDetailAnalysis setContent(List<GreenReportProblemDetailAnalysisResponse> content) {
this.content = content;
return this;
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}
@Data
class GreenReportProblemDetailAnalysisResponse {
@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<GreenReportProblemDetail> dataList = new ArrayList<>();
}
@Data
class GreenReportProblemDetail {
@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 Integer avgSpeed;
@ApiModelProperty(value = "行程时间,单位分钟", example = "10")
private Integer travelTime;
}
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 GreenReportProblemOverallAnalysis extends ParentResult {
private GreenReportProblemOverallAnalysisResponse content;
public GreenReportProblemOverallAnalysisResponse getContent() {
return content;
}
public GreenReportProblemOverallAnalysis setContent(GreenReportProblemOverallAnalysisResponse content) {
this.content = content;
return this;
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}
@Data
class GreenReportProblemOverallAnalysisResponse {
@ApiModelProperty(value = "区域干线总拥堵次数", example = "56次")
private String totalCongestCount;
@ApiModelProperty(value = "区域干线总拥堵时长", example = "11小时")
private String totalCongestDuration;
@ApiModelProperty(value = "拥堵严重干线",example = "经十路(舜耕路-山大路)、经十路(洪山路-舜华路)")
private String congestHeavyGreenWave;
private List<GreenReportSamePeriodData> dataList = new ArrayList<>();
}
@Data
class GreenReportProblemOverallData {
@ApiModelProperty(value = "干线ID", example = "")
private String greenId;
@ApiModelProperty(value = "干线名称", example = "")
private String greenName;
List<GreenWaveDirProblemData> list = new ArrayList<>();
}
@Data
class GreenWaveDirProblemData{
@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;
}
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 GreenReportRunStateResult extends ParentResult {
private List<GreenReportRunStateResponse> content;
public List<GreenReportRunStateResponse> getContent() {
return content;
}
public GreenReportRunStateResult setContent(List<GreenReportRunStateResponse> content) {
this.content = content;
return this;
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}
@Data
class GreenReportRunStateResponse {
@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<GreenReportRunStatedData> dataList = new ArrayList<>();
}
@Data
class GreenReportRunStatedData {
@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;
}
...@@ -33,7 +33,7 @@ public class GreenReportSamePeriodCompareResult extends ParentResult { ...@@ -33,7 +33,7 @@ public class GreenReportSamePeriodCompareResult extends ParentResult {
@Data @Data
class GreenReportSamePeriodCompareDataResponse { class GreenReportSamePeriodCompareDataResponse {
@ApiModelProperty(value = "路口ID", example = "") @ApiModelProperty(value = "干线ID", example = "")
private String greenId; private String greenId;
@ApiModelProperty(value = "干线名称", example = "") @ApiModelProperty(value = "干线名称", example = "")
......
package net.wanji.opt.dto;
import lombok.Data;
/**
* @author duanruiming
* @date 2023/10/14 19:06
*/
@Data
public class CrossDirFreeFlowSpeedDTO {
private String crossId;
private Integer dir;
private Double freeFlowSpeed;
}
...@@ -51,4 +51,9 @@ public class SysOptimizeLog implements Serializable { ...@@ -51,4 +51,9 @@ public class SysOptimizeLog implements Serializable {
* 请求时间 * 请求时间
*/ */
private String queryTime; private String queryTime;
/**
* 请求信息
*/
private String dataInfo;
} }
...@@ -32,15 +32,49 @@ public class SysLogServerImpl extends ServiceImpl<SysLogMapper, SysOptimizeLog> ...@@ -32,15 +32,49 @@ public class SysLogServerImpl extends ServiceImpl<SysLogMapper, SysOptimizeLog>
@Override @Override
public JSONObject findSysOptimizeLog(String crossId,String startTime,String endTime,Integer pageNum,Integer pageSize) { public JSONObject findSysOptimizeLog(String crossId,String startTime,String endTime,Integer pageNum,Integer pageSize) {
List<SysOptimizeLog> list = sysLogMapper.findSysOptimizeLog(crossId,startTime,endTime); List<SysOptimizeLog> list = sysLogMapper.findSysOptimizeLog(crossId,startTime,endTime);
List<SysOptimizeLog> results = new ArrayList<>();
for(SysOptimizeLog temp : list){
switch (temp.getCommandType()) {
case "1":
JSONObject temp1 = JSONObject.parseObject(temp.getDataInfo());
if (temp1.get("command").equals(1)) {
temp.setCommandType("步进控制");
} else if (temp1.get("command").equals(0)) {
temp.setCommandType("步进恢复");
}
break;
case "2":
temp.setCommandType("恢复时间表");
break;
case "3":
JSONObject temp2 = JSONObject.parseObject(temp.getDataInfo());
if (temp2.get("command").equals(1)) {
temp.setCommandType("相位锁定");
} else if (temp2.get("command").equals(0)) {
temp.setCommandType("相位解锁");
}
break;
case "4":
temp.setCommandType("临时方案下发");
break;
case "5":
temp.setCommandType("定时任务恢复失败");
break;
default:
temp.setCommandType("其它操作");
break;
}
results.add(temp);
}
List<SysOptimizeLog> collect = new ArrayList<>(); List<SysOptimizeLog> collect = new ArrayList<>();
if(CollectionUtils.isNotEmpty(list)){ if(CollectionUtils.isNotEmpty(results)){
collect = list.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList()); collect = results.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
} }
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
result.put("fullDataList",list); result.put("fullDataList",results);
result.put("pageList",collect); result.put("pageList",collect);
result.put("totalPage",Math.ceil((double) list.size() / pageSize)); result.put("totalPage",Math.ceil((double) results.size() / pageSize));
result.put("totalSize",list.size()); result.put("totalSize",results.size());
return result; return result;
} }
} }
...@@ -31,6 +31,7 @@ import net.wanji.opt.synthesis.pojo.StrategyControlDetailList; ...@@ -31,6 +31,7 @@ import net.wanji.opt.synthesis.pojo.StrategyControlDetailList;
import net.wanji.opt.synthesis.pojo.StrategyDailyPlanInfoEntity; import net.wanji.opt.synthesis.pojo.StrategyDailyPlanInfoEntity;
import net.wanji.opt.synthesis.pojo.StrategyPlanInfoEntity; import net.wanji.opt.synthesis.pojo.StrategyPlanInfoEntity;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Profile;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -56,6 +57,7 @@ import java.util.stream.Collectors; ...@@ -56,6 +57,7 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor @RequiredArgsConstructor
@Component @Component
@Slf4j @Slf4j
@Profile("docker")
public class InducesMonitorTask { public class InducesMonitorTask {
@Autowired @Autowired
......
...@@ -270,7 +270,12 @@ ...@@ -270,7 +270,12 @@
<!-- 统一接口:绿波路口车道级指标趋势,支持按5分钟粒度、15分钟粒度、30分钟粒度、1小时粒度汇聚 --> <!-- 统一接口:绿波路口车道级指标趋势,支持按5分钟粒度、15分钟粒度、30分钟粒度、1小时粒度汇聚 -->
<select id="findCrossObjectIndex" <select id="findCrossObjectIndex"
resultType="net.wanji.opt.po.base.CrossLaneDataHistPoExtend"> 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 , cross_id ,
lane_no , lane_no ,
dir_type , dir_type ,
...@@ -289,12 +294,12 @@ ...@@ -289,12 +294,12 @@
group_concat(service_level) service_level group_concat(service_level) service_level
FROM FROM
( (
SELECT start_time, SELECT start_time,dt,
(case (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}=0 then start_time
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}=1 then dt_15min
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}=2 then dt_30min
when #{groupType}=3 then DATE_FORMAT(start_time,'%Y-%m-%d %H:00:00' ) when #{groupType}=3 then dt
when #{groupType}=4 then DATE_FORMAT(start_time,'%Y-%m-%d 00:00:00' ) 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') <!-- 按查询时间范围不分粒度进行聚合处理 --> else DATE_FORMAT(start_time,'%Y-01-01 00:00:00') <!-- 按查询时间范围不分粒度进行聚合处理 -->
end end
...@@ -405,15 +410,15 @@ ...@@ -405,15 +410,15 @@
<choose> <choose>
<!-- 方向级 --> <!-- 方向级 -->
<when test="objectType==1"> <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>
<!-- 转向级 --> <!-- 转向级 -->
<when test="objectType==2"> <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>
<!-- 车道级 --> <!-- 车道级 -->
<when test="objectType==3"> <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>
<!-- 路口级 --> <!-- 路口级 -->
<when test="objectType==4"> <when test="objectType==4">
...@@ -787,12 +792,7 @@ ...@@ -787,12 +792,7 @@
<select id="findCrossObjectIndexByDay" <select id="findCrossObjectIndexByDay"
resultType="net.wanji.opt.po.base.CrossLaneDataHistPoExtend"> resultType="net.wanji.opt.po.base.CrossLaneDataHistPoExtend">
SELECT SELECT
(case MIN(ifnull(t.unit_time,#{startDate})) start_time,
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 , cross_id ,
lane_no , lane_no ,
dir_type , dir_type ,
...@@ -813,11 +813,10 @@ ...@@ -813,11 +813,10 @@
( (
SELECT start_time, SELECT start_time,
(case (case
when #{groupType}=0 then start_time 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 dt_15min 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 dt_30min 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 dt_60min when #{groupType}=3 then DATE_FORMAT(start_time,'%Y-%m-%d %H:00:00' )
when #{groupType}=4 then dt
else DATE_FORMAT(now(),'%Y-01-01 00:00:00') <!-- 按查询时间范围不分粒度进行聚合处理 --> else DATE_FORMAT(now(),'%Y-01-01 00:00:00') <!-- 按查询时间范围不分粒度进行聚合处理 -->
end end
) unit_time, ) unit_time,
......
...@@ -10,11 +10,12 @@ ...@@ -10,11 +10,12 @@
<result property="commandType" column="command_type"></result> <result property="commandType" column="command_type"></result>
<result property="commandResult" column="command_result"></result> <result property="commandResult" column="command_result"></result>
<result property="queryTime" column="query_time"></result> <result property="queryTime" column="query_time"></result>
<result property="dataInfo" column="data_info"></result>
</resultMap> </resultMap>
<select id="findSysOptimizeLog" resultMap="SysOptimizeLogMap" parameterType="String"> <select id="findSysOptimizeLog" resultMap="SysOptimizeLogMap" parameterType="String">
SELECT t.query_time,t.ip ,t.cross_id,t1.name ,t.`operate-user`, SELECT t.query_time,t.ip ,t.cross_id,t1.name ,t.`operate-user`,t.data_info,
case t.command_type when 1 then '步进控制/恢复(公用)' when 2 then '恢复时间表(公用)' when 3 then '相位锁定/解锁(公用)' when 4 then '临时方案下发(公用)' when 5 then '定时任务恢复失败' end as command_type , t.command_type ,
case t.command_result when 1 then '成功' when 2 then '失败' when 3 then '停止失败任务解锁' end as command_result case t.command_result when 1 then '成功' when 2 then '失败' when 3 then '停止失败任务解锁' end as command_result
FROM t_signal_utc_jinan.t_signal_command_log t FROM t_signal_utc_jinan.t_signal_command_log t
left join t_signal_utc_jinan.t_cross_info t1 on t.cross_id = t1.id left join t_signal_utc_jinan.t_cross_info t1 on t.cross_id = t1.id
......
...@@ -11,4 +11,9 @@ public class GreenCrossDirDTO { ...@@ -11,4 +11,9 @@ public class GreenCrossDirDTO {
private Integer greenId; private Integer greenId;
private String crossId; private String crossId;
private String greenDir; private String greenDir;
private Integer inDir;
private Integer outDir;
private Integer sort;
private Integer distance;
private Integer totalDistance;
} }
...@@ -68,7 +68,10 @@ ...@@ -68,7 +68,10 @@
</select> </select>
<select id="selectAllGreenCrossDir" resultType="net.wanji.databus.dao.entity.GreenCrossDirDTO"> <select id="selectAllGreenCrossDir" resultType="net.wanji.databus.dao.entity.GreenCrossDirDTO">
select t2.green_id, t2.cross_id, t1.green_dir from t_greenwave_info t1 select
t2.green_id, t2.cross_id, t1.green_dir, t2.in_dir, t2.out_dir, t2.sort,
t2.next_cross_len distance, t1.length total_distance
from t_greenwave_info t1
left join t_greenwave_cross t2 on t1.id = t2.green_id left join t_greenwave_cross t2 on t1.id = t2.green_id
</select> </select>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment