mirror of
https://gitee.com/dromara/dax-pay
synced 2026-08-09 22:45:58 +08:00
feat(dashboard): 运营工作台头部计数聚合接口(商户/通道商户/用户)
新增 GET /admin/dashboard/trade/header-counts 与 /app-admin/dashboard/trade/header-counts 聚合商户/通道商户/运营用户三类全量计数, 用户口径过滤 clientCode=admin 且排除内置超管 app-admin 移动端与 PC 运营端工作台头部统计由 mock/size=1 过渡方案改为调用真实聚合接口
This commit is contained in:
@@ -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<AdminDashboardHeaderCountResult> headerCounts() {
|
||||
return Res.ok(adminDashboardTradeService.headerCounts());
|
||||
}
|
||||
|
||||
// ===== 概览 =====
|
||||
|
||||
/// 交易概览: 支持今日/昨日快捷模式 + 自定义区间模式(含上期对比用于环比)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
// ===== 概览 =====
|
||||
|
||||
|
||||
@@ -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<AdminDashboardHeaderCountResult> headerCounts() {
|
||||
return Res.ok(dashboardTradeService.headerCounts());
|
||||
}
|
||||
|
||||
/// 交易概览: 支持 today/yesterday 快捷模式 + 自定义区间模式(含环比)
|
||||
@Operation(summary = "交易概览(今日/昨日或自定义区间)")
|
||||
@GetMapping("/overview")
|
||||
public Result<TradeOverviewResult> 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"));
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user