今日指数项目实现个股日K线详情功能

个股日K线详情功能

一. 什么是个股日K线

1.日K线就是将股票交易流水按天分组,然后统计出每天的交易数据,内容包含:日期、股票编码、名称、最高价、最低价、开盘价、收盘价、前收盘价、交易量;

2.需要注意的是这里的收盘价就是指每天最大交易时间点下对应的价格;
在这里插入图片描述

二. 接口说明

功能描述:查询指定股票每天产生的数据,组装成日K线数据;

​ 如果当大盘尚未收盘,则以最新的交易价格作为当天的收盘价格;

服务路径:/api/quot/stock/screen/dkline
服务方法:GET
前端请求频率:每分钟

请求参数:code

参数说明参数名称是否必须数据类型备注
股票编码codetruestring股票编码

响应数据结构:

{"code": 1,"data": [{"date": "2021-12-20 10:20",//日期"tradeAmt": 28284252,//交易量(指收盘时的交易量,如果当天未收盘,则显示最新数据)"code": "000021",//股票编码"lowPrice": 16,//最低价格(指收盘时记录的最低价,如果当天未收盘,则显示最新数据)"name": "深科技",//名称"highPrice": 16.83,//最高价(指收盘时记录的最高价,如果当天未收盘,则显示最新数据)"openPrice": 16.8,//开盘价"tradeVol": 459088567.58,//交易金额(指收盘时记录交易量,如果当天未收盘,则显示最新数据)"closePrice": 16.81//当前收盘价(指收盘时的价格,如果当天未收盘,则显示最新cur_price)"preClosePrice": 16.81//前收盘价},//......]
}

三. SQL分析

SQL查询要划定一个默认的日期范围,这样可避免大数据量下全表查询而导致慢查询的问题;

在指定的日期范围内以天分组统计出每天日期的最大值(收盘时间);

根据获取的最大日期组,使用in进行条件查询,进而获取日K线相关的数据;

1. 查询每天对应的收盘时间

select max(cur_time)
from stock_rt_info
where stock_code = '600021'and cur_time between '2022-01-01 09:30:00' and '2022-06-06 14:25:00'
group by date_format(cur_time, '%Y%m%d');

2. 获取在该时间段内所需要的数据

select sri.cur_time        as date,sri.trade_amount    as tradeAmt,sri.stock_code      as code,sri.min_price       as lowPrice,sri.stock_name      as name,sri.max_price       as highPrice,sri.open_price      as openPrice,sri.trade_volume    as tradeVol,sri.cur_price       as closePrice,sri.pre_close_price as preClosePrice
from stock_rt_info as sri
where cur_time in (select max(cur_time)from stock_rt_infowhere stock_code = '600021'and cur_time between '2022-01-01 09:30:00' and '2022-06-06 14:25:00'group by date_format(cur_time, '%Y%m%d'))

这里同样也可以将查询时间与获取数据分开为两个Mapper接口, 这样更加方便查询

四. 代码实现

1. 表现层
	/*** 个股日K图*/@ApiOperation(value = "个股日K图", notes = "个股日K图", httpMethod = "GET")@GetMapping("/stock/screen/dkline")public R<List<Stock4EvrDayDomain>> getStockScreenDkline(@RequestParam(value = "code" , required = true) String code){return service.getStockScreenDkline(code);}
2. 服务层

接口

R<List<Stock4EvrDayDomain>> getStockScreenDkline(String code);

实现类

	/*** 个股日K图*/@Overridepublic R<List<Stock4EvrDayDomain>> getStockScreenDkline(String code) {// 获取截止时间DateTime curTime = DateTimeUtil.getLastDate4Stock(DateTime.now());curTime = DateTime.parse("2022-06-07 15:00:00", DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));Date nowDate = curTime.toDate();// 获取起始时间Date startDate = curTime.minusMonths(3).toDate();startDate = DateTime.parse("2022-01-01 09:30:00", DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).toDate();// 获取最新数据列表List<String> latestChangeTime = stockRtInfoMapper.getLatestChangeTime(startDate, nowDate, code);// 查询数据List<Stock4EvrDayDomain> data = stockRtInfoMapper.getStockScreenDkline(startDate,nowDate,code,latestChangeTime);return R.ok(data);}
3.Dao层

mapper接口

// 实现数据查询
List<Stock4EvrDayDomain> getStockScreenDkline(@Param("startDate") Date startDate, @Param("nowDate") Date nowDate, @Param("code") String code , @Param("latestChangeTime") List<String> latestChangeTime);// 实现查询每天对应的收盘时间
List<String> getLatestChangeTime(@Param("startDay") Date startDay , @Param("latestTime") Date latestTime , @Param("code") String code);

xml代码实现

<select id="getStockScreenDkline" resultType="com.jixu.stock.pojo.domain.Stock4EvrDayDomain">selectdate_format(sri2.cur_time,'%Y%m%d') as date,sri2.trade_amount as tradeAmt,sri2.stock_code as code,sri2.min_price as lowPrice,sri2.stock_name as name,sri2.max_price as highPrice,sri2.open_price as openPrice,sri2.trade_volume as tradeVol,sri2.cur_price as closePrice,sri2.pre_close_price as preClosePricefrom stock_rt_info as sri2where sri2.cur_time in<foreach collection="latestChangeTime" item="time" open="(" separator="," close=")">#{time}</foreach>and sri2.stock_code=#{code}order by sri2.cur_time</select><select id="getLatestChangeTime" resultType="java.lang.String">select max(cur_time) as max_timefrom stock_rt_infowhere stock_code = #{code}and cur_time between #{startDay} and #{latestTime}group by date_format(cur_time, '%Y%m%d')</select>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL:进阶巩固-存储过程

目录 一、存储过程的概述二、存储过程的基本使用2.1 创建存储过程2.2 使用存储过程2.3 查询指定数据库的存储过程以及状态信息2.4 查看某个存储过程的定义2.5 删除存储过程2.6 案例 三、存储过程的变量设置3.1 系统变量3.2 用户自定义变量3.3 局部变量 四、IF判断五、参数六、C…

spring boot项目对接人大金仓

先确认一下依赖 第一 是否引入了mybatis-plus多数据源&#xff0c;如果引入了请将版本保持在3.5.0以上 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>${dynam…

LeetCode 热题 100 回顾18

干货分享&#xff0c;感谢您的阅读&#xff01;原文见&#xff1a;LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 &#xff08;简单&#xff09; 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标…

Rainbond 助力城建智控,从传统开发到敏捷开发转型

在现代企业的数字化转型过程中&#xff0c;如何高效管理和快速部署业务应用已经成为各行业的核心挑战。尤其是在智慧工地和办公自动化&#xff08;OA&#xff09;这样的关键业务场景中&#xff0c;企业不仅需要面对频繁的系统更新&#xff0c;还要确保系统的稳定性与高效运作。…

Python库matplotlib之五

Python库matplotlib之五 小部件(widget)RangeSlider构造器APIs应用实列 TextBox构造器APIs应用实列 小部件(widget) 小部件(widget)可与任何GUI后端一起工作。所有这些小部件都要求预定义一个Axes实例&#xff0c;并将其作为第一个参数传递。 Matplotlib不会试图布局这些小部件…

经典sql题(十二)UDTF之Explode炸裂函数

1. EXPLODE: UDTF 函数 1.1 功能说明 EXPLODE 函数 是Hive 中的一种用户定义的表函数&#xff08;UDTF&#xff09;&#xff0c;用于将数组或映射结构中的复杂的数据结构每个元素拆分为单独的行。这在处理复杂数据时非常有用&#xff0c;尤其是在需要将嵌套数据“打散”以便更…

测试面试题:pytest断言时,数据是符点类型,如何断言?

在使用 Pytest 进行断言时&#xff0c;如果数据是浮点类型&#xff0c;可以使用以下方法进行断言&#xff1a; 一、使用pytest.approx pytest.approx可以用来比较两个浮点数是否近似相等。例如&#xff1a; import pytestdef test_float_assertion():result 3.14159expecte…

OpenCV背景建模:从基础到实践

OpenCV中的背景建模是一种在计算机视觉中常用的技术&#xff0c;主要用于从视频或图像序列中分离出前景&#xff08;运动物体&#xff09;和背景。以下将详细介绍OpenCV中几种常见的背景建模方法&#xff1a; 1. 帧差法&#xff08;非直接称为backgroundSubtractor&#xff09…

探索高效免费的PDF转Word工具,开启便捷办公之旅

无论是为了方便对文档内容进行编辑、修改&#xff0c;还是为了更好地适应不同的工作和学习场景&#xff0c;将 PDF 文档转换为可编辑的 Word 格式都具有重要意义。今天我就分享几款pdf转换成word免费版工具来解决大家的困扰。 1.Foxit PDF转换大师 链接一下>>https://w…

Mirror | homebrew 镜像源配置

1. 详细步骤 1.1 临时使用 因为长期设置不知道为什么&#xff0c;可能会有不生效的情况&#xff0c;所以发现好像卡着 没有走清华源的时候&#xff0c;可以临时使用 # 设置清华镜像源&#xff1a;五行一起拷贝执行 export HOMEBREW_API_DOMAIN"https://mirrors.tuna.ts…

[ RK3566-Android11 ] 关于移植 RK628F 驱动以及后HDMI-IN图像延迟/无声等问题

问题描述 由前一篇文章https://blog.csdn.net/jay547063443/article/details/142059700?fromshareblogdetail&sharetypeblogdetail&sharerId142059700&sharereferPC&sharesourcejay547063443&sharefromfrom_link&#xff0c;移植HDMI-IN部分驱动后出现&a…

taobao.item_get_appAPI接口原app数据测试指南

在电商竞争日益激烈的当下&#xff0c;数据成为了商家们争夺市场的重要武器。淘宝&#xff0c;作为中国最大的在线零售平台&#xff0c;其庞大的商品库和用户群体为商家提供了巨大的商机。为了帮助商家更好地了解市场动态&#xff0c;优化库存和营销策略&#xff0c;淘宝推出了…

使用WebClient 快速发起请求(不使用WebClientUtils工具类)

使用WebClient发起网络请求_webclient工具类-CSDN博客文章浏览阅读717次&#xff0c;点赞9次&#xff0c;收藏8次。使用WebClient发起网络请求_webclient工具类https://blog.csdn.net/qq_43544074/article/details/137044825这个是使用工具类发起的&#xff0c;下面就不使用工具…

java基础(4)类和对象

目录 1.前言 2.正文 2.1类的定义与使用 2.1.1类的定义 2.1.2类的实例化 2.1.3this引用 2.1.3.1 访问当前对象的成员变量 2.1.3.2调用当前对象的成员方法 2.1.3.3构造函数中的 this 2.1.3.4归纳this 2.2封装 2.2.1封装的定义 2.2.2访问修饰符 2.3static 2.3.1sta…

Kevin‘s notes about Qt---Episode 6 不同类中创建同一对象

问题描述 使用场景 现在在我的Qt界面中需要同时使用采集卡的AI(Analog Input)和AO(Analog Output)功能,均已分别调通,但是像之前一样通过创建两个类,然后分别在两个线程中进行操作的方式并不能实现。 原本写法 头文件 art_ao.h 核心代码如下: #ifndef ART_AO_H #defi…

python自动更新chromedriver

python自动化过程中&#xff0c;经常遇到脚本跑着跑着&#xff0c;就报错&#xff0c;一看&#xff0c;浏览器自动升级了。 共两张解决方案&#xff1a; 1、禁止浏览器自动升级 2、当脚本运行前先去检测当前的chromedriver与浏览器是否匹配&#xff0c;不匹配&#xff0c;就下载…

“卷”智能, 从高质量算力开始

算力即国力&#xff0c;这已是产业共识。 当人工智能浪潮席卷全球之际&#xff0c;大家深刻感受到发展算力产业的重要性和紧迫性&#xff0c;高质量的人工智能算力已经与国家竞争、产业升级和企业转型息息相关。 去年&#xff0c;《算力基础设施高质量发展行动计划》的颁布&a…

前后端传参

文章目录 后端接收参数前端发送请求引入axios实现发送请求引入qs实现传参格式化axios基本写法 前后端传参将数组转化为单个Json字符串传输前端发送后端接收 将数组转换为json对象进行传输前端发送请求后端接受请求 直接传输数组前端发送请求后端接收请求 前后端发送请求格式需要…

Ubuntu 镜像替换为阿里云镜像:简化你的下载体验

Ubuntu&#xff0c;作为一款广受欢迎的Linux发行版&#xff0c;以其稳定性和易用性著称。但你是否曾因为下载速度慢而感到沮丧&#xff1f;现在&#xff0c;你可以通过将Ubuntu的默认下载源替换为阿里云镜像来解决这个问题。本文将指导你如何完成这一过程。 为什么选择阿里云镜…

Docker 安装 ClickHouse 教程

Docker 安装 ClickHouse 教程 创建目录 首先&#xff0c;创建必要的目录用于存放 ClickHouse 的配置、数据和日志文件。 mkdir -p /home/clickhouse/conf mkdir -p /home/clickhouse/data mkdir -p /home/clickhouse/log chmod -R 777 /home/clickhouse/conf chmod -R 777 /…