feat: playroom related logic refactor

This commit is contained in:
merlin
2025-12-02 18:52:48 +08:00
parent 3fce5b2f01
commit 4597623cd9
14 changed files with 412 additions and 29 deletions

View File

@@ -1,7 +1,5 @@
package xin.merlin.myplayerbackend.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import xin.merlin.myplayerbackend.entity.Inviting;
@@ -11,7 +9,6 @@ import xin.merlin.myplayerbackend.utils.JwtUtil;
import xin.merlin.myplayerbackend.utils.result.Response;
import xin.merlin.myplayerbackend.utils.result.ResultCode;
import java.util.Map;
import java.util.Objects;
import static com.baomidou.mybatisplus.extension.ddl.DdlScriptErrorHandler.PrintlnLogErrorHandler.log;
@@ -25,26 +22,31 @@ public class InvitingController {
private final JwtUtil jwtUtil;
// playroom鉴权
private Boolean isAdmin(Integer id,Integer r_id){
return invitingService.playroomIsAdmin(id,r_id)==0;
}
@PostMapping("/friends")
Response requestFriend(@RequestHeader("Authorization")String token, @RequestBody UserInfo userInfo) {
try {
token = token.substring(7);
Integer id = jwtUtil.getId(token);
if (Objects.equals(id, userInfo.getId())) return Response.success(ResultCode.INVITING_ILLEGAL_REQUEST);
if(invitingService.inviting(id,userInfo.getId(),null)) return Response.success(ResultCode.SUCCESS);
return Response.success(ResultCode.INVITING_REQUEST_ERROR);
if(!invitingService.inviting(id,userInfo.getId(),null)) return Response.success(ResultCode.INVITING_RE_REQUEST);
return Response.success(ResultCode.SUCCESS);
} catch (Exception e) {
log.error(e.getMessage());
return Response.fail(ResultCode.SERVER_ERROR);
}
}
@GetMapping("/friends/get")
Response getFriend(@RequestHeader("Authorization")String token, @RequestParam Integer size, @RequestParam Integer page) {
@GetMapping("/get")
Response getFriend(@RequestHeader("Authorization")String token, @RequestParam Integer pageSize, @RequestParam Integer currentPage) {
try {
token = token.substring(7);
Integer id = jwtUtil.getId(token);
return Response.success(ResultCode.SUCCESS, invitingService.getInvitingDetail(id,size,page));
return Response.success(ResultCode.SUCCESS, invitingService.getInvitingDetail(id, pageSize, currentPage));
} catch (Exception e) {
log.error(e.getMessage());
return Response.fail(ResultCode.SERVER_ERROR);
@@ -52,13 +54,57 @@ public class InvitingController {
}
@PostMapping("/friends/handle")
@PostMapping("/handle")
Response handleFriend(@RequestHeader("Authorization")String token, @RequestBody Inviting inviting) {
try {
if (Objects.equals(inviting.getInviter(), inviting.getTarget())) return Response.success(ResultCode.ACCOUNT_PERMISSION_DENY);
token = token.substring(7);
Integer id = jwtUtil.getId(token);
if(!inviting.getTarget().equals(id)) return Response.success(ResultCode.INVITING_ILLEGAL_RESPONSE);
if(!invitingService.handleFriendInviting(inviting)) return Response.success(ResultCode.SERVER_ERROR);
if(!invitingService.handleFriendInviting(inviting)) return Response.success(ResultCode.INVITING_ILLEGAL_REQUEST);
return Response.success(ResultCode.SUCCESS);
} catch (Exception e) {
log.error(e.getMessage());
return Response.fail(ResultCode.SERVER_ERROR);
}
}
@PostMapping("/playroom")
Response playRoom(@RequestBody Inviting inviting) {
try {
if(inviting.getRoom()==null || !inviting.getStatus().equals(0)) return Response.success(ResultCode.INVITING_REQUEST_ERROR);
if(!invitingService.inviting(inviting.getInviter(),inviting.getTarget(),inviting.getRoom())) return Response.success(ResultCode.INVITING_RE_REQUEST);
return Response.success(ResultCode.SUCCESS);
} catch (Exception e) {
log.error(e.getMessage());
return Response.fail(ResultCode.SERVER_ERROR);
}
}
// 管理员获取playroom
@GetMapping("/playroom/get/{r_id}")
Response playroomGet(@RequestHeader("Authorization")String token,@PathVariable("r_id") Integer r_id, @RequestParam Integer pageSize, @RequestParam Integer currentPage) {
try {
token = token.substring(7);
Integer id = jwtUtil.getId(token);
if (!isAdmin(id,r_id)) return Response.success(ResultCode.INVITING_AUTH_ERROR);
return Response.success(ResultCode.SUCCESS, invitingService.getSelfInvitingDetail(r_id, pageSize, currentPage));
} catch (Exception e) {
log.error(e.getMessage());
return Response.fail(ResultCode.SERVER_ERROR);
}
}
// 管理员对请求进行审批
@PostMapping("/playroom/handle/{r_id}")
Response playroomHandle(@RequestHeader("Authorization")String token,@PathVariable("r_id") Integer r_id, @RequestBody Inviting inviting) {
try {
token = token.substring(7);
Integer id = jwtUtil.getId(token);
if (!isAdmin(id,r_id)) return Response.success(ResultCode.INVITING_AUTH_ERROR);
if(!invitingService.handlePlayroomInviting(inviting)) return Response.success(ResultCode.INVITING_ILLEGAL_REQUEST);
return Response.success(ResultCode.SUCCESS);
} catch (Exception e) {
log.error(e.getMessage());

View File

@@ -0,0 +1,124 @@
package xin.merlin.myplayerbackend.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import xin.merlin.myplayerbackend.entity.PlayroomInfo;
import xin.merlin.myplayerbackend.entity.Playrooms;
import xin.merlin.myplayerbackend.entity.UserInfo;
import xin.merlin.myplayerbackend.service.impl.PlayroomServiceImpl;
import xin.merlin.myplayerbackend.service.impl.PlayroomsServiceImpl;
import xin.merlin.myplayerbackend.utils.JwtUtil;
import xin.merlin.myplayerbackend.utils.result.Response;
import xin.merlin.myplayerbackend.utils.result.ResultCode;
import static com.baomidou.mybatisplus.extension.ddl.DdlScriptErrorHandler.PrintlnLogErrorHandler.log;
@RestController
@RequestMapping("/playroom")
@RequiredArgsConstructor
public class PlayroomController {
private final JwtUtil jwtUtil;
private final PlayroomServiceImpl playroomService;
private final PlayroomsServiceImpl playroomsService;
private Boolean isAdmin(Integer id,Integer r_id){
return playroomsService.playroomIsAdmin(id,r_id)==0;
}
@PostMapping("/create")
Response createPlayroom(@RequestHeader("Authorization")String token, @RequestBody PlayroomInfo playroomInfo) {
try {
token = token.substring(7);
Integer id = jwtUtil.getId(token);
return Response.success(ResultCode.SUCCESS, playroomService.createPlayroom(id,playroomInfo));
} catch (Exception e) {
log.error(e.getMessage());
return Response.fail(ResultCode.SERVER_ERROR);
}
}
@GetMapping("/get")
Response getPlayroom(@RequestHeader("Authorization")String token){
try {
token = token.substring(7);
Integer id = jwtUtil.getId(token);
return Response.success(ResultCode.SUCCESS,playroomService.getPlayrooms(id));
} catch (Exception e) {
log.error(e.getMessage());
return Response.fail(ResultCode.SERVER_ERROR);
}
}
@PostMapping("/search")
Response searchPlayroom(@RequestBody PlayroomInfo playroomInfo) {
// TODO视情况开放api参数currentPage和 pageSize
try {
Integer currentPage = 1;
Integer pageSize = 10;
return Response.success(ResultCode.SUCCESS,playroomService.searchPlayroom(playroomInfo,currentPage,pageSize));
} catch (Exception e) {
log.error(e.getMessage());
return Response.fail(ResultCode.SERVER_ERROR);
}
}
@PostMapping("/update")
Response updatePlayroom(@RequestHeader("Authorization")String token, @RequestBody PlayroomInfo playroomInfo) {
try {
token = token.substring(7);
Integer id = jwtUtil.getId(token);
if(!isAdmin(id,playroomInfo.getR_id())) return Response.success(ResultCode.ACCOUNT_PERMISSION_DENY);
playroomService.updateById(playroomInfo);
return Response.success(ResultCode.SUCCESS);
} catch (Exception e) {
log.error(e.getMessage());
return Response.fail(ResultCode.SERVER_ERROR);
}
}
@PostMapping("/delete")
Response deletePlayroom(@RequestHeader("Authorization")String token, @RequestBody PlayroomInfo playroomInfo) {
try {
token = token.substring(7);
Integer id = jwtUtil.getId(token);
if(!isAdmin(id,playroomInfo.getR_id())) return Response.success(ResultCode.ACCOUNT_PERMISSION_DENY);
return Response.success(ResultCode.SUCCESS,playroomService.deletePlayroom(playroomInfo));
} catch (Exception e) {
log.error(e.getMessage());
return Response.fail(ResultCode.SERVER_ERROR);
}
}
@GetMapping("/member/{r_id}")
Response getMember(@PathVariable("r_id")Integer r_id,@RequestParam Integer currentPage,@RequestParam Integer pageSize){
try {
return Response.success(ResultCode.SUCCESS,playroomService.getMember(r_id,currentPage,pageSize));
} catch (Exception e) {
log.error(e.getMessage());
return Response.fail(ResultCode.SERVER_ERROR);
}
}
@PostMapping("/member/delete/{r_id}")
Response deleteMember(@RequestHeader("Authorization")String token, @PathVariable("r_id")Integer r_id, @RequestBody UserInfo userInfo){
try {
token = token.substring(7);
Integer id = jwtUtil.getId(token);
if(!isAdmin(id,r_id)) return Response.success(ResultCode.ACCOUNT_PERMISSION_DENY);
playroomsService.remove(Wrappers.<Playrooms>lambdaQuery().eq(Playrooms::getR_id,r_id).eq(Playrooms::getId,userInfo.getId()));
return Response.success(ResultCode.SUCCESS);
} catch (Exception e) {
log.error(e.getMessage());
return Response.fail(ResultCode.SERVER_ERROR);
}
}
}

View File

@@ -57,12 +57,15 @@ public class UserController {
@PostMapping("/search")
Response search(@RequestBody UserInfo userinfo){
// TODO视情况开放api参数currentPage和 pageSize
Integer currentPage = 1;
Integer pageSize = 10;
try {
if(userinfo.getU_id()!=null){
return Response.success(ResultCode.SUCCESS, Map.of("result",userService.searchByUID(userinfo.getU_id())));
return Response.success(ResultCode.SUCCESS, Map.of("result",userService.searchByUID(userinfo.getU_id(),currentPage,pageSize)));
}
else
return Response.success(ResultCode.SUCCESS, Map.of("result",userService.searchByName(userinfo.getU_name())));
return Response.success(ResultCode.SUCCESS, Map.of("result",userService.searchByName(userinfo.getU_name(),currentPage,pageSize)));
} catch (Exception e) {
log.error(e.getMessage(),e);
return Response.fail(ResultCode.SERVER_ERROR);

View File

@@ -1,5 +1,6 @@
package xin.merlin.myplayerbackend.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -7,7 +8,7 @@ import lombok.Data;
@Data
@TableName("playroominfo")
public class PlayroomInfo {
@TableId("r_id")
@TableId(value = "r_id",type = IdType.AUTO)
private Integer r_id;
private String r_name;

View File

@@ -2,12 +2,15 @@ package xin.merlin.myplayerbackend.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@TableName("playrooms")
@AllArgsConstructor
public class Playrooms {
private Integer r_id;
private Integer id;
private Integer role;
}

View File

@@ -7,9 +7,8 @@ import lombok.Data;
@Data
@TableName("userinfo")
public class UserInfo {
@TableId("u_id")
private String u_id;
@TableId("id")
private Integer id;
private String u_name;
private String u_introduction;

View File

@@ -0,0 +1,27 @@
package xin.merlin.myplayerbackend.entity.http;
import lombok.Data;
import lombok.NoArgsConstructor;
import xin.merlin.myplayerbackend.entity.PlayroomInfo;
import xin.merlin.myplayerbackend.entity.Playrooms;
@Data
@NoArgsConstructor
public class PlayroomDetails {
private Integer id;
private Integer r_id;
private String r_name;
private String r_introduction;
private String r_avatar;
private Integer role;
public PlayroomDetails(PlayroomInfo playroomInfo, Playrooms playrooms) {
this.id = playrooms.getId();
this.r_id = playrooms.getR_id();
this.role = playrooms.getRole();
this.r_name = playroomInfo.getR_name();
this.r_introduction = playroomInfo.getR_introduction();
this.r_avatar = playroomInfo.getR_avatar();
}
}

View File

@@ -2,8 +2,13 @@ package xin.merlin.myplayerbackend.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import xin.merlin.myplayerbackend.entity.PlayroomInfo;
import xin.merlin.myplayerbackend.entity.http.PlayroomDetails;
import java.util.List;
@Mapper
public interface PlayroomMapper extends BaseMapper<PlayroomInfo> {
List<PlayroomDetails> selectPlayroomDetails(@Param("userId") Integer id);
}

View File

@@ -0,0 +1,12 @@
<select id="selectPlayroomDetails" resultType="xin.merlin.myplayerbackend.entity.http.PlayroomDetails">
SELECT
pr.id AS id,
pr.r_id AS r_id,
pr.role AS role,
pi.r_name AS r_name,
pi.r_introduction AS r_introduction,
pi.r_avatar AS r_avatar
FROM playrooms pr
LEFT JOIN playroominfo pi ON pr.r_id = pi.r_id
WHERE pr.id = #{userId}
</select>

View File

@@ -8,10 +8,12 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import xin.merlin.myplayerbackend.entity.Friends;
import xin.merlin.myplayerbackend.entity.Inviting;
import xin.merlin.myplayerbackend.entity.Playrooms;
import xin.merlin.myplayerbackend.entity.UserInfo;
import xin.merlin.myplayerbackend.entity.http.InvitingDetails;
import xin.merlin.myplayerbackend.mapper.FriendsMapper;
import xin.merlin.myplayerbackend.mapper.InvitingMapper;
import xin.merlin.myplayerbackend.mapper.PlayroomsMapper;
import xin.merlin.myplayerbackend.mapper.UserMapper;
import java.util.ArrayList;
@@ -28,6 +30,19 @@ public class InvitingServiceImpl extends ServiceImpl<InvitingMapper, Inviting> {
private final FriendsMapper friendsMapper;
private final PlayroomsMapper playroomsMapper;
// TODO: 修改关联查询逻辑
private Map<String, Object> getInvitingDetails(List<Inviting> invitings) {
List<InvitingDetails> invitingDetails = new ArrayList<>();
for (Inviting inviting : invitings){
InvitingDetails invitingDetail = new InvitingDetails(inviting,
userMapper.selectOne(Wrappers.<UserInfo>lambdaQuery().eq(UserInfo::getId,inviting.getInviter())));
invitingDetails.add(invitingDetail);
}
return Map.of("result",invitingDetails);
}
public Boolean inviting(Integer inviter, Integer target,Integer room){
Inviting inviting = new Inviting();
inviting.setInviter(inviter);
@@ -41,16 +56,26 @@ public class InvitingServiceImpl extends ServiceImpl<InvitingMapper, Inviting> {
}
public Map<String,Object> getInvitingDetail(Integer target, Integer size, Integer page){
List<Inviting> invitings = invitingMapper.selectList(new Page<Inviting>(page,size), Wrappers.<Inviting>lambdaQuery().eq(Inviting::getTarget,target));
List<InvitingDetails> invitingDetails = new ArrayList<>();
for (Inviting inviting : invitings){
InvitingDetails invitingDetail = new InvitingDetails(inviting,
userMapper.selectOne(Wrappers.<UserInfo>lambdaQuery().eq(UserInfo::getId,target)));
invitingDetails.add(invitingDetail);
try {
List<Inviting> invitings = invitingMapper.selectList(new Page<>(page,size), Wrappers.<Inviting>lambdaQuery().eq(Inviting::getTarget,target));
return getInvitingDetails(invitings);
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
return Map.of("result",invitingDetails);
}
public Map<String,Object> getSelfInvitingDetail(Integer room, Integer size, Integer page){
try {
List<Inviting> invitings = invitingMapper.selectList(new Page<>(page,size), Wrappers.<Inviting>lambdaQuery().eq(Inviting::getRoom,room).apply("inviter = target"));
return getInvitingDetails(invitings);
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
@Transactional
public Boolean handleFriendInviting(Inviting inviting) {
@@ -68,4 +93,29 @@ public class InvitingServiceImpl extends ServiceImpl<InvitingMapper, Inviting> {
}
}
public Integer playroomIsAdmin(Integer id, Integer r_id) {
try {
Playrooms playrooms = playroomsMapper.selectOne(Wrappers.<Playrooms>lambdaQuery().eq(Playrooms::getId,id).eq(Playrooms::getR_id,r_id));
if (playrooms == null) return 1;
else return playrooms.getRole();
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
public Boolean handlePlayroomInviting(Inviting inviting) {
try {
if (inviting.getStatus().equals(0) || inviting.getRoom() == null) return false;
else if (inviting.getStatus().equals(1)){
playroomsMapper.insert(new Playrooms(inviting.getRoom(), inviting.getTarget(), 1));
return true;
}
else return true;
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
}

View File

@@ -1,10 +1,91 @@
package xin.merlin.myplayerbackend.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.apache.catalina.User;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import xin.merlin.myplayerbackend.entity.PlayroomInfo;
import xin.merlin.myplayerbackend.entity.Playrooms;
import xin.merlin.myplayerbackend.entity.UserInfo;
import xin.merlin.myplayerbackend.entity.http.PlayroomDetails;
import xin.merlin.myplayerbackend.mapper.PlayroomMapper;
import xin.merlin.myplayerbackend.mapper.PlayroomsMapper;
import xin.merlin.myplayerbackend.mapper.UserMapper;
import java.util.ArrayList;
import java.util.List;
@Service
@RequiredArgsConstructor
public class PlayroomServiceImpl extends ServiceImpl<PlayroomMapper, PlayroomInfo> {
private final PlayroomMapper playroomMapper;
private final PlayroomsMapper playroomsMapper;
private final UserMapper userMapper;
@Transactional
public PlayroomInfo createPlayroom(Integer id, PlayroomInfo playroomInfo) {
try {
playroomMapper.insert(playroomInfo);
playroomsMapper.insert(new Playrooms(playroomInfo.getR_id(),id,0));
return playroomInfo;
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
// TODO: 优化点使用xml语句写关联查询
public List<PlayroomDetails> getPlayrooms(Integer id) {
try {
List<Playrooms> playrooms = playroomsMapper.selectObjs(Wrappers.<Playrooms>lambdaQuery().eq(Playrooms::getId,id));
List<PlayroomDetails> playroomDetails = new ArrayList<>();
for (Playrooms playroom : playrooms) {
playroomDetails.add(new PlayroomDetails(playroomMapper.selectById(playroom.getR_id()),playroom));
}
return playroomDetails;
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
public Page<PlayroomInfo> searchPlayroom(PlayroomInfo playroomInfo, Integer currentPage, Integer pageSize) {
try {
return playroomMapper.selectPage(new Page<>(currentPage,pageSize),Wrappers.<PlayroomInfo>lambdaQuery().like(PlayroomInfo::getR_name,playroomInfo.getR_name()));
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
@Transactional
public Integer deletePlayroom(PlayroomInfo playroomInfo) {
try {
return playroomsMapper.delete(Wrappers.<Playrooms>lambdaQuery().eq(Playrooms::getR_id,playroomInfo.getR_id()));
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
public List<UserInfo> getMember(Integer r_id, Integer currentPage, Integer pageSize) {
try {
List<Playrooms> ids = playroomsMapper.selectPage(new Page<>(currentPage,pageSize),Wrappers.<Playrooms>lambdaQuery().eq(Playrooms::getR_id,r_id)).getRecords();
List<UserInfo> members = new ArrayList<>();
for(Playrooms playroom:ids){
members.add(userMapper.selectById(playroom.getId()));
}
return members;
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
}

View File

@@ -1,10 +1,30 @@
package xin.merlin.myplayerbackend.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import xin.merlin.myplayerbackend.entity.PlayroomInfo;
import xin.merlin.myplayerbackend.entity.Playrooms;
import xin.merlin.myplayerbackend.mapper.PlayroomMapper;
import xin.merlin.myplayerbackend.mapper.PlayroomsMapper;
@Service
@RequiredArgsConstructor
public class PlayroomsServiceImpl extends ServiceImpl<PlayroomsMapper, Playrooms> {
private final PlayroomsMapper playroomsMapper;
public Integer playroomIsAdmin(Integer id, Integer r_id) {
try {
Playrooms playrooms = playroomsMapper.selectOne(Wrappers.<Playrooms>lambdaQuery().eq(Playrooms::getId,id).eq(Playrooms::getR_id,r_id));
if (playrooms == null) return 1;
else return playrooms.getRole();
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
}

View File

@@ -14,13 +14,23 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, UserInfo> {
private final UserMapper userMapper;
public Object searchByUID(String u_id) {
Page<UserInfo> page = new Page<>(1, 5);
public Object searchByUID(String u_id,Integer currentPage,Integer pageSize) {
try {
Page<UserInfo> page = new Page<>(currentPage, pageSize);
return userMapper.selectList(page,Wrappers.<UserInfo>lambdaQuery().like(UserInfo::getU_id, u_id));
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
public Object searchByName(String u_name) {
Page<UserInfo> page = new Page<>(1, 5);
public Object searchByName(String u_name,Integer currentPage,Integer pageSize) {
try {
Page<UserInfo> page = new Page<>(currentPage, pageSize);
return userMapper.selectList(page,Wrappers.<UserInfo>lambdaQuery().like(UserInfo::getU_name, u_name));
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
}

View File

@@ -50,7 +50,9 @@ public enum ResultCode {
//邀请相关
INVITING_REQUEST_ERROR("4301","邀请请求错误"),
INVITING_ILLEGAL_REQUEST("4302","非法邀请"),
INVITING_ILLEGAL_RESPONSE("4303","非法邀请");
INVITING_ILLEGAL_RESPONSE("4303","非法邀请"),
INVITING_RE_REQUEST("4304","重复请求"),
INVITING_AUTH_ERROR("4305","权限错误");