Commit 91ac566e authored by duanruiming's avatar duanruiming

[update] 海信相位灯组

parent d7b97761
package net.wanji.utc.hisense.common;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author duanruiming
* @date 2024/11/12 14:16
* @decription 还行通道控制枚举
*/
@AllArgsConstructor
@Getter
public enum ChannelControlEnum {
OTHER(1, "其他相位控制"),
VEHICLE(2, "机动车相位控制"),
PEDESTRIAN(3, "行人相位控制"),
OVERLAP(4, "跟随相位控制");
private Integer code;
private String desc;
public static void main(String[] args) {
String dirTurn = Integer.toBinaryString(77);
String dir = dirTurn.substring(0, 3);
String turn = dirTurn.substring(2);
System.err.println(dir);
System.err.println(turn);
System.err.println(Integer.parseInt(dir, 2));
System.err.println(Integer.parseInt(turn, 2));
}
}
package net.wanji.utc.hisense.common;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Objects;
/**
* @author duanruiming
* @date 2024/11/12 15:14
*/
@Getter
@AllArgsConstructor
public enum HisenseTurnEnum {
// '车道转向:1左转;2直行;3右转;4掉头;5直左;6直右;7左直右;8左右;9左转掉头;10直行掉头;
// 11右转掉头;12左直掉头;13直右掉头;14左直右掉头;15左右掉头', 0 默认没有匹配
TURN_1(1, 1, "左"),
TURN_2(2, 2, "直"),
TURN_3(3, 3, "右"),
TURN_4(4, 4, "调头"),
TURN_5(5, 9, "左调头"),
TURN_6(6, 12, "左直"),
TURN_7(7, 8, "左右"),
TURN_8(8, 6, "直右"),
TURN_9(9, 7, "左直右"),
TURN_10(10, 10, "直调头"),
TURN_11(11, 0, "入口行人"),
TURN_12(12, 0, "出口行人"),
TURN_13(13, 0, "出入口行人"),
TURN_14(14, 12, "左直调头"),
TURN_15(15, 11, "右调头"),
TURN_16(16, 15, "左右调头"),
TURN_17(17, 13, "直右掉头"),
TURN_18(18, 14, "左直右掉头");
private Integer hisenseTurn;
private Integer wjLightsTurn;
private String desc;
public static Integer getWjLightsTurn(Integer hisenseTurn) {
for (HisenseTurnEnum value : HisenseTurnEnum.values()) {
if (Objects.equals(hisenseTurn, value.getHisenseTurn())) {
return value.getWjLightsTurn();
}
}
return 0;
}
}
package net.wanji.utc.hisense.common;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
/**
* @author duanruiming
* @date 2024/11/12 15:04
*/
@Getter
@AllArgsConstructor
public enum HiseseDirEnum {
// '灯组方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北',
ZERO(0,1, "北"),
ONE(1,3, "东"),
TWO(2,5, "南"),
THREE(3,7, "西"),
FOUR(4,2, "东北"),
FIVE(5,4, "东南"),
SIX(6,6, "西南"),
SEVEN(7,8, "西北");
private Integer hisenseDir;
private Integer wjLightsDir;
private String desc;
public static Integer getWjLightsDir(Integer hisenseDir) {
for (HiseseDirEnum value : HiseseDirEnum.values()) {
if (Objects.equals(hisenseDir, value.getHisenseDir())) {
return value.getWjLightsDir();
}
}
return 0;
}
public static void main(String[] args) throws Exception {
String format = String.format("%16s", Integer.toBinaryString(26)).replace(' ', '0');
char[] chars = format.toCharArray();
List<Integer> result = new ArrayList<>();
int length = chars.length;
for (int i = 0; i < length; i++) {
if (chars[i] == '1') {
result.add(length - i);
}
}
Collections.sort(result);
result.forEach(i -> {
System.err.println(i);
});
}
}
......@@ -11,63 +11,63 @@ import lombok.Data;
public class VNtcipChannelPhaseDTO {
@TableField("CINTSID")
private String cIntsID;
private Integer cIntsID;
@TableField("NSTRATEGYNO")
private String nStrategyNo;
private Integer nStrategyNo;
@TableField("NPHASENUMBER")
private String nPhaseNumber;
private Integer nPhaseNumber;
// 行人放行时间
@TableField("NPHASEWALK")
private String nPhaseWalk;
private Integer nPhaseWalk;
// 行人清空时间
@TableField("NPHASEPEDESTRIANCLEAR")
private String nPhasePedestrianClear;
private Integer nPhasePedestrianClear;
// 最小绿
@TableField("NPHASEMINIMUMGREEN")
private String nPhaseMiniNumGreen;
private Integer nPhaseMiniNumGreen;
// 单位延长绿
@TableField("NPHASEPASSAGE")
private String nPhasePassage;
private Integer nPhasePassage;
// 最大绿1
@TableField("NPHASEMAXIMUM1")
private String nPhaseMaxiNum1;
private Integer nPhaseMaxiNum1;
// 最大绿2
@TableField("NPHASEMAXIMUM2")
private String nPhaseMaxiNum2;
private Integer nPhaseMaxiNum2;
// 相位黄灯时间
@TableField("NPHASEYELLOWCHANGE")
private String nPhaseYellowChange;
private Integer nPhaseYellowChange;
// 相位红灯清空时间
@TableField("NPHASEREDCLEAR")
private String nPhaseRedClear;
private Integer nPhaseRedClear;
// 红灯保护时间
@TableField("NPHASEREDREVERT")
private String nPhaseRedRevert;
private Integer nPhaseRedRevert;
// 用到该相位的 ring 表号
@TableField("NPHASERING")
private String nPhaseRing;
private Integer nPhaseRing;
// 并发相位
@TableField("NPHASECONCURRENCY")
private String nPhaseConCurrency;
private Integer nPhaseConCurrency;
// 并发相位长度
@TableField("NPHASECONCURRENCYLEN")
private String nPhaseConCurrencyLen;
private Integer nPhaseConCurrencyLen;
// 红黄
@TableField("NREDYELLOW")
private String nRedYellow;
private Integer nRedYellow;
// 绿闪
@TableField("NGREENFLASH")
private String nGreenFlash;
private Integer nGreenFlash;
// 安全红灯
@TableField("NSAFERED")
private String nSafeRed;
private Integer nSafeRed;
// 通道号
@TableField("NCHANNELNUMBER")
private String nChannelNumber;
private Integer nChannelNumber;
// 通道类型
@TableField("NCHANNELCONTROLTYPE")
private String nChannelControlType;
private Integer nChannelControlType;
// 通道灰度
@TableField("NCHANNELDIM")
private String nChannelDim;
private Integer nChannelDim;
}
......@@ -6,8 +6,7 @@ import lombok.RequiredArgsConstructor;
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.CrossLightsPO;
import net.wanji.databus.dao.entity.CrossSchedulesPO;
import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.CrossInfoMapper;
import net.wanji.databus.dao.mapper.ManufacturerInfoMapper;
import net.wanji.databus.dto.*;
......@@ -16,6 +15,9 @@ import net.wanji.databus.po.CrossInfoPOExt;
import net.wanji.databus.vo.PlanSectionVO;
import net.wanji.databus.vo.SchemePhaseLightsVO;
import net.wanji.utc.hisense.cache.CrossInfoCache;
import net.wanji.utc.hisense.common.ChannelControlEnum;
import net.wanji.utc.hisense.common.HisenseTurnEnum;
import net.wanji.utc.hisense.common.HiseseDirEnum;
import net.wanji.utc.hisense.common.OperationBaseDom;
import net.wanji.utc.hisense.common.constants.HttpConstants;
import net.wanji.utc.hisense.mapper.*;
......@@ -31,6 +33,7 @@ import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
......@@ -102,12 +105,81 @@ public class StaticInfoServiceImpl implements StaticInfoService {
String crossId = schemePhaseLightsDTO.getCrossId();
Map<String, CrossInfoPO> crossInfoCache = CrossInfoCache.getCrossInfoCache();
CrossInfoPO crossInfoPO = crossInfoCache.get(crossId);
List<CrossLightsPO> crossLightsList = new ArrayList<>();
List<CrossPhasePO> crossPhaseList = new ArrayList<>();
List<CrossPhaseLightsPO> crossPhaseLightsPOList = new ArrayList<>();
List<CrossSchemePO> crossSchemeList = new ArrayList<>();
List<VNtcipChannelPhaseDTO> vNtcipChannelPhaseDTOS = vNtcipChannelViewMapper.selectChannelPhaseList(crossInfoPO.getCode());
log.error("======" + vNtcipChannelPhaseDTOS);
if (!CollectionUtils.isEmpty(vNtcipChannelPhaseDTOS)) {
for (VNtcipChannelPhaseDTO vNtcipChannelPhaseDTO : vNtcipChannelPhaseDTOS) {
// 1灯组信息
// 通道号
Integer nChannelControlType = vNtcipChannelPhaseDTO.getNChannelControlType();
Integer nChannelNumber = vNtcipChannelPhaseDTO.getNChannelNumber();
Integer nChannelDim = vNtcipChannelPhaseDTO.getNChannelDim();
CrossLightsPO crossLightsPO = getCrossLights(crossId, nChannelControlType, nChannelNumber, nChannelDim); crossLightsList.add(crossLightsPO);;
crossLightsList.add(crossLightsPO);;
// 环相位信息
Integer nPhaseConCurrency = vNtcipChannelPhaseDTO.getNPhaseConCurrency();
String format = String.format("%16s", Integer.toBinaryString(nPhaseConCurrency)).replace(' ', '0');
// 2相位灯组信息
CrossPhaseLightsPO crossPhaseLightsPO = getCrossPhaseLightsPO(crossId, vNtcipChannelPhaseDTO, nChannelNumber);
crossPhaseLightsPOList.add(crossPhaseLightsPO);
// 3
CrossSchemePO crossSchemePO = new CrossSchemePO();
crossSchemePO.setCrossId(crossId);
crossSchemePO.setSchemeNo(null);
crossSchemePO.setName(null);
crossSchemePO.setCycle(null);
crossSchemePO.setCoordPhase(null);
crossSchemePO.setOffset(null);
crossSchemePO.setSource(2);
crossSchemePO.setStatus(0);
}
}
log.error("======" + crossLightsList);
return null;
}
@NotNull
private static CrossPhaseLightsPO getCrossPhaseLightsPO(String crossId, VNtcipChannelPhaseDTO vNtcipChannelPhaseDTO, Integer nChannelNumber) {
CrossPhaseLightsPO crossPhaseLightsPO = new CrossPhaseLightsPO();
crossPhaseLightsPO.setPhaseId(vNtcipChannelPhaseDTO.getNPhaseNumber());
CrossLightsPO selectEntity = new CrossLightsPO();
selectEntity.setCrossId(crossId);
selectEntity.setLightsNo(String.valueOf(nChannelNumber));
crossPhaseLightsPO.setLightsId(null);
crossPhaseLightsPO.setCrossId(crossId);
return crossPhaseLightsPO;
}
private static CrossLightsPO getCrossLights(String crossId, Integer nChannelControlType, Integer nChannelNumber, Integer nChannelDim) {
CrossLightsPO crossLightsPO = new CrossLightsPO();
crossLightsPO.setLightsNo(String.valueOf(nChannelNumber));
crossLightsPO.setName("海信灯组" + nChannelNumber);
if (Objects.equals(ChannelControlEnum.PEDESTRIAN.getCode(), nChannelControlType)) {
crossLightsPO.setType(3);
}
if (Objects.equals(ChannelControlEnum.VEHICLE.getCode(), nChannelControlType)) {
crossLightsPO.setType(1);
}
String dirTurn = String.format("%8s", Integer.toBinaryString(nChannelDim)).replace(' ', '0');
if (StringUtils.isNotBlank(dirTurn)) {
String dir = dirTurn.substring(0, 3); // 高三位 方向
String turn = dirTurn.substring(3); // 低五位 转向
crossLightsPO.setDir(HiseseDirEnum.getWjLightsDir(Integer.parseInt(dir, 2)));
crossLightsPO.setTurn(HisenseTurnEnum.getWjLightsTurn(Integer.parseInt(turn, 2)));
crossLightsPO.setCrossId(crossId);
}
return crossLightsPO;
}
@Override
public List<PlanSectionVO> planSection(PlanSectionDTO planSectionDTO) throws Exception {
LambdaQueryWrapper<VNtcipTimeBaseDayplanView> queryWrapper = new LambdaQueryWrapper<>();
......@@ -120,7 +192,6 @@ public class StaticInfoServiceImpl implements StaticInfoService {
List<VNtcipTimeBaseDayplanView> vNtcipTimeBaseDayplanViews = vNtcipTimeBaseDayplanMapper.selectList(queryWrapper);
return null;
}
......
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