diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index 737ddc3..1214889 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.api.controller
 
+import com.supwisdom.dlpay.ShopAccBalanceAsyncTask
 import com.supwisdom.dlpay.api.AccountProxy
 import com.supwisdom.dlpay.api.CallService
 import com.supwisdom.dlpay.api.TransactionBuilder
@@ -48,6 +49,9 @@
     @Autowired
     lateinit var transactionService: TransactionService
 
+    @Autowired
+    private lateinit var shopAccBalanceAsyncTask: ShopAccBalanceAsyncTask
+
     /**
      * 流水结果查询统一接口
      * */
@@ -162,7 +166,7 @@
                 }.and().shop(shopacc).apply {
                     setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_IN)
                     opposite = AccountProxy(account)
-                }.and().also {builder ->
+                }.and().also { builder ->
                     param.feelist?.forEach {
                         when (it.feetype) {
                             TradeDict.FEETYPE_CONSUME_MEALER -> {
@@ -177,7 +181,7 @@
                     }
                 }.init(transactionService)
 
-                transactionService.success(dtl.refno)
+                transactionService.success(dtl.refno, "")
 
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .data("refno", dtl.refno)
@@ -284,12 +288,14 @@
                         it.shopDtl)
             }
             if (code.retcode == "0") {
-                transactionService.success(param.refno).let {
+                transactionService.success(param.refno, "支付").let {
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
                             .data("refno", it.refno)
                             .data("billno", it.outTradeNo)
                             .success("交易确认成功"))
                 }
+
+
             } else {
                 transactionService.fail(param.refno).let {
                     return ResponseEntity.ok(ResponseBodyBuilder.create()
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index 17b45f0..05b57b2 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -39,9 +39,6 @@
     private lateinit var accountService: AccountService
 
     @Autowired
-    private lateinit var shopaccService: ShopaccService
-
-    @Autowired
     private lateinit var systemUtilService: SystemUtilService
 
     @Autowired
@@ -312,12 +309,20 @@
         if (transaction.shop) {
             transaction.shopDtl.remark = remark
         }
-        transaction.endTime = Timestamp(systemUtilService.sysdatetime.sysdate.time)
+        transaction.endTime = systemUtilService.sysdatetime.currentTimestamp
         transactionMainDao.save(transaction)
         return transaction
     }
 
     override fun success(refno: String, remark: String): TTransactionMain {
+        val transaction = successOnAccount(refno, remark)
+        if (transaction.status == TradeDict.DTL_STATUS_SUCCESS) {
+            shopAccBalanceAsyncTask.updateShopBalance(transaction.refno)
+        }
+        return transaction
+    }
+
+    override fun successOnAccount(refno: String, remark: String): TTransactionMain {
         val transaction = transactionMainDao.findByRefnoForUpdate(refno)
                 ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水<$refno>参考号错误")
 
@@ -329,7 +334,7 @@
         transaction.accdate = systemUtilService.accdate
         transactionOnSuccess(transaction, remark, false)
 
-        transaction.endTime = Timestamp(systemUtilService.sysdatetime.sysdate.time)
+        transaction.endTime = systemUtilService.sysdatetime.currentTimestamp
         transactionMainDao.save(transaction)
         return transaction
     }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
index f0acef4..c2b942a 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
@@ -22,10 +22,10 @@
     fun fail(refno: String, remark: String): TTransactionMain
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
-    fun success(refno: String): TTransactionMain
+    fun successOnAccount(refno: String, remark: String): TTransactionMain
 
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
     fun success(refno: String, remark: String): TTransactionMain
+    fun success(refno: String): TTransactionMain
 
     // 撤销接口冲正类接口
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
