独联体-有效主播奖励
This commit is contained in:
@@ -5,6 +5,7 @@ import com.accompany.business.model.extradiamond.GuildExtraDiamondDay;
|
|||||||
import com.accompany.business.model.extradiamond.RoomExtraDiamondDay;
|
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.GuildMemberService;
|
||||||
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.common.status.BusiStatus;
|
||||||
@@ -21,7 +22,9 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.TimeUnit;
|
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;
|
||||||
@@ -42,6 +45,8 @@ public class ExtraDiamondDayService {
|
|||||||
private UserPurseService userPurseService;
|
private UserPurseService userPurseService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private RedissonClient redissonClient;
|
private RedissonClient redissonClient;
|
||||||
|
@Autowired
|
||||||
|
private GuildMemberService guildMemberService;
|
||||||
|
|
||||||
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) {
|
||||||
@@ -102,16 +107,29 @@ public class ExtraDiamondDayService {
|
|||||||
if (!locked){
|
if (!locked){
|
||||||
throw new ServiceException(BusiStatus.SERVERBUSY);
|
throw new ServiceException(BusiStatus.SERVERBUSY);
|
||||||
}
|
}
|
||||||
//主播额外奖励
|
Map<Long, GuildMember> guildMemberMap = guildMemberService.mapByPartitionId(partitionId);
|
||||||
|
if (guildMemberMap.isEmpty()) {
|
||||||
|
log.info("empty guildMember partitionId:" + partitionId + " partitionId:" + statDate + " no guildMember");
|
||||||
|
return;
|
||||||
|
}
|
||||||
List<GuildExtraDiamondDay> guildExtraDiamondDays = guildExtraDiamondDayService.listByPartitionStatDate(partitionId, statDate);
|
List<GuildExtraDiamondDay> guildExtraDiamondDays = guildExtraDiamondDayService.listByPartitionStatDate(partitionId, statDate);
|
||||||
if (CollectionUtils.isNotEmpty(guildExtraDiamondDays)) {
|
if (CollectionUtils.isNotEmpty(guildExtraDiamondDays)) {
|
||||||
for (GuildExtraDiamondDay diamondDay : guildExtraDiamondDays) {
|
Iterator<GuildExtraDiamondDay> iterator = guildExtraDiamondDays.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
GuildExtraDiamondDay diamondDay = iterator.next();
|
||||||
|
if (guildMemberMap.get(diamondDay.getGuildMemberId()) == null) {
|
||||||
|
iterator.remove();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
BigDecimal anchorExtraNum = diamondDay.getDiamondNum().multiply(diamondRateConfig.getAnchorExtraRate());
|
BigDecimal anchorExtraNum = diamondDay.getDiamondNum().multiply(diamondRateConfig.getAnchorExtraRate());
|
||||||
BigDecimal anchorExtraLuckyNum = diamondDay.getLuckyDiamondNum().multiply(diamondRateConfig.getAnchorExtraLuckyRate());
|
BigDecimal anchorExtraLuckyNum = diamondDay.getLuckyDiamondNum().multiply(diamondRateConfig.getAnchorExtraLuckyRate());
|
||||||
diamondDay.setAnchorExtraNum(anchorExtraNum);
|
diamondDay.setAnchorExtraNum(anchorExtraNum);
|
||||||
diamondDay.setAnchorExtraLuckyNum(anchorExtraLuckyNum);
|
diamondDay.setAnchorExtraLuckyNum(anchorExtraLuckyNum);
|
||||||
diamondDay.setUpdateTime(updateTime);
|
diamondDay.setUpdateTime(updateTime);
|
||||||
}
|
}
|
||||||
|
if (CollectionUtils.isEmpty(guildExtraDiamondDays)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
boolean updateBatchById = guildExtraDiamondDayService.updateBatchById(guildExtraDiamondDays);
|
boolean updateBatchById = guildExtraDiamondDayService.updateBatchById(guildExtraDiamondDays);
|
||||||
if (updateBatchById) {
|
if (updateBatchById) {
|
||||||
for (GuildExtraDiamondDay extraDiamondDay : guildExtraDiamondDays) {
|
for (GuildExtraDiamondDay extraDiamondDay : guildExtraDiamondDays) {
|
||||||
@@ -131,43 +149,6 @@ public class ExtraDiamondDayService {
|
|||||||
lock.unlock();
|
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) {
|
public void sendRoomExtraDiamondTask(Integer partitionId, String statDate) {
|
||||||
|
@@ -127,4 +127,12 @@ public class GuildMemberService extends ServiceImpl<GuildMemberMapper, GuildMemb
|
|||||||
}
|
}
|
||||||
return guildMembers;
|
return guildMembers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<Long, GuildMember> mapByPartitionId(Integer partitionId) {
|
||||||
|
return this.lambdaQuery()
|
||||||
|
.eq(GuildMember::getPartitionId, partitionId)
|
||||||
|
.eq(GuildMember::getEnable, Boolean.TRUE)
|
||||||
|
.list().stream()
|
||||||
|
.collect(Collectors.toMap(GuildMember::getUid, fm->fm));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user