独联体-房间流水添加周期

This commit is contained in:
2025-09-19 12:57:51 +08:00
parent 2c0c809871
commit 70ce45adac
9 changed files with 35 additions and 26 deletions

View File

@@ -22,6 +22,7 @@ public class RoomExtraDiamondDay implements Serializable {
@TableId(value = "id" , type = IdType.AUTO) @TableId(value = "id" , type = IdType.AUTO)
private Long id; private Long id;
private Integer partitionId; private Integer partitionId;
private String cycleDate;
/** /**
* 统计日期 * 统计日期
*/ */

View File

@@ -13,6 +13,7 @@ import com.accompany.business.service.user.UsersService;
import com.accompany.business.util.CycleTimeUtil; import com.accompany.business.util.CycleTimeUtil;
import com.accompany.business.util.FullMonthCycleTimeUtil; import com.accompany.business.util.FullMonthCycleTimeUtil;
import com.accompany.common.constant.Constant; import com.accompany.common.constant.Constant;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.model.PartitionInfo; import com.accompany.core.model.PartitionInfo;
import com.accompany.core.model.Users; import com.accompany.core.model.Users;
import com.accompany.core.service.partition.PartitionInfoService; import com.accompany.core.service.partition.PartitionInfoService;
@@ -23,6 +24,8 @@ import org.springframework.stereotype.Component;
import java.util.Date; import java.util.Date;
import static com.accompany.common.utils.DateTimeUtil.dateFormatter;
@Component @Component
public class SuperLuckyGiftDiamondIncomeListener implements ApplicationListener<SuperLuckyGiftDiamondIncomeMessageEvent> { public class SuperLuckyGiftDiamondIncomeListener implements ApplicationListener<SuperLuckyGiftDiamondIncomeMessageEvent> {
@@ -83,7 +86,8 @@ public class SuperLuckyGiftDiamondIncomeListener implements ApplicationListener<
} }
if (Constant.ClanMode.SOVIET.equals(partitionInfo.getClanMode()) && roomUid != null && roomUid > 0L) { if (Constant.ClanMode.SOVIET.equals(partitionInfo.getClanMode()) && roomUid != null && roomUid > 0L) {
extraDiamondDayService.updateRoomExtraDiamond(guildMember, roomUid, receiver.getPartitionId(), statDate, statDate = DateTimeUtil.convertWithZoneId(time, partitionInfo.getZoneId()).format(dateFormatter);
extraDiamondDayService.updateRoomExtraDiamond(guildMember, roomUid, partitionInfo, statDate,
roomUid, 0D, message.getTotalDiamondNum(), time); roomUid, 0D, message.getTotalDiamondNum(), time);
} }
} }

View File

@@ -16,7 +16,7 @@ import java.util.Date;
public interface RoomExtraDiamondDayMapper extends BaseMapper<RoomExtraDiamondDay> { public interface RoomExtraDiamondDayMapper extends BaseMapper<RoomExtraDiamondDay> {
int updateExtraDiamond(@Param("guildMemberId") Long guildMemberId, @Param("guildId") Integer guildId, int updateExtraDiamond(@Param("guildMemberId") Long guildMemberId, @Param("guildId") Integer guildId,
@Param("uid") Long uid, @Param("partitionId") Integer partitionId, @Param("uid") Long uid, @Param("partitionId") Integer partitionId, @Param("cycleDate") String cycleDate,
@Param("statDate") String statDate, @Param("roomUid") Long roomUid, @Param("statDate") String statDate, @Param("roomUid") Long roomUid,
@Param("normalDiamondNum") Double normalDiamondNum, @Param("luckyDiamondNum") Double luckyDiamondNum, @Param("normalDiamondNum") Double normalDiamondNum, @Param("luckyDiamondNum") Double luckyDiamondNum,
@Param("roomDiamondNum") BigDecimal roomDiamondNum, @Param("roomLuckyDiamond") BigDecimal roomLuckyDiamond, @Param("roomDiamondNum") BigDecimal roomDiamondNum, @Param("roomLuckyDiamond") BigDecimal roomLuckyDiamond,

View File

@@ -1,8 +1,5 @@
package com.accompany.business.service.extradiamond; package com.accompany.business.service.extradiamond;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
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.GuildExtraDiamondDay;
import com.accompany.business.model.extradiamond.RoomExtraDiamondDay; import com.accompany.business.model.extradiamond.RoomExtraDiamondDay;
@@ -12,7 +9,9 @@ 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;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.exception.ServiceException; import com.accompany.core.exception.ServiceException;
import com.accompany.core.model.PartitionInfo;
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;
@@ -24,6 +23,7 @@ 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.time.DayOfWeek;
import java.util.Date; import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@@ -79,7 +79,7 @@ public class ExtraDiamondDayService {
} }
} }
public void updateRoomExtraDiamond(GuildMember guildMember, Long uid, Integer partitionId, String statDate, Long roomUid, public void updateRoomExtraDiamond(GuildMember guildMember, Long uid, PartitionInfo partitionInfo, String statDate, Long roomUid,
Double normalDiamondNum, Double luckyDiamondNum, Date time) { Double normalDiamondNum, Double luckyDiamondNum, Date time) {
Long guildMemberId = 0L; Long guildMemberId = 0L;
Integer guildId = 0; Integer guildId = 0;
@@ -87,12 +87,14 @@ public class ExtraDiamondDayService {
guildMemberId = guildMember.getId(); guildMemberId = guildMember.getId();
guildId = guildMember.getGuildId(); guildId = guildMember.getGuildId();
} }
int partitionId = partitionInfo.getId();
String cycleDate = DateTimeUtil.convertWithZoneId(time, partitionInfo.getZoneId()).with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
ExtraDiamondRateConfigDto diamondRateConfig = this.getExtraDiamondRateConfig(guildMember.getPartitionId()); ExtraDiamondRateConfigDto diamondRateConfig = this.getExtraDiamondRateConfig(guildMember.getPartitionId());
BigDecimal decimalNormal = BigDecimal.valueOf(normalDiamondNum); BigDecimal decimalNormal = BigDecimal.valueOf(normalDiamondNum);
BigDecimal decimalLucky = BigDecimal.valueOf(luckyDiamondNum); BigDecimal decimalLucky = BigDecimal.valueOf(luckyDiamondNum);
BigDecimal roomDiamondNum = diamondRateConfig.getRoomExtraRate().multiply(decimalNormal); BigDecimal roomDiamondNum = diamondRateConfig.getRoomExtraRate().multiply(decimalNormal);
BigDecimal roomLuckyDiamond = diamondRateConfig.getRoomExtraLuckyRate().multiply(decimalLucky); BigDecimal roomLuckyDiamond = diamondRateConfig.getRoomExtraLuckyRate().multiply(decimalLucky);
roomExtraDiamondDayService.updateExtraDiamond(guildMemberId, guildId, uid, partitionId, statDate, roomUid, roomExtraDiamondDayService.updateExtraDiamond(guildMemberId, guildId, uid, partitionId, cycleDate, statDate, roomUid,
normalDiamondNum, luckyDiamondNum, roomDiamondNum, roomLuckyDiamond, time); normalDiamondNum, luckyDiamondNum, roomDiamondNum, roomLuckyDiamond, time);
} }
@@ -156,15 +158,7 @@ public class ExtraDiamondDayService {
} }
} }
public void sendRoomExtraDiamondTask(Integer partitionId, Date now) { public void sendRoomExtraDiamondTask(Integer partitionId, String monthDay) {
Date lastWeek = DateUtil.offsetWeek(now, -1);
DateTime mondayOfLastWeek = DateUtil.beginOfWeek(lastWeek);
DateTime sundayOfLastWeek = DateUtil.endOfWeek(lastWeek);
List<String> 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; String lockKey = "sendLastDayDiamondtask_room_" + partitionId;
RLock lock = redissonClient.getLock(lockKey); RLock lock = redissonClient.getLock(lockKey);
@@ -174,7 +168,7 @@ public class ExtraDiamondDayService {
if (!locked) { if (!locked) {
throw new ServiceException(BusiStatus.SERVERBUSY); throw new ServiceException(BusiStatus.SERVERBUSY);
} }
List<RoomExtraDiamondDay> roomExtraDiamondDays = roomExtraDiamondDayService.listByPartitionStatDateList(partitionId, statDateList); List<RoomExtraDiamondDay> roomExtraDiamondDays = roomExtraDiamondDayService.listByPartitionCycleDate(partitionId, monthDay);
if (CollectionUtils.isEmpty(roomExtraDiamondDays)) { if (CollectionUtils.isEmpty(roomExtraDiamondDays)) {
return; return;
} }

View File

@@ -20,10 +20,10 @@ import java.util.List;
@Service @Service
public class RoomExtraDiamondDayService extends ServiceImpl<RoomExtraDiamondDayMapper, RoomExtraDiamondDay> { public class RoomExtraDiamondDayService extends ServiceImpl<RoomExtraDiamondDayMapper, RoomExtraDiamondDay> {
public int updateExtraDiamond(Long guildMemberId, Integer guildId, Long uid, Integer partitionId, public int updateExtraDiamond(Long guildMemberId, Integer guildId, Long uid, Integer partitionId, String cycleDate,
String statDate, Long roomUid, Double normalDiamondNum, Double luckyDiamondNum, String statDate, Long roomUid, Double normalDiamondNum, Double luckyDiamondNum,
BigDecimal roomDiamondNum, BigDecimal roomLuckyDiamond, Date time) { BigDecimal roomDiamondNum, BigDecimal roomLuckyDiamond, Date time) {
return baseMapper.updateExtraDiamond(guildMemberId, guildId, uid, partitionId, statDate, roomUid, return baseMapper.updateExtraDiamond(guildMemberId, guildId, uid, partitionId, cycleDate, statDate, roomUid,
normalDiamondNum, luckyDiamondNum, roomDiamondNum, roomLuckyDiamond, time); normalDiamondNum, luckyDiamondNum, roomDiamondNum, roomLuckyDiamond, time);
} }
@@ -44,4 +44,13 @@ public class RoomExtraDiamondDayService extends ServiceImpl<RoomExtraDiamondDayM
.le(RoomExtraDiamondDay::getRoomExtraLuckyNum, BigDecimal.ZERO); .le(RoomExtraDiamondDay::getRoomExtraLuckyNum, BigDecimal.ZERO);
return list(queryWrapper); return list(queryWrapper);
} }
public List<RoomExtraDiamondDay> listByPartitionCycleDate(Integer partitionId, String cycleDate) {
LambdaQueryWrapper<RoomExtraDiamondDay> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(RoomExtraDiamondDay::getPartitionId, partitionId)
.eq(RoomExtraDiamondDay::getCycleDate, cycleDate)
.le(RoomExtraDiamondDay::getRoomExtraNum, BigDecimal.ZERO)
.le(RoomExtraDiamondDay::getRoomExtraLuckyNum, BigDecimal.ZERO);
return list(queryWrapper);
}
} }

View File

@@ -115,7 +115,7 @@ public class GuildGiftRecordService extends ServiceImpl<GuildGiftRecordMapper, G
Long roomUid = giftSendRecord.getRoomUid(); Long roomUid = giftSendRecord.getRoomUid();
if (Constant.ClanMode.SOVIET.equals(partitionInfo.getClanMode()) && roomUid != null && roomUid > 0L) { if (Constant.ClanMode.SOVIET.equals(partitionInfo.getClanMode()) && roomUid != null && roomUid > 0L) {
statDate = DateTimeUtil.convertWithZoneId(createTime, partitionInfo.getZoneId()).format(dateFormatter); statDate = DateTimeUtil.convertWithZoneId(createTime, partitionInfo.getZoneId()).format(dateFormatter);
extraDiamondDayService.updateRoomExtraDiamond(guildMember, giftSendRecord.getUid(), giftSendRecord.getPartitionId(), extraDiamondDayService.updateRoomExtraDiamond(guildMember, giftSendRecord.getUid(), partitionInfo,
statDate, roomUid, totalDiamondNum, 0D, createTime); statDate, roomUid, totalDiamondNum, 0D, createTime);
} }

View File

@@ -2,10 +2,10 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.accompany.business.mybatismapper.extradiamond.RoomExtraDiamondDayMapper"> <mapper namespace="com.accompany.business.mybatismapper.extradiamond.RoomExtraDiamondDayMapper">
<update id="updateExtraDiamond"> <update id="updateExtraDiamond">
INSERT INTO `room_extra_diamond_day` (`partition_id`, `stat_date`, `guild_member_id`, `guild_id`, `uid`, INSERT INTO `room_extra_diamond_day` (`partition_id`, `cycle_date`,`stat_date`, `guild_member_id`, `guild_id`, `uid`,
`room_uid`, `diamond_num`, `lucky_diamond_num`, `room_extra_num`, `room_uid`, `diamond_num`, `lucky_diamond_num`, `room_extra_num`,
`room_extra_lucky_num`, `create_time`, `update_time`) `room_extra_lucky_num`, `create_time`, `update_time`)
VALUES (#{partitionId}, #{statDate}, #{guildMemberId}, #{guildId}, #{uid}, #{roomUid}, #{normalDiamondNum}, VALUES (#{partitionId}, #{cycleDate}, #{statDate}, #{guildMemberId}, #{guildId}, #{uid}, #{roomUid}, #{normalDiamondNum},
#{luckyDiamondNum}, #{roomDiamondNum}, #{roomLuckyDiamond}, #{time}, #{time}) ON DUPLICATE KEY #{luckyDiamondNum}, #{roomDiamondNum}, #{roomLuckyDiamond}, #{time}, #{time}) ON DUPLICATE KEY
UPDATE UPDATE
diamond_num = diamond_num + diamond_num = diamond_num +

View File

@@ -1,6 +1,5 @@
package com.accompany.business.controller.extradiamond; package com.accompany.business.controller.extradiamond;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.service.extradiamond.ExtraDiamondDayService; import com.accompany.business.service.extradiamond.ExtraDiamondDayService;
import com.accompany.common.annotation.Authorization; import com.accompany.common.annotation.Authorization;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -22,7 +21,7 @@ public class ExtraDiamondDayController {
@Authorization @Authorization
@GetMapping("/sendRoomLastDayDiamondtask") @GetMapping("/sendRoomLastDayDiamondtask")
public void sendRoomLastDayDiamondtask(Integer partitionId, String statDate) { public void sendRoomLastDayDiamondtask(Integer partitionId, String monthDay) {
extraDiamondDayService.sendRoomExtraDiamondTask(partitionId, DateUtil.parseDateTime(statDate)); extraDiamondDayService.sendRoomExtraDiamondTask(partitionId, monthDay);
} }
} }

View File

@@ -24,6 +24,8 @@ public class ExtraDiamondDayTask {
@Scheduled(cron = "0 6 0 ? * MON") @Scheduled(cron = "0 6 0 ? * MON")
public void sendExtraDiamondWeekTask() { public void sendExtraDiamondWeekTask() {
Date date = new Date(); Date date = new Date();
extraDiamondDayService.sendRoomExtraDiamondTask(PartitionEnum.SOVIET.getId(), date); Date lastWeek = DateUtil.offsetWeek(date, -1);
Date mondayOfLastWeek = DateUtil.beginOfWeek(lastWeek);
extraDiamondDayService.sendRoomExtraDiamondTask(PartitionEnum.SOVIET.getId(), DateUtil.formatDate(mondayOfLastWeek));
} }
} }