开发日记-主页面
2021/02/20
天气接口
先查询数据然后存放在天气表中
字段需要包括:天气情况和气温
两个可供选择的参数:type&forecast
type代表的是白天或者是晚上天气,forecast代表着预测的第几天
com.zzzxlz.pojo.Weather
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@ApiModel("天气实体")
public class Weather {
@ApiModelProperty(value = "白天天气")
private String dayWeather;
@ApiModelProperty(value = "夜晚天气")
private String nightWeather;
@ApiModelProperty(value = "白天气温")
private int dayTemp;
@ApiModelProperty(value = "夜晚气温")
private int nightTemp;
@ApiModelProperty(value = "日期")
private String date;
}
com.zzzxlz.mapper.WeatherMapper
@Mapper
@Repository
public interface WeatherMapper {
HashMap queryWeatherByDayTime(int forecast);
HashMap queryWeatherByNightTime(int forecast);
}
mybatis.mapper.WeatherMapper
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zzzxlz.mapper.WeatherMapper">
<select id="queryWeatherByDayTime" resultType="java.util.HashMap">
select dayWeather,dayTemp from weather where forecast = #{forecast}
</select>
<select id="queryWeatherByNightTime" resultType="java.util.HashMap">
select nightWeather,nightTemp from weather where forecast = #{forecast}
</select>
</mapper>
com.zzzxlz.service.WeatherService
@Service
public class WeatherService {
@Autowired
WeatherMapper weatherMapper;
//返回天气情况
public HashMap getWeather(String type, int forecast){
if (type.equals("day")){
//查询白天的天气以及气温
return weatherMapper.queryWeatherByDayTime(forecast);
}
if(type.equals("night")){
//查询夜晚的天气以及气温
return weatherMapper.queryWeatherByNightTime(forecast);
}
//没有进入if循环的话就默认为白天天气
return weatherMapper.queryWeatherByDayTime(forecast);
}
}
com.zzzxlz.controller.WeatherController
@RestController
@Api(tags = "天气功能相关接口")
@RequestMapping("/api")
public class WeatherController {
@Autowired
WeatherService weatherService;
@GetMapping("/weather")
@ApiOperation("get请求调用天气接口")
public Result getWeatherInfo(@RequestParam(value = "type", required = false, defaultValue = "day") String type,
@RequestParam(value = "forecast", required = false, defaultValue = "0") int forecast){
HashMap weather = weatherService.getWeather(type, forecast);
return ResultFactory.buildSuccessResult(weather);
}
}
收集数据
第一步先划定范围,用于最后展示的地图范围,有这个范围之后再去收集对应的路况数据以及路径规划数据
第二步,通过高德地图坐标拾取器获取每个街道的交叉路况坐标,并且结合百度api路况信息收集路况数据,这个将用于绘制路况地图
第三步,同样的,收集路径规划所需的坐标以及相应的数据,需要四个表来存放对应的四种出行方式:
先收集步行方式
街道路况排行接口
com\zzzxlz\pojo\Street.java
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@ApiModel("街道实体")
public class Street {
@ApiModelProperty(value = "街道名称")
private String road;
@ApiModelProperty(value = "街道起点")
private String begin;
@ApiModelProperty(value = "街道终点")
private String end;
@ApiModelProperty(value = "街道路况")
private int status;
@ApiModelProperty(value = "街道拥挤指数")
private int congestion;
@ApiModelProperty(value = "街道拥挤排名")
private int streetRank;
}
com\zzzxlz\mapper\StreetMapper.java
@Mapper
@Repository
public interface StreetMapper {
HashMap queryStreetByRank(int rank);
}
mybatis\mapper\StreetMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zzzxlz.mapper.StreetMapper">
<select id="queryStreetByRank" resultType="java.util.HashMap">
select road,congestion,streetRank from street where streetRank = #{rank}
</select>
</mapper>
com\zzzxlz\service\StreetService.java
@Service
public class StreetService {
@Autowired
StreetMapper streetMapper;
//返回街道的拥挤排名
public List getStreetRank(){
LinkedList list = new LinkedList();
for (int i = 1; i < 9; i++) {
list.add(streetMapper.queryStreetByRank(i));
}
return list;
}
}
com\zzzxlz\controller\StreetController.java
@RestController
@Api(tags = "路况排名功能接口")
@RequestMapping("/api")
public class StreetController {
@Autowired
StreetService streetService;
@GetMapping("/street/rank")
@ApiOperation("get请求调用街道路况数据")
public Result getStreetRankInfo(){
List rankList = streetService.getStreetRank();
return ResultFactory.buildSuccessResult(rankList);
}
}
2021/02/21
绘制路线地图接口
com\zzzxlz\mapper\StreetMapper.java
@Mapper
@Repository
public interface StreetMapper {
//查询道路拥挤排名
HashMap queryStreetByRank(int rank);
//查询道路路况信息
List<Street> queryStreetStatus();
}
mybatis\mapper\StreetMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zzzxlz.mapper.StreetMapper">
<select id="queryStreetByRank" resultType="java.util.HashMap">
select road,congestion,streetRank from street where streetRank = #{rank}
</select>
<select id="queryStreetStatus" resultType="com.zzzxlz.pojo.Street">
select begin,end,status from street
</select>
</mapper>
com\zzzxlz\service\StreetService.java
@Service
public class StreetService {
@Autowired
StreetMapper streetMapper;
//返回街道的拥挤排名
public List getStreetRank(){
LinkedList list = new LinkedList();
for (int i = 1; i < 9; i++) {
list.add(streetMapper.queryStreetByRank(i));
}
return list;
}
//返回街道的路况信息
public List getStreetStatus(){
return streetMapper.queryStreetStatus();
}
}
com\zzzxlz\controller\StreetController.java
@RestController
@Api(tags = "街道功能接口")
@RequestMapping("/api/street")
public class StreetController {
@Autowired
StreetService streetService;
@GetMapping("/rank")
@ApiOperation("get请求调用街道排名数据")
public Result getStreetRankInfo(){
List rankList = streetService.getStreetRank();
return ResultFactory.buildSuccessResult(rankList);
}
@GetMapping("/status")
@ApiOperation("get请求获取街道路况数据")
public Result getStreetStatusInfo(){
return ResultFactory.buildSuccessResult(streetService.getStreetStatus());
}
}
收集2021/02/21当天几个时间点的数据
路况数据收集于 2021/02/21 周日
再设计一张表用于收集八个时间点的路况信息,要对街道数据表进行编号,给每个街道编号之后通过编号作为主键,然后联表查询.
由于24点,3点,6点的数据相同于是归并到同一张表中
然后分别收集9点,12点,15点,18点,21点的路况数据
完善路况信息接口(通过不同时间点可以返回不同时间点的路况)
通过收集到的02/21当天数据,现在可以返回几个时间点的路况信息,从而可以对这种路况信息进行绘图
com\zzzxlz\pojo\Street.java
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@ApiModel("街道路况实体,用于绘制地图")
public class Street {
@ApiModelProperty(value = "街道起点")
private String begin;
@ApiModelProperty(value = "街道终点")
private String end;
@ApiModelProperty(value = "街道路况")
private int status;
}
com\zzzxlz\mapper\StreetMapper.java
@Mapper
@Repository
public interface StreetMapper {
//查询道路拥挤排名
HashMap queryStreetByRank(int rank);
//24点,3点,5点时候的道路路况信息
List<Street> queryStreetStatus_common();
//9点时候的道路路况信息
List<Street> queryStreetStatus_9();
//12点时候的道路路况信息
List<Street> queryStreetStatus_12();
//15点时候的道路路况信息
List<Street> queryStreetStatus_15();
//18点时候的道路路况信息
List<Street> queryStreetStatus_18();
//21点时候的道路路况信息
List<Street> queryStreetStatus_21();
}
mybatis\mapper\StreetMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zzzxlz.mapper.StreetMapper">
<select id="queryStreetByRank" resultType="java.util.HashMap">
select road,congestion,streetRank from street where streetRank = #{rank}
</select>
<select id="queryStreetStatus_common" resultType="com.zzzxlz.pojo.Street">
select begin,end,status from street, street_status_common as status
where street.streetID = status.streetID
</select>
<select id="queryStreetStatus_9" resultType="com.zzzxlz.pojo.Street">
select begin,end,status from street, street_status_9 as status
where street.streetID = status.streetID
</select>
<select id="queryStreetStatus_12" resultType="com.zzzxlz.pojo.Street">
select begin,end,status from street, street_status_12 as status
where street.streetID = status.streetID
</select>
<select id="queryStreetStatus_15" resultType="com.zzzxlz.pojo.Street">
select begin,end,status from street, street_status_15 as status
where street.streetID = status.streetID
</select>
<select id="queryStreetStatus_18" resultType="com.zzzxlz.pojo.Street">
select begin,end,status from street, street_status_18 as status
where street.streetID = status.streetID
</select>
<select id="queryStreetStatus_21" resultType="com.zzzxlz.pojo.Street">
select begin,end,status from street, street_status_21 as status
where street.streetID = status.streetID
</select>
</mapper>
com\zzzxlz\service\StreetService.java
@Service
public class StreetService {
@Autowired
StreetMapper streetMapper;
//返回街道的拥挤排名
public List getStreetRank(){
LinkedList list = new LinkedList();
for (int i = 1; i < 9; i++) {
list.add(streetMapper.queryStreetByRank(i));
}
return list;
}
//返回路况信息
public List getStreetStatusInfo(int time){
List statusList = new LinkedList();
switch (time){
case 3:
case 6:
case 24:
statusList = streetMapper.queryStreetStatus_common(); //返回24点,3点,6点时候的街道的路况信息
break;
case 9:
statusList = streetMapper.queryStreetStatus_9();
break;
case 12:
statusList = streetMapper.queryStreetStatus_12();
break;
case 15:
statusList = streetMapper.queryStreetStatus_15();
break;
case 18:
statusList = streetMapper.queryStreetStatus_18();
break;
case 21:
statusList = streetMapper.queryStreetStatus_21();
break;
}
return statusList;
}
}
com\zzzxlz\controller\StreetController.java
@RestController
@Api(tags = "街道功能接口")
@RequestMapping("/api/street")
public class StreetController {
@Autowired
StreetService streetService;
@GetMapping("/rank")
@ApiOperation("get请求调用街道排名数据")
public Result getStreetRankInfo(){
List rankList = streetService.getStreetRank();
return ResultFactory.buildSuccessResult(rankList);
}
@GetMapping("/status")
@ApiOperation("get请求获取街道路况数据")
public Result getStreetStatusInfo(@RequestParam(value = "time", required = false, defaultValue = "15") int time){
switch (time){
case 3:
case 6:
case 9:
case 12:
case 15:
case 18:
case 21:
case 24:
List statusList = streetService.getStreetStatusInfo(time);
return ResultFactory.buildSuccessResult(statusList);
}
return ResultFactory.buildFailResult("输入的时间点不符合要求");
}
}
改进天气接口
前端通过get请求传递时间戳给我,我将时间戳进行判断然后返回参数给前端,返回的参数为weather,temp,这里用到了mybatis中的xml文件sql语句中的别名自动绑定,通过时间戳判断查询的是当天天气还是未来三天的天气.
com\zzzxlz\pojo\Weather.java
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@ApiModel("天气实体")
public class Weather {
@ApiModelProperty(value = "白天天气")
private String weather;
@ApiModelProperty(value = "白天气温")
private int temp;
}
com\zzzxlz\mapper\WeatherMapper.java
@Mapper
@Repository
public interface WeatherMapper {
Weather queryWeatherByDayTime(int forecast);
Weather queryWeatherByNightTime(int forecast);
}
mybatis\mapper\WeatherMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zzzxlz.mapper.WeatherMapper">
<select id="queryWeatherByDayTime" resultType="com.zzzxlz.pojo.Weather">
select dayWeather as weather, dayTemp as temp from weather where forecast = #{forecast}
</select>
<select id="queryWeatherByNightTime" resultType="com.zzzxlz.pojo.Weather">
select nightWeather as weather, nightTemp as temp from weather where forecast = #{forecast}
</select>
</mapper>
com\zzzxlz\service\WeatherService.java
@Service
public class WeatherService {
@Autowired
WeatherMapper weatherMapper;
//返回天气情况
public Weather getWeather(long date){
String type = Myutils.dayOrNight(date);
int forecast = Myutils.getForecast(date);
if (type.equals("day")){
//查询白天的天气以及气温
return weatherMapper.queryWeatherByDayTime(forecast);
}
if(type.equals("night")){
//查询夜晚的天气以及气温
return weatherMapper.queryWeatherByNightTime(forecast);
}
//没有进入if循环的话就默认为白天天气
return weatherMapper.queryWeatherByDayTime(forecast);
}
}
com\zzzxlz\controller\WeatherController.java
@RestController
@Api(tags = "天气功能接口")
@RequestMapping("/api")
public class WeatherController {
@Autowired
WeatherService weatherService;
@GetMapping("/weather")
@ApiOperation("get请求调用天气接口")
public Result getWeatherInfo(@RequestParam(value = "date", required = false, defaultValue = "1613890800") long date){
Weather weather = weatherService.getWeather(date);
return ResultFactory.buildSuccessResult(weather);
}
}
com\zzzxlz\utils\Myutils.java
/**
* 判断输入的date数据是白天还是晚上
* @param date
* @return "night","day"
*/
public static String dayOrNight(long date){
Date date1 = new Date(date * 1000);
SimpleDateFormat df = new SimpleDateFormat("HH");
String str = df.format(date1);
int a = Integer.parseInt(str);
if (a > 6 && a <18){
return "day";
}
if (a >= 18 && a <= 24 || a >= 0 && a <= 6){
return "night";
}
return "day";
}
/**
* 判断输入的date时间戳是今天明天后天还是大后天
* @param date
* @return 0-今天,1-明天,2-后天,3-大后天
*/
public static int getForecast(long date){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date zero_date = calendar.getTime();
long zero = zero_date.getTime() / 1000;
int forecast = (int) ((date - zero)/ (60 * 60 * 24));
if(forecast < 0 || forecast > 3){
forecast = 0;
}
return forecast;
}
完善路况排行接口(通过选择时间点从而返回不同时间点的路况排名信息)
这个和路况信息接口类似,只需要定义方法之后进行判断就好了
就直接粘贴上代码
com\zzzxlz\mapper\StreetMapper.java
@Mapper
@Repository
public interface StreetMapper {
//24点,3点,5点时候的道路拥挤排名信息
List<HashMap> queryStreetRank_common();
//9点时候的道路路况信息
List<HashMap> queryStreetRank_9();
//12点时候的道路路况信息
List<HashMap> queryStreetRank_12();
//15点时候的道路路况信息
List<HashMap> queryStreetRank_15();
//18点时候的道路路况信息
List<HashMap> queryStreetRank_18();
//21点时候的道路路况信息
List<HashMap> queryStreetRank_21();
}
mybatis\mapper\StreetMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zzzxlz.mapper.StreetMapper">
<!--Rank-->
<select id="queryStreetRank_common" resultType="java.util.HashMap">
select road,congestion,streetRank from street, street_status_common as status
where street.streetID = status.streetID and streetRank <= 8
</select>
<select id="queryStreetRank_9" resultType="java.util.HashMap">
select road,congestion,streetRank from street, street_status_9 as status
where street.streetID = status.streetID and streetRank <= 8
</select>
<select id="queryStreetRank_12" resultType="java.util.HashMap">
select road,congestion,streetRank from street, street_status_12 as status
where street.streetID = status.streetID and streetRank <= 8
</select>
<select id="queryStreetRank_15" resultType="java.util.HashMap">
select road,congestion,streetRank from street, street_status_15 as status
where street.streetID = status.streetID and streetRank <= 8
</select>
<select id="queryStreetRank_18" resultType="java.util.HashMap">
select road,congestion,streetRank from street, street_status_18 as status
where street.streetID = status.streetID and streetRank <= 8
</select>
<select id="queryStreetRank_21" resultType="java.util.HashMap">
select road,congestion,streetRank from street, street_status_21 as status
where street.streetID = status.streetID and streetRank <= 8
</select>
</mapper>
com\zzzxlz\service\StreetService.java
@Service
public class StreetService {
@Autowired
StreetMapper streetMapper;
//返回街道的拥挤排名
public List getStreetRank(int time){
List rankList = new LinkedList();
switch (time){
case 3:
case 6:
case 24:
rankList = streetMapper.queryStreetRank_common();
//返回24点,3点,6点时候的街道的拥挤排行信息
break;
case 9:
rankList = streetMapper.queryStreetRank_9();
break;
case 12:
rankList = streetMapper.queryStreetRank_12();
break;
case 15:
rankList = streetMapper.queryStreetRank_15();
break;
case 18:
rankList = streetMapper.queryStreetRank_18();
break;
case 21:
rankList = streetMapper.queryStreetRank_21();
break;
}
return rankList;
}
}
com\zzzxlz\controller\StreetController.java
@RestController
@Api(tags = "街道功能接口")
@RequestMapping("/api/street")
public class StreetController {
@Autowired
StreetService streetService;
@GetMapping("/rank")
@ApiOperation("get请求调用街道排名数据")
public Result getStreetRankInfo(@RequestParam(value = "time", required = false, defaultValue = "15") int time){
if (checkTime(time)){
List statusList = streetService.getStreetRank(time);
return ResultFactory.buildSuccessResult(statusList);
}else{
return ResultFactory.buildFailResult("输入的时间点不符合要求");
}
}
@GetMapping("/status")
@ApiOperation("get请求获取街道路况数据")
public Result getStreetStatusInfo(@RequestParam(value = "time", required = false, defaultValue = "15") int time){
if (checkTime(time)){
List statusList = streetService.getStreetStatusInfo(time);
return ResultFactory.buildSuccessResult(statusList);
}else{
return ResultFactory.buildFailResult("输入的时间点不符合要求");
}
}
//判断时间点是不是在所要求的节点
private boolean checkTime(int time){
switch (time){
case 3:
case 6:
case 9:
case 12:
case 15:
case 18:
case 21:
case 24:
return true;
}
return false;
}
}
2021/02/22
关键路段几个时间段的congestion数据显示接口(用于生成折线图)
mybatis用来写sql的时候需要用到的一些特殊判断
- 第一种写法:
原符号 < <= > >= & ' "
替换符号 < <= > >= & ' "
例如:sql如下:
create_date_time >= #{startTime} and
create_date_time <= #{endTime}
- 第二种写法:
大于等于
<![CDATA[ >= ]]>
小于等于
<![CDATA[ <= ]]>
例如:sql如下:
create_date_time <![CDATA[ >= ]]> #{startTime} and
create_date_time <![CDATA[ <= ]]> #{endTime}
com\zzzxlz\pojo\Congestion.java
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@ApiModel("街道拥挤指数实体,用于绘制折线图")
public class Congestion {
@ApiModelProperty(value = "街道名称")
private String road;
@ApiModelProperty(value = "3点")
private String clock_3;
@ApiModelProperty(value = "6点")
private String clock_6;
@ApiModelProperty(value = "9点")
private String clock_9;
@ApiModelProperty(value = "12点")
private String clock_12;
@ApiModelProperty(value = "15点")
private String clock_15;
@ApiModelProperty(value = "18点")
private String clock_18;
@ApiModelProperty(value = "21点")
private String clock_21;
@ApiModelProperty(value = "24点")
private String clock_24;
}
com\zzzxlz\mapper\StreetMapper.java
@Mapper
@Repository
public interface StreetMapper {
//返回几条关键的街道名称
List<String> queryKeyStreetName();
//返回该路段一天各个时间点的congestion指数
Congestion queryStreetCongestion(String road);
}
mybatis\mapper\StreetMapper.xml
<select id="queryKeyStreetName" resultType="string">
select road from street where streetID >= 3 and streetID <=7
</select>
<select id="queryStreetCongestion" resultType="com.zzzxlz.pojo.Congestion">
select * from street_congestion where road = #{road}
</select>
com\zzzxlz\service\StreetService.java
//返回几条比较繁忙的路段的名字
public List getKeyStreetName(){
return streetMapper.queryKeyStreetName();
}
//返回这条街道一天各个时间点的拥挤数据
public Congestion getStreetCongestion(String road){
return streetMapper.queryStreetCongestion(road);
}
com\zzzxlz\controller\StreetController.java
@GetMapping("/road")
@ApiOperation("get请求获取街道名称")
public Result getKeyStreetInfo(){
return ResultFactory.buildSuccessResult(streetService.getKeyStreetName());
}
@GetMapping("/congestion")
@ApiOperation("get请求获取这个街道一天各个时间点的拥挤数据")
public Result getStreetCongestion(@RequestParam(value = "road", defaultValue = "纱帽河步行街北段") String road){
return ResultFactory.buildSuccessResult(streetService.getStreetCongestion(road));
}