Commit 52db54e5 authored by hanbing's avatar hanbing

[update] 态势监测--子区详情修改

parent b1c32ebd
...@@ -67,7 +67,7 @@ public class TrendController { ...@@ -67,7 +67,7 @@ public class TrendController {
return JsonViewObject.newInstance().success(res); return JsonViewObject.newInstance().success(res);
} }
@ApiOperation(value = "子区详情", notes = "子区详情", response = JsonViewObject.class, @ApiOperation(value = "干线方案详情", notes = "干线方案详情", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/greenwaveDetail", @PostMapping(value = "/greenwaveDetail",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
...@@ -79,6 +79,18 @@ public class TrendController { ...@@ -79,6 +79,18 @@ public class TrendController {
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 = "/currentGreenwaveDetail",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenwaveDetailVO.class),
})
public JsonViewObject currentGreenwaveDetail(@RequestBody GreenwaveIdBO bo) throws ParseException {
GreenwaveDetailVO res = trendService.currentGreenwaveDetail(bo);
return JsonViewObject.newInstance().success(res);
}
@ApiOperation(value = "保存子区策略", notes = "保存子区策略", response = JsonViewObject.class, @ApiOperation(value = "保存子区策略", notes = "保存子区策略", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON) produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/saveGreenwaveStrategy", @PostMapping(value = "/saveGreenwaveStrategy",
......
...@@ -38,4 +38,6 @@ public interface TrendService { ...@@ -38,4 +38,6 @@ public interface TrendService {
List<GreenwaveCrossMetricsVO> greenwaveCrossMetrics(GreenwaveIdAndTimeStampBO greenwaveIdAndTimeStampBO); List<GreenwaveCrossMetricsVO> greenwaveCrossMetrics(GreenwaveIdAndTimeStampBO greenwaveIdAndTimeStampBO);
void saveGreenwaveStrategy(SaveGreenwaveStrategyBO saveGreenwaveStrategyBO); void saveGreenwaveStrategy(SaveGreenwaveStrategyBO saveGreenwaveStrategyBO);
GreenwaveDetailVO currentGreenwaveDetail(GreenwaveIdBO bo) throws ParseException;
} }
...@@ -11,10 +11,7 @@ import net.wanji.databus.dao.entity.*; ...@@ -11,10 +11,7 @@ import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.*; import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.po.*; import net.wanji.databus.po.*;
import net.wanji.databus.vo.AbnormalCrossListVO; import net.wanji.databus.vo.AbnormalCrossListVO;
import net.wanji.opt.bo.GreenwaveIdAndTimeStampBO; import net.wanji.opt.bo.*;
import net.wanji.opt.bo.GreenwaveIdBO;
import net.wanji.opt.bo.GreenwaveNameBO;
import net.wanji.opt.bo.SaveGreenwaveStrategyBO;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper; import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
import net.wanji.opt.dao.mapper.strategy.SceneMapper; import net.wanji.opt.dao.mapper.strategy.SceneMapper;
import net.wanji.opt.dao.mapper.strategy.SceneStrategyIdeaMapper; import net.wanji.opt.dao.mapper.strategy.SceneStrategyIdeaMapper;
...@@ -39,6 +36,8 @@ import java.text.ParseException; ...@@ -39,6 +36,8 @@ import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -74,6 +73,7 @@ public class TrendServiceImpl implements TrendService { ...@@ -74,6 +73,7 @@ public class TrendServiceImpl implements TrendService {
private final SceneStrategyMapper sceneStrategyMapper; private final SceneStrategyMapper sceneStrategyMapper;
private final SceneMapper sceneMapper; private final SceneMapper sceneMapper;
private final BaseCrossPlanMapper baseCrossPlanMapper; private final BaseCrossPlanMapper baseCrossPlanMapper;
private final MainlineEvaluateServiceImpl mainlineEvaluateServiceImpl;
// 用于计算路口状态,key为方向,value为状态 // 用于计算路口状态,key为方向,value为状态
private Map<Integer, Integer> preStatus = new HashMap<Integer, Integer>() {{ private Map<Integer, Integer> preStatus = new HashMap<Integer, Integer>() {{
...@@ -94,7 +94,7 @@ public class TrendServiceImpl implements TrendService { ...@@ -94,7 +94,7 @@ public class TrendServiceImpl implements TrendService {
CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper, CrossTurnDataRealtimeMapper crossTurnDataRealtimeMapper,
CrossDirDataHistMapper crossDirDataHistMapper, EventAlarmMapper eventAlarmMapper, CrossDirDataHistMapper crossDirDataHistMapper, EventAlarmMapper eventAlarmMapper,
RidInfoMapper ridInfoMapper, BaseCrossDirInfoMapper baseCrossDirInfoMapper, RidInfoMapper ridInfoMapper, BaseCrossDirInfoMapper baseCrossDirInfoMapper,
CrossSchemeOptLogMapper crossSchemeOptLogMapper, GreenwaveCrossMapper greenwaveCrossMapper, CrossDirDataRealtimeMapper crossDirDataRealtimeMapper, GreenwaveHistMapper greenwaveHistMapper, GreenwaveRealtimeMapper greenwaveRealtimeMapper, SceneStrategyIdeaMapper strategyIdeaMapper, StrategyMapper strategyMapper, BaseCrossSchedulesMapper baseCrossSchedulesMapper, BaseCrossSchedulesPlanMapper baseCrossSchedulesPlanMapper, BaseCrossSectionMapper baseCrossSectionMapper, BaseCrossSchemeMapper crossSchemeMapper, BaseCrossSchemeMapper baseCrossSchemeMapper, BaseCrossPhaseMapper baseCrossPhaseMapper, BaseCrossPhaseLightsMapper crossPhaseLightsMapper, BaseCrossLaneLightsMapper baseCrossLaneLightsMapper, CrossBaseLaneInfoMapper crossBaseLaneInfoMapper, CrossTurnDataHistMapper crossTurnDataHistMapper, @Qualifier("greenwaveSceneMapper") GreenwaveSceneMapper greenwaveSceneMapper, @Qualifier("sceneStrategyMapper") SceneStrategyMapper sceneStrategyMapper, @Qualifier("sceneMapper") SceneMapper sceneMapper, @Qualifier("baseCrossPlanMapper") BaseCrossPlanMapper baseCrossPlanMapper) { CrossSchemeOptLogMapper crossSchemeOptLogMapper, GreenwaveCrossMapper greenwaveCrossMapper, CrossDirDataRealtimeMapper crossDirDataRealtimeMapper, GreenwaveHistMapper greenwaveHistMapper, GreenwaveRealtimeMapper greenwaveRealtimeMapper, SceneStrategyIdeaMapper strategyIdeaMapper, StrategyMapper strategyMapper, BaseCrossSchedulesMapper baseCrossSchedulesMapper, BaseCrossSchedulesPlanMapper baseCrossSchedulesPlanMapper, BaseCrossSectionMapper baseCrossSectionMapper, BaseCrossSchemeMapper crossSchemeMapper, BaseCrossSchemeMapper baseCrossSchemeMapper, BaseCrossPhaseMapper baseCrossPhaseMapper, BaseCrossPhaseLightsMapper crossPhaseLightsMapper, BaseCrossLaneLightsMapper baseCrossLaneLightsMapper, CrossBaseLaneInfoMapper crossBaseLaneInfoMapper, CrossTurnDataHistMapper crossTurnDataHistMapper, @Qualifier("greenwaveSceneMapper") GreenwaveSceneMapper greenwaveSceneMapper, @Qualifier("sceneStrategyMapper") SceneStrategyMapper sceneStrategyMapper, @Qualifier("sceneMapper") SceneMapper sceneMapper, @Qualifier("baseCrossPlanMapper") BaseCrossPlanMapper baseCrossPlanMapper, MainlineEvaluateServiceImpl mainlineEvaluateServiceImpl) {
this.greenwaveInfoMapper = greenwaveInfoMapper; this.greenwaveInfoMapper = greenwaveInfoMapper;
this.baseCrossInfoMapper = baseCrossInfoMapper; this.baseCrossInfoMapper = baseCrossInfoMapper;
this.crossDataRealtimeMapper = crossDataRealtimeMapper; this.crossDataRealtimeMapper = crossDataRealtimeMapper;
...@@ -122,6 +122,7 @@ public class TrendServiceImpl implements TrendService { ...@@ -122,6 +122,7 @@ public class TrendServiceImpl implements TrendService {
this.sceneStrategyMapper = sceneStrategyMapper; this.sceneStrategyMapper = sceneStrategyMapper;
this.sceneMapper = sceneMapper; this.sceneMapper = sceneMapper;
this.baseCrossPlanMapper = baseCrossPlanMapper; this.baseCrossPlanMapper = baseCrossPlanMapper;
this.mainlineEvaluateServiceImpl = mainlineEvaluateServiceImpl;
} }
@Override @Override
...@@ -858,6 +859,109 @@ public class TrendServiceImpl implements TrendService { ...@@ -858,6 +859,109 @@ public class TrendServiceImpl implements TrendService {
} }
} }
@Override
public GreenwaveDetailVO currentGreenwaveDetail(GreenwaveIdBO bo) throws ParseException {
Integer greenwaveId = bo.getGreenwaveId();
// 获取绿波名称,调用评价接口
GreenwaveInfoPO greenwaveInfoPO = greenwaveInfoMapper.selectById(greenwaveId);
String greenwaveName = greenwaveInfoPO.getName();
String[] split = greenwaveName.split(":");
String lineName = split[0];
MainlineSchemeAnalysisBO mainlineSchemeAnalysisBO = new MainlineSchemeAnalysisBO();
mainlineSchemeAnalysisBO.setName(lineName);
// 获取当前日期和时间的 Calendar 对象
Calendar calendar = Calendar.getInstance();
// 设置时、分、秒和毫秒为 0,以获取当天的 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);
Date startOfDay = calendar.getTime();
// 设置时、分、秒和毫秒为 23:59:59.999,以获取当天的 23:59:59
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
Date endOfDay = calendar.getTime();
mainlineSchemeAnalysisBO.setStartTime(startOfDay);
mainlineSchemeAnalysisBO.setEndTime(endOfDay);
MainlineSchemeAnalysisVO mainlineSchemeAnalysisVO = mainlineEvaluateServiceImpl
.mainlineSchemeAnalysis(mainlineSchemeAnalysisBO);
// 获取当前时段的干线方案
List<MainlineSchemeAnalysisVO.GreenwaveData> greenwaveData = mainlineSchemeAnalysisVO.getGreenwaveData();
MainlineSchemeAnalysisVO.GreenwaveData matchingData = findMatchingData(greenwaveData);
if (ObjectUtil.isEmpty(matchingData)) {
throw new RuntimeException("无当天绿波历史数据");
}
String lineSchemeName = matchingData.getName();
GreenwaveNameBO greenwaveNameBO = new GreenwaveNameBO();
greenwaveNameBO.setGreenwaveName(lineSchemeName);
GreenwaveDetailVO greenwaveDetailVO = greenwaveDetail(greenwaveNameBO);
return greenwaveDetailVO;
}
private MainlineSchemeAnalysisVO.GreenwaveData findMatchingData(
List<MainlineSchemeAnalysisVO.GreenwaveData> greenwaveData) {
Calendar now = Calendar.getInstance();
String currentDayType = getDayType(now);
String currentTime = new SimpleDateFormat("HH:mm").format(now.getTime());
for (MainlineSchemeAnalysisVO.GreenwaveData data : greenwaveData) {
String name = data.getName();
// 旅游路 东向西 转山西路至霞景路路段:正向绿波 工作日 07:00-07:40
String[] split1 = name.split(" ");
String dayType = split1[3];
Pattern pattern = Pattern.compile(".*?(\\d{2}:\\d{2}-\\d{2}:\\d{2})");
Matcher matcher = pattern.matcher(name);
if (matcher.matches()) {
String timeRange = matcher.group(1);
String[] times = timeRange.split("-");
try {
Date startTime = new SimpleDateFormat("HH:mm").parse(times[0]);
Date endTime = new SimpleDateFormat("HH:mm").parse(times[1]);
Date currentTimeDate = new SimpleDateFormat("HH:mm").parse(currentTime);
if (currentTimeDate.after(startTime) && currentTimeDate.before(endTime)) {
if (!dayType.equals("工作日") && !dayType.equals("周末")) {
SimpleDateFormat sdf = new SimpleDateFormat("M月d日");
String currentDate = sdf.format(now.getTime());
if (dayType.equals(currentDate)) {
return data;
}
} else if ((dayType.equals("工作日") && currentDayType.equals("工作日"))
|| (dayType.equals("周末") && currentDayType.equals("周末"))) {
return data;
}
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
return null;
}
private String getDayType(Calendar calendar) {
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
return "周末";
} else {
return "工作日";
}
}
private void setMetrics(GreenwaveCrossMetricsVO greenwaveCrossMetricsVO, GreenwaveCrossPO greenwaveCrossPO, private void setMetrics(GreenwaveCrossMetricsVO greenwaveCrossMetricsVO, GreenwaveCrossPO greenwaveCrossPO,
List<CrossTurnDataHistPO> listForNoPark, List<CrossTurnDataHistPO> listForPhaseQueue) { List<CrossTurnDataHistPO> listForNoPark, List<CrossTurnDataHistPO> listForPhaseQueue) {
if (CollectionUtil.isNotEmpty(listForNoPark) && CollectionUtil.isNotEmpty(listForPhaseQueue)) { if (CollectionUtil.isNotEmpty(listForNoPark) && CollectionUtil.isNotEmpty(listForPhaseQueue)) {
......
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