springboot-mybatis plus工程统计消费余额的正确方式

x33g5p2x  于2021-09-28 转载在 Spring  
字(1.0k)|赞(0)|评价(0)|浏览(493)

统计已经消费的金额,因为数据库的已经消费的条数很多,做统计信息如果全部拉入内存计算,会出现问题,造成请求的接口很慢。
如下图所示的做法:

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')

相关文章

微信公众号

最新文章

更多