游戏数据统计
This commit is contained in:
@@ -1,20 +1,40 @@
|
||||
package com.accompany.common.constant;
|
||||
|
||||
import com.accompany.common.utils.StringUtils;
|
||||
|
||||
public class GameConstant {
|
||||
|
||||
public enum GameChannel {
|
||||
LEADERCC( "灵"),
|
||||
LEADERCC( "灵", "game_gold_log"),
|
||||
|
||||
BAISHUN( "百顺")
|
||||
BAISHUN( "百顺", "bai_shun_game_record"),
|
||||
;
|
||||
|
||||
private String desc;
|
||||
private String tableName;
|
||||
|
||||
GameChannel(String desc) {
|
||||
GameChannel(String desc, String tableName) {
|
||||
this.desc = desc;
|
||||
this.tableName = tableName;
|
||||
}
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
public String getTableName() {
|
||||
return tableName;
|
||||
}
|
||||
|
||||
public static GameChannel getByChannel(String channel) {
|
||||
if (StringUtils.isEmpty(channel)) {
|
||||
return null;
|
||||
}
|
||||
for (GameChannel value : values()) {
|
||||
if (channel.equals(value.name())) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -13,16 +13,16 @@ public class GameDataTotalVo {
|
||||
private String statDate;
|
||||
|
||||
@ApiModelProperty("新用户参与人数")
|
||||
private Integer newUserJoinNum;
|
||||
private Integer newUsersCount;
|
||||
|
||||
@ApiModelProperty("新用户参与人数")
|
||||
private Integer totalJoinNum;
|
||||
private Integer totalUsersCount;
|
||||
|
||||
@ApiModelProperty("投入")
|
||||
private BigDecimal totalBet;
|
||||
private BigDecimal payGold;
|
||||
|
||||
@ApiModelProperty("支出")
|
||||
private BigDecimal totalWin;
|
||||
private BigDecimal winGold;
|
||||
|
||||
@ApiModelProperty("剩余")
|
||||
private BigDecimal totalRemain;
|
||||
|
@@ -206,7 +206,9 @@ public class ShardingSphereConfig {
|
||||
}
|
||||
|
||||
private AlgorithmConfiguration getGameGoldLogShardingAlgorithmConfiguration() {
|
||||
return getMonthShardingAlgorithmConfiguration();
|
||||
AlgorithmConfiguration algorithmConfiguration = getMonthShardingAlgorithmConfiguration();
|
||||
return algorithmConfiguration;
|
||||
|
||||
}
|
||||
|
||||
private AlgorithmConfiguration getBaiShunGameRecordShardingAlgorithmConfiguration() {
|
||||
|
@@ -33,10 +33,22 @@ public class GameDayStatData implements Serializable {
|
||||
* 游戏id
|
||||
*/
|
||||
private Integer gameId;
|
||||
/**
|
||||
* 分区id
|
||||
*/
|
||||
private Integer partitionId;
|
||||
/**
|
||||
* 用户uid
|
||||
*/
|
||||
private Long uid;
|
||||
/**
|
||||
* 总参与人数
|
||||
*/
|
||||
private Integer totalUsersCount;
|
||||
/**
|
||||
* 新用户参与人数
|
||||
*/
|
||||
private Integer newUsersCount;
|
||||
/**
|
||||
* h5小游戏支出
|
||||
*/
|
||||
|
@@ -1,15 +1,46 @@
|
||||
package com.accompany.business.mybatismapper.game;
|
||||
|
||||
import com.accompany.business.model.game.GameDayStatData;
|
||||
import com.accompany.sharding.vo.GameDataTotalVo;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 游戏日统计表 Mapper 接口
|
||||
*
|
||||
* @author
|
||||
* @author
|
||||
* @since 2025-03-04
|
||||
*/
|
||||
public interface GameDayStatDataMapper extends BaseMapper<GameDayStatData> {
|
||||
|
||||
/**
|
||||
* 统计单天,分区,游戏,用户分组数据(仅限)
|
||||
*
|
||||
* @param splitMonth
|
||||
* @param beginDate
|
||||
* @param endDate
|
||||
* @return
|
||||
*/
|
||||
List<GameDayStatData> statLeaderccDayList(@Param("splitMonth") String splitMonth, @Param("beginDate") Date beginDate, @Param("endDate") Date endDate);
|
||||
|
||||
List<GameDayStatData> statBaiShunDayList(@Param("splitMonth") String splitMonth, @Param("beginDate") Date beginDate, @Param("endDate") Date endDate);
|
||||
|
||||
/**
|
||||
* 统计当天数据(仅限)
|
||||
*
|
||||
* @param gameId
|
||||
* @param beginTime
|
||||
* @param endTime
|
||||
* @param partitionId
|
||||
*/
|
||||
GameDataTotalVo selectTodayList(@Param("channel") String channel, @Param("tableName") String tableName, @Param("gameId") String gameId,
|
||||
@Param("beginTime") Date beginTime, @Param("endTime") Date endTime, @Param("partitionId") Integer partitionId);
|
||||
|
||||
|
||||
IPage<GameDataTotalVo> selectGroupDateList(IPage<GameDayStatData> iPage, @Param("channel") String channel, @Param("gameId") String gameId,
|
||||
@Param("beginTime") Date beginTime, @Param("endTime") Date endTime, @Param("partitionId") Integer partitionId);
|
||||
}
|
||||
|
@@ -7,6 +7,7 @@ import com.accompany.sharding.vo.GameDataTotalVo;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 游戏日统计表 服务类
|
||||
@@ -18,4 +19,13 @@ public interface GameDayStatDataService extends IService<GameDayStatData> {
|
||||
|
||||
PageResult<GameDataTotalVo> totalList(
|
||||
String channel, String gameId, String startDate, String endDate, Integer partitionId, Integer pageNo, Integer pageSize);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param channel
|
||||
* @param statTime 传2号,统计1号的数据
|
||||
* @return
|
||||
*/
|
||||
void statDayList(String channel, Date statTime);
|
||||
|
||||
}
|
||||
|
@@ -1,50 +1,179 @@
|
||||
package com.accompany.business.service.game.impl;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.accompany.business.model.game.GameDayStatData;
|
||||
import com.accompany.business.mybatismapper.game.GameDayStatDataMapper;
|
||||
import com.accompany.business.service.game.GameDayStatDataService;
|
||||
import com.accompany.business.service.game.GameService;
|
||||
import com.accompany.common.constant.GameConstant;
|
||||
import com.accompany.common.result.PageResult;
|
||||
import com.accompany.core.exception.AdminServiceException;
|
||||
import com.accompany.sharding.vo.GameDataTotalVo;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
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.apache.commons.lang.StringUtils;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.shardingsphere.infra.hint.HintManager;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.math.RoundingMode;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 游戏日统计表 服务实现类
|
||||
*
|
||||
* @author
|
||||
* @author
|
||||
* @since 2025-03-04
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class GameDayStatDataServiceImpl extends ServiceImpl<GameDayStatDataMapper, GameDayStatData> implements GameDayStatDataService {
|
||||
|
||||
@Autowired
|
||||
@Qualifier("shardingDataSource")
|
||||
private DataSource shardingDataSource;
|
||||
|
||||
@Autowired
|
||||
private GameService gameService;
|
||||
|
||||
@Override
|
||||
public PageResult<GameDataTotalVo> totalList(
|
||||
String channel, String gameId, String startDate, String endDate, Integer partitionId, Integer pageNo, Integer pageSize) {
|
||||
if (StringUtils.isEmpty(channel)) {
|
||||
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("请选择第三方名称");
|
||||
}
|
||||
Date beginTime = null, endTime = null;
|
||||
Date beginTime, endTime;
|
||||
Date now = new Date();
|
||||
if (StringUtils.isNotEmpty(startDate) && StringUtils.isNotEmpty(endDate)) {
|
||||
beginTime = DateUtil.parseDateTime(startDate);
|
||||
endTime = DateUtil.parseDateTime(endDate);
|
||||
} else {
|
||||
endTime = new Date();
|
||||
beginTime = DateUtil.offsetDay(endTime, -7);
|
||||
endTime = DateUtil.endOfDay(now);
|
||||
beginTime = DateUtil.offsetDay(endTime, -30);
|
||||
}
|
||||
IPage<GameDataTotalVo> gameDayStatDataIPage = baseMapper.selectGroupDateList(new Page<>(pageNo, pageSize), channel, gameId, beginTime, endTime, partitionId);
|
||||
|
||||
List<GameDataTotalVo> records = gameDayStatDataIPage.getRecords();
|
||||
|
||||
//是否包含今天 今天的单独查
|
||||
Boolean containsToday = beginTime.before(now) && endTime.after(now);
|
||||
GameDataTotalVo todayData;
|
||||
if (containsToday) {
|
||||
String splitMonth = DateUtil.format(now, DatePattern.SIMPLE_MONTH_PATTERN);
|
||||
todayData = this.selectDayData(channel, splitMonth, gameId, DateUtil.beginOfDay(now), DateUtil.endOfDay(now), partitionId);
|
||||
if (todayData != null) {
|
||||
todayData.setStatDate(DateUtil.formatDate(now));
|
||||
records.add(0, todayData);
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(records)) {
|
||||
for (GameDataTotalVo record : records) {
|
||||
record.setTotalRemain(record.getPayGold().subtract(record.getWinGold()));
|
||||
record.setBetRate(record.getTotalRemain().divide(record.getPayGold(), 4, RoundingMode.DOWN));
|
||||
}
|
||||
}
|
||||
return new PageResult<>(gameDayStatDataIPage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void statDayList(String channel, Date statTime) {
|
||||
log.info("GameDayStatDataServiceImpl.statDayList-begin channel:{}, statTime:{}", channel, statTime);
|
||||
Date endDate = DateUtil.beginOfDay(statTime);
|
||||
Date beginDate = DateUtil.offsetDay(endDate, -1);
|
||||
String splitMonth = DateUtil.format(beginDate, DatePattern.SIMPLE_MONTH_PATTERN);
|
||||
List<GameDayStatData> gameDayStatDatas = null;
|
||||
if (GameConstant.GameChannel.LEADERCC.name().equals(channel)) {
|
||||
gameDayStatDatas = baseMapper.statLeaderccDayList(splitMonth, beginDate, endDate);
|
||||
} else if (GameConstant.GameChannel.BAISHUN.name().equals(channel)) {
|
||||
gameDayStatDatas = baseMapper.statBaiShunDayList(splitMonth, beginDate, endDate);
|
||||
}
|
||||
if (CollectionUtils.isEmpty(gameDayStatDatas)) {
|
||||
return;
|
||||
}
|
||||
for (GameDayStatData gameDayStatData : gameDayStatDatas) {
|
||||
gameDayStatData.setStatDate(beginDate);
|
||||
gameDayStatData.setCreateTime(statTime);
|
||||
}
|
||||
baseMapper.insert(gameDayStatDatas);
|
||||
log.info("GameDayStatDataServiceImpl.statDayList-end channel:{}, statTime:{}", channel, statTime);
|
||||
}
|
||||
|
||||
|
||||
private GameDataTotalVo selectDayData(String channel, String splitMonth, String gameId, Date beginTime, Date endTime, Integer partitionId) {
|
||||
StringBuilder querySql = new StringBuilder(" SELECT\n" +
|
||||
" DATE(g.create_time) AS statDate,\n" +
|
||||
" COUNT(DISTINCT u.uid) AS totalUsersCount,\n" +
|
||||
" COUNT(\n" +
|
||||
" DISTINCT\n" +
|
||||
" CASE\n" +
|
||||
" WHEN u.create_time >= DATE(g.create_time) - INTERVAL 1 DAY\n" +
|
||||
" AND u.create_time < DATE(g.create_time) THEN g.uid END) AS newUsersCount,");
|
||||
if(GameConstant.GameChannel.LEADERCC.name().equals(channel)){
|
||||
querySql.append(" IFNULL(sum(if(g.`type` = 1, g.`coin`, '0')), 0) payGold,\n" +
|
||||
" IFNULL(sum(if(g.`type` = 2, g.`coin`, '0')), 0) winGold\n" +
|
||||
" FROM game_gold_log g");
|
||||
} else {
|
||||
querySql.append(" ifnull(abs(sum(g.if(currency_diff < 0, g.`currency_diff`, '0'))), 0) payGold,\n" +
|
||||
" ifnull(sum(if(g.currency_diff > 0, g.`currency_diff`, '0')), 0) winGold\n" +
|
||||
" FROM bai_shun_game_record g");
|
||||
}
|
||||
String tableName = GameConstant.GameChannel.getByChannel(channel).getTableName();
|
||||
querySql.append(" WHERE\n" +
|
||||
" g.create_time >= ?\n" +
|
||||
" AND g.create_time < ?");
|
||||
List<String> params = new ArrayList<>();
|
||||
params.add(DateUtil.formatDateTime(beginTime));
|
||||
params.add(DateUtil.formatDateTime(endTime));
|
||||
if (StringUtils.isNotEmpty(gameId) && !gameService.ALL.equals(gameId)) {
|
||||
querySql.append(" AND g.game_id = ?");
|
||||
params.add(gameId);
|
||||
}
|
||||
if (partitionId != null) {
|
||||
querySql.append(" AND u.partition_id = ?");
|
||||
params.add(partitionId.toString());
|
||||
}
|
||||
|
||||
if (GameConstant.GameChannel.LEADERCC.name().equals(channel)) {
|
||||
return null;
|
||||
} else if (GameConstant.GameChannel.BAISHUN.name().equals(channel)) {
|
||||
return null;
|
||||
try (HintManager hintManager = HintManager.getInstance();
|
||||
Connection conn = shardingDataSource.getConnection();
|
||||
PreparedStatement preparedStatement = conn.prepareStatement(querySql.toString())) {
|
||||
hintManager.addTableShardingValue(tableName, splitMonth);
|
||||
int i = 1;
|
||||
for (String param : params) {
|
||||
preparedStatement.setString(i++, param);
|
||||
}
|
||||
try (ResultSet rs = preparedStatement.executeQuery()) {
|
||||
List<GameDataTotalVo> result = new ArrayList<>();
|
||||
while (rs.next()) {
|
||||
GameDataTotalVo vo = new GameDataTotalVo();
|
||||
vo.setStatDate(rs.getString("statDate"));
|
||||
vo.setTotalUsersCount(rs.getInt("totalUsersCount"));
|
||||
vo.setNewUsersCount(rs.getInt("newUsersCount"));
|
||||
vo.setPayGold(rs.getBigDecimal("payGold"));
|
||||
vo.setWinGold(rs.getBigDecimal("winGold"));
|
||||
result.add(vo);
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(result)) {
|
||||
return result.get(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -2,4 +2,121 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.accompany.business.mybatismapper.game.GameDayStatDataMapper">
|
||||
|
||||
<select id="statLeaderccDayList" resultType="com.accompany.business.model.game.GameDayStatData">
|
||||
SELECT
|
||||
DATE(g.create_time) AS statDate,
|
||||
g.game_id gameId,
|
||||
u.partition_id partitionId,
|
||||
g.uid uid,
|
||||
COUNT(DISTINCT u.uid) AS totalUsersCount,
|
||||
COUNT(
|
||||
DISTINCT
|
||||
CASE
|
||||
WHEN u.create_time >= DATE(g.create_time) - INTERVAL 1 DAY
|
||||
AND u.create_time < DATE(g.create_time) THEN
|
||||
u.uid
|
||||
END) AS newUsersCount,
|
||||
sum(if(g.`type` = 1, g.`coin`, '0')) payGold,
|
||||
sum(if(g.`type` = 2, g.`coin`, '0')) winGold
|
||||
FROM
|
||||
`game_gold_log_${splitMonth}` g
|
||||
LEFT JOIN users u ON g.uid = u.uid
|
||||
WHERE
|
||||
g.create_time >= #{beginDate}
|
||||
AND g.create_time < #{endDate}
|
||||
GROUP BY
|
||||
statDate,
|
||||
u.partition_id,
|
||||
g.game_id,
|
||||
g.uid
|
||||
</select>
|
||||
|
||||
<select id="statBaiShunDayList" resultType="com.accompany.business.model.game.GameDayStatData">
|
||||
SELECT
|
||||
DATE(g.create_time) AS statDate,
|
||||
g.game_id gameId,
|
||||
u.partition_id partitionId,
|
||||
g.uid uid,
|
||||
COUNT(DISTINCT u.uid) AS totalUsersCount,
|
||||
COUNT(
|
||||
DISTINCT
|
||||
CASE
|
||||
WHEN u.create_time >= DATE(g.create_time) - INTERVAL 1 DAY
|
||||
AND u.create_time < DATE(g.create_time) THEN
|
||||
u.uid
|
||||
END) AS newUsersCount,
|
||||
abs(sum(g.if(currency_diff < 0, g.`currency_diff`, '0'))) payGold,
|
||||
sum(if(g.currency_diff > 0, g.`currency_diff`, '0')) winGold
|
||||
FROM
|
||||
bai_shun_game_record_${splitMonth} g
|
||||
LEFT JOIN users u ON g.uid = u.uid
|
||||
WHERE
|
||||
g.create_time >= #{beginDate}
|
||||
AND g.create_time < #{endDate}
|
||||
GROUP BY
|
||||
statDate,
|
||||
u.partition_id,
|
||||
g.game_id,
|
||||
g.uid
|
||||
</select>
|
||||
|
||||
<sql id="dynamicTable">
|
||||
<choose>
|
||||
<when test="channel == 'LEADERCC'">
|
||||
IFNULL(sum(if(g.`type` = 1, g.`coin`, '0')), 0) payGold,
|
||||
IFNULL(sum(if(g.`type` = 2, g.`coin`, '0')), 0) winGold
|
||||
FROM game_gold_log g
|
||||
</when>
|
||||
<when test="channel == 'BAISHUN'">
|
||||
ifnull(abs(sum(g.if(currency_diff < 0, g.`currency_diff`, '0'))), 0) payGold,
|
||||
ifnull(sum(if(g.currency_diff > 0, g.`currency_diff`, '0')), 0) winGold
|
||||
FROM bai_shun_game_record g
|
||||
</when>
|
||||
</choose>
|
||||
</sql>
|
||||
|
||||
<select id="selectTodayList" resultType="com.accompany.sharding.vo.GameDataTotalVo">
|
||||
SELECT
|
||||
DATE(g.create_time) AS statDate,
|
||||
COUNT(DISTINCT u.uid) AS totalUsersCount,
|
||||
COUNT(
|
||||
DISTINCT
|
||||
CASE
|
||||
WHEN u.create_time >= DATE(g.create_time) - INTERVAL 1 DAY
|
||||
AND u.create_time < DATE(g.create_time) THEN g.uid END) AS newUsersCount,
|
||||
<include refid="dynamicTable"/>
|
||||
WHERE
|
||||
g.create_time >= #{beginTime}
|
||||
AND g.create_time < #{endTime}
|
||||
<if test="gameId != null and gameId !='' and 'ALL' != gameId">
|
||||
AND g.game_id = #{gameId}
|
||||
</if>
|
||||
<if test="partitionId != null and partitionId != 0">
|
||||
AND u.partition_id = #{partitionId}
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<select id="selectGroupDateList" resultType="com.accompany.sharding.vo.GameDataTotalVo">
|
||||
SELECT
|
||||
stat_date statDate,
|
||||
`channel` channel,
|
||||
ifnull(sum(total_users_count),0) totalUsersCount,
|
||||
ifnull(sum(new_users_count),0) newUsersCount,
|
||||
ifnull(sum(pay_gold),0) payGold,
|
||||
ifnull(sum(win_gold),0) winGold
|
||||
from game_day_stat_data
|
||||
where `channel` = #{channel}
|
||||
<if test="beginTime != null">
|
||||
and stat_date >= #{beginTime}
|
||||
</if>
|
||||
<if test="endTime != null">
|
||||
and stat_date <= #{endTime}
|
||||
</if>
|
||||
<if test="gameId != null and gameId !='' and 'ALL' != gameId">
|
||||
and game_id = #{gameId}
|
||||
</if>
|
||||
<if test="partitionId != null and partitionId != 0">
|
||||
and partition_id = #{partitionId}
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
|
@@ -1,7 +1,9 @@
|
||||
package com.accompany.business.controller.game;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.accompany.business.config.LeaderccMiniGameConfig;
|
||||
import com.accompany.business.param.neteasepush.MD5Utils;
|
||||
import com.accompany.business.service.game.GameDayStatDataService;
|
||||
import com.accompany.business.service.game.GameService;
|
||||
import com.accompany.business.vo.game.GameConsumeRequestVO;
|
||||
import com.accompany.business.vo.game.GameResponseVO;
|
||||
@@ -18,6 +20,8 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/game")
|
||||
@@ -27,6 +31,8 @@ public class GameController {
|
||||
private GameService gameService;
|
||||
@Autowired
|
||||
private LeaderccMiniGameConfig leaderccMiniGameConfig;
|
||||
@Autowired
|
||||
private GameDayStatDataService gameDayStatDataService;
|
||||
|
||||
@PostMapping("/gold")
|
||||
public GameResponseVO<JSONObject> changeGold(@RequestBody @Validated GameConsumeRequestVO param){
|
||||
@@ -76,6 +82,11 @@ public class GameController {
|
||||
return gameService.changeGold(param);
|
||||
}
|
||||
|
||||
@PostMapping("/statData")
|
||||
public void statData(String channel, String statTime) {
|
||||
gameDayStatDataService.statDayList(channel, DateUtil.parseDateTime(statTime));
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String token = "b7b68181-4005-441b-affb-3b20cd75519e";
|
||||
String gameId = "1";
|
||||
|
@@ -0,0 +1,23 @@
|
||||
package com.accompany.scheduler.task.game;
|
||||
|
||||
import com.accompany.business.service.game.GameDayStatDataService;
|
||||
import com.accompany.common.constant.GameConstant;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Component
|
||||
public class GameDayStatDataTask {
|
||||
|
||||
@Autowired
|
||||
private GameDayStatDataService gameDayStatDataService;
|
||||
|
||||
@Scheduled(cron = "0 10 0 * * *")
|
||||
public void statDayList() {
|
||||
for (GameConstant.GameChannel gameChannel : GameConstant.GameChannel.values()) {
|
||||
gameDayStatDataService.statDayList(gameChannel.name(), new Date());
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user