diff --git a/src/main/java/com/supwisdom/dlpay/consume/dao/DpsdtlDao.java b/src/main/java/com/supwisdom/dlpay/consume/dao/DpsdtlDao.java
deleted file mode 100644
index 3b16338..0000000
--- a/src/main/java/com/supwisdom/dlpay/consume/dao/DpsdtlDao.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.supwisdom.dlpay.consume.dao;
-
-import com.supwisdom.dlpay.consume.domain.TDpsdtl;
-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 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);
-}
diff --git a/src/main/java/com/supwisdom/dlpay/consume/domain/TDpsdtl.java b/src/main/java/com/supwisdom/dlpay/consume/domain/TDpsdtl.java
deleted file mode 100644
index 958a44d..0000000
--- a/src/main/java/com/supwisdom/dlpay/consume/domain/TDpsdtl.java
+++ /dev/null
@@ -1,264 +0,0 @@
-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_DPSDTL")
-public class TDpsdtl {
-  @Id
-  @Column(name="REFNO", nullable = false, length = 32)
-  private String refno;
-
-  @Column(name="ACCDATE", length = 8)
-  private String accdate;
-
-  @Column(name="ACCNO", length = 32)
-  private String accno;
-
-  @Column(name="PAYTYPE", length = 20)
-  private String paytype; //充值类型 cash;alipay;wechat;等
-
-  @Column(name="PAYINFO", length = 200)
-  private String payinfo; //记录支付信息备用字段
-
-  @Column(name="AMOUNT", precision = 9, scale = 2)
-  private Double amount; //订单金额
-
-  @Column(name="DPSAMT", precision = 9, scale = 2)
-  private Double dpsamt; //实际充值金额
-
-  @Column(name = "FEETYPE", length = 20)
-  private String feetype = "none"; //费用类型
-
-  @Column(name = "FEEAMT", precision = 9, scale = 2)
-  private Double feeamt = 0D; //费用
-
-  @Column(name="STATUS", length = 20)
-  private String status;
-
-  @Column(name="BEFBAL", precision = 9, scale = 2)
-  private Double befbal;
-
-  @Column(name="AFTBAL", precision = 9, scale = 2)
-  private Double aftbal;
-
-  @Column(name = "TRANSCODE", precision = 4)
-  private Integer transcode;
-
-  @Column(name="TRANSTYPE", precision = 4)
-  private Integer transtype;
-
-  @Column(name="TRANSDESC", length = 240)
-  private String transdesc;
-
-  @Column(name="CREATETIME", length = 14)
-  private String createtime; //创建时间
-
-  @Column(name="ENDTIME", length = 14)
-  private String endtime; //支付时间
-
-  @Column(name="REMARK", length = 200)
-  private String remark;
-
-  @Column(name="OPERID", precision = 9)
-  private Integer operid;
-
-  @Column(name="OUTTRADENO", length = 60)
-  private String outtradeno; //外部流水号
-
-  @Column(name = "TRANSDATE", length = 8)
-  private String transdate;
-
-  @Column(name = "TRANSTIME", length = 6)
-  private String transtime;
-
-  @Column(name="REVFLAG", precision = 1)
-  private Integer revflag=0;
-
-  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 getAccno() {
-    return accno;
-  }
-
-  public void setAccno(String accno) {
-    this.accno = accno;
-  }
-
-  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 Double getAmount() {
-    return amount;
-  }
-
-  public void setAmount(Double amount) {
-    this.amount = amount;
-  }
-
-  public Double getDpsamt() {
-    return dpsamt;
-  }
-
-  public void setDpsamt(Double dpsamt) {
-    this.dpsamt = dpsamt;
-  }
-
-  public String getFeetype() {
-    return feetype;
-  }
-
-  public void setFeetype(String feetype) {
-    this.feetype = feetype;
-  }
-
-  public Double getFeeamt() {
-    return feeamt;
-  }
-
-  public void setFeeamt(Double feeamt) {
-    this.feeamt = feeamt;
-  }
-
-  public Double getBefbal() {
-    return befbal;
-  }
-
-  public void setBefbal(Double befbal) {
-    this.befbal = befbal;
-  }
-
-  public Double getAftbal() {
-    return aftbal;
-  }
-
-  public void setAftbal(Double aftbal) {
-    this.aftbal = aftbal;
-  }
-
-  public String getStatus() {
-    return status;
-  }
-
-  public void setStatus(String status) {
-    this.status = status;
-  }
-
-  public Integer getTranscode() {
-    return transcode;
-  }
-
-  public void setTranscode(Integer transcode) {
-    this.transcode = transcode;
-  }
-
-  public Integer getTranstype() {
-    return transtype;
-  }
-
-  public void setTranstype(Integer transtype) {
-    this.transtype = transtype;
-  }
-
-  public String getTransdesc() {
-    return transdesc;
-  }
-
-  public void setTransdesc(String transdesc) {
-    this.transdesc = transdesc;
-  }
-
-  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;
-  }
-
-  public String getRemark() {
-    return remark;
-  }
-
-  public void setRemark(String remark) {
-    this.remark = remark;
-  }
-
-  public Integer getOperid() {
-    return operid;
-  }
-
-  public void setOperid(Integer operid) {
-    this.operid = operid;
-  }
-
-  public String getOuttradeno() {
-    return outtradeno;
-  }
-
-  public void setOuttradeno(String outtradeno) {
-    this.outtradeno = outtradeno;
-  }
-
-  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 Integer getRevflag() {
-    return revflag;
-  }
-
-  public void setRevflag(Integer revflag) {
-    this.revflag = revflag;
-  }
-}
diff --git a/src/main/java/com/supwisdom/dlpay/consume/domain/TPerson.java b/src/main/java/com/supwisdom/dlpay/consume/domain/TPerson.java
index 959644c..8a2cb71 100644
--- a/src/main/java/com/supwisdom/dlpay/consume/domain/TPerson.java
+++ b/src/main/java/com/supwisdom/dlpay/consume/domain/TPerson.java
@@ -61,14 +61,10 @@
   public TPerson() {
   }
 
-<<<<<<< HEAD
-  public TPerson(String name, String sex, String status, String idtype, String idno, String country, String nation, String email, String tel, String mobile, String addr, String zipcode, String lastsaved) {
-=======
   public TPerson(String userid, String name, String sex, String idtype, String idno, String country, String nation,
                  String email, String tel, String mobile, String addr, String zipcode, String lastsaved,
                  String thirdUniqueIdenty) {
     this.userid = userid;
->>>>>>> Person添加学工号
     this.name = name;
     this.sex = sex;
     this.status = status;
diff --git a/src/main/java/com/supwisdom/dlpay/consume/domain/TTransdtlOrder.java b/src/main/java/com/supwisdom/dlpay/consume/domain/TTransdtlOrder.java
deleted file mode 100644
index edc005e..0000000
--- a/src/main/java/com/supwisdom/dlpay/consume/domain/TTransdtlOrder.java
+++ /dev/null
@@ -1,38 +0,0 @@
-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_TRANSDTL_ORDER")
-public class TTransdtlOrder {
-  @Id
-  @Column(name = "REFNO", nullable = false, length = 32)
-  private String refno;
-
-  @Column(name = "ERRMSG", length = 100)
-  private String errmsg;
-
-  public String getRefno() {
-    return refno;
-  }
-
-  public void setRefno(String refno) {
-    this.refno = refno;
-  }
-
-  public String getErrmsg() {
-    return errmsg;
-  }
-
-  public void setErrmsg(String errmsg) {
-    this.errmsg = errmsg;
-  }
-}
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 e575ab8..ffefda1 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,8 +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.*;
 import com.supwisdom.dlpay.framework.data.*;
 import com.supwisdom.dlpay.framework.domain.*;
@@ -44,10 +42,7 @@
   private VoucherDao voucherDao;
   @Autowired
   private VoucherEntryDao voucherEntryDao;
-  @Autowired
-  private DpsdtlDao dpsdtlDao;
-  @Autowired
-  private TransdtlDao transdtlDao;
+
   @Autowired
   private ShopaccdayDao shopaccdayDao;
   @Autowired
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt
index 88aed1a..6ca2d5e 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt
@@ -68,7 +68,7 @@
 
     @PostMapping("/ykt/payinit")
     fun yktPayInit(userid: String, amount: Int, manageFee: Int,
-                   stuempno: String, yktshopid: String, transdate: String, transtime: String,
+                   stuempno: String,shopid:String, transdate: String, transtime: String,
                    outtradeno: String, payinfo: String): ResponseEntity<Any> {
         //一卡通支付款 112240
         var person = personService.getPersonByThirdUniqueIdenty(stuempno)
@@ -79,12 +79,12 @@
                         amount / 100.0, "")
                 .addDetail(AccountHolder.subject("112240"), AccountHolder.transType(301),
                         manageFee / 100.0, "")
-                .done(TUserdtl(), TradeDict.DTL_STATUS_INIT, personBalancePayService)
+                .done(personBalancePayService,false)
         return ResponseEntity.ok(dtl)
     }
 
     @PostMapping("/ykt/payfinish")
-    fun yktPayFinish(refno: String): ResponseEntity<Any> {
+    fun yktPayFinish(refno: String,yktshopid: String): ResponseEntity<Any> {
         //一卡通支付款 112240
         val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
                 .done(refno, TradeDict.DTL_STATUS_WIP, personBalancePayService)
