Commit 3bfac417 authored by zhouleilei's avatar zhouleilei

获取方案号 不从海信获取,从试图中获取;修改获取环图逻辑

parent e210a233
......@@ -92,6 +92,18 @@ public class DiagnoController {
return JsonViewObject.newInstance().success(phaseOptTimeList);
}
@ApiOperation(value = "方案优化对比", notes = "方案优化对比", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/schemeComparison",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = SchemeOptVO.PhaseOptTime.class),
})
public JsonViewObject schemeComparison(@RequestBody CrossIdAndSchemeIdDTO crossIdAndSchemeIdDTO) {
List<SchemeOptVO.PhaseOptTime> phaseOptTimeList = diagnoService.schemeComparison(crossIdAndSchemeIdDTO);
return JsonViewObject.newInstance().success(phaseOptTimeList);
}
@ApiOperation(value = "下发手动干预", notes = "下发手动干预", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/sendManual",
......
......@@ -25,6 +25,7 @@ public interface DiagnoService {
SchemeOptVO querySchemeOpt(CrossIdAndSchemeIdBO bo);
List<SchemeOptVO.PhaseOptTime> queryOptTime(CrossIdAndSchemeIdDTO crossIdAndSchemeIdDTO);
List<SchemeOptVO.PhaseOptTime> schemeComparison(CrossIdAndSchemeIdDTO crossIdAndSchemeIdDTO);
void sendManual(SendManualDTO sendManualDTO) throws Exception;
......
......@@ -40,6 +40,7 @@ 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;
......@@ -211,6 +212,27 @@ public class DiagnoServiceImpl implements DiagnoService {
@Override
public List<SchemeOptVO.PhaseOptTime> queryOptTime(CrossIdAndSchemeIdDTO crossIdAndSchemeIdDTO) {
String crossId = crossIdAndSchemeIdDTO.getCrossId();
Integer schemeId = crossIdAndSchemeIdDTO.getSchemeId();
List<SchemeOptVO.PhaseOptTime> phaseOptTimeList = new ArrayList<>();
// 选择数据批次时间最大的记录
List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId);
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;
}
@Override
public List<SchemeOptVO.PhaseOptTime> schemeComparison(CrossIdAndSchemeIdDTO crossIdAndSchemeIdDTO) {
String crossId = crossIdAndSchemeIdDTO.getCrossId();
Integer schemeId = crossIdAndSchemeIdDTO.getSchemeId();
List<SchemeOptVO.PhaseOptTime> phaseOptTimeList = new ArrayList<>();
......@@ -218,10 +240,22 @@ public class DiagnoServiceImpl implements DiagnoService {
crossSchemeRingsDTO.setCrossId(crossId);
crossSchemeRingsDTO.setPattern(String.valueOf(schemeId));
//查询当前路口运行的方案
LocalDate now = LocalDate.now();
int week = now.getDayOfWeek().getValue();
if (week == 7) {
//表中周日用0表示
week = 0;
}
//通过路口号和方案号查询方案id
Integer integer = baseCrossSchemeMapper.selectIdByCrossIdAndSchemeNo(crossId, String.valueOf(schemeId));
List<CrossPhasePO> phasePOList = baseCrossPhaseMapper.selectByCrossIdAndSchemeId(crossId, integer);
if (ObjectUtils.isEmpty(phasePOList) || ObjectUtils.isEmpty(integer)) {
BaseCrossSchemePO baseCrossSchemePO = baseCrossSchemeMapper.selectByCrossIdAndWeek(crossId,week);
if (ObjectUtils.isEmpty(baseCrossSchemePO)){
return phaseOptTimeList;
}
Integer schemeNo = Integer.valueOf(baseCrossSchemePO.getSchemeNo());
schemeNo = (schemeNo+2)/3;
List<CrossPhasePO> phasePOList = baseCrossPhaseMapper.selectByCrossIdAndSchemeId(crossId, schemeNo);
if (ObjectUtils.isEmpty(phasePOList) || ObjectUtils.isEmpty(schemeNo)) {
return phaseOptTimeList;
}
JsonViewObject jsonViewObject = utcFeignClients.schemeOptLog(crossSchemeRingsDTO);
......
......@@ -42,6 +42,7 @@ public class CrossRunSchemeCache implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
init();
System.out.println(currentRunSchemeNoCache);
}
public void init() throws Exception {
......
......@@ -35,7 +35,6 @@ import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* @author duanruiming
......@@ -240,7 +239,7 @@ public class ControlCommandServiceImpl implements ControlCommandService {
@Override
public JsonViewObject recoverSchedule(String code) throws Exception {
log.info("接收到恢复固定配时,code:{}",code);
log.info("接收到恢复固定配时,code:{}", code);
CrossInfoPOExt crossInfoPOExt = crossInfoMapper.selectById(code);
//组装document
Document document = OperationBaseDom.generateBaseDoc();
......@@ -317,8 +316,8 @@ public class ControlCommandServiceImpl implements ControlCommandService {
messageContent.addElement(HttpConstants.CYCLE).setText(tempSchemeSendVO.getCycle());
messageContent.addElement(HttpConstants.OFFSET).setText(tempSchemeSendVO.getOffset());
messageContent.addElement(HttpConstants.TYPE).setText(tempSchemeSendVO.getType());
tempSchemeSendVO.setSplit(tempSchemeSendVO.getSplit().replaceAll(" ",","));
messageContent.addElement(HttpConstants.SPLIT).setText(tempSchemeSendVO.getSplit());
//卫博传的是空格
messageContent.addElement(HttpConstants.SPLIT).setText(tempSchemeSendVO.getSplit().replaceAll(" ", ","));
//给海信发送http请求
String post = OkHttpClientUtil.xmlPost(hisenseUrl, document.asXML());
......@@ -350,17 +349,17 @@ public class ControlCommandServiceImpl implements ControlCommandService {
if (HttpConstants.RESULT_1.equals(result)) {
//指令下发成功
jsonViewObject.success("临时方案 - 指令下发成功");
log.info("临时方案下发成功,tempSchemeSendVO:{}",JSONObject.toJSONString(tempSchemeSendVO));
log.info("临时方案下发成功,tempSchemeSendVO:{}", JSONObject.toJSONString(tempSchemeSendVO));
} else if (HttpConstants.RESULT_0.equals(result)) {
log.error("临时方案下发失败,tempSchemeSendVO:{}",JSONObject.toJSONString(tempSchemeSendVO));
log.error("临时方案下发失败,tempSchemeSendVO:{}", JSONObject.toJSONString(tempSchemeSendVO));
//指令下发失败
jsonViewObject.fail("临时方案 - 指令下发失败");
} else if (HttpConstants.RESULT_2.equals(result)) {
log.info("临时方案指令执行成功,tempSchemeSendVO:{}",JSONObject.toJSONString(tempSchemeSendVO));
log.info("临时方案指令执行成功,tempSchemeSendVO:{}", JSONObject.toJSONString(tempSchemeSendVO));
//指令执行成功
jsonViewObject.success("临时方案 - 指令执行成功");
} else {
log.error("临时方案指令执行失败,tempSchemeSendVO:{}",JSONObject.toJSONString(tempSchemeSendVO));
log.error("临时方案指令执行失败,tempSchemeSendVO:{}", JSONObject.toJSONString(tempSchemeSendVO));
//指令执行失败
jsonViewObject.fail("临时方案 - 指令执行失败");
}
......@@ -417,17 +416,10 @@ public class ControlCommandServiceImpl implements ControlCommandService {
//方案环图请求
CrossSchemeRings crossSchemeRings = staticInfoService.crossSchemeRings(crossSchemeRingsDTO);
long currentTimeMillis = System.currentTimeMillis();
if (Optional.ofNullable(crossSchemeRings).isPresent() || result == 2) {
if (ObjectUtil.isNotEmpty(crossSchemeRings) && result == 1) {
//环数
int ringCount = Integer.parseInt(crossSchemeRings.getRingCount());
//周期长度
String cycleLen = crossSchemeRings.getCycleLen();
JSONObject cycleJSONObject = crossSchemeRings.getCycleList();
//相位差
String offset = crossSchemeRings.getOffset();
int cycle = Integer.valueOf(cycleLen);
//方案号
int schemeNo = (Integer.valueOf(crossSchemeRings.getPattern()) + 2) / 3;
List<CrossSchemeRings.Phase> phaseList = crossSchemeRings.getPhaseList();
CrossSchemeRings.Phase phase = phaseList.get(0);
//红灯黄灯时间给默认值0
......@@ -435,12 +427,12 @@ public class ControlCommandServiceImpl implements ControlCommandService {
phase.setYellowTime(getDefaultPhaseTime());
//绿灯时间为神思绿信比时间
phase.setGreenTime(greenTime);
List<StagePhaseDTO> stagePhaseDTOList = null;
try {
//封装环和环上相位数据
Map<Integer, List<RingPhaseDTO>> ringPhasesMap = staticInfoServiceImpl.getRingPhasesMap(ringCount, cycleJSONObject, phase);
//环封装阶段
List<StagePhaseDTO> stagePhaseDTOList = null;
try {
stagePhaseDTOList = staticInfoServiceImpl.stagePhaseList(cycle, ringCount, ringPhasesMap);
stagePhaseDTOList = staticInfoServiceImpl.stagePhaseList(Integer.valueOf(tempSchemeSendVO.getCycle()), ringCount, ringPhasesMap);
} catch (Exception e) {
CrossSchemeStageOptLogPO crossSchemeStageOptLogPO = new CrossSchemeStageOptLogPO();
crossSchemeStageOptLogPO.setCrossId(crossId);
......
package net.wanji.utc.hisense.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
......@@ -8,10 +9,12 @@ import lombok.extern.slf4j.Slf4j;
import net.wanji.common.utils.tool.ScheduleUtil;
import net.wanji.common.utils.tool.StringUtils;
import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.BaseCrossSchemeMapper;
import net.wanji.databus.dao.mapper.CrossInfoMapper;
import net.wanji.databus.dao.mapper.CrossSchemeStageOptLogMapper;
import net.wanji.databus.dao.mapper.ManufacturerInfoMapper;
import net.wanji.databus.dto.*;
import net.wanji.databus.po.CoordinationStatus;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.po.CrossInfoPOExt;
import net.wanji.databus.vo.PlanSectionVO;
......@@ -22,7 +25,6 @@ import net.wanji.utc.hisense.common.constants.HttpConstants;
import net.wanji.utc.hisense.mapper.*;
import net.wanji.utc.hisense.pojo.dto.RingPhaseDTO;
import net.wanji.utc.hisense.pojo.dto.StagePhaseDTO;
import net.wanji.databus.po.CoordinationStatus;
import net.wanji.utc.hisense.pojo.result.CrossSchemeRings;
import net.wanji.utc.hisense.pojo.view.*;
import net.wanji.utc.hisense.service.StaticInfoService;
......@@ -38,6 +40,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
......@@ -71,6 +74,8 @@ public class StaticInfoServiceImpl implements StaticInfoService {
private VNtcipPatternMapper vNtcipPatternMapper;
@Resource
private CrossSchemeStageOptLogMapper crossSchemeStageOptLogMapper;
@Resource
private BaseCrossSchemeMapper baseCrossSchemeMapper;
@Override
public List<CrossInfoPO> crossBasicInfo(CrossInfoDTO crossInfoDTO) throws Exception {
......@@ -676,6 +681,45 @@ public class StaticInfoServiceImpl implements StaticInfoService {
@Override
public CoordinationStatus crossPlan(String crossId) throws Exception {
CoordinationStatus coordinationStatus = null;
int schemeId = 0;
//查询当前路口运行的方案
LocalDate now = LocalDate.now();
int week = now.getDayOfWeek().getValue();
if (week == 7) {
//表中周日用0表示
week = 0;
}
BaseCrossSchemePO baseCrossSchemePO = baseCrossSchemeMapper.selectByCrossIdAndWeek(crossId, week);
if (ObjectUtil.isNotEmpty(baseCrossSchemePO)) {
coordinationStatus = new CoordinationStatus();
//从缓存中拿路口信息
CrossInfoPO crossInfoPO = CrossInfoCache.getCrossInfoCache().get(crossId);
if (ObjectUtil.isNotNull(crossInfoPO)) {
coordinationStatus.setSpot(crossInfoPO.getCode());
//海信的方案号
int schemeNo = Integer.valueOf(baseCrossSchemePO.getSchemeNo()) * 3 - 2;
if (schemeNo == 253) {
//黃闪
schemeNo = 255;
}
coordinationStatus.setCoordPatternStatus(String.valueOf(schemeNo));
coordinationStatus.setCoordCycleStatus(String.valueOf(baseCrossSchemePO.getCycle()));
}
} else {
coordinationStatus = crossPlanHisense(crossId);
}
return coordinationStatus;
}
/**
* @return net.wanji.databus.po.CoordinationStatus
* @Description 直接获取海信的私有协议
* @Param [crossId]
**/
public CoordinationStatus crossPlanHisense(String crossId) throws Exception {
CrossInfoPOExt crossInfoPOExt = crossInfoMapper.selectById(crossId);
//组装document
Document document = OperationBaseDom.generateBaseDoc();
......@@ -723,7 +767,21 @@ public class StaticInfoServiceImpl implements StaticInfoService {
element.addElement(HttpConstants.MESSAGETYPE).setText(HttpConstants.MESSAGETYPE_30);
Element messageContent = (Element) document.selectSingleNode(HttpConstants.SYSTEMSCRIPTION_MESSAGECONTENT);
messageContent.addElement(HttpConstants.SPOT).setText(crossInfoPOExt.getCode());
messageContent.addElement(HttpConstants.PATTERN).setText(crossSchemeRingsDTO.getPattern());
//获取当前运行的方案号
CoordinationStatus coordinationStatus = crossPlan(crossSchemeRingsDTO.getCrossId());
if (ObjectUtil.isEmpty(coordinationStatus)) {
//获取方案号失败
log.error("请求方案环图前,获取当前运行方案号失败,crossId:{}",crossSchemeRingsDTO.getCrossId());
return null;
}else if ("255".equals(coordinationStatus.getCoordPatternStatus())){
//黃闪
CrossSchemeRings crossSchemeRings = new CrossSchemeRings();
crossSchemeRings.setSpot(crossSchemeRingsDTO.getCrossId());
crossSchemeRings.setPattern(coordinationStatus.getCoordPatternStatus());
return crossSchemeRings;
}
messageContent.addElement(HttpConstants.PATTERN).setText(coordinationStatus.getCoordPatternStatus());
//给海信发送http请求
String post = OkHttpClientUtil.xmlPost(hisenseUrl, document.asXML());
if (StringUtils.isBlank(post)) {
......
......@@ -60,4 +60,5 @@ public interface BaseCrossSchemeMapper {
BaseCrossSchemePO selectByCrossIdAndSchemeId(String crossId, Integer schemeId);
List<CrossSchemeInfoPO> selectSchemeInfoByCrossIdAndSchemeId(String crossId, Integer schemeId);
BaseCrossSchemePO selectByCrossIdAndWeek(@Param("crossId") String crossId,@Param("week") int week);
}
......@@ -25,7 +25,6 @@ public class CrossSchemeRingsDTO {
private String crossId;
@ApiModelProperty(value = "方案号")
@NotNull(message = "pattern 不能为空")
private String pattern;
}
......@@ -219,5 +219,21 @@
ORDER BY
phaseNo ASC
</select>
<select id="selectByCrossIdAndWeek" resultType="net.wanji.databus.dao.entity.BaseCrossSchemePO">
SELECT
scheme.id AS id,scheme.scheme_no AS schemeNo,scheme.name AS name,scheme.cross_id AS crossId,scheme.cycle AS cycle,scheme.coord_phase AS coordPhase,scheme.offset AS offset,scheme.source AS source,scheme.is_deleted AS isDeleted,scheme.status AS status,scheme.gmt_create AS gmtCreate,scheme.gmt_modified AS gmtModified
FROM
t_cross_schedules schedules
LEFT JOIN t_cross_section section ON section.cross_id = schedules.cross_id
AND schedules.plan_id = section.plan_id
LEFT JOIN t_cross_scheme scheme ON scheme.cross_id = section.cross_id
AND section.scheme_id = scheme.id
WHERE
schedules.cross_id = #{crossId}
AND schedules.`week` = #{week}
AND DATE_FORMAT( NOW(), '%H:%i' ) BETWEEN DATE_FORMAT( CAST( section.start_time AS TIME ), '%H:%i' )
AND DATE_FORMAT( CAST( section.end_time AS TIME ), '%H:%i' )
</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