From a5723502e20586ba15d6256ca1021f3a3f97c1ee Mon Sep 17 00:00:00 2001 From: DaxPay Dev Date: Sun, 26 Jul 2026 21:42:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(dashboard):=20=E8=BF=90=E8=90=A5=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0=E5=A4=B4=E9=83=A8=E8=AE=A1=E6=95=B0=E8=81=9A?= =?UTF-8?q?=E5=90=88=E6=8E=A5=E5=8F=A3(=E5=95=86=E6=88=B7/=E9=80=9A?= =?UTF-8?q?=E9=81=93=E5=95=86=E6=88=B7/=E7=94=A8=E6=88=B7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 GET /admin/dashboard/trade/header-counts 与 /app-admin/dashboard/trade/header-counts 聚合商户/通道商户/运营用户三类全量计数, 用户口径过滤 clientCode=admin 且排除内置超管 app-admin 移动端与 PC 运营端工作台头部统计由 mock/size=1 过渡方案改为调用真实聚合接口 --- .../AdminDashboardTradeController.java | 10 ++++ .../AdminDashboardHeaderCountResult.java | 24 +++++++++ .../dashboard/AdminDashboardTradeService.java | 26 ++++++++++ .../AppAdminDashboardTradeController.java | 49 +++++++++++++++++++ .../AppAdminDashboardTradeService.java | 32 ++++++++++++ 5 files changed, 141 insertions(+) create mode 100644 daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/result/dashboard/AdminDashboardHeaderCountResult.java create mode 100644 daxpay-payment/daxpay-payment-app-admin/src/main/java/cn/daxpay/open/payment/app/admin/controller/dashboard/AppAdminDashboardTradeController.java create mode 100644 daxpay-payment/daxpay-payment-app-admin/src/main/java/cn/daxpay/open/payment/app/admin/service/dashboard/AppAdminDashboardTradeService.java diff --git a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/dashboard/AdminDashboardTradeController.java b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/dashboard/AdminDashboardTradeController.java index 1510cf3d7..c6e4c431a 100644 --- a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/dashboard/AdminDashboardTradeController.java +++ b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/controller/dashboard/AdminDashboardTradeController.java @@ -2,6 +2,7 @@ package cn.daxpay.open.payment.admin.controller.dashboard; import cn.daxpay.open.platform.core.rest.Res; import cn.daxpay.open.platform.core.rest.result.Result; +import cn.daxpay.open.payment.admin.result.dashboard.AdminDashboardHeaderCountResult; import cn.daxpay.open.payment.admin.service.dashboard.AdminDashboardTradeService; import cn.daxpay.open.payment.trade.report.result.AmountRangeItemResult; import cn.daxpay.open.payment.trade.report.result.HourlyDistItemResult; @@ -43,6 +44,15 @@ public class AdminDashboardTradeController { private final AdminDashboardTradeService adminDashboardTradeService; + // ===== 头部计数 ===== + + /// 工作台头部计数: 商户 / 通道商户 / 运营用户总量 + @Operation(summary = "工作台头部计数(商户/通道商户/用户)") + @GetMapping("/header-counts") + public Result headerCounts() { + return Res.ok(adminDashboardTradeService.headerCounts()); + } + // ===== 概览 ===== /// 交易概览: 支持今日/昨日快捷模式 + 自定义区间模式(含上期对比用于环比) diff --git a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/result/dashboard/AdminDashboardHeaderCountResult.java b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/result/dashboard/AdminDashboardHeaderCountResult.java new file mode 100644 index 000000000..1047bd8c3 --- /dev/null +++ b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/result/dashboard/AdminDashboardHeaderCountResult.java @@ -0,0 +1,24 @@ +package cn.daxpay.open.payment.admin.result.dashboard; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +/// # 运营工作台头部计数 +@Data +@Accessors(chain = true) +@Schema(title = "运营工作台头部计数") +public class AdminDashboardHeaderCountResult { + + /// 商户总数 + @Schema(description = "商户总数") + private Long merchantCount; + + /// 通道商户总数 + @Schema(description = "通道商户总数") + private Long channelMerchantCount; + + /// 运营端用户数(不含超管) + @Schema(description = "运营端用户数") + private Long userCount; +} diff --git a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/dashboard/AdminDashboardTradeService.java b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/dashboard/AdminDashboardTradeService.java index da0f40ce5..4a8f77d3d 100644 --- a/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/dashboard/AdminDashboardTradeService.java +++ b/daxpay-payment/daxpay-payment-admin/src/main/java/cn/daxpay/open/payment/admin/service/dashboard/AdminDashboardTradeService.java @@ -1,6 +1,9 @@ package cn.daxpay.open.payment.admin.service.dashboard; import cn.daxpay.open.payment.admin.dao.dashboard.AdminTradeReportMapper; +import cn.daxpay.open.payment.admin.result.dashboard.AdminDashboardHeaderCountResult; +import cn.daxpay.open.payment.merchant.dao.channel.ChannelMerchantManager; +import cn.daxpay.open.payment.merchant.dao.info.MerchantInfoManager; import cn.daxpay.open.payment.trade.report.result.AmountRangeItemResult; import cn.daxpay.open.payment.trade.report.result.HourlyDistItemResult; import cn.daxpay.open.payment.trade.report.result.MerchantRankItemResult; @@ -10,6 +13,9 @@ import cn.daxpay.open.payment.trade.report.result.RefundTrendItemResult; import cn.daxpay.open.payment.trade.report.result.TradeOverviewResult; import cn.daxpay.open.payment.trade.report.result.TradeTrendItemResult; import cn.daxpay.open.payment.trade.report.support.TradeReportSupport; +import cn.daxpay.open.platform.core.enums.client.ClientEnum; +import cn.daxpay.open.platform.iam.dao.user.UserInfoManager; +import cn.daxpay.open.platform.iam.entity.user.UserInfo; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -26,6 +32,26 @@ public class AdminDashboardTradeService { private final AdminTradeReportMapper adminTradeReportMapper; private final TradeReportSupport tradeReportSupport; + private final MerchantInfoManager merchantInfoManager; + private final ChannelMerchantManager channelMerchantManager; + private final UserInfoManager userInfoManager; + + // ===== 头部计数 ===== + + /// 工作台头部: 商户 / 通道商户 / 运营用户 全量计数 + public AdminDashboardHeaderCountResult headerCounts() { + long merchantCount = merchantInfoManager.lambdaQuery().count(); + long channelMerchantCount = channelMerchantManager.lambdaQuery().count(); + // 运营端用户: 仅 admin 终端, 排除内置超管(与 UserAdminService 列表口径一致) + long userCount = userInfoManager.lambdaQuery() + .eq(UserInfo::getClientCode, ClientEnum.ADMIN.getCode()) + .eq(UserInfo::isAdministrator, false) + .count(); + return new AdminDashboardHeaderCountResult() + .setMerchantCount(merchantCount) + .setChannelMerchantCount(channelMerchantCount) + .setUserCount(userCount); + } // ===== 概览 ===== diff --git a/daxpay-payment/daxpay-payment-app-admin/src/main/java/cn/daxpay/open/payment/app/admin/controller/dashboard/AppAdminDashboardTradeController.java b/daxpay-payment/daxpay-payment-app-admin/src/main/java/cn/daxpay/open/payment/app/admin/controller/dashboard/AppAdminDashboardTradeController.java new file mode 100644 index 000000000..6f3155fcd --- /dev/null +++ b/daxpay-payment/daxpay-payment-app-admin/src/main/java/cn/daxpay/open/payment/app/admin/controller/dashboard/AppAdminDashboardTradeController.java @@ -0,0 +1,49 @@ +package cn.daxpay.open.payment.app.admin.controller.dashboard; + +import cn.daxpay.open.payment.app.admin.service.dashboard.AppAdminDashboardTradeService; +import cn.daxpay.open.payment.admin.result.dashboard.AdminDashboardHeaderCountResult; +import cn.daxpay.open.payment.trade.report.result.TradeOverviewResult; +import cn.daxpay.open.platform.core.rest.Res; +import cn.daxpay.open.platform.core.rest.result.Result; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +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; + +/// # 工作台交易统计(运营移动端) +/// +/// 面向运营移动端工作台的交易概览统计。 +/// 不挂菜单权限码: 工作台为登录即达的页面, 任何已认证运营用户均可查看。 +@Tag(name = "工作台交易统计(运营移动端)") +@Validated +@RestController +@RequestMapping("/app-admin/dashboard/trade") +@RequiredArgsConstructor +public class AppAdminDashboardTradeController { + + private final AppAdminDashboardTradeService dashboardTradeService; + + /// 工作台头部计数: 商户 / 通道商户 / 运营用户总量 + @Operation(summary = "工作台头部计数(商户/通道商户/用户)") + @GetMapping("/header-counts") + public Result headerCounts() { + return Res.ok(dashboardTradeService.headerCounts()); + } + + /// 交易概览: 支持 today/yesterday 快捷模式 + 自定义区间模式(含环比) + @Operation(summary = "交易概览(今日/昨日或自定义区间)") + @GetMapping("/overview") + public Result overview( + @RequestParam(required = false) String date, + @RequestParam(required = false) String start, + @RequestParam(required = false) String end) { + if (start != null && end != null) { + return Res.ok(dashboardTradeService.overview(start, end)); + } + return Res.ok(dashboardTradeService.overview(date != null ? date : "today")); + } +} diff --git a/daxpay-payment/daxpay-payment-app-admin/src/main/java/cn/daxpay/open/payment/app/admin/service/dashboard/AppAdminDashboardTradeService.java b/daxpay-payment/daxpay-payment-app-admin/src/main/java/cn/daxpay/open/payment/app/admin/service/dashboard/AppAdminDashboardTradeService.java new file mode 100644 index 000000000..932a75734 --- /dev/null +++ b/daxpay-payment/daxpay-payment-app-admin/src/main/java/cn/daxpay/open/payment/app/admin/service/dashboard/AppAdminDashboardTradeService.java @@ -0,0 +1,32 @@ +package cn.daxpay.open.payment.app.admin.service.dashboard; + +import cn.daxpay.open.payment.admin.result.dashboard.AdminDashboardHeaderCountResult; +import cn.daxpay.open.payment.admin.service.dashboard.AdminDashboardTradeService; +import cn.daxpay.open.payment.trade.report.result.TradeOverviewResult; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/// # 运营移动端-工作台交易统计服务 +/// +/// 转发至 [AdminDashboardTradeService] +@Service +@RequiredArgsConstructor +public class AppAdminDashboardTradeService { + + private final AdminDashboardTradeService adminDashboardTradeService; + + /// 工作台头部计数: 商户 / 通道商户 / 运营用户 + public AdminDashboardHeaderCountResult headerCounts() { + return adminDashboardTradeService.headerCounts(); + } + + /// 交易概览(快捷模式:today / yesterday) + public TradeOverviewResult overview(String date) { + return adminDashboardTradeService.overview(date); + } + + /// 交易概览(区间模式:start + end,yyyy-MM-dd) + public TradeOverviewResult overview(String start, String end) { + return adminDashboardTradeService.overview(start, end); + } +}