今日指数-day08
1. 个股最新分时行情数据
1.1 个股最新分时行情功能说明
1)个股最新分时行情功能原型
2)个股最新分时行情数据接口分析
功能描述:获取个股最新分时行情数据,主要包含:开盘价、前收盘价、最新价、最高价、最低价、成交金额和成交量、交易时间信息;
服务路径:/api/quot/stock/screen/second/detail
服务方法:GET
请求参数:code //股票编码
响应数据格式:
R<StockRt>{"code": 1,"data": {"tradeAmt": 58672751,//最新交易量"preClosePrice": 3.89,//前收盘价格"lowPrice": 3.89,//最低价"highPrice": 3.91,//最高价"openPrice": 3.9,//开盘价"tradeVol": 228625157,//交易金额"tradePrice": 3.9//当前价格"curDate": '2022-01-03 14:58'//当前日期}
}
2)注意事项
如果当前日期不在股票交易时间内,则查询最近的股票交易时间的数据回显
1.2个股最新分时行情功能实现
1)定义web访问接口
/*** 获取个股最新分时行情数据,主要包含:* 开盘价、前收盘价、最新价、最高价、最低价、成交金额和成交量、交易时间信息* @param code* @return*/@GetMapping("/stock/screen/second/detail")public R<Map<String, Object>> stockScreenTimeSharingInfo(@RequestParam("code") String code) {return stockService.stockScreenTimeSharingInfo(code);}
2)定义服务接口和实现
服务接口
/*** 获取个股最新分时行情数据,主要包含:* 开盘价、前收盘价、最新价、最高价、最低价、成交金额和成交量、交易时间信息* @param code* @return*/R<Map<String, Object>> stockScreenTimeSharingInfo(String code);
实现
@Overridepublic R<Map<String, Object>> stockScreenTimeSharingInfo(String code) {// 获取最新股票有效交易日DateTime lastDate4Stock = DateTimeUtil.getLastDate4Stock(DateTime.now());DateTime openDate = DateTimeUtil.getOpenDate(lastDate4Stock);Date endTime = lastDate4Stock.toDate();Date startTime = openDate.toDate();// TODO moke 测试数据startTime = DateTime.parse("2021-12-30 09:30:00", DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).toDate();endTime = DateTime.parse("2021-12-30 15:00:00", DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).toDate();// 根据股票开盘和关盘时间分时查询个股数据Map<String, Object> mapResult = stockRtInfoMapper.getStockScreenTimeInfo(code, startTime, endTime);return R.ok(mapResult);}
3)定义mapper和xml
mapper
Map<String, Object> getStockScreenTimeInfo(@Param("code") String code,@Param("startTime") Date startTime,@Param("endTime") Date endTime);
xml
<select id="getStockScreenTimeInfo" resultType="java.util.Map">selectsri.trade_amount as tradeAmt,sri.pre_close_price as preClosePrice,sri.min_price as lowPrice,sri.max_price as highPrice,sri.open_price as openPrice,sri.trade_amount as tradePrice,sri.cur_price as tradePrice,date_format(sri.cur_time, '%Y%M%d%H%m%s') as curDatefrom stock_rt_info as sriwhere cur_time in (selectmax(sri2.cur_time)from stock_rt_info as sri2where sri2.stock_code = #{code}and cur_time between #{startTime} and #{endTime})and stock_code = #{code}</select>
2.个股实时交易流水查询
2.1 个股实时交易流水查询功能介绍
1)功能原型
2)功能接口说明
功能描述:个股交易流水行情数据查询--查询最新交易流水,按照交易时间降序取前10
服务路径:/quot/stock/screen/second
入参:code 股票编码
服务方法:GET
响应数据格式:
{"code": 1,"data": [{"date": "2022-01-03-14:58",//当前时间,精确到分"tradeAmt": 58672751,//交易量"tradeVol": 228625157,//交易金额"tradePrice": 3.9//交易价格}]
}
2.2个股实时交易流水查询功能实现
1)定义web访问接口
/*** 个股交易流水行情数据查询--查询最新交易流水,按照交易时间降序取前10* @param code* @return*/@GetMapping("/stock/screen/second")public R<List<Map<String, Object>>> getStockTradinStatement(@RequestParam("code") String code) {return stockService.getStockTradinStatement(code);}
2)定义服务接口和实现
服务接口
/*** 个股交易流水行情数据查询--查询最新交易流水,按照交易时间降序取前10* @param code* @return*/R<List<Map<String, Object>>> getStockTradinStatement(String code);
实现
@Overridepublic R<List<Map<String, Object>>> getStockTradinStatement(String code) {if(StringUtils.isBlank(code)) {return R.error(ResponseCode.DATA_ERROR.getMessage());}List<Map<String,Object>> mapResult=stockRtInfoMapper.getByCodeInfo(code);return R.ok(mapResult);}
3)定义mapper和xml
mapper
List<Map<String, Object>> getByCodeInfo(String code);
<select id="getByCodeInfo" resultType="java.util.Map">selectdate_format(sri.cur_time, '%Y%m%d%H%m') as date,sri.trade_amount as tradeAmt,sri.trade_volume as tradeVol,sri.cur_price as tradePricefrom stock_rt_info as sriwhere sri.stock_code = #{code}order by cur_time desclimit 10;</select>
3.拉取外盘数据功能实现
3.1功能分析
国外大盘数据采集与国内大盘数据几乎一致,目前通过sina接口无法获取国外大盘的交易量和交易金额数据,所以针对国外大盘数据,需要单独处理;
注意事项:
国外大盘数据接口不提供交易量和交易金额的信息;
字段分析:
var hq_str_b_FSSTI="富时新加坡海峡时报指数,3123.68,-2.96,-0.09";大盘code 大盘名称 大盘点数 涨跌值 涨幅
注意:因为外盘的开盘周期不固定的,所以我们就一天仅仅采集一次数据即可;
或者针对不同的外盘,使用不同的采集计划!
采集外盘接口:http://hq.sinajs.cn/list=int_dji,int_nasdaq,int_hangseng,int_nikkei,b_FSSTI,其它详见第五天接口说明;
4.完善用户登录成功动态回显菜单栏功能
1)功能接口说明
功能描述:当前用户登录后,仅仅加载了用户表相关信息,接下来完成的功能是完善用户权限相关的信息;
服务路径:/api/login
请求方式:POST
注意事项:顶级权限(功能菜单项)的pid为0
对应表表结构:
sys_permissioin表:
接口响应数据格式:
{"code": 1,"data": {"id": "1237361915165020161",//用户ID"username": "admin",//用户名称"phone": "13888888888",//手机号"nickName": "itheima",//昵称"realName": "heima",//真实名称"sex": 1,//性别"status": 1,//状态"email": "875267425@qq.com",//邮件"menus": [//侧边栏权限树(不包含按钮权限){"id": "1236916745927790564",//权限ID"title": "组织管理",//权限标题"icon": "el-icon-star-off",//权限图标(按钮权限无图片)"path": "/org",//请求地址"name": "org",//权限名称对应前端vue组件名称"children": [{"id": "1236916745927790578","title": "角色管理","icon": "el-icon-s-promotion","path": "/roles","name": "roles","children": [] // null 则前端展示失败},{"id": "1236916745927790560","title": "菜单权限管理","icon": "el-icon-s-tools","path": "/menus","name": "menus","children": [] }]},{"id": "1236916745927790569","title": "账号管理","icon": "el-icon-s-data","path": "/user","name": "user","children": []}],permissions: ["btn-user-delete",//按钮权限标识"btn-log-delete","btn-user-add","btn-role-update","btn-permission-delete",…]}
}
响应结果字段与sys_permission表字段关系:
实现步骤:
1.根据用户名已经查询了用户信息,且做了用户信息合法性的判断;
2.如果 用户合法,则根据用户的id去数据库查询用户拥有的权限信息集合;
根据用户id查询权限信息,数据要注意去重(distinct)
3.递归用户拥有的权限集合,组织出用户的目录-菜单树(不包含按钮权限)—》menus
3.获取按钮权限标识集合(获取权限集合中type=3的权限信息)—》permissions
提示:用户侧边栏信息先批量查询,然后再通过递归组装数据;
29)]
实现步骤:
1.根据用户名已经查询了用户信息,且做了用户信息合法性的判断;
2.如果 用户合法,则根据用户的id去数据库查询用户拥有的权限信息集合;
根据用户id查询权限信息,数据要注意去重(distinct)
3.递归用户拥有的权限集合,组织出用户的目录-菜单树(不包含按钮权限)—》menus
3.获取按钮权限标识集合(获取权限集合中type=3的权限信息)—》permissions
[外链图片转存中…(img-wDpj3Nj0-1708411102831)]
[外链图片转存中…(img-X6eVOHfV-1708411102831)]
提示:用户侧边栏信息先批量查询,然后再通过递归组装数据;