196 lines
7.5 KiB
Java
196 lines
7.5 KiB
Java
|
|
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<MessageCenterMapper, MessageCenter>
|
|||
|
|
{
|
|||
|
|
@Autowired
|
|||
|
|
private AttResBaseMapper resBaseMapper;
|
|||
|
|
|
|||
|
|
public void insertMessage(List<MessageCenter> messageCenters){
|
|||
|
|
for(MessageCenter messageCenter : messageCenters){
|
|||
|
|
messageCenter.setId(IdWorker.getId());
|
|||
|
|
messageCenter.setPublishTime(new Date());
|
|||
|
|
messageCenter.setStatus(0);
|
|||
|
|
}
|
|||
|
|
this.saveBatch(messageCenters);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public Page<MessageCenter> listPage(MessageCenterPageSo page) {
|
|||
|
|
LambdaQueryWrapper<MessageCenter> 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<StRsvrR> rlist) {
|
|||
|
|
AttResBase attResBase = resBaseMapper.selectById("42118130001");
|
|||
|
|
String stcd = attResBase.getStcd();
|
|||
|
|
Optional<StRsvrR> 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<MessageCenter> list = this.baseMapper.queryTodayMes(date,type);
|
|||
|
|
//如果当日不存在该类型的水位告警,则直接新增
|
|||
|
|
if(CollectionUtils.isEmpty(list)){
|
|||
|
|
rzMesHandle(center);
|
|||
|
|
}else{
|
|||
|
|
this.removeBatchByIds(list);
|
|||
|
|
rzMesHandle(center);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void rzMesHandle(MessageCenter center){
|
|||
|
|
//查找接收角色关联的人员
|
|||
|
|
List<Long> ids = this.baseMapper.queryUserIds();
|
|||
|
|
List<MessageCenter> 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<MessageCenter> listMes(DateTimeRangeSo dateTimeRangeSo) {
|
|||
|
|
Long userId;
|
|||
|
|
try {
|
|||
|
|
userId = SecurityUtils.getUserId();
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
LambdaQueryWrapper<MessageCenter> 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);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|