日常任务-日任务奖励领取详情-明细

This commit is contained in:
2025-08-27 18:05:14 +08:00
parent 79b957f3fb
commit 1a12722bdf
9 changed files with 174 additions and 8 deletions

View File

@@ -1,14 +1,25 @@
package com.accompany.admin.service.dailytask;
import cn.hutool.core.date.DateUtil;
import com.accompany.business.constant.dailytask.DailyTaskTypeEnum;
import com.accompany.business.model.dailytask.DailyTaskRecvCoinStat;
import com.accompany.business.model.dailytask.DailyTaskRewardRecord;
import com.accompany.business.model.guild.GuildMember;
import com.accompany.business.service.dailytask.DailyTaskRecvCoinStatService;
import com.accompany.business.service.dailytask.DailyTaskRewardRecordService;
import com.accompany.business.service.dailytask.DailyTaskStatService;
import com.accompany.business.service.guild.GuildMemberService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.dailytask.DailyCoinRecvRecordVo;
import com.accompany.business.vo.dailytask.DailyCoinRecvVo;
import com.accompany.common.result.PageResult;
import com.accompany.common.utils.DateTimeUtil;
import com.accompany.core.enumeration.PartitionEnum;
import com.accompany.core.exception.AdminServiceException;
import com.accompany.core.model.Users;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -16,6 +27,8 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class DailyTaskAdminService {
@@ -24,9 +37,14 @@ public class DailyTaskAdminService {
private DailyTaskRecvCoinStatService dailyTaskRecvCoinStatService;
@Autowired
private DailyTaskStatService dailyTaskStatService;
@Autowired
private DailyTaskRewardRecordService dailyTaskRewardRecordService;
@Autowired
private UsersService usersService;
@Autowired
private GuildMemberService guildMemberService;
public PageResult<DailyCoinRecvVo> list(Integer pageNo, Integer pageSize, Integer partitionId, String startDate, String endDate) {
IPage<DailyTaskRecvCoinStat> dailyTaskRecvCoinStatIPage = dailyTaskRecvCoinStatService.selectDailyCoinRecvStat(partitionId, startDate, endDate, pageNo, pageSize);
PageResult<DailyCoinRecvVo> pageResult = new PageResult<>();
List<DailyCoinRecvVo> recvVoList = new ArrayList<>();
@@ -34,9 +52,18 @@ public class DailyTaskAdminService {
pageResult.setTotal((int) dailyTaskRecvCoinStatIPage.getTotal());
List<DailyTaskRecvCoinStat> records = dailyTaskRecvCoinStatIPage.getRecords();
if (pageNo == 1) {
if (CollectionUtils.isEmpty(records)) {
records = new ArrayList<>();
}
String todayDate = DateTimeUtil.convertWithZoneId(new Date(),
PartitionEnum.getByPartitionId(partitionId).getZoneId()).format(DateTimeUtil.dateFormatter);
records.add(dailyTaskStatService.statDailyCoinRecvStat(partitionId, todayDate));
if (StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)) {
if (startDate.compareTo(todayDate) <= 0 && endDate.compareTo(todayDate) >= 0) {
records.add(dailyTaskStatService.statDailyCoinRecvStat(partitionId, todayDate, false));
}
} else {
records.add(dailyTaskStatService.statDailyCoinRecvStat(partitionId, todayDate, false));
}
}
if (CollectionUtils.isEmpty(records)) {
return pageResult;
@@ -48,4 +75,47 @@ public class DailyTaskAdminService {
}
return pageResult;
}
public PageResult<DailyCoinRecvRecordVo> listRecord(Long erbanNo, Integer partitionId, String statDate,
String deviceId, String ip, Integer pageNo, Integer pageSize) {
Long uid = null;
if (erbanNo != null) {
Users user = usersService.getUserByErbanNo(erbanNo);
if (user == null) {
throw new AdminServiceException("ID:" + erbanNo + ",不存在");
}
uid = user.getUid();
}
IPage<DailyTaskRewardRecord> dailyTaskRewardRecordIPage = dailyTaskRewardRecordService
.listDetail(uid, partitionId, statDate, DailyTaskTypeEnum.UP_MIC_COIN.name(), deviceId, ip, pageNo, pageSize);
PageResult<DailyCoinRecvRecordVo> pageResult = new PageResult<>();
List<DailyCoinRecvRecordVo> recordVoList = new ArrayList<>();
pageResult.setRows(recordVoList);
pageResult.setTotal((int) dailyTaskRewardRecordIPage.getTotal());
List<DailyTaskRewardRecord> records = dailyTaskRewardRecordIPage.getRecords();
if (CollectionUtils.isEmpty(records)) {
return pageResult;
}
List<Long> uids = records.stream().map(DailyTaskRewardRecord::getUid).collect(Collectors.toList());
List<Long> guildMemberIds = records.stream().filter(record -> record.getGuildMemberId() != null)
.map(DailyTaskRewardRecord::getGuildMemberId).distinct().collect(Collectors.toList());
Map<Long, Users> usersMap = usersService.getUsersMapByUids(uids);
Map<Long, GuildMember> guildMemberMap = guildMemberService.mapByIds(guildMemberIds);
for (DailyTaskRewardRecord record : records) {
DailyCoinRecvRecordVo recordVo = new DailyCoinRecvRecordVo();
recordVo.setGuildId(record.getGuildId());
recordVo.setUid(record.getUid());
Users users = usersMap.get(record.getUid());
if (users != null) {
recordVo.setErbanNo(users.getErbanNo());
}
recordVo.setDeviceId(record.getDeviceId());
recordVo.setIp(record.getLoginIp());
GuildMember guildMember = guildMemberMap.get(record.getGuildMemberId());
recordVo.setStatusStr((guildMember == null || !guildMember.getEnable()) ? "无效" : "有效");
recordVo.setReceiveTime(DateUtil.formatDateTime(record.getCreateTime()));
recordVoList.add(recordVo);
}
return pageResult;
}
}

View File

@@ -1,8 +1,11 @@
package com.accompany.admin.controller.dailytask;
import com.accompany.admin.service.dailytask.DailyTaskAdminService;
import com.accompany.business.vo.dailytask.DailyCoinRecvRecordVo;
import com.accompany.business.vo.dailytask.DailyCoinRecvVo;
import com.accompany.common.result.PageResult;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -13,6 +16,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
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;
@Api(tags = "每日任务相关", value = "每日任务相关")
@RestController
@RequestMapping("/admin/dailyTask")
@@ -34,4 +42,40 @@ public class DailyTaskAdminController {
String startDate, String endDate) {
return dailyTaskAdminService.list(pageNo, pageSize, partitionId, startDate, endDate);
}
@GetMapping("/coinRecvDetail")
@ApiImplicitParams( {
@ApiImplicitParam(name = "partitionId", value = "分区id-列表有带", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "statDate", value = "时间-列表有带", required = true, dataType = "String"),
@ApiImplicitParam(name = "erbanNo", value = "主播id", required = true, dataType = "Long"),
@ApiImplicitParam(name = "deviceId", value = "设备id", dataType = "String"),
@ApiImplicitParam(name = "ip", value = "ip", dataType = "String"),
@ApiImplicitParam(name = "pageNo", value = "页码", dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "Integer")
})
@ApiOperation(value = "日任务奖励领取详情-明细", httpMethod = "GET")
public PageResult<DailyCoinRecvRecordVo> listRecord(Long erbanNo, Integer partitionId, String statDate,
String deviceId, String ip, Integer pageNo, Integer pageSize) {
return dailyTaskAdminService.listRecord(erbanNo, partitionId, statDate, deviceId, ip, pageNo, pageSize);
}
@GetMapping("/coinRecvDetailExport")
@ApiImplicitParams( {
@ApiImplicitParam(name = "partitionId", value = "分区id-列表有带", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "statDate", value = "时间-列表有带", required = true, dataType = "String"),
@ApiImplicitParam(name = "erbanNo", value = "主播id", required = true, dataType = "Long"),
@ApiImplicitParam(name = "deviceId", value = "设备id", dataType = "String"),
@ApiImplicitParam(name = "ip", value = "ip", dataType = "String"),
})
@ApiOperation(value = "日任务奖励领取详情-明细-导出", httpMethod = "GET")
public void coinRecvDetailExport(HttpServletResponse response, Long erbanNo, Integer partitionId, String statDate,
String deviceId, String ip) throws IOException {
PageResult<DailyCoinRecvRecordVo> pageResult = dailyTaskAdminService.listRecord(erbanNo, partitionId, statDate, deviceId, ip, -1, -1);
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(), DailyCoinRecvRecordVo.class).sheet("日任务奖励领取明细").doWrite(pageResult.getRows());
}
}

View File

@@ -0,0 +1,23 @@
package com.accompany.business.vo.dailytask;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class DailyCoinRecvRecordVo {
@ApiModelProperty(value = "公会 Id")
private Integer guildId;
@ApiModelProperty(value = "主播 uid")
private Long uid;
@ApiModelProperty(value = "主播 id")
private Long erbanNo;
@ApiModelProperty(value = "主播状态")
private String statusStr;
@ApiModelProperty(value = "领取IP")
private String ip;
@ApiModelProperty(value = "领取设备")
private String deviceId;
@ApiModelProperty(value = "领取时间")
private String receiveTime;
}

View File

@@ -7,6 +7,7 @@ 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 org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
/**
@@ -21,8 +22,8 @@ public class DailyTaskRecvCoinStatService extends ServiceImpl<DailyTaskRecvCoinS
public IPage<DailyTaskRecvCoinStat> selectDailyCoinRecvStat(Integer partitionId, String startDate, String endDate, Integer pageNo, Integer pageSize) {
LambdaQueryWrapper<DailyTaskRecvCoinStat> wrapper = Wrappers.lambdaQuery();
wrapper.eq(DailyTaskRecvCoinStat::getPartitionId, partitionId)
.ge(DailyTaskRecvCoinStat::getStatDate, startDate)
.le(DailyTaskRecvCoinStat::getStatDate, endDate)
.ge(StringUtils.isNotEmpty(startDate), DailyTaskRecvCoinStat::getStatDate, startDate)
.le(StringUtils.isNotEmpty(endDate), DailyTaskRecvCoinStat::getStatDate, endDate)
.orderByDesc(DailyTaskRecvCoinStat::getStatDate);
return baseMapper.selectPage(new Page<>(pageNo, pageSize), wrapper);
}

View File

@@ -3,7 +3,10 @@ package com.accompany.business.service.dailytask;
import com.accompany.business.model.dailytask.DailyTaskRewardRecord;
import com.accompany.business.mybatismapper.dailytask.DailyTaskRewardRecordMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import java.util.Date;
@@ -46,4 +49,16 @@ public class DailyTaskRewardRecordService extends ServiceImpl<DailyTaskRewardRec
.eq(DailyTaskRewardRecord::getStatDate, statDate);
return this.baseMapper.selectCount(wrapper).intValue();
}
public IPage<DailyTaskRewardRecord> listDetail(Long uid, Integer partitionId, String statDate, String taskKey,
String deviceId, String ip, Integer pageNo, Integer pageSize) {
LambdaQueryWrapper<DailyTaskRewardRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(DailyTaskRewardRecord::getPartitionId, partitionId)
.eq(uid != null, DailyTaskRewardRecord::getUid, uid)
.eq(DailyTaskRewardRecord::getTaskKey, taskKey)
.eq(DailyTaskRewardRecord::getStatDate, statDate)
.like(StringUtils.isNotEmpty(deviceId), DailyTaskRewardRecord::getDeviceId, deviceId)
.like(StringUtils.isNotEmpty(ip), DailyTaskRewardRecord::getLoginIp, ip);
return this.baseMapper.selectPage(new Page<>(pageNo, pageSize), wrapper);
}
}

View File

@@ -21,7 +21,7 @@ public class DailyTaskStatService {
@Autowired
private DailyTaskRecvCoinStatService dailyTaskRecvCoinStatService;
public DailyTaskRecvCoinStat statDailyCoinRecvStat(Integer partitionId, String statDate) {
public DailyTaskRecvCoinStat statDailyCoinRecvStat(Integer partitionId, String statDate, boolean insertFalg) {
DailyTaskRecvCoinStat dailyTaskRecvCoinStat = new DailyTaskRecvCoinStat();
Integer receiveNum = dailyTaskRewardRecordService.selectCount(partitionId, DailyTaskTypeEnum.UP_MIC_COIN.name(), statDate);
long guildMember = guildMemberService.countValidGuildMember(partitionId);
@@ -33,7 +33,9 @@ public class DailyTaskStatService {
dailyTaskRecvCoinStat.setGuildMemberNumn((int)guildMember);
dailyTaskRecvCoinStat.setCreateTime(new Date());
dailyTaskRecvCoinStat.setUpdateTime(dailyTaskRecvCoinStat.getCreateTime());
dailyTaskRecvCoinStatService.save(dailyTaskRecvCoinStat);
if (insertFalg) {
dailyTaskRecvCoinStatService.save(dailyTaskRecvCoinStat);
}
return dailyTaskRecvCoinStat;
}
}

View File

@@ -106,4 +106,15 @@ public class GuildMemberService extends ServiceImpl<GuildMemberMapper, GuildMemb
.eq(GuildMember::getEnable, Boolean.TRUE)
.count();
}
public Map<Long, GuildMember> mapByIds(List<Long> guildMemberIds) {
if (CollectionUtils.isEmpty(guildMemberIds)) {
return Collections.emptyMap();
}
List<GuildMember> guildMembers = baseMapper.selectByIds(guildMemberIds);
if (CollectionUtils.isEmpty(guildMembers)) {
return Collections.emptyMap();
}
return guildMembers.stream().collect(Collectors.toMap(GuildMember::getId, x -> x));
}
}

View File

@@ -61,7 +61,7 @@
<select id="countByPartitionDate" resultType="java.lang.Integer">
select
count(sum(mic_minutes) > #{reachMinutes}) reachNum,
count(mic_minutes > #{reachMinutes})
from guild_mic_statistics_policy2
where stat_date = #{statDate} and partition_id = #{partitionId}
</select>

View File

@@ -30,7 +30,7 @@ public class DailyTaskStatTask {
try {
Date statDate = DateUtil.offsetDay(date, -1);
log.info("=-=dailyTaskStat4EnTask=-=:statDate:{}", DateUtil.formatDateTime(date));
dailyTaskStatService.statDailyCoinRecvStat(partitionEnum.getId(), DateUtil.formatDate(statDate));
dailyTaskStatService.statDailyCoinRecvStat(partitionEnum.getId(), DateUtil.formatDate(statDate), true);
log.info("=-=dailyTaskStat4EnTask=-= end");
} catch (Exception e) {
log.error("[dailyTaskStat4EnTask] 异常", e);