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

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 * 公会长UID
*/ */
private Integer ownerUid; private Long ownerUid;
/** /**
* 普通礼物钻石流水 * 普通礼物钻石流水
*/ */
@@ -68,6 +68,10 @@ public class GuildExtraDiamondDay implements Serializable {
* 公会长lucky额外奖励 * 公会长lucky额外奖励
*/ */
private BigDecimal ownerExtraLuckyNum; 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) .eq(Guild::getEnable, Boolean.TRUE)
.list(); .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.math.BigDecimal;
import java.time.DayOfWeek; import java.time.DayOfWeek;
import java.util.Date; import java.util.*;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -71,12 +68,6 @@ public class ExtraDiamondDayService {
Long ownerUid = guild.getOwnerUid(); Long ownerUid = guild.getOwnerUid();
guildExtraDiamondDayService.updateExtraDiamond(cycleDate, statDate, partitionId, guildMemberId, guildId, ownerUid, guildMember.getUid(), guildExtraDiamondDayService.updateExtraDiamond(cycleDate, statDate, partitionId, guildMemberId, guildId, ownerUid, guildMember.getUid(),
decimalNormal, decimalLucky, ownerDiamondNum, ownerLuckyDiamond, anchorDiamondNum, anchorLuckyDiamond, time); 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, public void updateRoomExtraDiamond(GuildMember guildMember, Long uid, PartitionInfo partitionInfo, String statDate, Long roomUid,
@@ -107,8 +98,8 @@ public class ExtraDiamondDayService {
return configDto.getConfigByPartitionId(partitionId); return configDto.getConfigByPartitionId(partitionId);
} }
public void sendGuildExtraDiamondTask(Integer partitionId, String statDate) { public void sendGuildMemberExtraDiamondTask(Integer partitionId, String statDate) {
log.info("sendGuildExtraDiamondTask partitionId:" + partitionId + " statDate:" + statDate); log.info("sendGuildMemberExtraDiamondTask partitionId:" + partitionId + " statDate:" + statDate);
Date updateTime = new Date(); Date updateTime = new Date();
String lockKey = "sendLastDayDiamondtask_anchor_" + partitionId + "_" + statDate; String lockKey = "sendLastDayDiamondtask_anchor_" + partitionId + "_" + statDate;
RLock lock = redissonClient.getLock(lockKey); RLock lock = redissonClient.getLock(lockKey);
@@ -123,7 +114,7 @@ public class ExtraDiamondDayService {
log.info("empty guildMember partitionId:" + partitionId + " partitionId:" + statDate + " no guildMember"); log.info("empty guildMember partitionId:" + partitionId + " partitionId:" + statDate + " no guildMember");
return; return;
} }
List<GuildExtraDiamondDay> guildExtraDiamondDays = guildExtraDiamondDayService.listByPartitionStatDate4Task(partitionId, statDate); List<GuildExtraDiamondDay> guildExtraDiamondDays = guildExtraDiamondDayService.listGuildMemberByPartitionStatDate4Task(partitionId, statDate);
if (CollectionUtils.isNotEmpty(guildExtraDiamondDays)) { if (CollectionUtils.isNotEmpty(guildExtraDiamondDays)) {
Iterator<GuildExtraDiamondDay> iterator = guildExtraDiamondDays.iterator(); Iterator<GuildExtraDiamondDay> iterator = guildExtraDiamondDays.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
@@ -151,7 +142,65 @@ public class ExtraDiamondDayService {
} }
} }
} catch (Exception e) { } 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 { } finally {
if (locked) { if (locked) {
lock.unlock(); lock.unlock();

View File

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

View File

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

View File

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