zoukankan      html  css  js  c++  java
  • 记录稍微有点复杂的业务代码

    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;
    }
    }


  • 相关阅读:
    字符编码乱码处理
    字典,元组,集合的使用
    三级菜单 ,求1
    运算符 if和while的使用
    if条件判断和while循环
    基本数据类型的结构和使用方法
    计算机基础部分
    计算机基础
    数据库之表查询,单表、多表,子查询
    google map API 学习
  • 原文地址:https://www.cnblogs.com/LiaoYunChuan/p/11792183.html
Copyright © 2011-2022 走看看