boom-light-java/ruoyi-web/src/main/java/com/ruoyi/web/app/AppTeamController.java
2025-05-24 18:02:32 +08:00

173 lines
6.3 KiB
Java

package com.ruoyi.web.app;
import com.ruoyi.bst.team.domain.Team;
import com.ruoyi.bst.team.domain.TeamQuery;
import com.ruoyi.bst.team.domain.TeamVO;
import com.ruoyi.bst.team.domain.dto.InvitedDTO;
import com.ruoyi.bst.team.domain.enums.TeamStatus;
import com.ruoyi.bst.team.service.TeamConverter;
import com.ruoyi.bst.team.service.TeamService;
import com.ruoyi.bst.team.service.TeamValidator;
import com.ruoyi.bst.teamUser.domain.TeamUser;
import com.ruoyi.bst.teamUser.domain.TeamUserQuery;
import com.ruoyi.bst.teamUser.domain.TeamUserVO;
import com.ruoyi.bst.teamUser.domain.enums.RoleType;
import com.ruoyi.bst.teamUser.domain.enums.TeamUserStatus;
import com.ruoyi.bst.teamUser.service.TeamUserAssembler;
import com.ruoyi.bst.teamUser.service.TeamUserConverter;
import com.ruoyi.bst.teamUser.service.TeamUserService;
import com.ruoyi.bst.teamUser.service.TeamUserValidator;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.sun.org.apache.bcel.internal.generic.I2F;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.cache.CacheKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import java.time.Duration;
import java.util.List;
import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/app/team")
public class AppTeamController extends BaseController {
@Autowired
private TeamService teamService;
@Autowired
private TeamConverter teamConverter;
@Autowired
private TeamUserService teamUserService;
@Autowired
private TeamUserValidator teamUserValidator;
@Autowired
private RedisCache redisCache;
@Autowired
private TeamValidator teamValidator;
@Autowired
private TeamUserAssembler teamUserAssembler;
@ApiOperation("创建队伍")
@PostMapping("/createTeam")
public AjaxResult list(@RequestBody Team team) {
Team po = teamConverter.toPoByCreate(team);
return AjaxResult.success(teamService.createTeam(po, getUserId()));
}
@ApiOperation("加入队伍")
@PostMapping("/joinTeam")
public AjaxResult joinTeam(@RequestParam Long teamId, @RequestParam(required = false) String inviteCode) {
if (inviteCode != null && !inviteCode.isEmpty()) {
String verifyKey = CacheConstants.TABLE_SHARING_INVITATION_KEY + inviteCode;
InvitedDTO dto = redisCache.getCacheObject(verifyKey);
if (dto == null) {
return AjaxResult.error("二维码无效,请重新扫码");
}
if (!dto.getTeamId().equals(teamId)) {
return AjaxResult.error("二维码无效,请重新扫码");
}
return AjaxResult.success(teamService.invitedTeam(dto.getTeamId(), getUserId(), dto.getInvitedId()));
}
return AjaxResult.success(teamService.joinTeam(teamId, getUserId()));
}
@ApiOperation("退出队伍")
@PutMapping("/exitTeam")
public AjaxResult exitTeam(@RequestParam Long teamId) {
return AjaxResult.success(teamService.exitTeam(teamId, getUserId()));
}
@ApiOperation("解散队伍")
@PutMapping("/disTeam")
public AjaxResult disTeam(@RequestParam Long teamId) {
// 权限校验
TeamUserQuery query = new TeamUserQuery();
query.setTeamId(teamId);
query.setRole(RoleType.CREATOR.getCode());
TeamUserVO vo = teamUserService.getTeamUser(query);
if (!vo.getUserId().equals(getUserId())) {
return AjaxResult.error("该拼桌不属于您,您无权解散");
}
return AjaxResult.success(teamService.disTeam(teamId));
}
@ApiOperation("生成邀请码")
@PostMapping("/invCode")
public AjaxResult invCode(@RequestBody InvitedDTO dto) {
String uuid = IdUtils.simpleUUID();
String verifyKey = CacheConstants.TABLE_SHARING_INVITATION_KEY + uuid;
redisCache.setCacheObject(verifyKey, dto, 5, TimeUnit.MINUTES);
return AjaxResult.success(uuid);
}
@ApiOperation("获取拼桌成员信息")
@GetMapping("/getTeammate")
public AjaxResult getTeammate(@RequestParam Long teamId) {
return AjaxResult.success(teamService.getTeammate(teamId));
}
@ApiOperation("获取进行中的拼桌列表")
@GetMapping("/getTeamList")
public TableDataInfo getTeamList(TeamQuery query) {
startPage();
query.setStatus(TeamStatus.NORMAL.getCode());
List<TeamVO> list = teamService.selectTeamList(query);
return getDataTable(list);
}
@ApiOperation("获取拼桌信息")
@GetMapping("/getTeamInfo")
public AjaxResult getTeamInfo(TeamQuery query) {
query.setStatus(TeamStatus.NORMAL.getCode());
return AjaxResult.success(teamService.getTeamInfo(query));
}
@ApiOperation("修改拼桌基础信息")
@PutMapping("/updateBasicInfo")
public AjaxResult updateBasicInfo(@RequestBody Team team,@RequestParam Long userId) {
// 条件查询用户角色
TeamUserQuery query = new TeamUserQuery();
query.setTeamId(team.getId());
query.setRole(RoleType.CREATOR.getCode());
query.setStatus(TeamUserStatus.JOINED.getCode());
TeamUserVO vo = teamUserService.selectOne(query);
// 权限校验
if (!vo.getUserId().equals(userId)) {
return AjaxResult.error("您无权限修改当前拼桌信息");
}
Team po = teamConverter.toPoByUpdate(team);
return AjaxResult.success(teamService.updateTeam(po));
}
@ApiOperation("我的当前拼桌信息")
@GetMapping("/myTeam")
public AjaxResult myTeam() {
return AjaxResult.success(teamUserService.selectMyTeam(getUserId()));
}
@ApiOperation("我的拼桌记录")
@GetMapping("/myJoinRecord")
public TableDataInfo myJoinRecord(TeamUserQuery query) {
startPage();
query.setUserId(getUserId());
List<TeamUserVO> list = teamUserService.selectTeamUserList(query);
teamUserAssembler.assembleTeam(list);
return getDataTable(list);
}
}