This commit is contained in:
1 parent
2fee329002
commit
64eadf1446
52 files changed
+2590
-4
No files matched your search
+126
@@ -0,0 +1,126 @@
|
||||
// Author: fruit.com.cn
|
||||
|
||||
package com.fruitshorts.admin.controller;
|
||||
|
||||
import com.fruitshorts.commerce.reward.service.RewardCheckinService;
|
||||
import com.fruitshorts.commerce.reward.service.RewardGrantService;
|
||||
import com.fruitshorts.commerce.reward.service.RewardTaskService;
|
||||
import com.fruitshorts.commerce.reward.vo.RewardCheckinRuleSaveReqVO;
|
||||
import com.fruitshorts.commerce.reward.vo.RewardGrantQueryReqVO;
|
||||
import com.fruitshorts.commerce.reward.vo.RewardGrantRespVO;
|
||||
import com.fruitshorts.commerce.reward.vo.RewardManualGrantReqVO;
|
||||
import com.fruitshorts.commerce.reward.vo.RewardRuleDayVO;
|
||||
import com.fruitshorts.commerce.reward.vo.RewardTaskQueryReqVO;
|
||||
import com.fruitshorts.commerce.reward.vo.RewardTaskRespVO;
|
||||
import com.fruitshorts.commerce.reward.vo.RewardTaskSaveReqVO;
|
||||
import com.fruitshorts.common.exception.ErrorCode;
|
||||
import com.fruitshorts.common.exception.ServiceException;
|
||||
import com.fruitshorts.common.pojo.PageResult;
|
||||
import com.fruitshorts.common.pojo.Result;
|
||||
import com.fruitshorts.framework.log.OperationLog;
|
||||
import com.fruitshorts.framework.security.SecurityUtils;
|
||||
import com.fruitshorts.user.dal.mapper.AppUserMapper;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.Valid;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/** 后台奖励任务、签到规则和发放记录管理。 */
|
||||
@Tag(name = "后台-奖励中心")
|
||||
@RestController
|
||||
@RequestMapping("/admin/rewards")
|
||||
@RequiredArgsConstructor
|
||||
public class RewardAdminController {
|
||||
|
||||
private final RewardTaskService taskService;
|
||||
private final RewardCheckinService checkinService;
|
||||
private final RewardGrantService grantService;
|
||||
private final AppUserMapper appUserMapper;
|
||||
|
||||
@Operation(summary = "奖励任务分页")
|
||||
@GetMapping("/tasks/page")
|
||||
@PreAuthorize("@ss.hasPermission('reward:list')")
|
||||
public Result<PageResult<RewardTaskRespVO>> page(@Validated RewardTaskQueryReqVO req) {
|
||||
return Result.ok(taskService.page(req));
|
||||
}
|
||||
|
||||
@Operation(summary = "奖励任务详情")
|
||||
@GetMapping("/tasks/{id}")
|
||||
@PreAuthorize("@ss.hasPermission('reward:list')")
|
||||
public Result<RewardTaskRespVO> detail(@PathVariable Long id) {
|
||||
return Result.ok(taskService.detail(id));
|
||||
}
|
||||
|
||||
@Operation(summary = "新建奖励任务")
|
||||
@PostMapping("/tasks")
|
||||
@PreAuthorize("@ss.hasPermission('reward:update')")
|
||||
@OperationLog(module = "奖励中心", action = "新建奖励任务")
|
||||
public Result<Long> create(@Valid @RequestBody RewardTaskSaveReqVO req) {
|
||||
return Result.ok(taskService.create(req));
|
||||
}
|
||||
|
||||
@Operation(summary = "编辑奖励任务")
|
||||
@PutMapping("/tasks/{id}")
|
||||
@PreAuthorize("@ss.hasPermission('reward:update')")
|
||||
@OperationLog(module = "奖励中心", action = "编辑奖励任务")
|
||||
public Result<Void> update(@PathVariable Long id, @Valid @RequestBody RewardTaskSaveReqVO req) {
|
||||
taskService.update(id, req);
|
||||
return Result.ok();
|
||||
}
|
||||
|
||||
@Operation(summary = "奖励任务上下线")
|
||||
@PutMapping("/tasks/{id}/status")
|
||||
@PreAuthorize("@ss.hasPermission('reward:update')")
|
||||
@OperationLog(module = "奖励中心", action = "奖励任务上下线")
|
||||
public Result<Void> updateStatus(@PathVariable Long id, @RequestParam Integer status) {
|
||||
taskService.updateStatus(id, status);
|
||||
return Result.ok();
|
||||
}
|
||||
|
||||
@Operation(summary = "签到规则")
|
||||
@GetMapping("/check-in/rules")
|
||||
@PreAuthorize("@ss.hasPermission('reward:checkin')")
|
||||
public Result<List<RewardRuleDayVO>> rules() {
|
||||
return Result.ok(checkinService.rulesForAdmin());
|
||||
}
|
||||
|
||||
@Operation(summary = "保存签到规则")
|
||||
@PutMapping("/check-in/rules")
|
||||
@PreAuthorize("@ss.hasPermission('reward:checkin')")
|
||||
@OperationLog(module = "奖励中心", action = "保存签到规则")
|
||||
public Result<Void> saveRules(@Valid @RequestBody RewardCheckinRuleSaveReqVO req) {
|
||||
checkinService.saveRules(req);
|
||||
return Result.ok();
|
||||
}
|
||||
|
||||
@Operation(summary = "奖励发放记录分页")
|
||||
@GetMapping("/grants/page")
|
||||
@PreAuthorize("@ss.hasPermission('reward:grant')")
|
||||
public Result<PageResult<RewardGrantRespVO>> grants(@Validated RewardGrantQueryReqVO req) {
|
||||
return Result.ok(grantService.page(req));
|
||||
}
|
||||
|
||||
@Operation(summary = "人工补发奖励")
|
||||
@PostMapping("/grants/manual")
|
||||
@PreAuthorize("@ss.hasPermission('reward:grant')")
|
||||
@OperationLog(module = "奖励中心", action = "人工补发奖励")
|
||||
public Result<RewardGrantRespVO> manualGrant(@Valid @RequestBody RewardManualGrantReqVO req) {
|
||||
if (appUserMapper.selectById(req.getUserId()) == null) {
|
||||
throw new ServiceException(ErrorCode.DATA_NOT_FOUND, "用户不存在,无法补发奖励");
|
||||
}
|
||||
return Result.ok(grantService.manualGrant(req.getUserId(), req.getTaskId(), req.getAmount(),
|
||||
req.getIdempotentKey(), SecurityUtils.getUserId()));
|
||||
}
|
||||
}
|
||||
+4
@@ -32,6 +32,10 @@ class AdminPermissionAnnotationTest {
|
||||
assertThat(permissionsOf(NoticeAdminController.class))
|
||||
.containsExactlyInAnyOrder("notice:list", "notice:list",
|
||||
"notice:update", "notice:update", "notice:update", "notice:update");
|
||||
assertThat(permissionsOf(RewardAdminController.class))
|
||||
.containsExactlyInAnyOrder("reward:list", "reward:list", "reward:update",
|
||||
"reward:update", "reward:update", "reward:checkin", "reward:checkin",
|
||||
"reward:grant", "reward:grant");
|
||||
}
|
||||
|
||||
/** 收集控制器里所有映射方法的 @PreAuthorize 权限点(缺失则记为 MISSING,便于断言直接看到)。 */
|
||||
|
||||
Reference in new issue
Block a user