账单-金币统计-统计-使用objTypeList代替currency,复用索引

This commit is contained in:
2025-07-05 01:09:17 +08:00
parent 3bb570594b
commit 8ae1b7b6d8
3 changed files with 23 additions and 4 deletions

View File

@@ -64,8 +64,13 @@ public interface BillRecordMapper extends BaseMapper<BillRecord> {
@Param("endTime") Date endTime,
@Param("zoneIdHour") long zoneIdHour);
List<DiamondBillRecordStatVo> statDiamondBillRecord(@Param("partitionIds") List<Integer> partitionIds,
/*List<DiamondBillRecordStatVo> statDiamondBillRecord(@Param("partitionIds") List<Integer> partitionIds,
@Param("startTime") Date startTime,
@Param("endTime") Date endTime);
@Param("endTime") Date endTime);*/
List<DiamondBillRecordStatVo> statDiamondBillRecord(@Param("partitionId") Integer partitionId,
@Param("objTypeList") List<Integer> objTypeList,
@Param("startTime") Date startTime,
@Param("endTime") Date endTime);
}

View File

@@ -119,7 +119,7 @@
group by `date`
</select>
<select id="statDiamondBillRecord" resultType="com.accompany.sharding.vo.DiamondBillRecordStatVo">
<!--<select id="statDiamondBillRecord" resultType="com.accompany.sharding.vo.DiamondBillRecordStatVo">
select br.partition_id,
br.obj_type,
sum(br.amount) `total_diamond`
@@ -128,6 +128,17 @@
and br.create_time >= #{startTime} and br.create_time &lt;= #{endTime}
and br.currency = 1
group by br.partition_id, br.obj_type
</select>-->
<select id="statDiamondBillRecord" resultType="com.accompany.sharding.vo.DiamondBillRecordStatVo">
select br.partition_id,
br.obj_type,
sum(br.amount) `total_diamond`
from bill_record br
where br.partition_id = #{partitionId}
and br.obj_type in <foreach item="id" index="index" collection="objTypeList" open="(" close=")" separator=",">#{id}</foreach>
and br.create_time >= #{startTime} and br.create_time &lt;= #{endTime}
group by br.partition_id, br.obj_type
</select>
</mapper>

View File

@@ -6,6 +6,7 @@ import com.accompany.business.mybatismapper.DiamondStatMapper;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.BillDomainTypeEnum;
import com.accompany.core.enumeration.BillObjTypeEnum;
import com.accompany.core.enumeration.CurrencyEnum;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.sharding.mapper.BillRecordMapper;
import com.accompany.sharding.vo.DiamondBillRecordStatVo;
@@ -48,8 +49,10 @@ public class DiamondStatService {
ZonedDateTime endOfDay = hourAgo.withHour(23).withMinute(59).withSecond(59).withNano(999999999);
Date systemEndTime = DateTimeUtil.converLocalDateTimeToDate(endOfDay.withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime());
List<Integer> diamondObjTypeList = Arrays.stream(BillObjTypeEnum.values()).filter(billObjTypeEnum -> CurrencyEnum.DIAMOND.equals(billObjTypeEnum.getCurrency()))
.mapToInt(BillObjTypeEnum::getValue).sorted().boxed().toList();
List<DiamondBillRecordStatVo> diamondBillRecordStatVoList = partitionIds.stream().flatMap(partitionId ->
billRecordMapper.statDiamondBillRecord(List.of(partitionId), systemStartTime, systemEndTime).stream())
billRecordMapper.statDiamondBillRecord(partitionId, diamondObjTypeList, systemStartTime, systemEndTime).stream())
.toList();
Map<Integer, List<DiamondBillRecordStatVo>> diamondBillRecordStatVoMap = !CollectionUtils.isEmpty(diamondBillRecordStatVoList)?
diamondBillRecordStatVoList.stream().collect(Collectors.groupingBy(DiamondBillRecordStatVo::getPartitionId)):