diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/repositories/repository_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/repositories/repository_impl.kt
index 21d0324..e14f947 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/repositories/repository_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/repositories/repository_impl.kt
@@ -25,17 +25,13 @@
                     "账户余额已被更新")
         }
 
-        //1. 从 redis 读取账户余额
-        //2. 没有记录时，读取数据库余额并存入 redis ，如果返回已存在，读取redis 余额
-        //3. 扣除 redis 中余额
-        val query = entityManager.createQuery("update TAccount a set a.availbal=a.availbal+?1, a.balance=a.balance+?1 " +
-                "where a.accno=?2 and a.availbal=?3")
-                ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "更新个人账户余额错误")
-
-        query.setParameter(1, amount)
-                .setParameter(2, accno)
-                .setParameter(3, avaibal)
-        return query.executeUpdate()
+        return entityManager.createQuery("update TAccount a set a.availbal=a.availbal+?1, a.balance=a.balance+?1 " +
+                "where a.accno=?2 and a.availbal=?3")?.run {
+            setParameter(1, amount)
+            setParameter(2, accno)
+            setParameter(3, avaibal)
+            executeUpdate()
+        } ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, "更新个人账户余额错误")
     }
 
     override fun recalcAccountBalance(account: TAccount, amount: Double, overdraft: Boolean): Int {
@@ -44,7 +40,11 @@
 
     override fun recalcAccountBalance(dtl: TPersondtl, amount: Double, overdraft: Boolean): Int {
         return entityManager.find(TAccount::class.java, dtl.accountNo)?.let {
-            recalcAccountBalance(it, amount, overdraft)
+            recalcAccountBalance(it, amount, overdraft).also { count ->
+                if (count == 1) {
+                    dtl.befbal = it.availbal
+                }
+            }
         } ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR,
                 "交易流水<${dtl.refno}>未找到指定个人账户")
     }
@@ -62,11 +62,13 @@
                 ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS,
                         "交易流水<${dtl.refno}>商户账户不存在")
 
-        val query = entityManager.createQuery("update TShopacc c set c.balance=c.balance+?1" +
-                " where c.shopaccno=?2 and c.balance=?3")
-        query.setParameter(1, amount)
-                .setParameter(2, dtl.shopaccno)
-                .setParameter(3, shopacc.balance)
-        return query.executeUpdate()
+        return entityManager.createQuery("update TShopacc c set c.balance=c.balance+?1" +
+                " where c.shopaccno=?2 and c.balance=?3")?.run {
+            setParameter(1, amount)
+            setParameter(2, dtl.shopaccno)
+            setParameter(3, shopacc.balance)
+            executeUpdate()
+        } ?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR,
+                "交易流水<${dtl.refno}>未找到指定商户账户")
     }
 }
\ No newline at end of file
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 a077797..f581708 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
@@ -338,6 +338,15 @@
     }
 
     override fun fail(refno: String): TTransactionMain {
+        return fail(refno, "")
+    }
+
+
+    override fun success(refno: String): TTransactionMain {
+        return success(refno, "")
+    }
+
+    override fun fail(refno: String, remark: String): TTransactionMain {
         val transaction = transactionMainDao.findByRefnoForUpdate(refno)
                 ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水<$refno>参考号错误")
 
@@ -347,13 +356,18 @@
         }
 
         updateRecordStatus(transaction, TradeDict.DTL_STATUS_FAIL)
+        if (transaction.person) {
+            transaction.personDtl.remark = remark
+        }
+        if (transaction.shop) {
+            transaction.shopDtl.remark = remark
+        }
         transaction.endTime = Timestamp(systemUtilService.sysdatetime.sysdate.time)
         transactionMainDao.save(transaction)
         return transaction
     }
 
-
-    override fun success(refno: String): TTransactionMain {
+    override fun success(refno: String, remark: String): TTransactionMain {
         val transaction = transactionMainDao.findByRefnoForUpdate(refno)
                 ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水<$refno>参考号错误")
 
@@ -379,6 +393,7 @@
                         "个人流水<${transaction.refno}>不存在")
             }
             transaction.personDtl.status = TradeDict.DTL_STATUS_SUCCESS
+            transaction.personDtl.remark = remark
         }
         if (transaction.shop) {
             // update shop balance
@@ -396,6 +411,7 @@
             }
             transaction.shopDtl.status = TradeDict.DTL_STATUS_SUCCESS
             transaction.shopDtl.accdate = transaction.accdate
+            transaction.shopDtl.remark = remark
         }
 
         if (transaction.subject) {
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 e8cdd79..4113740 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
@@ -20,7 +20,13 @@
     fun fail(refno: String): TTransactionMain
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+    fun fail(refno: String, remark: String): TTransactionMain
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
     fun success(refno: String): TTransactionMain
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+    fun success(refno: String, remark: String): TTransactionMain
 }
 
 interface PersonAccountService {
