From 4898a63b4bd0b6419edb90c246f6028067a88153 Mon Sep 17 00:00:00 2001 From: pengjie <2413927716@qq.com> Date: Tue, 7 Jul 2026 13:43:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(emergency):=20=E5=AE=A3=E6=95=99=E6=8E=A8?= =?UTF-8?q?=E9=80=81IM=E6=B6=88=E6=81=AF=E6=94=B9=E4=B8=BA=E7=8B=AC?= =?UTF-8?q?=E7=AB=8B=E6=96=B9=E6=B3=95sendGroupMsgArticle=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E5=BD=B1=E5=93=8D=E5=B7=B2=E6=9C=89=E4=B8=9A=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 TencentCloudImUtil.sendGroupMsgArticle: From_Account生效、不覆盖businessID、fromAdmin动态判断 - 新增 TXController.sendGroupMsgArticle / IMHelloApi.sendGroupMsgArticle - FirstAidPushServiceImpl 推送人改为当前登录用户,调用新方法 --- .../service/impl/FirstAidPushServiceImpl.java | 7 +-- .../java/com/renkang/im/api/IMHelloApi.java | 3 ++ .../renkang/im/controller/TXController.java | 8 +++ .../renkang/im/util/TencentCloudImUtil.java | 54 ++++++++++++++++++- 4 files changed, 68 insertions(+), 4 deletions(-) diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/FirstAidPushServiceImpl.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/FirstAidPushServiceImpl.java index 63dc607..adfd8a4 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/FirstAidPushServiceImpl.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/service/impl/FirstAidPushServiceImpl.java @@ -152,9 +152,10 @@ public class FirstAidPushServiceImpl implements IFirstAidPushService { im.setFromUserId(loginUser != null ? loginUser.getId() : "administrator"); im.setContent(JSONObject.toJSON(sendIm).toString()); - imHelloApi.sendGroupMsg(im); - log.info("急救宣教推送IM消息已发送: resourceId={}, title={}, orderId={}, sessionId={}, businessId=article", - resourceId, resource.getTitle(), orderId, order.getSessionId()); + imHelloApi.sendGroupMsgArticle(im); + log.info("急救宣教推送IM消息已发送: resourceId={}, title={}, orderId={}, sessionId={}, pushBy={}, businessId=article", + resourceId, resource.getTitle(), orderId, order.getSessionId(), + loginUser != null ? loginUser.getRealname() : "unknown"); } else { log.warn("急救宣教推送IM消息未发送(工单无群聊sessionId): resourceId={}, orderId={}", resourceId, orderId); diff --git a/health-im/health-im-api/src/main/java/com/renkang/im/api/IMHelloApi.java b/health-im/health-im-api/src/main/java/com/renkang/im/api/IMHelloApi.java index 93af2d6..176f3f1 100644 --- a/health-im/health-im-api/src/main/java/com/renkang/im/api/IMHelloApi.java +++ b/health-im/health-im-api/src/main/java/com/renkang/im/api/IMHelloApi.java @@ -48,6 +48,9 @@ public interface IMHelloApi { @PostMapping(value = "/wnapp/sendGroupMsg") IMGroupMsgResDO sendGroupMsg(@RequestBody @Validated ImGroupMsgTextReqDO imGroupMsgTextReqDO); + @PostMapping(value = "/wnapp/sendGroupMsgArticle") + IMGroupMsgResDO sendGroupMsgArticle(@RequestBody @Validated ImGroupMsgTextReqDO imGroupMsgTextReqDO); + @PostMapping(value = "/wnapp/sendGroupMsgTextNew") IMGroupMsgResDO sendGroupMsgTextNew(@RequestBody @Validated ImGroupMsgTextReqDO imGroupMsgTextReqDO); diff --git a/health-im/health-im-biz/src/main/java/com/renkang/im/controller/TXController.java b/health-im/health-im-biz/src/main/java/com/renkang/im/controller/TXController.java index 56d105b..850b776 100644 --- a/health-im/health-im-biz/src/main/java/com/renkang/im/controller/TXController.java +++ b/health-im/health-im-biz/src/main/java/com/renkang/im/controller/TXController.java @@ -247,6 +247,14 @@ public class TXController { } + @Operation(summary = "文章推送群消息(宣教推送专用)", description = "发送方由调用方指定,不覆盖businessID") + @PostMapping("/sendGroupMsgArticle") + public IMGroupMsgResDO sendGroupMsgArticle(@RequestBody @Validated ImGroupMsgTextReqDO imGroupMsgTextReqDO) { + + return tencentCloudImUtil.sendGroupMsgArticle(imGroupMsgTextReqDO); + } + + @Operation(summary = "用户发送群消息", description = "用户发送群消息") @PostMapping("/sendGroupMsgTextNew") public IMGroupMsgResDO sendGroupMsgTextNew(@RequestBody @Validated ImGroupMsgTextReqDO imGroupMsgTextReqDO) { diff --git a/health-im/health-im-biz/src/main/java/com/renkang/im/util/TencentCloudImUtil.java b/health-im/health-im-biz/src/main/java/com/renkang/im/util/TencentCloudImUtil.java index 636ddc1..aca279a 100644 --- a/health-im/health-im-biz/src/main/java/com/renkang/im/util/TencentCloudImUtil.java +++ b/health-im/health-im-biz/src/main/java/com/renkang/im/util/TencentCloudImUtil.java @@ -239,7 +239,7 @@ public class TencentCloudImUtil { param.put("GroupId", imGroupMsgTextReqVO.getGroupId()); param.put("MsgPriority", "High"); param.put("Random", this.getRandom()); - param.put("From_Account", imGroupMsgTextReqVO.getFromUserId()); +// param.put("From_Account", imGroupMsgTextReqVO.getFromUserId()); param.put("MsgRandom", this.getRandomNum(8)); param.put("MsgTimeStamp", DateUtils.dateToUnixLong(new Date())); param.put("CloudCustomData", new JSONObject().fluentPut("fromAdmin", true).toJSONString()); @@ -272,6 +272,58 @@ public class TencentCloudImUtil { } + /** + * 发送文章推送群消息(宣教推送专用) + *

+ * 与 sendGroupMsgText 的区别: + * 1. From_Account 由调用方指定,不写死为 administrator + * 2. 不覆盖 businessID,保留调用方传入的业务标识 + * 3. CloudCustomData.fromAdmin 根据实际发送人动态设置 + * + * @param req 消息请求 + * @return IMGroupMsgResDO + */ + public IMGroupMsgResDO sendGroupMsgArticle(ImGroupMsgTextReqDO req) { + IMGroupMsgResDO res = new IMGroupMsgResDO(); + String url = HTTPS_URL_PREFIX + "v4/group_open_http_svc/send_group_msg"; + + String fromUserId = req.getFromUserId(); + boolean isAdmin = "administrator".equals(fromUserId); + + JSONObject param = new JSONObject(); + param.put("GroupId", req.getGroupId()); + param.put("MsgPriority", "High"); + param.put("Random", this.getRandom()); + param.put("From_Account", fromUserId); + param.put("MsgRandom", this.getRandomNum(8)); + param.put("MsgTimeStamp", DateUtils.dateToUnixLong(new Date())); + param.put("CloudCustomData", new JSONObject().fluentPut("fromAdmin", isAdmin).toJSONString()); + + JSONObject jj = JSONObject.parseObject(req.getContent()); + try { + JSONObject item = new JSONObject(); + JSONObject msgContentData = new JSONObject(); + msgContentData.put("Data", jj.toString()); + item.put("MsgType", ImSendEnum.TIMCustomElem.getValue()); + item.put("MsgContent", msgContentData); + JSONArray msgBody = new JSONArray(); + msgBody.add(item); + param.put("MsgBody", msgBody); + String jsonStr = HttpUtil.doPost(buildRequestUrl(url), param.toString()); + if (StringUtils.isNotEmpty(jsonStr)) { + JSONObject jsonObj = JSONObject.parseObject(jsonStr); + if (jsonObj.containsKey("ErrorCode") && jsonObj.getInteger("ErrorCode") == 0) { + log.info("=========={}==========", "文章推送发送成功!"); + } + res = JsonUtil.toObject(jsonStr, IMGroupMsgResDO.class); + } + } catch (Exception e) { + e.printStackTrace(); + } + return res; + } + + /** * 默认单发发群文本消息 *