package cn.newgxu.bbs.domain.bank;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import cn.newgxu.bbs.common.util.Util;
import cn.newgxu.bbs.domain.user.User;
import cn.newgxu.jpamodel.JPAEntity;
import cn.newgxu.jpamodel.ObjectNotFoundException;
/**
* BankLoan generated by MyEclipse - Hibernate Tools
*/
@Entity
@Table(name = "bank_loan")
public class Loan extends JPAEntity {
private static final long serialVersionUID = 6629127999544345160L;
@Id
@Column(name = "id")
// @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="id_seq")
// @SequenceGenerator(name="id_seq", sequenceName="seq_bank_operate_log")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id = -1;
@ManyToOne(cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
private int money;
private int days;
private byte status;
@Column(name = "loan_rate", precision = 4)
private float loanRate;
@Column(name = "apply_time")
private Date applyTime;
@Column(name = "begin_time")
private Date beginTime;
@Column(name = "repay_time")
private Date repayTime;
// Property accessors
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public int getMoney() {
return this.money;
}
public void setMoney(int money) {
this.money = money;
}
public Date getApplyTime() {
return this.applyTime;
}
public void setApplyTime(Date applyTime) {
this.applyTime = applyTime;
}
public Date getBeginTime() {
return this.beginTime;
}
public void setBeginTime(Date beginTime) {
this.beginTime = beginTime;
}
public int getDays() {
return this.days;
}
public void setDays(int days) {
this.days = days;
}
public float getLoanRate() {
return this.loanRate;
}
public void setLoanRate(float loanRate) {
this.loanRate = loanRate;
}
public byte getStatus() {
return status;
}
public void setStatus(byte status) {
this.status = status;
}
public void setStatus(Byte status) {
this.status = status;
}
public Date getRepayTime() {
return this.repayTime;
}
public void setRepayTime(Date repayTime) {
this.repayTime = repayTime;
}
// Constructors
public static Loan get(int id) throws ObjectNotFoundException {
return (Loan) getById(Loan.class, id);
}
@SuppressWarnings("unchecked")
public static List<Loan> getByUser(User user, Byte status) {
return (List<Loan>) Q("from Loan n where n.user = ?1 and n.status = ?2",
P(1, user), P(2, status)).getResultList();
}
@SuppressWarnings("unchecked")
public static List<Loan> getApplyLoans(Byte status) {
return (List<Loan>) Q("from Loan n where n.status = ?1",
P(1, status)).getResultList();
}
public Date getEndTime() {
return Util.getDateAfterDay(this.beginTime, this.days);
}
public int getAccrual() {
int distance = Util.days(this.beginTime, new Date());
if ( distance > this.days) {
return (int)(this.money * this.loanRate * this.days +
2 * this.money * this.loanRate * (distance - this.days));
}
return (int)(this.money * this.loanRate * distance);
}
// ------------------------------------------------
@SuppressWarnings("serial")
@Override
public String toString() {
return "Loan" + new LinkedHashMap<String, Object>() {
{
put("id", id);
put("user", user);
put("money", money);
put("days", days);
put("loanRate", loanRate);
put("applyTime", applyTime);
put("beginTime", beginTime);
put("loanRate", loanRate);
put("repayTime", repayTime);
}
}.toString();
}
}