day08-实战-今日指数

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/401240.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机试笔记-划拳

想复杂了&#xff0c;没有体现代码的简洁优雅之美 可以在for循环的过程中一边接受一边进行failA的统计&#xff0c;fail属于全局变量&#xff0c;可以在一次一次的接受中改变自身的数值 然后还要统计两种情况&#xff1a; 甲win 乙fail和相反的情况&#xff0c;剩下同赢同输的情…

Chrome关闭时出现弹窗runtime error c++R6052,且无法关闭

环境&#xff1a; Chrome 版本121 Win10专业版 问题描述&#xff1a; Chrome关闭时出现弹窗runtime error cR6052&#xff0c;且无法关闭 解决方案&#xff1a; 1.任务管理器打开&#xff0c;强制结束进程 2.再次打开谷歌浏览器&#xff0c;打开设置关于Chrome&#xff0…

云上业务一键性能调优,应用程序性能诊断工具 Btune 上线

- 01 - 终于等来了预算&#xff0c;这就把服务迁移到最新的 CPU 平台上去&#xff0c;这样前端的同事立马就能感受我们带来的速度提升了。可是…… 这些性能指标怎么回事&#xff1f;不仅没有全面提升&#xff0c;有些反而下降了。不应该这样啊&#xff0c;这可怎么办&#xf…

为什么在MOS管开关电路设计中使用三极管容易烧坏?

MOS管作为一种常用的开关元件&#xff0c;具有低导通电阻、高开关速度和低功耗等优点&#xff0c;因此在许多电子设备中广泛应用。然而&#xff0c;在一些特殊情况下&#xff0c;我们需要在MOS管控制电路中加入三极管来实现一些特殊功能。然而&#xff0c;不同于MOS管&#xff…

猫咪不喝水是什么原因?这些方法远离缺水小猫

有经验的铲屎官都知道&#xff0c;家里的猫似乎不太喜欢喝水。只看到一只或两只猫不喝水&#xff0c;那可能是例外情况。但绝大部分的猫都不咋爱喝水&#xff0c;这是为什么呢&#xff1f; 一、猫咪不喝水是什么原因&#xff1f; 如果你已经尝试了各种方法来让猫咪多喝水&…

springboot整合mybatisPlus超级详细

springboot整合mybatis-plus超级详细 一、环境二、springboot整合myBatisPlus2.1新建2.2 添加Mybatis-plus和mysql依赖2.3 修改配置文件2.4 新建包和文件2.5 新建表2.6 创建实体类2.7 创建Mapper接口2.8 创建Service接口2.9 创建Service实现类2.10 增删改查 MyBatis-Plus&#…

IDEA左侧启动图标消失

一、问题如图 二、解决方式

水经注下载注记地图, mars3d加载底图

使用 水经微图 &#xff08;公司提供的&#xff0c;需付费&#xff0c;我也没有这个东西&#xff09;下载注记地图&#xff1b; 1、选择下载 选择区域&#xff1a; 根据需求进行选择&#xff0c;两边都可以选择&#xff0c;看个人喜欢&#xff1b;这里以澳门为演示 选择地图…

渗透测试—信息收集

渗透测试—信息收集 1. 收集域名信息1.1. 域名注册信息1.2. SEO信息收集1.3. 子域名收集1.3.1. 在线子域名收集1.3.2. 子域名收集工具 1.4. 域名备案信息1.5. ICP备案号查询1.6. SSL证书查询 2. 收集真实IP2.1. 超级ping2.2. Ping2.3. CDN绕过 3. 收集旁站或C段IP3.1. 旁站或C段…

瑞_Redis_初识Redis(含安装教程)

文章目录 1 初识Redis1.1 认识NoSQL1.1.1 结构化与非结构化1.1.2 关联和非关联1.1.3 查询方式1.1.4 事务1.1.5 总结 1.2 认识Redis1.2.1 介绍1.2.2 特征1.2.3 优势 1.3 安装Redis ★★★1.3.1 Linux安装Redis1.3.1.1 安装Redis依赖 1.3.2 Windows安装Redis1.3.2.1 安装步骤1.3.…

挖掘机生产装配线无线通讯应用

一、应用背景 山东某挖掘机机械有限公司主要产品有装载机、挖掘机、道路机械及核心关键零部件等系列工程机械产品。为加速新旧动能转换&#xff0c;全新挖掘机整机装配线配合劳动组合的调整&#xff0c;提高装配水平和生产效率&#xff1b;可集中、合理地使用工装、专用工具&a…

【深度学习】Pytorch教程(八):PyTorch数据结构:2、张量的数学运算(6):高维张量:乘法、卷积(conv2d~四维张量;conv3d~五维张量)

文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor&#xff08;张量&#xff09;1. 维度&#xff08;Dimensions&#xff09;2. 数据类型&#xff08;Data Types&#xff09;3. GPU加速&#xff08;GPU Acceleration&#xff09; 2、张量的数学运算1. 向量运算2. 矩阵…

【rust】8、连接数据库:sqlx

sqlx 是 rust 的数据库访问工具&#xff0c; 本身并不是 orm&#xff0c;但常见的 orm 都是基于它实现的。其有如下特点&#xff1a; 支持异步&#xff0c;适合高并发编译时检查&#xff1a;cargo build 时检查执行 sql&#xff0c;校验响应值支持多数据库&#xff1a;mysql、…

Leo赠书活动-17期 《基础软件之路:企业级实践及开源之路》

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

学习笔记-Git

Git 问题一描述解决方法注意事项 问题一 描述 在commit和push的时候因为网络太慢了中途强行关闭了进程&#xff0c;而push的内容因为文件过大导致无法正常push 按照原本的流程在push的时候会提示失败&#xff0c;并且需要在解决了大文件之后重新push 而因为中途中断了&#x…

Autosar-Mcal配置详解-MCU

3.6.1创建、配置RAM 1)创建RAM配置 2)配置RAM 以F1KM R7F7016533ABG为例,它的local RAM有512K, global RAM 192K,Retention RAM 64K. Local RAM: local RAM就是程序平常使用的RAM,在DeepStop模式下内容会丢失。 Global RAM:主要用于DMA的源地址和目的地址使用,在Dee…

win电脑截屏的图片在哪里?电脑截屏的图片删了怎么找回来

在使用Windows操作系统的电脑时&#xff0c;截屏功能是我们经常使用的工具之一。然而&#xff0c;有时我们可能会遇到找不到截屏图片或误删截屏图片的情况。那么&#xff0c;Win电脑截屏的图片究竟存放在哪里&#xff1f;如果误删了截屏图片&#xff0c;我们又该如何找回呢&…

使用Windbg动态调试目标程序去分析异常的两实战案例分享

目录 1、前言 2、案例1&#xff1a;程序退出时弹出报错提示框 2.1、问题说明 2.2、到系统应用程序日志中看系统有没有自动生成dump文件 2.3、将Windbg附加到目标程序上进行动态调试 3、案例2&#xff1a;程序在运行过程中弹出ASSERT断言提示框 3.1、问题说明 3.2、将Wi…

【Python笔记-设计模式】组合模式

一、说明 组合模式是一种结构型设计模式&#xff0c; 你可以使用它将对象组合成树状结构&#xff0c; 并且能像使用独立对象一样使用它们。 (一) 解决问题 处理树形结构&#xff1a;可以很好地处理树形结构的数据&#xff0c;使得用户可以统一对待单个对象和对象组合。统一接…

Java零基础 - 逻辑运算符

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…