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 89cf592..1b351b2 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
@@ -4,9 +4,11 @@
 import com.supwisdom.dlpay.framework.domain.TShopacc;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.jpa.repository.QueryHints;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
+import javax.persistence.QueryHint;
 import java.util.List;
 
 @Repository
@@ -25,4 +27,8 @@
   List<String> getNewAddShopacc(@Param("settday") String settday);
 
   TShopacc findByShopid(Integer shopid);
+
+  @Query(value = "select s from TShopacc  s where s.shopid = ?1")
+  @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="0")})
+  TShopacc getShopAccForUpdate(Integer shopid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/TranstypeDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/TranstypeDao.java
new file mode 100644
index 0000000..89d1da4
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/TranstypeDao.java
@@ -0,0 +1,8 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TTranstype;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface TranstypeDao extends JpaRepository<TTranstype, Integer> {
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TranstypeCode.java b/src/main/java/com/supwisdom/dlpay/framework/util/TranstypeCode.java
new file mode 100644
index 0000000..83b16e8
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TranstypeCode.java
@@ -0,0 +1,6 @@
+package com.supwisdom.dlpay.framework.util;
+
+public class TranstypeCode {
+
+  public static final int TT_CONSUUME_MANAGE_FEE = 301;
+}
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 a046753..ec7222f 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
@@ -1,11 +1,13 @@
 package com.supwisdom.dlpay.consume
 
+import com.fasterxml.jackson.module.kotlin.jacksonTypeRef
 import com.supwisdom.dlpay.consume.domain.TAccount
 import com.supwisdom.dlpay.consume.domain.TPerson
 import com.supwisdom.dlpay.consume.domain.TUserdtl
 import com.supwisdom.dlpay.consume.service.AccountUtilServcie
 import com.supwisdom.dlpay.consume.service.PersonBalancePayService
 import com.supwisdom.dlpay.exception.TransactionCheckException
+import com.supwisdom.dlpay.framework.domain.TShop
 import com.supwisdom.dlpay.framework.domain.TShopacc
 import com.supwisdom.dlpay.framework.domain.TSubject
 import com.supwisdom.dlpay.framework.domain.TTranstype
@@ -19,11 +21,11 @@
         const val IDTYPE_TRANSTYPE = 4
 
         fun person(userid: String): AccountHolder<TAccount> {
-            return AccountHolder<TAccount>(userid, IDTYPE_PERSON)
+            return AccountHolder(userid, IDTYPE_PERSON)
         }
 
         fun shop(shopid: String): AccountHolder<TShopacc> {
-            return AccountHolder<TShopacc>(shopid, IDTYPE_SHOP)
+            return AccountHolder(shopid, IDTYPE_SHOP)
         }
 
         fun subject(subjNo: String): AccountHolder<TSubject> {
@@ -37,6 +39,15 @@
 
     internal lateinit var builder: PersonTransBuilder
 
+    internal val childrenHolder = mutableListOf<AccountHolder<*>>()
+
+
+    fun <U> with(holder: AccountHolder<U>): AccountHolder<T> {
+        holder.builder = this.builder
+        childrenHolder.add(holder)
+        return this
+    }
+
     @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
     fun <T> get(): T {
         return when (idType) {
@@ -48,8 +59,15 @@
         } as T
     }
 
-    fun withLock(nowait: Boolean): T {
-        TODO("not implement")
+    @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
+    fun <T> withLock(nowait: Boolean): T {
+        return when (idType) {
+            IDTYPE_PERSON -> builder.accountUtil.readAccountForUpdate(accountId, true)
+            IDTYPE_SHOP -> builder.accountUtil.readShopAccForUpdate(accountId.toInt(), true)
+            IDTYPE_SUBJECT -> builder.accountUtil.readSubjectForUpdate(accountId, true)
+            IDTYPE_TRANSTYPE -> builder.accountUtil.readTranstype(accountId.toInt())
+            else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "账户类型未知type<$idType>")
+        } as T
     }
 }
 
@@ -200,6 +218,22 @@
         }
     }
 
+    @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
+    fun <U> getAccountAndSubjNo(holder: AccountHolder<U>): Pair<String, String> {
+        return when (holder.idType) {
+            AccountHolder.IDTYPE_PERSON -> holder.get<TAccount>().let {
+                it.accno to it.subjno
+            }
+            AccountHolder.IDTYPE_SHOP -> holder.get<TShopacc>().let {
+                it.shopaccno to it.subjno
+            }
+            AccountHolder.IDTYPE_SUBJECT -> holder.get<TSubject>().let {
+                it.subjno to it.subjno
+            }
+            else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "不支持的账户类型")
+        }
+    }
+
     fun <T, U> addDetail(debit: AccountHolder<T>, credit: AccountHolder<U>,
                          amount: Double, summary: String): PersonTransBuilder {
         debit.builder = this
@@ -207,42 +241,48 @@
 
         var debitAccNo = ""
         var debitSubjNo = ""
-        when (debit.idType) {
-            AccountHolder.IDTYPE_PERSON -> debit.get<TAccount>().also {
-                debitAccNo = it.accno
-                debitSubjNo = it.subjno
-            }
-            AccountHolder.IDTYPE_SHOP -> debit.get<TShopacc>().also {
-                debitAccNo = it.shopaccno
-                debitSubjNo = it.subjno
-            }
-            AccountHolder.IDTYPE_SUBJECT -> debit.get<TSubject>().also {
-                debitAccNo = it.subjno
-                debitSubjNo = it.subjno
-            }
-            AccountHolder.IDTYPE_TRANSTYPE -> TODO("not implements")
+        getAccountAndSubjNo(debit).apply {
+            debitAccNo = first
+            debitSubjNo = second
+        }
+        var creditAccNo = ""
+        var creditSubjNo = ""
+        getAccountAndSubjNo(credit).apply {
+            creditAccNo = first
+            creditSubjNo = second
+        }
+        this.details.add(TransDetail(debitAccNo, debitSubjNo, creditAccNo, creditSubjNo,
+                amount, summary, this.details.size + 1))
+        return this
+    }
+
+    fun addDetail(accountHolder: AccountHolder<TTranstype>,
+                  amount: Double, summary: String): PersonTransBuilder {
+        accountHolder.builder = this
+        val transtype = accountHolder.get<TTranstype>()
+
+        var debitAccNo = ""
+        var debitSubjNo = ""
+
+        if (transtype.drsubjno == "200") {
+
         }
 
         var creditAccNo = ""
         var creditSubjNo = ""
-        when (credit.idType) {
-            AccountHolder.IDTYPE_PERSON -> credit.get<TAccount>().also {
-                creditAccNo = it.accno
-                creditSubjNo = it.subjno
+        if (transtype.crsubjno == "220201") {
+            accountHolder.childrenHolder.firstOrNull {
+                (it.get() as TAccount).subjno == transtype.crsubjno
+            }?.let {
+                creditAccNo = (it.get() as TAccount).accno
+                creditSubjNo = (it.get() as TAccount).subjno
             }
-            AccountHolder.IDTYPE_SHOP -> credit.get<TShopacc>().also {
-                creditAccNo = it.shopaccno
-                creditSubjNo = it.subjno
-            }
-            AccountHolder.IDTYPE_SUBJECT -> credit.get<TSubject>().also {
-                creditAccNo = it.subjno
-                creditSubjNo = it.subjno
-            }
-            AccountHolder.IDTYPE_TRANSTYPE -> TODO("not implements")
+        } else if (transtype.crsubjno == "2002") {
+        } else {
+            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+                    "transtype<${accountHolder.accountId}> 不支持")
         }
 
-        this.details.add(TransDetail(debitAccNo, debitSubjNo, creditAccNo, creditSubjNo,
-                amount, summary, this.details.size + 1))
         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
index de02e7b..1d3b312 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
@@ -86,8 +86,8 @@
                                 it.addDetail(AccountHolder.subject(Subject.SUBJ_PAY_YKT),
                                         AccountHolder.shop(shopid),
                                         amount / 100.0, "一卡通支付")
-                                        .addDetail(AccountHolder.subject(Subject.SUBJ_PAY_YKT),
-                                                AccountHolder.subject(Subject.SUBJ_MACHANT_INCOME),
+                                        .addDetail(AccountHolder.transType(TranstypeCode.TT_CONSUUME_MANAGE_FEE)
+                                                .with(AccountHolder.shop(shopid)),
                                                 manageFee / 100.0, "收搭伙费")
                             }
                             TradeDict.FEETYPE_CONSUME_DISCOUNT -> {
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 c85139d..c58e41c 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
@@ -12,6 +12,7 @@
 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.dao.TranstypeDao
 import com.supwisdom.dlpay.framework.domain.TShopacc
 import com.supwisdom.dlpay.framework.domain.TSubject
 import com.supwisdom.dlpay.framework.domain.TTranstype
@@ -37,10 +38,12 @@
     @Autowired
     lateinit var subjectDao: SubjectDao
 
+    @Autowired
+    lateinit var transtypeDao: TranstypeDao
+
 
     override fun readAccountForUpdate(userid: String, nowait: Boolean): TAccount {
-        //TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-        return accountDao.findByUserid(userid);
+        return accountDao.getByAccnoForUpdateNowait(userid)
     }
 
     override fun readAccount(userid: String): TAccount {
@@ -53,8 +56,7 @@
     }
 
     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)
+        return shopaccDao.getShopAccForUpdate(shopId)
     }
 
     override fun readShopAcc(shopId: Int): TShopacc {
@@ -67,18 +69,15 @@
     }
 
     override fun readSubjectForUpdate(subjno: String, nowait: Boolean): TSubject {
-        //TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-        return subjectDao.getOne(subjno);
+        return subjectDao.getOne(subjno)
     }
 
     override fun readSubject(subjno: String): TSubject {
         return subjectDao.getOne(subjno)
-//            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.
-        return TTranstype();
+        return transtypeDao.getOne(transtype)
     }
 }
 
@@ -130,7 +129,7 @@
     }
 
     private fun doDealAccount(accno: String, amount: Double, overdraft: Boolean): TAccount {
-        var account = getlockAccount(accno)
+        val account = getlockAccount(accno)
         if (account.tacCheck())
             throw TransactionProcessException(TradeErrorCode.ACCOUNT_TAC_ERROR, "账户<$accno>tac校验异常")
 
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
index 67e22d6..eae962c 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
@@ -6,6 +6,7 @@
 class ResponseBodyBuilder private constructor() {
     companion object {
         private const val INVALIDE_RETCODE = -0x7FFFFFFF
+        private val RESERVED_KEY = setOf("retcode", "retmsg", "exception")
         fun create() = ResponseBodyBuilder()
     }
 
@@ -35,6 +36,9 @@
     }
 
     fun data(name: String, value: Any): ResponseBodyBuilder {
+        if(name in RESERVED_KEY) {
+            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "返回值 <$name> 为保留值，不能使用")
+        }
         this.respData[name] = value
         return this
     }
