Commit a3a64050 authored by Zheng Yi Fan's avatar Zheng Yi Fan

refactor(signal-optimize): 重构主干道方向和状态处理逻辑

- 移除了 TrunkLineCrossProblemVO 中的冗余字段
- 优化了 TrunkLineImpl 中的方向和状态处理逻辑- 新增了 getDirStatus 方法来处理方向和状态的组合- 简化了 getDirName 方法的实现
parent dd90c153
......@@ -33,7 +33,6 @@ public class TrunkLineImpl implements TrunkLineService {
List<TrunkLineCrossProblemEntity> list= trunkLineMapper.getTrunkLineCrossProblem(greenID, time);
TrunkLineCrossProblemEntity ioDir = trunkLineMapper.getIODir(greenID);
List<TrunkLineCrossProblemVO> voList = new ArrayList<>();
Map<String, String> IOdirMap = getDir(ioDir.getInDir(), ioDir.getOutDir());
for (TrunkLineCrossProblemEntity e : list) {
TrunkLineCrossProblemVO vo = new TrunkLineCrossProblemVO();
......@@ -46,39 +45,16 @@ public class TrunkLineImpl implements TrunkLineService {
String temp = e.getDirection().substring(1, e.getDirection().length() - 1);
temp = temp.replace("\"", "");
String[] temp1 = temp.split(",");
Map<String, Integer> directionMap = new HashMap<>();
for (String s : temp1) {
directionMap.put(s, directionMap.getOrDefault(s, 0) + 1);
}
Integer count = directionMap.getOrDefault(IOdirMap.get("dir"), 0);
String[] dirStatus = getDirStatus(ioDir.getInDir(), ioDir.getOutDir(), temp1, e.getStatus());
vo.setDir_1_name(dirStatus[0]);
vo.setStatus_1_name(dirStatus[1]);
vo.setDir_2_name(dirStatus[2]);
vo.setStatus_2_name(dirStatus[3]);
if (count == 0) { // 不匹配
vo.setStatus_1(0);
vo.setStatus_2(0);
vo.setStatus_1_name("正常");
vo.setStatus_2_name("正常");
vo.setDir_1_name(IOdirMap.get("dirName"));
vo.setDir_2_name(IOdirMap.get("dirNameReverse"));
} else if (count == 1) { // 匹配一项
vo.setStatus_1(e.getStatus());
vo.setStatus_2(0);
vo.setStatus_2_name(getStatusName(e.getStatus()));
vo.setStatus_1_name("正常");
vo.setDir_1_name(IOdirMap.get("dirName"));
vo.setDir_2_name(IOdirMap.get("dirNameReverse"));
} else if (count == 2) { // 匹配两项
vo.setStatus_1(e.getStatus());
vo.setStatus_2(e.getStatus());
vo.setStatus_1_name(getStatusName(e.getStatus()));
vo.setStatus_2_name(getStatusName(e.getStatus()));
vo.setDir_1_name(IOdirMap.get("dirName"));
vo.setDir_2_name(IOdirMap.get("dirNameReverse"));
}
voList.add(vo);
} else {
vo.setStatus_1(0);
vo.setStatus_2(0);
Map<String, String> IOdirMap = getDirName(ioDir.getInDir(), ioDir.getOutDir());
vo.setStatus_1_name("正常");
vo.setStatus_2_name("正常");
vo.setDir_1_name(IOdirMap.get("dirName"));
......@@ -91,31 +67,21 @@ public class TrunkLineImpl implements TrunkLineService {
return voList;
}
private Map<String, String> getDir(Integer inDir, Integer outDir) {
// 1 北 3 东 5 南 7 西
// 0 北向南 2东向西 4 西向东 6 南向北
private Map<String, String> getDirName(Integer inDir, Integer outDir) {
Map<String, String> result = new HashMap<>();
if (inDir == 5 && outDir == 1) { // 南向北
if (inDir == 5 && outDir == 1 || inDir == 1 && outDir == 5) { // 南向北
result.put("dir", "6");
result.put("dirReverse", "0");
result.put("dirName", "南向北");
result.put("dirNameReverse", "北向南");
return result;
} else if (inDir == 7 && outDir == 3) { // 西向东
} else if (inDir == 7 && outDir == 3 || inDir == 3 && outDir == 7) { // 西向东
result.put("dir", "4");
result.put("dirReverse", "2");
result.put("dirName", "西向东");
result.put("dirNameReverse", "东向西");
return result;
} else if (inDir == 3 && outDir == 7) { // 东向西
result.put("dir", "2");
result.put("dirName", "东向西");
result.put("dirNameReverse", "西向东");
return result;
} else if (inDir == 1 && outDir == 5) { // 北向南
result.put("dir", "0");
result.put("dirName", "北向南");
result.put("dirNameReverse", "南向北");
return result;
}
return Collections.emptyMap();
}
......@@ -136,4 +102,45 @@ public class TrunkLineImpl implements TrunkLineService {
}
return "";
}
/**
* @param inDir 进口方向
* @param outDir 出口方向
* @param dirs 方向数组
* @param status 状态
* @return 方向状态数组[方向1, 状态1, 方向2, 状态2]
*/
private String[] getDirStatus(Integer inDir, Integer outDir, String[] dirs, Integer status) {
Map<String, String> IODirMap = getDirName(inDir, outDir);
String[] result = new String[4];
if (Arrays.asList(dirs).contains(IODirMap.get("dir"))
&& Arrays.asList(dirs).contains(IODirMap.get("dirReverse"))
) {
result[0] = IODirMap.get("dirName");
result[1] = getStatusName(status);
result[2] = IODirMap.get("dirNameReverse");
result[3] = getStatusName(status);
} else if (Arrays.asList(dirs).contains(IODirMap.get("dirReverse"))
&& !Arrays.asList(dirs).contains(IODirMap.get("dir"))) {
result[0] = IODirMap.get("dirName");
result[1] = getStatusName(0);
result[2] = IODirMap.get("dirNameReverse");
result[3] = getStatusName(status);
} else if (Arrays.asList(dirs).contains(IODirMap.get("dir"))
&& !Arrays.asList(dirs).contains(IODirMap.get("dirReverse"))) {
result[0] = IODirMap.get("dirName");
result[1] = getStatusName(status);
result[2] = IODirMap.get("dirNameReverse");
result[3] = getStatusName(0);
} else {
result[0] = IODirMap.get("dirName");
result[1] = getStatusName(0);
result[2] = IODirMap.get("dirNameReverse");
result[3] = getStatusName(0);
}
return result;
}
}
......@@ -11,18 +11,14 @@ public class TrunkLineCrossProblemVO {
private String crossID;
@ApiModelProperty(value = "路口名称")
private String name;
@ApiModelProperty(value = "状态1")
private Integer status_1;
@ApiModelProperty(value = "状态2")
private Integer status_2;
@ApiModelProperty(value = "状态1名称")
private String status_1_name;
@ApiModelProperty(value = "状态2名称")
private String status_2_name;
@ApiModelProperty(value = "方向1")
private String dir_1_name;
@ApiModelProperty(value = "状态1名称")
private String status_1_name;
@ApiModelProperty(value = "方向2")
private String dir_2_name;
@ApiModelProperty(value = "状态2名称")
private String status_2_name;
@ApiModelProperty(value = "路口坐标")
private String wkt;
......
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