写一个MySql存储过程实现房贷等额本息还款计算(另外附javascript代码)
写一个MySql存储过程实现房贷等额本息还款计算
MySql存储过程代码如下:
DROP procedure IF EXISTS `calc_equal_interest_proc`;
DELIMITER $$
#USE `fn`$$
CREATE PROCEDURE `calc_equal_interest_proc` (khbh varchar(50))
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '等额本息计算'
BEGIN
declare khf0059 varchar(100); #客户产品编号
declare khf0067 varchar(100); #产品产品模板编号
declare vtkf0007 datetime; #提款日期 declare cpf0026 decimal(18,8) default 0.0; #产品金额
declare cpf0027 int default 0; #产品周期
declare cpf0028 decimal(18,8) default 0.0; #产品总利息
declare cpf0029 decimal(18,8) default 0.0; #产品银行利息
declare cpf0030 decimal(18,8) default 0.0; #产品风险金池
declare cpf0031 decimal(18,8) default 0.0; #产品科技及获客
declare cpf0038 int default 0; #产品等额本息是否计算是否足月
declare hky datetime; declare i int default 0; declare corpusLeft decimal(18,8) default 0.0; #等额还款之本金
declare corpusLeftMon decimal(18,8) default 0.0; #等额还款之剩余本金
declare ratePow decimal(18,8) default 0.0; #每期贷款利率
declare capMon decimal(18,8) default 0.0; #月供
declare varerestMon decimal(18,8) default 0.0; #月供利息
declare corpusMon decimal(18,8) default 0.0; #月供本金
declare capTotle decimal(18,8) default 0.0; #还款总额
declare varerestTotle decimal(18,8) default 0.0; #利息总额
declare corpusTotle decimal(18,8) default 0.0; #利息总额
declare re int default 0; #set cpf0026,cpf0027 = (select ifnull(f0026,0),ifnull(f0027,0) from t0003 where f0002=vtkf0003 limit 0,1);
select f0059,f0067 into khf0059,khf0067 from t0002 where f0027=khbh limit 0,1;
select ifnull(f0026,0),ifnull(f0027,0),ifnull(f0028,0),ifnull(f0029,0),ifnull(f0030,0),ifnull(f0031,0)
into cpf0026, cpf0027, cpf0028, cpf0029, cpf0030, cpf0031 from t0003 where f0002=(select f0059 from t0002 where f0027=khbh limit 0,1) limit 0,1; set corpusLeft = cpf0026;
set corpusLeftMon = cpf0026;
set ratePow = (select pow(cpf0028/12+1,cpf0027)); #每期贷款利率
set hky = now(); while i < cpf0027 do
set capMon=(corpusLeft*cpf0028/12*ratePow)/(ratePow-1);#月供
set varerestMon=(select convert(corpusLeftMon*cpf0028/12,decimal(18,8)));#月供利息
set corpusMon=(select convert(capMon-varerestMon,decimal(18,8)));#月供本金
set corpusLeftMon=(select convert(corpusLeftMon-corpusMon,decimal(18,8)));#本金余额
set capTotle=capTotle + capMon; #还款总额
set varerestTotle=varerestTotle + varerestMon;#利息总额
set corpusTotle= corpusTotle + corpusMon;#本金总额
set hky = (select date_format(date_add(hky,interval 1 month), '%Y-%m-20'));
#select capMon, corpusMon, varerestMon;
#select corpusLeftMon, convert(capMon,decimal(18,2)), convert(varerestMon,decimal(18,2)), convert(corpusMon,decimal(18,2));
#select corpusLeftMon, capMon, varerestMon, corpusMon; set hky = (select date_format(date_add(hky,interval 1 month), '%Y-%m-20'));
#select capMon, corpusMon, varerestMon;
#select corpusLeftMon, convert(capMon,decimal(18,2)), convert(varerestMon,decimal(18,2)), convert(corpusMon,decimal(18,2));
#select corpusLeftMon, capMon, varerestMon, corpusMon; set re = (select count(1) from t0302 where f0003=khbh and F0006=date_format(hky, '%Y-%m-20'));
if re<=0 then
insert into t0302 (f0003, f0004, f0005, f0006, f0007, f0009, f0010, f0011, f0012, f0013)
values(khbh, khf0059, khf0067, date_format(hky, '%Y-%m-20'), convert(capMon,decimal(18,2)),
convert(corpusMon,decimal(18,2)), convert(varerestMon,decimal(18,2)), convert(varerestMon*cpf0029/cpf0028,decimal(18,2)),
convert(varerestMon*cpf0030/cpf0028,decimal(18,2)), convert(varerestMon*cpf0031/cpf0028,decimal(18,2)));
#ON DUPLICATE KEY UPDATE f0003=khbh and F0006=date_format(hky, '%Y-%m-20');
END IF;
end while; END$$
DELIMITER ; #select * from t0302;
#call `calc_equal_interest_proc`('C20170725002');
JavaScript代码如下:
function calculateR(rates,rateMon,corpus)//利率、期限、本金
{
var limitTime=rateMon;//贷款期限
var timeLeft=limitTime; var corpusLeft=corpus;//等额还款之本金
var corpusLeftMon=corpus;//等额还款之剩余本金 var capMon,corpusMon,varerestMon;
var capTotle=0,corpusTotle=0,varerestTotle=0; var sbResultR; var rate=rates/100/12; //sbResultR=createTable(sbResultR); for(var i=1;i<limitTime;i++)
{
var ratePow=Math.pow(rate+1,timeLeft);//每期贷款利率 capMon=(corpusLeft*rate*ratePow)/(ratePow -1);//月供
varerestMon=corpusLeftMon*rate;//月供利息
corpusMon=capMon-varerestMon;//月供本金 corpusLeftMon-=corpusMon;//本金余额
capTotle+=capMon;//还款总额
varerestTotle+=varerestMon;//利息总额
corpusTotle+=corpusMon;//本金总额 //sbResultR=output(sbResultR,i,capMon,varerestMon,corpusMon,corpusLeftMon,rate*12*100);
} ///最后一期
varerestMon=corpusLeftMon*rate;//月供利息
corpusMon=corpusLeftMon;//月供本金 capMon=varerestMon + corpusLeftMon;//月供
corpusLeftMon-=corpusMon;//本金余额
capTotle+=capMon;//还款总额
varerestTotle+=varerestMon;//利息总额
corpusTotle+=corpusMon;//本金总额 //sbResultR=output(sbResultR,limitTime,capMon,varerestMon,corpusMon,corpusLeftMon,rate*12*100); //sbResultR=output(sbResultR,9999,capTotle,varerestTotle,corpusTotle,corpusLeftMon,0);
//sbResultR=endTable(sbResultR);
//document.getElementById("res01_total").value = (Math.round(capTotle*100))/100;//还款总额
//document.getElementById("res01_ratetotal").value = (Math.round(varerestTotle*100))/100;//利息总额
//return sbResultR;
} calculateR(15, 15, 1000000);
写一个MySql存储过程实现房贷等额本息还款计算(另外附javascript代码)的更多相关文章
- 第一个MySQL 存储过程
昨天写了人生第一个mysql存储过程:遗憾的是,这个存储过程最后还是没用上,用php代码替代 话说mysql的存储过程真是反人类,不查reference,基本不能看懂那些语句:语言中能和它相比的,只有 ...
- MySql存储过程—2、第一个MySql存储过程的建立
看看如何创建一个存储过程.虽然通过命令行可以创建,但基本通过MySQL提供的Query browser来创建. 1.首先我们通过Administrator在test数据库中创建一个简单的表名叫”pro ...
- Python-编写一个mysql注入漏洞检测工具
判断mysql网站是否存在注入漏洞的几个方法: 注入点后加上一个单引号会报错 and 1=1返回正常页面,and 1=2返回的页面不同于正常页面 and sleep(3) 网页会等待3秒左右 根据返回 ...
- MySQL存储过程(转)
一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b" ...
- mysql存储过程之游标遍历数据表
原文:mysql存储过程之游标遍历数据表 今天写一个mysql存储过程,根据自己的需求要遍历一个数据表,因为对存储过程用的不多,语法不甚熟悉,加之存储过程没有调试环境,花了不少时间才慢慢弄好,故留个痕 ...
- mysql存储过程 基本语法
话不多说 一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b& ...
- mysql存储过程详解
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- mysql存储过程详细教程
记录mysql存储过程中的关键语法:DELIMITER // 声明语句结束符,用于区分;CREATE PROCEDURE demo_in_parameter(IN p_in int) 声明存储过程 ...
- Mysql存储过程总结
1. 关于MySQL的存储过程 存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.好在MySQL 5.0终于开始已经支持存储过 ...
随机推荐
- application.properties /application.yml官网查看配置;springboot application.properties 官网查看,info yml 查看;springboot.yml查看info;springboot.yml查看Actuator监控中心info
官网查看: https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#appendix 查看info ...
- Typecho 官方文档 接口介绍
官方开发文档实在是太潦草了 Widget_Archive 接口 参数 描述 indexHandle $archive Widget_Archive对象 $select Typecho_Db_Query ...
- 【王者荣耀之IT大神版】铭文说明
铭文共分五级: 一级:仅有老师提供的笔记 二级:添加了自己的听课笔记 三级:添加问题+解决方案(常遇到的问题以及自己实践上遇到的问题,排位赛遇到的遗忘点) 四级:熟记铭文与并添加联想学过的知识 五级: ...
- WEB上传大文件解决方案
众所皆知,web上传大文件,一直是一个痛.上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的. 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路.下面贴出简易 ...
- 属性动画和Activity、Fragment过渡动画等
主题是关于动画的,但是不是什么动画的内容都包括.先泛泛的介绍一下,然后详细的介绍一下翻代码找见的一个好玩的动画的使用.以下的内容包括Android 3和Android 3.1等引入的API,在使用中请 ...
- 基于SVG+AJAX的网页数据监控
这个是前一阵做的一个火灾报警主机数据网页监控,前后台主要耗时5小时.绘图2小时,配置后端采集端1小时,测试2小时. 用的SVG,上面画的指示灯可以实时显示传感器的状态. 用开源方案实现. 如果集成到自 ...
- 找不到UserDetails.java
真是一个奇葩的问题,dubbo接口 在controller中引用是可以正常的,但是放到service层中,就一直报找不到UserDetails.java,从路径看,看不出来是什么包里面的类 结果把路径 ...
- spring父子Ioc容器的关系
在网上找了一下,没有直接解说ioc父子容器关系的文章,所以大概看了下代码,自己写下吧,写俩行做个笔记. 1. 在进行dean的注册的时候,父容器和子容器是互不干扰的,各自注册自己的 2. 在实例化的时 ...
- Dinic算法——重述
赛前赛后算是第三次接触Dinic算法了,每一次接触都能有种很好的感觉,直男的我没法描述~~ 已经比较懂得DInic的基本算法思想了 首先是bfs进行进行分层处理,然后dfs寻找分层后的最大流, ...
- [置顶] 获取网络数据中的数组显示成ListView的简单流程
首先说一下 这是我自己的个人笔记,如果想看看,不用看细节,可以看流程. 定义一个线程池 ExecutorService pool = Executors.newFixedThreadPool(15) ...