day08-实战-今日指数

本文详细描述了个股最新分时行情和实时交易流水查询的功能,包括接口分析、数据获取、实现过程以及与mapper的交互,同时提及了如何获取外盘数据和用户登录后的动态菜单栏功能完善。
摘要由CSDN通过智能技术生成

今日指数-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);

实现

    @Override
    public 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">
        select
            sri.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 curDate
        from stock_rt_info as sri
        where cur_time in (
            select
                max(sri2.cur_time)
            from stock_rt_info as sri2
            where 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);

实现

    @Override
    public 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">
        select
            date_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 tradePrice
        from stock_rt_info as sri
        where sri.stock_code = #{code}
        order by cur_time desc
            limit 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)]

提示:用户侧边栏信息先批量查询,然后再通过递归组装数据;

  • 27
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值