This commit is contained in:
清晨
2025-04-08 16:37:17 +08:00
commit 0c9d340a05
1659 changed files with 170293 additions and 0 deletions

View File

@@ -0,0 +1,155 @@
package com.ruoyi.message.controller;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.controller.resp.GoeasyResult;
import com.ruoyi.enums.user.UserEnums;
import com.ruoyi.frequency.customer.entity.Customer;
import com.ruoyi.frequency.customer.mapper.CustomerMapper;
import com.ruoyi.frequency.store.entity.Store;
import com.ruoyi.frequency.store.mapper.StoreMapper;
import com.ruoyi.message.frequency.goeasymessage.entity.GoeasyMessage;
import com.ruoyi.message.frequency.goeasymessage.service.GoeasyMessageService;
import com.ruoyi.vo.RyController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import sun.misc.BASE64Encoder;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.stream.Collectors;
/**
* goeasy消息
*
* @author liwenlong
*/
@CrossOrigin
@RestController
@RequestMapping("/api/goeasy")
@Slf4j
@Api(tags = "goeasy消息")
public class ApiGoeasyMessageController extends RyController {
@Autowired
private GoeasyMessageService goeasyMessageService;
@RequestMapping("/goeasyMessage")
@ApiOperation(value = "数据同步Webhook", notes = "数据同步Webhook")
public GoeasyResult goeasyMessage(HttpServletRequest request) {
log.info("进入goeasy历史消息通知");
String content = request.getParameter("content");
System.out.println(content);
if (content == null || "".equals(content)) {
return GoeasyResult.success();
}
//判断请求签名是否合法
String goeasy_signature = request.getHeader("x-goeasy-signature");
log.info("goeasy_signature:" + goeasy_signature);
String signature = goeasyWebhookSignature(secretKey, content);
log.info("signature:" + signature);
if (!signature.equals(goeasy_signature)) {
return GoeasyResult.success();
}
JSONArray jsonArray = JSONObject.parseArray(content);
System.out.println(jsonArray);
List<GoeasyMessage> goeasyMessages = jsonArray.stream().filter(s -> {
JSONObject messageJson = JSONObject.parseObject(s.toString());
return !messageJson.containsKey("channel");
}).map(s -> {
JSONObject messageJson = JSONObject.parseObject(s.toString());
GoeasyMessage goeasyMessage = new GoeasyMessage();
//每条消息唯一标识,可用于去重操作
goeasyMessage.setMessageId((String) messageJson.get("messageId"));
//消息类型
goeasyMessage.setType((String) messageJson.get("type"));
//发送方userId
goeasyMessage.setSenderId((String) messageJson.get("senderId"));
//解析发送用户
String[] sender = goeasyMessage.getSenderId().split("_");
if (sender.length == 2) {
goeasyMessage.setSenderUserType(UserEnums.valueOf(sender[0]).getCode());
goeasyMessage.setSenderUserId(Long.valueOf(sender[1]));
}
//接收方userId
goeasyMessage.setReceiverId((String) messageJson.get("receiverId"));
//解析接收用户
String[] receiver = goeasyMessage.getReceiverId().split("_");
if (receiver.length == 2) {
goeasyMessage.setReceiverUserType(UserEnums.valueOf(receiver[0]).getCode());
goeasyMessage.setReceiverUserId(Long.valueOf(receiver[1]));
}
//消息体
goeasyMessage.setPayload((String) messageJson.get("payload"));
//发送的时间,可用于排序
goeasyMessage.setGoeasyTime(DateUtil.date((Long) messageJson.get("timestamp")));
System.out.println(goeasyMessage);
if (goeasyMessage.getSenderUserType().equals(UserEnums.customer.getCode())) {
Customer customer = customerMapper.selectById(goeasyMessage.getSenderUserId());
if (customer != null) {
return goeasyMessage;
}
} else if (goeasyMessage.getSenderUserType().equals(UserEnums.store.getCode())) {
Store store = storeMapper.selectById(goeasyMessage.getSenderUserId());
if (store != null) {
return goeasyMessage;
}
}
return null;
}).collect(Collectors.toList());
goeasyMessageService.goeasyMessage(goeasyMessages);
log.info("goeasy历史消息通知结束");
return GoeasyResult.success();
}
@Autowired
private CustomerMapper customerMapper;
@Autowired
private StoreMapper storeMapper;
@Value("${push.goeasy.secretKey}")
private String secretKey;
public String goeasyWebhookSignature(String secretKey, String content) {
try {
SecretKeySpec signinKey = new SecretKeySpec(secretKey.getBytes(), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(signinKey);
byte[] rawHmac = mac.doFinal(content.getBytes("UTF8"));
return new BASE64Encoder().encode(rawHmac);
} catch (Exception e) {
log.error("HMACSHA1 failed for key:{} and content:{}", secretKey, content, e);
return null;
}
}
public static void main(String[] args) {
}
}

View File

@@ -0,0 +1,46 @@
package com.ruoyi.message.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.annotations.UserLoginToken;
import com.ruoyi.common.page.PageResult;
import com.ruoyi.controller.req.MessageReadOrDeleteReq;
import com.ruoyi.message.controller.resp.InteractionMessagePageResp;
import com.ruoyi.message.frequency.interactionmessagerecord.service.InteractionMessageRecordService;
import com.ruoyi.response.ResponseData;
import com.ruoyi.vo.PageBasic;
import com.ruoyi.vo.RyController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* 互动消息
* @author liwenlong
*
*/
@CrossOrigin
@RestController
@RequestMapping("/api/message")
@Api(tags = "互动消息")
public class ApiInteractionMessageController extends RyController {
@Autowired
private InteractionMessageRecordService interactionMessageRecordService;
@UserLoginToken
@PostMapping("/interactionMessagePage")
@ApiOperation(value = "互动消息列表", notes = "互动消息列表")
public ResponseData<PageResult<Page<InteractionMessagePageResp>>> interactionMessagePage(@RequestBody PageBasic req) {
return interactionMessageRecordService.interactionMessagePage(req,getUserVo());
}
@UserLoginToken
@PostMapping("/interactionMessageReadOrDelete")
@ApiOperation(value = "互动消息列表_已读删除消息", notes = "互动消息列表_已读删除消息")
public ResponseData interactionMessageReadOrDelete(@RequestBody MessageReadOrDeleteReq req) {
return interactionMessageRecordService.interactionMessageReadOrDelete(req, getUserVo());
}
}

View File

@@ -0,0 +1,60 @@
package com.ruoyi.message.controller.resp;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.vo.UserInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author a
* @date 2023/10/17 9:44
*/
@Data
public class InteractionMessagePageResp {
@ApiModelProperty("租户号")
private Long id;
@ApiModelProperty("删除标志;1 正常 2 删除 3 禁用")
private Integer delFlag;
@ApiModelProperty("用户id;设计师和表现师")
private Long userId;
@ApiModelProperty("用户类型")
private Integer userType;
@ApiModelProperty("消息类型;1点赞消息 2评论消息 3关注消息")
private Integer messageType;
@ApiModelProperty("标语")
@Excel(name = "标语")
private String title;
@ApiModelProperty("内容")
private String content;
@ApiModelProperty("是否已读;1未读 2 已读")
private String isRead;
@ApiModelProperty("是否清空;1 不清空 2 清空")
private String isShow;
@ApiModelProperty("跳转主体id")
private Long skipId;
@ApiModelProperty("对应的主体id")
private Long objectId;
@ApiModelProperty("创建时间")
private Date createTime;
@ApiModelProperty("来源类型 1帖子 2作品 3关注 4新闻")
private Integer type;
@ApiModelProperty("用户信息")
private UserInfo userInfo;
}