19.项目开发之量化交易QuantTrade(一)

news2024/11/23 13:31:25

项目开发之量化交易QuantTrade

数据库创建&项目创建

01

02

SpringBoot项目之量化交易QuantTrade创建

03

04
05
06
创建项目之初,将需要的pom一次性导入

<properties>
   <java.version>1.8</java.version>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
   <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
</properties>
<dependencies>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <dependency>
       <groupId>org.mybatis.spring.boot</groupId>
       <artifactId>mybatis-spring-boot-starter</artifactId>
       <version>2.2.2</version>
   </dependency>
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>8.0.33</version>
   </dependency>
   <dependency>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
       <optional>true</optional>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
       <exclusions>
           <exclusion>
               <groupId>org.junit.vintage</groupId>
               <artifactId>junit-vintage-engine</artifactId>
           </exclusion>
       </exclusions>
   </dependency>
   <dependency>
       <groupId>io.springfox</groupId>
       <artifactId>springfox-boot-starter</artifactId>
       <version>3.0.0</version>
   </dependency>
   <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>fastjson</artifactId>
       <version>1.2.17</version>
   </dependency>
   <dependency>
       <groupId>com.opencsv</groupId>
       <artifactId>opencsv</artifactId>
       <version>5.7.1</version>
   </dependency>
</dependencies>
<dependencyManagement>
   <dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-dependencies</artifactId>
           <version>${spring-boot.version}</version>
           <type>pom</type>
           <scope>import</scope>
       </dependency>
   </dependencies>
</dependencyManagement>

<build>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
           <version>3.8.1</version>
           <configuration>
               <source>1.8</source>
               <target>1.8</target>
               <encoding>UTF-8</encoding>
           </configuration>
       </plugin>
       <plugin>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-maven-plugin</artifactId>
           <version>${spring-boot.version}</version>
           <configuration>
               <mainClass>com.quanttrade_bk.QuantTradeBkApplication</mainClass>
               <skip>true</skip>
           </configuration>
           <executions>
               <execution>
                   <id>repackage</id>
                   <goals>
                       <goal>repackage</goal>
                   </goals>
               </execution>
           </executions>
       </plugin>
   </plugins>
</build>

在这里插入图片描述

解释:3380是MySql的端口号
root是MySql的用户名
1234是MySql的密码

application.properties

# 应用服务 WEB 访问端口
server.port=8080
# 配置数据库连接信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3380/db_quant?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=1234
#配置mapper.xml的路径
mybatis.mapper-locations=classpath:mapper/*/*.xml

Application入口

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@SpringBootApplication
@EnableSwagger2
public class QuantTradeApplication {

   public static void main(String[] args) {
       SpringApplication.run(QuantTradeApplication.class, args);
   }
   /**
    * 向spring注册RestTemplate工具
    * @return
    */
   @Bean
   public RestTemplate getRestTemplate(){
       return new RestTemplate();
   }
}

08
启动项目,运行:
http://localhost:8080/swagger-ui/index.html
能够正常进入swagger2,说明SpringBoot项目已经启动成功

搭建JSON响应式工具-RestObject

09

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class RestObject {
   private Integer code;           //前端的状态码 0:业务失败  1:业务成功
   private String msg;              //前端需要展示的信息
   private Object data;            //前端需要的复杂数据
   //业务成功的方法----------
   /**
    * 业务成功,自定义返回msg和返回的数据
    * @param msg
    * @param data
    * @return
    */
   public static RestObject OK(String msg,Object data){
       return new RestObject(1,msg,data);
   }
   /**
    * 业务成功,自定义返回msg,无返回数据
    * @param msg
    * @return
    */
   public static RestObject OK(String msg){
       return OK(msg,null);
   }
   /**
    * 业务成功,自定义返回的数据,无返回msg
    * @param data
    * @return
    */
   public static RestObject OK(Object data){
       return OK(null,data);
   }
   //业务失败的方法----------
   /**
    * 业务失败,自定义返回msg和返回的数据
    * @param msg
    * @param data
    * @return
    */
   public static RestObject ERROR(String msg,Object data){
       return new RestObject(0,msg,data);
   }
   /**
    * 业务失败,自定义返回msg,无返回数据
    * @param msg
    * @return
    */
   public static RestObject ERROR(String msg){
       return ERROR(msg,null);
   }
   /**
    * 业务失败,自定义返回的数据,无返回msg
    * @param data
    * @return
    */
   public static RestObject ERROR(Object data){
       return ERROR(null,data);
   }
}

前后端业务:用户注册

用户ER图

010

用户表(tb_member)

之所以不叫做User,是为了减少撞库问题。
011

012
013

用户实体

014

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Member {
   private Integer id;
   //JsonProperty是为了和前端json请求对应
   @JsonProperty("userName")
   private String account;
   @JsonProperty("passWord")
   private String authstring;
   //repeat非数据库字段,是为了进行密码一致性校验
   private String repeat;
}

三层搭建

015
016
MemberMapper

import org.springframework.stereotype.Repository;
@Repository
public interface MemberMapper {
}

Application

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@SpringBootApplication
@EnableSwagger2
@MapperScan("com.quanttrade.member.mapper")
public class QuantTradeApplication {

   public static void main(String[] args) {
       SpringApplication.run(QuantTradeApplication.class, args);
   }
   /**
    * 向spring注册RestTemplate工具
    * @return
    */
   @Bean
   public RestTemplate getRestTemplate(){
       return new RestTemplate();
   }
}

MapperMapper.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.quanttrade.member.mapper.MemberMapper">

</mapper>

MemberService

import com.quanttrade.member.mapper.MemberMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MemberService {
   @Autowired
   private MemberMapper memberMapper;
}

MemberController

import com.quanttrade.member.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/member")
@CrossOrigin //测试阶段进行跨域,项目正式上线时,会将资源整合到static中,到时候就无需跨域
public class MemberController {
   @Autowired
   private MemberService memberService;
}


后端业务实现

MemberController

import com.quanttrade.member.javabean.Member;
import com.quanttrade.member.service.MemberService;
import com.quanttrade.utils.javabean.RestObject;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/member")
@CrossOrigin //测试阶段进行跨域,项目正式上线时,会将资源整合到static中,到时候就无需跨域
public class MemberController {
   @Autowired
   private MemberService memberService;

   /**
    * 注册接口
    * @param param     用户名、密码、确认密码
    * @return
    */
   @ApiOperation("注册接口")
   @PostMapping("/register")
   public @ResponseBody RestObject register(@RequestBody Member param){
       return memberService.register(param);
   }
}

MemberService

/**
* 注册用户信息
* @param param 用户名、密码、确认密码
* @return 注册结果
*/
public RestObject register(Member param) {
   //1、合法性校验
   //1.0、防止空指针异常
   if(param == null){
       return RestObject.ERROR("注册失败,请联系管理员");
   }
   //1.1、用户名必须存在
   if(param.getAccount()==null || "".equals(param.getAccount().trim())){
       return RestObject.ERROR("注册失败,请先填写用户名!");
   }
   //1.2、密码必须存在
   if(param.getAuthstring()==null || "".equals(param.getAuthstring().trim())){
       return RestObject.ERROR("注册失败,请先填写密码!");
   }
   //1.3、确认密码必须存在
   if(param.getRepeat()==null || "".equals(param.getRepeat().trim())){
       return RestObject.ERROR("注册失败,请先填写确认密码!");
   }
   //1.4、密码和确认密码必须保持一致
   if(!param.getAuthstring().equals(param.getRepeat())){
       return RestObject.ERROR("注册失败,密码和确认密码必须保持一致!");
   }
   //2、先对密码进行MD5加密,替换未加密密码
   param.setAuthstring(
           DigestUtils.md5DigestAsHex(
                   param.getAuthstring().getBytes()
           )
   );
   //3、调用mapper层保存数据
   int rows = 0;
   try {
       rows = memberMapper.saveMemberInfo(param);
   } catch (Exception e) {
       String errorMsg = e.getMessage();
       if(errorMsg.contains("Duplicate entry")&& errorMsg.contains("tb_member.account")){
           //判断如果是用户名重复了,抛出用户名重复的问题
           return RestObject.ERROR("注册失败,该用户名已注册,请更换一个新的用户名!");
       }
       return RestObject.ERROR("注册失败,请联系管理员");
   }
   //4、返回业务结果
   if(rows>0){
       return RestObject.OK("注册成功!");
   }else{
       return RestObject.ERROR("注册失败,请联系管理员");
   }
}

MemberMapper

import com.quanttrade.member.javabean.Member;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface MemberMapper {
   /**
    * 保存用户名和密码信息
    * @param param
    * @return 保存成功了几条数据
    */
   int saveMemberInfo(@Param("member") Member param);
}

MemberMapper.xml

<insert id="saveMemberInfo">
   insert into tb_member (
       account,
       authstring
   ) values (
             #{member.account},
             #{member.authstring}
                    )
</insert>

测试:
打开swagger-ui
017
018

前端整合

019

020
目前阶段echarts图表会报错,不用管
前后端项目地址下载:传送门

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

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

相关文章

福建建筑模板厂家-能强优品木业

福建建筑模板厂家-能强优品木业&#xff0c;是一家专业从事建筑模板生产销售25年的源头工厂。我们以优质的产品和卓越的服务赢得了福建当地建筑施工企业的信赖与合作。作为一家有着丰富经验的建筑模板厂家&#xff0c;我们致力于提供高品质的产品&#xff0c;以满足客户的需求。…

一文2000字手把手教你写一份优质的性能测试报告的编写

性能测试项目实战&#xff08;风暴平台&#xff09; 1、背景 公司之前的测试团队做API的⾃动化测试都是使⽤JMeter等工具来进行&#xff0c;这样的话测试效率⽽⾔不是那么很⾼&#xff0c;⽽ 且在扩展性⽅⾯不是很有竞争⼒的。所以开发了新的测试平台&#xff0c;但是考虑到公…

只要看完这6个案例,就会刷新你对室内空间颜色搭配的认知

只要看完这6个案例&#xff0c;就会刷新你对室内空间颜色搭配的认知&#xff01; 室内设计和家居装饰灵感因 "芭比娃娃 "电影的上映而席卷了 A&D 行业。随着多年来粉红色的复苏&#xff0c;专家们采用大胆的粉红色调和女性化的装饰也就不足为奇了&#xff0c;而这…

不同阶段uncertainty如何设置

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; PreCTS stage: Setup uncertainty jitter skew margin Hold uncertainty skew margin PostCTS stage: Setup uncertainty jitter margin Hold uncertainty margin jitter指的是pll时钟抖动…

每个开发人员都想使用的编程语言

在任何时候&#xff0c;一些编程语言都会把大量的开发人员变成热情的布道者&#xff0c;试图说服世界其他地方的人相信它的伟大。 当热起来的时候&#xff0c;这种语言可能会成为行业标准&#xff0c;但其他时候&#xff0c;这种受欢迎程度就会消失。 在这个故事中&#xff0…

【重要!合规政策更新】欧盟,儿童玩具相关产品卖家请及时关注!儿童玩具EN71

合规政策更新&#xff01; 尊敬的卖家&#xff1a; 您好&#xff01; 我们此次联系您是因为您正在销售需要审批流程的商品。为此&#xff0c;亚马逊正在实施审批流程&#xff0c;以确认我们网站上提供的商品类型须符合指定的认证标准。要在亚马逊商城销售这些商品&#xff0…

华为OD七日集训第8期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 一、适合人群二、本期训练时间三、如何参加四、7日集训第8期五、精心挑选21道高频100分经典题目&#xff0c;作为入门。第1天、数据结构第2天、滑动窗口第3天、贪心算法第4天、二分查找第5天、分治递归第6天、深度优先搜索dfs算法第7天、宽度优选算法&#xff0c;回溯法 六…

小程序框架语法详解以及页面生命周期的代码预演

目录 一、框架简介 二、视图层 2.1 简介 2.2 WXML语法演示 2.2.1 数据绑定 2.2.2 列表渲染 2.2.3 条件渲染 2.2.4 模板 2.3 事件系统 2.4 页面一级菜单展示及切换 2.5 a页面跳b页面界面内部按钮演示 2.6 a页面跳c页面&#xff08;不在一级菜单内的页面&#xff09;…

基于SpringBoot的在线小说阅读平台系统

基于SpringBoot的在线小说阅读平台系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 个人中心 登录界面 管理员界面 摘要 基于Spring Boot的在线小说阅读…

【M1-Java】讲讲 StringBuffer和StringBuilder区别

StringBuffer和StringBuilder区别 开头&#xff1a;首先&#xff0c;StringBuffer和StringBuilder都是用于存储或者修改拼接字符串的&#xff0c;与String类似。 来源:都继承AbstractStringBuilder类。初始容量为16的字符串缓冲区。 字符修改上的区别: ①和 String 类不同的…

安全测试概述和用例设计

一、安全测试概述 定义&#xff1a;安全测试是在软件产品开发基本完成时&#xff0c;验证产品是否符合安全需求定义和产品质量标准的过程。 概念&#xff1a;安全测试是检查系统对非法侵入渗透的防范能力。 准则&#xff1a;理论上来讲&#xff0c;只要有足够的时间和资源&a…

Java中,对象一定在堆中分配吗?

在我们的日常编程实践中&#xff0c;我们经常会遇到各种类型的对象&#xff0c;比如字符串、列表、自定义类等等。这些对象在内存中是如何存储的呢&#xff1f; 你可能会毫不犹豫地回答&#xff1a;“在堆中&#xff01;”如果你这样回答了&#xff0c;那你大部分情况下是正确…

深入理解Scrapy

Scrapy是什么 An open source and collaborative framework for extracting the data you need from websites. In a fast, simple, yet extensible way. Scrapy是适用于Python的一个快速、简单、功能强大的web爬虫框架&#xff0c;通常用于抓取web站点并从页面中提取结构化的数…

开源六轴机械臂myCobot 280末端执行器实用案例解析

Intrduction 大家好&#xff0c;今天这篇文章的主要内容是讲解以及使用一些myCobot 280 的配件&#xff0c;来了解这些末端执行器都能够完成哪些功能&#xff0c;从而帮助大家能够正确的选择一款适合的配件来进行使用。 本文中主要介绍4款常用的机械臂的末端执行器。 Product m…

安防监控系统EasyCVR视频汇聚平台设备树收藏按钮的细节优化

视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#…

使用allure如何生成自动化测试报告 ?一文详解allure的使用 。

网上介绍allure报告的很多 &#xff0c;但个人总感觉还是不够整体 &#xff0c;不够详细 &#xff0c;所看到的都是局部 。故本人花了些时间 &#xff0c;将这个allure详细的整理了一遍 。整体且涉及每个细节 。 1.allure介绍 它是一个生成HTML测试报告的工具包 使用java开发…

14.6 Socket 应用结构体传输

当在套接字编程中传输结构体时&#xff0c;可以将结构体序列化为字符串&#xff08;即把结构体的所有成员打包成一个字符串&#xff09;&#xff0c;然后将字符串通过套接字传输到对端&#xff0c;接收方可以将字符串解析为结构体&#xff0c;然后使用其中的成员数据。这种方法…

如何提高企业工作微信的管理效率?

微信作为一款拥有数亿用户的软件&#xff0c;其使用频率在全国范围内居高不下。随着企业的不断发展&#xff0c;微信在工作中的应用也变得越来越广泛。为了更好地服务客户并提升业务效益&#xff0c;企业通常会为新入职员工配置工作微信以便于业务沟通和客户服务。然而&#xf…

推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。

文章目录 &#x1f31f; 离线评估&#xff1a;常用的推荐系统离线评估方法有哪些&#xff1f;&#x1f34a; 1. RMSE/MSE&#x1f34a; 2. MAE&#x1f34a; 3. Precision/Recall/F1-score&#x1f34a; 4. Coverage&#x1f34a; 5. Personalization&#x1f34a; 6. AUC &…

ChatGPT当导购员!全球最大超市,全面应用生成式AI

全球最大连锁超市沃尔玛&#xff08;Walmart&#xff09;在官网宣布&#xff0c;将在电商平台试用3款生成式AI&#xff0c;帮助用户改善购物体验提升效率。 据悉&#xff0c;沃尔玛使用了一种类ChatGPT的产品&#xff0c;可根据文本提示自动生成购物建议、搜索建议和评论摘要等…