From 3aa29bcefcab2d84a123c1bf7a1852791732b701 Mon Sep 17 00:00:00 2001
From: dute7liang <383200134@qq.com>
Date: Mon, 1 Jan 2024 03:52:14 +0800
Subject: [PATCH] init
---
pom.xml | 7 +-
ruoyi-cai/pom.xml | 9 +--
.../com/ruoyi/cai/auth/CaiLoginManager.java | 3 +
.../main/java/com/ruoyi/cai/trd/Agora.java | 2 +-
.../main/java/com/ruoyi/cai/trd/Yunxin.java | 76 -------------------
.../handler/message/CancelMessageHandler.java | 4 +-
.../handler/message/RefuseMessageHandler.java | 4 +-
.../ruoyi/cai/ws/service/SettleService.java | 4 +-
ruoyi-common/pom.xml | 6 +-
ruoyi-yunxin/pom.xml | 32 ++++++++
.../main/java/com/ruoyi/yunxin/Yunxin.java | 32 ++++++++
.../ruoyi/yunxin/client/ImMessageClient.java | 18 +++++
.../com/ruoyi/yunxin/client/ImUserClient.java | 29 +++++++
.../ruoyi/yunxin/client/ImUserRefClient.java | 19 +++++
.../com/ruoyi/yunxin/config/ForestConfig.java | 22 ++++++
.../com/ruoyi/yunxin/config/ForestInit.java | 22 ++++++
.../yunxin/config}/YunxinProperties.java | 3 +-
.../interceptor/GlodonTokenInterceptor.java | 56 ++++++++++++++
.../java/com/ruoyi/yunxin/req/BlockReq.java | 9 +++
.../com/ruoyi/yunxin/req/CreateUserReq.java | 11 +++
.../java/com/ruoyi/yunxin/req/Option.java | 27 +++++++
.../ruoyi/yunxin/req/SendAttachMsgReq.java | 8 ++
.../java/com/ruoyi/yunxin/req/SendMsgReq.java | 13 ++++
.../java/com/ruoyi/yunxin/req/UnblockReq.java | 8 ++
.../com/ruoyi/yunxin/req/UpdateTokenReq.java | 9 +++
.../com/ruoyi/yunxin/req/UpdateUinfoReq.java | 13 ++++
.../com/ruoyi/yunxin/resp/SendMsgResp.java | 10 +++
.../java/com/ruoyi/yunxin/resp/YxCommonR.java | 13 ++++
.../java/com/ruoyi/yunxin/resp/YxDataR.java | 15 ++++
.../java/com/ruoyi/yunxin/resp/YxInfoR.java | 13 ++++
.../ruoyi/yunxin}/util/RestTemplateUtil.java | 2 +-
31 files changed, 407 insertions(+), 92 deletions(-)
delete mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Yunxin.java
create mode 100644 ruoyi-yunxin/pom.xml
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImMessageClient.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImUserClient.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImUserRefClient.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/config/ForestConfig.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/config/ForestInit.java
rename {ruoyi-cai/src/main/java/com/ruoyi/cai/trd => ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/config}/YunxinProperties.java (77%)
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/interceptor/GlodonTokenInterceptor.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/BlockReq.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/CreateUserReq.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/Option.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/SendAttachMsgReq.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/SendMsgReq.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/UnblockReq.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/UpdateTokenReq.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/UpdateUinfoReq.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/SendMsgResp.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/YxCommonR.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/YxDataR.java
create mode 100644 ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/YxInfoR.java
rename {ruoyi-cai/src/main/java/com/ruoyi/cai => ruoyi-yunxin/src/main/java/com/ruoyi/yunxin}/util/RestTemplateUtil.java (97%)
diff --git a/pom.xml b/pom.xml
index db35adbb..7074a4b3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -310,7 +310,11 @@
ruoyi-sms
${ruoyi-vue-plus.version}
-
+
+ com.ruoyi
+ ruoyi-yunxin
+ ${ruoyi-vue-plus.version}
+
@@ -331,6 +335,7 @@
ruoyi-oss
ruoyi-sms
ruoyi-cai
+ ruoyi-yunxin
pom
diff --git a/ruoyi-cai/pom.xml b/ruoyi-cai/pom.xml
index f9bc96ed..de83338b 100644
--- a/ruoyi-cai/pom.xml
+++ b/ruoyi-cai/pom.xml
@@ -26,14 +26,13 @@
com.ruoyi
ruoyi-system
-
- com.alibaba
- fastjson
- 2.0.32
-
org.springframework.boot
spring-boot-starter-websocket
+
+ com.ruoyi
+ ruoyi-yunxin
+
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/auth/CaiLoginManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/auth/CaiLoginManager.java
index e14b4cf2..c3d8d6f7 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/auth/CaiLoginManager.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/auth/CaiLoginManager.java
@@ -3,6 +3,8 @@ package com.ruoyi.cai.auth;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.lang.UUID;
+import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.ruoyi.cai.domain.*;
@@ -242,6 +244,7 @@ public class CaiLoginManager {
add.setGender(user.getGender());
add.setCity(user.getCity());
add.setInviteId(user.getInviteId());
+ add.setImToken(IdUtil.simpleUUID());
userService.save(add);
String clientIP = ServletUtils.getClientIP();
UserInfo userInfo = new UserInfo();
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Agora.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Agora.java
index 636f77f0..0fb5c58d 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Agora.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Agora.java
@@ -2,7 +2,7 @@ package com.ruoyi.cai.trd;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
-import com.ruoyi.cai.util.RestTemplateUtil;
+import com.ruoyi.yunxin.util.RestTemplateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Yunxin.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Yunxin.java
deleted file mode 100644
index 5976bd39..00000000
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Yunxin.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.ruoyi.cai.trd;
-
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.lang.UUID;
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
-import com.ruoyi.cai.util.RestTemplateUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.stereotype.Component;
-
-import java.util.HashMap;
-import java.util.Map;
-
-@Component
-public class Yunxin {
-
- @Autowired
- private YunxinProperties yunxinProperties;
-
- private final static String SEND_URL = "https://api.netease.im/nimserver/msg/sendMsg.action";
- private final static String SEND_ATTR_URL = "https://api.netease.im/nimserver/msg/sendAttachMsg.action";
-
- public void sendTo(Long toUid,Object data,Long fromUid){
- Map option = new HashMap<>();
- option.put("push",true); // 该消息是否需要APNS推送或安卓系统通知栏推送
- option.put("roam",false); // 该消息是否需要漫游(需要app开通漫游消息功能)
- option.put("history",false); // 该消息是否存云端历史
- option.put("sendersync",false); // 该消息是否需要发送方多端同步
- option.put("route",false); // 该消息是否需要抄送第三方 (需要app开通消息抄送功能)
-
- Map bodyData = new HashMap<>();
- bodyData.put("from", fromUid == null ? yunxinProperties.getDefaultFromUid() :fromUid);
- bodyData.put("ope", 0);
- bodyData.put("to", toUid);
- bodyData.put("type", 100);
- bodyData.put("body", JSON.toJSONString(data));
- bodyData.put("option", JSON.toJSONString(option));
- String nonce = UUID.fastUUID().toString();
- String curTime = DateUtil.currentSeconds() + "";
- HttpHeaders headers = new HttpHeaders();
- headers.add("AppKey",yunxinProperties.getAppKey());
- headers.add("Nonce", nonce);
- headers.add("CurTime", curTime);
- headers.add("CheckSum", yunxinProperties.getAppSecret()+nonce+curTime);
- HttpEntity httpEntity = new HttpEntity<>(bodyData, headers);
- RestTemplateUtil.restTemplate.postForObject(SEND_URL,httpEntity, JSONObject.class);
- }
-
- public void sendAttachMsg(Long toUid,Object data,Long fromUid){
- Map option = new HashMap<>();
- option.put("push",true); // 该消息是否需要APNS推送或安卓系统通知栏推送
- option.put("roam",false); // 该消息是否需要漫游(需要app开通漫游消息功能)
- option.put("history",false); // 该消息是否存云端历史
- option.put("sendersync",false); // 该消息是否需要发送方多端同步
- option.put("route",false); // 该消息是否需要抄送第三方 (需要app开通消息抄送功能)
-
- Map bodyData = new HashMap<>();
- bodyData.put("from", fromUid == null ? yunxinProperties.getDefaultFromUid() :fromUid);
- bodyData.put("ope", 0);
- bodyData.put("to", toUid);
- bodyData.put("type", 100);
- bodyData.put("body", JSON.toJSONString(data));
- bodyData.put("option", JSON.toJSONString(option));
- String nonce = UUID.fastUUID().toString();
- String curTime = DateUtil.currentSeconds() + "";
- HttpHeaders headers = new HttpHeaders();
- headers.add("AppKey",yunxinProperties.getAppKey());
- headers.add("Nonce", nonce);
- headers.add("CurTime", curTime);
- headers.add("CheckSum", yunxinProperties.getAppSecret()+nonce+curTime);
- HttpEntity httpEntity = new HttpEntity<>(bodyData, headers);
- RestTemplateUtil.restTemplate.postForObject(SEND_ATTR_URL,httpEntity, JSONObject.class);
- }
-}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CancelMessageHandler.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CancelMessageHandler.java
index 7975dad4..31b7d28c 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CancelMessageHandler.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CancelMessageHandler.java
@@ -6,7 +6,7 @@ import com.ruoyi.cai.domain.UserCall;
import com.ruoyi.cai.service.UserCallService;
import com.ruoyi.cai.trd.ImDataRes;
import com.ruoyi.cai.trd.ImMsgGen;
-import com.ruoyi.cai.trd.Yunxin;
+import com.ruoyi.yunxin.Yunxin;
import com.ruoyi.cai.ws.bean.FdCtxData;
import com.ruoyi.cai.ws.bean.Room;
import com.ruoyi.cai.ws.constant.HangUpEnums;
@@ -46,7 +46,7 @@ public class CancelMessageHandler extends AbstractMessageHandle implements IMess
Long receiverId = room.getReceiverUserData().getId();
Long callerId = room.getCallUserData().getId();
ImDataRes imDataRes = ImMsgGen.callNotice(1, callerId, receiverId, 0);
- yunxin.sendTo(receiverId,imDataRes,callerId);
+ yunxin.sendTo(receiverId,callerId,imDataRes);
// 更新房间状态
userCallService.update(Wrappers.lambdaUpdate(UserCall.class)
.eq(UserCall::getId,roomId)
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/RefuseMessageHandler.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/RefuseMessageHandler.java
index 4a6ac4d7..61af316d 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/RefuseMessageHandler.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/RefuseMessageHandler.java
@@ -6,7 +6,7 @@ import com.ruoyi.cai.domain.UserCall;
import com.ruoyi.cai.service.UserCallService;
import com.ruoyi.cai.trd.ImDataRes;
import com.ruoyi.cai.trd.ImMsgGen;
-import com.ruoyi.cai.trd.Yunxin;
+import com.ruoyi.yunxin.Yunxin;
import com.ruoyi.cai.ws.bean.FdCtxData;
import com.ruoyi.cai.ws.bean.Room;
import com.ruoyi.cai.ws.cache.RoomDataCache;
@@ -49,7 +49,7 @@ public class RefuseMessageHandler extends AbstractMessageHandle implements IMess
Long receiverId = room.getReceiverUserData().getId();
Long callerId = room.getCallUserData().getId();
ImDataRes imDataRes = ImMsgGen.callNotice(1, callerId, receiverId, 0);
- yunxin.sendTo(receiverId,imDataRes,callerId);
+ yunxin.sendTo(receiverId,callerId,imDataRes);
// 更新房间状态
userCallService.update(Wrappers.lambdaUpdate(UserCall.class)
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/service/SettleService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/service/SettleService.java
index 2cede9fb..9a8589d5 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/service/SettleService.java
+++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/service/SettleService.java
@@ -5,7 +5,7 @@ import com.ruoyi.cai.domain.Account;
import com.ruoyi.cai.service.AccountService;
import com.ruoyi.cai.trd.ImDataRes;
import com.ruoyi.cai.trd.ImMsgGen;
-import com.ruoyi.cai.trd.Yunxin;
+import com.ruoyi.yunxin.Yunxin;
import com.ruoyi.cai.ws.bean.Room;
import com.ruoyi.cai.ws.bean.RoomData;
import com.ruoyi.cai.ws.bean.UserData;
@@ -67,7 +67,7 @@ public class SettleService {
Long callUserId = room.getCallUserData().getId();
if(callTime > 0){
ImDataRes imDataRes = ImMsgGen.callNotice(4, receiverUserId, callUserId, callTime);
- yunxin.sendTo(room.getCallUserData().getId(),imDataRes,room.getReceiverUserData().getId());
+ yunxin.sendTo(room.getCallUserData().getId(),room.getReceiverUserData().getId(),imDataRes);
}
// 收入通知
if(room != null){ // TODO修改数据
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 253cc5cc..6c28ec4b 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -170,7 +170,11 @@
org.springframework.boot
spring-boot-starter-amqp
-
+
+ com.alibaba
+ fastjson
+ 2.0.32
+
diff --git a/ruoyi-yunxin/pom.xml b/ruoyi-yunxin/pom.xml
new file mode 100644
index 00000000..847c4a0f
--- /dev/null
+++ b/ruoyi-yunxin/pom.xml
@@ -0,0 +1,32 @@
+
+
+
+ ruoyi-vue-plus
+ com.ruoyi
+ 4.8.2
+
+ 4.0.0
+
+ ruoyi-yunxin
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+ com.ruoyi
+ ruoyi-framework
+
+
+ com.dtflys.forest
+ forest-spring-boot-starter
+ 1.5.33
+
+
+
+
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java
new file mode 100644
index 00000000..4618d4f6
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/Yunxin.java
@@ -0,0 +1,32 @@
+package com.ruoyi.yunxin;
+
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.yunxin.client.ImMessageClient;
+import com.ruoyi.yunxin.config.YunxinProperties;
+import com.ruoyi.yunxin.req.Option;
+import com.ruoyi.yunxin.req.SendMsgReq;
+import com.ruoyi.yunxin.resp.SendMsgResp;
+import com.ruoyi.yunxin.resp.YxDataR;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component
+public class Yunxin {
+
+ @Autowired
+ private YunxinProperties yunxinProperties;
+ @Resource
+ private ImMessageClient messageClient;
+
+ public YxDataR sendTo(Long toUid,Long fromUid,Object data){
+ SendMsgReq req = new SendMsgReq();
+ req.setFrom(fromUid == null ? yunxinProperties.getDefaultFromUid() : fromUid+"");
+ req.setTo(toUid+"");
+ req.setBody(JSON.toJSONString(data));
+ req.setOption(JSON.toJSONString(new Option()));
+ return messageClient.sendMsg(req);
+ }
+
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImMessageClient.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImMessageClient.java
new file mode 100644
index 00000000..803ce9f5
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImMessageClient.java
@@ -0,0 +1,18 @@
+package com.ruoyi.yunxin.client;
+
+import com.dtflys.forest.annotation.BaseRequest;
+import com.dtflys.forest.annotation.Post;
+import com.ruoyi.yunxin.interceptor.GlodonTokenInterceptor;
+import com.ruoyi.yunxin.req.SendMsgReq;
+import com.ruoyi.yunxin.resp.SendMsgResp;
+import com.ruoyi.yunxin.resp.YxDataR;
+
+@BaseRequest(baseURL = "${baseUrl}", interceptor = GlodonTokenInterceptor.class)
+public interface ImMessageClient {
+
+ @Post(url = "/nimserver/msg/sendMsg.action")
+ YxDataR sendMsg(SendMsgReq req);
+
+// @Post(url = "/nimserver/msg/sendAttachMsg.action")
+// YxR sendAttachMsg(SendMsgReq req);
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImUserClient.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImUserClient.java
new file mode 100644
index 00000000..ef38d3a7
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImUserClient.java
@@ -0,0 +1,29 @@
+package com.ruoyi.yunxin.client;
+
+import com.dtflys.forest.annotation.BaseRequest;
+import com.dtflys.forest.annotation.Body;
+import com.dtflys.forest.annotation.Post;
+import com.ruoyi.yunxin.interceptor.GlodonTokenInterceptor;
+import com.ruoyi.yunxin.req.BlockReq;
+import com.ruoyi.yunxin.req.CreateUserReq;
+import com.ruoyi.yunxin.req.UnblockReq;
+import com.ruoyi.yunxin.req.UpdateTokenReq;
+import com.ruoyi.yunxin.resp.YxCommonR;
+
+@BaseRequest(baseURL = "${baseUrl}", interceptor = GlodonTokenInterceptor.class)
+public interface ImUserClient {
+
+
+ @Post(url = "/nimserver/user/create.action")
+ YxCommonR createUser(@Body CreateUserReq req);
+
+ @Post(url = "/nimserver/user/update.action")
+ YxCommonR updateToken(@Body UpdateTokenReq req);
+
+ @Post(url = "/nimserver/user/block.action")
+ YxCommonR block(@Body BlockReq req);
+
+ @Post(url = "/nimserver/user/unblock.action")
+ YxCommonR unblock(@Body UnblockReq req);
+
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImUserRefClient.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImUserRefClient.java
new file mode 100644
index 00000000..f435546a
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/client/ImUserRefClient.java
@@ -0,0 +1,19 @@
+package com.ruoyi.yunxin.client;
+
+import com.dtflys.forest.annotation.BaseRequest;
+import com.dtflys.forest.annotation.Body;
+import com.dtflys.forest.annotation.Post;
+import com.ruoyi.yunxin.interceptor.GlodonTokenInterceptor;
+import com.ruoyi.yunxin.req.CreateUserReq;
+import com.ruoyi.yunxin.req.UpdateUinfoReq;
+import com.ruoyi.yunxin.resp.YxCommonR;
+import com.ruoyi.yunxin.resp.YxInfoR;
+
+@BaseRequest(baseURL = "${baseUrl}", interceptor = GlodonTokenInterceptor.class)
+public interface ImUserRefClient {
+
+
+ @Post(url = "/nimserver/user/updateUinfo.action")
+ YxCommonR updateUinfo(@Body UpdateUinfoReq query);
+
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/config/ForestConfig.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/config/ForestConfig.java
new file mode 100644
index 00000000..e4b85ef1
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/config/ForestConfig.java
@@ -0,0 +1,22 @@
+package com.ruoyi.yunxin.config;
+
+import com.dtflys.forest.converter.json.ForestJacksonConverter;
+import com.dtflys.forest.converter.json.ForestJsonConverter;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+public class ForestConfig {
+
+ @Bean
+ public ForestJsonConverter forestJacksonConverter() {
+ ForestJacksonConverter converter = new ForestJacksonConverter();
+ ObjectMapper mapper = converter.getMapper();
+ mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+// converter.setDateFormat("yyyy-MM-dd HH:mm:ss");
+ return converter;
+ }
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/config/ForestInit.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/config/ForestInit.java
new file mode 100644
index 00000000..307f1613
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/config/ForestInit.java
@@ -0,0 +1,22 @@
+package com.ruoyi.yunxin.config;
+
+import com.dtflys.forest.Forest;
+import com.dtflys.forest.config.ForestConfiguration;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+
+@Component
+public class ForestInit {
+
+ @Autowired
+ private YunxinProperties yunxinProperties;
+
+ @PostConstruct
+ public void init(){
+ ForestConfiguration configuration = Forest.config();
+ configuration.setVariableValue("baseUrl", (method) -> yunxinProperties.getBaseUrl());
+ }
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/YunxinProperties.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/config/YunxinProperties.java
similarity index 77%
rename from ruoyi-cai/src/main/java/com/ruoyi/cai/trd/YunxinProperties.java
rename to ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/config/YunxinProperties.java
index adc600eb..3c3e4ca2 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/YunxinProperties.java
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/config/YunxinProperties.java
@@ -1,4 +1,4 @@
-package com.ruoyi.cai.trd;
+package com.ruoyi.yunxin.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -8,6 +8,7 @@ import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "yunxin")
public class YunxinProperties {
+ private String baseUrl = "https://api.netease.im/nimserver";
private String appKey;
private String appSecret;
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/interceptor/GlodonTokenInterceptor.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/interceptor/GlodonTokenInterceptor.java
new file mode 100644
index 00000000..788d7b56
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/interceptor/GlodonTokenInterceptor.java
@@ -0,0 +1,56 @@
+package com.ruoyi.yunxin.interceptor;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.UUID;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.dtflys.forest.exceptions.ForestRuntimeException;
+import com.dtflys.forest.http.ForestRequest;
+import com.dtflys.forest.http.ForestResponse;
+import com.dtflys.forest.interceptor.Interceptor;
+import com.ruoyi.yunxin.config.YunxinProperties;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class GlodonTokenInterceptor implements Interceptor {
+
+ @Autowired
+ private YunxinProperties yunxinProperties;
+
+ @Override
+ public boolean beforeExecute(ForestRequest request) {
+ String nonce = UUID.fastUUID().toString();
+ String curTime = DateUtil.currentSeconds() + "";
+ request.addHeader("AppKey",yunxinProperties.getAppKey());
+ request.addHeader("Nonce", nonce);
+ request.addHeader("CurTime", curTime);
+ request.addHeader("CheckSum", yunxinProperties.getAppSecret()+nonce+curTime);
+ return true;
+ }
+
+ @Override
+ public void onSuccess(Object data, ForestRequest request, ForestResponse response) {
+ log.info("onSuccess URI:{},QueryValues:{},耗时:{}ms,Param:{},RespStatus:{},Response:{}",
+ request.getURI(),
+ JSON.toJSONString(request.getQueryValues()),
+ response.getTimeAsMillisecond(),
+ JSONObject.toJSONString(request.getArguments()),
+ response.getStatusCode(),
+ response.getContent());
+ }
+
+ @Override
+ public void onError(ForestRuntimeException ex, ForestRequest request, ForestResponse response) {
+ log.info("onError URI:{},QueryValues:{},耗时:{}ms,Param:{},RespStatus:{},Response:{}",
+ request.getURI(),
+ JSON.toJSONString(request.getQueryValues()),
+ response.getTimeAsMillisecond(),
+ JSONObject.toJSONString(request.getArguments()),
+ response.getStatusCode(),
+ response.getContent());
+ }
+
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/BlockReq.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/BlockReq.java
new file mode 100644
index 00000000..ad38ffe8
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/BlockReq.java
@@ -0,0 +1,9 @@
+package com.ruoyi.yunxin.req;
+
+import lombok.Data;
+
+@Data
+public class BlockReq {
+ private String accid;
+ private boolean needkick = true;
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/CreateUserReq.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/CreateUserReq.java
new file mode 100644
index 00000000..2a8f7d85
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/CreateUserReq.java
@@ -0,0 +1,11 @@
+package com.ruoyi.yunxin.req;
+
+import lombok.Data;
+
+@Data
+public class CreateUserReq {
+ private String accid;
+ private String token;
+ private String name;
+
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/Option.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/Option.java
new file mode 100644
index 00000000..961185b1
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/Option.java
@@ -0,0 +1,27 @@
+package com.ruoyi.yunxin.req;
+
+import lombok.Data;
+
+@Data
+public class Option {
+ /**
+ * 该消息是否需要APNS推送或安卓系统通知栏推送
+ */
+ private boolean push = true;
+ /**
+ * 该消息是否需要漫游(需要app开通漫游消息功能)
+ */
+ private boolean roam = false;
+ /**
+ * 该消息是否存云端历史
+ */
+ private boolean history = false;
+ /**
+ * 该消息是否需要发送方多端同步
+ */
+ private boolean sendersync = false;
+ /**
+ * 该消息是否需要抄送第三方 (需要app开通消息抄送功能)
+ */
+ private boolean route = false;
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/SendAttachMsgReq.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/SendAttachMsgReq.java
new file mode 100644
index 00000000..886cca8e
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/SendAttachMsgReq.java
@@ -0,0 +1,8 @@
+package com.ruoyi.yunxin.req;
+
+import lombok.Data;
+
+@Data
+public class SendAttachMsgReq {
+
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/SendMsgReq.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/SendMsgReq.java
new file mode 100644
index 00000000..95596adf
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/SendMsgReq.java
@@ -0,0 +1,13 @@
+package com.ruoyi.yunxin.req;
+
+import lombok.Data;
+
+@Data
+public class SendMsgReq {
+ private String from;
+ private int ope = 0;
+ private String to;
+ private int type = 100;
+ private String body;
+ private String option;
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/UnblockReq.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/UnblockReq.java
new file mode 100644
index 00000000..87798ba9
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/UnblockReq.java
@@ -0,0 +1,8 @@
+package com.ruoyi.yunxin.req;
+
+import lombok.Data;
+
+@Data
+public class UnblockReq {
+ private String accid;
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/UpdateTokenReq.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/UpdateTokenReq.java
new file mode 100644
index 00000000..6fbf5495
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/UpdateTokenReq.java
@@ -0,0 +1,9 @@
+package com.ruoyi.yunxin.req;
+
+import lombok.Data;
+
+@Data
+public class UpdateTokenReq {
+ private String accid;
+ private String token;
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/UpdateUinfoReq.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/UpdateUinfoReq.java
new file mode 100644
index 00000000..65c4ad25
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/req/UpdateUinfoReq.java
@@ -0,0 +1,13 @@
+package com.ruoyi.yunxin.req;
+
+import lombok.Data;
+
+@Data
+public class UpdateUinfoReq {
+ private String accid;
+ private String name;
+ private String icon;
+ private String birth;
+ private String mobile;
+ private String gender;
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/SendMsgResp.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/SendMsgResp.java
new file mode 100644
index 00000000..f1605173
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/SendMsgResp.java
@@ -0,0 +1,10 @@
+package com.ruoyi.yunxin.resp;
+
+import lombok.Data;
+
+@Data
+public class SendMsgResp {
+ private Long msgid;
+ private Long timetag;
+ private Boolean antispam;
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/YxCommonR.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/YxCommonR.java
new file mode 100644
index 00000000..cca0b48c
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/YxCommonR.java
@@ -0,0 +1,13 @@
+package com.ruoyi.yunxin.resp;
+
+import lombok.Data;
+
+@Data
+public class YxCommonR {
+ private Integer code;
+ private String desc;
+
+ public boolean isSuccess(){
+ return code != null && code == 200;
+ }
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/YxDataR.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/YxDataR.java
new file mode 100644
index 00000000..d7ee24d4
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/YxDataR.java
@@ -0,0 +1,15 @@
+package com.ruoyi.yunxin.resp;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class YxDataR implements Serializable {
+ private Integer code;
+ private T data;
+
+ public boolean isSuccess(){
+ return code != null && code == 200;
+ }
+}
diff --git a/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/YxInfoR.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/YxInfoR.java
new file mode 100644
index 00000000..7a6c2fac
--- /dev/null
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/resp/YxInfoR.java
@@ -0,0 +1,13 @@
+package com.ruoyi.yunxin.resp;
+
+import lombok.Data;
+
+@Data
+public class YxInfoR {
+ private Integer code;
+ private T info;
+
+ public boolean isSuccess(){
+ return code != null && code == 200;
+ }
+}
diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/util/RestTemplateUtil.java b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/util/RestTemplateUtil.java
similarity index 97%
rename from ruoyi-cai/src/main/java/com/ruoyi/cai/util/RestTemplateUtil.java
rename to ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/util/RestTemplateUtil.java
index 920aabe2..a17b91c5 100644
--- a/ruoyi-cai/src/main/java/com/ruoyi/cai/util/RestTemplateUtil.java
+++ b/ruoyi-yunxin/src/main/java/com/ruoyi/yunxin/util/RestTemplateUtil.java
@@ -1,4 +1,4 @@
-package com.ruoyi.cai.util;
+package com.ruoyi.yunxin.util;
import org.springframework.http.client.BufferingClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;