diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/ThirdPayCall.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/ThirdPayCall.kt
index 323ac49..d003d71 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/ThirdPayCall.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/ThirdPayCall.kt
@@ -17,13 +17,13 @@
 
     companion object {
         fun callYktPay(config: Map<String, String>, paydtl: TUserdtl, time: String): BaseResp {
-            lateinit var code:BaseResp
+            val code = BaseResp()
 
-            var appid = config["appid"]
-            var appkey = config["appkey"]
-            var orderurl = config["orderurl"]
+            val appid = config["appid"]
+            val appkey = config["appkey"]
+            val orderurl = config["orderurl"]
 
-            var params = hashMapOf<String, String?>()
+            val params = hashMapOf<String, String?>()
             params.put("partner_id", appid)
             params.put("stuempno", "")
             params.put("tradeno", paydtl.refno)
@@ -36,43 +36,46 @@
             params.put("sign_method", "HMAC");
             params.put("limitflag", "off") //是否判断消费限额，on-判断；off-不判断。默认on（判断限额）。为空或不为off都是on；
             var signstr = HmacUtil.createLinkString(HmacUtil.paraFilter(params))
-            var sign = HmacUtil.HMACSHA1(signstr, appkey)
-            signstr += "&sign=" + sign + "&sourcetype=food"
-            var c = Client.create ()
+            val sign = HmacUtil.HMACSHA1(signstr, appkey)
+            signstr = "$signstr&sign=$sign&sourcetype=food"
+            val c = Client.create()
             c.setConnectTimeout(20000)
-            var r = c.resource (orderurl)
-            var respClient = r.post(ClientResponse::class.java, signstr)
+            val r = c.resource(orderurl)
+            val respClient = r.post(ClientResponse::class.java, signstr)
             if (200 == respClient.status) {
-                var ret = respClient.getEntity(String::class.java)
+                val ret = respClient.getEntity(String::class.java)
                 if (ret != null) {
                     try {
-                        lateinit var gson:Gson
-                        var result = gson.fromJson(ret, SupYktResp::class.java)
+                        val gson = Gson()
+                        val result = gson.fromJson(ret, SupYktResp::class.java)
                         if (result == null) {
                             code.retcode = "1"
                             code.retmsg = "返回内容为空"
                             return code
                         }
-                        if (!"0".equals(result.getRetcode())) {
-                            if ("30".equals(result.getRetcode())) {
-                                if (result.getOther() != null) {
+                        if ("0" != result.retcode) {
+                            if ("30" == result.retcode) {
+                                if (result.other != null) {
                                     try {
-                                        var supStatusRevResp = gson.fromJson (result.getOther(), SupStatusRevResp::class.java)
+                                        val supStatusRevResp = gson.fromJson(result.other,
+                                                SupStatusRevResp::class.java)
                                         if (supStatusRevResp != null) {
                                             //同流水号，同一笔已经支付完成的，不重复支付。
-                                            if (3 == supStatusRevResp.getStatus() && supStatusRevResp.getRevflag() != null && !supStatusRevResp.getRevflag()) {
+                                            if (3 == supStatusRevResp.status
+                                                    && supStatusRevResp.revflag != null
+                                                    && !supStatusRevResp.revflag) {
                                                 code.retcode = "0"
                                                 code.retmsg = "成功"
                                                 return code
                                             }
                                         }
-                                    } catch (e: Exception ) {
+                                    } catch (e: Exception) {
                                         e.printStackTrace()
                                     }
                                 }
                             }
                             code.retcode = "1"
-                            code.retmsg = "交易失败:" + result.getRetmsg()
+                            code.retmsg = "交易失败:" + result.retmsg
                             return code
                         }
                         code.retcode = "0"
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 8a5ac0a..f6bdadd 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
@@ -36,7 +36,7 @@
         }
     }
 
-    private lateinit var builder: PersonTransBuilder
+    internal lateinit var builder: PersonTransBuilder
 
     @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
     fun <T> get(): T {
@@ -88,8 +88,9 @@
     lateinit var accountUtil: AccountUtilServcie
 
 
-    fun setUserAndAcc(per: TPerson) {
+    fun setPerson(per: TPerson): PersonTransBuilder {
         this.person = per
+        return this
     }
 
     fun enableOverdraft(b: Boolean = false): PersonTransBuilder {
@@ -103,12 +104,12 @@
         return this
     }
 
-    fun setStuempno(s:String):PersonTransBuilder{
+    fun setStuempno(s: String): PersonTransBuilder {
         this.stuempno = s
         return this
     }
 
-    fun setYktshopid(s:String):PersonTransBuilder{
+    fun setYktshopid(s: String): PersonTransBuilder {
         this.yktshopid = s
         return this
     }
@@ -123,6 +124,9 @@
 
     fun <T, U> addDetail(debit: AccountHolder<T>, credit: AccountHolder<U>,
                          amount: Double, summary: String): PersonTransBuilder {
+        debit.builder = this
+        credit.builder = this
+
         var debitAccNo = ""
         var debitSubjNo = ""
         when (debit.idType) {
@@ -141,7 +145,6 @@
             AccountHolder.IDTYPE_TRANSTYPE -> TODO("not implements")
         }
 
-
         var creditAccNo = ""
         var creditSubjNo = ""
         when (credit.idType) {
@@ -182,16 +185,16 @@
      * @param status - 完成交易状态，见 TradeDict.DTL_STATUS_FAIL
      */
     fun done(paydtl: TUserdtl, status: String, service: PersonBalancePayService): TUserdtl {
-        TODO("finish")
         prepareData()
-        when (status){
+        when (status) {
             TradeDict.DTL_STATUS_INIT -> {
                 return service.init(this)
             }
             TradeDict.DTL_STATUS_WIP -> {
-                return service.wip(paydtl,this)
+                return service.wip(paydtl, this)
             }
         }
+        TODO("add process")
     }
 
     fun done(refno: String, status: String, service: PersonBalancePayService): TUserdtl {
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 eb02d45..c2815d0 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
@@ -64,7 +64,8 @@
     }
 
     @PostMapping("/ykt/payinit")
-    fun yktPayInit(userid: String, amount: Int, manageFee: Int, stuempno: String, yktshopid: String): ResponseEntity<Any> {
+    fun yktPayInit(userid: String, amount: Int, manageFee: Int,
+                   stuempno: String, yktshopid: String): ResponseEntity<Any> {
         //一卡通支付款 112240
         val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
                 .setTransDatetime("20190411", "112311")
@@ -84,16 +85,17 @@
         //一卡通支付款 112240
         val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
                 .done(refno, TradeDict.DTL_STATUS_WIP, personBalancePayService)
-        var code = CallService.callYktPay(paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.YKTPAY), dtl, DateUtil.getNow())
-        if (code.retcode == "0") {
+        val code = CallService.callYktPay(paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.YKTPAY),
+                dtl, DateUtil.getNow())
+        return if (code.retcode == "0") {
             //TODO update dtl
-            var suc = PersonTransBuilder.newBuilder(accountUtilServcie)
-                    .done(dtl.refno,TradeDict.DTL_STATUS_SUCCESS,personBalancePayService)
-            return ResponseEntity.ok(suc)
-        }else {
-            var fail = PersonTransBuilder.newBuilder(accountUtilServcie)
-                    .done(dtl.refno,TradeDict.DTL_STATUS_FAIL,personBalancePayService)
-            return ResponseEntity.ok(fail)
+            val suc = PersonTransBuilder.newBuilder(accountUtilServcie)
+                    .done(dtl.refno, TradeDict.DTL_STATUS_SUCCESS, personBalancePayService)
+            ResponseEntity.ok(suc)
+        } else {
+            val fail = PersonTransBuilder.newBuilder(accountUtilServcie)
+                    .done(dtl.refno, TradeDict.DTL_STATUS_FAIL, personBalancePayService)
+            ResponseEntity.ok(fail)
         }
     }
 }
\ 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 903da27..3422dee 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
@@ -2,7 +2,6 @@
 
 import com.supwisdom.dlpay.consume.PersonTransBuilder
 import com.supwisdom.dlpay.consume.dao.AccountDao
-import com.supwisdom.dlpay.consume.dao.TransdtlDao
 import com.supwisdom.dlpay.consume.dao.UserdtlDao
 import com.supwisdom.dlpay.consume.domain.TAccount
 import com.supwisdom.dlpay.consume.domain.TUserdtl
@@ -13,8 +12,6 @@
 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.DateUtil
-import com.supwisdom.dlpay.framework.util.TradeCode
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import org.springframework.beans.factory.annotation.Autowired
@@ -59,6 +56,7 @@
 class PersonBalancePayServiceImpl : PersonBalancePayService {
     @Autowired
     lateinit var userdtlDao: UserdtlDao
+
     @Autowired
     lateinit var systemUtilService: SystemUtilService
 
@@ -77,14 +75,13 @@
     }
 
     override fun init(builder: PersonTransBuilder): TUserdtl {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
-        lateinit var userdtl: TUserdtl
-        var refno = systemUtilService.refno
-        var systemtime  = systemUtilService.sysdatetime
+        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
+        userdtl.status = TradeDict.DTL_STATUS_INIT
         userdtlDao.save(userdtl)
         return userdtl
     }
@@ -109,6 +106,4 @@
             throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
         }
     }
-
-
 }
\ No newline at end of file
