|
@@ -0,0 +1,163 @@
|
|
|
+package com.zanxiang.game.gs.data.serve.service.impl;
|
|
|
+
|
|
|
+
|
|
|
+import com.google.common.base.CaseFormat;
|
|
|
+import com.mybatisflex.core.paginate.Page;
|
|
|
+import com.mybatisflex.core.query.QueryWrapper;
|
|
|
+import com.mybatisflex.core.row.Row;
|
|
|
+import com.mybatisflex.spring.service.impl.ServiceImpl;
|
|
|
+import com.zanxiang.game.gs.data.serve.dao.mapper.game.parent.AdsRoleAmountDataParentMapper;
|
|
|
+import com.zanxiang.game.gs.data.serve.pojo.dto.BigRDTO;
|
|
|
+import com.zanxiang.game.gs.data.serve.pojo.entity.game.order.RoleOperate;
|
|
|
+import com.zanxiang.game.gs.data.serve.pojo.entity.game.parent.AdsRoleAmountDataParent;
|
|
|
+import com.zanxiang.game.gs.data.serve.pojo.entity.game.parent.AdsRoleAmountDataTodayParent;
|
|
|
+import com.zanxiang.game.gs.data.serve.pojo.vo.BigRVO;
|
|
|
+import com.zanxiang.game.gs.data.serve.pojo.vo.PageVO;
|
|
|
+import com.zanxiang.game.gs.data.serve.service.*;
|
|
|
+import org.apache.commons.collections4.CollectionUtils;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+import static com.mybatisflex.core.query.QueryMethods.*;
|
|
|
+import static com.zanxiang.game.gs.data.serve.pojo.entity.game.parent.table.AdsRoleAmountDataParentTableDef.ADS_ROLE_AMOUNT_DATA_PARENT;
|
|
|
+import static com.zanxiang.game.gs.data.serve.pojo.entity.game.parent.table.AdsRoleAmountDataTodayParentTableDef.ADS_ROLE_AMOUNT_DATA_TODAY_PARENT;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 角色父游戏充值数据 服务层实现。
|
|
|
+ *
|
|
|
+ * @author shaosong
|
|
|
+ * @since 1.0
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class AdsRoleAmountDataParentServiceImpl extends ServiceImpl<AdsRoleAmountDataParentMapper, AdsRoleAmountDataParent> implements IAdsRoleAmountDataParentService {
|
|
|
+ @Resource
|
|
|
+ private IAdsRoleAmountDataTodayParentService adsRoleAmountDataTodayParentService;
|
|
|
+ @Resource
|
|
|
+ private IRoleOperateService roleOperateService;
|
|
|
+ @Resource
|
|
|
+ private ISysUserService sysUserService;
|
|
|
+ @Resource
|
|
|
+ private IGameService gameService;
|
|
|
+ @Resource
|
|
|
+ private IGameServerService gameServerService;
|
|
|
+ @Resource
|
|
|
+ private IGameAuthRoleGroupService authRoleGroupService;
|
|
|
+ @Resource
|
|
|
+ private IGameAuthGroupService authGroupService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageVO<BigRVO, Row> bigRListOfPage(BigRDTO dto) {
|
|
|
+ if (null == dto.getDtBegin()) {
|
|
|
+ dto.setDtBegin(LocalDate.now());
|
|
|
+ }
|
|
|
+ if (null == dto.getDtEnd()) {
|
|
|
+ dto.setDtEnd(LocalDate.now());
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(dto.getSortFiled())) {
|
|
|
+ dto.setSortFiled(ADS_ROLE_AMOUNT_DATA_PARENT.TOTAL_AMOUNT.getName());
|
|
|
+ } else {
|
|
|
+ String column = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled());
|
|
|
+ dto.setSortFiled(column);
|
|
|
+ }
|
|
|
+ QueryWrapper bigRWrapper = getBigRWrapper(dto);
|
|
|
+
|
|
|
+ Page<BigRVO> paginate = getMapper().paginateAs(dto.getPageNum(), dto.getPageSize(), bigRWrapper, BigRVO.class);
|
|
|
+ if (0 == paginate.getTotalRow()) {
|
|
|
+ return PageVO.empty(dto);
|
|
|
+ }
|
|
|
+ List<BigRVO> records = paginate.getRecords();
|
|
|
+ Set<String> serverIdList = records.stream().map(BigRVO::getServerId).collect(Collectors.toSet());
|
|
|
+ Set<Integer> parentGameIdList = records.stream().map(BigRVO::getParentGameId).collect(Collectors.toSet());
|
|
|
+ Set<Long> gsIdList = records.stream().map(BigRVO::getGsId).collect(Collectors.toSet());
|
|
|
+ //父游戏名称
|
|
|
+ Map<Integer, String> parentGameMap = gameService.gameNameMap(dto.getSourceSystem(), parentGameIdList);
|
|
|
+ //区服名称
|
|
|
+ Map<Integer, Map<String, String>> serverMap = gameServerService.gameServerMap(dto.getSourceSystem(), serverIdList);
|
|
|
+ //GS名称查询
|
|
|
+ Map<Long, String> sysUserMap = CollectionUtils.isEmpty(gsIdList) ? null : sysUserService.getSysUserMap(gsIdList);
|
|
|
+ //GS组名称
|
|
|
+ Map<Long, List<String>> gsGroupMap = authRoleGroupService.getGsGroupMap(dto.getSourceSystem(), gsIdList);
|
|
|
+ records.forEach(record -> {
|
|
|
+ Long gsId = record.getGsId();
|
|
|
+ record.setGsName(null == gsId ? null : sysUserMap != null ? sysUserMap.get(gsId) : null);
|
|
|
+ record.setGsGroupName(null == gsId ? null : gsGroupMap.get(gsId));
|
|
|
+ record.setParentGameName(parentGameMap.get(record.getParentGameId()));
|
|
|
+ record.setServerName(null == serverMap.get(record.getGameId()) ? null : serverMap.get(record.getGameId()).get(record.getServerId()));
|
|
|
+ });
|
|
|
+ return new PageVO<>(paginate);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static QueryWrapper getBigRWrapper(BigRDTO dto) {
|
|
|
+ return QueryWrapper.create()
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.GAME_ID)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_ID)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_NAME)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.SERVER_ID)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.PARENT_GAME_ID)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.ASSOCIATION_USER_ID)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_LEVEL)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_VIP)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.COMBAT_NUM)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.COUNTRY)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_TIME)
|
|
|
+ .select(dateDiff(currentDate(), ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_TIME).as("role_create_day_diff"))
|
|
|
+ .select(dateDiff(currentDate(), ADS_ROLE_AMOUNT_DATA_PARENT.ACTIVE_TIME).as("role_active_day_diff"))
|
|
|
+ .select(dateDiff(currentDate(), ADS_ROLE_AMOUNT_DATA_PARENT.LAST_ORDER_TIME).as("last_order_day_diff"))
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.FIRST_AMOUNT)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_HOUR_AMOUNT)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.LAST_AMOUNT)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.LAST_ORDER_TIME)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.PRODUCT_NAME)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.TOTAL_AMOUNT)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.TOTAL_CNT)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.ACTIVE_TIME)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.APP_AMOUNT)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.PROPORTION)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.GS_ID)
|
|
|
+ .select(ADS_ROLE_AMOUNT_DATA_PARENT.CONCAT_GAME)
|
|
|
+ .select(sum(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT.TODAY_COUNT).as(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT.TODAY_COUNT.getName()))
|
|
|
+ .select(sum(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT.TODAY_AMOUNT).as(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT.TODAY_AMOUNT.getName()))
|
|
|
+ .select(sum(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT.TODAY_AMOUNT).divide(sum(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT.SERVER_AMOUNT)).as(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT.SERVER_PROPORTION.getName()))
|
|
|
+ .select(sum(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT.TODAY_AMOUNT).divide(sum(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT.GAME_AMOUNT)).as(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT.GAME_PROPORTION.getName()))
|
|
|
+ .from(ADS_ROLE_AMOUNT_DATA_PARENT)
|
|
|
+ .leftJoin(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT)
|
|
|
+ .on(ADS_ROLE_AMOUNT_DATA_PARENT.GAME_ID.eq(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT.GAME_ID)
|
|
|
+ .and(ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_ID.eq(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT.ROLE_ID)))
|
|
|
+ .and(ADS_ROLE_AMOUNT_DATA_PARENT.SERVER_ID.isNotNull().or(ADS_ROLE_AMOUNT_DATA_TODAY_PARENT.SERVER_ID.isNotNull()))
|
|
|
+ .ge(AdsRoleAmountDataTodayParent::getDay, dto.getDtBegin())
|
|
|
+ .le(AdsRoleAmountDataTodayParent::getDay, dto.getDtBegin())
|
|
|
+ .in(AdsRoleAmountDataParent::getGsId, dto.getGsIdList(), CollectionUtils.isNotEmpty(dto.getGsIdList()))
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.GAME_ID)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_ID)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_NAME)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.SERVER_ID)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.PARENT_GAME_ID)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.ASSOCIATION_USER_ID)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_LEVEL)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_VIP)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.COMBAT_NUM)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.COUNTRY)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_TIME)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.FIRST_AMOUNT)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.ROLE_HOUR_AMOUNT)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.LAST_AMOUNT)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.LAST_ORDER_TIME)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.PRODUCT_NAME)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.TOTAL_AMOUNT)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.TOTAL_CNT)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.ACTIVE_TIME)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.APP_AMOUNT)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.PROPORTION)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.GS_ID)
|
|
|
+ .groupBy(ADS_ROLE_AMOUNT_DATA_PARENT.CONCAT_GAME)
|
|
|
+ .orderBy(dto.getSortFiled(), dto.getSortAsc());
|
|
|
+ }
|
|
|
+}
|