package com.flow.service.impl; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.flow.common.core.model.CursorResult; import com.flow.common.core.model.PageResult; import com.flow.common.mybatis.service.impl.BaseServiceImpl; import com.flow.common.oauth2.utils.SecurityContextUtil; import com.flow.dao.NotifyDao; import com.flow.entity.MessageEntity; import com.flow.entity.Notify; import com.flow.mapstruct.NotifyMapper; import com.flow.model.NotifyQuery; import com.flow.service.NotifyService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Service; import java.util.List; @Service public class NotifyServiceImpl extends BaseServiceImpl implements NotifyService { @Autowired private NotifyDao notifyDao; @Autowired private NotifyMapper notifyMapper; @Autowired private SimpMessagingTemplate messagingTemplate; @Override public Notify notify(Notify notify) { int insert = notifyDao.insert(notify); if (insert > 0) { MessageEntity messageEntity = new MessageEntity<>( notify.getSender(), notify.getReceiver(), notify ); messagingTemplate.convertAndSendToUser(notify.getReceiver(), "/topic/notify", messageEntity); } return notify; } @Override public PageResult getList(NotifyQuery query) { query.setReceiver(SecurityContextUtil.getUserId()); Notify notify = notifyMapper.toEntity(query); Page page = notifyDao.lambdaQueryChain() .setEntity(notify) .orderByDesc(Notify::getId) .page(new Page<>(query.getPage(), query.getLimit())); return new PageResult<>(page.getTotal(), page.getRecords()); } @Override public CursorResult cursor(NotifyQuery query) { query.setReceiver(SecurityContextUtil.getUserId()); List list = notifyDao.cursor(query); CursorResult cursorResult = new CursorResult<>(); cursorResult.setRows(list); if (CollectionUtils.isNotEmpty(list)) { cursorResult.setCursor(list.get(list.size() - 1).getId()); } return cursorResult; } @Override public void read(List ids) { notifyDao.lambdaUpdateChain() .in(Notify::getId, ids) .set(Notify::getIsRead, true) .update(); } @Override public void readAll() { String userId = SecurityContextUtil.getUserId(); notifyDao.lambdaUpdateChain() .eq(Notify::getReceiver, userId) .set(Notify::getIsRead, true) .update(); } @Override public void delete(List ids) { notifyDao.lambdaUpdateChain() .in(Notify::getId, ids) .remove(); } @Override public Long getUnreadCount() { String userId = SecurityContextUtil.getUserId(); return notifyDao.lambdaQueryChain() .select(Notify::getId) .eq(Notify::getReceiver, userId) .eq(Notify::getIsRead, false) .count(); } }