"账户余额已被更新")
}
- //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 {
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}>未找到指定个人账户")
}
?: 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
}
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>参考号错误")
}
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>参考号错误")
"个人流水<${transaction.refno}>不存在")
}
transaction.personDtl.status = TradeDict.DTL_STATUS_SUCCESS
+ transaction.personDtl.remark = remark
}
if (transaction.shop) {
// update shop balance
}
transaction.shopDtl.status = TradeDict.DTL_STATUS_SUCCESS
transaction.shopDtl.accdate = transaction.accdate
+ transaction.shopDtl.remark = remark
}
if (transaction.subject) {
@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 {