package com.tiesheng.message.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.tiesheng.message.pojos.UserChannel; import com.tiesheng.util.pojos.ApiResp; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Objects; /** * @author hao */ @Service public class TsMessageService { @Autowired List messageSenderList; /** * 发送所有消息 * * @param userIds * @param body */ public void all(List userIds, JSONObject body) { messageSenderList.stream().filter(TsMessageSender::support) .forEach(sender -> { for (String user : userIds) { sender.send(user, body); } }); } /** * 发送消息 * * @param channels * @param body * @param channels 消息通道,如果为all时,表示发送全部通道 */ public void multiple(List channels, JSONObject body) { if (ArrayUtil.isEmpty(channels)) { return; } messageSenderList.stream().filter(TsMessageSender::support) .forEach(sender -> channels.stream().filter(it -> Objects.equals(it.getChannel(), sender.getChannel())) .forEach(it -> sender.send(it.getUser(), body))); } /** * 发送消息 * * @param userChannel * @param body */ public ApiResp send(UserChannel userChannel, JSONObject body) { if (StrUtil.isEmpty(userChannel.getUser()) || StrUtil.isEmpty(userChannel.getChannel())) { return ApiResp.resp130("消息对象或消息通道不存在"); } TsMessageSender messageSender = CollUtil.findOne(messageSenderList, sender -> Objects.equals(sender.getChannel(), userChannel.getChannel()) && sender.support()); if (messageSender != null) { return messageSender.send(userChannel.getUser(), body); } return ApiResp.resp130("消息未成功发送"); } }