diff --git a/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java b/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java
index 6efee29..948b525 100644
--- a/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java
+++ b/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java
@@ -4,6 +4,7 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.persistence.LockModeType;
 
@@ -12,4 +13,6 @@
   @Lock(LockModeType.PESSIMISTIC_WRITE)
   @Query("select a from taccount a where a.accno = ?1")
   TAccount getByAccnoForUpdate(String accno);
+
+  TAccount findByUserid(String userid);
 }
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 bc08331..a347bb9 100644
--- a/src/main/java/com/supwisdom/dlpay/consume/domain/TPerson.java
+++ b/src/main/java/com/supwisdom/dlpay/consume/domain/TPerson.java
@@ -19,6 +19,9 @@
   @Column(name = "SEX", length = 10)
   private String sex;
 
+  @Column(name = "STATUS",nullable = false, length = 10)
+  private String status;
+
   @Column(name = "IDTYPE", length = 20)
   private String idtype;
 
@@ -52,10 +55,10 @@
   public TPerson() {
   }
 
-  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) {
-    this.userid = userid;
+  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) {
     this.name = name;
     this.sex = sex;
+    this.status = status;
     this.idtype = idtype;
     this.idno = idno;
     this.country = country;
@@ -92,6 +95,14 @@
     this.sex = sex;
   }
 
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
   public String getIdtype() {
     return idtype;
   }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
index eac1aa2..e7a7a99 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
@@ -25,4 +25,6 @@
 
   @Query(value = "select t.SHOPACCNO as accno from TB_SHOPACC t left join TB_SHOPACCBAL a on t.SHOPACCNO=a.SHOPACCNO where a.SHOPACCNO is null and t.opendate>=:settday ", nativeQuery = true)
   List<AccnoBean> getNewAddShopacc(@RequestParam("settday") String settday);
+
+  TShopacc findByShopid(Integer shopid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
index 8465572..63eee64 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
@@ -40,4 +40,11 @@
   public static final String SUBJNO_SHOP = "2004";
   public static final String SUBJNO_ACCOUNT = "220201";
 
+
+  /**
+   * 支付方式
+   * */
+  public static final String PAYTYPE_CASH="cash";
+  public static final String PAYTYPE_BALANCE="balance";
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
index 1cc2119..6c89ce0 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
@@ -7,29 +7,47 @@
   /**
    * 10000 开始表示交易数据错误
    */
-  public static final int INPUT_DATA_ERROR = 100000;
+  public static final int INPUT_DATA_ERROR = 10000;
+
+
+  /**
+   * 账户不存在
+   * */
+  public static final int ACCOUNT_NOT_EXISTS = 10001;
+
   /**
    * 账户余额不足
    */
-  public static final int SHORT_BALANCE_ERROR = 100001;
+  public static final int SHORT_BALANCE_ERROR = 10002;
 
   /**
    * 个人账户状态异常
    */
-  public static final int PERSON_STATUS_ERROR = 100002;
+  public static final int PERSON_STATUS_ERROR = 10003;
 
   /**
    * 交易记录不存在
    */
-  public static final int TRANSACTION_NOT_EXISTS = 100003;
+  public static final int TRANSACTION_NOT_EXISTS = 10004;
 
   /**
    * 交易状态已完成
    */
-  public static final int TRANSACTION_IS_FINISHED = 100004;
+  public static final int TRANSACTION_IS_FINISHED = 10005;
 
   /**
    * 交易已冲正
    */
-  public static final int TRANSACTION_HAS_CANCELED = 100005;
+  public static final int TRANSACTION_HAS_CANCELED = 10006;
+  /**
+   * 商户不存在
+   * */
+  public static final int SHOP_NOT_EXISTS = 10007;
+
+  /**
+   * 商户不存在
+   * */
+  public static final int SUBJECT_NOT_EXISTS = 10008;
+
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/Tradetype.java b/src/main/java/com/supwisdom/dlpay/framework/util/Tradetype.java
new file mode 100644
index 0000000..af8646f
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/Tradetype.java
@@ -0,0 +1,6 @@
+package com.supwisdom.dlpay.framework.util;
+
+public enum Tradetype {
+  RECHARGE, //充值
+  CONSUME   //消费
+}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
index f6bdadd..75b8e1b 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
@@ -11,6 +11,7 @@
 import com.supwisdom.dlpay.framework.domain.TTranstype
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.dlpay.framework.util.Tradetype
 
 class AccountHolder<T> private constructor(val accountId: String, val idType: Int) {
     companion object {
@@ -42,7 +43,7 @@
     fun <T> get(): T {
         return when (idType) {
             IDTYPE_PERSON -> builder.accountUtil.readAccount(accountId)
-            IDTYPE_SHOP -> builder.accountUtil.readShopAcc(accountId)
+            IDTYPE_SHOP -> builder.accountUtil.readShopAcc(accountId.toInt())
             IDTYPE_SUBJECT -> builder.accountUtil.readSubject(accountId)
             IDTYPE_TRANSTYPE -> builder.accountUtil.readTranstype(accountId.toInt())
             else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "账户类型未知type<$idType>")
@@ -66,6 +67,7 @@
 
     // 输入参数，调用接口时指定的参数值
     lateinit var person: TPerson
+    lateinit var tradetype:Tradetype
 
     var transDate = ""
     var transTime = ""
@@ -75,22 +77,20 @@
     var overdraft = false
     var description = ""
 
-    /**
-     * 学工号，一卡通商户号 -- 第三方支付一卡通使用
-     * */
-    var stuempno = ""
-    var yktshopid = ""
-
 
     // 内部参数，不需要调用者处理
     val details = mutableListOf<TransDetail>()
     var amount: Double = 0.0
     lateinit var accountUtil: AccountUtilServcie
 
+    /**
+     * 支付方式
+     * */
+    var paytype = ""
+    var payinfo = ""
 
-    fun setPerson(per: TPerson): PersonTransBuilder {
+    fun setOwner(per: TPerson) {
         this.person = per
-        return this
     }
 
     fun enableOverdraft(b: Boolean = false): PersonTransBuilder {
@@ -104,22 +104,39 @@
         return this
     }
 
-    fun setStuempno(s: String): PersonTransBuilder {
-        this.stuempno = s
+    fun selectPaytype(paytype: String, payinfo: String): PersonTransBuilder {
+        this.paytype = paytype
+        this.payinfo = payinfo
         return this
     }
 
-    fun setYktshopid(s: String): PersonTransBuilder {
-        this.yktshopid = s
-        return this
+    fun chooseTradetype(tradetype: Tradetype) {
+        this.tradetype = tradetype
     }
 
     private fun prepareData() {
+        if (null == this.person) {
+            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定交易用户")
+        }
+
         amount = 0.0
+        if(this.details.size<1){
+            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定交易明细")
+        }
         amount = this.details.sumByDouble { it.amount }
+
+
+
+
+
     }
 
     private fun preCheckAccount() {
+
+        when(person.status){
+            TradeDict.STATUS_CLOSED -> throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已注销")
+            TradeDict.STATUS_LOCKED -> throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已冻结锁定")
+        }
     }
 
     fun <T, U> addDetail(debit: AccountHolder<T>, credit: AccountHolder<U>,
@@ -176,7 +193,10 @@
     fun done(service: PersonBalancePayService, isFinished: Boolean): TUserdtl {
         prepareData()
         preCheckAccount()
-        return service.process(this)
+        return when (isFinished) {
+            true -> service.process(this)
+            false -> service.init(this)
+        }
     }
 
     /**
@@ -185,19 +205,10 @@
      * @param status - 完成交易状态，见 TradeDict.DTL_STATUS_FAIL
      */
     fun done(paydtl: TUserdtl, status: String, service: PersonBalancePayService): TUserdtl {
-        prepareData()
-        when (status) {
-            TradeDict.DTL_STATUS_INIT -> {
-                return service.init(this)
-            }
-            TradeDict.DTL_STATUS_WIP -> {
-                return service.wip(paydtl, this)
-            }
-        }
-        TODO("add process")
+        return service.finish(paydtl, status, this)
     }
 
     fun done(refno: String, status: String, service: PersonBalancePayService): TUserdtl {
-        TODO("add process")
+        return service.finish(refno, status, this)
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt
index 3422dee..547a472 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt
@@ -8,11 +8,11 @@
 import com.supwisdom.dlpay.consume.service.AccountUtilServcie
 import com.supwisdom.dlpay.consume.service.PersonBalancePayService
 import com.supwisdom.dlpay.exception.TransactionProcessException
+import com.supwisdom.dlpay.framework.dao.ShopaccDao
+import com.supwisdom.dlpay.framework.dao.SubjectDao
 import com.supwisdom.dlpay.framework.domain.TShopacc
 import com.supwisdom.dlpay.framework.domain.TSubject
 import com.supwisdom.dlpay.framework.domain.TTranstype
-import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
@@ -22,33 +22,61 @@
 
 @Service
 class AccountUtilServcieImpl : AccountUtilServcie {
+    @Autowired
+    lateinit var accountDao: AccountDao
+
+    @Autowired
+    lateinit var shopaccDao: ShopaccDao
+
+    @Autowired
+    lateinit var subjectDao: SubjectDao
+
 
     override fun readAccountForUpdate(userid: String, nowait: Boolean): TAccount {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+       //TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        return accountDao.findByUserid(userid);
     }
 
     override fun readAccount(userid: String): TAccount {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        accountDao.findByUserid(userid).let {
+            if (null != it) {
+                return it
+            }
+            throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账户<$userid>不存在")
+        }
     }
 
-    override fun readShopAccForUpdate(shopId: String, nowait: Boolean): TShopacc {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    override fun readShopAccForUpdate(shopId: Int, nowait: Boolean): TShopacc {
+       // TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        return shopaccDao.findByShopid(shopId)
     }
 
-    override fun readShopAcc(shopId: String): TShopacc {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    override fun readShopAcc(shopId: Int): TShopacc {
+        shopaccDao.findByShopid(shopId).let {
+            if (null != it) {
+                return it
+            }
+            throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户<$shopId>不存在")
+        }
     }
 
     override fun readSubjectForUpdate(subjno: String, nowait: Boolean): TSubject {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        //TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        return subjectDao.getOne(subjno);
     }
 
     override fun readSubject(subjno: String): TSubject {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        subjectDao.getOne(subjno).let {
+            if (null != it) {
+                return it
+            }
+            throw TransactionProcessException(TradeErrorCode.SUBJECT_NOT_EXISTS, "科目<$subjno>不存在")
+        }
     }
 
     override fun readTranstype(transtype: Int): TTranstype {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        //TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        return TTranstype();
     }
 }
 
@@ -58,9 +86,6 @@
     lateinit var userdtlDao: UserdtlDao
 
     @Autowired
-    lateinit var systemUtilService: SystemUtilService
-
-    @Autowired
     lateinit var accountDao: AccountDao
 
     @PersistenceContext
@@ -75,15 +100,7 @@
     }
 
     override fun init(builder: PersonTransBuilder): TUserdtl {
-        val userdtl = TUserdtl()
-        val refno = systemUtilService.refno
-        val systemtime = systemUtilService.sysdatetime
-        userdtl.refno = refno
-        userdtl.amount = builder.amount
-        userdtl.createtime = systemtime.hostdatetime
-        userdtl.status = TradeDict.DTL_STATUS_INIT
-        userdtlDao.save(userdtl)
-        return userdtl
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
     }
 
     override fun wip(paydtl: TUserdtl, builder: PersonTransBuilder): TUserdtl {
@@ -106,4 +123,6 @@
             throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
         }
     }
+
+
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt
index 0c4a6c6..d3d9933 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt
@@ -12,8 +12,8 @@
     fun readAccountForUpdate(userid: String, nowait: Boolean): TAccount
     fun readAccount(userid: String): TAccount
 
-    fun readShopAccForUpdate(shopId: String, nowait: Boolean): TShopacc
-    fun readShopAcc(shopId: String): TShopacc
+    fun readShopAccForUpdate(shopId: Int, nowait: Boolean): TShopacc
+    fun readShopAcc(shopId: Int): TShopacc
 
     fun readSubjectForUpdate(subjno: String, nowait: Boolean): TSubject
     fun readSubject(subjno: String): TSubject
