package com.ard.alarm.digitization.service.impl; import com.alibaba.fastjson2.JSON; import com.ard.alarm.digitization.model.CylbdBj; import com.ard.alarm.digitization.model.Gkbj; import com.ard.alarm.digitization.service.Digitization2Service; import com.ard.utils.jdbc.Query; import com.ard.utils.mqtt.MqttProducer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.sql.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @Service @Slf4j(topic = "digitization2") public class Digitization2ServiceImpl implements Digitization2Service { @Value("${digitization2.enabled}") private Boolean digitization2Enabled; @Value("${digitization2.mysql.dbIP}") private String digitization2MysqlIP; @Value("${digitization2.mysql.dbPort}") private Integer digitization2MysqlPort; @Value("${digitization2.mysql.dbName}") private String digitization2MysqlName; @Value("${digitization2.mysql.dbCount}") private String digitization2MysqlCount; @Value("${digitization2.mysql.dbPassword}") private String digitization2MysqlPassword; Connection connection = null; Statement statement = null; private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //public Date gkbjLastTime; public String gkbjLastTime; //public Date cylbdBjLastTime; public String cylbdBjLastTime; @Scheduled(cron = "*/5 * * * * ?") public void alarmHandler() { if(!digitization2Enabled){ return; } Thread gkbjThread = new Thread(){ @Override public void run() { try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://" + digitization2MysqlIP + ":" + digitization2MysqlPort + "/" + digitization2MysqlName, digitization2MysqlCount, digitization2MysqlPassword); Statement statement = (Statement) connection.createStatement(); if (gkbjLastTime == null) { //初次查询,只获取10条最近数据。 String sql = "select * from gkbj order by fssj desc limit 0,10"; ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()) { if(resultSet.isFirst()){ gkbjLastTime = sdf.format(resultSet.getTimestamp("fssj")); } Gkbj gkbj = new Gkbj(); gkbj.setId(resultSet.getInt("id")); gkbj.setOrgName(resultSet.getString("org_name")); gkbj.setKm(resultSet.getString("km")); gkbj.setDm(resultSet.getString("dm")); gkbj.setDmc(resultSet.getString("dmc")); gkbj.setJh(resultSet.getString("jh")); gkbj.setWellCommonName(resultSet.getString("well_common_name")); gkbj.setFssj(resultSet.getTimestamp("fssj")); gkbj.setBdbj(resultSet.getString("bdbj")); gkbj.setBjtz(resultSet.getString("bdbj")); gkbj.setCyl1(resultSet.getFloat("cyl1")); gkbj.setCyl2(resultSet.getFloat("cyl2")); gkbj.setHsqk(resultSet.getString("hsqk")); gkbj.setGxsj(resultSet.getString("gxsj")); gkbj.setXqkdm(resultSet.getString("xqkdm")); gkbj.setQdfs(resultSet.getString("qdfs")); gkbj.setCyfs(resultSet.getString("cyfs")); gkbj.setCzsj(resultSet.getString("czsj")); gkbj.setCzr(resultSet.getString("czr")); gkbj.setCznr(resultSet.getString("cznr")); gkbj.setBz(resultSet.getString("bz")); gkbj.setAlarmType("工况预警"); MqttProducer.publish(2, false, "digitization2", JSON.toJSONString(gkbj)); } connection.close(); statement.close(); resultSet.close(); } else { //查询大于上次查询最后一条数据的时间 String sql = "select * from gkbj where fssj >= \'" + gkbjLastTime + " \'order by fssj desc"; ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()) { if(resultSet.isFirst()){ gkbjLastTime = sdf.format(resultSet.getTimestamp("fssj")); } Gkbj gkbj = new Gkbj(); gkbj.setId(resultSet.getInt("id")); gkbj.setOrgName(resultSet.getString("org_name")); gkbj.setKm(resultSet.getString("km")); gkbj.setDm(resultSet.getString("dm")); gkbj.setDmc(resultSet.getString("dmc")); gkbj.setJh(resultSet.getString("jh")); gkbj.setWellCommonName(resultSet.getString("well_common_name")); gkbj.setFssj(resultSet.getTimestamp("fssj")); gkbj.setBdbj(resultSet.getString("bdbj")); gkbj.setBjtz(resultSet.getString("bdbj")); gkbj.setCyl1(resultSet.getFloat("cyl1")); gkbj.setCyl2(resultSet.getFloat("cyl2")); gkbj.setHsqk(resultSet.getString("hsqk")); gkbj.setGxsj(resultSet.getString("gxsj")); gkbj.setXqkdm(resultSet.getString("xqkdm")); gkbj.setQdfs(resultSet.getString("qdfs")); gkbj.setCyfs(resultSet.getString("cyfs")); gkbj.setCzsj(resultSet.getString("czsj")); gkbj.setCzr(resultSet.getString("czr")); gkbj.setCznr(resultSet.getString("cznr")); gkbj.setBz(resultSet.getString("bz")); gkbj.setAlarmType("工况报警"); MqttProducer.publish(2, false, "digitization2", JSON.toJSONString(gkbj)); } connection.close(); statement.close(); resultSet.close(); } } catch (Exception ex) { ex.printStackTrace(); log.error("二厂数字化工况报警数据处理异常:" + ex.getMessage()); } } }; gkbjThread.start(); Thread cylbdBjThread = new Thread(){ @Override public void run() { try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://" + digitization2MysqlIP + ":" + digitization2MysqlPort + "/" + digitization2MysqlName, digitization2MysqlCount, digitization2MysqlPassword); Statement statement = (Statement) connection.createStatement(); if (cylbdBjLastTime == null) { //初次查询,只获取10条最近数据。 String sql = "select * from cylbd_bj order by fssj desc limit 0,10"; ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()) { if(resultSet.isFirst()){ cylbdBjLastTime = sdf.format(resultSet.getTimestamp("fssj")); } CylbdBj cylbdBj = new CylbdBj(); cylbdBj.setId(resultSet.getInt("id")); cylbdBj.setOrgName(resultSet.getString("org_name")); cylbdBj.setKm(resultSet.getString("km")); cylbdBj.setDm(resultSet.getString("dm")); cylbdBj.setDmc(resultSet.getString("dmc")); cylbdBj.setJh(resultSet.getString("jh")); cylbdBj.setWellCommonName(resultSet.getString("well_common_name")); cylbdBj.setFssj(resultSet.getTimestamp("fssj")); cylbdBj.setBdbj(resultSet.getString("bdbj")); cylbdBj.setBjtz(resultSet.getString("bdbj")); cylbdBj.setCyl1(resultSet.getFloat("cyl1")); cylbdBj.setCyl2(resultSet.getFloat("cyl2")); cylbdBj.setHsqk(resultSet.getString("hsqk")); cylbdBj.setGxsj(resultSet.getString("gxsj")); cylbdBj.setXqkdm(resultSet.getString("xqkdm")); cylbdBj.setQdfs(resultSet.getString("qdfs")); cylbdBj.setCyfs(resultSet.getString("cyfs")); cylbdBj.setCzsj(resultSet.getString("czsj")); cylbdBj.setCzr(resultSet.getString("czr")); cylbdBj.setCznr(resultSet.getString("cznr")); cylbdBj.setBz(resultSet.getString("bz")); cylbdBj.setAlarmType("停机报警"); MqttProducer.publish(2, false, "digitization2", JSON.toJSONString(cylbdBj)); } connection.close(); statement.close(); resultSet.close(); } else { //查询大于上次查询最后一条数据的时间 String sql = "select * from cylbd_bj where fssj >= \'" + cylbdBjLastTime + "\' order by fssj desc"; ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()) { if(resultSet.isFirst()){ cylbdBjLastTime = sdf.format(resultSet.getTimestamp("fssj")); } CylbdBj cylbdBj = new CylbdBj(); cylbdBj.setId(resultSet.getInt("id")); cylbdBj.setOrgName(resultSet.getString("org_name")); cylbdBj.setKm(resultSet.getString("km")); cylbdBj.setDm(resultSet.getString("dm")); cylbdBj.setDmc(resultSet.getString("dmc")); cylbdBj.setJh(resultSet.getString("jh")); cylbdBj.setWellCommonName(resultSet.getString("well_common_name")); cylbdBj.setFssj(resultSet.getTimestamp("fssj")); cylbdBj.setBdbj(resultSet.getString("bdbj")); cylbdBj.setBjtz(resultSet.getString("bdbj")); cylbdBj.setCyl1(resultSet.getFloat("cyl1")); cylbdBj.setCyl2(resultSet.getFloat("cyl2")); cylbdBj.setHsqk(resultSet.getString("hsqk")); cylbdBj.setGxsj(resultSet.getString("gxsj")); cylbdBj.setXqkdm(resultSet.getString("xqkdm")); cylbdBj.setQdfs(resultSet.getString("qdfs")); cylbdBj.setCyfs(resultSet.getString("cyfs")); cylbdBj.setCzsj(resultSet.getString("czsj")); cylbdBj.setCzr(resultSet.getString("czr")); cylbdBj.setCznr(resultSet.getString("cznr")); cylbdBj.setBz(resultSet.getString("bz")); cylbdBj.setAlarmType("停机报警"); MqttProducer.publish(2, false, "digitization2", JSON.toJSONString(cylbdBj)); } connection.close(); statement.close(); resultSet.close(); } } catch (Exception ex) { ex.printStackTrace(); log.error("二厂数字化工况报警数据处理异常:" + ex.getMessage()); } } }; cylbdBjThread.start(); } public void initMysql() throws ClassNotFoundException, SQLException { if(this.connection != null){ if(!this.connection.isClosed()){ try{ this.connection.close(); this.connection = null; }catch(Exception e){ this.connection = null; } } } if(this.statement != null){ if(!this.statement.isClosed()){ try{ this.statement.close(); this.statement = null; }catch(Exception e){ this.statement = null; } } } Class.forName("com.mysql.cj.jdbc.Driver"); this.connection = DriverManager.getConnection("jdbc:mysql://" + digitization2MysqlIP + ":" + digitization2MysqlPort + "/" + digitization2MysqlName, digitization2MysqlCount, digitization2MysqlPassword); this.statement = (Statement) connection.createStatement(); } }