Commit c85b4a40 authored by duanruiming's avatar duanruiming

Merge remote-tracking branch 'origin/master'

parents 77821d13 290108eb
...@@ -64,14 +64,14 @@ ...@@ -64,14 +64,14 @@
<select id="getFlow" resultType="java.lang.Integer"> <select id="getFlow" resultType="java.lang.Integer">
SELECT COALESCE(flow, 0) from 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 limit 1) cross_data
left join left join
(SELECT sum(flow) as flow,cross_id from t_cross_dir_data_hist where start_time BETWEEN #{startDate} AND #{endDate} and dir_type = #{dir} GROUP BY cross_id) cross_flow on cross_data.cross_id = cross_flow.cross_id (SELECT sum(flow) as flow,cross_id from t_cross_dir_data_hist where start_time BETWEEN #{startDate} AND #{endDate} and dir_type = #{dir} GROUP BY cross_id) cross_flow on cross_data.cross_id = cross_flow.cross_id
</select> </select>
<select id="getFlowByTime" resultType="java.lang.Integer"> <select id="getFlowByTime" resultType="java.lang.Integer">
SELECT COALESCE(flow, 0) from SELECT COALESCE(flow, 0) from
(select cross_id from t_greenwave_cross where green_id = #{greenId} and is_key_route = 1) cross_data (select cross_id from t_greenwave_cross where green_id = #{greenId} and is_key_route = 1 limit 1) cross_data
left join 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 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> </select>
......
...@@ -4,6 +4,10 @@ import com.alibaba.fastjson.JSONArray; ...@@ -4,6 +4,10 @@ import com.alibaba.fastjson.JSONArray;
import net.wanji.opt.constant.DirEnum; import net.wanji.opt.constant.DirEnum;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
/** /**
* @author duanruiming * @author duanruiming
* @date 2025/04/02 15:44 * @date 2025/04/02 15:44
...@@ -15,17 +19,18 @@ public class CommonUtils { ...@@ -15,17 +19,18 @@ public class CommonUtils {
**/ **/
public static final String SEPARATOR_UNDER_LINE = "_"; public static final String SEPARATOR_UNDER_LINE = "_";
public static String getStrJoin(String ... str) { public static String getStrJoin(String... str) {
String join = String.join(SEPARATOR_UNDER_LINE, str); String join = String.join(SEPARATOR_UNDER_LINE, str);
return join; return join;
} }
/** /**
* 事件发生方向转换为描述 * 事件发生方向转换为描述
*
* @param dir * @param dir
* @return * @return
*/ */
public static String getEventHappenDirName(String dir){ public static String getEventHappenDirName(String dir) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
if (StringUtils.isNotEmpty(dir)) { if (StringUtils.isNotEmpty(dir)) {
JSONArray dirArr = JSONArray.parseArray(dir); JSONArray dirArr = JSONArray.parseArray(dir);
...@@ -35,10 +40,28 @@ public class CommonUtils { ...@@ -35,10 +40,28 @@ public class CommonUtils {
stringBuilder.append(dirName); stringBuilder.append(dirName);
} }
} }
if (stringBuilder.length()>1){ if (stringBuilder.length() > 1) {
return stringBuilder.substring(1); return stringBuilder.substring(1);
} }
return null; return null;
} }
/**
* 获取两个时间之间相差多少分钟
* @param startTime
* @param endTime
* @param format
* @return
*/
public static int getTimeBetweenMinutes(String startTime, String endTime, String format) {
// 定义时间格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
// 解析时间字符串为LocalTime对象
LocalTime time1 = LocalTime.parse(startTime, formatter);
LocalTime time2 = LocalTime.parse(endTime, formatter);
// 计算时间差(以分钟为单位)
int minutes = (int) ChronoUnit.MINUTES.between(time1, time2);
return minutes;
}
} }
...@@ -39,9 +39,10 @@ class GreenReportProblemOverallAnalysisResponse { ...@@ -39,9 +39,10 @@ class GreenReportProblemOverallAnalysisResponse {
@ApiModelProperty(value = "区域干线总拥堵时长", example = "11小时") @ApiModelProperty(value = "区域干线总拥堵时长", example = "11小时")
private String totalCongestDuration; private String totalCongestDuration;
@ApiModelProperty(value = "拥堵严重干线",example = "经十路(舜耕路-山大路)、经十路(洪山路-舜华路)") @ApiModelProperty(value = "拥堵严重干线",example = "经十路(舜耕路-山大路)东向西、经十路(洪山路-舜华路)西向东",notes = "20250425修改为前端根据dataList数据中按方向交通指数取最大的两条")
private String congestHeavyGreenWave; private String congestHeavyGreenWave;
@ApiModelProperty(value = "区域干线方向拥堵排名情况")
private List<GreenReportProblemOverallData> dataList = new ArrayList<>(); private List<GreenReportProblemOverallData> dataList = new ArrayList<>();
} }
......
...@@ -263,14 +263,22 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo ...@@ -263,14 +263,22 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
//按拥堵指数降序排序 //按拥堵指数降序排序
// List<AnalysisGreenCongestionPeriodVO> periodVOS = voList.stream().sorted(Comparator.comparing(AnalysisGreenCongestionPeriodVO::getCongestIndex).reversed()) // List<AnalysisGreenCongestionPeriodVO> periodVOS = voList.stream().sorted(Comparator.comparing(AnalysisGreenCongestionPeriodVO::getCongestIndex).reversed())
// .collect(Collectors.toList()); // .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 -> { List<GreenReportProblemOverallDataVO> overallDataVOS = greenList.stream().sorted(Comparator.comparing(x -> {
double congestIndexAll = 0; double congestCountAll = 0;
for (GreenWaveDirProblemDataVO dataVO : x.getList()) { for (GreenWaveDirProblemDataVO dataVO : x.getList()) {
congestIndexAll += dataVO.getCongestIndex(); congestCountAll += dataVO.getCongestCount();
} }
return - congestIndexAll/x.getList().size(); return - congestCountAll;
})).collect(Collectors.toList()); })).collect(Collectors.toList());
Set<Integer> greenIds = new HashSet<>(); List<Integer> greenIds = new ArrayList<>();
for (GreenReportProblemOverallDataVO periodVO : overallDataVOS) { for (GreenReportProblemOverallDataVO periodVO : overallDataVOS) {
greenIds.add(Integer.valueOf(periodVO.getGreenId())); greenIds.add(Integer.valueOf(periodVO.getGreenId()));
if (greenIds.size() >= 2) { if (greenIds.size() >= 2) {
......
...@@ -104,7 +104,6 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys ...@@ -104,7 +104,6 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
@Override @Override
public GreenWaveOptimizeAnalysisResultResponseDTO getTotalityData(Integer year, Integer week, String ids) { public GreenWaveOptimizeAnalysisResultResponseDTO getTotalityData(Integer year, Integer week, String ids) {
Integer yearWeek = Integer.valueOf(year + "" + week); Integer yearWeek = Integer.valueOf(year + "" + week);
Integer yearWeekLast = Integer.valueOf(year + "" + (week - 1));
List<Integer> greenIdList = new ArrayList<>(); List<Integer> greenIdList = new ArrayList<>();
if (ObjectUtils.isEmpty(ids)) { if (ObjectUtils.isEmpty(ids)) {
List<GreenwaveInfoPO> greenwaveInfoPOList = greenwaveInfoMapper.selectAll(); List<GreenwaveInfoPO> greenwaveInfoPOList = greenwaveInfoMapper.selectAll();
...@@ -124,12 +123,12 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys ...@@ -124,12 +123,12 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
if (ObjectUtils.isEmpty(greenWaveOptimizeAnalysisDataDTO)) { if (ObjectUtils.isEmpty(greenWaveOptimizeAnalysisDataDTO)) {
optimizeAnalysisResultResponseDTO.setWeekOptimizeCount("0次"); optimizeAnalysisResultResponseDTO.setWeekOptimizeCount("0次");
optimizeAnalysisResultResponseDTO.setWeekOptimizeDuration("0小时"); optimizeAnalysisResultResponseDTO.setWeekOptimizeDuration("0小时");
optimizeAnalysisResultResponseDTO.setWeekCapacitySituation("无变化"); optimizeAnalysisResultResponseDTO.setWeekCapacitySituation("持平");
optimizeAnalysisResultResponseDTO.setWeekStopTimesSituation("无变化"); optimizeAnalysisResultResponseDTO.setWeekStopTimesSituation("持平");
optimizeAnalysisResultResponseDTO.setWeekTravelTimeSituation("无变化"); optimizeAnalysisResultResponseDTO.setWeekTravelTimeSituation("持平");
optimizeAnalysisResultResponseDTO.setWeekDelayTimeSituation("无变化"); optimizeAnalysisResultResponseDTO.setWeekDelayTimeSituation("持平");
optimizeAnalysisResultResponseDTO.setWeekAvgSpeedSituation("无变化"); optimizeAnalysisResultResponseDTO.setWeekAvgSpeedSituation("持平");
optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("无变化"); optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("持平");
} else { } else {
optimizeAnalysisResultResponseDTO.setWeekOptimizeCount(String.valueOf(greenWaveOptimizeAnalysisDataDTO.getOptimizeCount()) + "次"); optimizeAnalysisResultResponseDTO.setWeekOptimizeCount(String.valueOf(greenWaveOptimizeAnalysisDataDTO.getOptimizeCount()) + "次");
optimizeAnalysisResultResponseDTO.setWeekOptimizeDuration(String.valueOf(greenWaveOptimizeAnalysisDataDTO.getOptimizeDuration() / 60 / 60) + "小时"); optimizeAnalysisResultResponseDTO.setWeekOptimizeDuration(String.valueOf(greenWaveOptimizeAnalysisDataDTO.getOptimizeDuration() / 60 / 60) + "小时");
...@@ -160,6 +159,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys ...@@ -160,6 +159,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekCapacitySituation = (analysisDataDTO.getCapacity() - analysisDataDTO.getLastCapacity()) * 100 / analysisDataDTO.getLastCapacity(); weekCapacitySituation = (analysisDataDTO.getCapacity() - analysisDataDTO.getLastCapacity()) * 100 / analysisDataDTO.getLastCapacity();
if (weekCapacitySituation > 0) { if (weekCapacitySituation > 0) {
optimizeAnalysisResultResponseDTO.setWeekCapacitySituation("提升" + weekCapacitySituation + "%"); optimizeAnalysisResultResponseDTO.setWeekCapacitySituation("提升" + weekCapacitySituation + "%");
}else if (weekCapacitySituation == 0) {
optimizeAnalysisResultResponseDTO.setWeekCapacitySituation("持平");
} else { } else {
optimizeAnalysisResultResponseDTO.setWeekCapacitySituation("降低" + Math.abs(weekCapacitySituation) + "%"); optimizeAnalysisResultResponseDTO.setWeekCapacitySituation("降低" + Math.abs(weekCapacitySituation) + "%");
} }
...@@ -171,6 +172,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys ...@@ -171,6 +172,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekStopTimesSituation = Math.round((analysisDataDTO.getStopTimes() - analysisDataDTO.getLastStopTimes()) * 100 / analysisDataDTO.getLastStopTimes()); weekStopTimesSituation = Math.round((analysisDataDTO.getStopTimes() - analysisDataDTO.getLastStopTimes()) * 100 / analysisDataDTO.getLastStopTimes());
if (weekStopTimesSituation > 0) { if (weekStopTimesSituation > 0) {
optimizeAnalysisResultResponseDTO.setWeekStopTimesSituation("增加" + weekStopTimesSituation + "%"); optimizeAnalysisResultResponseDTO.setWeekStopTimesSituation("增加" + weekStopTimesSituation + "%");
}else if (weekStopTimesSituation == 0) {
optimizeAnalysisResultResponseDTO.setWeekStopTimesSituation("持平");
} else { } else {
optimizeAnalysisResultResponseDTO.setWeekStopTimesSituation("减少" + Math.abs(weekStopTimesSituation) + "%"); optimizeAnalysisResultResponseDTO.setWeekStopTimesSituation("减少" + Math.abs(weekStopTimesSituation) + "%");
} }
...@@ -180,6 +183,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys ...@@ -180,6 +183,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekTravelTimeSituation = (analysisDataDTO.getTravelTime() - analysisDataDTO.getLastTravelTime()) * 100 / analysisDataDTO.getLastTravelTime(); weekTravelTimeSituation = (analysisDataDTO.getTravelTime() - analysisDataDTO.getLastTravelTime()) * 100 / analysisDataDTO.getLastTravelTime();
if (weekTravelTimeSituation > 0) { if (weekTravelTimeSituation > 0) {
optimizeAnalysisResultResponseDTO.setWeekTravelTimeSituation("增加" + weekTravelTimeSituation + "%"); optimizeAnalysisResultResponseDTO.setWeekTravelTimeSituation("增加" + weekTravelTimeSituation + "%");
}else if (weekTravelTimeSituation == 0) {
optimizeAnalysisResultResponseDTO.setWeekTravelTimeSituation("持平");
} else { } else {
optimizeAnalysisResultResponseDTO.setWeekTravelTimeSituation("减少" + Math.abs(weekTravelTimeSituation) + "%"); optimizeAnalysisResultResponseDTO.setWeekTravelTimeSituation("减少" + Math.abs(weekTravelTimeSituation) + "%");
} }
...@@ -189,6 +194,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys ...@@ -189,6 +194,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekDelayTimeSituation = Math.round((analysisDataDTO.getDelayTime() - analysisDataDTO.getLastDelayTime()) * 100 / analysisDataDTO.getLastDelayTime()); weekDelayTimeSituation = Math.round((analysisDataDTO.getDelayTime() - analysisDataDTO.getLastDelayTime()) * 100 / analysisDataDTO.getLastDelayTime());
if (weekDelayTimeSituation > 0) { if (weekDelayTimeSituation > 0) {
optimizeAnalysisResultResponseDTO.setWeekDelayTimeSituation("增加" + weekDelayTimeSituation + "%"); optimizeAnalysisResultResponseDTO.setWeekDelayTimeSituation("增加" + weekDelayTimeSituation + "%");
}else if (weekDelayTimeSituation == 0) {
optimizeAnalysisResultResponseDTO.setWeekDelayTimeSituation("持平");
} else { } else {
optimizeAnalysisResultResponseDTO.setWeekDelayTimeSituation("减少" + Math.abs(weekDelayTimeSituation) + "%"); optimizeAnalysisResultResponseDTO.setWeekDelayTimeSituation("减少" + Math.abs(weekDelayTimeSituation) + "%");
} }
...@@ -198,30 +205,20 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys ...@@ -198,30 +205,20 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekAvgSpeedSituation = Math.round((analysisDataDTO.getAvgSpeed() - analysisDataDTO.getLastAvgSpeed()) * 100 / analysisDataDTO.getLastAvgSpeed()); weekAvgSpeedSituation = Math.round((analysisDataDTO.getAvgSpeed() - analysisDataDTO.getLastAvgSpeed()) * 100 / analysisDataDTO.getLastAvgSpeed());
if (weekAvgSpeedSituation > 0) { if (weekAvgSpeedSituation > 0) {
optimizeAnalysisResultResponseDTO.setWeekAvgSpeedSituation("提升" + weekAvgSpeedSituation + "%"); optimizeAnalysisResultResponseDTO.setWeekAvgSpeedSituation("提升" + weekAvgSpeedSituation + "%");
}else if (weekAvgSpeedSituation == 0) {
optimizeAnalysisResultResponseDTO.setWeekAvgSpeedSituation("持平");
} else { } else {
optimizeAnalysisResultResponseDTO.setWeekAvgSpeedSituation("降低" + Math.abs(weekAvgSpeedSituation) + "%"); optimizeAnalysisResultResponseDTO.setWeekAvgSpeedSituation("降低" + Math.abs(weekAvgSpeedSituation) + "%");
} }
} }
//本周总体情况 //本周总体情况
if (weekCapacitySituation >= 0 && weekTravelTimeSituation <= 0) { if (weekCapacitySituation >= 0) {
if (weekCapacitySituation >= 5) { if (weekCapacitySituation >= 5) {
optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("明显提升"); optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("明显提升");
} else { } else {
optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("略有提升"); optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("略有提升");
} }
} else if (weekCapacitySituation >= 0 && weekTravelTimeSituation > 0) { } else{
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) {
if (Math.abs(weekCapacitySituation) >= 5) { if (Math.abs(weekCapacitySituation) >= 5) {
optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("明显下降"); optimizeAnalysisResultResponseDTO.setWeekTotalitySituation("明显下降");
} else { } else {
......
...@@ -10,6 +10,7 @@ import net.wanji.common.utils.tool.DateUtil; ...@@ -10,6 +10,7 @@ import net.wanji.common.utils.tool.DateUtil;
import net.wanji.databus.dao.entity.GreenwaveInfoPO; import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.mapper.GreenwaveInfoMapper; import net.wanji.databus.dao.mapper.GreenwaveInfoMapper;
import net.wanji.opt.common.ArithOfBigDecmial; import net.wanji.opt.common.ArithOfBigDecmial;
import net.wanji.opt.common.CommonUtils;
import net.wanji.opt.common.enums.PeakNameEnum; import net.wanji.opt.common.enums.PeakNameEnum;
import net.wanji.opt.constant.PeakEnum; import net.wanji.opt.constant.PeakEnum;
import net.wanji.opt.constant.WeekDayEnum; import net.wanji.opt.constant.WeekDayEnum;
...@@ -29,6 +30,9 @@ import org.springframework.stereotype.Component; ...@@ -29,6 +30,9 @@ import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
...@@ -121,7 +125,7 @@ public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceIm ...@@ -121,7 +125,7 @@ public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceIm
if (vo1.getCongestStartTime() != null && vo2.getCongestEndTime() != null) { if (vo1.getCongestStartTime() != null && vo2.getCongestEndTime() != null) {
weekData.setThisWeekCongestSpan(DateUtil.formatDate(vo1.getCongestStartTime(), "HH:mm") + "~" + DateUtil.formatDate(vo2.getCongestEndTime(), "HH:mm")); weekData.setThisWeekCongestSpan(DateUtil.formatDate(vo1.getCongestStartTime(), "HH:mm") + "~" + DateUtil.formatDate(vo2.getCongestEndTime(), "HH:mm"));
} }
if (Objects.nonNull(lastWeekDataList)){ if (Objects.nonNull(lastWeekDataList)) {
//上周高峰指标数据 //上周高峰指标数据
Optional<AnalysisGreenWavePeakDetail> optional = lastWeekDataList.stream().filter(o -> Objects.equals(o.getWeekDay(), detail.getWeekDay()) && Objects.equals(o.getPeakType(), detail.getPeakType())).findFirst(); Optional<AnalysisGreenWavePeakDetail> optional = lastWeekDataList.stream().filter(o -> Objects.equals(o.getWeekDay(), detail.getWeekDay()) && Objects.equals(o.getPeakType(), detail.getPeakType())).findFirst();
if (optional.isPresent()) { if (optional.isPresent()) {
...@@ -209,48 +213,62 @@ public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceIm ...@@ -209,48 +213,62 @@ public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceIm
Double lastAvgCongestIndex = 0D; Double lastAvgCongestIndex = 0D;
//====================================================================================================================================================// //====================================================================================================================================================//
if (Objects.nonNull(earliestStartTimePo) && Objects.nonNull(lastWeekEarliestStartTimePo)) { if (Objects.nonNull(earliestStartTimePo) && Objects.nonNull(lastWeekEarliestStartTimePo)) {
minutesStart = Minutes.minutesBetween(new DateTime(earliestStartTimePo.getPeakStartTime().getTime()), new DateTime(lastWeekEarliestStartTimePo.getPeakStartTime().getTime())).getMinutes(); String thisHM = DateUtil.formatDate(earliestStartTimePo.getPeakStartTime(), "HH:mm");
minutesEnd = Minutes.minutesBetween(new DateTime(earliestStartTimePo.getPeakEndTime().getTime()), new DateTime(lastWeekEarliestStartTimePo.getPeakEndTime().getTime())).getMinutes(); String lastHM = DateUtil.formatDate(lastWeekEarliestStartTimePo.getPeakStartTime(), "HH:mm");
// 计算时间差(以分钟为单位)
minutesStart = CommonUtils.getTimeBetweenMinutes(thisHM,lastHM,"HH:mm");
thisHM = DateUtil.formatDate(earliestStartTimePo.getPeakEndTime(), "HH:mm");
lastHM = DateUtil.formatDate(lastWeekEarliestStartTimePo.getPeakEndTime(), "HH:mm");
// 计算时间差(以分钟为单位)
minutesEnd = CommonUtils.getTimeBetweenMinutes(thisHM,lastHM,"HH:mm");
} }
//====================================================================================================================================================// //====================================================================================================================================================//
//早高峰集中时段 //早高峰集中时段
if (Objects.nonNull(earliestStartTimePo) && Objects.nonNull(lastEndTimePo)) { if (Objects.nonNull(earliestStartTimePo) && Objects.nonNull(lastEndTimePo)) {
amPeakScope = DateUtil.formatDate(earliestStartTimePo.getPeakStartTime(), "HH:mm") + "~" + DateUtil.formatDate(lastEndTimePo.getPeakEndTime(), "HH:mm"); String amPeakStart = DateUtil.formatDate(earliestStartTimePo.getPeakStartTime(), "HH:mm");
//持续时长 String amPeakEnd = DateUtil.formatDate(lastEndTimePo.getPeakEndTime(), "HH:mm");
amDuration1 = Minutes.minutesBetween(new DateTime(earliestStartTimePo.getPeakStartTime().getTime()), new DateTime(lastEndTimePo.getPeakEndTime().getTime())).getMinutes(); amPeakScope = amPeakStart + "~" + amPeakEnd;
// 计算时间差(以分钟为单位)
amDuration1 = CommonUtils.getTimeBetweenMinutes(amPeakStart,amPeakEnd,"HH:mm");
} }
//====================================================================================================================================================// //====================================================================================================================================================//
//开始时间比上周 //开始时间比上周
String amPeakStartSituation = ""; String amPeakStartSituation = "";
if (minutesStart > 0) { if (minutesStart > 0) {
amPeakStartSituation = "提前" + minutesStart + "分钟"; amPeakStartSituation = "提前" + Math.abs(minutesStart) + "分钟";
} else { } else {
amPeakStartSituation = "延后" + minutesStart + "分钟"; amPeakStartSituation = "延后" + Math.abs(minutesStart) + "分钟";
} }
//====================================================================================================================================================// //====================================================================================================================================================//
//结束时间比上周 //结束时间比上周
String amPeakEndSituation = ""; String amPeakEndSituation = "";
if (minutesEnd > 0) { if (minutesEnd > 0) {
amPeakEndSituation = "提前" + minutesEnd + "分钟"; amPeakEndSituation = "提前" + Math.abs(minutesEnd) + "分钟";
} else { } else {
amPeakEndSituation = "延后" + minutesEnd + "分钟"; amPeakEndSituation = "延后" + Math.abs(minutesEnd) + "分钟";
} }
//====================================================================================================================================================// //====================================================================================================================================================//
//持续时长 //持续时长
if (Objects.nonNull(lastWeekEarliestStartTimePo) && Objects.nonNull(lastWeekLastEndTimePo)) { if (Objects.nonNull(lastWeekEarliestStartTimePo) && Objects.nonNull(lastWeekLastEndTimePo)) {
amDuration2 = Minutes.minutesBetween(new DateTime(lastWeekEarliestStartTimePo.getPeakStartTime().getTime()), new DateTime(lastWeekLastEndTimePo.getPeakEndTime().getTime())).getMinutes(); String amPeakStart = DateUtil.formatDate(lastWeekEarliestStartTimePo.getPeakStartTime(), "HH:mm");
String amPeakEnd = DateUtil.formatDate(lastWeekLastEndTimePo.getPeakEndTime(), "HH:mm");
amDuration2 = CommonUtils.getTimeBetweenMinutes(amPeakStart,amPeakEnd,"HH:mm");
} }
//本周高峰持续时长 //本周高峰持续时长
String amPeakDuration = amDuration1 + "分钟"; String amPeakDuration = amDuration1 + "分钟";
String amDurationSameRatioSituation = ""; String amDurationSameRatioSituation = "";
if (amDuration1 > amDuration2) { if (amDuration1 > amDuration2) {
amDurationSameRatioSituation = "增加" + (amDuration1 - amDuration2) + "分钟"; amDurationSameRatioSituation = "增加" + Math.abs((amDuration1 - amDuration2)) + "分钟";
} else { } else {
amDurationSameRatioSituation = "减少" + (amDuration2 - amDuration1) + "分钟"; amDurationSameRatioSituation = "减少" + Math.abs((amDuration2 - amDuration1)) + "分钟";
} }
//====================================================================================================================================================// //====================================================================================================================================================//
thisMaxTravelTime = thisWeekList.stream().map(AnalysisGreenWavePeakDetail::getTravelTime).max(Comparator.comparing(Integer::intValue)).orElse(0); thisMaxTravelTime = thisWeekList.stream().map(AnalysisGreenWavePeakDetail::getTravelTime).max(Comparator.comparing(Integer::intValue)).orElse(0);
thisMaxTravelTime = (int)ArithOfBigDecmial.div(thisMaxTravelTime,60);//转为分钟
lastMaxTravelTime = lastWeekDataList.stream().map(AnalysisGreenWavePeakDetail::getTravelTime).max(Comparator.comparing(Integer::intValue)).orElse(0); lastMaxTravelTime = lastWeekDataList.stream().map(AnalysisGreenWavePeakDetail::getTravelTime).max(Comparator.comparing(Integer::intValue)).orElse(0);
lastMaxTravelTime = (int)ArithOfBigDecmial.div(lastMaxTravelTime,60);//转为分钟
//最大行程时间状况 //最大行程时间状况
String maxTravelTimeSituation = ""; String maxTravelTimeSituation = "";
if (thisMaxTravelTime > lastMaxTravelTime) { if (thisMaxTravelTime > lastMaxTravelTime) {
...@@ -266,9 +284,9 @@ public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceIm ...@@ -266,9 +284,9 @@ public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceIm
//平均拥堵指数状况 //平均拥堵指数状况
String amAvgCongestIndex = ""; String amAvgCongestIndex = "";
if (thisAvgCongestIndex > lastAvgCongestIndex) { if (thisAvgCongestIndex > lastAvgCongestIndex) {
amAvgCongestIndex = "增加" + (Math.abs(thisAvgCongestIndex - lastAvgCongestIndex)) + ""; amAvgCongestIndex = "增加" + ArithOfBigDecmial.round(Math.abs(thisAvgCongestIndex - lastAvgCongestIndex),2) + "";
} else { } else {
amAvgCongestIndex = "减少" + (Math.abs(thisAvgCongestIndex - lastAvgCongestIndex)) + ""; amAvgCongestIndex = "减少" + ArithOfBigDecmial.round(Math.abs(thisAvgCongestIndex - lastAvgCongestIndex),2)+ "";
} }
//====================================================================================================================================================// //====================================================================================================================================================//
if (Objects.equals(peakType, 1)) { if (Objects.equals(peakType, 1)) {
...@@ -304,6 +322,14 @@ public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceIm ...@@ -304,6 +322,14 @@ public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceIm
return vo; return vo;
} }
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
LocalTime time1 = LocalTime.parse("0800", formatter);
LocalTime time2 = LocalTime.parse("0745", formatter);
// 计算时间差(以分钟为单位)
int minutesStart = (int) ChronoUnit.MINUTES.between(time1, time2);
System.out.println(minutesStart);
}
/** /**
* 获取峰值时间边界 * 获取峰值时间边界
......
...@@ -118,8 +118,8 @@ ...@@ -118,8 +118,8 @@
GROUP_CONCAT(t2.daily_plan_details SEPARATOR ', ') AS dailyPlanDetails GROUP_CONCAT(t2.daily_plan_details SEPARATOR ', ') AS dailyPlanDetails
FROM FROM
t_base_cross_info t3 t_base_cross_info t3
LEFT join t_greenwave_cross t1 on t3.id =t1.cross_id
LEFT JOIN t_strategy_priority_daily_info t2 on t3.id = t2.cross_id and t2.type=1 LEFT JOIN t_strategy_priority_daily_info t2 on t3.id = t2.cross_id and t2.type=1
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 LEFT JOIN t_greenwave_info t4 on t4.id = t1.green_id
WHERE t3.is_signal='1' WHERE t3.is_signal='1'
GROUP BY t3.id GROUP BY t3.id
......
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