盈利宝项目

第一章 公司中怎么做项目

1.立项, 公司自己的项目; 公司投标(销售,技术售前)

2.需求分析: 需求职位的人员(文档需求说明书) 和 架构师参与

3.产品人员: 设计项目的页面,功能点, 按钮的摆放。 后期产品的运营

4.技术人员: 技术经理, 项目经理, 开发人员

5.测试人员:测试项目

6.运维人员: 安装软件,培训用户。

第二章 项目设计和开发

项目是什么: 盈利宝-互联网金融项目,分为理财端和借款端。 理财端:用户购买理财产品,获取收益(利息); 可以在pc网站, 手机app上访问盈利宝平台。

项目是分布式开发模式, 有多个微服务。 服务之间是使用dubbo做调用的。 每个服务使用的springboot框架, 缓存使用的是redis,数据库是mysql。前端页面视图使用的Thymeleaf.

第一个内容:服务和结构

服务:

micr-web: web服务,作为dubbo消费者出现的, 用户主要操作应用。

micr-dataservice: 数据服务,是访问数据库,提供数据的

micr-task: 定时任务服务, 是处理定时任务

micr-pay: 支付服务(用户购买产品, 查询支付记录的)

maven管理多模块项目:

micr-parent : 父项目,聚合管理其他项目。 定义依赖和版本

micr-api: dubbo公共的接口和数据类的。

micr-common: 这个大项目公用的工具类,常量类。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sCK4w4L7-1629537828714)(D:\course\6.project\04-盈利宝\19-盈利宝笔记\images\image-20210624145005092.png)]

第二个内容:数据库

  1. u_user: 用户表, 登录,注册,实名认证使用这个表
  2. u_finance_account:资金表,用户有多少钱。 用户购买理财产品,支付充值, 利息返还都是操作这个表
  3. b_loan_info: 理财产品表(商品表),用户购买的理财产品,都在这个表

​ cycle:产品周期(天,月)

​ product_type:0新手宝,1优选产品,2散标产品; 0类型产品,周期是天为单位, 其他都是月为单位

​ product_status:产品状态, 0未满标,1已满标,2满标已生成收益计划

4.b_bid_info: 投资记录表。 用户购买理财产品的信息记录表。

5.b_income_record: 收益表, 每个投资记录,对应的利息收入。

6.b_recharge_record: 支付信息表(充值记录表)

​ recharge_status:(0充值中,1充值成功,2充值失败)

第三个内容:搭建项目的环境

1.创建micr-dataservice : 使用mybatis逆向工程,创建实体类,mapper接口和mapper文件

2.创建maven项目 micr-api

3.创建多模块的内容: micr-parent micr-common

第四内容: 项目的功能点

1.首页

1)动力金融网历史年化收益率: b_loan_info 里面rate字段值平均值

2)平台用户数:注册的用户数量 b_user的行数

3)累计成交金额: b_bid_info 里面 bid_money的和

2.安装插件

Free Mybatis plugin

mybatis log plugin

3.使用Redis,

把历史年化收益率,平台用户数,累计成交金额 存放到redis, 每30分钟更新一次数据

使用redis的常用方式: 1.先从redis获取数据,2。如果redis中没有的数据,再从数据库获取。3.把数据存回到redis

public  Integer countRegister() {//使用string类型保存数据ValueOperations operations = redisTemplate.opsForValue();//1.从redis获取数据Integer countRegisterUsers  = (Integer) operations.get(AppRedisKey.APP_USER_REGISTER);//2.判断redis有无数据if( countRegisterUsers == null){ //redis没有数据synchronized (this) {countRegisterUsers  = (Integer) operations.get(AppRedisKey.APP_USER_REGISTER);if( countRegisterUsers == null ){//4.查询数据库countRegisterUsers = userMapper.selectCountUsers();//5.把数据放到redis  , key 有效期 30分钟operations.set(AppRedisKey.APP_USER_REGISTER, countRegisterUsers, 30, TimeUnit.MINUTES);}}}//3.如果redis有数据,直接返回return countRegisterUsers;
}

4.注册功能

页面: 数据有手机号, 密码, 短信验证码

逻辑: 手机号就是用户名(唯一的), 密码是使用md5加密后传递到服务, 存放到数据也是md5的值。不是明文

​ 短信验证码:确定当前是人为的操作,不是机器。

实现:

  1. 页面中对手机号, 密码, 验证码做数据验证(符合格式,手机号是唯一的,如果库中已经存在了这个手机号,不能注册)
  2. 发送短信验证码的请求
  3. 倒计时处理

服务器端:

1.发送验证码功能

2.接受请求参数, 手机号, 密码, 短信验证码, 对以上数据做验证。

3.注册,添加数据到u_user,同时创建一个u_finance_account用户,增加 888的金额。

4.注册成功后,调转到实名认证的页面

使用的功能:

1.倒计时,使用leftTime.js倒计时的


$.leftTime(60,function(d){
//d.status,值true||false,倒计时是否结束;
//d.s,倒计时秒;
});

2.md5加密的。 js文件,实现了md5加密处理

jQuery.md5.js

3.调用第三方接口,发送短信。

https://wx.jdcloud.com/market/datas/5/10665

短信验证的模板: 【公司或者组织】你的验证码是:5873568,3分钟内有效!

使用技术 HttpClient fastjson

5.实名认证

实名认证: 确定一个手机号对应的账号信息是有效的用户(存在的合法的用户),规则是判断姓名和身份证号是一致的。

实现:调用第三方的功能接口,实现认证的。使用的二要素认证(姓名和身份证号),使用的京东万象的接口。

量子数据: https://wx.jdcloud.com/market/datas/5/11556

实现:

1.在页面上,提交姓名和身份证号, 发送服务器controller

2.接受了数据, 调用 第三方接口,使用HttpClient调用接口,根据返回的json,判断认证结果。

3.如果实名认证成功,更新数据 ,u_user更新他的字段 name, id_card.

4.实名认证成功,跳转到用户中心页面。

6.登录

登录:需要提供手机号,密码,短信验证码。 到数据库比对数据, 如果登录成功,更新用户登录时间

​ 跳转回来源的位置

7.退出

//退出
@GetMapping("/loan/logout")
public String logout(HttpSession session){// 让session无效session.invalidate();// 回到项目的首页return "redirect:/index";
}

8.用户中心

9.投资:购买理财产品

前端:

1)判断用户登录

2)判断用户需要实名认证

3)判断资金余额(Finance_Account)

4)判断产品的剩余可投资金额

5)判断产品的min 和max 投资金额 , 产品状态

6)计算 收益(利息)

以上数据都正确, 提交 产品id,投资金额,给服务器端

实现前端的处理想法

1)判断session中的值,

2)判断session中的name有误值

3)在js中获取account的资金, 获取产品的信息 leftMoney ,min,max, cycle , rate , 产品类型。 产品状态

4)计算投资是否可以, 计算利息。

服务端:

  1. 投资金额和资金的判断
  2. 查询产品信息,判断产品没有满标。
  3. 产品的投资金额。min, max ,leftMoney
  4. 扣除资金
  5. 扣除产品的剩余可投资金额
  6. 生成投资记录
  7. 判断本次购买后,产品是否满标,更新产品的满标状态

PS:

  1. 有事务

  2. 锁。使用的mysql排他锁(悲观锁)

​ 使用 select… where 条件 for update

​ for update 所在的事务,里面锁定的数据 其他事务不能 update ,delete , 只有当前的事务提交后,

在当前事务后 的其他事务才能提交

给mysql的表的数据上锁, 要使用行级别的锁, 不要锁这个表。

在使用for update时, 要想使用行级别的锁,需要where部分是 主键或唯一索引作为条件

例如:给资金记录上锁

select * from u_finance_account where uid=123 for update

投资排行榜

用redis存储排行榜, 使用ZSet数据类型, value是手机号, score是投资金额。

10.定时任务

定时任务: 在某个时间或者以一定频率执行的工作。

实现方式:

1) java中自己有一个Timer类 : 小型的, 简单的定时任务。

2) Quartz :框架。 国外的。 大型项目的定时任务。

3) xxl-job : 国内的。 https://www.xuxueli.com/xxl-job/

4)Spring Task: spring自己的模块,做定任务

​ 两个注解,支持定时任务。

​ @Scheduled:放在方法的上面,表示执行时间的,使用cron表达式

​ @EnableScheduling:放在springboot启动类的上面,表示启动定任务

定时任务中对时间的指定

cron:表达式,表示时间的。

cron表达式是一个字符串,字符串以5或6个空格隔开,分开工6或7个域,每一个域代表一个含义,Cron有如下两种语法
格式:
Seconds Minutes Hours DayofMonth Month DayofWeek Year 或
Seconds Minutes Hours DayofMonth Month DayofWeek

项目中定时任务:

  1. 处理满标的产品, 计算他们的收益。生成收益计划。

​ 逻辑是把满标的产品找到, 计算预计的到期时间和利息。 把这些记录到 收益表,用户可以查询这个预计的收益。

​ 1)什么是满标的产品, product_status = 1

​ 2)什么时间做计算利息这个工作, 凌晨2.点整,执行任务,计算前一天的满标的产品

​ 3) 查询出前一天满标的产品, 对每个产品, 查询出他的每笔投资记录。

​ 4)对每笔投资,计算收益, 存到收益表

​ 5)更新产品的 状态 product_status = 2(满标已经生成收益计划)

  1. 收益返还(把到期的利息和本金返还给用户的资金账号)

    收益返还: 把到期的收益计划,把本金和利息返还到用户的资金账号

    什么时间执行这个操作 ? 定时任务执行时间的前一天到期的收益计划的记录

    1)把收益表 b_income_record。 到期的记录

    2)把本金的值和利息值,更新到b_finance_account表。

    3)修改b_income_record他的状态是 1(已经返还)

11.支付(充值)

支付:有关金融的业务。 创建一个独立的微服务。包含了和钱有关的业务。 充值, 查询支付结果, 提现,对账等等

micr-pay微服务。

支付:付款。 我们系统中,用户需要把钱从银行卡转移到平台的账号中,这个过程叫做充值。 之后,用户可以使用平台的账号购买理财产品。

提现: 从平台的账号中把钱转账到银行卡。

对账: 平台支付的信息和其他第三方的平台进行对比。

当前项目主要先实现充值: 使用第三方平台,使用充值的业务。 第三方需要有国家颁发的 支付牌照。

项目中使用的第三方是: 快钱

快钱支付:

1)沙箱:测试环境

2)电脑网站支付

3)SDK: software development kit ,提供某些功能的实现。 直接使用。类似工具库。

​ 对于java语言,sdk就是一个jar , sdk包含的功能:封装了签名&验签、HTTP接口请求等基础功能

4)快钱的人民币网关接口: 快钱整合了多种支付的方式放在一起。 在一个程序中包含了多种支付的方式。

这个程序叫做网关, 这个程序是快钱的系统。 支持 人民币的结算,支付。

5)用户和商家,快钱的交互

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vBcmr3q7-1629537828716)(D:\course\6.project\04-盈利宝\19-盈利宝笔记\images\image-20210702094843742.png)]

6) RSA(非对称加密算法)

历史: 之前使用的同样的加密和解密的方式;

​ 由于加密和解密使用同样规则(简称"密钥")

RSA有公钥和私钥两个密钥。

公钥:是公开的,任何人都能获取, 使用公钥对数据加密

私钥:保护好的,非公开的, 自己使用的。 使用私钥解密数据

任何一个人,要对数据处理,使用使用一对公钥和私钥。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9K9lwaRY-1629537828717)(D:\course\6.project\04-盈利宝\19-盈利宝笔记\images\image-20210702100905880.png)]

快钱接口:

第一个支付接口:

url:https://sandbox.99bill.com/gateway/recvMerchantInfoAction.htm

参数

pageUrl:商家接受快钱通知的支付结果的页面地址(商家的地址)

bgUrl: 商家服务器接受支付结果的后台地址(商家的地址),快钱将支付结果发送到bgUrl对应的地址

signType:签名类型 使用RSA

merchantAcctId:商家账号, 快钱分配的。快钱分给商户的11位商户编号。传值为商户号 01

orderId:商户订单号,只允许使用字母、数字、- 、_,并以字母或数字开头,每个商户提交的订单号,必须在自身账户交易中唯一

orderAmount:订单金额 ,以分为单位。比方10元,提交时金额应为1000

orderTime:订单时间 数字串,一共14位 格式为:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位]例如:20071117020101

signMsg:签名字符串,商家需要把请求的参数组成这样的格式: 参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行 商户私钥证书加密形成密文,发送给快钱

签名: 把请求的数据,生成一个标识的过程。 这个标识就是signMsg

第二个接口异步通知

异步通知: 快钱通知商户支付结果的, 快钱会向 bgUrl或者pgUrl传递支付结果。 同时都要的话,使用bgUrl的地址

bgUrl: 快钱会将支付结果以GET方式发送到bgUrl对应的地址,商户接收到支付结果,并且进行相应处理之后,需要按照指定的方式输出内容,告诉快钱已经成功接收并处理完毕。

验签时: 验证signMsg的内容是否正确。

快钱向 商家异步通知的例子:

https://yinglibao.com/licai/kuaiqianNotice?merchantAcctId=1021024484701&version=v2.0&language=1&signType=4&payType=10&bankId=CCB&orderId=2019052009410301&orderAmount=1&orderTime=20190520094107&ext1=&ext2=&payAmount=1&dealId=3411469393&bankDealId=WG82301201905200944297620305&dealTime=20190520095014&payResult=10&errCode=&fee=1&signMsg=FbBOrXH6bBBd9Y6aytUeQMpi5j8b7FVO%2FGSgMQ56MJguZKvLCZULIv6fGAHun5VgGlAZ%2Bg8tTI%2FniyZLVP8oK7rRKCo7nXc1lztC5%2Bn5BIh67jT1Gn3PzXYQLxyy3gh0MsJ5fEs1BRc%2FZ%2FD9XW9r7Lmvlpusoeuy6pRgbEZI%2F0WnIebzPw9wGDTQwTsYpcPIqfPd15DB3VsLB86DVtJhlfaCoG0LVfFelAMTP1d3OR5Hm40p9W8XN7yvlpUm%2FZsHjeyb4JjpCJ9%2FAFXMou3TYrltnjbaQa%2BzlkD4SWNXQD4go%2BgqWj%2BFXeJrwqf8k5uk3C3SXSx31jj6bqgXRIxRQg%3D%3D

内网穿透: 目的在一台内网中的服务器接受来自外网的请求。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m45QVtu0-1629537828719)(D:\course\6.project\04-盈利宝\19-盈利宝笔记\images\image-20210702151532735.png)]

  1. 项目中的支付服务

    micr-pay:支付服务,负责和快钱交互。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CvWGnh4C-1629537828720)(D:\course\6.project\04-盈利宝\19-盈利宝笔记\images\image-20210702162705747.png)]

第三个接口: 充值订单查询接口。

目的:实现订单补偿机制, 当订单没有收到异步通知, 需要在程序中主动的发起查询订单的请求。 像快钱方发起请求, 获取订单的充值结果。

什么时候调用快钱的查询接口: 定时任务, 每20分钟,把没有处理的充值订单都取到,然后向快钱发起请求, 查询订单的状态

从redis获取,没有处理的订单。 把超过10分钟没有处理的订单,调用快钱的接口。 根据快钱给出的结果, 处理订单记录

金融项目-注册和实名功能相关推荐

  1. Django框架项目——BBS项目介绍、表设计、表创建同步、注册、登录功能、登录功能、首页搭建、admin、头像、图片防盗、个人站点、侧边栏筛选、文章的详情页、点赞点踩、评论、后台管理、添加文章、头像

    文章目录 1 BBS项目介绍.表设计 项目开发流程 表设计 2 表创建同步.注册.登录功能 数据库表创建及同步 注册功能 登陆功能 3 登录功能.首页搭建.admin.头像.图片防盗.个人站点.侧边栏 ...

  2. 途牛旅游项目——注册功能_功能分析

    注册的后台功能代码 编写UserService的register方法测试 com\wzx\service\TestUserService.java @Testpublic void test03() ...

  3. day17--途牛旅游项目-注册功能

    day17–途牛旅游项目-注册功能 注册功能_功能分析 注册功能_功能实现 Test方法 @Testpublic void test03() {UserService userService = ne ...

  4. 【金融项目】尚融宝项目(八)

    16.服务调用 16.1.注册中心和服务发现 16.1.1.运行Nacos注册中心 16.1.1.1.Nacos下载和安装 下载地址:https://github.com/alibaba/nacos/ ...

  5. 万信金融 -项目介绍 day01

    万信金融 -项目介绍 这个项目所有的资料 链接:https://pan.baidu.com/s/1U0ii8hCK76yzm-8yvrSXzQ 提取码:9i2z b站视频连接 https://www. ...

  6. 黑马最新Android P2P金融项目开发实战 视频+项目源码

    p2p金融项目,结合现有第三方应用市场上主流p2p金融理财产品特点,集成了新的技术与框架.该项目内容包含p2p金融理财业务流程,数据加密.解密,客户端异常信息上传,用户登录注册,数据的图表展示,第三方 ...

  7. 金融支付 android 源码,Android P2P金融项目开发实战 视频+项目源码

    p2p金融项目,结合现有第三方应用市场上主流p2p金融理财产品特点,集成了新的技术与框架.该项目内容包含p2p金融理财业务流程,数据加密.解密,客户端异常信息上传,用户登录注册,数据的图表展示,第三方 ...

  8. 记录一下曾经写过的P2P金融项目-理财端(PC端)纯代码(续-服务消费者工程)

    pom文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3 ...

  9. 万信金融项目学习笔记

    万信金融项目 1 项目背景 什么是银行存管模式? 1.2 项目概述 1.3 功能模块 1.4 核心业务流程 2 项目的技术架构 2.1 技术架构 2.2 技术栈 2.3 技术解决方案 2.4 软硬件环 ...

最新文章

  1. java虚拟机资源根目录_Java路径问题最终解决方案—可定位所有资源的相对路径寻址 - java - CSDN技术......
  2. 实行计算机分类标识管理的根本目的,会计信息系统试卷A及答案
  3. 2009 年 5 月 忙碌的一个月
  4. 第三课 Makefile文件的制作(上)
  5. 多功能语音播放器上线啦~
  6. 徐州医科大学计算机报名,2019年徐州医科大学计算机等级考试准考证打印
  7. python文本编码转换_python实现文件批量编码转换及注意事项
  8. PHP无法使用file_get_contents或者curl_init()函数解决办法
  9. ios 学习札记 细节(四)
  10. mysql 5.1.6 安装包_Centos6 离线安装 MySQL5.5.55-1(附带安装包及 Perl 依赖包)
  11. Linux编译后运行,OpenCV2.3.0编译后运行的问题
  12. lisp型材库_STMX 1.3.2 发布,高性能的 Common Lisp 库
  13. 室外巡检项目搭建仿真环境
  14. 计算机声卡视频无法安装驱动程序,声卡驱动装不上怎么办 声卡驱动装不上解决方法【图文】...
  15. 浙江工大学计算机学院保研,浙江工业大学计算机学院保研初试名单
  16. 笔记本电脑清除BIOS密码
  17. AppStore审核
  18. 360浏览器和搜狗浏览器查看双内核版本及如何控制内核版本
  19. css3 svg 背景图 data:image/svg+xml;base64
  20. php 统计汉字,PHP 统计实时统计汉字个数和区别

热门文章

  1. 《一起学mysql》1
  2. 《Python 程序设计》张莉主编 课后习题答案
  3. 微信小程序狼人杀游戏代码及步骤
  4. zcmu——2204 Keyboard(模拟)
  5. TortoiseSVN环境搭建
  6. VUE-超大文件上传-如何上传文件-大文件上传
  7. 世界终极富豪俱乐部探密
  8. linux上安装nginx及实现反向代理
  9. world计算机恢复出厂设置,Word怎么恢复默认设置? Word恢复默认设置的四种方法
  10. 基于jsp,ssm外卖订餐系统(带论文)