gunshi-project-ss/src/main/java/com/gunshi/project/xyt/service/MessageCenterService.java

142 lines
5.3 KiB
Java
Raw Normal View History

2024-09-19 15:01:31 +08:00
package com.gunshi.project.xyt.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
2024-09-19 17:04:36 +08:00
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
2024-09-19 15:01:31 +08:00
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;
2024-09-19 17:04:36 +08:00
import com.gunshi.project.xyt.mapper.AttResBaseMapper;
2024-09-19 15:01:31 +08:00
import com.gunshi.project.xyt.mapper.MessageCenterMapper;
2024-09-19 17:04:36 +08:00
import com.gunshi.project.xyt.model.AttResBase;
2024-09-19 15:01:31 +08:00
import com.gunshi.project.xyt.model.MessageCenter;
2024-09-19 17:04:36 +08:00
import com.gunshi.project.xyt.model.StRsvrR;
import com.gunshi.project.xyt.util.DateUtil;
2024-09-19 15:01:31 +08:00
import lombok.extern.slf4j.Slf4j;
2024-09-19 17:04:36 +08:00
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
2024-09-19 15:01:31 +08:00
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
2024-09-19 17:04:36 +08:00
import java.math.BigDecimal;
2024-09-19 15:01:31 +08:00
import java.util.Date;
import java.util.List;
2024-09-19 17:04:36 +08:00
import java.util.Optional;
import java.util.stream.Collectors;
2024-09-19 15:01:31 +08:00
/**
* :
* author: xusan
* date: 2024-09-19 10:39:29
*/
@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class MessageCenterService extends ServiceImpl<MessageCenterMapper, MessageCenter>
{
2024-09-19 17:04:36 +08:00
@Autowired
private AttResBaseMapper resBaseMapper;
2024-09-19 15:01:31 +08:00
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(Long receiveUserId) {
return this.lambdaUpdate()
.set(MessageCenter::getStatus, 1)
.eq(MessageCenter::getReceiveUserId, receiveUserId)
.update();
}
2024-09-19 17:04:36 +08:00
public void rzWarnMes(List<StRsvrR> rlist) {
AttResBase attResBase = resBaseMapper.selectById("42120250085");
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("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<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);
}
2024-09-19 15:01:31 +08:00
}