独联体-公会长奖励,房主奖励
This commit is contained in:
@@ -1,22 +1,33 @@
|
|||||||
package com.accompany.business.service.extradiamond;
|
package com.accompany.business.service.extradiamond;
|
||||||
|
|
||||||
import com.accompany.business.dto.ExtraDiamondRateConfigDto;
|
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.Guild;
|
||||||
import com.accompany.business.model.guild.GuildMember;
|
import com.accompany.business.model.guild.GuildMember;
|
||||||
import com.accompany.business.service.guild.GuildService;
|
import com.accompany.business.service.guild.GuildService;
|
||||||
import com.accompany.business.service.purse.UserPurseService;
|
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.service.SysConfService;
|
||||||
import com.accompany.core.util.StringUtils;
|
import com.accompany.core.util.StringUtils;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
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.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
|
@Service
|
||||||
public class ExtraDiamondDayService {
|
public class ExtraDiamondDayService {
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -29,6 +40,8 @@ public class ExtraDiamondDayService {
|
|||||||
private SysConfService sysConfService;
|
private SysConfService sysConfService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserPurseService userPurseService;
|
private UserPurseService userPurseService;
|
||||||
|
@Autowired
|
||||||
|
private RedissonClient redissonClient;
|
||||||
|
|
||||||
public void updateGuildExtraDiamond(GuildMember guildMember, String cycleDate, String statDate,
|
public void updateGuildExtraDiamond(GuildMember guildMember, String cycleDate, String statDate,
|
||||||
Double normalDiamondNum, Double luckyDiamondNum, Date time) {
|
Double normalDiamondNum, Double luckyDiamondNum, Date time) {
|
||||||
@@ -77,4 +90,123 @@ public class ExtraDiamondDayService {
|
|||||||
ExtraDiamondRateConfigDto configDto = JSONObject.parseObject(valueById, ExtraDiamondRateConfigDto.class);
|
ExtraDiamondRateConfigDto configDto = JSONObject.parseObject(valueById, ExtraDiamondRateConfigDto.class);
|
||||||
return configDto.getConfigByPartitionId(partitionId);
|
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.model.extradiamond.GuildExtraDiamondDay;
|
||||||
import com.accompany.business.mybatismapper.extradiamond.GuildExtraDiamondDayMapper;
|
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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
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,
|
return baseMapper.updateExtraDiamond(cycleDate, statDate, partitionId, guildMemberId, guildId, ownerUid, uid,
|
||||||
diamondNum, luckyDiamond, ownerDiamondNum, ownerLuckyDiamond, time);
|
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.model.extradiamond.RoomExtraDiamondDay;
|
||||||
import com.accompany.business.mybatismapper.extradiamond.RoomExtraDiamondDayMapper;
|
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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
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) {
|
String statDate, Long roomUid, Double normalDiamondNum, Double luckyDiamondNum, Date time) {
|
||||||
return baseMapper.updateExtraDiamond(guildMemberId, guildId, uid, partitionId, statDate, roomUid, normalDiamondNum, luckyDiamondNum, 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