独联体-公会长奖励改为次日发

This commit is contained in:
2025-09-22 19:10:39 +08:00
parent db5c90ea63
commit 43e71cffb0
6 changed files with 93 additions and 16 deletions

View File

@@ -39,7 +39,7 @@ public class GuildExtraDiamondDay implements Serializable {
/**
* 公会长UID
*/
private Integer ownerUid;
private Long ownerUid;
/**
* 普通礼物钻石流水
*/
@@ -68,6 +68,10 @@ public class GuildExtraDiamondDay implements Serializable {
* 公会长lucky额外奖励
*/
private BigDecimal ownerExtraLuckyNum;
/**
* 公会长奖励是否已经发放0-未发放
*/
private Byte ownerSendStatus;
/**
* 创建时间
*/

View File

@@ -101,4 +101,13 @@ public class GuildService extends ServiceImpl<GuildMapper, Guild> {
.eq(Guild::getEnable, Boolean.TRUE)
.list();
}
public Map<Integer, Guild> mapGuildByPartitionId(Integer partitionId) {
return this.lambdaQuery()
.eq(Guild::getPartitionId, partitionId)
.eq(Guild::getEnable, Boolean.TRUE)
.list().stream()
.collect(Collectors.toMap(Guild::getId, family -> family));
}
}

View File

@@ -24,10 +24,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.DayOfWeek;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -71,12 +68,6 @@ public class ExtraDiamondDayService {
Long ownerUid = guild.getOwnerUid();
guildExtraDiamondDayService.updateExtraDiamond(cycleDate, statDate, partitionId, guildMemberId, guildId, ownerUid, guildMember.getUid(),
decimalNormal, decimalLucky, ownerDiamondNum, ownerLuckyDiamond, anchorDiamondNum, anchorLuckyDiamond, time);
if (ownerDiamondNum.compareTo(BigDecimal.ZERO) > 0) {
userPurseService.addGold(ownerUid, ownerDiamondNum.doubleValue(), OWNER_EXTRA_GOLD);
}
if (ownerLuckyDiamond.compareTo(BigDecimal.ZERO) > 0) {
userPurseService.addGold(ownerUid, ownerLuckyDiamond.doubleValue(), OWNER_EXTRA_GOLD);
}
}
public void updateRoomExtraDiamond(GuildMember guildMember, Long uid, PartitionInfo partitionInfo, String statDate, Long roomUid,
@@ -107,8 +98,8 @@ public class ExtraDiamondDayService {
return configDto.getConfigByPartitionId(partitionId);
}
public void sendGuildExtraDiamondTask(Integer partitionId, String statDate) {
log.info("sendGuildExtraDiamondTask partitionId:" + partitionId + " statDate:" + statDate);
public void sendGuildMemberExtraDiamondTask(Integer partitionId, String statDate) {
log.info("sendGuildMemberExtraDiamondTask partitionId:" + partitionId + " statDate:" + statDate);
Date updateTime = new Date();
String lockKey = "sendLastDayDiamondtask_anchor_" + partitionId + "_" + statDate;
RLock lock = redissonClient.getLock(lockKey);
@@ -123,7 +114,7 @@ public class ExtraDiamondDayService {
log.info("empty guildMember partitionId:" + partitionId + " partitionId:" + statDate + " no guildMember");
return;
}
List<GuildExtraDiamondDay> guildExtraDiamondDays = guildExtraDiamondDayService.listByPartitionStatDate4Task(partitionId, statDate);
List<GuildExtraDiamondDay> guildExtraDiamondDays = guildExtraDiamondDayService.listGuildMemberByPartitionStatDate4Task(partitionId, statDate);
if (CollectionUtils.isNotEmpty(guildExtraDiamondDays)) {
Iterator<GuildExtraDiamondDay> iterator = guildExtraDiamondDays.iterator();
while (iterator.hasNext()) {
@@ -151,7 +142,65 @@ public class ExtraDiamondDayService {
}
}
} catch (Exception e) {
log.error("sendLastDayDiamondtask anchor error" , e);
log.error("sendGuildMemberExtraDiamondTask anchor error" , e);
} finally {
if (locked) {
lock.unlock();
}
}
}
public void sendGuildExtraDiamondTask(Integer partitionId, String statDate) {
log.info("sendGuildExtraDiamondTask partitionId:" + partitionId + " statDate:" + statDate);
Date updateTime = new Date();
String lockKey = "sendLastDayDiamondtask_anchor_" + partitionId + "_" + statDate;
RLock lock = redissonClient.getLock(lockKey);
boolean locked = false;
try {
locked = lock.tryLock(20, TimeUnit.SECONDS);
if (!locked) {
throw new ServiceException(BusiStatus.SERVERBUSY);
}
Map<Integer, Guild> guildMap = guildService.mapGuildByPartitionId(partitionId);
if (guildMap.isEmpty()) {
log.info("empty guildMember partitionId:" + partitionId + " partitionId:" + statDate + " no guildMember");
return;
}
List<GuildExtraDiamondDay> guildExtraDiamondDays = guildExtraDiamondDayService.listGuildByPartitionStatDate4Task(partitionId, statDate);
if (CollectionUtils.isNotEmpty(guildExtraDiamondDays)) {
Iterator<GuildExtraDiamondDay> iterator = guildExtraDiamondDays.iterator();
while (iterator.hasNext()) {
GuildExtraDiamondDay diamondDay = iterator.next();
if (guildMap.get(diamondDay.getGuildId()) == null || diamondDay.getAnchorSendStatus() == 1) {
iterator.remove();
continue;
}
diamondDay.setOwnerSendStatus((byte) 1);
diamondDay.setUpdateTime(updateTime);
}
if (CollectionUtils.isEmpty(guildExtraDiamondDays)) {
return;
}
boolean updateBatchById = guildExtraDiamondDayService.updateBatchById(guildExtraDiamondDays);
if (!updateBatchById) {
return;
}
Map<Long, BigDecimal> ownerExtraMap = new HashMap<>();
for (GuildExtraDiamondDay extraDiamondDay : guildExtraDiamondDays) {
Long ownerUid = extraDiamondDay.getOwnerUid();
BigDecimal ownerExtra = ownerExtraMap.get(ownerUid);
BigDecimal add = extraDiamondDay.getOwnerExtraNum().add(extraDiamondDay.getOwnerExtraLuckyNum());
ownerExtra = ownerExtra == null ? add : ownerExtra.add(add);
ownerExtraMap.put(ownerUid, ownerExtra);
}
for (Map.Entry<Long, BigDecimal> decimalEntry : ownerExtraMap.entrySet()) {
if (decimalEntry.getValue().compareTo(BigDecimal.ZERO) > 0) {
userPurseService.addGold(decimalEntry.getKey(), decimalEntry.getValue().doubleValue(), OWNER_EXTRA_GOLD);
}
}
}
} catch (Exception e) {
log.error("sendGuildExtraDiamondTask anchor error" , e);
} finally {
if (locked) {
lock.unlock();

View File

@@ -32,7 +32,7 @@ public class GuildExtraDiamondDayService extends ServiceImpl<GuildExtraDiamondDa
diamondNum, luckyDiamond, ownerDiamondNum, ownerLuckyDiamond, anchorDiamondNum, anchorLuckyDiamond, time);
}
public List<GuildExtraDiamondDay> listByPartitionStatDate4Task(Integer partitionId, String statDate) {
public List<GuildExtraDiamondDay> listGuildMemberByPartitionStatDate4Task(Integer partitionId, String statDate) {
LambdaQueryWrapper<GuildExtraDiamondDay> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(GuildExtraDiamondDay::getPartitionId, partitionId)
.eq(GuildExtraDiamondDay::getStatDate, statDate)
@@ -40,6 +40,14 @@ public class GuildExtraDiamondDayService extends ServiceImpl<GuildExtraDiamondDa
return list(queryWrapper);
}
public List<GuildExtraDiamondDay> listGuildByPartitionStatDate4Task(Integer partitionId, String statDate) {
LambdaQueryWrapper<GuildExtraDiamondDay> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(GuildExtraDiamondDay::getPartitionId, partitionId)
.eq(GuildExtraDiamondDay::getStatDate, statDate)
.eq(GuildExtraDiamondDay::getOwnerSendStatus, 0);
return list(queryWrapper);
}
public List<GuildExtraDiamondDay> groupByPartitionMember(Integer partitionId, String statDate, String endDate, Long guildMemberId) {
return baseMapper.groupByPartitionMember(partitionId, statDate, endDate, guildMemberId);
}

View File

@@ -19,6 +19,12 @@ public class ExtraDiamondDayController {
extraDiamondDayService.sendGuildExtraDiamondTask(partitionId, statDate);
}
@Authorization
@GetMapping("/sendGuildMemberExtraDiamondTask")
public void sendGuildMemberExtraDiamondTask(Integer partitionId, String statDate) {
extraDiamondDayService.sendGuildMemberExtraDiamondTask(partitionId, statDate);
}
@Authorization
@GetMapping("/sendRoomLastDayDiamondtask")
public void sendRoomLastDayDiamondtask(Integer partitionId, String monthDay) {

View File

@@ -18,6 +18,7 @@ public class ExtraDiamondDayTask {
public void sendExtraDiamondTask() {
Date date = new Date();
String statDate = DateUtil.formatDate(date);
extraDiamondDayService.sendGuildMemberExtraDiamondTask(PartitionEnum.SOVIET.getId(), statDate);
extraDiamondDayService.sendGuildExtraDiamondTask(PartitionEnum.SOVIET.getId(), statDate);
}