| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- package com.xuekairui.invite.controller;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.xuekairui.common.Result;
- import com.xuekairui.invite.dto.InviteConfigRequest;
- import com.xuekairui.invite.dto.InviteConversionStatsResponse;
- import com.xuekairui.invite.dto.InviteRewardResponse;
- import com.xuekairui.invite.dto.QuotaGrantRequest;
- import com.xuekairui.invite.entity.InviteConfig;
- import com.xuekairui.invite.service.InviteConfigService;
- import com.xuekairui.invite.service.InviteService;
- import com.xuekairui.user.dto.CrawlerUserDetailResponse;
- import com.xuekairui.user.entity.CrawlerQuotaGrant;
- import com.xuekairui.user.enums.OperationType;
- import com.xuekairui.user.service.OperationAuditLogService;
- import jakarta.servlet.http.HttpServletRequest;
- import jakarta.validation.Valid;
- import lombok.RequiredArgsConstructor;
- import org.springframework.web.bind.annotation.*;
- import java.util.List;
- /**
- * 运营管理接口 - 邀请配置与爬虫次数发放
- * 前缀: /api/admin
- */
- @RestController
- @RequestMapping("/api/admin")
- @RequiredArgsConstructor
- public class AdminController {
- private final InviteConfigService inviteConfigService;
- private final InviteService inviteService;
- private final OperationAuditLogService auditLogService;
- // ==================== 邀请配置管理 ====================
- /**
- * 获取当前生效的邀请配置
- * GET /api/admin/invite/config
- */
- @GetMapping("/invite/config")
- public Result<InviteConfig> getInviteConfig() {
- return Result.success(inviteConfigService.getActiveConfig());
- }
- /**
- * 更新当前生效的邀请配置(无则自动创建)
- * PUT /api/admin/invite/config
- */
- @PutMapping("/invite/config")
- public Result<InviteConfig> updateInviteConfig(@Valid @RequestBody InviteConfigRequest request,
- HttpServletRequest httpRequest) {
- Long operatorId = (Long) httpRequest.getAttribute("userId");
- String operatorRole = getOperatorRole(httpRequest);
- InviteConfig result = inviteConfigService.updateConfig(request);
- auditLogService.logSuccess(operatorId != null ? operatorId : 0L, "管理员", operatorRole,
- OperationType.INVITE_CONFIG_UPDATE, "INVITE_CONFIG", result.getId());
- return Result.success(result);
- }
- /**
- * 分页获取邀请配置列表
- * GET /api/admin/invite/configs?page=1&size=20
- */
- @GetMapping("/invite/configs")
- public Result<Page<InviteConfig>> listInviteConfigs(
- @RequestParam(defaultValue = "1") Integer page,
- @RequestParam(defaultValue = "20") Integer size) {
- return Result.success(inviteConfigService.listConfigs(page, size));
- }
- /**
- * 根据ID获取邀请配置
- * GET /api/admin/invite/config/{id}
- */
- @GetMapping("/invite/config/{id}")
- public Result<InviteConfig> getInviteConfigById(@PathVariable Long id) {
- return Result.success(inviteConfigService.getById(id));
- }
- /**
- * 创建新的邀请配置
- * POST /api/admin/invite/config
- */
- @PostMapping("/invite/config")
- public Result<InviteConfig> createInviteConfig(@Valid @RequestBody InviteConfigRequest request,
- HttpServletRequest httpRequest) {
- Long operatorId = (Long) httpRequest.getAttribute("userId");
- String operatorRole = getOperatorRole(httpRequest);
- InviteConfig result = inviteConfigService.createConfig(request);
- auditLogService.logSuccess(operatorId != null ? operatorId : 0L, "管理员", operatorRole,
- OperationType.INVITE_CONFIG_UPDATE, "INVITE_CONFIG_CREATE", result.getId());
- return Result.success(result);
- }
- /**
- * 更新指定ID的邀请配置
- * PUT /api/admin/invite/config/{id}
- */
- @PutMapping("/invite/config/{id}")
- public Result<InviteConfig> updateInviteConfigById(@PathVariable Long id,
- @Valid @RequestBody InviteConfigRequest request,
- HttpServletRequest httpRequest) {
- Long operatorId = (Long) httpRequest.getAttribute("userId");
- String operatorRole = getOperatorRole(httpRequest);
- InviteConfig result = inviteConfigService.updateConfig(id, request);
- auditLogService.logSuccess(operatorId != null ? operatorId : 0L, "管理员", operatorRole,
- OperationType.INVITE_CONFIG_UPDATE, "INVITE_CONFIG_UPDATE:" + id, id);
- return Result.success(result);
- }
- /**
- * 删除邀请配置
- * DELETE /api/admin/invite/config/{id}
- */
- @DeleteMapping("/invite/config/{id}")
- public Result<Void> deleteInviteConfig(@PathVariable Long id,
- HttpServletRequest httpRequest) {
- Long operatorId = (Long) httpRequest.getAttribute("userId");
- String operatorRole = getOperatorRole(httpRequest);
- inviteConfigService.deleteConfig(id);
- auditLogService.logSuccess(operatorId != null ? operatorId : 0L, "管理员", operatorRole,
- OperationType.INVITE_CONFIG_UPDATE, "INVITE_CONFIG_DELETE:" + id, id);
- return Result.success();
- }
- // ==================== 爬虫次数手动发放 ====================
- /**
- * 运营手动给用户发放爬虫次数
- * POST /api/admin/crawler/grant
- */
- @PostMapping("/crawler/grant")
- public Result<CrawlerQuotaGrant> grantCrawlerQuota(@Valid @RequestBody QuotaGrantRequest request,
- HttpServletRequest httpRequest) {
- Long operatorId = (Long) httpRequest.getAttribute("userId");
- String operatorRole = getOperatorRole(httpRequest);
- CrawlerQuotaGrant grant = inviteService.adminGrantQuota(request);
- auditLogService.logSuccess(operatorId != null ? operatorId : 0L, "管理员", operatorRole,
- OperationType.CRAWLER_QUOTA_GRANT, "CRAWLER_QUOTA:" + request.getUserId(), request.getUserId());
- return Result.success(grant);
- }
- /**
- * 查看发放记录
- * GET /api/admin/crawler/grants?userId=1&grantType=ADMIN
- */
- @GetMapping("/crawler/grants")
- public Result<List<com.xuekairui.user.dto.CrawlerQuotaGrantResponse>> listGrants(
- @RequestParam(required = false) Long userId,
- @RequestParam(required = false) String grantType) {
- return Result.success(inviteService.listGrants(userId, grantType));
- }
- // ==================== 邀请记录查看 ====================
- /**
- * 查看某用户的邀请奖励记录
- * GET /api/admin/invite/rewards?userId=1
- */
- @GetMapping("/invite/rewards")
- public Result<List<InviteRewardResponse>> listInviteRewards(
- @RequestParam(required = false) Long userId) {
- // 如果指定了userId,查看该用户的邀请记录;否则返回空(可扩展为全部)
- if (userId != null) {
- return Result.success(inviteService.getInviteRewards(userId));
- }
- return Result.success(List.of());
- }
- // ==================== 用户爬虫详情查询 ====================
- /**
- * 查看用户爬虫使用详情(含平台分布)
- * GET /api/admin/crawler/user-detail?userId=1
- */
- @GetMapping("/crawler/user-detail")
- public Result<CrawlerUserDetailResponse> getCrawlerUserDetail(@RequestParam Long userId) {
- return Result.success(inviteService.getCrawlerUserDetail(userId));
- }
- /**
- * 查看用户邀请转化统计(点击-注册转化率)
- * GET /api/admin/invite/conversion-stats?userId=1
- */
- @GetMapping("/invite/conversion-stats")
- public Result<InviteConversionStatsResponse> getInviteConversionStats(@RequestParam Long userId) {
- return Result.success(inviteService.getInviteConversionStats(userId));
- }
- private String getOperatorRole(HttpServletRequest request) {
- String role = (String) request.getAttribute("role");
- return role != null ? role : "ADMIN";
- }
- }
|