独联体-公会长奖励,房主奖励

This commit is contained in:
2025-09-17 14:32:37 +08:00
parent 9c2aed50e0
commit 32c3616052
5 changed files with 210 additions and 2 deletions

View File

@@ -1,22 +1,33 @@
package com.accompany.business.service.extradiamond;
import com.accompany.business.dto.ExtraDiamondRateConfigDto;
import com.accompany.business.model.extradiamond.GuildExtraDiamondDay;
import com.accompany.business.model.extradiamond.RoomExtraDiamondDay;
import com.accompany.business.model.guild.Guild;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.service.guild.GuildService;
import com.accompany.business.service.purse.UserPurseService;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.service.SysConfService;
import com.accompany.core.util.StringUtils;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
import static com.accompany.common.constant.Constant.SysConfId.EXTRA_DIAMOND_RATE_CONFIG;
import static com.accompany.core.enumeration.BillObjTypeEnum.OWNER_EXTRA_GOLD;
import static com.accompany.core.enumeration.BillObjTypeEnum.*;
@Slf4j
@Service
public class ExtraDiamondDayService {
@Autowired
@@ -29,6 +40,8 @@ public class ExtraDiamondDayService {
private SysConfService sysConfService;
@Autowired
private UserPurseService userPurseService;
@Autowired
private RedissonClient redissonClient;
public void updateGuildExtraDiamond(GuildMember guildMember, String cycleDate, String statDate,
Double normalDiamondNum, Double luckyDiamondNum, Date time) {
@@ -42,7 +55,7 @@ public class ExtraDiamondDayService {
BigDecimal decimalNormal = BigDecimal.valueOf(normalDiamondNum);
BigDecimal decimalLucky = BigDecimal.valueOf(luckyDiamondNum);
BigDecimal ownerDiamondNum = diamondRateConfig.getOwnerExtraRate().multiply(decimalNormal);
BigDecimal ownerLuckyDiamond =diamondRateConfig.getOwnerExtraLuckyRate().multiply(decimalLucky);
BigDecimal ownerLuckyDiamond = diamondRateConfig.getOwnerExtraLuckyRate().multiply(decimalLucky);
Guild guild = guildService.getVaildGuildById(guildId);
Long ownerUid = guild.getOwnerUid();
guildExtraDiamondDayService.updateExtraDiamond(cycleDate, statDate, partitionId, guildMemberId, guildId, ownerUid, guildMember.getUid(),
@@ -77,4 +90,123 @@ public class ExtraDiamondDayService {
ExtraDiamondRateConfigDto configDto = JSONObject.parseObject(valueById, ExtraDiamondRateConfigDto.class);
return configDto.getConfigByPartitionId(partitionId);
}
public void sendGuildExtraDiamondTask(Integer partitionId, String statDate) {
ExtraDiamondRateConfigDto diamondRateConfig = this.getExtraDiamondRateConfig(partitionId);
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);
}
//主播额外奖励
List<GuildExtraDiamondDay> guildExtraDiamondDays = guildExtraDiamondDayService.listByPartitionStatDate(partitionId, statDate);
if (CollectionUtils.isNotEmpty(guildExtraDiamondDays)) {
for (GuildExtraDiamondDay diamondDay : guildExtraDiamondDays) {
BigDecimal anchorExtraNum = diamondDay.getDiamondNum().multiply(diamondRateConfig.getAnchorExtraRate());
BigDecimal anchorExtraLuckyNum = diamondDay.getLuckyDiamondNum().multiply(diamondRateConfig.getAnchorExtraLuckyRate());
diamondDay.setAnchorExtraNum(anchorExtraNum);
diamondDay.setAnchorExtraLuckyNum(anchorExtraLuckyNum);
diamondDay.setUpdateTime(updateTime);
}
boolean updateBatchById = guildExtraDiamondDayService.updateBatchById(guildExtraDiamondDays);
if (updateBatchById) {
for (GuildExtraDiamondDay extraDiamondDay : guildExtraDiamondDays) {
if (extraDiamondDay.getAnchorExtraNum().compareTo(BigDecimal.ZERO) > 0) {
userPurseService.addGold(extraDiamondDay.getUid(), extraDiamondDay.getAnchorExtraNum().doubleValue(), ANCHOR_EXTRA_GOLD);
}
if (extraDiamondDay.getAnchorExtraLuckyNum().compareTo(BigDecimal.ZERO) > 0) {
userPurseService.addGold(extraDiamondDay.getUid(), extraDiamondDay.getAnchorExtraLuckyNum().doubleValue(), ANCHOR_EXTRA_LUCKY_GOLD);
}
}
}
}
} catch (Exception e) {
log.error("sendLastDayDiamondtask anchor error" , e);
} finally {
if (locked){
lock.unlock();
}
}
//房间额外奖励
lockKey = "sendLastDayDiamondtask_room_" + partitionId + "_" + statDate;
lock = redissonClient.getLock(lockKey);
locked = false;
try {
locked = lock.tryLock(20, TimeUnit.SECONDS);
if (!locked){
throw new ServiceException(BusiStatus.SERVERBUSY);
}
List<RoomExtraDiamondDay> roomExtraDiamondDays = roomExtraDiamondDayService.listByPartitionStatDate(partitionId, statDate);
if (CollectionUtils.isNotEmpty(roomExtraDiamondDays)) {
for (RoomExtraDiamondDay roomExtraDiamondDay : roomExtraDiamondDays) {
BigDecimal anchorExtraNum = roomExtraDiamondDay.getDiamondNum().multiply(diamondRateConfig.getRoomExtraRate());
BigDecimal anchorExtraLuckyNum = roomExtraDiamondDay.getLuckyDiamondNum().multiply(diamondRateConfig.getRoomExtraLuckyRate());
roomExtraDiamondDay.setRoomExtraNum(anchorExtraNum);
roomExtraDiamondDay.setRoomExtraLuckyNum(anchorExtraLuckyNum);
roomExtraDiamondDay.setUpdateTime(updateTime);
}
boolean updateBatchById = roomExtraDiamondDayService.updateBatchById(roomExtraDiamondDays);
if (updateBatchById) {
for (RoomExtraDiamondDay extraDiamondDay : roomExtraDiamondDays) {
BigDecimal addGold = extraDiamondDay.getRoomExtraNum().add(extraDiamondDay.getRoomExtraLuckyNum());
if (addGold.compareTo(BigDecimal.ZERO) > 0) {
userPurseService.addGold(extraDiamondDay.getUid(), addGold.doubleValue(), ROOM_EXTRA_GOLD);
}
}
}
}
} catch (Exception e) {
log.error("sendLastDayDiamondtask room error" , e);
} finally {
if (locked){
lock.unlock();
}
}
}
public void sendRoomExtraDiamondTask(Integer partitionId, String statDate) {
ExtraDiamondRateConfigDto diamondRateConfig = this.getExtraDiamondRateConfig(partitionId);
Date updateTime = new Date();
String lockKey = "sendLastDayDiamondtask_room_" + partitionId + "_" + statDate;
RLock lock = redissonClient.getLock(lockKey);
boolean locked = false;
try {
locked = lock.tryLock(20, TimeUnit.SECONDS);
if (!locked){
throw new ServiceException(BusiStatus.SERVERBUSY);
}
List<RoomExtraDiamondDay> roomExtraDiamondDays = roomExtraDiamondDayService.listByPartitionStatDate(partitionId, statDate);
if (CollectionUtils.isNotEmpty(roomExtraDiamondDays)) {
for (RoomExtraDiamondDay roomExtraDiamondDay : roomExtraDiamondDays) {
BigDecimal anchorExtraNum = roomExtraDiamondDay.getDiamondNum().multiply(diamondRateConfig.getRoomExtraRate());
BigDecimal anchorExtraLuckyNum = roomExtraDiamondDay.getLuckyDiamondNum().multiply(diamondRateConfig.getRoomExtraLuckyRate());
roomExtraDiamondDay.setRoomExtraNum(anchorExtraNum);
roomExtraDiamondDay.setRoomExtraLuckyNum(anchorExtraLuckyNum);
roomExtraDiamondDay.setUpdateTime(updateTime);
}
boolean updateBatchById = roomExtraDiamondDayService.updateBatchById(roomExtraDiamondDays);
if (updateBatchById) {
for (RoomExtraDiamondDay extraDiamondDay : roomExtraDiamondDays) {
BigDecimal addGold = extraDiamondDay.getRoomExtraNum().add(extraDiamondDay.getRoomExtraLuckyNum());
if (addGold.compareTo(BigDecimal.ZERO) > 0) {
userPurseService.addGold(extraDiamondDay.getUid(), addGold.doubleValue(), ROOM_EXTRA_GOLD);
}
}
}
}
} catch (Exception e) {
log.error("sendLastDayDiamondtask room error" , e);
} finally {
if (locked){
lock.unlock();
}
}
}
}

View File

@@ -2,11 +2,14 @@ package com.accompany.business.service.extradiamond;
import com.accompany.business.model.extradiamond.GuildExtraDiamondDay;
import com.accompany.business.mybatismapper.extradiamond.GuildExtraDiamondDayMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 公会钻石流水额外收入记录 服务实现类
@@ -23,4 +26,13 @@ public class GuildExtraDiamondDayService extends ServiceImpl<GuildExtraDiamondDa
return baseMapper.updateExtraDiamond(cycleDate, statDate, partitionId, guildMemberId, guildId, ownerUid, uid,
diamondNum, luckyDiamond, ownerDiamondNum, ownerLuckyDiamond, time);
}
public List<GuildExtraDiamondDay> listByPartitionStatDate(Integer partitionId, String statDate) {
LambdaQueryWrapper<GuildExtraDiamondDay> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(GuildExtraDiamondDay::getPartitionId, partitionId)
.eq(GuildExtraDiamondDay::getStatDate, statDate)
.le(GuildExtraDiamondDay::getAnchorExtraNum, BigDecimal.ZERO)
.le(GuildExtraDiamondDay::getAnchorExtraLuckyNum, BigDecimal.ZERO);
return list(queryWrapper);
}
}

View File

@@ -2,10 +2,14 @@ package com.accompany.business.service.extradiamond;
import com.accompany.business.model.extradiamond.RoomExtraDiamondDay;
import com.accompany.business.mybatismapper.extradiamond.RoomExtraDiamondDayMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 房间钻石流水额外收入记录 服务实现类
@@ -20,4 +24,13 @@ public class RoomExtraDiamondDayService extends ServiceImpl<RoomExtraDiamondDayM
String statDate, Long roomUid, Double normalDiamondNum, Double luckyDiamondNum, Date time) {
return baseMapper.updateExtraDiamond(guildMemberId, guildId, uid, partitionId, statDate, roomUid, normalDiamondNum, luckyDiamondNum, time);
}
public List<RoomExtraDiamondDay> listByPartitionStatDate(Integer partitionId, String statDate) {
LambdaQueryWrapper<RoomExtraDiamondDay> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(RoomExtraDiamondDay::getPartitionId, partitionId)
.eq(RoomExtraDiamondDay::getStatDate, statDate)
.le(RoomExtraDiamondDay::getRoomExtraNum, BigDecimal.ZERO)
.le(RoomExtraDiamondDay::getRoomExtraLuckyNum, BigDecimal.ZERO);
return list(queryWrapper);
}
}

View File

@@ -0,0 +1,27 @@
package com.accompany.business.controller.extradiamond;
import com.accompany.business.service.extradiamond.ExtraDiamondDayService;
import com.accompany.common.annotation.Authorization;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/extraDiamond")
public class ExtraDiamondDayController {
@Autowired
private ExtraDiamondDayService extraDiamondDayService;
@Authorization
@GetMapping("/sendGuildLastDayDiamondtask")
public void sendGuildLastDayDiamondtask(Integer partitionId, String statDate) {
extraDiamondDayService.sendGuildExtraDiamondTask(partitionId, statDate);
}
@Authorization
@GetMapping("/sendRoomLastDayDiamondtask")
public void sendRoomLastDayDiamondtask(Integer partitionId, String statDate) {
extraDiamondDayService.sendRoomExtraDiamondTask(partitionId, statDate);
}
}

View File

@@ -0,0 +1,24 @@
package com.accompany.scheduler.task.extradiamond;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.service.extradiamond.ExtraDiamondDayService;
import com.accompany.core.enumeration.PartitionEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class ExtraDiamondDayTask {
@Autowired
private ExtraDiamondDayService extraDiamondDayService;
@Scheduled(cron = "0 6 0 * * *")
public void sendExtraDiamondTask() {
Date date = new Date();
String statDate = DateUtil.formatDate(date);
extraDiamondDayService.sendGuildExtraDiamondTask(PartitionEnum.SOVIET.getId(), statDate);
extraDiamondDayService.sendRoomExtraDiamondTask(PartitionEnum.SOVIET.getId(), statDate);
}
}