From a192250488d208935d287695023a3cc5c031b1b3 Mon Sep 17 00:00:00 2001 From: hokli <2629910752@qq.com> Date: Mon, 21 Jul 2025 14:49:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E8=90=A5=E6=B8=B8=E6=88=8F=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gamedata --- .../controller/game/GameAdminController.java | 50 +++++++++++- .../game/GameDataAdminController.java | 29 ++++++- .../sharding/vo/GameUserDataDetailVo.java | 5 ++ .../sharding/config/ShardingSphereConfig.java | 4 +- .../mapper/BaiShunGameRecordMapper.java | 3 + .../sharding/mapper/GameGoldLogMapper.java | 3 + .../sharding/mapper/JoyGameRecordMapper.java | 3 + .../sqlmappers/BaiShunGameRecordMapper.xml | 22 +++++ .../sharding/sqlmappers/GameGoldLogMapper.xml | 24 +++++- .../sqlmappers/JoyGameRecordMapper.xml | 15 ++++ .../business/vo/game/GameConfigVO.java | 1 + .../game/BaiShunGameRecordService.java | 3 + .../game/BaiShunGameRecordServiceImpl.java | 5 ++ .../service/game/GameDayStatDataService.java | 3 +- .../service/game/GameGoldLogService.java | 2 + .../service/game/GameGoldLogServiceImpl.java | 5 ++ .../business/service/game/GameService.java | 1 + .../service/game/JoyGameRecordService.java | 2 + .../game/impl/GameDayStatDataServiceImpl.java | 81 ++++++++++++++++++- .../game/impl/JoyGameRecordServiceImpl.java | 5 ++ 20 files changed, 256 insertions(+), 10 deletions(-) diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/game/GameAdminController.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/game/GameAdminController.java index 6ce976a2f..6d10569c3 100644 --- a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/game/GameAdminController.java +++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/game/GameAdminController.java @@ -8,11 +8,17 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import java.util.ArrayList; import java.util.Collections; import java.util.List; +import static com.accompany.common.constant.Constant.SysConfId.*; + @Api(tags = "游戏配置", value = "游戏配置") @RestController @RequestMapping("/admin/game") @@ -42,4 +48,46 @@ public class GameAdminController extends BaseController { } return BusiResult.success(configGameList); } + + @ApiOperation(value = "游戏列表", httpMethod = "GET") + @GetMapping("/allList") + public BusiResult> allList() { + List resultList = new ArrayList<>(); + GameConfigVO gameConfigVO = new GameConfigVO(); + gameConfigVO.setGameChannel(GameService.ALL); + gameConfigVO.setGameId(GameService.ALL); + gameConfigVO.setGameName(GameService.ALL); + resultList.add(gameConfigVO); + + List joyPlayList = gameService.getAllConfigGameList(JOY_PLAY_GAME); + if (CollectionUtils.isNotEmpty(joyPlayList)) { + for (GameConfigVO configVO : joyPlayList) { + if (gameConfigVO.getGameName().trim().contains("全部")) { + continue; + } + resultList.add(configVO); + } + } + + List leaderccList = gameService.getAllConfigGameList(LEADERCC_GAME); + if (CollectionUtils.isNotEmpty(leaderccList)) { + for (GameConfigVO configVO : leaderccList) { + if (gameConfigVO.getGameName().trim().contains("全部")) { + continue; + } + resultList.add(configVO); + } + } + + List baishunList = gameService.getAllConfigGameList(BAISHUN_GAME); + if (CollectionUtils.isNotEmpty(baishunList)) { + for (GameConfigVO configVO : baishunList) { + if (gameConfigVO.getGameName().trim().contains("全部")) { + continue; + } + resultList.add(configVO); + } + } + return BusiResult.success(resultList); + } } diff --git a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/game/GameDataAdminController.java b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/game/GameDataAdminController.java index 19a02ce28..9825ab7b9 100644 --- a/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/game/GameDataAdminController.java +++ b/accompany-admin/accompany-admin-web/src/main/java/com/accompany/admin/controller/game/GameDataAdminController.java @@ -1,5 +1,7 @@ package com.accompany.admin.controller.game; +import com.accompany.admin.controller.BaseController; +import com.accompany.admin.service.system.AdminPartitionService; import com.accompany.business.param.BasePageParams; import com.accompany.business.service.game.GameDayStatDataService; import com.accompany.common.result.BusiResult; @@ -29,11 +31,14 @@ import java.util.List; @Api(tags = "游戏数据汇总", value = "游戏数据汇总") @RestController @RequestMapping("/admin/gamedata") -public class GameDataAdminController { +public class GameDataAdminController extends BaseController { @Autowired private GameDayStatDataService gameDayStatDataService; + @Autowired + private AdminPartitionService adminPartitionService; + @ApiOperation(value = "Game汇总", httpMethod = "GET") @ApiImplicitParams({ @ApiImplicitParam(name = "channel", value = "第三方名称,LEADERCC-灵,BAISHUN-百顺", required = true), @@ -70,8 +75,8 @@ public class GameDataAdminController { @ApiImplicitParam(name = "gameId", value = "游戏id", required = false), }) @GetMapping("/user/total") - public BusiResult> userList(String erbanNoStr, String channel, String gameId, BasePageParams params) { - PageResult gameUserDataDetailVoPageResult = gameDayStatDataService.userList(erbanNoStr, channel, gameId, params.getStartTime(), params.getEndTime(), + public BusiResult> userTotal(String erbanNoStr, String channel, String gameId, BasePageParams params) { + PageResult gameUserDataDetailVoPageResult = gameDayStatDataService.userTotal(erbanNoStr, channel, gameId, params.getStartTime(), params.getEndTime(), params.getPartitionId(), params.getPageNo(), params.getPageSize()); return BusiResult.success(gameUserDataDetailVoPageResult); } @@ -98,7 +103,7 @@ public class GameDataAdminController { @PostMapping("/user/export") public void userExport(HttpServletResponse response, String erbanNoStr, String channel, String gameId, BasePageParams params) throws IOException { params.setPageSize(100000); - PageResult gameDataTotalVoPageResult = gameDayStatDataService.userList(erbanNoStr, channel, gameId, params.getStartTime(), params.getEndTime(), + PageResult gameDataTotalVoPageResult = gameDayStatDataService.userTotal(erbanNoStr, channel, gameId, params.getStartTime(), params.getEndTime(), params.getPartitionId(), 0, -1); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); @@ -137,4 +142,20 @@ public class GameDataAdminController { response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue()); EasyExcel.write(response.getOutputStream(), GameDetailVo.class).sheet("游戏明细").doWrite(data.getRows()); } + + + @ApiOperation(value = "运营游戏数据(单用户汇总)", httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "erbanNo", value = "用户id", required = true), + @ApiImplicitParam(name = "channel", value = "第三方名称,LEADERCC-灵,BAISHUN-百顺,JOYPLAY-游玩", required = false), + @ApiImplicitParam(name = "gameId", value = "游戏id", required = false), + @ApiImplicitParam(name = "startDate", value = "开始时间yyyy-MM-dd", required = false), + @ApiImplicitParam(name = "endDate", value = "结束时间yyyy-MM-dd", required = false), + }) + @GetMapping("/userTotalALL") + public BusiResult userTotalALL(Long erbanNo, String channel, String gameId, String startDate, String endDate) { + List rolePartitionIds = adminPartitionService.getAllPartitionId(getAdminId()); + GameUserDataDetailVo gameUserDataDetailVoPageResult = gameDayStatDataService.userTotalALL(erbanNo, channel, gameId, startDate, endDate, rolePartitionIds); + return BusiResult.success(gameUserDataDetailVoPageResult); + } } diff --git a/accompany-base/accompany-sharding/accompany-sharding-sdk/src/main/java/com/accompany/sharding/vo/GameUserDataDetailVo.java b/accompany-base/accompany-sharding/accompany-sharding-sdk/src/main/java/com/accompany/sharding/vo/GameUserDataDetailVo.java index 25b7ce35f..c280ef120 100644 --- a/accompany-base/accompany-sharding/accompany-sharding-sdk/src/main/java/com/accompany/sharding/vo/GameUserDataDetailVo.java +++ b/accompany-base/accompany-sharding/accompany-sharding-sdk/src/main/java/com/accompany/sharding/vo/GameUserDataDetailVo.java @@ -1,5 +1,6 @@ package com.accompany.sharding.vo; +import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -60,4 +61,8 @@ public class GameUserDataDetailVo { @ApiModelProperty("比例") private BigDecimal betRate; + @ExcelIgnore + @ApiModelProperty("充值等级") + private String chargeLevel; + } diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/config/ShardingSphereConfig.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/config/ShardingSphereConfig.java index 709879035..bba01768f 100644 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/config/ShardingSphereConfig.java +++ b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/config/ShardingSphereConfig.java @@ -236,7 +236,7 @@ public class ShardingSphereConfig { } private AlgorithmConfiguration getGameGoldLogShardingAlgorithmConfiguration() { - AlgorithmConfiguration algorithmConfiguration = getMonthShardingAlgorithmConfiguration(); + AlgorithmConfiguration algorithmConfiguration = getMonthShardingAlgorithmConfigurationV2(); return algorithmConfiguration; } @@ -245,7 +245,7 @@ public class ShardingSphereConfig { } private AlgorithmConfiguration getBaiShunGameRecordShardingAlgorithmConfiguration() { - return getMonthShardingAlgorithmConfiguration(); + return getMonthShardingAlgorithmConfigurationV2(); } private AlgorithmConfiguration getFamilyMemberRoomMicRecordShardingAlgorithmConfiguration() { diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/mapper/BaiShunGameRecordMapper.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/mapper/BaiShunGameRecordMapper.java index f3ac6bceb..22c49acca 100644 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/mapper/BaiShunGameRecordMapper.java +++ b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/mapper/BaiShunGameRecordMapper.java @@ -24,4 +24,7 @@ public interface BaiShunGameRecordMapper extends BaseMapper { IPage gameDetail(IPage iPage, @Param("gameId") String gameId, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime, @Param("partitionId") Integer partitionId); + + GameUserDataDetailVo userTotalALL(@Param("uid") Long uid, @Param("gameId") String gameId, + @Param("beginTime") Date beginTime, @Param("endTime") Date endTime); } diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/mapper/GameGoldLogMapper.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/mapper/GameGoldLogMapper.java index 5d9f01936..c5cf8c77f 100644 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/mapper/GameGoldLogMapper.java +++ b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/mapper/GameGoldLogMapper.java @@ -20,4 +20,7 @@ public interface GameGoldLogMapper extends BaseMapper { IPage gameDetail(IPage iPage, @Param("gameId") String gameId, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime, @Param("partitionId") Integer partitionId); + + GameUserDataDetailVo userTotalALL(@Param("uid") Long uid, @Param("gameId") String gameId, + @Param("beginTime") Date beginTime, @Param("endTime") Date endTime); } diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/mapper/JoyGameRecordMapper.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/mapper/JoyGameRecordMapper.java index a71ad0657..8c24bbbc6 100644 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/mapper/JoyGameRecordMapper.java +++ b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/mapper/JoyGameRecordMapper.java @@ -26,4 +26,7 @@ public interface JoyGameRecordMapper extends BaseMapper { IPage gameDetail(IPage iPage, @Param("gameId") String gameId, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime, @Param("partitionId") Integer partitionId); + + GameUserDataDetailVo userTotalALL(@Param("uid") Long uid, @Param("gameId") String gameId, + @Param("beginTime") Date beginTime, @Param("endTime") Date endTime); } diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/resources/sharding/sqlmappers/BaiShunGameRecordMapper.xml b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/resources/sharding/sqlmappers/BaiShunGameRecordMapper.xml index 31e5a1cd4..6b7b193c1 100644 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/resources/sharding/sqlmappers/BaiShunGameRecordMapper.xml +++ b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/resources/sharding/sqlmappers/BaiShunGameRecordMapper.xml @@ -82,4 +82,26 @@ group by statDate,gr.game_id order by statDate desc + + \ No newline at end of file diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/resources/sharding/sqlmappers/GameGoldLogMapper.xml b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/resources/sharding/sqlmappers/GameGoldLogMapper.xml index 769b38630..1b8b0fa45 100644 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/resources/sharding/sqlmappers/GameGoldLogMapper.xml +++ b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/resources/sharding/sqlmappers/GameGoldLogMapper.xml @@ -85,4 +85,26 @@ group by statDate,gr.game_id order by statDate desc - \ No newline at end of file + + + diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/resources/sharding/sqlmappers/JoyGameRecordMapper.xml b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/resources/sharding/sqlmappers/JoyGameRecordMapper.xml index 8e72842ca..21d29cbd6 100644 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/resources/sharding/sqlmappers/JoyGameRecordMapper.xml +++ b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/resources/sharding/sqlmappers/JoyGameRecordMapper.xml @@ -71,4 +71,19 @@ group by statDate,gr.game_id order by statDate desc + + + diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/game/GameConfigVO.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/game/GameConfigVO.java index a06e6e9d8..1c5c6d95d 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/game/GameConfigVO.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/game/GameConfigVO.java @@ -4,6 +4,7 @@ import lombok.Data; @Data public class GameConfigVO { + private String gameChannel; private String gameName; private String gameId; } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/BaiShunGameRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/BaiShunGameRecordService.java index 1fd9c4531..4bf5b0ae4 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/BaiShunGameRecordService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/BaiShunGameRecordService.java @@ -18,4 +18,7 @@ public interface BaiShunGameRecordService extends IService { IPage userTotalList(IPage iPage, List uids, String gameId, Date beginTime, Date endTime, Integer partitionId); GameUserDataDetailVo userTotalStat(List uids, String gameId, Date beginTime, Date endTime, Integer partitionId); IPage gameDetail(IPage iPage, String gameId, Date beginTime, Date endTime, Integer partitionId); + + + GameUserDataDetailVo userTotalALL(Long uid, String gameId, Date beginTime, Date endTime); } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/BaiShunGameRecordServiceImpl.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/BaiShunGameRecordServiceImpl.java index 5e152d943..850e8a51a 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/BaiShunGameRecordServiceImpl.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/BaiShunGameRecordServiceImpl.java @@ -38,4 +38,9 @@ public class BaiShunGameRecordServiceImpl extends ServiceImpl { PageResult totalList( String channel, String gameId, String startDate, String endDate, Integer partitionId, Integer pageNo, Integer pageSize); - PageResult userList(String erbanNoStr, + PageResult userTotal(String erbanNoStr, String channel, String gameId, String startDate, String endDate, Integer partitionId, Integer pageNo, Integer pageSize); List userListOffset7and14(String erbanNoStr, @@ -39,4 +39,5 @@ public interface GameDayStatDataService extends IService { */ void statDayList(String channel, Date statTime); + GameUserDataDetailVo userTotalALL(Long erbanNo, String channel, String gameId, String startDate, String endDate, List rolePartitionIds); } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/GameGoldLogService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/GameGoldLogService.java index 9cfb036e8..c281417a1 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/GameGoldLogService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/GameGoldLogService.java @@ -17,4 +17,6 @@ public interface GameGoldLogService extends IService { GameUserDataDetailVo userTotalStat(List uids, String gameId, Date beginTime, Date endTime, Integer partitionId); IPage gameDetail(IPage iPage, String gameId, Date beginTime, Date endTime, Integer partitionId); + + GameUserDataDetailVo userTotalALL(Long uid, String gameId, Date beginTime, Date endTime); } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/GameGoldLogServiceImpl.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/GameGoldLogServiceImpl.java index a28c90852..012587fff 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/GameGoldLogServiceImpl.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/GameGoldLogServiceImpl.java @@ -41,4 +41,9 @@ public class GameGoldLogServiceImpl extends ServiceImpl gameDetail(IPage iPage, String gameId, Date beginTime, Date endTime, Integer partitionId) { return baseMapper.gameDetail(iPage, gameId, beginTime, endTime, partitionId); } + + @Override + public GameUserDataDetailVo userTotalALL(Long uid, String gameId, Date beginTime, Date endTime) { + return baseMapper.userTotalALL(uid, gameId, beginTime, endTime); + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/GameService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/GameService.java index 10996d741..89ddfed1e 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/GameService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/GameService.java @@ -281,6 +281,7 @@ public class GameService { } for (GameConfigVO gameConfigVO : gameConfigVOS) { GameConstant.GameChannel byChannel = GameConstant.GameChannel.getByChannel(channel); + gameConfigVO.setGameChannel(byChannel.name()); gameConfigVO.setGameName(byChannel.getDesc() + "-" + gameConfigVO.getGameName()); } return gameConfigVOS; diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/JoyGameRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/JoyGameRecordService.java index b312ee6e1..2b73d8dee 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/JoyGameRecordService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/JoyGameRecordService.java @@ -22,4 +22,6 @@ public interface JoyGameRecordService extends IService { IPage gameDetail(IPage iPage, String gameId, Date beginTime, Date endTime, Integer partitionId); + GameUserDataDetailVo userTotalALL(Long uid, String gameId, Date beginTime, Date endTime); + } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/impl/GameDayStatDataServiceImpl.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/impl/GameDayStatDataServiceImpl.java index c449b0833..50abc15b8 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/impl/GameDayStatDataServiceImpl.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/impl/GameDayStatDataServiceImpl.java @@ -12,6 +12,7 @@ import com.accompany.common.constant.GameConstant; import com.accompany.common.result.PageResult; import com.accompany.core.exception.AdminServiceException; import com.accompany.core.model.Users; +import com.accompany.payment.service.UserRechargeLevelService; import com.accompany.sharding.vo.GameDataTotalVo; import com.accompany.sharding.vo.GameDetailVo; import com.accompany.sharding.vo.GameUserDataDetailVo; @@ -33,6 +34,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; +import java.util.function.Supplier; import java.util.stream.Collectors; /** @@ -64,6 +66,10 @@ public class GameDayStatDataServiceImpl extends ServiceImpl userList(String erbanNoStr, String channel, String gameId, String startDate, String endDate, Integer partitionId, Integer pageNo, Integer pageSize) { + public PageResult userTotal(String erbanNoStr, String channel, String gameId, String startDate, String endDate, Integer partitionId, Integer pageNo, Integer pageSize) { GameConstant.GameChannel byChannel = GameConstant.GameChannel.getByChannel(channel); if (byChannel == null) { throw new AdminServiceException("请选择第三方名称"); @@ -491,4 +497,77 @@ public class GameDayStatDataServiceImpl extends ServiceImpl rolePartitionIds) { + if (erbanNo == null) { + throw new AdminServiceException("请输入用户ID"); + } + if (StringUtils.isEmpty(startDate) || StringUtils.isEmpty(endDate)) { + throw new AdminServiceException("请选择时间范围"); + } + Users user = usersService.getUserByErbanNo(erbanNo); + if (user == null) { + throw new AdminServiceException(erbanNo + " 用户不存在"); + } + if (!rolePartitionIds.contains(user.getPartitionId())) { + return null; + } + Date beginTime, endTime; + Date now = new Date(); + if (StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)) { + beginTime = DateUtil.parseDate(startDate); + endTime = DateUtil.endOfDay(DateUtil.parseDate(endDate)); + } else { + endTime = DateUtil.endOfDay(now); + beginTime = DateUtil.offsetDay(DateUtil.beginOfDay(endTime), -7); + } + + Long uid = user.getUid(); + GameUserDataDetailVo gameUserDataDetailVo = new GameUserDataDetailVo(); + gameUserDataDetailVo.setUid(uid); + gameUserDataDetailVo.setErbanNo(erbanNo); + gameUserDataDetailVo.setChargeLevel(userRechargeLevelService.getLevelByUid(uid)); + gameUserDataDetailVo.setNick(user.getNick()); + List gameUserDataDetailVos = new ArrayList<>(); + + Map> channelServiceMap = new HashMap<>(); + channelServiceMap.put(GameConstant.GameChannel.LEADERCC.name(), + () -> gameGoldLogService.userTotalALL(uid, gameId, beginTime, endTime)); + channelServiceMap.put(GameConstant.GameChannel.BAISHUN.name(), + () -> baiShunGameRecordService.userTotalALL(uid, gameId, beginTime, endTime)); + channelServiceMap.put(GameConstant.GameChannel.JOYPLAY.name(), + () -> joyGameRecordService.userTotalALL(uid, gameId, beginTime, endTime)); + + // 处理特定渠道或默认情况 + if (channelServiceMap.containsKey(channel)) { + Optional.ofNullable(channelServiceMap.get(channel).get()) + .ifPresent(gameUserDataDetailVos::add); + } else { + channelServiceMap.values().stream() + .map(Supplier::get) + .filter(Objects::nonNull) + .forEach(gameUserDataDetailVos::add); + } + if (CollectionUtils.isNotEmpty(gameUserDataDetailVos)) { + gameUserDataDetailVo.setPayGold(gameUserDataDetailVos.stream().map(GameUserDataDetailVo::getPayGold) + .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)); + gameUserDataDetailVo.setPlayNum(gameUserDataDetailVos.stream().mapToInt(GameUserDataDetailVo::getPlayNum) + .filter(Objects::nonNull).sum()); + gameUserDataDetailVo.setWinGold(gameUserDataDetailVos.stream().filter(Objects::nonNull).map(GameUserDataDetailVo::getWinGold) + .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)); + } else { + gameUserDataDetailVo.setPlayNum(0); + gameUserDataDetailVo.setPayGold(BigDecimal.ZERO); + gameUserDataDetailVo.setWinGold(BigDecimal.ZERO); + } + gameUserDataDetailVo.setTotalRemain(gameUserDataDetailVo.getPayGold().subtract(gameUserDataDetailVo.getWinGold())); + if (gameUserDataDetailVo.getPayGold().compareTo(BigDecimal.ZERO) > 0) { + gameUserDataDetailVo.setBetRate(gameUserDataDetailVo.getWinGold().divide(gameUserDataDetailVo.getPayGold(), 4, RoundingMode.DOWN)); + } else { + gameUserDataDetailVo.setBetRate(BigDecimal.ZERO); + } + return gameUserDataDetailVo; + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/impl/JoyGameRecordServiceImpl.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/impl/JoyGameRecordServiceImpl.java index 8451e4c88..01d0e8e0d 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/impl/JoyGameRecordServiceImpl.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/game/impl/JoyGameRecordServiceImpl.java @@ -37,4 +37,9 @@ public class JoyGameRecordServiceImpl extends ServiceImpl gameDetail(IPage iPage, String gameId, Date beginTime, Date endTime, Integer partitionId) { return baseMapper.gameDetail(iPage, gameId, beginTime, endTime, partitionId); } + + @Override + public GameUserDataDetailVo userTotalALL(Long uid, String gameId, Date beginTime, Date endTime) { + return baseMapper.userTotalALL(uid, gameId, beginTime, endTime); + } }