diff --git a/src/main/java/com/supwisdom/dlpay/consume/dao/DebitCreditDtlDao.java b/src/main/java/com/supwisdom/dlpay/consume/dao/DebitCreditDtlDao.java
new file mode 100644
index 0000000..d841c70
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/consume/dao/DebitCreditDtlDao.java
@@ -0,0 +1,21 @@
+package com.supwisdom.dlpay.consume.dao;
+
+import com.supwisdom.dlpay.consume.domain.TDebitCreditDtl;
+import com.supwisdom.dlpay.consume.domain.TDebitCreditDtlPK;
+import com.supwisdom.dlpay.framework.data.VoucherTemp;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+@Repository
+public interface DebitCreditDtlDao extends JpaRepository<TDebitCreditDtl, TDebitCreditDtlPK> {
+
+  @Query(value = "select a.drsubjno,a.draccno,a.crsubjno,a.craccno,a.summary,count(*) as transcnt,sum(amount) as transamt " +
+      "from TB_USERDTL_DEBITCREDIT a left join TB_USERDTL b on a.refno=b.refno " +
+      "where b.status='success' and b.accdate=:settledate " +
+      "group by a.drsubjno,a.draccno,a.crsubjno,a.craccno,a.summary ", nativeQuery = true)
+  List<VoucherTemp> getVoucherData(@RequestParam("settledate") String settledate);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/consume/dao/DpsdtlDao.java b/src/main/java/com/supwisdom/dlpay/consume/dao/DpsdtlDao.java
index 0f59ce8..3b16338 100644
--- a/src/main/java/com/supwisdom/dlpay/consume/dao/DpsdtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/consume/dao/DpsdtlDao.java
@@ -12,15 +12,15 @@
 @Repository
 public interface DpsdtlDao extends JpaRepository<TDpsdtl, String> {
 
-  @Query(value = "select a.drsubjno,a.crsubjno,a.summary,count(t.refno) as transcnt,sum(t.dpsamt) as transamt " +
-      "from tb_dpsdtl t left join tb_transtype a on t.transtype=a.transtype " +
-      "where t.status='success' and t.accdate=:settledate " +
-      "group by a.drsubjno,a.crsubjno,a.summary ", nativeQuery = true)
-  List<VoucherTemp> getVoucherData(@RequestParam("settledate") String settledate);
-
-  @Query(value = "select a.drsubjno,a.crsubjno,a.summary,count(t.refno) as transcnt,sum(t.feeamt) as transamt " +
-      "from tb_dpsdtl t left join tb_feetype_config a on t.feetype=a.feetype and t.paytype=a.paytype " +
-      "where t.status='success' and t.feetype!='none' and t.accdate=:settledate " +
-      "group by a.drsubjno,a.crsubjno,a.summary ", nativeQuery = true)
-  List<VoucherTemp> getFeeVoucherData(@RequestParam("settledate") String settledate);
+//  @Query(value = "select a.drsubjno,a.crsubjno,a.summary,count(t.refno) as transcnt,sum(t.dpsamt) as transamt " +
+//      "from tb_dpsdtl t left join tb_transtype a on t.transtype=a.transtype " +
+//      "where t.status='success' and t.accdate=:settledate " +
+//      "group by a.drsubjno,a.crsubjno,a.summary ", nativeQuery = true)
+//  List<VoucherTemp> getVoucherData(@RequestParam("settledate") String settledate);
+//
+//  @Query(value = "select a.drsubjno,a.crsubjno,a.summary,count(t.refno) as transcnt,sum(t.feeamt) as transamt " +
+//      "from tb_dpsdtl t left join tb_feetype_config a on t.feetype=a.feetype and t.paytype=a.paytype " +
+//      "where t.status='success' and t.feetype!='none' and t.accdate=:settledate " +
+//      "group by a.drsubjno,a.crsubjno,a.summary ", nativeQuery = true)
+//  List<VoucherTemp> getFeeVoucherData(@RequestParam("settledate") String settledate);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/consume/dao/TransdtlDao.java b/src/main/java/com/supwisdom/dlpay/consume/dao/TransdtlDao.java
index ff74e33..a49de57 100644
--- a/src/main/java/com/supwisdom/dlpay/consume/dao/TransdtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/consume/dao/TransdtlDao.java
@@ -11,17 +11,17 @@
 
 @Repository
 public interface TransdtlDao extends JpaRepository<TTransdtl, String> {
-  @Query(value="select a.drsubjno,a.crsubjno,a.summary,t.shopaccno,count(t.refno) as transcnt,sum(t.paidamt) as transamt " +
-      "from tb_transdtl t left join tb_transtype a on t.transtype=a.transtype " +
-      "where t.status='success' and t.accdate=:settledate " +
-      "group by a.drsubjno,a.crsubjno,a.summary,t.shopaccno ", nativeQuery = true)
-  List<VoucherTemp> getVouhcerData(@RequestParam("settledate") String settledate);
-
-  @Query(value="select a.drsubjno,a.crsubjno,a.summary,t.shopaccno,count(t.refno) as transcnt,sum(t.feeamt) as transamt " +
-      "from tb_transdtl t left join tb_feetype_config a on t.feetype=a.feetype and t.paytype=a.paytype " +
-      "where t.status='success' and t.feetype!='none' and t.accdate=:settledate " +
-      "group by a.drsubjno,a.crsubjno,a.summary,t.shopaccno ", nativeQuery = true)
-  List<VoucherTemp> getFeeVoucherData(@RequestParam("settledate") String settledate);
+//  @Query(value="select a.drsubjno,a.crsubjno,a.summary,t.shopaccno,count(t.refno) as transcnt,sum(t.paidamt) as transamt " +
+//      "from tb_transdtl t left join tb_transtype a on t.transtype=a.transtype " +
+//      "where t.status='success' and t.accdate=:settledate " +
+//      "group by a.drsubjno,a.crsubjno,a.summary,t.shopaccno ", nativeQuery = true)
+//  List<VoucherTemp> getVouhcerData(@RequestParam("settledate") String settledate);
+//
+//  @Query(value="select a.drsubjno,a.crsubjno,a.summary,t.shopaccno,count(t.refno) as transcnt,sum(t.feeamt) as transamt " +
+//      "from tb_transdtl t left join tb_feetype_config a on t.feetype=a.feetype and t.paytype=a.paytype " +
+//      "where t.status='success' and t.feetype!='none' and t.accdate=:settledate " +
+//      "group by a.drsubjno,a.crsubjno,a.summary,t.shopaccno ", nativeQuery = true)
+//  List<VoucherTemp> getFeeVoucherData(@RequestParam("settledate") String settledate);
 
   TTransdtl getByOuttradenoAndStatus(String outtradeno,String status);
 
diff --git a/src/main/java/com/supwisdom/dlpay/consume/dao/UserdtlDao.java b/src/main/java/com/supwisdom/dlpay/consume/dao/UserdtlDao.java
new file mode 100644
index 0000000..20cd807
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/consume/dao/UserdtlDao.java
@@ -0,0 +1,9 @@
+package com.supwisdom.dlpay.consume.dao;
+
+import com.supwisdom.dlpay.consume.domain.TUserdtl;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface UserdtlDao extends JpaRepository<TUserdtl, String> {
+}
diff --git a/src/main/java/com/supwisdom/dlpay/consume/domain/TDebitCreditDtl.java b/src/main/java/com/supwisdom/dlpay/consume/domain/TDebitCreditDtl.java
new file mode 100644
index 0000000..148dd58
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/consume/domain/TDebitCreditDtl.java
@@ -0,0 +1,100 @@
+package com.supwisdom.dlpay.consume.domain;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_USERDTL_DEBITCREDIT")
+@IdClass(TDebitCreditDtlPK.class)
+public class TDebitCreditDtl {
+
+  @Id
+  @Column(name = "REFNO", nullable = false, length = 32)
+  private String refno;
+
+  @Id
+  @Column(name = "SEQNO", nullable = false, precision = 1)
+  private Integer seqno;
+
+  @Column(name = "DRSUBJNO", length = 10)
+  private String drsubjno; //借方科目
+
+  @Column(name = "DRACCNO", length = 32)
+  private String draccno;  //借方账号
+
+  @Column(name = "AMOUNT", precision = 9, scale = 2)
+  private Double amount; //金额
+
+  @Column(name = "CRSUBJNO", length = 10)
+  private String crsubjno; //贷方科目
+
+  @Column(name = "CRACCNO", length = 32)
+  private String craccno;  //贷方账号
+
+  @Column(name = "SUMMARY", length = 240)
+  private String summary;  //摘要
+
+
+  public String getRefno() {
+    return refno;
+  }
+
+  public void setRefno(String refno) {
+    this.refno = refno;
+  }
+
+  public Integer getSeqno() {
+    return seqno;
+  }
+
+  public void setSeqno(Integer seqno) {
+    this.seqno = seqno;
+  }
+
+  public String getDrsubjno() {
+    return drsubjno;
+  }
+
+  public void setDrsubjno(String drsubjno) {
+    this.drsubjno = drsubjno;
+  }
+
+  public String getDraccno() {
+    return draccno;
+  }
+
+  public void setDraccno(String draccno) {
+    this.draccno = draccno;
+  }
+
+  public Double getAmount() {
+    return amount;
+  }
+
+  public void setAmount(Double amount) {
+    this.amount = amount;
+  }
+
+  public String getCrsubjno() {
+    return crsubjno;
+  }
+
+  public void setCrsubjno(String crsubjno) {
+    this.crsubjno = crsubjno;
+  }
+
+  public String getCraccno() {
+    return craccno;
+  }
+
+  public void setCraccno(String craccno) {
+    this.craccno = craccno;
+  }
+
+  public String getSummary() {
+    return summary;
+  }
+
+  public void setSummary(String summary) {
+    this.summary = summary;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/consume/domain/TDebitCreditDtlPK.java b/src/main/java/com/supwisdom/dlpay/consume/domain/TDebitCreditDtlPK.java
new file mode 100644
index 0000000..02e15e9
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/consume/domain/TDebitCreditDtlPK.java
@@ -0,0 +1,50 @@
+package com.supwisdom.dlpay.consume.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+
+public class TDebitCreditDtlPK {
+  @Id
+  @Column(name = "REFNO", nullable = false, length = 32)
+  private String refno;
+
+  @Id
+  @Column(name = "SEQNO", nullable = false, precision = 1)
+  private Integer seqno;
+
+  public String getRefno() {
+    return refno;
+  }
+
+  public void setRefno(String refno) {
+    this.refno = refno;
+  }
+
+  public Integer getSeqno() {
+    return seqno;
+  }
+
+  public void setSeqno(Integer seqno) {
+    this.seqno = seqno;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    TDebitCreditDtlPK tDebitCreditDtlPK = (TDebitCreditDtlPK) o;
+    if (refno != null ? !refno.equals(tDebitCreditDtlPK.getRefno()) : refno != null)
+      return false;
+    if (seqno != null ? !seqno.equals(tDebitCreditDtlPK.getSeqno()) : seqno != null)
+      return false;
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int result = refno != null ? refno.hashCode() : 0;
+    result = 31 * result + (seqno != null ? seqno.hashCode() : 0);
+    return result;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/consume/domain/TUserdtl.java b/src/main/java/com/supwisdom/dlpay/consume/domain/TUserdtl.java
new file mode 100644
index 0000000..4b59d98
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/consume/domain/TUserdtl.java
@@ -0,0 +1,242 @@
+package com.supwisdom.dlpay.consume.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "TB_USERDTL")
+public class TUserdtl {
+  @Id
+  @Column(name = "REFNO", nullable = false, length = 32)
+  private String refno; //流水号
+
+  @Column(name = "ACCDATE", length = 8)
+  private String accdate; //记账日期
+
+  @Column(name = "USERID", length = 32)
+  private String userid;  //用户ID，或账号
+
+  @Column(name = "TRANSDATE", length = 8)
+  private String transdate;
+
+  @Column(name = "TRANSTIME", length = 6)
+  private String transtime;
+
+  @Column(name = "STATUS", length = 20)
+  private String status;
+
+  @Column(name = "BEFBAL", precision = 9, scale = 2)
+  private Double befbal;
+
+  @Column(name = "AMOUNT", precision = 9, scale = 2)
+  private Double amount;
+
+  @Column(name = "AFTBAL", precision = 9, scale = 2)
+  private Double aftbal;
+
+  @Column(name = "PAYTYPE", length = 20)
+  private String paytype; //支付方式 balance,wechat,alipay
+
+  @Column(name = "PAYINFO", length = 200)
+  private String payinfo; //记录支付信息备用字段
+
+  @Column(name = "TRANSCODE", precision = 4)
+  private Integer transcode;
+
+  @Column(name = "TRANSDESC", length = 240)
+  private String transdesc; //交易描述
+
+  @Column(name = "OUTTRADENO", length = 60)
+  private String outtradeno; //第三方流水号
+
+  @Column(name = "OPERID", precision = 9)
+  private Integer operid; //操作员ID
+
+  @Column(name = "REVERSE_FLAG", nullable = false, precision = 1)
+  private String reverseFlag = "none"; //none, cancel, reversed
+
+  @Column(name = "REVERSE_AMOUNT", precision = 9, scale = 2)
+  private Double reverseAmount = 0D; //撤销金额填写
+
+  @Column(name = "TRADEFLAG", nullable = false, precision = 1)
+  private Integer tradeflag; //1-充值；2-消费
+
+  @Column(name = "REMARK", length = 240)
+  private String remark;
+
+  @Column(name = "CREATETIME", length = 14)
+  private String createtime;  //创建时间
+
+  @Column(name = "ENDTIME", length = 14)
+  private String endtime;  //支付结束时间
+
+  public String getRefno() {
+    return refno;
+  }
+
+  public void setRefno(String refno) {
+    this.refno = refno;
+  }
+
+  public String getAccdate() {
+    return accdate;
+  }
+
+  public void setAccdate(String accdate) {
+    this.accdate = accdate;
+  }
+
+  public String getUserid() {
+    return userid;
+  }
+
+  public void setUserid(String userid) {
+    this.userid = userid;
+  }
+
+  public String getTransdate() {
+    return transdate;
+  }
+
+  public void setTransdate(String transdate) {
+    this.transdate = transdate;
+  }
+
+  public String getTranstime() {
+    return transtime;
+  }
+
+  public void setTranstime(String transtime) {
+    this.transtime = transtime;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public Double getBefbal() {
+    return befbal;
+  }
+
+  public void setBefbal(Double befbal) {
+    this.befbal = befbal;
+  }
+
+  public Double getAmount() {
+    return amount;
+  }
+
+  public void setAmount(Double amount) {
+    this.amount = amount;
+  }
+
+  public Double getAftbal() {
+    return aftbal;
+  }
+
+  public void setAftbal(Double aftbal) {
+    this.aftbal = aftbal;
+  }
+
+  public String getPaytype() {
+    return paytype;
+  }
+
+  public void setPaytype(String paytype) {
+    this.paytype = paytype;
+  }
+
+  public String getPayinfo() {
+    return payinfo;
+  }
+
+  public void setPayinfo(String payinfo) {
+    this.payinfo = payinfo;
+  }
+
+  public Integer getTranscode() {
+    return transcode;
+  }
+
+  public void setTranscode(Integer transcode) {
+    this.transcode = transcode;
+  }
+
+  public String getTransdesc() {
+    return transdesc;
+  }
+
+  public void setTransdesc(String transdesc) {
+    this.transdesc = transdesc;
+  }
+
+  public String getOuttradeno() {
+    return outtradeno;
+  }
+
+  public void setOuttradeno(String outtradeno) {
+    this.outtradeno = outtradeno;
+  }
+
+  public Integer getOperid() {
+    return operid;
+  }
+
+  public void setOperid(Integer operid) {
+    this.operid = operid;
+  }
+
+  public String getReverseFlag() {
+    return reverseFlag;
+  }
+
+  public void setReverseFlag(String reverseFlag) {
+    this.reverseFlag = reverseFlag;
+  }
+
+  public Double getReverseAmount() {
+    return reverseAmount;
+  }
+
+  public void setReverseAmount(Double reverseAmount) {
+    this.reverseAmount = reverseAmount;
+  }
+
+  public Integer getTradeflag() {
+    return tradeflag;
+  }
+
+  public void setTradeflag(Integer tradeflag) {
+    this.tradeflag = tradeflag;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
+
+  public String getCreatetime() {
+    return createtime;
+  }
+
+  public void setCreatetime(String createtime) {
+    this.createtime = createtime;
+  }
+
+  public String getEndtime() {
+    return endtime;
+  }
+
+  public void setEndtime(String endtime) {
+    this.endtime = endtime;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/data/VoucherTemp.java b/src/main/java/com/supwisdom/dlpay/framework/data/VoucherTemp.java
index 8454059..ee4e4d4 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/data/VoucherTemp.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/data/VoucherTemp.java
@@ -3,11 +3,13 @@
 public interface VoucherTemp {
   String getDrsubjno();
 
+  String getDraccno();
+
   String getCrsubjno();
 
-  String getSummary();
+  String getCraccno();
 
-  String getShopaccno();
+  String getSummary();
 
   Integer getTranscnt();
 
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java b/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
index 1129259..c4c2d09 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.framework.service.impl;
 
+import com.supwisdom.dlpay.consume.dao.DebitCreditDtlDao;
 import com.supwisdom.dlpay.consume.dao.DpsdtlDao;
 import com.supwisdom.dlpay.consume.dao.TransdtlDao;
 import com.supwisdom.dlpay.framework.dao.*;
@@ -51,6 +52,8 @@
   private ShopaccdayDao shopaccdayDao;
   @Autowired
   private SubjectdayDao subjectdayDao;
+  @Autowired
+  private DebitCreditDtlDao debitCreditDtlDao;
 
 
   private static final Logger logger = Logger.getLogger(DayendSettleServiceImpl.class);
@@ -123,11 +126,11 @@
     TVoucherEntry entry1;
     TVoucherEntry entry2;
     if (voucherTemp.getTransamt() >= 0) {
-      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), null, Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getShopaccno());
-      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getShopaccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getDrsubjno(), null);
+      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno());
+      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno());
     } else {
-      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getCrsubjno(), voucherTemp.getShopaccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getDrsubjno(), null);
-      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getDrsubjno(), null, Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getShopaccno());
+      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno());
+      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno());
     }
     voucherEntryDao.save(entry1);
     voucherEntryDao.save(entry2);
@@ -192,32 +195,40 @@
     }
 
     //充值凭证
-    List<VoucherTemp> dpsList = dpsdtlDao.getVoucherData(String.valueOf(settledate));
-    if (!StringUtil.isEmpty(dpsList)) {
-      for (VoucherTemp dps : dpsList) {
-        saveVoucher(dps);
-      }
-    }
+//    List<VoucherTemp> dpsList = dpsdtlDao.getVoucherData(String.valueOf(settledate));
+//    if (!StringUtil.isEmpty(dpsList)) {
+//      for (VoucherTemp dps : dpsList) {
+//        saveVoucher(dps);
+//      }
+//    }
+//
+//    List<VoucherTemp> dpsfeeList = dpsdtlDao.getFeeVoucherData(String.valueOf(settledate));
+//    if (!StringUtil.isEmpty(dpsfeeList)) {
+//      for (VoucherTemp dpsfee : dpsfeeList) {
+//        saveVoucher(dpsfee);
+//      }
+//    }
+//
+//    //消费凭证
+//    List<VoucherTemp> payList = transdtlDao.getFeeVoucherData(String.valueOf(settledate));
+//    if (!StringUtil.isEmpty(payList)) {
+//      for (VoucherTemp pay : payList) {
+//        saveVoucher(pay);
+//      }
+//    }
+//
+//    List<VoucherTemp> payfeeList = transdtlDao.getFeeVoucherData(String.valueOf(settledate));
+//    if (!StringUtil.isEmpty(payfeeList)) {
+//      for (VoucherTemp payfee : payfeeList) {
+//        saveVoucher(payfee);
+//      }
+//    }
 
-    List<VoucherTemp> dpsfeeList = dpsdtlDao.getFeeVoucherData(String.valueOf(settledate));
-    if (!StringUtil.isEmpty(dpsfeeList)) {
-      for (VoucherTemp dpsfee : dpsfeeList) {
-        saveVoucher(dpsfee);
-      }
-    }
-
-    //消费凭证
-    List<VoucherTemp> payList = transdtlDao.getFeeVoucherData(String.valueOf(settledate));
-    if (!StringUtil.isEmpty(payList)) {
-      for (VoucherTemp pay : payList) {
-        saveVoucher(pay);
-      }
-    }
-
-    List<VoucherTemp> payfeeList = transdtlDao.getFeeVoucherData(String.valueOf(settledate));
-    if (!StringUtil.isEmpty(payfeeList)) {
-      for (VoucherTemp payfee : payfeeList) {
-        saveVoucher(payfee);
+    //用户交易凭证
+    List<VoucherTemp> userList = debitCreditDtlDao.getVoucherData(String.valueOf(settledate));
+    if(!StringUtil.isEmpty(userList)){
+      for (VoucherTemp temp : userList) {
+        saveVoucher(temp);
       }
     }
 
