feat(emergency): push/send 接入IM消息推送,SendIm 新增 businessId 字段

- SendIm 新增 businessId 字段(String),用于区分业务来源,不影响已有调用
- FirstAidPushServiceImpl.send() 步骤5从日志占位改为实际发送IM群消息
- businessId 固定为 "article",前端可据此识别宣教推送消息
- 工单无 sessionId 时跳过IM发送并 log.warn 告警

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-07 09:48:37 +08:00
co-authored by Claude
parent 945c0b46d7
commit f10221e92c
2 changed files with 34 additions and 7 deletions
@@ -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<FirstAidResource> queryResourceList(String orderId, PushFilterDTO filter, Page<FirstAidResource> page) {
LambdaQueryWrapper<FirstAidResource> 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