diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckError.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckError.java
deleted file mode 100644
index e834318..0000000
--- a/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckError.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.supwisdom.dlpay.exception;
-
-public class TransactionCheckError extends TransactionError {
-  public TransactionCheckError(int code, String message) {
-    super(code, String.format("C - %d, %s", code, message));
-  }
-}
diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckException.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckException.java
new file mode 100644
index 0000000..87b9ad1
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckException.java
@@ -0,0 +1,7 @@
+package com.supwisdom.dlpay.exception;
+
+public class TransactionCheckException extends TransactionException {
+  public TransactionCheckException(int code, String message) {
+    super(code, String.format("C - %d, %s", code, message));
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionError.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionError.java
deleted file mode 100644
index fb247c5..0000000
--- a/src/main/java/com/supwisdom/dlpay/exception/TransactionError.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.supwisdom.dlpay.exception;
-
-public class TransactionError extends Error {
-  private int errCode;
-
-  public TransactionError(int code, String message) {
-    super(message);
-    errCode = code;
-  }
-
-  public int code() {
-    return this.errCode;
-  }
-}
diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionException.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionException.java
new file mode 100644
index 0000000..e84657e
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/exception/TransactionException.java
@@ -0,0 +1,14 @@
+package com.supwisdom.dlpay.exception;
+
+public class TransactionException extends Exception {
+  private int errCode;
+
+  public TransactionException(int code, String message) {
+    super(message);
+    errCode = code;
+  }
+
+  public int code() {
+    return this.errCode;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessError.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessError.java
deleted file mode 100644
index 44b9d80..0000000
--- a/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessError.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.supwisdom.dlpay.exception;
-
-public class TransactionProcessError extends TransactionError {
-  public TransactionProcessError(int errCode, String message) {
-    super(errCode, String.format("E-%d : %s", errCode, message));
-  }
-}
diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessException.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessException.java
new file mode 100644
index 0000000..aac9273
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessException.java
@@ -0,0 +1,7 @@
+package com.supwisdom.dlpay.exception;
+
+public class TransactionProcessException extends TransactionException {
+  public TransactionProcessException(int errCode, String message) {
+    super(errCode, String.format("E-%d : %s", errCode, message));
+  }
+}
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 b5c73a4..cb10e5f 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
@@ -3,35 +3,75 @@
 import com.supwisdom.dlpay.consume.domain.TAccount
 import com.supwisdom.dlpay.consume.domain.TPaydtl
 import com.supwisdom.dlpay.consume.domain.TPerson
+import com.supwisdom.dlpay.consume.service.AccountUtilServcie
 import com.supwisdom.dlpay.consume.service.PersonBalancePayService
-import com.supwisdom.dlpay.exception.TransactionCheckError
-import com.supwisdom.dlpay.exception.TransactionProcessError
-import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.dlpay.framework.domain.TShopacc
+import com.supwisdom.dlpay.framework.domain.TSubject
+import com.supwisdom.dlpay.framework.domain.TTranstype
 
-class PersonTransBuilder private constructor() {
+class AccountHolder<out T> private constructor(val accountId: String, val idType: Int) {
     companion object {
-        fun newBuilder() = PersonTransBuilder()
+        const val IDTYPE_ACCOUNT = 1
+        const val IDTYPE_SHOP = 2
+        const val IDTYPE_SUBJECT = 3
+        const val IDTYPE_TRANSTYPE = 4
+
+        fun person(userid: String): AccountHolder<TAccount> {
+            return AccountHolder<TAccount>(userid, IDTYPE_ACCOUNT)
+        }
+
+        fun shop(shopid: String): AccountHolder<TShopacc> {
+            return AccountHolder<TShopacc>(shopid, IDTYPE_SHOP)
+        }
+
+        fun subject(subjNo: String): AccountHolder<TSubject> {
+            return AccountHolder(subjNo, IDTYPE_SUBJECT)
+        }
+
+        fun transType(transType: Int): AccountHolder<TTranstype> {
+            return AccountHolder("$transType", IDTYPE_TRANSTYPE)
+        }
     }
 
-    inner class TransDetail(val accNo: String, val amount: Double,
-                            val summary: String, val rowno: Int)
+    internal lateinit var build: PersonTransBuilder
 
+    fun get(): T {
+        TODO("add rule")
+    }
+
+    fun withLock(nowait: Boolean): T {
+        TODO("not implement")
+    }
+}
+
+class PersonTransBuilder private constructor(accUitl: AccountUtilServcie) {
+    companion object {
+        fun newBuilder(accUitl: AccountUtilServcie) = PersonTransBuilder(accUitl)
+    }
+
+    inner class TransDetail(val debitAccNo: String, val creditAccNo: String,
+                            val amount: Double, val summary: String,
+                            val rowno: Int)
+
+    // 输入参数，调用接口时指定的参数值
     lateinit var person: TPerson
-    lateinit var account: TAccount
 
     var transDate = ""
     var transTime = ""
-    var description = ""
-    var amount: Double = 0.0
-    val details = mutableListOf<TransDetail>()
     /**
      * 是否允许透支
      */
     var overdraft = false
+    var description = ""
 
-    fun setUserAndAcc(per: TPerson, acc: TAccount) {
+    // 内部参数，不需要调用者处理
+    val details = mutableListOf<TransDetail>()
+    var amount: Double = 0.0
+    lateinit var accountUtil: AccountUtilServcie
+
+
+    fun setUserAndAcc(per: TPerson) {
         this.person = per
-        this.account = acc
     }
 
     fun enableOverdraft(b: Boolean = false): PersonTransBuilder {
@@ -51,16 +91,17 @@
     }
 
     private fun preCheckAccount() {
-        // 判断个人账户
-        if (this.account.subjno == "2001") {
-            if(amount > this.account.balance) {
-                throw TransactionCheckError(TradeErrorCode.SHORT_BALANCE_ERROR, "个人账户余额不足")
-            }
-        }
     }
 
-    fun addDetail(accNo: String, amount: Double, summary: String): PersonTransBuilder {
-        this.details.add(TransDetail(accNo, amount, summary, this.details.size + 1))
+    fun addDetail(debitAccNo: String, creditAccNo: String,
+                  amount: Double, summary: String): PersonTransBuilder {
+        this.details.add(TransDetail(debitAccNo, creditAccNo, amount,
+                summary, this.details.size + 1))
+        return this
+    }
+
+    fun <T, U> addDetail(debit: AccountHolder<T>, credit: AccountHolder<U>,
+                         amount: Double, summary: String): PersonTransBuilder {
         return this
     }
 
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
new file mode 100644
index 0000000..01a143a
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt
@@ -0,0 +1,56 @@
+package com.supwisdom.dlpay.consume.controller
+
+import com.supwisdom.dlpay.consume.AccountHolder
+import com.supwisdom.dlpay.consume.PersonTransBuilder
+import com.supwisdom.dlpay.consume.service.AccountUtilServcie
+import com.supwisdom.dlpay.consume.service.PersonBalancePayService
+import com.supwisdom.dlpay.framework.util.TradeDict
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.ResponseEntity
+import org.springframework.web.bind.annotation.GetMapping
+import org.springframework.web.bind.annotation.RestController
+
+@RestController
+class ConsumeController {
+    @Autowired
+    lateinit var accountUtilServcie: AccountUtilServcie
+
+    @Autowired
+    lateinit var personBalancePayService: PersonBalancePayService
+
+    @GetMapping("/account/pay")
+    fun accountPay(userid: String, amount: Int, manageFee: Int): ResponseEntity<Any> {
+        val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
+                .setTransDatetime("20190411", "112311")
+                .enableOverdraft(false)
+                .addDetail(AccountHolder.person(userid),
+                        AccountHolder.shop("12323"),
+                        amount / 100.0, "")
+                .addDetail(AccountHolder.person(userid), AccountHolder.transType(301),
+                        manageFee / 100.0, "")
+                .done(personBalancePayService, true)
+        return ResponseEntity.ok(dtl)
+    }
+
+    @GetMapping("/account/payinit")
+    fun accountPayInit(userid: String, amount: Int, manageFee: Int): ResponseEntity<Any> {
+        val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
+                .setTransDatetime("20190411", "112311")
+                .enableOverdraft(false)
+                .addDetail(AccountHolder.person(userid),
+                        AccountHolder.shop("12323"),
+                        amount / 100.0, "")
+                .addDetail(AccountHolder.person(userid), AccountHolder.transType(301),
+                        manageFee / 100.0, "")
+                .done(personBalancePayService, false)
+
+        return ResponseEntity.ok(dtl)
+    }
+
+    @GetMapping("/account/payfinish")
+    fun accountPayFinish(refno: String): ResponseEntity<Any> {
+        val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
+                .done(refno, TradeDict.DTL_STATUS_SUCCESS, personBalancePayService)
+        return ResponseEntity.ok(dtl)
+    }
+}
\ 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 eaec229..155f9fd 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
@@ -4,15 +4,38 @@
 import com.supwisdom.dlpay.consume.dao.AccountDao
 import com.supwisdom.dlpay.consume.domain.TAccount
 import com.supwisdom.dlpay.consume.domain.TPaydtl
+import com.supwisdom.dlpay.consume.service.AccountUtilServcie
 import com.supwisdom.dlpay.consume.service.PersonBalancePayService
-import com.supwisdom.dlpay.exception.TransactionProcessError
+import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.dao.PaydtlDao
+import com.supwisdom.dlpay.framework.domain.TShopacc
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
 import javax.persistence.EntityManager
 import javax.persistence.PersistenceContext
 
+
+@Service
+class AccountUtilServcieImpl : AccountUtilServcie {
+
+    override fun readAccountForUpdate(userid: String, nowait: Boolean): TAccount {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun readAccount(userid: String): TAccount {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun readShopAccForUpdate(shopId: String, nowait: Boolean): TShopacc {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun readShopAcc(shopId: String): TShopacc {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+}
+
 @Service
 class PersonBalancePayServiceImpl : PersonBalancePayService {
     @Autowired
@@ -22,10 +45,10 @@
     lateinit var accountDao: AccountDao
 
     @PersistenceContext
-    lateinit var em : EntityManager
+    lateinit var em: EntityManager
 
     private fun lockAccount(builder: PersonTransBuilder): TAccount {
-        return accountDao.getByAccnoForUpdate(builder.account.accno)
+        TODO("")
     }
 
     override fun process(builder: PersonTransBuilder): TPaydtl {
@@ -53,7 +76,7 @@
             if (it.isPresent) {
                 return finish(it.get(), status, builder)
             }
-            throw TransactionProcessError(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
+            throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
         }
     }
 
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 8d631aa..66d3b37 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
@@ -1,7 +1,18 @@
 package com.supwisdom.dlpay.consume.service
 
 import com.supwisdom.dlpay.consume.PersonTransBuilder
+import com.supwisdom.dlpay.consume.domain.TAccount
 import com.supwisdom.dlpay.consume.domain.TPaydtl
+import com.supwisdom.dlpay.framework.domain.TShopacc
+
+interface AccountUtilServcie {
+
+    fun readAccountForUpdate(userid: String, nowait: Boolean): TAccount
+    fun readAccount(userid: String): TAccount
+
+    fun readShopAccForUpdate(shopId: String, nowait: Boolean): TShopacc
+    fun readShopAcc(shopId: String): TShopacc
+}
 
 interface PersonBalancePayService {
 
