发表于: 2017-10-02 22:10:59
1 853
一.今天完成的主要事情
1.编写一个小demo,用于计算平台给用户还利息的时间和利息数额,代码如下(代码还没有重构,结构非常乱,在项目中运用时会进一步重构)
package com.putaoteng.demo.utils;
import com.putaoteng.demo.model.RepaymentList;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class RepaymentCalender {
public static List<Long> getRepaymentPlan(long startTime, int days) {
List<Long> list = new ArrayList<Long>();
long endTime = startTime + days * 1000 * 3600 * 24L;
//将初始时间戳转换为格式化时间
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
String formatStartDate = simpleDateFormat.format(new Date(startTime));
String formatEndDate = simpleDateFormat.format(new Date(endTime));
System.out.println("起息格式化时间为: formatStartDate=" + formatStartDate);
System.out.println("到期格式化时间为: formatEndDate=" + formatEndDate);
//将格式化时间转化为整形数字,方便计算
Integer startDateNumber = Integer.valueOf(formatStartDate);
long repaymentTime = startTime;
Date date = null;
list.add(startTime);
while (true) {
//月份加1后再转换为字符串,如果有0230,0231这种特例,将其转换为0301
startDateNumber += 100;
String newFormatDate = startDateNumber.toString();
String tempStr = newFormatDate.substring(4);
if (tempStr.equals("0230") || tempStr.equals("0231")) {
newFormatDate = newFormatDate.substring(0, 4) + "0301";
}
try {
date = simpleDateFormat.parse(newFormatDate);
repaymentTime = date.getTime();
if (repaymentTime < endTime) {
System.out.println(simpleDateFormat.format(date));
list.add(repaymentTime);
} else {
list.add(endTime);
System.out.println(formatEndDate);
break;
}
} catch (ParseException e) {
System.out.println(e.getMessage());
}
}
return list;
}
public static void main(String[] args) {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
Date date = null;
try {
date = format.parse("20170819");
} catch (ParseException e) {
e.printStackTrace();
}
List<Long> list = getRepaymentPlan(date.getTime(), 360);
List<Integer> list2 = new ArrayList<Integer>();
List<RepaymentList> list3 = new ArrayList<RepaymentList>();
double principal = 10000.0000;
double rate = 0.0960;
long end = 0;
long start = 0;
double days = 0;
for (int i = 1; i < list.size(); i++) {
RepaymentList repaymentList = new RepaymentList();
end = list.get(i);
start = list.get(i - 1);
days = (end - start) / 1000 / 3600 / 24;
repaymentList.setDays(days);
repaymentList.setDate(end);
repaymentList.setAmount(BigDecimal.valueOf(principal*rate/360*days));
System.out.println(i + ":" + days);
list3.add(repaymentList);
}
for (RepaymentList repaymentList : list3) {
System.out.println(repaymentList.getDate());
System.out.printf("%.4f\n",repaymentList.getAmount());
System.out.printf("%.4f\n", repaymentList.getDays());
}
}}
输出的结果为:
第一列为还款日期转换的时间戳,第二列为要还的金额,第三列为本次计息的天数
2.针对存在的问题,对表进行重构,编写部分sql
表名(begin) | |||
product | |||
表名(end) | |||
表字段(begin) | |||
COLUMN | JAVA FIELD | TYPE | JAVA FIELD TYPE |
id | id | bigint | Long |
product_serial_number | productSerialNumber | varchar(15) | String |
product_name | productName | varchar(30) | String |
annual_yield | annualYield | decimal(14,6) | BigDecimal |
payment_back_way | paymentBackWay | int(2) | int |
basic_capital_amount | basicCapitalAmount | decimal(14,6) | BigDecimal |
charging_interest_way | chargingInterestWay | int(2) | int |
financial_period | financialPeriod | int(5) | int |
comment | comment | varchar(51) | String |
detail_img_url | detailImgUrl | varchar(500) | String |
flag | flag | int(2) | int |
recommended | recommended | int(2) | int |
order_by | orderBy | int(2) | int |
limited | limited | int(2) | int |
status | status | int(2) | int |
limited_capital_amount | limitedCapitalAmount | decimal(14,6) | BigDecimal |
create_by | createBy | bigint | Long |
update_by | updateBy | bigint | Long |
update_at | updateAt | bigint | Long |
create_at | createAt | bigint | Long |
表字段(end) | |||
索引: | |||
索引(begin) | |||
UNI_TAG_STR(tag_str) | |||
索引(end) | |||
SQL文(begin) | |||
SQL 文 | DAL TYPE (map or list) | ||
select * from product where id=? | Object | ||
select product_serial_number, product_name, annual_yield, payment_back_way,charging_interest_way,financial_period from product where id=? | Object | ||
select product_serial_number, product_name, annual_yield from product where id=? | Object | ||
select id from product where recommended=1 and order by order_by desc | Map | ||
select id from prooduct where order by order_by desc,update_at desc | Map |
二.明天计划完成的主要事情
1.继续编写sql语句
2.思考如何解决user_product表高并发情况下读和写的问题
三.遇到的问题
对于要写在excel表中的sql语句没有清晰的概念,不知道什么样的sql可以写,什么样的sql不能写
四.收获
以上
五.项目进度情况
有延期风险
评论