Commit 4e0dce3b authored by hanbing's avatar hanbing

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

parent 9ea30edc
...@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiResponse; ...@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses; import io.swagger.annotations.ApiResponses;
import net.wanji.common.dto.CrossIdDTO; import net.wanji.common.dto.CrossIdDTO;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.dto.CrossIdAndSchemeIdDTO;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO; import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.service.DiagnoService; import net.wanji.opt.service.DiagnoService;
import net.wanji.opt.vo.CrossIdAndLocationVO; import net.wanji.opt.vo.CrossIdAndLocationVO;
...@@ -70,4 +71,16 @@ public class DiagnoController { ...@@ -70,4 +71,16 @@ public class DiagnoController {
SchemeOptVO schemeOptVO = diagnoService.querySchemeOpt(crossIdDTO); SchemeOptVO schemeOptVO = diagnoService.querySchemeOpt(crossIdDTO);
return JsonViewObject.newInstance().success(schemeOptVO); 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; package net.wanji.opt.service;
import net.wanji.common.dto.CrossIdDTO; import net.wanji.common.dto.CrossIdDTO;
import net.wanji.opt.dto.CrossIdAndSchemeIdDTO;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO; import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.vo.CrossIdAndLocationVO; import net.wanji.opt.vo.CrossIdAndLocationVO;
import net.wanji.opt.vo.SchemeOptVO; import net.wanji.opt.vo.SchemeOptVO;
...@@ -17,4 +18,6 @@ public interface DiagnoService { ...@@ -17,4 +18,6 @@ public interface DiagnoService {
List<CrossIdAndLocationVO> queryNeighborCross(CrossIdDTO crossIdDTO); List<CrossIdAndLocationVO> queryNeighborCross(CrossIdDTO crossIdDTO);
SchemeOptVO querySchemeOpt(CrossIdDTO crossIdDTO); SchemeOptVO querySchemeOpt(CrossIdDTO crossIdDTO);
List<SchemeOptVO.PhaseOptTime> queryOptTime(CrossIdAndSchemeIdDTO crossIdAndSchemeIdDTO);
} }
...@@ -8,14 +8,16 @@ import net.wanji.databus.dao.entity.RidInfoEntity; ...@@ -8,14 +8,16 @@ import net.wanji.databus.dao.entity.RidInfoEntity;
import net.wanji.databus.dao.mapper.RidInfoMapper; import net.wanji.databus.dao.mapper.RidInfoMapper;
import net.wanji.opt.dao.mapper.CrossDirInfoMapper; import net.wanji.opt.dao.mapper.CrossDirInfoMapper;
import net.wanji.opt.dao.mapper.CrossInfoMapper; 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.CrossSchemeMapper;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper; import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
import net.wanji.opt.dao.mapper.strategy.SceneMapper; 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.dao.mapper.trend.CrossDataRealtimeMapper;
import net.wanji.opt.dto.CrossIdAndSchemeIdDTO;
import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO; import net.wanji.opt.dto.strategy.AddOrUpdateSceneDTO;
import net.wanji.opt.dto.strategy.QuerySceneDTO; import net.wanji.opt.dto.strategy.QuerySceneDTO;
import net.wanji.opt.po.base.CrossInfoPO; 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.CrossSchemeOptLogPO;
import net.wanji.opt.po.base.CrossSchemePO; import net.wanji.opt.po.base.CrossSchemePO;
import net.wanji.opt.po.strategy.ScenePO; import net.wanji.opt.po.strategy.ScenePO;
...@@ -30,6 +32,7 @@ import org.springframework.stereotype.Service; ...@@ -30,6 +32,7 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional; import java.util.Optional;
/** /**
...@@ -48,9 +51,12 @@ public class DiagnoServiceImpl implements DiagnoService { ...@@ -48,9 +51,12 @@ public class DiagnoServiceImpl implements DiagnoService {
private final RidInfoMapper ridInfoMapper; private final RidInfoMapper ridInfoMapper;
private final CrossSchemeOptLogMapper crossSchemeOptLogMapper; private final CrossSchemeOptLogMapper crossSchemeOptLogMapper;
private final CrossSchemeMapper crossSchemeMapper; private final CrossSchemeMapper crossSchemeMapper;
private final CrossPhaseMapper crossPhaseMapper;
public DiagnoServiceImpl(CrossInfoMapper crossInfoMapper, CrossDataRealtimeMapper crossDataRealtimeMapper, 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.crossInfoMapper = crossInfoMapper;
this.crossDataRealtimeMapper = crossDataRealtimeMapper; this.crossDataRealtimeMapper = crossDataRealtimeMapper;
this.sceneService = sceneService; this.sceneService = sceneService;
...@@ -59,6 +65,7 @@ public class DiagnoServiceImpl implements DiagnoService { ...@@ -59,6 +65,7 @@ public class DiagnoServiceImpl implements DiagnoService {
this.ridInfoMapper = ridInfoMapper; this.ridInfoMapper = ridInfoMapper;
this.crossSchemeOptLogMapper = crossSchemeOptLogMapper; this.crossSchemeOptLogMapper = crossSchemeOptLogMapper;
this.crossSchemeMapper = crossSchemeMapper; this.crossSchemeMapper = crossSchemeMapper;
this.crossPhaseMapper = crossPhaseMapper;
} }
@Override @Override
...@@ -116,6 +123,7 @@ public class DiagnoServiceImpl implements DiagnoService { ...@@ -116,6 +123,7 @@ public class DiagnoServiceImpl implements DiagnoService {
SchemeOptVO schemeOptVO = new SchemeOptVO(); SchemeOptVO schemeOptVO = new SchemeOptVO();
schemeOptVO.setCrossId(crossId); schemeOptVO.setCrossId(crossId);
List<CrossSchemeOptLogPO> crossSchemeOptLogPOList = crossSchemeOptLogMapper.selectByCrossId(crossId); List<CrossSchemeOptLogPO> crossSchemeOptLogPOList = crossSchemeOptLogMapper.selectByCrossId(crossId);
// 选择数据批次时间最大的记录
Optional<CrossSchemeOptLogPO> max = crossSchemeOptLogPOList.stream() Optional<CrossSchemeOptLogPO> max = crossSchemeOptLogPOList.stream()
.max(Comparator.comparing(CrossSchemeOptLogPO::getDataBatchTime)); .max(Comparator.comparing(CrossSchemeOptLogPO::getDataBatchTime));
List<CrossSchemeOptLogPO> maxList = getMaxList(crossSchemeOptLogPOList, max); List<CrossSchemeOptLogPO> maxList = getMaxList(crossSchemeOptLogPOList, max);
...@@ -132,6 +140,41 @@ public class DiagnoServiceImpl implements DiagnoService { ...@@ -132,6 +140,41 @@ public class DiagnoServiceImpl implements DiagnoService {
return schemeOptVO; 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 @NotNull
private static List<CrossSchemeOptLogPO> getMaxList(List<CrossSchemeOptLogPO> crossSchemeOptLogPOList, private static List<CrossSchemeOptLogPO> getMaxList(List<CrossSchemeOptLogPO> crossSchemeOptLogPOList,
Optional<CrossSchemeOptLogPO> max) { Optional<CrossSchemeOptLogPO> max) {
......
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
<result property="gmtModified" column="gmt_modified"/> <result property="gmtModified" column="gmt_modified"/>
</resultMap> </resultMap>
<select id="listCrossPhase" resultMap="BaseResultMap"> <select id="listCrossPhase" resultMap="BaseResultMap">
select select
id id
...@@ -55,6 +54,4 @@ ...@@ -55,6 +54,4 @@
and plan_id = #{schemeId} and plan_id = #{schemeId}
</if> </if>
</select> </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