AirdropProjectController.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package com.ichaoj.ams.controller;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.ichaoj.ams.entity.AmsAirdropProject;
  6. import com.ichaoj.ams.entity.AmsAirdropTask;
  7. import com.ichaoj.ams.request.airdrop.CreateAirdropProject;
  8. import com.ichaoj.ams.request.airdrop.PageProjectRequest;
  9. import com.ichaoj.ams.request.airdrop.UpdateAirdropProject;
  10. import com.ichaoj.ams.request.airdrop.UpdateProjectStatus;
  11. import com.ichaoj.ams.response.airdrop.AirdropProjectResponse;
  12. import com.ichaoj.ams.response.airdrop.ProjectDetailResponse;
  13. import com.ichaoj.ams.response.task.TaskResponse;
  14. import com.ichaoj.ams.service.IAmsAirdropProjectService;
  15. import com.ichaoj.ams.service.IAmsAirdropTaskService;
  16. import com.ichaoj.common.annotation.AuthResource;
  17. import com.ichaoj.common.exception.ErrorServiceException;
  18. import com.ichaoj.common.model.PublicPage;
  19. import com.ichaoj.common.model.PublicResult;
  20. import io.swagger.v3.oas.annotations.Operation;
  21. import io.swagger.v3.oas.annotations.tags.Tag;
  22. import jnr.ffi.annotations.In;
  23. import org.springframework.validation.annotation.Validated;
  24. import org.springframework.web.bind.annotation.*;
  25. import javax.annotation.Resource;
  26. import java.util.HashMap;
  27. import java.util.List;
  28. import java.util.Map;
  29. import static com.ichaoj.ams.constant.AmsConstant.AirdropStatus.ONGOING;
  30. /**
  31. * <p>
  32. * 空投项目 前端控制器
  33. * </p>
  34. *
  35. * @author cjwen
  36. * @since 2023-04-25
  37. */
  38. @RestController
  39. @RequestMapping("/airdrop-project")
  40. @Tag(name = "项目模块")
  41. public class AirdropProjectController {
  42. @Resource
  43. private IAmsAirdropProjectService airdropProjectService;
  44. @Resource
  45. private IAmsAirdropTaskService taskService;
  46. @PostMapping
  47. @Operation(summary = "创建空投项目")
  48. @AuthResource
  49. public PublicResult<Object> createAirdropProject(@RequestBody CreateAirdropProject createAirdropProject) {
  50. airdropProjectService.createAirdropProject(createAirdropProject);
  51. return PublicResult.success();
  52. }
  53. @PutMapping
  54. @Operation(summary = "修改空投项目")
  55. @AuthResource
  56. public PublicResult<Object> updateAirdropProject(@RequestBody @Validated UpdateAirdropProject updateAirdropProject) {
  57. airdropProjectService.updateAirdropProject(updateAirdropProject);
  58. return PublicResult.success();
  59. }
  60. @PutMapping("update-status")
  61. @Operation(summary = "修改项目状态")
  62. @AuthResource
  63. public PublicResult<Object> updateProjectStatus(@RequestBody @Validated UpdateProjectStatus projectStatus) {
  64. if (projectStatus.getStatus() == null) {
  65. throw new ErrorServiceException("状态不能为空");
  66. }
  67. AmsAirdropProject project = airdropProjectService.getById(projectStatus.getAmsProjectId());
  68. if (project == null) {
  69. throw new ErrorServiceException("项目id错误");
  70. }
  71. project.setStatus(projectStatus.getStatus());
  72. airdropProjectService.updateById(project);
  73. return PublicResult.success();
  74. }
  75. @DeleteMapping("/{projectId}")
  76. @Operation(summary = "删除空投项目")
  77. @AuthResource
  78. public PublicResult<Object> deleteAirdropProject(@PathVariable String projectId) {
  79. airdropProjectService.removeById(projectId);
  80. return PublicResult.success();
  81. }
  82. @PostMapping("/page")
  83. @Operation(summary = "分页查询空投项目")
  84. @AuthResource
  85. public PublicResult<PublicPage<AirdropProjectResponse>> pageAirdropProject(@RequestBody PageProjectRequest projectRequest) {
  86. PublicPage<AirdropProjectResponse> result = airdropProjectService.pageAirdropProject(projectRequest);
  87. return PublicResult.success(result);
  88. }
  89. @GetMapping("/detail/{projectId}")
  90. @Operation(summary = "根据项目id查询详情")
  91. @AuthResource
  92. public PublicResult<ProjectDetailResponse> getByProjectId(@PathVariable String projectId) {
  93. if (StrUtil.isBlank(projectId)) {
  94. throw new ErrorServiceException("projectId 不能为空");
  95. }
  96. ProjectDetailResponse project = BeanUtil.copyProperties(airdropProjectService.getById(projectId), ProjectDetailResponse.class);
  97. List<AmsAirdropTask> tasks = taskService.list(new LambdaQueryWrapper<AmsAirdropTask>().eq(AmsAirdropTask::getAirdropProjectId, project.getAmsProjectId()));
  98. List<TaskResponse> taskResponses = BeanUtil.copyToList(tasks, TaskResponse.class);
  99. project.setTasks(taskResponses);
  100. return PublicResult.success(project);
  101. }
  102. @GetMapping("/count/projectNum")
  103. @Operation(summary = "统计项目数量")
  104. @AuthResource
  105. public PublicResult<Map<String, Object>> getProjectNum() {
  106. Map<String, Object> map = new HashMap<>(4);
  107. map.put("totalCount", airdropProjectService.count());
  108. map.put("runningCount", airdropProjectService.count(new LambdaQueryWrapper<AmsAirdropProject>().eq(AmsAirdropProject::getStatus, ONGOING)));
  109. return PublicResult.success(map);
  110. }
  111. }