Commit d6d90541 authored by hanbing's avatar hanbing

[add] 新信号评价-方案评价-路口方案列表

parent 023e2b81
package net.wanji.opt.bo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author Kent HAN
* @date 2023/6/9 13:52
*/
@Data
@ApiModel(value = "CrossSchemeListBO", description = "路口方案列表入参")
public class CrossSchemeListBO {
@ApiModelProperty(value = "路口编号", required = true)
private String crossId;
@ApiModelProperty(value = "方案编号/名称")
private String schemeNoOrName;
@ApiModelProperty(value = "策略编号 100030均衡调控 100152效率提升 100010安全保障")
private String strategyCode;
@ApiModelProperty(value = "星期:1周一,2周二,3周三,4周四,5周五,6周六,7周日,0特殊日期", required = true)
private Integer weekDay;
}
......@@ -6,8 +6,10 @@ import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.databus.bo.CrossIdBO;
import net.wanji.opt.bo.CrossSchemeListBO;
import net.wanji.opt.bo.ProblemSchemeBO;
import net.wanji.opt.service.impl.SchemeEvaluateServiceImpl;
import net.wanji.opt.vo.SchemeEvaluateCrossSchemeListVO;
import net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO;
import net.wanji.opt.vo.SchemeEvaluateStrategyMetricMenuVO;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -57,4 +59,16 @@ public class SchemeEvaluateController {
return JsonViewObject.newInstance().success(res);
}
@ApiOperation(value = "路口方案列表", notes = "路口方案列表", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/crossSchemeList",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = SchemeEvaluateCrossSchemeListVO.class),
})
public JsonViewObject crossSchemeList(@RequestBody CrossSchemeListBO crossSchemeListBO) {
List<SchemeEvaluateCrossSchemeListVO> res = schemeEvaluateService.crossSchemeList(crossSchemeListBO);
return JsonViewObject.newInstance().success(res);
}
}
\ No newline at end of file
package net.wanji.opt.service;
import net.wanji.databus.bo.CrossIdBO;
import net.wanji.opt.bo.CrossSchemeListBO;
import net.wanji.opt.bo.ProblemSchemeBO;
import net.wanji.opt.vo.SchemeEvaluateCrossSchemeListVO;
import net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO;
import net.wanji.opt.vo.SchemeEvaluateStrategyMetricMenuVO;
......@@ -11,4 +13,6 @@ public interface SchemeEvaluateService {
SchemeEvaluateProblemSchemeVO problemSchemeList(ProblemSchemeBO problemSchemeBO);
List<SchemeEvaluateStrategyMetricMenuVO> strategyMetricMenu(CrossIdBO crossIdBO);
List<SchemeEvaluateCrossSchemeListVO> crossSchemeList(CrossSchemeListBO crossSchemeListBO);
}
......@@ -2,15 +2,14 @@ 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;
import net.wanji.common.enums.StrategyAndMetricsEnum;
import net.wanji.databus.bo.CrossIdBO;
import net.wanji.databus.dao.entity.BaseCrossSchemePO;
import net.wanji.databus.dao.entity.CrossSectionPO;
import net.wanji.databus.dao.mapper.BaseCrossSchemeMapper;
import net.wanji.databus.dao.mapper.BaseCrossSectionMapper;
import net.wanji.databus.dao.mapper.CrossDataHistMapper;
import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.po.CrossDataHistPO;
import net.wanji.opt.bo.CrossSchemeListBO;
import net.wanji.opt.bo.ProblemSchemeBO;
import net.wanji.opt.dao.mapper.strategy.SceneMapper;
import net.wanji.opt.dao.mapper.strategy.SceneStrategyMapper;
......@@ -20,6 +19,7 @@ import net.wanji.opt.po.strategy.SceneStrategyPO;
import net.wanji.opt.po.strategy.StrategyPO;
import net.wanji.opt.service.SchemeEvaluateService;
import net.wanji.opt.vo.RunningEvaluateMetricsDetailVO;
import net.wanji.opt.vo.SchemeEvaluateCrossSchemeListVO;
import net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO;
import net.wanji.opt.vo.SchemeEvaluateStrategyMetricMenuVO;
import org.jetbrains.annotations.NotNull;
......@@ -45,6 +45,8 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
private final SceneMapper sceneMapper;
private final SceneStrategyMapper sceneStrategyMapper;
private final StrategyMapper strategyMapper;
private final BaseCrossSchedulesMapper baseCrossSchedulesMapper;
private final BaseCrossSchedulesPlanMapper baseCrossSchedulesPlanMapper;
public SchemeEvaluateServiceImpl(CrossDataHistMapper crossDataHistMapper,
RunningEvaluateServiceImpl runningEvaluateService,
......@@ -52,7 +54,9 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
@Qualifier("baseCrossSchemeMapper") BaseCrossSchemeMapper baseCrossSchemeMapper,
@Qualifier("sceneMapper") SceneMapper sceneMapper,
@Qualifier("sceneStrategyMapper") SceneStrategyMapper sceneStrategyMapper,
@Qualifier("strategyMapper") StrategyMapper strategyMapper) {
@Qualifier("strategyMapper") StrategyMapper strategyMapper,
@Qualifier("baseCrossSchedulesMapper") BaseCrossSchedulesMapper baseCrossSchedulesMapper,
@Qualifier("baseCrossSchedulesPlanMapper") BaseCrossSchedulesPlanMapper baseCrossSchedulesPlanMapper) {
this.crossDataHistMapper = crossDataHistMapper;
this.runningEvaluateService = runningEvaluateService;
this.baseCrossSectionMapper = baseCrossSectionMapper;
......@@ -60,6 +64,8 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
this.sceneMapper = sceneMapper;
this.sceneStrategyMapper = sceneStrategyMapper;
this.strategyMapper = strategyMapper;
this.baseCrossSchedulesMapper = baseCrossSchedulesMapper;
this.baseCrossSchedulesPlanMapper = baseCrossSchedulesPlanMapper;
}
@Override
......@@ -129,6 +135,89 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
return voList;
}
@Override
public List<SchemeEvaluateCrossSchemeListVO> crossSchemeList(CrossSchemeListBO crossSchemeListBO) {
String crossId = crossSchemeListBO.getCrossId();
String schemeNoOrName = crossSchemeListBO.getSchemeNoOrName();
String strategyCode = crossSchemeListBO.getStrategyCode();
// 查找方案
List<BaseCrossSchemePO> baseCrossSchemePOList = new ArrayList<>();
if (ObjectUtil.isNotEmpty(schemeNoOrName)) {
if (isNumeric(schemeNoOrName)) { // 方案号
String schemeNo = schemeNoOrName;
BaseCrossSchemePO baseCrossSchemePO = baseCrossSchemeMapper.selectByCrossIdAndSchemeNo(
crossId, Integer.parseInt(schemeNo));
baseCrossSchemePOList.add(baseCrossSchemePO);
} else { // 方案名模糊搜索
String schemeName = schemeNoOrName;
baseCrossSchemePOList = baseCrossSchemeMapper.selectByCrossIdAndPartialSchemeName(
crossId, schemeName);
}
} else { // 全部方案
baseCrossSchemePOList = baseCrossSchemeMapper.selectByCrossId(crossId);
}
Integer weekDay = crossSchemeListBO.getWeekDay();
// 找出当前路口已执行的调度,在某天对应的计划
BaseCrossSchedulesPO baseCrossSchedulesPO = baseCrossSchedulesMapper.selectExecByCrossId(crossId);
Integer scheduleId = baseCrossSchedulesPO.getId();
List<BaseCrossSchedulesPlanPO> baseCrossSchedulesPlanPOList =
baseCrossSchedulesPlanMapper.selectByCrossIdAndSchedulesId(crossId, scheduleId);
List<BaseCrossSchedulesPlanPO> filteredList = baseCrossSchedulesPlanPOList.stream()
.filter(po -> po.getWeek().equals(weekDay))
.collect(Collectors.toList());
List<SchemeEvaluateCrossSchemeListVO> res = new ArrayList<>();
// 根据计划 ID 和方案 ID,获取时段信息
for (BaseCrossSchedulesPlanPO baseCrossSchedulesPlanPO : filteredList) {
Integer planId = baseCrossSchedulesPlanPO.getPlanId();
for (BaseCrossSchemePO baseCrossSchemePO : baseCrossSchemePOList) {
Integer schemeId = baseCrossSchemePO.getId();
List<CrossSectionPO> crossSectionPOList = baseCrossSectionMapper.selectByCrossIdPlanIdAndSchemeId(
crossId, planId, schemeId);
// todo 按控制模式和策略入参筛选结果
for (CrossSectionPO crossSectionPO : crossSectionPOList) {
SchemeEvaluateCrossSchemeListVO vo =
buildSchemeEvaluateCrossSchemeListVO(baseCrossSchemePO, crossSectionPO);
res.add(vo);
}
}
}
// 特殊日期根据方案 ID 筛选重复方案
if (weekDay == 0) {
List<SchemeEvaluateCrossSchemeListVO> uniqueList = res.stream()
.collect(Collectors.toMap(
SchemeEvaluateCrossSchemeListVO::getSchemeId,
vo -> vo,
(existing, replacement) -> existing))
.values()
.stream()
.collect(Collectors.toList());
return uniqueList;
}
return res;
}
@NotNull
private static SchemeEvaluateCrossSchemeListVO buildSchemeEvaluateCrossSchemeListVO
(BaseCrossSchemePO baseCrossSchemePO, CrossSectionPO crossSectionPO) {
SchemeEvaluateCrossSchemeListVO vo = new SchemeEvaluateCrossSchemeListVO();
vo.setSchemeName(baseCrossSchemePO.getName());
vo.setSchemeId(baseCrossSchemePO.getId());
vo.setStartTime(crossSectionPO.getStartTime());
vo.setEndTime(crossSectionPO.getEndTime());
vo.setSectionId(crossSectionPO.getId());
vo.setSchemeNo(baseCrossSchemePO.getSchemeNo());
vo.setCycle(baseCrossSchemePO.getCycle());
vo.setNote("");
return vo;
}
private boolean isNumeric(String str) {
return str != null && str.matches("[0-9]+");
}
private List<SchemeEvaluateProblemSchemeVO.BySchemeVO> buildProblemSchemeListByScheme(
Map<Date, List<RunningEvaluateMetricsDetailVO.ProblemScheme>> dateSchemesMap) {
// 使用一个Map来临时存储按方案名称分组的数据
......
package net.wanji.opt.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author Kent HAN
* @date 2023/2/9 8:38
*/
@Data
@NoArgsConstructor
@ApiModel(value = "SchemeEvaluateCrossSchemeListVO", description = "路口方案列表")
public class SchemeEvaluateCrossSchemeListVO {
@ApiModelProperty(value = "方案名称")
private String schemeName;
@ApiModelProperty(value = "方案ID")
private Integer schemeId;
@ApiModelProperty(value = "开始时间")
private String startTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
@ApiModelProperty(value = "时段ID")
private Integer sectionId ;
@ApiModelProperty(value = "方案编号")
private String schemeNo;
@ApiModelProperty(value = "周期")
private Integer cycle;
@ApiModelProperty(value = "备注")
private String note;
}
......@@ -52,4 +52,6 @@ public interface BaseCrossSchemeMapper {
BaseCrossSchemePO selectByCrossIdAndSchemeNo(@Param("crossId") String crossId,
@Param("schemeNo") Integer schemeNo);
List<BaseCrossSchemePO> selectByCrossIdAndPartialSchemeName(String crossId, String schemeName);
}
......@@ -28,4 +28,6 @@ public interface BaseCrossSectionMapper {
void updateControlMode(Integer sectionId, Integer controlMode);
List<CrossSectionPO> selectByCrossId(String crossId);
List<CrossSectionPO> selectByCrossIdPlanIdAndSchemeId(String crossId, Integer planId, Integer schemeId);
}
......@@ -18,6 +18,10 @@
<result property="gmtModified" column="gmt_modified"/>
</resultMap>
<sql id="baseColumnList">
id,scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status,gmt_create,gmt_modified
</sql>
<!-- 查询方案基础信息列表 -->
<select id="listCrossSchemeInfo" parameterType="String" resultMap="BaseResultMap">
select
......@@ -158,4 +162,14 @@
where cross_id = #{crossId} and scheme_no = #{schemeNo}
</select>
<select id="selectByCrossIdAndPartialSchemeName"
resultType="net.wanji.databus.dao.entity.BaseCrossSchemePO">
select <include refid="baseColumnList"/>
from t_base_cross_scheme
where cross_id = #{crossId}
<if test="schemeName != null and schemeName != ''">
AND name LIKE CONCAT('%',#{schemeName},'%')
</if>
</select>
</mapper>
......@@ -75,5 +75,11 @@
where cross_id = #{crossId}
</select>
<select id="selectByCrossIdPlanIdAndSchemeId" resultType="net.wanji.databus.dao.entity.CrossSectionPO">
select <include refid="Base_Column_list"/>
from t_base_cross_section
where cross_id = #{crossId} and plan_id = #{planId} and scheme_id = #{schemeId}
</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