独联体-有效主播奖励
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.guild.Guild;
|
||||
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.purse.UserPurseService;
|
||||
import com.accompany.common.status.BusiStatus;
|
||||
@@ -21,7 +22,9 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static com.accompany.common.constant.Constant.SysConfId.EXTRA_DIAMOND_RATE_CONFIG;
|
||||
@@ -42,6 +45,8 @@ public class ExtraDiamondDayService {
|
||||
private UserPurseService userPurseService;
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
@Autowired
|
||||
private GuildMemberService guildMemberService;
|
||||
|
||||
public void updateGuildExtraDiamond(GuildMember guildMember, String cycleDate, String statDate,
|
||||
Double normalDiamondNum, Double luckyDiamondNum, Date time) {
|
||||
@@ -102,16 +107,29 @@ public class ExtraDiamondDayService {
|
||||
if (!locked){
|
||||
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);
|
||||
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 anchorExtraLuckyNum = diamondDay.getLuckyDiamondNum().multiply(diamondRateConfig.getAnchorExtraLuckyRate());
|
||||
diamondDay.setAnchorExtraNum(anchorExtraNum);
|
||||
diamondDay.setAnchorExtraLuckyNum(anchorExtraLuckyNum);
|
||||
diamondDay.setUpdateTime(updateTime);
|
||||
}
|
||||
if (CollectionUtils.isEmpty(guildExtraDiamondDays)) {
|
||||
return;
|
||||
}
|
||||
boolean updateBatchById = guildExtraDiamondDayService.updateBatchById(guildExtraDiamondDays);
|
||||
if (updateBatchById) {
|
||||
for (GuildExtraDiamondDay extraDiamondDay : guildExtraDiamondDays) {
|
||||
@@ -131,43 +149,6 @@ public class ExtraDiamondDayService {
|
||||
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) {
|
||||
|
@@ -127,4 +127,12 @@ public class GuildMemberService extends ServiceImpl<GuildMemberMapper, GuildMemb
|
||||
}
|
||||
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