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

refactor(signal-optimize): 重构路口状态分布接口

- 修改 getCrossStatusDistribution 方法签名,简化返回类型
- 优化路口状态分布数据处理逻辑
- 新增 getOptTimeList 方法获取路口优化时间
- 更新相关控制器和服务接口
parent 827b58e7
......@@ -3,12 +3,12 @@ package net.wanji.opt.controllerv2;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.po.base.CrossLaneDataHistPoExtend;
import net.wanji.opt.servicev2.CrossService;
import net.wanji.opt.synthesis.pojo.CrossRealTimeAlarmEntity;
import net.wanji.opt.synthesis.pojo.CrossStatusDisOptTimeEntity;
import net.wanji.opt.vo2.CrossRealTimeAlarmVO;
import net.wanji.opt.vo2.CrossStatusDistributionVO;
import org.springframework.http.HttpMethod;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
......@@ -37,22 +37,46 @@ public class CrossController {
@ApiImplicitParam(name = "groupType", value = "时间粒度 0--5分钟 1--15分钟 2--30分钟 3--60分钟", required = true, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "date", value = "日期 格式:yyyy-MM-dd", required = true, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "objectType", value = "范围 1:方向级指标 2:转向级指标 3:车道级指标 4:路口级指标", required = true, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "directionName", value = "方向", required = false, dataType = "String",defaultValue = "北进口"),
@ApiImplicitParam(name = "directionName", value = "方向 支持 北进口;东进口;南进口;西进口", dataType = "String", defaultValue = "北进口;东进口;南进口;西进口"),
})
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = CrossStatusDistributionVO.class),
})
public JsonViewObject getCrossStatusDistribution(String crossID, String date, String groupType, Integer objectType, @RequestParam(defaultValue = "") String directionName) {
public JsonViewObject getCrossStatusDistribution(String crossID, String date, String groupType, Integer objectType, String directionName) {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
Map<String, List<?>> result;
try {
result = crossService.getCrossStatusDistribution(crossID, date, groupType, objectType, directionName);
} catch (Exception e) {
log.error("监测详情-路口事件详情-路口状态分布: ", e);
return jsonViewObject.fail("路口状态分布查询失败");
Map<String, Object> map = new HashMap<>();
String[] dirs = directionName.split(";");
for (String dir : dirs) {
String dirName = "";
switch (dir) {
case "北进口":
dirName = "northList";
break;
case "南进口":
dirName = "southList";
break;
case "西进口":
dirName = "westList";
break;
case "东进口":
dirName = "eastList";
break;
}
try {
List<CrossStatusDistributionVO> info = crossService.getCrossStatusDistribution(crossID, date, groupType, objectType, dir);
map.put(dirName, info);
} catch (Exception e) {
log.error("监测详情-路口事件详情-路口状态分布: ", e);
return jsonViewObject.fail("路口状态分布查询失败");
}
}
return jsonViewObject.success(result);
map.put("optTimeList", crossService.getOptTimeList(crossID));
return jsonViewObject.success(map);
}
@ApiOperation(value = "路口实时告警", notes = "路口实时告警", response = JsonViewObject.class, httpMethod="GET")
......
......@@ -44,8 +44,6 @@ public class TrunkLineController {
responseHeaders = {@ResponseHeader(name = "Content-Type", description = "application/json")})
})
public JsonViewObject statusDisInfoList(String greenID, String date, String timeGranule) {
try {
JsonViewObject object = JsonViewObject.newInstance();
JSONObject list = trunkLineStatusDisService.trunkLineStatusDisInfoList(greenID, date, timeGranule);
......
package net.wanji.opt.servicev2;
import net.wanji.opt.synthesis.pojo.CrossRealTimeAlarmEntity;
import net.wanji.opt.synthesis.pojo.CrossStatusDisOptTimeEntity;
import net.wanji.opt.vo2.CrossStatusDistributionVO;
import java.util.List;
......@@ -23,14 +24,20 @@ public interface CrossService {
* @param directionName 方向
* @return 包含状态分布信息列表与优化时间列表
*/
Map<String, List<?>> getCrossStatusDistribution(String crossID, String date, String groupType, Integer objectType, String directionName);
List<CrossStatusDistributionVO> getCrossStatusDistribution(String crossID, String date, String groupType, Integer objectType, String directionName);
/**
* 获取路口实时告警
* @param crossID
* @param crossID 路口ID
* @param time 可选参数
* @return
*/
List<CrossRealTimeAlarmEntity> getCrossRealTimeAlarm(String crossID, String time);
/**
* 获取路口优化时间
* @param crossID 路口ID
* @return
*/
List<CrossStatusDisOptTimeEntity> getOptTimeList(String crossID);
}
package net.wanji.opt.servicev2.implv2;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.enums.BaseEnum;
import net.wanji.common.utils.tool.StringUtils;
......@@ -11,18 +9,19 @@ import net.wanji.opt.po.base.CrossLaneDataHistPoExtend;
import net.wanji.opt.servicev2.CrossService;
import net.wanji.opt.synthesis.pojo.CrossRealTimeAlarmEntity;
import net.wanji.opt.synthesis.pojo.CrossStatusDisOptTimeEntity;
import net.wanji.opt.synthesis.pojo.StrategyCrossResultEntity;
import net.wanji.opt.vo2.CrossStatusDistributionVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
* 监测详情-路口事件详情
* 监测详情-路口事件详情
*
* @author zhengyifan
* @date 2025/3/15
*/
......@@ -36,18 +35,19 @@ public class CrossServiceImpl implements CrossService {
/**
* 路口状态分布
* @param crossID 路口ID
* @param date 日期
* @param groupType 时间粒度 参数要求:0--5分钟 1--15分钟 2--30分钟 3--60分钟
* @param objectType 范围 参数要求:1--方向级 2--转向级 3--车道级 4--路口级
* @param directionName 方向
*
* @param crossID 路口ID
* @param date 日期
* @param groupType 时间粒度 参数要求:0--5分钟 1--15分钟 2--30分钟 3--60分钟
* @param objectType 范围 参数要求:1--方向级 2--转向级 3--车道级 4--路口级
* @param directionName 方向 东南西北
* @return
*/
@Override
public Map<String, List<?>> getCrossStatusDistribution(String crossID, String date, String groupType, Integer objectType, String directionName) {
public List<CrossStatusDistributionVO> getCrossStatusDistribution(String crossID, String date, String groupType, Integer objectType, String directionName) {
Map<String, Object> params = new HashMap<>();
params.put("crossId", crossID);
params.put("startDate", date+" 00:00:00");
params.put("startDate", date + " 00:00:00");
params.put("endDate", date + " 23:59:59");
params.put("groupType", groupType);
params.put("objectType", objectType);
......@@ -56,35 +56,43 @@ public class CrossServiceImpl implements CrossService {
}
List<CrossLaneDataHistPoExtend> firstList = greenwaveHistoryMapper.findCrossObjectIndex(params);
List<CrossStatusDisOptTimeEntity> optTimeList = crossMapper.getOptTimes(crossID);
List<CrossStatusDistributionVO> infoList = new ArrayList<>();
List<CrossStatusDistributionVO> results = new ArrayList<>();
for (CrossLaneDataHistPoExtend c : firstList) {
CrossStatusDistributionVO info = new CrossStatusDistributionVO();
info.setSpeed(c.getSpeed());
info.setQueueLength(c.getAvgQueueLength());
info.setDelayTime(c.getDelayTime());
info.setStopTimes(c.getStopTimes());
for (CrossLaneDataHistPoExtend c: firstList) {
CrossStatusDistributionVO cd = new CrossStatusDistributionVO();
info.setStartTime(c.getStartTime().toString().substring(11,16));
infoList.add(info);
}
cd.setSpeed(c.getSpeed());
cd.setStartTime(c.getStartTime().toString().substring(11, 16));
cd.setDelayTime(c.getDelayTime());
cd.setTurnType(c.getTurnType());
cd.setTurnTypeName(BaseEnum.TurnTypeEnum.getNameByCode(c.getTurnType()));
cd.setDirType(c.getDirType());
cd.setDirTypeName(BaseEnum.SignalDirectionEnum.getNameByCode(c.getDirType()));
cd.setStopTimes(c.getStopTimes());
cd.setQueueLength(c.getAvgQueueLength());
cd.setLaneNo(c.getLaneNo());
Map<String, List<?>> result = new HashMap<>();
result.put("infoList", infoList);
result.put("optTimeList", optTimeList);
results.add(cd);
}
return result;
return results;
}
/**
* 路口实时告警
* @param crossID
* @param time 可选参数
*
* @param crossID 路口ID
* @param time 可选参数
* @return
*/
@Override
public List<CrossRealTimeAlarmEntity> getCrossRealTimeAlarm(String crossID, String time) {
return crossMapper.getCrossRealTimeAlarms(crossID, time);
}
@Override
public List<CrossStatusDisOptTimeEntity> getOptTimeList(String crossID) {
return crossMapper.getOptTimes(crossID);
}
}
......@@ -21,4 +21,14 @@ public class CrossStatusDistributionVO {
private Double stopTimes;
@ApiModelProperty(value = "时间")
private String startTime;
@ApiModelProperty(value = "车道号", notes = "")
private Integer laneNo;
@ApiModelProperty(value = "方向", notes = "")
private Integer dirType;
@ApiModelProperty(value = "方向描述", notes = "")
private String dirTypeName;
@ApiModelProperty(value = "转向功能", notes = "")
private Integer turnType;
@ApiModelProperty(value = "转向功能描述", notes = "")
private String turnTypeName;
}
......@@ -127,7 +127,7 @@ public class BaseEnum {
private String nick;
public static SignalDirectionEnum getNickByCode(int code) {
public static SignalDirectionEnum getNickByCode(Integer code) {
for (SignalDirectionEnum signalDirectionEnum : SignalDirectionEnum.values()) {
if (signalDirectionEnum.getCode() == code) {
return signalDirectionEnum;
......@@ -136,7 +136,7 @@ public class BaseEnum {
return null;
}
public static String getNameByCode(int code) {
public static String getNameByCode(Integer code) {
for (SignalDirectionEnum signalDirectionEnum : SignalDirectionEnum.values()) {
if (signalDirectionEnum.getCode() == code) {
return signalDirectionEnum.getName();
......
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