Commit 8ad3c91c by Future

Merge branch 'feature-cluster' into paas-prod

parents 9b0dc6fb 4ee85807
...@@ -31,6 +31,11 @@ ...@@ -31,6 +31,11 @@
<groupId>io.geekidea.springbootplus</groupId> <groupId>io.geekidea.springbootplus</groupId>
<artifactId>core</artifactId> <artifactId>core</artifactId>
</dependency> </dependency>
<dependency>
<groupId>io.geekidea.springbootplus</groupId>
<artifactId>scheduled</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -22,6 +22,8 @@ import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; ...@@ -22,6 +22,8 @@ import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.dispatch.extend.ArgumentBox;
import io.geekidea.springbootplus.config.properties.SwaggerProperties; import io.geekidea.springbootplus.config.properties.SwaggerProperties;
import io.geekidea.springbootplus.framework.common.exception.SpringBootPlusConfigException; import io.geekidea.springbootplus.framework.common.exception.SpringBootPlusConfigException;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -102,6 +104,8 @@ public class Swagger2Config { ...@@ -102,6 +104,8 @@ public class Swagger2Config {
HttpServletRequest.class, HttpServletRequest.class,
HttpServletResponse.class, HttpServletResponse.class,
HttpSession.class, HttpSession.class,
ActionRequest.class,
ArgumentBox.class,
ApiIgnore.class ApiIgnore.class
}; };
@Autowired @Autowired
......
package io.geekidea.springbootplus.test; package io.geekidea.springbootplus.test;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.crypto.digest.MD5;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.enums.DeviceTypeEnum;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.ws.utils.RedisUtils;
import io.geekidea.springbootplus.framework.shiro.util.JwtUtil; import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import java.time.Duration;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -17,7 +11,16 @@ import org.springframework.boot.test.context.SpringBootTest; ...@@ -17,7 +11,16 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.time.Duration; import cn.hutool.core.lang.Snowflake;
import cn.hutool.crypto.digest.MD5;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.sdk.enums.DeviceTypeEnum;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.ws.utils.RedisUtils;
/** /**
* 生成测试appkey与appSecret对,并存入数据库 * 生成测试appkey与appSecret对,并存入数据库
......
...@@ -18,8 +18,11 @@ import com.wecloud.dispatch.registry.ActionBoxRegistry; ...@@ -18,8 +18,11 @@ import com.wecloud.dispatch.registry.ActionBoxRegistry;
import com.wecloud.dispatch.registry.ActionInterceptorRegistry; import com.wecloud.dispatch.registry.ActionInterceptorRegistry;
import com.wecloud.dispatch.registry.ActionRegistry; import com.wecloud.dispatch.registry.ActionRegistry;
import com.wecloud.dispatch.registry.MethodArgumentResolverRegistry; import com.wecloud.dispatch.registry.MethodArgumentResolverRegistry;
import com.wecloud.dispatch.util.ActionRequestHolder;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.core.MethodParameter; import org.springframework.core.MethodParameter;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
...@@ -49,9 +52,14 @@ public class ActionDispatcher { ...@@ -49,9 +52,14 @@ public class ActionDispatcher {
} }
public Object action(ActionMessage am) { public Object action(ActionMessage am) {
// modify by luozh 2022/04/03 获取到ActionRequest后保存到ThreadLocal,便于后面业务获取
try {
ActionRequest request = getActionRequest(am); ActionRequest request = getActionRequest(am);
ActionRequestHolder.setActionRequest(request);
return action(request, getArgumentBox()); return action(request, getArgumentBox());
} finally {
ActionRequestHolder.remove();
}
} }
public Object action(ActionMessage am, ArgumentBox argumentBox) { public Object action(ActionMessage am, ArgumentBox argumentBox) {
......
...@@ -57,7 +57,6 @@ import java.util.Set; ...@@ -57,7 +57,6 @@ import java.util.Set;
*/ */
@Controller @Controller
@ActionMapping(value = "/sendtest") @ActionMapping(value = "/sendtest")
@RequestMapping("/sendtest")
@Api(value = "测试方法类", tags = {"websocket报文-全部采用json传输"}) @Api(value = "测试方法类", tags = {"websocket报文-全部采用json传输"})
@Slf4j @Slf4j
public class WsTestAction { public class WsTestAction {
...@@ -73,7 +72,6 @@ public class WsTestAction { ...@@ -73,7 +72,6 @@ public class WsTestAction {
*/ */
@ActionMapping(value = "gogo") @ActionMapping(value = "gogo")
@ApiOperation(value = "测试方法") @ApiOperation(value = "测试方法")
@PostMapping("gogo")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name="reqId", value = "请求id", required = false), @ApiImplicitParam(name="reqId", value = "请求id", required = false),
@ApiImplicitParam(name="hello", value = "测试参数hello", required = true), @ApiImplicitParam(name="hello", value = "测试参数hello", required = true),
......
package com.wecloud.dispatch.annotation; package com.wecloud.dispatch.annotation;
import org.springframework.core.annotation.AliasFor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
...@@ -10,17 +15,47 @@ import java.lang.annotation.Target; ...@@ -10,17 +15,47 @@ import java.lang.annotation.Target;
*/ */
@Target({ ElementType.METHOD, ElementType.TYPE }) @Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@RequestMapping(method = RequestMethod.POST)
public @interface ActionMapping { public @interface ActionMapping {
@AliasFor(annotation = RequestMapping.class)
String name() default "";
/**
* Alias for {@link RequestMapping#value}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] value() default {};
/**
* Alias for {@link RequestMapping#path}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] path() default {};
/** /**
* Mapping映射字段 * Alias for {@link RequestMapping#params}.
* @return
*/ */
String[] value() default ""; @AliasFor(annotation = RequestMapping.class)
String[] params() default {};
/** /**
* * Alias for {@link RequestMapping#headers}.
* @return
*/ */
@AliasFor(annotation = RequestMapping.class)
String[] headers() default {};
/**
* Alias for {@link RequestMapping#consumes}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] consumes() default {};
/**
* Alias for {@link RequestMapping#produces}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] produces() default {};
int order() default 10; int order() default 10;
} }
package com.wecloud.dispatch.exception;
import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.support.AopUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.http.HttpStatus;
import org.springframework.lang.Nullable;
import org.springframework.ui.ModelMap;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.method.ControllerAdviceBean;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.method.annotation.ExceptionHandlerMethodResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.support.RequestContextUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author luozh
*/
@Slf4j
public class ActionExceptionResolver implements ApplicationContextAware, InitializingBean {
private ApplicationContext applicationContext;
private final List<Object> responseBodyAdvice = new ArrayList<>();
private final Map<Class<?>, ExceptionHandlerMethodResolver> exceptionHandlerCache =
new ConcurrentHashMap<>(64);
private final Map<ControllerAdviceBean, ExceptionHandlerMethodResolver> exceptionHandlerAdviceCache =
new LinkedHashMap<>();
@Override
public void afterPropertiesSet() {
// Do this first, it may add ResponseBodyAdvice beans
initExceptionHandlerAdviceCache();
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Nullable
public ApplicationContext getApplicationContext() {
return this.applicationContext;
}
private void initExceptionHandlerAdviceCache() {
if (getApplicationContext() == null) {
return;
}
List<ControllerAdviceBean> adviceBeans = ControllerAdviceBean.findAnnotatedBeans(getApplicationContext());
for (ControllerAdviceBean adviceBean : adviceBeans) {
Class<?> beanType = adviceBean.getBeanType();
if (beanType == null) {
throw new IllegalStateException("Unresolvable type for ControllerAdviceBean: " + adviceBean);
}
ExceptionHandlerMethodResolver resolver = new ExceptionHandlerMethodResolver(beanType);
if (resolver.hasExceptionMappings()) {
this.exceptionHandlerAdviceCache.put(adviceBean, resolver);
}
if (ResponseBodyAdvice.class.isAssignableFrom(beanType)) {
this.responseBodyAdvice.add(adviceBean);
}
}
if (log.isDebugEnabled()) {
int handlerSize = this.exceptionHandlerAdviceCache.size();
int adviceSize = this.responseBodyAdvice.size();
if (handlerSize == 0 && adviceSize == 0) {
log.debug("ControllerAdvice beans: none");
} else {
log.debug("ControllerAdvice beans: " +
handlerSize + " @ExceptionHandler, " + adviceSize + " ResponseBodyAdvice");
}
}
}
@Nullable
protected ModelAndView doResolveHandlerMethodException(HttpServletRequest request,
HttpServletResponse response, @Nullable HandlerMethod handlerMethod, Exception exception) {
ServletInvocableHandlerMethod exceptionHandlerMethod = getExceptionHandlerMethod(handlerMethod, exception);
if (exceptionHandlerMethod == null) {
return null;
}
ServletWebRequest webRequest = new ServletWebRequest(request, response);
ModelAndViewContainer mavContainer = new ModelAndViewContainer();
try {
if (log.isDebugEnabled()) {
log.debug("Using @ExceptionHandler " + exceptionHandlerMethod);
}
Throwable cause = exception.getCause();
if (cause != null) {
// Expose cause as provided argument as well
exceptionHandlerMethod.invokeAndHandle(webRequest, mavContainer, exception, cause, handlerMethod);
} else {
// Otherwise, just the given exception as-is
exceptionHandlerMethod.invokeAndHandle(webRequest, mavContainer, exception, handlerMethod);
}
} catch (Throwable invocationEx) {
// Any other than the original exception (or its cause) is unintended here,
// probably an accident (e.g. failed assertion or the like).
if (invocationEx != exception && invocationEx != exception.getCause() && log.isWarnEnabled()) {
log.warn("Failure in @ExceptionHandler " + exceptionHandlerMethod, invocationEx);
}
// Continue with default processing of the original exception...
return null;
}
if (mavContainer.isRequestHandled()) {
return new ModelAndView();
} else {
ModelMap model = mavContainer.getModel();
HttpStatus status = mavContainer.getStatus();
ModelAndView mav = new ModelAndView(mavContainer.getViewName(), model, status);
mav.setViewName(mavContainer.getViewName());
if (!mavContainer.isViewReference()) {
mav.setView((View) mavContainer.getView());
}
if (model instanceof RedirectAttributes) {
Map<String, ?> flashAttributes = ((RedirectAttributes) model).getFlashAttributes();
RequestContextUtils.getOutputFlashMap(request).putAll(flashAttributes);
}
return mav;
}
}
@Nullable
protected ServletInvocableHandlerMethod getExceptionHandlerMethod(
@Nullable HandlerMethod handlerMethod, Exception exception) {
Class<?> handlerType = null;
if (handlerMethod != null) {
// Local exception handler methods on the controller class itself.
// To be invoked through the proxy, even in case of an interface-based proxy.
handlerType = handlerMethod.getBeanType();
ExceptionHandlerMethodResolver resolver = this.exceptionHandlerCache.get(handlerType);
if (resolver == null) {
resolver = new ExceptionHandlerMethodResolver(handlerType);
this.exceptionHandlerCache.put(handlerType, resolver);
}
Method method = resolver.resolveMethod(exception);
if (method != null) {
return new ServletInvocableHandlerMethod(handlerMethod.getBean(), method);
}
// For advice applicability check below (involving base packages, assignable types
// and annotation presence), use target class instead of interface-based proxy.
if (Proxy.isProxyClass(handlerType)) {
handlerType = AopUtils.getTargetClass(handlerMethod.getBean());
}
}
for (Map.Entry<ControllerAdviceBean, ExceptionHandlerMethodResolver> entry : this.exceptionHandlerAdviceCache.entrySet()) {
ControllerAdviceBean advice = entry.getKey();
if (advice.isApplicableToBeanType(handlerType)) {
ExceptionHandlerMethodResolver resolver = entry.getValue();
Method method = resolver.resolveMethod(exception);
if (method != null) {
return new ServletInvocableHandlerMethod(advice.resolveBean(), method);
}
}
}
return null;
}
}
package com.wecloud.dispatch.general; package com.wecloud.dispatch.general;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.exception.DaoException;
import io.geekidea.springbootplus.framework.common.exception.SpringBootPlusException;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.socket.nio.NioSocketChannel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import com.wecloud.dispatch.common.BaseRequest; import com.wecloud.dispatch.common.BaseRequest;
import com.wecloud.dispatch.extend.ActionMessage; import com.wecloud.dispatch.extend.ActionMessage;
import com.wecloud.dispatch.extend.ArgumentBox; import com.wecloud.dispatch.extend.ArgumentBox;
import com.wecloud.dispatch.extend.impl.DefaultArgumentBox; import com.wecloud.dispatch.extend.impl.DefaultArgumentBox;
import com.wecloud.dispatch.general.config.GeneralActionDispatcher; import com.wecloud.dispatch.general.config.GeneralActionDispatcher;
import com.wecloud.dispatch.general.extend.ActionMessageResolver; import com.wecloud.dispatch.general.extend.ActionMessageResolver;
import com.wecloud.im.exception.VerificationCodeException;
import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.sender.ChannelSender; import com.wecloud.im.ws.sender.ChannelSender;
import com.wecloud.utils.JsonUtils; import com.wecloud.utils.JsonUtils;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.socket.nio.NioSocketChannel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/** /**
...@@ -31,7 +39,7 @@ public class GeneralMessageHandler { ...@@ -31,7 +39,7 @@ public class GeneralMessageHandler {
private ChannelSender channelSender; private ChannelSender channelSender;
public void doMessage(Long senderClientId, ChannelHandlerContext ctx, String data) { public void doMessage(Long senderClientId, ChannelHandlerContext ctx, String data) {
if(log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("appWS收到data: {}\n senderClientId:{}, channelId:{}", data, senderClientId, ctx.channel().id().asLongText()); log.debug("appWS收到data: {}\n senderClientId:{}, channelId:{}", data, senderClientId, ctx.channel().id().asLongText());
} }
// 解析jsonO // 解析jsonO
...@@ -45,14 +53,51 @@ public class GeneralMessageHandler { ...@@ -45,14 +53,51 @@ public class GeneralMessageHandler {
ActionMessage am = actionMessageResolver.resolver(generalActionDispatcher, baseRequest); ActionMessage am = actionMessageResolver.resolver(generalActionDispatcher, baseRequest);
am.setSenderChannel(ctx.channel()); am.setSenderChannel(ctx.channel());
am.setSenderClientId(senderClientId); am.setSenderClientId(senderClientId);
Object res = generalActionDispatcher.action(am);
if(res != null) { Exception actionException = null;
channelSender.sendMsgLocal((NioSocketChannel)am.getSenderChannel(), res); Object res = null;
try {
res = generalActionDispatcher.action(am);
} catch (Exception ex) {
actionException = ex;
} }
log.info("调用完成");
processDispatchResult(am, res, actionException);
} }
public ArgumentBox getArgumentBox() { public ArgumentBox getArgumentBox() {
ArgumentBox beanBox = new DefaultArgumentBox(); ArgumentBox beanBox = new DefaultArgumentBox();
return beanBox; return beanBox;
} }
private void processDispatchResult(ActionMessage am,
@Nullable Object res,
@Nullable Exception exception) {
log.info("处理结果");
if (exception != null) {
log.error("dispatch action error:", exception);
if (exception instanceof SpringBootPlusException) {
// 处理自定义异常
ApiCode errorCode;
if (exception instanceof BusinessException) {
errorCode = ApiCode.BUSINESS_EXCEPTION;
} else if (exception instanceof DaoException) {
errorCode = ApiCode.DAO_EXCEPTION;
} else if (exception instanceof VerificationCodeException) {
errorCode = ApiCode.VERIFICATION_CODE_EXCEPTION;
} else {
errorCode = ApiCode.SPRING_BOOT_PLUS_EXCEPTION;
}
res = WsResponse.result(errorCode, exception.getMessage(), null).setReqId(am.getMessage().getReqId());
} else {
// 其他默认的全局异常处理
res = WsResponse.result(ApiCode.SYSTEM_EXCEPTION, "", null).setReqId(am.getMessage().getReqId());
}
}
if (res != null) {
channelSender.sendMsgLocal((NioSocketChannel) am.getSenderChannel(), res);
}
}
} }
...@@ -6,6 +6,7 @@ import com.wecloud.dispatch.extend.ArgumentBox; ...@@ -6,6 +6,7 @@ import com.wecloud.dispatch.extend.ArgumentBox;
import com.wecloud.dispatch.extend.MethodArgumentResolver; import com.wecloud.dispatch.extend.MethodArgumentResolver;
import com.wecloud.utils.JsonUtils; import com.wecloud.utils.JsonUtils;
import org.springframework.core.MethodParameter; import org.springframework.core.MethodParameter;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import java.lang.reflect.Array; import java.lang.reflect.Array;
...@@ -38,15 +39,18 @@ public class GeneralMethodArgumentResolver implements MethodArgumentResolver { ...@@ -38,15 +39,18 @@ public class GeneralMethodArgumentResolver implements MethodArgumentResolver {
ActionRequest request, ActionRequest request,
ArgumentBox argumentBox) { ArgumentBox argumentBox) {
Object object = null; Object object = null;
RequestBody requestBodyDefine = parameter.getParameterAnnotation(RequestBody.class);
if(requestBodyDefine != null) {
Class<?> clazz = parameter.getParameterType();
object = JsonUtils.beanCopyDeep(request.getData(), clazz);
return object;
}
RequestParam define = parameter.getParameterAnnotation(RequestParam.class); RequestParam define = parameter.getParameterAnnotation(RequestParam.class);
// 获取属定义的名称 // 获取属定义的名称
String name = null == define ? parameter.getParameterName() : define.value(); String name = null == define ? parameter.getParameterName() : define.value();
Class<?> clazz = parameter.getParameterType(); Class<?> clazz = parameter.getParameterType();
Object value = request.getData().get(name); Object value = request.getData().get(name);
if(ActionRequest.class.isAssignableFrom(clazz)) { if(ActionRequest.class.isAssignableFrom(clazz)) {
object = request; object = request;
} else if (ArgumentBox.class.isAssignableFrom(clazz)) { } else if (ArgumentBox.class.isAssignableFrom(clazz)) {
......
...@@ -63,20 +63,20 @@ public class ActionRegistry { ...@@ -63,20 +63,20 @@ public class ActionRegistry {
} }
} }
public void add(Method method) { // public void add(Method method) {
if (null != method) { // if (null != method) {
Annotation[] as = method.getDeclaringClass().getAnnotations(); // Annotation[] as = method.getDeclaringClass().getAnnotations();
ActionMapping am = null; // ActionMapping am = null;
for (Annotation annotation : as) { // for (Annotation annotation : as) {
if (annotation instanceof ActionMapping) { // if (annotation instanceof ActionMapping) {
am = ((ActionMapping) annotation); // am = ((ActionMapping) annotation);
break; // break;
} // }
} // }
String[] codes = null == am ? new String[] { "" } : am.value(); // String[] codes = null == am ? new String[] { "" } : am.value();
add(codes, method); // add(codes, method);
} // }
} // }
public void add(String[] codes, Method method) { public void add(String[] codes, Method method) {
if (null != method) { if (null != method) {
......
package com.wecloud.dispatch.swagger;
import com.google.common.base.Optional;
import com.wecloud.dispatch.annotation.ActionMapping;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.mvc.condition.NameValueExpression;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.OperationBuilderPlugin;
import springfox.documentation.spi.service.contexts.OperationContext;
import springfox.documentation.spring.web.DescriptionResolver;
import springfox.documentation.swagger.common.SwaggerPluginSupport;
@Component
@Order(SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER + 1)
public class CustomOperationPlugin implements OperationBuilderPlugin {
private final DescriptionResolver descriptions;
@Autowired
public CustomOperationPlugin(DescriptionResolver descriptions) {
this.descriptions = descriptions;
}
@Override
public void apply(OperationContext context) {
Optional<ApiOperation> apiOperationOp = context.findAnnotation(ApiOperation.class);
Optional<ActionMapping> acOp = context.findAnnotation(ActionMapping.class);
if (apiOperationOp.isPresent() || acOp.isPresent()) {
String notes = "";
if(apiOperationOp.isPresent()) {
notes = apiOperationOp.get().notes();
}
Optional<ActionMapping> hasActionMapping = context.findAnnotation(ActionMapping.class);
//添加权限码到notes中
if (hasActionMapping.isPresent()) {
notes = notes + "需要注意的是:<br/> 1、这是websocket接口;<br/> 2、请用ws://调用 <br/> 3、请求参数外层需要包一层:" +
"{ <br/>" +
"\t\"reqId\": Long类型, <br/>" +
"\t\"action\": 字符串类型(就是上面的地址) <br/>" +
"\t\"data\": 真正的请求参数(就是下面的请求参数), <br/>" +
"} ";
//编辑api文档信息, notes
context.operationBuilder().notes(descriptions.resolve(notes));
}
}
}
@Override
public boolean supports(DocumentationType documentationType) {
return SwaggerPluginSupport.pluginDoesApply(documentationType);
}
}
//package com.wecloud.dispatch.swagger;
//
//import com.fasterxml.classmate.TypeResolver;
//import com.google.common.collect.Sets;
//import org.springframework.http.HttpMethod;
//import org.springframework.http.MediaType;
//import org.springframework.stereotype.Component;
//import springfox.documentation.builders.OperationBuilder;
//import springfox.documentation.builders.ParameterBuilder;
//import springfox.documentation.schema.ModelRef;
//import springfox.documentation.service.ApiDescription;
//import springfox.documentation.service.Operation;
//import springfox.documentation.service.Parameter;
//import springfox.documentation.spi.DocumentationType;
//import springfox.documentation.spi.service.ApiListingScannerPlugin;
//import springfox.documentation.spi.service.contexts.DocumentationContext;
//import springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator;
//
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//
//@Component
//public class SwaggerAddtion implements ApiListingScannerPlugin {
// @Override
// public List<ApiDescription> apply(DocumentationContext documentationContext) {
// String path = "/oauth/token";
// String description = "UserToken";
//
// List<Parameter> parameters = new ArrayList<>();
// Parameter param1 = new ParameterBuilder()
// .description("oauth2鉴权方式,如password")//参数描述
// .type(new TypeResolver().resolve(String.class))//参数数据类型
// .name("grant_type")//参数名称
// .defaultValue("password")//参数默认值
// .parameterType("query")//参数类型
// .parameterAccess("access")
// .required(true)//是否必填
// .modelRef(new ModelRef("string")) //参数数据类型
// .build();
// parameters.add(param1);
// Parameter param2 = new ParameterBuilder()
// .description("用户名")
// .type(new TypeResolver().resolve(String.class))
// .name("username")
// .parameterType("query")
// .parameterAccess("access")
// .required(true)
// .modelRef(new ModelRef("string")) //<5>
// .build();
// parameters.add(param2);
//
// Parameter param3 = new ParameterBuilder()
// .description("密码")
// .type(new TypeResolver().resolve(String.class))
// .name("password")
// .parameterType("query")
// .parameterAccess("access")
// .required(true)
// .modelRef(new ModelRef("string")) //<5>
// .build();
// parameters.add(param3);
//
// Operation operation = new OperationBuilder(
// new CachingOperationNameGenerator())
// .method(HttpMethod.POST)//http请求类型
// .produces(Sets.newHashSet(MediaType.APPLICATION_JSON_VALUE))
// .summary("获取token")
// .notes("获取token")//方法描述
// .tags(Sets.newHashSet("归类标签"))//归类标签
// .parameters(parameters)
// .build();
//
// ApiDescription apiDescription = new ApiDescription(
// path, //url
// description, //描述
// Arrays.asList(operation),
// false);
// List<ApiDescription> descriptions = new ArrayList<>();
// descriptions.add(apiDescription);
//
// return descriptions;
// }
//
// @Override
// public boolean supports(DocumentationType documentationType) {
// return DocumentationType.SWAGGER_2.equals(documentationType);
// }
//}
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();
}
public static String getReqId() {
return getActionRequest().getData().getReqId();
}
/**
* 设置请求信息到当前线程中
*
* @param actionRequest
*/
public static void setActionRequest(ActionRequest actionRequest) {
THREAD_LOCAL.set(actionRequest);
}
/**
* 销毁
*/
public static void remove() {
THREAD_LOCAL.remove();
}
}
package com.wecloud.im.action;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.geekidea.springbootplus.framework.log.annotation.OperationLog;
import io.geekidea.springbootplus.framework.log.enums.OperationLogType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.ImClientBlacklistPageParam;
import com.wecloud.im.param.ImClientBlacklistQueryVo;
import com.wecloud.im.param.add.ImClientBlacklistUpdate;
import com.wecloud.im.service.ImClientBlacklistService;
import com.wecloud.im.ws.model.WsResponse;
/**
* ws 黑名单
* @Author luozh
* @Date 2022年04月02日 09:20
* @Version 1.0
*/
@Slf4j
@Component
@ActionMapping(value = "/im/blacklist")
@Api(value = "ws-黑名单API", tags = {"ws-黑名单"})
public class BlacklistAction {
@Autowired
private ImClientBlacklistService imClientBlacklistService;
/**
* 添加黑名单
*/
@ActionMapping("/add")
@ApiOperation(value = "拉入黑名单")
public WsResponse<Map<String, Boolean>> addImClientBlacklist(ImClientBlacklistUpdate data) {
imClientBlacklistService.addImClientBlacklist(data);
return WsResponse.ok();
}
/**
* 删除黑名单
*/
@ActionMapping("/delete")
@ApiOperation(value = "移出黑名单")
public WsResponse<Map<String, Boolean>> deleteImClientBlacklist(ImClientBlacklistUpdate data) {
imClientBlacklistService.removeImClientBlacklist(data);
return WsResponse.ok();
}
/**
* 黑名单分页列表
* @return
*/
@ActionMapping("/getPageList")
@OperationLog(name = "黑名单分页列表", type = OperationLogType.PAGE)
@ApiOperation(value = "黑名单分页列表")
public WsResponse<Paging<ImClientBlacklistQueryVo>> getImClientBlacklistPageList(ImClientBlacklistPageParam data) {
Paging<ImClientBlacklistQueryVo> blacklist =
imClientBlacklistService.getImClientBlacklistPageList(data);
return WsResponse.ok(blacklist);
}
}
package com.wecloud.im.action;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.param.ClientInfoParam;
import com.wecloud.im.param.GetClientInfoParam;
import com.wecloud.im.param.GetOnlineStatusParam;
import com.wecloud.im.param.LogoutParam;
import com.wecloud.im.param.add.ImClientHeadPortraitAdd;
import com.wecloud.im.param.add.ImClientHeadPortraitAndNicknameUpdate;
import com.wecloud.im.param.add.ImClientNicknameAdd;
import com.wecloud.im.service.ContextService;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.vo.ClientInfoVo;
import com.wecloud.im.vo.GetInfoListVo;
import com.wecloud.im.vo.ImOnlineStatusVo;
import com.wecloud.im.vo.MyInfoVo;
import com.wecloud.im.ws.cache.UserStateCacheManager;
import com.wecloud.im.ws.model.WsResponse;
/**
* 终端 action
* @Author luozh
* @Date 2022年04月02日 15:14
* @Version 1.0
*/
@Slf4j
@Component
@ActionMapping("/im/client")
@Api(value = "ws-终端", tags = {"ws-终端"})
public class ClientAction {
@Autowired
private ImClientService imClientService;
@Autowired
private UserStateCacheManager userStateCacheManager;
@Autowired
private ImApplicationService imApplicationService;
@Autowired
private ContextService contextService;
/**
* 查询我的信息
*/
@ActionMapping("/myInfo")
@ApiOperation(value = "查询我的信息")
public WsResponse<MyInfoVo> myInfo() {
MyInfoVo myInfo = imClientService.getMyInfo();
return WsResponse.ok(myInfo);
}
@ActionMapping("/infoList")
@ApiOperation(value = "根据id获取Client的头像昵称")
public WsResponse<Map<String, List<GetInfoListVo>>> getInfoList(GetClientInfoParam data) throws Exception {
List<GetInfoListVo> getInfoListVoList = imClientService.getInfoList(data);
Map<String, List<GetInfoListVo>> result = new HashMap<>();
result.put("result", getInfoListVoList);
return WsResponse.ok(result);
}
/**
* 查询用户信息 用户可能是好友、陌生人、被拉黑名单的人
*/
@ActionMapping("/clientInfo")
@ApiOperation(value = "查询用户信息 用户可能是好友、陌生人、被拉黑名单的人")
public WsResponse<ClientInfoVo> getClientInfo(ClientInfoParam data) {
ClientInfoVo clientInfoVo = imClientService.getClientInfo(data);
return WsResponse.ok(clientInfoVo);
}
@ActionMapping("/updateHeadAndNickname")
@ApiOperation(value = "添加或修改头像和昵称")
public WsResponse<Boolean> updateHeadAndNickname(ImClientHeadPortraitAndNicknameUpdate data) throws Exception {
log.info("添加或修改头像和昵称入参 {}", JSON.toJSONString(data));
boolean flag = imClientService.updateHeadAndNickname(data);
return WsResponse.ok(flag);
}
@ActionMapping("/updateHeadPortrait")
@ApiOperation(value = "添加或修改头像")
public WsResponse<Boolean> updateHeadPortrait(ImClientHeadPortraitAdd data) throws Exception {
log.info("添加或修改头像入参 {}", JSON.toJSONString(data));
boolean flag = imClientService.updateHeadPortrait(data);
return WsResponse.ok(flag);
}
@ActionMapping("/updateNickname")
@ApiOperation(value = "添加或修改主昵称")
public WsResponse<Boolean> updateNickname(ImClientNicknameAdd data) throws Exception {
log.info("添加或修改主昵称入参 {}", JSON.toJSONString(data));
boolean flag = imClientService.updateNickname(data);
return WsResponse.ok(flag);
}
/**
* 退出登陆
*
* @return
* @throws Exception
*/
@ActionMapping("/logout")
@ApiOperation(value = "退出登陆 清除推送token等")
public WsResponse<Map<String, Boolean>> logout(LogoutParam data) {
log.info("退出登陆入参 {}", JSON.toJSONString(data));
boolean flag = imClientService.logout(data);
Map<String, Boolean> result = new HashMap<>();
result.put("result", flag);
return WsResponse.ok(result);
}
/**
* 获取用户在线状态(批量)
*
* @return true:在线, false 不在线
*/
@ActionMapping("/onlineStatus")
@ApiOperation(value = "获取用户在线状态(批量)")
public WsResponse<List<ImOnlineStatusVo>> getOnlineStatus(
GetOnlineStatusParam data) {
// shiro线程中获取当前token
ImClient imClient = contextService.getImClientIfNotNullOrThrow();
ImApplication imApplication = contextService.getImApplicationIfNotNullOrThrow(imClient.getFkAppid());
List<ImOnlineStatusVo> imOnlineStatusVos = new ArrayList<>();
for (String clientId : data.getClientIds()) {
ImOnlineStatusVo imOnlineStatusVo = new ImOnlineStatusVo();
// todo 需要改成批量
ImClient client = imClientService.getCacheImClient(imApplication.getId(), clientId);
imOnlineStatusVo.setStatus(userStateCacheManager.isOnline(client.getId()));
imOnlineStatusVo.setClientId(clientId);
imOnlineStatusVos.add(imOnlineStatusVo);
}
return WsResponse.ok(imOnlineStatusVos);
}
}
package com.wecloud.im.action;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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 = {"ws-会话表"})
public class ConversationAction {
@Autowired
private ImConversationService imConversationService;
/**
* 添加或修改会话名称
*/
@ActionMapping("/saveOrUpdateName")
@ApiOperation(value = "添加或修改会话名称", notes = "权限:目前只有创建者有权限操作")
public WsResponse<Map<String, Boolean>> saveOrUpdateName(ImConversationNameUpdate data) {
log.info("添加或修改会话名称入参 {}", JSON.toJSONString(data));
imConversationService.saveOrUpdateName(data);
return WsResponse.ok();
}
/**
* 添加或修改会话拓展字段
*/
@ActionMapping("/saveOrUpdateAttr")
@ApiOperation(value = "添加或修改会话拓展字段", notes = "权限:所有client都权限操作")
public WsResponse<Map<String, Boolean>> saveOrUpdateAttr(ImConversationAttrUpdate data) {
imConversationService.saveOrUpdateAttr(data);
return WsResponse.ok();
}
/**
* client退出会话
*/
@ActionMapping("/leave")
@ApiOperation(value = "client退出会话", notes = "若是创建者退出,[创建者]权限将会转移给按加入会话时间排序的下一个client")
public WsResponse<Map<String, Boolean>> leaveConversation(ImClientLeaveConversation data) {
log.info("client退出会话入参 {}", JSON.toJSONString(data));
imConversationService.leaveConversation(data);
return WsResponse.ok();
}
/**
* 将client从会话移除
* @return
*/
@ActionMapping("/delClient")
@ApiOperation(value = "将client从会话移除", notes = "权限:目前只有群主有权限操作")
public WsResponse<Map<String, Boolean>> delClientToConversation(ImClientToConversation data) throws Exception {
log.info("将client从会话移除入参 {}", JSON.toJSONString(data));
boolean r = imConversationService.delClientToConversation(data);
Map<String, Boolean> result = new HashMap<>();
result.put("result", r);
return WsResponse.ok(result);
}
/**
* 解散群聊
*/
@ActionMapping("/disband")
@ApiOperation(value = "解散群聊", notes = "权限:目前只有群主有权限操作")
public WsResponse<Map<String, Boolean>> disband(DisbandConversationParam data) throws Exception {
log.info("解散群聊入参 {}", JSON.toJSONString(data));
imConversationService.disband(data);
return WsResponse.ok();
}
/**
* 将用户添加进会话
*/
@ActionMapping("/addClient")
@ApiOperation(value = "将用户添加进会话", notes = "权限:会话中所有client都有权限操作")
public WsResponse<Map<String, Boolean>> addClientToConversation(ImClientToConversation data) throws Exception {
log.info("将用户添加进会话入参 {}", JSON.toJSONString(data));
imConversationService.addClientToConversation(data);
return WsResponse.ok();
}
/**
* 创建会话
*/
@ActionMapping("/create")
@ApiOperation(value = "创建会话", notes = "后台可配置:两个客户端如果已经创建过会话,是否重复创建会话")
public WsResponse<ImConversationCreateVo> createImConversation(ImConversationCreate data) throws Exception {
log.info("创建会话入参 {}", JSON.toJSONString(data));
ImConversationCreateVo vo = imConversationService.createImConversation(data);
return WsResponse.ok(vo);
}
/**
* 群主转让
* @return
*/
@ActionMapping("/transferOwner")
@ApiOperation(value = "群主转让", notes = "权限:目前只有群主有权限操作")
public WsResponse<Map<String, Boolean>> transferOwner(TransferOwnerParam data) {
log.info("群主转让入参 {}", JSON.toJSONString(data));
Boolean r = imConversationService.transferOwner(data);
Map<String, Boolean> result = new HashMap<>();
result.put("result", r);
return WsResponse.ok(result);
}
/**
* 设置群管理员
* @return
*/
@ActionMapping("/setAdmins")
@ApiOperation(value = "设置群管理员", notes = "权限:目前只有群主有权限操作")
public WsResponse<Map<String, Boolean>> setAdmins(@Validated SetAdminsParam data) {
log.info("设置群管理员入参 {}", JSON.toJSONString(data));
if (CollectionUtils.isEmpty(data.getClientIds())) {
return WsResponse.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
Boolean r = imConversationService.setAdmins(data);
Map<String, Boolean> result = new HashMap<>();
result.put("result", r);
return WsResponse.ok(result);
}
/**
* 群禁言、取消群禁言
* @return
*/
@ActionMapping("/mutedGroup")
@ApiOperation(value = "群禁言、取消群禁言", notes = "权限:群主和管理员有权限操作")
public WsResponse<Map<String, Boolean>> mutedGroup(@Validated MutedGroupParam data) {
log.info("群禁言、取消群禁言入参 {}", JSON.toJSONString(data));
Boolean r = imConversationService.mutedGroup(data);
Map<String, Boolean> result = new HashMap<>();
result.put("result", r);
return WsResponse.ok(result);
}
/**
* 选择禁言
*/
@ActionMapping("/mutedGroupMember")
@ApiOperation(value = "选择禁言", notes = "权限:群主和管理员有权限操作")
public WsResponse<Map<String, Boolean>> mutedGroupMember(@Validated MutedGroupMemberParam data) {
log.info("选择禁言入参 {}", JSON.toJSONString(data));
if (CollectionUtils.isEmpty(data.getClientIds())) {
return WsResponse.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
Boolean r = imConversationService.mutedGroupMember(data);
Map<String, Boolean> result = new HashMap<>();
result.put("result", r);
return WsResponse.ok(result);
}
/**
* 查询用户加入的所有会话 与每个会话的未读条数 成员
* @return
*/
@ActionMapping("/getList")
@ApiOperation(value = "查询加入的会话列表", notes = "查询用户加入的非隐藏状态的会话列表 与每个会话的未读条数 成员")
public WsResponse<Map<String, List<ConversationVo>>> getMyImConversationListAndMsgCount() {
List<ConversationVo> conversationList = imConversationService.getMyImConversationListAndMsgCount();
Map<String, List<ConversationVo>> result = new HashMap<>();
result.put("result", conversationList);
return WsResponse.ok(result);
}
/**
* 根据会话id查询指定会话信息
*/
@ActionMapping("/info")
@ApiOperation(value = "根据会话id查询指定会话信息", notes = "根据会话id查询指定会话信息 与每个会话的未读条数")
public WsResponse<ConversationVo> info(@Validated ImConversationQueryParam data) throws Exception {
ConversationVo conversationVo = imConversationService.infoImConversationAndMsgCount(data);
return WsResponse.ok(conversationVo);
}
/**
* 批量修改单向隐藏或显示会话
*/
@ActionMapping("/displayUpdate")
@ApiOperation(value = "批量修改单向隐藏或显示会话", notes = "拉取会话列表不展示已隐藏状态的会话,云端聊天记录不删除;假设有A和B两个用户,A删会话,B还能发; 如果B发了消息,A这边要重新把会话显示出来,并能显示之前的聊天记录")
public WsResponse<Map<String, Boolean>> updateDisplayConversation(ImConversationDisplayUpdate data) throws Exception {
imConversationService.updateDisplayConversation(data);
return WsResponse.ok();
}
}
package com.wecloud.im.action;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ListConversationMembersParam;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.vo.ConversationMemberVo;
import com.wecloud.im.ws.model.WsResponse;
/**
* @Author luozh
* @Date 2022年04月02日 16:41
* @Version 1.0
*/
@Slf4j
@Component
@ActionMapping(value = "/im/conversationMembers")
@Api(value = "ws-会话成员API", tags = {"ws-会话成员"})
public class ConversationMembersAction {
@Autowired
private ImConversationMembersService imConversationMembersService;
/**
* 添加或修改会话成员备注
* @return
*/
@ActionMapping("/updateClientRemarkName")
@ApiOperation(value = "添加或修改会话成员备注", notes = "权限:目前只有client成员自己有权限操作")
public WsResponse<Map<String, Boolean>> saveOrUpdateClientRemarkName(ImConvMemeClientRemarkNameParam data) throws Exception {
imConversationMembersService.saveOrUpdateClientRemarkName(data);
return WsResponse.ok();
}
/**
* 添加或修改会话成员拓展字段
*/
@ActionMapping("/updateAttr")
@ApiOperation(value = "添加或修改会话成员拓展字段", notes = "权限:目前只有client成员自己有权限操作")
public WsResponse<Map<String, Boolean>> saveOrUpdateAttr(ImConversationMemAttrUpdate data) throws Exception {
boolean r = imConversationMembersService.saveOrUpdateAttr(data);
if (r) {
return WsResponse.ok();
} else {
return WsResponse.fail();
}
}
/**
* 会话中成员表列表
* @return
*/
@ActionMapping("/getList")
@ApiOperation(value = "获取会话中成员表列表")
public WsResponse<Map<String, List<ConversationMemberVo>>> getImConversationMembersList(@Validated ListConversationMembersParam data) throws Exception {
List<ConversationMemberVo> conversationMemberVoList =
imConversationMembersService.getImConversationMembersList(data);
Map<String, List<ConversationMemberVo>> result = new HashMap<>();
result.put("result", conversationMemberVoList);
return WsResponse.ok(result);
}
}
package com.wecloud.im.action;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;
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.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.ImMsgReceivedStatusUpdate;
import com.wecloud.im.param.MsgReadStatusUpdateParam;
import com.wecloud.im.param.UpdateMsgReadStatusByConversationParam;
import com.wecloud.im.service.ImInboxService;
import com.wecloud.im.ws.model.WsResponse;
/**
* @Author luozh
* @Date 2022年04月02日 16:39
* @Version 1.0
*/
@Slf4j
@Component
@ActionMapping(value = "/im/inbox")
@Api(value = "ws-消息收件箱API", tags = {"ws-消息收件箱"})
public class InboxAction {
@Autowired
private ImInboxService imInboxService;
/**
* 消息修改为已接收状态
*/
@ActionMapping("/msgReceivedUpdate")
@ApiOperation(value = "消息修改为已接收状态")
public WsResponse<Map<String, Boolean>> updateImMsgReceived(@Validated ImMsgReceivedStatusUpdate data) throws Exception {
imInboxService.updateImMsgReceived(data);
return WsResponse.ok();
}
/**
* 消息修改为已读状态
*/
@ActionMapping("/msgReadUpdate")
@ApiOperation(value = "消息修改为已读状态")
public WsResponse<Map<String, Boolean>> updateInMsgReadUpdate(MsgReadStatusUpdateParam data) throws Exception {
if (CollectionUtils.isEmpty(data.getMsgIds())) {
return WsResponse.fail(ApiCode.PARAMETER_EXCEPTION);
}
imInboxService.updateImMsgRead(data);
return WsResponse.ok();
}
/**
* 会话消息修改为已读状态
* @return
*/
@ActionMapping("/updateMsgReadStatusByConversation")
@ApiOperation(value = "会话消息修改为已读状态")
public WsResponse<Map<String, Boolean>> updateMsgReadStatusByConversation(UpdateMsgReadStatusByConversationParam data) throws Exception {
if (data.getConversationId() == null) {
return WsResponse.fail(ApiCode.PARAMETER_EXCEPTION);
}
boolean r = imInboxService.updateMsgReadStatusByConversation(data);
Map<String, Boolean> result = new HashMap<>();
result.put("result", r);
return WsResponse.ok(result);
}
}
package com.wecloud.im.action; package com.wecloud.im.action;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.wecloud.dispatch.annotation.ActionMapping; import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.im.param.GetReadersParam; import com.wecloud.im.param.GetReadersParam;
import com.wecloud.im.param.ImHistoryMessagePageParam; import com.wecloud.im.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.MsgDeleteParam; import com.wecloud.im.param.MsgDeleteParam;
...@@ -12,12 +22,6 @@ import com.wecloud.im.service.ImMessageService; ...@@ -12,12 +22,6 @@ import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.vo.OfflineMsgDto; import com.wecloud.im.vo.OfflineMsgDto;
import com.wecloud.im.vo.ReaderList; import com.wecloud.im.vo.ReaderList;
import com.wecloud.im.ws.model.WsResponse; import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.sender.ChannelSender;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.netty.channel.socket.nio.NioSocketChannel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/** /**
* @Author wenzhida * @Author wenzhida
...@@ -26,15 +30,13 @@ import org.springframework.stereotype.Component; ...@@ -26,15 +30,13 @@ import org.springframework.stereotype.Component;
*/ */
@Slf4j @Slf4j
@Component @Component
@ActionMapping(value = "/imMessage") @ActionMapping(value = "/im/message")
@Api(value = "ws-消息API", tags = {"ws-消息"})
public class MessageAction { public class MessageAction {
@Autowired @Autowired
private ImMessageService imMessageService; private ImMessageService imMessageService;
@Autowired
private ChannelSender channelSender;
/** /**
* 消息撤回 * 消息撤回
* @param request * @param request
...@@ -42,11 +44,13 @@ public class MessageAction { ...@@ -42,11 +44,13 @@ public class MessageAction {
* @param reqId * @param reqId
*/ */
@ActionMapping("/withdraw") @ActionMapping("/withdraw")
public void withdraw(ActionRequest request, ImMsgRecall msgRecall, String reqId) { @ApiOperation("消息撤回")
log.info("撤回消息内容:{}", JSON.toJSONString(msgRecall)); public WsResponse<Map<String, Boolean>> withdraw(ImMsgRecall data) {
WsResponse<Boolean> wsResponse = new WsResponse<>(); log.info("撤回消息内容:{}", JSON.toJSONString(data));
wsResponse.setData(imMessageService.withdrawMsg(request, msgRecall)); Boolean r = imMessageService.withdrawMsg(data);
channelSender.sendMsgLocal((NioSocketChannel)request.getSenderChannel(), wsResponse); Map<String, Boolean> result = new HashMap<>();
result.put("result", r);
return WsResponse.ok(result);
} }
/** /**
...@@ -56,11 +60,13 @@ public class MessageAction { ...@@ -56,11 +60,13 @@ public class MessageAction {
* @param reqId * @param reqId
*/ */
@ActionMapping("/delete") @ActionMapping("/delete")
public void deleteMsg(ActionRequest request, MsgDeleteParam msgDeleteParam, String reqId) { @ApiOperation("删除消息内容")
log.info("删除消息内容:{}", JSON.toJSONString(msgDeleteParam)); public WsResponse<Map<String, Boolean>> deleteMsg(MsgDeleteParam data) {
WsResponse<Boolean> wsResponse = new WsResponse<>(); log.info("删除消息内容:{}", JSON.toJSONString(data));
wsResponse.setData(imMessageService.deleteMsg(request, msgDeleteParam)); boolean r = imMessageService.deleteMsg(data);
channelSender.sendMsgLocal((NioSocketChannel)request.getSenderChannel(), wsResponse); Map<String, Boolean> result = new HashMap<>();
result.put("result", r);
return WsResponse.ok(result);
} }
/** /**
...@@ -70,11 +76,13 @@ public class MessageAction { ...@@ -70,11 +76,13 @@ public class MessageAction {
* @param reqId * @param reqId
*/ */
@ActionMapping("/updateMsgById") @ActionMapping("/updateMsgById")
public void updateMsgById(ActionRequest request, ImMsgUpdate imMsgUpdate, String reqId) { @ApiOperation("修改消息体")
log.info("修改消息内容:{}", JSON.toJSONString(imMsgUpdate)); public WsResponse<Map<String, Boolean>> updateMsgById(ImMsgUpdate data) {
WsResponse<Boolean> wsResponse = new WsResponse<>(); log.info("修改消息内容:{}", JSON.toJSONString(data));
wsResponse.setData(imMessageService.updateMsgById(imMsgUpdate)); boolean r = imMessageService.updateMsgById(data);
channelSender.sendMsgLocal((NioSocketChannel)request.getSenderChannel(), wsResponse); Map<String, Boolean> result = new HashMap<>();
result.put("result", r);
return WsResponse.ok(result);
} }
/** /**
...@@ -82,13 +90,13 @@ public class MessageAction { ...@@ -82,13 +90,13 @@ public class MessageAction {
* @param request * @param request
* @param param * @param param
* @param reqId * @param reqId
* @return
*/ */
@ActionMapping("/getHistoryMsg") @ActionMapping("/getHistoryMsg")
public void getHistoryMsg(ActionRequest request, ImHistoryMessagePageParam param, String reqId) { @ApiOperation("查询某个会话历史消息分页列表")
log.info("查询某个会话历史消息分页列表:{}", JSON.toJSONString(param)); public WsResponse<Paging<OfflineMsgDto>> getHistoryMsg(ImHistoryMessagePageParam data) {
WsResponse<Paging<OfflineMsgDto>> wsResponse = new WsResponse<>(); log.info("查询某个会话历史消息分页列表:{}", JSON.toJSONString(data));
wsResponse.setData(imMessageService.getHistoryMsgConversationId(param)); return WsResponse.ok(imMessageService.getHistoryMsgConversationId(data));
channelSender.sendMsgLocal((NioSocketChannel)request.getSenderChannel(), wsResponse);
} }
/** /**
...@@ -96,13 +104,13 @@ public class MessageAction { ...@@ -96,13 +104,13 @@ public class MessageAction {
* @param request * @param request
* @param param * @param param
* @param reqId * @param reqId
* @return
*/ */
@ActionMapping("/getReaders") @ActionMapping("/getReaders")
public void getReaders(ActionRequest request, GetReadersParam param, String reqId) { @ApiOperation("查询某个消息已读client列表和未读client")
log.info("查询某个消息已读client列表和未读client:{}", JSON.toJSONString(param)); public WsResponse<ReaderList> getReaders(GetReadersParam data) {
WsResponse<ReaderList> wsResponse = new WsResponse<>(); log.info("查询某个消息已读client列表和未读client:{}", JSON.toJSONString(data));
wsResponse.setData(imMessageService.getReaders(request, param)); return WsResponse.ok(imMessageService.getReaders(data));
channelSender.sendMsgLocal((NioSocketChannel)request.getSenderChannel(), wsResponse);
} }
} }
package com.wecloud.im.action;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
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.AgreeToMultiMeetParam;
import com.wecloud.im.param.HeartbeatMultiMeetParam;
import com.wecloud.im.param.InviteToMultiMeetParam;
import com.wecloud.im.param.LeaveFromMultiMeetParam;
import com.wecloud.im.param.NotAnsweredMultiMeetParam;
import com.wecloud.im.param.RejectToMultiMeetParam;
import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.multimeet.service.MultiMeetService;
@Slf4j
@Component
@ActionMapping(value = "/im/multiMeet")
@Api(value = "ws-多人音视频通话", tags = {"ws-多人音视频通话"})
public class MultiMeetAction {
@Autowired
private MultiMeetService multiMeetService;
/**
* 邀请客户端加入
* @return
*/
@ActionMapping("/invite")
@ApiOperation(value = "邀请加入多人音视频会议", notes = "邀请加入多人音视频会议")
public WsResponse<Map<String, Boolean>> invite(@Validated InviteToMultiMeetParam data) {
log.info("邀请加入多人音视频会议入参 {}", JSON.toJSONString(data));
if (CollectionUtils.isEmpty(data.getToClients())) {
return WsResponse.fail(ApiCode.PARAMETER_EXCEPTION);
}
multiMeetService.invite(data);
return WsResponse.ok();
}
@ActionMapping("/reject")
@ApiOperation(value = "拒接进入会议", notes = "拒接进入会议")
public WsResponse<Map<String, Boolean>> reject(RejectToMultiMeetParam data) {
log.info("拒绝加入多人音视频会议入参 {}", JSON.toJSONString(data));
multiMeetService.reject(data);
return WsResponse.ok();
}
@ActionMapping("/agree")
@ApiOperation(value = "同意进入会议", notes = "同意进入会议")
public WsResponse<Map<String, Boolean>> agree(AgreeToMultiMeetParam data) {
log.info("同意进入多人音视频会议入参 {}", JSON.toJSONString(data));
multiMeetService.agree(data);
return WsResponse.ok();
}
@ActionMapping("/leave")
@ApiOperation(value = "主动挂断(离开会议)", notes = "主动挂断(离开会议)")
public WsResponse<Map<String, Boolean>> leave(LeaveFromMultiMeetParam data) {
log.info("主动挂断多人音视频会议入参 {}", JSON.toJSONString(data));
multiMeetService.leave(data);
return WsResponse.ok();
}
@ActionMapping("/notAnswered")
@ApiOperation(value = "未接听", notes = "未接听")
public WsResponse<Map<String, Boolean>> notAnswered(NotAnsweredMultiMeetParam data) {
log.info("多人音视频会议未接听入参 {}", JSON.toJSONString(data));
multiMeetService.notAnswered(data);
return WsResponse.ok();
}
@ActionMapping("/heartbeat")
@ApiOperation(value = "发送心跳", notes = "发送心跳")
public WsResponse<Map<String, Boolean>> heartbeat(HeartbeatMultiMeetParam data) {
multiMeetService.heartbeat(data);
return WsResponse.ok();
}
}
package com.wecloud.im.action; package com.wecloud.im.action;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.netty.channel.Channel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
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.stereotype.Component;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.wecloud.dispatch.annotation.ActionMapping; import com.wecloud.dispatch.annotation.ActionMapping;
...@@ -11,13 +29,13 @@ import com.wecloud.im.entity.ImConversationMembers; ...@@ -11,13 +29,13 @@ import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.entity.ImInbox; import com.wecloud.im.entity.ImInbox;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.entity.ImMessage;
import com.wecloud.im.entity.ImMessageOnlineSend; import com.wecloud.im.entity.ImMessageOnlineSend;
import com.wecloud.im.enums.GroupRoleEnum;
import com.wecloud.im.enums.MutedEnum;
import com.wecloud.im.mq.MqSender; import com.wecloud.im.mq.MqSender;
import com.wecloud.im.param.ChatContentVo; import com.wecloud.im.param.ChatContentVo;
import com.wecloud.im.param.ImClientSimpleDto; import com.wecloud.im.param.ImClientSimpleDto;
import com.wecloud.im.param.ImConversationQueryVo; import com.wecloud.im.param.ImConversationQueryVo;
import com.wecloud.im.param.MsgVo; import com.wecloud.im.param.MsgVo;
import com.wecloud.im.sdk.enums.GroupRoleEnum;
import com.wecloud.im.sdk.enums.MutedEnum;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientBlacklistService; import com.wecloud.im.service.ImClientBlacklistService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
...@@ -32,30 +50,16 @@ import com.wecloud.pushserver.client.model.constant.MqConstant; ...@@ -32,30 +50,16 @@ import com.wecloud.pushserver.client.model.constant.MqConstant;
import com.wecloud.pushserver.client.model.dto.PushDTO; import com.wecloud.pushserver.client.model.dto.PushDTO;
import com.wecloud.utils.JsonUtils; import com.wecloud.utils.JsonUtils;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.netty.channel.Channel;
import io.netty.channel.socket.nio.NioSocketChannel;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* @Description 处理Cmd请求 * @Description 普通聊天
* 抽象类 策略设计模式 * @Author lixiaozhong
* @Author hewei hwei1233@163.com * @Date 2022-01-27
* @Date 2020-01-02
*/ */
@Slf4j @Slf4j
@Component @Component
@ActionMapping(value = "/chat") @ActionMapping(value = "/chat")
@Api(value = "ws-普通聊天", tags = {"ws-普通聊天"})
public class NormalChatAction { public class NormalChatAction {
@Autowired @Autowired
...@@ -78,6 +82,7 @@ public class NormalChatAction { ...@@ -78,6 +82,7 @@ public class NormalChatAction {
private MqSender mqSender; private MqSender mqSender;
@ActionMapping("/normal/send") @ActionMapping("/normal/send")
@ApiOperation("普通消息发送")
public void sendMsg(ActionRequest request, ChatContentVo data, String reqId) { public void sendMsg(ActionRequest request, ChatContentVo data, String reqId) {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("接收到参数,reqId: {},\n data: {}, ", reqId, data); log.debug("接收到参数,reqId: {},\n data: {}, ", reqId, data);
......
package com.wecloud.im.action;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.rtc.CandidateForwardParam;
import com.wecloud.im.param.rtc.CreateRtcChannelParam;
import com.wecloud.im.param.rtc.CreateRtcChannelResult;
import com.wecloud.im.param.rtc.JoinRtcChannelParam;
import com.wecloud.im.param.rtc.LeaveRtcChannelParam;
import com.wecloud.im.param.rtc.RejectRtcChannelParam;
import com.wecloud.im.param.rtc.SdpForwardParam;
import com.wecloud.im.sdk.enums.CallTypeEnum;
import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.rtc.service.RtcService;
@Slf4j
@Component
@ActionMapping(value = "/im/rtc")
@Api(value = "ws-音视频通话", tags = {"ws-音视频通话"})
public class RtcAction {
@Autowired
private RtcService rtcService;
/**
* 创建频道,并邀请客户端加入
*/
@ActionMapping("/createAndCall")
@ApiOperation(value = "创建频道,并邀请客户端加入", notes = "创建频道,并邀请客户端加入")
public WsResponse<CreateRtcChannelResult> createAndCall(CreateRtcChannelParam data) {
if (BaseEnum.valueOf(CallTypeEnum.class, data.getCallType()) == null) {
return WsResponse.fail(ApiCode.PARAMETER_EXCEPTION);
}
return WsResponse.ok(rtcService.createAndCall(data));
}
@ActionMapping("/join")
@ApiOperation(value = "同意进入频道", notes = "")
public WsResponse<Map<String, Boolean>> join(JoinRtcChannelParam data) {
rtcService.join(data);
return WsResponse.ok();
}
@ActionMapping("/reject")
@ApiOperation(value = "拒接进入频道", notes = "")
public WsResponse<Map<String, Boolean>> reject(RejectRtcChannelParam data) {
rtcService.reject(data);
return WsResponse.ok();
}
@ActionMapping("/leave")
@ApiOperation(value = "主动挂断(离开频道)", notes = "")
public WsResponse<Map<String, Boolean>> leave(LeaveRtcChannelParam data) {
rtcService.leave(data);
return WsResponse.ok();
}
@ActionMapping("/sdpForward")
@ApiOperation(value = "SDP数据转发", notes = "")
public WsResponse<Map<String, Boolean>> sdpForward(SdpForwardParam data) {
rtcService.sdpForward(data);
return WsResponse.ok();
}
@ActionMapping("/candidateForward")
@ApiOperation(value = "candidate候选者数据转发", notes = "")
public WsResponse<Map<String, Boolean>> candidateForward(CandidateForwardParam data) {
rtcService.candidateForward(data);
return WsResponse.ok();
}
}
package com.wecloud.im.controller; package com.wecloud.im.controller;
import com.wecloud.im.param.ImClientBlacklistPageParam;
import com.wecloud.im.param.ImClientBlacklistQueryVo;
import com.wecloud.im.param.add.ImClientBlacklistUpdate;
import com.wecloud.im.service.ImClientBlacklistService;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController; import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.geekidea.springbootplus.framework.core.pagination.Paging; import io.geekidea.springbootplus.framework.core.pagination.Paging;
...@@ -13,6 +9,7 @@ import io.geekidea.springbootplus.framework.log.enums.OperationLogType; ...@@ -13,6 +9,7 @@ import io.geekidea.springbootplus.framework.log.enums.OperationLogType;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
...@@ -20,6 +17,11 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -20,6 +17,11 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.wecloud.im.param.ImClientBlacklistPageParam;
import com.wecloud.im.param.ImClientBlacklistQueryVo;
import com.wecloud.im.param.add.ImClientBlacklistUpdate;
import com.wecloud.im.service.ImClientBlacklistService;
/** /**
* 黑名单 控制器 * 黑名单 控制器
* *
...@@ -41,7 +43,8 @@ public class ImClientBlacklistController extends BaseController { ...@@ -41,7 +43,8 @@ public class ImClientBlacklistController extends BaseController {
@PostMapping("/add") @PostMapping("/add")
@ApiOperation(value = "拉入黑名单") @ApiOperation(value = "拉入黑名单")
public ApiResult<Boolean> addImClientBlacklist(@Validated(Add.class) @RequestBody ImClientBlacklistUpdate imClientBlacklistUpdate) throws Exception { public ApiResult<Boolean> addImClientBlacklist(@Validated(Add.class) @RequestBody ImClientBlacklistUpdate imClientBlacklistUpdate) throws Exception {
return imClientBlacklistService.addImClientBlacklist(imClientBlacklistUpdate); imClientBlacklistService.addImClientBlacklist(imClientBlacklistUpdate);
return ApiResult.ok();
} }
...@@ -51,7 +54,8 @@ public class ImClientBlacklistController extends BaseController { ...@@ -51,7 +54,8 @@ public class ImClientBlacklistController extends BaseController {
@PostMapping("/delete") @PostMapping("/delete")
@ApiOperation(value = "移出黑名单") @ApiOperation(value = "移出黑名单")
public ApiResult<Boolean> deleteImClientBlacklist(@RequestBody ImClientBlacklistUpdate imClientBlacklistUpdate) throws Exception { public ApiResult<Boolean> deleteImClientBlacklist(@RequestBody ImClientBlacklistUpdate imClientBlacklistUpdate) throws Exception {
return imClientBlacklistService.removeImClientBlacklist(imClientBlacklistUpdate); imClientBlacklistService.removeImClientBlacklist(imClientBlacklistUpdate);
return ApiResult.ok();
} }
/** /**
...@@ -61,7 +65,9 @@ public class ImClientBlacklistController extends BaseController { ...@@ -61,7 +65,9 @@ public class ImClientBlacklistController extends BaseController {
@OperationLog(name = "黑名单分页列表", type = OperationLogType.PAGE) @OperationLog(name = "黑名单分页列表", type = OperationLogType.PAGE)
@ApiOperation(value = "黑名单分页列表") @ApiOperation(value = "黑名单分页列表")
public ApiResult<Paging<ImClientBlacklistQueryVo>> getImClientBlacklistPageList(@RequestBody ImClientBlacklistPageParam imClientBlacklistPageParam) throws Exception { public ApiResult<Paging<ImClientBlacklistQueryVo>> getImClientBlacklistPageList(@RequestBody ImClientBlacklistPageParam imClientBlacklistPageParam) throws Exception {
return imClientBlacklistService.getImClientBlacklistPageList(imClientBlacklistPageParam); Paging<ImClientBlacklistQueryVo> blacklist =
imClientBlacklistService.getImClientBlacklistPageList(imClientBlacklistPageParam);
return ApiResult.ok(blacklist);
} }
} }
......
package com.wecloud.im.controller; 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.geekidea.springbootplus.framework.core.validator.groups.Add;
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;
import java.util.ArrayList;
import java.util.List;
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.alibaba.fastjson.JSON;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
...@@ -18,24 +38,6 @@ import com.wecloud.im.vo.GetInfoListVo; ...@@ -18,24 +38,6 @@ import com.wecloud.im.vo.GetInfoListVo;
import com.wecloud.im.vo.ImOnlineStatusVo; import com.wecloud.im.vo.ImOnlineStatusVo;
import com.wecloud.im.vo.MyInfoVo; import com.wecloud.im.vo.MyInfoVo;
import com.wecloud.im.ws.cache.UserStateCacheManager; import com.wecloud.im.ws.cache.UserStateCacheManager;
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.geekidea.springbootplus.framework.core.validator.groups.Add;
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;
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.ArrayList;
import java.util.List;
/** /**
* 终端表 控制器 * 终端表 控制器
...@@ -72,7 +74,7 @@ public class ImClientController extends BaseController { ...@@ -72,7 +74,7 @@ public class ImClientController extends BaseController {
@PostMapping("/infoList") @PostMapping("/infoList")
@ApiOperation(value = "根据id获取Client的头像昵称") @ApiOperation(value = "根据id获取Client的头像昵称")
public ApiResult<List<GetInfoListVo>> getInfoList(@Validated(Add.class) @RequestBody GetClientInfoParam getClientInfoParam) throws Exception { public ApiResult<List<GetInfoListVo>> getInfoList(@Validated(Add.class) @RequestBody GetClientInfoParam getClientInfoParam) throws Exception {
return imClientService.getInfoList(getClientInfoParam); return ApiResult.ok(imClientService.getInfoList(getClientInfoParam));
} }
/** /**
...@@ -81,7 +83,7 @@ public class ImClientController extends BaseController { ...@@ -81,7 +83,7 @@ public class ImClientController extends BaseController {
@PostMapping("/clientInfo") @PostMapping("/clientInfo")
@ApiOperation(value = "查询用户信息 用户可能是好友、陌生人、被拉黑名单的人") @ApiOperation(value = "查询用户信息 用户可能是好友、陌生人、被拉黑名单的人")
public ApiResult<ClientInfoVo> getClientInfo(@RequestBody ClientInfoParam param) { public ApiResult<ClientInfoVo> getClientInfo(@RequestBody ClientInfoParam param) {
if(param == null) { if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null); return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
} }
ClientInfoVo clientInfoVo = imClientService.getClientInfo(param); ClientInfoVo clientInfoVo = imClientService.getClientInfo(param);
......
package com.wecloud.im.controller; 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.alibaba.fastjson.JSON;
import com.wecloud.im.param.DisbandConversationParam; import com.wecloud.im.param.DisbandConversationParam;
import com.wecloud.im.param.ImConversationQueryParam; import com.wecloud.im.param.ImConversationQueryParam;
...@@ -16,21 +33,6 @@ import com.wecloud.im.param.add.ImConversationNameUpdate; ...@@ -16,21 +33,6 @@ import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.service.ImConversationService; import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.vo.ConversationVo; import com.wecloud.im.vo.ConversationVo;
import com.wecloud.im.vo.ImConversationCreateVo; 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 { ...@@ -78,7 +80,7 @@ public class ImConversationController extends BaseController {
@ApiOperation(value = "client退出会话", notes = "若是创建者退出,[创建者]权限将会转移给按加入会话时间排序的下一个client") @ApiOperation(value = "client退出会话", notes = "若是创建者退出,[创建者]权限将会转移给按加入会话时间排序的下一个client")
public ApiResult<Boolean> leaveConversation(@RequestBody ImClientLeaveConversation imClientToConversation) { public ApiResult<Boolean> leaveConversation(@RequestBody ImClientLeaveConversation imClientToConversation) {
log.info("client退出会话入参 {}", JSON.toJSONString(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 { ...@@ -89,7 +91,7 @@ public class ImConversationController extends BaseController {
@ApiOperation(value = "将client从会话移除", notes = "权限:目前只有群主有权限操作") @ApiOperation(value = "将client从会话移除", notes = "权限:目前只有群主有权限操作")
public ApiResult<Boolean> delClientToConversation(@RequestBody ImClientToConversation imClientToConversation) throws Exception { public ApiResult<Boolean> delClientToConversation(@RequestBody ImClientToConversation imClientToConversation) throws Exception {
log.info("将client从会话移除入参 {}", JSON.toJSONString(imClientToConversation)); 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 { ...@@ -111,7 +113,7 @@ public class ImConversationController extends BaseController {
@ApiOperation(value = "将用户添加进会话", notes = "权限:会话中所有client都有权限操作") @ApiOperation(value = "将用户添加进会话", notes = "权限:会话中所有client都有权限操作")
public ApiResult<Boolean> addClientToConversation(@RequestBody ImClientToConversation imClientToConversation) throws Exception { public ApiResult<Boolean> addClientToConversation(@RequestBody ImClientToConversation imClientToConversation) throws Exception {
log.info("将用户添加进会话入参 {}", JSON.toJSONString(imClientToConversation)); log.info("将用户添加进会话入参 {}", JSON.toJSONString(imClientToConversation));
return imConversationService.addClientToConversation(imClientToConversation); return ApiResult.ok(imConversationService.addClientToConversation(imClientToConversation));
} }
/** /**
...@@ -121,7 +123,7 @@ public class ImConversationController extends BaseController { ...@@ -121,7 +123,7 @@ public class ImConversationController extends BaseController {
@ApiOperation(value = "创建会话", notes = "后台可配置:两个客户端如果已经创建过会话,是否重复创建会话") @ApiOperation(value = "创建会话", notes = "后台可配置:两个客户端如果已经创建过会话,是否重复创建会话")
public ApiResult<ImConversationCreateVo> createImConversation(@RequestBody ImConversationCreate imConversationCreate) throws Exception { public ApiResult<ImConversationCreateVo> createImConversation(@RequestBody ImConversationCreate imConversationCreate) throws Exception {
log.info("创建会话入参 {}", JSON.toJSONString(imConversationCreate)); log.info("创建会话入参 {}", JSON.toJSONString(imConversationCreate));
return imConversationService.createImConversation(imConversationCreate); return ApiResult.ok(imConversationService.createImConversation(imConversationCreate));
} }
/** /**
......
...@@ -51,7 +51,12 @@ public class ImConversationMembersController extends BaseController { ...@@ -51,7 +51,12 @@ public class ImConversationMembersController extends BaseController {
@PostMapping("/updateAttr") @PostMapping("/updateAttr")
@ApiOperation(value = "添加或修改会话成员拓展字段", notes = "权限:目前只有client成员自己有权限操作") @ApiOperation(value = "添加或修改会话成员拓展字段", notes = "权限:目前只有client成员自己有权限操作")
public ApiResult<Boolean> saveOrUpdateAttr(@RequestBody ImConversationMemAttrUpdate imConversationMemAttrUpdate) throws Exception { public ApiResult<Boolean> saveOrUpdateAttr(@RequestBody ImConversationMemAttrUpdate imConversationMemAttrUpdate) throws Exception {
return imConversationMembersService.saveOrUpdateAttr(imConversationMemAttrUpdate); boolean r = imConversationMembersService.saveOrUpdateAttr(imConversationMemAttrUpdate);
if (r) {
return ApiResult.ok();
} else {
return ApiResult.fail();
}
} }
......
...@@ -39,7 +39,8 @@ public class ImInboxController extends BaseController { ...@@ -39,7 +39,8 @@ public class ImInboxController extends BaseController {
@PostMapping("/msgReceivedUpdate") @PostMapping("/msgReceivedUpdate")
@ApiOperation(value = "消息修改为已接收状态") @ApiOperation(value = "消息修改为已接收状态")
public ApiResult<Boolean> updateImMsgReceived(@RequestBody @Validated ImMsgReceivedStatusUpdate imMsgReceivedUpdate) throws Exception { public ApiResult<Boolean> updateImMsgReceived(@RequestBody @Validated ImMsgReceivedStatusUpdate imMsgReceivedUpdate) throws Exception {
return imInboxService.updateImMsgReceived(imMsgReceivedUpdate); imInboxService.updateImMsgReceived(imMsgReceivedUpdate);
return ApiResult.ok();
} }
/** /**
...@@ -51,7 +52,8 @@ public class ImInboxController extends BaseController { ...@@ -51,7 +52,8 @@ public class ImInboxController extends BaseController {
if (CollectionUtils.isEmpty(msgReadStatusUpdateParam.getMsgIds())) { if (CollectionUtils.isEmpty(msgReadStatusUpdateParam.getMsgIds())) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION); return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION);
} }
return imInboxService.updateImMsgRead(msgReadStatusUpdateParam); imInboxService.updateImMsgRead(msgReadStatusUpdateParam);
return ApiResult.ok();
} }
/** /**
......
package com.wecloud.im.controller; package com.wecloud.im.controller;
import com.wecloud.im.param.GetReadersParam;
import com.wecloud.im.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.MsgDeleteParam;
import com.wecloud.im.param.add.ImMsgRecall;
import com.wecloud.im.param.add.ImMsgUpdate;
import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.vo.ImMessageOfflineListVo;
import com.wecloud.im.vo.OfflineMsgDto;
import com.wecloud.im.vo.ReaderList;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController; import io.geekidea.springbootplus.framework.common.controller.BaseController;
...@@ -18,6 +9,9 @@ import io.geekidea.springbootplus.framework.log.enums.OperationLogType; ...@@ -18,6 +9,9 @@ import io.geekidea.springbootplus.framework.log.enums.OperationLogType;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -26,7 +20,15 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -26,7 +20,15 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List; import com.wecloud.im.param.GetReadersParam;
import com.wecloud.im.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.MsgDeleteParam;
import com.wecloud.im.param.add.ImMsgRecall;
import com.wecloud.im.param.add.ImMsgUpdate;
import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.vo.ImMessageOfflineListVo;
import com.wecloud.im.vo.OfflineMsgDto;
import com.wecloud.im.vo.ReaderList;
/** /**
* 消息存储表 控制器 * 消息存储表 控制器
...@@ -49,7 +51,7 @@ public class ImMessageController extends BaseController { ...@@ -49,7 +51,7 @@ public class ImMessageController extends BaseController {
@PostMapping("/withdraw") @PostMapping("/withdraw")
@ApiOperation(value = "消息撤回", notes = "只能撤回客户端自己发送的消息") @ApiOperation(value = "消息撤回", notes = "只能撤回客户端自己发送的消息")
public ApiResult<Boolean> withdrawMsg(@RequestBody ImMsgRecall imMsgRecall) throws Exception { public ApiResult<Boolean> withdrawMsg(@RequestBody ImMsgRecall imMsgRecall) throws Exception {
return ApiResult.ok(imMessageService.withdrawMsg(null, imMsgRecall)); return ApiResult.ok(imMessageService.withdrawMsg(imMsgRecall));
} }
/** /**
...@@ -64,7 +66,7 @@ public class ImMessageController extends BaseController { ...@@ -64,7 +66,7 @@ public class ImMessageController extends BaseController {
if (CollectionUtils.isEmpty(param.getMsgIds())) { if (CollectionUtils.isEmpty(param.getMsgIds())) {
return ApiResult.fail("请选择要删除的消息id"); return ApiResult.fail("请选择要删除的消息id");
} }
return ApiResult.ok(imMessageService.deleteMsg(null, param)); return ApiResult.ok(imMessageService.deleteMsg(param));
} }
/** /**
...@@ -103,7 +105,7 @@ public class ImMessageController extends BaseController { ...@@ -103,7 +105,7 @@ public class ImMessageController extends BaseController {
@PostMapping("/getReaders") @PostMapping("/getReaders")
@ApiOperation(value = "查询某个消息已读client列表和未读client") @ApiOperation(value = "查询某个消息已读client列表和未读client")
public ApiResult<ReaderList> getReaders(@Validated @RequestBody GetReadersParam param) { public ApiResult<ReaderList> getReaders(@Validated @RequestBody GetReadersParam param) {
ReaderList readerList = imMessageService.getReaders(null, param); ReaderList readerList = imMessageService.getReaders(param);
return ApiResult.ok(readerList); return ApiResult.ok(readerList);
} }
......
...@@ -2,8 +2,10 @@ package com.wecloud.im.controller; ...@@ -2,8 +2,10 @@ package com.wecloud.im.controller;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.wecloud.im.param.AgreeToMultiMeetParam; import com.wecloud.im.param.AgreeToMultiMeetParam;
import com.wecloud.im.param.HeartbeatMultiMeetParam;
import com.wecloud.im.param.InviteToMultiMeetParam; import com.wecloud.im.param.InviteToMultiMeetParam;
import com.wecloud.im.param.LeaveFromMultiMeetParam; import com.wecloud.im.param.LeaveFromMultiMeetParam;
import com.wecloud.im.param.NotAnsweredMultiMeetParam;
import com.wecloud.im.param.RejectToMultiMeetParam; import com.wecloud.im.param.RejectToMultiMeetParam;
import com.wecloud.multimeet.service.MultiMeetService; import com.wecloud.multimeet.service.MultiMeetService;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
...@@ -59,6 +61,7 @@ public class ImMultiMeetController extends BaseController { ...@@ -59,6 +61,7 @@ public class ImMultiMeetController extends BaseController {
@PostMapping("/agree") @PostMapping("/agree")
@ApiOperation(value = "同意进入会议", notes = "同意进入会议") @ApiOperation(value = "同意进入会议", notes = "同意进入会议")
public ApiResult<Boolean> agree(@RequestBody AgreeToMultiMeetParam param) { public ApiResult<Boolean> agree(@RequestBody AgreeToMultiMeetParam param) {
log.info("同意进入多人音视频会议入参 {}", JSON.toJSONString(param));
multiMeetService.agree(param); multiMeetService.agree(param);
return ApiResult.ok(); return ApiResult.ok();
} }
...@@ -66,9 +69,25 @@ public class ImMultiMeetController extends BaseController { ...@@ -66,9 +69,25 @@ public class ImMultiMeetController extends BaseController {
@PostMapping("/leave") @PostMapping("/leave")
@ApiOperation(value = "主动挂断(离开会议)", notes = "主动挂断(离开会议)") @ApiOperation(value = "主动挂断(离开会议)", notes = "主动挂断(离开会议)")
public ApiResult<Boolean> leave(@RequestBody LeaveFromMultiMeetParam param) { public ApiResult<Boolean> leave(@RequestBody LeaveFromMultiMeetParam param) {
log.info("主动挂断多人音视频会议入参 {}", JSON.toJSONString(param));
multiMeetService.leave(param); multiMeetService.leave(param);
return ApiResult.ok(); return ApiResult.ok();
} }
@PostMapping("/notAnswered")
@ApiOperation(value = "未接听", notes = "未接听")
public ApiResult<Boolean> notAnswered(@RequestBody NotAnsweredMultiMeetParam param) {
log.info("多人音视频会议未接听入参 {}", JSON.toJSONString(param));
multiMeetService.notAnswered(param);
return ApiResult.ok();
}
@PostMapping("/heartbeat")
@ApiOperation(value = "发送心跳", notes = "发送心跳")
public ApiResult<Boolean> heartbeat(@RequestBody HeartbeatMultiMeetParam param) {
multiMeetService.heartbeat(param);
return ApiResult.ok();
}
} }
package com.wecloud.im.controller; package com.wecloud.im.controller;
import com.wecloud.im.enums.CallTypeEnum;
import com.wecloud.im.param.rtc.CandidateForwardParam;
import com.wecloud.im.param.rtc.CreateRtcChannelParam;
import com.wecloud.im.param.rtc.CreateRtcChannelResult;
import com.wecloud.im.param.rtc.JoinRtcChannelParam;
import com.wecloud.im.param.rtc.LeaveRtcChannelParam;
import com.wecloud.im.param.rtc.RejectRtcChannelParam;
import com.wecloud.im.param.rtc.SdpForwardParam;
import com.wecloud.rtc.service.RtcService;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController; import io.geekidea.springbootplus.framework.common.controller.BaseController;
...@@ -16,12 +7,23 @@ import io.geekidea.springbootplus.framework.common.enums.BaseEnum; ...@@ -16,12 +7,23 @@ import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.wecloud.im.param.rtc.CandidateForwardParam;
import com.wecloud.im.param.rtc.CreateRtcChannelParam;
import com.wecloud.im.param.rtc.CreateRtcChannelResult;
import com.wecloud.im.param.rtc.JoinRtcChannelParam;
import com.wecloud.im.param.rtc.LeaveRtcChannelParam;
import com.wecloud.im.param.rtc.RejectRtcChannelParam;
import com.wecloud.im.param.rtc.SdpForwardParam;
import com.wecloud.im.sdk.enums.CallTypeEnum;
import com.wecloud.rtc.service.RtcService;
/** /**
* 音视频通话 控制器 * 音视频通话 控制器
* *
...@@ -46,41 +48,46 @@ public class ImRtcController extends BaseController { ...@@ -46,41 +48,46 @@ public class ImRtcController extends BaseController {
if (BaseEnum.valueOf(CallTypeEnum.class, createRtcChannelParam.getCallType()) == null) { if (BaseEnum.valueOf(CallTypeEnum.class, createRtcChannelParam.getCallType()) == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null); return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
} }
return rtcService.createAndCall(createRtcChannelParam); return ApiResult.ok(rtcService.createAndCall(createRtcChannelParam));
} }
@PostMapping("/join") @PostMapping("/join")
@ApiOperation(value = "同意进入频道", notes = "") @ApiOperation(value = "同意进入频道", notes = "")
public ApiResult<Boolean> join(@RequestBody JoinRtcChannelParam joinRtcChannelParam) { public ApiResult<Boolean> join(@RequestBody JoinRtcChannelParam joinRtcChannelParam) {
return rtcService.join(joinRtcChannelParam); rtcService.join(joinRtcChannelParam);
return ApiResult.ok();
} }
@PostMapping("/reject") @PostMapping("/reject")
@ApiOperation(value = "拒接进入频道", notes = "") @ApiOperation(value = "拒接进入频道", notes = "")
public ApiResult<Boolean> reject(@RequestBody RejectRtcChannelParam rejectRtcChannelParam) { public ApiResult<Boolean> reject(@RequestBody RejectRtcChannelParam rejectRtcChannelParam) {
return rtcService.reject(rejectRtcChannelParam); rtcService.reject(rejectRtcChannelParam);
return ApiResult.ok();
} }
@PostMapping("/leave") @PostMapping("/leave")
@ApiOperation(value = "主动挂断(离开频道)", notes = "") @ApiOperation(value = "主动挂断(离开频道)", notes = "")
public ApiResult<Boolean> leave(@RequestBody LeaveRtcChannelParam leaveRtcChannelParam) { public ApiResult<Boolean> leave(@RequestBody LeaveRtcChannelParam leaveRtcChannelParam) {
return rtcService.leave(leaveRtcChannelParam); rtcService.leave(leaveRtcChannelParam);
return ApiResult.ok();
} }
@PostMapping("/sdpForward") @PostMapping("/sdpForward")
@ApiOperation(value = "SDP数据转发", notes = "") @ApiOperation(value = "SDP数据转发", notes = "")
public ApiResult<Boolean> sdpForward(@RequestBody SdpForwardParam sdpForwardParam) { public ApiResult<Boolean> sdpForward(@RequestBody SdpForwardParam sdpForwardParam) {
return rtcService.sdpForward(sdpForwardParam); rtcService.sdpForward(sdpForwardParam);
return ApiResult.ok();
} }
@PostMapping("/candidateForward") @PostMapping("/candidateForward")
@ApiOperation(value = "candidate候选者数据转发", notes = "") @ApiOperation(value = "candidate候选者数据转发", notes = "")
public ApiResult<Boolean> candidateForward(@RequestBody CandidateForwardParam candidateForwardParam) { public ApiResult<Boolean> candidateForward(@RequestBody CandidateForwardParam candidateForwardParam) {
return rtcService.candidateForward(candidateForwardParam); rtcService.candidateForward(candidateForwardParam);
return ApiResult.ok();
} }
......
package com.wecloud.im.entity; package com.wecloud.im.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity; import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -9,9 +7,13 @@ import lombok.Data; ...@@ -9,9 +7,13 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.util.Date; import java.util.Date;
import javax.validation.constraints.NotNull;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
/** /**
* 会话表 * 会话表
* *
...@@ -64,7 +66,7 @@ public class ImConversation extends BaseEntity { ...@@ -64,7 +66,7 @@ public class ImConversation extends BaseEntity {
/** /**
* 禁言开关 * 禁言开关
* @see com.wecloud.im.enums.MutedEnum * @see com.wecloud.im.sdk.enums.MutedEnum
*/ */
@ApiModelProperty("禁言开关 1-未禁言 2-禁言") @ApiModelProperty("禁言开关 1-未禁言 2-禁言")
private Integer muted; private Integer muted;
......
package com.wecloud.im.entity; package com.wecloud.im.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity; import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -9,9 +7,13 @@ import lombok.Data; ...@@ -9,9 +7,13 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.util.Date; import java.util.Date;
import javax.validation.constraints.NotNull;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
/** /**
* 会话成员表 * 会话成员表
* *
...@@ -60,14 +62,14 @@ public class ImConversationMembers extends BaseEntity { ...@@ -60,14 +62,14 @@ public class ImConversationMembers extends BaseEntity {
/** /**
* 群内角色 * 群内角色
* @see com.wecloud.im.enums.GroupRoleEnum * @see com.wecloud.im.sdk.enums.GroupRoleEnum
*/ */
@ApiModelProperty("群内角色") @ApiModelProperty("群内角色")
private Integer role; private Integer role;
/** /**
* 禁言开关 * 禁言开关
* @see com.wecloud.im.enums.MutedEnum * @see com.wecloud.im.sdk.enums.MutedEnum
*/ */
@ApiModelProperty("禁言开关 1-未禁言 2-禁言") @ApiModelProperty("禁言开关 1-未禁言 2-禁言")
private Integer muted; private Integer muted;
......
package com.wecloud.im.entity; package com.wecloud.im.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity; import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -9,9 +7,13 @@ import lombok.Data; ...@@ -9,9 +7,13 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.util.Date; import java.util.Date;
import javax.validation.constraints.NotNull;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/3/15 23:09 * @Date 2022/3/15 23:09
...@@ -38,7 +40,7 @@ public class ImMultiRtcRoom extends BaseEntity { ...@@ -38,7 +40,7 @@ public class ImMultiRtcRoom extends BaseEntity {
/** /**
* 多人音视频房间状态枚举 * 多人音视频房间状态枚举
* @see com.wecloud.im.enums.MultiRtcRoomStateEnum * @see com.wecloud.im.sdk.enums.MultiRtcRoomStateEnum
*/ */
@ApiModelProperty("房间状态,1:已创建,2:会议中,3:会议结束") @ApiModelProperty("房间状态,1:已创建,2:会议中,3:会议结束")
private Integer state; private Integer state;
......
package com.wecloud.im.entity; package com.wecloud.im.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity; import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -9,9 +7,13 @@ import lombok.Data; ...@@ -9,9 +7,13 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.util.Date; import java.util.Date;
import javax.validation.constraints.NotNull;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/3/15 23:09 * @Date 2022/3/15 23:09
...@@ -44,7 +46,7 @@ public class ImMultiRtcRoomMember extends BaseEntity { ...@@ -44,7 +46,7 @@ public class ImMultiRtcRoomMember extends BaseEntity {
/** /**
* 多人音视频房间成员状态枚举 * 多人音视频房间成员状态枚举
* @see com.wecloud.im.enums.MultiRtcMemberStateEnum * @see com.wecloud.im.sdk.enums.MultiRtcMemberStateEnum
*/ */
@ApiModelProperty("房间成员状态,1:呼叫中,2:已接听,3:已拒绝,4:未接听,5:已断开") @ApiModelProperty("房间成员状态,1:呼叫中,2:已接听,3:已拒绝,4:未接听,5:已断开")
private Integer state; private Integer state;
...@@ -52,6 +54,9 @@ public class ImMultiRtcRoomMember extends BaseEntity { ...@@ -52,6 +54,9 @@ public class ImMultiRtcRoomMember extends BaseEntity {
@ApiModelProperty("呼叫时间") @ApiModelProperty("呼叫时间")
private Date callTime; private Date callTime;
@ApiModelProperty("心跳时间")
private Date heartbeatTime;
@ApiModelProperty("创建时间") @ApiModelProperty("创建时间")
private Date createTime; private Date createTime;
......
package com.wecloud.im.externalaccess.controller; package com.wecloud.im.externalaccess.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.im.enums.VerifySceneEnum;
import com.wecloud.im.constant.RedisKeyPrefixConstant;
import com.wecloud.im.externalaccess.entity.User;
import com.wecloud.im.externalaccess.param.SendVerifyCodeParam;
import com.wecloud.im.externalaccess.service.UserService;
import com.wecloud.im.ws.utils.RedisUtils;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController; import io.geekidea.springbootplus.framework.common.controller.BaseController;
...@@ -15,6 +8,9 @@ import io.geekidea.springbootplus.framework.common.exception.BusinessException; ...@@ -15,6 +8,9 @@ import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.time.Duration;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
...@@ -22,7 +18,13 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -22,7 +18,13 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.time.Duration; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.im.constant.RedisKeyPrefixConstant;
import com.wecloud.im.externalaccess.entity.User;
import com.wecloud.im.externalaccess.param.SendVerifyCodeParam;
import com.wecloud.im.externalaccess.service.UserService;
import com.wecloud.im.sdk.enums.VerifySceneEnum;
import com.wecloud.im.ws.utils.RedisUtils;
/** /**
* @Author wenzhida * @Author wenzhida
......
...@@ -3,9 +3,10 @@ package com.wecloud.im.externalaccess.param; ...@@ -3,9 +3,10 @@ package com.wecloud.im.externalaccess.param;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
import javax.validation.constraints.NotNull;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/2/23 15:20 * @Date 2022/2/23 15:20
...@@ -25,7 +26,7 @@ public class ModifySexParam implements Serializable { ...@@ -25,7 +26,7 @@ public class ModifySexParam implements Serializable {
/** /**
* 性别 * 性别
* @see com.wecloud.im.enums.SexEnum * @see com.wecloud.im.sdk.enums.SexEnum
*/ */
@NotNull(message = "性别不可为空不可为空") @NotNull(message = "性别不可为空不可为空")
@ApiModelProperty("性别 1-男 2-女 3-未知") @ApiModelProperty("性别 1-男 2-女 3-未知")
......
...@@ -3,9 +3,10 @@ package com.wecloud.im.externalaccess.param; ...@@ -3,9 +3,10 @@ package com.wecloud.im.externalaccess.param;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
import javax.validation.constraints.NotNull;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/2/21 18:15 * @Date 2022/2/21 18:15
...@@ -25,7 +26,7 @@ public class SendVerifyCodeParam implements Serializable { ...@@ -25,7 +26,7 @@ public class SendVerifyCodeParam implements Serializable {
/** /**
* 验证场景 1-用户注册 2-重置密码验证 3-更换手机号绑定 * 验证场景 1-用户注册 2-重置密码验证 3-更换手机号绑定
* @see com.wecloud.im.enums.VerifySceneEnum * @see com.wecloud.im.sdk.enums.VerifySceneEnum
*/ */
@NotNull(message = "验证场景不可为空") @NotNull(message = "验证场景不可为空")
@ApiModelProperty("验证场景 1-用户注册 2-重置密码验证 3-更换手机号绑定") @ApiModelProperty("验证场景 1-用户注册 2-重置密码验证 3-更换手机号绑定")
......
...@@ -29,7 +29,7 @@ public class UserBaseDto implements Serializable { ...@@ -29,7 +29,7 @@ public class UserBaseDto implements Serializable {
/** /**
* 性别 * 性别
* @see com.wecloud.im.enums.SexEnum * @see com.wecloud.im.sdk.enums.SexEnum
*/ */
@ApiModelProperty("性别 1-男 2-女 3-未知") @ApiModelProperty("性别 1-男 2-女 3-未知")
private Integer sex; private Integer sex;
...@@ -45,7 +45,7 @@ public class UserBaseDto implements Serializable { ...@@ -45,7 +45,7 @@ public class UserBaseDto implements Serializable {
/** /**
* 与我关系 * 与我关系
* @see com.wecloud.im.enums.RelationEnum * @see com.wecloud.im.sdk.enums.RelationEnum
*/ */
@ApiModelProperty("与我关系 1-陌生人 2-好友 3-被我拉黑") @ApiModelProperty("与我关系 1-陌生人 2-好友 3-被我拉黑")
private Integer relation; private Integer relation;
......
package com.wecloud.im.externalaccess.param; package com.wecloud.im.externalaccess.param;
import com.wecloud.im.enums.DeviceTypeEnum;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
import javax.validation.constraints.NotNull;
import com.wecloud.im.sdk.enums.DeviceTypeEnum;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/2/21 18:15 * @Date 2022/2/21 18:15
......
package com.wecloud.im.externalaccess.service; package com.wecloud.im.externalaccess.service;
import cn.hutool.core.lang.Snowflake; import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import java.util.Date;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.im.constant.NumberConstant; import com.wecloud.im.constant.NumberConstant;
import com.wecloud.im.constant.RedisKeyPrefixConstant; import com.wecloud.im.constant.RedisKeyPrefixConstant;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImClientDevice; import com.wecloud.im.entity.ImClientDevice;
import com.wecloud.im.enums.FriendStateEnum;
import com.wecloud.im.enums.RelationEnum;
import com.wecloud.im.enums.VerifySceneEnum;
import com.wecloud.im.externalaccess.entity.User; import com.wecloud.im.externalaccess.entity.User;
import com.wecloud.im.externalaccess.mapper.UserMapper; import com.wecloud.im.externalaccess.mapper.UserMapper;
import com.wecloud.im.externalaccess.param.ChangePhoneParam; import com.wecloud.im.externalaccess.param.ChangePhoneParam;
...@@ -29,6 +35,9 @@ import com.wecloud.im.friend.entity.ImFriend; ...@@ -29,6 +35,9 @@ import com.wecloud.im.friend.entity.ImFriend;
import com.wecloud.im.friend.service.ImFriendService; import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.param.add.ImClientHeadPortraitAdd; import com.wecloud.im.param.add.ImClientHeadPortraitAdd;
import com.wecloud.im.param.add.ImClientNicknameUpdate; import com.wecloud.im.param.add.ImClientNicknameUpdate;
import com.wecloud.im.sdk.enums.FriendStateEnum;
import com.wecloud.im.sdk.enums.RelationEnum;
import com.wecloud.im.sdk.enums.VerifySceneEnum;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientBlacklistService; import com.wecloud.im.service.ImClientBlacklistService;
import com.wecloud.im.service.ImClientDeviceService; import com.wecloud.im.service.ImClientDeviceService;
...@@ -37,14 +46,6 @@ import com.wecloud.im.ws.utils.RedisUtils; ...@@ -37,14 +46,6 @@ import com.wecloud.im.ws.utils.RedisUtils;
import com.wecloud.utils.AesUtil; import com.wecloud.utils.AesUtil;
import com.wecloud.utils.RandomUtil; import com.wecloud.utils.RandomUtil;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
/** /**
* @Author wenzhida * @Author wenzhida
......
package com.wecloud.im.friend.controller; package com.wecloud.im.friend.controller;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.enums.FriendStateEnum;
import com.wecloud.im.friend.param.ImCreateRecommendParam;
import com.wecloud.im.friend.param.ImDeleteFriendParam;
import com.wecloud.im.friend.param.ImDeleteRecommendParam;
import com.wecloud.im.friend.param.ImFriendApplyDto;
import com.wecloud.im.friend.param.ImFriendApplyParam;
import com.wecloud.im.friend.param.ImFriendApproveParam;
import com.wecloud.im.friend.param.ImFriendBaseDto;
import com.wecloud.im.friend.param.ImFriendBaseParam;
import com.wecloud.im.friend.param.ImFriendPageParam;
import com.wecloud.im.friend.param.ImFriendRecommendDto;
import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.service.ImClientService;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController; import io.geekidea.springbootplus.framework.common.controller.BaseController;
...@@ -24,6 +10,9 @@ import io.geekidea.springbootplus.framework.log.enums.OperationLogType; ...@@ -24,6 +10,9 @@ import io.geekidea.springbootplus.framework.log.enums.OperationLogType;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
...@@ -31,7 +20,20 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -31,7 +20,20 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.friend.param.ImCreateRecommendParam;
import com.wecloud.im.friend.param.ImDeleteFriendParam;
import com.wecloud.im.friend.param.ImDeleteRecommendParam;
import com.wecloud.im.friend.param.ImFriendApplyDto;
import com.wecloud.im.friend.param.ImFriendApplyParam;
import com.wecloud.im.friend.param.ImFriendApproveParam;
import com.wecloud.im.friend.param.ImFriendBaseDto;
import com.wecloud.im.friend.param.ImFriendBaseParam;
import com.wecloud.im.friend.param.ImFriendPageParam;
import com.wecloud.im.friend.param.ImFriendRecommendDto;
import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.sdk.enums.FriendStateEnum;
import com.wecloud.im.service.ImClientService;
/** /**
* @author lixiaozhong * @author lixiaozhong
......
package com.wecloud.im.friend.entity; package com.wecloud.im.friend.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity; import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -9,9 +7,13 @@ import lombok.Data; ...@@ -9,9 +7,13 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.util.Date; import java.util.Date;
import javax.validation.constraints.NotNull;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
/** /**
* @author lixiaozhong * @author lixiaozhong
* 好友关系表 * 好友关系表
...@@ -48,7 +50,7 @@ public class ImFriend extends BaseEntity { ...@@ -48,7 +50,7 @@ public class ImFriend extends BaseEntity {
/** /**
* 好友关系状态 * 好友关系状态
* @see com.wecloud.im.enums.FriendStateEnum * @see com.wecloud.im.sdk.enums.FriendStateEnum
*/ */
@ApiModelProperty("好友关系状态") @ApiModelProperty("好友关系状态")
private Integer state; private Integer state;
......
...@@ -14,7 +14,7 @@ import java.io.Serializable; ...@@ -14,7 +14,7 @@ import java.io.Serializable;
public class FriendBaseEventDto implements Serializable { public class FriendBaseEventDto implements Serializable {
/** /**
* 参考 {@link com.wecloud.im.enums.EventResponseSubCmdEnum EventResponseSubCmdEnum} * 参考 {@link com.wecloud.im.sdk.enums.EventResponseSubCmdEnum EventResponseSubCmdEnum}
*/ */
@ApiModelProperty("响应命令") @ApiModelProperty("响应命令")
private Integer subCmd; private Integer subCmd;
......
package com.wecloud.im.friend.service; package com.wecloud.im.friend.service;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.enums.EventResponseSubCmdEnum;
import com.wecloud.im.friend.param.FriendApplyEventDto; import com.wecloud.im.friend.param.FriendApplyEventDto;
import com.wecloud.im.friend.param.FriendApproveEventDto; import com.wecloud.im.friend.param.FriendApproveEventDto;
import com.wecloud.im.mq.MqSender; import com.wecloud.im.mq.MqSender;
import com.wecloud.im.sdk.enums.EventResponseSubCmdEnum;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.ws.enums.WsResponseCmdEnum; import com.wecloud.im.ws.enums.WsResponseCmdEnum;
import com.wecloud.im.ws.model.WsResponse; import com.wecloud.im.ws.model.WsResponse;
...@@ -13,10 +19,6 @@ import com.wecloud.im.ws.model.request.PushVO; ...@@ -13,10 +19,6 @@ import com.wecloud.im.ws.model.request.PushVO;
import com.wecloud.im.ws.sender.ChannelSender; import com.wecloud.im.ws.sender.ChannelSender;
import com.wecloud.pushserver.client.model.constant.MqConstant; import com.wecloud.pushserver.client.model.constant.MqConstant;
import com.wecloud.pushserver.client.model.dto.PushDTO; import com.wecloud.pushserver.client.model.dto.PushDTO;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/** /**
* @Description TODO * @Description TODO
......
package com.wecloud.im.friend.service; package com.wecloud.im.friend.service;
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 java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.enums.FriendStateEnum;
import com.wecloud.im.friend.entity.ImFriend; import com.wecloud.im.friend.entity.ImFriend;
import com.wecloud.im.friend.entity.ImFriendRecommend; import com.wecloud.im.friend.entity.ImFriendRecommend;
import com.wecloud.im.friend.mapper.ImFriendMapper; import com.wecloud.im.friend.mapper.ImFriendMapper;
...@@ -16,23 +31,9 @@ import com.wecloud.im.friend.param.ImFriendBaseDto; ...@@ -16,23 +31,9 @@ import com.wecloud.im.friend.param.ImFriendBaseDto;
import com.wecloud.im.friend.param.ImFriendPageParam; import com.wecloud.im.friend.param.ImFriendPageParam;
import com.wecloud.im.friend.param.ImFriendRecommendDto; import com.wecloud.im.friend.param.ImFriendRecommendDto;
import com.wecloud.im.param.ImClientSimpleDto; import com.wecloud.im.param.ImClientSimpleDto;
import com.wecloud.im.sdk.enums.FriendStateEnum;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
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 com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* @Description 好友关系处理逻辑 * @Description 好友关系处理逻辑
...@@ -106,6 +107,7 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> { ...@@ -106,6 +107,7 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
} else { } else {
my.setId(SnowflakeUtil.getId()); my.setId(SnowflakeUtil.getId());
my.setCreateTime(new Date()); my.setCreateTime(new Date());
my.setUpdateTime(new Date());
this.save(my); this.save(my);
} }
...@@ -123,6 +125,7 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> { ...@@ -123,6 +125,7 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
} else { } else {
friend.setId(SnowflakeUtil.getId()); friend.setId(SnowflakeUtil.getId());
friend.setCreateTime(new Date()); friend.setCreateTime(new Date());
friend.setUpdateTime(new Date());
this.save(friend); this.save(friend);
} }
......
package com.wecloud.im.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/4/1 20:09
* @Description 多人音视频会议发送心跳入参
*/
@Data
@ApiModel(value = "多人音视频会议发送心跳入参")
public class HeartbeatMultiMeetParam implements Serializable {
private static final long serialVersionUID = -5000410376842426276L;
@ApiModelProperty(value = "会话id,可选", required = false)
private Long conversationId;
@ApiModelProperty(value = "多人会议房间id", required = true)
private String roomId;
}
...@@ -57,7 +57,7 @@ public class ImConversationQueryVo implements Serializable { ...@@ -57,7 +57,7 @@ public class ImConversationQueryVo implements Serializable {
/** /**
* 禁言开关 * 禁言开关
* @see com.wecloud.im.enums.MutedEnum * @see com.wecloud.im.sdk.enums.MutedEnum
*/ */
@ApiModelProperty("禁言开关 1-未禁言 2-禁言") @ApiModelProperty("禁言开关 1-未禁言 2-禁言")
private Integer muted; private Integer muted;
......
...@@ -31,7 +31,7 @@ public class ListConversationMembersParam implements Serializable { ...@@ -31,7 +31,7 @@ public class ListConversationMembersParam implements Serializable {
/** /**
* 禁言开关 * 禁言开关
* @see com.wecloud.im.enums.MutedEnum * @see com.wecloud.im.sdk.enums.MutedEnum
*/ */
@ApiModelProperty("禁言开关 1-未禁言 2-禁言") @ApiModelProperty("禁言开关 1-未禁言 2-禁言")
private Integer muted; private Integer muted;
......
...@@ -4,8 +4,6 @@ import io.geekidea.springbootplus.framework.common.entity.BaseEntity; ...@@ -4,8 +4,6 @@ import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
...@@ -22,7 +20,7 @@ public class LogoutParam extends BaseEntity { ...@@ -22,7 +20,7 @@ public class LogoutParam extends BaseEntity {
/** /**
* 设备类型 * 设备类型
* @see com.wecloud.im.enums.DeviceTypeEnum * @see com.wecloud.im.sdk.enums.DeviceTypeEnum
*/ */
@ApiModelProperty("设备类型 1:ios; 2:android; 3:web; 4:win; 5:mac") @ApiModelProperty("设备类型 1:ios; 2:android; 3:web; 4:win; 5:mac")
@NotNull(message = "设备类型不能为空") @NotNull(message = "设备类型不能为空")
......
package com.wecloud.im.param; package com.wecloud.im.param;
import com.wecloud.im.enums.MutedEnum;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity; import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -27,7 +26,7 @@ public class MutedGroupParam extends BaseEntity { ...@@ -27,7 +26,7 @@ public class MutedGroupParam extends BaseEntity {
/** /**
* 禁言类型 * 禁言类型
* @see com.wecloud.im.enums.MutedEnum * @see com.wecloud.im.sdk.enums.MutedEnum
*/ */
@NotNull @NotNull
@ApiModelProperty("禁言类型 1-取消禁言 2-禁言") @ApiModelProperty("禁言类型 1-取消禁言 2-禁言")
......
package com.wecloud.im.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/3/24 11:06
* @Description 未接听入参
*/
@Data
@ApiModel(value = "未接听入参")
public class NotAnsweredMultiMeetParam implements Serializable {
private static final long serialVersionUID = 7439324829502466053L;
@ApiModelProperty(value = "会话id,可选", required = false)
private Long conversationId;
@ApiModelProperty(value = "多人会议房间id", required = true)
private String roomId;
}
...@@ -25,7 +25,7 @@ public class ClientDeviceUpdateParam extends BaseEntity { ...@@ -25,7 +25,7 @@ public class ClientDeviceUpdateParam extends BaseEntity {
/** /**
* 设备类型 * 设备类型
* @see com.wecloud.im.enums.DeviceTypeEnum * @see com.wecloud.im.sdk.enums.DeviceTypeEnum
*/ */
@ApiModelProperty("设备类型 1:ios; 2:android; 3:web; 4:win; 5:mac") @ApiModelProperty("设备类型 1:ios; 2:android; 3:web; 4:win; 5:mac")
private Integer deviceType; private Integer deviceType;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
......
package com.wecloud.im.enums; package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum; import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
......
package com.wecloud.im.service;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
/**
* 请求上下文服务
* @Author luozh
* @Date 2022年04月02日 14:51
* @Version 1.0
*/
public interface ContextService {
/**
* 获取当前或指定clientId的ImClient 存在返回 不存在则抛出异常
* @Author luozh
* @Date 2022年04月02日 02:52:09
* @param request Ws请求
* @Return
*/
ImClient getImClientIfNotNullOrThrow();
/**
* 获取当前或指定appId的ImApplication 存在返回 不存在则抛出异常
* @Author luozh
* @Date 2022年04月02日 02:54:21
* @param appId 应用id
* @Return
*/
ImApplication getImApplicationIfNotNullOrThrow(Long appId);
}
package com.wecloud.im.service; package com.wecloud.im.service;
import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.im.entity.ImClientBlacklist; import com.wecloud.im.entity.ImClientBlacklist;
import com.wecloud.im.param.ImClientBlacklistPageParam; import com.wecloud.im.param.ImClientBlacklistPageParam;
import com.wecloud.im.param.ImClientBlacklistQueryVo; import com.wecloud.im.param.ImClientBlacklistQueryVo;
import com.wecloud.im.param.add.ImClientBlacklistUpdate; import com.wecloud.im.param.add.ImClientBlacklistUpdate;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
/** /**
* 黑名单 服务类 * 黑名单 服务类
...@@ -33,7 +34,7 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist> ...@@ -33,7 +34,7 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist>
* @return * @return
* @throws Exception * @throws Exception
*/ */
ApiResult<Boolean> addImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate); Boolean addImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate);
/** /**
* 移出黑名单 * 移出黑名单
...@@ -42,7 +43,7 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist> ...@@ -42,7 +43,7 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist>
* @return * @return
* @throws Exception * @throws Exception
*/ */
ApiResult<Boolean> removeImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate); Boolean removeImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate);
/** /**
* 获取分页对象 * 获取分页对象
...@@ -50,6 +51,6 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist> ...@@ -50,6 +51,6 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist>
* @return * @return
* @throws Exception * @throws Exception
*/ */
ApiResult<Paging<ImClientBlacklistQueryVo>> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam); Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam);
} }
package com.wecloud.im.service; 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.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.param.ClientInfoParam; import com.wecloud.im.param.ClientInfoParam;
import com.wecloud.im.param.GetClientInfoParam; import com.wecloud.im.param.GetClientInfoParam;
...@@ -15,11 +22,6 @@ import com.wecloud.im.param.add.ImClientNicknameUpdate; ...@@ -15,11 +22,6 @@ import com.wecloud.im.param.add.ImClientNicknameUpdate;
import com.wecloud.im.vo.ClientInfoVo; import com.wecloud.im.vo.ClientInfoVo;
import com.wecloud.im.vo.GetInfoListVo; import com.wecloud.im.vo.GetInfoListVo;
import com.wecloud.im.vo.MyInfoVo; import com.wecloud.im.vo.MyInfoVo;
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;
/** /**
* 终端表 服务类 * 终端表 服务类
...@@ -59,7 +61,7 @@ public interface ImClientService extends BaseService<ImClient> { ...@@ -59,7 +61,7 @@ public interface ImClientService extends BaseService<ImClient> {
* @return * @return
* @throws Exception * @throws Exception
*/ */
ApiResult<List<GetInfoListVo>> getInfoList(GetClientInfoParam getClientInfoParam) throws Exception; List<GetInfoListVo> getInfoList(GetClientInfoParam getClientInfoParam) throws Exception;
/** /**
* 获取群里成员信息 * 获取群里成员信息
...@@ -103,7 +105,7 @@ public interface ImClientService extends BaseService<ImClient> { ...@@ -103,7 +105,7 @@ public interface ImClientService extends BaseService<ImClient> {
* @return * @return
* @throws Exception * @throws Exception
*/ */
boolean updateImClient(ImClient imClient) throws Exception; boolean updateImClient( ImClient imClient) throws Exception;
/** /**
* 删除 * 删除
...@@ -112,7 +114,7 @@ public interface ImClientService extends BaseService<ImClient> { ...@@ -112,7 +114,7 @@ public interface ImClientService extends BaseService<ImClient> {
* @return * @return
* @throws Exception * @throws Exception
*/ */
boolean deleteImClient(Long id) throws Exception; boolean deleteImClient( Long id) throws Exception;
/** /**
* 获取分页对象 * 获取分页对象
......
...@@ -2,13 +2,7 @@ package com.wecloud.im.service; ...@@ -2,13 +2,7 @@ package com.wecloud.im.service;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImConversationMembers; import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.param.ApiImConversationMembersPageParam; import com.wecloud.im.param.*;
import com.wecloud.im.param.ApiImConversationMembersQueryVo;
import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ListConversationMembersParam;
import com.wecloud.im.param.ImConversationMembersPageParam;
import com.wecloud.im.param.ImConversationMembersQueryVo;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate; import com.wecloud.im.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.vo.ConversationMemberVo; import com.wecloud.im.vo.ConversationMemberVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
...@@ -54,7 +48,7 @@ public interface ImConversationMembersService extends BaseService<ImConversation ...@@ -54,7 +48,7 @@ public interface ImConversationMembersService extends BaseService<ImConversation
List<ConversationMemberVo> getImConversationMembersList(ListConversationMembersParam param); List<ConversationMemberVo> getImConversationMembersList(ListConversationMembersParam param);
ApiResult<Boolean> saveOrUpdateAttr(ImConversationMemAttrUpdate imConversationMemAttrUpdate); Boolean saveOrUpdateAttr(ImConversationMemAttrUpdate imConversationMemAttrUpdate);
/** /**
* 保存 * 保存
......
package com.wecloud.im.service; 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.fasterxml.jackson.core.JsonProcessingException;
import com.wecloud.im.entity.ImConversation; import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.param.DisbandConversationParam; import com.wecloud.im.param.DisbandConversationParam;
...@@ -16,14 +22,8 @@ import com.wecloud.im.param.add.ImConversationAttrUpdate; ...@@ -16,14 +22,8 @@ import com.wecloud.im.param.add.ImConversationAttrUpdate;
import com.wecloud.im.param.add.ImConversationCreate; import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImConversationDisplayUpdate; import com.wecloud.im.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.param.add.ImConversationNameUpdate; import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.vo.ImConversationCreateVo;
import com.wecloud.im.vo.ConversationVo; import com.wecloud.im.vo.ConversationVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import com.wecloud.im.vo.ImConversationCreateVo;
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;
/** /**
* 会话表 服务类 * 会话表 服务类
...@@ -49,7 +49,7 @@ public interface ImConversationService extends BaseService<ImConversation> { ...@@ -49,7 +49,7 @@ public interface ImConversationService extends BaseService<ImConversation> {
* @param imConversationCreate * @param imConversationCreate
* @return * @return
*/ */
ApiResult<ImConversationCreateVo> createImConversation(ImConversationCreate imConversationCreate); ImConversationCreateVo createImConversation(ImConversationCreate imConversationCreate);
/** /**
...@@ -59,7 +59,7 @@ public interface ImConversationService extends BaseService<ImConversation> { ...@@ -59,7 +59,7 @@ public interface ImConversationService extends BaseService<ImConversation> {
* @return * @return
* @throws JsonProcessingException * @throws JsonProcessingException
*/ */
ApiResult<Boolean> addClientToConversation(ImClientToConversation imClientToConversation); Boolean addClientToConversation(ImClientToConversation imClientToConversation);
/** /**
* 将client从会话移除 * 将client从会话移除
...@@ -67,7 +67,7 @@ public interface ImConversationService extends BaseService<ImConversation> { ...@@ -67,7 +67,7 @@ public interface ImConversationService extends BaseService<ImConversation> {
* @param imClientToConversation * @param imClientToConversation
* @return * @return
*/ */
ApiResult<Boolean> delClientToConversation(ImClientToConversation imClientToConversation) throws Exception; Boolean delClientToConversation(ImClientToConversation imClientToConversation) throws Exception;
/** /**
* 解散群聊 * 解散群聊
...@@ -79,35 +79,35 @@ public interface ImConversationService extends BaseService<ImConversation> { ...@@ -79,35 +79,35 @@ public interface ImConversationService extends BaseService<ImConversation> {
/** /**
* client退出会话 * client退出会话
*/ */
ApiResult<Boolean> leaveConversation(ImClientLeaveConversation imClientToConversation); Boolean leaveConversation(ImClientLeaveConversation imClientToConversation);
/** /**
* 群主转让 * 群主转让
* @param param * @param param
* @return * @return
*/ */
Boolean transferOwner(@RequestBody TransferOwnerParam param); Boolean transferOwner(TransferOwnerParam param);
/** /**
* 设置管理员 * 设置管理员
* @param param * @param param
* @return * @return
*/ */
Boolean setAdmins(@RequestBody SetAdminsParam param); Boolean setAdmins(SetAdminsParam param);
/** /**
* 群禁言 * 群禁言
* @param param * @param param
* @return * @return
*/ */
Boolean mutedGroup(@RequestBody MutedGroupParam param); Boolean mutedGroup(MutedGroupParam param);
/** /**
* 选择禁言 * 选择禁言
* @param param * @param param
* @return * @return
*/ */
Boolean mutedGroupMember(@RequestBody MutedGroupMemberParam param); Boolean mutedGroupMember(MutedGroupMemberParam param);
/** /**
* 判断当前操作人是否为指定角色成员 * 判断当前操作人是否为指定角色成员
......
...@@ -2,10 +2,9 @@ package com.wecloud.im.service; ...@@ -2,10 +2,9 @@ package com.wecloud.im.service;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.wecloud.im.entity.ImInbox; import com.wecloud.im.entity.ImInbox;
import com.wecloud.im.param.MsgReadStatusUpdateParam;
import com.wecloud.im.param.ImMsgReceivedStatusUpdate; import com.wecloud.im.param.ImMsgReceivedStatusUpdate;
import com.wecloud.im.param.MsgReadStatusUpdateParam;
import com.wecloud.im.param.UpdateMsgReadStatusByConversationParam; import com.wecloud.im.param.UpdateMsgReadStatusByConversationParam;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.BaseService; import io.geekidea.springbootplus.framework.common.service.BaseService;
/** /**
...@@ -68,7 +67,7 @@ public interface ImInboxService extends BaseService<ImInbox> { ...@@ -68,7 +67,7 @@ public interface ImInboxService extends BaseService<ImInbox> {
* @param imMsgReceivedUpdate * @param imMsgReceivedUpdate
* @return * @return
*/ */
ApiResult<Boolean> updateImMsgReceived(ImMsgReceivedStatusUpdate imMsgReceivedUpdate); Boolean updateImMsgReceived(ImMsgReceivedStatusUpdate imMsgReceivedUpdate);
/** /**
* 统计未读消息数量 * 统计未读消息数量
...@@ -83,7 +82,7 @@ public interface ImInboxService extends BaseService<ImInbox> { ...@@ -83,7 +82,7 @@ public interface ImInboxService extends BaseService<ImInbox> {
* *
* @return * @return
*/ */
ApiResult<Boolean> updateImMsgRead(MsgReadStatusUpdateParam msgReadStatusUpdateParam) throws JsonProcessingException; Boolean updateImMsgRead(MsgReadStatusUpdateParam msgReadStatusUpdateParam) throws JsonProcessingException;
/** /**
* 整个会话消息修改为已读状态 * 整个会话消息修改为已读状态
......
package com.wecloud.im.service; package com.wecloud.im.service;
import com.wecloud.dispatch.extend.ActionRequest; 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 org.springframework.transaction.annotation.Transactional;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.entity.ImMessage;
...@@ -17,12 +24,6 @@ import com.wecloud.im.vo.OfflineMsgDto; ...@@ -17,12 +24,6 @@ import com.wecloud.im.vo.OfflineMsgDto;
import com.wecloud.im.vo.ReaderList; import com.wecloud.im.vo.ReaderList;
import com.wecloud.im.ws.model.request.ReceiveDataVO; import com.wecloud.im.ws.model.request.ReceiveDataVO;
import com.wecloud.im.ws.model.request.ReceiveVO; import com.wecloud.im.ws.model.request.ReceiveVO;
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.transaction.annotation.Transactional;
import java.util.List;
/** /**
* 消息存储表 服务类 * 消息存储表 服务类
...@@ -54,14 +55,14 @@ public interface ImMessageService extends BaseService<ImMessage> { ...@@ -54,14 +55,14 @@ public interface ImMessageService extends BaseService<ImMessage> {
* @param request * @param request
* @return * @return
*/ */
Boolean withdrawMsg(ActionRequest request, ImMsgRecall imMsgRecall); Boolean withdrawMsg(ImMsgRecall imMsgRecall);
/** /**
* 删除消息 * 删除消息
* @param param * @param param
* @return * @return
*/ */
Boolean deleteMsg(ActionRequest request, MsgDeleteParam param); Boolean deleteMsg(MsgDeleteParam param);
/** /**
* 修改消息体 * 修改消息体
...@@ -129,6 +130,6 @@ public interface ImMessageService extends BaseService<ImMessage> { ...@@ -129,6 +130,6 @@ public interface ImMessageService extends BaseService<ImMessage> {
* @param param * @param param
* @return * @return
*/ */
ReaderList getReaders(ActionRequest request, GetReadersParam param); ReaderList getReaders(GetReadersParam param);
} }
package com.wecloud.im.service; package com.wecloud.im.service;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImMultiRtcRoomMember; import com.wecloud.im.entity.ImMultiRtcRoomMember;
import io.geekidea.springbootplus.framework.common.service.BaseService; import io.geekidea.springbootplus.framework.common.service.BaseService;
...@@ -13,10 +12,10 @@ public interface ImMultiRtcRoomMemberService extends BaseService<ImMultiRtcRoomM ...@@ -13,10 +12,10 @@ public interface ImMultiRtcRoomMemberService extends BaseService<ImMultiRtcRoomM
/** /**
* 改变会议成员状态 * 改变会议成员状态
* @param currentClient * @param fkClientId
* @param roomId * @param roomId
* @param state * @param state
*/ */
void changeRoomMemberState(ImClient currentClient, String roomId, Integer state); void changeRoomMemberState(Long fkClientId, String roomId, Integer state);
} }
package com.wecloud.im.service.impl;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken;
import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import org.springframework.beans.factory.annotation.Autowired;
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;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService;
/**
* 请求上下文服务 impl
* @Author luozh
* @Date 2022年04月02日 14:56
* @Version 1.0
*/
@Service
public class ContextServiceImpl implements ContextService {
@Autowired
@Lazy
private ImClientService imClientService;
@Autowired
private ImApplicationService imApplicationService;
@Override
public ImClient getImClientIfNotNullOrThrow() {
ImClient currentClient = imClientService.getCurrentClient();
if (currentClient == null) {
throw new BusinessException("当前用户登录信息失效");
}
return currentClient;
}
@Override
public ImApplication getImApplicationIfNotNullOrThrow(Long appId) {
ImApplication imApplication = imApplicationService.getCacheById(appId);
if (imApplication == null) {
throw new BusinessException("查无应用信息");
}
return imApplication;
}
}
package com.wecloud.im.service.impl; package com.wecloud.im.service.impl;
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 lombok.extern.slf4j.Slf4j;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...@@ -9,20 +21,10 @@ import com.wecloud.im.mapper.ImClientBlacklistMapper; ...@@ -9,20 +21,10 @@ import com.wecloud.im.mapper.ImClientBlacklistMapper;
import com.wecloud.im.param.ImClientBlacklistPageParam; import com.wecloud.im.param.ImClientBlacklistPageParam;
import com.wecloud.im.param.ImClientBlacklistQueryVo; import com.wecloud.im.param.ImClientBlacklistQueryVo;
import com.wecloud.im.param.add.ImClientBlacklistUpdate; import com.wecloud.im.param.add.ImClientBlacklistUpdate;
import com.wecloud.im.service.ContextService;
import com.wecloud.im.service.ImClientBlacklistService; import com.wecloud.im.service.ImClientBlacklistService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
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;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
/** /**
* 黑名单 服务实现类 * 黑名单 服务实现类
...@@ -40,6 +42,9 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl ...@@ -40,6 +42,9 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
@Autowired @Autowired
private ImClientService imClientService; private ImClientService imClientService;
@Autowired
private ContextService contextService;
@Override @Override
public boolean isBeBlack(String currentClientId, String toClientId) { public boolean isBeBlack(String currentClientId, String toClientId) {
ImClientBlacklist one = this.getOne(new QueryWrapper<ImClientBlacklist>().lambda() ImClientBlacklist one = this.getOne(new QueryWrapper<ImClientBlacklist>().lambda()
...@@ -51,11 +56,8 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl ...@@ -51,11 +56,8 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> addImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate) { public Boolean addImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate) {
ImClient currentClient = imClientService.getCurrentClient(); ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
if (currentClient == null) {
throw new BusinessException("当前用户登录信息失效");
}
ImClient beBlacker = imClientService.getOne(new QueryWrapper<ImClient>().lambda() ImClient beBlacker = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, currentClient.getFkAppid()) .eq(ImClient::getFkAppid, currentClient.getFkAppid())
.eq(ImClient::getClientId, imClientBlacklistUpdate.getClientIdBePrevent())); .eq(ImClient::getClientId, imClientBlacklistUpdate.getClientIdBePrevent()));
...@@ -70,17 +72,14 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl ...@@ -70,17 +72,14 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
imClientBlacklist.setClientIdBePrevent(beBlacker.getClientId()); imClientBlacklist.setClientIdBePrevent(beBlacker.getClientId());
this.save(imClientBlacklist); this.save(imClientBlacklist);
return ApiResult.ok(); return true;
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> removeImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate) { public Boolean removeImClientBlacklist(ImClientBlacklistUpdate imClientBlacklistUpdate) {
// 操作者 // 操作者
ImClient currentClient = imClientService.getCurrentClient(); ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
if (currentClient == null) {
throw new BusinessException("当前用户登录信息失效");
}
// 被拉黑者 // 被拉黑者
ImClient beBlacker = imClientService.getOne(new QueryWrapper<ImClient>().lambda() ImClient beBlacker = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, currentClient.getFkAppid()) .eq(ImClient::getFkAppid, currentClient.getFkAppid())
...@@ -92,16 +91,16 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl ...@@ -92,16 +91,16 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
this.remove(new QueryWrapper<ImClientBlacklist>().lambda() this.remove(new QueryWrapper<ImClientBlacklist>().lambda()
.eq(ImClientBlacklist::getClientIdPrevent, currentClient.getClientId()) .eq(ImClientBlacklist::getClientIdPrevent, currentClient.getClientId())
.eq(ImClientBlacklist::getClientIdBePrevent, beBlacker.getClientId())); .eq(ImClientBlacklist::getClientIdBePrevent, beBlacker.getClientId()));
return ApiResult.ok(); return true;
} }
@Override @Override
public ApiResult<Paging<ImClientBlacklistQueryVo>> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam) { public Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam) {
Page<ImClientBlacklistQueryVo> page = new PageInfo<>(imClientBlacklistPageParam); Page<ImClientBlacklistQueryVo> page = new PageInfo<>(imClientBlacklistPageParam);
ImClient currentClient = imClientService.getCurrentClient(); ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
IPage<ImClientBlacklistQueryVo> imClientBlacklistPageList = imClientBlacklistMapper.getImClientBlacklistPageList(page, currentClient.getClientId()); IPage<ImClientBlacklistQueryVo> imClientBlacklistPageList = imClientBlacklistMapper.getImClientBlacklistPageList(page, currentClient.getClientId());
Paging<ImClientBlacklistQueryVo> imClientBlacklistQueryVoPaging = new Paging<>(imClientBlacklistPageList); Paging<ImClientBlacklistQueryVo> imClientBlacklistQueryVoPaging = new Paging<>(imClientBlacklistPageList);
return ApiResult.ok(imClientBlacklistQueryVoPaging); return imClientBlacklistQueryVoPaging;
} }
} }
package com.wecloud.im.service.impl; package com.wecloud.im.service.impl;
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.Date;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists; 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.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImClientDevice; import com.wecloud.im.entity.ImClientDevice;
import com.wecloud.im.enums.FriendStateEnum;
import com.wecloud.im.enums.RelationEnum;
import com.wecloud.im.friend.entity.ImFriend; import com.wecloud.im.friend.entity.ImFriend;
import com.wecloud.im.friend.service.ImFriendService; import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.mapper.ImClientMapper; import com.wecloud.im.mapper.ImClientMapper;
...@@ -25,6 +45,9 @@ import com.wecloud.im.param.add.ImClientHeadPortraitAdd; ...@@ -25,6 +45,9 @@ import com.wecloud.im.param.add.ImClientHeadPortraitAdd;
import com.wecloud.im.param.add.ImClientHeadPortraitAndNicknameUpdate; import com.wecloud.im.param.add.ImClientHeadPortraitAndNicknameUpdate;
import com.wecloud.im.param.add.ImClientNicknameAdd; import com.wecloud.im.param.add.ImClientNicknameAdd;
import com.wecloud.im.param.add.ImClientNicknameUpdate; import com.wecloud.im.param.add.ImClientNicknameUpdate;
import com.wecloud.im.sdk.enums.FriendStateEnum;
import com.wecloud.im.sdk.enums.RelationEnum;
import com.wecloud.im.service.ContextService;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientBlacklistService; import com.wecloud.im.service.ImClientBlacklistService;
import com.wecloud.im.service.ImClientDeviceService; import com.wecloud.im.service.ImClientDeviceService;
...@@ -33,25 +56,6 @@ import com.wecloud.im.vo.ClientInfoVo; ...@@ -33,25 +56,6 @@ import com.wecloud.im.vo.ClientInfoVo;
import com.wecloud.im.vo.GetInfoListVo; import com.wecloud.im.vo.GetInfoListVo;
import com.wecloud.im.vo.MyInfoVo; import com.wecloud.im.vo.MyInfoVo;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
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;
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.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/** /**
* 终端表 服务实现类 * 终端表 服务实现类
...@@ -79,13 +83,12 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien ...@@ -79,13 +83,12 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Autowired @Autowired
private ImClientDeviceService imClientDeviceService; private ImClientDeviceService imClientDeviceService;
@Autowired
private ContextService contextService;
@Override @Override
public MyInfoVo getMyInfo() { public MyInfoVo getMyInfo() {
ImClient currentClient = this.getCurrentClient(); ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
if (currentClient == null) {
throw new BusinessException("当前用户登录信息失效");
}
MyInfoVo myInfoVo = new MyInfoVo(); MyInfoVo myInfoVo = new MyInfoVo();
BeanUtils.copyProperties(currentClient, myInfoVo); BeanUtils.copyProperties(currentClient, myInfoVo);
return myInfoVo; return myInfoVo;
...@@ -94,7 +97,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien ...@@ -94,7 +97,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean updateHeadPortrait(ImClientHeadPortraitAdd imClientHeadPortraitAdd) { public boolean updateHeadPortrait(ImClientHeadPortraitAdd imClientHeadPortraitAdd) {
ImClient curentClient = getCurrentClient(); ImClient curentClient = contextService.getImClientIfNotNullOrThrow();
curentClient.setHeadPortrait(imClientHeadPortraitAdd.getHeadPortrait()); curentClient.setHeadPortrait(imClientHeadPortraitAdd.getHeadPortrait());
imClientMapper.updateById(curentClient); imClientMapper.updateById(curentClient);
...@@ -106,7 +109,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien ...@@ -106,7 +109,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override @Override
public boolean updateNickname(ImClientNicknameUpdate imClientNicknameUpdate) { public boolean updateNickname(ImClientNicknameUpdate imClientNicknameUpdate) {
ImClient curentClient = getCurrentClient(); ImClient curentClient = contextService.getImClientIfNotNullOrThrow();
curentClient.setNickname(imClientNicknameUpdate.getNickname()); curentClient.setNickname(imClientNicknameUpdate.getNickname());
imClientMapper.updateById(curentClient); imClientMapper.updateById(curentClient);
...@@ -118,7 +121,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien ...@@ -118,7 +121,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override @Override
public boolean updateHeadAndNickname(ImClientHeadPortraitAndNicknameUpdate imClientHeadPortraitAndNicknameUpdate) { public boolean updateHeadAndNickname(ImClientHeadPortraitAndNicknameUpdate imClientHeadPortraitAndNicknameUpdate) {
ImClient curentClient = getCurrentClient(); ImClient curentClient = contextService.getImClientIfNotNullOrThrow();
curentClient.setHeadPortrait(imClientHeadPortraitAndNicknameUpdate.getHeadPortrait()); curentClient.setHeadPortrait(imClientHeadPortraitAndNicknameUpdate.getHeadPortrait());
curentClient.setNickname(imClientHeadPortraitAndNicknameUpdate.getNickname()); curentClient.setNickname(imClientHeadPortraitAndNicknameUpdate.getNickname());
imClientMapper.updateById(curentClient); imClientMapper.updateById(curentClient);
...@@ -130,8 +133,8 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien ...@@ -130,8 +133,8 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
} }
@Override @Override
public ApiResult<List<GetInfoListVo>> getInfoList(GetClientInfoParam getClientInfoParam) throws Exception { public List<GetInfoListVo> getInfoList(GetClientInfoParam getClientInfoParam) throws Exception {
ImClient curentClient = getCurrentClient(); ImClient curentClient = contextService.getImClientIfNotNullOrThrow();
if (getClientInfoParam.getClientIds() == null || getClientInfoParam.getClientIds().isEmpty()) { if (getClientInfoParam.getClientIds() == null || getClientInfoParam.getClientIds().isEmpty()) {
throw new BusinessException("getClientInfoParam.getClientIds() == null"); throw new BusinessException("getClientInfoParam.getClientIds() == null");
...@@ -155,12 +158,12 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien ...@@ -155,12 +158,12 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
List<GetInfoListVo> infoList = imClientMapper.getInfoList(curentClient.getFkAppid(), getClientInfoParam.getConversationId(), getClientInfoParam.getClientIds()); List<GetInfoListVo> infoList = imClientMapper.getInfoList(curentClient.getFkAppid(), getClientInfoParam.getConversationId(), getClientInfoParam.getClientIds());
return ApiResult.ok(infoList); return infoList;
} }
@Override @Override
public ClientInfoVo getClientInfo(ClientInfoParam param) { public ClientInfoVo getClientInfo(ClientInfoParam param) {
ImClient currentClient = this.getCurrentClient(); ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
if (currentClient == null) { if (currentClient == null) {
throw new BusinessException("当前用户登录信息失效"); throw new BusinessException("当前用户登录信息失效");
} }
...@@ -192,7 +195,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien ...@@ -192,7 +195,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean updateNickname(ImClientNicknameAdd imClientNicknameAdd) throws Exception { public boolean updateNickname(ImClientNicknameAdd imClientNicknameAdd) throws Exception {
ImClient curentClient = getCurrentClient(); ImClient curentClient = contextService.getImClientIfNotNullOrThrow();
curentClient.setNickname(imClientNicknameAdd.getNickname()); curentClient.setNickname(imClientNicknameAdd.getNickname());
imClientMapper.updateById(curentClient); imClientMapper.updateById(curentClient);
...@@ -246,7 +249,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien ...@@ -246,7 +249,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override @Override
public boolean logout(LogoutParam param) { public boolean logout(LogoutParam param) {
ImClient currentClient = getCurrentClient(); ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
// 清除设备token // 清除设备token
return imClientDeviceService.update(new UpdateWrapper<ImClientDevice>().lambda() return imClientDeviceService.update(new UpdateWrapper<ImClientDevice>().lambda()
.eq(ImClientDevice::getFkAppid, currentClient.getFkAppid()) .eq(ImClientDevice::getFkAppid, currentClient.getFkAppid())
...@@ -275,12 +278,19 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien ...@@ -275,12 +278,19 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override @Override
public ImClient getCurrentClient() { public ImClient getCurrentClient() {
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 // shiro线程中获取当前token
JwtToken curentJwtToken = JwtUtil.getCurrentJwtToken(); JwtToken curentJwtToken = JwtUtil.getCurrentJwtToken();
// 根据appKey查询appid // 根据appKey查询appid
ImApplication imApplication = imApplicationService.getCacheAppByAppKey(curentJwtToken.getAppKey()); ImApplication imApplication = imApplicationService.getCacheAppByAppKey(curentJwtToken.getAppKey());
return getCacheImClient(imApplication.getId(), curentJwtToken.getClientId()); imClient = getCacheImClient(imApplication.getId(), curentJwtToken.getClientId());
}
return imClient;
} }
@Override @Override
......
...@@ -12,19 +12,9 @@ import com.wecloud.im.entity.ImConversationMembers; ...@@ -12,19 +12,9 @@ import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.entity.ImMessageOnlineSend; import com.wecloud.im.entity.ImMessageOnlineSend;
import com.wecloud.im.mapper.ImConversationMapper; import com.wecloud.im.mapper.ImConversationMapper;
import com.wecloud.im.mapper.ImConversationMembersMapper; import com.wecloud.im.mapper.ImConversationMembersMapper;
import com.wecloud.im.param.ApiImConversationMembersPageParam; import com.wecloud.im.param.*;
import com.wecloud.im.param.ApiImConversationMembersQueryVo;
import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ListConversationMembersParam;
import com.wecloud.im.param.ImConversationMembersPageParam;
import com.wecloud.im.param.ImConversationMembersQueryVo;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate; import com.wecloud.im.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.*;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.vo.ConversationMemberVo; import com.wecloud.im.vo.ConversationMemberVo;
import com.wecloud.im.ws.enums.MsgTypeEnum; import com.wecloud.im.ws.enums.MsgTypeEnum;
import com.wecloud.im.ws.enums.WsResponseCmdEnum; import com.wecloud.im.ws.enums.WsResponseCmdEnum;
...@@ -37,15 +27,12 @@ import io.geekidea.springbootplus.framework.common.exception.BusinessException; ...@@ -37,15 +27,12 @@ import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl; import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo; import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging; 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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -83,6 +70,9 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa ...@@ -83,6 +70,9 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
@Autowired @Autowired
private ImConversationMembersMapper imConversationMembersMapper; private ImConversationMembersMapper imConversationMembersMapper;
@Autowired
private ContextService contextService;
@Override @Override
public ApiResult<List<ApiImConversationMembersQueryVo>> getRestApiImConversationMembersList(ApiImConversationMembersPageParam apiImConversationMembersPageParam, ImApplication imApplication) { public ApiResult<List<ApiImConversationMembersQueryVo>> getRestApiImConversationMembersList(ApiImConversationMembersPageParam apiImConversationMembersPageParam, ImApplication imApplication) {
...@@ -162,12 +152,12 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa ...@@ -162,12 +152,12 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> saveOrUpdateAttr(ImConversationMemAttrUpdate imConversationMemAttrUpdate) { public Boolean saveOrUpdateAttr(ImConversationMemAttrUpdate imConversationMemAttrUpdate) {
// shiro线程中获取当前token // 获取当前client
JwtToken curentJwtToken = JwtUtil.getCurrentJwtToken(); ImClient createClient = contextService.getImClientIfNotNullOrThrow();
// 根据appKey查询application // 根据appId查询application
ImApplication imApplication = imApplicationService.getCacheAppByAppKey(curentJwtToken.getAppKey()); ImApplication imApplication = contextService.getImApplicationIfNotNullOrThrow(createClient.getFkAppid());
ImClient imClientSender = imClientService.getCurrentClient(); ImClient imClientSender = imClientService.getCurrentClient();
...@@ -180,7 +170,7 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa ...@@ -180,7 +170,7 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
); );
if (imConversationMember == null) { if (imConversationMember == null) {
return ApiResult.fail(); return false;
} }
...@@ -197,15 +187,8 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa ...@@ -197,15 +187,8 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
boolean b = imConversationMembersService.updateById(imConversationMember); boolean b = imConversationMembersService.updateById(imConversationMember);
if (b) {
//TODO ws下发群成员属性变动事件 //TODO ws下发群成员属性变动事件
return b;
return ApiResult.ok();
} else {
return ApiResult.fail();
}
} }
......
package com.wecloud.im.service.impl; 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.service.impl.BaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
...@@ -8,11 +24,11 @@ import com.wecloud.im.entity.ImConversationMembers; ...@@ -8,11 +24,11 @@ import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.entity.ImInbox; import com.wecloud.im.entity.ImInbox;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.entity.ImMessage;
import com.wecloud.im.entity.ImMessageOnlineSend; import com.wecloud.im.entity.ImMessageOnlineSend;
import com.wecloud.im.enums.ReadMsgStatusEnum;
import com.wecloud.im.mapper.ImInboxMapper; import com.wecloud.im.mapper.ImInboxMapper;
import com.wecloud.im.param.ImMsgReceivedStatusUpdate; import com.wecloud.im.param.ImMsgReceivedStatusUpdate;
import com.wecloud.im.param.MsgReadStatusUpdateParam; import com.wecloud.im.param.MsgReadStatusUpdateParam;
import com.wecloud.im.param.UpdateMsgReadStatusByConversationParam; import com.wecloud.im.param.UpdateMsgReadStatusByConversationParam;
import com.wecloud.im.sdk.enums.ReadMsgStatusEnum;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService; import com.wecloud.im.service.ImConversationMembersService;
...@@ -22,20 +38,6 @@ import com.wecloud.im.ws.enums.MsgTypeEnum; ...@@ -22,20 +38,6 @@ import com.wecloud.im.ws.enums.MsgTypeEnum;
import com.wecloud.im.ws.enums.WsResponseCmdEnum; import com.wecloud.im.ws.enums.WsResponseCmdEnum;
import com.wecloud.im.ws.model.WsResponse; import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.sender.ChannelSender; import com.wecloud.im.ws.sender.ChannelSender;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* 消息收件箱表 服务实现类 * 消息收件箱表 服务实现类
...@@ -96,7 +98,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox> ...@@ -96,7 +98,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> updateImMsgReceived(ImMsgReceivedStatusUpdate imMsgReceivedUpdate) { public Boolean updateImMsgReceived(ImMsgReceivedStatusUpdate imMsgReceivedUpdate) {
ImClient curentClient = imClientService.getCurrentClient(); ImClient curentClient = imClientService.getCurrentClient();
// 修改已接收状态 // 修改已接收状态
...@@ -119,7 +121,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox> ...@@ -119,7 +121,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
this.updateImMsgRead(msgReadStatusUpdateParam); this.updateImMsgRead(msgReadStatusUpdateParam);
} }
return ApiResult.ok(); return true;
} }
/** /**
...@@ -137,7 +139,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox> ...@@ -137,7 +139,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> updateImMsgRead(MsgReadStatusUpdateParam msgReadStatusUpdateParam) { public Boolean updateImMsgRead(MsgReadStatusUpdateParam msgReadStatusUpdateParam) {
ImClient curentClient = imClientService.getCurrentClient(); ImClient curentClient = imClientService.getCurrentClient();
// 修改已读状态 // 修改已读状态
...@@ -151,7 +153,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox> ...@@ -151,7 +153,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
contentMap.put("receiverId", curentClient.getClientId()); contentMap.put("receiverId", curentClient.getClientId());
sendMsgStatus(curentClient, MsgTypeEnum.CLIENT_READ_MSG, contentMap, msgReadStatusUpdateParam.getMsgIds()); sendMsgStatus(curentClient, MsgTypeEnum.CLIENT_READ_MSG, contentMap, msgReadStatusUpdateParam.getMsgIds());
return ApiResult.ok(); return true;
} }
...@@ -176,7 +178,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox> ...@@ -176,7 +178,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
HashMap<String, String> contentMap = Maps.newHashMap(); HashMap<String, String> contentMap = Maps.newHashMap();
contentMap.put("receiverId", currentClient.getClientId()); contentMap.put("receiverId", currentClient.getClientId());
sendMsgStatus(currentClient, MsgTypeEnum.CLIENT_READ_MSG, contentMap, msgIds); sendMsgStatus(currentClient, MsgTypeEnum.CLIENT_READ_MSG, contentMap, msgIds);
return null; return true;
} }
/** /**
......
package com.wecloud.im.service.impl; 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.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 lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.im.entity.ImApiMessageOnlineSend; import com.wecloud.im.entity.ImApiMessageOnlineSend;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
...@@ -14,7 +32,6 @@ import com.wecloud.im.entity.ImConversation; ...@@ -14,7 +32,6 @@ import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.entity.ImConversationMembers; import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.entity.ImMessage;
import com.wecloud.im.entity.ImMessageOnlineSend; import com.wecloud.im.entity.ImMessageOnlineSend;
import com.wecloud.im.enums.ChatTypeEnum;
import com.wecloud.im.mapper.ImMessageMapper; import com.wecloud.im.mapper.ImMessageMapper;
import com.wecloud.im.mq.MqSender; import com.wecloud.im.mq.MqSender;
import com.wecloud.im.param.ChatContentVo; import com.wecloud.im.param.ChatContentVo;
...@@ -25,6 +42,8 @@ import com.wecloud.im.param.MsgDeleteParam; ...@@ -25,6 +42,8 @@ import com.wecloud.im.param.MsgDeleteParam;
import com.wecloud.im.param.add.ImMsgRecall; import com.wecloud.im.param.add.ImMsgRecall;
import com.wecloud.im.param.add.ImMsgSendToOnlineClient; import com.wecloud.im.param.add.ImMsgSendToOnlineClient;
import com.wecloud.im.param.add.ImMsgUpdate; import com.wecloud.im.param.add.ImMsgUpdate;
import com.wecloud.im.sdk.enums.ChatTypeEnum;
import com.wecloud.im.service.ContextService;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService; import com.wecloud.im.service.ImConversationMembersService;
...@@ -44,23 +63,7 @@ import com.wecloud.im.ws.sender.ChannelSender; ...@@ -44,23 +63,7 @@ import com.wecloud.im.ws.sender.ChannelSender;
import com.wecloud.pushserver.client.model.constant.MqConstant; import com.wecloud.pushserver.client.model.constant.MqConstant;
import com.wecloud.pushserver.client.model.dto.PushDTO; import com.wecloud.pushserver.client.model.dto.PushDTO;
import com.wecloud.utils.JsonUtils; import com.wecloud.utils.JsonUtils;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
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;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/** /**
* 消息存储表 服务实现类 * 消息存储表 服务实现类
...@@ -89,6 +92,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -89,6 +92,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
private ImConversationMembersService imConversationMembersService; private ImConversationMembersService imConversationMembersService;
@Autowired @Autowired
private ContextService contextService;
@Autowired
private ChannelSender channelSender; private ChannelSender channelSender;
@Autowired @Autowired
...@@ -202,23 +208,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -202,23 +208,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean withdrawMsg(ActionRequest request, ImMsgRecall imMsgRecall) { public Boolean withdrawMsg(ImMsgRecall imMsgRecall) {
ImClient imClientSender; ImClient imClientSender = contextService.getImClientIfNotNullOrThrow();
ImApplication imApplication; ImApplication imApplication = contextService.getImApplicationIfNotNullOrThrow(imClientSender.getFkAppid());
if (request != null) {
imClientSender = imClientService.getCacheImClient(request.getSenderClientId());
imApplication = imApplicationService.getCacheById(imClientSender.getFkAppid());
} else {
imClientSender = imClientService.getCurrentClient();
// 查询imApplication
imApplication = imApplicationService.getCacheById(imClientSender.getFkAppid());
}
if (imClientSender == null) {
throw new BusinessException("查无发送用户信息");
}
if (imApplication == null) {
throw new BusinessException("查无应用信息");
}
ImMessage messageById = this.getById(imMsgRecall.getMsgId()); ImMessage messageById = this.getById(imMsgRecall.getMsgId());
// 判断该消息是否是该客户端发送 todo 单向撤回、双向撤回开关可配置 // 判断该消息是否是该客户端发送 todo 单向撤回、双向撤回开关可配置
...@@ -313,23 +305,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -313,23 +305,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
} }
@Override @Override
public Boolean deleteMsg(ActionRequest request, MsgDeleteParam param) { public Boolean deleteMsg(MsgDeleteParam param) {
ImClient imClientSender; ImClient imClientSender = contextService.getImClientIfNotNullOrThrow();
ImApplication imApplication; ImApplication imApplication = contextService.getImApplicationIfNotNullOrThrow(imClientSender.getFkAppid());
if (request != null) {
imClientSender = imClientService.getCacheImClient(request.getSenderClientId());
imApplication = imApplicationService.getCacheById(imClientSender.getFkAppid());
} else {
imClientSender = imClientService.getCurrentClient();
// 查询imApplication
imApplication = imApplicationService.getCacheById(imClientSender.getFkAppid());
}
if (imClientSender == null) {
throw new BusinessException("查无发送用户信息");
}
if (imApplication == null) {
throw new BusinessException("查无应用信息");
}
// todo 单向撤回、双向撤回开关可配置 // todo 单向撤回、双向撤回开关可配置
Boolean deleteOther = true; Boolean deleteOther = true;
List<ImMessage> imMessageList = this.listByIds(param.getMsgIds()); List<ImMessage> imMessageList = this.listByIds(param.getMsgIds());
...@@ -457,16 +435,8 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -457,16 +435,8 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
* @return * @return
*/ */
@Override @Override
public ReaderList getReaders(ActionRequest request, GetReadersParam param) { public ReaderList getReaders(GetReadersParam param) {
ImClient imClientSender; ImClient imClientSender = contextService.getImClientIfNotNullOrThrow();
if (request != null) {
imClientSender = imClientService.getCacheImClient(request.getSenderClientId());
} else {
imClientSender = imClientService.getCurrentClient();
}
if (imClientSender == null) {
throw new BusinessException("查无发送用户信息");
}
List<ReaderVo> readerVos = imMessageMapper.getReaders(imClientSender.getId(), param); List<ReaderVo> readerVos = imMessageMapper.getReaders(imClientSender.getId(), param);
if (CollectionUtils.isEmpty(readerVos)) { if (CollectionUtils.isEmpty(readerVos)) {
return null; return null;
......
package com.wecloud.im.service.impl; package com.wecloud.im.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImMultiRtcRoomMember; import com.wecloud.im.entity.ImMultiRtcRoomMember;
import com.wecloud.im.mapper.ImMultiRtcRoomMemberMapper; import com.wecloud.im.mapper.ImMultiRtcRoomMemberMapper;
import com.wecloud.im.service.ImMultiRtcRoomMemberService; import com.wecloud.im.service.ImMultiRtcRoomMemberService;
...@@ -10,6 +9,8 @@ import lombok.extern.slf4j.Slf4j; ...@@ -10,6 +9,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/3/16 9:27 * @Date 2022/3/16 9:27
...@@ -23,10 +24,11 @@ public class ImMultiRtcRoomMemberServiceImpl extends BaseServiceImpl<ImMultiRtcR ...@@ -23,10 +24,11 @@ public class ImMultiRtcRoomMemberServiceImpl extends BaseServiceImpl<ImMultiRtcR
private ImMultiRtcRoomMemberMapper imMultiRtcRoomMemberMapper; private ImMultiRtcRoomMemberMapper imMultiRtcRoomMemberMapper;
@Override @Override
public void changeRoomMemberState(ImClient currentClient, String roomId, Integer state) { public void changeRoomMemberState(Long fkClientId, String roomId, Integer state) {
this.update(new UpdateWrapper<ImMultiRtcRoomMember>().lambda() this.update(new UpdateWrapper<ImMultiRtcRoomMember>().lambda()
.eq(ImMultiRtcRoomMember::getRoomId, roomId) .eq(ImMultiRtcRoomMember::getRoomId, roomId)
.eq(ImMultiRtcRoomMember::getFkClientId, currentClient.getId()) .eq(ImMultiRtcRoomMember::getFkClientId, fkClientId)
.set(ImMultiRtcRoomMember::getHeartbeatTime, new Date())
.set(ImMultiRtcRoomMember::getState, state)); .set(ImMultiRtcRoomMember::getState, state));
} }
} }
package com.wecloud.im.service.impl; package com.wecloud.im.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.wecloud.im.entity.ImMultiRtcRoom;
import com.wecloud.im.enums.MultiRtcRoomStateEnum;
import com.wecloud.im.mapper.ImMultiRtcRoomMapper;
import com.wecloud.im.service.ImMultiRtcRoomService;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl; import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.wecloud.im.entity.ImMultiRtcRoom;
import com.wecloud.im.mapper.ImMultiRtcRoomMapper;
import com.wecloud.im.service.ImMultiRtcRoomService;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/3/16 9:27 * @Date 2022/3/16 9:27
...@@ -28,7 +28,7 @@ public class ImMultiRtcRoomServiceImpl extends BaseServiceImpl<ImMultiRtcRoomMap ...@@ -28,7 +28,7 @@ public class ImMultiRtcRoomServiceImpl extends BaseServiceImpl<ImMultiRtcRoomMap
private ImMultiRtcRoomService imMultiRtcRoomService; private ImMultiRtcRoomService imMultiRtcRoomService;
@Override @Override
@Cacheable(key = "'rtcRoomKey_' + #p0+#p1") // @Cacheable(key = "'rtcRoomKey_' + #p0+#p1")
public ImMultiRtcRoom getCachedMultiRtcRoom(Long fkAppid, String roomId) { public ImMultiRtcRoom getCachedMultiRtcRoom(Long fkAppid, String roomId) {
ImMultiRtcRoom rtcRoom = imMultiRtcRoomService.getOne(new QueryWrapper<ImMultiRtcRoom>().lambda() ImMultiRtcRoom rtcRoom = imMultiRtcRoomService.getOne(new QueryWrapper<ImMultiRtcRoom>().lambda()
.eq(ImMultiRtcRoom::getFkAppid, fkAppid) .eq(ImMultiRtcRoom::getFkAppid, fkAppid)
......
...@@ -20,6 +20,8 @@ import com.wecloud.im.service.ImConversationMembersService; ...@@ -20,6 +20,8 @@ import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImConversationService; import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.service.ImMessageService; import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.thousandchat.cache.ThousandChatCacheManager; import com.wecloud.im.thousandchat.cache.ThousandChatCacheManager;
import com.wecloud.im.thousandchat.param.LastestReceivedMsg;
import com.wecloud.im.thousandchat.service.ThousandChatService;
import com.wecloud.im.ws.enums.WsResponseCmdEnum; import com.wecloud.im.ws.enums.WsResponseCmdEnum;
import com.wecloud.im.ws.model.WsResponse; import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.sender.ChannelSender; import com.wecloud.im.ws.sender.ChannelSender;
...@@ -31,9 +33,16 @@ import io.geekidea.springbootplus.framework.common.api.ApiCode; ...@@ -31,9 +33,16 @@ import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.channel.socket.nio.NioSocketChannel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -46,7 +55,8 @@ import java.util.Map; ...@@ -46,7 +55,8 @@ import java.util.Map;
*/ */
@Slf4j @Slf4j
@Component @Component
@ActionMapping(value = "/chat") @ActionMapping
@Api(value = "万人群消息处理", tags = {"万人群消息处理"})
public class ThousandChatAction { public class ThousandChatAction {
@Autowired @Autowired
...@@ -63,11 +73,14 @@ public class ThousandChatAction { ...@@ -63,11 +73,14 @@ public class ThousandChatAction {
private ChannelSender channelSender; private ChannelSender channelSender;
@Autowired @Autowired
private ThousandChatCacheManager thousandChatCacheManager; private ThousandChatCacheManager thousandChatCacheManager;
@Autowired
private ThousandChatService thousandChatService;
@Autowired @Autowired
private MqSender mqSender; private MqSender mqSender;
@ActionMapping("/thousand/send") @ActionMapping("/chat/thousand/send")
@ApiOperation(value = "万人群消息发送")
public void sendMsg(ActionRequest request, ChatContentVo data, String reqId) { public void sendMsg(ActionRequest request, ChatContentVo data, String reqId) {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("接收到参数,reqId: {},\n data: {}, ", data); log.debug("接收到参数,reqId: {},\n data: {}, ", data);
...@@ -132,6 +145,24 @@ public class ThousandChatAction { ...@@ -132,6 +145,24 @@ public class ThousandChatAction {
} }
/** /**
* 消息修改为已接收状态
*/
@ActionMapping("/imState/msgReceivedUpdate")
@ApiOperation(value = "万人群消息修改为已接收状态")
public ApiResult<Boolean> updateImMsgReceived(@RequestBody @Validated LastestReceivedMsg lastestReceivedMsg) {
return thousandChatService.updateImMsgReceived(lastestReceivedMsg);
}
/**
* 消息修改为已读状态
*/
@ActionMapping("/imState/msgReadUpdate")
@ApiOperation(value = "万人群消息修改为已读状态")
public ApiResult<Boolean> updateInMsgReadUpdate(Long lastestMsgId) {
return thousandChatService.updateImMsgRead(lastestMsgId);
}
/**
* 发送消息给在线客户 * 发送消息给在线客户
* @param data * @param data
* @param imMessageOnlineSend * @param imMessageOnlineSend
......
...@@ -20,29 +20,11 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -20,29 +20,11 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/imState") @RequestMapping("/imState")
@Api(value = "万人群消息处理API", tags = {"万人群消息处理"}) @Api(value = "万人群消息处理API", tags = {"万人群消息处理API"})
public class ThousandChatController extends BaseController { public class ThousandChatController extends BaseController {
@Autowired @Autowired
private ThousandChatService thousandChatService; private ThousandChatService thousandChatService;
/**
* 消息修改为已接收状态
*/
@PostMapping("/msgReceivedUpdate")
@ApiOperation(value = "万人群消息修改为已接收状态")
public ApiResult<Boolean> updateImMsgReceived(@RequestBody @Validated LastestReceivedMsg lastestReceivedMsg) {
return thousandChatService.updateImMsgReceived(lastestReceivedMsg);
}
/**
* 消息修改为已读状态
*/
@PostMapping("/msgReadUpdate")
@ApiOperation(value = "万人群消息修改为已读状态")
public ApiResult<Boolean> updateInMsgReadUpdate(Long lastestMsgId) {
return thousandChatService.updateImMsgRead(lastestMsgId);
}
} }
package com.wecloud.im.thousandchat.param; package com.wecloud.im.thousandchat.param;
import com.wecloud.dispatch.common.BaseRequest;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity; import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -9,6 +10,7 @@ import lombok.experimental.Accessors; ...@@ -9,6 +10,7 @@ import lombok.experimental.Accessors;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.io.Serializable;
/** /**
* @author lixiaozhong * @author lixiaozhong
...@@ -16,9 +18,8 @@ import javax.validation.constraints.NotNull; ...@@ -16,9 +18,8 @@ import javax.validation.constraints.NotNull;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@EqualsAndHashCode(callSuper = true) @ApiModel(value = "LastestReceivedMsg")
@ApiModel(value = "ImMsgReceivedStatusUpdate") public class LastestReceivedMsg implements Serializable {
public class LastestReceivedMsg extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "消息id,只需要发送最新的一条已接收消息", required = true) @ApiModelProperty(value = "消息id,只需要发送最新的一条已接收消息", required = true)
......
...@@ -42,7 +42,7 @@ public class ClientInfoVo implements Serializable { ...@@ -42,7 +42,7 @@ public class ClientInfoVo implements Serializable {
/** /**
* 与我关系 * 与我关系
* @see com.wecloud.im.enums.RelationEnum * @see com.wecloud.im.sdk.enums.RelationEnum
*/ */
@ApiModelProperty("与我关系 1-陌生人 2-好友 3-被我拉黑") @ApiModelProperty("与我关系 1-陌生人 2-好友 3-被我拉黑")
private Integer relation; private Integer relation;
......
...@@ -37,14 +37,14 @@ public class ConversationMemberVo implements Serializable { ...@@ -37,14 +37,14 @@ public class ConversationMemberVo implements Serializable {
/** /**
* 群内角色 * 群内角色
* @see com.wecloud.im.enums.GroupRoleEnum * @see com.wecloud.im.sdk.enums.GroupRoleEnum
*/ */
@ApiModelProperty("群内角色") @ApiModelProperty("群内角色")
private Integer role; private Integer role;
/** /**
* 禁言开关 * 禁言开关
* @see com.wecloud.im.enums.MutedEnum * @see com.wecloud.im.sdk.enums.MutedEnum
*/ */
@ApiModelProperty("禁言开关 1-未禁言 2-禁言") @ApiModelProperty("禁言开关 1-未禁言 2-禁言")
private Integer muted; private Integer muted;
......
package com.wecloud.im.vo; package com.wecloud.im.vo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -10,6 +9,8 @@ import java.io.Serializable; ...@@ -10,6 +9,8 @@ import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import com.fasterxml.jackson.annotation.JsonIgnore;
/** /**
* <pre> * <pre>
* 会话表 查询结果对象 * 会话表 查询结果对象
...@@ -22,7 +23,8 @@ import java.util.HashMap; ...@@ -22,7 +23,8 @@ import java.util.HashMap;
@Accessors(chain = true) @Accessors(chain = true)
@ApiModel(value = "MyConversationListVo") @ApiModel(value = "MyConversationListVo")
public class ConversationVo implements Serializable { public class ConversationVo implements Serializable {
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = -4330507756623541941L;
@ApiModelProperty("会话id") @ApiModelProperty("会话id")
private Long id; private Long id;
...@@ -66,7 +68,7 @@ public class ConversationVo implements Serializable { ...@@ -66,7 +68,7 @@ public class ConversationVo implements Serializable {
/** /**
* 禁言开关 * 禁言开关
* @see com.wecloud.im.enums.MutedEnum * @see com.wecloud.im.sdk.enums.MutedEnum
*/ */
@ApiModelProperty("禁言开关 1-未禁言 2-禁言") @ApiModelProperty("禁言开关 1-未禁言 2-禁言")
private Integer muted; private Integer muted;
......
...@@ -14,7 +14,7 @@ public enum WsResponseCmdEnum { ...@@ -14,7 +14,7 @@ public enum WsResponseCmdEnum {
/** /**
* 服务端下发通知型消息,例如:好友申请,好友认证结果. * 服务端下发通知型消息,例如:好友申请,好友认证结果.
* 参数值参考{@link com.wecloud.im.enums.EventResponseSubCmdEnum EventResponseSubCmdEnum} * 参数值参考{@link com.wecloud.im.sdk.enums.EventResponseSubCmdEnum EventResponseSubCmdEnum}
*/ */
NOTICE_EVENT_MSG(7), NOTICE_EVENT_MSG(7),
......
package com.wecloud.im.ws.manager; package com.wecloud.im.ws.manager;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.ws.cache.UserStateListener; import com.wecloud.im.ws.cache.UserStateListener;
import com.wecloud.im.ws.model.ClientInfo; import com.wecloud.im.ws.model.ClientInfo;
import com.wecloud.im.ws.utils.RedisUtils; import com.wecloud.im.ws.utils.RedisUtils;
......
package com.wecloud.im.ws.model; package com.wecloud.im.ws.model;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.config.il8n.I18nMessageUtil;
import io.geekidea.springbootplus.framework.config.il8n.LanguageEnum;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.util.Collections;
import java.util.Map;
import com.wecloud.dispatch.util.ActionRequestHolder;
import com.wecloud.im.ws.enums.WsResponseCmdEnum;
/** /**
* @Description websocket服务端响应消息和下方消息的封装对象 * @Description websocket服务端响应消息和下方消息的封装对象
...@@ -41,4 +50,57 @@ public class WsResponse<T> implements Serializable { ...@@ -41,4 +50,57 @@ public class WsResponse<T> implements Serializable {
*/ */
private String reqId; private String reqId;
public static WsResponse<Boolean> result(ApiCode apiCode) {
return result(apiCode, true);
}
public static <T> WsResponse<T> result(ApiCode apiCode, T data) {
return result(apiCode, "", data);
}
public static <T> WsResponse<T> result(ApiCode apiCode, String message, T data) {
return result(WsResponseCmdEnum.RES.getCmdCode(), apiCode, message, data);
}
public static <T> WsResponse<T> result(Integer cmd, ApiCode apiCode, String message, T data) {
String success = "SUCCESS";
try {
message = I18nMessageUtil.getMessage(LanguageEnum.getLanguageType(null), apiCode.getMessage(), success);
} catch (IOException e) {
message = success;
}
WsResponse<T> response = new WsResponse<>();
response.setCmd(cmd).setCode(apiCode.getCode()).setMsg(message).setData(data);
if (ActionRequestHolder.getActionRequest() != null) {
response.setReqId(ActionRequestHolder.getReqId());
}
return response;
}
public static WsResponse<Map<String, Boolean>> ok() {
return ok(Collections.emptyMap());
}
public static <T> WsResponse<T> ok(T data) {
return result(ApiCode.SUCCESS, data);
}
public static WsResponse<Map<String, Boolean>> fail() {
return ok(Collections.emptyMap());
}
public static WsResponse<Boolean> fail(String message) {
return result(ApiCode.FAIL, message, false);
}
public static <T> WsResponse<T> fail(ApiCode apiCode) {
return result(apiCode, "", null);
}
public static <T> WsResponse<T> fail(ApiCode apiCode, String message) {
return result(apiCode, message, null);
}
} }
...@@ -43,7 +43,7 @@ public class ChannelSender { ...@@ -43,7 +43,7 @@ public class ChannelSender {
* 指定ip调用,router=address; * 指定ip调用,router=address;
* injvm = false要设置成false,否则会调用到本地提供者 * injvm = false要设置成false,否则会调用到本地提供者
*/ */
@DubboReference(injvm = false, interfaceClass = RouterSendService.class, parameters = {"router", "address"}) @DubboReference(injvm = false, check = false, interfaceClass = RouterSendService.class, parameters = {"router", "address"})
private RouterSendService routerSendService; private RouterSendService routerSendService;
/** /**
...@@ -128,15 +128,21 @@ public class ChannelSender { ...@@ -128,15 +128,21 @@ public class ChannelSender {
String msgJson = JsonUtils.encodeJson(responseModel); String msgJson = JsonUtils.encodeJson(responseModel);
List<ClientChannelInfo> channelInfos = userStateCacheManager.findOnlineInfosByClientId(toClientId); List<ClientChannelInfo> channelInfos = userStateCacheManager.findOnlineInfosByClientId(toClientId);
log.info("获取在线用户入参 {}, 结果 {}", toClientId, JSON.toJSONString(channelInfos));
// 一个用户存在多端的情况,所以先进行分类,key是ip地址,value是channel的列表 // 一个用户存在多端的情况,所以先进行分类,key是ip地址,value是channel的列表
Map<String, List<ClientChannelInfo>> ipChannels = channelInfos.stream().collect(Collectors.groupingBy(ClientChannelInfo::getLanIp)); Map<String, List<ClientChannelInfo>> ipChannels = channelInfos.stream().collect(Collectors.groupingBy(ClientChannelInfo::getLanIp));
log.info("分组在线用户入参 {}, 结果 {}", toClientId, JSON.toJSONString(ipChannels));
for (Map.Entry<String, List<ClientChannelInfo>> channelInfoEntry : ipChannels.entrySet()) { for (Map.Entry<String, List<ClientChannelInfo>> channelInfoEntry : ipChannels.entrySet()) {
log.info("在线用户入参 {}, 具体ip结果 {}", toClientId, JSON.toJSONString(channelInfoEntry));
// 是否为当前机器的ip // 是否为当前机器的ip
if (GetIpUtils.getlanIp().equals(channelInfoEntry.getKey())) { if (GetIpUtils.getlanIp().equals(channelInfoEntry.getKey())) {
// 调用本地下发 // 调用本地下发
log.info("在线用户入参 {}, 具体ip结果 {}", toClientId, JSON.toJSONString(channelInfoEntry));
for(ClientChannelInfo clientChannelInfo : channelInfoEntry.getValue()) { for(ClientChannelInfo clientChannelInfo : channelInfoEntry.getValue()) {
this.sendMsgLocal(toClientId, clientChannelInfo.getPlatform(), msgJson); this.sendMsgLocal(toClientId, clientChannelInfo.getPlatform(), msgJson);
} }
...@@ -217,8 +223,10 @@ public class ChannelSender { ...@@ -217,8 +223,10 @@ public class ChannelSender {
* @return * @return
*/ */
private boolean sendMsgLocal(String key, String msgJsonStr) { private boolean sendMsgLocal(String key, String msgJsonStr) {
log.info("消息推送 key {} 内容 {}", key, msgJsonStr);
ClientInfo clientInfo = ChannelManager.SESSION_INFO_MAP.get(key); ClientInfo clientInfo = ChannelManager.SESSION_INFO_MAP.get(key);
if (clientInfo == null) { if (clientInfo == null) {
log.info("消息推送 key {} 本地map取设备信息为空", key);
return false; return false;
} }
...@@ -229,7 +237,7 @@ public class ChannelSender { ...@@ -229,7 +237,7 @@ public class ChannelSender {
} }
// 判断连接是否断开 // 判断连接是否断开
if (nioSocketChannel.isShutdown()) { if (nioSocketChannel.isShutdown()) {
log.warn("writeData 已连接断开: {}\n channelId: {}", msgJsonStr, nioSocketChannel.id().asLongText()); log.info("writeData 已连接断开: {}\n channelId: {}", msgJsonStr, nioSocketChannel.id().asLongText());
return false; return false;
} }
......
package com.wecloud.multimeet.entity.dto; package com.wecloud.multimeet.entity.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
...@@ -27,7 +26,7 @@ public class RoomMemberDto implements Serializable { ...@@ -27,7 +26,7 @@ public class RoomMemberDto implements Serializable {
/** /**
* 多人音视频房间成员状态枚举 * 多人音视频房间成员状态枚举
* @see com.wecloud.im.enums.MultiRtcMemberStateEnum * @see com.wecloud.im.sdk.enums.MultiRtcMemberStateEnum
*/ */
private Integer state; private Integer state;
......
package com.wecloud.multimeet.service; package com.wecloud.multimeet.service;
import com.wecloud.im.param.AgreeToMultiMeetParam; import com.wecloud.im.param.AgreeToMultiMeetParam;
import com.wecloud.im.param.HeartbeatMultiMeetParam;
import com.wecloud.im.param.InviteToMultiMeetParam; import com.wecloud.im.param.InviteToMultiMeetParam;
import com.wecloud.im.param.LeaveFromMultiMeetParam; import com.wecloud.im.param.LeaveFromMultiMeetParam;
import com.wecloud.im.param.NotAnsweredMultiMeetParam;
import com.wecloud.im.param.RejectToMultiMeetParam; import com.wecloud.im.param.RejectToMultiMeetParam;
/** /**
...@@ -37,4 +39,26 @@ public interface MultiMeetService { ...@@ -37,4 +39,26 @@ public interface MultiMeetService {
*/ */
void leave(LeaveFromMultiMeetParam param); void leave(LeaveFromMultiMeetParam param);
/**
* 拒绝接听
* @param param
*/
void notAnswered(NotAnsweredMultiMeetParam param);
/**
* 心跳接收
* @param param
*/
void heartbeat(HeartbeatMultiMeetParam param);
/**
* 呼叫超时逻辑处理
*/
void callingTimeout();
/**
* 异常断线逻辑处理
*/
void disconnect();
} }
...@@ -11,7 +11,7 @@ public class RtcCallResponse extends RtcDataBase implements Serializable { ...@@ -11,7 +11,7 @@ public class RtcCallResponse extends RtcDataBase implements Serializable {
/** /**
* 类型: "video" 或 "voice" * 类型: "video" 或 "voice"
* @see com.wecloud.im.enums.CallTypeEnum * @see com.wecloud.im.sdk.enums.CallTypeEnum
*/ */
private Integer callType; private Integer callType;
......
This diff is collapsed. Click to expand it.
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