From 7db4368a3025ddab71d1327e6b84473f951aa1e1 Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Mon, 23 Oct 2023 15:58:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=A5=E5=85=A5=E6=B2=AA?= =?UTF-8?q?=E4=B8=8A=E9=98=BF=E5=A7=A8=E4=BA=8B=E4=BB=B6=E4=B8=AD=E5=BF=83?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/enums/FeiShuNoticeMsgEnum.java | 22 +++-- .../event/CreateSingleEventRequest.java | 39 ++++++++ .../store/request/event/SendMsgRequest.java | 45 +++++++++ .../response/event/CreateEventResponse.java | 67 ++++++++++++++ .../store/http/EventCenterHttpRequest.java | 91 +++++++++++++++++++ 5 files changed, 256 insertions(+), 8 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/event/CreateSingleEventRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/event/SendMsgRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/response/event/CreateEventResponse.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/http/EventCenterHttpRequest.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/FeiShuNoticeMsgEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/FeiShuNoticeMsgEnum.java index 2d4839273..bbcb200a3 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/FeiShuNoticeMsgEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/FeiShuNoticeMsgEnum.java @@ -9,23 +9,25 @@ import com.alibaba.fastjson.JSONObject; */ public enum FeiShuNoticeMsgEnum { - common_notice("工作台通知", "{0}", "img_v2_45d7a901-1eab-498b-a760-b38d287f0c1g"), - ALLOCATION_INVESTMENT_MANAGER("分配招商经理", "有新的线索于 {0} 分配给您,线索信息 {1} 手机号 {2},请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g"), - TRANS_INVESTMENT_MANAGER("转让招商经理", "有新的线索于 {0} 转让给您,线索信息 {1} 手机号 {2},请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g"), - BATCH_TRANS_INVESTMENT_MANAGER("收到新线索", "有{0}条新线索于 {1} 转让给您,请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g"), - INTENTION_APPLY("加盟意向申请", "您有一个【加盟意向申请】待审核,申请人 {0} 手机号 {1} 于 {2} 提交加盟意向申请,请及时处理", "img_v2_c909097d-67d1-4c11-a911-a2584b67ca6g"), - FOLLOW_TASK("线索跟进任务", "{0}", "img_v2_1960b7ef-8c4e-4c3d-8b67-3d918a85578g"), - INTERVIEW_APPOINTMENT("面试预约申请", "您有一个【面试预约申请】待处理,预约人 {0} 手机号 {1} ,预约面试时间 {2} ","img_v2_107bb06b-2a7a-43e1-a6ae-e5d2f2dae17g"), + common_notice("工作台通知", "{0}", "img_v2_45d7a901-1eab-498b-a760-b38d287f0c1g", "1567d83b966f2d312fd7fcd2e72dbce9"), + ALLOCATION_INVESTMENT_MANAGER("分配招商经理", "有新的线索于 {0} 分配给您,线索信息 {1} 手机号 {2},请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g", "1567d83b966f2d312fd7fcd2e72dbce9"), + TRANS_INVESTMENT_MANAGER("转让招商经理", "有新的线索于 {0} 转让给您,线索信息 {1} 手机号 {2},请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g", "1567d83b966f2d312fd7fcd2e72dbce9"), + BATCH_TRANS_INVESTMENT_MANAGER("收到新线索", "有{0}条新线索于 {1} 转让给您,请及时跟进", "img_v2_33296002-829e-490e-bd11-0d9ae763a67g", "1567d83b966f2d312fd7fcd2e72dbce9"), + INTENTION_APPLY("加盟意向申请", "您有一个【加盟意向申请】待审核,申请人 {0} 手机号 {1} 于 {2} 提交加盟意向申请,请及时处理", "img_v2_c909097d-67d1-4c11-a911-a2584b67ca6g", "1567d83b966f2d312fd7fcd2e72dbce9"), + FOLLOW_TASK("线索跟进任务", "{0}", "img_v2_1960b7ef-8c4e-4c3d-8b67-3d918a85578g", "1567d83b966f2d312fd7fcd2e72dbce9"), + INTERVIEW_APPOINTMENT("面试预约申请", "您有一个【面试预约申请】待处理,预约人 {0} 手机号 {1} ,预约面试时间 {2} ","img_v2_107bb06b-2a7a-43e1-a6ae-e5d2f2dae17g", "1567d83b966f2d312fd7fcd2e72dbce9"), ; private String title; private String content; private String imageMediaId; + private String templateCode; - FeiShuNoticeMsgEnum(String title, String content, String imageMediaId) { + FeiShuNoticeMsgEnum(String title, String content, String imageMediaId, String templateCode) { this.title = title; this.content = content; this.imageMediaId = imageMediaId; + this.templateCode = templateCode; } public String getTitle() { @@ -40,6 +42,10 @@ public enum FeiShuNoticeMsgEnum { return imageMediaId; } + public String getTemplateCode() { + return templateCode; + } + public JSONObject getMessageObject() { JSONObject object = new JSONObject(); object.put("name", this.title); diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/event/CreateSingleEventRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/event/CreateSingleEventRequest.java new file mode 100644 index 000000000..2f3eb1876 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/event/CreateSingleEventRequest.java @@ -0,0 +1,39 @@ +package com.cool.store.request.event; + +import lombok.Builder; +import lombok.Data; + +/** + * @author Fun Li 2023/10/23 10:41 + * @version 1.0 + */ +@Data +@Builder +public class CreateSingleEventRequest { + + /** + * 事件 id + */ + private String thirdPartyId; + + /** + * 系统来源 + */ + private String bizSource; + + /** + * 事件类型 + */ + private String eventType; + + /** + * 事件请求内容 + */ + private String content; + + /** + * 事件主题,可选 + */ + private String subject; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/event/SendMsgRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/event/SendMsgRequest.java new file mode 100644 index 000000000..d2519a80a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/event/SendMsgRequest.java @@ -0,0 +1,45 @@ +package com.cool.store.request.event; + +import lombok.Builder; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * @author Fun Li 2023/10/23 11:27 + * @version 1.0 + * 携带消息参数 + */ +@Data +@Builder +public class SendMsgRequest { + + /** + * 消息参数,短信为 手机号:参数1,参数2 (按顺序),飞书消息卡片为 参数名:参数 + */ + private Map cardParams; + + /** + * FEISHU 或者 SHORT_MESSAGE + */ + private String platform; + + /** + * 接收者 id,飞书为 user_id,不是 open_id,短信不填 + */ + private List receiverIds; + + /** + * 加盟商全生命周期只发送这种类型的消息 + */ + private final String msgType = "INTERACTIVE_CARD"; + + private String templateId; + + /** + * 加盟商全生命周期只给个人发送消息 + */ + private final String receiverType = "INDIVIDUAL"; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/event/CreateEventResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/event/CreateEventResponse.java new file mode 100644 index 000000000..cc0119d85 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/event/CreateEventResponse.java @@ -0,0 +1,67 @@ +package com.cool.store.response.event; + +import lombok.Data; + +import java.util.List; + +/** + * @author Fun Li 2023/10/23 10:29 + * @version 1.0 + * 使用沪上阿姨事件中心创建事件的响应体 + */ +@Data +public class CreateEventResponse { + + /** + * 请求 ID + */ + private String requestId; + + private String resourceOwnerAccountId; + + /** + * 失败次数 + */ + private Integer failedEntryCount; + + /** + * 事件请求列表 + */ + private List entryList; + + /** + * 响应码,200 为成功 + */ + private Integer code; + + /** + * 响应信息 + */ + private String message; + + @Data + private static class EventEntry { + + /** + * 事件 id + */ + private String eventId; + + /** + * 交易 id + */ + private String traceId; + + /** + * 失败 code + */ + private Integer errorCode; + + /** + * 失败信息 + */ + private String errorMessage; + + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/http/EventCenterHttpRequest.java b/coolstore-partner-service/src/main/java/com/cool/store/http/EventCenterHttpRequest.java new file mode 100644 index 000000000..c2cec6bc2 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/EventCenterHttpRequest.java @@ -0,0 +1,91 @@ +package com.cool.store.http; + +import cn.hutool.core.util.RandomUtil; +import com.alibaba.fastjson.JSON; +import com.cool.store.enums.FeiShuNoticeMsgEnum; +import com.cool.store.exception.ApiException; +import com.cool.store.mq.util.HttpRestTemplateService; +import com.cool.store.request.event.CreateSingleEventRequest; +import com.cool.store.request.event.SendMsgRequest; +import com.cool.store.response.event.CreateEventResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; + +/** + * @author Fun Li 2023/10/23 10:01 + * @version 1.0 + * 对接沪上阿姨事件中心 + */ +@Component +@Slf4j +public class EventCenterHttpRequest { + + @Resource + private HttpRestTemplateService httpRestTemplateService; + + @Value("${hsay.event.url}") + private String eventUrl; + + @Value("${feishu.notice.link.url}") + private String PCLinkUrl; + + @Value("${feishu.notice.link.url.mobile}") + private String mobileLinkUrl; + + /** + * 本系统来源 + */ + private final static String source = "hsay_partner"; + + /** + * 创建单个事件 + * @param request {@link com.cool.store.request.event.CreateSingleEventRequest} + * @return + */ + private CreateEventResponse createSingleEvent(CreateSingleEventRequest request) throws ApiException { + CreateEventResponse response = httpRestTemplateService.postForObject(eventUrl + "/event/create", request, CreateEventResponse.class); + log.info("创建沪上阿姨事件中心事件,request: {}, response: {}", JSON.toJSONString(request), JSON.toJSONString(response)); + if (response.getCode() != 200) { + throw new ApiException("创建事件失败!"); + } + return response; + } + + public void sendFeiShuCardMessage(FeiShuNoticeMsgEnum msgEnum, List receiverIds) throws ApiException { + //1. 组织消息参数,SendMsgRequest 的 cardParams + HashMap cardParams = new HashMap<>(); + cardParams.put("title", msgEnum.getTitle()); + cardParams.put("content", msgEnum.getContent()); + cardParams.put("img_key", msgEnum.getImageMediaId()); + cardParams.put("common_url", PCLinkUrl); + cardParams.put("pc_url", PCLinkUrl); + cardParams.put("ios_url", mobileLinkUrl); + cardParams.put("android_url", mobileLinkUrl); + + //2. 组织消息发送请求体,即 CreateSingleEventRequest 的 content 字段 + SendMsgRequest sendFeiShuMsgRequest = SendMsgRequest.builder() + .receiverIds(receiverIds) + .platform("FEISHU") + .templateId(msgEnum.getTemplateCode()) + .cardParams(cardParams) + .build(); + + //3. 组织创建事件参数 + String randomNum = RandomUtil.randomNumbers(32); + CreateSingleEventRequest createEventRequest = CreateSingleEventRequest.builder() + .thirdPartyId(randomNum) + .eventType("push_msg") + .bizSource("hsay_partner") + .content(JSON.toJSONString(sendFeiShuMsgRequest)) + .build(); + + //4. 创建事件 + createSingleEvent(createEventRequest); + } + +}