diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e36e0b5..7e1bbd3 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":0.86,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":60,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":.55,\"humidity\":0.2,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; @@ -142,7 +142,8 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":98,\"datas\":[{\"level\":6.73,\"uptime\":\"20191217161000\"},{\"level\":5.72,\"uptime\":\"20191217162000\"},{\"level\":7.71,\"uptime\":\"20191217163000\"}],\"logTime\":\"20191217160000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e36e0b5..7e1bbd3 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":0.86,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":60,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":.55,\"humidity\":0.2,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; @@ -142,7 +142,8 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":98,\"datas\":[{\"level\":6.73,\"uptime\":\"20191217161000\"},{\"level\":5.72,\"uptime\":\"20191217162000\"},{\"level\":7.71,\"uptime\":\"20191217163000\"}],\"logTime\":\"20191217160000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/core/util/ThreadUtil.java b/src/main/java/org/well/well/core/util/ThreadUtil.java index 79aede1..f6a50e1 100644 --- a/src/main/java/org/well/well/core/util/ThreadUtil.java +++ b/src/main/java/org/well/well/core/util/ThreadUtil.java @@ -11,16 +11,17 @@ * Created by phantomli on 2016/2/17. */ public class ThreadUtil { - public static void excuteMsg(Long id, String msg) throws UnsupportedEncodingException { + public static void excuteMsg(Long id, String msg,String wellCode) throws UnsupportedEncodingException { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); final Long jobId = id; + final String wellcode = wellCode; final String alarmMsg = URLEncoder.encode(msg, "UTF-8"); cachedThreadPool.execute(new Runnable() { @Override public void run() { try { String retMsg = HttpClientUtils.post(Configure.getProperty("sendURL", "") + "?id=" + jobId - + "&msg="+alarmMsg , ""); + + "&msg="+alarmMsg + "&wellCode="+wellcode, ""); Thread.sleep(500); System.out.println("--------工单和告警推送至web后台成功 " + retMsg + ",工单id:" + jobId); } catch (InterruptedException e) { diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e36e0b5..7e1bbd3 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":0.86,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":60,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":.55,\"humidity\":0.2,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; @@ -142,7 +142,8 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":98,\"datas\":[{\"level\":6.73,\"uptime\":\"20191217161000\"},{\"level\":5.72,\"uptime\":\"20191217162000\"},{\"level\":7.71,\"uptime\":\"20191217163000\"}],\"logTime\":\"20191217160000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/core/util/ThreadUtil.java b/src/main/java/org/well/well/core/util/ThreadUtil.java index 79aede1..f6a50e1 100644 --- a/src/main/java/org/well/well/core/util/ThreadUtil.java +++ b/src/main/java/org/well/well/core/util/ThreadUtil.java @@ -11,16 +11,17 @@ * Created by phantomli on 2016/2/17. */ public class ThreadUtil { - public static void excuteMsg(Long id, String msg) throws UnsupportedEncodingException { + public static void excuteMsg(Long id, String msg,String wellCode) throws UnsupportedEncodingException { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); final Long jobId = id; + final String wellcode = wellCode; final String alarmMsg = URLEncoder.encode(msg, "UTF-8"); cachedThreadPool.execute(new Runnable() { @Override public void run() { try { String retMsg = HttpClientUtils.post(Configure.getProperty("sendURL", "") + "?id=" + jobId - + "&msg="+alarmMsg , ""); + + "&msg="+alarmMsg + "&wellCode="+wellcode, ""); Thread.sleep(500); System.out.println("--------工单和告警推送至web后台成功 " + retMsg + ",工单id:" + jobId); } catch (InterruptedException e) { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index a850277..aa1bf4a 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -118,6 +118,31 @@ // return null; // } +// public List getIsAlarmAndJob(String devTypeName, String depId) { +// Long tenantId = null; +// if (StringUtils.isNotBlank(depId)) { +// SysDept sysDept = deptManager.get(Long.valueOf(depId)); +// if (null != sysDept) { +// String tenantStr = sysDept.getTenantId(); +// tenantId = StringUtils.isBlank(tenantStr) ? tenantId : Long.valueOf(tenantStr); +// } +// } +// +// if (null == tenantId) return new ArrayList(); +// try { +// Map paraMap = new HashMap(); +// String sql = "SELECT open_alarm,open_job FROM alarm_level a " + +// "WHERE a.name=:devTypeName LIMIT 1" ; +// paraMap.put("devTypeName", devTypeName); +// paraMap.put("tenantId", tenantId); +// List alarmLevelList = getSession().createSQLQuery(sql).setProperties(paraMap).list(); +// return alarmLevelList; +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return new ArrayList(); +// } + public List getRuleRank(String devCode, String depId) { Long tenantId = null; @@ -132,7 +157,7 @@ if (null == tenantId) return new ArrayList(); try { Map paraMap = new HashMap(); - String sql = "SELECT level,low_value,high_value,name FROM alarm_level_device_veiw a " + + String sql = "SELECT level,low_value,high_value,name, open_alarm,open_job FROM alarm_level_device_veiw a " + "WHERE a.devcode=:devcode AND a.tenant_id=:tenantId" + " ORDER BY name,level"; paraMap.put("devcode", devCode); diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e36e0b5..7e1bbd3 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":0.86,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":60,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":.55,\"humidity\":0.2,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; @@ -142,7 +142,8 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":98,\"datas\":[{\"level\":6.73,\"uptime\":\"20191217161000\"},{\"level\":5.72,\"uptime\":\"20191217162000\"},{\"level\":7.71,\"uptime\":\"20191217163000\"}],\"logTime\":\"20191217160000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/core/util/ThreadUtil.java b/src/main/java/org/well/well/core/util/ThreadUtil.java index 79aede1..f6a50e1 100644 --- a/src/main/java/org/well/well/core/util/ThreadUtil.java +++ b/src/main/java/org/well/well/core/util/ThreadUtil.java @@ -11,16 +11,17 @@ * Created by phantomli on 2016/2/17. */ public class ThreadUtil { - public static void excuteMsg(Long id, String msg) throws UnsupportedEncodingException { + public static void excuteMsg(Long id, String msg,String wellCode) throws UnsupportedEncodingException { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); final Long jobId = id; + final String wellcode = wellCode; final String alarmMsg = URLEncoder.encode(msg, "UTF-8"); cachedThreadPool.execute(new Runnable() { @Override public void run() { try { String retMsg = HttpClientUtils.post(Configure.getProperty("sendURL", "") + "?id=" + jobId - + "&msg="+alarmMsg , ""); + + "&msg="+alarmMsg + "&wellCode="+wellcode, ""); Thread.sleep(500); System.out.println("--------工单和告警推送至web后台成功 " + retMsg + ",工单id:" + jobId); } catch (InterruptedException e) { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index a850277..aa1bf4a 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -118,6 +118,31 @@ // return null; // } +// public List getIsAlarmAndJob(String devTypeName, String depId) { +// Long tenantId = null; +// if (StringUtils.isNotBlank(depId)) { +// SysDept sysDept = deptManager.get(Long.valueOf(depId)); +// if (null != sysDept) { +// String tenantStr = sysDept.getTenantId(); +// tenantId = StringUtils.isBlank(tenantStr) ? tenantId : Long.valueOf(tenantStr); +// } +// } +// +// if (null == tenantId) return new ArrayList(); +// try { +// Map paraMap = new HashMap(); +// String sql = "SELECT open_alarm,open_job FROM alarm_level a " + +// "WHERE a.name=:devTypeName LIMIT 1" ; +// paraMap.put("devTypeName", devTypeName); +// paraMap.put("tenantId", tenantId); +// List alarmLevelList = getSession().createSQLQuery(sql).setProperties(paraMap).list(); +// return alarmLevelList; +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return new ArrayList(); +// } + public List getRuleRank(String devCode, String depId) { Long tenantId = null; @@ -132,7 +157,7 @@ if (null == tenantId) return new ArrayList(); try { Map paraMap = new HashMap(); - String sql = "SELECT level,low_value,high_value,name FROM alarm_level_device_veiw a " + + String sql = "SELECT level,low_value,high_value,name, open_alarm,open_job FROM alarm_level_device_veiw a " + "WHERE a.devcode=:devcode AND a.tenant_id=:tenantId" + " ORDER BY name,level"; paraMap.put("devcode", devCode); diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index aba23b8..42686d2 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -83,13 +83,17 @@ String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString());//获取报警阈值 List ruleRankList = new ArrayList(); float rankThresh = 0; + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if (rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -100,9 +104,6 @@ Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { if (Float.valueOf(level) >= (Float.valueOf(rankValue.toString()) / 100 * Float.valueOf(thresh))) { -// LiquidAlarmEnum liquidAlarmEnum=LiquidAlarmEnum.getByIndex( -// String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 6)); -// alarmContent = liquidAlarmEnum!=null?liquidAlarmEnum.getName():alarmContent; alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -113,24 +114,37 @@ if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, alarmContent, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.Liquid.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + AlarmJob alarmJob =null; + if("1".equals(isJob)){ + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, alarmContent, level, device, - devCode, alarmJob.getWellCode(), upTime, alarmContent); + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e36e0b5..7e1bbd3 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":0.86,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":60,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":.55,\"humidity\":0.2,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; @@ -142,7 +142,8 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":98,\"datas\":[{\"level\":6.73,\"uptime\":\"20191217161000\"},{\"level\":5.72,\"uptime\":\"20191217162000\"},{\"level\":7.71,\"uptime\":\"20191217163000\"}],\"logTime\":\"20191217160000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/core/util/ThreadUtil.java b/src/main/java/org/well/well/core/util/ThreadUtil.java index 79aede1..f6a50e1 100644 --- a/src/main/java/org/well/well/core/util/ThreadUtil.java +++ b/src/main/java/org/well/well/core/util/ThreadUtil.java @@ -11,16 +11,17 @@ * Created by phantomli on 2016/2/17. */ public class ThreadUtil { - public static void excuteMsg(Long id, String msg) throws UnsupportedEncodingException { + public static void excuteMsg(Long id, String msg,String wellCode) throws UnsupportedEncodingException { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); final Long jobId = id; + final String wellcode = wellCode; final String alarmMsg = URLEncoder.encode(msg, "UTF-8"); cachedThreadPool.execute(new Runnable() { @Override public void run() { try { String retMsg = HttpClientUtils.post(Configure.getProperty("sendURL", "") + "?id=" + jobId - + "&msg="+alarmMsg , ""); + + "&msg="+alarmMsg + "&wellCode="+wellcode, ""); Thread.sleep(500); System.out.println("--------工单和告警推送至web后台成功 " + retMsg + ",工单id:" + jobId); } catch (InterruptedException e) { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index a850277..aa1bf4a 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -118,6 +118,31 @@ // return null; // } +// public List getIsAlarmAndJob(String devTypeName, String depId) { +// Long tenantId = null; +// if (StringUtils.isNotBlank(depId)) { +// SysDept sysDept = deptManager.get(Long.valueOf(depId)); +// if (null != sysDept) { +// String tenantStr = sysDept.getTenantId(); +// tenantId = StringUtils.isBlank(tenantStr) ? tenantId : Long.valueOf(tenantStr); +// } +// } +// +// if (null == tenantId) return new ArrayList(); +// try { +// Map paraMap = new HashMap(); +// String sql = "SELECT open_alarm,open_job FROM alarm_level a " + +// "WHERE a.name=:devTypeName LIMIT 1" ; +// paraMap.put("devTypeName", devTypeName); +// paraMap.put("tenantId", tenantId); +// List alarmLevelList = getSession().createSQLQuery(sql).setProperties(paraMap).list(); +// return alarmLevelList; +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return new ArrayList(); +// } + public List getRuleRank(String devCode, String depId) { Long tenantId = null; @@ -132,7 +157,7 @@ if (null == tenantId) return new ArrayList(); try { Map paraMap = new HashMap(); - String sql = "SELECT level,low_value,high_value,name FROM alarm_level_device_veiw a " + + String sql = "SELECT level,low_value,high_value,name, open_alarm,open_job FROM alarm_level_device_veiw a " + "WHERE a.devcode=:devcode AND a.tenant_id=:tenantId" + " ORDER BY name,level"; paraMap.put("devcode", devCode); diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index aba23b8..42686d2 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -83,13 +83,17 @@ String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString());//获取报警阈值 List ruleRankList = new ArrayList(); float rankThresh = 0; + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if (rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -100,9 +104,6 @@ Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { if (Float.valueOf(level) >= (Float.valueOf(rankValue.toString()) / 100 * Float.valueOf(thresh))) { -// LiquidAlarmEnum liquidAlarmEnum=LiquidAlarmEnum.getByIndex( -// String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 6)); -// alarmContent = liquidAlarmEnum!=null?liquidAlarmEnum.getName():alarmContent; alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -113,24 +114,37 @@ if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, alarmContent, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.Liquid.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + AlarmJob alarmJob =null; + if("1".equals(isJob)){ + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, alarmContent, level, device, - devCode, alarmJob.getWellCode(), upTime, alarmContent); + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java index 3623db2..6cb9dfb 100644 --- a/src/main/java/org/well/well/manager/MeterManager.java +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -98,7 +98,8 @@ // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警"); + ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警", busWell != null ? + busWell.getWellCode() : ""); } } else {//未超限 diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e36e0b5..7e1bbd3 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":0.86,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":60,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":.55,\"humidity\":0.2,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; @@ -142,7 +142,8 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":98,\"datas\":[{\"level\":6.73,\"uptime\":\"20191217161000\"},{\"level\":5.72,\"uptime\":\"20191217162000\"},{\"level\":7.71,\"uptime\":\"20191217163000\"}],\"logTime\":\"20191217160000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/core/util/ThreadUtil.java b/src/main/java/org/well/well/core/util/ThreadUtil.java index 79aede1..f6a50e1 100644 --- a/src/main/java/org/well/well/core/util/ThreadUtil.java +++ b/src/main/java/org/well/well/core/util/ThreadUtil.java @@ -11,16 +11,17 @@ * Created by phantomli on 2016/2/17. */ public class ThreadUtil { - public static void excuteMsg(Long id, String msg) throws UnsupportedEncodingException { + public static void excuteMsg(Long id, String msg,String wellCode) throws UnsupportedEncodingException { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); final Long jobId = id; + final String wellcode = wellCode; final String alarmMsg = URLEncoder.encode(msg, "UTF-8"); cachedThreadPool.execute(new Runnable() { @Override public void run() { try { String retMsg = HttpClientUtils.post(Configure.getProperty("sendURL", "") + "?id=" + jobId - + "&msg="+alarmMsg , ""); + + "&msg="+alarmMsg + "&wellCode="+wellcode, ""); Thread.sleep(500); System.out.println("--------工单和告警推送至web后台成功 " + retMsg + ",工单id:" + jobId); } catch (InterruptedException e) { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index a850277..aa1bf4a 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -118,6 +118,31 @@ // return null; // } +// public List getIsAlarmAndJob(String devTypeName, String depId) { +// Long tenantId = null; +// if (StringUtils.isNotBlank(depId)) { +// SysDept sysDept = deptManager.get(Long.valueOf(depId)); +// if (null != sysDept) { +// String tenantStr = sysDept.getTenantId(); +// tenantId = StringUtils.isBlank(tenantStr) ? tenantId : Long.valueOf(tenantStr); +// } +// } +// +// if (null == tenantId) return new ArrayList(); +// try { +// Map paraMap = new HashMap(); +// String sql = "SELECT open_alarm,open_job FROM alarm_level a " + +// "WHERE a.name=:devTypeName LIMIT 1" ; +// paraMap.put("devTypeName", devTypeName); +// paraMap.put("tenantId", tenantId); +// List alarmLevelList = getSession().createSQLQuery(sql).setProperties(paraMap).list(); +// return alarmLevelList; +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return new ArrayList(); +// } + public List getRuleRank(String devCode, String depId) { Long tenantId = null; @@ -132,7 +157,7 @@ if (null == tenantId) return new ArrayList(); try { Map paraMap = new HashMap(); - String sql = "SELECT level,low_value,high_value,name FROM alarm_level_device_veiw a " + + String sql = "SELECT level,low_value,high_value,name, open_alarm,open_job FROM alarm_level_device_veiw a " + "WHERE a.devcode=:devcode AND a.tenant_id=:tenantId" + " ORDER BY name,level"; paraMap.put("devcode", devCode); diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index aba23b8..42686d2 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -83,13 +83,17 @@ String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString());//获取报警阈值 List ruleRankList = new ArrayList(); float rankThresh = 0; + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if (rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -100,9 +104,6 @@ Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { if (Float.valueOf(level) >= (Float.valueOf(rankValue.toString()) / 100 * Float.valueOf(thresh))) { -// LiquidAlarmEnum liquidAlarmEnum=LiquidAlarmEnum.getByIndex( -// String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 6)); -// alarmContent = liquidAlarmEnum!=null?liquidAlarmEnum.getName():alarmContent; alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -113,24 +114,37 @@ if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, alarmContent, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.Liquid.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + AlarmJob alarmJob =null; + if("1".equals(isJob)){ + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, alarmContent, level, device, - devCode, alarmJob.getWellCode(), upTime, alarmContent); + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java index 3623db2..6cb9dfb 100644 --- a/src/main/java/org/well/well/manager/MeterManager.java +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -98,7 +98,8 @@ // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警"); + ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警", busWell != null ? + busWell.getWellCode() : ""); } } else {//未超限 diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index cf5772c..d4245a9 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -103,7 +103,7 @@ alarmContent, gas, device, devCode, alarmJob.getWellCode(), upTime,alarmContent); //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e36e0b5..7e1bbd3 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":0.86,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":60,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":.55,\"humidity\":0.2,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; @@ -142,7 +142,8 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":98,\"datas\":[{\"level\":6.73,\"uptime\":\"20191217161000\"},{\"level\":5.72,\"uptime\":\"20191217162000\"},{\"level\":7.71,\"uptime\":\"20191217163000\"}],\"logTime\":\"20191217160000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/core/util/ThreadUtil.java b/src/main/java/org/well/well/core/util/ThreadUtil.java index 79aede1..f6a50e1 100644 --- a/src/main/java/org/well/well/core/util/ThreadUtil.java +++ b/src/main/java/org/well/well/core/util/ThreadUtil.java @@ -11,16 +11,17 @@ * Created by phantomli on 2016/2/17. */ public class ThreadUtil { - public static void excuteMsg(Long id, String msg) throws UnsupportedEncodingException { + public static void excuteMsg(Long id, String msg,String wellCode) throws UnsupportedEncodingException { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); final Long jobId = id; + final String wellcode = wellCode; final String alarmMsg = URLEncoder.encode(msg, "UTF-8"); cachedThreadPool.execute(new Runnable() { @Override public void run() { try { String retMsg = HttpClientUtils.post(Configure.getProperty("sendURL", "") + "?id=" + jobId - + "&msg="+alarmMsg , ""); + + "&msg="+alarmMsg + "&wellCode="+wellcode, ""); Thread.sleep(500); System.out.println("--------工单和告警推送至web后台成功 " + retMsg + ",工单id:" + jobId); } catch (InterruptedException e) { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index a850277..aa1bf4a 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -118,6 +118,31 @@ // return null; // } +// public List getIsAlarmAndJob(String devTypeName, String depId) { +// Long tenantId = null; +// if (StringUtils.isNotBlank(depId)) { +// SysDept sysDept = deptManager.get(Long.valueOf(depId)); +// if (null != sysDept) { +// String tenantStr = sysDept.getTenantId(); +// tenantId = StringUtils.isBlank(tenantStr) ? tenantId : Long.valueOf(tenantStr); +// } +// } +// +// if (null == tenantId) return new ArrayList(); +// try { +// Map paraMap = new HashMap(); +// String sql = "SELECT open_alarm,open_job FROM alarm_level a " + +// "WHERE a.name=:devTypeName LIMIT 1" ; +// paraMap.put("devTypeName", devTypeName); +// paraMap.put("tenantId", tenantId); +// List alarmLevelList = getSession().createSQLQuery(sql).setProperties(paraMap).list(); +// return alarmLevelList; +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return new ArrayList(); +// } + public List getRuleRank(String devCode, String depId) { Long tenantId = null; @@ -132,7 +157,7 @@ if (null == tenantId) return new ArrayList(); try { Map paraMap = new HashMap(); - String sql = "SELECT level,low_value,high_value,name FROM alarm_level_device_veiw a " + + String sql = "SELECT level,low_value,high_value,name, open_alarm,open_job FROM alarm_level_device_veiw a " + "WHERE a.devcode=:devcode AND a.tenant_id=:tenantId" + " ORDER BY name,level"; paraMap.put("devcode", devCode); diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index aba23b8..42686d2 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -83,13 +83,17 @@ String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString());//获取报警阈值 List ruleRankList = new ArrayList(); float rankThresh = 0; + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if (rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -100,9 +104,6 @@ Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { if (Float.valueOf(level) >= (Float.valueOf(rankValue.toString()) / 100 * Float.valueOf(thresh))) { -// LiquidAlarmEnum liquidAlarmEnum=LiquidAlarmEnum.getByIndex( -// String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 6)); -// alarmContent = liquidAlarmEnum!=null?liquidAlarmEnum.getName():alarmContent; alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -113,24 +114,37 @@ if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, alarmContent, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.Liquid.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + AlarmJob alarmJob =null; + if("1".equals(isJob)){ + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, alarmContent, level, device, - devCode, alarmJob.getWellCode(), upTime, alarmContent); + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java index 3623db2..6cb9dfb 100644 --- a/src/main/java/org/well/well/manager/MeterManager.java +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -98,7 +98,8 @@ // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警"); + ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警", busWell != null ? + busWell.getWellCode() : ""); } } else {//未超限 diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index cf5772c..d4245a9 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -103,7 +103,7 @@ alarmContent, gas, device, devCode, alarmJob.getWellCode(), upTime,alarmContent); //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 4482925..8d0a03e 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -36,7 +36,7 @@ @Resource private UserManager userManager; private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); - private static final double constant=0.0153; +// private static final double constant=0.0153; public Map saveData(String devId, String wellCode, String cell, String uptime, String frequency, String dData) throws IOException { @@ -62,40 +62,44 @@ String val = ((JSONObject) jsonArray.get(i)).get("noiseVal").toString(); String freq = ((JSONObject) jsonArray.get(i)).get("noiseFreq").toString(); String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); - val=String.format("%.2f", Double.valueOf(val)); - freq=String.format("%.2f", Double.valueOf(freq)); + val = String.format("%.2f", Double.valueOf(val)); + freq = String.format("%.2f", Double.valueOf(freq)); //1.清离线 deviceManager.clearOffline(devCode); //2.清除设备告警 alarmRecordManager.clearAlarmByNormalData(devCode, "2"); //3.存数据 - saveData(devCode,busWell==null?"":busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 if (i < jsonArray.size() - 1) continue; String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.NoiseDig.toString());//获取报警阈值 - List ruleRankList= new ArrayList(); + List ruleRankList = new ArrayList(); double rankThresh = 0; - if(busWell!=null) ruleRankList= alarmRuleManager.getRuleRank(devCode,busWell.getDeptid()); + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) + if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; - rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh) * constant; + rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Double.valueOf(thresh) : 0) : rankThresh; - if (rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 - String alarmContent= NoiseDigAlarmEnum.OVER_THRESH.getName(); - Integer alarmLevel=0; - if(busWell!=null){ + String alarmContent = NoiseDigAlarmEnum.OVER_THRESH.getName(); + Integer alarmLevel = 0; + if (busWell != null) { // List ruleRankList= alarmRuleManager.getRuleRank(devCode,busWell.getDeptid()); - for(int j=0;j=(Float.valueOf(rankValue.toString())/100*Float.valueOf(thresh) * constant)) { + for (int j = 0; j < ruleRankList.size(); j++) { + Object rankValue = ((Object[]) ruleRankList.get(j))[2]; + if (null != rankValue) { + if (Float.valueOf(val) >= (Float.valueOf(rankValue.toString()) / 100 * Float.valueOf(thresh))) { // NoiseDigAlarmEnum noiseDigAlarmEnum=NoiseDigAlarmEnum.getByIndex( // String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 4)); // alarmContent = noiseDigAlarmEnum!=null?noiseDigAlarmEnum.getName():alarmContent; - alarmLevel=Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -106,24 +110,39 @@ if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1",alarmLevel, alarmContent, - val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime,alarmContent); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.NoiseDig.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, + val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"1"); + AlarmJob alarmJob = null; + if ("1".equals(isJob)) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, + alarmRecordManager.saveData(alarmJob == null ? null : alarmJob.getId(), "1", alarmLevel, alarmContent, val, device, - devCode, alarmJob.getWellCode(), upTime,alarmContent); + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + + ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); } } else {//未超限 @@ -155,12 +174,12 @@ if (null == device) return;//没注册设备舍弃 BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); if (null == alarmJob) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "0"); } - alarmRecordManager.saveData(alarmJob.getId(), "2",null, + alarmRecordManager.saveData(alarmJob.getId(), "2", null, NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), String.valueOf(NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e36e0b5..7e1bbd3 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":0.86,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":60,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":.55,\"humidity\":0.2,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; @@ -142,7 +142,8 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":98,\"datas\":[{\"level\":6.73,\"uptime\":\"20191217161000\"},{\"level\":5.72,\"uptime\":\"20191217162000\"},{\"level\":7.71,\"uptime\":\"20191217163000\"}],\"logTime\":\"20191217160000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/core/util/ThreadUtil.java b/src/main/java/org/well/well/core/util/ThreadUtil.java index 79aede1..f6a50e1 100644 --- a/src/main/java/org/well/well/core/util/ThreadUtil.java +++ b/src/main/java/org/well/well/core/util/ThreadUtil.java @@ -11,16 +11,17 @@ * Created by phantomli on 2016/2/17. */ public class ThreadUtil { - public static void excuteMsg(Long id, String msg) throws UnsupportedEncodingException { + public static void excuteMsg(Long id, String msg,String wellCode) throws UnsupportedEncodingException { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); final Long jobId = id; + final String wellcode = wellCode; final String alarmMsg = URLEncoder.encode(msg, "UTF-8"); cachedThreadPool.execute(new Runnable() { @Override public void run() { try { String retMsg = HttpClientUtils.post(Configure.getProperty("sendURL", "") + "?id=" + jobId - + "&msg="+alarmMsg , ""); + + "&msg="+alarmMsg + "&wellCode="+wellcode, ""); Thread.sleep(500); System.out.println("--------工单和告警推送至web后台成功 " + retMsg + ",工单id:" + jobId); } catch (InterruptedException e) { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index a850277..aa1bf4a 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -118,6 +118,31 @@ // return null; // } +// public List getIsAlarmAndJob(String devTypeName, String depId) { +// Long tenantId = null; +// if (StringUtils.isNotBlank(depId)) { +// SysDept sysDept = deptManager.get(Long.valueOf(depId)); +// if (null != sysDept) { +// String tenantStr = sysDept.getTenantId(); +// tenantId = StringUtils.isBlank(tenantStr) ? tenantId : Long.valueOf(tenantStr); +// } +// } +// +// if (null == tenantId) return new ArrayList(); +// try { +// Map paraMap = new HashMap(); +// String sql = "SELECT open_alarm,open_job FROM alarm_level a " + +// "WHERE a.name=:devTypeName LIMIT 1" ; +// paraMap.put("devTypeName", devTypeName); +// paraMap.put("tenantId", tenantId); +// List alarmLevelList = getSession().createSQLQuery(sql).setProperties(paraMap).list(); +// return alarmLevelList; +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return new ArrayList(); +// } + public List getRuleRank(String devCode, String depId) { Long tenantId = null; @@ -132,7 +157,7 @@ if (null == tenantId) return new ArrayList(); try { Map paraMap = new HashMap(); - String sql = "SELECT level,low_value,high_value,name FROM alarm_level_device_veiw a " + + String sql = "SELECT level,low_value,high_value,name, open_alarm,open_job FROM alarm_level_device_veiw a " + "WHERE a.devcode=:devcode AND a.tenant_id=:tenantId" + " ORDER BY name,level"; paraMap.put("devcode", devCode); diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index aba23b8..42686d2 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -83,13 +83,17 @@ String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString());//获取报警阈值 List ruleRankList = new ArrayList(); float rankThresh = 0; + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if (rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -100,9 +104,6 @@ Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { if (Float.valueOf(level) >= (Float.valueOf(rankValue.toString()) / 100 * Float.valueOf(thresh))) { -// LiquidAlarmEnum liquidAlarmEnum=LiquidAlarmEnum.getByIndex( -// String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 6)); -// alarmContent = liquidAlarmEnum!=null?liquidAlarmEnum.getName():alarmContent; alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -113,24 +114,37 @@ if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, alarmContent, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.Liquid.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + AlarmJob alarmJob =null; + if("1".equals(isJob)){ + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, alarmContent, level, device, - devCode, alarmJob.getWellCode(), upTime, alarmContent); + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java index 3623db2..6cb9dfb 100644 --- a/src/main/java/org/well/well/manager/MeterManager.java +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -98,7 +98,8 @@ // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警"); + ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警", busWell != null ? + busWell.getWellCode() : ""); } } else {//未超限 diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index cf5772c..d4245a9 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -103,7 +103,7 @@ alarmContent, gas, device, devCode, alarmJob.getWellCode(), upTime,alarmContent); //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 4482925..8d0a03e 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -36,7 +36,7 @@ @Resource private UserManager userManager; private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); - private static final double constant=0.0153; +// private static final double constant=0.0153; public Map saveData(String devId, String wellCode, String cell, String uptime, String frequency, String dData) throws IOException { @@ -62,40 +62,44 @@ String val = ((JSONObject) jsonArray.get(i)).get("noiseVal").toString(); String freq = ((JSONObject) jsonArray.get(i)).get("noiseFreq").toString(); String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); - val=String.format("%.2f", Double.valueOf(val)); - freq=String.format("%.2f", Double.valueOf(freq)); + val = String.format("%.2f", Double.valueOf(val)); + freq = String.format("%.2f", Double.valueOf(freq)); //1.清离线 deviceManager.clearOffline(devCode); //2.清除设备告警 alarmRecordManager.clearAlarmByNormalData(devCode, "2"); //3.存数据 - saveData(devCode,busWell==null?"":busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 if (i < jsonArray.size() - 1) continue; String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.NoiseDig.toString());//获取报警阈值 - List ruleRankList= new ArrayList(); + List ruleRankList = new ArrayList(); double rankThresh = 0; - if(busWell!=null) ruleRankList= alarmRuleManager.getRuleRank(devCode,busWell.getDeptid()); + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) + if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; - rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh) * constant; + rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Double.valueOf(thresh) : 0) : rankThresh; - if (rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 - String alarmContent= NoiseDigAlarmEnum.OVER_THRESH.getName(); - Integer alarmLevel=0; - if(busWell!=null){ + String alarmContent = NoiseDigAlarmEnum.OVER_THRESH.getName(); + Integer alarmLevel = 0; + if (busWell != null) { // List ruleRankList= alarmRuleManager.getRuleRank(devCode,busWell.getDeptid()); - for(int j=0;j=(Float.valueOf(rankValue.toString())/100*Float.valueOf(thresh) * constant)) { + for (int j = 0; j < ruleRankList.size(); j++) { + Object rankValue = ((Object[]) ruleRankList.get(j))[2]; + if (null != rankValue) { + if (Float.valueOf(val) >= (Float.valueOf(rankValue.toString()) / 100 * Float.valueOf(thresh))) { // NoiseDigAlarmEnum noiseDigAlarmEnum=NoiseDigAlarmEnum.getByIndex( // String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 4)); // alarmContent = noiseDigAlarmEnum!=null?noiseDigAlarmEnum.getName():alarmContent; - alarmLevel=Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -106,24 +110,39 @@ if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1",alarmLevel, alarmContent, - val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime,alarmContent); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.NoiseDig.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, + val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"1"); + AlarmJob alarmJob = null; + if ("1".equals(isJob)) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, + alarmRecordManager.saveData(alarmJob == null ? null : alarmJob.getId(), "1", alarmLevel, alarmContent, val, device, - devCode, alarmJob.getWellCode(), upTime,alarmContent); + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + + ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); } } else {//未超限 @@ -155,12 +174,12 @@ if (null == device) return;//没注册设备舍弃 BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); if (null == alarmJob) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "0"); } - alarmRecordManager.saveData(alarmJob.getId(), "2",null, + alarmRecordManager.saveData(alarmJob.getId(), "2", null, NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), String.valueOf(NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, diff --git a/src/main/java/org/well/well/manager/TempHumiManager.java b/src/main/java/org/well/well/manager/TempHumiManager.java index bccb1c6..94bc029 100644 --- a/src/main/java/org/well/well/manager/TempHumiManager.java +++ b/src/main/java/org/well/well/manager/TempHumiManager.java @@ -80,9 +80,13 @@ //4.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; if (busWell != null) {//获取不到相关联的井,就无法获取告警规则,故不存库 - String alarmContent = "", alarmValue = ""; + String alarmContent = "", alarmValue = "",isAlarm="1",isJob="1"; Integer alarmLevel = 10; List ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0) { + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } //获取温度告警等级 for (int j = 0; j < ruleRankList.size(); j++) { Object rankLowValue = ((Object[]) ruleRankList.get(j))[1]; @@ -127,13 +131,23 @@ } } - if (StringUtils.isNotBlank(alarmContent)) { + if (StringUtils.isNotBlank(alarmContent)&&"1".equals(isAlarm)) { AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.TempHumi.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, TempHumiAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, @@ -141,20 +155,25 @@ } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.TempHumi.toString(),"1"); + AlarmJob alarmJob =null; + if("1".equals(isJob)){ + //1.若开启工单,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, + busWell.getWellCode(), DeviceTypeEnum.TempHumi.toString(),"1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, TempHumiAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), device, - devCode, alarmJob.getWellCode(), upTime, + devCode, busWell.getWellCode(), upTime, alarmContent.substring(0, alarmContent.length() - 1)); // //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), TempHumiAlarmEnum.OVER_THRESH.getName()); + ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, TempHumiAlarmEnum.OVER_THRESH.getName(), + busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e36e0b5..7e1bbd3 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":0.86,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":60,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":.55,\"humidity\":0.2,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; @@ -142,7 +142,8 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":98,\"datas\":[{\"level\":6.73,\"uptime\":\"20191217161000\"},{\"level\":5.72,\"uptime\":\"20191217162000\"},{\"level\":7.71,\"uptime\":\"20191217163000\"}],\"logTime\":\"20191217160000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/core/util/ThreadUtil.java b/src/main/java/org/well/well/core/util/ThreadUtil.java index 79aede1..f6a50e1 100644 --- a/src/main/java/org/well/well/core/util/ThreadUtil.java +++ b/src/main/java/org/well/well/core/util/ThreadUtil.java @@ -11,16 +11,17 @@ * Created by phantomli on 2016/2/17. */ public class ThreadUtil { - public static void excuteMsg(Long id, String msg) throws UnsupportedEncodingException { + public static void excuteMsg(Long id, String msg,String wellCode) throws UnsupportedEncodingException { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); final Long jobId = id; + final String wellcode = wellCode; final String alarmMsg = URLEncoder.encode(msg, "UTF-8"); cachedThreadPool.execute(new Runnable() { @Override public void run() { try { String retMsg = HttpClientUtils.post(Configure.getProperty("sendURL", "") + "?id=" + jobId - + "&msg="+alarmMsg , ""); + + "&msg="+alarmMsg + "&wellCode="+wellcode, ""); Thread.sleep(500); System.out.println("--------工单和告警推送至web后台成功 " + retMsg + ",工单id:" + jobId); } catch (InterruptedException e) { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index a850277..aa1bf4a 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -118,6 +118,31 @@ // return null; // } +// public List getIsAlarmAndJob(String devTypeName, String depId) { +// Long tenantId = null; +// if (StringUtils.isNotBlank(depId)) { +// SysDept sysDept = deptManager.get(Long.valueOf(depId)); +// if (null != sysDept) { +// String tenantStr = sysDept.getTenantId(); +// tenantId = StringUtils.isBlank(tenantStr) ? tenantId : Long.valueOf(tenantStr); +// } +// } +// +// if (null == tenantId) return new ArrayList(); +// try { +// Map paraMap = new HashMap(); +// String sql = "SELECT open_alarm,open_job FROM alarm_level a " + +// "WHERE a.name=:devTypeName LIMIT 1" ; +// paraMap.put("devTypeName", devTypeName); +// paraMap.put("tenantId", tenantId); +// List alarmLevelList = getSession().createSQLQuery(sql).setProperties(paraMap).list(); +// return alarmLevelList; +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return new ArrayList(); +// } + public List getRuleRank(String devCode, String depId) { Long tenantId = null; @@ -132,7 +157,7 @@ if (null == tenantId) return new ArrayList(); try { Map paraMap = new HashMap(); - String sql = "SELECT level,low_value,high_value,name FROM alarm_level_device_veiw a " + + String sql = "SELECT level,low_value,high_value,name, open_alarm,open_job FROM alarm_level_device_veiw a " + "WHERE a.devcode=:devcode AND a.tenant_id=:tenantId" + " ORDER BY name,level"; paraMap.put("devcode", devCode); diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index aba23b8..42686d2 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -83,13 +83,17 @@ String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString());//获取报警阈值 List ruleRankList = new ArrayList(); float rankThresh = 0; + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if (rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -100,9 +104,6 @@ Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { if (Float.valueOf(level) >= (Float.valueOf(rankValue.toString()) / 100 * Float.valueOf(thresh))) { -// LiquidAlarmEnum liquidAlarmEnum=LiquidAlarmEnum.getByIndex( -// String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 6)); -// alarmContent = liquidAlarmEnum!=null?liquidAlarmEnum.getName():alarmContent; alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -113,24 +114,37 @@ if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, alarmContent, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.Liquid.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + AlarmJob alarmJob =null; + if("1".equals(isJob)){ + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, alarmContent, level, device, - devCode, alarmJob.getWellCode(), upTime, alarmContent); + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java index 3623db2..6cb9dfb 100644 --- a/src/main/java/org/well/well/manager/MeterManager.java +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -98,7 +98,8 @@ // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警"); + ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警", busWell != null ? + busWell.getWellCode() : ""); } } else {//未超限 diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index cf5772c..d4245a9 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -103,7 +103,7 @@ alarmContent, gas, device, devCode, alarmJob.getWellCode(), upTime,alarmContent); //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 4482925..8d0a03e 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -36,7 +36,7 @@ @Resource private UserManager userManager; private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); - private static final double constant=0.0153; +// private static final double constant=0.0153; public Map saveData(String devId, String wellCode, String cell, String uptime, String frequency, String dData) throws IOException { @@ -62,40 +62,44 @@ String val = ((JSONObject) jsonArray.get(i)).get("noiseVal").toString(); String freq = ((JSONObject) jsonArray.get(i)).get("noiseFreq").toString(); String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); - val=String.format("%.2f", Double.valueOf(val)); - freq=String.format("%.2f", Double.valueOf(freq)); + val = String.format("%.2f", Double.valueOf(val)); + freq = String.format("%.2f", Double.valueOf(freq)); //1.清离线 deviceManager.clearOffline(devCode); //2.清除设备告警 alarmRecordManager.clearAlarmByNormalData(devCode, "2"); //3.存数据 - saveData(devCode,busWell==null?"":busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 if (i < jsonArray.size() - 1) continue; String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.NoiseDig.toString());//获取报警阈值 - List ruleRankList= new ArrayList(); + List ruleRankList = new ArrayList(); double rankThresh = 0; - if(busWell!=null) ruleRankList= alarmRuleManager.getRuleRank(devCode,busWell.getDeptid()); + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) + if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; - rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh) * constant; + rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Double.valueOf(thresh) : 0) : rankThresh; - if (rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 - String alarmContent= NoiseDigAlarmEnum.OVER_THRESH.getName(); - Integer alarmLevel=0; - if(busWell!=null){ + String alarmContent = NoiseDigAlarmEnum.OVER_THRESH.getName(); + Integer alarmLevel = 0; + if (busWell != null) { // List ruleRankList= alarmRuleManager.getRuleRank(devCode,busWell.getDeptid()); - for(int j=0;j=(Float.valueOf(rankValue.toString())/100*Float.valueOf(thresh) * constant)) { + for (int j = 0; j < ruleRankList.size(); j++) { + Object rankValue = ((Object[]) ruleRankList.get(j))[2]; + if (null != rankValue) { + if (Float.valueOf(val) >= (Float.valueOf(rankValue.toString()) / 100 * Float.valueOf(thresh))) { // NoiseDigAlarmEnum noiseDigAlarmEnum=NoiseDigAlarmEnum.getByIndex( // String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 4)); // alarmContent = noiseDigAlarmEnum!=null?noiseDigAlarmEnum.getName():alarmContent; - alarmLevel=Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -106,24 +110,39 @@ if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1",alarmLevel, alarmContent, - val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime,alarmContent); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.NoiseDig.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, + val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"1"); + AlarmJob alarmJob = null; + if ("1".equals(isJob)) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, + alarmRecordManager.saveData(alarmJob == null ? null : alarmJob.getId(), "1", alarmLevel, alarmContent, val, device, - devCode, alarmJob.getWellCode(), upTime,alarmContent); + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + + ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); } } else {//未超限 @@ -155,12 +174,12 @@ if (null == device) return;//没注册设备舍弃 BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); if (null == alarmJob) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "0"); } - alarmRecordManager.saveData(alarmJob.getId(), "2",null, + alarmRecordManager.saveData(alarmJob.getId(), "2", null, NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), String.valueOf(NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, diff --git a/src/main/java/org/well/well/manager/TempHumiManager.java b/src/main/java/org/well/well/manager/TempHumiManager.java index bccb1c6..94bc029 100644 --- a/src/main/java/org/well/well/manager/TempHumiManager.java +++ b/src/main/java/org/well/well/manager/TempHumiManager.java @@ -80,9 +80,13 @@ //4.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; if (busWell != null) {//获取不到相关联的井,就无法获取告警规则,故不存库 - String alarmContent = "", alarmValue = ""; + String alarmContent = "", alarmValue = "",isAlarm="1",isJob="1"; Integer alarmLevel = 10; List ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0) { + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } //获取温度告警等级 for (int j = 0; j < ruleRankList.size(); j++) { Object rankLowValue = ((Object[]) ruleRankList.get(j))[1]; @@ -127,13 +131,23 @@ } } - if (StringUtils.isNotBlank(alarmContent)) { + if (StringUtils.isNotBlank(alarmContent)&&"1".equals(isAlarm)) { AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.TempHumi.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, TempHumiAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, @@ -141,20 +155,25 @@ } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.TempHumi.toString(),"1"); + AlarmJob alarmJob =null; + if("1".equals(isJob)){ + //1.若开启工单,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, + busWell.getWellCode(), DeviceTypeEnum.TempHumi.toString(),"1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, TempHumiAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), device, - devCode, alarmJob.getWellCode(), upTime, + devCode, busWell.getWellCode(), upTime, alarmContent.substring(0, alarmContent.length() - 1)); // //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), TempHumiAlarmEnum.OVER_THRESH.getName()); + ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, TempHumiAlarmEnum.OVER_THRESH.getName(), + busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/WasteGasManager.java b/src/main/java/org/well/well/manager/WasteGasManager.java index 7cdf037..cffd890 100644 --- a/src/main/java/org/well/well/manager/WasteGasManager.java +++ b/src/main/java/org/well/well/manager/WasteGasManager.java @@ -63,8 +63,14 @@ Integer alarmLevel = 10; String alarmContent = ""; String alarmValue = ""; + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) if (busWell == null) return alarmMap; List ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0) { + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } //获取一氧化碳告警等级 for (int j = 0; j < ruleRankList.size(); j++) { Object rankHighValue = ((Object[]) ruleRankList.get(j))[2]; @@ -145,6 +151,8 @@ alarmMap.put("alarmContent", alarmContent); alarmMap.put("alarmLevel", alarmLevel); alarmMap.put("alarmValue", alarmValue); + alarmMap.put("isAlarm", isAlarm); + alarmMap.put("isJob", isJob); } return alarmMap; } @@ -158,10 +166,10 @@ String O2 = ((JSONObject) jsonArray.get(i)).get("O2").toString(); String H2S = ((JSONObject) jsonArray.get(i)).get("H2S").toString(); String CH4 = ((JSONObject) jsonArray.get(i)).get("CH4").toString(); - CO=String.format("%.2f", Double.valueOf(CO)); - O2=String.format("%.2f", Double.valueOf(O2)); - H2S=String.format("%.2f", Double.valueOf(H2S)); - CH4=String.format("%.2f", Double.valueOf(CH4)); + CO = String.format("%.2f", Double.valueOf(CO)); + O2 = String.format("%.2f", Double.valueOf(O2)); + H2S = String.format("%.2f", Double.valueOf(H2S)); + CH4 = String.format("%.2f", Double.valueOf(CH4)); String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); Boolean isOpen = Boolean.valueOf(((JSONObject) jsonArray.get(i)).get("liquidSwitch").toString()); //1.清离线 @@ -175,16 +183,28 @@ if (i < jsonArray.size() - 1) continue; //获取告警等级 Map alarmMap = getAlarmContent(busWell, devCode, CO, O2, H2S, CH4); - if (alarmMap.size()>0) { + if (alarmMap.size() > 0) { AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); String alarmContent = alarmMap.get("alarmContent").toString(); Integer alarmLevel = Integer.valueOf(alarmMap.get("alarmLevel").toString()); String alarmValue = alarmMap.get("alarmValue").toString(); - if (null != alarmRecord) {//已存在报警 + String isAlarm = alarmMap.get("isAlarm").toString(); + String isJob = alarmMap.get("isJob").toString(); + if (null != alarmRecord && "1".equals(isAlarm)) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.WasteGas.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, WasteGasAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, @@ -192,20 +212,25 @@ } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.WasteGas.toString(),"1"); + AlarmJob alarmJob = null; + if ("1".equals(isJob)) { + //1.开启工单的话,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.WasteGas.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob == null ? null : alarmJob.getId(), "1", alarmLevel, WasteGasAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), device, - devCode, alarmJob.getWellCode(), upTime, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent.substring(0, alarmContent.length() - 1)); //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), WasteGasAlarmEnum.OVER_THRESH.getName()); + ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), WasteGasAlarmEnum.OVER_THRESH.getName(), + busWell != null ? busWell.getWellCode() : ""); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e36e0b5..7e1bbd3 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":0.86,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":60,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":.55,\"humidity\":0.2,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; @@ -142,7 +142,8 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":98,\"datas\":[{\"level\":6.73,\"uptime\":\"20191217161000\"},{\"level\":5.72,\"uptime\":\"20191217162000\"},{\"level\":7.71,\"uptime\":\"20191217163000\"}],\"logTime\":\"20191217160000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/core/util/ThreadUtil.java b/src/main/java/org/well/well/core/util/ThreadUtil.java index 79aede1..f6a50e1 100644 --- a/src/main/java/org/well/well/core/util/ThreadUtil.java +++ b/src/main/java/org/well/well/core/util/ThreadUtil.java @@ -11,16 +11,17 @@ * Created by phantomli on 2016/2/17. */ public class ThreadUtil { - public static void excuteMsg(Long id, String msg) throws UnsupportedEncodingException { + public static void excuteMsg(Long id, String msg,String wellCode) throws UnsupportedEncodingException { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); final Long jobId = id; + final String wellcode = wellCode; final String alarmMsg = URLEncoder.encode(msg, "UTF-8"); cachedThreadPool.execute(new Runnable() { @Override public void run() { try { String retMsg = HttpClientUtils.post(Configure.getProperty("sendURL", "") + "?id=" + jobId - + "&msg="+alarmMsg , ""); + + "&msg="+alarmMsg + "&wellCode="+wellcode, ""); Thread.sleep(500); System.out.println("--------工单和告警推送至web后台成功 " + retMsg + ",工单id:" + jobId); } catch (InterruptedException e) { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index a850277..aa1bf4a 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -118,6 +118,31 @@ // return null; // } +// public List getIsAlarmAndJob(String devTypeName, String depId) { +// Long tenantId = null; +// if (StringUtils.isNotBlank(depId)) { +// SysDept sysDept = deptManager.get(Long.valueOf(depId)); +// if (null != sysDept) { +// String tenantStr = sysDept.getTenantId(); +// tenantId = StringUtils.isBlank(tenantStr) ? tenantId : Long.valueOf(tenantStr); +// } +// } +// +// if (null == tenantId) return new ArrayList(); +// try { +// Map paraMap = new HashMap(); +// String sql = "SELECT open_alarm,open_job FROM alarm_level a " + +// "WHERE a.name=:devTypeName LIMIT 1" ; +// paraMap.put("devTypeName", devTypeName); +// paraMap.put("tenantId", tenantId); +// List alarmLevelList = getSession().createSQLQuery(sql).setProperties(paraMap).list(); +// return alarmLevelList; +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return new ArrayList(); +// } + public List getRuleRank(String devCode, String depId) { Long tenantId = null; @@ -132,7 +157,7 @@ if (null == tenantId) return new ArrayList(); try { Map paraMap = new HashMap(); - String sql = "SELECT level,low_value,high_value,name FROM alarm_level_device_veiw a " + + String sql = "SELECT level,low_value,high_value,name, open_alarm,open_job FROM alarm_level_device_veiw a " + "WHERE a.devcode=:devcode AND a.tenant_id=:tenantId" + " ORDER BY name,level"; paraMap.put("devcode", devCode); diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index aba23b8..42686d2 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -83,13 +83,17 @@ String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString());//获取报警阈值 List ruleRankList = new ArrayList(); float rankThresh = 0; + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if (rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -100,9 +104,6 @@ Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { if (Float.valueOf(level) >= (Float.valueOf(rankValue.toString()) / 100 * Float.valueOf(thresh))) { -// LiquidAlarmEnum liquidAlarmEnum=LiquidAlarmEnum.getByIndex( -// String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 6)); -// alarmContent = liquidAlarmEnum!=null?liquidAlarmEnum.getName():alarmContent; alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -113,24 +114,37 @@ if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, alarmContent, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.Liquid.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + AlarmJob alarmJob =null; + if("1".equals(isJob)){ + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, alarmContent, level, device, - devCode, alarmJob.getWellCode(), upTime, alarmContent); + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java index 3623db2..6cb9dfb 100644 --- a/src/main/java/org/well/well/manager/MeterManager.java +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -98,7 +98,8 @@ // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警"); + ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警", busWell != null ? + busWell.getWellCode() : ""); } } else {//未超限 diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index cf5772c..d4245a9 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -103,7 +103,7 @@ alarmContent, gas, device, devCode, alarmJob.getWellCode(), upTime,alarmContent); //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 4482925..8d0a03e 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -36,7 +36,7 @@ @Resource private UserManager userManager; private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); - private static final double constant=0.0153; +// private static final double constant=0.0153; public Map saveData(String devId, String wellCode, String cell, String uptime, String frequency, String dData) throws IOException { @@ -62,40 +62,44 @@ String val = ((JSONObject) jsonArray.get(i)).get("noiseVal").toString(); String freq = ((JSONObject) jsonArray.get(i)).get("noiseFreq").toString(); String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); - val=String.format("%.2f", Double.valueOf(val)); - freq=String.format("%.2f", Double.valueOf(freq)); + val = String.format("%.2f", Double.valueOf(val)); + freq = String.format("%.2f", Double.valueOf(freq)); //1.清离线 deviceManager.clearOffline(devCode); //2.清除设备告警 alarmRecordManager.clearAlarmByNormalData(devCode, "2"); //3.存数据 - saveData(devCode,busWell==null?"":busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 if (i < jsonArray.size() - 1) continue; String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.NoiseDig.toString());//获取报警阈值 - List ruleRankList= new ArrayList(); + List ruleRankList = new ArrayList(); double rankThresh = 0; - if(busWell!=null) ruleRankList= alarmRuleManager.getRuleRank(devCode,busWell.getDeptid()); + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) + if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; - rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh) * constant; + rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Double.valueOf(thresh) : 0) : rankThresh; - if (rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 - String alarmContent= NoiseDigAlarmEnum.OVER_THRESH.getName(); - Integer alarmLevel=0; - if(busWell!=null){ + String alarmContent = NoiseDigAlarmEnum.OVER_THRESH.getName(); + Integer alarmLevel = 0; + if (busWell != null) { // List ruleRankList= alarmRuleManager.getRuleRank(devCode,busWell.getDeptid()); - for(int j=0;j=(Float.valueOf(rankValue.toString())/100*Float.valueOf(thresh) * constant)) { + for (int j = 0; j < ruleRankList.size(); j++) { + Object rankValue = ((Object[]) ruleRankList.get(j))[2]; + if (null != rankValue) { + if (Float.valueOf(val) >= (Float.valueOf(rankValue.toString()) / 100 * Float.valueOf(thresh))) { // NoiseDigAlarmEnum noiseDigAlarmEnum=NoiseDigAlarmEnum.getByIndex( // String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 4)); // alarmContent = noiseDigAlarmEnum!=null?noiseDigAlarmEnum.getName():alarmContent; - alarmLevel=Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -106,24 +110,39 @@ if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1",alarmLevel, alarmContent, - val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime,alarmContent); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.NoiseDig.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, + val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"1"); + AlarmJob alarmJob = null; + if ("1".equals(isJob)) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, + alarmRecordManager.saveData(alarmJob == null ? null : alarmJob.getId(), "1", alarmLevel, alarmContent, val, device, - devCode, alarmJob.getWellCode(), upTime,alarmContent); + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + + ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); } } else {//未超限 @@ -155,12 +174,12 @@ if (null == device) return;//没注册设备舍弃 BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); if (null == alarmJob) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "0"); } - alarmRecordManager.saveData(alarmJob.getId(), "2",null, + alarmRecordManager.saveData(alarmJob.getId(), "2", null, NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), String.valueOf(NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, diff --git a/src/main/java/org/well/well/manager/TempHumiManager.java b/src/main/java/org/well/well/manager/TempHumiManager.java index bccb1c6..94bc029 100644 --- a/src/main/java/org/well/well/manager/TempHumiManager.java +++ b/src/main/java/org/well/well/manager/TempHumiManager.java @@ -80,9 +80,13 @@ //4.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; if (busWell != null) {//获取不到相关联的井,就无法获取告警规则,故不存库 - String alarmContent = "", alarmValue = ""; + String alarmContent = "", alarmValue = "",isAlarm="1",isJob="1"; Integer alarmLevel = 10; List ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0) { + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } //获取温度告警等级 for (int j = 0; j < ruleRankList.size(); j++) { Object rankLowValue = ((Object[]) ruleRankList.get(j))[1]; @@ -127,13 +131,23 @@ } } - if (StringUtils.isNotBlank(alarmContent)) { + if (StringUtils.isNotBlank(alarmContent)&&"1".equals(isAlarm)) { AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.TempHumi.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, TempHumiAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, @@ -141,20 +155,25 @@ } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.TempHumi.toString(),"1"); + AlarmJob alarmJob =null; + if("1".equals(isJob)){ + //1.若开启工单,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, + busWell.getWellCode(), DeviceTypeEnum.TempHumi.toString(),"1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, TempHumiAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), device, - devCode, alarmJob.getWellCode(), upTime, + devCode, busWell.getWellCode(), upTime, alarmContent.substring(0, alarmContent.length() - 1)); // //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), TempHumiAlarmEnum.OVER_THRESH.getName()); + ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, TempHumiAlarmEnum.OVER_THRESH.getName(), + busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/WasteGasManager.java b/src/main/java/org/well/well/manager/WasteGasManager.java index 7cdf037..cffd890 100644 --- a/src/main/java/org/well/well/manager/WasteGasManager.java +++ b/src/main/java/org/well/well/manager/WasteGasManager.java @@ -63,8 +63,14 @@ Integer alarmLevel = 10; String alarmContent = ""; String alarmValue = ""; + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) if (busWell == null) return alarmMap; List ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0) { + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } //获取一氧化碳告警等级 for (int j = 0; j < ruleRankList.size(); j++) { Object rankHighValue = ((Object[]) ruleRankList.get(j))[2]; @@ -145,6 +151,8 @@ alarmMap.put("alarmContent", alarmContent); alarmMap.put("alarmLevel", alarmLevel); alarmMap.put("alarmValue", alarmValue); + alarmMap.put("isAlarm", isAlarm); + alarmMap.put("isJob", isJob); } return alarmMap; } @@ -158,10 +166,10 @@ String O2 = ((JSONObject) jsonArray.get(i)).get("O2").toString(); String H2S = ((JSONObject) jsonArray.get(i)).get("H2S").toString(); String CH4 = ((JSONObject) jsonArray.get(i)).get("CH4").toString(); - CO=String.format("%.2f", Double.valueOf(CO)); - O2=String.format("%.2f", Double.valueOf(O2)); - H2S=String.format("%.2f", Double.valueOf(H2S)); - CH4=String.format("%.2f", Double.valueOf(CH4)); + CO = String.format("%.2f", Double.valueOf(CO)); + O2 = String.format("%.2f", Double.valueOf(O2)); + H2S = String.format("%.2f", Double.valueOf(H2S)); + CH4 = String.format("%.2f", Double.valueOf(CH4)); String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); Boolean isOpen = Boolean.valueOf(((JSONObject) jsonArray.get(i)).get("liquidSwitch").toString()); //1.清离线 @@ -175,16 +183,28 @@ if (i < jsonArray.size() - 1) continue; //获取告警等级 Map alarmMap = getAlarmContent(busWell, devCode, CO, O2, H2S, CH4); - if (alarmMap.size()>0) { + if (alarmMap.size() > 0) { AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); String alarmContent = alarmMap.get("alarmContent").toString(); Integer alarmLevel = Integer.valueOf(alarmMap.get("alarmLevel").toString()); String alarmValue = alarmMap.get("alarmValue").toString(); - if (null != alarmRecord) {//已存在报警 + String isAlarm = alarmMap.get("isAlarm").toString(); + String isJob = alarmMap.get("isJob").toString(); + if (null != alarmRecord && "1".equals(isAlarm)) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.WasteGas.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, WasteGasAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, @@ -192,20 +212,25 @@ } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.WasteGas.toString(),"1"); + AlarmJob alarmJob = null; + if ("1".equals(isJob)) { + //1.开启工单的话,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.WasteGas.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob == null ? null : alarmJob.getId(), "1", alarmLevel, WasteGasAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), device, - devCode, alarmJob.getWellCode(), upTime, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent.substring(0, alarmContent.length() - 1)); //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), WasteGasAlarmEnum.OVER_THRESH.getName()); + ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), WasteGasAlarmEnum.OVER_THRESH.getName(), + busWell != null ? busWell.getWellCode() : ""); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/WellManager.java b/src/main/java/org/well/well/manager/WellManager.java index 3699d15..23b58fb 100644 --- a/src/main/java/org/well/well/manager/WellManager.java +++ b/src/main/java/org/well/well/manager/WellManager.java @@ -112,7 +112,8 @@ // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "井盖开盖报警", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(),WellAlarmEnum.WellOpenAlarm.getName()); + ThreadUtil.excuteMsg(alarmJob.getId(),WellAlarmEnum.WellOpenAlarm.getName(), + busWell == null ? "" : busWell.getWellCode()); } } } diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e36e0b5..7e1bbd3 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":0.86,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":0.85,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":60,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":.55,\"humidity\":0.2,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; @@ -142,7 +142,8 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":98,\"datas\":[{\"level\":6.73,\"uptime\":\"20191217161000\"},{\"level\":5.72,\"uptime\":\"20191217162000\"},{\"level\":7.71,\"uptime\":\"20191217163000\"}],\"logTime\":\"20191217160000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; - temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"13131313136\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":1.83666,\"noiseFreq\":2040,\"uptime\":\"20191220125700\"}],\"logTime\":\"20191220123131\"},\"ts\":1556184691451}"; +// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/core/util/ThreadUtil.java b/src/main/java/org/well/well/core/util/ThreadUtil.java index 79aede1..f6a50e1 100644 --- a/src/main/java/org/well/well/core/util/ThreadUtil.java +++ b/src/main/java/org/well/well/core/util/ThreadUtil.java @@ -11,16 +11,17 @@ * Created by phantomli on 2016/2/17. */ public class ThreadUtil { - public static void excuteMsg(Long id, String msg) throws UnsupportedEncodingException { + public static void excuteMsg(Long id, String msg,String wellCode) throws UnsupportedEncodingException { ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); final Long jobId = id; + final String wellcode = wellCode; final String alarmMsg = URLEncoder.encode(msg, "UTF-8"); cachedThreadPool.execute(new Runnable() { @Override public void run() { try { String retMsg = HttpClientUtils.post(Configure.getProperty("sendURL", "") + "?id=" + jobId - + "&msg="+alarmMsg , ""); + + "&msg="+alarmMsg + "&wellCode="+wellcode, ""); Thread.sleep(500); System.out.println("--------工单和告警推送至web后台成功 " + retMsg + ",工单id:" + jobId); } catch (InterruptedException e) { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index a850277..aa1bf4a 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -118,6 +118,31 @@ // return null; // } +// public List getIsAlarmAndJob(String devTypeName, String depId) { +// Long tenantId = null; +// if (StringUtils.isNotBlank(depId)) { +// SysDept sysDept = deptManager.get(Long.valueOf(depId)); +// if (null != sysDept) { +// String tenantStr = sysDept.getTenantId(); +// tenantId = StringUtils.isBlank(tenantStr) ? tenantId : Long.valueOf(tenantStr); +// } +// } +// +// if (null == tenantId) return new ArrayList(); +// try { +// Map paraMap = new HashMap(); +// String sql = "SELECT open_alarm,open_job FROM alarm_level a " + +// "WHERE a.name=:devTypeName LIMIT 1" ; +// paraMap.put("devTypeName", devTypeName); +// paraMap.put("tenantId", tenantId); +// List alarmLevelList = getSession().createSQLQuery(sql).setProperties(paraMap).list(); +// return alarmLevelList; +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return new ArrayList(); +// } + public List getRuleRank(String devCode, String depId) { Long tenantId = null; @@ -132,7 +157,7 @@ if (null == tenantId) return new ArrayList(); try { Map paraMap = new HashMap(); - String sql = "SELECT level,low_value,high_value,name FROM alarm_level_device_veiw a " + + String sql = "SELECT level,low_value,high_value,name, open_alarm,open_job FROM alarm_level_device_veiw a " + "WHERE a.devcode=:devcode AND a.tenant_id=:tenantId" + " ORDER BY name,level"; paraMap.put("devcode", devCode); diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index aba23b8..42686d2 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -83,13 +83,17 @@ String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString());//获取报警阈值 List ruleRankList = new ArrayList(); float rankThresh = 0; + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if (rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -100,9 +104,6 @@ Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { if (Float.valueOf(level) >= (Float.valueOf(rankValue.toString()) / 100 * Float.valueOf(thresh))) { -// LiquidAlarmEnum liquidAlarmEnum=LiquidAlarmEnum.getByIndex( -// String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 6)); -// alarmContent = liquidAlarmEnum!=null?liquidAlarmEnum.getName():alarmContent; alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -113,24 +114,37 @@ if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, alarmContent, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.Liquid.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + AlarmJob alarmJob =null; + if("1".equals(isJob)){ + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); + } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, alarmContent, level, device, - devCode, alarmJob.getWellCode(), upTime, alarmContent); + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java index 3623db2..6cb9dfb 100644 --- a/src/main/java/org/well/well/manager/MeterManager.java +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -98,7 +98,8 @@ // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警"); + ThreadUtil.excuteMsg(alarmJob.getId(), "水质超限告警", busWell != null ? + busWell.getWellCode() : ""); } } else {//未超限 diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index cf5772c..d4245a9 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -103,7 +103,7 @@ alarmContent, gas, device, devCode, alarmJob.getWellCode(), upTime,alarmContent); //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 4482925..8d0a03e 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -36,7 +36,7 @@ @Resource private UserManager userManager; private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); - private static final double constant=0.0153; +// private static final double constant=0.0153; public Map saveData(String devId, String wellCode, String cell, String uptime, String frequency, String dData) throws IOException { @@ -62,40 +62,44 @@ String val = ((JSONObject) jsonArray.get(i)).get("noiseVal").toString(); String freq = ((JSONObject) jsonArray.get(i)).get("noiseFreq").toString(); String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); - val=String.format("%.2f", Double.valueOf(val)); - freq=String.format("%.2f", Double.valueOf(freq)); + val = String.format("%.2f", Double.valueOf(val)); + freq = String.format("%.2f", Double.valueOf(freq)); //1.清离线 deviceManager.clearOffline(devCode); //2.清除设备告警 alarmRecordManager.clearAlarmByNormalData(devCode, "2"); //3.存数据 - saveData(devCode,busWell==null?"":busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 if (i < jsonArray.size() - 1) continue; String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.NoiseDig.toString());//获取报警阈值 - List ruleRankList= new ArrayList(); + List ruleRankList = new ArrayList(); double rankThresh = 0; - if(busWell!=null) ruleRankList= alarmRuleManager.getRuleRank(devCode,busWell.getDeptid()); + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) + if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; - rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh) * constant; + rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Double.valueOf(thresh) : 0) : rankThresh; - if (rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 - String alarmContent= NoiseDigAlarmEnum.OVER_THRESH.getName(); - Integer alarmLevel=0; - if(busWell!=null){ + String alarmContent = NoiseDigAlarmEnum.OVER_THRESH.getName(); + Integer alarmLevel = 0; + if (busWell != null) { // List ruleRankList= alarmRuleManager.getRuleRank(devCode,busWell.getDeptid()); - for(int j=0;j=(Float.valueOf(rankValue.toString())/100*Float.valueOf(thresh) * constant)) { + for (int j = 0; j < ruleRankList.size(); j++) { + Object rankValue = ((Object[]) ruleRankList.get(j))[2]; + if (null != rankValue) { + if (Float.valueOf(val) >= (Float.valueOf(rankValue.toString()) / 100 * Float.valueOf(thresh))) { // NoiseDigAlarmEnum noiseDigAlarmEnum=NoiseDigAlarmEnum.getByIndex( // String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 4)); // alarmContent = noiseDigAlarmEnum!=null?noiseDigAlarmEnum.getName():alarmContent; - alarmLevel=Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -106,24 +110,39 @@ if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1",alarmLevel, alarmContent, - val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime,alarmContent); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.NoiseDig.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, + val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"1"); + AlarmJob alarmJob = null; + if ("1".equals(isJob)) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, + alarmRecordManager.saveData(alarmJob == null ? null : alarmJob.getId(), "1", alarmLevel, alarmContent, val, device, - devCode, alarmJob.getWellCode(), upTime,alarmContent); + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + + ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); } } else {//未超限 @@ -155,12 +174,12 @@ if (null == device) return;//没注册设备舍弃 BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); if (null == alarmJob) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "0"); } - alarmRecordManager.saveData(alarmJob.getId(), "2",null, + alarmRecordManager.saveData(alarmJob.getId(), "2", null, NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), String.valueOf(NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, diff --git a/src/main/java/org/well/well/manager/TempHumiManager.java b/src/main/java/org/well/well/manager/TempHumiManager.java index bccb1c6..94bc029 100644 --- a/src/main/java/org/well/well/manager/TempHumiManager.java +++ b/src/main/java/org/well/well/manager/TempHumiManager.java @@ -80,9 +80,13 @@ //4.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; if (busWell != null) {//获取不到相关联的井,就无法获取告警规则,故不存库 - String alarmContent = "", alarmValue = ""; + String alarmContent = "", alarmValue = "",isAlarm="1",isJob="1"; Integer alarmLevel = 10; List ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0) { + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } //获取温度告警等级 for (int j = 0; j < ruleRankList.size(); j++) { Object rankLowValue = ((Object[]) ruleRankList.get(j))[1]; @@ -127,13 +131,23 @@ } } - if (StringUtils.isNotBlank(alarmContent)) { + if (StringUtils.isNotBlank(alarmContent)&&"1".equals(isAlarm)) { AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); if (null != alarmRecord) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.TempHumi.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, TempHumiAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, @@ -141,20 +155,25 @@ } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.TempHumi.toString(),"1"); + AlarmJob alarmJob =null; + if("1".equals(isJob)){ + //1.若开启工单,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, + busWell.getWellCode(), DeviceTypeEnum.TempHumi.toString(),"1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, TempHumiAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), device, - devCode, alarmJob.getWellCode(), upTime, + devCode, busWell.getWellCode(), upTime, alarmContent.substring(0, alarmContent.length() - 1)); // //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), TempHumiAlarmEnum.OVER_THRESH.getName()); + ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, TempHumiAlarmEnum.OVER_THRESH.getName(), + busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/WasteGasManager.java b/src/main/java/org/well/well/manager/WasteGasManager.java index 7cdf037..cffd890 100644 --- a/src/main/java/org/well/well/manager/WasteGasManager.java +++ b/src/main/java/org/well/well/manager/WasteGasManager.java @@ -63,8 +63,14 @@ Integer alarmLevel = 10; String alarmContent = ""; String alarmValue = ""; + String isAlarm = "1";//是否开启报警(1为开启) + String isJob = "1";//是否开启工单(1为开启) if (busWell == null) return alarmMap; List ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0) { + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } //获取一氧化碳告警等级 for (int j = 0; j < ruleRankList.size(); j++) { Object rankHighValue = ((Object[]) ruleRankList.get(j))[2]; @@ -145,6 +151,8 @@ alarmMap.put("alarmContent", alarmContent); alarmMap.put("alarmLevel", alarmLevel); alarmMap.put("alarmValue", alarmValue); + alarmMap.put("isAlarm", isAlarm); + alarmMap.put("isJob", isJob); } return alarmMap; } @@ -158,10 +166,10 @@ String O2 = ((JSONObject) jsonArray.get(i)).get("O2").toString(); String H2S = ((JSONObject) jsonArray.get(i)).get("H2S").toString(); String CH4 = ((JSONObject) jsonArray.get(i)).get("CH4").toString(); - CO=String.format("%.2f", Double.valueOf(CO)); - O2=String.format("%.2f", Double.valueOf(O2)); - H2S=String.format("%.2f", Double.valueOf(H2S)); - CH4=String.format("%.2f", Double.valueOf(CH4)); + CO = String.format("%.2f", Double.valueOf(CO)); + O2 = String.format("%.2f", Double.valueOf(O2)); + H2S = String.format("%.2f", Double.valueOf(H2S)); + CH4 = String.format("%.2f", Double.valueOf(CH4)); String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); Boolean isOpen = Boolean.valueOf(((JSONObject) jsonArray.get(i)).get("liquidSwitch").toString()); //1.清离线 @@ -175,16 +183,28 @@ if (i < jsonArray.size() - 1) continue; //获取告警等级 Map alarmMap = getAlarmContent(busWell, devCode, CO, O2, H2S, CH4); - if (alarmMap.size()>0) { + if (alarmMap.size() > 0) { AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); String alarmContent = alarmMap.get("alarmContent").toString(); Integer alarmLevel = Integer.valueOf(alarmMap.get("alarmLevel").toString()); String alarmValue = alarmMap.get("alarmValue").toString(); - if (null != alarmRecord) {//已存在报警 + String isAlarm = alarmMap.get("isAlarm").toString(); + String isJob = alarmMap.get("isJob").toString(); + if (null != alarmRecord && "1".equals(isAlarm)) {//已存在报警 //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); - //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1", alarmLevel, + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.WasteGas.toString(), "1"); + jobID=alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); + }else if("0".equals(isJob)){//不需要产生工单时 + jobID=null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, WasteGasAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, @@ -192,20 +212,25 @@ } else {//不存在上一条报警时 Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.WasteGas.toString(),"1"); + AlarmJob alarmJob = null; + if ("1".equals(isJob)) { + //1.开启工单的话,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.WasteGas.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmRecordManager.saveData(alarmJob == null ? null : alarmJob.getId(), "1", alarmLevel, WasteGasAlarmEnum.OVER_THRESH.getName(), alarmValue.substring(0, alarmValue.length() - 1), device, - devCode, alarmJob.getWellCode(), upTime, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent.substring(0, alarmContent.length() - 1)); //3.toDo:向app推送报警消息 // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(), WasteGasAlarmEnum.OVER_THRESH.getName()); + ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), WasteGasAlarmEnum.OVER_THRESH.getName(), + busWell != null ? busWell.getWellCode() : ""); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/WellManager.java b/src/main/java/org/well/well/manager/WellManager.java index 3699d15..23b58fb 100644 --- a/src/main/java/org/well/well/manager/WellManager.java +++ b/src/main/java/org/well/well/manager/WellManager.java @@ -112,7 +112,8 @@ // List cids = userManager.getClients(busWell); // if (cids.size() > 0) // PushList.pushToUser(cids, "井盖开盖报警", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(),WellAlarmEnum.WellOpenAlarm.getName()); + ThreadUtil.excuteMsg(alarmJob.getId(),WellAlarmEnum.WellOpenAlarm.getName(), + busWell == null ? "" : busWell.getWellCode()); } } } diff --git a/src/main/resources/wellSensor/application.properties b/src/main/resources/wellSensor/application.properties index b942812..cb0b73c 100644 --- a/src/main/resources/wellSensor/application.properties +++ b/src/main/resources/wellSensor/application.properties @@ -166,6 +166,6 @@ # ============================================================================ # 告警、工单推送地址 # ============================================================================ -sendURL = http://119.254.103.80:14537/job/updateSinkJob +sendURL = http://localhost:14537/job/updateSinkJob