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 517a6d6..b5c73a4 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
@@ -4,31 +4,64 @@
 import com.supwisdom.dlpay.consume.domain.TPaydtl
 import com.supwisdom.dlpay.consume.domain.TPerson
 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
 
-class PersonBalancePayBuilder private constructor() {
+class PersonTransBuilder private constructor() {
     companion object {
-        fun newBuilder() = PersonBalancePayBuilder()
+        fun newBuilder() = PersonTransBuilder()
     }
 
+    inner class TransDetail(val accNo: String, val amount: Double,
+                            val summary: String, val rowno: Int)
+
     lateinit var person: TPerson
     lateinit var account: TAccount
 
     var transDate = ""
     var transTime = ""
     var description = ""
-    val details = mutableListOf<PayDtlBuilder.PayDetail>()
+    var amount: Double = 0.0
+    val details = mutableListOf<TransDetail>()
+    /**
+     * 是否允许透支
+     */
+    var overdraft = false
 
     fun setUserAndAcc(per: TPerson, acc: TAccount) {
         this.person = per
         this.account = acc
     }
 
-    private fun prepareData() {
+    fun enableOverdraft(b: Boolean = false): PersonTransBuilder {
+        this.overdraft = b
+        return this
+    }
 
+    fun setTransDatetime(date: String, time: String): PersonTransBuilder {
+        this.transDate = date
+        this.transTime = time
+        return this
+    }
+
+    private fun prepareData() {
+        amount = 0.0
+        amount = this.details.sumByDouble { it.amount }
     }
 
     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))
+        return this
     }
 
     /**
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 217ed47..eaec229 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
@@ -1,45 +1,61 @@
 package com.supwisdom.dlpay.consume.service.impl
 
-import com.supwisdom.dlpay.consume.PersonBalancePayBuilder
+import com.supwisdom.dlpay.consume.PersonTransBuilder
+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.PersonBalancePayService
-import com.supwisdom.dlpay.exception.TransactionDataError
+import com.supwisdom.dlpay.exception.TransactionProcessError
 import com.supwisdom.dlpay.framework.dao.PaydtlDao
 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 PersonBalancePayServiceImpl : PersonBalancePayService {
     @Autowired
     lateinit var paydtlDao: PaydtlDao
 
-    override fun init(builder: PersonBalancePayBuilder): TPaydtl {
+    @Autowired
+    lateinit var accountDao: AccountDao
+
+    @PersistenceContext
+    lateinit var em : EntityManager
+
+    private fun lockAccount(builder: PersonTransBuilder): TAccount {
+        return accountDao.getByAccnoForUpdate(builder.account.accno)
+    }
+
+    override fun process(builder: PersonTransBuilder): TPaydtl {
         TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
     }
 
-    override fun wip(paydtl: TPaydtl, builder: PersonBalancePayBuilder): TPaydtl {
+    override fun init(builder: PersonTransBuilder): TPaydtl {
         TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
     }
 
-    override fun wip(refno: String, builder: PersonBalancePayBuilder): TPaydtl {
+    override fun wip(paydtl: TPaydtl, builder: PersonTransBuilder): TPaydtl {
         TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
     }
 
-    override fun finish(paydtl: TPaydtl, status: String, builder: PersonBalancePayBuilder): TPaydtl {
+    override fun wip(refno: String, builder: PersonTransBuilder): TPaydtl {
         TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
     }
 
-    override fun finish(refno: String, status: String, builder: PersonBalancePayBuilder): TPaydtl {
+    override fun finish(paydtl: TPaydtl, status: String, builder: PersonTransBuilder): TPaydtl {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun finish(refno: String, status: String, builder: PersonTransBuilder): TPaydtl {
         paydtlDao.findById(refno).let {
             if (it.isPresent) {
                 return finish(it.get(), status, builder)
             }
-            throw TransactionDataError(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
+            throw TransactionProcessError(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
         }
     }
 
-    override fun process(builder: PersonBalancePayBuilder): TPaydtl {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-    }
+
 }
\ 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 2d559ea..8d631aa 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,6 +1,6 @@
 package com.supwisdom.dlpay.consume.service
 
-import com.supwisdom.dlpay.consume.PersonBalancePayBuilder
+import com.supwisdom.dlpay.consume.PersonTransBuilder
 import com.supwisdom.dlpay.consume.domain.TPaydtl
 
 interface PersonBalancePayService {
@@ -8,24 +8,24 @@
     /**
      * 一步完成交易
      */
-    fun process(builder: PersonBalancePayBuilder): TPaydtl
+    fun process(builder: PersonTransBuilder): TPaydtl
 
     /**
      * 两步交易，交易初始化方法，检查交易参数，记录交易流水
      */
-    fun init(builder: PersonBalancePayBuilder): TPaydtl
+    fun init(builder: PersonTransBuilder): TPaydtl
 
     /**
      * 两步交易，交易过程中判断交易状态，并更新交易状态为 wip
      */
-    fun wip(paydtl: TPaydtl, builder: PersonBalancePayBuilder): TPaydtl
+    fun wip(paydtl: TPaydtl, builder: PersonTransBuilder): TPaydtl
 
-    fun wip(refno: String, builder: PersonBalancePayBuilder): TPaydtl
+    fun wip(refno: String, builder: PersonTransBuilder): TPaydtl
 
     /**
      * 两步交易，完成交易过程，包括更新交易状态（成功、失败），更新借贷双方余额
      */
-    fun finish(paydtl: TPaydtl, status: String, builder: PersonBalancePayBuilder): TPaydtl
+    fun finish(paydtl: TPaydtl, status: String, builder: PersonTransBuilder): TPaydtl
 
-    fun finish(refno: String, status: String, builder: PersonBalancePayBuilder): TPaydtl
+    fun finish(refno: String, status: String, builder: PersonTransBuilder): TPaydtl
 }
\ No newline at end of file
