From 4d26c3e22a9f305d519dc20a9df78465bb977990 Mon Sep 17 00:00:00 2001 From: zer0Black <694429613@qq.com> Date: Thu, 30 Jun 2022 22:38:51 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A3=9E=E4=B9=A6=E5=8D=A1=E7=89=87=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=B0=81=E8=A3=85=EF=BC=88=E6=9C=AA=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/FeishuServiceImpl.java | 121 ++++++++++++++++++ .../jero/modules/feishu/vo/FeishuMsgVo.java | 28 ++++ 2 files changed, 149 insertions(+) create mode 100644 jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsgVo.java diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java index 7eb48ed40..c3dcda9e0 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/service/impl/FeishuServiceImpl.java @@ -1,8 +1,10 @@ package com.jero.modules.feishu.service.impl; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.feishu.vo.FeishuMsgVo; import com.jero.modules.system.util.HttpRequestUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -111,4 +113,123 @@ public class FeishuServiceImpl implements IFeishuService { } return tokenJson.get("msg").toString(); } + + /** + * 发送卡片消息 + * @param feishuMsgVo + * @return + */ + public String sendCardMsg(String[] userIds, FeishuMsgVo feishuMsgVo) throws IOException { + String token = getTenantAccessToken(); + // 设置请求头 + Map headerMap = new HashMap<>(); + headerMap.put("Authorization", "Bearer " + token); + headerMap.put("Content-Type", "application/json; charset=utf-8"); + + // 示例 + StringBuilder contentSb = new StringBuilder(); + contentSb.append("{"); + contentSb.append("\"elements\": ["); + // 补充内容 + if (StrUtil.isNotEmpty(feishuMsgVo.getContent())){ + contentSb.append("{"); + contentSb.append("\"tag\": \"div\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": " + feishuMsgVo.getContent() + ","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + }; + // 补充tasktype、project、Initiator等的外层 + contentSb.append("{"); + contentSb.append("\"fields\": ["); + if (StrUtil.isNotEmpty(feishuMsgVo.getTaskType())){ + contentSb.append("{"); + contentSb.append("\"is_short\": false,"); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"**Task Type:** " + feishuMsgVo.getTaskType() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + } + if (StrUtil.isNotEmpty(feishuMsgVo.getRegulationNo())){ + contentSb.append("{"); + contentSb.append("\"is_short\": false,"); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"**Regulation No:** " + feishuMsgVo.getRegulationNo() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + } + if (StrUtil.isNotEmpty(feishuMsgVo.getProject())){ + contentSb.append("{"); + contentSb.append("\"is_short\": false,"); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"**Project:** " + feishuMsgVo.getProject() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + } + if (StrUtil.isNotEmpty(feishuMsgVo.getInitiator())){ + contentSb.append("{"); + contentSb.append("\"is_short\": false,"); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"**Initiator:** " + feishuMsgVo.getInitiator() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + } + if (StrUtil.isNotEmpty(feishuMsgVo.getDueDate())){ + contentSb.append("{"); + contentSb.append("\"is_short\": false,"); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"**Due Date:** " + feishuMsgVo.getDueDate() + "\","); + contentSb.append("\"tag\": \"lark_md\""); + contentSb.append("}"); + contentSb.append("},"); + } + contentSb.append("]"); + contentSb.append("\"tag\": \"div\""); + contentSb.append("},"); + contentSb.append("{\"tag\": \"hr\"},"); + contentSb.append("{"); + contentSb.append("\"actions\": ["); + contentSb.append("{"); + contentSb.append("\"tag\": \"button\","); + contentSb.append("\"text\": {"); + contentSb.append("\"content\": \"view\","); + contentSb.append("\"tag\": \"plain_text\""); + contentSb.append("},"); + contentSb.append("\"type\": \"primary\","); + contentSb.append("\"url\": \" "+ feishuMsgVo.getUrl() +" \""); + contentSb.append("}"); + contentSb.append("},"); + contentSb.append("\"tag\": \"action\""); + contentSb.append("}"); + contentSb.append("],"); + contentSb.append("\"header\": {"); + contentSb.append("\"template\": \"green\","); + contentSb.append("\"title\": {"); + contentSb.append("\"content\": \" " + feishuMsgVo.getTitle() + " \","); + contentSb.append("\"tag\": \"plain_text\""); + contentSb.append("}"); + contentSb.append("}"); + contentSb.append("}"); + + // 设置请求参数 + JSONObject paramsMap = new JSONObject(); + paramsMap.put("user_ids", userIds); + paramsMap.put("msg_type", "post"); + paramsMap.put("content", contentSb.toString()); + + // 发送请求给飞书 + String response = HttpRequestUtil.getResponseOfPOST(batchSendMessageUrl, headerMap, paramsMap.toJSONString()); + // 获取返回结果 + JSONObject tokenJson = JSONObject.parseObject(response); + if(!tokenJson.get("code").toString().equals("0")) { + log.error("请求出现异常:" + tokenJson.get("msg") + " " + tokenJson); + } + return tokenJson.get("msg").toString(); + } + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsgVo.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsgVo.java new file mode 100644 index 000000000..631a32d97 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/feishu/vo/FeishuMsgVo.java @@ -0,0 +1,28 @@ +package com.jero.modules.feishu.vo; + +import lombok.Data; + +/** + * 飞书消息的VO + */ +@Data +public class FeishuMsgVo { + + private String title; //标题 + + private String content; //内容 + + private String taskType; //任务类型 + + private String regulationNo; //法规编号 + + private String project; //项目名称 + + private String initiator; //发起人 + + private String dueDate; //截止时间 + + private String url; //回调的网址 + +} +