Commit 261e0a5e authored by Zheng Yi Fan's avatar Zheng Yi Fan

添加干线路口问题接口和相关功能- 新增干线路口问题接口 getTrunkLineCrossProblem

- 实现干线路口问题的处理逻辑
- 添加 TrunkLineCrossProblemEntity 和 TrunkLineCrossProblemVO 类
- 在 TrunkLineMapper 中新增 getTrunkLineCrossProblem 和 getIODir 方法
- 更新 TrunkLineMapper.xml,添加新的 SQL 查询语句
parent a856a804
......@@ -97,4 +97,24 @@ public class TrunkLineController {
return JsonViewObject.newInstance().fail("获取干线实时告警失败");
}
}
@ApiOperation(value = "干线路口问题", notes = "干线路口问题", response = JsonViewObject.class, httpMethod="GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "greenID", value = "绿波ID", required = true, dataType = "Integer", paramType = "query"),
@ApiImplicitParam(name = "time", value = "时间 格式:yyyy-MM-dd HH:ii:ss", dataType = "String", paramType = "query"),
})
@GetMapping(value = "/getTrunkLineCrossProblem")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = TrunkLineCrossProblemVO.class),
})
public JsonViewObject getTrunkLineCrossProblem(Integer greenID, @RequestParam(defaultValue = "") String time) {
try {
JsonViewObject object = JsonViewObject.newInstance();
List<TrunkLineCrossProblemVO> list = trunkLineService.getTrunkLineCrossProblem(greenID,time);
return object.success(list);
} catch (Exception e) {
log.error("获取干线路口问题失败: ", e);
return JsonViewObject.newInstance().fail("获取干线路口问题失败");
}
}
}
package net.wanji.opt.dao.mapper;
import io.lettuce.core.dynamic.annotation.Param;
import net.wanji.opt.synthesis.pojo.TrunkLineCrossProblemEntity;
import net.wanji.opt.synthesis.pojo.TrunkLineProblemDescribeEntity;
import net.wanji.opt.vo2.CrossRealTimeAlarmVO;
......@@ -25,4 +26,16 @@ public interface TrunkLineMapper{
* @return
*/
List<CrossRealTimeAlarmVO> getTrunkLineRealTimeAlarm(@Param("greenID") Integer greenID,@Param("time") String time);
/**
* 获取干线路口事件描述
* @return
*/
List<TrunkLineCrossProblemEntity> getTrunkLineCrossProblem(@Param("greenID") Integer greenID, @Param("time") String time);
/**
* 获取进出口方向
*/
TrunkLineCrossProblemEntity getIODir(@Param("greenID") Integer greenID);
}
......@@ -2,7 +2,7 @@ package net.wanji.opt.servicev2;
import net.wanji.opt.synthesis.pojo.TrunkLineProblemDescribeEntity;
import net.wanji.opt.vo2.CrossRealTimeAlarmVO;
import net.wanji.opt.vo2.TrunkLineProblemDescribeVO;
import net.wanji.opt.vo2.TrunkLineCrossProblemVO;
import java.util.List;
......@@ -22,4 +22,9 @@ public interface TrunkLineService {
* 获取干线实时告警
*/
List<CrossRealTimeAlarmVO> getTrunkLineRealTimeAlarm(Integer greenID, String time);
/**
* 干线路口事件描述列表
*/
List<TrunkLineCrossProblemVO> getTrunkLineCrossProblem(Integer greenID, String time);
}
......@@ -3,10 +3,10 @@ package net.wanji.opt.servicev2.implv2;
import lombok.extern.slf4j.Slf4j;
import net.wanji.opt.dao.mapper.TrunkLineMapper;
import net.wanji.opt.servicev2.TrunkLineService;
import net.wanji.opt.synthesis.pojo.TrunkLineCrossProblemEntity;
import net.wanji.opt.synthesis.pojo.TrunkLineProblemDescribeEntity;
import net.wanji.opt.vo2.CrossRealTimeAlarmVO;
import net.wanji.opt.vo2.TrunkLineProblemDescribeVO;
import org.jetbrains.annotations.NotNull;
import net.wanji.opt.vo2.TrunkLineCrossProblemVO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
......@@ -20,8 +20,7 @@ public class TrunkLineImpl implements TrunkLineService {
@Override
public List<TrunkLineProblemDescribeEntity> getTrunkLineProblemDescribe(String greenID , String time) {
List<TrunkLineProblemDescribeEntity> list = trunkLineMapper.getTrunkLineProblemDescribe(greenID,time);
return list;
return trunkLineMapper.getTrunkLineProblemDescribe(greenID,time);
}
@Override
......@@ -29,20 +28,108 @@ public class TrunkLineImpl implements TrunkLineService {
return trunkLineMapper.getTrunkLineRealTimeAlarm(greenID, time);
}
@NotNull
private static TrunkLineProblemDescribeVO getTrunkLineProblemDescribeVO(List<TrunkLineProblemDescribeEntity> list, int i) {
TrunkLineProblemDescribeVO vo = new TrunkLineProblemDescribeVO();
TrunkLineProblemDescribeEntity e = list.get(i);
TrunkLineProblemDescribeEntity e2= list.get(i +1);
vo.setGreenID(e.getGreenID());
vo.setTime(e.getTime());
vo.setStatus(e.getStatus());
vo.setDir(e.getDir());
vo.setStatusCN(e.getStatusCN());
vo.setDir2(e2.getDir());
vo.setStatus2(e.getStatus());
vo.setStatusCN2(e.getStatusCN());
return vo;
@Override
public List<TrunkLineCrossProblemVO> getTrunkLineCrossProblem(Integer greenID, String time) {
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();
vo.setCrossID(e.getCrossID());
vo.setName(e.getName());
if (e.getDirection() != null) {
Map<String, Integer> directionMap = new HashMap<>();
for (String s : e.getDirection()) {
directionMap.put(s, directionMap.getOrDefault(s, 0) + 1);
}
Integer count = directionMap.getOrDefault(IOdirMap.get("dir"), 0);
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);
vo.setStatus_1_name("正常");
vo.setStatus_2_name("正常");
vo.setDir_1_name(IOdirMap.get("dirName"));
vo.setDir_2_name(IOdirMap.get("dirNameReverse"));
voList.add(vo);
}
}
return voList;
}
private Map<String, String> getDir(Integer inDir, Integer outDir) {
// 1 北 3 东 5 南 7 西
// 0 北向南 2东向西 4 西向东 6 南向北
Map<String, String> result = new HashMap<>();
if (inDir == 5 && outDir == 1) { // 南向北
result.put("dir", "6");
result.put("dirName", "南向北");
result.put("dirNameReverse", "北向南");
return result;
} else if (inDir == 7 && outDir == 3) { // 西向东
result.put("dir", "4");
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();
}
private String getStatusName(Integer status) {
switch(status) {
case -1:
case 0:
return "正常";
case 1:
return "失衡";
case 3:
return "拥堵";
case 4:
return "死锁";
case 5:
return "相位空放";
}
return "";
}
}
package net.wanji.opt.synthesis.pojo;
import lombok.Data;
@Data
public class TrunkLineCrossProblemEntity {
private String crossID;
private String name;
private Integer inDir;
private Integer outDir;
private Integer status;
private String[] direction;
private String startTime;
}
package net.wanji.opt.vo2;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "TrunkLineCrossProblemVO", description = "干线路口事件描述")
public class TrunkLineCrossProblemVO {
@ApiModelProperty(value = "路口ID")
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 = "方向2")
private String dir_2_name;
}
......@@ -13,7 +13,6 @@
<result property="dir" column="dir"></result>
</resultMap>
<select id="getTrunkLineProblemDescribe" parameterType="String" resultMap="tlProblemDescribe">
select b.greenID ,b.status ,b.time , (
case
......@@ -74,5 +73,40 @@
</if>
) b
</select>
<select id="getTrunkLineCrossProblem" parameterType="map" resultType="net.wanji.opt.synthesis.pojo.TrunkLineCrossProblemEntity">
select
a.cross_id,
b.name,
a.`status`,
a.direction ,
MAX(a.start_time) as start_time
from
t_cross_data_hist a
left join t_base_cross_info b on
a.cross_id = b.id
where
a.cross_id in (
select
cross_id
from
t_greenwave_cross
where
green_id = #{greenID})
<if test="time != null and time != ''">
and DATE_FORMAT(a.start_time, '%Y-%m-%d %H:%i:%s') <![CDATA[ <= ]]> DATE_FORMAT(#{time}, '%Y-%m-%d %H:%i:%s')
</if>
group by
a.cross_id
</select>
<select id="getIODir" parameterType="map" resultType="net.wanji.opt.synthesis.pojo.TrunkLineCrossProblemEntity">
select
distinct a.in_dir,
a.out_dir
from
t_greenwave_cross a
where
a.green_id = #{greenID}
</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