diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
index b570823..8465572 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
@@ -24,6 +24,7 @@
   public static final String DTL_STATUS_SUCCESS = "success";
   public static final String DTL_STATUS_FAIL = "fail";
   public static final String DTL_STATUS_CANCEL = "cancel";
+  public static final String DTL_STATUS_WIP = "wip";
 
   /**
    * 交易借方
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/ThirdPayCall.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/ThirdPayCall.kt
new file mode 100644
index 0000000..3070350
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/ThirdPayCall.kt
@@ -0,0 +1,95 @@
+package com.supwisdom.dlpay.consume
+
+import com.google.gson.Gson
+import com.sun.jersey.api.client.Client
+import com.sun.jersey.api.client.ClientResponse
+import com.supwisdom.dlpay.consume.bean.BaseResp
+import com.supwisdom.dlpay.consume.bean.SupStatusRevResp
+import com.supwisdom.dlpay.consume.bean.SupYktResp
+import com.supwisdom.dlpay.consume.domain.TUserdtl
+import com.supwisdom.dlpay.util.HmacUtil
+import com.supwisdom.dlpay.util.MoneyUtil
+
+/**
+ * Created by shuwei on 2019/4/11.
+ */
+class CallService {
+
+    companion object {
+        fun callYktPay(config: Map<String, String>, paydtl: TUserdtl, time: String, callback: (code: BaseResp) -> Unit) {
+            lateinit var code:BaseResp
+
+            var appid = config["appid"]
+            var appkey = config["appkey"]
+            var orderurl = config["orderurl"]
+
+            var params = hashMapOf<String, String?>()
+            params.put("partner_id", appid)
+            params.put("stuempno", "")
+            params.put("tradeno", paydtl.refno)
+            params.put("tradename", paydtl.payinfo)
+            params.put("amount", MoneyUtil.YuanToFen(paydtl.amount).toString())
+            params.put("shopid", "")
+            params.put("devphyid", "")
+            params.put("calcmanagefee", "T") //是否计算费率
+            params.put("timestamp", time)
+            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 ()
+            c.setConnectTimeout(20000)
+            var r = c.resource (orderurl)
+            var respClient = r.post(ClientResponse::class.java, signstr)
+            if (200 == respClient.status) {
+                var ret = respClient.getEntity(String::class.java)
+                if (ret != null) {
+                    try {
+                        lateinit var gson:Gson
+                        var result = gson.fromJson(ret, SupYktResp::class.java)
+                        if (result == null) {
+                            code.retcode = "1"
+                            code.retmsg = "返回内容为空"
+                            callback(code)
+                            return
+                        }
+                        if (!"0".equals(result.getRetcode())) {
+                            if ("30".equals(result.getRetcode())) {
+                                if (result.getOther() != null) {
+                                    try {
+                                        var supStatusRevResp = gson.fromJson (result.getOther(), SupStatusRevResp::class.java)
+                                        if (supStatusRevResp != null) {
+                                            //同流水号，同一笔已经支付完成的，不重复支付。
+                                            if (3 == supStatusRevResp.getStatus() && supStatusRevResp.getRevflag() != null && !supStatusRevResp.getRevflag()) {
+                                                code.retcode = "0"
+                                                code.retmsg = "成功"
+                                                callback(code)
+                                                return
+                                            }
+                                        }
+                                    } catch (e: Exception ) {
+                                        e.printStackTrace()
+                                    }
+                                }
+                            }
+                            code.retcode = "1"
+                            code.retmsg = "交易失败:" + result.getRetmsg()
+                            callback(code)
+                            return
+                        }
+                        code.retcode = "0"
+                        code.retmsg = "成功"
+                        callback(code)
+                        return
+                    } catch (e: Exception) {
+                        e.printStackTrace()
+                    }
+                }
+            }
+            code.retcode = "1"
+            code.retmsg = "请求失败"
+            callback(code)
+        }
+    }
+}
\ No newline at end of file
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 6e17cef..8a5ac0a 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
@@ -9,6 +9,7 @@
 import com.supwisdom.dlpay.framework.domain.TShopacc
 import com.supwisdom.dlpay.framework.domain.TSubject
 import com.supwisdom.dlpay.framework.domain.TTranstype
+import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 
 class AccountHolder<T> private constructor(val accountId: String, val idType: Int) {
@@ -74,6 +75,13 @@
     var overdraft = false
     var description = ""
 
+    /**
+     * 学工号，一卡通商户号 -- 第三方支付一卡通使用
+     * */
+    var stuempno = ""
+    var yktshopid = ""
+
+
     // 内部参数，不需要调用者处理
     val details = mutableListOf<TransDetail>()
     var amount: Double = 0.0
@@ -95,6 +103,16 @@
         return this
     }
 
+    fun setStuempno(s:String):PersonTransBuilder{
+        this.stuempno = s
+        return this
+    }
+
+    fun setYktshopid(s:String):PersonTransBuilder{
+        this.yktshopid = s
+        return this
+    }
+
     private fun prepareData() {
         amount = 0.0
         amount = this.details.sumByDouble { it.amount }
@@ -165,6 +183,15 @@
      */
     fun done(paydtl: TUserdtl, status: String, service: PersonBalancePayService): TUserdtl {
         TODO("finish")
+        prepareData()
+        when (status){
+            TradeDict.DTL_STATUS_INIT -> {
+                return service.init(this)
+            }
+            TradeDict.DTL_STATUS_WIP -> {
+                return service.wip(paydtl,this)
+            }
+        }
     }
 
     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 7276c02..61ce9f5 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
@@ -1,10 +1,15 @@
 package com.supwisdom.dlpay.consume.controller
 
 import com.supwisdom.dlpay.consume.AccountHolder
+import com.supwisdom.dlpay.consume.CallService
 import com.supwisdom.dlpay.consume.PersonTransBuilder
+import com.supwisdom.dlpay.consume.domain.TUserdtl
 import com.supwisdom.dlpay.consume.service.AccountUtilServcie
+import com.supwisdom.dlpay.consume.service.PaytypeService
 import com.supwisdom.dlpay.consume.service.PersonBalancePayService
+import com.supwisdom.dlpay.framework.util.DateUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
+import com.supwisdom.dlpay.util.PaytypeUtil
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.web.bind.annotation.GetMapping
@@ -19,6 +24,9 @@
     @Autowired
     lateinit var personBalancePayService: PersonBalancePayService
 
+    @Autowired
+    lateinit var paytypeService: PaytypeService
+
     @PostMapping("/account/pay")
     fun accountPay(userid: String, amount: Int, manageFee: Int): ResponseEntity<Any> {
         val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
@@ -54,4 +62,35 @@
                 .done(refno, TradeDict.DTL_STATUS_SUCCESS, personBalancePayService)
         return ResponseEntity.ok(dtl)
     }
+
+    @PostMapping("/ykt/payinit")
+    fun yktPayInit(userid: String, amount: Int, manageFee: Int, stuempno: String, yktshopid: String): ResponseEntity<Any> {
+        //一卡通支付款 112240
+        val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
+                .setTransDatetime("20190411", "112311")
+                .setStuempno(stuempno)
+                .setYktshopid(yktshopid)
+                .addDetail(AccountHolder.subject("112240"),
+                        AccountHolder.shop("12323"),
+                        amount / 100.0, "")
+                .addDetail(AccountHolder.subject("112240"), AccountHolder.transType(301),
+                        manageFee / 100.0, "")
+                .done(TUserdtl(), TradeDict.DTL_STATUS_INIT, personBalancePayService)
+        return ResponseEntity.ok(dtl)
+    }
+
+    @PostMapping("/ykt/payfinish")
+    fun yktPayFinish(refno: String): ResponseEntity<Any> {
+        //一卡通支付款 112240
+        val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
+                .done(refno, TradeDict.DTL_STATUS_WIP, personBalancePayService)
+        CallService.callYktPay(paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.YKTPAY), dtl, DateUtil.getNow()) { code ->
+            if (code.retcode == "0") {
+                 //TODO update dtl
+               var dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
+                        .done(dtl.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 e2c848f..903da27 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,6 +2,7 @@
 
 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
@@ -11,6 +12,10 @@
 import com.supwisdom.dlpay.framework.domain.TShopacc
 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
 import org.springframework.stereotype.Service
@@ -54,6 +59,8 @@
 class PersonBalancePayServiceImpl : PersonBalancePayService {
     @Autowired
     lateinit var userdtlDao: UserdtlDao
+    @Autowired
+    lateinit var systemUtilService: SystemUtilService
 
     @Autowired
     lateinit var accountDao: AccountDao
@@ -71,6 +78,15 @@
 
     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
+        userdtl.refno = refno
+        userdtl.amount = builder.amount
+        userdtl.createtime = systemtime.hostdatetime
+        userdtl.status =  TradeDict.DTL_STATUS_INIT
+        userdtlDao.save(userdtl)
+        return userdtl
     }
 
     override fun wip(paydtl: TUserdtl, builder: PersonTransBuilder): TUserdtl {
