From 1febb2c74fdda6794292545a3ca5f08b0bd6d4f3 Mon Sep 17 00:00:00 2001 From: 3y Date: Wed, 1 Jun 2022 20:26:22 +0800 Subject: [PATCH] =?UTF-8?q?=E9=92=89=E9=92=89=E6=9C=BA=E5=99=A8=E4=BA=BA?= =?UTF-8?q?=E6=B8=A0=E9=81=93:=E6=94=AF=E6=8C=81=E7=9B=AE=E5=89=8D?= =?UTF-8?q?=E5=AE=98=E6=96=B9=E7=9A=84=E6=89=80=E6=9C=89=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/AustinConstant.java | 2 +- .../dto/model/DingDingContentModel.java | 38 ++++++++++++++++- .../austin/common/enums/SendMessageType.java | 42 ++++++++++++++----- .../domain/dingding/DingDingRobotParam.java | 6 +++ .../handler/impl/DingDingRobotHandler.java | 29 ++++++++++++- .../austin/handler/receipt/SmsReceipt.java | 6 ++- .../impl/action/AfterParamCheckAction.java | 2 +- .../controller/MessageTemplateController.java | 3 -- .../java3y/austin/web/utils/ConvertMap.java | 9 +++- 9 files changed, 115 insertions(+), 22 deletions(-) diff --git a/austin-common/src/main/java/com/java3y/austin/common/constant/AustinConstant.java b/austin-common/src/main/java/com/java3y/austin/common/constant/AustinConstant.java index 2794c3a..cb23a55 100644 --- a/austin-common/src/main/java/com/java3y/austin/common/constant/AustinConstant.java +++ b/austin-common/src/main/java/com/java3y/austin/common/constant/AustinConstant.java @@ -38,7 +38,7 @@ public class AustinConstant { * 消息发送给全部人的标识 * (企业微信 应用消息) * (钉钉自定义机器人) - * + * (钉钉工作消息) */ public static final String SEND_ALL = "@all"; diff --git a/austin-common/src/main/java/com/java3y/austin/common/dto/model/DingDingContentModel.java b/austin-common/src/main/java/com/java3y/austin/common/dto/model/DingDingContentModel.java index 18ac2f4..af93d7c 100644 --- a/austin-common/src/main/java/com/java3y/austin/common/dto/model/DingDingContentModel.java +++ b/austin-common/src/main/java/com/java3y/austin/common/dto/model/DingDingContentModel.java @@ -25,14 +25,50 @@ public class DingDingContentModel extends ContentModel { private String sendType; /** - * 【文本消息】需要发送的内容 + * 钉钉机器人:【文本消息】内容,【markdown消息】内容,【ActionCard消息】内容 */ private String content; + /** + * 钉钉机器人:【markdown消息】标题,【FeedCard消息】标题,【ActionCard消息】标题 + */ + private String title; + + /** + * 钉钉机器人:【ActionCard消息】按钮布局 + */ + private String btnOrientation; + + /** + * 钉钉机器人:【ActionCard消息】按钮的文案和跳转链接的json + * [{\"title\":\"别点我\",\"actionURL\":\"https://www.baidu.com/\"},{\"title\":\"没关系,还是点我把\",\"actionURL\":\"https://www.baidu.com/\\t\"}] + */ + private String btns; + + + /** + * 钉钉机器人:【链接消息】点击消息跳转的URL,【FeedCard消息】点击消息跳转的URL + */ + private String url; + + /** + * 钉钉机器人:【链接消息】图片URL,【FeedCard消息】图片URL + */ + private String picUrl; + + + /** + * 钉钉机器人:【FeedCard类型】 消息体 + * "[{\"picUrl\":\"https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png\",\"title\":\"{$title1}\",\"url\":\"https://www.dingtalk.com/\"},{\"picUrl\":\"https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png\\t\",\"title\":\"时代的火车向前开2\",\"url\":\"https://www.dingtalk.com/\"}]"} + */ + private String feedCards; + + /** * 图片、文件、语音消息 需要发送使用的素材ID字段 */ private String mediaId; // ... + } diff --git a/austin-common/src/main/java/com/java3y/austin/common/enums/SendMessageType.java b/austin-common/src/main/java/com/java3y/austin/common/enums/SendMessageType.java index 3f9ce31..6eabe2d 100644 --- a/austin-common/src/main/java/com/java3y/austin/common/enums/SendMessageType.java +++ b/austin-common/src/main/java/com/java3y/austin/common/enums/SendMessageType.java @@ -14,19 +14,39 @@ import lombok.ToString; @AllArgsConstructor public enum SendMessageType { - TEXT(10, "文本"), - VOICE(20, "语音"), - VIDEO(30, "视频"), - NEWS(40, "图文"), - TEXT_CARD(50, "文本卡片"), - FILE(60, "文件"), - MINI_PROGRAM_NOTICE(70, "小程序通知"), - MARKDOWN(80, "markdown"), - TEMPLATE_CARD(90, "模板卡片"), - IMAGE(100, "图片"), + TEXT("10", "文本", "text"), + VOICE("20", "语音", null), + VIDEO("30", "视频", null), + NEWS("40", "图文", "feedCard"), + TEXT_CARD("50", "文本卡片", null), + FILE("60", "文件", null), + MINI_PROGRAM_NOTICE("70", "小程序通知", null), + MARKDOWN("80", "markdown", "markdown"), + TEMPLATE_CARD("90", "模板卡片", null), + IMAGE("100", "图片", null), + LINK("110", "链接消息", "link"), + ACTION_CARD("120", "跳转卡片消息", "actionCard"), ; - private Integer code; + private String code; private String description; + private String dingDingRobotType; + + + /** + * 通过code获取钉钉的Type值 + * + * @param code + * @return + */ + public static String getDingDingRobotTypeByCode(String code) { + for (SendMessageType value : SendMessageType.values()) { + if (value.getCode().equals(code)) { + return value.getDingDingRobotType(); + } + } + return null; + } + } diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/domain/dingding/DingDingRobotParam.java b/austin-handler/src/main/java/com/java3y/austin/handler/domain/dingding/DingDingRobotParam.java index 3012916..c5f6c01 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/domain/dingding/DingDingRobotParam.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/domain/dingding/DingDingRobotParam.java @@ -90,6 +90,7 @@ public class DingDingRobotParam { @NoArgsConstructor @Data @AllArgsConstructor + @Builder public static class LinkVO { /** * text @@ -115,6 +116,7 @@ public class DingDingRobotParam { @NoArgsConstructor @Data @AllArgsConstructor + @Builder public static class MarkdownVO { /** * title @@ -132,6 +134,7 @@ public class DingDingRobotParam { @NoArgsConstructor @Data @AllArgsConstructor + @Builder public static class ActionCardVO { /** * title @@ -156,6 +159,7 @@ public class DingDingRobotParam { @NoArgsConstructor @Data @AllArgsConstructor + @Builder public static class BtnsVO { /** * title @@ -174,6 +178,7 @@ public class DingDingRobotParam { @NoArgsConstructor @Data @AllArgsConstructor + @Builder public static class FeedCardVO { /** * links @@ -186,6 +191,7 @@ public class DingDingRobotParam { @NoArgsConstructor @Data @AllArgsConstructor + @Builder public static class LinksVO { /** * title diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingRobotHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingRobotHandler.java index bc4d702..f73b50b 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingRobotHandler.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingRobotHandler.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.google.common.base.Throwables; import com.java3y.austin.common.constant.AustinConstant; import com.java3y.austin.common.constant.SendAccountConstant; @@ -11,6 +12,7 @@ import com.java3y.austin.common.domain.TaskInfo; import com.java3y.austin.common.dto.account.DingDingRobotAccount; import com.java3y.austin.common.dto.model.DingDingContentModel; import com.java3y.austin.common.enums.ChannelType; +import com.java3y.austin.common.enums.SendMessageType; import com.java3y.austin.handler.domain.dingding.DingDingRobotParam; import com.java3y.austin.handler.domain.dingding.DingDingRobotResult; import com.java3y.austin.handler.handler.BaseHandler; @@ -25,6 +27,7 @@ import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.net.URLEncoder; import java.util.ArrayList; +import java.util.List; /** * 钉钉消息自定义机器人 消息处理器 @@ -72,8 +75,30 @@ public class DingDingRobotHandler extends BaseHandler implements Handler { // 消息类型以及内容相关 DingDingContentModel contentModel = (DingDingContentModel) taskInfo.getContentModel(); - return DingDingRobotParam.builder().at(atVo).msgtype("text") - .text(DingDingRobotParam.TextVO.builder().content(contentModel.getContent()).build()).build(); + DingDingRobotParam param = DingDingRobotParam.builder().at(atVo) + .msgtype(SendMessageType.getDingDingRobotTypeByCode(contentModel.getSendType())) + .build(); + if (SendMessageType.TEXT.getCode().equals(contentModel.getSendType())) { + param.setText(DingDingRobotParam.TextVO.builder().content(contentModel.getContent()).build()); + } + if (SendMessageType.MARKDOWN.getCode().equals(contentModel.getSendType())) { + param.setMarkdown(DingDingRobotParam.MarkdownVO.builder().title(contentModel.getTitle()).text(contentModel.getContent()).build()); + } + if (SendMessageType.LINK.getCode().equals(contentModel.getSendType())) { + param.setLink(DingDingRobotParam.LinkVO.builder().title(contentModel.getTitle()).text(contentModel.getContent()).messageUrl(contentModel.getUrl()).picUrl(contentModel.getPicUrl()).build()); + } + if (SendMessageType.NEWS.getCode().equals(contentModel.getSendType())) { + List linksVOS = JSON.parseArray(contentModel.getFeedCards(), DingDingRobotParam.FeedCardVO.LinksVO.class); + DingDingRobotParam.FeedCardVO feedCardVO = DingDingRobotParam.FeedCardVO.builder().links(linksVOS).build(); + param.setFeedCard(feedCardVO); + } + if (SendMessageType.ACTION_CARD.getCode().equals(contentModel.getSendType())) { + List btnsVOS = JSON.parseArray(contentModel.getBtns(), DingDingRobotParam.ActionCardVO.BtnsVO.class); + DingDingRobotParam.ActionCardVO actionCardVO = DingDingRobotParam.ActionCardVO.builder().title(contentModel.getTitle()).text(contentModel.getContent()).btnOrientation(contentModel.getBtnOrientation()).btns(btnsVOS).build(); + param.setActionCard(actionCardVO); + } + + return param; } /** diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/SmsReceipt.java b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/SmsReceipt.java index 79f1e90..53cfda4 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/SmsReceipt.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/SmsReceipt.java @@ -43,8 +43,10 @@ public class SmsReceipt { private void init() { SupportThreadPoolConfig.getPendingSingleThreadPool().execute(() -> { while (true) { - tencentSmsReceipt.pull(); - yunPianSmsReceipt.pull(); + + // TODO 回执这里自行打开(免得报错) + // tencentSmsReceipt.pull(); + // yunPianSmsReceipt.pull(); try { Thread.sleep(200); } catch (InterruptedException e) { diff --git a/austin-service-api-impl/src/main/java/com/java3y/austin/service/api/impl/action/AfterParamCheckAction.java b/austin-service-api-impl/src/main/java/com/java3y/austin/service/api/impl/action/AfterParamCheckAction.java index f86ea5e..0e30b6f 100644 --- a/austin-service-api-impl/src/main/java/com/java3y/austin/service/api/impl/action/AfterParamCheckAction.java +++ b/austin-service-api-impl/src/main/java/com/java3y/austin/service/api/impl/action/AfterParamCheckAction.java @@ -30,7 +30,7 @@ import java.util.stream.Collectors; public class AfterParamCheckAction implements BusinessProcess { public static final String PHONE_REGEX_EXP = "^((13[0-9])|(14[5,7,9])|(15[0-3,5-9])|(166)|(17[0-9])|(18[0-9])|(19[1,8,9]))\\d{8}$"; - public static final String EMAIL_REGEX_EXP = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$"; + public static final String EMAIL_REGEX_EXP = "^[A-Za-z0-9-_\\u4e00-\\u9fa5]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$"; public static final HashMap CHANNEL_REGEX_EXP = new HashMap<>(); static { diff --git a/austin-web/src/main/java/com/java3y/austin/web/controller/MessageTemplateController.java b/austin-web/src/main/java/com/java3y/austin/web/controller/MessageTemplateController.java index e856127..9f919c9 100644 --- a/austin-web/src/main/java/com/java3y/austin/web/controller/MessageTemplateController.java +++ b/austin-web/src/main/java/com/java3y/austin/web/controller/MessageTemplateController.java @@ -54,7 +54,6 @@ public class MessageTemplateController { @Value("${austin.business.upload.crowd.path}") private String dataPath; - /** * 如果Id存在,则修改 * 如果Id不存在,则保存 @@ -62,9 +61,7 @@ public class MessageTemplateController { @PostMapping("/save") @ApiOperation("/保存数据") public BasicResultVO saveOrUpdate(@RequestBody MessageTemplate messageTemplate) { - MessageTemplate info = messageTemplateService.saveOrUpdate(messageTemplate); - return BasicResultVO.success(info); } diff --git a/austin-web/src/main/java/com/java3y/austin/web/utils/ConvertMap.java b/austin-web/src/main/java/com/java3y/austin/web/utils/ConvertMap.java index 239bd24..15fb499 100644 --- a/austin-web/src/main/java/com/java3y/austin/web/utils/ConvertMap.java +++ b/austin-web/src/main/java/com/java3y/austin/web/utils/ConvertMap.java @@ -39,6 +39,7 @@ public class ConvertMap { /** * 将单个对象转换成Map(无嵌套) * + * 主要兼容amis的回显(前端不用amis可忽略) * @param obj * @param fieldName 需要 reduce 的属性名 * @return @@ -47,6 +48,8 @@ public class ConvertMap { Map result = MapUtil.newHashMap(32); Field[] fields = ReflectUtil.getFields(obj.getClass()); for (Field field : fields) { + + // msgContent需要打散 if (fieldName.contains(field.getName())) { JSONObject jsonObject; Object value = ReflectUtil.getFieldValue(obj, field); @@ -56,7 +59,11 @@ public class ConvertMap { jsonObject = JSONObject.parseObject(JSON.toJSONString(value)); } for (String key : jsonObject.keySet()) { - result.put(key, jsonObject.getString(key)); + if (key.equals("feedCards") || key.equals("btns")) { + result.put(key, JSON.parseArray(jsonObject.getString(key))); + } else { + result.put(key, jsonObject.getString(key)); + } } } result.put(field.getName(), ReflectUtil.getFieldValue(obj, field));