Commit f3d0c67c authored by hanbing's avatar hanbing

[add] 干线评价-根据时段查询绿波

parent 8d0eb7b8
package net.wanji.opt.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author Kent HAN
* @date 2023/6/9 13:52
*/
@Data
@ApiModel(value = "MainlineSchemeAnalysisBO", description = "干线方案分析")
public class MainlineSchemeAnalysisBO {
@ApiModelProperty(value = "干线名称")
private String name;
@ApiModelProperty(value = "分析时段开始时间 格式 yyyy-MM-dd HH:mm:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTime;
@ApiModelProperty(value = "分析时段结束时间 格式 yyyy-MM-dd HH:mm:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date endTime;
}
......@@ -4,19 +4,21 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import net.wanji.common.annotation.aspect.AspectLog;
import net.wanji.common.enums.BaseEnum;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.bo.BottomCurveBO;
import net.wanji.opt.bo.BottomMenuBO;
import net.wanji.opt.bo.MainlineSchemeAnalysisBO;
import net.wanji.opt.service.impl.MainlineEvaluateServiceImpl;
import net.wanji.opt.vo.MainlineEvaluateBottomCurveVO;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import net.wanji.opt.vo.MainlineSchemeAnalysisVO;
import org.springframework.web.bind.annotation.*;
import javax.ws.rs.core.MediaType;
import java.text.ParseException;
import java.util.List;
import java.util.Set;
@Api(value = "MainlineEvaluateController", description = "干线评价")
@RequestMapping("/mainlineEvaluate")
......@@ -52,4 +54,24 @@ public class MainlineEvaluateController {
List<MainlineEvaluateBottomCurveVO> res = mainlineEvaluateService.bottomCurve(bo);
return JsonViewObject.newInstance().success(res);
}
@AspectLog(description = "干线列表", operationType = BaseEnum.OperationTypeEnum.QUERY)
@ApiOperation(value = "干线列表", notes = "干线列表")
@GetMapping("/mainlineList")
public JsonViewObject mainlineList() {
Set<String> res = mainlineEvaluateService.mainlineList();
return JsonViewObject.newInstance().success(res);
}
@ApiOperation(value = "干线方案分析", notes = "干线方案分析", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/mainlineSchemeAnalysis",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = MainlineSchemeAnalysisVO.class),
})
public JsonViewObject mainlineSchemeAnalysis(@RequestBody MainlineSchemeAnalysisBO bo) {
MainlineSchemeAnalysisVO res = mainlineEvaluateService.mainlineSchemeAnalysis(bo);
return JsonViewObject.newInstance().success(res);
}
}
\ No newline at end of file
......@@ -20,4 +20,5 @@ public interface GreenwaveInfoMapper {
GreenwaveInfoPO selectById(Integer id);
List<GreenwaveInfoPO> selectAll();
}
......@@ -15,7 +15,7 @@ public class ScenePO {
private Integer id ;
@ApiModelProperty(value = "编号",notes = "")
private String sceneCode ;
@ApiModelProperty(value = "场景代码 0正常 1失衡 2拥堵 3溢出",notes = "")
@ApiModelProperty(value = "场景代码 0正常 1失衡 2拥堵 3溢出 4死锁 5单向绿波 6双向绿波 7单向红波 8双向红波",notes = "")
private Integer sceneNum ;
@ApiModelProperty(value = "场景名称",notes = "")
private String sceneName ;
......
......@@ -2,14 +2,21 @@ package net.wanji.opt.service;
import net.wanji.opt.bo.BottomCurveBO;
import net.wanji.opt.bo.BottomMenuBO;
import net.wanji.opt.bo.MainlineSchemeAnalysisBO;
import net.wanji.opt.vo.MainlineEvaluateBottomCurveVO;
import net.wanji.opt.vo.MainlineSchemeAnalysisVO;
import java.text.ParseException;
import java.util.List;
import java.util.Set;
public interface MainlineEvaluateService {
List<String> bottomMenu(BottomMenuBO bo);
List<MainlineEvaluateBottomCurveVO> bottomCurve(BottomCurveBO bo) throws ParseException;
Set<String> mainlineList();
MainlineSchemeAnalysisVO mainlineSchemeAnalysis(MainlineSchemeAnalysisBO bo);
}
......@@ -5,12 +5,17 @@ import net.wanji.common.enums.BaseEnum;
import net.wanji.common.enums.StrategyAndMetricsEnum;
import net.wanji.common.enums.TurnConvertEnum;
import net.wanji.databus.dao.entity.BaseCrossDirInfoPO;
import net.wanji.databus.dao.entity.GreenwaveHistPO;
import net.wanji.databus.dao.entity.GreenwaveInfoPO;
import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.po.*;
import net.wanji.opt.bo.BottomCurveBO;
import net.wanji.opt.bo.BottomMenuBO;
import net.wanji.opt.bo.MainlineSchemeAnalysisBO;
import net.wanji.opt.dao.mapper.trend.GreenwaveInfoMapper;
import net.wanji.opt.service.MainlineEvaluateService;
import net.wanji.opt.vo.MainlineEvaluateBottomCurveVO;
import net.wanji.opt.vo.MainlineSchemeAnalysisVO;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
......@@ -33,6 +38,8 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
private final CrossDataHistMapper crossDataHistMapper;
private final CrossTurnDataHistMapper crossTurnDataHistMapper;
private final CrossLaneDataHistMapper crossLaneDataHistMapper;
private final GreenwaveInfoMapper greenwaveInfoMapper;
private final GreenwaveHistMapper greenwaveHistMapper;
SimpleDateFormat hourMinuteFormat = new SimpleDateFormat("HH:mm");
SimpleDateFormat dateHourMinuteFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
......@@ -41,7 +48,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
@Qualifier("baseCrossTurnInfoMapper") BaseCrossTurnInfoMapper baseCrossTurnInfoMapper,
CrossBaseLaneInfoMapper crossBaseLaneInfoMapper,
@Qualifier("laneInfoMapper") LaneInfoMapper laneInfoMapper,
CrossDirDataHistMapper crossDirDataHistMapper, CrossDataHistMapper crossDataHistMapper, CrossTurnDataHistMapper crossTurnDataHistMapper, CrossLaneDataHistMapper crossLaneDataHistMapper) {
CrossDirDataHistMapper crossDirDataHistMapper, CrossDataHistMapper crossDataHistMapper, CrossTurnDataHistMapper crossTurnDataHistMapper, CrossLaneDataHistMapper crossLaneDataHistMapper, @Qualifier("greenwaveInfoMapper") GreenwaveInfoMapper greenwaveInfoMapper, @Qualifier("greenwaveHistMapper") GreenwaveHistMapper greenwaveHistMapper) {
this.baseCrossDirInfoMapper = baseCrossDirInfoMapper;
this.baseCrossTurnInfoMapper = baseCrossTurnInfoMapper;
this.laneInfoMapper = laneInfoMapper;
......@@ -49,6 +56,8 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
this.crossDataHistMapper = crossDataHistMapper;
this.crossTurnDataHistMapper = crossTurnDataHistMapper;
this.crossLaneDataHistMapper = crossLaneDataHistMapper;
this.greenwaveInfoMapper = greenwaveInfoMapper;
this.greenwaveHistMapper = greenwaveHistMapper;
}
@Override
......@@ -470,6 +479,34 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
return res;
}
@Override
public Set<String> mainlineList() {
List<GreenwaveInfoPO> poList = greenwaveInfoMapper.selectAll();
Set<String> res = new HashSet<>();
for (GreenwaveInfoPO greenwaveInfoPO : poList) {
String name = greenwaveInfoPO.getName(); // 例:旅游路:转山西路至霞景路路段双向绿波1
String[] split = name.split(":");
res.add(split[0]);
}
return res;
}
@Override
public MainlineSchemeAnalysisVO mainlineSchemeAnalysis(MainlineSchemeAnalysisBO bo) {
String mainlineName = bo.getName();
Date poStartTime = bo.getStartTime();
Date poEndTime = bo.getEndTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String poStartTimeStr = sdf.format(poStartTime);
String poEndTimeStr = sdf.format(poEndTime);
// 根据时段查询所有发生的绿波
List<GreenwaveHistPO> greenwaveHistPOList = greenwaveHistMapper
.selectByTimeSection(poStartTimeStr, poEndTimeStr);
return null;
}
private Date calcDate(String timeStr, Date startTime) throws ParseException {
// 使用 Calendar 来获取年、月、日信息
Calendar calendar = Calendar.getInstance();
......
package net.wanji.opt.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author Kent HAN
* @date 2023/2/9 8:38
*/
@Data
@NoArgsConstructor
@ApiModel(value = "MainlineSchemeAnalysisVO", description = "干线方案分析")
public class MainlineSchemeAnalysisVO {
@ApiModelProperty(value = "场景数据")
private List<DirectionData> sceneData;
@ApiModelProperty(value = "关键路口数据")
private List<CrossData> crossData;
@ApiModelProperty(value = "评价")
private List<String> evaluateData;
@ApiModelProperty(value = "干线方案评价下拉菜单")
private List<GreenwaveData> greenwaveData;
@Data
public static class DirectionData {
@ApiModelProperty(value = "场景名称")
private String name;
@ApiModelProperty(value = "次数")
private Integer times;
}
@Data
public static class CrossData {
@ApiModelProperty(value = "关键路口名称")
private String name;
@ApiModelProperty(value = "关键路口次数")
private Integer times;
}
@Data
public static class GreenwaveData {
@ApiModelProperty(value = "方案名称")
private String name;
@ApiModelProperty(value = "方向下拉列表")
private List<DirectionList> dirList;
}
@Data
public static class DirectionList {
@ApiModelProperty(value = "方向名称")
private String name;
@ApiModelProperty(value = "指标列表")
private List<String> metricList;
}
}
......@@ -2,6 +2,10 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.trend.GreenwaveInfoMapper">
<sql id="baseColumnList">
id,name,length,width,dir,start_time,end_time,design_speed,design_cycly,section_id,status,wkt,gmt_create,gmt_modified
</sql>
<select id="listGreenwave" resultType="net.wanji.opt.vo.GreenwaveListVO">
select
t1.id, t1.name, t1.status as infoStatus, t2.status as realtimeStatus,
......@@ -28,10 +32,14 @@
</select>
<select id="selectById" resultType="net.wanji.databus.dao.entity.GreenwaveInfoPO">
select
id,name,length,width,dir,start_time,end_time,design_speed,design_cycly,section_id,status,wkt,gmt_create,gmt_modified
select <include refid="baseColumnList"></include>
from t_greenwave_info
where id = #{id}
</select>
<select id="selectAll" resultType="net.wanji.databus.dao.entity.GreenwaveInfoPO">
select <include refid="baseColumnList"></include>
from t_greenwave_info
</select>
</mapper>
package net.wanji.databus.dao.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
......@@ -9,4 +10,6 @@ import lombok.Data;
@Data
public class GreenwaveHistPO extends GreenwaveRealtimePO{
@ApiModelProperty(value = "绿波名称",notes = "")
private String greenwaveName ;
}
package net.wanji.databus.dao.mapper;
import net.wanji.databus.dao.entity.GreenwaveHistPO;
import net.wanji.databus.dao.entity.GreenwaveHistPOExt;
import org.springframework.stereotype.Repository;
......@@ -13,4 +14,6 @@ import java.util.List;
@Repository
public interface GreenwaveHistMapper {
List<GreenwaveHistPOExt> selectRunMonitor(Date nowTime);
List<GreenwaveHistPO> selectByTimeSection(String startTimeStr, String endTimeStr);
}
......@@ -2,6 +2,11 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.databus.dao.mapper.GreenwaveHistMapper">
<sql id="Base_Column_List">
id,status,type,traffic_index,speed,trval_time,stop_times,queue_length,cong_rate,delay_time,nopark_pass_rate,
cord_reliability,cord_queue_ratio,uncoordinate_phase_queue,gmt_create,gmt_modified
</sql>
<select id="selectRunMonitor" resultType="net.wanji.databus.dao.entity.GreenwaveHistPOExt">
SELECT
DATE_FORMAT(gmt_modified, '%Y-%m-%d %H:00:00') AS hour,
......@@ -19,4 +24,13 @@
hour
</select>
<select id="selectByTimeSection" resultType="net.wanji.databus.dao.entity.GreenwaveHistPO">
select t1.id,t1.status,t1.type,t1.traffic_index,t1.speed,t1.trval_time,t1.stop_times,t1.queue_length,
t1.cong_rate,t1.delay_time,t1.nopark_pass_rate,t1.cord_reliability,t1.cord_queue_ratio,
t1.uncoordinate_phase_queue,t1.gmt_create,t1.gmt_modified, t2.name as greenwaveName
from t_greenwave_hist t1 join t_greenwave_info t2 on t1.id = t2.id
where t1.gmt_modified <![CDATA[ <= ]]> #{endTimeStr}
and t1.gmt_modified <![CDATA[ >= ]]> #{startTimeStr}
</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