Commit 8d3da2e4 authored by zhouleilei's avatar zhouleilei

方案优化接口

parent 2c8f6023
......@@ -645,14 +645,14 @@ public class PlanSendServiceImpl implements PlanSendService {
List<CrossSchemeInfoPO> crossSchemeInfoPOS = baseCrossSchemeMapper.selectSchemeInfoByCrossIdAndSchemeId(crossIdAndTimeDTO.getCrossId(), schemeId);
if (ObjectUtil.isNotEmpty(crossSchemeInfoPOS)) {
//根据相位号分组
Map<String, List<CrossSchemeInfoPO>> collect = crossSchemeInfoPOS.stream().collect(Collectors.groupingBy(CrossSchemeInfoPO::getPhaseNo));
LinkedHashMap<String, List<CrossSchemeInfoPO>> collect = crossSchemeInfoPOS.stream().collect(Collectors.groupingBy(CrossSchemeInfoPO::getPhaseNo, LinkedHashMap::new, Collectors.toList()));
Set<String> set = collect.keySet();
for (String s : set) {
List<CrossSchemeInfoPO> infoPOS = collect.get(s);
CrossSchemeInfoPO crossSchemeInfoPO = infoPOS.get(0);
SaveSchemeConfigDTO.PhaseListElement phaseListElement = new SaveSchemeConfigDTO.PhaseListElement();
phaseListElement.setPhaseId(Integer.valueOf(crossSchemeInfoPO.getPhaseId()));
phaseListElement.setPhaseNo(crossSchemeInfoPO.getPhaseTime());
phaseListElement.setPhaseNo(crossSchemeInfoPO.getPhaseNo());
phaseListElement.setGreenTime(Integer.valueOf(crossSchemeInfoPO.getGreenTime()));
phaseListElement.setYellowTime(Integer.valueOf(crossSchemeInfoPO.getYellowTime()));
phaseListElement.setRedTime(Integer.valueOf(crossSchemeInfoPO.getRedTime()));
......@@ -702,22 +702,22 @@ public class PlanSendServiceImpl implements PlanSendService {
List<CrossSchemeStageOptLogPO> crossSchedulesPOList = mapper.convertValue(optView.getContent(), new TypeReference<List<CrossSchemeStageOptLogPO>>() {
});
if (ObjectUtils.isNotEmpty(crossSchedulesPOList)) {
optPhaseList.addAll(oriPhaseList);
for (int i = 0; i < optPhaseList.size(); i++) {
if (i == crossSchedulesPOList.size()){
for (int i = 0; i < crossSchedulesPOList.size(); i++) {
if (i == oriPhaseList.size()){
break;
}
CrossSchemeStageOptLogPO optLogPO = crossSchedulesPOList.get(i);
SaveSchemeConfigDTO.PhaseListElement optPhase = optPhaseList.get(i);
optPhase.setMinGreenTime(0);
optPhase.setMaxGreenTime(0);
optPhase.setGreenTime(optLogPO.getPhaseTime());
optPhase.setGreenFlashTime(0);
optPhase.setYellowFlashTime(0);
optPhase.setRedFlashTime(0);
optPhase.setYellowTime(0);
optPhase.setRedTime(0);
optPhase.setYellowFlash(0);
SaveSchemeConfigDTO.PhaseListElement phaseListElement = oriPhaseList.get(i);
SaveSchemeConfigDTO.PhaseListElement optPhase = new SaveSchemeConfigDTO.PhaseListElement();
BeanUtils.copyProperties(phaseListElement,optPhase);
Integer yellowTime = phaseListElement.getYellowTime();
Integer redTime = phaseListElement.getRedTime();
//相位时间
Integer phaseTime = optLogPO.getPhaseTime();
//绿灯时间
int greenTime = phaseTime - yellowTime - redTime;
optPhase.setGreenTime(greenTime);
optPhaseList.add(optPhase);
}
}
}
......
......@@ -18,6 +18,7 @@ import net.wanji.databus.bo.CrossIdBO;
import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dto.CrossSchemeRingsDTO;
import net.wanji.databus.dto.QueryByCrossIdAndTimeDTO;
import net.wanji.databus.po.*;
import net.wanji.databus.vo.SchemeOptSendVO;
import net.wanji.databus.vo.SchemeSendVO;
......@@ -40,7 +41,6 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
......@@ -234,34 +234,37 @@ public class DiagnoServiceImpl implements DiagnoService {
@Override
public List<SchemeOptVO.PhaseOptTime> schemeComparison(CrossIdAndSchemeIdDTO crossIdAndSchemeIdDTO) {
String crossId = crossIdAndSchemeIdDTO.getCrossId();
Integer schemeId = crossIdAndSchemeIdDTO.getSchemeId();
List<SchemeOptVO.PhaseOptTime> phaseOptTimeList = new ArrayList<>();
CrossSchemeRingsDTO crossSchemeRingsDTO = new CrossSchemeRingsDTO();
crossSchemeRingsDTO.setCrossId(crossId);
crossSchemeRingsDTO.setPattern(String.valueOf(schemeId));
//查询当前路口运行的方案
LocalDate now = LocalDate.now();
int week = now.getDayOfWeek().getValue();
if (week == 7) {
//表中周日用0表示
week = 0;
QueryByCrossIdAndTimeDTO queryByCrossIdAndTimeDTO = new QueryByCrossIdAndTimeDTO();
queryByCrossIdAndTimeDTO.setCrossId(crossId);
queryByCrossIdAndTimeDTO.setDatetime(new Date());
//查询路口当前方案
JsonViewObject jsonViewObjectScheme = utcFeignClients.selectSchemeByParams(queryByCrossIdAndTimeDTO);
Integer jsonViewObjectSchemeCode = jsonViewObjectScheme.getCode();
if (jsonViewObjectSchemeCode != 200){
log.info("未查询到当前路口号,crossId:{}",crossId);
return phaseOptTimeList;
}
//通过路口号和方案号查询方案id
CrossNowSchemePO baseCrossSchemePO = baseCrossSchemeMapper.selectByCrossIdAndWeek(crossId,week);
ObjectMapper mapper1 = JacksonUtils.getInstance();
BaseCrossSchemePO baseCrossSchemePO = mapper1.convertValue(jsonViewObjectScheme.getContent(), new TypeReference<BaseCrossSchemePO>() {
});
if (ObjectUtils.isEmpty(baseCrossSchemePO)){
return phaseOptTimeList;
}
Integer schemeNo = baseCrossSchemePO.getSchemeId();
if (ObjectUtil.isEmpty(schemeNo)){
Integer schemeNo = Integer.valueOf(baseCrossSchemePO.getSchemeNo());
if (ObjectUtil.isEmpty(schemeNo) || schemeNo == 85){
log.info("当前路口为黃闪,crossId:{}",crossId);
return phaseOptTimeList;
}
schemeNo = (schemeNo+2)/3;
List<CrossPhasePO> phasePOList = baseCrossPhaseMapper.selectByCrossIdAndSchemeId(crossId, schemeNo);
List<CrossPhasePO> phasePOList = baseCrossPhaseMapper.selectByCrossIdAndSchemeNo(crossId, schemeNo);
if (ObjectUtils.isEmpty(phasePOList) || ObjectUtils.isEmpty(schemeNo)) {
return phaseOptTimeList;
}
CrossSchemeRingsDTO crossSchemeRingsDTO = new CrossSchemeRingsDTO();
crossSchemeRingsDTO.setCrossId(crossId);
crossSchemeRingsDTO.setPattern(String.valueOf(schemeNo));
JsonViewObject jsonViewObject = utcFeignClients.schemeOptLog(crossSchemeRingsDTO);
Integer code = jsonViewObject.getCode();
ObjectMapper mapper = JacksonUtils.getInstance();
......@@ -282,7 +285,7 @@ public class DiagnoServiceImpl implements DiagnoService {
} else {
for (CrossPhasePO crossPhasePO : phasePOList) {
SchemeOptVO.PhaseOptTime phaseOptTime = new SchemeOptVO.PhaseOptTime();
phaseOptTime.setPhaseNo(crossPhasePO.getPhaseNo());
phaseOptTime.setPhaseNo(String.valueOf(crossPhasePO.getSort()));
Integer oriPhaseTime = crossPhasePO.getPhaseTime();
phaseOptTime.setOriGreenTime(oriPhaseTime);
List<CrossSchemeStageOptLogPO> list = crossSchedulesPOList.stream().filter(x -> x.getPhaseNo().equals(String.valueOf(crossPhasePO.getSort()))).collect(Collectors.toList());
......@@ -293,8 +296,7 @@ public class DiagnoServiceImpl implements DiagnoService {
CrossSchemeStageOptLogPO optLogPO = list.get(0);
Integer optPhaseTime = optLogPO.getPhaseTime();
phaseOptTime.setOptGreenTime(optPhaseTime);
//两个时间的绝对值
int optTime = Math.abs(oriPhaseTime - optPhaseTime);
int optTime = oriPhaseTime - optPhaseTime;
phaseOptTime.setOptTime(optTime);
}
phaseOptTimeList.add(phaseOptTime);
......
......@@ -41,6 +41,9 @@ public interface BaseCrossPhaseMapper {
List<CrossPhasePO> selectByCrossIdAndSchemeId(@Param("crossId") String crossId,
@Param("schemeId") Integer schemeId);
List<CrossPhasePO> selectByCrossIdAndSchemeNo(@Param("crossId") String crossId,
@Param("schemeNo") Integer schemeNo);
void update(CrossPhasePO crossPhasePO);
void insertBatch(List<CrossPhasePO> crossPhaseList);
......
......@@ -172,4 +172,18 @@
order by sort
</select>
<select id="selectByCrossIdAndSchemeNo" resultMap="BaseResultMap">
SELECT
phase.id,phase.phase_no,phase.NAME,phase.sort,phase.cross_id,phase.plan_id,phase.ring_no,phase.group_no,phase.phase_type,phase.control_mode,phase.phase_time,phase.green_time,phase.green_flash_time,phase.yellow_flash_time,phase.red_flash_time,phase.ped_flash_time,phase.yellow_time,phase.red_time,phase.min_green_time,phase.max_green_time,phase.gmt_create,phase.gmt_modified
FROM
t_base_cross_phase phase
LEFT JOIN t_base_cross_scheme scheme ON phase.cross_id = scheme.cross_id
AND phase.plan_id = scheme.id
WHERE
phase.cross_id = #{crossId}
AND scheme.scheme_no = #{schemeNo}
ORDER BY
sort
</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