房间周流水-记录
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
package com.accompany.admin.vo.room;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnore;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
@ApiModel("房间周流水奖励记录")
|
||||
@Data
|
||||
public class RoomWeekDiamondRewardRecordAdminVo {
|
||||
@ExcelIgnore
|
||||
@ApiModelProperty("发放id")
|
||||
private Long id;
|
||||
@ExcelIgnore
|
||||
private Integer partitionId;
|
||||
@ExcelProperty("分区")
|
||||
@ApiModelProperty("分区")
|
||||
private String partitionIdDesc;
|
||||
@ExcelProperty("房间UID")
|
||||
private Long roomUid;
|
||||
@ExcelProperty("房间ID")
|
||||
@ApiModelProperty("房间ID")
|
||||
private Long erbanNo;
|
||||
@ExcelProperty("房间昵称")
|
||||
@ApiModelProperty("房间昵称")
|
||||
private String roomName;
|
||||
@ExcelProperty("国家")
|
||||
@ApiModelProperty("国家")
|
||||
private String regionName;
|
||||
@ExcelProperty("日期")
|
||||
@ApiModelProperty("日期")
|
||||
private String statDate;
|
||||
@ExcelProperty("钻石流水")
|
||||
@ApiModelProperty("钻石流水")
|
||||
private BigDecimal diamondNum;
|
||||
@ExcelProperty("金币流水")
|
||||
@ApiModelProperty("金币流水")
|
||||
private BigDecimal goldNum;
|
||||
@ExcelProperty("对应流水发放金币")
|
||||
@ApiModelProperty("对应流水发放金币")
|
||||
private BigDecimal rewardGold;
|
||||
@ExcelProperty("发放状态:0:未发放,1已经发放")
|
||||
@ApiModelProperty("发放状态:0:未发放,1已经发放")
|
||||
private Byte status;
|
||||
@ExcelProperty("操作人")
|
||||
@ApiModelProperty("操作人")
|
||||
private String operator;
|
||||
@ExcelIgnore
|
||||
private Date createTime;
|
||||
@ApiModelProperty("发放时间")
|
||||
@ExcelProperty("操作人")
|
||||
private String sendTime;
|
||||
@ApiModelProperty("公会长ID")
|
||||
@ExcelProperty("公会长ID")
|
||||
private Long ownerErbanNo;
|
||||
@ApiModelProperty("公会ID")
|
||||
@ExcelProperty("公会ID")
|
||||
private Integer guildId;
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package com.accompany.admin.mapper.room;
|
||||
|
||||
import com.accompany.business.model.room.RoomWeekDiamondRewardRecord;
|
||||
import com.accompany.admin.vo.room.RoomWeekDiamondRewardRecordAdminVo;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 房间周奖励金币发放 Mapper 接口
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
public interface RoomWeekDiamondRewardRecordAdminMapper extends BaseMapper<RoomWeekDiamondRewardRecord> {
|
||||
|
||||
IPage<RoomWeekDiamondRewardRecordAdminVo> pageRecord(IPage<RoomWeekDiamondRewardRecordAdminVo> iPage, @Param("partitionId") Integer partitionId, @Param("regionId") Integer regionId,
|
||||
@Param("roomUid") Long roomUid, @Param("startDate") String startDate, @Param("endDate") String endDate,
|
||||
@Param("status") Integer status, @Param("notEqualsTodate") String notEqualsTodate, @Param("guildId") Integer guildId);
|
||||
}
|
@@ -0,0 +1,193 @@
|
||||
package com.accompany.admin.service.room;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.accompany.admin.vo.room.RoomWeekDiamondRewardRecordAdminVo;
|
||||
import com.accompany.business.model.guild.Guild;
|
||||
import com.accompany.business.model.room.RoomWeekDiamondNum;
|
||||
import com.accompany.business.model.room.RoomWeekDiamondReward;
|
||||
import com.accompany.business.model.room.RoomWeekDiamondRewardRecord;
|
||||
import com.accompany.admin.mapper.room.RoomWeekDiamondRewardRecordAdminMapper;
|
||||
import com.accompany.business.service.BaseSendService;
|
||||
import com.accompany.business.service.guild.GuildService;
|
||||
import com.accompany.business.service.purse.UserPurseService;
|
||||
import com.accompany.business.service.record.BillRecordService;
|
||||
import com.accompany.business.service.room.RoomWeekDiamondNumService;
|
||||
import com.accompany.business.service.room.RoomWeekDiamondRewardService;
|
||||
import com.accompany.business.service.user.UsersService;
|
||||
import com.accompany.common.result.BusiResult;
|
||||
import com.accompany.common.result.PageResult;
|
||||
import com.accompany.common.status.BusiStatus;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
import com.accompany.core.enumeration.BillObjTypeEnum;
|
||||
import com.accompany.core.enumeration.I18nAlertEnum;
|
||||
import com.accompany.core.enumeration.PartitionEnum;
|
||||
import com.accompany.core.exception.AdminServiceException;
|
||||
import com.accompany.core.exception.ServiceException;
|
||||
import com.accompany.core.model.Users;
|
||||
import com.accompany.core.util.I18NMessageSourceUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
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.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 房间周奖励金币发放 Admin服务类
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class RoomWeekDiamondRewardRecordAdminService extends ServiceImpl<RoomWeekDiamondRewardRecordAdminMapper, RoomWeekDiamondRewardRecord> {
|
||||
|
||||
@Autowired
|
||||
private UsersService usersService;
|
||||
@Autowired
|
||||
private RoomWeekDiamondRewardService roomWeekDiamondRewardService;
|
||||
@Autowired
|
||||
private RoomWeekDiamondNumService roomWeekDiamondNumService;
|
||||
@Autowired
|
||||
private BaseSendService baseSendService;
|
||||
@Autowired
|
||||
private BillRecordService billRecordService;
|
||||
@Autowired
|
||||
private UserPurseService userPurseService;
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
@Autowired
|
||||
private GuildService guildService;
|
||||
|
||||
public PageResult<RoomWeekDiamondRewardRecordAdminVo> pageRecord(Integer partitionId, Integer regionId, Long erbanNo, Long ownerErbanNo, Integer guildId,
|
||||
String startDate, String endDate, Integer status, Integer pageNo, Integer pageSize) {
|
||||
Long roomUid = null;
|
||||
if (partitionId == null) {
|
||||
throw new AdminServiceException("分区不能为空");
|
||||
}
|
||||
//查询列表不包含今天
|
||||
String notEqualsTodate = DateTimeUtil.convertWithZoneId(new Date(), PartitionEnum.getByPartitionId(partitionId).getZoneId())
|
||||
.format(DateTimeUtil.dateFormatter);
|
||||
if (erbanNo != null) {
|
||||
Users user = usersService.getUserByErbanNo(erbanNo);
|
||||
if (user == null) {
|
||||
throw new AdminServiceException("用户不存在");
|
||||
}
|
||||
roomUid = user.getUid();
|
||||
}
|
||||
|
||||
if (guildId == null && ownerErbanNo != null) {
|
||||
Users user = usersService.getUserByErbanNo(ownerErbanNo);
|
||||
if (user == null) {
|
||||
throw new AdminServiceException("公会长ID不存在");
|
||||
}
|
||||
Guild vaildGuildByOwnerUid = guildService.getVaildGuildByOwnerUid(user.getUid());
|
||||
if (vaildGuildByOwnerUid == null) {
|
||||
throw new AdminServiceException("公会长ID不存在公会");
|
||||
}
|
||||
guildId = vaildGuildByOwnerUid.getId();
|
||||
}
|
||||
|
||||
IPage<RoomWeekDiamondRewardRecordAdminVo> iPage = new Page<>(pageNo, pageSize);
|
||||
iPage = baseMapper.pageRecord(iPage, partitionId, regionId, roomUid, startDate, endDate, status, notEqualsTodate, guildId);
|
||||
PageResult<RoomWeekDiamondRewardRecordAdminVo> pageResult = new PageResult<>(iPage);
|
||||
List<RoomWeekDiamondRewardRecordAdminVo> rows = pageResult.getRows();
|
||||
if (CollectionUtils.isEmpty(rows)) {
|
||||
return pageResult;
|
||||
}
|
||||
Map<Integer, TreeMap<BigDecimal, RoomWeekDiamondReward>> partitionTreeMap = new HashMap<>();
|
||||
List<Integer> collect = rows.stream().map(row -> row.getPartitionId()).collect(Collectors.toList());
|
||||
collect.stream().distinct()
|
||||
.forEach(x -> partitionTreeMap.put(x, roomWeekDiamondRewardService.getRewardTreeMapByPartitionId(partitionId)));
|
||||
for (RoomWeekDiamondRewardRecordAdminVo row : rows) {
|
||||
if (row.getCreateTime() != null) {
|
||||
row.setSendTime(DateUtil.formatDateTime(row.getCreateTime()));
|
||||
}
|
||||
if (row.getRewardGold() != null) {
|
||||
continue;
|
||||
}
|
||||
if (row.getPartitionId() != PartitionEnum.ARAB.getId()) {
|
||||
continue;
|
||||
}
|
||||
TreeMap<BigDecimal, RoomWeekDiamondReward> dayDiamondRewardTreeMap = partitionTreeMap.get(row.getPartitionId());
|
||||
row.setRewardGold(roomWeekDiamondRewardService.calGoldReward(dayDiamondRewardTreeMap, row.getGoldNum()));
|
||||
}
|
||||
return pageResult;
|
||||
}
|
||||
|
||||
public BusiResult send(Long id, Integer adminId) {
|
||||
RoomWeekDiamondNum weekDiamondNum = roomWeekDiamondNumService.getById(id);
|
||||
if (weekDiamondNum == null) {
|
||||
throw new AdminServiceException("记录id:" + id + "不存在");
|
||||
}
|
||||
Integer partitionId = weekDiamondNum.getPartitionId();
|
||||
if (partitionId != PartitionEnum.ARAB.getId()) {
|
||||
throw new AdminServiceException("暂时只支持阿拉伯区按钮发放周金币");
|
||||
}
|
||||
String notEqualsTodate = DateTimeUtil.convertWithZoneId(new Date(), PartitionEnum.getByPartitionId(partitionId).getZoneId())
|
||||
.format(DateTimeUtil.dateFormatter);
|
||||
if (notEqualsTodate.equals(weekDiamondNum.getStatDate())) {
|
||||
throw new AdminServiceException("该区(" + PartitionEnum.getByPartitionId(partitionId).getDesc() + ")当周未结束,不允许发放");
|
||||
}
|
||||
String lockKey = "RoomWeekDiamondNum:" + id;
|
||||
RLock lock = redissonClient.getLock(lockKey);
|
||||
boolean locked = false;
|
||||
try {
|
||||
locked = lock.tryLock(5L, TimeUnit.SECONDS);
|
||||
if (!locked) {
|
||||
log.error("房间周流水奖励已经发放,id:{}", id.toString());
|
||||
throw new ServiceException(BusiStatus.SERVERERROR);
|
||||
}
|
||||
if (checkExist(partitionId, weekDiamondNum.getRoomUid(), weekDiamondNum.getStatDate())) {
|
||||
throw new AdminServiceException("该房间奖励已经发放");
|
||||
}
|
||||
TreeMap<BigDecimal, RoomWeekDiamondReward> treeMapByPartitionId = roomWeekDiamondRewardService.getRewardTreeMapByPartitionId(partitionId);
|
||||
BigDecimal goldReward = roomWeekDiamondRewardService.calGoldReward(treeMapByPartitionId, weekDiamondNum.getGoldNum());
|
||||
if (goldReward.doubleValue() <= 0) {
|
||||
throw new AdminServiceException("该房间未达到发放标准");
|
||||
}
|
||||
Long roomUid = weekDiamondNum.getRoomUid();
|
||||
RoomWeekDiamondRewardRecord roomWeekDiamondRewardRecord = new RoomWeekDiamondRewardRecord();
|
||||
roomWeekDiamondRewardRecord.setDiamondNum(weekDiamondNum.getDiamondNum());
|
||||
roomWeekDiamondRewardRecord.setGoldNum(weekDiamondNum.getGoldNum());
|
||||
roomWeekDiamondRewardRecord.setRoomUid(roomUid);
|
||||
roomWeekDiamondRewardRecord.setRewardGold(goldReward);
|
||||
roomWeekDiamondRewardRecord.setAdminId(adminId);
|
||||
roomWeekDiamondRewardRecord.setPartitionId(partitionId);
|
||||
roomWeekDiamondRewardRecord.setStatDate(weekDiamondNum.getStatDate());
|
||||
roomWeekDiamondRewardRecord.setCreateTime(new Date());
|
||||
int insert = baseMapper.insert(roomWeekDiamondRewardRecord);
|
||||
if (insert <= 0) {
|
||||
throw new AdminServiceException("发放失败");
|
||||
}
|
||||
userPurseService.addDiamond(roomUid, goldReward.doubleValue(), BillObjTypeEnum.ROOM_DAY_DIAMOND_REWARD,
|
||||
(userPurse) -> billRecordService.insertGeneralBillRecord(roomUid, roomWeekDiamondRewardRecord.getId().toString(),
|
||||
BillObjTypeEnum.ROOM_DAY_DIAMOND_REWARD, goldReward.doubleValue(), userPurse));
|
||||
baseSendService.sendSystemMsg(roomUid.toString(),
|
||||
I18NMessageSourceUtil.getMessage(I18nAlertEnum.ROOM_DAY_DIAMOND_REWARD_SYS, new Object[]{weekDiamondNum.getGoldNum(), goldReward}, partitionId));
|
||||
} catch (InterruptedException e) {
|
||||
throw new AdminServiceException(BusiStatus.SERVERBUSY);
|
||||
} finally {
|
||||
if (locked) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
return BusiResult.success();
|
||||
}
|
||||
|
||||
private Boolean checkExist(Integer partitionId, Long roomUid, String statDate) {
|
||||
LambdaQueryWrapper<RoomWeekDiamondRewardRecord> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.eq(RoomWeekDiamondRewardRecord::getPartitionId, partitionId).eq(RoomWeekDiamondRewardRecord::getRoomUid, roomUid).eq(RoomWeekDiamondRewardRecord::getStatDate, statDate);
|
||||
return baseMapper.selectCount(wrapper) > 0;
|
||||
}
|
||||
}
|
@@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.accompany.admin.mapper.room.RoomWeekDiamondRewardRecordAdminMapper">
|
||||
|
||||
<select id="pageRecord" resultType="com.accompany.admin.vo.room.RoomWeekDiamondRewardRecordAdminVo">
|
||||
SELECT
|
||||
rn.id id,
|
||||
gm.guild_id guildId,
|
||||
owner.erban_no ownerErbanNo,
|
||||
rn.partition_id partitionId,
|
||||
rn.room_uid roomUid,
|
||||
u.erban_no erbanNo,
|
||||
rn.stat_date statDate,
|
||||
rn.diamond_num diamondNum,
|
||||
rn.gold_num goldNum,
|
||||
rm.`title` roomName,
|
||||
ri.`name` regionName,
|
||||
reward.reward_gold rewardGold,
|
||||
au.username operator,
|
||||
pi.`desc` partitionIdDesc,
|
||||
if(reward.id is null, 0, 1) `status`,
|
||||
reward.create_time createTime
|
||||
FROM
|
||||
room_week_diamond_num rn
|
||||
LEFT JOIN room_week_diamond_reward_record reward ON rn.partition_id = reward.partition_id
|
||||
and rn.room_uid = reward.room_uid and rn.stat_date = reward.stat_date
|
||||
left join guild_member gm on gm.uid = rn.room_uid and gm.`enable` = 1
|
||||
left join guild g on g.id = gm.guild_id and g.`enable` = 1
|
||||
left join users owner on owner.uid = g.owner_uid
|
||||
left join room rm on rn.room_uid = rm.uid
|
||||
left join users u on u.uid = rn.room_uid
|
||||
left join region_info ri on u.region_id = ri.id
|
||||
left join admin_user au on au.id = reward.admin_id
|
||||
left join partition_info pi on rn.partition_id = pi.id
|
||||
<where>
|
||||
<if test="partitionId != null and partitionId != 0">
|
||||
and rn.partition_id = #{partitionId}
|
||||
</if>
|
||||
<if test="regionId != null and regionId != 0">
|
||||
and u.region_id = #{regionId}
|
||||
</if>
|
||||
<if test="roomUid != null">
|
||||
and rn.room_uid = #{roomUid}
|
||||
</if>
|
||||
<if test="startDate != null and startDate != ''">
|
||||
and rn.stat_date >= #{startDate}
|
||||
</if>
|
||||
<if test="endDate != null and endDate != ''">
|
||||
and rn.stat_date <= #{endDate}
|
||||
</if>
|
||||
<choose>
|
||||
<when test="status != null and status == 0">
|
||||
and reward.id is null
|
||||
</when>
|
||||
<when test="status != null and status == 1">
|
||||
and reward.id is not null
|
||||
</when>
|
||||
</choose>
|
||||
<if test="guildId != null">
|
||||
and gm.guild_id = #{guildId}
|
||||
</if>
|
||||
and rn.stat_date != #{notEqualsTodate}
|
||||
</where>
|
||||
order by rn.stat_date desc, rn.diamond_num desc, `status` asc
|
||||
</select>
|
||||
</mapper>
|
@@ -0,0 +1,75 @@
|
||||
package com.accompany.admin.controller.room;
|
||||
|
||||
import com.accompany.admin.controller.BaseController;
|
||||
import com.accompany.admin.service.room.RoomWeekDiamondRewardRecordAdminService;
|
||||
import com.accompany.business.param.BasePageParams;
|
||||
import com.accompany.admin.vo.room.RoomWeekDiamondRewardRecordAdminVo;
|
||||
import com.accompany.common.result.BusiResult;
|
||||
import com.accompany.common.result.PageResult;
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.alibaba.excel.support.ExcelTypeEnum;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/admin/roomWeekDiamond")
|
||||
public class RoomWeekDiamondRewardAdminController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private RoomWeekDiamondRewardRecordAdminService roomWeekDiamondRewardRecordAdminService;
|
||||
|
||||
@ApiOperation(value = "每周钻石流水列表", httpMethod = "GET")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "regionId", value = "国家id", required = false, dataType = "int"),
|
||||
@ApiImplicitParam(name = "erbanNo", value = "用户id", required = false, dataType = "long"),
|
||||
@ApiImplicitParam(name = "ownerErbanNo", value = "公会长ID", required = false, dataType = "long"),
|
||||
@ApiImplicitParam(name = "guildId", value = "用户id", required = false, dataType = "int"),
|
||||
@ApiImplicitParam(name = "status", value = "发放状态:-1:全部,0:未发放,1已经发放", required = false, dataType = "long"),
|
||||
})
|
||||
@GetMapping("/page")
|
||||
public BusiResult<PageResult<RoomWeekDiamondRewardRecordAdminVo>> page(Integer regionId, Long erbanNo, Long ownerErbanNo, Integer guildId, Integer status, BasePageParams pageParams) {
|
||||
|
||||
PageResult<RoomWeekDiamondRewardRecordAdminVo> pageResult = roomWeekDiamondRewardRecordAdminService.pageRecord(pageParams.getPartitionId(), regionId, erbanNo, ownerErbanNo, guildId, pageParams.getStartTime(),
|
||||
pageParams.getEndTime(), status, pageParams.getPageNo(), pageParams.getPageSize());
|
||||
return BusiResult.success(pageResult);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "每周钻石流水列表-导出", httpMethod = "GET")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "regionId", value = "国家id", required = false, dataType = "int"),
|
||||
@ApiImplicitParam(name = "erbanNo", value = "用户id", required = false, dataType = "long"),
|
||||
@ApiImplicitParam(name = "ownerErbanNo", value = "ownerErbanNo", required = false, dataType = "long"),
|
||||
@ApiImplicitParam(name = "guildId", value = "用户id", required = false, dataType = "int"),
|
||||
@ApiImplicitParam(name = "status", value = "发放状态:-1:全部,0:未发放,1已经发放", required = false, dataType = "long"),
|
||||
})
|
||||
@GetMapping("/export")
|
||||
public void export(HttpServletResponse response, Integer regionId, Long erbanNo, Long ownerErbanNo, Integer guildId, Integer status, BasePageParams pageParams) throws IOException {
|
||||
pageParams.setPageNo(0);
|
||||
pageParams.setPageSize(-1);
|
||||
PageResult<RoomWeekDiamondRewardRecordAdminVo> pageResult = roomWeekDiamondRewardRecordAdminService.pageRecord(pageParams.getPartitionId(), regionId, erbanNo, ownerErbanNo, guildId, pageParams.getStartTime(),
|
||||
pageParams.getEndTime(), status, pageParams.getPageNo(), pageParams.getPageSize());
|
||||
response.setContentType("application/vnd.ms-excel");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
// 这里URLEncoder.encode可以防止中文乱码
|
||||
String excelName = URLEncoder.encode("每周钻石流水", StandardCharsets.UTF_8);
|
||||
response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue());
|
||||
EasyExcel.write(response.getOutputStream(), RoomWeekDiamondRewardRecordAdminVo.class).sheet("每周钻石流水").doWrite(pageResult.getRows());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "每周钻石流水列表-发放", httpMethod = "POST")
|
||||
@PostMapping("/send")
|
||||
public BusiResult send(Long id) {
|
||||
return roomWeekDiamondRewardRecordAdminService.send(id, getAdminId());
|
||||
}
|
||||
}
|
@@ -0,0 +1,43 @@
|
||||
package com.accompany.business.model.room;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 房间周流水数据实体类
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
@Data
|
||||
public class RoomWeekDiamondNum implements Serializable {
|
||||
|
||||
/**
|
||||
* 房间room_uid
|
||||
*/
|
||||
private Long roomUid;
|
||||
/**
|
||||
* 流水日期(周开始日期)
|
||||
*/
|
||||
private String statDate;
|
||||
/**
|
||||
* 分区id
|
||||
*/
|
||||
private Integer partitionId;
|
||||
/**
|
||||
* 总送礼值
|
||||
*/
|
||||
private BigDecimal diamondNum;
|
||||
/**
|
||||
* 金币流水
|
||||
*/
|
||||
private BigDecimal goldNum;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
}
|
@@ -0,0 +1,38 @@
|
||||
package com.accompany.business.model.room;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 房间周奖励政策实体类
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
@Data
|
||||
public class RoomWeekDiamondReward implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 分区id
|
||||
*/
|
||||
private Integer partitionId;
|
||||
/**
|
||||
* 周钻石流水达标值
|
||||
*/
|
||||
private BigDecimal diamondNum;
|
||||
/**
|
||||
* 金币奖励
|
||||
*/
|
||||
private BigDecimal rewardGold;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,62 @@
|
||||
package com.accompany.business.model.room;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 房间周奖励金币发放实体类
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
@Data
|
||||
public class RoomWeekDiamondRewardRecord implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
/**
|
||||
* 分区id
|
||||
*/
|
||||
private Integer partitionId;
|
||||
/**
|
||||
* 房间room_uid
|
||||
*/
|
||||
private Long roomUid;
|
||||
/**
|
||||
* 流水日期(周开始日期)
|
||||
*/
|
||||
private String statDate;
|
||||
/**
|
||||
* 总送礼值
|
||||
*/
|
||||
private BigDecimal diamondNum;
|
||||
/**
|
||||
* 总送礼值
|
||||
*/
|
||||
private BigDecimal goldNum;
|
||||
/**
|
||||
* 金币奖励
|
||||
*/
|
||||
private BigDecimal rewardGold;
|
||||
/**
|
||||
* 发放人
|
||||
*/
|
||||
private Integer adminId;
|
||||
/**
|
||||
* 发放时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
@@ -48,9 +48,6 @@ public class RankListener implements ApplicationListener<GiftMessageEvent> {
|
||||
@Autowired
|
||||
private RoomLevelService roomLevelService;
|
||||
|
||||
@Autowired
|
||||
private RoomDayDiamondNumService roomDayDiamondNumService;
|
||||
|
||||
@Async
|
||||
@Override
|
||||
@SneakyThrows
|
||||
@@ -68,6 +65,7 @@ public class RankListener implements ApplicationListener<GiftMessageEvent> {
|
||||
if (goldNum <= 0L){
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
rankService.updateAllRank(sendUid, recvUid, roomUid, goldNum.doubleValue(), messTime, partitionId);
|
||||
|
||||
@@ -77,20 +75,22 @@ public class RankListener implements ApplicationListener<GiftMessageEvent> {
|
||||
return;
|
||||
}
|
||||
|
||||
Room room = roomService.getRoomByUid(roomUid);
|
||||
if (null == room){
|
||||
return;
|
||||
}
|
||||
|
||||
//发送榜单更新
|
||||
//免费礼物特殊处理
|
||||
boolean isFreeGift = Constant.GiftConsumeType.ROOM_FREE_GIFT == gift.getConsumeType();
|
||||
Long giftGoldNum = isFreeGift ? Math.abs(gift.getGoldPrice() * giftNum) : goldNum;
|
||||
|
||||
roomRankService.updateRoomRank(roomUid, sendUid, recvUid, giftGoldNum.doubleValue(), date, isFreeGift, partitionId);
|
||||
Room room = roomService.getRoomByUid(roomUid);
|
||||
roomLevelService.updateRoomLevelExp(partitionId, roomUid, giftGoldNum.doubleValue(), room);
|
||||
if (room != null) {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("serialValue", RoomServiceFactory.getServiceByType(room.getType()).roomSerialValue(roomUid, partitionId));
|
||||
sendSysMsgService.sendSingleRoomMessage(room.getRoomId(), String.valueOf(room.getUid()), Constant.DefMsgType.RANK, Constant.DefMsgType.RANK_UPDATE, jsonObject);
|
||||
}
|
||||
roomDayDiamondNumService.addDiamondNum(partitionId, roomUid, date, giftMessage.getDiamondNum(), giftGoldNum.doubleValue());
|
||||
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("serialValue", RoomServiceFactory.getServiceByType(room.getType()).roomSerialValue(roomUid, partitionId));
|
||||
sendSysMsgService.sendSingleRoomMessage(room.getRoomId(), String.valueOf(room.getUid()), Constant.DefMsgType.RANK, Constant.DefMsgType.RANK_UPDATE, jsonObject);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.info("RankListener.updateAllRank-updateRoomRank:{}, e:{}", JSONObject.toJSONString(giftMessage), e.getMessage(), e);
|
||||
}
|
||||
|
@@ -0,0 +1,62 @@
|
||||
package com.accompany.business.event.listener;
|
||||
|
||||
import com.accompany.business.event.GiftMessageEvent;
|
||||
import com.accompany.business.message.GiftMessage;
|
||||
import com.accompany.business.service.room.*;
|
||||
import com.accompany.business.service.room.impl.RoomHourDiamondNumServiceImpl;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
import com.accompany.core.model.Room;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class RoomDiamondStatListener implements ApplicationListener<GiftMessageEvent> {
|
||||
|
||||
@Autowired
|
||||
private RoomService roomService;
|
||||
@Autowired
|
||||
private RoomDayDiamondNumService roomDayDiamondNumService;
|
||||
@Autowired
|
||||
private RoomHourDiamondNumServiceImpl roomHourDiamondNumService;
|
||||
@Autowired
|
||||
private RoomWeekDiamondNumService roomWeekDiamondNumService;
|
||||
|
||||
@Async
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public void onApplicationEvent(GiftMessageEvent giftMessageEvent) {
|
||||
GiftMessage giftMessage = (GiftMessage) giftMessageEvent.getSource();
|
||||
Long roomUid = giftMessage.getRoomUid();
|
||||
if (null == roomUid){
|
||||
return;
|
||||
}
|
||||
|
||||
Double diamondNum = giftMessage.getDiamondNum();
|
||||
if (null == diamondNum || diamondNum <= 0d){
|
||||
return;
|
||||
}
|
||||
|
||||
Long goldNum = giftMessage.getGoldNum();
|
||||
|
||||
Room room = roomService.getRoomByUid(roomUid);
|
||||
if (null == room){
|
||||
return;
|
||||
}
|
||||
|
||||
Integer partitionId = giftMessage.getPartitionId();
|
||||
Long messTime = giftMessage.getMessTime();
|
||||
Date dateTime = new Date(messTime);
|
||||
|
||||
roomHourDiamondNumService.addRoomHourDiamondNumMap(partitionId, roomUid, dateTime, diamondNum, goldNum.doubleValue());
|
||||
roomDayDiamondNumService.addDiamondNum(partitionId, roomUid, dateTime, diamondNum, goldNum.doubleValue());
|
||||
roomWeekDiamondNumService.addDiamondNum(partitionId, roomUid, dateTime, diamondNum, goldNum.doubleValue());
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,45 @@
|
||||
package com.accompany.business.event.listener;
|
||||
|
||||
import com.accompany.business.event.GiftMessageEvent;
|
||||
import com.accompany.business.message.GiftMessage;
|
||||
import com.accompany.business.service.room.RoomLevelService;
|
||||
import com.accompany.business.service.room.RoomService;
|
||||
import com.accompany.core.model.Room;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class RoomLevelListener implements ApplicationListener<GiftMessageEvent> {
|
||||
|
||||
@Autowired
|
||||
private RoomService roomService;
|
||||
@Autowired
|
||||
private RoomLevelService roomLevelService;
|
||||
|
||||
@Async
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public void onApplicationEvent(GiftMessageEvent giftMessageEvent) {
|
||||
GiftMessage giftMessage = (GiftMessage) giftMessageEvent.getSource();
|
||||
Long roomUid = giftMessage.getRoomUid();
|
||||
if (null == roomUid){
|
||||
return;
|
||||
}
|
||||
|
||||
Room room = roomService.getRoomByUid(roomUid);
|
||||
if (null == room){
|
||||
return;
|
||||
}
|
||||
|
||||
Integer partitionId = giftMessage.getPartitionId();
|
||||
Long goldNum = giftMessage.getGoldNum();
|
||||
|
||||
roomLevelService.updateRoomLevelExp(partitionId, roomUid, goldNum.doubleValue(), room);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,18 @@
|
||||
package com.accompany.business.mybatismapper.room;
|
||||
|
||||
import com.accompany.business.model.room.RoomWeekDiamondNum;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 房间周流水数据 Mapper 接口
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
public interface RoomWeekDiamondNumMapper extends BaseMapper<RoomWeekDiamondNum> {
|
||||
|
||||
Integer addDiamondNum(@Param("partitionId") Integer partitionId, @Param("roomUid") Long roomUid, @Param("statDate") String statDate, @Param("diamondNum") BigDecimal diamondNum, @Param("goldNum") BigDecimal goldNum);
|
||||
}
|
@@ -0,0 +1,14 @@
|
||||
package com.accompany.business.mybatismapper.room;
|
||||
|
||||
import com.accompany.business.model.room.RoomWeekDiamondReward;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* 房间周奖励政策 Mapper 接口
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
public interface RoomWeekDiamondRewardMapper extends BaseMapper<RoomWeekDiamondReward> {
|
||||
|
||||
}
|
@@ -0,0 +1,14 @@
|
||||
package com.accompany.business.mybatismapper.room;
|
||||
|
||||
import com.accompany.business.model.room.RoomWeekDiamondRewardRecord;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* 房间周奖励金币发放 Mapper 接口
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
public interface RoomWeekDiamondRewardRecordMapper extends BaseMapper<RoomWeekDiamondRewardRecord> {
|
||||
|
||||
}
|
@@ -0,0 +1,36 @@
|
||||
package com.accompany.business.service.room;
|
||||
|
||||
import com.accompany.business.model.room.RoomWeekDiamondNum;
|
||||
import com.accompany.business.mybatismapper.room.RoomWeekDiamondNumMapper;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
import com.accompany.core.enumeration.PartitionEnum;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.DayOfWeek;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 房间周流水数据 服务实现类
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
@Service
|
||||
public class RoomWeekDiamondNumService extends ServiceImpl<RoomWeekDiamondNumMapper, RoomWeekDiamondNum> {
|
||||
|
||||
@Async
|
||||
public Integer addDiamondNum(Integer partitionId, Long roomUid, Date statDate, Double diamondNum, Double goldNum) {
|
||||
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
|
||||
//周流水目前只统计阿拉伯区的
|
||||
if (!PartitionEnum.ARAB.equals(partitionEnum)) {
|
||||
return 0;
|
||||
}
|
||||
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(statDate, PartitionEnum.getByPartitionId(partitionId).getZoneId());
|
||||
String monday = zonedDateTime.with(DayOfWeek.MONDAY).format(DateTimeUtil.dateFormatter);
|
||||
return baseMapper.addDiamondNum(partitionId, roomUid, monday, BigDecimal.valueOf(diamondNum), BigDecimal.valueOf(goldNum));
|
||||
}
|
||||
}
|
@@ -0,0 +1,76 @@
|
||||
package com.accompany.business.service.room;
|
||||
|
||||
import com.accompany.business.model.room.RoomWeekDiamondRewardRecord;
|
||||
import com.accompany.business.mybatismapper.room.RoomWeekDiamondRewardRecordMapper;
|
||||
|
||||
import com.accompany.common.push.MarkdownMessage;
|
||||
import com.accompany.common.utils.EnvComponent;
|
||||
import com.accompany.core.enumeration.PartitionEnum;
|
||||
import com.accompany.core.service.message.MessageRobotPushService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 房间周奖励金币发放 服务实现类
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class RoomWeekDiamondRewardRecordService extends ServiceImpl<RoomWeekDiamondRewardRecordMapper, RoomWeekDiamondRewardRecord> {
|
||||
|
||||
@Autowired
|
||||
private EnvComponent envComponent;
|
||||
@Autowired
|
||||
private MessageRobotPushService messageRobotPushService;
|
||||
|
||||
public void loadWeekDataRobotSend(Integer partitionId, String startDate, String endDate) {
|
||||
LambdaQueryWrapper<RoomWeekDiamondRewardRecord> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.eq(RoomWeekDiamondRewardRecord::getPartitionId, partitionId)
|
||||
.ge(RoomWeekDiamondRewardRecord::getCreateTime, startDate).
|
||||
le(RoomWeekDiamondRewardRecord::getCreateTime, endDate);
|
||||
List<RoomWeekDiamondRewardRecord> rewardRecords = baseMapper.selectList(wrapper);
|
||||
if (CollectionUtils.isEmpty(rewardRecords)) {
|
||||
log.info("loadWeekDataRobotSend.empty.partitionId:{}, startDate:{},endDate:{}", partitionId, startDate, endDate);
|
||||
return;
|
||||
}
|
||||
Integer roomNum = 0;
|
||||
BigDecimal diamondNum = BigDecimal.ZERO;
|
||||
BigDecimal coins = BigDecimal.ZERO;
|
||||
for (RoomWeekDiamondRewardRecord rewardRecord : rewardRecords) {
|
||||
roomNum ++;
|
||||
diamondNum = diamondNum.add(rewardRecord.getDiamondNum());
|
||||
coins = coins.add(rewardRecord.getRewardGold());
|
||||
}
|
||||
this.sendRobotMsg(partitionId, startDate, roomNum, diamondNum, coins);
|
||||
}
|
||||
|
||||
private void sendRobotMsg(Integer partitionId, String statDate, Integer roomNum, BigDecimal diamondNum, BigDecimal coins) {
|
||||
String key;
|
||||
if (envComponent.getDevOrNativeEnv()) {
|
||||
key = "ce275432-117d-4016-9f24-3410f1d54e4d";
|
||||
} else {
|
||||
key = "ef5616d9-3b54-48f2-9323-7b3f4cd81673";
|
||||
}
|
||||
PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId);
|
||||
String title = "每周钻石流水金币发放";
|
||||
MarkdownMessage msg = new MarkdownMessage();
|
||||
msg.add(MarkdownMessage.getHeaderText(3, title));
|
||||
msg.add(MarkdownMessage.getReferenceText("区域: " + partitionEnum.getDesc()));
|
||||
msg.add(MarkdownMessage.getReferenceText("发放日期(操作发放的时间): " + statDate));
|
||||
msg.add(MarkdownMessage.getReferenceText("发放房间个数: " + roomNum));
|
||||
msg.add(MarkdownMessage.getReferenceText("发放房间钻石流水总值: " + diamondNum));
|
||||
msg.add(MarkdownMessage.getReferenceText("发放总金币数: " + coins));
|
||||
messageRobotPushService.pushMessageByKey(key, msg, false);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,45 @@
|
||||
package com.accompany.business.service.room;
|
||||
|
||||
import com.accompany.business.model.room.RoomWeekDiamondReward;
|
||||
import com.accompany.business.mybatismapper.room.RoomWeekDiamondRewardMapper;
|
||||
import com.accompany.core.enumeration.PartitionEnum;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.TreeMap;
|
||||
|
||||
/**
|
||||
* 房间周奖励政策 服务实现类
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
@Service
|
||||
public class RoomWeekDiamondRewardService extends ServiceImpl<RoomWeekDiamondRewardMapper, RoomWeekDiamondReward> {
|
||||
|
||||
public TreeMap<BigDecimal, RoomWeekDiamondReward> getRewardTreeMapByPartitionId(Integer partitionId) {
|
||||
List<RoomWeekDiamondReward> list = this.lambdaQuery().eq(RoomWeekDiamondReward::getPartitionId, partitionId)
|
||||
.orderByAsc(RoomWeekDiamondReward::getDiamondNum).list();
|
||||
TreeMap<BigDecimal, RoomWeekDiamondReward> treeMap = new TreeMap<>();
|
||||
list.forEach(x -> treeMap.put(x.getDiamondNum(), x));
|
||||
return treeMap;
|
||||
}
|
||||
|
||||
public BigDecimal calGoldReward(TreeMap<BigDecimal, RoomWeekDiamondReward> treeMap, BigDecimal diamond) {
|
||||
BigDecimal gold = BigDecimal.ZERO;
|
||||
if (treeMap.isEmpty()) {
|
||||
return gold;
|
||||
}
|
||||
BigDecimal lowerKey = treeMap.lowerKey(diamond);
|
||||
if (lowerKey == null) {
|
||||
return gold;
|
||||
}
|
||||
RoomWeekDiamondReward roomWeekDiamondReward = treeMap.get(lowerKey);
|
||||
if (roomWeekDiamondReward == null) {
|
||||
return gold;
|
||||
}
|
||||
return roomWeekDiamondReward.getRewardGold();
|
||||
}
|
||||
}
|
@@ -3,11 +3,10 @@ package com.accompany.business.service.room.impl;
|
||||
import com.accompany.business.model.room.RoomDayDiamondNum;
|
||||
import com.accompany.business.mybatismapper.room.RoomDayDiamondNumMapper;
|
||||
import com.accompany.business.service.room.RoomDayDiamondNumService;
|
||||
import com.accompany.business.service.room.RoomHourDiamondNumService;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
import com.accompany.core.enumeration.PartitionEnum;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@@ -23,14 +22,9 @@ import java.util.Date;
|
||||
@Service
|
||||
public class RoomDayDiamondNumServiceImpl extends ServiceImpl<RoomDayDiamondNumMapper, RoomDayDiamondNum> implements RoomDayDiamondNumService {
|
||||
|
||||
@Autowired
|
||||
private RoomHourDiamondNumService roomHourDiamondNumService;
|
||||
|
||||
@Async
|
||||
@Override
|
||||
public Integer addDiamondNum(Integer partitionId, Long roomUid, Date statDate, Double diamondNum, Double goldNum) {
|
||||
|
||||
roomHourDiamondNumService.addRoomHourDiamondNumMap(partitionId, roomUid, statDate, diamondNum, goldNum);
|
||||
|
||||
//日流水目前只统计了英语2区跟土耳其区的,英语2区设计金币发放
|
||||
if (!(PartitionEnum.ENGLISH.getId() == partitionId || PartitionEnum.TURKEY.getId() == partitionId)) {
|
||||
return 0;
|
||||
|
@@ -13,6 +13,7 @@ import org.redisson.api.RMap;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.redisson.codec.TypedJsonJacksonCodec;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@@ -80,6 +81,7 @@ public class RoomHourDiamondNumServiceImpl extends ServiceImpl<RoomHourDiamondNu
|
||||
hourGoldNumCacheMap.delete();
|
||||
}
|
||||
|
||||
@Async
|
||||
@Override
|
||||
public void addRoomHourDiamondNumMap(Integer partitionId, Long roomUid, Date statDate, Double diamondNum, Double goldNum) {
|
||||
String cacheKeyPatten = this.getCacheKeyPatten(statDate);
|
||||
|
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.accompany.business.mybatismapper.room.RoomWeekDiamondNumMapper">
|
||||
|
||||
<update id="addDiamondNum">
|
||||
INSERT INTO `room_week_diamond_num` (`room_uid`, `stat_date`, `partition_id`, `diamond_num`, `gold_num`)
|
||||
VALUES (#{roomUid}, #{statDate}, #{partitionId}, COALESCE(#{diamondNum}, 0.00), COALESCE(#{goldNum}, 0.00))
|
||||
ON DUPLICATE KEY UPDATE
|
||||
diamond_num = diamond_num + COALESCE(VALUES(diamond_num), 0.00), gold_num = gold_num + COALESCE(VALUES(gold_num), 0.00)
|
||||
</update>
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.accompany.business.mybatismapper.room.RoomWeekDiamondRewardMapper">
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.accompany.business.mybatismapper.room.RoomWeekDiamondRewardRecordMapper">
|
||||
|
||||
</mapper>
|
@@ -0,0 +1,39 @@
|
||||
package com.accompany.scheduler.task.room;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.accompany.business.service.room.RoomWeekDiamondRewardRecordService;
|
||||
import com.accompany.common.utils.DateTimeUtil;
|
||||
import com.accompany.core.enumeration.PartitionEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 房间周流水统计定时任务
|
||||
*
|
||||
* @author
|
||||
* @since 2025-08-26
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class RoomWeekDiamondTask {
|
||||
|
||||
@Autowired
|
||||
private RoomWeekDiamondRewardRecordService service;
|
||||
|
||||
@Scheduled(cron = "0 0 1 ? * MON")
|
||||
public void run() {
|
||||
Date date = new Date();
|
||||
PartitionEnum partitionEnum = PartitionEnum.ARAB;
|
||||
ZonedDateTime zonedDateTime = DateTimeUtil.convertWithZoneId(date, partitionEnum.getZoneId());
|
||||
String startDate = zonedDateTime.minusWeeks(1L).withHour(0).withMinute(0).withSecond(0).format(DateTimeUtil.datetimeFormatter);
|
||||
String endDate = zonedDateTime.minusDays(1L).withHour(23).withMinute(59).withSecond(59).format(DateTimeUtil.datetimeFormatter);
|
||||
log.info("RoomWeekDiamondTask start,startDate:{},endDate:{},date:{}==============", startDate, endDate, DateUtil.formatDateTime(date));
|
||||
service.loadWeekDataRobotSend(partitionEnum.getId(), startDate, endDate);
|
||||
log.info("RoomDayDiamondTask end,startDate:{},endDate:{},date:{}==============", startDate, endDate, DateUtil.formatDateTime(date));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user