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
String data = timestamp + clientId + appKey + appSecret;
String sign = DigestUtils.md5DigestAsHex(data.getBytes());
}
public static void main(String[] args) {
}public static void main(String[] args) {
String clientId = "client_123123";
String appKey = "elLwpel1gWCHDqZy";
String appSecret = "68809bb5a9077a83631aeb0b17b5965d6b2302faf2ab3737";
......
# wecloud-im 即时通讯云对接文档
# wecloud-im 即时通讯云对接文档
......@@ -154,9 +154,7 @@ private void getSign(String timestamp, String clientId, String appKey, String ap
String data = timestamp + clientId + appKey + appSecret;
String sign = DigestUtils.md5DigestAsHex(data.getBytes());
}
public static void main(String[] args) {
}public static void main(String[] args) {
String clientId = "client_123123";
String appKey = "elLwpel1gWCHDqZy";
String appSecret = "68809bb5a9077a83631aeb0b17b5965d6b2302faf2ab3737";
......
......@@ -15,6 +15,10 @@
<name>im-biz</name>
<description>im 业务模块</description>
<properties>
<spring-boot.version>2.2.5.RELEASE</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>com.wecloud</groupId>
......@@ -22,6 +26,21 @@
</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>
<artifactId>firebase-admin</artifactId>
<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;
import com.wecloud.im.annotation.EnableRocketMq;
import io.geekidea.springbootplus.framework.util.PrintApplicationInfo;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
......@@ -31,6 +13,9 @@ import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
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;
@ServletComponentScan
@EnableCaching
@EnableRocketMq
@MapperScan({"io.geekidea.springbootplus.**.mapper", "com.wecloud.**.mapper"})
@SpringBootApplication(scanBasePackages = {"io.geekidea.springbootplus", "com.wecloud"})
@MapperScan({"com.wecloud.**.mapper"})
@SpringBootApplication(scanBasePackages = {"com.wecloud"})
public class SpringBootPlusApplication {
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.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -12,12 +9,15 @@ import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.ImClientBlacklistPageParam;
import com.wecloud.im.param.ImClientBlacklistQueryVo;
import com.wecloud.im.param.add.ImClientBlacklistUpdate;
import com.wecloud.im.service.ImClientBlacklistService;
import com.wecloud.im.biz.module.message.controller.param.ImClientBlacklistPageParam;
import com.wecloud.im.biz.module.message.controller.param.ImClientBlacklistQueryVo;
import com.wecloud.im.biz.module.message.controller.param.add.ImClientBlacklistUpdate;
import com.wecloud.im.biz.module.message.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.netty.dispatch.annotation.ActionMapping;
/**
* ws 黑名单
......
package com.wecloud.im.action;
package com.wecloud.im.biz.action;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -13,25 +13,25 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.param.ClientInfoParam;
import com.wecloud.im.param.GetClientInfoParam;
import com.wecloud.im.param.GetOnlineStatusParam;
import com.wecloud.im.param.LogoutParam;
import com.wecloud.im.param.add.ImClientHeadPortraitAdd;
import com.wecloud.im.param.add.ImClientHeadPortraitAndNicknameUpdate;
import com.wecloud.im.param.add.ImClientNicknameAdd;
import com.wecloud.im.service.ContextService;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.vo.ClientInfoVo;
import com.wecloud.im.vo.GetInfoListVo;
import com.wecloud.im.vo.ImOnlineStatusVo;
import com.wecloud.im.vo.MyInfoVo;
import com.wecloud.im.biz.module.message.controller.param.ClientInfoParam;
import com.wecloud.im.biz.module.message.controller.param.GetClientInfoParam;
import com.wecloud.im.biz.module.message.controller.param.GetOnlineStatusParam;
import com.wecloud.im.biz.module.message.controller.param.LogoutParam;
import com.wecloud.im.biz.module.message.controller.param.add.ImClientHeadPortraitAdd;
import com.wecloud.im.biz.module.message.controller.param.add.ImClientHeadPortraitAndNicknameUpdate;
import com.wecloud.im.biz.module.message.controller.param.add.ImClientNicknameAdd;
import com.wecloud.im.biz.module.message.controller.vo.ClientInfoVo;
import com.wecloud.im.biz.module.message.controller.vo.GetInfoListVo;
import com.wecloud.im.biz.module.message.controller.vo.ImOnlineStatusVo;
import com.wecloud.im.biz.module.message.controller.vo.MyInfoVo;
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.service.ContextService;
import com.wecloud.im.biz.module.message.service.ImApplicationService;
import com.wecloud.im.biz.module.message.service.ImClientService;
import com.wecloud.im.server.cache.UserStateCacheManager;
import com.wecloud.im.server.model.WsResponse;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
/**
* 终端 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.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -15,30 +14,31 @@ import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import com.alibaba.fastjson.JSON;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.ChatRoomMemberPageParam;
import com.wecloud.im.param.DisbandConversationParam;
import com.wecloud.im.param.ExitChatRoomParam;
import com.wecloud.im.param.GroupChatSettingParam;
import com.wecloud.im.param.ImConversationQueryParam;
import com.wecloud.im.param.IntoChatRoomParam;
import com.wecloud.im.param.ListConversationParam;
import com.wecloud.im.param.MutedGroupMemberParam;
import com.wecloud.im.param.MutedGroupParam;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.SetHeadPortraitParam;
import com.wecloud.im.param.TransferOwnerParam;
import com.wecloud.im.param.add.ImClientLeaveConversation;
import com.wecloud.im.param.add.ImClientToConversation;
import com.wecloud.im.param.add.ImConversationAttrUpdate;
import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.vo.ChatRoomMemberVo;
import com.wecloud.im.vo.ConversationVo;
import com.wecloud.im.vo.ImConversationCreateVo;
import com.wecloud.im.biz.module.message.controller.param.ChatRoomMemberPageParam;
import com.wecloud.im.biz.module.message.controller.param.DisbandConversationParam;
import com.wecloud.im.biz.module.message.controller.param.ExitChatRoomParam;
import com.wecloud.im.biz.module.message.controller.param.GroupChatSettingParam;
import com.wecloud.im.biz.module.message.controller.param.ImConversationQueryParam;
import com.wecloud.im.biz.module.message.controller.param.IntoChatRoomParam;
import com.wecloud.im.biz.module.message.controller.param.ListConversationParam;
import com.wecloud.im.biz.module.message.controller.param.MutedGroupMemberParam;
import com.wecloud.im.biz.module.message.controller.param.MutedGroupParam;
import com.wecloud.im.biz.module.message.controller.param.SetAdminsParam;
import com.wecloud.im.biz.module.message.controller.param.SetHeadPortraitParam;
import com.wecloud.im.biz.module.message.controller.param.TransferOwnerParam;
import com.wecloud.im.biz.module.message.controller.param.add.ImClientLeaveConversation;
import com.wecloud.im.biz.module.message.controller.param.add.ImClientToConversation;
import com.wecloud.im.biz.module.message.controller.param.add.ImConversationAttrUpdate;
import com.wecloud.im.biz.module.message.controller.param.add.ImConversationCreate;
import com.wecloud.im.biz.module.message.controller.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.biz.module.message.controller.param.add.ImConversationNameUpdate;
import com.wecloud.im.biz.module.message.controller.vo.ChatRoomMemberVo;
import com.wecloud.im.biz.module.message.controller.vo.ConversationVo;
import com.wecloud.im.biz.module.message.controller.vo.ImConversationCreateVo;
import com.wecloud.im.biz.module.message.service.ImConversationService;
import com.wecloud.im.core.common.api.ApiCode;
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.ApiOperation;
......@@ -13,14 +13,14 @@ import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.ChatSettingParam;
import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ListConversationMembersParam;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.vo.ConversationMemberVo;
import com.wecloud.im.biz.module.message.controller.param.ChatSettingParam;
import com.wecloud.im.biz.module.message.controller.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.biz.module.message.controller.param.ListConversationMembersParam;
import com.wecloud.im.biz.module.message.controller.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.biz.module.message.controller.vo.ConversationMemberVo;
import com.wecloud.im.biz.module.message.service.ImConversationMembersService;
import com.wecloud.im.server.model.WsResponse;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
/**
* @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.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -14,12 +12,14 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.ImMsgReceivedStatusUpdate;
import com.wecloud.im.param.MsgReadStatusUpdateParam;
import com.wecloud.im.param.UpdateMsgReadStatusByConversationParam;
import com.wecloud.im.service.ImInboxService;
import com.alibaba.fastjson.JSON;
import com.wecloud.im.biz.module.message.controller.param.ImMsgReceivedStatusUpdate;
import com.wecloud.im.biz.module.message.controller.param.MsgReadStatusUpdateParam;
import com.wecloud.im.biz.module.message.controller.param.UpdateMsgReadStatusByConversationParam;
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.netty.dispatch.annotation.ActionMapping;
/**
* @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.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -12,16 +11,17 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.GetReadersParam;
import com.wecloud.im.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.MsgDeleteParam;
import com.wecloud.im.param.add.ImMsgRecall;
import com.wecloud.im.param.add.ImMsgUpdate;
import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.vo.OfflineMsgDto;
import com.wecloud.im.vo.ReaderList;
import com.wecloud.im.biz.module.message.controller.param.GetReadersParam;
import com.wecloud.im.biz.module.message.controller.param.ImHistoryMessagePageParam;
import com.wecloud.im.biz.module.message.controller.param.MsgDeleteParam;
import com.wecloud.im.biz.module.message.controller.param.add.ImMsgRecall;
import com.wecloud.im.biz.module.message.controller.param.add.ImMsgUpdate;
import com.wecloud.im.biz.module.message.controller.vo.OfflineMsgDto;
import com.wecloud.im.biz.module.message.controller.vo.ReaderList;
import com.wecloud.im.biz.module.message.service.ImMessageService;
import com.wecloud.im.core.pagination.Paging;
import com.wecloud.im.server.model.WsResponse;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
/**
* @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.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -13,15 +12,16 @@ import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import com.alibaba.fastjson.JSON;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.AgreeToMultiMeetParam;
import com.wecloud.im.param.HeartbeatMultiMeetParam;
import com.wecloud.im.param.InviteToMultiMeetParam;
import com.wecloud.im.param.LeaveFromMultiMeetParam;
import com.wecloud.im.param.NotAnsweredMultiMeetParam;
import com.wecloud.im.param.RejectToMultiMeetParam;
import com.wecloud.im.biz.module.message.controller.param.AgreeToMultiMeetParam;
import com.wecloud.im.biz.module.message.controller.param.HeartbeatMultiMeetParam;
import com.wecloud.im.biz.module.message.controller.param.InviteToMultiMeetParam;
import com.wecloud.im.biz.module.message.controller.param.LeaveFromMultiMeetParam;
import com.wecloud.im.biz.module.message.controller.param.NotAnsweredMultiMeetParam;
import com.wecloud.im.biz.module.message.controller.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.multimeet.service.MultiMeetService;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
@Slf4j
@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.socket.nio.NioSocketChannel;
import io.swagger.annotations.Api;
......@@ -26,41 +24,43 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
import com.wecloud.netty.dispatch.common.BaseRequest;
import com.wecloud.netty.dispatch.extend.ActionRequest;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.entity.ImInbox;
import com.wecloud.im.entity.ImMessage;
import com.wecloud.im.entity.ImMessageOnlineSend;
import com.wecloud.im.friend.entity.ImFriend;
import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.mq.MqSender;
import com.wecloud.im.param.ChatContentVo;
import com.wecloud.im.param.ImClientSimpleDto;
import com.wecloud.im.param.ImConversationQueryVo;
import com.wecloud.im.param.MsgVo;
import com.wecloud.im.sdk.enums.ChatTypeEnum;
import com.wecloud.im.sdk.enums.FriendStateEnum;
import com.wecloud.im.sdk.enums.GroupRoleEnum;
import com.wecloud.im.sdk.enums.MutedEnum;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientBlacklistService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.service.ImInboxService;
import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.biz.core.rocketmq.component.MqSender;
import com.wecloud.im.biz.enums.ChatTypeEnum;
import com.wecloud.im.biz.enums.FriendStateEnum;
import com.wecloud.im.biz.enums.GroupRoleEnum;
import com.wecloud.im.biz.enums.MutedEnum;
import com.wecloud.im.biz.module.message.controller.param.ChatContentVo;
import com.wecloud.im.biz.module.message.controller.param.ImClientSimpleDto;
import com.wecloud.im.biz.module.message.controller.param.ImConversationQueryVo;
import com.wecloud.im.biz.module.message.controller.param.MsgVo;
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.ImConversationMembers;
import com.wecloud.im.biz.module.message.entity.ImFriend;
import com.wecloud.im.biz.module.message.entity.ImInbox;
import com.wecloud.im.biz.module.message.entity.ImMessage;
import com.wecloud.im.biz.module.message.entity.ImMessageOnlineSend;
import com.wecloud.im.biz.module.message.service.ImApplicationService;
import com.wecloud.im.biz.module.message.service.ImClientBlacklistService;
import com.wecloud.im.biz.module.message.service.ImClientService;
import com.wecloud.im.biz.module.message.service.ImConversationMembersService;
import com.wecloud.im.biz.module.message.service.ImConversationService;
import com.wecloud.im.biz.module.message.service.ImFriendService;
import com.wecloud.im.biz.module.message.service.ImInboxService;
import com.wecloud.im.biz.module.message.service.ImMessageService;
import com.wecloud.im.core.common.api.ApiCode;
import com.wecloud.im.core.common.api.ApiResult;
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.WsResponseCmdEnum;
import com.wecloud.im.server.model.WsResponse;
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.dto.PushDTO;
import com.wecloud.im.core.util.JsonUtils;
import com.wecloud.im.core.util.SnowflakeUtil;
/**
* @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.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -12,17 +9,20 @@ import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.rtc.CandidateForwardParam;
import com.wecloud.im.param.rtc.CreateRtcChannelParam;
import com.wecloud.im.param.rtc.CreateRtcChannelResult;
import com.wecloud.im.param.rtc.JoinRtcChannelParam;
import com.wecloud.im.param.rtc.LeaveRtcChannelParam;
import com.wecloud.im.param.rtc.RejectRtcChannelParam;
import com.wecloud.im.param.rtc.SdpForwardParam;
import com.wecloud.im.sdk.enums.CallTypeEnum;
import com.alibaba.fastjson.JSON;
import com.wecloud.im.biz.enums.CallTypeEnum;
import com.wecloud.im.biz.module.message.controller.param.rtc.CandidateForwardParam;
import com.wecloud.im.biz.module.message.controller.param.rtc.CreateRtcChannelParam;
import com.wecloud.im.biz.module.message.controller.param.rtc.CreateRtcChannelResult;
import com.wecloud.im.biz.module.message.controller.param.rtc.JoinRtcChannelParam;
import com.wecloud.im.biz.module.message.controller.param.rtc.LeaveRtcChannelParam;
import com.wecloud.im.biz.module.message.controller.param.rtc.RejectRtcChannelParam;
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.rtc.service.RtcService;
import com.wecloud.netty.dispatch.annotation.ActionMapping;
@Slf4j
@Component
......
/*
* 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.biz.config;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
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.module.SimpleModule;
......@@ -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.LocalTimeSerializer;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
import com.wecloud.config.constant.DatePattern;
import io.geekidea.springbootplus.framework.config.jackson.deserializer.JacksonDoubleDeserializer;
import io.geekidea.springbootplus.framework.config.jackson.deserializer.JacksonIntegerDeserializer;
import io.geekidea.springbootplus.framework.core.xss.XssJacksonDeserializer;
import io.geekidea.springbootplus.framework.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;
import com.wecloud.im.core.config.jackson.deserializer.JacksonDoubleDeserializer;
import com.wecloud.im.core.config.jackson.deserializer.JacksonIntegerDeserializer;
import com.wecloud.im.core.constant.DatePattern;
import com.wecloud.im.core.xss.XssJacksonDeserializer;
import com.wecloud.im.core.xss.XssJacksonSerializer;
/**
* @author geekidea
......@@ -101,4 +87,4 @@ public class JacksonConfig implements WebMvcConfigurer {
//放到第一个
converters.add(0, jackson2HttpMessageConverter);
}
}
\ No newline at end of file
}
/*
* 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;
package com.wecloud.im.biz.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
......
/*
* 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;
package com.wecloud.im.biz.config;
import lombok.extern.slf4j.Slf4j;
......
/*
* 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.biz.config;
package com.wecloud.config;
import com.wecloud.config.properties.SpringBootPlusCorsProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
......@@ -28,6 +12,8 @@ import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import com.wecloud.im.biz.config.properties.SpringBootPlusCorsProperties;
/**
* 跨域配置
*
......
/*
* 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.biz.config;
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 java.util.Map;
......@@ -40,9 +16,16 @@ import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.alibaba.fastjson.JSON;
import com.wecloud.im.interceptor.DownloadInterceptor;
import com.wecloud.im.interceptor.ResourceInterceptor;
import com.wecloud.im.interceptor.UploadInterceptor;
import com.wecloud.im.biz.config.properties.SpringBootPlusFilterProperties;
import com.wecloud.im.biz.config.properties.SpringBootPlusInterceptorProperties;
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配置
......@@ -114,17 +97,6 @@ public class SpringBootPlusWebMvcConfig implements WebMvcConfigurer {
return registration;
}
/**
* 自定义权限拦截器
*
* @return
*/
@Bean
public PermissionInterceptor permissionInterceptor() {
return new PermissionInterceptor();
}
/**
* 上传拦截器
*
......@@ -184,13 +156,6 @@ public class SpringBootPlusWebMvcConfig implements WebMvcConfigurer {
.addPathPatterns(interceptorConfig.getDownload().getIncludePaths());
}
// 自定义权限拦截器注册
if (interceptorConfig.getPermission().isEnable()) {
registry.addInterceptor(permissionInterceptor())
.addPathPatterns(interceptorConfig.getPermission().getIncludePaths())
.excludePathPatterns(interceptorConfig.getPermission().getExcludePaths());
}
}
@Override
......
/*
* 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.biz.config;
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.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
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.documentation.RequestHandler;
import springfox.documentation.annotations.ApiIgnore;
......@@ -57,6 +23,11 @@ import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.common.SwaggerPluginSupport;
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.ServletResponse;
import javax.servlet.http.HttpServletRequest;
......@@ -64,10 +35,26 @@ import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
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 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.swagger.schema.ApiModelProperties.findApiModePropertyAnnotation;
......
/*
* 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;
package com.wecloud.im.biz.config.constant;
/**
* <p>
......
/*
* 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;
package com.wecloud.im.biz.config.properties;
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.Collections;
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.web.cors.CorsConfiguration;
/**
* 跨域属性配置
*
......
/*
* 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;
package com.wecloud.im.biz.config.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.stereotype.Component;
......
/*
* 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;
package com.wecloud.im.biz.config.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.stereotype.Component;
......
/*
* 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;
package com.wecloud.im.biz.config.properties;
import lombok.Data;
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
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属性配置信息
......
/*
* 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;
package com.wecloud.im.biz.config.properties;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* 配置文件属性映射为静态属性
*
......
/*
* 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;
package com.wecloud.im.biz.config.properties;
import lombok.Data;
import java.util.List;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* Swagger配置属性
*
......
/*
* 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.biz.core.aop;
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 org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
......@@ -28,6 +10,10 @@ import org.aspectj.lang.annotation.Aspect;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
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>
* 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 java.util.Map;
import org.springframework.beans.factory.annotation.Value;
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;
......
/*
* 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;
package com.wecloud.im.biz.core.interceptor;
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.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 下载拦截器
*
......
/*
* 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;
package com.wecloud.im.biz.core.interceptor;
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.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 资源拦截器
*
......
/*
* 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;
package com.wecloud.im.biz.core.interceptor;
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.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;
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;
import org.json.JSONObject;
package com.wecloud.im.biz.core.push;
import java.util.Arrays;
import java.util.HashSet;
import org.json.JSONObject;
public abstract class AndroidNotification extends UmengNotification {
// Keys can be set in the payload level
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.nio.NioEventLoopGroup;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import java.io.InputStream;
import java.util.Date;
......@@ -23,6 +14,17 @@ import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
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(服务端篇)
* 通过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.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;
import com.wecloud.im.config.RocketMqFactoryBeanConfig;
import com.wecloud.im.config.RocketMqProperties;
import com.wecloud.im.mq.RocketMqProducerService;
import org.springframework.context.annotation.Import;
package com.wecloud.im.biz.core.rocketmq.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
......@@ -11,6 +6,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
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
* @Date 2022/1/25 15:25
......@@ -26,4 +27,4 @@ import java.lang.annotation.Target;
})
public @interface EnableRocketMq {
}
\ No newline at end of file
}
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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImClientDevice;
import com.wecloud.im.service.ImClientDeviceService;
import com.wecloud.im.service.ImInboxService;
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.ImClientDevice;
import com.wecloud.im.biz.module.message.service.ImClientDeviceService;
import com.wecloud.im.biz.module.message.service.ImInboxService;
import com.wecloud.im.server.model.request.PushVO;
import com.wecloud.pushserver.client.model.dto.ApplicationDTO;
import com.wecloud.pushserver.client.model.dto.ClientDTO;
import com.wecloud.pushserver.client.model.dto.ClientDeviceDTO;
import com.wecloud.pushserver.client.model.dto.MessageDTO;
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
......
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.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
......@@ -12,8 +13,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import java.util.List;
import java.util.Objects;
import com.wecloud.im.biz.core.rocketmq.exception.MqContextException;
import com.wecloud.im.biz.core.rocketmq.exception.MqSendException;
/**
* @Author wenzhida
......
package com.wecloud.im.config;
package com.wecloud.im.biz.core.rocketmq.config;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.springframework.context.annotation.Bean;
......
package com.wecloud.im.config;
package com.wecloud.im.biz.core.rocketmq.config;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.core.annotation.Order;
......
package com.wecloud.im.exception;
package com.wecloud.im.biz.core.rocketmq.exception;
/**
* @Author wenzhida
......@@ -23,4 +23,4 @@ public class MqClientException extends RuntimeException {
public MqClientException(String message, Throwable cause) {
super(message, cause);
}
}
\ No newline at end of file
}
/*
* 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;
package com.wecloud.im.biz.core.web;
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 java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authz.UnauthenticatedException;
import org.apache.shiro.authz.UnauthorizedException;
......@@ -43,9 +21,17 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.auth0.jwt.exceptions.JWTDecodeException;
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
......
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 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.context.ApplicationListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import com.wecloud.im.event.ClientOnlineStatusChangeEvent;
import com.wecloud.im.service.ImCallbackService;
import com.wecloud.im.biz.module.message.service.ImCallbackService;
import com.wecloud.im.server.event.ChannelStatusChangeEvent;
/**
*
......@@ -15,14 +15,14 @@ import com.wecloud.im.service.ImCallbackService;
* @Version 1.0
*/
@Component
public class ClientOnlineStatusChangeListener implements ApplicationListener<ClientOnlineStatusChangeEvent> {
public class ChannelStatusChangeEventListener implements ApplicationListener<ChannelStatusChangeEvent> {
@Autowired
private ImCallbackService callbackService;
@Async
@Override
public void onApplicationEvent(ClientOnlineStatusChangeEvent event) {
public void onApplicationEvent(ChannelStatusChangeEvent event) {
Long applicationId = event.getApplicationId();
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.context.ApplicationListener;
import org.springframework.stereotype.Component;
import com.wecloud.im.entity.ImMessage;
import com.wecloud.im.event.ClientSendMessageEvent;
import com.wecloud.im.service.ImCallbackService;
import com.wecloud.im.biz.event.ClientSendMessageEvent;
import com.wecloud.im.biz.module.message.entity.ImMessage;
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.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -15,11 +12,14 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.externalaccess.param.FriendDto;
import com.wecloud.im.externalaccess.service.FriendService;
import com.wecloud.im.friend.param.ImFriendBaseParam;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.biz.externalaccess.param.FriendDto;
import com.wecloud.im.biz.externalaccess.service.FriendService;
import com.wecloud.im.biz.module.message.entity.ImClient;
import com.wecloud.im.biz.module.message.param.ImFriendBaseParam;
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
......
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.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import 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
* @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.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -15,22 +12,25 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
import com.wecloud.im.externalaccess.param.ChangePhoneParam;
import com.wecloud.im.externalaccess.param.CheckPhoneParam;
import com.wecloud.im.externalaccess.param.FindUserParam;
import com.wecloud.im.externalaccess.param.GetUserParam;
import com.wecloud.im.externalaccess.param.LoginSuccessDto;
import com.wecloud.im.externalaccess.param.ModifyHeadPortraitParam;
import com.wecloud.im.externalaccess.param.ModifyLandouParam;
import com.wecloud.im.externalaccess.param.ModifyNicknameParam;
import com.wecloud.im.externalaccess.param.ModifySexParam;
import com.wecloud.im.externalaccess.param.ModifyUserParam;
import com.wecloud.im.externalaccess.param.RegisterSuccessDto;
import com.wecloud.im.externalaccess.param.ResetPasswordParam;
import com.wecloud.im.externalaccess.param.UserBaseDto;
import com.wecloud.im.externalaccess.param.UserLoginParam;
import com.wecloud.im.externalaccess.param.UserRegisterParam;
import com.wecloud.im.externalaccess.service.UserService;
import com.wecloud.im.biz.externalaccess.param.ChangePhoneParam;
import com.wecloud.im.biz.externalaccess.param.CheckPhoneParam;
import com.wecloud.im.biz.externalaccess.param.FindUserParam;
import com.wecloud.im.biz.externalaccess.param.GetUserParam;
import com.wecloud.im.biz.externalaccess.param.LoginSuccessDto;
import com.wecloud.im.biz.externalaccess.param.ModifyHeadPortraitParam;
import com.wecloud.im.biz.externalaccess.param.ModifyLandouParam;
import com.wecloud.im.biz.externalaccess.param.ModifyNicknameParam;
import com.wecloud.im.biz.externalaccess.param.ModifySexParam;
import com.wecloud.im.biz.externalaccess.param.ModifyUserParam;
import com.wecloud.im.biz.externalaccess.param.RegisterSuccessDto;
import com.wecloud.im.biz.externalaccess.param.ResetPasswordParam;
import com.wecloud.im.biz.externalaccess.param.UserBaseDto;
import com.wecloud.im.biz.externalaccess.param.UserLoginParam;
import com.wecloud.im.biz.externalaccess.param.UserRegisterParam;
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
......
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.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.time.Duration;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -23,16 +15,24 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.im.constant.RedisKeyPrefixConstant;
import com.wecloud.im.externalaccess.entity.User;
import com.wecloud.im.externalaccess.param.SendVerifyCodeParam;
import com.wecloud.im.externalaccess.service.UserService;
import com.wecloud.im.sdk.enums.VerifySceneEnum;
import com.wecloud.im.biz.constant.RedisKeyPrefixConstant;
import com.wecloud.im.biz.enums.VerifySceneEnum;
import com.wecloud.im.biz.externalaccess.entity.User;
import com.wecloud.im.biz.externalaccess.param.SendVerifyCodeParam;
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 javax.annotation.Resource;
/**
* @Author wenzhida
* @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.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
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
* @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 com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wecloud.im.biz.externalaccess.entity.User;
/**
* @Author wenzhida
* @Date 2022/2/21 17:03
......@@ -12,5 +13,5 @@ import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper extends BaseMapper<User> {
}
package com.wecloud.im.externalaccess.param;
package com.wecloud.im.biz.externalaccess.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
/**
* @Author wenzhida
* @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 lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
/**
* @Author wenzhida
* @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 lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
/**
* @Author wenzhida
* @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 lombok.Data;
import com.wecloud.im.biz.module.message.param.ImFriendBaseDto;
/**
* @Author wenzhida
* @Date 2022/2/22 23:20
......@@ -31,5 +32,5 @@ public class FriendDto extends ImFriendBaseDto {
*/
@ApiModelProperty("头像路径url")
private String headPortrait;
}
package com.wecloud.im.externalaccess.param;
package com.wecloud.im.biz.externalaccess.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
/**
* @Author wenzhida
* @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