package com.gunshi.project.xyt.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gunshi.project.xyt.entity.so.MessageCenterPageSo; import com.gunshi.project.xyt.mapper.AttResBaseMapper; import com.gunshi.project.xyt.mapper.MessageCenterMapper; import com.gunshi.project.xyt.model.AttResBase; import com.gunshi.project.xyt.model.MessageCenter; import com.gunshi.project.xyt.model.StRsvrR; import com.gunshi.project.xyt.util.DateUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; /** * 描述: 消息中心 * author: xusan * date: 2024-09-19 10:39:29 */ @Service @Slf4j @Transactional(rollbackFor = Exception.class) public class MessageCenterService extends ServiceImpl { @Autowired private AttResBaseMapper resBaseMapper; public void insertMessage(List messageCenters){ for(MessageCenter messageCenter : messageCenters){ messageCenter.setId(IdWorker.getId()); messageCenter.setPublishTime(new Date()); messageCenter.setStatus(0); } this.saveBatch(messageCenters); } public Page listPage(MessageCenterPageSo page) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(MessageCenter::getReceiveUserId,page.getReceiveUserId()) .eq(MessageCenter::getStatus,page.getStatus()); if (ObjectUtils.isNotNull(page.getTitle())) { queryWrapper.like(MessageCenter::getTitle, page.getTitle()); } if (ObjectUtils.isNotNull(page.getPublishUserName())) { queryWrapper.like(MessageCenter::getPublishUserName, page.getPublishUserName()); } return this.page(page.getPageSo().toPage(),queryWrapper); } public Boolean allRead(Long receiveUserId) { return this.lambdaUpdate() .set(MessageCenter::getStatus, 1) .eq(MessageCenter::getReceiveUserId, receiveUserId) .update(); } public void rzWarnMes(List rlist) { AttResBase attResBase = resBaseMapper.selectById("42120250085"); String stcd = attResBase.getStcd(); Optional first = rlist.stream().filter(o -> o.getStcd().equals(stcd)).findFirst(); if(first.isPresent()){ BigDecimal rz = new BigDecimal(first.get().getRz()); MessageCenter center =new MessageCenter(); center.setPublishUserId(1L); center.setPublishUserName("admin"); center.setTitle("水位告警"); String content = "系统检测到小玉潭水库水位"; //校核水位 BigDecimal calFloodLev = attResBase.getCalFloodLev(); if(calFloodLev.compareTo(rz) > 0){ center.setType(1); content = content + "超校核"+ calFloodLev.subtract(rz) +"m"; center.setContent(content); addRzMessage(center,1); return; } //设计水位 BigDecimal desFloodLev = attResBase.getDesFloodLev(); if(desFloodLev.compareTo(rz) > 0){ center.setType(2); content = content + "超设计"+ desFloodLev.subtract(rz) +"m"; center.setContent(content); addRzMessage(center,2); return; } //汛限水位 BigDecimal flLowLimLev = attResBase.getFlLowLimLev(); if(flLowLimLev.compareTo(rz) > 0){ center.setType(3); content = content + "超汛限"+ flLowLimLev.subtract(rz) +"m"; center.setContent(content); addRzMessage(center,3); } } } private void addRzMessage(MessageCenter center, Integer type) { String date = DateUtil.convertDateToString(new Date()); List list = this.baseMapper.queryTodayMes(date,type); //如果当日不存在该类型的水位告警,则直接新增 if(CollectionUtils.isEmpty(list)){ rzMesHandle(center); }else{ this.removeBatchByIds(list); rzMesHandle(center); } } private void rzMesHandle(MessageCenter center){ //查找接收角色关联的人员 List ids = this.baseMapper.queryUserIds(); List mesList = ids.stream().map(o -> { MessageCenter mes = new MessageCenter(); BeanUtils.copyProperties(center, mes); mes.setReceiveUserId(o); return mes; }).collect(Collectors.toList()); this.insertMessage(mesList); } }