From f10221e92c4937d0de6d03d7fe867fdc3761d914 Mon Sep 17 00:00:00 2001 From: pengjie <2413927716@qq.com> Date: Tue, 7 Jul 2026 09:47:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(emergency):=20push/send=20=E6=8E=A5?= =?UTF-8?q?=E5=85=A5IM=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81=EF=BC=8CSendIm?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=20businessId=20=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SendIm 新增 businessId 字段(String),用于区分业务来源,不影响已有调用 - FirstAidPushServiceImpl.send() 步骤5从日志占位改为实际发送IM群消息 - businessId 固定为 "article",前端可据此识别宣教推送消息 - 工单无 sessionId 时跳过IM发送并 log.warn 告警 Co-Authored-By: Claude --- .../emergency/bean/response/SendIm.java | 4 ++ .../service/impl/FirstAidPushServiceImpl.java | 37 +++++++++++++++---- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/bean/response/SendIm.java b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/bean/response/SendIm.java index 58975ea..8ebfa08 100644 --- a/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/bean/response/SendIm.java +++ b/health-emergency/health-emergency-api/src/main/java/com/renkang/emergency/bean/response/SendIm.java @@ -20,4 +20,8 @@ public class SendIm { * 类型 1: 应急单 */ private Integer type; + /** + * 业务标识,用于区分不同业务来源(例:"article"=宣教推送) + */ + private String businessId; } 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 6e9e0c6..520a3e3 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 @@ -2,9 +2,11 @@ package com.renkang.emergency.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.renkang.emergency.bean.response.SendIm; import com.renkang.emergency.constant.FirstAidConstants; import com.renkang.emergency.dto.PushBatchSendDTO; import com.renkang.emergency.dto.PushFilterDTO; @@ -17,6 +19,8 @@ import com.renkang.emergency.mapper.FirstAidResourceMapper; import com.renkang.emergency.mapper.FirstAidResourceCategoryMapper; import com.renkang.emergency.mapper.OrderMapper; import com.renkang.emergency.service.IFirstAidPushService; +import com.renkang.im.api.IMHelloApi; +import com.renkang.im.entity.ImGroupMsgTextReqDO; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.vo.LoginUser; @@ -55,6 +59,9 @@ public class FirstAidPushServiceImpl implements IFirstAidPushService { @Autowired private FirstAidPushServiceImpl self; + @Autowired + private IMHelloApi imHelloApi; + @Override public IPage queryResourceList(String orderId, PushFilterDTO filter, Page page) { LambdaQueryWrapper wrapper = buildFilterWrapper(filter); @@ -108,10 +115,11 @@ public class FirstAidPushServiceImpl implements IFirstAidPushService { throw new RuntimeException("该资源已推送,请勿重复操作"); } - // 3. 获取推送目标 + // 3. 获取工单信息 String targetUserId = null; + Order order = null; if (StrUtil.isNotBlank(orderId)) { - Order order = orderMapper.selectById(orderId); + order = orderMapper.selectById(orderId); if (order != null) { targetUserId = order.getSalvageUserId(); } @@ -131,11 +139,26 @@ public class FirstAidPushServiceImpl implements IFirstAidPushService { record.setPushTime(new Date()); pushRecordMapper.insert(record); - // 5. 推送通知(预留,当前记录日志) - log.info("急救宣教推送: resourceId={}, title={}, orderId={}, targetUserId={}, pushById={}, pushByName={}", - resourceId, resource.getTitle(), orderId, targetUserId, - loginUser != null ? loginUser.getId() : null, - loginUser != null ? loginUser.getRealname() : null); + // 5. 构建推送IM消息并发送 + if (order != null && StrUtil.isNotBlank(order.getSessionId())) { + SendIm sendIm = new SendIm(); + sendIm.setType(1); + sendIm.setTitle(resource.getTitle()); + sendIm.setContent(StrUtil.isNotBlank(resource.getSummary()) ? resource.getSummary() : resource.getTitle()); + sendIm.setBusinessId("article"); + + ImGroupMsgTextReqDO im = new ImGroupMsgTextReqDO(); + im.setGroupId(order.getSessionId()); + im.setFromUserId("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()); + } else { + log.warn("急救宣教推送IM消息未发送(工单无群聊sessionId): resourceId={}, orderId={}", + resourceId, orderId); + } } @Override