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;