企业微信 机器人消息开发

master
3y 3 years ago
parent 5517212ab7
commit eddf4cedae

@ -27,6 +27,16 @@ public class EnterpriseWeChatRobotContentModel extends ContentModel {
*/
private String content;
/**
* base64md5
*/
private String md5;
/**
* base64
*/
private String base64;
/**
* Id
*/

@ -9,9 +9,8 @@ import lombok.NoArgsConstructor;
import java.util.List;
/**
*
*
* https://open.dingtalk.com/document/group/custom-robot-access
*
* https://developer.work.weixin.qq.com/document/path/91770#%E6%96%87%E6%9C%AC%E7%B1%BB%E5%9E%8B
*
* @author 3y
*/
@ -97,6 +96,7 @@ public class EnterpriseWeChatRobotParam {
@JSONField(name = "content")
private String content;
}
/**
* ImageDTO
*/

@ -0,0 +1,33 @@
package com.java3y.austin.handler.domain.wechat.robot;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
* https://developer.work.weixin.qq.com/document/path/91770#%E6%96%87%E6%9C%AC%E7%B1%BB%E5%9E%8B
*
* @author 3y
* @date 2022/12/26
*/
@NoArgsConstructor
@Data
@AllArgsConstructor
@Builder
public class EnterpriseWeChatRootResult {
@JSONField(name = "errcode")
private Integer errcode;
@JSONField(name = "errmsg")
private String errmsg;
@JSONField(name = "type")
private String type;
@JSONField(name = "media_id")
private String mediaId;
@JSONField(name = "created_at")
private String createdAt;
}

@ -1,35 +1,25 @@
package com.java3y.austin.handler.handler.impl;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.file.FileReader;
import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.crypto.digest.MD5;
import cn.hutool.http.ContentType;
import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Throwables;
import com.java3y.austin.common.constant.SendAccountConstant;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.dto.account.EnterpriseWeChatRobotAccount;
import com.java3y.austin.common.dto.model.EnterpriseWeChatRobotContentModel;
import com.java3y.austin.common.enums.ChannelType;
import com.java3y.austin.common.enums.SendMessageType;
import com.java3y.austin.handler.domain.wechat.robot.EnterpriseWeChatRobotParam;
import com.java3y.austin.handler.domain.wechat.robot.EnterpriseWeChatRootResult;
import com.java3y.austin.handler.handler.BaseHandler;
import com.java3y.austin.handler.handler.Handler;
import com.java3y.austin.support.domain.MessageTemplate;
import com.java3y.austin.support.utils.AccountUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
/**
@ -51,17 +41,17 @@ public class EnterpriseWeChatRobotHandler extends BaseHandler implements Handler
@Override
public boolean handler(TaskInfo taskInfo) {
try {
EnterpriseWeChatRobotAccount account = accountUtils.getAccountById(taskInfo.getSendAccount(), EnterpriseWeChatRobotAccount.class);
EnterpriseWeChatRobotAccount account = accountUtils.getAccountById(taskInfo.getSendAccount(), EnterpriseWeChatRobotAccount.class);
EnterpriseWeChatRobotParam enterpriseWeChatRobotParam = assembleParam(taskInfo);
String result = HttpRequest.post(account.getWebhook()).header(Header.CONTENT_TYPE.getValue(), ContentType.JSON.getValue())
.body(JSON.toJSONString(enterpriseWeChatRobotParam))
.timeout(2000)
.execute().body();
JSONObject jsonObject = JSON.parseObject(result);
if (jsonObject.getInteger("errcode") != 0) {
EnterpriseWeChatRootResult weChatRootResult = JSON.parseObject(result, EnterpriseWeChatRootResult.class);
if (weChatRootResult.getErrcode() == 0) {
return true;
}
log.error("EnterpriseWeChatRobotHandler#handler fail! result:{},params:{}", JSON.toJSONString(jsonObject), JSON.toJSONString(taskInfo));
log.error("EnterpriseWeChatRobotHandler#handler fail! result:{},params:{}", JSON.toJSONString(weChatRootResult), JSON.toJSONString(taskInfo));
} catch (Exception e) {
log.error("EnterpriseWeChatRobotHandler#handler fail!e:{},params:{}", Throwables.getStackTraceAsString(e), JSON.toJSONString(taskInfo));
}
@ -80,10 +70,7 @@ public class EnterpriseWeChatRobotHandler extends BaseHandler implements Handler
param.setMarkdown(EnterpriseWeChatRobotParam.MarkdownDTO.builder().content(contentModel.getContent()).build());
}
if (SendMessageType.IMAGE.getCode().equals(contentModel.getSendType())) {
FileReader fileReader = new FileReader(contentModel.getImagePath());
byte[] bytes = fileReader.readBytes();
param.setImage(EnterpriseWeChatRobotParam.ImageDTO.builder().base64(Base64.encode(bytes))
.md5(DigestUtil.md5Hex(bytes)).build());
param.setImage(EnterpriseWeChatRobotParam.ImageDTO.builder().base64(contentModel.getBase64()).md5(contentModel.getMd5()).build());
}
if (SendMessageType.FILE.getCode().equals(contentModel.getSendType())) {
param.setFile(EnterpriseWeChatRobotParam.FileDTO.builder().mediaId(contentModel.getMediaId()).build());

@ -1,12 +0,0 @@
package com.java3y.austin.web.constants;
/**
* amis
* @author 3y
*/
public class AmisVoConstant {
public static final String LEGEND_TITLE = "人数";
public static final String TYPE = "bar";
}

@ -13,7 +13,6 @@ import com.java3y.austin.common.enums.SmsStatus;
import com.java3y.austin.support.domain.ChannelAccount;
import com.java3y.austin.support.domain.SmsRecord;
import com.java3y.austin.support.utils.TaskInfoUtils;
import com.java3y.austin.web.constants.AmisVoConstant;
import com.java3y.austin.web.vo.amis.CommonAmisVo;
import com.java3y.austin.web.vo.amis.EchartsVo;
import com.java3y.austin.web.vo.amis.SmsTimeLineVo;
@ -37,6 +36,7 @@ import java.util.stream.Collectors;
@Slf4j
public class Convert4Amis {
/**
*
*/
@ -60,7 +60,7 @@ public class Convert4Amis {
* jsonArray
* (JSONArray)
*/
private static final List<String> PARSE_JSON_ARRAY = Arrays.asList("feedCards", "btns");
private static final List<String> PARSE_JSON_ARRAY = Arrays.asList("feedCards", "btns","articles");
/**
* (JSONObjectJSONArray)
@ -393,9 +393,9 @@ public class Convert4Amis {
return EchartsVo.builder()
.title(EchartsVo.TitleVO.builder().text(title).build())
.legend(EchartsVo.LegendVO.builder().data(Arrays.asList(AmisVoConstant.LEGEND_TITLE)).build())
.legend(EchartsVo.LegendVO.builder().data(Arrays.asList("人数")).build())
.xAxis(EchartsVo.XAxisVO.builder().data(xAxisList).build())
.series(Arrays.asList(EchartsVo.SeriesVO.builder().name(AmisVoConstant.LEGEND_TITLE).type(AmisVoConstant.TYPE).data(actualData).build()))
.series(Arrays.asList(EchartsVo.SeriesVO.builder().name("人数").type("bar").data(actualData).build()))
.yAxis(EchartsVo.YAxisVO.builder().build())
.tooltip(EchartsVo.TooltipVO.builder().build())
.build();

Loading…
Cancel
Save