From: Tang Cheng Date: Thu, 23 May 2019 01:56:36 +0000 (+0800) Subject: 优化账户余额处理机制 X-Git-Tag: 1.0.0^2~199 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=57554b15caffd07b6f148032dd58f9df83a78a78;p=epayment%2Ffood_payapi.git 优化账户余额处理机制 --- 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 21d03249..e14f9473 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 @@ class TAccountRepositoryImpl : TAccountRepository { "账户余额已被更新") } - //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 @@ class TAccountRepositoryImpl : TAccountRepository { 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 @@ class ShopaccRepositoryImpl : TShopaccRepository { ?: 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 a0777971..f5817087 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 @@ class TransactionServiceImpl : TransactionService { } 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 @@ class TransactionServiceImpl : TransactionService { } 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 @@ class TransactionServiceImpl : TransactionService { "个人流水<${transaction.refno}>不存在") } transaction.personDtl.status = TradeDict.DTL_STATUS_SUCCESS + transaction.personDtl.remark = remark } if (transaction.shop) { // update shop balance @@ -396,6 +411,7 @@ class TransactionServiceImpl : TransactionService { } 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 e8cdd79e..41137407 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 @@ -19,8 +19,14 @@ interface TransactionService { @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class]) 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 {