土耳其新政策-钻石流水-有效时长bug

This commit is contained in:
2025-08-15 13:07:46 +08:00
parent 1a63f55631
commit ea8c24740d
7 changed files with 74 additions and 16 deletions

View File

@@ -34,7 +34,7 @@ public interface GuildDiamondStatisticsPolicy2Mapper extends BaseMapper<GuildDia
List<GuildPolicy2MemberVo> listMemberData(@Param("cycleDate")String cycleDate, @Param("guildId")Integer guildId);
List<GuildPolicy2PersonalVo> listPersonalData(@Param("cycleDate")String cycleDate, @Param("guildMemberId")Long guildMemberId);
List<GuildPolicy2PersonalVo> listPersonalDiamondData(@Param("cycleDate")String cycleDate, @Param("guildMemberId")Long guildMemberId);
IPage<GuildMemberDiamondStatisticsDayVo> listMemberByStatDate(@Param("ipage") IPage<GuildMemberDiamondStatisticsDayVo> ipage,
@Param("startDate")String startDate, @Param("endDate")String endDate,

View File

@@ -2,6 +2,7 @@ package com.accompany.business.mybatismapper.guildpolicy2;
import com.accompany.business.model.guildpolicy2.GuildMicStatisticsPolicy2;
import com.accompany.business.vo.guildpolicy.GuildMemberMicDayVo;
import com.accompany.business.vo.guildpolicy.GuildPolicy2PersonalVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
@@ -26,4 +27,6 @@ public interface GuildMicStatisticsPolicy2Mapper extends BaseMapper<GuildMicStat
List<GuildMemberMicDayVo> groupByStatDate(@Param("statDate")String statDate, @Param("endDate")String endDate,
@Param("partitionId") Integer partitionId, @Param("guildMemberId") Long guildMemberId);
List<GuildPolicy2PersonalVo> listPersonalMicData(@Param("cycleDate")String cycleDate, @Param("guildMemberId")Long guildMemberId);
}

View File

@@ -44,8 +44,8 @@ public class GuildDiamondStatisticsPolicy2Service extends ServiceImpl<GuildDiamo
return baseMapper.listMemberData(cycleDate, guildId);
}
public List<GuildPolicy2PersonalVo> listPersonalData(String cycleDate, Long guildMemberId) {
return baseMapper.listPersonalData(cycleDate, guildMemberId);
public List<GuildPolicy2PersonalVo> listPersonalDiamondData(String cycleDate, Long guildMemberId) {
return baseMapper.listPersonalDiamondData(cycleDate, guildMemberId);
}
public IPage<GuildMemberDiamondStatisticsDayVo> listMemberByStatDate(String statDate, String endDate,

View File

@@ -4,6 +4,7 @@ import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.model.guildpolicy2.GuildMicStatisticsPolicy2;
import com.accompany.business.mybatismapper.guildpolicy2.GuildMicStatisticsPolicy2Mapper;
import com.accompany.business.vo.guildpolicy.GuildMemberMicDayVo;
import com.accompany.business.vo.guildpolicy.GuildPolicy2PersonalVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
@@ -50,4 +51,8 @@ public class GuildMicStatisticsPolicy2Service extends ServiceImpl<GuildMicStatis
public List<GuildMemberMicDayVo> listByStatDate(String statDate, String endDate, int partitionId, Long guildMemberId) {
return baseMapper.groupByStatDate(statDate, endDate, partitionId, guildMemberId);
}
public List<GuildPolicy2PersonalVo> listPersonalMicData(String cycleDate, Long guildMemberId) {
return baseMapper.listPersonalMicData(cycleDate, guildMemberId);
}
}

View File

@@ -34,6 +34,7 @@ import java.time.ZonedDateTime;
import java.util.*;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.accompany.common.constant.Constant.ClanMode.GUILD_POLICY2;
@@ -77,7 +78,10 @@ public class GuildPolicy2Service {
guildPolicy2Vo.setDiamondNum(guildDiamondStatisticsPolicy2Service.getTotalDiamondInCycleMember(cycleBeginDate, guildMemberId));
List<GuildPolicy2PersonalVo> myData = guildDiamondStatisticsPolicy2Service.listPersonalData(cycleBeginDate, guildMemberId);
List<GuildPolicy2PersonalVo> myDiamondData = guildDiamondStatisticsPolicy2Service.listPersonalDiamondData(cycleBeginDate, guildMemberId);
List<GuildPolicy2PersonalVo> myMicData = guildMicStatisticsPolicy2Service.listPersonalMicData(cycleBeginDate, guildMemberId);
List<GuildPolicy2PersonalVo> myData = mergeMyDataLists(myDiamondData, myMicData);
if (CollectionUtils.isNotEmpty(myData)) {
guildPolicy2Vo.setMicDay(myData.stream().collect(Collectors.summingInt(GuildPolicy2PersonalVo::getMicDay)));
@@ -93,6 +97,31 @@ public class GuildPolicy2Service {
return BusiResult.success(guildPolicy2Vo);
}
public List<GuildPolicy2PersonalVo> mergeMyDataLists(List<GuildPolicy2PersonalVo> list1, List<GuildPolicy2PersonalVo> list2) {
// 处理空列表情况
if (list1 == null || list1.isEmpty()) return list2 != null ? list2 : new ArrayList<>();
if (list2 == null || list2.isEmpty()) return list1;
// 合并两个列表并按statDate分组
Map<String, GuildPolicy2PersonalVo> mergedMap = Stream.concat(list1.stream(), list2.stream())
.collect(Collectors.toMap(
GuildPolicy2PersonalVo::getStatDate,
vo -> vo,
(vo1, vo2) -> {
// 合并相同statDate的对象
GuildPolicy2PersonalVo merged = new GuildPolicy2PersonalVo();
merged.setStatDate(vo1.getStatDate());
merged.setDiamondNum(vo1.getDiamondNum().add(vo2.getDiamondNum()));
merged.setMicMinute(vo1.getMicMinute() + vo2.getMicMinute());
merged.setMicDay(vo1.getMicDay() + vo2.getMicDay());
merged.setValidMicDay(vo1.getValidMicDay() || vo2.getValidMicDay());
return merged;
}
));
return new ArrayList<>(mergedMap.values());
}
private void fillAllDayOfMonth(GuildPolicy2Vo guildPolicy2Vo, List<GuildPolicy2PersonalVo> myData, String cycleBeginDate, PartitionEnum partitionEnum) {
List<GuildPolicy2PersonalVo> resultMyDate = new ArrayList<>();
ZonedDateTime nowZoneDateTime = DateTimeUtil.convertWithZoneId(new Date(), partitionEnum.getZoneId());

View File

@@ -35,26 +35,32 @@
u.avatar as avatar,
u.uid as uid,
ifnull(sum(gdsp.diamond_num), 0) as diamondNum,
COUNT(DISTINCT CASE WHEN gmp.mic_minutes >= 120 THEN gdsp.stat_date END) AS micDay
gmp.micDay micDay
from guild_member gm
left join `guild_diamond_statistics_policy2` gdsp on gm.id = gdsp.guild_member_id and gdsp.cycle_date = #{cycleDate}
left join guild_mic_statistics_policy2 gmp on gmp.guild_member_id = gm.id and gmp.cycle_date = #{cycleDate}
left join users u on u.uid = gm.uid
left join
(select guild_member_id, sum(diamond_num) diamond_num
from guild_diamond_statistics_policy2
where cycle_date = #{cycleDate}
GROUP BY guild_member_id) gdsp on gm.id = gdsp.guild_member_id
left join
(select guild_member_id, COUNT(DISTINCT CASE WHEN mic_minutes >= 120 THEN stat_date END) micDay
from guild_mic_statistics_policy2
where cycle_date = #{cycleDate} GROUP BY guild_member_id) gmp on gmp.guild_member_id = gm.id
left join users u on u.uid = gm.uid
where gm.guild_id = #{guildId}
and gm.`enable` = 1
group by u.uid
and gm.`enable` = 1
group by gm.uid
</select>
<select id="listPersonalData" resultType="com.accompany.business.vo.guildpolicy.GuildPolicy2PersonalVo">
<select id="listPersonalDiamondData" resultType="com.accompany.business.vo.guildpolicy.GuildPolicy2PersonalVo">
select
gdsp.stat_date as statDate,
ifnull(gdsp.diamond_num, 0) as diamondNum,
ifnull(gmp.mic_minutes, 0) as micMinute,
if(gmp.mic_minutes >= 120, 1, 0) micDay,
if(gmp.mic_minutes >= 120, 1, 0) as validMicDay
0 as micMinute,
0 micDay,
0 validMicDay
from `guild_diamond_statistics_policy2` gdsp
left join guild_mic_statistics_policy2 gmp on gmp.guild_member_id = gdsp.guild_member_id and gmp.stat_date = gdsp.stat_date and gmp.cycle_date = #{cycleDate}
left join guild_member gm on gm.id = gdsp.guild_member_id and gdsp.cycle_date = #{cycleDate}
left join guild_member gm on gm.id = gdsp.guild_member_id
where gdsp.cycle_date = #{cycleDate}
and gdsp.guild_member_id = #{guildMemberId}
and gm.`enable` = 1

View File

@@ -38,4 +38,19 @@
group by stat_date,guild_member_id
</select>
<select id="listPersonalMicData" resultType="com.accompany.business.vo.guildpolicy.GuildPolicy2PersonalVo">
select
gmp.stat_date as statDate,
0 as diamondNum,
ifnull(gmp.mic_minutes, 0) as micMinute,
if(gmp.mic_minutes >= 120, 1, 0) micDay,
if(gmp.mic_minutes >= 120, 1, 0) as validMicDay
from `guild_mic_statistics_policy2` gmp
left join guild_member gm on gm.id = gmp.guild_member_id
where gmp.cycle_date = #{cycleDate}
and gmp.guild_member_id = #{guildMemberId}
and gm.`enable` = 1
group by gmp.stat_date
</select>
</mapper>