Commit 952a14b3 authored by duanruiming's avatar duanruiming

Merge remote-tracking branch 'origin/master'

parents 08a50408 444f6d38
package net.wanji.opt.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author Kent HAN
* @date 2023/6/9 13:52
*/
@Data
@ApiModel(value = "AbnormalDetailBO", description = "异常事件详情")
public class AbnormalDetailBO {
@ApiModelProperty(value = "路口ID")
private String crossId;
@ApiModelProperty(value = "小时分钟 HH:mm")
private String hourMinute;
@ApiModelProperty(value = "月日,格式 7/9")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "M/d", timezone = "GMT+8")
private Date problemDate;
@ApiModelProperty(value = "状态 0正常 1 失衡 2 拥堵 3 溢出 4 死锁")
private Integer status ;
}
...@@ -6,14 +6,17 @@ import io.swagger.annotations.ApiResponse; ...@@ -6,14 +6,17 @@ import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses; import io.swagger.annotations.ApiResponses;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.databus.bo.CrossIdAndStartEndDateBO; import net.wanji.databus.bo.CrossIdAndStartEndDateBO;
import net.wanji.opt.bo.AbnormalDetailBO;
import net.wanji.opt.service.impl.SceneEvaluateServiceImpl; import net.wanji.opt.service.impl.SceneEvaluateServiceImpl;
import net.wanji.opt.vo.SceneEvaluateabnormalDistributeVO; import net.wanji.opt.vo.SceneEvaluateAbnormalDetailVO;
import net.wanji.opt.vo.SceneEvaluateAbnormalDistributeVO;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import java.text.ParseException;
/** /**
* 场景评价 * 场景评价
...@@ -36,11 +39,22 @@ public class SceneEvaluateController { ...@@ -36,11 +39,22 @@ public class SceneEvaluateController {
@PostMapping(value = "/abnormalDistribute", @PostMapping(value = "/abnormalDistribute",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({ @ApiResponses({
@ApiResponse(code = 200, message = "OK", response = SceneEvaluateabnormalDistributeVO.class), @ApiResponse(code = 200, message = "OK", response = SceneEvaluateAbnormalDistributeVO.class),
}) })
public JsonViewObject abnormalDistribute(@RequestBody CrossIdAndStartEndDateBO bo) { public JsonViewObject abnormalDistribute(@RequestBody CrossIdAndStartEndDateBO bo) {
SceneEvaluateabnormalDistributeVO res = sceneEvaluateService.abnormalDistribute(bo); SceneEvaluateAbnormalDistributeVO res = sceneEvaluateService.abnormalDistribute(bo);
return JsonViewObject.newInstance().success(res); return JsonViewObject.newInstance().success(res);
} }
@ApiOperation(value = "异常事件详情", notes = "异常事件详情", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/abnormalDetail",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = SceneEvaluateAbnormalDetailVO.class),
})
public JsonViewObject abnormalDetail(@RequestBody AbnormalDetailBO abnormalDetailBO) throws ParseException {
SceneEvaluateAbnormalDetailVO res = sceneEvaluateService.abnormalDetail(abnormalDetailBO);
return JsonViewObject.newInstance().success(res);
}
} }
\ No newline at end of file
package net.wanji.opt.service; package net.wanji.opt.service;
import net.wanji.databus.bo.CrossIdAndStartEndDateBO; import net.wanji.databus.bo.CrossIdAndStartEndDateBO;
import net.wanji.opt.vo.SceneEvaluateabnormalDistributeVO; import net.wanji.opt.bo.AbnormalDetailBO;
import net.wanji.opt.vo.SceneEvaluateAbnormalDetailVO;
import net.wanji.opt.vo.SceneEvaluateAbnormalDistributeVO;
import java.text.ParseException;
public interface SceneEvaluateService { public interface SceneEvaluateService {
SceneEvaluateabnormalDistributeVO abnormalDistribute(CrossIdAndStartEndDateBO bo); SceneEvaluateAbnormalDistributeVO abnormalDistribute(CrossIdAndStartEndDateBO bo);
SceneEvaluateAbnormalDetailVO abnormalDetail(AbnormalDetailBO abnormalDetailBO) throws ParseException;
} }
...@@ -7,12 +7,16 @@ import net.wanji.common.utils.tool.TimeArrayUtil; ...@@ -7,12 +7,16 @@ import net.wanji.common.utils.tool.TimeArrayUtil;
import net.wanji.databus.bo.CrossIdAndStartEndDateBO; import net.wanji.databus.bo.CrossIdAndStartEndDateBO;
import net.wanji.databus.dao.mapper.CrossDataHistMapper; import net.wanji.databus.dao.mapper.CrossDataHistMapper;
import net.wanji.databus.dto.MetricHistDTO; import net.wanji.databus.dto.MetricHistDTO;
import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.opt.bo.AbnormalDetailBO;
import net.wanji.opt.service.SceneEvaluateService; import net.wanji.opt.service.SceneEvaluateService;
import net.wanji.opt.vo.RunningEvaluateMetricsDetailVO; import net.wanji.opt.vo.RunningEvaluateMetricsDetailVO;
import net.wanji.opt.vo.SceneEvaluateabnormalDistributeVO; import net.wanji.opt.vo.SceneEvaluateAbnormalDetailVO;
import net.wanji.opt.vo.SceneEvaluateAbnormalDistributeVO;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -34,13 +38,13 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -34,13 +38,13 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
} }
@Override @Override
public SceneEvaluateabnormalDistributeVO abnormalDistribute(CrossIdAndStartEndDateBO bo) { public SceneEvaluateAbnormalDistributeVO abnormalDistribute(CrossIdAndStartEndDateBO bo) {
String crossId = bo.getCrossId(); String crossId = bo.getCrossId();
Date startDate = bo.getStartDate(); Date startDate = bo.getStartDate();
Date endDate = bo.getEndDate(); Date endDate = bo.getEndDate();
SceneEvaluateabnormalDistributeVO vo = new SceneEvaluateabnormalDistributeVO(); SceneEvaluateAbnormalDistributeVO vo = new SceneEvaluateAbnormalDistributeVO();
List<SceneEvaluateabnormalDistributeVO.TimeDistribution> timeDistributionList = List<SceneEvaluateAbnormalDistributeVO.TimeDistribution> timeDistributionList =
buildTimeDistributionList(crossId, startDate, endDate); buildTimeDistributionList(crossId, startDate, endDate);
vo.setTimeDateDistributionList(buildFinalTimeDistributionList(timeDistributionList)); vo.setTimeDateDistributionList(buildFinalTimeDistributionList(timeDistributionList));
...@@ -48,11 +52,113 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -48,11 +52,113 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
return vo; return vo;
} }
public List<SceneEvaluateabnormalDistributeVO.TimeDateDistribution> buildFinalTimeDistributionList( @Override
List<SceneEvaluateabnormalDistributeVO.TimeDistribution> timeDistributionList) { public SceneEvaluateAbnormalDetailVO abnormalDetail(AbnormalDetailBO abnormalDetailBO) throws ParseException {
List<SceneEvaluateabnormalDistributeVO.FinalTimeDistribution> finalTimeDistributionList = new ArrayList<>(); String crossId = abnormalDetailBO.getCrossId();
String hourMinute = abnormalDetailBO.getHourMinute();
Date problemDate = abnormalDetailBO.getProblemDate();
Integer status = abnormalDetailBO.getStatus();
// 获取当前年份
Calendar calendar = Calendar.getInstance();
int currentYear = calendar.get(Calendar.YEAR);
// 设置 problemDate 的年份为当前年份
calendar.setTime(problemDate);
calendar.set(Calendar.YEAR, currentYear);
Date newDate = calendar.getTime();
calendar.setTime(newDate);
// 设置时间为当天开始时间(00:00:00)
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
int startOfDayTimestamp = (int) (calendar.getTimeInMillis() / 1000);
// 设置时间为当天结束时间(23:59:59)
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
int endOfDayTimestamp = (int) (calendar.getTimeInMillis() / 1000);
// 查询当天所有场景
List<CrossDataHistPO> crossDataHistPOList =
crossDataHistMapper.selectByCrossIdAndStartEnd(crossId, startOfDayTimestamp, endOfDayTimestamp);
// 按照startTime分组并选择duration最长的一个。
List<CrossDataHistPO> filteredList = crossDataHistPOList.stream()
.filter(po -> Objects.equals(po.getStatus(), status))
.collect(Collectors.groupingBy(CrossDataHistPO::getStartTime))
.values().stream()
.map(list -> list.stream().max(Comparator.comparingInt(CrossDataHistPO::getDuration)).get())
.collect(Collectors.toList());
// 进行startTime和endTime的格式化和分组。
Map<String, List<CrossDataHistPO>> groupedData = filteredList.stream()
.collect(Collectors.groupingBy(po -> {
// 计算startTime和endTime
Date startTime = po.getStartTime();
Date endTime = new Date(startTime.getTime() + po.getDuration() * 60 * 1000L);
// startTime向前取整至5分钟
calendar.setTime(startTime);
int minute = calendar.get(Calendar.MINUTE);
calendar.add(Calendar.MINUTE, -(minute % 5));
String startTimeStr = HOUR_SDF.format(calendar.getTime());
// endTime向后取整至5分钟
calendar.setTime(endTime);
minute = calendar.get(Calendar.MINUTE);
calendar.add(Calendar.MINUTE, 5 - (minute % 5));
String endTimeStr = HOUR_SDF.format(calendar.getTime());
return startTimeStr + "-" + endTimeStr;
}));
Date targetDate = HOUR_SDF.parse(hourMinute);
// 获取当前年份,并设置targetDate的年份
Calendar cal = Calendar.getInstance();
cal.setTime(newDate);
String[] split = hourMinute.split(":");
cal.set(Calendar.HOUR, Integer.parseInt(split[0]));
cal.set(Calendar.MINUTE, Integer.parseInt(split[1]));
targetDate = cal.getTime();
// 从groupedData中筛选与hourMinute相交的记录
List<CrossDataHistPO> intersectingRecords = new ArrayList<>();
for (Map.Entry<String, List<CrossDataHistPO>> entry : groupedData.entrySet()) {
String key = entry.getKey();
String[] times = key.split("-");
Calendar startCal = Calendar.getInstance();
Calendar endCal = Calendar.getInstance();
startCal.setTime(newDate);
endCal.setTime(newDate);
String[] start = times[0].split(":");
startCal.set(Calendar.HOUR, Integer.parseInt(start[0]));
startCal.set(Calendar.MINUTE, Integer.parseInt(start[1]));
String[] end = times[0].split(":");
endCal.set(Calendar.HOUR, Integer.parseInt(end[0]));
endCal.set(Calendar.MINUTE, Integer.parseInt(end[1]));
Date startTime = startCal.getTime();
Date endTime = endCal.getTime();
// 检查相交条件
if (!(targetDate.before(startTime) || targetDate.after(endTime))) {
intersectingRecords.addAll(entry.getValue());
}
}
return null;
}
public List<SceneEvaluateAbnormalDistributeVO.TimeDateDistribution> buildFinalTimeDistributionList(
List<SceneEvaluateAbnormalDistributeVO.TimeDistribution> timeDistributionList) {
List<SceneEvaluateAbnormalDistributeVO.FinalTimeDistribution> finalTimeDistributionList = new ArrayList<>();
for (SceneEvaluateabnormalDistributeVO.TimeDistribution timeDistribution : timeDistributionList) { for (SceneEvaluateAbnormalDistributeVO.TimeDistribution timeDistribution : timeDistributionList) {
Date problemDate = timeDistribution.getProblemDate(); Date problemDate = timeDistribution.getProblemDate();
for (RunningEvaluateMetricsDetailVO.ProblemStatus problemStatus : timeDistribution.getProblemStatusList()) { for (RunningEvaluateMetricsDetailVO.ProblemStatus problemStatus : timeDistribution.getProblemStatusList()) {
...@@ -62,8 +168,8 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -62,8 +168,8 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
// 生成 FinalTimeDistribution 对象 // 生成 FinalTimeDistribution 对象
for (Date time = getStartTimeOfDay(); time.before(getEndTimeOfDay()); time = addFiveMinutes(time)) { for (Date time = getStartTimeOfDay(); time.before(getEndTimeOfDay()); time = addFiveMinutes(time)) {
if (isTimeIntersecting(time, addFiveMinutes(time), startTime, endTime)) { if (isTimeIntersecting(time, addFiveMinutes(time), startTime, endTime)) {
SceneEvaluateabnormalDistributeVO.FinalTimeDistribution finalTimeDistribution = SceneEvaluateAbnormalDistributeVO.FinalTimeDistribution finalTimeDistribution =
new SceneEvaluateabnormalDistributeVO.FinalTimeDistribution(); new SceneEvaluateAbnormalDistributeVO.FinalTimeDistribution();
finalTimeDistribution.setProblemDate(problemDate); finalTimeDistribution.setProblemDate(problemDate);
finalTimeDistribution.setStatus(status); finalTimeDistribution.setStatus(status);
// 将 time 中的年、月、日设置为 problemDate 中的年、月、日 // 将 time 中的年、月、日设置为 problemDate 中的年、月、日
...@@ -102,8 +208,8 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -102,8 +208,8 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
.anyMatch(item -> item.getDistributionTime().equals(time) .anyMatch(item -> item.getDistributionTime().equals(time)
&& isSameDay(item.getProblemDate(), problemDate)); && isSameDay(item.getProblemDate(), problemDate));
if (!exists) { if (!exists) {
SceneEvaluateabnormalDistributeVO.FinalTimeDistribution newItem = SceneEvaluateAbnormalDistributeVO.FinalTimeDistribution newItem =
new SceneEvaluateabnormalDistributeVO.FinalTimeDistribution(); new SceneEvaluateAbnormalDistributeVO.FinalTimeDistribution();
newItem.setProblemDate(problemDate); newItem.setProblemDate(problemDate);
newItem.setDistributionTime(time); newItem.setDistributionTime(time);
newItem.setStatus(null); newItem.setStatus(null);
...@@ -113,14 +219,14 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -113,14 +219,14 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
} }
// 重新排序 // 重新排序
finalTimeDistributionList finalTimeDistributionList
.sort(Comparator.comparing(SceneEvaluateabnormalDistributeVO.FinalTimeDistribution::getProblemDate) .sort(Comparator.comparing(SceneEvaluateAbnormalDistributeVO.FinalTimeDistribution::getProblemDate)
.thenComparing(SceneEvaluateabnormalDistributeVO.FinalTimeDistribution::getDistributionTime)); .thenComparing(SceneEvaluateAbnormalDistributeVO.FinalTimeDistribution::getDistributionTime));
// 生成时间日期分布 // 生成时间日期分布
List<SceneEvaluateabnormalDistributeVO.TimeDateDistribution> timeDateDistributionList = new ArrayList<>(); List<SceneEvaluateAbnormalDistributeVO.TimeDateDistribution> timeDateDistributionList = new ArrayList<>();
List<String> minuteSectionArray = TimeArrayUtil.getMinuteSectionArray(5); List<String> minuteSectionArray = TimeArrayUtil.getMinuteSectionArray(5);
for (String timeStr : minuteSectionArray) { for (String timeStr : minuteSectionArray) {
SceneEvaluateabnormalDistributeVO.TimeDateDistribution timeDateDistribution = SceneEvaluateAbnormalDistributeVO.TimeDateDistribution timeDateDistribution =
new SceneEvaluateabnormalDistributeVO.TimeDateDistribution(); new SceneEvaluateAbnormalDistributeVO.TimeDateDistribution();
timeDateDistribution.setHourMinute(timeStr); timeDateDistribution.setHourMinute(timeStr);
timeDateDistribution.setStatusByDateList(buildStatusByDateList(timeStr, finalTimeDistributionList)); timeDateDistribution.setStatusByDateList(buildStatusByDateList(timeStr, finalTimeDistributionList));
timeDateDistributionList.add(timeDateDistribution); timeDateDistributionList.add(timeDateDistribution);
...@@ -128,19 +234,19 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -128,19 +234,19 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
return timeDateDistributionList; return timeDateDistributionList;
} }
private List<SceneEvaluateabnormalDistributeVO.StatusByDate> buildStatusByDateList( private List<SceneEvaluateAbnormalDistributeVO.StatusByDate> buildStatusByDateList(
String timeStr, List<SceneEvaluateabnormalDistributeVO.FinalTimeDistribution> finalTimeDistributionList) { String timeStr, List<SceneEvaluateAbnormalDistributeVO.FinalTimeDistribution> finalTimeDistributionList) {
List<SceneEvaluateabnormalDistributeVO.StatusByDate> res = new ArrayList<>(); List<SceneEvaluateAbnormalDistributeVO.StatusByDate> res = new ArrayList<>();
for (SceneEvaluateabnormalDistributeVO.FinalTimeDistribution ftd : finalTimeDistributionList) { for (SceneEvaluateAbnormalDistributeVO.FinalTimeDistribution ftd : finalTimeDistributionList) {
Date problemDate = ftd.getProblemDate(); Date problemDate = ftd.getProblemDate();
Date distributionTime = ftd.getDistributionTime(); Date distributionTime = ftd.getDistributionTime();
String format = HOUR_SDF.format(distributionTime); String format = HOUR_SDF.format(distributionTime);
if (Objects.equals(timeStr, format)) { if (Objects.equals(timeStr, format)) {
SceneEvaluateabnormalDistributeVO.StatusByDate inRes = getRecordInRes(res, problemDate); SceneEvaluateAbnormalDistributeVO.StatusByDate inRes = getRecordInRes(res, problemDate);
// 如果 res 中没有记录 // 如果 res 中没有记录
if (ObjectUtil.isEmpty(inRes)) { if (ObjectUtil.isEmpty(inRes)) {
SceneEvaluateabnormalDistributeVO.StatusByDate statusByDate = buildStatusByDate(ftd, problemDate); SceneEvaluateAbnormalDistributeVO.StatusByDate statusByDate = buildStatusByDate(ftd, problemDate);
res.add(statusByDate); res.add(statusByDate);
} else { } else {
modifyRecordInRes(ftd, inRes); modifyRecordInRes(ftd, inRes);
...@@ -151,8 +257,8 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -151,8 +257,8 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
} }
private void modifyRecordInRes( private void modifyRecordInRes(
SceneEvaluateabnormalDistributeVO.FinalTimeDistribution ftd, SceneEvaluateAbnormalDistributeVO.FinalTimeDistribution ftd,
SceneEvaluateabnormalDistributeVO.StatusByDate inRes) { SceneEvaluateAbnormalDistributeVO.StatusByDate inRes) {
Integer status = ftd.getStatus(); Integer status = ftd.getStatus();
if (Objects.equals(status, CrossStatusEnum.UNBALANCE.getCode())) { if (Objects.equals(status, CrossStatusEnum.UNBALANCE.getCode())) {
inRes.setIsUnbalance(1); inRes.setIsUnbalance(1);
...@@ -164,18 +270,18 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -164,18 +270,18 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
} }
@NotNull @NotNull
private SceneEvaluateabnormalDistributeVO.StatusByDate buildStatusByDate( private SceneEvaluateAbnormalDistributeVO.StatusByDate buildStatusByDate(
SceneEvaluateabnormalDistributeVO.FinalTimeDistribution ftd, Date problemDate) { SceneEvaluateAbnormalDistributeVO.FinalTimeDistribution ftd, Date problemDate) {
SceneEvaluateabnormalDistributeVO.StatusByDate statusByDate = SceneEvaluateAbnormalDistributeVO.StatusByDate statusByDate =
new SceneEvaluateabnormalDistributeVO.StatusByDate(); new SceneEvaluateAbnormalDistributeVO.StatusByDate();
statusByDate.setProblemDate(problemDate); statusByDate.setProblemDate(problemDate);
modifyRecordInRes(ftd, statusByDate); modifyRecordInRes(ftd, statusByDate);
return statusByDate; return statusByDate;
} }
private SceneEvaluateabnormalDistributeVO.StatusByDate getRecordInRes( private SceneEvaluateAbnormalDistributeVO.StatusByDate getRecordInRes(
List<SceneEvaluateabnormalDistributeVO.StatusByDate> res, Date problemDate) { List<SceneEvaluateAbnormalDistributeVO.StatusByDate> res, Date problemDate) {
for (SceneEvaluateabnormalDistributeVO.StatusByDate statusByDate : res) { for (SceneEvaluateAbnormalDistributeVO.StatusByDate statusByDate : res) {
Date problemDateInRes = statusByDate.getProblemDate(); Date problemDateInRes = statusByDate.getProblemDate();
// 创建Calendar实例 // 创建Calendar实例
Calendar cal1 = Calendar.getInstance(); Calendar cal1 = Calendar.getInstance();
...@@ -262,15 +368,15 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -262,15 +368,15 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
return calendar.getTime(); return calendar.getTime();
} }
private static void setCounts(List<SceneEvaluateabnormalDistributeVO.TimeDistribution> timeDistributionList, private static void setCounts(List<SceneEvaluateAbnormalDistributeVO.TimeDistribution> timeDistributionList,
SceneEvaluateabnormalDistributeVO vo) { SceneEvaluateAbnormalDistributeVO vo) {
int congestionDuration = 0; int congestionDuration = 0;
int congestionTimes = 0; int congestionTimes = 0;
int unbalanceDuration = 0; int unbalanceDuration = 0;
int unbalanceTimes = 0; int unbalanceTimes = 0;
int spilloverDuration = 0; int spilloverDuration = 0;
int spilloverTimes = 0; int spilloverTimes = 0;
for (SceneEvaluateabnormalDistributeVO.TimeDistribution timeDistribution : timeDistributionList) { for (SceneEvaluateAbnormalDistributeVO.TimeDistribution timeDistribution : timeDistributionList) {
List<RunningEvaluateMetricsDetailVO.ProblemStatus> problemStatusList = List<RunningEvaluateMetricsDetailVO.ProblemStatus> problemStatusList =
timeDistribution.getProblemStatusList(); timeDistribution.getProblemStatusList();
for (RunningEvaluateMetricsDetailVO.ProblemStatus problemStatus : problemStatusList) { for (RunningEvaluateMetricsDetailVO.ProblemStatus problemStatus : problemStatusList) {
...@@ -296,9 +402,9 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -296,9 +402,9 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
vo.setSpilloverDuration(spilloverDuration); vo.setSpilloverDuration(spilloverDuration);
} }
private List<SceneEvaluateabnormalDistributeVO.TimeDistribution> buildTimeDistributionList( private List<SceneEvaluateAbnormalDistributeVO.TimeDistribution> buildTimeDistributionList(
String crossId, Date startDate, Date endDate) { String crossId, Date startDate, Date endDate) {
List<SceneEvaluateabnormalDistributeVO.TimeDistribution> res = new ArrayList<>(); List<SceneEvaluateAbnormalDistributeVO.TimeDistribution> res = new ArrayList<>();
Calendar start = Calendar.getInstance(); Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance(); Calendar end = Calendar.getInstance();
start.setTime(startDate); start.setTime(startDate);
...@@ -307,8 +413,8 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService { ...@@ -307,8 +413,8 @@ public class SceneEvaluateServiceImpl implements SceneEvaluateService {
end.add(Calendar.DATE, 1); end.add(Calendar.DATE, 1);
for (Date date = start.getTime(); start.before(end); start.add(Calendar.DATE, 1), date = start.getTime()) { for (Date date = start.getTime(); start.before(end); start.add(Calendar.DATE, 1), date = start.getTime()) {
SceneEvaluateabnormalDistributeVO.TimeDistribution timeDistribution = SceneEvaluateAbnormalDistributeVO.TimeDistribution timeDistribution =
new SceneEvaluateabnormalDistributeVO.TimeDistribution(); new SceneEvaluateAbnormalDistributeVO.TimeDistribution();
timeDistribution.setProblemDate(date); timeDistribution.setProblemDate(date);
// 获取问题列表 // 获取问题列表
// 路口级别全量数据 // 路口级别全量数据
......
package net.wanji.opt.vo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author Kent HAN
* @date 2023/2/9 8:38
*/
@Data
@NoArgsConstructor
@ApiModel(value = "SceneEvaluateAbnormalDetailVO", description = "异常事件详情")
public class SceneEvaluateAbnormalDetailVO {
}
...@@ -15,8 +15,8 @@ import java.util.List; ...@@ -15,8 +15,8 @@ import java.util.List;
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@ApiModel(value = "SceneEvaluateabnormalDistributeVO", description = "异常事件时空分布") @ApiModel(value = "SceneEvaluateAbnormalDistributeVO", description = "异常事件时空分布")
public class SceneEvaluateabnormalDistributeVO { public class SceneEvaluateAbnormalDistributeVO {
@ApiModelProperty(value = "拥堵次数") @ApiModelProperty(value = "拥堵次数")
Integer congestionTimes; Integer congestionTimes;
@ApiModelProperty(value = "失衡次数") @ApiModelProperty(value = "失衡次数")
......
...@@ -27,5 +27,5 @@ public interface CrossDataHistMapper extends BaseMapper<CrossDataHistPO> { ...@@ -27,5 +27,5 @@ public interface CrossDataHistMapper extends BaseMapper<CrossDataHistPO> {
Double selectMaxSaturation(String crossId, int startStamp, int endStamp); Double selectMaxSaturation(String crossId, int startStamp, int endStamp);
Integer selectCrossEmergencyCount(String crossId, int startTimeStamp, int endTimeStamp); Integer selectCrossEmergencyCount(String crossId, int startStamp, int endStamp);
} }
...@@ -89,10 +89,6 @@ public class CrossTurnDataRealtimePO { ...@@ -89,10 +89,6 @@ public class CrossTurnDataRealtimePO {
@ApiModelProperty(name = "修改时间",notes = "") @ApiModelProperty(name = "修改时间",notes = "")
public Date gmtModified ; public Date gmtModified ;
@ApiModelProperty(value = "绿灯间隔清空率", notes = "")
public Double clearRate;
@ApiModelProperty(value = "负载均衡度", notes = "")
public Double loadBalance;
@ApiModelProperty(value = "绿灯有效利用率", notes = "") @ApiModelProperty(value = "绿灯有效利用率", notes = "")
public Double greenLightEfficiency; public Double greenLightEfficiency;
@ApiModelProperty(name = "溢流率:交叉口间路段车辆排队长度超出可容纳空间的时长与观测总时长的百分比",notes = "") @ApiModelProperty(name = "溢流率:交叉口间路段车辆排队长度超出可容纳空间的时长与观测总时长的百分比",notes = "")
......
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