Commit 9f0193f9 by 罗长华

1、增加了ActionRequestHolder用于传递ActionRequest

2、调整对应的Action、Service代码
parent 0ce048a0
......@@ -18,8 +18,11 @@ import com.wecloud.dispatch.registry.ActionBoxRegistry;
import com.wecloud.dispatch.registry.ActionInterceptorRegistry;
import com.wecloud.dispatch.registry.ActionRegistry;
import com.wecloud.dispatch.registry.MethodArgumentResolverRegistry;
import com.wecloud.dispatch.util.ActionRequestHolder;
import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.MethodParameter;
import java.lang.reflect.InvocationTargetException;
......@@ -49,9 +52,14 @@ public class ActionDispatcher {
}
public Object action(ActionMessage am) {
ActionRequest request = getActionRequest(am);
return action(request, getArgumentBox());
// modify by luozh 2022/04/03 获取到ActionRequest后保存到ThreadLocal,便于后面业务获取
try {
ActionRequest request = getActionRequest(am);
ActionRequestHolder.setActionRequest(request);
return action(request, getArgumentBox());
} finally {
ActionRequestHolder.remove();
}
}
public Object action(ActionMessage am, ArgumentBox argumentBox) {
......
package com.wecloud.dispatch.util;
import com.wecloud.dispatch.extend.ActionRequest;
/**
* 记录websocket请求详情信息到当前线程中
* @Author luozh
* @Date 2022年04月03日 23:14
* @Version 1.0
*/
public class ActionRequestHolder {
private static final ThreadLocal<ActionRequest> THREAD_LOCAL = new ThreadLocal<>();
/**
* 从当前线程中获取请求信息
*/
public static ActionRequest getActionRequest() {
return THREAD_LOCAL.get();
}
/**
* 设置请求信息到当前线程中
*
* @param actionRequest
*/
public static void setActionRequest(ActionRequest actionRequest) {
THREAD_LOCAL.set(actionRequest);
}
/**
* 销毁
*/
public static void remove() {
THREAD_LOCAL.remove();
}
}
......@@ -11,7 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.im.param.ImClientBlacklistPageParam;
import com.wecloud.im.param.ImClientBlacklistQueryVo;
import com.wecloud.im.param.add.ImClientBlacklistUpdate;
......@@ -26,7 +25,7 @@ import com.wecloud.im.ws.model.WsResponse;
*/
@Slf4j
@Component
@ActionMapping(value = "/blacklist")
@ActionMapping(value = "/im/blacklist")
@Api(value = "ws-黑名单API", tags = {"黑名单"})
public class BlacklistAction {
......@@ -38,8 +37,8 @@ public class BlacklistAction {
*/
@ActionMapping("/add")
@ApiOperation(value = "拉入黑名单")
public WsResponse<Boolean> addImClientBlacklist(ActionRequest request, ImClientBlacklistUpdate data) {
imClientBlacklistService.addImClientBlacklist(request, data);
public WsResponse<Boolean> addImClientBlacklist(ImClientBlacklistUpdate data) {
imClientBlacklistService.addImClientBlacklist(data);
return WsResponse.ok();
}
......@@ -49,8 +48,8 @@ public class BlacklistAction {
*/
@ActionMapping("/delete")
@ApiOperation(value = "移出黑名单")
public WsResponse<Boolean> deleteImClientBlacklist(ActionRequest request, ImClientBlacklistUpdate data) {
imClientBlacklistService.removeImClientBlacklist(request, data);
public WsResponse<Boolean> deleteImClientBlacklist(ImClientBlacklistUpdate data) {
imClientBlacklistService.removeImClientBlacklist(data);
return WsResponse.ok();
}
......@@ -60,9 +59,9 @@ public class BlacklistAction {
@ActionMapping("/getPageList")
@OperationLog(name = "黑名单分页列表", type = OperationLogType.PAGE)
@ApiOperation(value = "黑名单分页列表")
public WsResponse<Paging<ImClientBlacklistQueryVo>> getImClientBlacklistPageList(ActionRequest request, ImClientBlacklistPageParam data) {
public WsResponse<Paging<ImClientBlacklistQueryVo>> getImClientBlacklistPageList(ImClientBlacklistPageParam data) {
Paging<ImClientBlacklistQueryVo> blacklist =
imClientBlacklistService.getImClientBlacklistPageList(request, data);
imClientBlacklistService.getImClientBlacklistPageList(data);
return WsResponse.ok(blacklist);
}
}
package com.wecloud.im.action;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken;
import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -15,7 +12,6 @@ import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.param.ClientInfoParam;
......@@ -43,7 +39,7 @@ import com.wecloud.im.ws.model.WsResponse;
*/
@Slf4j
@Component
@ActionMapping("/client")
@ActionMapping("/im/client")
@Api(value = "ws-终端", tags = {"终端"})
public class ClientAction {
......@@ -64,16 +60,16 @@ public class ClientAction {
*/
@ActionMapping("/myInfo")
@ApiOperation(value = "查询我的信息")
public WsResponse<MyInfoVo> myInfo(ActionRequest request) {
MyInfoVo myInfo = imClientService.getMyInfo(request);
public WsResponse<MyInfoVo> myInfo() {
MyInfoVo myInfo = imClientService.getMyInfo();
return WsResponse.ok(myInfo);
}
@ActionMapping("/infoList")
@ApiOperation(value = "根据id获取Client的头像昵称")
public WsResponse<List<GetInfoListVo>> getInfoList(ActionRequest request, GetClientInfoParam data) throws Exception {
return WsResponse.ok(imClientService.getInfoList(request, data));
public WsResponse<List<GetInfoListVo>> getInfoList(GetClientInfoParam data) throws Exception {
return WsResponse.ok(imClientService.getInfoList(data));
}
/**
......@@ -81,34 +77,34 @@ public class ClientAction {
*/
@ActionMapping("/clientInfo")
@ApiOperation(value = "查询用户信息 用户可能是好友、陌生人、被拉黑名单的人")
public WsResponse<ClientInfoVo> getClientInfo(ActionRequest request, ClientInfoParam data) {
ClientInfoVo clientInfoVo = imClientService.getClientInfo(request, data);
public WsResponse<ClientInfoVo> getClientInfo(ClientInfoParam data) {
ClientInfoVo clientInfoVo = imClientService.getClientInfo(data);
return WsResponse.ok(clientInfoVo);
}
@ActionMapping("/updateHeadAndNickname")
@ApiOperation(value = "添加或修改头像和昵称")
public WsResponse<Boolean> updateHeadAndNickname(ActionRequest request, ImClientHeadPortraitAndNicknameUpdate data) throws Exception {
public WsResponse<Boolean> updateHeadAndNickname(ImClientHeadPortraitAndNicknameUpdate data) throws Exception {
log.info("添加或修改头像和昵称入参 {}", JSON.toJSONString(data));
boolean flag = imClientService.updateHeadAndNickname(request, data);
boolean flag = imClientService.updateHeadAndNickname(data);
return WsResponse.ok(flag);
}
@ActionMapping("/updateHeadPortrait")
@ApiOperation(value = "添加或修改头像")
public WsResponse<Boolean> updateHeadPortrait(ActionRequest request, ImClientHeadPortraitAdd data) throws Exception {
public WsResponse<Boolean> updateHeadPortrait(ImClientHeadPortraitAdd data) throws Exception {
log.info("添加或修改头像入参 {}", JSON.toJSONString(data));
boolean flag = imClientService.updateHeadPortrait(request, data);
boolean flag = imClientService.updateHeadPortrait(data);
return WsResponse.ok(flag);
}
@ActionMapping("/updateNickname")
@ApiOperation(value = "添加或修改主昵称")
public WsResponse<Boolean> updateNickname(ActionRequest request, ImClientNicknameAdd data) throws Exception {
public WsResponse<Boolean> updateNickname(ImClientNicknameAdd data) throws Exception {
log.info("添加或修改主昵称入参 {}", JSON.toJSONString(data));
boolean flag = imClientService.updateNickname(request, data);
boolean flag = imClientService.updateNickname(data);
return WsResponse.ok(flag);
}
......@@ -121,9 +117,9 @@ public class ClientAction {
*/
@ActionMapping("/logout")
@ApiOperation(value = "退出登陆 清除推送token等")
public WsResponse<Boolean> logout(ActionRequest request, LogoutParam param) {
public WsResponse<Boolean> logout(LogoutParam param) {
log.info("退出登陆入参 {}", JSON.toJSONString(param));
boolean flag = imClientService.logout(request, param);
boolean flag = imClientService.logout(param);
return WsResponse.ok(flag);
}
......@@ -134,10 +130,10 @@ public class ClientAction {
*/
@ActionMapping("/onlineStatus")
@ApiOperation(value = "获取用户在线状态(批量)")
public WsResponse<List<ImOnlineStatusVo>> getOnlineStatus(ActionRequest request,
GetOnlineStatusParam getOnlineStatusParam) {
public WsResponse<List<ImOnlineStatusVo>> getOnlineStatus(
GetOnlineStatusParam getOnlineStatusParam) {
// shiro线程中获取当前token
ImClient imClient = contextService.getImClientIfNotNullOrThrow(request);
ImClient imClient = contextService.getImClientIfNotNullOrThrow();
ImApplication imApplication = contextService.getImApplicationIfNotNullOrThrow(imClient.getFkAppid());
ArrayList<ImOnlineStatusVo> imOnlineStatusVos = new ArrayList<>();
......
package com.wecloud.im.action;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import com.alibaba.fastjson.JSON;
import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.DisbandConversationParam;
import com.wecloud.im.param.ImConversationQueryParam;
import com.wecloud.im.param.MutedGroupMemberParam;
import com.wecloud.im.param.MutedGroupParam;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.TransferOwnerParam;
import com.wecloud.im.param.add.ImClientLeaveConversation;
import com.wecloud.im.param.add.ImClientToConversation;
import com.wecloud.im.param.add.ImConversationAttrUpdate;
import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.vo.ConversationVo;
import com.wecloud.im.vo.ImConversationCreateVo;
import com.wecloud.im.ws.model.WsResponse;
/**
*
* @Author luozh
* @Date 2022年04月02日 16:39
* @Version 1.0
*/
@Slf4j
@Component
@ActionMapping(value = "/im/conversation")
@Api(value = "ws-会话表API", tags = {"会话表"})
public class ConversationAction {
@Autowired
private ImConversationService imConversationService;
/**
* 添加或修改会话名称
*/
@ActionMapping("/saveOrUpdateName")
@ApiOperation(value = "添加或修改会话名称", notes = "权限:目前只有创建者有权限操作")
public WsResponse<Boolean> saveOrUpdateName(ImConversationNameUpdate data) {
log.info("添加或修改会话名称入参 {}", JSON.toJSONString(data));
imConversationService.saveOrUpdateName(data);
return WsResponse.ok();
}
/**
* 添加或修改会话拓展字段
*/
@ActionMapping("/saveOrUpdateAttr")
@ApiOperation(value = "添加或修改会话拓展字段", notes = "权限:所有client都权限操作")
public WsResponse<Boolean> saveOrUpdateAttr(ImConversationAttrUpdate imConversationAttrUpdate) {
imConversationService.saveOrUpdateAttr(imConversationAttrUpdate);
return WsResponse.ok();
}
/**
* client退出会话
*/
@ActionMapping("/leave")
@ApiOperation(value = "client退出会话", notes = "若是创建者退出,[创建者]权限将会转移给按加入会话时间排序的下一个client")
public WsResponse<Boolean> leaveConversation(ImClientLeaveConversation imClientToConversation) {
log.info("client退出会话入参 {}", JSON.toJSONString(imClientToConversation));
imConversationService.leaveConversation(imClientToConversation);
return WsResponse.ok();
}
/**
* 将client从会话移除
*/
@ActionMapping("/delClient")
@ApiOperation(value = "将client从会话移除", notes = "权限:目前只有群主有权限操作")
public WsResponse<Boolean> delClientToConversation(ImClientToConversation imClientToConversation) throws Exception {
log.info("将client从会话移除入参 {}", JSON.toJSONString(imClientToConversation));
return WsResponse.ok(imConversationService.delClientToConversation(imClientToConversation));
}
/**
* 解散群聊
*/
@ActionMapping("/disband")
@ApiOperation(value = "解散群聊", notes = "权限:目前只有群主有权限操作")
public WsResponse<Boolean> disband(DisbandConversationParam param) throws Exception {
log.info("解散群聊入参 {}", JSON.toJSONString(param));
imConversationService.disband(param);
return WsResponse.ok();
}
/**
* 将用户添加进会话
*/
@ActionMapping("/addClient")
@ApiOperation(value = "将用户添加进会话", notes = "权限:会话中所有client都有权限操作")
public WsResponse<Boolean> addClientToConversation(ImClientToConversation imClientToConversation) throws Exception {
log.info("将用户添加进会话入参 {}", JSON.toJSONString(imClientToConversation));
imConversationService.addClientToConversation(imClientToConversation);
return WsResponse.ok();
}
/**
* 创建会话
*/
@ActionMapping("/create")
@ApiOperation(value = "创建会话", notes = "后台可配置:两个客户端如果已经创建过会话,是否重复创建会话")
public WsResponse<ImConversationCreateVo> createImConversation(ImConversationCreate imConversationCreate) throws Exception {
log.info("创建会话入参 {}", JSON.toJSONString(imConversationCreate));
ImConversationCreateVo vo = imConversationService.createImConversation(imConversationCreate);
return WsResponse.ok(vo);
}
/**
* 群主转让
*/
@ActionMapping("/transferOwner")
@ApiOperation(value = "群主转让", notes = "权限:目前只有群主有权限操作")
public WsResponse<Boolean> transferOwner(TransferOwnerParam param) {
log.info("群主转让入参 {}", JSON.toJSONString(param));
Boolean result = imConversationService.transferOwner(param);
return WsResponse.ok(result);
}
/**
* 设置群管理员
*/
@ActionMapping("/setAdmins")
@ApiOperation(value = "设置群管理员", notes = "权限:目前只有群主有权限操作")
public WsResponse<Boolean> setAdmins(@Validated SetAdminsParam param) {
log.info("设置群管理员入参 {}", JSON.toJSONString(param));
if (CollectionUtils.isEmpty(param.getClientIds())) {
return WsResponse.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
Boolean result = imConversationService.setAdmins(param);
return WsResponse.ok(result);
}
/**
* 群禁言、取消群禁言
*/
@ActionMapping("/mutedGroup")
@ApiOperation(value = "群禁言、取消群禁言", notes = "权限:群主和管理员有权限操作")
public WsResponse<Boolean> mutedGroup(@Validated MutedGroupParam param) {
log.info("群禁言、取消群禁言入参 {}", JSON.toJSONString(param));
Boolean result = imConversationService.mutedGroup(param);
return WsResponse.ok(result);
}
/**
* 选择禁言
*/
@ActionMapping("/mutedGroupMember")
@ApiOperation(value = "选择禁言", notes = "权限:群主和管理员有权限操作")
public WsResponse<Boolean> mutedGroupMember(@Validated MutedGroupMemberParam param) {
log.info("选择禁言入参 {}", JSON.toJSONString(param));
if (CollectionUtils.isEmpty(param.getClientIds())) {
return WsResponse.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
Boolean result = imConversationService.mutedGroupMember(param);
return WsResponse.ok(result);
}
/**
* 查询用户加入的所有会话 与每个会话的未读条数 成员
*/
@ActionMapping("/getList")
@ApiOperation(value = "查询加入的会话列表", notes = "查询用户加入的非隐藏状态的会话列表 与每个会话的未读条数 成员")
public WsResponse<List<ConversationVo>> getMyImConversationListAndMsgCount() {
List<ConversationVo> conversationList = imConversationService.getMyImConversationListAndMsgCount();
return WsResponse.ok(conversationList);
}
/**
* 根据会话id查询指定会话信息
*/
@ActionMapping("/info")
@ApiOperation(value = "根据会话id查询指定会话信息", notes = "根据会话id查询指定会话信息 与每个会话的未读条数")
public WsResponse<ConversationVo> info(@Validated ImConversationQueryParam param) throws Exception {
ConversationVo conversationVo = imConversationService.infoImConversationAndMsgCount(param);
return WsResponse.ok(conversationVo);
}
/**
* 批量修改单向隐藏或显示会话
*/
@ActionMapping("/displayUpdate")
@ApiOperation(value = "批量修改单向隐藏或显示会话", notes = "拉取会话列表不展示已隐藏状态的会话,云端聊天记录不删除;假设有A和B两个用户,A删会话,B还能发; 如果B发了消息,A这边要重新把会话显示出来,并能显示之前的聊天记录")
public ApiResult<Boolean> updateDisplayConversation(ImConversationDisplayUpdate imConversationDisplayUpdate) throws Exception {
imConversationService.updateDisplayConversation(imConversationDisplayUpdate);
return ApiResult.result(true);
}
}
......@@ -43,7 +43,7 @@ public class ImClientBlacklistController extends BaseController {
@PostMapping("/add")
@ApiOperation(value = "拉入黑名单")
public ApiResult<Boolean> addImClientBlacklist(@Validated(Add.class) @RequestBody ImClientBlacklistUpdate imClientBlacklistUpdate) throws Exception {
imClientBlacklistService.addImClientBlacklist(null, imClientBlacklistUpdate);
imClientBlacklistService.addImClientBlacklist(imClientBlacklistUpdate);
return ApiResult.ok();
}
......@@ -54,7 +54,7 @@ public class ImClientBlacklistController extends BaseController {
@PostMapping("/delete")
@ApiOperation(value = "移出黑名单")
public ApiResult<Boolean> deleteImClientBlacklist(@RequestBody ImClientBlacklistUpdate imClientBlacklistUpdate) throws Exception {
imClientBlacklistService.removeImClientBlacklist(null, imClientBlacklistUpdate);
imClientBlacklistService.removeImClientBlacklist(imClientBlacklistUpdate);
return ApiResult.ok();
}
......@@ -66,7 +66,7 @@ public class ImClientBlacklistController extends BaseController {
@ApiOperation(value = "黑名单分页列表")
public ApiResult<Paging<ImClientBlacklistQueryVo>> getImClientBlacklistPageList(@RequestBody ImClientBlacklistPageParam imClientBlacklistPageParam) throws Exception {
Paging<ImClientBlacklistQueryVo> blacklist =
imClientBlacklistService.getImClientBlacklistPageList(null, imClientBlacklistPageParam);
imClientBlacklistService.getImClientBlacklistPageList(imClientBlacklistPageParam);
return ApiResult.ok(blacklist);
}
......
......@@ -66,7 +66,7 @@ public class ImClientController extends BaseController {
@PostMapping("/myInfo")
@ApiOperation(value = "查询我的信息")
public ApiResult<MyInfoVo> myInfo() {
MyInfoVo myInfo = imClientService.getMyInfo(null);
MyInfoVo myInfo = imClientService.getMyInfo();
return ApiResult.ok(myInfo);
}
......@@ -74,7 +74,7 @@ public class ImClientController extends BaseController {
@PostMapping("/infoList")
@ApiOperation(value = "根据id获取Client的头像昵称")
public ApiResult<List<GetInfoListVo>> getInfoList(@Validated(Add.class) @RequestBody GetClientInfoParam getClientInfoParam) throws Exception {
return ApiResult.ok(imClientService.getInfoList(null, getClientInfoParam));
return ApiResult.ok(imClientService.getInfoList(getClientInfoParam));
}
/**
......@@ -86,7 +86,7 @@ public class ImClientController extends BaseController {
if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
ClientInfoVo clientInfoVo = imClientService.getClientInfo(null, param);
ClientInfoVo clientInfoVo = imClientService.getClientInfo(param);
return ApiResult.ok(clientInfoVo);
}
......@@ -107,7 +107,7 @@ public class ImClientController extends BaseController {
@ApiOperation(value = "添加或修改头像和昵称")
public ApiResult<Boolean> updateHeadAndNickname(@Validated(Add.class) @RequestBody ImClientHeadPortraitAndNicknameUpdate imClientHeadPortraitAndNicknameUpdate) throws Exception {
log.info("添加或修改头像和昵称入参 {}", JSON.toJSONString(imClientHeadPortraitAndNicknameUpdate));
boolean flag = imClientService.updateHeadAndNickname(null, imClientHeadPortraitAndNicknameUpdate);
boolean flag = imClientService.updateHeadAndNickname(imClientHeadPortraitAndNicknameUpdate);
return ApiResult.result(flag);
}
......@@ -116,7 +116,7 @@ public class ImClientController extends BaseController {
@ApiOperation(value = "添加或修改头像")
public ApiResult<Boolean> updateHeadPortrait(@Validated(Add.class) @RequestBody ImClientHeadPortraitAdd imClientHeadPortraitAdd) throws Exception {
log.info("添加或修改头像入参 {}", JSON.toJSONString(imClientHeadPortraitAdd));
boolean flag = imClientService.updateHeadPortrait(null, imClientHeadPortraitAdd);
boolean flag = imClientService.updateHeadPortrait(imClientHeadPortraitAdd);
return ApiResult.result(flag);
}
......@@ -124,7 +124,7 @@ public class ImClientController extends BaseController {
@ApiOperation(value = "添加或修改主昵称")
public ApiResult<Boolean> updateNickname(@Validated(Add.class) @RequestBody ImClientNicknameAdd imClientNicknameAdd) throws Exception {
log.info("添加或修改主昵称入参 {}", JSON.toJSONString(imClientNicknameAdd));
boolean flag = imClientService.updateNickname(null, imClientNicknameAdd);
boolean flag = imClientService.updateNickname(imClientNicknameAdd);
return ApiResult.result(flag);
}
......@@ -139,7 +139,7 @@ public class ImClientController extends BaseController {
@ApiOperation(value = "退出登陆 清除推送token等")
public ApiResult<Boolean> logout(@RequestBody @Validated LogoutParam param) {
log.info("退出登陆入参 {}", JSON.toJSONString(param));
boolean flag = imClientService.logout(null, param);
boolean flag = imClientService.logout(param);
return ApiResult.result(flag);
}
......
package com.wecloud.im.controller;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
import com.wecloud.im.param.DisbandConversationParam;
import com.wecloud.im.param.ImConversationQueryParam;
......@@ -16,21 +33,6 @@ import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.vo.ConversationVo;
import com.wecloud.im.vo.ImConversationCreateVo;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 会话表 控制器
......@@ -78,7 +80,7 @@ public class ImConversationController extends BaseController {
@ApiOperation(value = "client退出会话", notes = "若是创建者退出,[创建者]权限将会转移给按加入会话时间排序的下一个client")
public ApiResult<Boolean> leaveConversation(@RequestBody ImClientLeaveConversation imClientToConversation) {
log.info("client退出会话入参 {}", JSON.toJSONString(imClientToConversation));
return imConversationService.leaveConversation(imClientToConversation);
return ApiResult.ok(imConversationService.leaveConversation(imClientToConversation));
}
......@@ -89,7 +91,7 @@ public class ImConversationController extends BaseController {
@ApiOperation(value = "将client从会话移除", notes = "权限:目前只有群主有权限操作")
public ApiResult<Boolean> delClientToConversation(@RequestBody ImClientToConversation imClientToConversation) throws Exception {
log.info("将client从会话移除入参 {}", JSON.toJSONString(imClientToConversation));
return imConversationService.delClientToConversation(imClientToConversation);
return ApiResult.ok(imConversationService.delClientToConversation(imClientToConversation));
}
/**
......@@ -111,7 +113,7 @@ public class ImConversationController extends BaseController {
@ApiOperation(value = "将用户添加进会话", notes = "权限:会话中所有client都有权限操作")
public ApiResult<Boolean> addClientToConversation(@RequestBody ImClientToConversation imClientToConversation) throws Exception {
log.info("将用户添加进会话入参 {}", JSON.toJSONString(imClientToConversation));
return imConversationService.addClientToConversation(imClientToConversation);
return ApiResult.ok(imConversationService.addClientToConversation(imClientToConversation));
}
/**
......@@ -121,7 +123,7 @@ public class ImConversationController extends BaseController {
@ApiOperation(value = "创建会话", notes = "后台可配置:两个客户端如果已经创建过会话,是否重复创建会话")
public ApiResult<ImConversationCreateVo> createImConversation(@RequestBody ImConversationCreate imConversationCreate) throws Exception {
log.info("创建会话入参 {}", JSON.toJSONString(imConversationCreate));
return imConversationService.createImConversation(imConversationCreate);
return ApiResult.ok(imConversationService.createImConversation(imConversationCreate));
}
/**
......@@ -129,7 +131,7 @@ public class ImConversationController extends BaseController {
*/
@PostMapping("/transferOwner")
@ApiOperation(value = "群主转让", notes = "权限:目前只有群主有权限操作")
public ApiResult<Boolean> transferOwner(@RequestBody TransferOwnerParam param) {
public ApiResult<Boolean> transferOwner(@RequestBody TransferOwnerParam param) {
log.info("群主转让入参 {}", JSON.toJSONString(param));
Boolean result = imConversationService.transferOwner(param);
return ApiResult.ok(result);
......@@ -140,7 +142,7 @@ public class ImConversationController extends BaseController {
*/
@PostMapping("/setAdmins")
@ApiOperation(value = "设置群管理员", notes = "权限:目前只有群主有权限操作")
public ApiResult<Boolean> setAdmins(@RequestBody @Validated SetAdminsParam param) {
public ApiResult<Boolean> setAdmins(@RequestBody @Validated SetAdminsParam param) {
log.info("设置群管理员入参 {}", JSON.toJSONString(param));
if (CollectionUtils.isEmpty(param.getClientIds())) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
......@@ -154,7 +156,7 @@ public class ImConversationController extends BaseController {
*/
@PostMapping("/mutedGroup")
@ApiOperation(value = "群禁言、取消群禁言", notes = "权限:群主和管理员有权限操作")
public ApiResult<Boolean> mutedGroup(@RequestBody @Validated MutedGroupParam param) {
public ApiResult<Boolean> mutedGroup(@RequestBody @Validated MutedGroupParam param) {
log.info("群禁言、取消群禁言入参 {}", JSON.toJSONString(param));
Boolean result = imConversationService.mutedGroup(param);
return ApiResult.ok(result);
......@@ -165,7 +167,7 @@ public class ImConversationController extends BaseController {
*/
@PostMapping("/mutedGroupMember")
@ApiOperation(value = "选择禁言", notes = "权限:群主和管理员有权限操作")
public ApiResult<Boolean> mutedGroupMember(@RequestBody @Validated MutedGroupMemberParam param) {
public ApiResult<Boolean> mutedGroupMember(@RequestBody @Validated MutedGroupMemberParam param) {
log.info("选择禁言入参 {}", JSON.toJSONString(param));
if (CollectionUtils.isEmpty(param.getClientIds())) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
......
......@@ -298,7 +298,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
this.updateById(user);
ImClientHeadPortraitAdd imClientHeadPortraitAdd = new ImClientHeadPortraitAdd();
imClientHeadPortraitAdd.setHeadPortrait(param.getHeadPortrait());
imClientService.updateHeadPortrait(null, imClientHeadPortraitAdd);
imClientService.updateHeadPortrait(imClientHeadPortraitAdd);
}
/**
......@@ -319,7 +319,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
this.updateById(user);
ImClientNicknameUpdate imClientNicknameUpdate = new ImClientNicknameUpdate();
imClientNicknameUpdate.setNickname(param.getNickname());
imClientService.updateNickname(null, imClientNicknameUpdate);
imClientService.updateNickname(imClientNicknameUpdate);
}
/**
......
......@@ -19,7 +19,7 @@ public interface ContextService {
* @param request Ws请求
* @Return
*/
ImClient getImClientIfNotNullOrThrow(ActionRequest request);
ImClient getImClientIfNotNullOrThrow();
/**
* 获取当前或指定appId的ImApplication 存在返回 不存在则抛出异常
......
......@@ -34,7 +34,7 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist>
* @return
* @throws Exception
*/
Boolean addImClientBlacklist(ActionRequest request, ImClientBlacklistUpdate imClientBlacklistUpdate);
Boolean addImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate);
/**
* 移出黑名单
......@@ -43,7 +43,7 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist>
* @return
* @throws Exception
*/
Boolean removeImClientBlacklist(ActionRequest request, ImClientBlacklistUpdate imClientBlacklistUpdate);
Boolean removeImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate);
/**
* 获取分页对象
......@@ -51,6 +51,6 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist>
* @return
* @throws Exception
*/
Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ActionRequest request, ImClientBlacklistPageParam imClientBlacklistPageParam);
Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam);
}
......@@ -35,23 +35,23 @@ public interface ImClientService extends BaseService<ImClient> {
* 查询我的信息
* @return
*/
MyInfoVo getMyInfo(ActionRequest request);
MyInfoVo getMyInfo();
/**
* 更新头像
* @param imClientHeadPortraitAdd
* @return
*/
boolean updateHeadPortrait(ActionRequest request, ImClientHeadPortraitAdd imClientHeadPortraitAdd);
boolean updateHeadPortrait(ImClientHeadPortraitAdd imClientHeadPortraitAdd);
/**
* 修改昵称
* @param imClientNicknameUpdate
* @return
*/
boolean updateNickname(ActionRequest request, ImClientNicknameUpdate imClientNicknameUpdate);
boolean updateNickname(ImClientNicknameUpdate imClientNicknameUpdate);
boolean updateHeadAndNickname(ActionRequest request, ImClientHeadPortraitAndNicknameUpdate imClientHeadPortraitAndNicknameUpdate);
boolean updateHeadAndNickname(ImClientHeadPortraitAndNicknameUpdate imClientHeadPortraitAndNicknameUpdate);
/**
......@@ -61,17 +61,17 @@ public interface ImClientService extends BaseService<ImClient> {
* @return
* @throws Exception
*/
List<GetInfoListVo> getInfoList(ActionRequest request, GetClientInfoParam getClientInfoParam) throws Exception;
List<GetInfoListVo> getInfoList(GetClientInfoParam getClientInfoParam) throws Exception;
/**
* 获取群里成员信息
* @param param
* @return
*/
ClientInfoVo getClientInfo(ActionRequest request, ClientInfoParam param);
ClientInfoVo getClientInfo(ClientInfoParam param);
boolean updateNickname(ActionRequest request, ImClientNicknameAdd imClientNicknameAdd) throws Exception;
boolean updateNickname(ImClientNicknameAdd imClientNicknameAdd) throws Exception;
/**
* 保存
......@@ -95,7 +95,7 @@ public interface ImClientService extends BaseService<ImClient> {
* @param param
* @return
*/
boolean logout(ActionRequest request, LogoutParam param);
boolean logout(LogoutParam param);
/**
......@@ -123,7 +123,7 @@ public interface ImClientService extends BaseService<ImClient> {
* @return
* @throws Exception
*/
Paging<ImClientQueryVo> getImClientPageList(ActionRequest request, ImClientPageParam imClientPageParam) throws Exception;
Paging<ImClientQueryVo> getImClientPageList(ImClientPageParam imClientPageParam) throws Exception;
/**
......
package com.wecloud.im.service;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import java.util.List;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.param.DisbandConversationParam;
......@@ -16,14 +22,8 @@ import com.wecloud.im.param.add.ImConversationAttrUpdate;
import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.vo.ImConversationCreateVo;
import com.wecloud.im.vo.ConversationVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import com.wecloud.im.vo.ImConversationCreateVo;
/**
* 会话表 服务类
......@@ -49,7 +49,7 @@ public interface ImConversationService extends BaseService<ImConversation> {
* @param imConversationCreate
* @return
*/
ApiResult<ImConversationCreateVo> createImConversation(ImConversationCreate imConversationCreate);
ImConversationCreateVo createImConversation(ImConversationCreate imConversationCreate);
/**
......@@ -59,7 +59,7 @@ public interface ImConversationService extends BaseService<ImConversation> {
* @return
* @throws JsonProcessingException
*/
ApiResult<Boolean> addClientToConversation(ImClientToConversation imClientToConversation);
Boolean addClientToConversation(ImClientToConversation imClientToConversation);
/**
* 将client从会话移除
......@@ -67,7 +67,7 @@ public interface ImConversationService extends BaseService<ImConversation> {
* @param imClientToConversation
* @return
*/
ApiResult<Boolean> delClientToConversation(ImClientToConversation imClientToConversation) throws Exception;
Boolean delClientToConversation(ImClientToConversation imClientToConversation) throws Exception;
/**
* 解散群聊
......@@ -79,35 +79,35 @@ public interface ImConversationService extends BaseService<ImConversation> {
/**
* client退出会话
*/
ApiResult<Boolean> leaveConversation(ImClientLeaveConversation imClientToConversation);
Boolean leaveConversation(ImClientLeaveConversation imClientToConversation);
/**
* 群主转让
* @param param
* @return
*/
Boolean transferOwner(@RequestBody TransferOwnerParam param);
Boolean transferOwner(TransferOwnerParam param);
/**
* 设置管理员
* @param param
* @return
*/
Boolean setAdmins(@RequestBody SetAdminsParam param);
Boolean setAdmins(SetAdminsParam param);
/**
* 群禁言
* @param param
* @return
*/
Boolean mutedGroup(@RequestBody MutedGroupParam param);
Boolean mutedGroup(MutedGroupParam param);
/**
* 选择禁言
* @param param
* @return
*/
Boolean mutedGroupMember(@RequestBody MutedGroupMemberParam param);
Boolean mutedGroupMember(MutedGroupMemberParam param);
/**
* 判断当前操作人是否为指定角色成员
......
......@@ -7,6 +7,7 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.dispatch.util.ActionRequestHolder;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.service.ContextService;
......@@ -31,11 +32,12 @@ public class ContextServiceImpl implements ContextService {
private ImApplicationService imApplicationService;
@Override
public ImClient getImClientIfNotNullOrThrow(ActionRequest request) {
public ImClient getImClientIfNotNullOrThrow() {
ImClient currentClient;
if (request != null) {
if (ActionRequestHolder.getActionRequest() != null) {
ActionRequest request = ActionRequestHolder.getActionRequest();
currentClient = imClientService.getCacheImClient(request.getSenderClientId());
} else {
currentClient = imClientService.getCurrentClient();
......
......@@ -15,7 +15,6 @@ import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImClientBlacklist;
import com.wecloud.im.mapper.ImClientBlacklistMapper;
......@@ -57,8 +56,8 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean addImClientBlacklist(ActionRequest request, ImClientBlacklistUpdate imClientBlacklistUpdate) {
ImClient currentClient = contextService.getImClientIfNotNullOrThrow(request);
public Boolean addImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate) {
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
ImClient beBlacker = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, currentClient.getFkAppid())
.eq(ImClient::getClientId, imClientBlacklistUpdate.getClientIdBePrevent()));
......@@ -78,9 +77,9 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean removeImClientBlacklist(ActionRequest request, ImClientBlacklistUpdate imClientBlacklistUpdate) {
public Boolean removeImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate) {
// 操作者
ImClient currentClient = contextService.getImClientIfNotNullOrThrow(request);
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
// 被拉黑者
ImClient beBlacker = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, currentClient.getFkAppid())
......@@ -96,9 +95,9 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
}
@Override
public Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ActionRequest request, ImClientBlacklistPageParam imClientBlacklistPageParam) {
public Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam) {
Page<ImClientBlacklistQueryVo> page = new PageInfo<>(imClientBlacklistPageParam);
ImClient currentClient = contextService.getImClientIfNotNullOrThrow(request);
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
IPage<ImClientBlacklistQueryVo> imClientBlacklistPageList = imClientBlacklistMapper.getImClientBlacklistPageList(page, currentClient.getClientId());
Paging<ImClientBlacklistQueryVo> imClientBlacklistQueryVoPaging = new Paging<>(imClientBlacklistPageList);
return imClientBlacklistQueryVoPaging;
......
package com.wecloud.im.service.impl;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
......@@ -28,6 +27,7 @@ import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.dispatch.util.ActionRequestHolder;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImClientDevice;
......@@ -87,8 +87,8 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
private ContextService contextService;
@Override
public MyInfoVo getMyInfo(ActionRequest request) {
ImClient currentClient = contextService.getImClientIfNotNullOrThrow(request);
public MyInfoVo getMyInfo() {
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
MyInfoVo myInfoVo = new MyInfoVo();
BeanUtils.copyProperties(currentClient, myInfoVo);
return myInfoVo;
......@@ -96,8 +96,8 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override
@Transactional(rollbackFor = Exception.class)
public boolean updateHeadPortrait(ActionRequest request, ImClientHeadPortraitAdd imClientHeadPortraitAdd) {
ImClient curentClient = contextService.getImClientIfNotNullOrThrow(request);
public boolean updateHeadPortrait(ImClientHeadPortraitAdd imClientHeadPortraitAdd) {
ImClient curentClient = contextService.getImClientIfNotNullOrThrow();
curentClient.setHeadPortrait(imClientHeadPortraitAdd.getHeadPortrait());
imClientMapper.updateById(curentClient);
......@@ -108,8 +108,8 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
}
@Override
public boolean updateNickname(ActionRequest request, ImClientNicknameUpdate imClientNicknameUpdate) {
ImClient curentClient = contextService.getImClientIfNotNullOrThrow(request);
public boolean updateNickname(ImClientNicknameUpdate imClientNicknameUpdate) {
ImClient curentClient = contextService.getImClientIfNotNullOrThrow();
curentClient.setNickname(imClientNicknameUpdate.getNickname());
imClientMapper.updateById(curentClient);
......@@ -120,8 +120,8 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
}
@Override
public boolean updateHeadAndNickname(ActionRequest request, ImClientHeadPortraitAndNicknameUpdate imClientHeadPortraitAndNicknameUpdate) {
ImClient curentClient = contextService.getImClientIfNotNullOrThrow(request);
public boolean updateHeadAndNickname(ImClientHeadPortraitAndNicknameUpdate imClientHeadPortraitAndNicknameUpdate) {
ImClient curentClient = contextService.getImClientIfNotNullOrThrow();
curentClient.setHeadPortrait(imClientHeadPortraitAndNicknameUpdate.getHeadPortrait());
curentClient.setNickname(imClientHeadPortraitAndNicknameUpdate.getNickname());
imClientMapper.updateById(curentClient);
......@@ -133,8 +133,8 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
}
@Override
public List<GetInfoListVo> getInfoList(ActionRequest request, GetClientInfoParam getClientInfoParam) throws Exception {
ImClient curentClient = contextService.getImClientIfNotNullOrThrow(request);
public List<GetInfoListVo> getInfoList(GetClientInfoParam getClientInfoParam) throws Exception {
ImClient curentClient = contextService.getImClientIfNotNullOrThrow();
if (getClientInfoParam.getClientIds() == null || getClientInfoParam.getClientIds().isEmpty()) {
throw new BusinessException("getClientInfoParam.getClientIds() == null");
......@@ -162,8 +162,8 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
}
@Override
public ClientInfoVo getClientInfo(ActionRequest request, ClientInfoParam param) {
ImClient currentClient = contextService.getImClientIfNotNullOrThrow(request);
public ClientInfoVo getClientInfo(ClientInfoParam param) {
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
if (currentClient == null) {
throw new BusinessException("当前用户登录信息失效");
}
......@@ -194,8 +194,8 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override
@Transactional(rollbackFor = Exception.class)
public boolean updateNickname(ActionRequest request, ImClientNicknameAdd imClientNicknameAdd) throws Exception {
ImClient curentClient = contextService.getImClientIfNotNullOrThrow(request);
public boolean updateNickname(ImClientNicknameAdd imClientNicknameAdd) throws Exception {
ImClient curentClient = contextService.getImClientIfNotNullOrThrow();
curentClient.setNickname(imClientNicknameAdd.getNickname());
imClientMapper.updateById(curentClient);
......@@ -248,8 +248,8 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
}
@Override
public boolean logout(ActionRequest request, LogoutParam param) {
ImClient currentClient = contextService.getImClientIfNotNullOrThrow(request);
public boolean logout(LogoutParam param) {
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
// 清除设备token
return imClientDeviceService.update(new UpdateWrapper<ImClientDevice>().lambda()
.eq(ImClientDevice::getFkAppid, currentClient.getFkAppid())
......@@ -270,7 +270,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
}
@Override
public Paging<ImClientQueryVo> getImClientPageList(ActionRequest request, ImClientPageParam imClientPageParam) throws Exception {
public Paging<ImClientQueryVo> getImClientPageList(ImClientPageParam imClientPageParam) throws Exception {
Page<ImClientQueryVo> page = new PageInfo<>(imClientPageParam, OrderItem.desc(getLambdaColumn(ImClient::getCreateTime)));
IPage<ImClientQueryVo> iPage = imClientMapper.getImClientPageList(page, imClientPageParam);
return new Paging<>(iPage);
......@@ -278,12 +278,19 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override
public ImClient getCurrentClient() {
// shiro线程中获取当前token
JwtToken curentJwtToken = JwtUtil.getCurrentJwtToken();
// 根据appKey查询appid
ImApplication imApplication = imApplicationService.getCacheAppByAppKey(curentJwtToken.getAppKey());
return getCacheImClient(imApplication.getId(), curentJwtToken.getClientId());
ImClient imClient = null;
// modify by luozh 2022/04/03 增加是否存在ActionRequest的判断,如果是则说明请求来源于ws 否则是HTTP请求
if (ActionRequestHolder.getActionRequest() != null) {
ActionRequest request = ActionRequestHolder.getActionRequest();
imClient = getCacheImClient(request.getSenderClientId());
} else {
// shiro线程中获取当前token
JwtToken curentJwtToken = JwtUtil.getCurrentJwtToken();
// 根据appKey查询appid
ImApplication imApplication = imApplicationService.getCacheAppByAppKey(curentJwtToken.getAppKey());
imClient = getCacheImClient(imApplication.getId(), curentJwtToken.getClientId());
}
return imClient;
}
@Override
......
package com.wecloud.im.service.impl;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken;
import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
......@@ -34,6 +59,7 @@ import com.wecloud.im.param.add.ImConversationAttrUpdate;
import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.service.ContextService;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService;
......@@ -49,29 +75,6 @@ import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.sender.ChannelSender;
import com.wecloud.utils.JsonUtils;
import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken;
import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 会话表 服务实现类
......@@ -105,6 +108,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Autowired
private ImMessageService imMessageService;
@Autowired
private ContextService contextService;
@Transactional(rollbackFor = Exception.class)
@Override
public boolean saveImConversation(ImConversation imConversation) {
......@@ -113,15 +119,15 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResult<ImConversationCreateVo> createImConversation(ImConversationCreate imConversationCreate) {
ImClient createClient = imClientService.getCurrentClient();
public ImConversationCreateVo createImConversation(ImConversationCreate imConversationCreate) {
ImClient createClient = contextService.getImClientIfNotNullOrThrow();
if (CollectionUtils.isEmpty(imConversationCreate.getClientIds())) {
log.info("未找到群成员信息");
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
throw new BusinessException(ApiCode.PARAMETER_EXCEPTION);
}
if (BaseEnum.valueOf(ChatTypeEnum.class, imConversationCreate.getChatType()) == null) {
log.info("会话类型不存在");
return ApiResult.result(ApiCode.PARAMETER_EXCEPTION, null);
throw new BusinessException(ApiCode.PARAMETER_EXCEPTION);
}
// 成员不存在,不能创建会话
for (String clientId : imConversationCreate.getClientIds()) {
......@@ -131,14 +137,12 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
.eq(ImClient::getClientId, clientId));
if (imClient == null) {
log.info("成员不存在,不能创建会话 clientId:{}", clientId);
return ApiResult.result(ApiCode.CLIENT_NOT_FOUNT, null);
throw new BusinessException(ApiCode.CLIENT_NOT_FOUNT);
}
}
// shiro线程中获取当前token
JwtToken curentJwtToken = JwtUtil.getCurrentJwtToken();
// 根据appKey查询application
ImApplication imApplication = imApplicationService.getCacheAppByAppKey(curentJwtToken.getAppKey());
ImApplication imApplication = contextService.getImApplicationIfNotNullOrThrow(createClient.getFkAppid());
// 该应用 是否允许创建重复单聊类型会话 0不允许 1允许
if (imApplication.getRepeatSessionStatus() != null && imApplication.getRepeatSessionStatus() == 0) {
......@@ -156,7 +160,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 返回已存在的单聊类型会话id
ImConversationCreateVo imConversationCreateVo = new ImConversationCreateVo();
imConversationCreateVo.setId(repetitionConversationInfo.getId());
return ApiResult.ok(imConversationCreateVo);
return imConversationCreateVo;
}
}
} else {
......@@ -179,7 +183,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImConversationCreateVo imConversationCreateVo = new ImConversationCreateVo();
imConversationCreateVo.setId(repetitionConversation);
// 为重复
return ApiResult.ok(imConversationCreateVo);
return imConversationCreateVo;
}
}
}
......@@ -261,17 +265,17 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImConversationCreateVo imConversationCreateVo = new ImConversationCreateVo();
imConversationCreateVo.setId(imConversationId);
return ApiResult.ok(imConversationCreateVo);
return imConversationCreateVo;
}
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> addClientToConversation(ImClientToConversation imClientToConversation) {
public Boolean addClientToConversation(ImClientToConversation imClientToConversation) {
// shiro线程中获取当前token
JwtToken curentJwtToken = JwtUtil.getCurrentJwtToken();
// 根据appKey查询application
ImApplication imApplication = imApplicationService.getCacheAppByAppKey(curentJwtToken.getAppKey());
// 获取当前client
ImClient createClient = contextService.getImClientIfNotNullOrThrow();
// 根据appId查询application
ImApplication imApplication = contextService.getImApplicationIfNotNullOrThrow(createClient.getFkAppid());
ImClient imClientSender = imClientService.getCurrentClient();
......@@ -285,7 +289,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
);
if (membersList.isEmpty()) {
log.info("membersList为空,toConversationId:" + imClientToConversation.getConversationId());
return ApiResult.fail();
throw new BusinessException("没有成员");
}
int needAddCount = 0;
......@@ -296,7 +300,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
.eq(ImClient::getFkAppid, imApplication.getId())
.eq(ImClient::getClientId, id));
if (clientToConversation == null) {
return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null);
throw new BusinessException(ApiCode.CLIENT_NOT_FOUNT);
}
// 判断用户是否已经在该会话
ImConversationMembers members = imConversationMembersService.getOne(new QueryWrapper<ImConversationMembers>().lambda()
......@@ -366,7 +370,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imConversationMapper.upgradeToThousandChat(imApplication.getId(), imClientToConversation.getConversationId());
}
return ApiResult.ok();
return true;
}
......@@ -404,11 +408,11 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> delClientToConversation(ImClientToConversation imClientToConversation) throws Exception {
// shiro线程中获取当前token
JwtToken curentJwtToken = JwtUtil.getCurrentJwtToken();
// 根据appKey查询application
ImApplication imApplication = imApplicationService.getCacheAppByAppKey(curentJwtToken.getAppKey());
public Boolean delClientToConversation(ImClientToConversation imClientToConversation) throws Exception {
// 获取当前client
ImClient createClient = contextService.getImClientIfNotNullOrThrow();
// 根据appId查询application
ImApplication imApplication = contextService.getImApplicationIfNotNullOrThrow(createClient.getFkAppid());
ImClient imClientSender = imClientService.getCurrentClient();
// 判断是否为群主
ImConversationMembers conversationMember = imConversationMembersService.getOne(
......@@ -417,7 +421,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
.eq(ImConversationMembers::getFkClientId, imClientSender.getId())
);
if (conversationMember == null || !GroupRoleEnum.OWNER.getCode().equals(conversationMember.getRole())) {
return ApiResult.result(false);
return false;
}
// 查询该会话所有成员
List<ImConversationMembers> membersList = imConversationMembersService.list(
......@@ -428,7 +432,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
);
if (membersList.isEmpty()) {
log.info("membersList为空,toConversationId:" + imClientToConversation.getConversationId());
return ApiResult.fail();
throw new BusinessException("没有成员");
}
int needAddCount = 0;
......@@ -508,12 +512,13 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 将群成员数量减
imConversationMapper.addMemberCount(imApplication.getId(), imClientToConversation.getConversationId(), needAddCount);
return ApiResult.ok();
return true;
}
@Override
public void disband(DisbandConversationParam param) {
ImClient currentClient = imClientService.getCurrentClient();
// 获取当前client
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
// 判断是否为群主
ImConversationMembers conversationMember = imConversationMembersService.getOne(
new QueryWrapper<ImConversationMembers>().lambda()
......@@ -591,8 +596,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> leaveConversation(ImClientLeaveConversation imClientToConversation) {
ImClient currentClient = imClientService.getCurrentClient();
public Boolean leaveConversation(ImClientLeaveConversation imClientToConversation) {
// 获取当前client
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
ImConversation imConversation = imConversationService.getById(imClientToConversation.getConversationId());
if (imConversation == null) {
......@@ -691,7 +697,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 群主转移给下一个人
imConversationMembersService.updateById(conversationMember);
}
return ApiResult.ok();
return true;
}
......@@ -704,10 +710,10 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean transferOwner(TransferOwnerParam param) {
// shiro线程中获取当前token
JwtToken curentJwtToken = JwtUtil.getCurrentJwtToken();
// 根据appKey查询application
ImApplication imApplication = imApplicationService.getCacheAppByAppKey(curentJwtToken.getAppKey());
// 获取当前client
ImClient createClient = contextService.getImClientIfNotNullOrThrow();
// 根据appId查询application
ImApplication imApplication = contextService.getImApplicationIfNotNullOrThrow(createClient.getFkAppid());
ImClient imClientSender = imClientService.getCurrentClient();
// 判断操作人是否为群主
......@@ -742,7 +748,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
*/
@Override
public Boolean setAdmins(SetAdminsParam param) {
ImClient currentClient = imClientService.getCurrentClient();
// 获取当前client
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
// 判断操作人是否为群主
ImConversationMembers currentMember = imConversationMembersService.getOne(
new QueryWrapper<ImConversationMembers>().lambda()
......@@ -758,7 +765,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
List<Long> fkClientIds = simpleClients.stream()
.filter(s -> !currentMember.getId().equals(s.getId()))
.map(s -> s.getId()).collect(Collectors.toList());
.map(ImClientSimpleDto::getId).collect(Collectors.toList());
imConversationMembersService.setAdminsForConversation(param, fkClientIds);
return true;
}
......@@ -771,7 +778,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
*/
@Override
public Boolean mutedGroup(MutedGroupParam param) {
ImClient currentClient = imClientService.getCurrentClient();
// 获取当前client
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
if (!imConversationService.isBelongToRole(currentClient.getClientId(), param.getConversationId(),
Lists.newArrayList(GroupRoleEnum.OWNER.getCode(), GroupRoleEnum.ADMIN.getCode()))) {
// 当前操作人不属于群主或管理人员
......@@ -855,7 +863,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
public Boolean mutedGroupMember(MutedGroupMemberParam param) {
ImClient currentClient = imClientService.getCurrentClient();
// 获取当前client
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
if (!imConversationService.isBelongToRole(currentClient.getClientId(), param.getConversationId(),
Lists.newArrayList(GroupRoleEnum.OWNER.getCode(), GroupRoleEnum.ADMIN.getCode()))) {
// 当前操作人不属于群主或管理人员
......@@ -906,7 +915,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> saveOrUpdateName(ImConversationNameUpdate param) {
ImClient currentClient = imClientService.getCurrentClient();
// 获取当前client
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
ImConversation imConversationById = imConversationService.getById(param.getConversationId());
if (!this.isBelongToRole(currentClient.getClientId(), param.getConversationId(),
Lists.newArrayList(GroupRoleEnum.OWNER.getCode(), GroupRoleEnum.ADMIN.getCode()))) {
......@@ -1059,7 +1069,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Transactional(rollbackFor = Exception.class)
@Override
public boolean updateDisplayConversation(ImConversationDisplayUpdate imConversationDisplayUpdate) {
ImClient curentClient = imClientService.getCurrentClient();
// 获取当前client
ImClient curentClient = contextService.getImClientIfNotNullOrThrow();
for (Long id : imConversationDisplayUpdate.getConversationIds()) {
// 修改为删除隐藏状态
boolean update = imConversationMembersService.update(new UpdateWrapper<ImConversationMembers>()
......@@ -1093,7 +1104,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
public List<ConversationVo> getMyImConversationListAndMsgCount() {
try {
ImClient currentClient = imClientService.getCurrentClient();
// 获取当前client
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
// 查询用户加入的所有会话 与每个会话的未读条数 成员
List<ConversationVo> myImConversationListAndMsgCount = imConversationMapper.getMyImConversationListAndMsgCount(currentClient.getId(), currentClient.getClientId(), null);
......@@ -1126,7 +1138,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
public ConversationVo infoImConversationAndMsgCount(ImConversationQueryParam param) {
try {
ImClient client = imClientService.getCurrentClient();
// 获取当前client
ImClient client = contextService.getImClientIfNotNullOrThrow();
// 查询用户加入的所有会话 与每个会话的未读条数 成员
List<ConversationVo> conversationList = imConversationMapper.getMyImConversationListAndMsgCount(client.getId(), client.getClientId(), param.getId());
if (CollectionUtils.isEmpty(conversationList)) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment