Commit 619c3ca3 by Shadow

1、调整模块目录,分离业务和技术

parent 0f67fbc0
# wecloud-im 前端Websocket对接文档 # wecloud-im 前端Websocket对接文档
...@@ -108,9 +108,7 @@ private void getSign(String timestamp, String clientId, String appKey, String ap ...@@ -108,9 +108,7 @@ private void getSign(String timestamp, String clientId, String appKey, String ap
String data = timestamp + clientId + appKey + appSecret; String data = timestamp + clientId + appKey + appSecret;
String sign = DigestUtils.md5DigestAsHex(data.getBytes()); String sign = DigestUtils.md5DigestAsHex(data.getBytes());
} }public static void main(String[] args) {
public static void main(String[] args) {
String clientId = "client_123123"; String clientId = "client_123123";
String appKey = "elLwpel1gWCHDqZy"; String appKey = "elLwpel1gWCHDqZy";
String appSecret = "68809bb5a9077a83631aeb0b17b5965d6b2302faf2ab3737"; String appSecret = "68809bb5a9077a83631aeb0b17b5965d6b2302faf2ab3737";
......
# wecloud-im 即时通讯云对接文档 # wecloud-im 即时通讯云对接文档
...@@ -154,9 +154,7 @@ private void getSign(String timestamp, String clientId, String appKey, String ap ...@@ -154,9 +154,7 @@ private void getSign(String timestamp, String clientId, String appKey, String ap
String data = timestamp + clientId + appKey + appSecret; String data = timestamp + clientId + appKey + appSecret;
String sign = DigestUtils.md5DigestAsHex(data.getBytes()); String sign = DigestUtils.md5DigestAsHex(data.getBytes());
} }public static void main(String[] args) {
public static void main(String[] args) {
String clientId = "client_123123"; String clientId = "client_123123";
String appKey = "elLwpel1gWCHDqZy"; String appKey = "elLwpel1gWCHDqZy";
String appSecret = "68809bb5a9077a83631aeb0b17b5965d6b2302faf2ab3737"; String appSecret = "68809bb5a9077a83631aeb0b17b5965d6b2302faf2ab3737";
......
...@@ -15,6 +15,10 @@ ...@@ -15,6 +15,10 @@
<name>im-biz</name> <name>im-biz</name>
<description>im 业务模块</description> <description>im 业务模块</description>
<properties>
<spring-boot.version>2.2.5.RELEASE</spring-boot.version>
</properties>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.wecloud</groupId> <groupId>com.wecloud</groupId>
...@@ -22,6 +26,21 @@ ...@@ -22,6 +26,21 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.wecloud</groupId>
<artifactId>im-common-log</artifactId>
</dependency>
<dependency>
<groupId>com.wecloud</groupId>
<artifactId>im-common-security</artifactId>
</dependency>
<dependency>
<groupId>io.geekidea.springbootplus</groupId>
<artifactId>im-server</artifactId>
</dependency>
<dependency>
<groupId>com.google.firebase</groupId> <groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId> <artifactId>firebase-admin</artifactId>
<version>6.4.0</version> <version>6.4.0</version>
......
/*
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud; package com.wecloud;
import com.wecloud.im.annotation.EnableRocketMq;
import io.geekidea.springbootplus.framework.util.PrintApplicationInfo;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
...@@ -31,6 +13,9 @@ import org.springframework.scheduling.annotation.EnableAsync; ...@@ -31,6 +13,9 @@ import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.wecloud.im.biz.core.rocketmq.annotation.EnableRocketMq;
import com.wecloud.im.core.util.PrintApplicationInfo;
/** /**
* 项目启动入口 * 项目启动入口
*/ */
...@@ -43,8 +28,8 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; ...@@ -43,8 +28,8 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
@ServletComponentScan @ServletComponentScan
@EnableCaching @EnableCaching
@EnableRocketMq @EnableRocketMq
@MapperScan({"io.geekidea.springbootplus.**.mapper", "com.wecloud.**.mapper"}) @MapperScan({"com.wecloud.**.mapper"})
@SpringBootApplication(scanBasePackages = {"io.geekidea.springbootplus", "com.wecloud"}) @SpringBootApplication(scanBasePackages = {"com.wecloud"})
public class SpringBootPlusApplication { public class SpringBootPlusApplication {
public static void main(String[] args) { public static void main(String[] args) {
......
package com.wecloud.config.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* wechat mp properties
*
* @author Binary Wang(https://github.com/binarywang)
*/
@Data
@Component
@ConfigurationProperties(prefix = "wx.mp")
public class WxMpProperties {
/**
* 是否使用redis存储access token
*/
private boolean useRedis;
/**
* redis 配置
*/
private RedisConfig redisConfig;
@Data
public static class RedisConfig {
/**
* redis服务器 主机地址
*/
private String host;
/**
* redis服务器 端口号
*/
private Integer port;
}
/**
* 多个公众号配置信息
*/
private List<MpConfig> configs;
@Data
public static class MpConfig {
/**
* 设置微信公众号的appid
*/
private String appId;
/**
* 设置微信公众号的app secret
*/
private String secret;
/**
* 设置微信公众号的token
*/
private String token;
/**
* 设置微信公众号的EncodingAESKey
*/
private String aesKey;
}
//
// @Override
// public String toString() {
// return JsonUtils.toJson(this);
// }
}
package com.wecloud.config.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* wxpay pay properties.
*
* @author Binary Wang
*/
@Data
@ConfigurationProperties(prefix = "wx.pay")
public class WxPayProperties {
/**
* 设置微信公众号或者小程序等的appid
*/
private String appId;
/**
* 微信支付商户号
*/
private String mchId;
/**
* 微信支付商户密钥
*/
private String mchKey;
/**
* 服务商模式下的子商户公众账号ID,普通模式请不要配置,请在配置文件中将对应项删除
*/
private String subAppId;
/**
* 服务商模式下的子商户号,普通模式请不要配置,最好是请在配置文件中将对应项删除
*/
private String subMchId;
/**
* apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定
*/
private String keyPath;
}
package com.wecloud.im.action; package com.wecloud.im.biz.action;
import com.wecloud.im.core.core.pagination.Paging;
import com.wecloud.im.core.log.annotation.OperationLog;
import com.wecloud.im.core.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;
...@@ -12,12 +9,15 @@ import java.util.Map; ...@@ -12,12 +9,15 @@ import java.util.Map;
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 com.wecloud.netty.dispatch.annotation.ActionMapping; import com.wecloud.im.biz.module.message.controller.param.ImClientBlacklistPageParam;
import com.wecloud.im.param.ImClientBlacklistPageParam; import com.wecloud.im.biz.module.message.controller.param.ImClientBlacklistQueryVo;
import com.wecloud.im.param.ImClientBlacklistQueryVo; import com.wecloud.im.biz.module.message.controller.param.add.ImClientBlacklistUpdate;
import com.wecloud.im.param.add.ImClientBlacklistUpdate; import com.wecloud.im.biz.module.message.service.ImClientBlacklistService;
import com.wecloud.im.service.ImClientBlacklistService; import com.wecloud.im.core.log.annotation.OperationLog;
import com.wecloud.im.core.log.enums.OperationLogType;
import com.wecloud.im.core.pagination.Paging;
import com.wecloud.im.server.model.WsResponse; import com.wecloud.im.server.model.WsResponse;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
/** /**
* ws 黑名单 * ws 黑名单
......
package com.wecloud.im.action; package com.wecloud.im.biz.action;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -13,25 +13,25 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -13,25 +13,25 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.wecloud.netty.dispatch.annotation.ActionMapping; import com.wecloud.im.biz.module.message.controller.param.ClientInfoParam;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.biz.module.message.controller.param.GetClientInfoParam;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.biz.module.message.controller.param.GetOnlineStatusParam;
import com.wecloud.im.param.ClientInfoParam; import com.wecloud.im.biz.module.message.controller.param.LogoutParam;
import com.wecloud.im.param.GetClientInfoParam; import com.wecloud.im.biz.module.message.controller.param.add.ImClientHeadPortraitAdd;
import com.wecloud.im.param.GetOnlineStatusParam; import com.wecloud.im.biz.module.message.controller.param.add.ImClientHeadPortraitAndNicknameUpdate;
import com.wecloud.im.param.LogoutParam; import com.wecloud.im.biz.module.message.controller.param.add.ImClientNicknameAdd;
import com.wecloud.im.param.add.ImClientHeadPortraitAdd; import com.wecloud.im.biz.module.message.controller.vo.ClientInfoVo;
import com.wecloud.im.param.add.ImClientHeadPortraitAndNicknameUpdate; import com.wecloud.im.biz.module.message.controller.vo.GetInfoListVo;
import com.wecloud.im.param.add.ImClientNicknameAdd; import com.wecloud.im.biz.module.message.controller.vo.ImOnlineStatusVo;
import com.wecloud.im.service.ContextService; import com.wecloud.im.biz.module.message.controller.vo.MyInfoVo;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.biz.module.message.entity.ImApplication;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.biz.module.message.entity.ImClient;
import com.wecloud.im.vo.ClientInfoVo; import com.wecloud.im.biz.module.message.service.ContextService;
import com.wecloud.im.vo.GetInfoListVo; import com.wecloud.im.biz.module.message.service.ImApplicationService;
import com.wecloud.im.vo.ImOnlineStatusVo; import com.wecloud.im.biz.module.message.service.ImClientService;
import com.wecloud.im.vo.MyInfoVo;
import com.wecloud.im.server.cache.UserStateCacheManager; import com.wecloud.im.server.cache.UserStateCacheManager;
import com.wecloud.im.server.model.WsResponse; import com.wecloud.im.server.model.WsResponse;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
/** /**
* 终端 action * 终端 action
......
package com.wecloud.im.action; package com.wecloud.im.biz.action;
import com.wecloud.im.core.common.api.ApiCode;
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;
...@@ -15,30 +14,31 @@ import org.springframework.stereotype.Component; ...@@ -15,30 +14,31 @@ import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.wecloud.netty.dispatch.annotation.ActionMapping; import com.wecloud.im.biz.module.message.controller.param.ChatRoomMemberPageParam;
import com.wecloud.im.param.ChatRoomMemberPageParam; import com.wecloud.im.biz.module.message.controller.param.DisbandConversationParam;
import com.wecloud.im.param.DisbandConversationParam; import com.wecloud.im.biz.module.message.controller.param.ExitChatRoomParam;
import com.wecloud.im.param.ExitChatRoomParam; import com.wecloud.im.biz.module.message.controller.param.GroupChatSettingParam;
import com.wecloud.im.param.GroupChatSettingParam; import com.wecloud.im.biz.module.message.controller.param.ImConversationQueryParam;
import com.wecloud.im.param.ImConversationQueryParam; import com.wecloud.im.biz.module.message.controller.param.IntoChatRoomParam;
import com.wecloud.im.param.IntoChatRoomParam; import com.wecloud.im.biz.module.message.controller.param.ListConversationParam;
import com.wecloud.im.param.ListConversationParam; import com.wecloud.im.biz.module.message.controller.param.MutedGroupMemberParam;
import com.wecloud.im.param.MutedGroupMemberParam; import com.wecloud.im.biz.module.message.controller.param.MutedGroupParam;
import com.wecloud.im.param.MutedGroupParam; import com.wecloud.im.biz.module.message.controller.param.SetAdminsParam;
import com.wecloud.im.param.SetAdminsParam; import com.wecloud.im.biz.module.message.controller.param.SetHeadPortraitParam;
import com.wecloud.im.param.SetHeadPortraitParam; import com.wecloud.im.biz.module.message.controller.param.TransferOwnerParam;
import com.wecloud.im.param.TransferOwnerParam; import com.wecloud.im.biz.module.message.controller.param.add.ImClientLeaveConversation;
import com.wecloud.im.param.add.ImClientLeaveConversation; import com.wecloud.im.biz.module.message.controller.param.add.ImClientToConversation;
import com.wecloud.im.param.add.ImClientToConversation; import com.wecloud.im.biz.module.message.controller.param.add.ImConversationAttrUpdate;
import com.wecloud.im.param.add.ImConversationAttrUpdate; import com.wecloud.im.biz.module.message.controller.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImConversationCreate; import com.wecloud.im.biz.module.message.controller.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.param.add.ImConversationDisplayUpdate; import com.wecloud.im.biz.module.message.controller.param.add.ImConversationNameUpdate;
import com.wecloud.im.param.add.ImConversationNameUpdate; import com.wecloud.im.biz.module.message.controller.vo.ChatRoomMemberVo;
import com.wecloud.im.service.ImConversationService; import com.wecloud.im.biz.module.message.controller.vo.ConversationVo;
import com.wecloud.im.vo.ChatRoomMemberVo; import com.wecloud.im.biz.module.message.controller.vo.ImConversationCreateVo;
import com.wecloud.im.vo.ConversationVo; import com.wecloud.im.biz.module.message.service.ImConversationService;
import com.wecloud.im.vo.ImConversationCreateVo; import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.server.model.WsResponse; import com.wecloud.im.server.model.WsResponse;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
/** /**
* *
......
package com.wecloud.im.action; package com.wecloud.im.biz.action;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -13,14 +13,14 @@ import org.springframework.stereotype.Component; ...@@ -13,14 +13,14 @@ import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import com.wecloud.netty.dispatch.annotation.ActionMapping; import com.wecloud.im.biz.module.message.controller.param.ChatSettingParam;
import com.wecloud.im.param.ChatSettingParam; import com.wecloud.im.biz.module.message.controller.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ImConvMemeClientRemarkNameParam; import com.wecloud.im.biz.module.message.controller.param.ListConversationMembersParam;
import com.wecloud.im.param.ListConversationMembersParam; import com.wecloud.im.biz.module.message.controller.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate; import com.wecloud.im.biz.module.message.controller.vo.ConversationMemberVo;
import com.wecloud.im.service.ImConversationMembersService; import com.wecloud.im.biz.module.message.service.ImConversationMembersService;
import com.wecloud.im.vo.ConversationMemberVo;
import com.wecloud.im.server.model.WsResponse; import com.wecloud.im.server.model.WsResponse;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
/** /**
* @Author luozh * @Author luozh
......
package com.wecloud.im.action; package com.wecloud.im.biz.action;
import com.alibaba.fastjson.JSON;
import com.wecloud.im.core.common.api.ApiCode;
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;
...@@ -14,12 +12,14 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -14,12 +12,14 @@ 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.validation.annotation.Validated;
import com.wecloud.netty.dispatch.annotation.ActionMapping; import com.alibaba.fastjson.JSON;
import com.wecloud.im.param.ImMsgReceivedStatusUpdate; import com.wecloud.im.biz.module.message.controller.param.ImMsgReceivedStatusUpdate;
import com.wecloud.im.param.MsgReadStatusUpdateParam; import com.wecloud.im.biz.module.message.controller.param.MsgReadStatusUpdateParam;
import com.wecloud.im.param.UpdateMsgReadStatusByConversationParam; import com.wecloud.im.biz.module.message.controller.param.UpdateMsgReadStatusByConversationParam;
import com.wecloud.im.service.ImInboxService; import com.wecloud.im.biz.module.message.service.ImInboxService;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.server.model.WsResponse; import com.wecloud.im.server.model.WsResponse;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
/** /**
* @Author luozh * @Author luozh
......
package com.wecloud.im.action; package com.wecloud.im.biz.action;
import com.wecloud.im.core.core.pagination.Paging;
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;
...@@ -12,16 +11,17 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -12,16 +11,17 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.wecloud.netty.dispatch.annotation.ActionMapping; import com.wecloud.im.biz.module.message.controller.param.GetReadersParam;
import com.wecloud.im.param.GetReadersParam; import com.wecloud.im.biz.module.message.controller.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.ImHistoryMessagePageParam; import com.wecloud.im.biz.module.message.controller.param.MsgDeleteParam;
import com.wecloud.im.param.MsgDeleteParam; import com.wecloud.im.biz.module.message.controller.param.add.ImMsgRecall;
import com.wecloud.im.param.add.ImMsgRecall; import com.wecloud.im.biz.module.message.controller.param.add.ImMsgUpdate;
import com.wecloud.im.param.add.ImMsgUpdate; import com.wecloud.im.biz.module.message.controller.vo.OfflineMsgDto;
import com.wecloud.im.service.ImMessageService; import com.wecloud.im.biz.module.message.controller.vo.ReaderList;
import com.wecloud.im.vo.OfflineMsgDto; import com.wecloud.im.biz.module.message.service.ImMessageService;
import com.wecloud.im.vo.ReaderList; import com.wecloud.im.core.pagination.Paging;
import com.wecloud.im.server.model.WsResponse; import com.wecloud.im.server.model.WsResponse;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
/** /**
* @Author wenzhida * @Author wenzhida
......
package com.wecloud.im.action; package com.wecloud.im.biz.action;
import com.wecloud.im.core.common.api.ApiCode;
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;
...@@ -13,15 +12,16 @@ import org.springframework.stereotype.Component; ...@@ -13,15 +12,16 @@ import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.wecloud.netty.dispatch.annotation.ActionMapping; import com.wecloud.im.biz.module.message.controller.param.AgreeToMultiMeetParam;
import com.wecloud.im.param.AgreeToMultiMeetParam; import com.wecloud.im.biz.module.message.controller.param.HeartbeatMultiMeetParam;
import com.wecloud.im.param.HeartbeatMultiMeetParam; import com.wecloud.im.biz.module.message.controller.param.InviteToMultiMeetParam;
import com.wecloud.im.param.InviteToMultiMeetParam; import com.wecloud.im.biz.module.message.controller.param.LeaveFromMultiMeetParam;
import com.wecloud.im.param.LeaveFromMultiMeetParam; import com.wecloud.im.biz.module.message.controller.param.NotAnsweredMultiMeetParam;
import com.wecloud.im.param.NotAnsweredMultiMeetParam; import com.wecloud.im.biz.module.message.controller.param.RejectToMultiMeetParam;
import com.wecloud.im.param.RejectToMultiMeetParam; import com.wecloud.im.biz.module.multimeet.service.MultiMeetService;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.server.model.WsResponse; import com.wecloud.im.server.model.WsResponse;
import com.wecloud.multimeet.service.MultiMeetService; import com.wecloud.netty.dispatch.annotation.ActionMapping;
@Slf4j @Slf4j
@Component @Component
......
package com.wecloud.im.action; package com.wecloud.im.biz.action;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.core.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.Api;
...@@ -26,41 +24,43 @@ import com.alibaba.fastjson.JSONObject; ...@@ -26,41 +24,43 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.wecloud.netty.dispatch.annotation.ActionMapping; import com.wecloud.im.biz.core.rocketmq.component.MqSender;
import com.wecloud.netty.dispatch.common.BaseRequest; import com.wecloud.im.biz.enums.ChatTypeEnum;
import com.wecloud.netty.dispatch.extend.ActionRequest; import com.wecloud.im.biz.enums.FriendStateEnum;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.biz.enums.GroupRoleEnum;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.biz.enums.MutedEnum;
import com.wecloud.im.entity.ImConversationMembers; import com.wecloud.im.biz.module.message.controller.param.ChatContentVo;
import com.wecloud.im.entity.ImInbox; import com.wecloud.im.biz.module.message.controller.param.ImClientSimpleDto;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.biz.module.message.controller.param.ImConversationQueryVo;
import com.wecloud.im.entity.ImMessageOnlineSend; import com.wecloud.im.biz.module.message.controller.param.MsgVo;
import com.wecloud.im.friend.entity.ImFriend; import com.wecloud.im.biz.module.message.entity.ImApplication;
import com.wecloud.im.friend.service.ImFriendService; import com.wecloud.im.biz.module.message.entity.ImClient;
import com.wecloud.im.mq.MqSender; import com.wecloud.im.biz.module.message.entity.ImConversationMembers;
import com.wecloud.im.param.ChatContentVo; import com.wecloud.im.biz.module.message.entity.ImFriend;
import com.wecloud.im.param.ImClientSimpleDto; import com.wecloud.im.biz.module.message.entity.ImInbox;
import com.wecloud.im.param.ImConversationQueryVo; import com.wecloud.im.biz.module.message.entity.ImMessage;
import com.wecloud.im.param.MsgVo; import com.wecloud.im.biz.module.message.entity.ImMessageOnlineSend;
import com.wecloud.im.sdk.enums.ChatTypeEnum; import com.wecloud.im.biz.module.message.service.ImApplicationService;
import com.wecloud.im.sdk.enums.FriendStateEnum; import com.wecloud.im.biz.module.message.service.ImClientBlacklistService;
import com.wecloud.im.sdk.enums.GroupRoleEnum; import com.wecloud.im.biz.module.message.service.ImClientService;
import com.wecloud.im.sdk.enums.MutedEnum; import com.wecloud.im.biz.module.message.service.ImConversationMembersService;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.biz.module.message.service.ImConversationService;
import com.wecloud.im.service.ImClientBlacklistService; import com.wecloud.im.biz.module.message.service.ImFriendService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.biz.module.message.service.ImInboxService;
import com.wecloud.im.service.ImConversationMembersService; import com.wecloud.im.biz.module.message.service.ImMessageService;
import com.wecloud.im.service.ImConversationService; import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.service.ImInboxService; import com.wecloud.im.core.common.api.ApiResult;
import com.wecloud.im.service.ImMessageService; import com.wecloud.im.core.util.JsonUtils;
import com.wecloud.im.core.util.SnowflakeUtil;
import com.wecloud.im.server.enums.MsgTypeEnum; import com.wecloud.im.server.enums.MsgTypeEnum;
import com.wecloud.im.server.enums.WsResponseCmdEnum; import com.wecloud.im.server.enums.WsResponseCmdEnum;
import com.wecloud.im.server.model.WsResponse; import com.wecloud.im.server.model.WsResponse;
import com.wecloud.im.server.sender.ChannelSender; import com.wecloud.im.server.sender.ChannelSender;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
import com.wecloud.netty.dispatch.common.BaseRequest;
import com.wecloud.netty.dispatch.extend.ActionRequest;
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.im.core.util.JsonUtils;
import com.wecloud.im.core.util.SnowflakeUtil;
/** /**
* @Description 普通聊天 * @Description 普通聊天
......
package com.wecloud.im.action; package com.wecloud.im.biz.action;
import com.alibaba.fastjson.JSON;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.core.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;
...@@ -12,17 +9,20 @@ import java.util.Map; ...@@ -12,17 +9,20 @@ import java.util.Map;
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 com.wecloud.netty.dispatch.annotation.ActionMapping; import com.alibaba.fastjson.JSON;
import com.wecloud.im.param.rtc.CandidateForwardParam; import com.wecloud.im.biz.enums.CallTypeEnum;
import com.wecloud.im.param.rtc.CreateRtcChannelParam; import com.wecloud.im.biz.module.message.controller.param.rtc.CandidateForwardParam;
import com.wecloud.im.param.rtc.CreateRtcChannelResult; import com.wecloud.im.biz.module.message.controller.param.rtc.CreateRtcChannelParam;
import com.wecloud.im.param.rtc.JoinRtcChannelParam; import com.wecloud.im.biz.module.message.controller.param.rtc.CreateRtcChannelResult;
import com.wecloud.im.param.rtc.LeaveRtcChannelParam; import com.wecloud.im.biz.module.message.controller.param.rtc.JoinRtcChannelParam;
import com.wecloud.im.param.rtc.RejectRtcChannelParam; import com.wecloud.im.biz.module.message.controller.param.rtc.LeaveRtcChannelParam;
import com.wecloud.im.param.rtc.SdpForwardParam; import com.wecloud.im.biz.module.message.controller.param.rtc.RejectRtcChannelParam;
import com.wecloud.im.sdk.enums.CallTypeEnum; import com.wecloud.im.biz.module.message.controller.param.rtc.SdpForwardParam;
import com.wecloud.im.biz.module.rtc.service.RtcService;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.core.common.enums.BaseEnum;
import com.wecloud.im.server.model.WsResponse; import com.wecloud.im.server.model.WsResponse;
import com.wecloud.rtc.service.RtcService; import com.wecloud.netty.dispatch.annotation.ActionMapping;
@Slf4j @Slf4j
@Component @Component
......
/* package com.wecloud.im.biz.config;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License"); import java.time.LocalDate;
* you may not use this file except in compliance with the License. import java.time.LocalDateTime;
* You may obtain a copy of the License at import java.time.LocalTime;
* import java.time.format.DateTimeFormatter;
* http://www.apache.org/licenses/LICENSE-2.0 import java.util.List;
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.config; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.module.SimpleModule;
...@@ -26,22 +23,11 @@ import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; ...@@ -26,22 +23,11 @@ import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
import com.wecloud.config.constant.DatePattern; import com.wecloud.im.core.config.jackson.deserializer.JacksonDoubleDeserializer;
import io.geekidea.springbootplus.framework.config.jackson.deserializer.JacksonDoubleDeserializer; import com.wecloud.im.core.config.jackson.deserializer.JacksonIntegerDeserializer;
import io.geekidea.springbootplus.framework.config.jackson.deserializer.JacksonIntegerDeserializer; import com.wecloud.im.core.constant.DatePattern;
import io.geekidea.springbootplus.framework.core.xss.XssJacksonDeserializer; import com.wecloud.im.core.xss.XssJacksonDeserializer;
import io.geekidea.springbootplus.framework.core.xss.XssJacksonSerializer; import com.wecloud.im.core.xss.XssJacksonSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
/** /**
* @author geekidea * @author geekidea
......
/* package com.wecloud.im.biz.config;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.config;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
......
/* package com.wecloud.im.biz.config;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.config;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
......
/* package com.wecloud.im.biz.config;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.config;
import com.wecloud.config.properties.SpringBootPlusCorsProperties;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
...@@ -28,6 +12,8 @@ import org.springframework.web.cors.CorsConfiguration; ...@@ -28,6 +12,8 @@ import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter; import org.springframework.web.filter.CorsFilter;
import com.wecloud.im.biz.config.properties.SpringBootPlusCorsProperties;
/** /**
* 跨域配置 * 跨域配置
* *
......
/* package com.wecloud.im.biz.config;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.config;
import com.wecloud.config.properties.SpringBootPlusFilterProperties;
import com.wecloud.config.properties.SpringBootPlusInterceptorProperties;
import com.wecloud.config.properties.SpringBootPlusProperties;
import io.geekidea.springbootplus.framework.core.filter.ChannelFilter;
import io.geekidea.springbootplus.framework.core.filter.RequestDetailFilter;
import io.geekidea.springbootplus.framework.core.interceptor.PermissionInterceptor;
import io.geekidea.springbootplus.framework.core.xss.XssFilter;
import io.geekidea.springbootplus.framework.util.IniUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.Map; import java.util.Map;
...@@ -40,9 +16,16 @@ import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry ...@@ -40,9 +16,16 @@ import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.wecloud.im.interceptor.DownloadInterceptor; import com.wecloud.im.biz.config.properties.SpringBootPlusFilterProperties;
import com.wecloud.im.interceptor.ResourceInterceptor; import com.wecloud.im.biz.config.properties.SpringBootPlusInterceptorProperties;
import com.wecloud.im.interceptor.UploadInterceptor; import com.wecloud.im.biz.config.properties.SpringBootPlusProperties;
import com.wecloud.im.biz.core.interceptor.DownloadInterceptor;
import com.wecloud.im.biz.core.interceptor.ResourceInterceptor;
import com.wecloud.im.biz.core.interceptor.UploadInterceptor;
import com.wecloud.im.core.util.IniUtil;
import com.wecloud.im.core.xss.XssFilter;
import com.wecloud.im.security.filter.ChannelFilter;
import com.wecloud.im.security.filter.RequestDetailFilter;
/** /**
* WebMvc配置 * WebMvc配置
...@@ -114,17 +97,6 @@ public class SpringBootPlusWebMvcConfig implements WebMvcConfigurer { ...@@ -114,17 +97,6 @@ public class SpringBootPlusWebMvcConfig implements WebMvcConfigurer {
return registration; return registration;
} }
/**
* 自定义权限拦截器
*
* @return
*/
@Bean
public PermissionInterceptor permissionInterceptor() {
return new PermissionInterceptor();
}
/** /**
* 上传拦截器 * 上传拦截器
* *
...@@ -184,13 +156,6 @@ public class SpringBootPlusWebMvcConfig implements WebMvcConfigurer { ...@@ -184,13 +156,6 @@ public class SpringBootPlusWebMvcConfig implements WebMvcConfigurer {
.addPathPatterns(interceptorConfig.getDownload().getIncludePaths()); .addPathPatterns(interceptorConfig.getDownload().getIncludePaths());
} }
// 自定义权限拦截器注册
if (interceptorConfig.getPermission().isEnable()) {
registry.addInterceptor(permissionInterceptor())
.addPathPatterns(interceptorConfig.getPermission().getIncludePaths())
.excludePathPatterns(interceptorConfig.getPermission().getExcludePaths());
}
} }
@Override @Override
......
/* package com.wecloud.im.biz.config;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.config;
import com.fasterxml.jackson.databind.introspect.AnnotatedField;
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.wecloud.netty.dispatch.extend.ActionRequest;
import com.wecloud.netty.dispatch.extend.ArgumentBox;
import com.wecloud.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;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Component;
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration; import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
import springfox.documentation.RequestHandler; import springfox.documentation.RequestHandler;
import springfox.documentation.annotations.ApiIgnore; import springfox.documentation.annotations.ApiIgnore;
...@@ -57,6 +23,11 @@ import springfox.documentation.spring.web.plugins.Docket; ...@@ -57,6 +23,11 @@ import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.common.SwaggerPluginSupport; import springfox.documentation.swagger.common.SwaggerPluginSupport;
import springfox.documentation.swagger2.annotations.EnableSwagger2; import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.ServletRequest; import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
...@@ -64,10 +35,26 @@ import javax.servlet.http.HttpServletResponse; ...@@ -64,10 +35,26 @@ import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.lang.reflect.Field;
import java.util.ArrayList; import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays; import org.apache.commons.lang3.ArrayUtils;
import java.util.List; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.databind.introspect.AnnotatedField;
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.wecloud.im.biz.config.properties.SwaggerProperties;
import com.wecloud.netty.dispatch.extend.ActionRequest;
import com.wecloud.netty.dispatch.extend.ArgumentBox;
import static springfox.documentation.schema.Annotations.findPropertyAnnotation; import static springfox.documentation.schema.Annotations.findPropertyAnnotation;
import static springfox.documentation.swagger.schema.ApiModelProperties.findApiModePropertyAnnotation; import static springfox.documentation.swagger.schema.ApiModelProperties.findApiModePropertyAnnotation;
......
/* package com.wecloud.im.biz.config.constant;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.config.constant;
/** /**
* <p> * <p>
......
/* package com.wecloud.im.biz.config.properties;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.config.properties;
import lombok.Data; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.web.cors.CorsConfiguration;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.web.cors.CorsConfiguration;
/** /**
* 跨域属性配置 * 跨域属性配置
* *
......
/* package com.wecloud.im.biz.config.properties;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.config.properties;
import lombok.Data; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
......
/* package com.wecloud.im.biz.config.properties;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.config.properties;
import lombok.Data; import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
......
/* package com.wecloud.im.biz.config.properties;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.config.properties;
import lombok.Data; import lombok.Data;
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import com.wecloud.im.security.properties.JwtProperties;
import com.wecloud.im.security.properties.ShiroProperties;
/** /**
* spring-boot-plus属性配置信息 * spring-boot-plus属性配置信息
......
/* package com.wecloud.im.biz.config.properties;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.config.properties;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/** /**
* 配置文件属性映射为静态属性 * 配置文件属性映射为静态属性
* *
......
/* package com.wecloud.im.biz.config.properties;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.config.properties;
import lombok.Data; import lombok.Data;
import java.util.List;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
/** /**
* Swagger配置属性 * Swagger配置属性
* *
......
package com.wecloud.im.constant; package com.wecloud.im.biz.constant;
/** /**
* @Author wenzhida * @Author wenzhida
......
package com.wecloud.im.constant; package com.wecloud.im.biz.constant;
/** /**
* @Author wenzhida * @Author wenzhida
......
/* package com.wecloud.im.biz.core.aop;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.aop;
import io.geekidea.springbootplus.framework.log.aop.BaseLogAop;
import io.geekidea.springbootplus.framework.log.bean.OperationLogInfo;
import io.geekidea.springbootplus.framework.log.bean.RequestInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.AfterThrowing;
...@@ -28,6 +10,10 @@ import org.aspectj.lang.annotation.Aspect; ...@@ -28,6 +10,10 @@ import org.aspectj.lang.annotation.Aspect;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.wecloud.im.log.aop.BaseLogAop;
import com.wecloud.im.log.bean.OperationLogInfo;
import com.wecloud.im.log.bean.RequestInfo;
/** /**
* <p> * <p>
* Controller Aop * Controller Aop
......
package com.wecloud.im.balance; package com.wecloud.im.biz.core.balance;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingFactory;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.Map;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Map; import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingFactory;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import static com.wecloud.im.server.model.WsConstants.IP_NETTY_PUBLIC; import static com.wecloud.im.server.model.WsConstants.IP_NETTY_PUBLIC;
......
/* package com.wecloud.im.biz.core.interceptor;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.im.interceptor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** /**
* 下载拦截器 * 下载拦截器
* *
......
/* package com.wecloud.im.biz.core.interceptor;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.im.interceptor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** /**
* 资源拦截器 * 资源拦截器
* *
......
/* package com.wecloud.im.biz.core.interceptor;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.im.interceptor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** /**
* 上传拦截器 * 上传拦截器
* *
......
package com.wecloud.im.biz.core.post;
import lombok.AllArgsConstructor;
import java.util.Date;
import org.springframework.stereotype.Service;
import com.wecloud.im.biz.module.message.entity.ImClient;
import com.wecloud.im.biz.module.message.entity.ImMessage;
import com.wecloud.im.biz.module.message.entity.ImMessageOnlineSend;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.core.common.api.ApiResult;
import com.wecloud.im.server.enums.WsResponseCmdEnum;
import com.wecloud.im.server.model.WsResponse;
import com.wecloud.im.server.sender.ChannelSender;
/**
* 投递员 负责投送消息
* @Author luozh
* @Date 2022年05月13日 14:19
* @Version 1.0
*/
@AllArgsConstructor
@Service
public class Couriers {
private final ChannelSender channelSender;
/**
* 投递消息
* @Author luozh
* @Date 2022年05月13日 02:34:29
* @param message 消息实体
* @param sender 发件人
* @param receiver 收件人
* @param cmd ws命令类型
* @Return
*/
public void deliver(ImMessage message, Object content, ImClient sender, ImClient receiver, WsResponseCmdEnum cmd) {
// 封装响应的实体
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
imMessageOnlineSend.setMsgId(message.getId());
imMessageOnlineSend.setCreateTime(new Date());
imMessageOnlineSend.setType(message.getMsgType());
imMessageOnlineSend.setSender(sender.getClientId());
imMessageOnlineSend.setContent(content);
imMessageOnlineSend.setConversationId(message.getFkConversationId());
imMessageOnlineSend.setWithdraw(message.getWithdraw());
imMessageOnlineSend.setEvent(message.getEvent());
// 向接收方推送
WsResponse<ImMessageOnlineSend> responseModel = new WsResponse<>();
responseModel.setCmd(cmd.getCmdCode());
ApiResult<Boolean> result = ApiResult.result(ApiCode.SUCCESS);
responseModel.setCode(result.getCode());
responseModel.setMsg(result.getMessage());
responseModel.setData(imMessageOnlineSend);
responseModel.setReqId(null);
channelSender.sendMsg(responseModel, receiver.getId());
}
}
package com.wecloud.im.biz.core.post;
import java.util.Date;
import com.wecloud.im.biz.module.message.entity.ImApplication;
import com.wecloud.im.biz.module.message.entity.ImClient;
import com.wecloud.im.biz.module.message.entity.ImConversation;
import com.wecloud.im.biz.module.message.entity.ImMessage;
import com.wecloud.im.core.util.SnowflakeUtil;
import com.wecloud.im.server.enums.MsgTypeEnum;
/**
* 消息构造者
* @Author luozh
* @Date 2022年05月13日 14:20
* @Version 1.0
*/
public class MessageBuilder {
/**
* 构建普通消息
* @Author luozh
* @Date 2022年05月13日 02:30:27
* @param type
* @param application
* @param sender
* @param receiver
* @Return
*/
public static ImMessage buildNormalMessage(MsgTypeEnum type, ImApplication application,
ImClient sender, ImConversation conversation) {
long messageId = SnowflakeUtil.getId();
ImMessage imMessage = new ImMessage();
// 保存消息至消息表
imMessage.setId(messageId);
imMessage.setMsgType(type.getUriCode());
imMessage.setFkAppid(application.getId());
imMessage.setSender(sender.getId());
imMessage.setWithdraw(false);
imMessage.setEvent(false);
imMessage.setSystemFlag(false);
imMessage.setSendStatus(2);
imMessage.setFkConversationId(conversation.getId());
imMessage.setCreateTime(new Date());
return imMessage;
}
/**
* 构建事件消息
* @Author luozh
* @Date 2022年05月13日 02:30:27
* @param type
* @param application
* @param sender
* @param receiver
* @Return
*/
public static ImMessage buildEventMessage(MsgTypeEnum type, ImApplication application,
ImClient sender, ImConversation conversation,
String content) {
long messageId = SnowflakeUtil.getId();
ImMessage imMessage = new ImMessage();
// 保存消息至消息表
imMessage.setId(messageId);
imMessage.setMsgType(type.getUriCode());
imMessage.setFkAppid(application.getId());
imMessage.setSender(sender.getId());
imMessage.setContent(content);
imMessage.setWithdraw(false);
imMessage.setEvent(true);
imMessage.setSystemFlag(false);
imMessage.setSendStatus(2);
imMessage.setFkConversationId(conversation.getId());
imMessage.setCreateTime(new Date());
return imMessage;
}
}
package com.wecloud.im.push; package com.wecloud.im.biz.core.push;
import org.json.JSONObject;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import org.json.JSONObject;
public abstract class AndroidNotification extends UmengNotification { public abstract class AndroidNotification extends UmengNotification {
// Keys can be set in the payload level // Keys can be set in the payload level
protected static final HashSet<String> PAYLOAD_KEYS = new HashSet<String>(Arrays.asList("display_type")); protected static final HashSet<String> PAYLOAD_KEYS = new HashSet<String>(Arrays.asList("display_type"));
......
package com.wecloud.im.biz.core.push;
import java.util.Arrays;
import java.util.HashSet;
import org.json.JSONObject;
public abstract class IOSNotification extends UmengNotification {
// Keys can be set in the aps level
protected static final HashSet<String> APS_KEYS = new HashSet<String>(Arrays.asList("alert", "badge", "sound", "content-available"));
@Override
public boolean setPredefinedKeyValue(String key, Object value) throws Exception {
if (ROOT_KEYS.contains(key)) {
// This key should be in the root level
rootJson.put(key, value);
} else if (APS_KEYS.contains(key)) {
// This key should be in the aps level
JSONObject apsJson = null;
JSONObject payloadJson = null;
if (rootJson.has("payload")) {
payloadJson = rootJson.getJSONObject("payload");
} else {
payloadJson = new JSONObject();
rootJson.put("payload", payloadJson);
}
if (payloadJson.has("aps")) {
apsJson = payloadJson.getJSONObject("aps");
} else {
apsJson = new JSONObject();
payloadJson.put("aps", apsJson);
}
apsJson.put(key, value);
} else if (POLICY_KEYS.contains(key)) {
// This key should be in the body level
JSONObject policyJson = null;
if (rootJson.has("policy")) {
policyJson = rootJson.getJSONObject("policy");
} else {
policyJson = new JSONObject();
rootJson.put("policy", policyJson);
}
policyJson.put(key, value);
} else {
if (key == "payload" || key == "aps" || key == "policy") {
throw new Exception("You don't need to set value for " + key + " , just set values for the sub keys in it.");
} else {
throw new Exception("Unknownd key: " + key);
}
}
return true;
}
// Set customized key/value for IOS notification
public boolean setCustomizedField(String key, String value) throws Exception {
//rootJson.put(key, value);
JSONObject payloadJson = null;
if (rootJson.has("payload")) {
payloadJson = rootJson.getJSONObject("payload");
} else {
payloadJson = new JSONObject();
rootJson.put("payload", payloadJson);
}
payloadJson.put(key, value);
return true;
}
public void setAlert(String token) throws Exception {
setPredefinedKeyValue("alert", token);
}
public void setAlert(String title, String subtitle, String body) throws Exception {
JSONObject object = new JSONObject();
object.put("title", title);
object.put("subtitle", subtitle);
object.put("body", body);
setPredefinedKeyValue("alert", object);
}
public void setBadge(Integer badge) throws Exception {
setPredefinedKeyValue("badge", badge);
}
public void setSound(String sound) throws Exception {
setPredefinedKeyValue("sound", sound);
}
public void setContentAvailable(Integer contentAvailable) throws Exception {
setPredefinedKeyValue("content-available", contentAvailable);
}
}
package com.wecloud.im.server.sender; package com.wecloud.im.biz.core.push;
import com.turo.pushy.apns.ApnsClient;
import com.turo.pushy.apns.ApnsClientBuilder;
import com.turo.pushy.apns.DeliveryPriority;
import com.turo.pushy.apns.PushNotificationResponse;
import com.turo.pushy.apns.PushType;
import com.turo.pushy.apns.util.ApnsPayloadBuilder;
import com.turo.pushy.apns.util.SimpleApnsPushNotification;
import com.turo.pushy.apns.util.TokenUtil;
import io.netty.channel.EventLoopGroup; import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.util.concurrent.Future; import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener; import io.netty.util.concurrent.GenericFutureListener;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import java.io.InputStream; import java.io.InputStream;
import java.util.Date; import java.util.Date;
...@@ -23,6 +14,17 @@ import java.util.concurrent.Semaphore; ...@@ -23,6 +14,17 @@ import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
import org.springframework.util.StringUtils;
import com.turo.pushy.apns.ApnsClient;
import com.turo.pushy.apns.ApnsClientBuilder;
import com.turo.pushy.apns.DeliveryPriority;
import com.turo.pushy.apns.PushNotificationResponse;
import com.turo.pushy.apns.PushType;
import com.turo.pushy.apns.util.ApnsPayloadBuilder;
import com.turo.pushy.apns.util.SimpleApnsPushNotification;
import com.turo.pushy.apns.util.TokenUtil;
/** /**
* @Description 基于APNs最新HTTP/2接口实现iOS的高性能消息推送pushy(服务端篇) * @Description 基于APNs最新HTTP/2接口实现iOS的高性能消息推送pushy(服务端篇)
* 通过Semaphore来进行流控,防止缓存过大,内存不足; * 通过Semaphore来进行流控,防止缓存过大,内存不足;
......
package com.wecloud.im.biz.core.push;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONObject;
public class PushClient {
// The host
protected static final String HOST = "http://msg.umeng.com";
// The upload path
protected static final String UPLOAD_PATH = "/upload";
// The post path
protected static final String POST_PATH = "/api/send";
// The user agent
protected final String USER_AGENT = "Mozilla/5.0";
// This object is used for sending the post request to Umeng
@SuppressWarnings("AliDeprecation")
protected HttpClient client = new DefaultHttpClient();
public boolean send(UmengNotification msg) throws Exception {
String timestamp = Integer.toString((int) (System.currentTimeMillis() / 1000));
msg.setPredefinedKeyValue("timestamp", timestamp);
String url = HOST + POST_PATH;
String postBody = msg.getPostBody();
String sign = DigestUtils.md5Hex(("POST" + url + postBody + msg.getAppMasterSecret()).getBytes(StandardCharsets.UTF_8));
url = url + "?sign=" + sign;
HttpPost post = new HttpPost(url);
post.setHeader("User-Agent", USER_AGENT);
StringEntity se = new StringEntity(postBody, "UTF-8");
post.setEntity(se);
// Send the post request and get the response
HttpResponse response = client.execute(post);
int status = response.getStatusLine().getStatusCode();
System.out.println("Response Code : " + status);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
}
System.out.println(result.toString());
if (status == 200) {
System.out.println("Notification sent successfully.");
} else {
System.out.println("Failed to send the notification!");
}
return true;
}
// Upload file with device_tokens to Umeng
public String uploadContents(String appkey, String appMasterSecret, String contents) throws Exception {
// Construct the json string
JSONObject uploadJson = new JSONObject();
uploadJson.put("appkey", appkey);
String timestamp = Integer.toString((int) (System.currentTimeMillis() / 1000));
uploadJson.put("timestamp", timestamp);
uploadJson.put("content", contents);
// Construct the request
String url = HOST + UPLOAD_PATH;
String postBody = uploadJson.toString();
String sign = DigestUtils.md5Hex(("POST" + url + postBody + appMasterSecret).getBytes(StandardCharsets.UTF_8));
url = url + "?sign=" + sign;
HttpPost post = new HttpPost(url);
post.setHeader("User-Agent", USER_AGENT);
StringEntity se = new StringEntity(postBody, "UTF-8");
post.setEntity(se);
// Send the post request and get the response
HttpResponse response = client.execute(post);
System.out.println("Response Code : " + response.getStatusLine().getStatusCode());
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
}
System.out.println(result.toString());
// Decode response string and get file_id from it
JSONObject respJson = new JSONObject(result.toString());
String ret = respJson.getString("ret");
if (!"SUCCESS".equals(ret)) {
throw new Exception("Failed to upload file");
}
JSONObject data = respJson.getJSONObject("data");
String fileId = data.getString("file_id");
// Set file_id into rootJson using setPredefinedKeyValue
return fileId;
}
}
package com.wecloud.im.push; package com.wecloud.im.biz.core.push;
import com.wecloud.im.push.android.AndroidBroadcast;
import com.wecloud.im.push.android.AndroidCustomizedcast;
import com.wecloud.im.push.android.AndroidFilecast;
import com.wecloud.im.push.android.AndroidGroupcast;
import com.wecloud.im.push.android.AndroidUnicast;
import com.wecloud.im.push.ios.IOSBroadcast;
import com.wecloud.im.push.ios.IOSCustomizedcast;
import com.wecloud.im.push.ios.IOSFilecast;
import com.wecloud.im.push.ios.IOSGroupcast;
import com.wecloud.im.push.ios.IOSUnicast;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import com.wecloud.im.biz.core.push.android.AndroidBroadcast;
import com.wecloud.im.biz.core.push.android.AndroidCustomizedcast;
import com.wecloud.im.biz.core.push.android.AndroidFilecast;
import com.wecloud.im.biz.core.push.android.AndroidGroupcast;
import com.wecloud.im.biz.core.push.android.AndroidUnicast;
import com.wecloud.im.biz.core.push.ios.IOSBroadcast;
import com.wecloud.im.biz.core.push.ios.IOSCustomizedcast;
import com.wecloud.im.biz.core.push.ios.IOSFilecast;
import com.wecloud.im.biz.core.push.ios.IOSGroupcast;
import com.wecloud.im.biz.core.push.ios.IOSUnicast;
/** /**
* 推送工具类 * 推送工具类
*/ */
......
package com.wecloud.im.biz.core.push;
import java.util.Arrays;
import java.util.HashSet;
import org.json.JSONObject;
public abstract class UmengNotification {
// Keys can be set in the root level
protected static final HashSet<String> ROOT_KEYS = new HashSet<String>(Arrays.asList("appkey", "timestamp", "type", "device_tokens", "alias", "alias_type", "file_id",
"filter", "production_mode", "feedback", "description", "thirdparty_id", "mipush", "mi_activity", "channel_properties"));
// Keys can be set in the policy level
protected static final HashSet<String> POLICY_KEYS = new HashSet<String>(Arrays.asList("start_time", "expire_time", "max_send_num"));
// This JSONObject is used for constructing the whole request string.
protected final JSONObject rootJson = new JSONObject();
// The app master secret
protected String appMasterSecret;
// Set predefined keys in the rootJson, for extra keys(Android) or customized keys(IOS) please
// refer to corresponding methods in the subclass.
public abstract boolean setPredefinedKeyValue(String key, Object value) throws Exception;
public String getPostBody() {
return rootJson.toString();
}
protected final String getAppMasterSecret() {
return appMasterSecret;
}
public void setAppMasterSecret(String secret) {
appMasterSecret = secret;
}
protected void setProductionMode(Boolean prod) throws Exception {
setPredefinedKeyValue("production_mode", prod.toString());
}
///正式模式
public void setProductionMode() throws Exception {
setProductionMode(true);
}
///测试模式
public void setTestMode() throws Exception {
setProductionMode(false);
}
///发送消息描述,建议填写。
public void setDescription(String description) throws Exception {
setPredefinedKeyValue("description", description);
}
///定时发送时间,若不填写表示立即发送。格式: "YYYY-MM-DD hh:mm:ss"。
public void setStartTime(String startTime) throws Exception {
setPredefinedKeyValue("start_time", startTime);
}
///消息过期时间,格式: "YYYY-MM-DD hh:mm:ss"。
public void setExpireTime(String expireTime) throws Exception {
setPredefinedKeyValue("expire_time", expireTime);
}
///发送限速,每秒发送的最大条数。
public void setMaxSendNum(Integer num) throws Exception {
setPredefinedKeyValue("max_send_num", num);
}
//厂商弹窗activity
public void setChannelActivity(String activity) throws Exception {
setPredefinedKeyValue("mipush", "true");
setPredefinedKeyValue("mi_activity", activity);
}
//厂商属性配置
public void setChannelProperties(String xiaoMiChannelId) throws Exception {
JSONObject object = new JSONObject();
object.put("xiaomi_channel_id", xiaoMiChannelId);
setPredefinedKeyValue("channel_properties", object);
}
}
package com.wecloud.im.biz.core.push.android;
import com.wecloud.im.biz.core.push.AndroidNotification;
public class AndroidBroadcast extends AndroidNotification {
public AndroidBroadcast(String appkey, String appMasterSecret) throws Exception {
setAppMasterSecret(appMasterSecret);
setPredefinedKeyValue("appkey", appkey);
this.setPredefinedKeyValue("type", "broadcast");
}
}
package com.wecloud.im.biz.core.push.android;
import com.wecloud.im.biz.core.push.AndroidNotification;
public class AndroidCustomizedcast extends AndroidNotification {
public AndroidCustomizedcast(String appkey, String appMasterSecret) throws Exception {
setAppMasterSecret(appMasterSecret);
setPredefinedKeyValue("appkey", appkey);
this.setPredefinedKeyValue("type", "customizedcast");
}
public void setAlias(String alias, String aliasType) throws Exception {
setPredefinedKeyValue("alias", alias);
setPredefinedKeyValue("alias_type", aliasType);
}
public void setFileId(String fileId, String aliasType) throws Exception {
setPredefinedKeyValue("file_id", fileId);
setPredefinedKeyValue("alias_type", aliasType);
}
}
package com.wecloud.im.biz.core.push.android;
import com.wecloud.im.biz.core.push.AndroidNotification;
public class AndroidFilecast extends AndroidNotification {
public AndroidFilecast(String appkey, String appMasterSecret) throws Exception {
setAppMasterSecret(appMasterSecret);
setPredefinedKeyValue("appkey", appkey);
this.setPredefinedKeyValue("type", "filecast");
}
public void setFileId(String fileId) throws Exception {
setPredefinedKeyValue("file_id", fileId);
}
}
package com.wecloud.im.biz.core.push.android;
import org.json.JSONObject;
import com.wecloud.im.biz.core.push.AndroidNotification;
public class AndroidGroupcast extends AndroidNotification {
public AndroidGroupcast(String appkey, String appMasterSecret) throws Exception {
setAppMasterSecret(appMasterSecret);
setPredefinedKeyValue("appkey", appkey);
this.setPredefinedKeyValue("type", "groupcast");
}
public void setFilter(JSONObject filter) throws Exception {
setPredefinedKeyValue("filter", filter);
}
}
package com.wecloud.im.biz.core.push.android;
import com.wecloud.im.biz.core.push.AndroidNotification;
public class AndroidUnicast extends AndroidNotification {
public AndroidUnicast(String appkey, String appMasterSecret) throws Exception {
setAppMasterSecret(appMasterSecret);
setPredefinedKeyValue("appkey", appkey);
this.setPredefinedKeyValue("type", "unicast");
}
public void setDeviceToken(String token) throws Exception {
setPredefinedKeyValue("device_tokens", token);
}
}
package com.wecloud.im.biz.core.push.ios;
import com.wecloud.im.biz.core.push.IOSNotification;
public class IOSBroadcast extends IOSNotification {
public IOSBroadcast(String appkey, String appMasterSecret) throws Exception {
setAppMasterSecret(appMasterSecret);
setPredefinedKeyValue("appkey", appkey);
this.setPredefinedKeyValue("type", "broadcast");
}
}
package com.wecloud.im.biz.core.push.ios;
import com.wecloud.im.biz.core.push.IOSNotification;
public class IOSCustomizedcast extends IOSNotification {
public IOSCustomizedcast(String appkey, String appMasterSecret) throws Exception {
setAppMasterSecret(appMasterSecret);
setPredefinedKeyValue("appkey", appkey);
this.setPredefinedKeyValue("type", "customizedcast");
}
public void setAlias(String alias, String aliasType) throws Exception {
setPredefinedKeyValue("alias", alias);
setPredefinedKeyValue("alias_type", aliasType);
}
public void setFileId(String fileId, String aliasType) throws Exception {
setPredefinedKeyValue("file_id", fileId);
setPredefinedKeyValue("alias_type", aliasType);
}
}
package com.wecloud.im.biz.core.push.ios;
import com.wecloud.im.biz.core.push.IOSNotification;
public class IOSFilecast extends IOSNotification {
public IOSFilecast(String appkey, String appMasterSecret) throws Exception {
setAppMasterSecret(appMasterSecret);
setPredefinedKeyValue("appkey", appkey);
this.setPredefinedKeyValue("type", "filecast");
}
public void setFileId(String fileId) throws Exception {
setPredefinedKeyValue("file_id", fileId);
}
}
package com.wecloud.im.biz.core.push.ios;
import org.json.JSONObject;
import com.wecloud.im.biz.core.push.IOSNotification;
public class IOSGroupcast extends IOSNotification {
public IOSGroupcast(String appkey, String appMasterSecret) throws Exception {
setAppMasterSecret(appMasterSecret);
setPredefinedKeyValue("appkey", appkey);
this.setPredefinedKeyValue("type", "groupcast");
}
public void setFilter(JSONObject filter) throws Exception {
setPredefinedKeyValue("filter", filter);
}
}
package com.wecloud.im.biz.core.push.ios;
import com.wecloud.im.biz.core.push.IOSNotification;
public class IOSUnicast extends IOSNotification {
public IOSUnicast(String appkey, String appMasterSecret) throws Exception {
setAppMasterSecret(appMasterSecret);
setPredefinedKeyValue("appkey", appkey);
this.setPredefinedKeyValue("type", "unicast");
}
public void setDeviceToken(String token) throws Exception {
setPredefinedKeyValue("device_tokens", token);
}
}
package com.wecloud.im.annotation; package com.wecloud.im.biz.core.rocketmq.annotation;
import com.wecloud.im.config.RocketMqFactoryBeanConfig;
import com.wecloud.im.config.RocketMqProperties;
import com.wecloud.im.mq.RocketMqProducerService;
import org.springframework.context.annotation.Import;
import java.lang.annotation.Documented; import java.lang.annotation.Documented;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
...@@ -11,6 +6,12 @@ import java.lang.annotation.Retention; ...@@ -11,6 +6,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import org.springframework.context.annotation.Import;
import com.wecloud.im.biz.core.rocketmq.component.RocketMqProducerService;
import com.wecloud.im.biz.core.rocketmq.config.RocketMqFactoryBeanConfig;
import com.wecloud.im.biz.core.rocketmq.config.RocketMqProperties;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/1/25 15:25 * @Date 2022/1/25 15:25
......
package com.wecloud.im.mq; package com.wecloud.im.biz.core.rocketmq.component;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.rocketmq.client.producer.SendResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
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.im.entity.ImApplication; import com.wecloud.im.biz.module.message.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.biz.module.message.entity.ImClient;
import com.wecloud.im.entity.ImClientDevice; import com.wecloud.im.biz.module.message.entity.ImClientDevice;
import com.wecloud.im.service.ImClientDeviceService; import com.wecloud.im.biz.module.message.service.ImClientDeviceService;
import com.wecloud.im.service.ImInboxService; import com.wecloud.im.biz.module.message.service.ImInboxService;
import com.wecloud.im.server.model.request.PushVO; import com.wecloud.im.server.model.request.PushVO;
import com.wecloud.pushserver.client.model.dto.ApplicationDTO; import com.wecloud.pushserver.client.model.dto.ApplicationDTO;
import com.wecloud.pushserver.client.model.dto.ClientDTO; import com.wecloud.pushserver.client.model.dto.ClientDTO;
import com.wecloud.pushserver.client.model.dto.ClientDeviceDTO; import com.wecloud.pushserver.client.model.dto.ClientDeviceDTO;
import com.wecloud.pushserver.client.model.dto.MessageDTO; import com.wecloud.pushserver.client.model.dto.MessageDTO;
import com.wecloud.pushserver.client.model.dto.PushDTO; import com.wecloud.pushserver.client.model.dto.PushDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.rocketmq.client.producer.SendResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List; import static com.wecloud.im.server.ImConstant.PUSH_BODY;
import static com.wecloud.im.server.ImConstant.PUSH_TITLE;
import static com.wecloud.im.ws.ImConstant.PUSH_BODY;
import static com.wecloud.im.ws.ImConstant.PUSH_TITLE;
/** /**
* @Author wenzhida * @Author wenzhida
......
package com.wecloud.im.mq; package com.wecloud.im.biz.core.rocketmq.component;
import java.util.List;
import java.util.Objects;
import com.wecloud.im.exception.MqContextException;
import com.wecloud.im.exception.MqSendException;
import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendCallback; import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult; import org.apache.rocketmq.client.producer.SendResult;
...@@ -12,8 +13,8 @@ import org.slf4j.LoggerFactory; ...@@ -12,8 +13,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import java.util.List; import com.wecloud.im.biz.core.rocketmq.exception.MqContextException;
import java.util.Objects; import com.wecloud.im.biz.core.rocketmq.exception.MqSendException;
/** /**
* @Author wenzhida * @Author wenzhida
......
package com.wecloud.im.config; package com.wecloud.im.biz.core.rocketmq.config;
import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
......
package com.wecloud.im.config; package com.wecloud.im.biz.core.rocketmq.config;
import lombok.Data; import lombok.Data;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
......
package com.wecloud.im.exception; package com.wecloud.im.biz.core.rocketmq.exception;
/** /**
* @Author wenzhida * @Author wenzhida
......
package com.wecloud.im.exception; package com.wecloud.im.biz.core.rocketmq.exception;
/** /**
* @Author wenzhida * @Author wenzhida
......
package com.wecloud.im.exception; package com.wecloud.im.biz.core.rocketmq.exception;
/** /**
* @Author wenzhida * @Author wenzhida
......
/* package com.wecloud.im.biz.core.web;
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wecloud.handler;
import com.alibaba.fastjson.JSON;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.wecloud.im.exception.SysLoginException;
import com.wecloud.im.exception.VerificationCodeException;
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.exception.DaoException;
import io.geekidea.springbootplus.framework.common.exception.SpringBootPlusException;
import io.geekidea.springbootplus.framework.core.bean.RequestDetail;
import io.geekidea.springbootplus.framework.core.util.RequestDetailThreadLocal;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authz.UnauthenticatedException; import org.apache.shiro.authz.UnauthenticatedException;
import org.apache.shiro.authz.UnauthorizedException; import org.apache.shiro.authz.UnauthorizedException;
...@@ -43,9 +21,17 @@ import org.springframework.web.bind.annotation.ExceptionHandler; ...@@ -43,9 +21,17 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList; import com.alibaba.fastjson.JSON;
import java.util.Collections; import com.auth0.jwt.exceptions.JWTDecodeException;
import java.util.List; import com.wecloud.im.core.bean.RequestDetail;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.core.common.api.ApiResult;
import com.wecloud.im.core.common.exception.BusinessException;
import com.wecloud.im.core.common.exception.DaoException;
import com.wecloud.im.core.common.exception.SpringBootPlusException;
import com.wecloud.im.core.exception.SysLoginException;
import com.wecloud.im.core.exception.VerificationCodeException;
import com.wecloud.im.core.util.RequestDetailThreadLocal;
/** /**
* 全局异常处理器, 封装错误response * 全局异常处理器, 封装错误response
......
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Author wenzhida
* @Date 2022/2/9 17:25
* @Description 呼叫类型枚举
*/
public enum CallTypeEnum implements BaseEnum {
/**
* 1 - video
*/
VIDEO(1, "video"),
/**
* 2 - voice
*/
VOICE(2, "voice");
CallTypeEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Description 会话类型
* @Author lixiaozhong
* @Date 2022/1/11 4:58 下午
*/
public enum ChatTypeEnum implements BaseEnum {
/**
* 单聊
*/
SINGLE(1, "单聊"),
/**
* 普通群
*/
NORMAL_GROUP(2, "普通群"),
/**
* 万人群
*/
THOUSAND_GROUP(3, "万人群"),
/**
* 聊天室
*/
CHAT_ROOM(4, "聊天室"),
/**
* 临时会话
*/
TEMP(5, "临时会话"),
/**
* 系统会话
*/
SYSTEM(6, "系统会话"),
;
private final Integer code;
private final String desc;
ChatTypeEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Author wenzhida
* @Date 2022/3/2 17:15
* @Description 设备类型枚举
*/
public enum DeviceTypeEnum implements BaseEnum {
IOS(1, "IOS端"),
ANDROID(2, "安卓端"),
WEB(3, "web端"),
WIN(4, "PC-windows端"),
MAC(5, "PC-macOs端");
private final Integer code;
private final String desc;
DeviceTypeEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Description 服务器下发事件的枚举
* @Author lixiaozhong
* @Date 2022/1/14 12:02 下午
*/
public enum EventResponseSubCmdEnum implements BaseEnum {
FRIEND_APPLY(1, "好友申请"),
FRIEND_APPROVE(2, "好友认证:同意/拒绝");
private final Integer code;
private final String desc;
EventResponseSubCmdEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
/**
* @Author wenzhida
* @Date 2022/4/27 10:28
* @Description 添加好友来源枚举
*/
public enum FriendSourceEnum {
// 名片
CARD("CARD", "名片"),
// 二维码
QR_CODE("QR_CODE", "二维码"),
// SEARCH 搜索
SEARCH("SEARCH", "搜索"),
// 群聊
GROUP_CHAT("GROUP_CHAT", "群聊"),
;
FriendSourceEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
private final String code;
private final String desc;
public String getCode() {
return this.code;
}
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* 好友关系 1:待确定,2:已确认,3:已拒绝,4:已删除
* @author lixiaozhong
*
*/
@Getter
@AllArgsConstructor
public enum FriendStateEnum implements BaseEnum {
/**
* 待确认
**/
UNSURE(1, "待确认"),
/**
* 已确认
**/
CONFORM(2, "已确认"),
REJECT(3, "已拒绝"),
DEL(4, "已删除");
private final Integer code;
private final String desc;
}
package com.wecloud.im.biz.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
/**
* 群聊设置类型枚举
* @Author luozh
* @Date 2022年04月27日 11:23
* @Version 1.0
*/
public enum GroupChatSettingTypeEnum {
/**
* 1-禁止群成员互加好友
*/
FORBID_ADD_FRIEND("FORBID_ADD_FRIEND", "禁止群成员互加好友"),
/**
* 3-禁止群成员发图片
*/
FORBID_SEND_PIC("FORBID_SEND_PIC", "禁止群成员发图片"),
/**
* 4-禁止群成员发链接
*/
FORBID_SEND_LINK("FORBID_SEND_LINK", "禁止群成员发链接"),
/**
* 4-禁言
*/
MUTED("MUTED", "禁言"),
/**
* 5-修改群名
*/
NAME("NAME", "修改群名"),
/**
* 修改群头像
*/
HEAD_PORTRAIT("HEAD_PORTRAIT", "修改群头像"),
;
GroupChatSettingTypeEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
@JsonValue
@EnumValue
private final String code;
private final String desc;
}
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Author wenzhida
* @Date 2022/2/16 15:27
* @Description 人员在群内角色枚举
*/
public enum GroupRoleEnum implements BaseEnum {
/**
* 1-普通群成员
*/
NORMAL(1, "普通群成员"),
/**
* 2 - 管理员
*/
ADMIN(2, "管理员"),
/**
* 3 - 群主
*/
OWNER(3, "群主");
GroupRoleEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
/**
* 加入会话方式枚举
* @Author luozh
* @Date 2022年05月09日 14:58
* @Version 1.0
*/
public enum JoinConversationTypeEnum {
// 会话创建者
OWNER("OWNER", "会话创建者"),
// 被邀请
BE_INVITED("BE_INVITED", "被邀请"),
;
@EnumValue
private final String code;
private final String desc;
JoinConversationTypeEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getCode() {
return this.code;
}
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* 层级枚举
*
* @author geekidea
* @date 2019-10-24
**/
public enum MenuLevelEnum implements BaseEnum {
/**
* 一级菜单
**/
ONE(1, "一级菜单"),
/**
* 二级菜单
**/
TWO(2, "二级菜单"),
/**
* 功能菜单
**/
THREE(3, "功能菜单");
private final Integer code;
private final String desc;
MenuLevelEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Author wenzhida
* @Date 2022/3/15 23:16
* @Description 多人音视频房间成员状态枚举
*/
public enum MultiRtcMemberStateEnum implements BaseEnum {
/**
* 1 - 呼叫中
*/
CALLING(1, "呼叫中"),
/**
* 2 - 已接听
*/
ANSWERED(2, "已接听"),
/**
* 3 - 已拒绝
*/
REJECTED(3, "已拒绝"),
/**
* 4 - 未接听
*/
NOT_ANSWERED(4, "未接听"),
/**
* 5 - 已断开(断网断线)
*/
DISCONNECT(5, "已断开"),
/**
* 6 - 主动退出
*/
LEAVE(6, "主动退出");
MultiRtcMemberStateEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Author wenzhida
* @Date 2022/3/15 23:16
* @Description 多人音视频房间状态枚举
*/
public enum MultiRtcRoomStateEnum implements BaseEnum {
/**
* 1 - 已创建
*/
CREATED(1, "已创建"),
/**
* 2 - 会议中
*/
MEETING(2, "会议中"),
/**
* 3 - 会议结束
*/
END(3, "会议结束");
MultiRtcRoomStateEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Author wenzhida
* @Date 2022/2/17 11:52
* @Description 禁言选型枚举枚举
*/
public enum MutedEnum implements BaseEnum {
/**
* 1-未禁言
*/
NO(1, "未禁言"),
/**
* 2 - 禁言
*/
YES(2, "禁言");
MutedEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Author wenzhida
* @Date 2022/3/11 16:24
* @Description 消息是否已读枚举
*/
public enum ReadMsgStatusEnum implements BaseEnum {
/**
* 0 - 未读
*/
UNREAD(0, "未读"),
/**
* 1 - 已读
*/
READ(1, "已读");
ReadMsgStatusEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import com.fasterxml.jackson.annotation.JsonValue;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Author wenzhida
* @Date 2022/2/15 13:57
* @Description 与client关系枚举
*/
public enum RelationEnum implements BaseEnum {
/**
* 1-陌生人
*/
STRANGER(1, "陌生人"),
/**
* 2-好友
*/
FRIEND(2, "好友"),
/**
* 3-被我拉黑
*/
BE_BLACK(3, "被我拉黑");
RelationEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
@JsonValue
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Author Future
* @Date 2022/5/22 23:42
* @Description 单人音视频状态枚举
*/
public enum RtcStateEnum implements BaseEnum {
/**
* 1 - 音视频发起
*/
CREATED(1, "音视频发起"),
/**
* 2 - 音视频中
*/
ING(2, "音视频中"),
/**
* 3 - 音视频结束
*/
END(3, "音视频结束");
RtcStateEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Author wenzhida
* @Date 2022/2/23 13:44
* @Description 性别枚举
*/
public enum SexEnum implements BaseEnum {
/**
* 1 - 男
*/
MAN(1, "男"),
/**
* 2 - 女
*/
WOMAN(2, "女"),
/**
* 3 - 未知
*/
UNKNOWN(3, "未知");
SexEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Author Future
* @Date 2022/6/3 13:12
* @Description 单人音视频操作类型枚举
*/
public enum SingleRtcOperateTypeEnum implements BaseEnum {
/**
* 1 - 同意进入频道
*/
JOIN(1, "join"),
/**
* 2 - 拒接进入频道
*/
REJECT(2, "reject"),
/**
* 2 - 离开频道
*/
LEAVE(3, "leave"),
/**
* 4 - 异常原因断开
*/
ABNORMAL_DISCONNECT(4, "abnormalDisconnect");
SingleRtcOperateTypeEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.biz.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* 审核状态,0审核中,1审核通过,2审核未通过
**/
@Getter
@AllArgsConstructor
public enum StateAuditStatusEnum implements BaseEnum {
/**
* 0审核中
**/
UNDER_REVIEW(0, "0审核中"),
/**
* 1审核通过
**/
PASSED(1, "1审核通过"),
/**
* 2审核未通过
**/
FAILED_THE_AUDIT(2, "2审核未通过");
private final Integer code;
private final String desc;
}
package com.wecloud.im.biz.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* 启用禁用状态枚举
*
* @author geekidea
* @date 2019-10-24
**/
@Getter
@AllArgsConstructor
public enum StateEnum implements BaseEnum {
/**
* 禁用
**/
DISABLE(0, "禁用"),
/**
* 启用
**/
ENABLE(1, "启用");
private final Integer code;
private final String desc;
}
package com.wecloud.im.biz.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* 付款状态,0-未付款,1-用户已付款,待审核,2-用户已付款,审核通过,3-退款中,99-已退款
**/
@Getter
@AllArgsConstructor
public enum StatePaymentStatusEnum implements BaseEnum {
// 0-UNPAID, 1-PAYING, 2-PAID, 3-REFUNDING, 99-REFUNDED
/**
* 未付款
**/
UNPAID(0, "未付款"),
/**
* 付款中
**/
PAYING(1, "用户已付款,待审核"),
/**
* 已付款
**/
PAID(2, "用户已付款,审核通过"),
/**
* 退款中
**/
REFUNDING(3, "退款中"),
/**
* 已退款
**/
REFUNDED(99, "已退款");
private final Integer code;
private final String desc;
}
package com.wecloud.im.biz.enums;
import com.wecloud.im.core.common.enums.BaseEnum;
/**
* @Author wenzhida
* @Date 2022/2/21 18:25
* @Description 验证码验证场景枚举
*/
public enum VerifySceneEnum implements BaseEnum {
/**
* 1 - 用户注册
*/
REGISTER(1, "用户注册"),
/**
* 2 - 重置密码验证
*/
RESET_PWD(2, "重置密码验证"),
/**
* 3 - 更换手机号绑定
*/
CHANGE_PHONE(3, "更换手机号绑定");
VerifySceneEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
}
package com.wecloud.im.event; package com.wecloud.im.biz.event;
import lombok.Getter; import lombok.Getter;
import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEvent;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.biz.module.message.entity.ImMessage;
/** /**
* 消息发送事件 * 消息发送事件
......
package com.wecloud.im.event.listener; package com.wecloud.im.biz.event.listener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.wecloud.im.event.ClientOnlineStatusChangeEvent; import com.wecloud.im.biz.module.message.service.ImCallbackService;
import com.wecloud.im.service.ImCallbackService; import com.wecloud.im.server.event.ChannelStatusChangeEvent;
/** /**
* *
...@@ -15,14 +15,14 @@ import com.wecloud.im.service.ImCallbackService; ...@@ -15,14 +15,14 @@ import com.wecloud.im.service.ImCallbackService;
* @Version 1.0 * @Version 1.0
*/ */
@Component @Component
public class ClientOnlineStatusChangeListener implements ApplicationListener<ClientOnlineStatusChangeEvent> { public class ChannelStatusChangeEventListener implements ApplicationListener<ChannelStatusChangeEvent> {
@Autowired @Autowired
private ImCallbackService callbackService; private ImCallbackService callbackService;
@Async @Async
@Override @Override
public void onApplicationEvent(ClientOnlineStatusChangeEvent event) { public void onApplicationEvent(ChannelStatusChangeEvent event) {
Long applicationId = event.getApplicationId(); Long applicationId = event.getApplicationId();
Long clientId = event.getClientId(); Long clientId = event.getClientId();
......
package com.wecloud.im.event.listener; package com.wecloud.im.biz.event.listener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.biz.event.ClientSendMessageEvent;
import com.wecloud.im.event.ClientSendMessageEvent; import com.wecloud.im.biz.module.message.entity.ImMessage;
import com.wecloud.im.service.ImCallbackService; import com.wecloud.im.biz.module.message.service.ImCallbackService;
/** /**
* *
......
package com.wecloud.im.externalaccess.controller; package com.wecloud.im.biz.externalaccess.controller;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.core.common.api.ApiResult;
import com.wecloud.im.core.common.controller.BaseController;
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;
...@@ -15,11 +12,14 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -15,11 +12,14 @@ 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.entity.ImClient; import com.wecloud.im.biz.externalaccess.param.FriendDto;
import com.wecloud.im.externalaccess.param.FriendDto; import com.wecloud.im.biz.externalaccess.service.FriendService;
import com.wecloud.im.externalaccess.service.FriendService; import com.wecloud.im.biz.module.message.entity.ImClient;
import com.wecloud.im.friend.param.ImFriendBaseParam; import com.wecloud.im.biz.module.message.param.ImFriendBaseParam;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.biz.module.message.service.ImClientService;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.core.common.api.ApiResult;
import com.wecloud.im.core.common.controller.BaseController;
/** /**
* @Author wenzhida * @Author wenzhida
......
package com.wecloud.im.externalaccess.controller; package com.wecloud.im.biz.externalaccess.controller;
import cn.hutool.crypto.digest.MD5;
import com.wecloud.im.externalaccess.param.MultiMeetSignGetParam;
import com.wecloud.im.core.common.api.ApiResult;
import com.wecloud.im.core.common.controller.BaseController;
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.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
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 cn.hutool.crypto.digest.MD5;
import com.wecloud.im.biz.externalaccess.param.MultiMeetSignGetParam;
import com.wecloud.im.core.common.api.ApiResult;
import com.wecloud.im.core.common.controller.BaseController;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/3/3 17:39 * @Date 2022/3/3 17:39
......
package com.wecloud.im.externalaccess.controller; package com.wecloud.im.biz.externalaccess.controller;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.core.common.api.ApiResult;
import com.wecloud.im.core.common.controller.BaseController;
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;
...@@ -15,22 +12,25 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -15,22 +12,25 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.wecloud.im.externalaccess.param.ChangePhoneParam; import com.wecloud.im.biz.externalaccess.param.ChangePhoneParam;
import com.wecloud.im.externalaccess.param.CheckPhoneParam; import com.wecloud.im.biz.externalaccess.param.CheckPhoneParam;
import com.wecloud.im.externalaccess.param.FindUserParam; import com.wecloud.im.biz.externalaccess.param.FindUserParam;
import com.wecloud.im.externalaccess.param.GetUserParam; import com.wecloud.im.biz.externalaccess.param.GetUserParam;
import com.wecloud.im.externalaccess.param.LoginSuccessDto; import com.wecloud.im.biz.externalaccess.param.LoginSuccessDto;
import com.wecloud.im.externalaccess.param.ModifyHeadPortraitParam; import com.wecloud.im.biz.externalaccess.param.ModifyHeadPortraitParam;
import com.wecloud.im.externalaccess.param.ModifyLandouParam; import com.wecloud.im.biz.externalaccess.param.ModifyLandouParam;
import com.wecloud.im.externalaccess.param.ModifyNicknameParam; import com.wecloud.im.biz.externalaccess.param.ModifyNicknameParam;
import com.wecloud.im.externalaccess.param.ModifySexParam; import com.wecloud.im.biz.externalaccess.param.ModifySexParam;
import com.wecloud.im.externalaccess.param.ModifyUserParam; import com.wecloud.im.biz.externalaccess.param.ModifyUserParam;
import com.wecloud.im.externalaccess.param.RegisterSuccessDto; import com.wecloud.im.biz.externalaccess.param.RegisterSuccessDto;
import com.wecloud.im.externalaccess.param.ResetPasswordParam; import com.wecloud.im.biz.externalaccess.param.ResetPasswordParam;
import com.wecloud.im.externalaccess.param.UserBaseDto; import com.wecloud.im.biz.externalaccess.param.UserBaseDto;
import com.wecloud.im.externalaccess.param.UserLoginParam; import com.wecloud.im.biz.externalaccess.param.UserLoginParam;
import com.wecloud.im.externalaccess.param.UserRegisterParam; import com.wecloud.im.biz.externalaccess.param.UserRegisterParam;
import com.wecloud.im.externalaccess.service.UserService; import com.wecloud.im.biz.externalaccess.service.UserService;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.core.common.api.ApiResult;
import com.wecloud.im.core.common.controller.BaseController;
/** /**
* @Author wenzhida * @Author wenzhida
......
package com.wecloud.im.externalaccess.controller; package com.wecloud.im.biz.externalaccess.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.wecloud.im.externalaccess.sms.constant.SmsConstants;
import com.wecloud.im.externalaccess.sms.sender.HwSmsSender;
import com.wecloud.im.core.util.RandomUtil;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.core.common.api.ApiResult;
import com.wecloud.im.core.common.controller.BaseController;
import com.wecloud.im.core.common.enums.BaseEnum;
import com.wecloud.im.core.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 java.time.Duration;
import javax.annotation.Resource;
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;
...@@ -23,16 +15,24 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -23,16 +15,24 @@ 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.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.im.constant.RedisKeyPrefixConstant; import com.wecloud.im.biz.constant.RedisKeyPrefixConstant;
import com.wecloud.im.externalaccess.entity.User; import com.wecloud.im.biz.enums.VerifySceneEnum;
import com.wecloud.im.externalaccess.param.SendVerifyCodeParam; import com.wecloud.im.biz.externalaccess.entity.User;
import com.wecloud.im.externalaccess.service.UserService; import com.wecloud.im.biz.externalaccess.param.SendVerifyCodeParam;
import com.wecloud.im.sdk.enums.VerifySceneEnum; import com.wecloud.im.biz.externalaccess.service.UserService;
import com.wecloud.im.biz.externalaccess.sms.constant.SmsConstants;
import com.wecloud.im.biz.externalaccess.sms.sender.HwSmsSender;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.core.common.api.ApiResult;
import com.wecloud.im.core.common.controller.BaseController;
import com.wecloud.im.core.common.enums.BaseEnum;
import com.wecloud.im.core.common.exception.BusinessException;
import com.wecloud.im.core.util.RandomUtil;
import com.wecloud.im.server.utils.RedisUtils; import com.wecloud.im.server.utils.RedisUtils;
import javax.annotation.Resource;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/2/21 17:05 * @Date 2022/2/21 17:05
......
package com.wecloud.im.externalaccess.entity; package com.wecloud.im.biz.externalaccess.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.wecloud.im.core.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.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;
import com.baomidou.mybatisplus.annotation.TableName;
import com.wecloud.im.core.common.entity.BaseEntity;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/2/21 16:58 * @Date 2022/2/21 16:58
......
package com.wecloud.im.externalaccess.mapper; package com.wecloud.im.biz.externalaccess.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wecloud.im.externalaccess.entity.User;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wecloud.im.biz.externalaccess.entity.User;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/2/21 17:03 * @Date 2022/2/21 17:03
......
package com.wecloud.im.externalaccess.param; package com.wecloud.im.biz.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 23:10 * @Date 2022/2/21 23:10
......
package com.wecloud.im.externalaccess.param; package com.wecloud.im.biz.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/22 11:32 * @Date 2022/2/22 11:32
......
package com.wecloud.im.externalaccess.param; package com.wecloud.im.biz.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 11:14 * @Date 2022/2/23 11:14
......
package com.wecloud.im.externalaccess.param; package com.wecloud.im.biz.externalaccess.param;
import com.wecloud.im.friend.param.ImFriendBaseDto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import com.wecloud.im.biz.module.message.param.ImFriendBaseDto;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/2/22 23:20 * @Date 2022/2/22 23:20
......
package com.wecloud.im.externalaccess.param; package com.wecloud.im.biz.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 11:14 * @Date 2022/2/23 11:14
......
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