diff --git a/src/main/kotlin/com/supwisdom/dlpay/DlpayApplication.kt b/src/main/kotlin/com/supwisdom/dlpay/DlpayApplication.kt
index fb17830..e72d7fb 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/DlpayApplication.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/DlpayApplication.kt
@@ -31,6 +31,7 @@
 
 }
 
+
 @EnableWebSecurity
 class OAuth2ClientSecurityConfig : WebSecurityConfigurerAdapter() {
 
@@ -42,8 +43,7 @@
                 .anyRequest().authenticated()
                 .and()
                 .formLogin()
-                .and()
-                .oauth2Login()
+                .loginPage("/login").permitAll()
     }
 }
 
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 2d1eeb6..a650004 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
@@ -60,7 +60,7 @@
     }
 
     @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
-    fun <T> withLock(nowait: Boolean): T {
+    fun <T> withLock(): T {
         return when (idType) {
             IDTYPE_PERSON -> builder.accountUtil.readAccountForUpdateNowait(accountId)
             IDTYPE_SHOP -> builder.accountUtil.readShopAcc(accountId.toInt())
@@ -229,13 +229,13 @@
     fun <U> getAccountAndSubjNo(holder: AccountHolder<U>): Pair<String, String> {
         return if (this.tryLockAccount) {
             when (holder.idType) {
-                AccountHolder.IDTYPE_PERSON -> holder.withLock<TAccount>(true).let {
+                AccountHolder.IDTYPE_PERSON -> holder.withLock<TAccount>().let {
                     it.accno to it.subjno
                 }
-                AccountHolder.IDTYPE_SHOP -> holder.withLock<TShopacc>(true).let {
+                AccountHolder.IDTYPE_SHOP -> holder.withLock<TShopacc>().let {
                     it.shopaccno to it.subjno
                 }
-                AccountHolder.IDTYPE_SUBJECT -> holder.withLock<TSubject>(true).let {
+                AccountHolder.IDTYPE_SUBJECT -> holder.withLock<TSubject>().let {
                     it.subjno to it.subjno
                 }
                 else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "不支持的账户类型")
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 9647b47..f2bf8e5 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
@@ -25,8 +25,7 @@
             var shop = shopService.findByThirdUniqueId(request.uniqueId!!)
             if (shop != null) {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .result(1, "[uniqueId]该值已存在")
-                        .build())
+                        .fail(1, "[uniqueId]该值已存在"))
             }
         }
         val shop = TShop()
@@ -38,9 +37,8 @@
         shop.thirdUniqueIdenty = request.uniqueId
         shopService.save(shop)
         return ResponseEntity.ok(ResponseBodyBuilder.create()
-                .success()
                 .data("shopid", shop.shopid)
-                .build())
+                .success())
     }
 
     @GetMapping("/get")
@@ -49,22 +47,19 @@
             var shop = shopService.findByThirdUniqueId(request.uniqueId!!)
             if (shop != null) {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .success()
                         .data("shop", shop)
-                        .build())
+                        .success())
             }
         } 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())
+                        .success())
             }
         }
         return ResponseEntity.ok(ResponseBodyBuilder.create()
-                .result(1, "数据不存在")
-                .build())
+                .fail(1, "数据不存在"))
     }
 
 
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
index 3c6ca0c..58f2994 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/user/controller/user_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/user/controller/user_controller.kt
@@ -20,18 +20,16 @@
 
     @PostMapping("/open")
     fun openAccount(@RequestBody request: UserParam): ResponseEntity<Any> {
-        if (request.uniqueId != null && request.uniqueId != "") {
-            var person = useService.findByThirdUniqueIdenty(request.uniqueId!!)
+        if (!request.uniqueId.isNullOrEmpty()) {
+            val person = useService.findByThirdUniqueIdenty(request.uniqueId!!)
             if (person != null) {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .result(1, "[uniqueId]该值已存在")
-                        .build())
+                        .fail(1, "[uniqueId]该值已存在"))
             }
         }
-        if (request.name == null) {
+        if (request.name.isEmpty()) {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .result(1, "[name]不能为空")
-                    .build())
+                    .fail(1, "[name]不能为空"))
         }
         val person = TPerson()
         person.addr = request.addr
@@ -41,36 +39,32 @@
         person.thirdUniqueIdenty = request.uniqueId
         useService.save(person)
         return ResponseEntity.ok(ResponseBodyBuilder.create()
-                .success()
                 .data("userid", person.userid)
-                .build())
+                .success())
     }
 
     @GetMapping("/get")
     fun queryShop(@RequestBody request: UserParam): ResponseEntity<Any> {
-        if (request.uniqueId != null && request.uniqueId != "") {
-            var person = useService.findByThirdUniqueIdenty(request.uniqueId!!)
+        if (!request.uniqueId.isNullOrEmpty()) {
+            val person = useService.findByThirdUniqueIdenty(request.uniqueId!!)
             if (person != null) {
-                var account = useService.findAccountByUserid(person.userid)
+                val account = useService.findAccountByUserid(person.userid)
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .success()
                         .data("person", person)
                         .data("account", account!!)
-                        .build())
+                        .success())
             }
-        } else if (request.userid != null && request.userid != "") {
-            var person = useService.findPersonByUserid(request.userid!!)
+        } else if (!request.userid.isNullOrEmpty()) {
+            val person = useService.findPersonByUserid(request.userid!!)
             if (person != null) {
-                var account = useService.findAccountByUserid(person.userid)
+                val account = useService.findAccountByUserid(person.userid)
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .success()
                         .data("person", person)
                         .data("account", account!!)
-                        .build())
+                        .success())
             }
         }
         return ResponseEntity.ok(ResponseBodyBuilder.create()
-                .result(1, "数据不存在")
-                .build())
+                .fail(1, "数据不存在"))
     }
 }
\ No newline at end of file
