Commit 386ff6e1 authored by hanbing's avatar hanbing

方案管理-运行计划,修改执行的日计划为列表

parent c1e59458
......@@ -25,14 +25,6 @@ public class RunningPlanDTO {
@NoArgsConstructor
@Data
public static class DailyPlanListElement {
/**
* planNo : P01
* name : 计划名1
* startTime : 07:00
* endTime : 09:00
* schemeName : 方案名1
*/
@ApiModelProperty(value = "计划编号", required = true)
private String planNo;
@ApiModelProperty(value = "日计划名", required = true)
......@@ -54,18 +46,17 @@ public class RunningPlanDTO {
@NoArgsConstructor
@Data
public static class SchedulesPlanListElement {
/**
* scheduleNo : S01
* name : 运行计划名1
* week : [1,2,3,4,5]
* specialDate : null
* planName : 计划名1
*/
@ApiModelProperty(value = "运行计划编号", required = true)
private String scheduleNo;
@ApiModelProperty(value = "运行计划名", required = true)
private String name;
@ApiModelProperty(value = "执行的日计划列表", required = true)
private List<ExecListElement> execList;
}
@NoArgsConstructor
@Data
public static class ExecListElement {
@ApiModelProperty(value = "星期:1周一,2周二,3周三,4周四,5周五,6周六,7周日", required = true)
private List<Integer> week;
@ApiModelProperty(value = "特殊日期列表,格式 2023-01-28", required = true)
......
......@@ -24,6 +24,8 @@ import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Kent HAN
......@@ -87,20 +89,34 @@ public class RunningPlanServiceImpl implements RunningPlanService {
for (CrossSchedulesPO crossSchedulesPO : crossSchedulesPOList) {
String scheduleNo = crossSchedulesPO.getScheduleNo();
String name = crossSchedulesPO.getName();
// 获取调度ID
CrossSchedulesPO schedulesPO = crossSchedulesMapper.selectByCrossIdAndScheduleNo(crossId, scheduleNo);
Integer schedulesId = schedulesPO.getId();
// 根据路口ID和调度ID查询调度计划关系
List<CrossSchedulesPlanPO> crossSchedulesPlanPOList =
crossSchedulesPlanMapper.selectByCrossIdAndSchedulesId(crossId, schedulesId);
// 构造结果集
RunningPlanDTO.SchedulesPlanListElement schedulesPlan = new RunningPlanDTO.SchedulesPlanListElement();
schedulesPlan.setScheduleNo(scheduleNo);
schedulesPlan.setName(name);
// 构造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
CrossSchedulesPO schedulesPO = crossSchedulesMapper.selectByCrossIdAndScheduleNo(crossId, scheduleNo);
Integer schedulesId = schedulesPO.getId();
// 根据路口ID、调度ID和计划ID查询调度计划关系
List<CrossSchedulesPlanPO> crossSchedulesPlanPOList =
crossSchedulesPlanMapper.selectByCrossIdAndSchedulesId(crossId, schedulesId);
Map<Integer, List<CrossSchedulesPlanPO>> collectMap = crossSchedulesPlanPOList.stream()
.collect(Collectors.groupingBy(CrossSchedulesPlanPO::getPlanId));
for (Map.Entry<Integer, List<CrossSchedulesPlanPO>> entry : collectMap.entrySet()) {
RunningPlanDTO.ExecListElement execListElement = new RunningPlanDTO.ExecListElement();
List<Integer> week = new ArrayList<>();
List<String> specialDateList = new ArrayList<>();
Integer planId = 0;
for (CrossSchedulesPlanPO crossSchedulesPlanPO : crossSchedulesPlanPOList) {
Integer planId = entry.getKey();
List<CrossSchedulesPlanPO> secondList = entry.getValue();
for (CrossSchedulesPlanPO crossSchedulesPlanPO : secondList) {
Integer day = crossSchedulesPlanPO.getWeek();
if (day == 0) { // 特殊日期
Date specialDate = crossSchedulesPlanPO.getSpecialDate();
......@@ -108,15 +124,14 @@ public class RunningPlanServiceImpl implements RunningPlanService {
} else {
week.add(day);
}
planId = crossSchedulesPlanPO.getPlanId();
}
schedulesPlan.setWeek(week);
schedulesPlan.setSpecialDateList(specialDateList);
execListElement.setWeek(week);
execListElement.setSpecialDateList(specialDateList);
CrossPlanPO crossPlanPO = crossPlanMapper.selectById(planId);
schedulesPlan.setPlanName(crossPlanPO.getName());
schedulesPlanList.add(schedulesPlan);
execListElement.setPlanName(crossPlanPO.getName());
execList.add(execListElement);
}
return schedulesPlanList;
return execList;
}
private List<RunningPlanDTO.DailyPlanListElement> buildDailyPlanList(String crossId) {
......@@ -136,17 +151,21 @@ public class RunningPlanServiceImpl implements RunningPlanService {
crossSchedulesPO.setCrossId(crossId);
crossSchedulesMapper.insertOne(crossSchedulesPO);
Integer crossSchedulesId = crossSchedulesPO.getId();
// 根据路口ID和计划名获取计划ID
String planName = schedulesPlan.getPlanName();
CrossPlanPO crossPlanPO = crossPlanMapper.selectByCrossIdAndName(crossId, planName);
Integer planId = crossPlanPO.getId();
// 更新调度计划关系表
updateCrossSchedulesPlan(crossId, schedulesPlan, crossSchedulesId, planId);
// 遍历执行的日计划列表
List<RunningPlanDTO.ExecListElement> execList = schedulesPlan.getExecList();
for (RunningPlanDTO.ExecListElement execListElement : execList) {
// 根据路口ID和计划名获取计划ID
String planName = execListElement.getPlanName();
CrossPlanPO crossPlanPO = crossPlanMapper.selectByCrossIdAndName(crossId, planName);
Integer planId = crossPlanPO.getId();
// 更新调度计划关系表
updateCrossSchedulesPlan(crossId, execListElement, crossSchedulesId, planId);
}
}
}
private void updateCrossSchedulesPlan(String crossId, RunningPlanDTO.SchedulesPlanListElement schedulesPlan,
Integer crossSchedulesId, Integer planId) throws ParseException {
private void updateCrossSchedulesPlan(String crossId, RunningPlanDTO.ExecListElement schedulesPlan,
Integer crossSchedulesId, Integer planId) throws ParseException {
List<Integer> week = schedulesPlan.getWeek();
if (week == null || week.size() == 0) { // 特殊日期
List<String> specialDateList = schedulesPlan.getSpecialDateList();
......@@ -217,10 +236,13 @@ public class RunningPlanServiceImpl implements RunningPlanService {
private static void checkSpecialDate(RunningPlanDTO runningPlanDTO) {
List<RunningPlanDTO.SchedulesPlanListElement> schedulesPlanList = runningPlanDTO.getSchedulesPlanList();
for (RunningPlanDTO.SchedulesPlanListElement schedulesPlan : schedulesPlanList) {
List<Integer> week = schedulesPlan.getWeek();
List<String> specialDateList = schedulesPlan.getSpecialDateList();
if (week != null && week.size() > 0 && !CollectionUtil.isEmpty(specialDateList)) {
throw new WeekException("不能同时有星期选择和日期选择");
List<RunningPlanDTO.ExecListElement> execList = schedulesPlan.getExecList();
for (RunningPlanDTO.ExecListElement execListElement : execList) {
List<Integer> week = execListElement.getWeek();
List<String> specialDateList = execListElement.getSpecialDateList();
if (CollectionUtil.isNotEmpty(week) && CollectionUtil.isNotEmpty(specialDateList)) {
throw new WeekException("不能同时有星期选择和日期选择");
}
}
}
}
......
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