diff --git a/src/main/java/com/supwisdom/dlpay/consume/PayDtlBuilder.java b/src/main/java/com/supwisdom/dlpay/consume/PayDtlBuilder.java
deleted file mode 100644
index 8c0498a..0000000
--- a/src/main/java/com/supwisdom/dlpay/consume/PayDtlBuilder.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.supwisdom.dlpay.consume;
-
-import com.supwisdom.dlpay.consume.domain.TAccount;
-import com.supwisdom.dlpay.consume.domain.TPerson;
-import com.supwisdom.dlpay.framework.service.PersonPayService;
-import com.supwisdom.dlpay.framework.util.TradeDict;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class PayDtlBuilder {
-  public static class PayDetail {
-    private String accNo;
-    private String accName;
-    private Double amount;
-    private String direction;
-    private String summary;
-  }
-
-  private TPerson person;
-  private TAccount account;
-  private String direction;
-
-  private Double payAmount;
-
-  private String summary;
-
-  private List<PayDetail> detail;
-
-  public static PayDtlBuilder newBuilder() {
-    return new PayDtlBuilder();
-  }
-
-  private PayDtlBuilder() {
-    this.detail = new ArrayList<>();
-  }
-
-  public PayDtlBuilder person(TPerson per, TAccount acc, String direction) {
-    this.person = per;
-    this.account = acc;
-    this.direction = direction;
-    return this;
-  }
-
-  public PayDtlBuilder setSummary(String s) {
-    this.summary = s;
-    return this;
-  }
-
-  public PayDtlBuilder setTransDatetime(String transDate ,String transTime) {
-
-    return this;
-  }
-
-  public Boolean done(PersonPayService service) {
-    if (this.detail.size() == 0) {
-      return false;
-    }
-    this.payAmount = 0.0;
-
-    for (PayDetail d : detail) {
-      this.payAmount += d.amount;
-    }
-    if (this.payAmount > this.account.getBalance()) {
-      return false;
-    }
-    service.process(this);
-    return true;
-  }
-
-
-  public PayDtlBuilder addSubDtl(String accNo, Double amount, String summary) {
-    PayDetail dtl = new PayDetail();
-    dtl.accNo = accNo;
-    dtl.accName = "";
-    dtl.amount = amount;
-    if (this.direction.equals(TradeDict.TRANS_DIRECTION_CREDIT)) {
-      dtl.direction = TradeDict.TRANS_DIRECTION_DEBIT;
-    } else {
-      dtl.direction = TradeDict.TRANS_DIRECTION_CREDIT;
-    }
-    dtl.summary = summary;
-    this.detail.add(dtl);
-    return this;
-  }
-}
diff --git a/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java b/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java
new file mode 100644
index 0000000..6efee29
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java
@@ -0,0 +1,15 @@
+package com.supwisdom.dlpay.consume.dao;
+
+import com.supwisdom.dlpay.consume.domain.TAccount;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Lock;
+import org.springframework.data.jpa.repository.Query;
+
+import javax.persistence.LockModeType;
+
+public interface AccountDao extends JpaRepository<TAccount, String> {
+
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
+  @Query("select a from taccount a where a.accno = ?1")
+  TAccount getByAccnoForUpdate(String accno);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckError.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckError.java
new file mode 100644
index 0000000..e834318
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckError.java
@@ -0,0 +1,7 @@
+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/TransactionDataError.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionDataError.java
deleted file mode 100644
index 747f613..0000000
--- a/src/main/java/com/supwisdom/dlpay/exception/TransactionDataError.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.supwisdom.dlpay.exception;
-
-public class TransactionDataError extends Error {
-  public TransactionDataError(int errCode, String message) {
-    super(String.format("E-%d : %s", errCode, message));
-  }
-}
diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionError.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionError.java
new file mode 100644
index 0000000..fb247c5
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/exception/TransactionError.java
@@ -0,0 +1,14 @@
+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/TransactionProcessError.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessError.java
new file mode 100644
index 0000000..44b9d80
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessError.java
@@ -0,0 +1,7 @@
+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/framework/service/PersonPayService.java b/src/main/java/com/supwisdom/dlpay/framework/service/PersonPayService.java
index 5e7ace6..3174c2b 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/PersonPayService.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/PersonPayService.java
@@ -1,6 +1,5 @@
 package com.supwisdom.dlpay.framework.service;
 
-import com.supwisdom.dlpay.consume.PayDtlBuilder;
 import com.supwisdom.dlpay.consume.domain.TPaydtl;
 import org.springframework.stereotype.Service;
 
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeSummary.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeSummary.java
new file mode 100644
index 0000000..c0053f7
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeSummary.java
@@ -0,0 +1,6 @@
+package com.supwisdom.dlpay.framework.util;
+
+public class TradeSummary {
+  public static final String POS_PAY = "刷卡消费";
+  public static final String WX_PAYCODE = "微信付款码消费";
+}
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
