diff --git a/src/main/java/com/supwisdom/dlpay/consume/dao/PersonDao.java b/src/main/java/com/supwisdom/dlpay/consume/dao/PersonDao.java
new file mode 100644
index 0000000..59a833c
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/consume/dao/PersonDao.java
@@ -0,0 +1,12 @@
+package com.supwisdom.dlpay.consume.dao;
+
+import com.supwisdom.dlpay.consume.domain.TPerson;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+
+/**
+ * Created by shuwei on 2019/4/12.
+ */
+public interface PersonDao extends JpaRepository<TPerson, String> {
+    TPerson findByThirdUniqueIdenty(String thirdUniqueIdenty);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/consume/domain/TPerson.java b/src/main/java/com/supwisdom/dlpay/consume/domain/TPerson.java
index a347bb9..959644c 100644
--- a/src/main/java/com/supwisdom/dlpay/consume/domain/TPerson.java
+++ b/src/main/java/com/supwisdom/dlpay/consume/domain/TPerson.java
@@ -52,10 +52,23 @@
   @Column(name = "LASTSAVED", length = 14)
   private String lastsaved;
 
+  /**
+   * 第三方唯一标识，可为学工号，银行卡号等
+   * */
+  @Column(name = "THIRD_UNIQUE_IDENTY", length = 32)
+  private String thirdUniqueIdenty;
+
   public TPerson() {
   }
 
+<<<<<<< HEAD
   public TPerson(String name, String sex, String status, String idtype, String idno, String country, String nation, String email, String tel, String mobile, String addr, String zipcode, String lastsaved) {
+=======
+  public TPerson(String userid, String name, String sex, String idtype, String idno, String country, String nation,
+                 String email, String tel, String mobile, String addr, String zipcode, String lastsaved,
+                 String thirdUniqueIdenty) {
+    this.userid = userid;
+>>>>>>> Person添加学工号
     this.name = name;
     this.sex = sex;
     this.status = status;
@@ -69,6 +82,7 @@
     this.addr = addr;
     this.zipcode = zipcode;
     this.lastsaved = lastsaved;
+    this.thirdUniqueIdenty = thirdUniqueIdenty;
   }
 
   public String getUserid() {
@@ -182,4 +196,12 @@
   public void setLastsaved(String lastsaved) {
     this.lastsaved = lastsaved;
   }
+
+  public String getThirdUniqueIdenty() {
+    return thirdUniqueIdenty;
+  }
+
+  public void setThirdUniqueIdenty(String thirdUniqueIdenty) {
+    this.thirdUniqueIdenty = thirdUniqueIdenty;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/consume/service/PaytypeService.java b/src/main/java/com/supwisdom/dlpay/consume/service/PaytypeService.java
index 7c6821d..0bfde3d 100644
--- a/src/main/java/com/supwisdom/dlpay/consume/service/PaytypeService.java
+++ b/src/main/java/com/supwisdom/dlpay/consume/service/PaytypeService.java
@@ -1,6 +1,8 @@
 package com.supwisdom.dlpay.consume.service;
 
 import com.supwisdom.dlpay.consume.domain.TPaytype;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Map;
 
@@ -9,8 +11,10 @@
  */
 public interface PaytypeService {
 
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class,readOnly = true)
     TPaytype getByPaytype(String paytype);
 
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class,readOnly = true)
     Map<String,String> getPaytypeConfigByPaytype(String pattype);
 
 }
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 c2815d0..450d49d 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
@@ -7,6 +7,7 @@
 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.consume.service.PersonService
 import com.supwisdom.dlpay.framework.util.DateUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.util.PaytypeUtil
@@ -26,6 +27,8 @@
 
     @Autowired
     lateinit var paytypeService: PaytypeService
+    @Autowired
+    lateinit var personService: PersonService
 
     @PostMapping("/account/pay")
     fun accountPay(userid: String, amount: Int, manageFee: Int): ResponseEntity<Any> {
@@ -65,12 +68,13 @@
 
     @PostMapping("/ykt/payinit")
     fun yktPayInit(userid: String, amount: Int, manageFee: Int,
-                   stuempno: String, yktshopid: String): ResponseEntity<Any> {
+                   stuempno: String, yktshopid: String, transdate: String, transtime: String,
+                   outtradeno: String, payinfo: String): ResponseEntity<Any> {
         //一卡通支付款 112240
+        var person = personService.getPersonByThirdUniqueIdenty(stuempno)
         val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-                .setTransDatetime("20190411", "112311")
-                .setStuempno(stuempno)
-                .setYktshopid(yktshopid)
+                .setTransDatetime(transdate, transtime)
+                .setPerson(person)
                 .addDetail(AccountHolder.subject("112240"),
                         AccountHolder.shop("12323"),
                         amount / 100.0, "")
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 547a472..006ce3f 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
@@ -100,7 +100,19 @@
     }
 
     override fun init(builder: PersonTransBuilder): TUserdtl {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+
+        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.transdate = builder.transDate
+        userdtl.transtime = builder.transTime
+        userdtl.userid = builder.person?.userid
+        userdtlDao.save(userdtl)
+        return userdtl
     }
 
     override fun wip(paydtl: TUserdtl, builder: PersonTransBuilder): TUserdtl {
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/person_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/person_service_impl.kt
new file mode 100644
index 0000000..e582c50
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/person_service_impl.kt
@@ -0,0 +1,20 @@
+package com.supwisdom.dlpay.consume.service.impl
+
+import com.supwisdom.dlpay.consume.dao.PersonDao
+import com.supwisdom.dlpay.consume.domain.TPerson
+import com.supwisdom.dlpay.consume.service.PersonService
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+
+/**
+ * Created by shuwei on 2019/4/12.
+ */
+@Service
+class PersonServiceImpl : PersonService {
+    @Autowired
+    lateinit var personDao: PersonDao
+
+    override fun getPersonByThirdUniqueIdenty(thirdUniqueIdenty: String?): TPerson {
+        return personDao.findByThirdUniqueIdenty(thirdUniqueIdenty)
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/service/person_service.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/service/person_service.kt
new file mode 100644
index 0000000..ce35e2c
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/service/person_service.kt
@@ -0,0 +1,14 @@
+package com.supwisdom.dlpay.consume.service
+
+import com.supwisdom.dlpay.consume.domain.TPerson
+import org.springframework.transaction.annotation.Propagation
+import org.springframework.transaction.annotation.Transactional
+
+/**
+ * Created by shuwei on 2019/4/12.
+ */
+interface PersonService {
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun getPersonByThirdUniqueIdenty(thirdUniqueIdenty: String?): TPerson
+
+}
\ No newline at end of file
