Commit 9ff4f78e authored by hanbing's avatar hanbing

方案管理-方案下发,强制方案下发

parent d8d1e287
......@@ -4,6 +4,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.wanji.feign.pojo.result.JsonViewObject;
import net.wanji.web.dto.ScheduleIdDTO;
import net.wanji.web.dto.SchemeIdDTO;
import net.wanji.web.service.impl.SchemeSendServiceImpl;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -31,4 +32,11 @@ public class PlanSendController {
JsonViewObject jsonViewObject = schemeSendService.scheduleSend(scheduleIdDTO);
return jsonViewObject;
}
@ApiOperation(value = "强制方案", notes = "强制方案")
@PostMapping("/schemeSend")
public JsonViewObject schemeSend(@RequestBody SchemeIdDTO schemeIdDTO) {
JsonViewObject jsonViewObject = schemeSendService.schemeSend(schemeIdDTO);
return jsonViewObject;
}
}
......@@ -20,6 +20,8 @@ public class SaveSchemeConfigDTO {
private List<PhaseScheme> phaseSchemeList; // 方案列表
@Data
public static class PhaseScheme {
@ApiModelProperty(value = "方案ID", required = true)
private Integer schemeId;
@ApiModelProperty(value = "方案号", required = true)
private String schemeNo;
@ApiModelProperty(value = "方案名称", required = true)
......
package net.wanji.web.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 方案下发-强制方案输入参数
*
* @author Kent HAN
* @date 2022/12/20 10:17
*/
@Data
public class SchemeIdDTO {
@ApiModelProperty(value = "路口ID,如:c7e7b1f352dd4acab4a60088eb391cca", required = true)
private String crossId;
@ApiModelProperty(value = "方案ID", required = true)
private Integer schemeId;
}
package net.wanji.web.mapper.scheme;
import io.lettuce.core.dynamic.annotation.Param;
import net.wanji.web.po.scheme.CrossSchemePO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
......@@ -31,4 +31,6 @@ public interface CrossSchemeMapper {
CrossSchemePO selectByCrossIdAndSchemeName(@Param("crossId") String crossId,
@Param("schemeName") String schemeName);
CrossSchemePO selectById(@Param("id") Integer id);
}
......@@ -2,6 +2,7 @@ package net.wanji.web.service;
import net.wanji.feign.pojo.result.JsonViewObject;
import net.wanji.web.dto.ScheduleIdDTO;
import net.wanji.web.dto.SchemeIdDTO;
/**
* @author Kent HAN
......@@ -9,4 +10,6 @@ import net.wanji.web.dto.ScheduleIdDTO;
*/
public interface SchemeSendService {
JsonViewObject scheduleSend(ScheduleIdDTO scheduleIdDTO);
JsonViewObject schemeSend(SchemeIdDTO schemeIdDTO);
}
......@@ -2,12 +2,18 @@ package net.wanji.web.service.impl;
import net.wanji.feign.pojo.result.JsonViewObject;
import net.wanji.feign.pojo.vo.ScheduleSendVO;
import net.wanji.feign.pojo.vo.SchemeSendVO;
import net.wanji.feign.service.UtcFeignClients;
import net.wanji.web.dto.ScheduleIdDTO;
import net.wanji.web.dto.SchemeIdDTO;
import net.wanji.web.mapper.scheme.CrossPhaseMapper;
import net.wanji.web.mapper.scheme.CrossPlanMapper;
import net.wanji.web.mapper.scheme.CrossSchedulesPlanMapper;
import net.wanji.web.mapper.scheme.CrossSchemeMapper;
import net.wanji.web.po.scheme.CrossPhasePO;
import net.wanji.web.po.scheme.CrossPlanPO;
import net.wanji.web.po.scheme.CrossSchedulesPlanPO;
import net.wanji.web.po.scheme.CrossSchemePO;
import net.wanji.web.service.SchemeSendService;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
......@@ -29,13 +35,17 @@ public class SchemeSendServiceImpl implements SchemeSendService {
private final UtcFeignClients utcFeignClients;
private final CrossSchedulesPlanMapper crossSchedulesPlanMapper;
private final CrossPlanMapper crossPlanMapper;
private final CrossSchemeMapper crossSchemeMapper;
private final CrossPhaseMapper crossPhaseMapper;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
public SchemeSendServiceImpl(@Qualifier("net.wanji.feign.service.UtcFeignClients") UtcFeignClients utcFeignClients, CrossSchedulesPlanMapper crossSchedulesPlanMapper, CrossPlanMapper crossPlanMapper) {
public SchemeSendServiceImpl(@Qualifier("net.wanji.feign.service.UtcFeignClients") UtcFeignClients utcFeignClients, CrossSchedulesPlanMapper crossSchedulesPlanMapper, CrossPlanMapper crossPlanMapper, CrossSchemeMapper crossSchemeMapper, CrossPhaseMapper crossPhaseMapper) {
this.utcFeignClients = utcFeignClients;
this.crossSchedulesPlanMapper = crossSchedulesPlanMapper;
this.crossPlanMapper = crossPlanMapper;
this.crossSchemeMapper = crossSchemeMapper;
this.crossPhaseMapper = crossPhaseMapper;
}
@Override
......@@ -48,62 +58,130 @@ public class SchemeSendServiceImpl implements SchemeSendService {
scheduleSendVO.setSchedules(schedules);
// 发送请求
JsonViewObject jsonViewObject = utcFeignClients.scheduleSend(scheduleSendVO);
if (Objects.isNull(jsonViewObject) || jsonViewObject.getCode() != 200) {
return jsonViewObject.fail("信号机方案下发-时间表下发UTC服务调用异常");
}
return jsonViewObject.success();
}
@Override
public JsonViewObject schemeSend(SchemeIdDTO schemeIdDTO) {
String crossId = schemeIdDTO.getCrossId();
SchemeSendVO schemeSendVO = new SchemeSendVO();
schemeSendVO.setCrossCode(crossId);
// 构造方案列表
Integer schemeId = schemeIdDTO.getSchemeId();
List<SchemeSendVO.Pattern> patternList = buildPatternList(crossId, schemeId);
schemeSendVO.setPatternList(patternList);
// 发送请求
JsonViewObject jsonViewObject = utcFeignClients.schemeSend(schemeSendVO);
if (Objects.isNull(jsonViewObject) || jsonViewObject.getCode() != 200) {
return jsonViewObject.fail("信号机方案下发-基础方案下发UTC服务调用异常");
}
return jsonViewObject.success();
}
private List<SchemeSendVO.Pattern> buildPatternList(String crossId, Integer schemeId) {
List<SchemeSendVO.Pattern> patternList = new ArrayList<>();
CrossSchemePO crossSchemePO = crossSchemeMapper.selectById(schemeId);
SchemeSendVO.Pattern pattern = new SchemeSendVO.Pattern();
pattern.setPatternNo(crossSchemePO.getSchemeNo());
pattern.setPatternName(crossSchemePO.getName());
pattern.setCycle(crossSchemePO.getCycle().toString());
pattern.setCoordPhase(crossSchemePO.getCoordPhase().toString());
pattern.setOffset(crossSchemePO.getOffset().toString());
// 构造环列表
List<SchemeSendVO.Pattern.Ring> rings = buildRings(crossId, schemeId);
pattern.setRings(rings);
patternList.add(pattern);
return patternList;
}
private List<SchemeSendVO.Pattern.Ring> buildRings(String crossId, Integer schemeId) {
List<SchemeSendVO.Pattern.Ring> rings = new ArrayList<>();
// 根据路口ID和方案ID查询相位集合,根据ringNo分组,特殊控制ringNo为0
List<CrossPhasePO> crossPhasePOList = crossPhaseMapper.selectByCrossIdAndSchemeId(crossId, schemeId);
Map<Integer, List<CrossPhasePO>> collectMap = crossPhasePOList.stream()
.collect(Collectors.groupingBy(CrossPhasePO::getRingNo));
for (Map.Entry<Integer, List<CrossPhasePO>> entry : collectMap.entrySet()) {
SchemeSendVO.Pattern.Ring ring = new SchemeSendVO.Pattern.Ring();
ring.setRingNo(entry.getKey().toString());
// 构造相位列表
List<CrossPhasePO> phases = entry.getValue();
List<SchemeSendVO.Pattern.Ring.Phase> phaseList = buildPhaseList(phases);
ring.setPhaseList(phaseList);
rings.add(ring);
}
return rings;
}
private List<SchemeSendVO.Pattern.Ring.Phase> buildPhaseList(List<CrossPhasePO> phases) {
List<SchemeSendVO.Pattern.Ring.Phase> phaseList = new ArrayList<>();
for (CrossPhasePO phasePO : phases) {
SchemeSendVO.Pattern.Ring.Phase phase = new SchemeSendVO.Pattern.Ring.Phase();
phase.setPhaseNo(phasePO.getPhaseNo());
phase.setPhaseName(phasePO.getName());
phase.setSort(phasePO.getSort().toString());
phase.setControlMode(phasePO.getControlMode().toString());
phase.setMinGreenTime(phasePO.getMinGreenTime().toString());
phase.setMaxGreenTime(phasePO.getMaxGreenTime().toString());
phase.setPhaseTime(phasePO.getPhaseTime().toString());
phase.setGreenTime(phasePO.getGreenTime().toString());
phase.setGreenFlashTime(phasePO.getGreenFlashTime().toString());
phase.setPedFlashTime(phasePO.getPedFlashTime().toString());
phase.setYellowTime(phasePO.getYellowTime().toString());
phase.setRedTime(phasePO.getRedTime().toString());
phaseList.add(phase);
}
return phaseList;
}
private List<ScheduleSendVO.Schedule> buildSchedules(String crossId, ScheduleIdDTO scheduleIdDTO) {
List<ScheduleSendVO.Schedule> schedules = new ArrayList<>();
Integer scheduleId = scheduleIdDTO.getScheduleId();
List<CrossSchedulesPlanPO> crossSchedulesPlanPOList =
crossSchedulesPlanMapper.selectByCrossIdAndSchedulesId(crossId, scheduleId);
// 根据计划ID分组
Map<Integer, List<CrossSchedulesPlanPO>> collectMap = crossSchedulesPlanPOList.stream()
.collect(Collectors.groupingBy(CrossSchedulesPlanPO::getPlanId));
for (Map.Entry<Integer, List<CrossSchedulesPlanPO>> entry : collectMap.entrySet()) {
ScheduleSendVO.Schedule schedule = new ScheduleSendVO.Schedule();
List<ScheduleSendVO.Schedule.Week> weeks = new ArrayList<>();
List<ScheduleSendVO.Schedule.SpecialDay> specialDays = new ArrayList<>();
for (CrossSchedulesPlanPO crossSchedulesPlanPO : entry.getValue()) {
Integer week = crossSchedulesPlanPO.getWeek();
Date specialDate = crossSchedulesPlanPO.getSpecialDate();
if (week != 0) {
// 添加至星期列表
addToWeeks(weeks, week, entry);
} else {
// 添加至特殊日期列表
addToSpecialDays(specialDays, specialDate, entry);
}
ScheduleSendVO.Schedule schedule = new ScheduleSendVO.Schedule();
List<ScheduleSendVO.Schedule.Week> weeks = new ArrayList<>();
List<ScheduleSendVO.Schedule.SpecialDay> specialDays = new ArrayList<>();
for (CrossSchedulesPlanPO crossSchedulesPlanPO : crossSchedulesPlanPOList) {
Integer planId = crossSchedulesPlanPO.getPlanId();
Integer week = crossSchedulesPlanPO.getWeek();
Date specialDate = crossSchedulesPlanPO.getSpecialDate();
if (week != 0) {
// 添加至星期列表
addToWeeks(weeks, week, planId);
} else {
// 添加至特殊日期列表
addToSpecialDays(specialDays, specialDate, planId);
}
schedule.setWeeks(weeks);
schedule.setSpecialDays(specialDays);
schedules.add(schedule);
}
schedule.setWeeks(weeks);
schedule.setSpecialDays(specialDays);
schedules.add(schedule);
return schedules;
}
private void addToSpecialDays(List<ScheduleSendVO.Schedule.SpecialDay> specialDays, Date specialDate,
Map.Entry<Integer, List<CrossSchedulesPlanPO>> entry) {
private void addToSpecialDays(List<ScheduleSendVO.Schedule.SpecialDay> specialDays,
Date specialDate, Integer planId) {
ScheduleSendVO.Schedule.SpecialDay specialDay = new ScheduleSendVO.Schedule.SpecialDay();
specialDay.setDateStr(sdf.format(specialDate));
String planNo = getPlanNo(entry);
String planNo = getPlanNo(planId);
specialDay.setPlanNo(Integer.parseInt(planNo));
specialDays.add(specialDay);
}
private void addToWeeks(List<ScheduleSendVO.Schedule.Week> weeks, Integer week,
Map.Entry<Integer, List<CrossSchedulesPlanPO>> entry) {
private void addToWeeks(List<ScheduleSendVO.Schedule.Week> weeks, Integer week, Integer planId) {
ScheduleSendVO.Schedule.Week weekObj = new ScheduleSendVO.Schedule.Week();
weekObj.setWeekNum(week);
String planNo = getPlanNo(entry);
String planNo = getPlanNo(planId);
weekObj.setPlanNo(Integer.parseInt(planNo));
weeks.add(weekObj);
}
private String getPlanNo(Map.Entry<Integer, List<CrossSchedulesPlanPO>> entry) {
Integer planId = entry.getKey();
private String getPlanNo(Integer planId) {
CrossPlanPO crossPlanPO = crossPlanMapper.selectById(planId);
return crossPlanPO.getPlanNo();
}
......
......@@ -118,6 +118,7 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
SaveSchemeConfigDTO.PhaseScheme phaseScheme = new SaveSchemeConfigDTO.PhaseScheme();
phaseScheme.setSchemeNo(crossSchemePO.getSchemeNo());
phaseScheme.setName(crossSchemePO.getName());
phaseScheme.setSchemeId(crossSchemePO.getId());
// 获取协调相位号
Integer coordPhaseId = crossSchemePO.getCoordPhase();
if (coordPhaseId != null) {
......
......@@ -60,5 +60,12 @@
where cross_id = #{crossId} and name = #{schemeName}
</select>
<select id="selectById" resultType="net.wanji.web.po.scheme.CrossSchemePO">
select
id,scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,gmt_create,gmt_modified
from t_base_cross_scheme
where id = #{id}
</select>
</mapper>
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