package com.ichaoj.ams.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ichaoj.ams.entity.AmsAirdropProject; import com.ichaoj.ams.entity.AmsAirdropTask; import com.ichaoj.ams.request.airdrop.CreateAirdropProject; import com.ichaoj.ams.request.airdrop.PageProjectRequest; import com.ichaoj.ams.request.airdrop.UpdateAirdropProject; import com.ichaoj.ams.request.airdrop.UpdateProjectStatus; import com.ichaoj.ams.response.airdrop.AirdropProjectResponse; import com.ichaoj.ams.response.airdrop.ProjectDetailResponse; import com.ichaoj.ams.response.task.TaskResponse; import com.ichaoj.ams.service.IAmsAirdropProjectService; import com.ichaoj.ams.service.IAmsAirdropTaskService; import com.ichaoj.common.annotation.AuthResource; import com.ichaoj.common.exception.ErrorServiceException; import com.ichaoj.common.model.PublicPage; import com.ichaoj.common.model.PublicResult; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jnr.ffi.annotations.In; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; import static com.ichaoj.ams.constant.AmsConstant.AirdropStatus.ONGOING; /** *

* 空投项目 前端控制器 *

* * @author cjwen * @since 2023-04-25 */ @RestController @RequestMapping("/airdrop-project") @Tag(name = "项目模块") public class AirdropProjectController { @Resource private IAmsAirdropProjectService airdropProjectService; @Resource private IAmsAirdropTaskService taskService; @PostMapping @Operation(summary = "创建空投项目") @AuthResource public PublicResult createAirdropProject(@RequestBody CreateAirdropProject createAirdropProject) { airdropProjectService.createAirdropProject(createAirdropProject); return PublicResult.success(); } @PutMapping @Operation(summary = "修改空投项目") @AuthResource public PublicResult updateAirdropProject(@RequestBody @Validated UpdateAirdropProject updateAirdropProject) { airdropProjectService.updateAirdropProject(updateAirdropProject); return PublicResult.success(); } @PutMapping("update-status") @Operation(summary = "修改项目状态") @AuthResource public PublicResult updateProjectStatus(@RequestBody @Validated UpdateProjectStatus projectStatus) { if (projectStatus.getStatus() == null) { throw new ErrorServiceException("状态不能为空"); } AmsAirdropProject project = airdropProjectService.getById(projectStatus.getAmsProjectId()); if (project == null) { throw new ErrorServiceException("项目id错误"); } project.setStatus(projectStatus.getStatus()); airdropProjectService.updateById(project); return PublicResult.success(); } @DeleteMapping("/{projectId}") @Operation(summary = "删除空投项目") @AuthResource public PublicResult deleteAirdropProject(@PathVariable String projectId) { airdropProjectService.removeById(projectId); return PublicResult.success(); } @PostMapping("/page") @Operation(summary = "分页查询空投项目") @AuthResource public PublicResult> pageAirdropProject(@RequestBody PageProjectRequest projectRequest) { PublicPage result = airdropProjectService.pageAirdropProject(projectRequest); return PublicResult.success(result); } @GetMapping("/detail/{projectId}") @Operation(summary = "根据项目id查询详情") @AuthResource public PublicResult getByProjectId(@PathVariable String projectId) { if (StrUtil.isBlank(projectId)) { throw new ErrorServiceException("projectId 不能为空"); } ProjectDetailResponse project = BeanUtil.copyProperties(airdropProjectService.getById(projectId), ProjectDetailResponse.class); List tasks = taskService.list(new LambdaQueryWrapper().eq(AmsAirdropTask::getAirdropProjectId, project.getAmsProjectId())); List taskResponses = BeanUtil.copyToList(tasks, TaskResponse.class); project.setTasks(taskResponses); return PublicResult.success(project); } @GetMapping("/count/projectNum") @Operation(summary = "统计项目数量") @AuthResource public PublicResult> getProjectNum() { Map map = new HashMap<>(4); map.put("totalCount", airdropProjectService.count()); map.put("runningCount", airdropProjectService.count(new LambdaQueryWrapper().eq(AmsAirdropProject::getStatus, ONGOING))); return PublicResult.success(map); } }