Commit 1946b6d7 authored by zhoushiguang's avatar zhoushiguang

协调方向、非协调方向-5分钟指标

parent f1c25dc0
......@@ -72,7 +72,7 @@ public class Knife4jConfiguration {
@Bean(value = "defaultApi2")
public Docket defaultApi2() {
String groupName="v0.1版本";
String groupName="信控调优平台接口";
Docket docket=new Docket(DocumentationType.SWAGGER_2)
//.host(swaggerDocUrl)
.apiInfo(apiInfo())
......@@ -89,8 +89,8 @@ public class Knife4jConfiguration {
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("全息路段接口文档")
.description("全息路口监测系统 RESTful APIs")
.title("信控调优平台")
.description("信控调优平台 RESTful APIs")
//.termsOfServiceUrl(swaggerDocUrl)
.contact("wj@qq.com")
.version("0.1")
......
......@@ -32,7 +32,7 @@ public class Swagger2 {
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
//页面标题
.title("万集科技-城市交通信号优化系统")
.title("信控调优平台")
//创建人
.contact(new Contact("test", "#", "signal-opt@wanji.net.cn"))
//版本号
......
......@@ -16,6 +16,7 @@ import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.framework.rest.impl.AbstractRestServerImpl;
import net.wanji.opt.entity.GreenwaveHist;
import net.wanji.opt.po.base.CrossLaneDataHistPoExtend;
import net.wanji.opt.po.trend.GreenwaveCrossTrendPo;
import net.wanji.opt.service.GreenwaveHistProvider;
import net.wanji.opt.vo.GreenWaveRunStateVO;
import net.wanji.opt.vo.GreenwaveCrossMetricsVO;
......@@ -130,7 +131,7 @@ public class GreenwaveHistRestServer {
}
@GetMapping("/findUnCoordinateDirIndex")
@ApiOperation(httpMethod="GET",value="绿波非协调方向->指标趋势", notes="")
@ApiOperation(httpMethod="GET",value="绿波协调方向、非协调方向->指标趋势", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "crossId", value = "路口ID", required = true, dataType = "String",defaultValue = "13MOD0B5SI0"),
@ApiImplicitParam(name = "greenDir", value = "绿波协调方向,多个逗号分隔", required = true, dataType = "String",defaultValue = "5,7"),
......@@ -138,7 +139,7 @@ public class GreenwaveHistRestServer {
@ApiImplicitParam(name = "endTime", value = "截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false, dataType = "String",defaultValue = "2024-12-04 23:59:59")
})
@ApiResponses({
@ApiResponse(code = 200, message = "成功", response = GreenwaveHist.class,
@ApiResponse(code = 200, message = "成功", response = GreenwaveCrossTrendPo.class,
responseHeaders = {@ResponseHeader(name = "Content-Type", description = "application/json")})
})
public JsonViewObject findUnCoordinateDirIndex(String crossId,String greenDir,String startTime,String endTime) {
......
......@@ -109,7 +109,7 @@ public class CrossIndexController {
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@GetMapping(value = "/crossStatusCount")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = AddOrUpdateSceneDTO.class),
@ApiResponse(code = 200, message = "OK", response = CrossStatusCountVO.class),
})
public JsonViewObject crossStatusCount(String crossId) {
List<CrossStatusCountVO> results = new ArrayList<>();
......
......@@ -7,6 +7,7 @@ import net.wanji.databus.po.CrossDirDataHistPO;
import net.wanji.databus.po.CrossTurnDataHistPO;
import net.wanji.opt.entity.GreenwaveHist;
import net.wanji.opt.po.base.CrossLaneDataHistPoExtend;
import net.wanji.opt.po.trend.GreenwaveCrossTrendPo;
import net.wanji.opt.vo.GreenWaveRunStateVO;
import org.apache.ibatis.annotations.Param;
......@@ -41,7 +42,7 @@ public interface GreenwaveHistoryMapper extends BaseInterfaceMapper<GreenwaveHis
* 查看非协调方向路口指标
* @return
*/
List<GreenwaveHist> findUnCoordinateCrossIndex(Map<String,Object> params);
List<Map<String,Object>> findUnCoordinateCrossIndex(Map<String,Object> params);
/**
* 绿波路口方向级指标查询
......
package net.wanji.opt.po.trend;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.common.framework.domain.TrackableEntity;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
* 绿波历史数据
* </p>
*
* @Author fengyi
* @Date 2024-11-18
*/
@Data
@ApiModel(value="GreenwaveCrossTrendPo", description="干线路口协调方向、非协调方向指标")
public class GreenwaveCrossTrendPo extends TrackableEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "绿波车流方向")
private String roadDirection;
@ApiModelProperty(value = "路口ID")
private String crossId;
@ApiModelProperty(value = "绿波编号")
private Integer greenId;
@ApiModelProperty(value = "协调方向停车次数")
private BigDecimal cordStopTimes;
@ApiModelProperty(value = "协调方向排队(米)")
private BigDecimal cordQueueLength;
@ApiModelProperty(value = "协调方向流量")
private BigDecimal cordFlow;
@ApiModelProperty(value = "非协调方向停车次数")
private BigDecimal unCordStopTimes;
@ApiModelProperty(value = "非协调方向排队(米)")
private BigDecimal unCordQueueLength;
@ApiModelProperty(value = "非协调方向流量")
private BigDecimal unCordFlow;
@ApiModelProperty(value = "开始时间:yyyy-MM-dd HH:mm:ss")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date startTime;
}
......@@ -219,12 +219,13 @@ public class EventServiceImpl implements EventService {
}
});
});
tmpList.forEach(po -> {
String axis = DateUtil.formatDate(po.getStartTime(), "M/d") + "," + DateUtil.formatDate(po.getStartTime(), "HH:mm") +","+ po.getEventType();
List<EventInfoSimplePo> sortList = tmpList.stream().sorted(Comparator.comparing(o->o.getStartTime())).collect(Collectors.toList());
sortList.forEach(po -> {
String axis = DateUtil.formatDate(po.getStartTime(), "M/d") + "," + DateUtil.formatDate(po.getStartTime(), "HH:mm:ss") +","+ po.getEventType();
dataserList.add(axis);
});
Map<String, Object> map = new HashMap<>();
map.put("statusByDateList", tmpList);
map.put("statusByDateList", sortList);
map.put("dataser", dataserList);
retList.add(map);
// Set<String> timeList = group.keySet();
......
......@@ -24,6 +24,7 @@ import net.wanji.opt.constant.ServiceLevelEnum;
import net.wanji.opt.dao.mapper.GreenwaveHistoryMapper;
import net.wanji.opt.entity.GreenwaveHist;
import net.wanji.opt.po.base.CrossLaneDataHistPoExtend;
import net.wanji.opt.po.trend.GreenwaveCrossTrendPo;
import net.wanji.opt.service.GreenwaveHistProvider;
import net.wanji.opt.service.MainlineEvaluateService;
import net.wanji.opt.vo.GreenWaveRunStateVO;
......@@ -36,6 +37,7 @@ import org.joda.time.format.DateTimeFormatter;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
......@@ -153,41 +155,56 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
params.put("endDate", endTime);
params.put("greenDir", greenDir);
List<GreenwaveHist> list = greenwaveHistoryMapper.findUnCoordinateCrossIndex(params);
list = list.stream().sorted(Comparator.comparing(o -> o.getStartTime())).collect(Collectors.toList());
List<Map<String,Object>> getList = greenwaveHistoryMapper.findUnCoordinateCrossIndex(params);
List<GreenwaveCrossTrendPo> list = new ArrayList<>();
//存放时段
Set<String> sortedSet = new TreeSet<>();
//存放所有数据
List<Map<String, Object>> allList = new ArrayList<>();
//按时间分组分组
Map<Integer, List<GreenwaveHist>> groupByDir = list.stream().collect(Collectors.groupingBy(o -> o.getDirection(), TreeMap::new, Collectors.toList()));
List<Map<String, Object>> turnList = new ArrayList<>();
for (Map<String,Object> map : getList) {
GreenwaveCrossTrendPo po = new GreenwaveCrossTrendPo();
String crossNo = map.get("cross_id").toString();
String st = map.get("start_time").toString();
po.setCrossId(crossNo);
po.setStartTime(DateTime.parse(st,DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).toDate());
//提取时间
sortedSet.add(DateUtil.formatDate(po.getStartTime(), "HH:mm"));
for (Map.Entry<Integer, List<GreenwaveHist>> entry : groupByDir.entrySet()) {
Integer key = entry.getKey();
String indexList = map.get("index_list").toString();
List<GreenwaveCrossTrendPo> finalList = new ArrayList<>();
Arrays.stream(indexList.split("@")).forEach(o->{
String[] sps = o.split(",");
String type = sps[0];
String queueLength = sps[1];
String stopTimes = sps[2];
String flow = sps[3];
if (Objects.equals("1",type)) {
//非协调方向
po.setUnCordFlow(new BigDecimal(flow));
po.setUnCordQueueLength(new BigDecimal(queueLength));
po.setUnCordStopTimes(new BigDecimal(stopTimes));
} else if (Objects.equals("2",type)){
//协调方向
po.setCordFlow(new BigDecimal(flow));
po.setCordQueueLength(new BigDecimal(queueLength));
po.setCordStopTimes(new BigDecimal(stopTimes));
}
finalList.add(po);
});
//按方向排序
List<GreenwaveHist> value = entry.getValue().stream().sorted(Comparator.comparing(o -> o.getStartTime())).collect(Collectors.toList());
list.addAll(finalList);
Map<String, Object> mapList = new HashMap<>();
mapList.put("direction", key);
mapList.put("list", value);
allList.add(mapList);
for (GreenwaveHist po : value) {
Map<String, Object> turnMap = new HashMap<>();
turnMap.put("direction", po.getDirection());
if (!turnList.contains(turnMap)) {
turnList.add(turnMap);
}
//提取时间
sortedSet.add(DateUtil.formatDate(po.getStartTime(), "HH:mm"));
}
}
//排序
list = list.stream().sorted(Comparator.comparing(o -> o.getStartTime())).collect(Collectors.toList());
//存放所有数据
List<Map<String, Object>> allList = new ArrayList<>();
Map<String, Object> mapList = new HashMap<>();
//mapList.put("direction", key);
mapList.put("list", list);
allList.add(mapList);
JSONObject jsonObject = new JSONObject();
jsonObject.put("timeList", sortedSet);
......
......@@ -72,26 +72,41 @@
GROUP BY green_id,road_direction,DATE_FORMAT( start_time, '%Y-%m-%d %H:%i:00' );
</select>
<!-- 查看非协调方向路口指标 -->
<select id="findUnCoordinateCrossIndex" resultMap="BaseResultMap">
<!-- 查看路口协调/非协调方向5分钟粒度平均指标 -->
<select id="findUnCoordinateCrossIndex" resultType="map">
SELECT t.cross_id,
t.direction,
MAX(t.queue_length) queue_length,
round(avg(stop_times), 2) stop_times,
DATE_FORMAT(t.start_time, '%Y-%m-%d %H:%i:00') start_time
t.start_time,
group_concat(concat(t.type,',',t.queue_length,',',T.stop_times,',',T.flow) SEPARATOR '@') index_list
FROM (
SELECT cross_id,
dir_type direction,
queue_length,
stop_times,
start_time
avg(queue_length) queue_length,
round(avg(stop_times), 2) stop_times,
DATE_FORMAT(start_time, '%Y-%m-%d %H:%i:00') start_time,
round(avg(flow)) flow,
1 as type
FROM t_cross_dir_data_hist a
WHERE cross_id = #{crossId}
AND dir_type not in (#{greenDir})
AND start_time BETWEEN #{startDate}
AND #{endDate}
AND dir_type not in (SELECT in_dir from t_greenwave_cross where cross_id=#{crossId}
union SELECT out_dir from t_greenwave_cross where cross_id=#{crossId}
)
AND start_time BETWEEN #{startDate} AND #{endDate}
GROUP BY cross_id, start_time
UNION
SELECT cross_id,
avg(queue_length) queue_length,
round(avg(stop_times), 2) stop_times,
DATE_FORMAT(start_time, '%Y-%m-%d %H:%i:00') start_time,
round(avg(flow)) flow,
2 as type
FROM t_cross_dir_data_hist a
WHERE cross_id = #{crossId}
AND dir_type in (SELECT in_dir from t_greenwave_cross where cross_id=#{crossId}
union SELECT out_dir from t_greenwave_cross where cross_id=#{crossId}
)
AND start_time BETWEEN #{startDate} AND #{endDate}
GROUP BY cross_id, start_time
) t
GROUP BY t.cross_id, DATE_FORMAT(start_time, '%Y-%m-%d %H:%i:00')
GROUP BY t.cross_id,t.start_time
;
</select>
......
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