Commit 85c4f39b authored by hanbing's avatar hanbing

[add] 统一信控-方案列表返回当前方案ID

parent 2e5b5215
...@@ -15,8 +15,13 @@ import java.util.List; ...@@ -15,8 +15,13 @@ import java.util.List;
public class SaveSchemeConfigDTO { public class SaveSchemeConfigDTO {
@ApiModelProperty(value = "路口ID", required = true) @ApiModelProperty(value = "路口ID", required = true)
private String crossId; private String crossId;
@ApiModelProperty(value = "配时方式 1阶段式 2环式", required = true) @ApiModelProperty(value = "配时方式 1阶段式 2环式", required = true)
private Integer timeType; private Integer timeType;
@ApiModelProperty(name = "当前方案ID",notes = "")
private Integer currentSchemeId;
private List<PhaseScheme> phaseSchemeList; // 方案列表 private List<PhaseScheme> phaseSchemeList; // 方案列表
@Data @Data
public static class PhaseScheme { public static class PhaseScheme {
......
...@@ -3,10 +3,11 @@ package net.wanji.web.service.scheme.impl; ...@@ -3,10 +3,11 @@ package net.wanji.web.service.scheme.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import net.wanji.databus.bo.CrossIdBO; import net.wanji.databus.bo.CrossIdBO;
import net.wanji.databus.dao.entity.BaseCrossSchemePO;
import net.wanji.databus.dao.entity.CrossPhaseLightsPO; import net.wanji.databus.dao.entity.CrossPhaseLightsPO;
import net.wanji.databus.dao.entity.CrossPhasePO; import net.wanji.databus.dao.entity.CrossPhasePO;
import net.wanji.databus.dao.entity.BaseCrossSchemePO;
import net.wanji.databus.dao.mapper.*; import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dto.CrossAllSchemesDTO;
import net.wanji.databus.po.BaseCrossLightsPO; import net.wanji.databus.po.BaseCrossLightsPO;
import net.wanji.databus.po.CrossLaneLightsPO; import net.wanji.databus.po.CrossLaneLightsPO;
import net.wanji.databus.po.LaneInfoPO; import net.wanji.databus.po.LaneInfoPO;
...@@ -20,9 +21,11 @@ import net.wanji.web.po.scheme.CrossAccompanyPhasePO; ...@@ -20,9 +21,11 @@ import net.wanji.web.po.scheme.CrossAccompanyPhasePO;
import net.wanji.web.service.scheme.SchemeConfigService; import net.wanji.web.service.scheme.SchemeConfigService;
import net.wanji.web.vo.scheme.LaneIdsVO; import net.wanji.web.vo.scheme.LaneIdsVO;
import net.wanji.web.vo.scheme.LightIdVO; import net.wanji.web.vo.scheme.LightIdVO;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.LocalTime;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -39,10 +42,11 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -39,10 +42,11 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
private final BaseCrossPhaseLightsMapper baseCrossPhaseLightsMapper; private final BaseCrossPhaseLightsMapper baseCrossPhaseLightsMapper;
private final BaseCrossLightsMapper baseCrossLightsMapper; private final BaseCrossLightsMapper baseCrossLightsMapper;
private final CrossAccompanyPhaseMapper crossAccompanyPhaseMapper; private final CrossAccompanyPhaseMapper crossAccompanyPhaseMapper;
private final BaseCrossSectionMapper baseCrossSectionMapper;
public SchemeConfigServiceImpl(BaseCrossSchemeMapper baseCrossSchemeMapper, BaseCrossPhaseMapper baseCrossPhaseMapper, public SchemeConfigServiceImpl(BaseCrossSchemeMapper baseCrossSchemeMapper, BaseCrossPhaseMapper baseCrossPhaseMapper,
LaneInfoMapper laneInfoMapper, BaseCrossLaneLightsMapper baseCrossLaneLightsMapper, LaneInfoMapper laneInfoMapper, BaseCrossLaneLightsMapper baseCrossLaneLightsMapper,
BaseCrossPhaseLightsMapper baseCrossPhaseLightsMapper, BaseCrossLightsMapper baseCrossLightsMapper, CrossAccompanyPhaseMapper crossAccompanyPhaseMapper) { BaseCrossPhaseLightsMapper baseCrossPhaseLightsMapper, BaseCrossLightsMapper baseCrossLightsMapper, CrossAccompanyPhaseMapper crossAccompanyPhaseMapper, @Qualifier("baseCrossSectionMapper") BaseCrossSectionMapper baseCrossSectionMapper) {
this.baseCrossSchemeMapper = baseCrossSchemeMapper; this.baseCrossSchemeMapper = baseCrossSchemeMapper;
this.crossPhaseMapper = baseCrossPhaseMapper; this.crossPhaseMapper = baseCrossPhaseMapper;
this.laneInfoMapper = laneInfoMapper; this.laneInfoMapper = laneInfoMapper;
...@@ -50,6 +54,7 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -50,6 +54,7 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
this.baseCrossPhaseLightsMapper = baseCrossPhaseLightsMapper; this.baseCrossPhaseLightsMapper = baseCrossPhaseLightsMapper;
this.baseCrossLightsMapper = baseCrossLightsMapper; this.baseCrossLightsMapper = baseCrossLightsMapper;
this.crossAccompanyPhaseMapper = crossAccompanyPhaseMapper; this.crossAccompanyPhaseMapper = crossAccompanyPhaseMapper;
this.baseCrossSectionMapper = baseCrossSectionMapper;
} }
@Override @Override
...@@ -117,9 +122,76 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -117,9 +122,76 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
saveSchemeConfigDTO.setPhaseSchemeList(sort); saveSchemeConfigDTO.setPhaseSchemeList(sort);
// todo 暂时只有环式 // todo 暂时只有环式
saveSchemeConfigDTO.setTimeType(2); saveSchemeConfigDTO.setTimeType(2);
saveSchemeConfigDTO.setCurrentSchemeId(calcCurrentSchemeId(crossId));
return saveSchemeConfigDTO; return saveSchemeConfigDTO;
} }
/**
* 获取当前方案ID
*/
private Integer calcCurrentSchemeId(String crossId) {
List<CrossAllSchemesDTO> dtoList = baseCrossSectionMapper.selectCrossAllSchemes(crossId);
// 先依据特殊日期
// 获取今天的年月日
Calendar todayCalendar = Calendar.getInstance();
todayCalendar.set(Calendar.HOUR_OF_DAY, 0);
todayCalendar.set(Calendar.MINUTE, 0);
todayCalendar.set(Calendar.SECOND, 0);
todayCalendar.set(Calendar.MILLISECOND, 0);
Date today = todayCalendar.getTime();
List<CrossAllSchemesDTO> filteredList1 = dtoList.stream()
.filter(dto -> dto.getWeek() != null && dto.getWeek() == 0)
.filter(dto -> {
if (dto.getSpecialDate() == null) {
return false;
}
Calendar specialDateCalendar = Calendar.getInstance();
specialDateCalendar.setTime(dto.getSpecialDate());
specialDateCalendar.set(Calendar.HOUR_OF_DAY, 0);
specialDateCalendar.set(Calendar.MINUTE, 0);
specialDateCalendar.set(Calendar.SECOND, 0);
specialDateCalendar.set(Calendar.MILLISECOND, 0);
return today.equals(specialDateCalendar.getTime()); // 今天与specialDate相同
})
.collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(filteredList1)) {
return getSchemeIdFromFilteredList(filteredList1);
}
// 再依据星期
// 获取今天是周几
Calendar calendar = Calendar.getInstance();
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
// Java Calendar 类中,周日为1,周一为2,依此类推。转换为(周一为1,周二为2... 周日为7)
int convertedDayOfWeek = dayOfWeek == 1 ? 7 : dayOfWeek - 1;
// 筛选出与今天星期相同的记录
List<CrossAllSchemesDTO> filteredListWeek = dtoList.stream()
.filter(dto -> dto.getWeek() == convertedDayOfWeek)
.collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(filteredListWeek)) {
return getSchemeIdFromFilteredList(filteredListWeek);
}
return null;
}
private static Integer getSchemeIdFromFilteredList(List<CrossAllSchemesDTO> filteredListWeek) {
// 获取当前系统时间的小时和分钟
LocalTime now = LocalTime.now();
Optional<CrossAllSchemesDTO> result = filteredListWeek.stream()
.filter(dto -> {
LocalTime start = LocalTime.parse(dto.getStartTime()); // 将 startTime 转换为 LocalTime
LocalTime end = LocalTime.parse(dto.getEndTime()); // 将 endTime 转换为 LocalTime
return (now.isAfter(start) || now.equals(start)) && now.isBefore(end); // 判断当前时间是否在 startTime 和 endTime 之间
})
.findFirst(); // 只会有一个元素
CrossAllSchemesDTO targetDto = result.get();
return targetDto.getSchemeId();
}
/** /**
* 构造方案列表 * 构造方案列表
* *
......
...@@ -2,6 +2,7 @@ package net.wanji.databus.dao.mapper; ...@@ -2,6 +2,7 @@ package net.wanji.databus.dao.mapper;
import net.wanji.databus.dao.entity.CrossSectionPO; import net.wanji.databus.dao.entity.CrossSectionPO;
import net.wanji.databus.dao.entity.CrossSectionPOExt; import net.wanji.databus.dao.entity.CrossSectionPOExt;
import net.wanji.databus.dto.CrossAllSchemesDTO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -41,4 +42,6 @@ public interface BaseCrossSectionMapper { ...@@ -41,4 +42,6 @@ public interface BaseCrossSectionMapper {
CrossSectionPO selectbyStartTimeCrossIdPlanId(String startTime, String crossId, Integer planId); CrossSectionPO selectbyStartTimeCrossIdPlanId(String startTime, String crossId, Integer planId);
List<CrossSectionPOExt> selectByCrossIdsAndStartTime(String startTime, List<String> crossList); List<CrossSectionPOExt> selectByCrossIdsAndStartTime(String startTime, List<String> crossList);
List<CrossAllSchemesDTO> selectCrossAllSchemes(String crossId);
} }
package net.wanji.databus.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author hfx
* @date 2023/1/12 9:15
* @desc 路口方向
*/
@Data
public class CrossAllSchemesDTO {
@ApiModelProperty(value = "路口ID")
private String crossId;
@ApiModelProperty(value = "开始时间")
private String startTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
@ApiModelProperty(value = "方案ID")
private Integer schemeId;
@ApiModelProperty(value = "计划名称")
private String planName;
@ApiModelProperty(value = "调度ID")
private Integer schedulesId ;
@ApiModelProperty(value = "星期")
private Integer week;
@ApiModelProperty(value = "特殊日期")
private Date specialDate;
@ApiModelProperty(value = "调度名称")
private String schedulesName;
}
...@@ -114,5 +114,19 @@ ...@@ -114,5 +114,19 @@
</foreach> </foreach>
</select> </select>
<select id="selectCrossAllSchemes" resultType="net.wanji.databus.dto.CrossAllSchemesDTO">
SELECT t1.cross_id, t1.start_time, t1.end_time, t1.scheme_id, t2.name as planName, t3.schedules_id,
t3.week, t3.special_date, t4.name as scheduleName
FROM t_base_cross_section t1
JOIN t_base_cross_plan t2
JOIN t_base_cross_schedules_plan t3
JOIN t_base_cross_schedules t4
ON t1.plan_id = t2.id
AND t2.id = t3.plan_id
AND t3.schedules_id = t4.id
WHERE t1.cross_id = #{crossId}
AND t4.status = 1
</select>
</mapper> </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