Commit 4e0dce3b authored by hanbing's avatar hanbing

[add] 诊断优化,根据强制方案返回调整时间

parent 9ea30edc
......@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.dto.CrossIdAndSchemeIdDTO;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.service.DiagnoService;
import net.wanji.opt.vo.CrossIdAndLocationVO;
......@@ -70,4 +71,16 @@ public class DiagnoController {
SchemeOptVO schemeOptVO = diagnoService.querySchemeOpt(crossIdDTO);
return JsonViewObject.newInstance().success(schemeOptVO);
}
@ApiOperation(value = "根据强制方案返回调整时间", notes = "根据强制方案返回调整时间", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/queryOptTime",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = SchemeOptVO.PhaseOptTime.class),
})
public JsonViewObject queryOptTime(@RequestBody CrossIdAndSchemeIdDTO crossIdAndSchemeIdDTO) {
List<SchemeOptVO.PhaseOptTime> phaseOptTimeList = diagnoService.queryOptTime(crossIdAndSchemeIdDTO);
return JsonViewObject.newInstance().success(phaseOptTimeList);
}
}
\ No newline at end of file
package net.wanji.opt.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 方案管理-路口配置-获取路口方向列表输入参数
*
* @author Kent HAN
* @date 2022/12/20 10:17
*/
@Data
public class CrossIdAndSchemeIdDTO {
@ApiModelProperty(value = "路口ID,如:14Q1409IRF0", required = true)
private String crossId;
@ApiModelProperty(value = "强制方案ID", required = true)
private Integer schemeId;
}
package net.wanji.opt.service;
import net.wanji.common.dto.CrossIdDTO;
import net.wanji.opt.dto.CrossIdAndSchemeIdDTO;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.vo.CrossIdAndLocationVO;
import net.wanji.opt.vo.SchemeOptVO;
......@@ -17,4 +18,6 @@ public interface DiagnoService {
List<CrossIdAndLocationVO> queryNeighborCross(CrossIdDTO crossIdDTO);
SchemeOptVO querySchemeOpt(CrossIdDTO crossIdDTO);
List<SchemeOptVO.PhaseOptTime> queryOptTime(CrossIdAndSchemeIdDTO crossIdAndSchemeIdDTO);
}
......@@ -8,14 +8,16 @@ import net.wanji.databus.dao.entity.RidInfoEntity;
import net.wanji.databus.dao.mapper.RidInfoMapper;
import net.wanji.opt.dao.mapper.CrossDirInfoMapper;
import net.wanji.opt.dao.mapper.CrossInfoMapper;
import net.wanji.opt.dao.mapper.CrossPhaseMapper;
import net.wanji.opt.dao.mapper.CrossSchemeMapper;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
import net.wanji.opt.dao.mapper.strategy.SceneMapper;
import net.wanji.opt.dao.mapper.strategy.SceneStrategyMapper;
import net.wanji.opt.dao.mapper.trend.CrossDataRealtimeMapper;
import net.wanji.opt.dto.CrossIdAndSchemeIdDTO;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.dto.strategy.QuerySceneDTO;
import net.wanji.opt.po.base.CrossInfoPO;
import net.wanji.opt.po.base.CrossPhasePO;
import net.wanji.opt.po.base.CrossSchemeOptLogPO;
import net.wanji.opt.po.base.CrossSchemePO;
import net.wanji.opt.po.strategy.ScenePO;
......@@ -30,6 +32,7 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
......@@ -48,9 +51,12 @@ public class DiagnoServiceImpl implements DiagnoService {
private final RidInfoMapper ridInfoMapper;
private final CrossSchemeOptLogMapper crossSchemeOptLogMapper;
private final CrossSchemeMapper crossSchemeMapper;
private final CrossPhaseMapper crossPhaseMapper;
public DiagnoServiceImpl(CrossInfoMapper crossInfoMapper, CrossDataRealtimeMapper crossDataRealtimeMapper,
SceneService sceneService, SceneStrategyMapper sceneStrategyMapper, SceneMapper sceneMapper, CrossDirInfoMapper crossDirInfoMapper, RidInfoMapper ridInfoMapper, CrossSchemeOptLogMapper crossSchemeOptLogMapper, CrossSchemeMapper crossSchemeMapper) {
SceneService sceneService, SceneMapper sceneMapper, CrossDirInfoMapper crossDirInfoMapper,
RidInfoMapper ridInfoMapper, CrossSchemeOptLogMapper crossSchemeOptLogMapper,
CrossSchemeMapper crossSchemeMapper, CrossPhaseMapper crossPhaseMapper) {
this.crossInfoMapper = crossInfoMapper;
this.crossDataRealtimeMapper = crossDataRealtimeMapper;
this.sceneService = sceneService;
......@@ -59,6 +65,7 @@ public class DiagnoServiceImpl implements DiagnoService {
this.ridInfoMapper = ridInfoMapper;
this.crossSchemeOptLogMapper = crossSchemeOptLogMapper;
this.crossSchemeMapper = crossSchemeMapper;
this.crossPhaseMapper = crossPhaseMapper;
}
@Override
......@@ -116,6 +123,7 @@ public class DiagnoServiceImpl implements DiagnoService {
SchemeOptVO schemeOptVO = new SchemeOptVO();
schemeOptVO.setCrossId(crossId);
List<CrossSchemeOptLogPO> crossSchemeOptLogPOList = crossSchemeOptLogMapper.selectByCrossId(crossId);
// 选择数据批次时间最大的记录
Optional<CrossSchemeOptLogPO> max = crossSchemeOptLogPOList.stream()
.max(Comparator.comparing(CrossSchemeOptLogPO::getDataBatchTime));
List<CrossSchemeOptLogPO> maxList = getMaxList(crossSchemeOptLogPOList, max);
......@@ -132,6 +140,41 @@ public class DiagnoServiceImpl implements DiagnoService {
return schemeOptVO;
}
@Override
public List<SchemeOptVO.PhaseOptTime> queryOptTime(CrossIdAndSchemeIdDTO crossIdAndSchemeIdDTO) {
String crossId = crossIdAndSchemeIdDTO.getCrossId();
Integer schemeId = crossIdAndSchemeIdDTO.getSchemeId();
List<SchemeOptVO.PhaseOptTime> phaseOptTimeList = new ArrayList<>();
List<CrossSchemeOptLogPO> crossSchemeOptLogPOList = crossSchemeOptLogMapper.selectByCrossId(crossId);
// 选择数据批次时间最大的记录
Optional<CrossSchemeOptLogPO> max = crossSchemeOptLogPOList.stream()
.max(Comparator.comparing(CrossSchemeOptLogPO::getDataBatchTime));
List<CrossSchemeOptLogPO> maxList = getMaxList(crossSchemeOptLogPOList, max);
for (CrossSchemeOptLogPO crossSchemeOptLogPO : maxList) {
SchemeOptVO.PhaseOptTime phaseOptTime = new SchemeOptVO.PhaseOptTime();
String phaseNo = crossSchemeOptLogPO.getPhaseNo();
phaseOptTime.setPhaseNo(phaseNo);
Integer oriGreenTime = crossSchemeOptLogPO.getOriGreenTime();
phaseOptTime.setOriGreenTime(oriGreenTime);
Integer optGreenTime = getNewGreenTime(crossId, schemeId, phaseNo);
phaseOptTime.setOptGreenTime(optGreenTime);
phaseOptTime.setOptTime(optGreenTime - oriGreenTime);
phaseOptTimeList.add(phaseOptTime);
}
return phaseOptTimeList;
}
private Integer getNewGreenTime(String crossId, Integer schemeId, String phaseNo) {
List<CrossPhasePO> crossPhasePOList = crossPhaseMapper.listCrossPhase(crossId, String.valueOf(schemeId));
for (CrossPhasePO crossPhasePO : crossPhasePOList) {
String newPhaseNo = crossPhasePO.getPhaseNo();
if (Objects.equals(phaseNo, newPhaseNo)) {
return crossPhasePO.getGreenTime();
}
}
return 0;
}
@NotNull
private static List<CrossSchemeOptLogPO> getMaxList(List<CrossSchemeOptLogPO> crossSchemeOptLogPOList,
Optional<CrossSchemeOptLogPO> max) {
......
......@@ -25,7 +25,6 @@
<result property="gmtModified" column="gmt_modified"/>
</resultMap>
<select id="listCrossPhase" resultMap="BaseResultMap">
select
id
......@@ -55,6 +54,4 @@
and plan_id = #{schemeId}
</if>
</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