gunshi-project-ss/src/main/java/com/gunshi/project/ss/service/MessageCenterService.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);
}
}