diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/extradiamond/GuildExtraDiamondDay.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/extradiamond/GuildExtraDiamondDay.java index 3dcc5e1ca..783ba30ad 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/extradiamond/GuildExtraDiamondDay.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/extradiamond/GuildExtraDiamondDay.java @@ -56,6 +56,10 @@ public class GuildExtraDiamondDay implements Serializable { * 主播lucky额外奖励 */ private BigDecimal anchorExtraLuckyNum; + /** + * 主播奖励是否已经发放0-未发放 + */ + private Byte anchorSendStatus; /** * 公会长普通额外奖励 */ diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/extradiamond/RoomExtraDiamondDay.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/extradiamond/RoomExtraDiamondDay.java index c51564495..bf5379a04 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/extradiamond/RoomExtraDiamondDay.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/extradiamond/RoomExtraDiamondDay.java @@ -38,7 +38,7 @@ public class RoomExtraDiamondDay implements Serializable { /** * 房间UID */ - private Integer roomUid; + private Long roomUid; /** * 普通礼物钻石流水 */ @@ -55,6 +55,10 @@ public class RoomExtraDiamondDay implements Serializable { * 房间lucky额外奖励 */ private BigDecimal roomExtraLuckyNum; + /** + * 是否已发放 + */ + private Byte sendStatus; /** * 创建时间 */ diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/event/listener/SuperLuckyGiftDiamondIncomeListener.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/event/listener/SuperLuckyGiftDiamondIncomeListener.java index 67ff27ba1..88f84af42 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/event/listener/SuperLuckyGiftDiamondIncomeListener.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/event/listener/SuperLuckyGiftDiamondIncomeListener.java @@ -78,8 +78,7 @@ public class SuperLuckyGiftDiamondIncomeListener implements ApplicationListener< } if (partitionInfo.getId() == PartitionEnum.SOVIET.getId()) { - extraDiamondDayService.updateGuildExtraDiamond(guildMember, cycleDate, statDate, 0D, message.getTotalDiamondNum(), time); - extraDiamondDayService.updateRoomExtraDiamond(guildMember, receiverUid, partitionInfo.getId(), statDate, + extraDiamondDayService.updateExtraDiamond(guildMember, receiverUid, partitionInfo.getId(), cycleDate, statDate, message.getRoomUid(),0D, message.getTotalDiamondNum(), time); } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/extradiamond/GuildExtraDiamondDayMapper.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/extradiamond/GuildExtraDiamondDayMapper.java index 008e09e1d..2d64fd310 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/extradiamond/GuildExtraDiamondDayMapper.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/extradiamond/GuildExtraDiamondDayMapper.java @@ -19,5 +19,6 @@ public interface GuildExtraDiamondDayMapper extends BaseMapper 0) { userPurseService.addGold(ownerUid, ownerDiamondNum.doubleValue(), OWNER_EXTRA_GOLD); } @@ -74,7 +88,7 @@ public class ExtraDiamondDayService { } public void updateRoomExtraDiamond(GuildMember guildMember, Long uid, Integer partitionId, String statDate, Long roomUid, - Double normalDiamondNum, Double luckyDiamondNum, Date time) { + Double normalDiamondNum, Double luckyDiamondNum, Date time, ExtraDiamondRateConfigDto diamondRateConfig) { if (roomUid == null) { return; } @@ -84,7 +98,12 @@ public class ExtraDiamondDayService { guildMemberId = guildMember.getId(); guildId = guildMember.getGuildId(); } - roomExtraDiamondDayService.updateExtraDiamond(guildMemberId, guildId, uid, partitionId, statDate, roomUid, normalDiamondNum, luckyDiamondNum, time); + BigDecimal decimalNormal = BigDecimal.valueOf(normalDiamondNum); + BigDecimal decimalLucky = BigDecimal.valueOf(luckyDiamondNum); + BigDecimal roomDiamondNum = diamondRateConfig.getRoomExtraRate().multiply(decimalNormal); + BigDecimal roomLuckyDiamond = diamondRateConfig.getRoomExtraLuckyRate().multiply(decimalLucky); + roomExtraDiamondDayService.updateExtraDiamond(guildMemberId, guildId, uid, partitionId, statDate, roomUid, + normalDiamondNum, luckyDiamondNum, roomDiamondNum, roomLuckyDiamond, time); } private ExtraDiamondRateConfigDto getExtraDiamondRateConfig(Integer partitionId) { @@ -97,14 +116,13 @@ public class ExtraDiamondDayService { } 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){ + if (!locked) { throw new ServiceException(BusiStatus.SERVERBUSY); } Map guildMemberMap = guildMemberService.mapByPartitionId(partitionId); @@ -117,14 +135,11 @@ public class ExtraDiamondDayService { Iterator iterator = guildExtraDiamondDays.iterator(); while (iterator.hasNext()) { GuildExtraDiamondDay diamondDay = iterator.next(); - if (guildMemberMap.get(diamondDay.getGuildMemberId()) == null) { + if (guildMemberMap.get(diamondDay.getGuildMemberId()) == null || diamondDay.getAnchorSendStatus() == 1) { iterator.remove(); continue; } - BigDecimal anchorExtraNum = diamondDay.getDiamondNum().multiply(diamondRateConfig.getAnchorExtraRate()); - BigDecimal anchorExtraLuckyNum = diamondDay.getLuckyDiamondNum().multiply(diamondRateConfig.getAnchorExtraLuckyRate()); - diamondDay.setAnchorExtraNum(anchorExtraNum); - diamondDay.setAnchorExtraLuckyNum(anchorExtraLuckyNum); + diamondDay.setAnchorSendStatus((byte) 1); diamondDay.setUpdateTime(updateTime); } if (CollectionUtils.isEmpty(guildExtraDiamondDays)) { @@ -145,47 +160,66 @@ public class ExtraDiamondDayService { } catch (Exception e) { log.error("sendLastDayDiamondtask anchor error" , e); } finally { - if (locked){ + 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; + public void sendRoomExtraDiamondTask(Integer partitionId, Date now) { + Date lastWeek = DateUtil.offsetWeek(now, -1); + DateTime mondayOfLastWeek = DateUtil.beginOfWeek(lastWeek); + DateTime sundayOfLastWeek = DateUtil.endOfWeek(lastWeek); + + List statDateList = DateUtil.rangeToList(mondayOfLastWeek, sundayOfLastWeek, DateField.DAY_OF_MONTH) + .stream() + .map(d -> DateUtil.format(d, "yyyy-MM-dd")) + .collect(Collectors.toList()); + + String lockKey = "sendLastDayDiamondtask_room_" + partitionId; RLock lock = redissonClient.getLock(lockKey); boolean locked = false; try { locked = lock.tryLock(20, TimeUnit.SECONDS); - if (!locked){ + if (!locked) { throw new ServiceException(BusiStatus.SERVERBUSY); } - - List 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); - } - } - } + List roomExtraDiamondDays = roomExtraDiamondDayService.listByPartitionStatDateList(partitionId, statDateList); + if (CollectionUtils.isEmpty(roomExtraDiamondDays)) { + return; } + roomExtraDiamondDays = roomExtraDiamondDays.stream() + .filter(item -> item.getSendStatus() == null || item.getSendStatus() == 0) + .collect(Collectors.toList()); + roomExtraDiamondDays.forEach(item -> { + item.setSendStatus((byte) 1); + }); + + boolean updateBatchById = roomExtraDiamondDayService.updateBatchById(roomExtraDiamondDays); + if (!updateBatchById) { + return; + } + Map extraDiamondMap = roomExtraDiamondDays.stream() + .collect(Collectors.toMap( + RoomExtraDiamondDay::getRoomUid, + item -> { + BigDecimal extraNum = item.getRoomExtraNum() != null ? item.getRoomExtraNum() : BigDecimal.ZERO; + BigDecimal extraLuckyNum = item.getRoomExtraLuckyNum() != null ? item.getRoomExtraLuckyNum() : BigDecimal.ZERO; + return extraNum.add(extraLuckyNum); + }, + BigDecimal::add + )); + extraDiamondMap.entrySet().stream() + .filter(entry -> entry.getValue().compareTo(BigDecimal.ZERO) > 0) + .forEach(entry -> { + Long roomUid = entry.getKey(); + BigDecimal extraDiamond = entry.getValue(); + userPurseService.addGold(roomUid, extraDiamond.doubleValue(), ROOM_EXTRA_GOLD); + }); } catch (Exception e) { log.error("sendLastDayDiamondtask room error" , e); } finally { - if (locked){ + if (locked) { lock.unlock(); } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/extradiamond/GuildExtraDiamondDayService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/extradiamond/GuildExtraDiamondDayService.java index 206dea97e..8a59d432e 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/extradiamond/GuildExtraDiamondDayService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/extradiamond/GuildExtraDiamondDayService.java @@ -22,9 +22,10 @@ public class GuildExtraDiamondDayService extends ServiceImpl listByPartitionStatDate(Integer partitionId, String statDate) { diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/extradiamond/RoomExtraDiamondDayService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/extradiamond/RoomExtraDiamondDayService.java index e18e60155..3070903dd 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/extradiamond/RoomExtraDiamondDayService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/extradiamond/RoomExtraDiamondDayService.java @@ -21,8 +21,10 @@ import java.util.List; public class RoomExtraDiamondDayService extends ServiceImpl { public int updateExtraDiamond(Long guildMemberId, Integer guildId, Long uid, Integer partitionId, - String statDate, Long roomUid, Double normalDiamondNum, Double luckyDiamondNum, Date time) { - return baseMapper.updateExtraDiamond(guildMemberId, guildId, uid, partitionId, statDate, roomUid, normalDiamondNum, luckyDiamondNum, time); + String statDate, Long roomUid, Double normalDiamondNum, Double luckyDiamondNum, + BigDecimal roomDiamondNum, BigDecimal roomLuckyDiamond, Date time) { + return baseMapper.updateExtraDiamond(guildMemberId, guildId, uid, partitionId, statDate, roomUid, + normalDiamondNum, luckyDiamondNum, roomDiamondNum, roomLuckyDiamond, time); } public List listByPartitionStatDate(Integer partitionId, String statDate) { @@ -33,4 +35,13 @@ public class RoomExtraDiamondDayService extends ServiceImpl listByPartitionStatDateList(Integer partitionId, List statDates) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(RoomExtraDiamondDay::getPartitionId, partitionId) + .in(RoomExtraDiamondDay::getStatDate, statDates) + .le(RoomExtraDiamondDay::getRoomExtraNum, BigDecimal.ZERO) + .le(RoomExtraDiamondDay::getRoomExtraLuckyNum, BigDecimal.ZERO); + return list(queryWrapper); + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildGiftRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildGiftRecordService.java index eef37df8c..b50bce203 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildGiftRecordService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildGiftRecordService.java @@ -110,10 +110,9 @@ public class GuildGiftRecordService extends ServiceImpl INSERT INTO `guild_extra_diamond_day` (`cycle_date`, `partition_id`, `stat_date`, `guild_member_id`, `guild_id`, `uid`, `owner_uid`, `diamond_num`, `lucky_diamond_num`, - `owner_extra_num`, `owner_extra_lucky_num`, `create_time`, `update_time`) + `owner_extra_num`, `owner_extra_lucky_num`, `anchor_extra_num`, `anchor_extra_lucky_num`, `create_time`, `update_time`) VALUES (#{cycleDate}, #{partitionId}, #{statDate}, #{guildMemberId}, #{guildId}, #{uid}, #{ownerUid}, #{diamondNum}, #{luckyDiamondNum}, - #{ownerDiamondNum}, #{ownerLuckyDiamond},#{time} ,#{time}) + #{ownerDiamondNum}, #{ownerLuckyDiamond}, #{anchorDiamondNum}, #{anchorLuckyDiamond},#{time} ,#{time}) ON DUPLICATE KEY UPDATE diamond_num = diamond_num + values (diamond_num), lucky_diamond_num = lucky_diamond_num + values (lucky_diamond_num), owner_extra_num = owner_extra_num + values (owner_extra_num), owner_extra_lucky_num = owner_extra_lucky_num + values (owner_extra_lucky_num), + anchor_extra_num = anchor_extra_num + values (anchor_extra_num), + anchor_extra_lucky_num = anchor_extra_lucky_num + values (anchor_extra_lucky_num), update_time = values (update_time) diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomExtraDiamondDayMapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomExtraDiamondDayMapper.xml index bc323723e..2162ed315 100644 --- a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomExtraDiamondDayMapper.xml +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/RoomExtraDiamondDayMapper.xml @@ -3,12 +3,16 @@ INSERT INTO `room_extra_diamond_day` (`partition_id`, `stat_date`, `guild_member_id`, `guild_id`, `uid`, - `room_uid`, `diamond_num`, `lucky_diamond_num`, `create_time`, `update_time`) + `room_uid`, `diamond_num`, `lucky_diamond_num`, `room_extra_num`, + `room_extra_lucky_num`, `create_time`, `update_time`) VALUES (#{partitionId}, #{statDate}, #{guildMemberId}, #{guildId}, #{uid}, #{roomUid}, #{normalDiamondNum}, - #{luckyDiamondNum},#{time} ,#{time}) - ON DUPLICATE KEY UPDATE - diamond_num = diamond_num + values (diamond_num), - lucky_diamond_num = lucky_diamond_num + values (lucky_diamond_num), - update_time = values (update_time) + #{luckyDiamondNum}, #{roomDiamondNum}, #{roomLuckyDiamond}, #{time}, #{time}) ON DUPLICATE KEY + UPDATE + diamond_num = diamond_num + + values (diamond_num), lucky_diamond_num = lucky_diamond_num + + values (lucky_diamond_num), room_extra_num = room_extra_num + + values (room_extra_num), room_extra_lucky_num = room_extra_lucky_num + + values (room_extra_lucky_num), update_time = + values (update_time) diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/extradiamond/ExtraDiamondDayController.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/extradiamond/ExtraDiamondDayController.java index 6ae498dce..fa3f3620c 100644 --- a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/extradiamond/ExtraDiamondDayController.java +++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/extradiamond/ExtraDiamondDayController.java @@ -1,5 +1,6 @@ package com.accompany.business.controller.extradiamond; +import cn.hutool.core.date.DateUtil; import com.accompany.business.service.extradiamond.ExtraDiamondDayService; import com.accompany.common.annotation.Authorization; import org.springframework.beans.factory.annotation.Autowired; @@ -22,6 +23,6 @@ public class ExtraDiamondDayController { @Authorization @GetMapping("/sendRoomLastDayDiamondtask") public void sendRoomLastDayDiamondtask(Integer partitionId, String statDate) { - extraDiamondDayService.sendRoomExtraDiamondTask(partitionId, statDate); + extraDiamondDayService.sendRoomExtraDiamondTask(partitionId, DateUtil.parseDateTime(statDate)); } } diff --git a/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/extradiamond/ExtraDiamondDayTask.java b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/extradiamond/ExtraDiamondDayTask.java index e8a3449fb..fd7686cdb 100644 --- a/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/extradiamond/ExtraDiamondDayTask.java +++ b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/extradiamond/ExtraDiamondDayTask.java @@ -19,6 +19,11 @@ public class ExtraDiamondDayTask { Date date = new Date(); String statDate = DateUtil.formatDate(date); extraDiamondDayService.sendGuildExtraDiamondTask(PartitionEnum.SOVIET.getId(), statDate); - extraDiamondDayService.sendRoomExtraDiamondTask(PartitionEnum.SOVIET.getId(), statDate); + } + + @Scheduled(cron = "0 6 0 ? * MON") + public void sendExtraDiamondWeekTask() { + Date date = new Date(); + extraDiamondDayService.sendRoomExtraDiamondTask(PartitionEnum.SOVIET.getId(), date); } }