From 254fb07b16cef8e520180a2d0f299caf7ddff24f Mon Sep 17 00:00:00 2001 From: hokli <2629910752@qq.com> Date: Fri, 17 Oct 2025 18:58:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=AC=E4=BC=9A=E5=B0=8F=E6=97=B6=E6=B5=81?= =?UTF-8?q?=E6=B0=B4=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...uildDiamondStatisticsHourAdminService.java | 61 +++++++++++++++ ...dDiamondStatisticsHourAdminController.java | 74 +++++++++++++++++++ .../guild/GuildDiamondStatisticsHour.java | 44 +++++++++++ .../guild/GuildDiamondStatisticsHourVo.java | 27 +++++++ .../GuildDiamondStatisticsHourMapper.java | 29 ++++++++ .../GuildDiamondStatisticsHourService.java | 33 +++++++++ .../GuildDiamondStatisticsHourMapper.xml | 48 ++++++++++++ 7 files changed, 316 insertions(+) create mode 100644 accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/guild/GuildDiamondStatisticsHourAdminService.java create mode 100644 accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/guild/GuildDiamondStatisticsHourAdminController.java create mode 100644 accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guild/GuildDiamondStatisticsHour.java create mode 100644 accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guild/GuildDiamondStatisticsHourVo.java create mode 100644 accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guild/GuildDiamondStatisticsHourMapper.java create mode 100644 accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsHourService.java create mode 100644 accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildDiamondStatisticsHourMapper.xml diff --git a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/guild/GuildDiamondStatisticsHourAdminService.java b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/guild/GuildDiamondStatisticsHourAdminService.java new file mode 100644 index 000000000..03b0bde76 --- /dev/null +++ b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/guild/GuildDiamondStatisticsHourAdminService.java @@ -0,0 +1,61 @@ +package com.accompany.admin.service.guild; + +import cn.hutool.core.date.DateUtil; +import com.accompany.business.model.guild.Guild; +import com.accompany.business.service.guild.GuildDiamondStatisticsHourService; +import com.accompany.business.service.guild.GuildService; +import com.accompany.business.service.user.UsersService; +import com.accompany.business.vo.guild.GuildDiamondStatisticsHourVo; +import com.accompany.common.status.BusiStatus; +import com.accompany.core.enumeration.PartitionEnum; +import com.accompany.core.exception.ServiceException; +import com.accompany.core.model.Users; +import com.accompany.core.util.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; + +@Service +public class GuildDiamondStatisticsHourAdminService { + @Autowired + private GuildService guildService; + @Autowired + private UsersService usersService; + @Autowired + private GuildDiamondStatisticsHourService guildDiamondStatisticsHourService; + + public Page list(String startDate, String endDate, + Integer partitionId, Integer regionId, + Integer guildId, Long ownerErbanNo, + Integer pageNo, Integer pageSize, Long inviteUid) { + if (StringUtils.isEmpty(startDate) || StringUtils.isEmpty(endDate)) { + Date date = new Date(); + startDate = DateUtil.formatDate(DateUtil.offsetDay(date, -30)); + endDate = DateUtil.formatDate(date); + } + if (guildId == null && ownerErbanNo != null) { + Users users = usersService.getUserByErbanNo(ownerErbanNo); + if (users == null) { + throw new ServiceException(BusiStatus.SERVERERROR,"公会长信息不存在"); + } + Long ownerUid = users.getUid(); + Guild guild = guildService.getVaildGuildByOwnerUid(ownerUid); + if (guild == null) { + throw new ServiceException(BusiStatus.SERVERERROR,"公会不存在"); + } + guildId = guild.getId(); + } + Page guildDiamondStatisticsHourVoPage = + guildDiamondStatisticsHourService.listGuildByStatDate(startDate, endDate, partitionId, regionId, guildId, pageNo, pageSize, inviteUid); + if (!CollectionUtils.isEmpty(guildDiamondStatisticsHourVoPage.getRecords())) { + for (GuildDiamondStatisticsHourVo vo: guildDiamondStatisticsHourVoPage.getRecords()) { + vo.setPartitionDesc(PartitionEnum.getByPartitionId(vo.getPartitionId()).getDesc()); + } + } + return guildDiamondStatisticsHourVoPage; + } + +} diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/guild/GuildDiamondStatisticsHourAdminController.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/guild/GuildDiamondStatisticsHourAdminController.java new file mode 100644 index 000000000..81b52c97b --- /dev/null +++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/guild/GuildDiamondStatisticsHourAdminController.java @@ -0,0 +1,74 @@ +package com.accompany.admin.controller.guild; + +import com.accompany.admin.service.guild.GuildDiamondStatisticsHourAdminService; +import com.accompany.business.param.BasePageParams; +import com.accompany.business.vo.guild.GuildDiamondStatisticsHourVo; +import com.accompany.core.vo.BaseResponseVO; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.support.ExcelTypeEnum; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +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.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; + +@Api(tags = "公会小时钻石流水") +@RestController +@RequestMapping("/admin/guild/diamondStatistics") +public class GuildDiamondStatisticsHourAdminController { + + @Autowired + private GuildDiamondStatisticsHourAdminService guildDiamondStatisticsHourAdminService; + + @ApiImplicitParams({ + @ApiImplicitParam(name = "partitionId", value = "分区id", required = true), + @ApiImplicitParam(name = "ownerErbanNo", value = "公会长id"), + @ApiImplicitParam(name = "guildId", value = "公会id"), + @ApiImplicitParam(name = "startTime", value = "开始时间 yyyy-mm-dd", dataType = "string"), + @ApiImplicitParam(name = "endTime", value = "结束时间 yyyy-mm-dd", dataType = "string"), + @ApiImplicitParam(name = "pageNo", value = "页码", required = true), + @ApiImplicitParam(name = "pageSize", value = "页长", required = true) + }) + @ApiOperation(value = "公会小时钻石流水列表", httpMethod = "GET") + @GetMapping("") + public BaseResponseVO> list(BasePageParams basePageParams, + int partitionId, Integer regionId, + Integer guildId, Long ownerErbanNo) { + return new BaseResponseVO<>(guildDiamondStatisticsHourAdminService.list(basePageParams.getStartTime(), basePageParams.getEndTime(), + partitionId, regionId, guildId, ownerErbanNo, basePageParams.getPageNo(), basePageParams.getPageSize(), null)); + } + + @ApiImplicitParams({ + @ApiImplicitParam(name = "partitionId", value = "分区id", required = true), + @ApiImplicitParam(name = "ownerErbanNo", value = "公会长id"), + @ApiImplicitParam(name = "guildId", value = "公会id"), + @ApiImplicitParam(name = "startTime", value = "开始时间 yyyy-mm-dd", dataType = "string"), + @ApiImplicitParam(name = "endTime", value = "结束时间 yyyy-mm-dd", dataType = "string"), + @ApiImplicitParam(name = "pageNo", value = "页码", required = true), + @ApiImplicitParam(name = "pageSize", value = "页长", required = true) + }) + @ApiOperation(value = "公会小时钻石流水列表-导出", httpMethod = "GET") + @GetMapping("/export") + public void export(HttpServletResponse response, BasePageParams basePageParams, + Integer regionId, + Integer guildId, Long ownerErbanNo) throws IOException { + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + // 这里URLEncoder.encode可以防止中文乱码 + String excelName = URLEncoder.encode("公会小时钻石流水列表", StandardCharsets.UTF_8); + Page list = guildDiamondStatisticsHourAdminService.list(basePageParams.getStartTime(), basePageParams.getEndTime(), + basePageParams.getPartitionId(), regionId, guildId, ownerErbanNo, 1, -1, null); + response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue()); + EasyExcel.write(response.getOutputStream(), GuildDiamondStatisticsHourVo.class).sheet("公会小时钻石流水列表").doWrite(list.getRecords()); + } + +} diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guild/GuildDiamondStatisticsHour.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guild/GuildDiamondStatisticsHour.java new file mode 100644 index 000000000..bdd4adefb --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guild/GuildDiamondStatisticsHour.java @@ -0,0 +1,44 @@ +package com.accompany.business.model.guild; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 公会钻石流水统计按小时实体类 + * + * @author + * @since 2025-10-17 + */ +@Data +public class GuildDiamondStatisticsHour implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id" , type = IdType.AUTO) + private Long id; + private String statDate; + private Integer partitionId; + /** + * 统计日期yyyy--MM-dd HH + */ + private String statHour; + private Long guildMemberId; + private Long uid; + /** + * 所属厅id + */ + private Integer guildId; + private BigDecimal diamondNum; + /** + * 创建时间 + */ + private Date createTime; + private Date updateTime; + + +} diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guild/GuildDiamondStatisticsHourVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guild/GuildDiamondStatisticsHourVo.java new file mode 100644 index 000000000..eac755420 --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guild/GuildDiamondStatisticsHourVo.java @@ -0,0 +1,27 @@ +package com.accompany.business.vo.guild; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +@Data +public class GuildDiamondStatisticsHourVo { + @ExcelProperty("分区") + private String partitionDesc; + @ExcelProperty("公会id") + private Integer guildId; + @ExcelProperty("公会昵称") + private String guildName; + @ExcelProperty("公会长id") + private Long ownerErbanNo; + @ExcelProperty("公会长地区") + private String ownerRegionDesc; + @ExcelProperty("公会操作人") + private String adminUsername; + @ExcelProperty("主播人数") + private Integer memberNum; + @ExcelIgnore + private Integer partitionId; + @ExcelProperty("钻石流水") + private Double diamondNum; +} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guild/GuildDiamondStatisticsHourMapper.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guild/GuildDiamondStatisticsHourMapper.java new file mode 100644 index 000000000..7f6f2e05e --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guild/GuildDiamondStatisticsHourMapper.java @@ -0,0 +1,29 @@ +package com.accompany.business.mybatismapper.guild; + +import com.accompany.business.model.guild.GuildDiamondStatisticsHour; +import com.accompany.business.vo.guild.GuildDiamondStatisticsHourVo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; + +/** + * 公会钻石流水统计按小时 Mapper 接口 + * + * @author + * @since 2025-10-17 + */ +public interface GuildDiamondStatisticsHourMapper extends BaseMapper { + + int updateHourDiamondStatistics(@Param("statDate")String statDate, @Param("hourDate")String hourDate, + @Param("guildMemberId")Long guildMemberId, @Param("partitionId") Integer partitionId, @Param("guildId")Integer guildId, @Param("uid")Long uid, + @Param("diamond")Double diamond, @Param("time") Date time); + + Page listGuildByStatDate(@Param("ipage") Page ipage, + @Param("startDate")String startDate, @Param("endDate")String endDate, + @Param("guildId") Integer guildId, + @Param("partitionId") Integer partitionId, + @Param("regionId") Integer regionId, + @Param("inviteUid") Long inviteUid); +} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsHourService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsHourService.java new file mode 100644 index 000000000..76c8498f3 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsHourService.java @@ -0,0 +1,33 @@ +package com.accompany.business.service.guild; + +import com.accompany.business.model.guild.GuildDiamondStatisticsHour; +import com.accompany.business.model.guild.GuildMember; +import com.accompany.business.mybatismapper.guild.GuildDiamondStatisticsHourMapper; +import com.accompany.business.vo.guild.GuildDiamondStatisticsHourVo; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.Date; + +/** + * 公会钻石流水统计按小时 服务实现类 + * + * @author + * @since 2025-10-17 + */ +@Service +public class GuildDiamondStatisticsHourService extends ServiceImpl { + + public int updateHourDiamondStatistics(String statDate, String hourDate, GuildMember guildMember, double diamond) { + Date time = new Date(); + int updated = baseMapper.updateHourDiamondStatistics(statDate, hourDate, guildMember.getId(), guildMember.getPartitionId(), guildMember.getGuildId(), guildMember.getUid(), diamond, time); + return updated; + } + + public Page listGuildByStatDate(String statDate, String endDate, Integer partitionId, Integer regionId, + Integer guildId, Integer pageNo, Integer pageSize, Long inviteUid) { + Page page = new Page<>(pageNo, pageSize); + return baseMapper.listGuildByStatDate(page, statDate, endDate, guildId, partitionId, regionId, inviteUid); + } +} diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildDiamondStatisticsHourMapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildDiamondStatisticsHourMapper.xml new file mode 100644 index 000000000..3b868e88f --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildDiamondStatisticsHourMapper.xml @@ -0,0 +1,48 @@ + + + + + + INSERT INTO `guild_diamond_statistics_hour` (`stat_date`, `stat_hour`, `guild_member_id`, `partition_id`, `uid`, + `guild_id`, `diamond_num`, `create_time`, `update_time`) + VALUES (#{statDate}, #{hourDate}, #{guildMemberId}, #{partitionId}, #{uid}, #{guildId}, #{diamond}, #{time}, + #{time}) ON DUPLICATE KEY + UPDATE + diamond_num = diamond_num + + values (diamond_num), update_time = + values (update_time) + + + +