统计已经消费的金额,因为数据库的已经消费的条数很多,做统计信息如果全部拉入内存计算,会出现问题,造成请求的接口很慢。
如下图所示的做法:
override fun getConsumeAmountByTenantId(tenantId: Long): BigDecimal=this.list(
QueryWrapper<SubAccountRecord>().allEq(mapOf("tenant_id" to tenantId, "transaction_type" to TransactionType.ORDER_DEDUCTION))
).sumOf { it.amount!! }
通过sql进行统计,这样请求会相对快一些
/**
* 查询租户已花费金额
* 消费笔数太多,sum计算修改为数据库中计算
*/
override fun getConsumeAmountByTenantId(tenantId: Long): BigDecimal{
val queryWrapper: QueryWrapper<SubAccountRecord> = QueryWrapper<SubAccountRecord>()
queryWrapper.select("sum(amount) as sum_amount ")
queryWrapper.allEq(mapOf("tenant_id" to tenantId, "transaction_type" to TransactionType.ORDER_DEDUCTION))
val sumAmountMap=this.getMap(queryWrapper)?: return BigDecimal.ZERO
return sumAmountMap["sum_amount"].toString().toBigDecimal()
}
执行的sql为
SELECT sum(amount) as sum_amount FROM sub_account_record WHERE deleted=0 AND (tenant_id = 1436952636891992064 AND transaction_type = 'EXPIRED_DEDUCTION')