This commit is contained in:
ran.shang
2025-06-11 09:42:13 +08:00
commit 7e38b8d971
1935 changed files with 132836 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
package com.newyetai.sdk.workwechat.constant;
/**
* @author sr on 2020-07-06
*/
public interface WorkWechatConstants {
String AT_ALL = "@all";
}

View File

@@ -0,0 +1,45 @@
package com.newyetai.sdk.workwechat.model;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.newyetai.sdk.robot.constant.WorkWechatMsgTypeEnum;
import com.newyetai.sdk.robot.model.IWorkWechatMsg;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
* 企业微信机器人消息-图文
*
* @author sr on 2020-07-06
*/
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class WwrArticleMsg extends IWorkWechatMsg implements Serializable {
/** **/
private static final long serialVersionUID = -1870915544362911162L;
/** 标题,不超过128个字节,超过会自动截断 **/
private String title;
/** 描述,不超过512个字节,超过会自动截断 **/
private String description;
/** 点击后跳转的链接 **/
private String url;
/** 图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图 1068*455,小图150*150 **/
@JsonProperty("picurl")
private String picUrl;
@Override
public String getMsgType() {
return WorkWechatMsgTypeEnum.NEWS.getType();
}
}

View File

@@ -0,0 +1,40 @@
package com.newyetai.sdk.workwechat.model;
import java.io.Serializable;
import com.newyetai.sdk.robot.constant.WorkWechatMsgTypeEnum;
import com.newyetai.sdk.robot.model.IWorkWechatMsg;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
* 企业微信机器人消息-图片
*
* @author sr on 2020-07-06
*/
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class WwrImageMsg extends IWorkWechatMsg implements Serializable {
/** **/
private static final long serialVersionUID = 388617076942476152L;
/** 图片内容的base64编码 **/
private String base64;
/** 图片内容(base64编码前)的md5值 **/
private String md5;
@Override
public String getMsgType() {
return WorkWechatMsgTypeEnum.IMAGE.getType();
}
}

View File

@@ -0,0 +1,37 @@
package com.newyetai.sdk.workwechat.model;
import java.io.Serializable;
import com.newyetai.sdk.robot.constant.WorkWechatMsgTypeEnum;
import com.newyetai.sdk.robot.model.IWorkWechatMsg;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
* 企业微信机器人消息-markdown
*
* @author sr on 2020-07-06
*/
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class WwrMarkdownMsg extends IWorkWechatMsg implements Serializable {
/** **/
private static final long serialVersionUID = 3127170367241501732L;
/** markdown内容,最长不超过4096个字节,必须是utf8编码 **/
private String content;
@Override
public String getMsgType() {
return WorkWechatMsgTypeEnum.MARKDOWN.getType();
}
}

View File

@@ -0,0 +1,45 @@
package com.newyetai.sdk.workwechat.model;
import java.io.Serializable;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.newyetai.sdk.robot.constant.WorkWechatMsgTypeEnum;
import com.newyetai.sdk.robot.model.IWorkWechatMsg;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
* 企业微信机器人消息-文本
*
* @author sr on 2020-07-06
*/
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class WwrTextMsg extends IWorkWechatMsg implements Serializable{
/** **/
private static final long serialVersionUID = 6281117623858493719L;
/** 文本内容,最长不超过2048个字节,必须是utf8编码 **/
private String content;
@JsonProperty("mentioned_list")
private List<String> mentionedList;
@JsonProperty("mentioned_mobile_list")
private List<String> mentionedMobileList;
@Override
public String getMsgType() {
return WorkWechatMsgTypeEnum.TEXT.getType();
}
}

View File

@@ -0,0 +1,19 @@
package com.newyetai.sdk.workwechat.service;
import com.newyetai.sdk.robot.model.IWorkWechatMsg;
/**
* @author sr on 2020-07-06
*/
public interface WorkWechatRobotService {
/**
* 发送消息
*
* @param robotKey 机器人key
* @param msg
* @author sr on 2020-07-07
*/
void send(String robotKey, IWorkWechatMsg msg);
}

View File

@@ -0,0 +1,59 @@
package com.newyetai.sdk.workwechat.service.impl;
import java.util.Arrays;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.dingtalk.api.response.OapiRobotSendResponse;
import com.newyetai.sdk.robot.model.IDingTalkMsg;
import com.newyetai.sdk.robot.model.IMsg;
import com.newyetai.sdk.robot.model.IWorkWechatMsg;
import com.newyetai.sdk.robot.model.TextMsg;
import com.newyetai.sdk.workwechat.service.WorkWechatRobotService;
import com.newyetai.sdk.workwechat.util.WorkWechatUtils;
import com.taobao.api.ApiException;
import lombok.extern.slf4j.Slf4j;
/**
* @author sr on 2020-07-06
*/
@Service
@Slf4j
public class WorkWechatRobotServiceImpl implements WorkWechatRobotService {
private static final String URL_PREFIX = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=";
@Autowired
private RestTemplate restTemplate;
public void send(String robotKey, IWorkWechatMsg msg) {
try {
restTemplate.postForEntity(URL_PREFIX + robotKey, WorkWechatUtils.parsePostData(msg),
Object.class);
} catch (Exception e) {
log.info("WorkWechatRobot send error:{}", e.getMessage());
}
}
public void sendDingText(String robotKey, TextMsg textMsg) {
// 76651782e4a03b420aff022e1a5e9010b3606648c40d2ab698d3d3e4ee691538
OapiRobotSendRequest request = new OapiRobotSendRequest();
request.setMsgtype("text");
OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
text.setContent("前方高能😯😯:\n从前有座山...");
request.setText(text);
OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
at.setAtMobiles(Arrays.asList("13611806907"));
// isAtAll类型如果不为Boolean,请升级至最新SDK
// at.setIsAtAll(true);
request.setAt(at);
}
}

View File

@@ -0,0 +1,40 @@
package com.newyetai.sdk.workwechat.util;
import java.util.Map;
import com.google.common.collect.Maps;
import com.newyetai.sdk.robot.constant.WorkWechatMsgTypeEnum;
import com.newyetai.sdk.robot.model.IWorkWechatMsg;
import com.newyetai.sdk.workwechat.model.WwrTextMsg;
/**
* @author sr on 2020-07-06
*/
public class WorkWechatUtils {
private static final String MSG_TYPE = "msgtype";
/**
* 转换消息发送对象数据
*
* @param msg
* @return
* @author sr on 2020-07-06
*/
public static Map<String, Object> parsePostData(IWorkWechatMsg msg) {
Map<String, Object> data = Maps.newHashMap();
String msgType = msg.getMsgType();
data.put(MSG_TYPE, msgType);
if (WorkWechatMsgTypeEnum.TEXT.getType().equals(msgType)) {
// 文本消息截取500长度
WwrTextMsg textMsg = (WwrTextMsg) msg;
String context = textMsg.getContent();
if (context.length() > 500) {
textMsg.setContent(textMsg.getContent().substring(0, 500));
}
}
data.put(msgType, msg);
return data;
}
}