diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopDao.java
new file mode 100644
index 0000000..2eb003e
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopDao.java
@@ -0,0 +1,11 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TShop;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+/**
+ * Created by shuwei on 2019/4/15.
+ */
+public interface ShopDao extends JpaRepository<TShop, Integer> {
+    TShop getByThirdUniqueIdenty(String thirdUniqueIdenty);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TShop.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TShop.java
index 978f8be..9263fa1 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TShop.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TShop.java
@@ -1,14 +1,15 @@
 package com.supwisdom.dlpay.framework.domain;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+
+import javax.persistence.*;
 
 @Entity
 @Table(name = "TB_SHOP")
 public class TShop {
+
   @Id
+  @SequenceGenerator(name = "shopid", sequenceName = "SEQ_SHOP", allocationSize = 1)
+  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "shopid")
   @Column(name="SHOPID", nullable = false, precision = 9)
   private Integer shopid;
 
@@ -57,6 +58,20 @@
   @Column(name="CLOSEDATE", length = 8)
   private String closedate;
 
+  /**
+   * 第三方唯一ID
+   * */
+  @Column(name="THIRD_UNIQUE_IDENTY", length = 40)
+  private String thirdUniqueIdenty;
+
+  public String getThirdUniqueIdenty() {
+    return thirdUniqueIdenty;
+  }
+
+  public void setThirdUniqueIdenty(String thirdUniqueIdenty) {
+    this.thirdUniqueIdenty = thirdUniqueIdenty;
+  }
+
   public Integer getShopid() {
     return shopid;
   }
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 e16ab7b..1c36a13 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
@@ -121,11 +121,16 @@
         return if (code.retcode == "0") {
             val suc = PersonTransBuilder.newBuilder(accountUtilServcie)
                     .done(dtl.refno, TradeDict.DTL_STATUS_SUCCESS, personBalancePayService)
-            ResponseEntity.ok(suc)
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .success()
+                    .data("refno", suc.refno)
+                    .build())
         } else {
-            val fail = PersonTransBuilder.newBuilder(accountUtilServcie)
+            PersonTransBuilder.newBuilder(accountUtilServcie)
                     .done(dtl.refno, TradeDict.DTL_STATUS_FAIL, personBalancePayService)
-            ResponseEntity.ok(fail)
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .result(1, code.retmsg)
+                    .build())
         }
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/shop/bean/shop_param.kt b/src/main/kotlin/com/supwisdom/dlpay/shop/bean/shop_param.kt
new file mode 100644
index 0000000..4b8388a
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/shop/bean/shop_param.kt
@@ -0,0 +1,21 @@
+package com.supwisdom.dlpay.shop.bean
+
+/**
+ * 请求参数
+ */
+class ShopParam {
+    var shopid: Int? = 0
+    var addr: String? = ""
+    var shopname: String = ""
+    var mobile: String = ""
+    var contactman: String = ""
+    var uniqueId: String? = ""
+}
+
+class UserParam {
+    var uniqueId: String? = ""
+    var userid: String? = ""
+    var name: String = ""
+    var addr: String? = ""
+    var mobile: String? = ""
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/shop/controller/shop_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/shop/controller/shop_controller.kt
index c92f7f5..9647b47 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/shop/controller/shop_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/shop/controller/shop_controller.kt
@@ -1,16 +1,71 @@
 package com.supwisdom.dlpay.shop.controller
 
-import org.springframework.web.bind.annotation.RequestMapping
-import org.springframework.web.bind.annotation.RestController
+import com.supwisdom.dlpay.framework.ResponseBodyBuilder
+import com.supwisdom.dlpay.framework.domain.TShop
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.util.TradeDict
+import com.supwisdom.dlpay.shop.bean.ShopParam
+import com.supwisdom.dlpay.shop.service.ShopService
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.ResponseEntity
+import org.springframework.web.bind.annotation.*
 
 /**
- * Created by shuwei on 2019/4/15.
+ * 接口签名值等
  */
 @RestController
 @RequestMapping("/shop")
-class ShopController{
-    @RequestMapping("/open")
-    fun openAccount(){
+class ShopController {
+    @Autowired
+    private lateinit var shopService: ShopService
 
+    @PostMapping("/open")
+    fun openAccount(@RequestBody request: ShopParam): ResponseEntity<Any> {
+        if (request.uniqueId != null && request.uniqueId != "") {
+            var shop = shopService.findByThirdUniqueId(request.uniqueId!!)
+            if (shop != null) {
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .result(1, "[uniqueId]该值已存在")
+                        .build())
+            }
+        }
+        val shop = TShop()
+        shop.addr = request.addr
+        shop.contactman = request.contactman
+        shop.mobile = request.mobile
+        shop.shopname = request.shopname
+        shop.status = TradeDict.STATUS_NORMAL
+        shop.thirdUniqueIdenty = request.uniqueId
+        shopService.save(shop)
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .success()
+                .data("shopid", shop.shopid)
+                .build())
     }
+
+    @GetMapping("/get")
+    fun queryShop(@RequestBody request: ShopParam): ResponseEntity<Any> {
+        if (request.uniqueId != null && request.uniqueId != "") {
+            var shop = shopService.findByThirdUniqueId(request.uniqueId!!)
+            if (shop != null) {
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .success()
+                        .data("shop", shop)
+                        .build())
+            }
+        } else if (request.shopid != null && request.shopid != 0) {
+            var shop = shopService.findByShopId(request.shopid!!)
+            if (shop != null) {
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .success()
+                        .data("shop", shop)
+                        .build())
+            }
+        }
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .result(1, "数据不存在")
+                .build())
+    }
+
+
 }
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/shop/service/impl/shop_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/shop/service/impl/shop_service_impl.kt
new file mode 100644
index 0000000..c7d70db
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/shop/service/impl/shop_service_impl.kt
@@ -0,0 +1,49 @@
+package com.supwisdom.dlpay.shop.service.impl
+
+import com.supwisdom.dlpay.framework.dao.ShopDao
+import com.supwisdom.dlpay.framework.dao.ShopaccDao
+import com.supwisdom.dlpay.framework.domain.TShop
+import com.supwisdom.dlpay.framework.domain.TShopacc
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.shop.service.ShopService
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+
+/**
+ * Created by shuwei on 2019/4/15.
+ */
+@Service
+class ShopServiceImpl : ShopService {
+    @Autowired
+    private lateinit var shopDao: ShopDao
+    @Autowired
+    private lateinit var shopaccDao: ShopaccDao
+    @Autowired
+    private lateinit var systemUtilService: SystemUtilService
+
+    override fun findByThirdUniqueId(uniqueId: String): TShop? {
+       return shopDao.getByThirdUniqueIdenty(uniqueId)
+    }
+
+    override fun save(shop: TShop): TShop {
+        var systemdatetime = systemUtilService.sysdatetime
+        shop.opendate = systemdatetime.hostdate
+        shopDao.save(shop)
+        var shopacc = shopaccDao.findByShopid(shop.shopid)
+        if (shopacc == null) {
+            shopacc = TShopacc()
+            shopacc.shopid = shop.shopid
+            shopacc.shopname = shop.shopname
+            shopacc.status = shop.status
+            shopacc.subjno = "2004"
+            shopacc.opendate = systemdatetime.hostdate
+            shopacc.shopaccno = String.format("2%09d",shop.shopid)
+            shopaccDao.save(shopacc)
+        }
+        return shop
+    }
+
+    override fun findByShopId(shopid: Int): TShop? {
+        return shopDao.getOne(shopid)
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/shop/service/shop_service.kt b/src/main/kotlin/com/supwisdom/dlpay/shop/service/shop_service.kt
new file mode 100644
index 0000000..a42b86b
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/shop/service/shop_service.kt
@@ -0,0 +1,19 @@
+package com.supwisdom.dlpay.shop.service
+
+import com.supwisdom.dlpay.framework.domain.TShop
+import org.springframework.transaction.annotation.Propagation
+import org.springframework.transaction.annotation.Transactional
+
+/**
+ * Created by shuwei on 2019/4/15.
+ */
+interface ShopService {
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
+    fun save(shop: TShop): TShop
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun findByThirdUniqueId(uniqueId: String): TShop?
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun findByShopId(shopid: Int): TShop?
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/user/controller/user_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/user/controller/user_controller.kt
new file mode 100644
index 0000000..3c6ca0c
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/user/controller/user_controller.kt
@@ -0,0 +1,76 @@
+package com.supwisdom.dlpay.user.controller
+
+import com.supwisdom.dlpay.consume.domain.TPerson
+import com.supwisdom.dlpay.framework.ResponseBodyBuilder
+import com.supwisdom.dlpay.framework.util.TradeDict
+import com.supwisdom.dlpay.shop.bean.UserParam
+import com.supwisdom.dlpay.user.service.UserService
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.ResponseEntity
+import org.springframework.web.bind.annotation.*
+
+/**
+ * Created by shuwei on 2019/4/15.
+ */
+@RestController
+@RequestMapping("/user")
+class UserController {
+    @Autowired
+    private lateinit var useService: UserService
+
+    @PostMapping("/open")
+    fun openAccount(@RequestBody request: UserParam): ResponseEntity<Any> {
+        if (request.uniqueId != null && request.uniqueId != "") {
+            var person = useService.findByThirdUniqueIdenty(request.uniqueId!!)
+            if (person != null) {
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .result(1, "[uniqueId]该值已存在")
+                        .build())
+            }
+        }
+        if (request.name == null) {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .result(1, "[name]不能为空")
+                    .build())
+        }
+        val person = TPerson()
+        person.addr = request.addr
+        person.name = request.name
+        person.mobile = request.mobile
+        person.status = TradeDict.STATUS_NORMAL
+        person.thirdUniqueIdenty = request.uniqueId
+        useService.save(person)
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .success()
+                .data("userid", person.userid)
+                .build())
+    }
+
+    @GetMapping("/get")
+    fun queryShop(@RequestBody request: UserParam): ResponseEntity<Any> {
+        if (request.uniqueId != null && request.uniqueId != "") {
+            var person = useService.findByThirdUniqueIdenty(request.uniqueId!!)
+            if (person != null) {
+                var account = useService.findAccountByUserid(person.userid)
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .success()
+                        .data("person", person)
+                        .data("account", account!!)
+                        .build())
+            }
+        } else if (request.userid != null && request.userid != "") {
+            var person = useService.findPersonByUserid(request.userid!!)
+            if (person != null) {
+                var account = useService.findAccountByUserid(person.userid)
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .success()
+                        .data("person", person)
+                        .data("account", account!!)
+                        .build())
+            }
+        }
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .result(1, "数据不存在")
+                .build())
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/user/service/impl/user_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/user/service/impl/user_service_impl.kt
new file mode 100644
index 0000000..8842924
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/user/service/impl/user_service_impl.kt
@@ -0,0 +1,55 @@
+package com.supwisdom.dlpay.user.service.impl
+
+import com.supwisdom.dlpay.consume.dao.AccountDao
+import com.supwisdom.dlpay.consume.dao.PersonDao
+import com.supwisdom.dlpay.consume.domain.TAccount
+import com.supwisdom.dlpay.consume.domain.TPerson
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.user.service.UserService
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+
+/**
+ * Created by shuwei on 2019/4/15.
+ */
+@Service
+class UserServiceImpl : UserService {
+    @Autowired
+    private lateinit var personDao: PersonDao
+    @Autowired
+    private lateinit var accountDao: AccountDao
+    @Autowired
+    private lateinit var systemUtilService: SystemUtilService
+
+    override fun save(person: TPerson): TPerson {
+        personDao.save(person)
+        var account = accountDao.findByUserid(person.userid)
+        if (account == null) {
+            var systemdatetime = systemUtilService.sysdatetime
+            account = TAccount()
+            account.accname = person.name
+            account.opendate = systemdatetime.hostdate
+            account.userid = person.userid
+            account.status = person.status
+            account.subjno = "220201"
+            account.balance = 0.0
+            account.availbal = 0.0
+            account.frozebal = 0.0
+            account.lowfreeFlag = false
+            accountDao.save(account)
+        }
+        return person
+    }
+
+    override fun findByThirdUniqueIdenty(thirdUniqueIdenty: String): TPerson? {
+        return personDao.findByThirdUniqueIdenty(thirdUniqueIdenty)
+    }
+
+    override fun findPersonByUserid(userid: String): TPerson? {
+        return personDao.getOne(userid)
+    }
+
+    override fun findAccountByUserid(userid: String): TAccount? {
+        return accountDao.findByUserid(userid)
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/user/service/user_service.kt b/src/main/kotlin/com/supwisdom/dlpay/user/service/user_service.kt
new file mode 100644
index 0000000..57dd108
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/user/service/user_service.kt
@@ -0,0 +1,23 @@
+package com.supwisdom.dlpay.user.service
+
+import com.supwisdom.dlpay.consume.domain.TAccount
+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/15.
+ */
+interface UserService {
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
+    fun save(person: TPerson): TPerson
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun findByThirdUniqueIdenty(thirdUniqueIdenty: String): TPerson?
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun findPersonByUserid(userid: String): TPerson?
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun findAccountByUserid(userid: String): TAccount?
+}
\ No newline at end of file
