package com.designhub.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.designhub.common.Result; import com.designhub.entity.*; import com.designhub.service.RewardRecordService; import com.designhub.service.RewardRuleService; import com.designhub.util.JwtUtil; import com.designhub.vo.RewardStatsVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.util.List; /** * 自动奖励规则 Controller */ @Tag(name = "自动奖励规则", description = "自动奖励规则管理API") @RestController @RequestMapping("/api/reward-rules") @RequiredArgsConstructor public class RewardRuleController { private final RewardRuleService rewardRuleService; private final RewardRecordService rewardRecordService; private final JwtUtil jwtUtil; @Operation(summary = "创建奖励规则") @PostMapping public Result createRule( @RequestBody RewardRule rule, @RequestHeader("Authorization") String authHeader) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long userId = jwtUtil.getUserIdFromToken(token); rule.setCreatorId(userId); return Result.success(rewardRuleService.createRule(rule)); } @Operation(summary = "更新奖励规则") @PutMapping("/{id}") public Result updateRule(@PathVariable Long id, @RequestBody RewardRule rule) { return Result.success(rewardRuleService.updateRule(id, rule)); } @Operation(summary = "启用规则") @PostMapping("/{id}/enable") public Result enableRule(@PathVariable Long id) { rewardRuleService.toggleRule(id, true); return Result.success(); } @Operation(summary = "禁用规则") @PostMapping("/{id}/disable") public Result disableRule(@PathVariable Long id) { rewardRuleService.toggleRule(id, false); return Result.success(); } @Operation(summary = "删除规则") @DeleteMapping("/{id}") public Result deleteRule(@PathVariable Long id) { rewardRuleService.deleteRule(id); return Result.success(); } @Operation(summary = "获取规则列表") @GetMapping public Result> getRuleList( @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer pageSize, @RequestParam(required = false) String ruleType) { return Result.success(rewardRuleService.getRuleList(page, pageSize, ruleType)); } @Operation(summary = "获取规则详情") @GetMapping("/{id}") public Result getRuleById(@PathVariable Long id) { return Result.success(rewardRuleService.getRuleById(id)); } @Operation(summary = "获取所有启用的规则") @GetMapping("/enabled") public Result> getEnabledRules() { return Result.success(rewardRuleService.getEnabledRules()); } @Operation(summary = "初始化默认规则") @PostMapping("/init") public Result initDefaultRules() { rewardRuleService.initDefaultRules(); return Result.success(); } // ==================== 奖励统计 ==================== @Operation(summary = "获取奖励统计数据") @GetMapping("/stats") public Result getStats(@RequestParam(defaultValue = "month") String period) { return Result.success(rewardRecordService.getStats(period)); } // ==================== 奖励记录 ==================== @Operation(summary = "获取奖励发放记录") @GetMapping("/records") public Result> getRecords( @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "20") Integer pageSize, @RequestParam(required = false) Long userId, @RequestParam(required = false) Long ruleId, @RequestParam(required = false) String rewardType, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime) { return Result.success(rewardRecordService.getRecordList(page, pageSize, userId, ruleId, rewardType, startTime, endTime)); } @Operation(summary = "获取我的奖励记录") @GetMapping("/records/my") public Result> getMyRecords( @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "20") Integer pageSize, @RequestHeader("Authorization") String authHeader) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long userId = jwtUtil.getUserIdFromToken(token); return Result.success(rewardRecordService.getMyRecords(userId, page, pageSize)); } // ==================== 徽章管理 ==================== @Operation(summary = "获取所有可用徽章") @GetMapping("/badges") public Result> getAllBadges() { return Result.success(rewardRecordService.getAllBadges()); } @Operation(summary = "获取用户徽章") @GetMapping("/users/{userId}/badges") public Result> getUserBadges(@PathVariable Long userId) { return Result.success(rewardRecordService.getUserBadges(userId)); } @Operation(summary = "获取我的徽章") @GetMapping("/badges/my") public Result> getMyBadges(@RequestHeader("Authorization") String authHeader) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long userId = jwtUtil.getUserIdFromToken(token); return Result.success(rewardRecordService.getUserBadges(userId)); } // ==================== 称号管理 ==================== @Operation(summary = "获取所有可用称号") @GetMapping("/titles") public Result> getAllTitles() { return Result.success(rewardRecordService.getAllTitles()); } @Operation(summary = "获取用户称号") @GetMapping("/users/{userId}/titles") public Result> getUserTitles(@PathVariable Long userId) { return Result.success(rewardRecordService.getUserTitles(userId)); } @Operation(summary = "获取我的称号") @GetMapping("/titles/my") public Result> getMyTitles(@RequestHeader("Authorization") String authHeader) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long userId = jwtUtil.getUserIdFromToken(token); return Result.success(rewardRecordService.getUserTitles(userId)); } @Operation(summary = "设置激活称号") @PutMapping("/titles/active") public Result setActiveTitle( @RequestParam(required = false) Long titleId, @RequestHeader("Authorization") String authHeader) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long userId = jwtUtil.getUserIdFromToken(token); rewardRecordService.setActiveTitle(userId, titleId); return Result.success(); } @Operation(summary = "获取我的激活称号") @GetMapping("/titles/active") public Result getMyActiveTitle(@RequestHeader("Authorization") String authHeader) { String token = jwtUtil.extractTokenFromHeader(authHeader); Long userId = jwtUtil.getUserIdFromToken(token); return Result.success(rewardRecordService.getActiveTitle(userId)); } }