diff --git a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/dailytask/DailyTaskAdminService.java b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/dailytask/DailyTaskAdminService.java index ad12a96c6..25e7f72f5 100644 --- a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/dailytask/DailyTaskAdminService.java +++ b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/dailytask/DailyTaskAdminService.java @@ -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 list(Integer pageNo, Integer pageSize, Integer partitionId, String startDate, String endDate) { - IPage dailyTaskRecvCoinStatIPage = dailyTaskRecvCoinStatService.selectDailyCoinRecvStat(partitionId, startDate, endDate, pageNo, pageSize); PageResult pageResult = new PageResult<>(); List recvVoList = new ArrayList<>(); @@ -34,9 +52,18 @@ public class DailyTaskAdminService { pageResult.setTotal((int) dailyTaskRecvCoinStatIPage.getTotal()); List 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 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 dailyTaskRewardRecordIPage = dailyTaskRewardRecordService + .listDetail(uid, partitionId, statDate, DailyTaskTypeEnum.UP_MIC_COIN.name(), deviceId, ip, pageNo, pageSize); + PageResult pageResult = new PageResult<>(); + List recordVoList = new ArrayList<>(); + pageResult.setRows(recordVoList); + pageResult.setTotal((int) dailyTaskRewardRecordIPage.getTotal()); + List records = dailyTaskRewardRecordIPage.getRecords(); + if (CollectionUtils.isEmpty(records)) { + return pageResult; + } + List uids = records.stream().map(DailyTaskRewardRecord::getUid).collect(Collectors.toList()); + List guildMemberIds = records.stream().filter(record -> record.getGuildMemberId() != null) + .map(DailyTaskRewardRecord::getGuildMemberId).distinct().collect(Collectors.toList()); + Map usersMap = usersService.getUsersMapByUids(uids); + Map 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; + } } diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/dailytask/DailyTaskAdminController.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/dailytask/DailyTaskAdminController.java index 1a635b240..c2aa05826 100644 --- a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/dailytask/DailyTaskAdminController.java +++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/dailytask/DailyTaskAdminController.java @@ -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 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 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()); + } } diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyCoinRecvRecordVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyCoinRecvRecordVo.java new file mode 100644 index 000000000..067487b3c --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyCoinRecvRecordVo.java @@ -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; +} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskRecvCoinStatService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskRecvCoinStatService.java index 7dcfc4148..242983ab7 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskRecvCoinStatService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskRecvCoinStatService.java @@ -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 selectDailyCoinRecvStat(Integer partitionId, String startDate, String endDate, Integer pageNo, Integer pageSize) { LambdaQueryWrapper 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); } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskRewardRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskRewardRecordService.java index 8646376b1..d26a9eaf4 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskRewardRecordService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskRewardRecordService.java @@ -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 listDetail(Long uid, Integer partitionId, String statDate, String taskKey, + String deviceId, String ip, Integer pageNo, Integer pageSize) { + LambdaQueryWrapper 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); + } } \ No newline at end of file diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskStatService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskStatService.java index 567be59bd..6f66082f9 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskStatService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/DailyTaskStatService.java @@ -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; } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberService.java index f4b445604..66e2d883c 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberService.java @@ -106,4 +106,15 @@ public class GuildMemberService extends ServiceImpl mapByIds(List guildMemberIds) { + if (CollectionUtils.isEmpty(guildMemberIds)) { + return Collections.emptyMap(); + } + List guildMembers = baseMapper.selectByIds(guildMemberIds); + if (CollectionUtils.isEmpty(guildMembers)) { + return Collections.emptyMap(); + } + return guildMembers.stream().collect(Collectors.toMap(GuildMember::getId, x -> x)); + } } diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildMicStatisticsPolicy2Mapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildMicStatisticsPolicy2Mapper.xml index 6b706ddbc..fef1669d2 100644 --- a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildMicStatisticsPolicy2Mapper.xml +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildMicStatisticsPolicy2Mapper.xml @@ -61,7 +61,7 @@ diff --git a/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/dailytask/DailyTaskStatTask.java b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/dailytask/DailyTaskStatTask.java index 31b3b7040..e3658bb56 100644 --- a/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/dailytask/DailyTaskStatTask.java +++ b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/dailytask/DailyTaskStatTask.java @@ -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);