package com.hongqiang.shop.modules.entity; import java.math.BigDecimal; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import javax.persistence.PreRemove; import javax.persistence.Table; import javax.persistence.Transient; //import javax.validation.constraints.Digits; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import org.hibernate.validator.constraints.Length; //支付实体类 @Entity @Table(name = "hq_payment") public class Payment extends BaseEntity { private static final long serialVersionUID = -5052430116564638634L; public static final String TYPE_SEPARATOR = "-"; private String sn;// 支付编号 private Type type;// 支付类型 private Status status;// 支付状态 private String paymentMethod;// 支付方式 private String bank;// 收款银行名称 private String account;// 收款银行账号 private BigDecimal fee;// 支付手续费 private BigDecimal amount;// 支付金额 private String payer;// 付款人 private String operator;// 操作员 private Date paymentDate;// 支付日期 private String memo;// 备注 private String paymentPluginId;// 支付配置id private Date expire;// 过期日期 private Deposit deposit;// 预存款 private Member member;// 会员 private Order order;// 订单 // 支付状态(等待支付、成功、失败) public enum Status { wait, success, failure; } // 支付类型(在线支付、线下支付、预存款支付) public enum Type { online, offline, deposit; } @Column(nullable = false, updatable = false, unique = true) public String getSn() { return this.sn; } public void setSn(String sn) { this.sn = sn; } @NotNull @Column(nullable = false, updatable = false) public Type getType() { return this.type; } public void setType(Type type) { this.type = type; } @Column(nullable = false) public Status getStatus() { return this.status; } public void setStatus(Status status) { this.status = status; } @Column(updatable = false) public String getPaymentMethod() { return this.paymentMethod; } public void setPaymentMethod(String paymentMethod) { this.paymentMethod = paymentMethod; } @Length(max = 200) public String getBank() { return this.bank; } public void setBank(String bank) { this.bank = bank; } @Length(max = 200) public String getAccount() { return this.account; } public void setAccount(String account) { this.account = account; } @Column(nullable = false, precision = 21, scale = 6) public BigDecimal getFee() { return this.fee; } public void setFee(BigDecimal fee) { this.fee = fee; } @NotNull @Min(0L) // @Digits(integer = 12, fraction = 3) @Column(nullable = false, precision = 21, scale = 6) public BigDecimal getAmount() { return this.amount; } public void setAmount(BigDecimal amount) { this.amount = amount; } @Length(max = 200) public String getPayer() { return this.payer; } public void setPayer(String payer) { this.payer = payer; } @Column(updatable = false) public String getOperator() { return this.operator; } public void setOperator(String operator) { this.operator = operator; } public Date getPaymentDate() { return this.paymentDate; } public void setPaymentDate(Date paymentDate) { this.paymentDate = paymentDate; } @Length(max = 200) public String getMemo() { return this.memo; } public void setMemo(String memo) { this.memo = memo; } @JoinColumn(updatable = false) public String getPaymentPluginId() { return this.paymentPluginId; } public void setPaymentPluginId(String paymentPluginId) { this.paymentPluginId = paymentPluginId; } @JoinColumn(updatable = false) public Date getExpire() { return this.expire; } public void setExpire(Date expire) { this.expire = expire; } @OneToOne(mappedBy = "payment", fetch = FetchType.LAZY) public Deposit getDeposit() { return this.deposit; } public void setDeposit(Deposit deposit) { this.deposit = deposit; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(updatable = false) public Member getMember() { return this.member; } public void setMember(Member member) { this.member = member; } @NotNull @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "orders", updatable = false) public Order getOrder() { return this.order; } public void setOrder(Order order) { this.order = order; } @Transient public boolean hasExpired() { return (getExpire() != null) && (new Date().after(getExpire())); } @PreRemove public void preRemove() { if (getDeposit() != null) getDeposit().setPayment(null); } }