独联体-公会长奖励,房主奖励
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user