家族-上麦时长-使用FamilyMemberId代替uid进行索引

This commit is contained in:
2025-09-22 16:45:44 +08:00
parent 9b0560fbc8
commit 963912b36b
12 changed files with 36 additions and 47 deletions

View File

@@ -14,11 +14,9 @@ import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.model.PartitionInfo;
import com.accompany.core.model.Users;
import com.accompany.core.service.partition.PartitionInfoService;
import com.accompany.core.service.region.RegionInfoService;
import com.accompany.sharding.model.FamilyMemberRoomMicRecord;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -91,15 +89,16 @@ public class FamilyIncomeAdminService {
if (CollectionUtils.isEmpty(voList)) {
return page;
}
List<Long> uidList = voList.stream().map(FamilyMemberIncomeAdminVo::getUid).distinct().collect(Collectors.toList());
List<Long> familyMemberIdList = voList.stream().map(FamilyMemberIncomeAdminVo::getFamilyMemberId).distinct().toList();
Map<Long, Long> micUpTimeMap = new HashMap<>();
List<FamilyMemberRoomMicRecord> micRemainTimeList = familyMemberRoomMicRecordService.listTotalRemainTimeGroupByFamilyMember(startDate, endDate, uidList, familyId);
List<FamilyMemberRoomMicRecord> micRemainTimeList = familyMemberRoomMicRecordService.listTotalRemainTimeGroupByFamilyMember(startDate, endDate, familyMemberIdList);
for (FamilyMemberRoomMicRecord record: micRemainTimeList){
micUpTimeMap.put(record.getUid(), record.getRemainTime());
micUpTimeMap.put(record.getFamilyMemberId(), record.getRemainTime());
}
for (FamilyMemberIncomeAdminVo vo: voList){
Long micRemainTime = micUpTimeMap.getOrDefault(vo.getUid(), 0L);
Long micRemainTime = micUpTimeMap.getOrDefault(vo.getFamilyMemberId(), 0L);
vo.setMicRemainTime(!exportFormatter? DateTimeUtil.getTimeFormat(micRemainTime.intValue()): micRemainTime.toString());
}

View File

@@ -12,7 +12,6 @@ import com.accompany.business.event.FamilyMemberStatusChangeEvent;
import com.accompany.business.event.NewGuildEvent;
import com.accompany.business.message.NewGuildMessage;
import com.accompany.business.model.family.*;
import com.accompany.business.model.guild.Guild;
import com.accompany.business.service.UploadAvatarService;
import com.accompany.business.service.family.*;
import com.accompany.business.service.room.FamilyMemberRoomMicRecordService;
@@ -405,7 +404,7 @@ public class FamilyManageAdminService {
Map<String, Long> micUpTimeMap = new HashMap<>();
if (StringUtils.isNotBlank(startDate) || StringUtils.isNotBlank(endDate)){
List<FamilyMemberRoomMicRecord> micRemainTimeList = familyMemberRoomMicRecordService.listTotalRemainTimeGroupByFamilyMember(startDate, endDate, uids, null);
List<FamilyMemberRoomMicRecord> micRemainTimeList = familyMemberRoomMicRecordService.listTotalRemainTimeGroupByFamilyMember(startDate, endDate, uids);
for (FamilyMemberRoomMicRecord record: micRemainTimeList){
String id = record.getUid() + "_" + record.getFamilyId();
micUpTimeMap.put(id, record.getRemainTime());

View File

@@ -187,7 +187,7 @@ public class FamilyWageStatAdminService {
}
Map<Long, Long> micUpTimeMap = new HashMap<>();
List<FamilyMemberRoomMicRecord> micRemainTimeList = familyMemberRoomMicRecordService.listTotalRemainTimeGroupByFamilyMember(monthStartStr, monthEndStr, uidList, familyId);
List<FamilyMemberRoomMicRecord> micRemainTimeList = familyMemberRoomMicRecordService.listTotalRemainTimeGroupByFamilyMember(monthStartStr, monthEndStr, uidList);
for (FamilyMemberRoomMicRecord record: micRemainTimeList){
micUpTimeMap.put(record.getUid(), record.getRemainTime());
}
@@ -276,7 +276,7 @@ public class FamilyWageStatAdminService {
}
Map<String, Double> diamondRemainMap = new HashMap<>();
List<FamilyUserIncomeItemVo> diamondRemainList = familyMemberGoldRemainDayRecordService.listTotalGoldRemainGroupByDate(monthStartStr, monthEndStr, uid, familyId);
List<FamilyUserIncomeItemVo> diamondRemainList = familyMemberGoldRemainDayRecordService.listTotalGoldRemainGroupByDate(monthStartStr, monthEndStr, familyMember.getId());
for (FamilyUserIncomeItemVo record: diamondRemainList) {
diamondRemainMap.put(record.getDate(), record.getDiamondRemain());
}
@@ -286,7 +286,7 @@ public class FamilyWageStatAdminService {
diamondRemainMap.put(today, up.getDiamonds());
}
Map<String, Long> micRemainTimeMap = familyMemberRoomMicRecordService.mapTotalRemainTimeGroupByDate(monthStart, monthEnd, uid, familyId);
Map<String, Long> micRemainTimeMap = familyMemberRoomMicRecordService.mapTotalRemainTimeGroupByDate(monthStart, monthEnd, familyMember.getId());
BigDecimal savedGoldIncome = BigDecimal.ZERO;
List<FamilyMemberDailyWageStatAdminVo> voList = new ArrayList<>();
@@ -320,7 +320,7 @@ public class FamilyWageStatAdminService {
Long micRemainTime = micRemainTimeMap.getOrDefault(date, 0L);
vo.setMicRemainTime(!exportFormatter? DateTimeUtil.getTimeFormat(micRemainTime.intValue()): micRemainTime.toString());
//判断是否大于小时
//判断是否大于小时
vo.setMicVaild(micRemainTime >= FamilyConstant.MIC_VAILD_SECONDS);
voList.add(vo);

View File

@@ -14,20 +14,17 @@ public interface FamilyMemberRoomMicRecordMapper extends BaseMapper<FamilyMember
@Param("startTime") Date startTime,
@Param("endTime") Date endTime,
@Param("downTime") Date downTime,
@Param("uidList") List<Long> uidList,
@Param("familyId") Integer familyId);
@Param("familyMemberIdList") List<Long> familyMemberIdList);
List<FamilyMemberMicRemainTimeVo> listTotalRemainTimeByDateWithOutOverDate(@Param("startTime") Date startTime,
@Param("endTime") Date endTime,
@Param("uid") Long uid,
@Param("familyId") Integer familyId);
@Param("familyMemberId") Long familyMemberId);
List<FamilyMemberMicRemainTimeVo> listTotalRemainTimeByDateOverDate(@Param("upTime") Date upTime,
@Param("startTime") Date startTime,
@Param("endTime") Date endTime,
@Param("downTime") Date downTime,
@Param("uid") Long uid,
@Param("familyId") Integer familyId);
@Param("familyMemberId") Long familyMemberId);
List<FamilyMemberMicRemainTimeVo> listTotalRemainTimeByUidAndDateWithOutOverDate(@Param("startTime") Date startTime,
@Param("endTime") Date endTime,

View File

@@ -26,10 +26,7 @@
<if test="downTime != null">
and r.down_time &lt;= #{downTime}
</if>
and uid in <foreach collection="uidList" item="uid" separator="," open="(" close=")">#{uid}</foreach>
<if test="familyId != null">
and family_id = #{familyId}
</if>
and family_member_id in <foreach collection="familyMemberIdList" item="uid" separator="," open="(" close=")">#{uid}</foreach>
group by uid, family_id
</select>
@@ -39,7 +36,7 @@
sum(remain_time / 1000) remain_time
from family_member_room_mic_record r
where r.up_time between #{startTime} and #{endTime}
and family_id = #{familyId} and uid = #{uid}
and family_member_id = #{familyMemberId}
and datediff(down_time, up_time) = 0
group by `date`
</select>
@@ -52,7 +49,7 @@
and up_time &lt;= #{endTime}
and down_time &gt;= #{startTime}
and down_time &lt;= #{downTime}
and family_id = #{familyId} and uid = #{uid}
and family_member_id = #{familyMemberId}
and datediff(down_time, up_time) > 0
</select>

View File

@@ -99,6 +99,6 @@ public class FamilyConstant {
/**
*
* */
public static final long MIC_VAILD_SECONDS = 2 * 60 * 60L;
public static final long MIC_VAILD_SECONDS = 1 * 60 * 60L;
}

View File

@@ -19,7 +19,7 @@ public interface FamilyMemberGoldRemainDayRecordMapper extends BaseMapper<Family
@Param("uid") Long uid, @Param("familyId") Integer familyId);
List<FamilyUserIncomeItemVo> listTotalGoldRemainGroupByDate(@Param("startDate") String startDate, @Param("endDate") String endDate,
@Param("uid") Long uid, @Param("familyId") Integer familyId);
@Param("familyMemberId") Long familyMemberId);
List<FamilyMemberGoldRemainDayRecord> listGoldRemainGroupByFamily(@Param("familyIdList") List<Integer> familyIdList);

View File

@@ -83,7 +83,7 @@ public class FamilyIncomeService {
String curCycleDate = HalfMonthCycleTimeUtil.getCycleDate(zdt);
vo.setCurCycleDate(cycleDateVoList.stream().filter(cycleDateVo -> cycleDateVo.getCycleDate().equals(curCycleDate)).findAny().get());
FamilyMemberDailyIncomeVo dailyIncomeVo = getFamilyMemberDailyIncomeVo(familyMember.getId(), familyId, uid, startDate, startTime, endDate, endTime);
FamilyMemberDailyIncomeVo dailyIncomeVo = getFamilyMemberDailyIncomeVo(familyMember.getId(), startDate, startTime, endDate, endTime);
vo.setDailyIncome(dailyIncomeVo);
if (FamilyConstant.RoleType.OWNER.equals(familyMember.getRoleType())) {
@@ -94,7 +94,7 @@ public class FamilyIncomeService {
return vo;
}
private FamilyMemberDailyIncomeVo getFamilyMemberDailyIncomeVo(Long familyMemberId, Integer familyId, Long uid,
private FamilyMemberDailyIncomeVo getFamilyMemberDailyIncomeVo(Long familyMemberId,
String startDate, Date startTime,
String endDate, Date endTime) {
FamilyMemberDailyIncomeVo vo = new FamilyMemberDailyIncomeVo();
@@ -107,8 +107,7 @@ public class FamilyIncomeService {
goldIncomeMap.put(item.getDate(), item.getGoldIncome());
}
Map<String, Long> micRemainTimeMap = familyMemberRoomMicRecordService.mapTotalRemainTimeGroupByDate(startTime, endTime,
uid, familyId);
Map<String, Long> micRemainTimeMap = familyMemberRoomMicRecordService.mapTotalRemainTimeGroupByDate(startTime, endTime, familyMemberId);
List<FamilyMemberDailyIncomeItemVo> dailyList = new ArrayList<>();
vo.setDailyIncomeList(dailyList);
@@ -159,9 +158,9 @@ public class FamilyIncomeService {
String endTimeStr = DateTimeUtil.convertDate(endTime, DateTimeUtil.DEFAULT_DATETIME_PATTERN);
Map<Long, Long> micRemainTimeMap = new HashMap<>();
List<FamilyMemberRoomMicRecord> micRemainTimeList = familyMemberRoomMicRecordService.listTotalRemainTimeGroupByFamilyMember(startTimeStr, endTimeStr, uidList, familyId);
List<FamilyMemberRoomMicRecord> micRemainTimeList = familyMemberRoomMicRecordService.listTotalRemainTimeGroupByFamilyMember(startTimeStr, endTimeStr, familyMemberIdList);
for (FamilyMemberRoomMicRecord item: micRemainTimeList){
micRemainTimeMap.put(item.getUid(), item.getRemainTime());
micRemainTimeMap.put(item.getFamilyMemberId(), item.getRemainTime());
}
for (FamilyMember item: familyMemberList){

View File

@@ -128,7 +128,7 @@ public class FamilyMemberGoldRemainDayRecordService extends ServiceImpl<FamilyMe
return null;
}
public List<FamilyUserIncomeItemVo> listTotalGoldRemainGroupByDate(String startDate, String endDate, Long uid, Integer familyId) {
return this.baseMapper.listTotalGoldRemainGroupByDate(startDate, endDate, uid, familyId);
public List<FamilyUserIncomeItemVo> listTotalGoldRemainGroupByDate(String startDate, String endDate, Long familyMemberId) {
return this.baseMapper.listTotalGoldRemainGroupByDate(startDate, endDate, familyMemberId);
}
}

View File

@@ -59,7 +59,7 @@ public class FamilyMemberRoomMicRecordService extends ServiceImpl<FamilyMemberRo
JSONArray keysJsonArray = new JSONArray(micQueueParam.getKeys());
for(int i = 0; i < keysJsonArray.length(); i++){
int pos = keysJsonArray.getInt(i);
record(qEvent, timestamp, uid, familyMember.getFamilyId(), roomUid, roomId, pos);
record(qEvent, timestamp, familyMember.getId(), uid, familyMember.getFamilyId(), roomUid, roomId, pos);
}
return;
@@ -80,11 +80,11 @@ public class FamilyMemberRoomMicRecordService extends ServiceImpl<FamilyMemberRo
continue;
}
record(qEvent, timestamp, uid, familyMember.getFamilyId(), roomUid, roomId, pos);
record(qEvent, timestamp, familyMember.getId(), uid, familyMember.getFamilyId(), roomUid, roomId, pos);
}
}
public void record(Integer qEvent, Long timestamp, Long uid, Integer familyId, Long roomUid, Long roomId, Integer pos){
public void record(Integer qEvent, Long timestamp, Long familyMemberId, Long uid, Integer familyId, Long roomUid, Long roomId, Integer pos){
RSet<Long> micSet = redissonClient.getSet(RedisKey.family_member_room_mic_record.getKey(uid.toString(), roomId.toString(), pos.toString()));
if (isUpMicAction(qEvent)) {
micSet.add(timestamp);
@@ -119,6 +119,7 @@ public class FamilyMemberRoomMicRecordService extends ServiceImpl<FamilyMemberRo
//save
FamilyMemberRoomMicRecord record = new FamilyMemberRoomMicRecord();
record.setFamilyMemberId(familyMemberId);
record.setUid(uid);
record.setFamilyId(familyId);
record.setRoomUid(roomUid);
@@ -144,7 +145,7 @@ public class FamilyMemberRoomMicRecordService extends ServiceImpl<FamilyMemberRo
}
public List<FamilyMemberRoomMicRecord> listTotalRemainTimeGroupByFamilyMember(String startDate, String endDate,
List<Long> uidList, Integer familyId) {
List<Long> familyMemberIdList) {
Date upTime = null;
Date startTime = null;
if (StringUtils.isNotBlank(startDate)){
@@ -159,15 +160,14 @@ public class FamilyMemberRoomMicRecordService extends ServiceImpl<FamilyMemberRo
downTime = DateTimeUtil.addDays(endTime, 1);
}
return this.baseMapper.listTotalRemainTimeByFamilyMember(upTime, startTime, endTime, downTime, uidList, familyId);
return this.baseMapper.listTotalRemainTimeByFamilyMember(upTime, startTime, endTime, downTime, familyMemberIdList);
}
public Map<String, Long> mapTotalRemainTimeGroupByDate(Date startTime, Date endTime,
Long uid, Integer familyId) {
public Map<String, Long> mapTotalRemainTimeGroupByDate(Date startTime, Date endTime, Long familyMemberId) {
Map<String, Long> map = new HashMap<>();
List<FamilyMemberMicRemainTimeVo> withoutOverDateList =
this.baseMapper.listTotalRemainTimeByDateWithOutOverDate(startTime, endTime, uid, familyId);
this.baseMapper.listTotalRemainTimeByDateWithOutOverDate(startTime, endTime, familyMemberId);
for (FamilyMemberMicRemainTimeVo po: withoutOverDateList){
map.put(po.getDate(), po.getRemainTime());
}
@@ -176,7 +176,7 @@ public class FamilyMemberRoomMicRecordService extends ServiceImpl<FamilyMemberRo
Date downTime = DateTimeUtil.addDays(endTime, 1);
List<FamilyMemberMicRemainTimeVo> overDateList =
this.baseMapper.listTotalRemainTimeByDateOverDate(upTime, startTime, endTime, downTime, uid, familyId);
this.baseMapper.listTotalRemainTimeByDateOverDate(upTime, startTime, endTime, downTime, familyMemberId);
for (FamilyMemberMicRemainTimeVo po: overDateList){
Date start = po.getUpTime();
while (start.before(po.getDownTime())){

View File

@@ -117,6 +117,7 @@
<select id="pageFamilyMemberData"
resultType="com.accompany.business.vo.family.FamilyMemberIncomeAdminVo">
SELECT
gm.family_member_id familyMemberId,
gm.family_id familyId,
gm.uid uid,
u2.erban_no erbanNo,
@@ -144,9 +145,6 @@
</if>
and (gm.enable = 1 or (gm.update_time between #{startTime} and #{endTime}))
</where>
GROUP BY
gm.family_id,
gm.uid
order by goldIncome desc
</select>

View File

@@ -98,7 +98,7 @@
select `date`, gold_remain `diamondRemain`
from family_member_gold_remain_day_record r
where `date` between #{startDate} and #{endDate}
and uid = #{uid} and family_id = #{familyId}
and family_member_id = #{familyMemberId}
</select>
</mapper>