Commit 85c4f39b authored by hanbing's avatar hanbing

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

parent 2e5b5215
......@@ -15,8 +15,13 @@ import java.util.List;
public class SaveSchemeConfigDTO {
@ApiModelProperty(value = "路口ID", required = true)
private String crossId;
@ApiModelProperty(value = "配时方式 1阶段式 2环式", required = true)
private Integer timeType;
@ApiModelProperty(name = "当前方案ID",notes = "")
private Integer currentSchemeId;
private List<PhaseScheme> phaseSchemeList; // 方案列表
@Data
public static class PhaseScheme {
......
......@@ -3,10 +3,11 @@ package net.wanji.web.service.scheme.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
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.CrossPhasePO;
import net.wanji.databus.dao.entity.BaseCrossSchemePO;
import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dto.CrossAllSchemesDTO;
import net.wanji.databus.po.BaseCrossLightsPO;
import net.wanji.databus.po.CrossLaneLightsPO;
import net.wanji.databus.po.LaneInfoPO;
......@@ -20,9 +21,11 @@ import net.wanji.web.po.scheme.CrossAccompanyPhasePO;
import net.wanji.web.service.scheme.SchemeConfigService;
import net.wanji.web.vo.scheme.LaneIdsVO;
import net.wanji.web.vo.scheme.LightIdVO;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalTime;
import java.util.*;
import java.util.stream.Collectors;
......@@ -39,10 +42,11 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
private final BaseCrossPhaseLightsMapper baseCrossPhaseLightsMapper;
private final BaseCrossLightsMapper baseCrossLightsMapper;
private final CrossAccompanyPhaseMapper crossAccompanyPhaseMapper;
private final BaseCrossSectionMapper baseCrossSectionMapper;
public SchemeConfigServiceImpl(BaseCrossSchemeMapper baseCrossSchemeMapper, BaseCrossPhaseMapper baseCrossPhaseMapper,
LaneInfoMapper laneInfoMapper, BaseCrossLaneLightsMapper baseCrossLaneLightsMapper,
BaseCrossPhaseLightsMapper baseCrossPhaseLightsMapper, BaseCrossLightsMapper baseCrossLightsMapper, CrossAccompanyPhaseMapper crossAccompanyPhaseMapper) {
BaseCrossPhaseLightsMapper baseCrossPhaseLightsMapper, BaseCrossLightsMapper baseCrossLightsMapper, CrossAccompanyPhaseMapper crossAccompanyPhaseMapper, @Qualifier("baseCrossSectionMapper") BaseCrossSectionMapper baseCrossSectionMapper) {
this.baseCrossSchemeMapper = baseCrossSchemeMapper;
this.crossPhaseMapper = baseCrossPhaseMapper;
this.laneInfoMapper = laneInfoMapper;
......@@ -50,6 +54,7 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
this.baseCrossPhaseLightsMapper = baseCrossPhaseLightsMapper;
this.baseCrossLightsMapper = baseCrossLightsMapper;
this.crossAccompanyPhaseMapper = crossAccompanyPhaseMapper;
this.baseCrossSectionMapper = baseCrossSectionMapper;
}
@Override
......@@ -117,9 +122,76 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
saveSchemeConfigDTO.setPhaseSchemeList(sort);
// todo 暂时只有环式
saveSchemeConfigDTO.setTimeType(2);
saveSchemeConfigDTO.setCurrentSchemeId(calcCurrentSchemeId(crossId));
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;
import net.wanji.databus.dao.entity.CrossSectionPO;
import net.wanji.databus.dao.entity.CrossSectionPOExt;
import net.wanji.databus.dto.CrossAllSchemesDTO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
......@@ -41,4 +42,6 @@ public interface BaseCrossSectionMapper {
CrossSectionPO selectbyStartTimeCrossIdPlanId(String startTime, String crossId, Integer planId);
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 @@
</foreach>
</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>
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