幸运24-统计-平台统计-手写sql合并计算
This commit is contained in:
@@ -108,13 +108,19 @@ public class Lucky24RecordAdminService {
|
|||||||
Date startTime = DateTimeUtil.getBeginTimeOfDay(DateTimeUtil.convertStrToDate(endDate, DateTimeUtil.DEFAULT_DATE_PATTERN));
|
Date startTime = DateTimeUtil.getBeginTimeOfDay(DateTimeUtil.convertStrToDate(endDate, DateTimeUtil.DEFAULT_DATE_PATTERN));
|
||||||
ZonedDateTime zonedStartTime = startTime.toInstant().atZone(ZoneId.systemDefault());
|
ZonedDateTime zonedStartTime = startTime.toInstant().atZone(ZoneId.systemDefault());
|
||||||
Date systemStartTime = Date.from(zonedStartTime.withZoneSameLocal(ZoneId.of(partitionInfo.getZoneId())).toInstant());
|
Date systemStartTime = Date.from(zonedStartTime.withZoneSameLocal(ZoneId.of(partitionInfo.getZoneId())).toInstant());
|
||||||
|
String zoneDateTableName = DateTimeUtil.convertDate(systemStartTime, DateTimeUtil.DEFAULT_DATE_PATTERN_);
|
||||||
|
|
||||||
Date endTime = DateTimeUtil.getEndTimeOfDay(DateTimeUtil.convertStrToDate(endDate, DateTimeUtil.DEFAULT_DATE_PATTERN));
|
Date endTime = DateTimeUtil.getEndTimeOfDay(DateTimeUtil.convertStrToDate(endDate, DateTimeUtil.DEFAULT_DATE_PATTERN));
|
||||||
ZonedDateTime zonedEndTime = endTime.toInstant().atZone(ZoneId.systemDefault());
|
ZonedDateTime zonedEndTime = endTime.toInstant().atZone(ZoneId.systemDefault());
|
||||||
Date systemEndTime = Date.from(zonedEndTime.withZoneSameLocal(ZoneId.of(partitionInfo.getZoneId())).toInstant());
|
Date systemEndTime = Date.from(zonedEndTime.withZoneSameLocal(ZoneId.of(partitionInfo.getZoneId())).toInstant());
|
||||||
|
String systemDateTableName = DateTimeUtil.convertDate(systemEndTime, DateTimeUtil.DEFAULT_DATE_PATTERN_);
|
||||||
|
if (zoneDateTableName.equals(systemDateTableName)){
|
||||||
|
systemDateTableName = null;
|
||||||
|
}
|
||||||
|
|
||||||
List<Lucky24PlatformStat> list = null == poolType?
|
List<Lucky24PlatformStat> list = null == poolType?
|
||||||
recordMapper.listPlatform(endDate, partitionId, poolTypeList, systemStartTime, systemEndTime):
|
recordMapper.listPlatformManual(endDate, partitionId, poolTypeList, systemStartTime, systemEndTime, zoneDateTableName, systemDateTableName):
|
||||||
recordMapper.listPlatformByPoolType(endDate, partitionId, poolTypeList, systemStartTime, systemEndTime);
|
recordMapper.listPlatformByPoolTypeManual(endDate, partitionId, poolTypeList, systemStartTime, systemEndTime, zoneDateTableName, systemDateTableName);
|
||||||
for (Lucky24PlatformStat stat: list) {
|
for (Lucky24PlatformStat stat: list) {
|
||||||
statMap.put(stat.getDate(), stat);
|
statMap.put(stat.getDate(), stat);
|
||||||
}
|
}
|
||||||
|
@@ -69,18 +69,6 @@ public class ShardingSphereConfig {
|
|||||||
return ruleConfig;
|
return ruleConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*private ReadwriteSplittingRuleConfiguration getReadWriteRuleConfig() {
|
|
||||||
//同一事务下强制使用主库
|
|
||||||
ReadwriteSplittingDataSourceGroupRuleConfiguration dataSourceGroupConfig = new ReadwriteSplittingDataSourceGroupRuleConfiguration(
|
|
||||||
"ds", "ds", Arrays.asList("ds", "ds_slave"), TransactionalReadQueryStrategy.PRIMARY, "weight_lb");
|
|
||||||
Properties algorithmProps = new Properties();
|
|
||||||
algorithmProps.setProperty("ds_slave", "4");
|
|
||||||
algorithmProps.setProperty("ds", "1");
|
|
||||||
Map<String, AlgorithmConfiguration> algorithmConfigMap = new HashMap<>(1);
|
|
||||||
algorithmConfigMap.put("weight_lb", new AlgorithmConfiguration("WEIGHT", algorithmProps));
|
|
||||||
return new ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceGroupConfig), algorithmConfigMap);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
private ReadwriteSplittingRuleConfiguration getReadWriteRuleConfig() {
|
private ReadwriteSplittingRuleConfiguration getReadWriteRuleConfig() {
|
||||||
//同一事务下强制使用主库
|
//同一事务下强制使用主库
|
||||||
ReadwriteSplittingDataSourceGroupRuleConfiguration dataSourceGroupConfig = new ReadwriteSplittingDataSourceGroupRuleConfiguration(
|
ReadwriteSplittingDataSourceGroupRuleConfiguration dataSourceGroupConfig = new ReadwriteSplittingDataSourceGroupRuleConfiguration(
|
||||||
|
@@ -15,10 +15,20 @@ public interface Lucky24RecordMapper extends BaseMapper<Lucky24Record> {
|
|||||||
@Param("poolTypeList")List<Integer> poolTypeList,
|
@Param("poolTypeList")List<Integer> poolTypeList,
|
||||||
@Param("startTime") Date startTime, @Param("endTime") Date endTime);
|
@Param("startTime") Date startTime, @Param("endTime") Date endTime);
|
||||||
|
|
||||||
|
List<Lucky24PlatformStat> listPlatformManual(@Param("zoneDate")String zoneDate, @Param("partitionId") Integer partitionId,
|
||||||
|
@Param("poolTypeList")List<Integer> poolTypeList,
|
||||||
|
@Param("startTime") Date startTime, @Param("endTime") Date endTime,
|
||||||
|
@Param("zoneDateTableName") String zoneDateTableName, @Param("systemDateTableName") String systemDateTableName);
|
||||||
|
|
||||||
List<Lucky24PlatformStat> listPlatformByPoolType(@Param("zoneDate")String zonedDate, @Param("partitionId") Integer partitionId,
|
List<Lucky24PlatformStat> listPlatformByPoolType(@Param("zoneDate")String zonedDate, @Param("partitionId") Integer partitionId,
|
||||||
@Param("poolTypeList")List<Integer> poolTypeList,
|
@Param("poolTypeList")List<Integer> poolTypeList,
|
||||||
@Param("startTime") Date startTime, @Param("endTime") Date endTime);
|
@Param("startTime") Date startTime, @Param("endTime") Date endTime);
|
||||||
|
|
||||||
|
List<Lucky24PlatformStat> listPlatformByPoolTypeManual(@Param("zoneDate")String zonedDate, @Param("partitionId") Integer partitionId,
|
||||||
|
@Param("poolTypeList")List<Integer> poolTypeList,
|
||||||
|
@Param("startTime") Date startTime, @Param("endTime") Date endTime,
|
||||||
|
@Param("zoneDateTableName") String zoneDateTableName, @Param("systemDateTableName") String systemDateTableName);
|
||||||
|
|
||||||
List<Lucky24PersonalStat> listPersonal(@Param("zoneDate")String zoneDate, @Param("partitionId") Integer partitionId,
|
List<Lucky24PersonalStat> listPersonal(@Param("zoneDate")String zoneDate, @Param("partitionId") Integer partitionId,
|
||||||
@Param("poolTypeList")List<Integer> poolTypeList,
|
@Param("poolTypeList")List<Integer> poolTypeList,
|
||||||
@Param("startTime") Date startTime, @Param("endTime") Date endTime,
|
@Param("startTime") Date startTime, @Param("endTime") Date endTime,
|
||||||
|
@@ -28,6 +28,68 @@
|
|||||||
group by r.uid) r
|
group by r.uid) r
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="listPlatformManual" resultType="com.accompany.sharding.vo.Lucky24PlatformStat">
|
||||||
|
/* SHARDINGSPHERE_HINT: DATA_SOURCE_NAME=ds_slave, SKIP_SQL_REWRITE=true */
|
||||||
|
select #{zoneDate} as `date`,
|
||||||
|
#{partitionId} as partition_id,
|
||||||
|
0 as pool_type,
|
||||||
|
ifnull(sum(`totalInput`),0) `totalInput`,
|
||||||
|
ifnull(sum(`totalOutput`),0) `totalOutput`,
|
||||||
|
ifnull(sum(`totalOutput`) / sum(`totalInput`),0) `productionRatio`,
|
||||||
|
count(distinct r.uid) `count`,
|
||||||
|
count(distinct (IF(`maxOutput` > 0, r.uid, null))) `winCount`,
|
||||||
|
ifnull(sum(`num`),0) `num`,
|
||||||
|
ifnull(sum(`winNum`),0) `winNum`,
|
||||||
|
ifnull(sum(`winNum`) / sum(`num`),0) `winRate`
|
||||||
|
from (
|
||||||
|
<choose>
|
||||||
|
<when test="systemDateTableName != null and systemDateTableName != ''">
|
||||||
|
select
|
||||||
|
r.uid,
|
||||||
|
sum(gift_num * gift_gold_price) `totalInput`,
|
||||||
|
sum(win_gold_num) `totalOutput`,
|
||||||
|
count(*) `num`,
|
||||||
|
count((case when win_gold_num > 0 then 1 end)) `winNum`,
|
||||||
|
max(win_gold_num) `maxOutput`
|
||||||
|
from `lucky_24_record_${zoneDateTableName}` r force index (lucky_24_record_partition_id_pool_type_create_time_uid_index)
|
||||||
|
where r.partition_id = #{partitionId}
|
||||||
|
and r.pool_type in <foreach collection="poolTypeList" item="poolType" separator="," open="(" close=")">#{poolType}</foreach>
|
||||||
|
and r.create_time >= #{startTime}
|
||||||
|
group by r.uid
|
||||||
|
|
||||||
|
union all
|
||||||
|
|
||||||
|
select
|
||||||
|
r.uid,
|
||||||
|
sum(gift_num * gift_gold_price) `totalInput`,
|
||||||
|
sum(win_gold_num) `totalOutput`,
|
||||||
|
count(*) `num`,
|
||||||
|
count((case when win_gold_num > 0 then 1 end)) `winNum`,
|
||||||
|
max(win_gold_num) `maxOutput`
|
||||||
|
from `lucky_24_record_${systemDateTableName}` r force index (lucky_24_record_partition_id_pool_type_create_time_uid_index)
|
||||||
|
where r.partition_id = #{partitionId}
|
||||||
|
and r.pool_type in <foreach collection="poolTypeList" item="poolType" separator="," open="(" close=")">#{poolType}</foreach>
|
||||||
|
and r.create_time <= #{endTime}
|
||||||
|
group by r.uid
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
|
select
|
||||||
|
r.uid,
|
||||||
|
sum(gift_num * gift_gold_price) `totalInput`,
|
||||||
|
sum(win_gold_num) `totalOutput`,
|
||||||
|
count(*) `num`,
|
||||||
|
count((case when win_gold_num > 0 then 1 end)) `winNum`,
|
||||||
|
max(win_gold_num) `maxOutput`
|
||||||
|
from `lucky_24_record_${zoneDateTableName}` r force index (lucky_24_record_partition_id_pool_type_create_time_uid_index)
|
||||||
|
where r.partition_id = #{partitionId}
|
||||||
|
and r.pool_type in <foreach collection="poolTypeList" item="poolType" separator="," open="(" close=")">#{poolType}</foreach>
|
||||||
|
and r.create_time between #{startTime} and #{endTime}
|
||||||
|
group by r.uid
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
|
) r
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="listPlatformByPoolType" resultType="com.accompany.sharding.vo.Lucky24PlatformStat">
|
<select id="listPlatformByPoolType" resultType="com.accompany.sharding.vo.Lucky24PlatformStat">
|
||||||
select #{zoneDate} as `date`,
|
select #{zoneDate} as `date`,
|
||||||
#{partitionId} as partition_id,
|
#{partitionId} as partition_id,
|
||||||
@@ -57,6 +119,72 @@
|
|||||||
group by r.pool_type
|
group by r.pool_type
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="listPlatformByPoolTypeManual" resultType="com.accompany.sharding.vo.Lucky24PlatformStat">
|
||||||
|
/* SHARDINGSPHERE_HINT: DATA_SOURCE_NAME=ds_slave, SKIP_SQL_REWRITE=true */
|
||||||
|
select #{zoneDate} as `date`,
|
||||||
|
#{partitionId} as partition_id,
|
||||||
|
pool_type,
|
||||||
|
ifnull(sum(`totalInput`),0) `totalInput`,
|
||||||
|
ifnull(sum(`totalOutput`),0) `totalOutput`,
|
||||||
|
ifnull(sum(`totalOutput`) / sum(`totalInput`),0) `productionRatio`,
|
||||||
|
count(distinct r.uid) `count`,
|
||||||
|
count(distinct (IF(`maxOutput` > 0, r.uid, null))) `winCount`,
|
||||||
|
ifnull(sum(`num`),0) `num`,
|
||||||
|
ifnull(sum(`winNum`),0) `winNum`,
|
||||||
|
ifnull(sum(`winNum`) / sum(`num`),0) `winRate`
|
||||||
|
from (
|
||||||
|
<choose>
|
||||||
|
<when test="systemDateTableName != null and systemDateTableName != ''">
|
||||||
|
select
|
||||||
|
r.pool_type,
|
||||||
|
r.uid,
|
||||||
|
sum(gift_num * gift_gold_price) `totalInput`,
|
||||||
|
sum(win_gold_num) `totalOutput`,
|
||||||
|
count(*) `num`,
|
||||||
|
count((case when win_gold_num > 0 then 1 end)) `winNum`,
|
||||||
|
max(win_gold_num) `maxOutput`
|
||||||
|
from `lucky_24_record_${zoneDateTableName}` r force index (lucky_24_record_partition_id_pool_type_create_time_uid_index)
|
||||||
|
where r.partition_id = #{partitionId}
|
||||||
|
and r.pool_type in <foreach collection="poolTypeList" item="poolType" separator="," open="(" close=")">#{poolType}</foreach>
|
||||||
|
and r.create_time >= #{startTime}
|
||||||
|
group by r.pool_type, r.uid
|
||||||
|
|
||||||
|
union all
|
||||||
|
|
||||||
|
select
|
||||||
|
r.pool_type,
|
||||||
|
r.uid,
|
||||||
|
sum(gift_num * gift_gold_price) `totalInput`,
|
||||||
|
sum(win_gold_num) `totalOutput`,
|
||||||
|
count(*) `num`,
|
||||||
|
count((case when win_gold_num > 0 then 1 end)) `winNum`,
|
||||||
|
max(win_gold_num) `maxOutput`
|
||||||
|
from `lucky_24_record_${systemDateTableName}` r force index (lucky_24_record_partition_id_pool_type_create_time_uid_index)
|
||||||
|
where r.partition_id = #{partitionId}
|
||||||
|
and r.pool_type in <foreach collection="poolTypeList" item="poolType" separator="," open="(" close=")">#{poolType}</foreach>
|
||||||
|
and r.create_time <= #{endTime}
|
||||||
|
group by r.pool_type, r.uid
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
|
select
|
||||||
|
r.pool_type,
|
||||||
|
r.uid,
|
||||||
|
sum(gift_num * gift_gold_price) `totalInput`,
|
||||||
|
sum(win_gold_num) `totalOutput`,
|
||||||
|
count(*) `num`,
|
||||||
|
count((case when win_gold_num > 0 then 1 end)) `winNum`,
|
||||||
|
max(win_gold_num) `maxOutput`
|
||||||
|
from `lucky_24_record_${zoneDateTableName}` r force index (lucky_24_record_partition_id_pool_type_create_time_uid_index)
|
||||||
|
where r.partition_id = #{partitionId}
|
||||||
|
and r.pool_type in <foreach collection="poolTypeList" item="poolType" separator="," open="(" close=")">#{poolType}</foreach>
|
||||||
|
and r.create_time between #{startTime} and #{endTime}
|
||||||
|
group by r.pool_type, r.uid
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
|
) r
|
||||||
|
group by r.pool_type
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="listPersonal" resultType="com.accompany.sharding.vo.Lucky24PersonalStat">
|
<select id="listPersonal" resultType="com.accompany.sharding.vo.Lucky24PersonalStat">
|
||||||
select #{zoneDate} as `date`,
|
select #{zoneDate} as `date`,
|
||||||
#{partitionId} as partition_id,
|
#{partitionId} as partition_id,
|
||||||
|
@@ -78,7 +78,13 @@ public class Lucky24RecordService extends ServiceImpl<Lucky24RecordMapper, Lucky
|
|||||||
public void statDate(Integer partitionId, Date startTime, Date endTime, long zoneIdHour, String zoneDate) {
|
public void statDate(Integer partitionId, Date startTime, Date endTime, long zoneIdHour, String zoneDate) {
|
||||||
List<Integer> poolTypeList = Arrays.stream(Lucky24PoolTypeEnum.values()).map(Lucky24PoolTypeEnum::getType).sorted().toList();
|
List<Integer> poolTypeList = Arrays.stream(Lucky24PoolTypeEnum.values()).map(Lucky24PoolTypeEnum::getType).sorted().toList();
|
||||||
|
|
||||||
List<Lucky24PlatformStat> platformList = this.baseMapper.listPlatform(zoneDate, partitionId, poolTypeList, startTime, endTime);
|
String zoneDateTableName = DateTimeUtil.convertDate(startTime, DateTimeUtil.DEFAULT_DATE_PATTERN_);
|
||||||
|
String systemDateTableName = DateTimeUtil.convertDate(endTime, DateTimeUtil.DEFAULT_DATE_PATTERN_);
|
||||||
|
if (zoneDateTableName.equals(systemDateTableName)){
|
||||||
|
systemDateTableName = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Lucky24PlatformStat> platformList = this.baseMapper.listPlatformManual(zoneDate, partitionId, poolTypeList, startTime, endTime, zoneDateTableName, systemDateTableName);
|
||||||
log.info("[lucky24RecordStat] platform partitionId {} startTime {} endTime {} zoneIdHour {} platformList: {}",
|
log.info("[lucky24RecordStat] platform partitionId {} startTime {} endTime {} zoneIdHour {} platformList: {}",
|
||||||
partitionId, DateTimeUtil.convertDate(startTime, DateTimeUtil.DEFAULT_DATETIME_PATTERN),
|
partitionId, DateTimeUtil.convertDate(startTime, DateTimeUtil.DEFAULT_DATETIME_PATTERN),
|
||||||
DateTimeUtil.convertDate(endTime, DateTimeUtil.DEFAULT_DATETIME_PATTERN), zoneIdHour, JSON.toJSONString(platformList));
|
DateTimeUtil.convertDate(endTime, DateTimeUtil.DEFAULT_DATETIME_PATTERN), zoneIdHour, JSON.toJSONString(platformList));
|
||||||
@@ -90,7 +96,7 @@ public class Lucky24RecordService extends ServiceImpl<Lucky24RecordMapper, Lucky
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Lucky24PlatformStat> platformByPoolTypeList = this.baseMapper.listPlatformByPoolType(zoneDate, partitionId, poolTypeList, startTime, endTime);
|
List<Lucky24PlatformStat> platformByPoolTypeList = this.baseMapper.listPlatformByPoolTypeManual(zoneDate, partitionId, poolTypeList, startTime, endTime, zoneDateTableName, systemDateTableName);
|
||||||
log.info("[lucky24RecordStat] platformByPoolType partitionId {} startTime {} endTime {} zoneIdHour {} platformByPoolTypeList: {}",
|
log.info("[lucky24RecordStat] platformByPoolType partitionId {} startTime {} endTime {} zoneIdHour {} platformByPoolTypeList: {}",
|
||||||
partitionId, DateTimeUtil.convertDate(startTime, DateTimeUtil.DEFAULT_DATETIME_PATTERN),
|
partitionId, DateTimeUtil.convertDate(startTime, DateTimeUtil.DEFAULT_DATETIME_PATTERN),
|
||||||
DateTimeUtil.convertDate(endTime, DateTimeUtil.DEFAULT_DATETIME_PATTERN), zoneIdHour, JSON.toJSONString(platformByPoolTypeList));
|
DateTimeUtil.convertDate(endTime, DateTimeUtil.DEFAULT_DATETIME_PATTERN), zoneIdHour, JSON.toJSONString(platformByPoolTypeList));
|
||||||
|
Reference in New Issue
Block a user