Commit f67f4c22 authored by zhoushiguang's avatar zhoushiguang

Merge remote-tracking branch 'origin/master'

parents 55f0893f 99cc37b2
......@@ -93,6 +93,9 @@ public class HisenseGreenChartTask {
// 1.根据绿波带长度和速度计算行程时间
// 2.根据相位差,行程时间,海信环图计算绿灯红灯点位 正向 crossRedTimesMap 反向backCrossRedTimesMap
// todo test
//List<GreenCrossDirDTO> collect = greenCrossDirCache.stream().filter(dto -> dto.getGreenId() == 1).collect(Collectors.toList());
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()) {
......@@ -100,17 +103,17 @@ public class HisenseGreenChartTask {
Integer greenId = entry.getKey();
List<GreenCrossDirDTO> value = entry.getValue();
// 1.获取行程时间
GreenCrossDirDTO indexDTO = value.get(0);
GreenCrossDirDTO indexDTO = null;
if (Objects.equals(3, greenId)) {
indexDTO = value.get(2);
} else {
indexDTO = value.get(0);
}
Integer sort = indexDTO.getSort();
Integer indexDir = indexDTO.getInDir();
Integer totalDistance = indexDTO.getTotalDistance();
String greenKey = null;
if (Objects.equals(3, greenId)) {
greenKey = CommonUtils.getStrJoin(String.valueOf(greenId), String.valueOf(indexDir + 2));
} else {
greenKey = CommonUtils.getStrJoin(String.valueOf(greenId), String.valueOf(indexDir));
}
String greenKey = CommonUtils.getStrJoin(String.valueOf(greenId), String.valueOf(indexDir));
GreenwaveRealtimePO greenwaveRealtimePO = realTimeMap.get(greenKey);
Double speed = Objects.isNull(greenwaveRealtimePO.getSpeed()) ? 0 : greenwaveRealtimePO.getSpeed();
// km/h速度换成m/s
......@@ -128,12 +131,7 @@ public class HisenseGreenChartTask {
List<Double> backOffsets = new ArrayList<>();
List<Double> backDistances = new ArrayList<>();
String backGreenKey = null;
if (Objects.equals(3, greenId)) {
backGreenKey = CommonUtils.getStrJoin(String.valueOf(greenId), String.valueOf(indexOutDir + 2));
} else {
backGreenKey = CommonUtils.getStrJoin(String.valueOf(greenId), String.valueOf(indexOutDir));
}
String backGreenKey = CommonUtils.getStrJoin(String.valueOf(greenId), String.valueOf(indexOutDir));
GreenwaveRealtimePO backGreenwaveRealtimePO = realTimeMap.get(backGreenKey);
// km/h速度换成m/s
Double backSpeed = Objects.isNull(backGreenwaveRealtimePO.getSpeed()) ? 0 : backGreenwaveRealtimePO.getSpeed();
......@@ -224,15 +222,15 @@ public class HisenseGreenChartTask {
Map<String, List<List<Double>>> greenStartMap = new LinkedHashMap<>();
List<List<Double>> firstGreenStartList = new ArrayList<>();
List<List<Double>> secondGreenStartList = new ArrayList<>();
List<Double> firstStartEndList = new ArrayList<>();
GreenCrossDirDTO firstDto = value.get(i);
String firstCrossId = firstDto.getCrossId();
Integer inDir = null;
Integer inCrossDir = null;
if (1 == type) {
inDir = firstDto.getInDir();
inCrossDir = firstDto.getInDir();
}
if (2 == type) {
inDir = firstDto.getOutDir();
inCrossDir = firstDto.getOutDir();
}
if (i + 1 < value.size()) {
GreenCrossDirDTO secondDto = value.get(i + 1);
......@@ -240,13 +238,22 @@ public class HisenseGreenChartTask {
for (GreenBeltChartDTO greenBeltChartDTO : greenBeltChartDTOS) {
Integer beltGreenId = greenBeltChartDTO.getGreenId();
Integer beltDir = null;
if (1 == type) {
beltDir = greenBeltChartDTO.getDir();
}
if (2 == type) {
beltDir = greenBeltChartDTO.getBackDir();
if (Objects.equals(3, greenId)) {
if (1 == type) {
beltDir = greenBeltChartDTO.getDir() - 2;
}
if (2 == type) {
beltDir = greenBeltChartDTO.getBackDir() - 2;
}
} else {
if (1 == type) {
beltDir = greenBeltChartDTO.getDir();
}
if (2 == type) {
beltDir = greenBeltChartDTO.getBackDir();
}
}
if (Objects.equals(greenId, beltGreenId) && Objects.equals(inDir, beltDir)) {
if (Objects.equals(greenId, beltGreenId) && Objects.equals(inCrossDir, beltDir)) {
Double travelTime = getTravelTime(i, greenBeltChartDTO, type);
Map<String, List<List<Double>>> crossGreenTimesMap = null;
if (1 == type) {
......@@ -263,11 +270,6 @@ public class HisenseGreenChartTask {
List<Double> greenStartEnd = firstList.get(i1);
Double greenStart = greenStartEnd.get(0);
Double greenEnd = greenStartEnd.get(1);
int index = 0;
Double start = 0.0;
Double end = 0.0;
Double start2 = 0.0;
Double end2 = 0.0;
for (int j = greenStart.intValue(); j <= greenEnd.intValue(); j++) {
int firstStartPoint = j + travelTime.intValue();
for (int i3 = 0; i3 < secondList.size(); i3++) {
......@@ -278,26 +280,36 @@ public class HisenseGreenChartTask {
if (greenStart <= j && j <= greenEnd
&& greenStart2 <= firstStartPoint && firstStartPoint <= greenEnd2) {
if (index == 0) {
start = j * 1.0;
start2 = firstStartPoint * 1.0;
} else {
Double tempEnd = j * 1.0;
end = end > tempEnd ? end : tempEnd;
Double tempEnd2 = firstStartPoint * 1.0;
end2 = end2 > tempEnd2 ? end2 : tempEnd2;
}
++index;
Double temp = j * 1.0;
firstStartEndList.add(temp);
}
}
}
firstGreenStartList.add(Arrays.asList(start, end));
secondGreenStartList.add(Arrays.asList(start2, end2));
}
}
if (!CollectionUtils.isEmpty(firstStartEndList)) {
Double start = firstStartEndList.get(0);
Double end = firstStartEndList.get(0);
for (int k = 1; k < firstStartEndList.size(); k++) {
Double next = firstStartEndList.get(k);
Double prev = firstStartEndList.get(k - 1);
if (next - prev == 1.0) {
end = firstStartEndList.get(k);
if (k + 1 == firstStartEndList.size()) {
firstGreenStartList.add(Arrays.asList(start, end));
secondGreenStartList.add(Arrays.asList(start + travelTime.intValue(), end + travelTime.intValue()));
}
} else {
firstGreenStartList.add(Arrays.asList(start, end));
secondGreenStartList.add(Arrays.asList(start + travelTime.intValue(), end + travelTime.intValue()));
start = firstStartEndList.get(k);
end = firstStartEndList.get(k);
}
}
}
greenStartMap.put(firstCrossId, firstGreenStartList);
greenStartMap.put(secondCrossId, secondGreenStartList);
}
greenStartMap.put(firstCrossId, firstGreenStartList);
greenStartMap.put(secondCrossId, secondGreenStartList);
}
}
greenwaveStartGroup.add(greenStartMap);
......@@ -334,7 +346,12 @@ public class HisenseGreenChartTask {
String crossId = greenCrossDirDTO.getCrossId();
Integer distance = greenCrossDirDTO.getDistance();
distances.add(distance * 1.0);
String crossKey = CommonUtils.getStrJoin(String.valueOf(crossId), String.valueOf(indexDir));
String crossKey = null;
if (StringUtils.equalsIgnoreCase("13MQV0B5KE0", crossId) || StringUtils.equalsIgnoreCase("13MRN0B5MV0", crossId)) {
crossKey = CommonUtils.getStrJoin(String.valueOf(crossId), String.valueOf(indexDir - 2));
} else {
crossKey = CommonUtils.getStrJoin(String.valueOf(crossId), String.valueOf(indexDir));
}
// 获取海信环相位信息
SchemeGreenDirGreenTimeDTO firstGreenTimeDTO = greenDirGreenTimeMap.get(crossKey);
if (Objects.isNull(firstGreenTimeDTO)) {
......@@ -365,20 +382,23 @@ public class HisenseGreenChartTask {
// 绿灯时间
crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime, cycleIndex + offset + greenEndTime));
} else if (i > 0 && i < cycleSum) {
crossRedTimes.add(Arrays.asList(cycleIndex + offset + greenEndTime, cycleIndex * (i + 1) + offset));
crossRedTimes.add(Arrays.asList(cycleIndex + offset + greenEndTime, cycleLen * (i + 1) + offset));
// 绿灯时间
crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime, cycleIndex + offset + greenEndTime));
} else if (i == cycleSum) {
// a最后一个周期补充相位差
crossRedTimes.add(Arrays.asList(cycleIndex + offset + greenEndTime, cycleIndex + offset + endCycleExt));
// 绿灯时间
if (greenStartTime > endCycleExt) {
//crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime, cycleIndex + offset + endCycleExt));
} else {
if (endCycleExt <= greenStartTime) {
crossRedTimes.add(Arrays.asList(cycleIndex + offset, cycleIndex + offset + endCycleExt));
} else if (greenStartTime <= endCycleExt && endCycleExt <= greenEndTime) {
crossRedTimes.add(Arrays.asList(cycleIndex + offset, cycleIndex + offset + greenStartTime));
crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime, cycleIndex + offset + endCycleExt));
} else {
crossRedTimes.add(Arrays.asList(cycleIndex + offset, cycleIndex + offset + greenStartTime));
crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime, cycleIndex + offset + greenEndTime));
crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenEndTime, cycleIndex + offset + endCycleExt));
}
}
} else { // 红灯结束时间 < 相位差, 相位差包含绿灯,endCycleExt都是红灯
// 相位差中绿灯时间
if (i == 0) {
......@@ -393,7 +413,7 @@ public class HisenseGreenChartTask {
crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime, cycleIndex + offset + greenEndTime));
} else if (i > 0 && i < cycleSum) {
crossRedTimes.add(Arrays.asList(cycleIndex + offset, cycleIndex + offset + greenStartTime));
crossRedTimes.add(Arrays.asList(cycleIndex + offset + greenEndTime, cycleIndex * (i + 1) + offset));
crossRedTimes.add(Arrays.asList(cycleIndex + offset + greenEndTime, cycleLen * (i + 1) + offset));
// 绿灯时间
crossGreenTimes.add(Arrays.asList(cycleIndex + offset + greenStartTime, cycleIndex + offset + greenEndTime));
}
......@@ -439,8 +459,13 @@ public class HisenseGreenChartTask {
for (GreenCrossDirDTO greenCrossDirDTO : greenCrossDirCache) {
Integer greenId = greenCrossDirDTO.getGreenId();
String greenCrossId = greenCrossDirDTO.getCrossId();
String greenDirStr = greenCrossDirDTO.getGreenDir();
String greenDirStr = null;
if (Objects.equals(3, greenId)) {
greenDirStr = "1,3,5,7";
} else {
greenDirStr = greenCrossDirDTO.getGreenDir();
}
// 查询神思绿波优化下发
if (isGreenOptSend(greenId)) {
List<SchemeGreenDirGreenTimeDTO> greenOptList = getGreenOptList(mapper, greenId);
......@@ -453,7 +478,8 @@ public class HisenseGreenChartTask {
if (StringUtils.isBlank(str)) {
continue;
}
List<RingPhaseInfoDTO> ringPhaseInfoDTOS = mapper.readValue(str, new TypeReference<List<RingPhaseInfoDTO>>() {});
List<RingPhaseInfoDTO> ringPhaseInfoDTOS = mapper.readValue(str, new TypeReference<List<RingPhaseInfoDTO>>() {
});
// 遍历绿波路口协调方向
if (StringUtils.isNotBlank(greenDirStr)) {
String[] greenDirArray = greenDirStr.split(",");
......@@ -530,13 +556,15 @@ public class HisenseGreenChartTask {
String dir = entity.getDir();
Integer inDir = GreenBeltDirEnum.getInDir(dir);
Double greenWidthTime = entity.getGreenWidthTime();
List<GreenBeltInfoVO.CrossGreenDetail> crossGreenDetailList = mapper.readValue(crossGreenDetail, new TypeReference<List<GreenBeltInfoVO.CrossGreenDetail>>() {});
List<GreenBeltInfoVO.CrossGreenDetail> crossGreenDetailList = mapper.readValue(crossGreenDetail, new TypeReference<List<GreenBeltInfoVO.CrossGreenDetail>>() {
});
if (!CollectionUtils.isEmpty(crossGreenDetailList)) {
// 默认神思优化方案100,相位101
int index = 100;
for (GreenBeltInfoVO.CrossGreenDetail greenDetail : crossGreenDetailList) {
SchemeGreenDirGreenTimeDTO dto = new SchemeGreenDirGreenTimeDTO();
dto.setCrossId(greenDetail.getCrossId());
String crossId = greenDetail.getCrossId();
dto.setCrossId(crossId);
dto.setSchemeNo(100);
dto.setOffset(greenDetail.getOffset().intValue());
dto.setCycleLen(cycle);
......@@ -547,7 +575,15 @@ public class HisenseGreenChartTask {
dto.setStart(greenStart.intValue());
Double greenEnd = greenDetail.getPhaseEndTime();
dto.setEnd(greenEnd.intValue());
dto.setDir(inDir);
if (StringUtils.equalsIgnoreCase("13MQV0B5KE0", crossId) || StringUtils.equalsIgnoreCase("13MRN0B5MV0", crossId)) {
if (Objects.equals(3, inDir)) {
dto.setDir(1);
} else {
dto.setDir(7);
}
} else {
dto.setDir(inDir);
}
dto.setDate(new Date());
dto.setFromScheme(2);
schemeGreenDirGreenTimeDTOS.add(dto);
......
......@@ -50,7 +50,12 @@ public class HisenseSchemeRingPhaseInfoTask {
for (GreenCrossDirDTO greenCrossDirDTO : greenCrossDirCache) {
Integer greenId = greenCrossDirDTO.getGreenId();
String greenCrossId = greenCrossDirDTO.getCrossId();
String greenDirStr = greenCrossDirDTO.getGreenDir();
String greenDirStr = null;
if (Objects.equals(3, greenId)) {
greenDirStr = "1,3,5,7";
} else {
greenDirStr = greenCrossDirDTO.getGreenDir();
}
// 神思下发绿波时不需要优化
if (isGreenOptSend(greenId)) {
continue;
......
......@@ -54,11 +54,11 @@
select * from t_config_peak_hours;
</select>
<select id="selectGreenWaveWeekDataByTime" resultType="net.wanji.opt.entity.report.GreenWaveWeekData">
SELECT green_id,road_direction,max(traffic_index) max_congest_index,avg(traffic_index) congest_index,sum(status>=3 and status &lt;=4)*60*5 congest_duration,avg(speed) speed,sum(trval_time) travel_time
SELECT green_id,road_direction,max(traffic_index) max_congest_index,avg(traffic_index) congest_index,sum(status>=3 and status &lt;=4)*60*5 congest_duration,avg(speed) speed,avg(trval_time) travel_time
from t_greenwave_hist where start_time BETWEEN #{startDate} AND #{endDate} AND TIME( start_time ) BETWEEN #{startTime} AND #{endTime} GROUP BY green_id,road_direction
</select>
<select id="selectGreenWaveWeekData" resultType="net.wanji.opt.entity.report.GreenWaveWeekData">
SELECT green_id,road_direction,max(traffic_index) max_congest_index,avg(traffic_index) congest_index,sum(status>=3 and status&lt;=4)*60*5 congest_duration,avg(speed) speed,sum(trval_time) travel_time
SELECT green_id,road_direction,max(traffic_index) max_congest_index,avg(traffic_index) congest_index,sum(status>=3 and status&lt;=4)*60*5 congest_duration,avg(speed) speed,avg(trval_time) travel_time
from t_greenwave_hist where start_time BETWEEN #{startDate} AND #{endDate} GROUP BY green_id,road_direction
</select>
......
......@@ -22,6 +22,6 @@ public class GreenReportProblemDetailVO {
private Double avgSpeed;
@ApiModelProperty(value = "行程时间,单位分钟", example = "10")
private Integer travelTime;
private double travelTime;
}
\ No newline at end of file
......@@ -25,5 +25,11 @@ public class CrossRidLaneDTO {
private Integer outDir;
@ApiModelProperty(value = "驶入方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北" )
private Integer inDir;
@ApiModelProperty(value = "车道类型:1路段车道;2进口车道;3出口车道;4左转弯待转区;6直行待行区" )
private Integer laneType;
@ApiModelProperty(value = "开始路口编号" )
private String startCrossId;
@ApiModelProperty(value = "结束路口编号" )
private String endCrossId;
}
......@@ -139,13 +139,18 @@ public class TrendServiceV2Impl implements TrendServiceV2 {
if (StringUtils.endsWithIgnoreCase(crossId, lastWeekCrossId)) {
if (trafficIndex > lastWeekTrafficIndex) {
result.setTrafficIndexUpDown(1);
} else {
} else if (trafficIndex < lastWeekTrafficIndex){
result.setTrafficIndexUpDown(0);
} else {
result.setTrafficIndexUpDown(2);
}
if (queueLength > lastWeekQueueLength) {
result.setQueueLengthUpDown(1);
} else {
} else if (queueLength < lastWeekQueueLength) {
result.setQueueLengthUpDown(0);
} else {
result.setQueueLengthUpDown(2);
}
}
}
......@@ -187,18 +192,24 @@ public class TrendServiceV2Impl implements TrendServiceV2 {
if (trafficIndex > curTrafficIndex) {
greenOptDTO.setTrafficIndexUpDown(1);
} else {
} else if (trafficIndex < curTrafficIndex){
greenOptDTO.setTrafficIndexUpDown(0);
} else {
greenOptDTO.setTrafficIndexUpDown(2);
}
if (speed > curSpeed.intValue()) {
greenOptDTO.setSpeedUpDown(1);
} else {
} else if (speed < curSpeed.intValue()) {
greenOptDTO.setSpeedUpDown(0);
} else {
greenOptDTO.setSpeedUpDown(2);
}
if (travelTime > curTravelTime) {
greenOptDTO.setTravelUpDown(1);
} else {
} else if (travelTime < curTravelTime) {
greenOptDTO.setTravelUpDown(0);
} else {
greenOptDTO.setTravelUpDown(2);
}
}
......
......@@ -263,12 +263,20 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
//按拥堵指数降序排序
// List<AnalysisGreenCongestionPeriodVO> periodVOS = voList.stream().sorted(Comparator.comparing(AnalysisGreenCongestionPeriodVO::getCongestIndex).reversed())
// .collect(Collectors.toList());
// List<GreenReportProblemOverallDataVO> overallDataVOS = greenList.stream().sorted(Comparator.comparing(x -> {
// double congestIndexAll = 0;
// for (GreenWaveDirProblemDataVO dataVO : x.getList()) {
// congestIndexAll += dataVO.getCongestIndex();
// }
// return - congestIndexAll/x.getList().size();
// })).collect(Collectors.toList());
//按拥堵次数降序排序
List<GreenReportProblemOverallDataVO> overallDataVOS = greenList.stream().sorted(Comparator.comparing(x -> {
double congestIndexAll = 0;
double congestCountAll = 0;
for (GreenWaveDirProblemDataVO dataVO : x.getList()) {
congestIndexAll += dataVO.getCongestIndex();
congestCountAll += dataVO.getCongestCount();
}
return - congestIndexAll/x.getList().size();
return - congestCountAll;
})).collect(Collectors.toList());
List<Integer> greenIds = new ArrayList<>();
for (GreenReportProblemOverallDataVO periodVO : overallDataVOS) {
......@@ -477,7 +485,7 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
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.setTravelTime(Math.round(periodVO.getTravelTime()*10 / 60.0)/10.0);
greenReportProblemDetail.setCongestIndex(Math.round(periodVO.getCongestIndex() * 100) / 100.0);
return greenReportProblemDetail;
}
......
......@@ -104,7 +104,6 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
@Override
public GreenWaveOptimizeAnalysisResultResponseDTO getTotalityData(Integer year, Integer week, String ids) {
Integer yearWeek = Integer.valueOf(year + "" + week);
Integer yearWeekLast = Integer.valueOf(year + "" + (week - 1));
List<Integer> greenIdList = new ArrayList<>();
if (ObjectUtils.isEmpty(ids)) {
List<GreenwaveInfoPO> greenwaveInfoPOList = greenwaveInfoMapper.selectAll();
......@@ -124,12 +123,12 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
if (ObjectUtils.isEmpty(greenWaveOptimizeAnalysisDataDTO)) {
optimizeAnalysisResultResponseDTO.setWeekOptimizeCount("0次");
optimizeAnalysisResultResponseDTO.setWeekOptimizeDuration("0小时");
optimizeAnalysisResultResponseDTO.setWeekCapacitySituation("无变化");
optimizeAnalysisResultResponseDTO.setWeekStopTimesSituation("无变化");
optimizeAnalysisResultResponseDTO.setWeekTravelTimeSituation("无变化");
optimizeAnalysisResultResponseDTO.setWeekDelayTimeSituation("无变化");
optimizeAnalysisResultResponseDTO.setWeekAvgSpeedSituation("无变化");
optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("无变化");
optimizeAnalysisResultResponseDTO.setWeekCapacitySituation("持平");
optimizeAnalysisResultResponseDTO.setWeekStopTimesSituation("持平");
optimizeAnalysisResultResponseDTO.setWeekTravelTimeSituation("持平");
optimizeAnalysisResultResponseDTO.setWeekDelayTimeSituation("持平");
optimizeAnalysisResultResponseDTO.setWeekAvgSpeedSituation("持平");
optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("持平");
} else {
optimizeAnalysisResultResponseDTO.setWeekOptimizeCount(String.valueOf(greenWaveOptimizeAnalysisDataDTO.getOptimizeCount()) + "次");
optimizeAnalysisResultResponseDTO.setWeekOptimizeDuration(String.valueOf(greenWaveOptimizeAnalysisDataDTO.getOptimizeDuration() / 60 / 60) + "小时");
......@@ -160,6 +159,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekCapacitySituation = (analysisDataDTO.getCapacity() - analysisDataDTO.getLastCapacity()) * 100 / analysisDataDTO.getLastCapacity();
if (weekCapacitySituation > 0) {
optimizeAnalysisResultResponseDTO.setWeekCapacitySituation("提升" + weekCapacitySituation + "%");
}else if (weekCapacitySituation == 0) {
optimizeAnalysisResultResponseDTO.setWeekCapacitySituation("持平");
} else {
optimizeAnalysisResultResponseDTO.setWeekCapacitySituation("降低" + Math.abs(weekCapacitySituation) + "%");
}
......@@ -171,6 +172,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekStopTimesSituation = Math.round((analysisDataDTO.getStopTimes() - analysisDataDTO.getLastStopTimes()) * 100 / analysisDataDTO.getLastStopTimes());
if (weekStopTimesSituation > 0) {
optimizeAnalysisResultResponseDTO.setWeekStopTimesSituation("增加" + weekStopTimesSituation + "%");
}else if (weekStopTimesSituation == 0) {
optimizeAnalysisResultResponseDTO.setWeekStopTimesSituation("持平");
} else {
optimizeAnalysisResultResponseDTO.setWeekStopTimesSituation("减少" + Math.abs(weekStopTimesSituation) + "%");
}
......@@ -180,6 +183,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekTravelTimeSituation = (analysisDataDTO.getTravelTime() - analysisDataDTO.getLastTravelTime()) * 100 / analysisDataDTO.getLastTravelTime();
if (weekTravelTimeSituation > 0) {
optimizeAnalysisResultResponseDTO.setWeekTravelTimeSituation("增加" + weekTravelTimeSituation + "%");
}else if (weekTravelTimeSituation == 0) {
optimizeAnalysisResultResponseDTO.setWeekTravelTimeSituation("持平");
} else {
optimizeAnalysisResultResponseDTO.setWeekTravelTimeSituation("减少" + Math.abs(weekTravelTimeSituation) + "%");
}
......@@ -189,6 +194,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekDelayTimeSituation = Math.round((analysisDataDTO.getDelayTime() - analysisDataDTO.getLastDelayTime()) * 100 / analysisDataDTO.getLastDelayTime());
if (weekDelayTimeSituation > 0) {
optimizeAnalysisResultResponseDTO.setWeekDelayTimeSituation("增加" + weekDelayTimeSituation + "%");
}else if (weekDelayTimeSituation == 0) {
optimizeAnalysisResultResponseDTO.setWeekDelayTimeSituation("持平");
} else {
optimizeAnalysisResultResponseDTO.setWeekDelayTimeSituation("减少" + Math.abs(weekDelayTimeSituation) + "%");
}
......@@ -198,30 +205,20 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekAvgSpeedSituation = Math.round((analysisDataDTO.getAvgSpeed() - analysisDataDTO.getLastAvgSpeed()) * 100 / analysisDataDTO.getLastAvgSpeed());
if (weekAvgSpeedSituation > 0) {
optimizeAnalysisResultResponseDTO.setWeekAvgSpeedSituation("提升" + weekAvgSpeedSituation + "%");
}else if (weekAvgSpeedSituation == 0) {
optimizeAnalysisResultResponseDTO.setWeekAvgSpeedSituation("持平");
} else {
optimizeAnalysisResultResponseDTO.setWeekAvgSpeedSituation("降低" + Math.abs(weekAvgSpeedSituation) + "%");
}
}
//本周总体情况
if (weekCapacitySituation >= 0 && weekTravelTimeSituation <= 0) {
if (weekCapacitySituation >= 0) {
if (weekCapacitySituation >= 5) {
optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("明显提升");
} else {
optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("略有提升");
}
} else if (weekCapacitySituation >= 0 && weekTravelTimeSituation > 0) {
if (weekCapacitySituation - weekTravelTimeSituation > 0) {
optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("略有提升");
} else {
optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("略有下降");
}
} else if (weekCapacitySituation < 0 && weekTravelTimeSituation <= 0) {
if (weekCapacitySituation - weekTravelTimeSituation > 0) {
optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("略有提升");
} else {
optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("略有下降");
}
} else if (weekCapacitySituation < 0 && weekTravelTimeSituation > 0) {
} else{
if (Math.abs(weekCapacitySituation) >= 5) {
optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("明显下降");
} else {
......
......@@ -359,24 +359,24 @@ public class GreenWaveWeekDataServiceImpl extends ServiceImpl<GreenWaveWeekDataM
greenReportSamePeriodData.setPeakFlow(greenWaveWeekData.getFlow());
greenReportSamePeriodData.setCongestIndex(Math.round(greenWaveWeekData.getCongestIndex()*100)/100.0);
greenReportSamePeriodData.setAvgSpeed(Math.round(greenWaveWeekData.getSpeed()*100)/100.0);
greenReportSamePeriodData.setTravelTime(Double.valueOf(greenWaveWeekData.getTravelTime()));
greenReportSamePeriodData.setTravelTime(Math.round(greenWaveWeekData.getTravelTime()*100/60.0)/100.0);
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("减");
samePeriodData.setAmPeakSituation("减");
}else if(flow == 0){
samePeriodData.setAmPeakSituation("相等");
}else {
samePeriodData.setAmPeakSituation("增加");
}
if(travelTime<0){
samePeriodData.setAmTravelTimeSituation("减少");
samePeriodData.setAmTravelTimeSituation("减少"+Math.abs(travelTime)+"s");
}else if(travelTime == 0){
samePeriodData.setAmTravelTimeSituation("相等");
}else {
samePeriodData.setAmTravelTimeSituation("增加");
samePeriodData.setAmTravelTimeSituation("增加"+Math.abs(travelTime)+"s");
}
if(waveWeekData.getSpeed()!=0){
greenReportSamePeriodData.setAvgSpeedRatio(Math.round((speed/waveWeekData.getSpeed()*10000))/100.0);
......@@ -413,24 +413,24 @@ public class GreenWaveWeekDataServiceImpl extends ServiceImpl<GreenWaveWeekDataM
greenReportSamePeriodData.setPeakFlow(greenWaveWeekData.getFlow());
greenReportSamePeriodData.setCongestIndex(Math.round(greenWaveWeekData.getCongestIndex()*100)/100.0);
greenReportSamePeriodData.setAvgSpeed(Math.round(greenWaveWeekData.getSpeed()*100)/100.0);
greenReportSamePeriodData.setTravelTime(Double.valueOf(greenWaveWeekData.getTravelTime()));
greenReportSamePeriodData.setTravelTime(Math.round(greenWaveWeekData.getTravelTime()*100/60.0)/100.0);
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("减");
samePeriodData.setPmPeakSituation("减");
}else if(flow == 0){
samePeriodData.setPmPeakSituation("相等");
}else {
samePeriodData.setPmPeakSituation("增加");
}
if(travelTime<0){
samePeriodData.setPmTravelTimeSituation("减少");
samePeriodData.setPmTravelTimeSituation("减少"+Math.abs(travelTime)+"s");
}else if(travelTime == 0){
samePeriodData.setPmTravelTimeSituation("相等");
}else {
samePeriodData.setPmTravelTimeSituation("增加");
samePeriodData.setPmTravelTimeSituation("增加"+Math.abs(travelTime)+"s");
}
if(waveWeekData.getSpeed()!=0){
greenReportSamePeriodData.setAvgSpeedRatio(Math.round((speed/waveWeekData.getSpeed()*10000))/100.0);
......@@ -467,7 +467,7 @@ public class GreenWaveWeekDataServiceImpl extends ServiceImpl<GreenWaveWeekDataM
greenReportSamePeriodData.setPeakFlow(greenWaveWeekData.getFlow());
greenReportSamePeriodData.setCongestIndex(Math.round(greenWaveWeekData.getCongestIndex()*100)/100.0);
greenReportSamePeriodData.setAvgSpeed(Math.round(greenWaveWeekData.getSpeed()*100)/100.0);
greenReportSamePeriodData.setTravelTime(Double.valueOf(greenWaveWeekData.getTravelTime()));
greenReportSamePeriodData.setTravelTime(Math.round(greenWaveWeekData.getTravelTime()*100/60.0)/100.0);
double speed = greenWaveWeekData.getSpeed() - waveWeekData.getSpeed();
double flow = greenWaveWeekData.getFlow() - waveWeekData.getFlow();
double travelTime = greenWaveWeekData.getTravelTime() - waveWeekData.getTravelTime();
......
......@@ -469,11 +469,11 @@ public class StrategyPriorityServiceImpl extends ServiceImpl<StrategyPriorityMap
String trunkName = infos.get(0).getWaveName();
// 按路口 ID 分组并合并日计划详情
Map<String, Set<String>> crossGroupedDetails = infos.stream()
// 按干线 ID 分组并合并日计划详情
Map<Integer, Set<String>> crossGroupedDetails = infos.stream()
.filter(info -> info.getDailyPlanDetails() != null)
.collect(Collectors.groupingBy(
StrategyPriorityDailyInfo::getCrossId,
StrategyPriorityDailyInfo::getGreenId,
Collectors.mapping(StrategyPriorityDailyInfo::getDailyPlanDetails, Collectors.toSet()))); // 去重
// 合并每个路口的日计划详情
......
......@@ -401,7 +401,7 @@
t2.daily_plan_details as dailyPlanDetails
FROM t_greenwave_info t4
LEFT JOIN t_greenwave_cross t1 on t1.green_id = t4.id
LEFT JOIN t_strategy_priority_daily_info t2 on t1.cross_id = t2.cross_id and t2.type=2
LEFT JOIN t_strategy_priority_daily_info t2 on t1.green_id = t2.green_id and t2.type=2
LEFT JOIN t_base_cross_info t3 on t1.cross_id = t3.id
</select>
<select id="selectGreenPriorityTable" parameterType="map" resultType="net.wanji.opt.entity.strategy.StrategyPriorityConfig">
......
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