package com.gunshi.project.ss.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.db.dto.DateTimeRangeSo; import com.gunshi.project.ss.entity.so.MessageCenterPageSo; import com.gunshi.project.ss.mapper.AttResBaseMapper; import com.gunshi.project.ss.mapper.MessageCenterMapper; import com.gunshi.project.ss.model.AttResBase; import com.gunshi.project.ss.model.MessageCenter; import com.gunshi.project.ss.model.OsmoticWarnR; import com.gunshi.project.ss.common.model.StRsvrR; import com.gunshi.project.ss.util.DateUtil; import com.ruoyi.common.utils.SecurityUtils; 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() { return this.lambdaUpdate() .set(MessageCenter::getStatus, 1) .eq(MessageCenter::getReceiveUserId, SecurityUtils.getUserId()) .update(); } public void rzWarnMes(List rlist) { AttResBase attResBase = resBaseMapper.selectById("42118130001"); 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("若依"); center.setTitle("水位告警"); String content = "系统检测到黑石咀水库水位"; //校核水位 BigDecimal calFloodLev = attResBase.getCalFloodLev(); if(rz.compareTo(calFloodLev) > 0){ center.setType(1); content = content + "超校核"+ rz.subtract(calFloodLev) +"m"; center.setContent(content); addRzMessage(center,1); return; } //设计水位 BigDecimal desFloodLev = attResBase.getDesFloodLev(); if(rz.compareTo(desFloodLev) > 0){ center.setType(2); content = content + "超设计"+ rz.subtract(desFloodLev) +"m"; center.setContent(content); addRzMessage(center,2); return; } //汛限水位 BigDecimal flLowLimLev = attResBase.getFlLowLimLev(); if(rz.compareTo(flLowLimLev) > 0){ center.setType(3); content = content + "超汛限"+ rz.subtract(flLowLimLev) +"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); } /** * 生成渗压,渗流,位移告警 * @param warnR * @param desc */ public void osmoticWarnMes(OsmoticWarnR warnR,String desc) { MessageCenter center = new MessageCenter(); String stationCode = warnR.getStationCode(); String title = null; String content = "系统检测到"; switch (warnR.getType()){ case 1 : title = "渗压告警"; content = content + "渗压测点" + stationCode + desc +",请注意核实。"; break; case 2 : title = "渗流告警"; content = content + "渗流测点" + stationCode + desc +",请注意核实。"; break; case 3 : title = "位移告警"; content = content + "位移测点" + stationCode + desc +",请注意核实。"; break; } center.setPublishUserId(1L); center.setPublishUserName("若依"); center.setTitle(title); center.setContent(content); rzMesHandle(center); } public List listMes(DateTimeRangeSo dateTimeRangeSo) { Long userId; try { userId = SecurityUtils.getUserId(); } catch (Exception e) { return null; } LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(MessageCenter::getReceiveUserId, userId); if (ObjectUtils.isNotNull(dateTimeRangeSo) && ObjectUtils.isNotNull(dateTimeRangeSo.getStart())) { queryWrapper.gt(MessageCenter::getPublishTime, dateTimeRangeSo.getStart()); } if (ObjectUtils.isNotNull(dateTimeRangeSo) && ObjectUtils.isNotNull(dateTimeRangeSo.getEnd())) { queryWrapper.lt(MessageCenter::getPublishTime, dateTimeRangeSo.getEnd()); } queryWrapper.eq(MessageCenter::getStatus,0); queryWrapper.orderByDesc(MessageCenter::getPublishTime); return this.list(queryWrapper); } }