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; ...@@ -4,19 +4,21 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses; 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.common.framework.rest.JsonViewObject;
import net.wanji.opt.bo.BottomCurveBO; import net.wanji.opt.bo.BottomCurveBO;
import net.wanji.opt.bo.BottomMenuBO; import net.wanji.opt.bo.BottomMenuBO;
import net.wanji.opt.bo.MainlineSchemeAnalysisBO;
import net.wanji.opt.service.impl.MainlineEvaluateServiceImpl; import net.wanji.opt.service.impl.MainlineEvaluateServiceImpl;
import net.wanji.opt.vo.MainlineEvaluateBottomCurveVO; import net.wanji.opt.vo.MainlineEvaluateBottomCurveVO;
import org.springframework.web.bind.annotation.PostMapping; import net.wanji.opt.vo.MainlineSchemeAnalysisVO;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import java.text.ParseException; import java.text.ParseException;
import java.util.List; import java.util.List;
import java.util.Set;
@Api(value = "MainlineEvaluateController", description = "干线评价") @Api(value = "MainlineEvaluateController", description = "干线评价")
@RequestMapping("/mainlineEvaluate") @RequestMapping("/mainlineEvaluate")
...@@ -52,4 +54,24 @@ public class MainlineEvaluateController { ...@@ -52,4 +54,24 @@ public class MainlineEvaluateController {
List<MainlineEvaluateBottomCurveVO> res = mainlineEvaluateService.bottomCurve(bo); List<MainlineEvaluateBottomCurveVO> res = mainlineEvaluateService.bottomCurve(bo);
return JsonViewObject.newInstance().success(res); 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 { ...@@ -20,4 +20,5 @@ public interface GreenwaveInfoMapper {
GreenwaveInfoPO selectById(Integer id); GreenwaveInfoPO selectById(Integer id);
List<GreenwaveInfoPO> selectAll();
} }
...@@ -15,7 +15,7 @@ public class ScenePO { ...@@ -15,7 +15,7 @@ public class ScenePO {
private Integer id ; private Integer id ;
@ApiModelProperty(value = "编号",notes = "") @ApiModelProperty(value = "编号",notes = "")
private String sceneCode ; 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 ; private Integer sceneNum ;
@ApiModelProperty(value = "场景名称",notes = "") @ApiModelProperty(value = "场景名称",notes = "")
private String sceneName ; private String sceneName ;
......
...@@ -2,14 +2,21 @@ package net.wanji.opt.service; ...@@ -2,14 +2,21 @@ package net.wanji.opt.service;
import net.wanji.opt.bo.BottomCurveBO; import net.wanji.opt.bo.BottomCurveBO;
import net.wanji.opt.bo.BottomMenuBO; import net.wanji.opt.bo.BottomMenuBO;
import net.wanji.opt.bo.MainlineSchemeAnalysisBO;
import net.wanji.opt.vo.MainlineEvaluateBottomCurveVO; import net.wanji.opt.vo.MainlineEvaluateBottomCurveVO;
import net.wanji.opt.vo.MainlineSchemeAnalysisVO;
import java.text.ParseException; import java.text.ParseException;
import java.util.List; import java.util.List;
import java.util.Set;
public interface MainlineEvaluateService { public interface MainlineEvaluateService {
List<String> bottomMenu(BottomMenuBO bo); List<String> bottomMenu(BottomMenuBO bo);
List<MainlineEvaluateBottomCurveVO> bottomCurve(BottomCurveBO bo) throws ParseException; List<MainlineEvaluateBottomCurveVO> bottomCurve(BottomCurveBO bo) throws ParseException;
Set<String> mainlineList();
MainlineSchemeAnalysisVO mainlineSchemeAnalysis(MainlineSchemeAnalysisBO bo);
} }
...@@ -5,12 +5,17 @@ import net.wanji.common.enums.BaseEnum; ...@@ -5,12 +5,17 @@ import net.wanji.common.enums.BaseEnum;
import net.wanji.common.enums.StrategyAndMetricsEnum; import net.wanji.common.enums.StrategyAndMetricsEnum;
import net.wanji.common.enums.TurnConvertEnum; import net.wanji.common.enums.TurnConvertEnum;
import net.wanji.databus.dao.entity.BaseCrossDirInfoPO; 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.dao.mapper.*;
import net.wanji.databus.po.*; import net.wanji.databus.po.*;
import net.wanji.opt.bo.BottomCurveBO; import net.wanji.opt.bo.BottomCurveBO;
import net.wanji.opt.bo.BottomMenuBO; 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.service.MainlineEvaluateService;
import net.wanji.opt.vo.MainlineEvaluateBottomCurveVO; import net.wanji.opt.vo.MainlineEvaluateBottomCurveVO;
import net.wanji.opt.vo.MainlineSchemeAnalysisVO;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -33,6 +38,8 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService { ...@@ -33,6 +38,8 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
private final CrossDataHistMapper crossDataHistMapper; private final CrossDataHistMapper crossDataHistMapper;
private final CrossTurnDataHistMapper crossTurnDataHistMapper; private final CrossTurnDataHistMapper crossTurnDataHistMapper;
private final CrossLaneDataHistMapper crossLaneDataHistMapper; private final CrossLaneDataHistMapper crossLaneDataHistMapper;
private final GreenwaveInfoMapper greenwaveInfoMapper;
private final GreenwaveHistMapper greenwaveHistMapper;
SimpleDateFormat hourMinuteFormat = new SimpleDateFormat("HH:mm"); SimpleDateFormat hourMinuteFormat = new SimpleDateFormat("HH:mm");
SimpleDateFormat dateHourMinuteFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); SimpleDateFormat dateHourMinuteFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
...@@ -41,7 +48,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService { ...@@ -41,7 +48,7 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
@Qualifier("baseCrossTurnInfoMapper") BaseCrossTurnInfoMapper baseCrossTurnInfoMapper, @Qualifier("baseCrossTurnInfoMapper") BaseCrossTurnInfoMapper baseCrossTurnInfoMapper,
CrossBaseLaneInfoMapper crossBaseLaneInfoMapper, CrossBaseLaneInfoMapper crossBaseLaneInfoMapper,
@Qualifier("laneInfoMapper") LaneInfoMapper laneInfoMapper, @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.baseCrossDirInfoMapper = baseCrossDirInfoMapper;
this.baseCrossTurnInfoMapper = baseCrossTurnInfoMapper; this.baseCrossTurnInfoMapper = baseCrossTurnInfoMapper;
this.laneInfoMapper = laneInfoMapper; this.laneInfoMapper = laneInfoMapper;
...@@ -49,6 +56,8 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService { ...@@ -49,6 +56,8 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
this.crossDataHistMapper = crossDataHistMapper; this.crossDataHistMapper = crossDataHistMapper;
this.crossTurnDataHistMapper = crossTurnDataHistMapper; this.crossTurnDataHistMapper = crossTurnDataHistMapper;
this.crossLaneDataHistMapper = crossLaneDataHistMapper; this.crossLaneDataHistMapper = crossLaneDataHistMapper;
this.greenwaveInfoMapper = greenwaveInfoMapper;
this.greenwaveHistMapper = greenwaveHistMapper;
} }
@Override @Override
...@@ -470,6 +479,34 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService { ...@@ -470,6 +479,34 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
return res; 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 { private Date calcDate(String timeStr, Date startTime) throws ParseException {
// 使用 Calendar 来获取年、月、日信息 // 使用 Calendar 来获取年、月、日信息
Calendar calendar = Calendar.getInstance(); 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 @@ ...@@ -2,6 +2,10 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!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"> <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 id="listGreenwave" resultType="net.wanji.opt.vo.GreenwaveListVO">
select select
t1.id, t1.name, t1.status as infoStatus, t2.status as realtimeStatus, t1.id, t1.name, t1.status as infoStatus, t2.status as realtimeStatus,
...@@ -28,10 +32,14 @@ ...@@ -28,10 +32,14 @@
</select> </select>
<select id="selectById" resultType="net.wanji.databus.dao.entity.GreenwaveInfoPO"> <select id="selectById" resultType="net.wanji.databus.dao.entity.GreenwaveInfoPO">
select select <include refid="baseColumnList"></include>
id,name,length,width,dir,start_time,end_time,design_speed,design_cycly,section_id,status,wkt,gmt_create,gmt_modified
from t_greenwave_info from t_greenwave_info
where id = #{id} where id = #{id}
</select> </select>
<select id="selectAll" resultType="net.wanji.databus.dao.entity.GreenwaveInfoPO">
select <include refid="baseColumnList"></include>
from t_greenwave_info
</select>
</mapper> </mapper>
package net.wanji.databus.dao.entity; package net.wanji.databus.dao.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
/** /**
...@@ -9,4 +10,6 @@ import lombok.Data; ...@@ -9,4 +10,6 @@ import lombok.Data;
@Data @Data
public class GreenwaveHistPO extends GreenwaveRealtimePO{ public class GreenwaveHistPO extends GreenwaveRealtimePO{
@ApiModelProperty(value = "绿波名称",notes = "")
private String greenwaveName ;
} }
package net.wanji.databus.dao.mapper; package net.wanji.databus.dao.mapper;
import net.wanji.databus.dao.entity.GreenwaveHistPO;
import net.wanji.databus.dao.entity.GreenwaveHistPOExt; import net.wanji.databus.dao.entity.GreenwaveHistPOExt;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -13,4 +14,6 @@ import java.util.List; ...@@ -13,4 +14,6 @@ import java.util.List;
@Repository @Repository
public interface GreenwaveHistMapper { public interface GreenwaveHistMapper {
List<GreenwaveHistPOExt> selectRunMonitor(Date nowTime); List<GreenwaveHistPOExt> selectRunMonitor(Date nowTime);
List<GreenwaveHistPO> selectByTimeSection(String startTimeStr, String endTimeStr);
} }
...@@ -2,6 +2,11 @@ ...@@ -2,6 +2,11 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!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"> <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 id="selectRunMonitor" resultType="net.wanji.databus.dao.entity.GreenwaveHistPOExt">
SELECT SELECT
DATE_FORMAT(gmt_modified, '%Y-%m-%d %H:00:00') AS hour, DATE_FORMAT(gmt_modified, '%Y-%m-%d %H:00:00') AS hour,
...@@ -19,4 +24,13 @@ ...@@ -19,4 +24,13 @@
hour hour
</select> </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> </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