From 7344d66640a3bc74f327183fed6f766ba07ec215 Mon Sep 17 00:00:00 2001 From: 77 <77@77.com> Date: Wed, 8 May 2024 01:37:30 +0800 Subject: [PATCH] init --- .../controller/app/SettingAppController.java | 8 ++ .../xq/controller/app/YxNotifyController.java | 103 ++++++++++++++++++ .../com/ruoyi/xq/domain/AgreementSetting.java | 4 +- .../java/com/ruoyi/xq/manager/ImManager.java | 1 - 4 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/YxNotifyController.java diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/SettingAppController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/SettingAppController.java index 1214f44..946e62c 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/SettingAppController.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/SettingAppController.java @@ -55,6 +55,14 @@ public class SettingAppController { return R.ok(new AgreementDTO(privacyAgreement)); } + + @GetMapping("/agreement/vip") + @Operation(summary = "获取VIP入驻协议") + public R vipAgreement() { + String privacyAgreement = agreementSettingService.getAgreementSetting().getPrivacyAgreement(); + return R.ok(new AgreementDTO(privacyAgreement)); + } + @Resource private AreaCodeMapper areaCodeMapper; diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/YxNotifyController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/YxNotifyController.java new file mode 100644 index 0000000..b4ef687 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/YxNotifyController.java @@ -0,0 +1,103 @@ +package com.ruoyi.xq.controller.app; + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.xq.domain.UserChatRecord; +import com.ruoyi.xq.executor.ExecutorConstant; +import com.ruoyi.xq.service.UserChatRecordService; +import com.ruoyi.yunxin.manager.YunxinManager; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StreamUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +@RestController +@RequestMapping("/api/yx/im") +@Tag(name = "Yunxin相关的接口") +@Slf4j +public class YxNotifyController { + + @Autowired + private YunxinManager yunxinManager; + @Autowired + private UserChatRecordService userChatRecordService; + + @PostMapping("/notify") + @Operation(hidden = true) + @SaIgnore + public R notifyYx(HttpServletRequest request) throws IOException { + String appKey = request.getHeader("AppKey"); + String curTime = request.getHeader("CurTime"); + String md5 = request.getHeader("MD5"); + String checkSum = request.getHeader("CheckSum"); + String requestBody = readBody(request); + boolean check = yunxinManager.checkNotify(requestBody, curTime, checkSum,md5); + if(!check){ + log.info("检验失败!"); + return R.fail("401",null); + } + JSONObject body = JSON.parseObject(requestBody); + if(body == null){ + return R.fail("401",null); + } + String eventType = body.getString("eventType"); + if("2".equals(eventType) || "3".equals(eventType)){ // 登陆登出事件 + log.info("request yx notify login body = {}", requestBody); + String accid = body.getString("accid"); + String timestamp = body.getString("timestamp"); +// onlineService.updateOnlineByYunxin(eventType,Long.valueOf(accid),Long.valueOf(timestamp)); + }else if("1".equals(eventType)){ // 会话记录 + String convType = body.getString("convType"); + String msgType = body.getString("msgType"); + if("PICTURE".equals(msgType) && "PERSON".equals(convType)){ + String ext = body.getString("ext"); + ExecutorConstant.SYNC_EXECUTOR.execute(() -> { + try { + log.info("request yx notify chat body = {}", requestBody); + JSONObject extJson = JSON.parseObject(ext); + String recordId = extJson.getString("recordId"); + if(StringUtils.isEmpty(recordId)){ + log.warn("同步图片忽略,recordId为空"); + return; + } + UserChatRecord userChatRecord = userChatRecordService.getById(recordId); + if(userChatRecord == null){ + log.warn("同步图片忽略,recordId未找到记录"); + return; + } + String attach = body.getString("attach"); + JSONObject attachJson = JSON.parseObject(attach); + String url = attachJson.getString("url"); + userChatRecordService.update(Wrappers.lambdaUpdate(UserChatRecord.class) + .eq(UserChatRecord::getId, userChatRecord.getId()) + .set(UserChatRecord::getContent, url)); + }catch (Exception e){ + log.warn("同步图片失败!",e); + } + }); + } + } + return R.ok(); + } + + private String readBody(HttpServletRequest request) throws IOException { + if (request.getContentLength() > 0) { + byte[] bytes = StreamUtils.copyToByteArray(request.getInputStream()); + return new String(bytes, StandardCharsets.UTF_8); + } else + return null; + + } +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/AgreementSetting.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/AgreementSetting.java index 2daf211..5aded48 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/AgreementSetting.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/AgreementSetting.java @@ -28,12 +28,12 @@ public class AgreementSetting implements Serializable { */ private String userAgreement; /** - * 主播入驻协议 */ - private String anchorJoinAgreement; + private String vipAgreement; /** * 隐私协议 */ private String privacyAgreement; + } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/ImManager.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/ImManager.java index 6af9c43..e878c46 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/ImManager.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/manager/ImManager.java @@ -6,7 +6,6 @@ import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.xq.domain.User; import com.ruoyi.xq.domain.UserChatRecord; -import com.ruoyi.xq.domain.UserVip; import com.ruoyi.xq.dto.app.im.ImMessageDTO; import com.ruoyi.xq.dto.app.im.ImResp; import com.ruoyi.xq.enums.ErrorEnum;