package com.zhgd.xmgl.async; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zhgd.mqtt.server.IMqttSender; import com.zhgd.xmgl.modules.basicdata.entity.Notice; import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; import com.zhgd.xmgl.modules.basicdata.mapper.NoticeMapper; import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper; import com.zhgd.xmgl.util.DateUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @program: wisdomSite * @description: 异步AI分析数据处理 * @author: Mr.Peng * @create: 2022-04-20 14:09 **/ @Slf4j @Component public class AsyncCheckingPoint { @Autowired private IMqttSender mqttPushClient; @Autowired private SystemUserMapper systemUserMapper; @Autowired private AsyncCommon asyncCommon; @Autowired private NoticeMapper noticeMapper; /** * 通过用户id的集合发送信息到相关用户下的MQ以及app * * @param title * @param msg * @param itemType * @param userIdSet * @param payload */ @Async("asyncExecutor") public synchronized void sendMqAndAppUserIdColl(String title, String msg, String itemType, Collection userIdSet, String payload) { try { //向项目管理员和子账号推送通知 List systemUserList = systemUserMapper.selectList(Wrappers.lambdaQuery(SystemUser.class).in(SystemUser::getUserId, userIdSet)); if (CollUtil.isNotEmpty(systemUserList)) { asyncCommon.sendMq(title, msg, itemType, systemUserList); this.addNoticeIfNotExist(title, msg, systemUserList); Map> snUserMap = systemUserList.stream().filter(user -> user.getClientId() != null).collect(Collectors.groupingBy(SystemUser::getSn)); for (Map.Entry> snUserListEntry : snUserMap.entrySet()) { asyncCommon.sendAppNotice(snUserListEntry.getKey(), title, msg, snUserListEntry.getValue(), payload); } } } catch (Exception e) { e.printStackTrace(); } } private void addNoticeIfNotExist(String title, String msg, List systemUserList) { for (SystemUser systemUser : systemUserList) { List notices = noticeMapper.selectList(new LambdaQueryWrapper().eq(Notice::getAccountId, systemUser.getUserId()) .ge(Notice::getSendTime, DateUtil.today()) .eq(Notice::getType, "19")); if (notices.stream().anyMatch(notice -> title.equals(notice.getTitle()) && msg.equals(notice.getMsg()))) { break; } Notice notice = new Notice(); notice.setType("19"); notice.setMsg(msg); notice.setAccountId(systemUser.getUserId()); notice.setTitle(title); notice.setSendTime(DateUtil.formatDateTime(new Date())); noticeMapper.insert(notice); } } }