Commit cd882d04 authored by hanbing's avatar hanbing

[update] 修改获取当前计划逻辑

parent a88921c6
......@@ -527,7 +527,8 @@ public class CrossManageServiceImpl implements CrossManageService {
return planId;
}
}
} else if (CollectionUtil.isNotEmpty(week)) {
}
if (CollectionUtil.isNotEmpty(week)) {
for (Integer day : week) {
// 1表示周日,2表示周一
int today = DateUtil.dayOfWeek(datetime);
......
package net.wanji.opt.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
......@@ -9,10 +10,9 @@ import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.common.utils.tool.TimeArrayUtil;
import net.wanji.databus.bo.CrossIdAndStartEndDateBO;
import net.wanji.databus.bo.CrossIdBO;
import net.wanji.databus.dao.entity.BaseCrossDirInfoPO;
import net.wanji.databus.dao.entity.BaseCrossSchemePO;
import net.wanji.databus.dao.entity.CrossSectionPO;
import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dto.RunningPlanDTO;
import net.wanji.databus.po.*;
import net.wanji.databus.vo.RunningEvaluateCrossListVO;
import net.wanji.opt.bo.CrossNameBO;
......@@ -47,6 +47,9 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
private final BaseCrossTurnInfoMapper baseCrossTurnInfoMapper;
private final LaneInfoMapper laneInfoMapper;
private final BaseCrossInfoMapper baseCrossInfoMapper;
private final BaseCrossPlanMapper baseCrossPlanMapper;
private final BaseCrossSchedulesMapper baseCrossSchedulesMapper;
private final BaseCrossSchedulesPlanMapper baseCrossSchedulesPlanMapper;
public RunningEvaluateServiceImpl(CrossDataRealtimeMapper crossDataRealtimeMapper,
CrossDataHistMapper crossDataHistMapper,
......@@ -55,7 +58,10 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
@Qualifier("baseCrossDirInfoMapper") BaseCrossDirInfoMapper baseCrossDirInfoMapper,
@Qualifier("baseCrossTurnInfoMapper") BaseCrossTurnInfoMapper baseCrossTurnInfoMapper,
@Qualifier("laneInfoMapper") LaneInfoMapper laneInfoMapper,
@Qualifier("baseCrossInfoMapper") BaseCrossInfoMapper baseCrossInfoMapper) {
@Qualifier("baseCrossInfoMapper") BaseCrossInfoMapper baseCrossInfoMapper,
@Qualifier("baseCrossPlanMapper") BaseCrossPlanMapper baseCrossPlanMapper,
@Qualifier("baseCrossSchedulesMapper") BaseCrossSchedulesMapper baseCrossSchedulesMapper,
@Qualifier("baseCrossSchedulesPlanMapper") BaseCrossSchedulesPlanMapper baseCrossSchedulesPlanMapper) {
this.crossDataRealtimeMapper = crossDataRealtimeMapper;
this.crossDataHistMapper = crossDataHistMapper;
this.baseCrossSectionMapper = baseCrossSectionMapper;
......@@ -64,6 +70,9 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
this.baseCrossTurnInfoMapper = baseCrossTurnInfoMapper;
this.laneInfoMapper = laneInfoMapper;
this.baseCrossInfoMapper = baseCrossInfoMapper;
this.baseCrossPlanMapper = baseCrossPlanMapper;
this.baseCrossSchedulesMapper = baseCrossSchedulesMapper;
this.baseCrossSchedulesPlanMapper = baseCrossSchedulesPlanMapper;
}
@Override
......@@ -296,7 +305,12 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
String eventStartTime = sdf.format(abnormalEventStartTime);
String eventEndTime = sdf.format(abnormalEventEndTime);
List<CrossSectionPO> crossSectionPOList = baseCrossSectionMapper.selectByCrossId(crossId);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
Date datetime = new Date();
String dateStr = sdf2.format(datetime);
// 获取当前计划ID
Integer planId = findPlanId(datetime, dateStr, crossId);
List<CrossSectionPO> crossSectionPOList = baseCrossSectionMapper.selectByCrossAndPlan(crossId, planId);
for (CrossSectionPO crossSectionPO : crossSectionPOList) {
String sectionStartTime = crossSectionPO.getStartTime();
String sectionEndTime = crossSectionPO.getEndTime();
......@@ -399,7 +413,12 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
String eventStartTime = sdf.format(abnormalEventStartTime);
String eventEndTime = sdf.format(abnormalEventEndTime);
List<CrossSectionPO> crossSectionPOList = baseCrossSectionMapper.selectByCrossId(crossId);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
Date datetime = new Date();
String dateStr = sdf2.format(datetime);
// 获取当前计划ID
Integer planId = findPlanId(datetime, dateStr, crossId);
List<CrossSectionPO> crossSectionPOList = baseCrossSectionMapper.selectByCrossAndPlan(crossId, planId);
for (CrossSectionPO crossSectionPO : crossSectionPOList) {
String sectionStartTime = crossSectionPO.getStartTime();
String sectionEndTime = crossSectionPO.getEndTime();
......@@ -416,6 +435,145 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
return schemeIdSet.size();
}
private Integer findPlanId(Date datetime, String dateStr, String crossId) {
CrossIdBO crossIdBO = new CrossIdBO();
crossIdBO.setCrossId(crossId);
RunningPlanDTO runningPlanDTO = listRunningPlan(crossIdBO);
List<RunningPlanDTO.SchedulesPlanListElement> schedulesPlanList = runningPlanDTO.getSchedulesPlanList();
for (RunningPlanDTO.SchedulesPlanListElement schedulesPlan : schedulesPlanList) {
List<RunningPlanDTO.ExecListElement> execList = schedulesPlan.getExecList();
for (RunningPlanDTO.ExecListElement execListElement : execList) {
// 先查询特殊日期,再查询星期
List<String> specialDateList = execListElement.getSpecialDateList();
List<Integer> week = execListElement.getWeek();
if (CollectionUtil.isNotEmpty(specialDateList)) {
for (String specialDate : specialDateList) {
String substring = specialDate.substring(0, 10);
if (Objects.equals(dateStr, substring)) {
Integer planId = execListElement.getPlanId();
return planId;
}
}
}
if (CollectionUtil.isNotEmpty(week)) {
for (Integer day : week) {
// 1表示周日,2表示周一
int today = DateUtil.dayOfWeek(datetime);
today -= 1;
if (today == 0) {
today = 7;
}
if (day == today) {
Integer planId = execListElement.getPlanId();
return planId;
}
}
}
}
}
return null;
}
public RunningPlanDTO listRunningPlan(CrossIdBO crossIdBO) {
RunningPlanDTO runningPlanDTO = new RunningPlanDTO();
String crossId = crossIdBO.getCrossId();
runningPlanDTO.setCrossId(crossId);
// 构造dailyPlanList
List<RunningPlanDTO.DailyPlanListElement> dailyPlanList = buildDailyPlanList(crossId);
runningPlanDTO.setDailyPlanList(dailyPlanList);
// 构造schedulesPlanList
List<RunningPlanDTO.SchedulesPlanListElement> schedulesPlanList = buildSchedulesPlanList(crossId);
runningPlanDTO.setSchedulesPlanList(schedulesPlanList);
return runningPlanDTO;
}
private List<RunningPlanDTO.DailyPlanListElement> buildDailyPlanList(String crossId) {
List<RunningPlanDTO.DailyPlanListElement> dailyPlanList = new ArrayList<>();
dailyPlanList = baseCrossPlanMapper.selectDailyPlanList(crossId);
if (CollectionUtil.isEmpty(dailyPlanList)) {
List<BaseCrossPlanPO> crossPlanPOList = baseCrossPlanMapper.selectByCrossId(crossId);
if (CollectionUtil.isNotEmpty(crossPlanPOList)) {
for (BaseCrossPlanPO baseCrossPlanPO : crossPlanPOList) {
RunningPlanDTO.DailyPlanListElement dailyPlan = new RunningPlanDTO.DailyPlanListElement();
dailyPlan.setPlanNo(baseCrossPlanPO.getPlanNo());
dailyPlan.setName(baseCrossPlanPO.getName());
dailyPlan.setTimeList(new ArrayList<>());
dailyPlanList.add(dailyPlan);
}
}
} else {
for (RunningPlanDTO.DailyPlanListElement dailyPlan : dailyPlanList) {
List<RunningPlanDTO.TimeListElement> timeList = dailyPlan.getTimeList();
for (RunningPlanDTO.TimeListElement timeListElement : timeList) {
String[] startEndTime = new String[2];
String startTime = timeListElement.getStartTime();
String endTime = timeListElement.getEndTime();
startEndTime[0] = startTime;
startEndTime[1] = endTime;
timeListElement.setStartEndTime(startEndTime);
}
}
}
return dailyPlanList;
}
private List<RunningPlanDTO.SchedulesPlanListElement> buildSchedulesPlanList(String crossId) {
List<RunningPlanDTO.SchedulesPlanListElement> schedulesPlanList = new ArrayList<>();
List<BaseCrossSchedulesPO> baseCrossSchedulesPOList = baseCrossSchedulesMapper.selectByCrossId(crossId);
for (BaseCrossSchedulesPO baseCrossSchedulesPO : baseCrossSchedulesPOList) {
String scheduleNo = baseCrossSchedulesPO.getScheduleNo();
String name = baseCrossSchedulesPO.getName();
Integer crossSchedulesPOId = baseCrossSchedulesPO.getId();
RunningPlanDTO.SchedulesPlanListElement schedulesPlan = new RunningPlanDTO.SchedulesPlanListElement();
schedulesPlan.setScheduleNo(scheduleNo);
schedulesPlan.setName(name);
schedulesPlan.setId(crossSchedulesPOId);
schedulesPlan.setStatus(baseCrossSchedulesPO.getStatus());
// 构造execList
List<RunningPlanDTO.ExecListElement> execList = buildExecList(crossId, scheduleNo);
schedulesPlan.setExecList(execList);
schedulesPlanList.add(schedulesPlan);
}
return schedulesPlanList;
}
private List<RunningPlanDTO.ExecListElement> buildExecList(String crossId, String scheduleNo) {
List<RunningPlanDTO.ExecListElement> execList = new ArrayList<>();
// 获取调度ID
BaseCrossSchedulesPO schedulesPO = baseCrossSchedulesMapper.selectByCrossIdAndScheduleNo(crossId, scheduleNo);
Integer schedulesId = schedulesPO.getId();
// 根据路口ID、调度ID和计划ID查询调度计划关系
List<BaseCrossSchedulesPlanPO> baseCrossSchedulesPlanPOList =
baseCrossSchedulesPlanMapper.selectByCrossIdAndSchedulesId(crossId, schedulesId);
Map<Integer, List<BaseCrossSchedulesPlanPO>> collectMap = baseCrossSchedulesPlanPOList.stream()
.collect(Collectors.groupingBy(BaseCrossSchedulesPlanPO::getPlanId));
for (Map.Entry<Integer, List<BaseCrossSchedulesPlanPO>> entry : collectMap.entrySet()) {
RunningPlanDTO.ExecListElement execListElement = new RunningPlanDTO.ExecListElement();
List<Integer> week = new ArrayList<>();
List<String> specialDateList = new ArrayList<>();
Integer planId = entry.getKey();
List<BaseCrossSchedulesPlanPO> secondList = entry.getValue();
for (BaseCrossSchedulesPlanPO baseCrossSchedulesPlanPO : secondList) {
Integer day = baseCrossSchedulesPlanPO.getWeek();
if (day == 0) { // 特殊日期
Date specialDate = baseCrossSchedulesPlanPO.getSpecialDate();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
specialDateList.add(sdf.format(specialDate));
} else {
week.add(day);
}
}
execListElement.setWeek(week);
execListElement.setSpecialDateList(specialDateList);
BaseCrossPlanPO baseCrossPlanPO = baseCrossPlanMapper.selectById(planId);
execListElement.setPlanName(baseCrossPlanPO.getName());
execListElement.setPlanId(baseCrossPlanPO.getId());
execList.add(execListElement);
}
return execList;
}
private boolean isTimeIntersecting(String startTime1, String endTime1, String startTime2, String endTime2) {
return !(endTime1.compareTo(startTime2) <= 0 || startTime1.compareTo(endTime2) >= 0);
}
......
package net.wanji.opt.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
/**
* @author Kent HAN
* @date 2023/2/9 8:38
......@@ -12,5 +17,44 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@ApiModel(value = "RunningEvaluateMetricsDetailVO", description = "评价指标查询返回值")
public class RunningEvaluateMetricsDetailVO {
@ApiModelProperty(value = "状态列表")
private List<ProblemStatus> problemStatusList;
@ApiModelProperty(value = "问题方案列表")
private List<ProblemScheme> schemeList;
// @ApiModelProperty(value = "指标列表")
// private List<CrossMetrics> metricsList;
@NoArgsConstructor
@Data
public static class ProblemStatus {
@ApiModelProperty(name = "路口状态 0正常 1 失衡 2 拥堵 3 溢出")
private String status;
@ApiModelProperty(value = "开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm", timezone = "GMT+8")
private Date startTime;
@ApiModelProperty(value = "结束时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm", timezone = "GMT+8")
private Date endTime;
@ApiModelProperty(value = "持续时长(分钟)")
private Integer durationMinutes;
}
@NoArgsConstructor
@Data
public static class ProblemScheme {
@ApiModelProperty(value = "方案名称")
private String patternName;
@ApiModelProperty(value = "开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm", timezone = "GMT+8")
private Date startTime;
@ApiModelProperty(value = "结束时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm", timezone = "GMT+8")
private Date endTime;
}
}
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