diff --git a/rc-gateway/src/main/java/com/red/circle/gateway/filter/AuthGlobalFilter.java b/rc-gateway/src/main/java/com/red/circle/gateway/filter/AuthGlobalFilter.java index 4d9cfc2c..2b97095d 100644 --- a/rc-gateway/src/main/java/com/red/circle/gateway/filter/AuthGlobalFilter.java +++ b/rc-gateway/src/main/java/com/red/circle/gateway/filter/AuthGlobalFilter.java @@ -50,10 +50,6 @@ import reactor.core.publisher.Mono; @RequiredArgsConstructor public class AuthGlobalFilter implements GlobalFilter, Ordered { - private static final List FORCE_IGNORE_PATHS = List.of( - "/console/datav/aslan/integrated-statistics" - ); - private final ObjectMapper objectMapper; private final GatewayProperties gatewayProperties; private final AuthEndpointService authEndpointService; @@ -215,16 +211,9 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered { private boolean isIgnoreMatcherPath(ServerWebExchange exchange) { String url = exchange.getRequest().getURI().getRawPath(); log.debug(url); - if (matchIgnorePath(FORCE_IGNORE_PATHS, url)) { - return true; - } List ignorePaths = gatewayProperties.getIgnorePaths(); log.debug(ignorePaths.toString()); - return matchIgnorePath(ignorePaths, url); - } - - private boolean matchIgnorePath(List ignorePaths, String url) { - for (String ignoreUrl : Optional.ofNullable(ignorePaths).orElse(List.of())) { + for (String ignoreUrl : ignorePaths) { if (pathMatcher.match(ignoreUrl, url)) { log.debug("true : {}{}",url, ignoreUrl); return true; diff --git a/rc-gateway/src/main/resources/application.yml b/rc-gateway/src/main/resources/application.yml index b6628cad..5c2ef17a 100644 --- a/rc-gateway/src/main/resources/application.yml +++ b/rc-gateway/src/main/resources/application.yml @@ -45,5 +45,4 @@ gateway: - /console/datav/online/user/count - /console/datav/online/room/count - /console/datav/aslan/region-country/statistics - - /console/datav/aslan/integrated-statistics - /console/user/base/info/im/sig diff --git a/rc-service/rc-service-console/console-adapter/src/main/java/com/red/circle/console/adapter/app/user/DatavRestController.java b/rc-service/rc-service-console/console-adapter/src/main/java/com/red/circle/console/adapter/app/user/DatavRestController.java index 0b1080d9..a9170909 100644 --- a/rc-service/rc-service-console/console-adapter/src/main/java/com/red/circle/console/adapter/app/user/DatavRestController.java +++ b/rc-service/rc-service-console/console-adapter/src/main/java/com/red/circle/console/adapter/app/user/DatavRestController.java @@ -1,8 +1,6 @@ package com.red.circle.console.adapter.app.user; -import com.red.circle.console.app.dto.clienobject.count.aslan.AslanIntegratedStatisticsCO; import com.red.circle.console.app.dto.clienobject.count.aslan.AslanRegionCountryStatisticsCO; -import com.red.circle.console.app.service.app.count.AslanIntegratedStatisticsService; import com.red.circle.console.app.service.app.count.AslanRegionCountryStatisticsService; import com.red.circle.console.app.service.app.user.DatavService; import com.red.circle.framework.web.controller.BaseController; @@ -30,7 +28,6 @@ import org.springframework.web.bind.annotation.RestController; public class DatavRestController extends BaseController { private final DatavService userExpandService; - private final AslanIntegratedStatisticsService aslanIntegratedStatisticsService; private final AslanRegionCountryStatisticsService aslanRegionCountryStatisticsService; @GetMapping("/active/user-country-code") @@ -55,17 +52,4 @@ public class DatavRestController extends BaseController { return aslanRegionCountryStatisticsService.listRegionCountryStatistics(date); } - @GetMapping("/aslan/integrated-statistics") - public AslanIntegratedStatisticsCO aslanIntegratedStatistics( - @RequestParam(value = "sysOrigin", required = false) String sysOrigin, - @RequestParam(value = "areaCode", required = false) String areaCode, - @RequestParam(value = "dateNumber", required = false) Integer dateNumber, - @RequestParam(value = "goldOrigin", required = false) List goldOrigins, - @RequestParam(value = "propsDate", required = false) String propsDate, - @RequestParam(value = "propsDateType", required = false) String propsDateType, - @RequestParam(value = "propsType", required = false) String propsType) { - return aslanIntegratedStatisticsService.aggregate(sysOrigin, areaCode, dateNumber, - goldOrigins, propsDate, propsDateType, propsType); - } - } diff --git a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/count/AslanIntegratedStatisticsServiceImpl.java b/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/count/AslanIntegratedStatisticsServiceImpl.java deleted file mode 100644 index 746622d5..00000000 --- a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/count/AslanIntegratedStatisticsServiceImpl.java +++ /dev/null @@ -1,274 +0,0 @@ -package com.red.circle.console.app.service.app.count; - -import com.red.circle.common.business.core.enums.SysOriginPlatformEnum; -import com.red.circle.console.app.dto.clienobject.count.PropsSaleCO; -import com.red.circle.console.app.dto.clienobject.count.StatisticsDailyOperationActiveIndexCO; -import com.red.circle.console.app.dto.clienobject.count.aslan.AslanIntegratedStatisticsCO; -import com.red.circle.console.app.dto.clienobject.count.ops.CountDailyCurrencyCountGroupCO; -import com.red.circle.console.app.dto.clienobject.count.ops.CountDailyCurrencyCountPlatformCO; -import com.red.circle.console.app.dto.clienobject.count.ops.CountDailyGoldOriginGroupCO; -import com.red.circle.console.app.dto.clienobject.count.ops.CountDailyRegisterLogoutGroupCO; -import com.red.circle.console.app.dto.clienobject.count.ops.CountPurchaseGroupCO; -import com.red.circle.console.app.dto.clienobject.count.ops.CountUserRechargeRankGroupCO; -import com.red.circle.console.app.dto.clienobject.count.ops.CurrencyAnalyzeUserLogGroupCO; -import com.red.circle.console.app.service.app.count.ops.CountCurrencyService; -import com.red.circle.console.app.service.app.count.ops.CountDailyPurchaseService; -import com.red.circle.console.app.service.app.count.ops.CountUserService; -import com.red.circle.console.infra.database.util.LocalDateUtils; -import com.red.circle.other.inner.model.cmd.count.PropsSaleQuotaQryCmd; -import com.red.circle.tool.core.collection.CollectionUtils; -import java.util.Arrays; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.function.Function; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -/** - * Aslan 后台数据图表聚合查询. - */ -@Service -@RequiredArgsConstructor -public class AslanIntegratedStatisticsServiceImpl implements AslanIntegratedStatisticsService { - - private static final String DEFAULT_SYS_ORIGIN = "ATYOU"; - private static final String DEFAULT_AREA_CODE = "DAILY"; - private static final String DEFAULT_PROPS_DATE_TYPE = "MONTH_DAY"; - - private final CountUserService countUserService; - private final CountCurrencyService countCurrencyService; - private final CountDailyPurchaseService countDailyPurchaseService; - private final CountOperationActiveIndexService countOperationActiveIndexService; - - @Override - public AslanIntegratedStatisticsCO aggregate( - String sysOrigin, - String areaCode, - Integer dateNumber, - List goldOrigins, - String propsDate, - String propsDateType, - String propsType) { - - String normalizedSysOrigin = normalizeSysOrigin(sysOrigin); - String normalizedAreaCode = normalizeAreaCode(areaCode); - - // 先拿不依赖 dateNumber 的后台图表数据,再用这些已存在读模型推断 Top 榜默认日期。 - CountPurchaseGroupCO dailyPurchase = pickBySysOrigin( - countDailyPurchaseService.listAllSysOriginLast30Days(normalizedAreaCode), - CountPurchaseGroupCO::getSysOrigin, - normalizedSysOrigin); - CountPurchaseGroupCO monthlyPurchase = pickBySysOrigin( - countDailyPurchaseService.listMonthlyPurchaseAmountPlatformLatestMonth(12), - CountPurchaseGroupCO::getSysOrigin, - normalizedSysOrigin); - CountDailyRegisterLogoutGroupCO registerLogout = pickBySysOrigin( - countUserService.getLatestRegisterLogout(), - CountDailyRegisterLogoutGroupCO::getSysOrigin, - normalizedSysOrigin); - CountDailyRegisterLogoutGroupCO registerRegion = pickBySysOrigin( - countUserService.latestRegisterRegion(), - CountDailyRegisterLogoutGroupCO::getSysOrigin, - normalizedSysOrigin); - CountDailyCurrencyCountGroupCO currency = pickBySysOrigin( - countCurrencyService.listLast30Days(), - CountDailyCurrencyCountGroupCO::getSysOrigin, - normalizedSysOrigin); - - Integer resolvedDateNumber = resolveDateNumber(dateNumber, dailyPurchase, registerLogout, - currency); - CurrencyAnalyzeUserLogGroupCO dailyUserGoldTop = pickBySysOrigin( - countCurrencyService.listDailyUserGoldTop(resolvedDateNumber), - CurrencyAnalyzeUserLogGroupCO::getSysOrigin, - normalizedSysOrigin); - CountUserRechargeRankGroupCO dailyUserRechargeTop = pickBySysOrigin( - countCurrencyService.listDailyUserRechargeTop(resolvedDateNumber), - CountUserRechargeRankGroupCO::getSysOrigin, - normalizedSysOrigin); - - List activeIndexLatestDays = - countOperationActiveIndexService.listLatestDays(30); - Map goldDetails = mapGoldDetails(normalizedSysOrigin, - goldOrigins); - PropsSaleCO propsSale = queryPropsSale(normalizedSysOrigin, propsDate, propsDateType, - propsType); - - return new AslanIntegratedStatisticsCO() - .setSysOrigin(normalizedSysOrigin) - .setSysOriginName(SysOriginPlatformEnum.getSysOriginName(normalizedSysOrigin)) - .setAreaCode(normalizedAreaCode) - .setDateNumber(resolvedDateNumber) - .setRegisterLogout(registerLogout) - .setRegisterRegion(registerRegion) - .setDailyPurchase(dailyPurchase) - .setMonthlyPurchase(monthlyPurchase) - .setCurrency(currency) - .setOperationActiveIndexLatestDays(activeIndexLatestDays) - .setGoldDetails(goldDetails) - .setDailyUserGoldTop(dailyUserGoldTop) - .setDailyUserRechargeTop(dailyUserRechargeTop) - .setPropsSale(propsSale) - .setMissingSections(buildMissingSections( - registerLogout, - registerRegion, - dailyPurchase, - monthlyPurchase, - currency, - activeIndexLatestDays, - dailyUserGoldTop, - dailyUserRechargeTop, - normalizeGoldOrigins(goldOrigins), - goldDetails, - propsDate, - propsSale)); - } - - private String normalizeSysOrigin(String sysOrigin) { - String value = hasText(sysOrigin) - ? sysOrigin.trim().toUpperCase(Locale.ROOT) - : DEFAULT_SYS_ORIGIN; - if (Objects.isNull(SysOriginPlatformEnum.toEnum(value))) { - throw new IllegalArgumentException("unsupported sysOrigin: " + sysOrigin); - } - return value; - } - - private String normalizeAreaCode(String areaCode) { - return hasText(areaCode) ? areaCode.trim().toUpperCase(Locale.ROOT) : DEFAULT_AREA_CODE; - } - - private T pickBySysOrigin(List source, Function sysOriginGetter, - String sysOrigin) { - if (CollectionUtils.isEmpty(source)) { - return null; - } - return source.stream() - .filter(item -> Objects.equals(sysOriginGetter.apply(item), sysOrigin)) - .findFirst() - .orElse(null); - } - - private Integer resolveDateNumber( - Integer dateNumber, - CountPurchaseGroupCO dailyPurchase, - CountDailyRegisterLogoutGroupCO registerLogout, - CountDailyCurrencyCountGroupCO currency) { - if (Objects.nonNull(dateNumber)) { - return dateNumber; - } - if (Objects.nonNull(dailyPurchase) && Objects.nonNull(dailyPurchase.getLast()) - && Objects.nonNull(dailyPurchase.getLast().getDateNumber())) { - return dailyPurchase.getLast().getDateNumber(); - } - if (Objects.nonNull(registerLogout) && Objects.nonNull(registerLogout.getRegisterLogout()) - && Objects.nonNull(registerLogout.getRegisterLogout().getDateNumber())) { - return registerLogout.getRegisterLogout().getDateNumber(); - } - if (Objects.nonNull(currency) && CollectionUtils.isNotEmpty(currency.getLastMonths())) { - CountDailyCurrencyCountPlatformCO lastCurrency = CollectionUtils.getLastElement( - currency.getLastMonths()); - if (Objects.nonNull(lastCurrency) && Objects.nonNull(lastCurrency.getDateNumber())) { - return lastCurrency.getDateNumber(); - } - } - return LocalDateUtils.nowToInteger(); - } - - private Map mapGoldDetails( - String sysOrigin, - List goldOrigins) { - Map details = new LinkedHashMap<>(); - for (String goldOrigin : normalizeGoldOrigins(goldOrigins)) { - CountDailyGoldOriginGroupCO detail = pickBySysOrigin( - countCurrencyService.listLastGoldOrigin30Days(goldOrigin), - CountDailyGoldOriginGroupCO::getSysOrigin, - sysOrigin); - details.put(goldOrigin, detail); - } - return details; - } - - private List normalizeGoldOrigins(List goldOrigins) { - if (CollectionUtils.isEmpty(goldOrigins)) { - return CollectionUtils.newArrayList(); - } - // 兼容 goldOrigin=A&goldOrigin=B 和 goldOrigin=A,B 两种调用方式。 - return goldOrigins.stream() - .filter(Objects::nonNull) - .flatMap(origin -> Arrays.stream(origin.split(","))) - .map(String::trim) - .filter(this::hasText) - .distinct() - .toList(); - } - - private PropsSaleCO queryPropsSale( - String sysOrigin, - String propsDate, - String propsDateType, - String propsType) { - if (!hasText(propsDate)) { - return null; - } - PropsSaleQuotaQryCmd query = new PropsSaleQuotaQryCmd() - .setSysOrigin(SysOriginPlatformEnum.valueOf(sysOrigin)) - .setDateType(hasText(propsDateType) ? propsDateType.trim() : DEFAULT_PROPS_DATE_TYPE) - .setDate(propsDate.trim()); - if (hasText(propsType)) { - query.setPropsType(propsType.trim()); - } - return countOperationActiveIndexService.getPropsSale(query); - } - - private List buildMissingSections( - CountDailyRegisterLogoutGroupCO registerLogout, - CountDailyRegisterLogoutGroupCO registerRegion, - CountPurchaseGroupCO dailyPurchase, - CountPurchaseGroupCO monthlyPurchase, - CountDailyCurrencyCountGroupCO currency, - List activeIndexLatestDays, - CurrencyAnalyzeUserLogGroupCO dailyUserGoldTop, - CountUserRechargeRankGroupCO dailyUserRechargeTop, - List requestedGoldOrigins, - Map goldDetails, - String propsDate, - PropsSaleCO propsSale) { - List missing = CollectionUtils.newArrayList(); - addMissing(missing, "registerLogout", registerLogout); - addMissing(missing, "registerRegion", registerRegion); - addMissing(missing, "dailyPurchase", dailyPurchase); - addMissing(missing, "monthlyPurchase", monthlyPurchase); - addMissing(missing, "currency", currency); - addMissing(missing, "operationActiveIndexLatestDays", activeIndexLatestDays); - addMissing(missing, "dailyUserGoldTop", dailyUserGoldTop); - addMissing(missing, "dailyUserRechargeTop", dailyUserRechargeTop); - for (String goldOrigin : requestedGoldOrigins) { - addMissing(missing, "goldDetails:" + goldOrigin, goldDetails.get(goldOrigin)); - } - if (hasText(propsDate)) { - addMissing(missing, "propsSale", propsSale); - } - return missing; - } - - private void addMissing(List missing, String section, Object value) { - if (Objects.isNull(value)) { - missing.add(section); - return; - } - if (value instanceof List list && CollectionUtils.isEmpty(list)) { - missing.add(section); - return; - } - if (value instanceof Map map && map.isEmpty()) { - missing.add(section); - } - } - - private boolean hasText(String value) { - return Objects.nonNull(value) && !value.trim().isEmpty(); - } -} diff --git a/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/clienobject/count/aslan/AslanIntegratedStatisticsCO.java b/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/clienobject/count/aslan/AslanIntegratedStatisticsCO.java deleted file mode 100644 index 03ec69a2..00000000 --- a/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/clienobject/count/aslan/AslanIntegratedStatisticsCO.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.red.circle.console.app.dto.clienobject.count.aslan; - -import com.red.circle.console.app.dto.clienobject.count.PropsSaleCO; -import com.red.circle.console.app.dto.clienobject.count.StatisticsDailyOperationActiveIndexCO; -import com.red.circle.console.app.dto.clienobject.count.ops.CountDailyCurrencyCountGroupCO; -import com.red.circle.console.app.dto.clienobject.count.ops.CountDailyGoldOriginGroupCO; -import com.red.circle.console.app.dto.clienobject.count.ops.CountDailyRegisterLogoutGroupCO; -import com.red.circle.console.app.dto.clienobject.count.ops.CountPurchaseGroupCO; -import com.red.circle.console.app.dto.clienobject.count.ops.CountUserRechargeRankGroupCO; -import com.red.circle.console.app.dto.clienobject.count.ops.CurrencyAnalyzeUserLogGroupCO; -import com.red.circle.framework.dto.ClientObject; -import java.io.Serial; -import java.util.List; -import java.util.Map; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * Aslan 后台数据图表聚合结果. - */ -@Data -@Accessors(chain = true) -@EqualsAndHashCode(callSuper = true) -public class AslanIntegratedStatisticsCO extends ClientObject { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 平台编码,默认 ATYOU. - */ - private String sysOrigin; - - /** - * 平台名称. - */ - private String sysOriginName; - - /** - * 内购区域口径,默认 DAILY. - */ - private String areaCode; - - /** - * Top 榜使用的统计日期,格式 yyyyMMdd. - */ - private Integer dateNumber; - - /** - * 每日新增/注销. - */ - private CountDailyRegisterLogoutGroupCO registerLogout; - - /** - * 每日新增区域分布. - */ - private CountDailyRegisterLogoutGroupCO registerRegion; - - /** - * 每日内购. - */ - private CountPurchaseGroupCO dailyPurchase; - - /** - * 每月内购. - */ - private CountPurchaseGroupCO monthlyPurchase; - - /** - * 每日金币收入/支出. - */ - private CountDailyCurrencyCountGroupCO currency; - - /** - * 活跃情况. - */ - private List operationActiveIndexLatestDays; - - /** - * 每日金币来源明细,key 为请求的 goldOrigin. - */ - private Map goldDetails; - - /** - * 每日用户金币 Top. - */ - private CurrencyAnalyzeUserLogGroupCO dailyUserGoldTop; - - /** - * 每日充值 Top. - */ - private CountUserRechargeRankGroupCO dailyUserRechargeTop; - - /** - * 道具销售情况,只有传 propsDate 时返回. - */ - private PropsSaleCO propsSale; - - /** - * 已请求但当前没有读到数据的区块. - */ - private List missingSections; -} diff --git a/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/service/app/count/AslanIntegratedStatisticsService.java b/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/service/app/count/AslanIntegratedStatisticsService.java deleted file mode 100644 index 231f7702..00000000 --- a/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/service/app/count/AslanIntegratedStatisticsService.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.red.circle.console.app.service.app.count; - -import com.red.circle.console.app.dto.clienobject.count.aslan.AslanIntegratedStatisticsCO; -import java.util.List; - -/** - * Aslan 后台数据图表聚合查询. - */ -public interface AslanIntegratedStatisticsService { - - /** - * 聚合后台数据图表现有统计区块. - */ - AslanIntegratedStatisticsCO aggregate( - String sysOrigin, - String areaCode, - Integer dateNumber, - List goldOrigins, - String propsDate, - String propsDateType, - String propsType); -} diff --git a/rc-service/rc-service-console/console-start/src/main/resources/application.yml b/rc-service/rc-service-console/console-start/src/main/resources/application.yml index 1c6b941d..524148bb 100644 --- a/rc-service/rc-service-console/console-start/src/main/resources/application.yml +++ b/rc-service/rc-service-console/console-start/src/main/resources/application.yml @@ -70,5 +70,4 @@ red-circle: - /console/datav/online/user/count - /console/datav/online/room/count - /console/datav/aslan/region-country/statistics - - /console/datav/aslan/integrated-statistics - /console/user/base/info/im/sig