173 lines
6.3 KiB
Java
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);
|
|
}
|
|
|
|
|
|
}
|