diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TTransDtl.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TTransDtl.java
index 0f3c4c2..1bce8e6 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TTransDtl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TTransDtl.java
@@ -1,226 +1,263 @@
 package com.supwisdom.dlpay.restaurant.domain;
 
 import javax.persistence.*;
+import javax.validation.constraints.NotNull;
 
 @Entity
-@Table(name = "TB_TRANSDTL")
+@Table(name = "TB_TRANSDTL",
+    indexes = {@Index(name = "transdtl_accdate_idx", columnList = "accdate"),
+        @Index(name = "transdtl_transdate_idx", columnList = "transdate"),
+        @Index(name = "transdtl_status_idx", columnList = "status"),
+        @Index(name = "transdtl_coreaccdate_idx", columnList = "core_accdate, status")})
 public class TTransDtl {
 
-    private String billno;
-    private String custname;
-    private String custid;
-    private String cardno;
-    private Double amount;
-    private String transdate;
-    private String transtime;
-    private String accdate;
-    private String acctime;
-    private Integer termid;
-    private String status;
-    private Integer revflag;
-    private String transtype;
-    private Integer shopid;
-    private String attr1;
-    private String revbillno;
-    private String transmode;
-    private Integer custtype;
-    private Double managefee;
-    private String mealtype;
-    private Integer termsqlno;
+  private String billno;
+  private String custname;
+  private String custid;
+  private String cardno;
+  private Double amount;
+  private String transdate;
+  private String transtime;
+  private String accdate;
+  private String acctime;
+  private Integer termid;
+  private String status;
+  private Integer revflag;
+  private String transtype;
+  private Integer shopid;
+  private String attr1;
+  private String revbillno;
+  private String transmode;
+  private Integer custtype;
+  private Double managefee;
+  private String mealtype;
+  private Integer termsqlno;
+  private String refno;
+  private String coreAccdate;
+  private String coreStatus;
 
 
+  @Id
+  @Column(name = "billno", unique = true, nullable = false, length = 20)
+  public String getBillno() {
+    return billno;
+  }
 
-    @Id
-    @Column(name = "billno", unique = true, nullable = false, length = 20)
-    public String getBillno() {
-        return billno;
-    }
+  public void setBillno(String billno) {
+    this.billno = billno;
+  }
 
-    public void setBillno(String billno) {
-        this.billno = billno;
-    }
+  @Column(name = "custname", length = 30)
+  public String getCustname() {
+    return custname;
+  }
 
-    @Column(name = "custname",  length = 30)
-    public String getCustname() {
-        return custname;
-    }
+  public void setCustname(String custname) {
+    this.custname = custname;
+  }
 
-    public void setCustname(String custname) {
-        this.custname = custname;
-    }
+  @Column(name = "custid", length = 32)
+  public String getCustid() {
+    return custid;
+  }
 
-    @Column(name = "custid",  length = 32)
-    public String getCustid() {
-        return custid;
-    }
+  public void setCustid(String custid) {
+    this.custid = custid;
+  }
 
-    public void setCustid(String custid) {
-        this.custid = custid;
-    }
+  @Column(name = "cardno", length = 9)
+  public String getCardno() {
+    return cardno;
+  }
 
-    @Column(name = "cardno",  length = 9)
-    public String getCardno() {
-        return cardno;
-    }
+  public void setCardno(String cardno) {
+    this.cardno = cardno;
+  }
 
-    public void setCardno(String cardno) {
-        this.cardno = cardno;
-    }
+  @Column(name = "amount", precision = 15)
+  @NotNull
+  public Double getAmount() {
+    return amount;
+  }
 
-    @Column(name = "amount",   precision = 15)
-    public Double getAmount() {
-        return amount;
-    }
+  public void setAmount(Double amount) {
+    this.amount = amount;
+  }
 
-    public void setAmount(Double amount) {
-        this.amount = amount;
-    }
+  @Column(name = "transdate", length = 8)
+  @NotNull
+  public String getTransdate() {
+    return transdate;
+  }
 
-    @Column(name = "transdate",  length = 8)
-    public String getTransdate() {
-        return transdate;
-    }
+  public void setTransdate(String transdate) {
+    this.transdate = transdate;
+  }
 
-    public void setTransdate(String transdate) {
-        this.transdate = transdate;
-    }
+  @Column(name = "transtime", length = 6)
+  @NotNull
+  public String getTranstime() {
+    return transtime;
+  }
 
-    @Column(name = "transtime",  length = 6)
-    public String getTranstime() {
-        return transtime;
-    }
+  public void setTranstime(String transtime) {
+    this.transtime = transtime;
+  }
 
-    public void setTranstime(String transtime) {
-        this.transtime = transtime;
-    }
+  @Column(name = "accdate", length = 8)
+  public String getAccdate() {
+    return accdate;
+  }
 
-    @Column(name = "accdate",  length = 8)
-    public String getAccdate() {
-        return accdate;
-    }
+  public void setAccdate(String accdate) {
+    this.accdate = accdate;
+  }
 
-    public void setAccdate(String accdate) {
-        this.accdate = accdate;
-    }
+  @Column(name = "acctime", length = 6)
+  public String getAcctime() {
+    return acctime;
+  }
 
-    @Column(name = "acctime",  length = 6)
-    public String getAcctime() {
-        return acctime;
-    }
+  public void setAcctime(String acctime) {
+    this.acctime = acctime;
+  }
 
-    public void setAcctime(String acctime) {
-        this.acctime = acctime;
-    }
+  @Column(name = "termid", length = 9)
+  public Integer getTermid() {
+    return termid;
+  }
 
-    @Column(name = "termid",  length = 9)
-    public Integer getTermid() {
-        return termid;
-    }
+  public void setTermid(Integer termid) {
+    this.termid = termid;
+  }
 
-    public void setTermid(Integer termid) {
-        this.termid = termid;
-    }
+  @Column(name = "status", length = 10)
+  public String getStatus() {
+    return status;
+  }
 
-    @Column(name = "status",  length = 10)
-    public String getStatus() {
-        return status;
-    }
+  public void setStatus(String status) {
+    this.status = status;
+  }
 
-    public void setStatus(String status) {
-        this.status = status;
-    }
+  @Column(name = "revflag", length = 1)
+  public Integer getRevflag() {
+    return revflag;
+  }
 
-    @Column(name = "revflag",  length = 1)
-    public Integer getRevflag() {
-        return revflag;
-    }
+  public void setRevflag(Integer revflag) {
+    this.revflag = revflag;
+  }
 
-    public void setRevflag(Integer revflag) {
-        this.revflag = revflag;
-    }
+  @Column(name = "transtype", length = 10)
+  public String getTranstype() {
+    return transtype;
+  }
 
-    @Column(name = "transtype",  length = 10)
-    public String getTranstype() {
-        return transtype;
-    }
-
-    public void setTranstype(String transtype) {
-        this.transtype = transtype;
-    }
+  public void setTranstype(String transtype) {
+    this.transtype = transtype;
+  }
 
 
-    @Column(name = "shopid",  length = 9)
-    public Integer getShopid() {
-        return shopid;
-    }
+  @Column(name = "shopid", length = 9)
+  public Integer getShopid() {
+    return shopid;
+  }
 
-    public void setShopid(Integer shopid) {
-        this.shopid = shopid;
-    }
+  public void setShopid(Integer shopid) {
+    this.shopid = shopid;
+  }
 
 
-    @Column(name = "attr1",  length = 200)
-    public String getAttr1() {
-        return attr1;
-    }
+  @Column(name = "attr1", length = 200)
+  public String getAttr1() {
+    return attr1;
+  }
 
-    public void setAttr1(String attr1) {
-        this.attr1 = attr1;
-    }
+  public void setAttr1(String attr1) {
+    this.attr1 = attr1;
+  }
 
-    @Column(name = "revbillno",  length = 20)
-    public String getRevbillno() {
-        return revbillno;
-    }
+  @Column(name = "revbillno", length = 20)
+  public String getRevbillno() {
+    return revbillno;
+  }
 
-    public void setRevbillno(String revbillno) {
-        this.revbillno = revbillno;
-    }
+  public void setRevbillno(String revbillno) {
+    this.revbillno = revbillno;
+  }
 
 
-    @Column(name = "transmode",  length = 10)
-    public String getTransmode() {
-        return transmode;
-    }
+  @Column(name = "transmode", length = 10)
+  public String getTransmode() {
+    return transmode;
+  }
 
-    public void setTransmode(String transmode) {
-        this.transmode = transmode;
-    }
+  public void setTransmode(String transmode) {
+    this.transmode = transmode;
+  }
 
-    @Column(name="custtype",length = 1)
-    public Integer getCusttype() {
-        return custtype;
-    }
+  @Column(name = "custtype", length = 1)
+  public Integer getCusttype() {
+    return custtype;
+  }
 
-    public void setCusttype(Integer custtype) {
-        this.custtype = custtype;
-    }
+  public void setCusttype(Integer custtype) {
+    this.custtype = custtype;
+  }
 
-    @Column(name="mealtype",length = 10)
-    public String getMealtype() {
-        return mealtype;
-    }
+  @Column(name = "mealtype", length = 10)
+  public String getMealtype() {
+    return mealtype;
+  }
 
-    public void setMealtype(String mealtype) {
-        this.mealtype = mealtype;
-    }
+  public void setMealtype(String mealtype) {
+    this.mealtype = mealtype;
+  }
 
-    @Column(name="termsqlno",length = 9)
-    public Integer getTermsqlno() {
-        return termsqlno;
-    }
+  @Column(name = "termsqlno", length = 9)
+  public Integer getTermsqlno() {
+    return termsqlno;
+  }
 
-    public void setTermsqlno(Integer termsqlno) {
-        this.termsqlno = termsqlno;
-    }
+  public void setTermsqlno(Integer termsqlno) {
+    this.termsqlno = termsqlno;
+  }
 
 
-    @Column(name = "managefee",   precision = 15)
-    public Double getManagefee() {
-        return managefee;
-    }
+  @Column(name = "managefee", precision = 15)
+  public Double getManagefee() {
+    return managefee;
+  }
 
-    public void setManagefee(Double managefee) {
-        this.managefee = managefee;
-    }
+  public void setManagefee(Double managefee) {
+    this.managefee = managefee;
+  }
+
+  @Column(name = "refno", length = 32)
+  public String getRefno() {
+    return refno;
+  }
+
+  public void setRefno(String refno) {
+    this.refno = refno;
+  }
+
+  @Column(name = "core_accdate", length = 8)
+  public String getCoreAccdate() {
+    return coreAccdate;
+  }
+
+  public void setCoreAccdate(String coreAccdate) {
+    this.coreAccdate = coreAccdate;
+  }
+
+  @Column(name = "core_status", length = 20)
+  public String getCoreStatus() {
+    return coreStatus;
+  }
+
+  public void setCoreStatus(String coreStatus) {
+    this.coreStatus = coreStatus;
+  }
 }
