记录稍微有点复杂的业务代码

package com.longruan.ark.alarm.service;

import com.alibaba.fastjson.JSON;
import com.longruan.ark.alarm.model.MainfanalarmResult;
import com.longruan.ark.alarm.model.Mainfanalarmzb;
import com.longruan.ark.alarm.model.mainfanalarmconfig;
import com.longruan.ark.alarm.util.MainfanalarmUtil;
import com.longruan.ark.cache.CacheService;
import com.longruan.ark.core.db.SqlPlus;
import com.longruan.ark.monitor.auto.pojo.db.PointRd;
import groovy.json.JsonOutput;
import groovy.sql.GroovyRowResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
* @ClassName MainfanalarmService
* @Author LiaoYunChuan
* @Date 2019/10/28 10:00
* @Remark 主通风机预警
**/
@Service("mainfanalarmService")
public class MainfanalarmService {
@Autowired
private SqlPlus db;

@Autowired
private CacheService<String,String,List<MainfanalarmResult>> cacheService;

@PostConstruct
void init() {
String sql="select * from rb_mine_ventiator_alarmresult";
try {
List<GroovyRowResult> list = db.rows(sql);
List<MainfanalarmResult> mainfanalarmResultList=JSON.parseArray(JsonOutput.toJson(list), MainfanalarmResult.class);
if(mainfanalarmResultList.size()>0){
Map<String,List<MainfanalarmResult>> map=mainfanalarmResultList.parallelStream().collect(Collectors.groupingBy(MainfanalarmResult::getConfig_id));
cacheService.mapPutAll("mainfanalarm",map);
}else{
cacheService.del("mainfanalarm");
}
} catch (SQLException e) {
e.printStackTrace();
}
}

@Async
synchronized public void mainfanalarm(String mineId,List<PointRd> rtDataList,Timestamp monitorTime){
String configsql="select a.*,c.name,b.mine_id, b.electricity,b.cosglys,b.ddjxl,b.cdxl,b.zdqy,b.zdjy,b.zdfl from rb_mine_ventilator_alarmcondiction a right join rb_mine_ventilator_condiction b on a.ventilator_id=b.ventilator_id and a.ypjd=b.ypjd " +
" left join rb_mine_ventilator c on b.ventilator_id=c.id";
String sql="select * from rb_mine_ventilator_alarmconfig";
try {
List<GroovyRowResult> list = db.rows(configsql);
List<mainfanalarmconfig> configList = JSON.parseArray(JsonOutput.toJson(list), mainfanalarmconfig.class);

List<GroovyRowResult> zblist = db.rows(sql);
List<Mainfanalarmzb> zbList=JSON.parseArray(JsonOutput.toJson(zblist), Mainfanalarmzb.class);
List<MainfanalarmResult> mainfanalarmResultList=new ArrayList<>();
Map<String,List<Mainfanalarmzb>> map= zbList.stream().collect(Collectors.groupingBy(Mainfanalarmzb::getVenalarmcondition_id));
//实时数据按传感器id转map
Map<String, PointRd> realDataMap=rtDataList.stream().collect(Collectors.toMap(PointRd::getSensor_id, Function.identity()));
configList.forEach(d->{
PointRd dldata=realDataMap.get(d.getDlsensorid());
PointRd dydata=realDataMap.get(d.getDysensorid());
PointRd szgldata=realDataMap.get(d.getSzglsensorid());
PointRd fygldata=realDataMap.get(d.getFysensorid());
PointRd flgldata=realDataMap.get(d.getFlsensorid());
/*风压*/
Double fy=Math.abs(fygldata.getReal_value().doubleValue());
/*风量*/
Double fl = flgldata.getReal_value().doubleValue();
/*静压功率*/
Double jygl=fy*fl;
/*视在功率 √3*U*I*cosφ/1000*ηm*ηt*/
Double szgl=1.73*dydata.getReal_value()*dldata.getReal_value()*d.getCosglys()/1000*d.getDdjxl()*d.getCdxl();
/*效率 Ns/Nm 静压功率/视在功率*/
Double xl=jygl/szgl;
List<Mainfanalarmzb> mainfanalarmzbList=map.get(d.getId());
Map<String ,List<Mainfanalarmzb>> groupMap=mainfanalarmzbList.stream().collect(Collectors.groupingBy(Mainfanalarmzb::getYjlx));

/*风压预警*/
if(groupMap.get("0")!=null){
/*风压取绝对值*/
Float fydata=Math.abs(fygldata.getReal_value());
/*最大静压比较值*/
Double zdjy=d.getZdjy();
Optional<Mainfanalarmzb> first = groupMap.get("0").stream().filter(c->fydata>c.getYjxsdown()*zdjy&&fydata<c.getYjxsup()*zdjy&&d.getIs_ok()==true).findFirst();
if(first.isPresent()){
MainfanalarmResult result=new MainfanalarmResult();
result.setId(UUID.randomUUID().toString());
result.setVen_id(d.getVentilator_id());
result.setName(d.getName());
result.setVentilator_no(d.getVentilator_no());
result.setConfig_id(first.get().getId());
result.setYpjd(d.getYpjd());
result.setFy(fy);
result.setFl(fl);
result.setJygl(jygl);
result.setSzgl(szgl);
result.setXl(xl);
/*预警类型*/
result.setYjlx(first.get().getYjlx());
/*预警级别*/
result.setYjjb(first.get().getYjdj());
/*报警开始时间*/
result.setS_time(new Timestamp(System.currentTimeMillis()));
/*监测时间*/
result.setTime(fygldata.getSnap_time());

result.setMine_id(d.getMine_id());
/*消警状态*/
/* result.setXjzt(false);*/
mainfanalarmResultList.add(result);
}
}
/*风机效率预警*/
if (groupMap.get("1")!=null){
if(szgldata!=null){
Double Ns=fy*fl;
Double value=Ns/szgldata.getReal_value();
Optional<Mainfanalarmzb> first = groupMap.get("1").stream().filter(c->value>c.getYjxsdown()&&value<c.getYjxsup()&&d.getIs_ok()==true).findFirst();
if(first.isPresent()){
MainfanalarmResult result=new MainfanalarmResult();
result.setId(UUID.randomUUID().toString());
result.setVen_id(d.getVentilator_id());
result.setName(d.getName());
result.setConfig_id(first.get().getId());
result.setVentilator_no(d.getVentilator_no());
result.setYpjd(d.getYpjd());
result.setFy(fy);
result.setFl(fl);
result.setJygl(jygl);
result.setSzgl(szgl);
result.setXl(xl);
/*预警类型*/
result.setYjlx(first.get().getYjlx());
/*预警级别*/
result.setYjjb(first.get().getYjdj());
/*报警开始时间*/
result.setS_time(new Timestamp(System.currentTimeMillis()));
/*监测时间*/
result.setTime(fygldata.getSnap_time());
/*消警状态*/
/* result.setXjzt(false);*/
result.setMine_id(d.getMine_id());
mainfanalarmResultList.add(result);
}
}else{
Double Ns=fy*fl;
Double value=Ns/szgl;
Optional<Mainfanalarmzb> first = groupMap.get("1").stream().filter(c->value>c.getYjxsdown()&&value<c.getYjxsup()&&d.getIs_ok()==true).findFirst();
if(first.isPresent()){
MainfanalarmResult result=new MainfanalarmResult();
result.setId(UUID.randomUUID().toString());
result.setVen_id(d.getVentilator_id());
result.setConfig_id(first.get().getId());
result.setName(d.getName());
result.setVentilator_no(d.getVentilator_no());
result.setYpjd(d.getYpjd());
result.setFy(fy);
result.setFl(fl);
result.setJygl(jygl);
result.setSzgl(szgl);
result.setXl(xl);
/*预警类型*/
result.setYjlx(first.get().getYjlx());
/*预警级别*/
result.setYjjb(first.get().getYjdj());
/*报警开始时间*/
result.setS_time(new Timestamp(System.currentTimeMillis()));
/*监测时间*/
result.setTime(fygldata.getSnap_time());
/*消警状态*/
/* result.setXjzt(false);*/
result.setMine_id(d.getMine_id());
mainfanalarmResultList.add(result);
}
}
}
});
List<MainfanalarmResult> hisWarnList= (List<MainfanalarmResult>) cacheService.mapGet("mainfanalarm",mineId);
List<MainfanalarmResult> warnDataList= MainfanalarmUtil.mainfanmergeList(mainfanalarmResultList,hisWarnList,monitorTime);
savemainfanAlarm("mainfanalarm",mineId,warnDataList);
} catch (SQLException e) {
e.printStackTrace();
}
}

public void savemainfanAlarm(String key,String hk,List<MainfanalarmResult> mainfanalarmResultList){
mainfanalarmResultList.forEach(it->{
db.saveItem(it,"rb_mine_ventiator_alarmresult");
});
List<MainfanalarmResult> warnings=mainfanalarmResultList.stream().filter(warnData->warnData.getE_time()==null).collect(Collectors.toList());
cacheService.mapPut(key,hk,warnings);

}
}


package com.longruan.ark.alarm.util;

import com.longruan.ark.alarm.model.MainfanalarmResult;
import org.springframework.util.CollectionUtils;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
* @ClassName MainfanalarmUtil
* @Author LiaoYunChuan
* @Date 2019/10/28 19:30
* @Remark
**/
public class MainfanalarmUtil {
public static List<MainfanalarmResult> mainfanmergeList(List<MainfanalarmResult> realList, List<MainfanalarmResult> hisList, Timestamp monitorTime) {
List<MainfanalarmResult> mergeList = new ArrayList<>();

if (CollectionUtils.isEmpty(realList)||CollectionUtils.isEmpty(hisList)){
if (CollectionUtils.isEmpty(hisList)){
return realList;
}
if (CollectionUtils.isEmpty(realList)){
hisList.forEach(his->
his.setE_time(monitorTime)
);
mergeList.addAll(hisList);
}
}else{
//对比获取新增和持续的报警
realList.forEach(real->{
Optional<MainfanalarmResult> mainfanData=hisList.stream().filter(his->his.getVen_id().equals(real.getVen_id())
&&his.getYpjd().equals(real.getYpjd())&&his.getYjlx().equals(real.getYjlx())).findFirst();
//历史报警不为空,持续报警
if(mainfanData.isPresent()){
MainfanalarmResult his=mainfanData.get();
his.setName(real.getName());
his.setVentilator_no(real.getVentilator_no());
his.setFy(real.getFy());
his.setFl(real.getFl());
his.setJygl(real.getJygl());
his.setSzgl(real.getSzgl());
his.setXl(real.getXl());
his.setYjjb(real.getYjjb());
/* his.setXjzt(real.getXjzt());*/
his.setYjlx(real.getYjlx());
his.setTime(real.getTime());
mergeList.add(his);
}
/*新增的报警*/
else {
mergeList.add(real);
}
});

hisList.forEach(his->{
Optional<MainfanalarmResult> mainfanData=realList.stream().filter(real->real.getVen_id().equals(his.getVen_id())
&&real.getYpjd().equals(his.getYpjd())&&his.getYjlx().equals(real.getYjlx())).findFirst();
if(!mainfanData.isPresent()){
/* his.setXjzt(true);*/
his.setE_time(monitorTime);
mergeList.add(his);
}
});
}
return mergeList;
}
}


原文地址:https://www.cnblogs.com/LiaoYunChuan/p/11792183.html