Commit 133cc5bd authored by duanruiming's avatar duanruiming

[add] 添加系统方案相位绿灯时间优化下发逻辑

parent 5061e976
...@@ -5,20 +5,22 @@ import cn.hutool.core.util.ObjectUtil; ...@@ -5,20 +5,22 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.rest.JsonViewObject; import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.utils.tool.IpAddressUtil; import net.wanji.common.utils.tool.IpAddressUtil;
import net.wanji.common.utils.tool.JacksonUtils;
import net.wanji.common.utils.tool.LocalDateTimeUtil; import net.wanji.common.utils.tool.LocalDateTimeUtil;
import net.wanji.databus.dao.entity.*; import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.*; import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dto.CrossSchemeRingsDTO;
import net.wanji.databus.dto.ExtendPhaseDTO; import net.wanji.databus.dto.ExtendPhaseDTO;
import net.wanji.databus.dto.StepingPhaseDTO; import net.wanji.databus.dto.StepingPhaseDTO;
import net.wanji.databus.po.BaseCrossLightsPO; import net.wanji.databus.po.BaseCrossLightsPO;
import net.wanji.databus.po.CrossInfoPO; import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.po.SaveToUtcPO; import net.wanji.databus.po.SaveToUtcPO;
import net.wanji.databus.vo.*; import net.wanji.databus.vo.*;
import net.wanji.feign.service.common.FeignCommon;
import net.wanji.utc.cache.CrossInfoCache; import net.wanji.utc.cache.CrossInfoCache;
import net.wanji.utc.cache.CrossPhaseDirTurnCache; import net.wanji.utc.cache.CrossPhaseDirTurnCache;
import net.wanji.utc.cache.CrossSchemePhaseTimeCountCache; import net.wanji.utc.cache.CrossSchemePhaseTimeCountCache;
...@@ -28,6 +30,7 @@ import net.wanji.utc.common.typeenum.HttpCode; ...@@ -28,6 +30,7 @@ import net.wanji.utc.common.typeenum.HttpCode;
import net.wanji.utc.po.hk.request.DelBaseConfigPO; import net.wanji.utc.po.hk.request.DelBaseConfigPO;
import net.wanji.utc.service.control.ControlCommandService; import net.wanji.utc.service.control.ControlCommandService;
import net.wanji.utc.service.control.ControlCommandStrategyService; import net.wanji.utc.service.control.ControlCommandStrategyService;
import net.wanji.utc.service.staticinfo.StaticInfoService;
import net.wanji.utc.task.SignalCommandSyncTask; import net.wanji.utc.task.SignalCommandSyncTask;
import net.wanji.utc.task.SignalStatusTask; import net.wanji.utc.task.SignalStatusTask;
import net.wanji.utc.util.StringUtils; import net.wanji.utc.util.StringUtils;
...@@ -44,11 +47,9 @@ import javax.servlet.http.HttpServletRequest; ...@@ -44,11 +47,9 @@ import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/** /**
* @author duanruiming * @author duanruiming
...@@ -77,6 +78,7 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy ...@@ -77,6 +78,7 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
private final SignalCommandPOMapper signalCommandPOMapper; private final SignalCommandPOMapper signalCommandPOMapper;
private final CrossPhaseDirTurnCache crossPhaseDirTurnCache; private final CrossPhaseDirTurnCache crossPhaseDirTurnCache;
private final CrossSchemePhaseTimeCountCache crossSchemePhaseTimeCountCache; private final CrossSchemePhaseTimeCountCache crossSchemePhaseTimeCountCache;
private final StaticInfoService staticInfoService;
@Override @Override
...@@ -684,14 +686,81 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy ...@@ -684,14 +686,81 @@ public class ControlCommandStrategyServiceImpl implements ControlCommandStrategy
@Override @Override
public JsonViewObject schemePhaseGreenTimeOpt(SchemePhaseGreenTimeOptVO vo) throws Exception { public JsonViewObject schemePhaseGreenTimeOpt(SchemePhaseGreenTimeOptVO vo) throws Exception {
ObjectMapper mapper = JacksonUtils.getInstance();
try {
String crossId = vo.getCrossId(); String crossId = vo.getCrossId();
Integer schemeId = vo.getSchemeId(); Integer schemeId = vo.getSchemeId();
Integer offset = vo.getOffset(); Integer offset = vo.getOffset();
Integer cycle = vo.getCycle();
List<SchemePhaseGreenTimeOptVO.PhaseOptTime> phaseOptTimeList = vo.getPhaseOptTimeList(); List<SchemePhaseGreenTimeOptVO.PhaseOptTime> phaseOptTimeList = vo.getPhaseOptTimeList();
// 获取方案环图中,将环图中相位转化为阶段中相位对应关系 需要磊磊存数据 t_scheme_ring_phase_mapping_info // 获取方案环图中,将平台优化的相位阶段转化为海信相位时间
// 将阶段中相位加减绿灯时间转化到环相位中 CrossSchemeRingsDTO crossSchemeRingsDTO = new CrossSchemeRingsDTO();
crossSchemeRingsDTO.setCrossId(crossId);
crossSchemeRingsDTO.setPattern(String.valueOf(schemeId));
JsonViewObject jsonViewObject = staticInfoService.selectCrossSchemeRingsToStages(crossSchemeRingsDTO);
if (Objects.nonNull(jsonViewObject) && Objects.equals(200, jsonViewObject.getCode())) {
String contentStr = String.valueOf(jsonViewObject.getContent());
CrossSchemeRingsToStagesPO crossSchemeRingsToStagesPO = mapper.convertValue(contentStr, CrossSchemeRingsToStagesPO.class);
Map<Integer, Integer> phaseTimeMap = new HashMap<>();
if (Objects.nonNull(crossSchemeRingsToStagesPO)) {
List<CrossSchemeRingsToStagesPO.Phase> phaseList = crossSchemeRingsToStagesPO.getPhaseList();
if (!CollectionUtils.isEmpty(phaseList) && !CollectionUtils.isEmpty(phaseOptTimeList)) {
for (SchemePhaseGreenTimeOptVO.PhaseOptTime phaseOptTime : phaseOptTimeList) {
String optPhaseNo = phaseOptTime.getPhaseNo();
Integer optGreenTime = phaseOptTime.getOptGreenTime();
for (CrossSchemeRingsToStagesPO.Phase oriPhase : phaseList) {
String oriPhaseNo = oriPhase.getPhaseNo();
String oriPhaseList = oriPhase.getPhaseList();
Integer oriPhaseTime = oriPhase.getPhaseTime();
if (StringUtils.equals(optPhaseNo, oriPhaseNo)) {
if (StringUtils.isNotBlank(oriPhaseList)) {
for (String s : oriPhaseList.split(",")) {
Integer hisensePhaseNo = Integer.valueOf(s);
if (phaseTimeMap.containsKey(hisensePhaseNo)) {
Integer oriGreen = phaseTimeMap.get(hisensePhaseNo);
phaseTimeMap.put(hisensePhaseNo, oriGreen + optGreenTime);
} else {
phaseTimeMap.put(hisensePhaseNo, oriPhaseTime + optGreenTime);
}
}
}
}
}
}
}
}
// 将相位对应绿信比转成发送格式
String splitSend = "";
if (!phaseTimeMap.isEmpty()) {
LinkedHashMap<Integer, Integer> sortMap = phaseTimeMap.entrySet().stream().sorted(
Map.Entry.comparingByKey()).collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(oldValue, newValue) -> oldValue,
LinkedHashMap::new
));
List<Integer> hisensePhaseTimeList = new ArrayList<>(16);
for (Map.Entry<Integer, Integer> entry : sortMap.entrySet()) {
hisensePhaseTimeList.add(entry.getValue());
}
splitSend = hisensePhaseTimeList.stream().map(String::valueOf).collect(Collectors.joining(","));
}
// 下发临时方案 // 下发临时方案
TempSchemeSendVO tempSchemeSendVO = new TempSchemeSendVO();
return null; tempSchemeSendVO.setCrossId(crossId);
tempSchemeSendVO.setPattern(String.valueOf(schemeId));
tempSchemeSendVO.setCycle(String.valueOf(cycle));
tempSchemeSendVO.setOffset(String.valueOf(offset));
tempSchemeSendVO.setType("9");
tempSchemeSendVO.setSplit(splitSend);
tempSchemeDetail(tempSchemeSendVO);
return JsonViewObject.newInstance().success("方案相位绿灯时间优化下发成功");
} else {
return JsonViewObject.newInstance().success("方案相位绿灯时间优化下发成功");
}
} catch (Exception e) {
log.error("方案相位绿灯时间优化下发异常,异常信息:{}", e);
throw new RuntimeException(e);
}
} }
} }
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