diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e08aa6f..412d589 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -170,12 +170,13 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Tube\",\"devCode\":\"342020030014\",\"mBody\":{\"cell\":15,\"pci\":94,\"rsrp\":-103,\"snr\":7,\"datas\":[{\"gas\":0.0,\"uptime\":\"20211128000000\"}],\"logTime\":\"20211210174648\",\"bType\":\"TubeData\"},\"ts\":1639129608475}"; // // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050010\",\"mBody\":{\"cell\":91,\"pci\":279,\"rsrp\":-105,\"snr\":10,\"datas\":[{\"gas\":40.0,\"uptime\":\"20220113175000\"},{\"liquid\":1040.07336,\"uptime\":\"20220113175000\"}],\"logTime\":\"20220113175144\",\"bType\":\"LGData\"},\"ts\":1642067504321}"; - temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":55.6,\"uptime\":\"20220513020200\"},{\"gas\":40.599999964,\"uptime\":\"20220513030200\"},{\"liquid\":1108.392,\"uptime\":\"20220513020200\"},{\"liquid\":1112.47058,\"uptime\":\"20220513030200\"}],\"logTime\":\"20220513030400\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; + temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":0.6,\"uptime\":\"20230517154056\"},{\"gas\":0.599999964,\"uptime\":\"20230517154056\"},{\"liquid\":1108.392,\"uptime\":\"20230517154056\"},{\"liquid\":1112.47058,\"uptime\":\"20230517154056\"}],\"logTime\":\"20230517154056\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); // for(String dd:arr){ // resp.process(dd); // } +// resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e08aa6f..412d589 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -170,12 +170,13 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Tube\",\"devCode\":\"342020030014\",\"mBody\":{\"cell\":15,\"pci\":94,\"rsrp\":-103,\"snr\":7,\"datas\":[{\"gas\":0.0,\"uptime\":\"20211128000000\"}],\"logTime\":\"20211210174648\",\"bType\":\"TubeData\"},\"ts\":1639129608475}"; // // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050010\",\"mBody\":{\"cell\":91,\"pci\":279,\"rsrp\":-105,\"snr\":10,\"datas\":[{\"gas\":40.0,\"uptime\":\"20220113175000\"},{\"liquid\":1040.07336,\"uptime\":\"20220113175000\"}],\"logTime\":\"20220113175144\",\"bType\":\"LGData\"},\"ts\":1642067504321}"; - temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":55.6,\"uptime\":\"20220513020200\"},{\"gas\":40.599999964,\"uptime\":\"20220513030200\"},{\"liquid\":1108.392,\"uptime\":\"20220513020200\"},{\"liquid\":1112.47058,\"uptime\":\"20220513030200\"}],\"logTime\":\"20220513030400\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; + temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":0.6,\"uptime\":\"20230517154056\"},{\"gas\":0.599999964,\"uptime\":\"20230517154056\"},{\"liquid\":1108.392,\"uptime\":\"20230517154056\"},{\"liquid\":1112.47058,\"uptime\":\"20230517154056\"}],\"logTime\":\"20230517154056\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); // for(String dd:arr){ // resp.process(dd); // } +// resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/domain/ConfigDeptPermission.java b/src/main/java/org/well/well/domain/ConfigDeptPermission.java new file mode 100644 index 0000000..d8a8c86 --- /dev/null +++ b/src/main/java/org/well/well/domain/ConfigDeptPermission.java @@ -0,0 +1,187 @@ +package org.well.well.domain; + +import javax.persistence.*; + +/** + * @author cz + */ +@Entity +@Table(name = "config_dept_permission") +public class ConfigDeptPermission { + + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @Id + @Column(name = "ID") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + /** + * 部门编号 + */ + @Column(name ="DEPTID") + private Long deptid; + + /** + * 通讯方式 + */ + @Column(name ="COMMUNICATION") + private String communication; + + /** + * 点位类型 + */ + @Column(name ="WELL_TYPE") + private String wellType; + + + /** + * 设备类型 + */ + @Column(name ="DEVICE_TYPE") + private String deviceType; + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="AREA") + private String area; + + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="MAP") + private String MAP; + + /** + * 精度 + */ + @Column(name ="LNG") + private String LNG; + + public Long getId() { + return id; + } + + public Long getDeptid() { + return deptid; + } + + public String getCommunication() { + return communication; + } + + public String getWellType() { + return wellType; + } + + public String getDeviceType() { + return deviceType; + } + + public String getArea() { + return area; + } + + public String getMAP() { + return MAP; + } + + public String getLNG() { + return LNG; + } + + public String getLAT() { + return LAT; + } + + public String getTels() { + return tels; + } + + public String getSender() { + return sender; + } + + /** + * 维度 + */ + @Column(name ="LAT") + private String LAT; + /** + * 手机号,支持多个 + */ + @Column(name ="TELS") + private String tels; + + public void setId(Long id) { + this.id = id; + } + + public void setDeptid(Long deptid) { + this.deptid = deptid; + } + + public void setCommunication(String communication) { + this.communication = communication; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public void setArea(String area) { + this.area = area; + } + + public void setMAP(String MAP) { + this.MAP = MAP; + } + + public void setLNG(String LNG) { + this.LNG = LNG; + } + + public void setLAT(String LAT) { + this.LAT = LAT; + } + + public void setTels(String tels) { + this.tels = tels; + } + + public void setSender(String sender) { + this.sender = sender; + } + + /** + * 发送方 + */ + @Column(name ="SENDER") + private String sender; + + @Override + public String toString() { + return "ConfigDeptPermission{" + + "id=" + id + + ", deptid=" + deptid + + ", communication=" + communication + + ", wellType=" + wellType + + ", deviceType=" + deviceType + + ", area=" + area + + ", MAP=" + MAP + + ", LNG=" + LNG + + ", LAT=" + LAT + + ", tels=" + tels + + ", sender=" + sender + + '}'; + } +} diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e08aa6f..412d589 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -170,12 +170,13 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Tube\",\"devCode\":\"342020030014\",\"mBody\":{\"cell\":15,\"pci\":94,\"rsrp\":-103,\"snr\":7,\"datas\":[{\"gas\":0.0,\"uptime\":\"20211128000000\"}],\"logTime\":\"20211210174648\",\"bType\":\"TubeData\"},\"ts\":1639129608475}"; // // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050010\",\"mBody\":{\"cell\":91,\"pci\":279,\"rsrp\":-105,\"snr\":10,\"datas\":[{\"gas\":40.0,\"uptime\":\"20220113175000\"},{\"liquid\":1040.07336,\"uptime\":\"20220113175000\"}],\"logTime\":\"20220113175144\",\"bType\":\"LGData\"},\"ts\":1642067504321}"; - temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":55.6,\"uptime\":\"20220513020200\"},{\"gas\":40.599999964,\"uptime\":\"20220513030200\"},{\"liquid\":1108.392,\"uptime\":\"20220513020200\"},{\"liquid\":1112.47058,\"uptime\":\"20220513030200\"}],\"logTime\":\"20220513030400\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; + temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":0.6,\"uptime\":\"20230517154056\"},{\"gas\":0.599999964,\"uptime\":\"20230517154056\"},{\"liquid\":1108.392,\"uptime\":\"20230517154056\"},{\"liquid\":1112.47058,\"uptime\":\"20230517154056\"}],\"logTime\":\"20230517154056\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); // for(String dd:arr){ // resp.process(dd); // } +// resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/domain/ConfigDeptPermission.java b/src/main/java/org/well/well/domain/ConfigDeptPermission.java new file mode 100644 index 0000000..d8a8c86 --- /dev/null +++ b/src/main/java/org/well/well/domain/ConfigDeptPermission.java @@ -0,0 +1,187 @@ +package org.well.well.domain; + +import javax.persistence.*; + +/** + * @author cz + */ +@Entity +@Table(name = "config_dept_permission") +public class ConfigDeptPermission { + + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @Id + @Column(name = "ID") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + /** + * 部门编号 + */ + @Column(name ="DEPTID") + private Long deptid; + + /** + * 通讯方式 + */ + @Column(name ="COMMUNICATION") + private String communication; + + /** + * 点位类型 + */ + @Column(name ="WELL_TYPE") + private String wellType; + + + /** + * 设备类型 + */ + @Column(name ="DEVICE_TYPE") + private String deviceType; + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="AREA") + private String area; + + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="MAP") + private String MAP; + + /** + * 精度 + */ + @Column(name ="LNG") + private String LNG; + + public Long getId() { + return id; + } + + public Long getDeptid() { + return deptid; + } + + public String getCommunication() { + return communication; + } + + public String getWellType() { + return wellType; + } + + public String getDeviceType() { + return deviceType; + } + + public String getArea() { + return area; + } + + public String getMAP() { + return MAP; + } + + public String getLNG() { + return LNG; + } + + public String getLAT() { + return LAT; + } + + public String getTels() { + return tels; + } + + public String getSender() { + return sender; + } + + /** + * 维度 + */ + @Column(name ="LAT") + private String LAT; + /** + * 手机号,支持多个 + */ + @Column(name ="TELS") + private String tels; + + public void setId(Long id) { + this.id = id; + } + + public void setDeptid(Long deptid) { + this.deptid = deptid; + } + + public void setCommunication(String communication) { + this.communication = communication; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public void setArea(String area) { + this.area = area; + } + + public void setMAP(String MAP) { + this.MAP = MAP; + } + + public void setLNG(String LNG) { + this.LNG = LNG; + } + + public void setLAT(String LAT) { + this.LAT = LAT; + } + + public void setTels(String tels) { + this.tels = tels; + } + + public void setSender(String sender) { + this.sender = sender; + } + + /** + * 发送方 + */ + @Column(name ="SENDER") + private String sender; + + @Override + public String toString() { + return "ConfigDeptPermission{" + + "id=" + id + + ", deptid=" + deptid + + ", communication=" + communication + + ", wellType=" + wellType + + ", deviceType=" + deviceType + + ", area=" + area + + ", MAP=" + MAP + + ", LNG=" + LNG + + ", LAT=" + LAT + + ", tels=" + tels + + ", sender=" + sender + + '}'; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index f8e83d0..3a65b0d 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -39,6 +39,24 @@ return getSession().createCriteria(Device.class); } + + public void updateAlarmJobById(Long id, String message) { + try { + Criteria criteria = getSession().createCriteria(AlarmJob.class); + criteria.add(Restrictions.eq("id", id)); + criteria.add(Restrictions.in("jobStatus", new String[]{"0", "1", "2"})); + List alarmJobList = criteria.list(); + for (AlarmJob alarmJob : alarmJobList) { + alarmJob.setJobStatus("3"); + alarmJob.setHandleJobTime(new Date()); + alarmJob.setHandleMessage(message); + save(alarmJob); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + public void updateAlarmJobByDevCode(String devcode, String message) { try { Criteria criteria = getSession().createCriteria(AlarmJob.class); diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e08aa6f..412d589 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -170,12 +170,13 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Tube\",\"devCode\":\"342020030014\",\"mBody\":{\"cell\":15,\"pci\":94,\"rsrp\":-103,\"snr\":7,\"datas\":[{\"gas\":0.0,\"uptime\":\"20211128000000\"}],\"logTime\":\"20211210174648\",\"bType\":\"TubeData\"},\"ts\":1639129608475}"; // // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050010\",\"mBody\":{\"cell\":91,\"pci\":279,\"rsrp\":-105,\"snr\":10,\"datas\":[{\"gas\":40.0,\"uptime\":\"20220113175000\"},{\"liquid\":1040.07336,\"uptime\":\"20220113175000\"}],\"logTime\":\"20220113175144\",\"bType\":\"LGData\"},\"ts\":1642067504321}"; - temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":55.6,\"uptime\":\"20220513020200\"},{\"gas\":40.599999964,\"uptime\":\"20220513030200\"},{\"liquid\":1108.392,\"uptime\":\"20220513020200\"},{\"liquid\":1112.47058,\"uptime\":\"20220513030200\"}],\"logTime\":\"20220513030400\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; + temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":0.6,\"uptime\":\"20230517154056\"},{\"gas\":0.599999964,\"uptime\":\"20230517154056\"},{\"liquid\":1108.392,\"uptime\":\"20230517154056\"},{\"liquid\":1112.47058,\"uptime\":\"20230517154056\"}],\"logTime\":\"20230517154056\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); // for(String dd:arr){ // resp.process(dd); // } +// resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/domain/ConfigDeptPermission.java b/src/main/java/org/well/well/domain/ConfigDeptPermission.java new file mode 100644 index 0000000..d8a8c86 --- /dev/null +++ b/src/main/java/org/well/well/domain/ConfigDeptPermission.java @@ -0,0 +1,187 @@ +package org.well.well.domain; + +import javax.persistence.*; + +/** + * @author cz + */ +@Entity +@Table(name = "config_dept_permission") +public class ConfigDeptPermission { + + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @Id + @Column(name = "ID") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + /** + * 部门编号 + */ + @Column(name ="DEPTID") + private Long deptid; + + /** + * 通讯方式 + */ + @Column(name ="COMMUNICATION") + private String communication; + + /** + * 点位类型 + */ + @Column(name ="WELL_TYPE") + private String wellType; + + + /** + * 设备类型 + */ + @Column(name ="DEVICE_TYPE") + private String deviceType; + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="AREA") + private String area; + + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="MAP") + private String MAP; + + /** + * 精度 + */ + @Column(name ="LNG") + private String LNG; + + public Long getId() { + return id; + } + + public Long getDeptid() { + return deptid; + } + + public String getCommunication() { + return communication; + } + + public String getWellType() { + return wellType; + } + + public String getDeviceType() { + return deviceType; + } + + public String getArea() { + return area; + } + + public String getMAP() { + return MAP; + } + + public String getLNG() { + return LNG; + } + + public String getLAT() { + return LAT; + } + + public String getTels() { + return tels; + } + + public String getSender() { + return sender; + } + + /** + * 维度 + */ + @Column(name ="LAT") + private String LAT; + /** + * 手机号,支持多个 + */ + @Column(name ="TELS") + private String tels; + + public void setId(Long id) { + this.id = id; + } + + public void setDeptid(Long deptid) { + this.deptid = deptid; + } + + public void setCommunication(String communication) { + this.communication = communication; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public void setArea(String area) { + this.area = area; + } + + public void setMAP(String MAP) { + this.MAP = MAP; + } + + public void setLNG(String LNG) { + this.LNG = LNG; + } + + public void setLAT(String LAT) { + this.LAT = LAT; + } + + public void setTels(String tels) { + this.tels = tels; + } + + public void setSender(String sender) { + this.sender = sender; + } + + /** + * 发送方 + */ + @Column(name ="SENDER") + private String sender; + + @Override + public String toString() { + return "ConfigDeptPermission{" + + "id=" + id + + ", deptid=" + deptid + + ", communication=" + communication + + ", wellType=" + wellType + + ", deviceType=" + deviceType + + ", area=" + area + + ", MAP=" + MAP + + ", LNG=" + LNG + + ", LAT=" + LAT + + ", tels=" + tels + + ", sender=" + sender + + '}'; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index f8e83d0..3a65b0d 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -39,6 +39,24 @@ return getSession().createCriteria(Device.class); } + + public void updateAlarmJobById(Long id, String message) { + try { + Criteria criteria = getSession().createCriteria(AlarmJob.class); + criteria.add(Restrictions.eq("id", id)); + criteria.add(Restrictions.in("jobStatus", new String[]{"0", "1", "2"})); + List alarmJobList = criteria.list(); + for (AlarmJob alarmJob : alarmJobList) { + alarmJob.setJobStatus("3"); + alarmJob.setHandleJobTime(new Date()); + alarmJob.setHandleMessage(message); + save(alarmJob); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + public void updateAlarmJobByDevCode(String devcode, String message) { try { Criteria criteria = getSession().createCriteria(AlarmJob.class); diff --git a/src/main/java/org/well/well/manager/AlarmRecordManager.java b/src/main/java/org/well/well/manager/AlarmRecordManager.java index 26c55ef..38e4c27 100644 --- a/src/main/java/org/well/well/manager/AlarmRecordManager.java +++ b/src/main/java/org/well/well/manager/AlarmRecordManager.java @@ -66,6 +66,30 @@ } } + public void clearAlarmByAlarmContent(String devCode,String alarmType ,String alarmContent) {//根据正常数据清除报警 + + + try { + String status = alarmStatusArr[3]; + String hql = "update AlarmRecord set STATUS=:status " + + "where STATUS = " + alarmStatusArr[1] + + " and deviceCode=:deviceCode" + + " and alarmContent=:alarmContent"; + if (alarmTypeArr[0].equals(alarmType)) {//阈值报警 + hql += " and alarmType = " + alarmTypeArr[0]; + } else if (alarmTypeArr[1].equals(alarmType)) {//设备本身报警 + hql += " and alarmType =" + alarmTypeArr[1]; + } + Map map = new HashMap(); + map.put("status", status); + map.put("deviceCode", devCode); + map.put("alarmContent", alarmContent); + batchUpdate(hql, map); + } catch (Exception e) { + e.printStackTrace(); + } + } + public void clearAlarmByNormalData(String devCode, String alarmType) {//根据正常数据清除报警 @@ -101,12 +125,18 @@ } - public AlarmRecord getDeviceAlarm(String devCode, String alarmValue) {//获取设备本身报警消息(正在告警) + /** + * 查询工单编号,主要用于处理相同设备编号的燃气和液体 + * @param devCode + * @param alarmContent + * @return + */ + public AlarmRecord getDeviceAlarm(String devCode, String alarmContent) {//获取设备本身报警消息(正在告警) Criteria criteria = getSession().createCriteria(AlarmRecord.class); criteria.add(Restrictions.eq("deviceCode", devCode)); - criteria.add(Restrictions.eq("alarmType", alarmTypeArr[1])); - criteria.add(Restrictions.eq("alarmValue", alarmValue)); + criteria.add(Restrictions.eq("alarmType", alarmTypeArr[0])); + criteria.add(Restrictions.eq("alarmContent", alarmContent)); criteria.add(Restrictions.eq("status", alarmStatusArr[1])); List alarmRecordList = criteria.list(); return alarmRecordList != null && alarmRecordList.size() > 0 ? diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e08aa6f..412d589 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -170,12 +170,13 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Tube\",\"devCode\":\"342020030014\",\"mBody\":{\"cell\":15,\"pci\":94,\"rsrp\":-103,\"snr\":7,\"datas\":[{\"gas\":0.0,\"uptime\":\"20211128000000\"}],\"logTime\":\"20211210174648\",\"bType\":\"TubeData\"},\"ts\":1639129608475}"; // // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050010\",\"mBody\":{\"cell\":91,\"pci\":279,\"rsrp\":-105,\"snr\":10,\"datas\":[{\"gas\":40.0,\"uptime\":\"20220113175000\"},{\"liquid\":1040.07336,\"uptime\":\"20220113175000\"}],\"logTime\":\"20220113175144\",\"bType\":\"LGData\"},\"ts\":1642067504321}"; - temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":55.6,\"uptime\":\"20220513020200\"},{\"gas\":40.599999964,\"uptime\":\"20220513030200\"},{\"liquid\":1108.392,\"uptime\":\"20220513020200\"},{\"liquid\":1112.47058,\"uptime\":\"20220513030200\"}],\"logTime\":\"20220513030400\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; + temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":0.6,\"uptime\":\"20230517154056\"},{\"gas\":0.599999964,\"uptime\":\"20230517154056\"},{\"liquid\":1108.392,\"uptime\":\"20230517154056\"},{\"liquid\":1112.47058,\"uptime\":\"20230517154056\"}],\"logTime\":\"20230517154056\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); // for(String dd:arr){ // resp.process(dd); // } +// resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/domain/ConfigDeptPermission.java b/src/main/java/org/well/well/domain/ConfigDeptPermission.java new file mode 100644 index 0000000..d8a8c86 --- /dev/null +++ b/src/main/java/org/well/well/domain/ConfigDeptPermission.java @@ -0,0 +1,187 @@ +package org.well.well.domain; + +import javax.persistence.*; + +/** + * @author cz + */ +@Entity +@Table(name = "config_dept_permission") +public class ConfigDeptPermission { + + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @Id + @Column(name = "ID") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + /** + * 部门编号 + */ + @Column(name ="DEPTID") + private Long deptid; + + /** + * 通讯方式 + */ + @Column(name ="COMMUNICATION") + private String communication; + + /** + * 点位类型 + */ + @Column(name ="WELL_TYPE") + private String wellType; + + + /** + * 设备类型 + */ + @Column(name ="DEVICE_TYPE") + private String deviceType; + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="AREA") + private String area; + + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="MAP") + private String MAP; + + /** + * 精度 + */ + @Column(name ="LNG") + private String LNG; + + public Long getId() { + return id; + } + + public Long getDeptid() { + return deptid; + } + + public String getCommunication() { + return communication; + } + + public String getWellType() { + return wellType; + } + + public String getDeviceType() { + return deviceType; + } + + public String getArea() { + return area; + } + + public String getMAP() { + return MAP; + } + + public String getLNG() { + return LNG; + } + + public String getLAT() { + return LAT; + } + + public String getTels() { + return tels; + } + + public String getSender() { + return sender; + } + + /** + * 维度 + */ + @Column(name ="LAT") + private String LAT; + /** + * 手机号,支持多个 + */ + @Column(name ="TELS") + private String tels; + + public void setId(Long id) { + this.id = id; + } + + public void setDeptid(Long deptid) { + this.deptid = deptid; + } + + public void setCommunication(String communication) { + this.communication = communication; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public void setArea(String area) { + this.area = area; + } + + public void setMAP(String MAP) { + this.MAP = MAP; + } + + public void setLNG(String LNG) { + this.LNG = LNG; + } + + public void setLAT(String LAT) { + this.LAT = LAT; + } + + public void setTels(String tels) { + this.tels = tels; + } + + public void setSender(String sender) { + this.sender = sender; + } + + /** + * 发送方 + */ + @Column(name ="SENDER") + private String sender; + + @Override + public String toString() { + return "ConfigDeptPermission{" + + "id=" + id + + ", deptid=" + deptid + + ", communication=" + communication + + ", wellType=" + wellType + + ", deviceType=" + deviceType + + ", area=" + area + + ", MAP=" + MAP + + ", LNG=" + LNG + + ", LAT=" + LAT + + ", tels=" + tels + + ", sender=" + sender + + '}'; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index f8e83d0..3a65b0d 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -39,6 +39,24 @@ return getSession().createCriteria(Device.class); } + + public void updateAlarmJobById(Long id, String message) { + try { + Criteria criteria = getSession().createCriteria(AlarmJob.class); + criteria.add(Restrictions.eq("id", id)); + criteria.add(Restrictions.in("jobStatus", new String[]{"0", "1", "2"})); + List alarmJobList = criteria.list(); + for (AlarmJob alarmJob : alarmJobList) { + alarmJob.setJobStatus("3"); + alarmJob.setHandleJobTime(new Date()); + alarmJob.setHandleMessage(message); + save(alarmJob); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + public void updateAlarmJobByDevCode(String devcode, String message) { try { Criteria criteria = getSession().createCriteria(AlarmJob.class); diff --git a/src/main/java/org/well/well/manager/AlarmRecordManager.java b/src/main/java/org/well/well/manager/AlarmRecordManager.java index 26c55ef..38e4c27 100644 --- a/src/main/java/org/well/well/manager/AlarmRecordManager.java +++ b/src/main/java/org/well/well/manager/AlarmRecordManager.java @@ -66,6 +66,30 @@ } } + public void clearAlarmByAlarmContent(String devCode,String alarmType ,String alarmContent) {//根据正常数据清除报警 + + + try { + String status = alarmStatusArr[3]; + String hql = "update AlarmRecord set STATUS=:status " + + "where STATUS = " + alarmStatusArr[1] + + " and deviceCode=:deviceCode" + + " and alarmContent=:alarmContent"; + if (alarmTypeArr[0].equals(alarmType)) {//阈值报警 + hql += " and alarmType = " + alarmTypeArr[0]; + } else if (alarmTypeArr[1].equals(alarmType)) {//设备本身报警 + hql += " and alarmType =" + alarmTypeArr[1]; + } + Map map = new HashMap(); + map.put("status", status); + map.put("deviceCode", devCode); + map.put("alarmContent", alarmContent); + batchUpdate(hql, map); + } catch (Exception e) { + e.printStackTrace(); + } + } + public void clearAlarmByNormalData(String devCode, String alarmType) {//根据正常数据清除报警 @@ -101,12 +125,18 @@ } - public AlarmRecord getDeviceAlarm(String devCode, String alarmValue) {//获取设备本身报警消息(正在告警) + /** + * 查询工单编号,主要用于处理相同设备编号的燃气和液体 + * @param devCode + * @param alarmContent + * @return + */ + public AlarmRecord getDeviceAlarm(String devCode, String alarmContent) {//获取设备本身报警消息(正在告警) Criteria criteria = getSession().createCriteria(AlarmRecord.class); criteria.add(Restrictions.eq("deviceCode", devCode)); - criteria.add(Restrictions.eq("alarmType", alarmTypeArr[1])); - criteria.add(Restrictions.eq("alarmValue", alarmValue)); + criteria.add(Restrictions.eq("alarmType", alarmTypeArr[0])); + criteria.add(Restrictions.eq("alarmContent", alarmContent)); criteria.add(Restrictions.eq("status", alarmStatusArr[1])); List alarmRecordList = criteria.list(); return alarmRecordList != null && alarmRecordList.size() > 0 ? diff --git a/src/main/java/org/well/well/manager/BusWellManager.java b/src/main/java/org/well/well/manager/BusWellManager.java index 40e045b..a85e583 100644 --- a/src/main/java/org/well/well/manager/BusWellManager.java +++ b/src/main/java/org/well/well/manager/BusWellManager.java @@ -1,13 +1,18 @@ package org.well.well.manager; +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; +import org.well.well.domain.ConfigDeptPermission; import org.well.well.domain.Device; import org.well.well.domain.DeviceWell; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; @Service public class BusWellManager extends HibernateEntityDao { @@ -32,4 +37,15 @@ return null; } + public ConfigDeptPermission getConfigDeptPermission(String deptId){ + if(StringUtils.isEmpty(deptId)){ + return null; + } + Criteria criteria = getSession().createCriteria(ConfigDeptPermission.class); + criteria.add(Restrictions.eq("deptid", Long.valueOf(deptId))); + List configDeptPermissionList = criteria.list(); + return configDeptPermissionList != null && configDeptPermissionList.size() > 0 ? + configDeptPermissionList.get(0) : null; + } + } \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e08aa6f..412d589 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -170,12 +170,13 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Tube\",\"devCode\":\"342020030014\",\"mBody\":{\"cell\":15,\"pci\":94,\"rsrp\":-103,\"snr\":7,\"datas\":[{\"gas\":0.0,\"uptime\":\"20211128000000\"}],\"logTime\":\"20211210174648\",\"bType\":\"TubeData\"},\"ts\":1639129608475}"; // // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050010\",\"mBody\":{\"cell\":91,\"pci\":279,\"rsrp\":-105,\"snr\":10,\"datas\":[{\"gas\":40.0,\"uptime\":\"20220113175000\"},{\"liquid\":1040.07336,\"uptime\":\"20220113175000\"}],\"logTime\":\"20220113175144\",\"bType\":\"LGData\"},\"ts\":1642067504321}"; - temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":55.6,\"uptime\":\"20220513020200\"},{\"gas\":40.599999964,\"uptime\":\"20220513030200\"},{\"liquid\":1108.392,\"uptime\":\"20220513020200\"},{\"liquid\":1112.47058,\"uptime\":\"20220513030200\"}],\"logTime\":\"20220513030400\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; + temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":0.6,\"uptime\":\"20230517154056\"},{\"gas\":0.599999964,\"uptime\":\"20230517154056\"},{\"liquid\":1108.392,\"uptime\":\"20230517154056\"},{\"liquid\":1112.47058,\"uptime\":\"20230517154056\"}],\"logTime\":\"20230517154056\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); // for(String dd:arr){ // resp.process(dd); // } +// resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/domain/ConfigDeptPermission.java b/src/main/java/org/well/well/domain/ConfigDeptPermission.java new file mode 100644 index 0000000..d8a8c86 --- /dev/null +++ b/src/main/java/org/well/well/domain/ConfigDeptPermission.java @@ -0,0 +1,187 @@ +package org.well.well.domain; + +import javax.persistence.*; + +/** + * @author cz + */ +@Entity +@Table(name = "config_dept_permission") +public class ConfigDeptPermission { + + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @Id + @Column(name = "ID") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + /** + * 部门编号 + */ + @Column(name ="DEPTID") + private Long deptid; + + /** + * 通讯方式 + */ + @Column(name ="COMMUNICATION") + private String communication; + + /** + * 点位类型 + */ + @Column(name ="WELL_TYPE") + private String wellType; + + + /** + * 设备类型 + */ + @Column(name ="DEVICE_TYPE") + private String deviceType; + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="AREA") + private String area; + + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="MAP") + private String MAP; + + /** + * 精度 + */ + @Column(name ="LNG") + private String LNG; + + public Long getId() { + return id; + } + + public Long getDeptid() { + return deptid; + } + + public String getCommunication() { + return communication; + } + + public String getWellType() { + return wellType; + } + + public String getDeviceType() { + return deviceType; + } + + public String getArea() { + return area; + } + + public String getMAP() { + return MAP; + } + + public String getLNG() { + return LNG; + } + + public String getLAT() { + return LAT; + } + + public String getTels() { + return tels; + } + + public String getSender() { + return sender; + } + + /** + * 维度 + */ + @Column(name ="LAT") + private String LAT; + /** + * 手机号,支持多个 + */ + @Column(name ="TELS") + private String tels; + + public void setId(Long id) { + this.id = id; + } + + public void setDeptid(Long deptid) { + this.deptid = deptid; + } + + public void setCommunication(String communication) { + this.communication = communication; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public void setArea(String area) { + this.area = area; + } + + public void setMAP(String MAP) { + this.MAP = MAP; + } + + public void setLNG(String LNG) { + this.LNG = LNG; + } + + public void setLAT(String LAT) { + this.LAT = LAT; + } + + public void setTels(String tels) { + this.tels = tels; + } + + public void setSender(String sender) { + this.sender = sender; + } + + /** + * 发送方 + */ + @Column(name ="SENDER") + private String sender; + + @Override + public String toString() { + return "ConfigDeptPermission{" + + "id=" + id + + ", deptid=" + deptid + + ", communication=" + communication + + ", wellType=" + wellType + + ", deviceType=" + deviceType + + ", area=" + area + + ", MAP=" + MAP + + ", LNG=" + LNG + + ", LAT=" + LAT + + ", tels=" + tels + + ", sender=" + sender + + '}'; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index f8e83d0..3a65b0d 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -39,6 +39,24 @@ return getSession().createCriteria(Device.class); } + + public void updateAlarmJobById(Long id, String message) { + try { + Criteria criteria = getSession().createCriteria(AlarmJob.class); + criteria.add(Restrictions.eq("id", id)); + criteria.add(Restrictions.in("jobStatus", new String[]{"0", "1", "2"})); + List alarmJobList = criteria.list(); + for (AlarmJob alarmJob : alarmJobList) { + alarmJob.setJobStatus("3"); + alarmJob.setHandleJobTime(new Date()); + alarmJob.setHandleMessage(message); + save(alarmJob); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + public void updateAlarmJobByDevCode(String devcode, String message) { try { Criteria criteria = getSession().createCriteria(AlarmJob.class); diff --git a/src/main/java/org/well/well/manager/AlarmRecordManager.java b/src/main/java/org/well/well/manager/AlarmRecordManager.java index 26c55ef..38e4c27 100644 --- a/src/main/java/org/well/well/manager/AlarmRecordManager.java +++ b/src/main/java/org/well/well/manager/AlarmRecordManager.java @@ -66,6 +66,30 @@ } } + public void clearAlarmByAlarmContent(String devCode,String alarmType ,String alarmContent) {//根据正常数据清除报警 + + + try { + String status = alarmStatusArr[3]; + String hql = "update AlarmRecord set STATUS=:status " + + "where STATUS = " + alarmStatusArr[1] + + " and deviceCode=:deviceCode" + + " and alarmContent=:alarmContent"; + if (alarmTypeArr[0].equals(alarmType)) {//阈值报警 + hql += " and alarmType = " + alarmTypeArr[0]; + } else if (alarmTypeArr[1].equals(alarmType)) {//设备本身报警 + hql += " and alarmType =" + alarmTypeArr[1]; + } + Map map = new HashMap(); + map.put("status", status); + map.put("deviceCode", devCode); + map.put("alarmContent", alarmContent); + batchUpdate(hql, map); + } catch (Exception e) { + e.printStackTrace(); + } + } + public void clearAlarmByNormalData(String devCode, String alarmType) {//根据正常数据清除报警 @@ -101,12 +125,18 @@ } - public AlarmRecord getDeviceAlarm(String devCode, String alarmValue) {//获取设备本身报警消息(正在告警) + /** + * 查询工单编号,主要用于处理相同设备编号的燃气和液体 + * @param devCode + * @param alarmContent + * @return + */ + public AlarmRecord getDeviceAlarm(String devCode, String alarmContent) {//获取设备本身报警消息(正在告警) Criteria criteria = getSession().createCriteria(AlarmRecord.class); criteria.add(Restrictions.eq("deviceCode", devCode)); - criteria.add(Restrictions.eq("alarmType", alarmTypeArr[1])); - criteria.add(Restrictions.eq("alarmValue", alarmValue)); + criteria.add(Restrictions.eq("alarmType", alarmTypeArr[0])); + criteria.add(Restrictions.eq("alarmContent", alarmContent)); criteria.add(Restrictions.eq("status", alarmStatusArr[1])); List alarmRecordList = criteria.list(); return alarmRecordList != null && alarmRecordList.size() > 0 ? diff --git a/src/main/java/org/well/well/manager/BusWellManager.java b/src/main/java/org/well/well/manager/BusWellManager.java index 40e045b..a85e583 100644 --- a/src/main/java/org/well/well/manager/BusWellManager.java +++ b/src/main/java/org/well/well/manager/BusWellManager.java @@ -1,13 +1,18 @@ package org.well.well.manager; +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; +import org.well.well.domain.ConfigDeptPermission; import org.well.well.domain.Device; import org.well.well.domain.DeviceWell; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; @Service public class BusWellManager extends HibernateEntityDao { @@ -32,4 +37,15 @@ return null; } + public ConfigDeptPermission getConfigDeptPermission(String deptId){ + if(StringUtils.isEmpty(deptId)){ + return null; + } + Criteria criteria = getSession().createCriteria(ConfigDeptPermission.class); + criteria.add(Restrictions.eq("deptid", Long.valueOf(deptId))); + List configDeptPermissionList = criteria.list(); + return configDeptPermissionList != null && configDeptPermissionList.size() > 0 ? + configDeptPermissionList.get(0) : null; + } + } \ No newline at end of file diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java index a9cac47..d501108 100644 --- a/src/main/java/org/well/well/manager/LGGasManager.java +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -13,13 +13,11 @@ import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.LGGas; +import org.well.well.domain.*; import org.well.well.util.AbnormalDataProcessor; import org.well.well.util.AlarmPushProvider; import org.well.well.util.SnowFlakeUtil; +import wiremock.org.apache.commons.lang3.ObjectUtils; import javax.annotation.Resource; import java.io.IOException; @@ -73,8 +71,8 @@ Stream listFilter = jsonArray.stream() .filter(object -> ((JSONObject) object).containsKey("gas") - &&AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); - List jsonFilter=listFilter.collect(Collectors.toList()); + && AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); + List jsonFilter = listFilter.collect(Collectors.toList()); for (int i = 0; i < jsonFilter.size(); i++) { try { if (null == ((JSONObject) jsonFilter.get(i)).get("gas")) { @@ -89,9 +87,10 @@ if (i < jsonFilter.size() - 1) { continue; } - + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); //4.清除设备告警 - alarmRecordManager.clearAlarmByNormalData(devCode, ""); + AlarmRecord alarmRecord = alarmRecordManager.getDeviceAlarm(devCode, alarmContent); + alarmRecordManager.clearAlarmByAlarmContent(devCode, "1", alarmContent); //获取报警阈值 List ruleRankList = alarmRuleManager.getRuleRank(devCode); float rankThresh = 0; @@ -106,7 +105,6 @@ Device device = deviceManager.getDeviceByDevCode(devCode); // AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 - String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); Integer alarmLevel = 0; for (int j = 0; j < ruleRankList.size(); j++) { Object rankValue = ((Object[]) ruleRankList.get(j))[2]; @@ -122,11 +120,20 @@ if (device == null) { return; } - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); - Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); - if (alarmJob == null) { + Long jobId = alarmRecord != null && alarmRecord.getJobId() != null ? alarmRecord.getJobId() : SnowFlakeUtil.getId(); + if (!(alarmRecord != null && alarmRecord.getJobId() != null)) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + //配置了手机号,可以走短信平台发送 + if (configDeptPermission != null) { + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode, busWell.getTel(), gas, busWell.getPosition(), + alarmContent, DeviceTypeEnum.LG.toString(), "%LEL"); + } + } + } } //1.写入新的告警 alarmRecordManager.saveData(jobId, "1", alarmLevel, @@ -134,13 +141,10 @@ devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 ThreadUtil.excuteMsg(jobId, alarmContent); - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder(busWell.getWellCode() ,devCode, busWell.getTel(), gas, busWell.getPosition(), - alarmContent, DeviceTypeEnum.LG.toString(), "%LEL"); - } } else { - alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + if (alarmRecord != null && alarmRecord.getJobId() != null) { + alarmJobManager.updateAlarmJobById(alarmRecord.getJobId(), "数据正常,系统自动结束工单"); + } } //3.清离线 deviceManager.clearOffline(devCode); diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e08aa6f..412d589 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -170,12 +170,13 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Tube\",\"devCode\":\"342020030014\",\"mBody\":{\"cell\":15,\"pci\":94,\"rsrp\":-103,\"snr\":7,\"datas\":[{\"gas\":0.0,\"uptime\":\"20211128000000\"}],\"logTime\":\"20211210174648\",\"bType\":\"TubeData\"},\"ts\":1639129608475}"; // // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050010\",\"mBody\":{\"cell\":91,\"pci\":279,\"rsrp\":-105,\"snr\":10,\"datas\":[{\"gas\":40.0,\"uptime\":\"20220113175000\"},{\"liquid\":1040.07336,\"uptime\":\"20220113175000\"}],\"logTime\":\"20220113175144\",\"bType\":\"LGData\"},\"ts\":1642067504321}"; - temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":55.6,\"uptime\":\"20220513020200\"},{\"gas\":40.599999964,\"uptime\":\"20220513030200\"},{\"liquid\":1108.392,\"uptime\":\"20220513020200\"},{\"liquid\":1112.47058,\"uptime\":\"20220513030200\"}],\"logTime\":\"20220513030400\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; + temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":0.6,\"uptime\":\"20230517154056\"},{\"gas\":0.599999964,\"uptime\":\"20230517154056\"},{\"liquid\":1108.392,\"uptime\":\"20230517154056\"},{\"liquid\":1112.47058,\"uptime\":\"20230517154056\"}],\"logTime\":\"20230517154056\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); // for(String dd:arr){ // resp.process(dd); // } +// resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/domain/ConfigDeptPermission.java b/src/main/java/org/well/well/domain/ConfigDeptPermission.java new file mode 100644 index 0000000..d8a8c86 --- /dev/null +++ b/src/main/java/org/well/well/domain/ConfigDeptPermission.java @@ -0,0 +1,187 @@ +package org.well.well.domain; + +import javax.persistence.*; + +/** + * @author cz + */ +@Entity +@Table(name = "config_dept_permission") +public class ConfigDeptPermission { + + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @Id + @Column(name = "ID") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + /** + * 部门编号 + */ + @Column(name ="DEPTID") + private Long deptid; + + /** + * 通讯方式 + */ + @Column(name ="COMMUNICATION") + private String communication; + + /** + * 点位类型 + */ + @Column(name ="WELL_TYPE") + private String wellType; + + + /** + * 设备类型 + */ + @Column(name ="DEVICE_TYPE") + private String deviceType; + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="AREA") + private String area; + + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="MAP") + private String MAP; + + /** + * 精度 + */ + @Column(name ="LNG") + private String LNG; + + public Long getId() { + return id; + } + + public Long getDeptid() { + return deptid; + } + + public String getCommunication() { + return communication; + } + + public String getWellType() { + return wellType; + } + + public String getDeviceType() { + return deviceType; + } + + public String getArea() { + return area; + } + + public String getMAP() { + return MAP; + } + + public String getLNG() { + return LNG; + } + + public String getLAT() { + return LAT; + } + + public String getTels() { + return tels; + } + + public String getSender() { + return sender; + } + + /** + * 维度 + */ + @Column(name ="LAT") + private String LAT; + /** + * 手机号,支持多个 + */ + @Column(name ="TELS") + private String tels; + + public void setId(Long id) { + this.id = id; + } + + public void setDeptid(Long deptid) { + this.deptid = deptid; + } + + public void setCommunication(String communication) { + this.communication = communication; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public void setArea(String area) { + this.area = area; + } + + public void setMAP(String MAP) { + this.MAP = MAP; + } + + public void setLNG(String LNG) { + this.LNG = LNG; + } + + public void setLAT(String LAT) { + this.LAT = LAT; + } + + public void setTels(String tels) { + this.tels = tels; + } + + public void setSender(String sender) { + this.sender = sender; + } + + /** + * 发送方 + */ + @Column(name ="SENDER") + private String sender; + + @Override + public String toString() { + return "ConfigDeptPermission{" + + "id=" + id + + ", deptid=" + deptid + + ", communication=" + communication + + ", wellType=" + wellType + + ", deviceType=" + deviceType + + ", area=" + area + + ", MAP=" + MAP + + ", LNG=" + LNG + + ", LAT=" + LAT + + ", tels=" + tels + + ", sender=" + sender + + '}'; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index f8e83d0..3a65b0d 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -39,6 +39,24 @@ return getSession().createCriteria(Device.class); } + + public void updateAlarmJobById(Long id, String message) { + try { + Criteria criteria = getSession().createCriteria(AlarmJob.class); + criteria.add(Restrictions.eq("id", id)); + criteria.add(Restrictions.in("jobStatus", new String[]{"0", "1", "2"})); + List alarmJobList = criteria.list(); + for (AlarmJob alarmJob : alarmJobList) { + alarmJob.setJobStatus("3"); + alarmJob.setHandleJobTime(new Date()); + alarmJob.setHandleMessage(message); + save(alarmJob); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + public void updateAlarmJobByDevCode(String devcode, String message) { try { Criteria criteria = getSession().createCriteria(AlarmJob.class); diff --git a/src/main/java/org/well/well/manager/AlarmRecordManager.java b/src/main/java/org/well/well/manager/AlarmRecordManager.java index 26c55ef..38e4c27 100644 --- a/src/main/java/org/well/well/manager/AlarmRecordManager.java +++ b/src/main/java/org/well/well/manager/AlarmRecordManager.java @@ -66,6 +66,30 @@ } } + public void clearAlarmByAlarmContent(String devCode,String alarmType ,String alarmContent) {//根据正常数据清除报警 + + + try { + String status = alarmStatusArr[3]; + String hql = "update AlarmRecord set STATUS=:status " + + "where STATUS = " + alarmStatusArr[1] + + " and deviceCode=:deviceCode" + + " and alarmContent=:alarmContent"; + if (alarmTypeArr[0].equals(alarmType)) {//阈值报警 + hql += " and alarmType = " + alarmTypeArr[0]; + } else if (alarmTypeArr[1].equals(alarmType)) {//设备本身报警 + hql += " and alarmType =" + alarmTypeArr[1]; + } + Map map = new HashMap(); + map.put("status", status); + map.put("deviceCode", devCode); + map.put("alarmContent", alarmContent); + batchUpdate(hql, map); + } catch (Exception e) { + e.printStackTrace(); + } + } + public void clearAlarmByNormalData(String devCode, String alarmType) {//根据正常数据清除报警 @@ -101,12 +125,18 @@ } - public AlarmRecord getDeviceAlarm(String devCode, String alarmValue) {//获取设备本身报警消息(正在告警) + /** + * 查询工单编号,主要用于处理相同设备编号的燃气和液体 + * @param devCode + * @param alarmContent + * @return + */ + public AlarmRecord getDeviceAlarm(String devCode, String alarmContent) {//获取设备本身报警消息(正在告警) Criteria criteria = getSession().createCriteria(AlarmRecord.class); criteria.add(Restrictions.eq("deviceCode", devCode)); - criteria.add(Restrictions.eq("alarmType", alarmTypeArr[1])); - criteria.add(Restrictions.eq("alarmValue", alarmValue)); + criteria.add(Restrictions.eq("alarmType", alarmTypeArr[0])); + criteria.add(Restrictions.eq("alarmContent", alarmContent)); criteria.add(Restrictions.eq("status", alarmStatusArr[1])); List alarmRecordList = criteria.list(); return alarmRecordList != null && alarmRecordList.size() > 0 ? diff --git a/src/main/java/org/well/well/manager/BusWellManager.java b/src/main/java/org/well/well/manager/BusWellManager.java index 40e045b..a85e583 100644 --- a/src/main/java/org/well/well/manager/BusWellManager.java +++ b/src/main/java/org/well/well/manager/BusWellManager.java @@ -1,13 +1,18 @@ package org.well.well.manager; +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; +import org.well.well.domain.ConfigDeptPermission; import org.well.well.domain.Device; import org.well.well.domain.DeviceWell; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; @Service public class BusWellManager extends HibernateEntityDao { @@ -32,4 +37,15 @@ return null; } + public ConfigDeptPermission getConfigDeptPermission(String deptId){ + if(StringUtils.isEmpty(deptId)){ + return null; + } + Criteria criteria = getSession().createCriteria(ConfigDeptPermission.class); + criteria.add(Restrictions.eq("deptid", Long.valueOf(deptId))); + List configDeptPermissionList = criteria.list(); + return configDeptPermissionList != null && configDeptPermissionList.size() > 0 ? + configDeptPermissionList.get(0) : null; + } + } \ No newline at end of file diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java index a9cac47..d501108 100644 --- a/src/main/java/org/well/well/manager/LGGasManager.java +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -13,13 +13,11 @@ import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.LGGas; +import org.well.well.domain.*; import org.well.well.util.AbnormalDataProcessor; import org.well.well.util.AlarmPushProvider; import org.well.well.util.SnowFlakeUtil; +import wiremock.org.apache.commons.lang3.ObjectUtils; import javax.annotation.Resource; import java.io.IOException; @@ -73,8 +71,8 @@ Stream listFilter = jsonArray.stream() .filter(object -> ((JSONObject) object).containsKey("gas") - &&AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); - List jsonFilter=listFilter.collect(Collectors.toList()); + && AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); + List jsonFilter = listFilter.collect(Collectors.toList()); for (int i = 0; i < jsonFilter.size(); i++) { try { if (null == ((JSONObject) jsonFilter.get(i)).get("gas")) { @@ -89,9 +87,10 @@ if (i < jsonFilter.size() - 1) { continue; } - + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); //4.清除设备告警 - alarmRecordManager.clearAlarmByNormalData(devCode, ""); + AlarmRecord alarmRecord = alarmRecordManager.getDeviceAlarm(devCode, alarmContent); + alarmRecordManager.clearAlarmByAlarmContent(devCode, "1", alarmContent); //获取报警阈值 List ruleRankList = alarmRuleManager.getRuleRank(devCode); float rankThresh = 0; @@ -106,7 +105,6 @@ Device device = deviceManager.getDeviceByDevCode(devCode); // AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 - String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); Integer alarmLevel = 0; for (int j = 0; j < ruleRankList.size(); j++) { Object rankValue = ((Object[]) ruleRankList.get(j))[2]; @@ -122,11 +120,20 @@ if (device == null) { return; } - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); - Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); - if (alarmJob == null) { + Long jobId = alarmRecord != null && alarmRecord.getJobId() != null ? alarmRecord.getJobId() : SnowFlakeUtil.getId(); + if (!(alarmRecord != null && alarmRecord.getJobId() != null)) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + //配置了手机号,可以走短信平台发送 + if (configDeptPermission != null) { + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode, busWell.getTel(), gas, busWell.getPosition(), + alarmContent, DeviceTypeEnum.LG.toString(), "%LEL"); + } + } + } } //1.写入新的告警 alarmRecordManager.saveData(jobId, "1", alarmLevel, @@ -134,13 +141,10 @@ devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 ThreadUtil.excuteMsg(jobId, alarmContent); - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder(busWell.getWellCode() ,devCode, busWell.getTel(), gas, busWell.getPosition(), - alarmContent, DeviceTypeEnum.LG.toString(), "%LEL"); - } } else { - alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + if (alarmRecord != null && alarmRecord.getJobId() != null) { + alarmJobManager.updateAlarmJobById(alarmRecord.getJobId(), "数据正常,系统自动结束工单"); + } } //3.清离线 deviceManager.clearOffline(devCode); diff --git a/src/main/java/org/well/well/manager/LGLiquidManager.java b/src/main/java/org/well/well/manager/LGLiquidManager.java index d036063..b04e03b 100644 --- a/src/main/java/org/well/well/manager/LGLiquidManager.java +++ b/src/main/java/org/well/well/manager/LGLiquidManager.java @@ -12,15 +12,9 @@ import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.LGLiquid; +import org.well.well.domain.*; import org.well.well.dto.LiquidDTO; -import org.well.well.util.AlarmPushProvider; -import org.well.well.util.Configure; -import org.well.well.util.SnowFlakeUtil; -import org.well.well.util.Weather1Util; +import org.well.well.util.*; import javax.annotation.Resource; import java.io.IOException; @@ -29,6 +23,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Created by test203 on 2017/11/30. @@ -76,19 +72,22 @@ } - @Transactional public void processNormalData(JSONObject jsonObject, String devCode) { String cell = jsonObject.getString("cell"); JSONArray jsonArray = jsonObject.getJSONArray("datas"); BusWell busWell = busWellManager.getWellByDevCode(devCode); - for (int i = 0; i < jsonArray.size(); i++) { + Stream listFilter = jsonArray.stream() + .filter(object -> + ((JSONObject) object).containsKey("liquid")); + List jsonFilter = listFilter.collect(Collectors.toList()); + for (int i = 0; i < jsonFilter.size(); i++) { try { - if (null == ((JSONObject) jsonArray.get(i)).get("liquid")) { + if (null == ((JSONObject) jsonFilter.get(i)).get("liquid")) { continue; } - String level = ((JSONObject) jsonArray.get(i)).getString("liquid"); - String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String level = ((JSONObject) jsonFilter.get(i)).getString("liquid"); + String upTime = ((JSONObject) jsonFilter.get(i)).getString("uptime"); if (StringUtils.isBlank(level)) continue; Double levelFloat = new BigDecimal(level).doubleValue() / 100; @@ -117,47 +116,51 @@ //存采集数据 this.saveData(liquidDTO); //2.有无超限处理流程(判断最后一条数据) - if (i < jsonArray.size() - 1) { + if (i < jsonFilter.size() - 1) { continue; } + String alarmContent = GasLiquidAlarmEnum.LIQUID_OVER_THRESH.getName(); //3.清离线 deviceManager.clearOffline(devCode); //4.清除设备告警 - alarmRecordManager.clearAlarmByNormalData(devCode, ""); + AlarmRecord alarmRecord=alarmRecordManager.getDeviceAlarm(devCode,alarmContent); + alarmRecordManager.clearAlarmByAlarmContent(devCode,"1", alarmContent); //获取报警阈值 String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString()); //超限 if (StringUtils.isNotBlank(thresh) && Float.valueOf(level) >= Float.valueOf(thresh)) { Device device = deviceManager.getDeviceByDevCode(devCode); - //获取报警内容 - String alarmContent = GasLiquidAlarmEnum.LIQUID_OVER_THRESH.getName(); //未注册设备舍弃 if (device == null) { return; } - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); - Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); - if (alarmJob == null) { + Long jobId = alarmRecord != null && alarmRecord.getJobId() != null ? alarmRecord.getJobId() : SnowFlakeUtil.getId(); + if (!(alarmRecord != null && alarmRecord.getJobId() != null)) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + if (configDeptPermission != null) { + //配置了手机号,可以走短信平台发送 + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode, busWell.getTel(), level, busWell.getPosition(), + alarmContent, DeviceTypeEnum.LG.toString(), ""); + } + } + } } //2.写入新的告警 alarmRecordManager.saveData(jobId, "1", null, alarmContent, level, device, devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder( busWell.getWellCode() ,devCode, busWell.getTel(), level, busWell.getPosition(), - alarmContent, DeviceTypeEnum.LG.toString(), ""); - } + ThreadUtil.excuteMsg(jobId, alarmContent); } else {//未超限 - //1.清除之前的报警 - alarmRecordManager.clearAlarmByNormalData(devCode, "1"); - alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + if (alarmRecord!=null&&alarmRecord.getJobId() != null) { + alarmJobManager.updateAlarmJobById(alarmRecord.getJobId(), "数据正常,系统自动结束工单"); + } } } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e08aa6f..412d589 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -170,12 +170,13 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Tube\",\"devCode\":\"342020030014\",\"mBody\":{\"cell\":15,\"pci\":94,\"rsrp\":-103,\"snr\":7,\"datas\":[{\"gas\":0.0,\"uptime\":\"20211128000000\"}],\"logTime\":\"20211210174648\",\"bType\":\"TubeData\"},\"ts\":1639129608475}"; // // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050010\",\"mBody\":{\"cell\":91,\"pci\":279,\"rsrp\":-105,\"snr\":10,\"datas\":[{\"gas\":40.0,\"uptime\":\"20220113175000\"},{\"liquid\":1040.07336,\"uptime\":\"20220113175000\"}],\"logTime\":\"20220113175144\",\"bType\":\"LGData\"},\"ts\":1642067504321}"; - temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":55.6,\"uptime\":\"20220513020200\"},{\"gas\":40.599999964,\"uptime\":\"20220513030200\"},{\"liquid\":1108.392,\"uptime\":\"20220513020200\"},{\"liquid\":1112.47058,\"uptime\":\"20220513030200\"}],\"logTime\":\"20220513030400\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; + temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":0.6,\"uptime\":\"20230517154056\"},{\"gas\":0.599999964,\"uptime\":\"20230517154056\"},{\"liquid\":1108.392,\"uptime\":\"20230517154056\"},{\"liquid\":1112.47058,\"uptime\":\"20230517154056\"}],\"logTime\":\"20230517154056\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); // for(String dd:arr){ // resp.process(dd); // } +// resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/domain/ConfigDeptPermission.java b/src/main/java/org/well/well/domain/ConfigDeptPermission.java new file mode 100644 index 0000000..d8a8c86 --- /dev/null +++ b/src/main/java/org/well/well/domain/ConfigDeptPermission.java @@ -0,0 +1,187 @@ +package org.well.well.domain; + +import javax.persistence.*; + +/** + * @author cz + */ +@Entity +@Table(name = "config_dept_permission") +public class ConfigDeptPermission { + + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @Id + @Column(name = "ID") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + /** + * 部门编号 + */ + @Column(name ="DEPTID") + private Long deptid; + + /** + * 通讯方式 + */ + @Column(name ="COMMUNICATION") + private String communication; + + /** + * 点位类型 + */ + @Column(name ="WELL_TYPE") + private String wellType; + + + /** + * 设备类型 + */ + @Column(name ="DEVICE_TYPE") + private String deviceType; + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="AREA") + private String area; + + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="MAP") + private String MAP; + + /** + * 精度 + */ + @Column(name ="LNG") + private String LNG; + + public Long getId() { + return id; + } + + public Long getDeptid() { + return deptid; + } + + public String getCommunication() { + return communication; + } + + public String getWellType() { + return wellType; + } + + public String getDeviceType() { + return deviceType; + } + + public String getArea() { + return area; + } + + public String getMAP() { + return MAP; + } + + public String getLNG() { + return LNG; + } + + public String getLAT() { + return LAT; + } + + public String getTels() { + return tels; + } + + public String getSender() { + return sender; + } + + /** + * 维度 + */ + @Column(name ="LAT") + private String LAT; + /** + * 手机号,支持多个 + */ + @Column(name ="TELS") + private String tels; + + public void setId(Long id) { + this.id = id; + } + + public void setDeptid(Long deptid) { + this.deptid = deptid; + } + + public void setCommunication(String communication) { + this.communication = communication; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public void setArea(String area) { + this.area = area; + } + + public void setMAP(String MAP) { + this.MAP = MAP; + } + + public void setLNG(String LNG) { + this.LNG = LNG; + } + + public void setLAT(String LAT) { + this.LAT = LAT; + } + + public void setTels(String tels) { + this.tels = tels; + } + + public void setSender(String sender) { + this.sender = sender; + } + + /** + * 发送方 + */ + @Column(name ="SENDER") + private String sender; + + @Override + public String toString() { + return "ConfigDeptPermission{" + + "id=" + id + + ", deptid=" + deptid + + ", communication=" + communication + + ", wellType=" + wellType + + ", deviceType=" + deviceType + + ", area=" + area + + ", MAP=" + MAP + + ", LNG=" + LNG + + ", LAT=" + LAT + + ", tels=" + tels + + ", sender=" + sender + + '}'; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index f8e83d0..3a65b0d 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -39,6 +39,24 @@ return getSession().createCriteria(Device.class); } + + public void updateAlarmJobById(Long id, String message) { + try { + Criteria criteria = getSession().createCriteria(AlarmJob.class); + criteria.add(Restrictions.eq("id", id)); + criteria.add(Restrictions.in("jobStatus", new String[]{"0", "1", "2"})); + List alarmJobList = criteria.list(); + for (AlarmJob alarmJob : alarmJobList) { + alarmJob.setJobStatus("3"); + alarmJob.setHandleJobTime(new Date()); + alarmJob.setHandleMessage(message); + save(alarmJob); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + public void updateAlarmJobByDevCode(String devcode, String message) { try { Criteria criteria = getSession().createCriteria(AlarmJob.class); diff --git a/src/main/java/org/well/well/manager/AlarmRecordManager.java b/src/main/java/org/well/well/manager/AlarmRecordManager.java index 26c55ef..38e4c27 100644 --- a/src/main/java/org/well/well/manager/AlarmRecordManager.java +++ b/src/main/java/org/well/well/manager/AlarmRecordManager.java @@ -66,6 +66,30 @@ } } + public void clearAlarmByAlarmContent(String devCode,String alarmType ,String alarmContent) {//根据正常数据清除报警 + + + try { + String status = alarmStatusArr[3]; + String hql = "update AlarmRecord set STATUS=:status " + + "where STATUS = " + alarmStatusArr[1] + + " and deviceCode=:deviceCode" + + " and alarmContent=:alarmContent"; + if (alarmTypeArr[0].equals(alarmType)) {//阈值报警 + hql += " and alarmType = " + alarmTypeArr[0]; + } else if (alarmTypeArr[1].equals(alarmType)) {//设备本身报警 + hql += " and alarmType =" + alarmTypeArr[1]; + } + Map map = new HashMap(); + map.put("status", status); + map.put("deviceCode", devCode); + map.put("alarmContent", alarmContent); + batchUpdate(hql, map); + } catch (Exception e) { + e.printStackTrace(); + } + } + public void clearAlarmByNormalData(String devCode, String alarmType) {//根据正常数据清除报警 @@ -101,12 +125,18 @@ } - public AlarmRecord getDeviceAlarm(String devCode, String alarmValue) {//获取设备本身报警消息(正在告警) + /** + * 查询工单编号,主要用于处理相同设备编号的燃气和液体 + * @param devCode + * @param alarmContent + * @return + */ + public AlarmRecord getDeviceAlarm(String devCode, String alarmContent) {//获取设备本身报警消息(正在告警) Criteria criteria = getSession().createCriteria(AlarmRecord.class); criteria.add(Restrictions.eq("deviceCode", devCode)); - criteria.add(Restrictions.eq("alarmType", alarmTypeArr[1])); - criteria.add(Restrictions.eq("alarmValue", alarmValue)); + criteria.add(Restrictions.eq("alarmType", alarmTypeArr[0])); + criteria.add(Restrictions.eq("alarmContent", alarmContent)); criteria.add(Restrictions.eq("status", alarmStatusArr[1])); List alarmRecordList = criteria.list(); return alarmRecordList != null && alarmRecordList.size() > 0 ? diff --git a/src/main/java/org/well/well/manager/BusWellManager.java b/src/main/java/org/well/well/manager/BusWellManager.java index 40e045b..a85e583 100644 --- a/src/main/java/org/well/well/manager/BusWellManager.java +++ b/src/main/java/org/well/well/manager/BusWellManager.java @@ -1,13 +1,18 @@ package org.well.well.manager; +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; +import org.well.well.domain.ConfigDeptPermission; import org.well.well.domain.Device; import org.well.well.domain.DeviceWell; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; @Service public class BusWellManager extends HibernateEntityDao { @@ -32,4 +37,15 @@ return null; } + public ConfigDeptPermission getConfigDeptPermission(String deptId){ + if(StringUtils.isEmpty(deptId)){ + return null; + } + Criteria criteria = getSession().createCriteria(ConfigDeptPermission.class); + criteria.add(Restrictions.eq("deptid", Long.valueOf(deptId))); + List configDeptPermissionList = criteria.list(); + return configDeptPermissionList != null && configDeptPermissionList.size() > 0 ? + configDeptPermissionList.get(0) : null; + } + } \ No newline at end of file diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java index a9cac47..d501108 100644 --- a/src/main/java/org/well/well/manager/LGGasManager.java +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -13,13 +13,11 @@ import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.LGGas; +import org.well.well.domain.*; import org.well.well.util.AbnormalDataProcessor; import org.well.well.util.AlarmPushProvider; import org.well.well.util.SnowFlakeUtil; +import wiremock.org.apache.commons.lang3.ObjectUtils; import javax.annotation.Resource; import java.io.IOException; @@ -73,8 +71,8 @@ Stream listFilter = jsonArray.stream() .filter(object -> ((JSONObject) object).containsKey("gas") - &&AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); - List jsonFilter=listFilter.collect(Collectors.toList()); + && AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); + List jsonFilter = listFilter.collect(Collectors.toList()); for (int i = 0; i < jsonFilter.size(); i++) { try { if (null == ((JSONObject) jsonFilter.get(i)).get("gas")) { @@ -89,9 +87,10 @@ if (i < jsonFilter.size() - 1) { continue; } - + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); //4.清除设备告警 - alarmRecordManager.clearAlarmByNormalData(devCode, ""); + AlarmRecord alarmRecord = alarmRecordManager.getDeviceAlarm(devCode, alarmContent); + alarmRecordManager.clearAlarmByAlarmContent(devCode, "1", alarmContent); //获取报警阈值 List ruleRankList = alarmRuleManager.getRuleRank(devCode); float rankThresh = 0; @@ -106,7 +105,6 @@ Device device = deviceManager.getDeviceByDevCode(devCode); // AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 - String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); Integer alarmLevel = 0; for (int j = 0; j < ruleRankList.size(); j++) { Object rankValue = ((Object[]) ruleRankList.get(j))[2]; @@ -122,11 +120,20 @@ if (device == null) { return; } - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); - Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); - if (alarmJob == null) { + Long jobId = alarmRecord != null && alarmRecord.getJobId() != null ? alarmRecord.getJobId() : SnowFlakeUtil.getId(); + if (!(alarmRecord != null && alarmRecord.getJobId() != null)) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + //配置了手机号,可以走短信平台发送 + if (configDeptPermission != null) { + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode, busWell.getTel(), gas, busWell.getPosition(), + alarmContent, DeviceTypeEnum.LG.toString(), "%LEL"); + } + } + } } //1.写入新的告警 alarmRecordManager.saveData(jobId, "1", alarmLevel, @@ -134,13 +141,10 @@ devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 ThreadUtil.excuteMsg(jobId, alarmContent); - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder(busWell.getWellCode() ,devCode, busWell.getTel(), gas, busWell.getPosition(), - alarmContent, DeviceTypeEnum.LG.toString(), "%LEL"); - } } else { - alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + if (alarmRecord != null && alarmRecord.getJobId() != null) { + alarmJobManager.updateAlarmJobById(alarmRecord.getJobId(), "数据正常,系统自动结束工单"); + } } //3.清离线 deviceManager.clearOffline(devCode); diff --git a/src/main/java/org/well/well/manager/LGLiquidManager.java b/src/main/java/org/well/well/manager/LGLiquidManager.java index d036063..b04e03b 100644 --- a/src/main/java/org/well/well/manager/LGLiquidManager.java +++ b/src/main/java/org/well/well/manager/LGLiquidManager.java @@ -12,15 +12,9 @@ import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.LGLiquid; +import org.well.well.domain.*; import org.well.well.dto.LiquidDTO; -import org.well.well.util.AlarmPushProvider; -import org.well.well.util.Configure; -import org.well.well.util.SnowFlakeUtil; -import org.well.well.util.Weather1Util; +import org.well.well.util.*; import javax.annotation.Resource; import java.io.IOException; @@ -29,6 +23,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Created by test203 on 2017/11/30. @@ -76,19 +72,22 @@ } - @Transactional public void processNormalData(JSONObject jsonObject, String devCode) { String cell = jsonObject.getString("cell"); JSONArray jsonArray = jsonObject.getJSONArray("datas"); BusWell busWell = busWellManager.getWellByDevCode(devCode); - for (int i = 0; i < jsonArray.size(); i++) { + Stream listFilter = jsonArray.stream() + .filter(object -> + ((JSONObject) object).containsKey("liquid")); + List jsonFilter = listFilter.collect(Collectors.toList()); + for (int i = 0; i < jsonFilter.size(); i++) { try { - if (null == ((JSONObject) jsonArray.get(i)).get("liquid")) { + if (null == ((JSONObject) jsonFilter.get(i)).get("liquid")) { continue; } - String level = ((JSONObject) jsonArray.get(i)).getString("liquid"); - String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String level = ((JSONObject) jsonFilter.get(i)).getString("liquid"); + String upTime = ((JSONObject) jsonFilter.get(i)).getString("uptime"); if (StringUtils.isBlank(level)) continue; Double levelFloat = new BigDecimal(level).doubleValue() / 100; @@ -117,47 +116,51 @@ //存采集数据 this.saveData(liquidDTO); //2.有无超限处理流程(判断最后一条数据) - if (i < jsonArray.size() - 1) { + if (i < jsonFilter.size() - 1) { continue; } + String alarmContent = GasLiquidAlarmEnum.LIQUID_OVER_THRESH.getName(); //3.清离线 deviceManager.clearOffline(devCode); //4.清除设备告警 - alarmRecordManager.clearAlarmByNormalData(devCode, ""); + AlarmRecord alarmRecord=alarmRecordManager.getDeviceAlarm(devCode,alarmContent); + alarmRecordManager.clearAlarmByAlarmContent(devCode,"1", alarmContent); //获取报警阈值 String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString()); //超限 if (StringUtils.isNotBlank(thresh) && Float.valueOf(level) >= Float.valueOf(thresh)) { Device device = deviceManager.getDeviceByDevCode(devCode); - //获取报警内容 - String alarmContent = GasLiquidAlarmEnum.LIQUID_OVER_THRESH.getName(); //未注册设备舍弃 if (device == null) { return; } - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); - Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); - if (alarmJob == null) { + Long jobId = alarmRecord != null && alarmRecord.getJobId() != null ? alarmRecord.getJobId() : SnowFlakeUtil.getId(); + if (!(alarmRecord != null && alarmRecord.getJobId() != null)) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + if (configDeptPermission != null) { + //配置了手机号,可以走短信平台发送 + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode, busWell.getTel(), level, busWell.getPosition(), + alarmContent, DeviceTypeEnum.LG.toString(), ""); + } + } + } } //2.写入新的告警 alarmRecordManager.saveData(jobId, "1", null, alarmContent, level, device, devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder( busWell.getWellCode() ,devCode, busWell.getTel(), level, busWell.getPosition(), - alarmContent, DeviceTypeEnum.LG.toString(), ""); - } + ThreadUtil.excuteMsg(jobId, alarmContent); } else {//未超限 - //1.清除之前的报警 - alarmRecordManager.clearAlarmByNormalData(devCode, "1"); - alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + if (alarmRecord!=null&&alarmRecord.getJobId() != null) { + alarmJobManager.updateAlarmJobById(alarmRecord.getJobId(), "数据正常,系统自动结束工单"); + } } } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index 587cddb..0da6e23 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -66,9 +66,9 @@ public void processNormalData(JSONObject jsonObject, String devCode) { String cell = jsonObject.get("cell").toString(); - String pci = null!=jsonObject.get("pci")?jsonObject.get("pci").toString():""; - String rsrp = null!=jsonObject.get("rsrp")?jsonObject.get("rsrp").toString():""; - String snr = null!=jsonObject.get("snr")?jsonObject.get("snr").toString():""; + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); BusWell busWell = busWellManager.getWellByDevCode(devCode); for (int i = 0; i < jsonArray.size(); i++) { @@ -84,7 +84,7 @@ alarmRecordManager.clearAlarmByNormalData(devCode, "2"); //3.存数据 LiquidDTO liquidDTO = new LiquidDTO(level, cell, - upTime, devCode, busWell == null ? "" : busWell.getWellCode(),pci,rsrp,snr); + upTime, devCode, busWell == null ? "" : busWell.getWellCode(), pci, rsrp, snr); this.saveData(liquidDTO);//存采集数据 //4.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -129,22 +129,26 @@ if (device == null) return;//未注册设备舍弃 //1.生成新的工单 Long jobId = SnowFlakeUtil.getId(); - alarmJobManager.saveData(jobId,devCode, busWell != null ? + alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); //2.写入新的告警 alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, level, device, - devCode, busWell!=null?busWell.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(jobId, alarmContent); //配置了手机号,可以走短信平台发送 - if(!StringUtils.isEmpty(busWell.getTel())){ - AlarmPushProvider.alarmPushBuilder( busWell.getWellCode() ,devCode,busWell.getTel(),level, busWell.getPosition(), - alarmContent,DeviceTypeEnum.Liquid.toString(),""); - } + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + if (configDeptPermission != null) { + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode,busWell.getTel(), level, busWell.getPosition(), + alarmContent, DeviceTypeEnum.Liquid.toString(), ""); + } + }} } } else {//未超限 //1.清除之前的报警 @@ -176,9 +180,9 @@ BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); - Long jobId=alarmJob==null? SnowFlakeUtil.getId():alarmJob.getId(); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); if (null == alarmJob) { - alarmJobManager.saveData(jobId,devCode, busWell != null ? + alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "0"); } alarmRecordManager.saveData(jobId, "2", null, diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e08aa6f..412d589 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -170,12 +170,13 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Tube\",\"devCode\":\"342020030014\",\"mBody\":{\"cell\":15,\"pci\":94,\"rsrp\":-103,\"snr\":7,\"datas\":[{\"gas\":0.0,\"uptime\":\"20211128000000\"}],\"logTime\":\"20211210174648\",\"bType\":\"TubeData\"},\"ts\":1639129608475}"; // // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050010\",\"mBody\":{\"cell\":91,\"pci\":279,\"rsrp\":-105,\"snr\":10,\"datas\":[{\"gas\":40.0,\"uptime\":\"20220113175000\"},{\"liquid\":1040.07336,\"uptime\":\"20220113175000\"}],\"logTime\":\"20220113175144\",\"bType\":\"LGData\"},\"ts\":1642067504321}"; - temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":55.6,\"uptime\":\"20220513020200\"},{\"gas\":40.599999964,\"uptime\":\"20220513030200\"},{\"liquid\":1108.392,\"uptime\":\"20220513020200\"},{\"liquid\":1112.47058,\"uptime\":\"20220513030200\"}],\"logTime\":\"20220513030400\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; + temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":0.6,\"uptime\":\"20230517154056\"},{\"gas\":0.599999964,\"uptime\":\"20230517154056\"},{\"liquid\":1108.392,\"uptime\":\"20230517154056\"},{\"liquid\":1112.47058,\"uptime\":\"20230517154056\"}],\"logTime\":\"20230517154056\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); // for(String dd:arr){ // resp.process(dd); // } +// resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/domain/ConfigDeptPermission.java b/src/main/java/org/well/well/domain/ConfigDeptPermission.java new file mode 100644 index 0000000..d8a8c86 --- /dev/null +++ b/src/main/java/org/well/well/domain/ConfigDeptPermission.java @@ -0,0 +1,187 @@ +package org.well.well.domain; + +import javax.persistence.*; + +/** + * @author cz + */ +@Entity +@Table(name = "config_dept_permission") +public class ConfigDeptPermission { + + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @Id + @Column(name = "ID") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + /** + * 部门编号 + */ + @Column(name ="DEPTID") + private Long deptid; + + /** + * 通讯方式 + */ + @Column(name ="COMMUNICATION") + private String communication; + + /** + * 点位类型 + */ + @Column(name ="WELL_TYPE") + private String wellType; + + + /** + * 设备类型 + */ + @Column(name ="DEVICE_TYPE") + private String deviceType; + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="AREA") + private String area; + + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="MAP") + private String MAP; + + /** + * 精度 + */ + @Column(name ="LNG") + private String LNG; + + public Long getId() { + return id; + } + + public Long getDeptid() { + return deptid; + } + + public String getCommunication() { + return communication; + } + + public String getWellType() { + return wellType; + } + + public String getDeviceType() { + return deviceType; + } + + public String getArea() { + return area; + } + + public String getMAP() { + return MAP; + } + + public String getLNG() { + return LNG; + } + + public String getLAT() { + return LAT; + } + + public String getTels() { + return tels; + } + + public String getSender() { + return sender; + } + + /** + * 维度 + */ + @Column(name ="LAT") + private String LAT; + /** + * 手机号,支持多个 + */ + @Column(name ="TELS") + private String tels; + + public void setId(Long id) { + this.id = id; + } + + public void setDeptid(Long deptid) { + this.deptid = deptid; + } + + public void setCommunication(String communication) { + this.communication = communication; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public void setArea(String area) { + this.area = area; + } + + public void setMAP(String MAP) { + this.MAP = MAP; + } + + public void setLNG(String LNG) { + this.LNG = LNG; + } + + public void setLAT(String LAT) { + this.LAT = LAT; + } + + public void setTels(String tels) { + this.tels = tels; + } + + public void setSender(String sender) { + this.sender = sender; + } + + /** + * 发送方 + */ + @Column(name ="SENDER") + private String sender; + + @Override + public String toString() { + return "ConfigDeptPermission{" + + "id=" + id + + ", deptid=" + deptid + + ", communication=" + communication + + ", wellType=" + wellType + + ", deviceType=" + deviceType + + ", area=" + area + + ", MAP=" + MAP + + ", LNG=" + LNG + + ", LAT=" + LAT + + ", tels=" + tels + + ", sender=" + sender + + '}'; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index f8e83d0..3a65b0d 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -39,6 +39,24 @@ return getSession().createCriteria(Device.class); } + + public void updateAlarmJobById(Long id, String message) { + try { + Criteria criteria = getSession().createCriteria(AlarmJob.class); + criteria.add(Restrictions.eq("id", id)); + criteria.add(Restrictions.in("jobStatus", new String[]{"0", "1", "2"})); + List alarmJobList = criteria.list(); + for (AlarmJob alarmJob : alarmJobList) { + alarmJob.setJobStatus("3"); + alarmJob.setHandleJobTime(new Date()); + alarmJob.setHandleMessage(message); + save(alarmJob); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + public void updateAlarmJobByDevCode(String devcode, String message) { try { Criteria criteria = getSession().createCriteria(AlarmJob.class); diff --git a/src/main/java/org/well/well/manager/AlarmRecordManager.java b/src/main/java/org/well/well/manager/AlarmRecordManager.java index 26c55ef..38e4c27 100644 --- a/src/main/java/org/well/well/manager/AlarmRecordManager.java +++ b/src/main/java/org/well/well/manager/AlarmRecordManager.java @@ -66,6 +66,30 @@ } } + public void clearAlarmByAlarmContent(String devCode,String alarmType ,String alarmContent) {//根据正常数据清除报警 + + + try { + String status = alarmStatusArr[3]; + String hql = "update AlarmRecord set STATUS=:status " + + "where STATUS = " + alarmStatusArr[1] + + " and deviceCode=:deviceCode" + + " and alarmContent=:alarmContent"; + if (alarmTypeArr[0].equals(alarmType)) {//阈值报警 + hql += " and alarmType = " + alarmTypeArr[0]; + } else if (alarmTypeArr[1].equals(alarmType)) {//设备本身报警 + hql += " and alarmType =" + alarmTypeArr[1]; + } + Map map = new HashMap(); + map.put("status", status); + map.put("deviceCode", devCode); + map.put("alarmContent", alarmContent); + batchUpdate(hql, map); + } catch (Exception e) { + e.printStackTrace(); + } + } + public void clearAlarmByNormalData(String devCode, String alarmType) {//根据正常数据清除报警 @@ -101,12 +125,18 @@ } - public AlarmRecord getDeviceAlarm(String devCode, String alarmValue) {//获取设备本身报警消息(正在告警) + /** + * 查询工单编号,主要用于处理相同设备编号的燃气和液体 + * @param devCode + * @param alarmContent + * @return + */ + public AlarmRecord getDeviceAlarm(String devCode, String alarmContent) {//获取设备本身报警消息(正在告警) Criteria criteria = getSession().createCriteria(AlarmRecord.class); criteria.add(Restrictions.eq("deviceCode", devCode)); - criteria.add(Restrictions.eq("alarmType", alarmTypeArr[1])); - criteria.add(Restrictions.eq("alarmValue", alarmValue)); + criteria.add(Restrictions.eq("alarmType", alarmTypeArr[0])); + criteria.add(Restrictions.eq("alarmContent", alarmContent)); criteria.add(Restrictions.eq("status", alarmStatusArr[1])); List alarmRecordList = criteria.list(); return alarmRecordList != null && alarmRecordList.size() > 0 ? diff --git a/src/main/java/org/well/well/manager/BusWellManager.java b/src/main/java/org/well/well/manager/BusWellManager.java index 40e045b..a85e583 100644 --- a/src/main/java/org/well/well/manager/BusWellManager.java +++ b/src/main/java/org/well/well/manager/BusWellManager.java @@ -1,13 +1,18 @@ package org.well.well.manager; +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; +import org.well.well.domain.ConfigDeptPermission; import org.well.well.domain.Device; import org.well.well.domain.DeviceWell; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; @Service public class BusWellManager extends HibernateEntityDao { @@ -32,4 +37,15 @@ return null; } + public ConfigDeptPermission getConfigDeptPermission(String deptId){ + if(StringUtils.isEmpty(deptId)){ + return null; + } + Criteria criteria = getSession().createCriteria(ConfigDeptPermission.class); + criteria.add(Restrictions.eq("deptid", Long.valueOf(deptId))); + List configDeptPermissionList = criteria.list(); + return configDeptPermissionList != null && configDeptPermissionList.size() > 0 ? + configDeptPermissionList.get(0) : null; + } + } \ No newline at end of file diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java index a9cac47..d501108 100644 --- a/src/main/java/org/well/well/manager/LGGasManager.java +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -13,13 +13,11 @@ import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.LGGas; +import org.well.well.domain.*; import org.well.well.util.AbnormalDataProcessor; import org.well.well.util.AlarmPushProvider; import org.well.well.util.SnowFlakeUtil; +import wiremock.org.apache.commons.lang3.ObjectUtils; import javax.annotation.Resource; import java.io.IOException; @@ -73,8 +71,8 @@ Stream listFilter = jsonArray.stream() .filter(object -> ((JSONObject) object).containsKey("gas") - &&AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); - List jsonFilter=listFilter.collect(Collectors.toList()); + && AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); + List jsonFilter = listFilter.collect(Collectors.toList()); for (int i = 0; i < jsonFilter.size(); i++) { try { if (null == ((JSONObject) jsonFilter.get(i)).get("gas")) { @@ -89,9 +87,10 @@ if (i < jsonFilter.size() - 1) { continue; } - + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); //4.清除设备告警 - alarmRecordManager.clearAlarmByNormalData(devCode, ""); + AlarmRecord alarmRecord = alarmRecordManager.getDeviceAlarm(devCode, alarmContent); + alarmRecordManager.clearAlarmByAlarmContent(devCode, "1", alarmContent); //获取报警阈值 List ruleRankList = alarmRuleManager.getRuleRank(devCode); float rankThresh = 0; @@ -106,7 +105,6 @@ Device device = deviceManager.getDeviceByDevCode(devCode); // AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 - String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); Integer alarmLevel = 0; for (int j = 0; j < ruleRankList.size(); j++) { Object rankValue = ((Object[]) ruleRankList.get(j))[2]; @@ -122,11 +120,20 @@ if (device == null) { return; } - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); - Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); - if (alarmJob == null) { + Long jobId = alarmRecord != null && alarmRecord.getJobId() != null ? alarmRecord.getJobId() : SnowFlakeUtil.getId(); + if (!(alarmRecord != null && alarmRecord.getJobId() != null)) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + //配置了手机号,可以走短信平台发送 + if (configDeptPermission != null) { + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode, busWell.getTel(), gas, busWell.getPosition(), + alarmContent, DeviceTypeEnum.LG.toString(), "%LEL"); + } + } + } } //1.写入新的告警 alarmRecordManager.saveData(jobId, "1", alarmLevel, @@ -134,13 +141,10 @@ devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 ThreadUtil.excuteMsg(jobId, alarmContent); - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder(busWell.getWellCode() ,devCode, busWell.getTel(), gas, busWell.getPosition(), - alarmContent, DeviceTypeEnum.LG.toString(), "%LEL"); - } } else { - alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + if (alarmRecord != null && alarmRecord.getJobId() != null) { + alarmJobManager.updateAlarmJobById(alarmRecord.getJobId(), "数据正常,系统自动结束工单"); + } } //3.清离线 deviceManager.clearOffline(devCode); diff --git a/src/main/java/org/well/well/manager/LGLiquidManager.java b/src/main/java/org/well/well/manager/LGLiquidManager.java index d036063..b04e03b 100644 --- a/src/main/java/org/well/well/manager/LGLiquidManager.java +++ b/src/main/java/org/well/well/manager/LGLiquidManager.java @@ -12,15 +12,9 @@ import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.LGLiquid; +import org.well.well.domain.*; import org.well.well.dto.LiquidDTO; -import org.well.well.util.AlarmPushProvider; -import org.well.well.util.Configure; -import org.well.well.util.SnowFlakeUtil; -import org.well.well.util.Weather1Util; +import org.well.well.util.*; import javax.annotation.Resource; import java.io.IOException; @@ -29,6 +23,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Created by test203 on 2017/11/30. @@ -76,19 +72,22 @@ } - @Transactional public void processNormalData(JSONObject jsonObject, String devCode) { String cell = jsonObject.getString("cell"); JSONArray jsonArray = jsonObject.getJSONArray("datas"); BusWell busWell = busWellManager.getWellByDevCode(devCode); - for (int i = 0; i < jsonArray.size(); i++) { + Stream listFilter = jsonArray.stream() + .filter(object -> + ((JSONObject) object).containsKey("liquid")); + List jsonFilter = listFilter.collect(Collectors.toList()); + for (int i = 0; i < jsonFilter.size(); i++) { try { - if (null == ((JSONObject) jsonArray.get(i)).get("liquid")) { + if (null == ((JSONObject) jsonFilter.get(i)).get("liquid")) { continue; } - String level = ((JSONObject) jsonArray.get(i)).getString("liquid"); - String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String level = ((JSONObject) jsonFilter.get(i)).getString("liquid"); + String upTime = ((JSONObject) jsonFilter.get(i)).getString("uptime"); if (StringUtils.isBlank(level)) continue; Double levelFloat = new BigDecimal(level).doubleValue() / 100; @@ -117,47 +116,51 @@ //存采集数据 this.saveData(liquidDTO); //2.有无超限处理流程(判断最后一条数据) - if (i < jsonArray.size() - 1) { + if (i < jsonFilter.size() - 1) { continue; } + String alarmContent = GasLiquidAlarmEnum.LIQUID_OVER_THRESH.getName(); //3.清离线 deviceManager.clearOffline(devCode); //4.清除设备告警 - alarmRecordManager.clearAlarmByNormalData(devCode, ""); + AlarmRecord alarmRecord=alarmRecordManager.getDeviceAlarm(devCode,alarmContent); + alarmRecordManager.clearAlarmByAlarmContent(devCode,"1", alarmContent); //获取报警阈值 String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString()); //超限 if (StringUtils.isNotBlank(thresh) && Float.valueOf(level) >= Float.valueOf(thresh)) { Device device = deviceManager.getDeviceByDevCode(devCode); - //获取报警内容 - String alarmContent = GasLiquidAlarmEnum.LIQUID_OVER_THRESH.getName(); //未注册设备舍弃 if (device == null) { return; } - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); - Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); - if (alarmJob == null) { + Long jobId = alarmRecord != null && alarmRecord.getJobId() != null ? alarmRecord.getJobId() : SnowFlakeUtil.getId(); + if (!(alarmRecord != null && alarmRecord.getJobId() != null)) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + if (configDeptPermission != null) { + //配置了手机号,可以走短信平台发送 + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode, busWell.getTel(), level, busWell.getPosition(), + alarmContent, DeviceTypeEnum.LG.toString(), ""); + } + } + } } //2.写入新的告警 alarmRecordManager.saveData(jobId, "1", null, alarmContent, level, device, devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder( busWell.getWellCode() ,devCode, busWell.getTel(), level, busWell.getPosition(), - alarmContent, DeviceTypeEnum.LG.toString(), ""); - } + ThreadUtil.excuteMsg(jobId, alarmContent); } else {//未超限 - //1.清除之前的报警 - alarmRecordManager.clearAlarmByNormalData(devCode, "1"); - alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + if (alarmRecord!=null&&alarmRecord.getJobId() != null) { + alarmJobManager.updateAlarmJobById(alarmRecord.getJobId(), "数据正常,系统自动结束工单"); + } } } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index 587cddb..0da6e23 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -66,9 +66,9 @@ public void processNormalData(JSONObject jsonObject, String devCode) { String cell = jsonObject.get("cell").toString(); - String pci = null!=jsonObject.get("pci")?jsonObject.get("pci").toString():""; - String rsrp = null!=jsonObject.get("rsrp")?jsonObject.get("rsrp").toString():""; - String snr = null!=jsonObject.get("snr")?jsonObject.get("snr").toString():""; + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); BusWell busWell = busWellManager.getWellByDevCode(devCode); for (int i = 0; i < jsonArray.size(); i++) { @@ -84,7 +84,7 @@ alarmRecordManager.clearAlarmByNormalData(devCode, "2"); //3.存数据 LiquidDTO liquidDTO = new LiquidDTO(level, cell, - upTime, devCode, busWell == null ? "" : busWell.getWellCode(),pci,rsrp,snr); + upTime, devCode, busWell == null ? "" : busWell.getWellCode(), pci, rsrp, snr); this.saveData(liquidDTO);//存采集数据 //4.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -129,22 +129,26 @@ if (device == null) return;//未注册设备舍弃 //1.生成新的工单 Long jobId = SnowFlakeUtil.getId(); - alarmJobManager.saveData(jobId,devCode, busWell != null ? + alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); //2.写入新的告警 alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, level, device, - devCode, busWell!=null?busWell.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(jobId, alarmContent); //配置了手机号,可以走短信平台发送 - if(!StringUtils.isEmpty(busWell.getTel())){ - AlarmPushProvider.alarmPushBuilder( busWell.getWellCode() ,devCode,busWell.getTel(),level, busWell.getPosition(), - alarmContent,DeviceTypeEnum.Liquid.toString(),""); - } + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + if (configDeptPermission != null) { + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode,busWell.getTel(), level, busWell.getPosition(), + alarmContent, DeviceTypeEnum.Liquid.toString(), ""); + } + }} } } else {//未超限 //1.清除之前的报警 @@ -176,9 +180,9 @@ BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); - Long jobId=alarmJob==null? SnowFlakeUtil.getId():alarmJob.getId(); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); if (null == alarmJob) { - alarmJobManager.saveData(jobId,devCode, busWell != null ? + alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "0"); } alarmRecordManager.saveData(jobId, "2", null, diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index 706c405..43ef20a 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -2,6 +2,8 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -12,10 +14,7 @@ import org.well.well.core.util.SmsPushUtil; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.Methane; +import org.well.well.domain.*; import org.well.well.util.AbnormalDataProcessor; import org.well.well.util.AlarmPushProvider; import org.well.well.util.SnowFlakeUtil; @@ -74,8 +73,8 @@ Stream listFilter = jsonArray.stream() .filter(object -> ((JSONObject) object).containsKey("gas") - &&AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); - List jsonFilter=listFilter.collect(Collectors.toList()); + && AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); + List jsonFilter = listFilter.collect(Collectors.toList()); for (int i = 0; i < jsonFilter.size(); i++) { try { String gas = ((JSONObject) jsonFilter.get(i)).get("gas").toString(); @@ -125,6 +124,24 @@ if (alarmJob == null) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + if (configDeptPermission != null) { + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("1")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + final String pushMsgContent = "在" + DateUtils.sdf4.format(new Date()) + ",设备" + devCode + "在" + busWell.getPosition() + "发生" + alarmContent + ",浓度值为" + gas; + //4.toDO:向济南港华推送消息 + SmsPushUtil.excutePushMsg(busWell.getTel(), pushMsgContent); + } + } + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + //配置了手机号,可以走短信平台发送 + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode,busWell.getTel(), gas, busWell.getPosition(), + alarmContent, DeviceTypeEnum.Methane.toString(), ""); + } + + } + } } //1.写入新的告警 alarmRecordManager.saveData(jobId, "1", alarmLevel, @@ -132,16 +149,7 @@ devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 ThreadUtil.excuteMsg(jobId, alarmContent); - if (!StringUtils.isEmpty(busWell.getTel())) { - final String pushMsgContent = "在" + DateUtils.sdf4.format(new Date()) + ",设备" + devCode + "在" + busWell.getPosition() + "发生" + alarmContent + ",浓度值为" + gas; - //4.toDO:向济南港华推送消息 - SmsPushUtil.excutePushMsg(busWell.getTel(), pushMsgContent); - } - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder( busWell.getWellCode() ,devCode, busWell.getTel(), gas, busWell.getPosition(), - alarmContent, DeviceTypeEnum.Methane.toString(), ""); - } + } else { alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); } diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e08aa6f..412d589 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -170,12 +170,13 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Tube\",\"devCode\":\"342020030014\",\"mBody\":{\"cell\":15,\"pci\":94,\"rsrp\":-103,\"snr\":7,\"datas\":[{\"gas\":0.0,\"uptime\":\"20211128000000\"}],\"logTime\":\"20211210174648\",\"bType\":\"TubeData\"},\"ts\":1639129608475}"; // // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050010\",\"mBody\":{\"cell\":91,\"pci\":279,\"rsrp\":-105,\"snr\":10,\"datas\":[{\"gas\":40.0,\"uptime\":\"20220113175000\"},{\"liquid\":1040.07336,\"uptime\":\"20220113175000\"}],\"logTime\":\"20220113175144\",\"bType\":\"LGData\"},\"ts\":1642067504321}"; - temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":55.6,\"uptime\":\"20220513020200\"},{\"gas\":40.599999964,\"uptime\":\"20220513030200\"},{\"liquid\":1108.392,\"uptime\":\"20220513020200\"},{\"liquid\":1112.47058,\"uptime\":\"20220513030200\"}],\"logTime\":\"20220513030400\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; + temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":0.6,\"uptime\":\"20230517154056\"},{\"gas\":0.599999964,\"uptime\":\"20230517154056\"},{\"liquid\":1108.392,\"uptime\":\"20230517154056\"},{\"liquid\":1112.47058,\"uptime\":\"20230517154056\"}],\"logTime\":\"20230517154056\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); // for(String dd:arr){ // resp.process(dd); // } +// resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/domain/ConfigDeptPermission.java b/src/main/java/org/well/well/domain/ConfigDeptPermission.java new file mode 100644 index 0000000..d8a8c86 --- /dev/null +++ b/src/main/java/org/well/well/domain/ConfigDeptPermission.java @@ -0,0 +1,187 @@ +package org.well.well.domain; + +import javax.persistence.*; + +/** + * @author cz + */ +@Entity +@Table(name = "config_dept_permission") +public class ConfigDeptPermission { + + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @Id + @Column(name = "ID") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + /** + * 部门编号 + */ + @Column(name ="DEPTID") + private Long deptid; + + /** + * 通讯方式 + */ + @Column(name ="COMMUNICATION") + private String communication; + + /** + * 点位类型 + */ + @Column(name ="WELL_TYPE") + private String wellType; + + + /** + * 设备类型 + */ + @Column(name ="DEVICE_TYPE") + private String deviceType; + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="AREA") + private String area; + + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="MAP") + private String MAP; + + /** + * 精度 + */ + @Column(name ="LNG") + private String LNG; + + public Long getId() { + return id; + } + + public Long getDeptid() { + return deptid; + } + + public String getCommunication() { + return communication; + } + + public String getWellType() { + return wellType; + } + + public String getDeviceType() { + return deviceType; + } + + public String getArea() { + return area; + } + + public String getMAP() { + return MAP; + } + + public String getLNG() { + return LNG; + } + + public String getLAT() { + return LAT; + } + + public String getTels() { + return tels; + } + + public String getSender() { + return sender; + } + + /** + * 维度 + */ + @Column(name ="LAT") + private String LAT; + /** + * 手机号,支持多个 + */ + @Column(name ="TELS") + private String tels; + + public void setId(Long id) { + this.id = id; + } + + public void setDeptid(Long deptid) { + this.deptid = deptid; + } + + public void setCommunication(String communication) { + this.communication = communication; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public void setArea(String area) { + this.area = area; + } + + public void setMAP(String MAP) { + this.MAP = MAP; + } + + public void setLNG(String LNG) { + this.LNG = LNG; + } + + public void setLAT(String LAT) { + this.LAT = LAT; + } + + public void setTels(String tels) { + this.tels = tels; + } + + public void setSender(String sender) { + this.sender = sender; + } + + /** + * 发送方 + */ + @Column(name ="SENDER") + private String sender; + + @Override + public String toString() { + return "ConfigDeptPermission{" + + "id=" + id + + ", deptid=" + deptid + + ", communication=" + communication + + ", wellType=" + wellType + + ", deviceType=" + deviceType + + ", area=" + area + + ", MAP=" + MAP + + ", LNG=" + LNG + + ", LAT=" + LAT + + ", tels=" + tels + + ", sender=" + sender + + '}'; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index f8e83d0..3a65b0d 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -39,6 +39,24 @@ return getSession().createCriteria(Device.class); } + + public void updateAlarmJobById(Long id, String message) { + try { + Criteria criteria = getSession().createCriteria(AlarmJob.class); + criteria.add(Restrictions.eq("id", id)); + criteria.add(Restrictions.in("jobStatus", new String[]{"0", "1", "2"})); + List alarmJobList = criteria.list(); + for (AlarmJob alarmJob : alarmJobList) { + alarmJob.setJobStatus("3"); + alarmJob.setHandleJobTime(new Date()); + alarmJob.setHandleMessage(message); + save(alarmJob); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + public void updateAlarmJobByDevCode(String devcode, String message) { try { Criteria criteria = getSession().createCriteria(AlarmJob.class); diff --git a/src/main/java/org/well/well/manager/AlarmRecordManager.java b/src/main/java/org/well/well/manager/AlarmRecordManager.java index 26c55ef..38e4c27 100644 --- a/src/main/java/org/well/well/manager/AlarmRecordManager.java +++ b/src/main/java/org/well/well/manager/AlarmRecordManager.java @@ -66,6 +66,30 @@ } } + public void clearAlarmByAlarmContent(String devCode,String alarmType ,String alarmContent) {//根据正常数据清除报警 + + + try { + String status = alarmStatusArr[3]; + String hql = "update AlarmRecord set STATUS=:status " + + "where STATUS = " + alarmStatusArr[1] + + " and deviceCode=:deviceCode" + + " and alarmContent=:alarmContent"; + if (alarmTypeArr[0].equals(alarmType)) {//阈值报警 + hql += " and alarmType = " + alarmTypeArr[0]; + } else if (alarmTypeArr[1].equals(alarmType)) {//设备本身报警 + hql += " and alarmType =" + alarmTypeArr[1]; + } + Map map = new HashMap(); + map.put("status", status); + map.put("deviceCode", devCode); + map.put("alarmContent", alarmContent); + batchUpdate(hql, map); + } catch (Exception e) { + e.printStackTrace(); + } + } + public void clearAlarmByNormalData(String devCode, String alarmType) {//根据正常数据清除报警 @@ -101,12 +125,18 @@ } - public AlarmRecord getDeviceAlarm(String devCode, String alarmValue) {//获取设备本身报警消息(正在告警) + /** + * 查询工单编号,主要用于处理相同设备编号的燃气和液体 + * @param devCode + * @param alarmContent + * @return + */ + public AlarmRecord getDeviceAlarm(String devCode, String alarmContent) {//获取设备本身报警消息(正在告警) Criteria criteria = getSession().createCriteria(AlarmRecord.class); criteria.add(Restrictions.eq("deviceCode", devCode)); - criteria.add(Restrictions.eq("alarmType", alarmTypeArr[1])); - criteria.add(Restrictions.eq("alarmValue", alarmValue)); + criteria.add(Restrictions.eq("alarmType", alarmTypeArr[0])); + criteria.add(Restrictions.eq("alarmContent", alarmContent)); criteria.add(Restrictions.eq("status", alarmStatusArr[1])); List alarmRecordList = criteria.list(); return alarmRecordList != null && alarmRecordList.size() > 0 ? diff --git a/src/main/java/org/well/well/manager/BusWellManager.java b/src/main/java/org/well/well/manager/BusWellManager.java index 40e045b..a85e583 100644 --- a/src/main/java/org/well/well/manager/BusWellManager.java +++ b/src/main/java/org/well/well/manager/BusWellManager.java @@ -1,13 +1,18 @@ package org.well.well.manager; +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; +import org.well.well.domain.ConfigDeptPermission; import org.well.well.domain.Device; import org.well.well.domain.DeviceWell; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; @Service public class BusWellManager extends HibernateEntityDao { @@ -32,4 +37,15 @@ return null; } + public ConfigDeptPermission getConfigDeptPermission(String deptId){ + if(StringUtils.isEmpty(deptId)){ + return null; + } + Criteria criteria = getSession().createCriteria(ConfigDeptPermission.class); + criteria.add(Restrictions.eq("deptid", Long.valueOf(deptId))); + List configDeptPermissionList = criteria.list(); + return configDeptPermissionList != null && configDeptPermissionList.size() > 0 ? + configDeptPermissionList.get(0) : null; + } + } \ No newline at end of file diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java index a9cac47..d501108 100644 --- a/src/main/java/org/well/well/manager/LGGasManager.java +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -13,13 +13,11 @@ import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.LGGas; +import org.well.well.domain.*; import org.well.well.util.AbnormalDataProcessor; import org.well.well.util.AlarmPushProvider; import org.well.well.util.SnowFlakeUtil; +import wiremock.org.apache.commons.lang3.ObjectUtils; import javax.annotation.Resource; import java.io.IOException; @@ -73,8 +71,8 @@ Stream listFilter = jsonArray.stream() .filter(object -> ((JSONObject) object).containsKey("gas") - &&AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); - List jsonFilter=listFilter.collect(Collectors.toList()); + && AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); + List jsonFilter = listFilter.collect(Collectors.toList()); for (int i = 0; i < jsonFilter.size(); i++) { try { if (null == ((JSONObject) jsonFilter.get(i)).get("gas")) { @@ -89,9 +87,10 @@ if (i < jsonFilter.size() - 1) { continue; } - + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); //4.清除设备告警 - alarmRecordManager.clearAlarmByNormalData(devCode, ""); + AlarmRecord alarmRecord = alarmRecordManager.getDeviceAlarm(devCode, alarmContent); + alarmRecordManager.clearAlarmByAlarmContent(devCode, "1", alarmContent); //获取报警阈值 List ruleRankList = alarmRuleManager.getRuleRank(devCode); float rankThresh = 0; @@ -106,7 +105,6 @@ Device device = deviceManager.getDeviceByDevCode(devCode); // AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 - String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); Integer alarmLevel = 0; for (int j = 0; j < ruleRankList.size(); j++) { Object rankValue = ((Object[]) ruleRankList.get(j))[2]; @@ -122,11 +120,20 @@ if (device == null) { return; } - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); - Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); - if (alarmJob == null) { + Long jobId = alarmRecord != null && alarmRecord.getJobId() != null ? alarmRecord.getJobId() : SnowFlakeUtil.getId(); + if (!(alarmRecord != null && alarmRecord.getJobId() != null)) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + //配置了手机号,可以走短信平台发送 + if (configDeptPermission != null) { + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode, busWell.getTel(), gas, busWell.getPosition(), + alarmContent, DeviceTypeEnum.LG.toString(), "%LEL"); + } + } + } } //1.写入新的告警 alarmRecordManager.saveData(jobId, "1", alarmLevel, @@ -134,13 +141,10 @@ devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 ThreadUtil.excuteMsg(jobId, alarmContent); - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder(busWell.getWellCode() ,devCode, busWell.getTel(), gas, busWell.getPosition(), - alarmContent, DeviceTypeEnum.LG.toString(), "%LEL"); - } } else { - alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + if (alarmRecord != null && alarmRecord.getJobId() != null) { + alarmJobManager.updateAlarmJobById(alarmRecord.getJobId(), "数据正常,系统自动结束工单"); + } } //3.清离线 deviceManager.clearOffline(devCode); diff --git a/src/main/java/org/well/well/manager/LGLiquidManager.java b/src/main/java/org/well/well/manager/LGLiquidManager.java index d036063..b04e03b 100644 --- a/src/main/java/org/well/well/manager/LGLiquidManager.java +++ b/src/main/java/org/well/well/manager/LGLiquidManager.java @@ -12,15 +12,9 @@ import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.LGLiquid; +import org.well.well.domain.*; import org.well.well.dto.LiquidDTO; -import org.well.well.util.AlarmPushProvider; -import org.well.well.util.Configure; -import org.well.well.util.SnowFlakeUtil; -import org.well.well.util.Weather1Util; +import org.well.well.util.*; import javax.annotation.Resource; import java.io.IOException; @@ -29,6 +23,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Created by test203 on 2017/11/30. @@ -76,19 +72,22 @@ } - @Transactional public void processNormalData(JSONObject jsonObject, String devCode) { String cell = jsonObject.getString("cell"); JSONArray jsonArray = jsonObject.getJSONArray("datas"); BusWell busWell = busWellManager.getWellByDevCode(devCode); - for (int i = 0; i < jsonArray.size(); i++) { + Stream listFilter = jsonArray.stream() + .filter(object -> + ((JSONObject) object).containsKey("liquid")); + List jsonFilter = listFilter.collect(Collectors.toList()); + for (int i = 0; i < jsonFilter.size(); i++) { try { - if (null == ((JSONObject) jsonArray.get(i)).get("liquid")) { + if (null == ((JSONObject) jsonFilter.get(i)).get("liquid")) { continue; } - String level = ((JSONObject) jsonArray.get(i)).getString("liquid"); - String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String level = ((JSONObject) jsonFilter.get(i)).getString("liquid"); + String upTime = ((JSONObject) jsonFilter.get(i)).getString("uptime"); if (StringUtils.isBlank(level)) continue; Double levelFloat = new BigDecimal(level).doubleValue() / 100; @@ -117,47 +116,51 @@ //存采集数据 this.saveData(liquidDTO); //2.有无超限处理流程(判断最后一条数据) - if (i < jsonArray.size() - 1) { + if (i < jsonFilter.size() - 1) { continue; } + String alarmContent = GasLiquidAlarmEnum.LIQUID_OVER_THRESH.getName(); //3.清离线 deviceManager.clearOffline(devCode); //4.清除设备告警 - alarmRecordManager.clearAlarmByNormalData(devCode, ""); + AlarmRecord alarmRecord=alarmRecordManager.getDeviceAlarm(devCode,alarmContent); + alarmRecordManager.clearAlarmByAlarmContent(devCode,"1", alarmContent); //获取报警阈值 String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString()); //超限 if (StringUtils.isNotBlank(thresh) && Float.valueOf(level) >= Float.valueOf(thresh)) { Device device = deviceManager.getDeviceByDevCode(devCode); - //获取报警内容 - String alarmContent = GasLiquidAlarmEnum.LIQUID_OVER_THRESH.getName(); //未注册设备舍弃 if (device == null) { return; } - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); - Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); - if (alarmJob == null) { + Long jobId = alarmRecord != null && alarmRecord.getJobId() != null ? alarmRecord.getJobId() : SnowFlakeUtil.getId(); + if (!(alarmRecord != null && alarmRecord.getJobId() != null)) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + if (configDeptPermission != null) { + //配置了手机号,可以走短信平台发送 + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode, busWell.getTel(), level, busWell.getPosition(), + alarmContent, DeviceTypeEnum.LG.toString(), ""); + } + } + } } //2.写入新的告警 alarmRecordManager.saveData(jobId, "1", null, alarmContent, level, device, devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder( busWell.getWellCode() ,devCode, busWell.getTel(), level, busWell.getPosition(), - alarmContent, DeviceTypeEnum.LG.toString(), ""); - } + ThreadUtil.excuteMsg(jobId, alarmContent); } else {//未超限 - //1.清除之前的报警 - alarmRecordManager.clearAlarmByNormalData(devCode, "1"); - alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + if (alarmRecord!=null&&alarmRecord.getJobId() != null) { + alarmJobManager.updateAlarmJobById(alarmRecord.getJobId(), "数据正常,系统自动结束工单"); + } } } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index 587cddb..0da6e23 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -66,9 +66,9 @@ public void processNormalData(JSONObject jsonObject, String devCode) { String cell = jsonObject.get("cell").toString(); - String pci = null!=jsonObject.get("pci")?jsonObject.get("pci").toString():""; - String rsrp = null!=jsonObject.get("rsrp")?jsonObject.get("rsrp").toString():""; - String snr = null!=jsonObject.get("snr")?jsonObject.get("snr").toString():""; + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); BusWell busWell = busWellManager.getWellByDevCode(devCode); for (int i = 0; i < jsonArray.size(); i++) { @@ -84,7 +84,7 @@ alarmRecordManager.clearAlarmByNormalData(devCode, "2"); //3.存数据 LiquidDTO liquidDTO = new LiquidDTO(level, cell, - upTime, devCode, busWell == null ? "" : busWell.getWellCode(),pci,rsrp,snr); + upTime, devCode, busWell == null ? "" : busWell.getWellCode(), pci, rsrp, snr); this.saveData(liquidDTO);//存采集数据 //4.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -129,22 +129,26 @@ if (device == null) return;//未注册设备舍弃 //1.生成新的工单 Long jobId = SnowFlakeUtil.getId(); - alarmJobManager.saveData(jobId,devCode, busWell != null ? + alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); //2.写入新的告警 alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, level, device, - devCode, busWell!=null?busWell.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(jobId, alarmContent); //配置了手机号,可以走短信平台发送 - if(!StringUtils.isEmpty(busWell.getTel())){ - AlarmPushProvider.alarmPushBuilder( busWell.getWellCode() ,devCode,busWell.getTel(),level, busWell.getPosition(), - alarmContent,DeviceTypeEnum.Liquid.toString(),""); - } + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + if (configDeptPermission != null) { + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode,busWell.getTel(), level, busWell.getPosition(), + alarmContent, DeviceTypeEnum.Liquid.toString(), ""); + } + }} } } else {//未超限 //1.清除之前的报警 @@ -176,9 +180,9 @@ BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); - Long jobId=alarmJob==null? SnowFlakeUtil.getId():alarmJob.getId(); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); if (null == alarmJob) { - alarmJobManager.saveData(jobId,devCode, busWell != null ? + alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "0"); } alarmRecordManager.saveData(jobId, "2", null, diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index 706c405..43ef20a 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -2,6 +2,8 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -12,10 +14,7 @@ import org.well.well.core.util.SmsPushUtil; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.Methane; +import org.well.well.domain.*; import org.well.well.util.AbnormalDataProcessor; import org.well.well.util.AlarmPushProvider; import org.well.well.util.SnowFlakeUtil; @@ -74,8 +73,8 @@ Stream listFilter = jsonArray.stream() .filter(object -> ((JSONObject) object).containsKey("gas") - &&AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); - List jsonFilter=listFilter.collect(Collectors.toList()); + && AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); + List jsonFilter = listFilter.collect(Collectors.toList()); for (int i = 0; i < jsonFilter.size(); i++) { try { String gas = ((JSONObject) jsonFilter.get(i)).get("gas").toString(); @@ -125,6 +124,24 @@ if (alarmJob == null) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + if (configDeptPermission != null) { + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("1")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + final String pushMsgContent = "在" + DateUtils.sdf4.format(new Date()) + ",设备" + devCode + "在" + busWell.getPosition() + "发生" + alarmContent + ",浓度值为" + gas; + //4.toDO:向济南港华推送消息 + SmsPushUtil.excutePushMsg(busWell.getTel(), pushMsgContent); + } + } + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + //配置了手机号,可以走短信平台发送 + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode,busWell.getTel(), gas, busWell.getPosition(), + alarmContent, DeviceTypeEnum.Methane.toString(), ""); + } + + } + } } //1.写入新的告警 alarmRecordManager.saveData(jobId, "1", alarmLevel, @@ -132,16 +149,7 @@ devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 ThreadUtil.excuteMsg(jobId, alarmContent); - if (!StringUtils.isEmpty(busWell.getTel())) { - final String pushMsgContent = "在" + DateUtils.sdf4.format(new Date()) + ",设备" + devCode + "在" + busWell.getPosition() + "发生" + alarmContent + ",浓度值为" + gas; - //4.toDO:向济南港华推送消息 - SmsPushUtil.excutePushMsg(busWell.getTel(), pushMsgContent); - } - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder( busWell.getWellCode() ,devCode, busWell.getTel(), gas, busWell.getPosition(), - alarmContent, DeviceTypeEnum.Methane.toString(), ""); - } + } else { alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); } diff --git a/src/main/java/org/well/well/util/AlarmPushProvider.java b/src/main/java/org/well/well/util/AlarmPushProvider.java index e1fb030..8724a09 100644 --- a/src/main/java/org/well/well/util/AlarmPushProvider.java +++ b/src/main/java/org/well/well/util/AlarmPushProvider.java @@ -2,8 +2,12 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.well.well.domain.AlarmRecord; +import org.well.well.domain.ConfigDeptPermission; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -14,7 +18,6 @@ private static final Logger log = LoggerFactory.getLogger(SendBatchSmsUtil.class.getName()); - public static void aliPushBuilder(String devcode, String tel, String value, String position, String alarmContent, String deviceType, String units) { // if (alarmPushConfig.getEnable().equals(1)) { diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index e08aa6f..412d589 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -170,12 +170,13 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Tube\",\"devCode\":\"342020030014\",\"mBody\":{\"cell\":15,\"pci\":94,\"rsrp\":-103,\"snr\":7,\"datas\":[{\"gas\":0.0,\"uptime\":\"20211128000000\"}],\"logTime\":\"20211210174648\",\"bType\":\"TubeData\"},\"ts\":1639129608475}"; // // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050010\",\"mBody\":{\"cell\":91,\"pci\":279,\"rsrp\":-105,\"snr\":10,\"datas\":[{\"gas\":40.0,\"uptime\":\"20220113175000\"},{\"liquid\":1040.07336,\"uptime\":\"20220113175000\"}],\"logTime\":\"20220113175144\",\"bType\":\"LGData\"},\"ts\":1642067504321}"; - temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":55.6,\"uptime\":\"20220513020200\"},{\"gas\":40.599999964,\"uptime\":\"20220513030200\"},{\"liquid\":1108.392,\"uptime\":\"20220513020200\"},{\"liquid\":1112.47058,\"uptime\":\"20220513030200\"}],\"logTime\":\"20220513030400\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; + temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322021050019\",\"mBody\":{\"cell\":83,\"pci\":100,\"rsrp\":-85,\"snr\":24,\"datas\":[{\"gas\":0.6,\"uptime\":\"20230517154056\"},{\"gas\":0.599999964,\"uptime\":\"20230517154056\"},{\"liquid\":1108.392,\"uptime\":\"20230517154056\"},{\"liquid\":1112.47058,\"uptime\":\"20230517154056\"}],\"logTime\":\"20230517154056\",\"bType\":\"LGData\"},\"ts\":1652382240656}"; AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); // for(String dd:arr){ // resp.process(dd); // } +// resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/domain/ConfigDeptPermission.java b/src/main/java/org/well/well/domain/ConfigDeptPermission.java new file mode 100644 index 0000000..d8a8c86 --- /dev/null +++ b/src/main/java/org/well/well/domain/ConfigDeptPermission.java @@ -0,0 +1,187 @@ +package org.well.well.domain; + +import javax.persistence.*; + +/** + * @author cz + */ +@Entity +@Table(name = "config_dept_permission") +public class ConfigDeptPermission { + + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @Id + @Column(name = "ID") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + /** + * 部门编号 + */ + @Column(name ="DEPTID") + private Long deptid; + + /** + * 通讯方式 + */ + @Column(name ="COMMUNICATION") + private String communication; + + /** + * 点位类型 + */ + @Column(name ="WELL_TYPE") + private String wellType; + + + /** + * 设备类型 + */ + @Column(name ="DEVICE_TYPE") + private String deviceType; + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="AREA") + private String area; + + + /** + * 使用地图(0百度,1高德,2arcgis) + */ + @Column(name ="MAP") + private String MAP; + + /** + * 精度 + */ + @Column(name ="LNG") + private String LNG; + + public Long getId() { + return id; + } + + public Long getDeptid() { + return deptid; + } + + public String getCommunication() { + return communication; + } + + public String getWellType() { + return wellType; + } + + public String getDeviceType() { + return deviceType; + } + + public String getArea() { + return area; + } + + public String getMAP() { + return MAP; + } + + public String getLNG() { + return LNG; + } + + public String getLAT() { + return LAT; + } + + public String getTels() { + return tels; + } + + public String getSender() { + return sender; + } + + /** + * 维度 + */ + @Column(name ="LAT") + private String LAT; + /** + * 手机号,支持多个 + */ + @Column(name ="TELS") + private String tels; + + public void setId(Long id) { + this.id = id; + } + + public void setDeptid(Long deptid) { + this.deptid = deptid; + } + + public void setCommunication(String communication) { + this.communication = communication; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public void setArea(String area) { + this.area = area; + } + + public void setMAP(String MAP) { + this.MAP = MAP; + } + + public void setLNG(String LNG) { + this.LNG = LNG; + } + + public void setLAT(String LAT) { + this.LAT = LAT; + } + + public void setTels(String tels) { + this.tels = tels; + } + + public void setSender(String sender) { + this.sender = sender; + } + + /** + * 发送方 + */ + @Column(name ="SENDER") + private String sender; + + @Override + public String toString() { + return "ConfigDeptPermission{" + + "id=" + id + + ", deptid=" + deptid + + ", communication=" + communication + + ", wellType=" + wellType + + ", deviceType=" + deviceType + + ", area=" + area + + ", MAP=" + MAP + + ", LNG=" + LNG + + ", LAT=" + LAT + + ", tels=" + tels + + ", sender=" + sender + + '}'; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index f8e83d0..3a65b0d 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -39,6 +39,24 @@ return getSession().createCriteria(Device.class); } + + public void updateAlarmJobById(Long id, String message) { + try { + Criteria criteria = getSession().createCriteria(AlarmJob.class); + criteria.add(Restrictions.eq("id", id)); + criteria.add(Restrictions.in("jobStatus", new String[]{"0", "1", "2"})); + List alarmJobList = criteria.list(); + for (AlarmJob alarmJob : alarmJobList) { + alarmJob.setJobStatus("3"); + alarmJob.setHandleJobTime(new Date()); + alarmJob.setHandleMessage(message); + save(alarmJob); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + public void updateAlarmJobByDevCode(String devcode, String message) { try { Criteria criteria = getSession().createCriteria(AlarmJob.class); diff --git a/src/main/java/org/well/well/manager/AlarmRecordManager.java b/src/main/java/org/well/well/manager/AlarmRecordManager.java index 26c55ef..38e4c27 100644 --- a/src/main/java/org/well/well/manager/AlarmRecordManager.java +++ b/src/main/java/org/well/well/manager/AlarmRecordManager.java @@ -66,6 +66,30 @@ } } + public void clearAlarmByAlarmContent(String devCode,String alarmType ,String alarmContent) {//根据正常数据清除报警 + + + try { + String status = alarmStatusArr[3]; + String hql = "update AlarmRecord set STATUS=:status " + + "where STATUS = " + alarmStatusArr[1] + + " and deviceCode=:deviceCode" + + " and alarmContent=:alarmContent"; + if (alarmTypeArr[0].equals(alarmType)) {//阈值报警 + hql += " and alarmType = " + alarmTypeArr[0]; + } else if (alarmTypeArr[1].equals(alarmType)) {//设备本身报警 + hql += " and alarmType =" + alarmTypeArr[1]; + } + Map map = new HashMap(); + map.put("status", status); + map.put("deviceCode", devCode); + map.put("alarmContent", alarmContent); + batchUpdate(hql, map); + } catch (Exception e) { + e.printStackTrace(); + } + } + public void clearAlarmByNormalData(String devCode, String alarmType) {//根据正常数据清除报警 @@ -101,12 +125,18 @@ } - public AlarmRecord getDeviceAlarm(String devCode, String alarmValue) {//获取设备本身报警消息(正在告警) + /** + * 查询工单编号,主要用于处理相同设备编号的燃气和液体 + * @param devCode + * @param alarmContent + * @return + */ + public AlarmRecord getDeviceAlarm(String devCode, String alarmContent) {//获取设备本身报警消息(正在告警) Criteria criteria = getSession().createCriteria(AlarmRecord.class); criteria.add(Restrictions.eq("deviceCode", devCode)); - criteria.add(Restrictions.eq("alarmType", alarmTypeArr[1])); - criteria.add(Restrictions.eq("alarmValue", alarmValue)); + criteria.add(Restrictions.eq("alarmType", alarmTypeArr[0])); + criteria.add(Restrictions.eq("alarmContent", alarmContent)); criteria.add(Restrictions.eq("status", alarmStatusArr[1])); List alarmRecordList = criteria.list(); return alarmRecordList != null && alarmRecordList.size() > 0 ? diff --git a/src/main/java/org/well/well/manager/BusWellManager.java b/src/main/java/org/well/well/manager/BusWellManager.java index 40e045b..a85e583 100644 --- a/src/main/java/org/well/well/manager/BusWellManager.java +++ b/src/main/java/org/well/well/manager/BusWellManager.java @@ -1,13 +1,18 @@ package org.well.well.manager; +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; +import org.well.well.domain.ConfigDeptPermission; import org.well.well.domain.Device; import org.well.well.domain.DeviceWell; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; @Service public class BusWellManager extends HibernateEntityDao { @@ -32,4 +37,15 @@ return null; } + public ConfigDeptPermission getConfigDeptPermission(String deptId){ + if(StringUtils.isEmpty(deptId)){ + return null; + } + Criteria criteria = getSession().createCriteria(ConfigDeptPermission.class); + criteria.add(Restrictions.eq("deptid", Long.valueOf(deptId))); + List configDeptPermissionList = criteria.list(); + return configDeptPermissionList != null && configDeptPermissionList.size() > 0 ? + configDeptPermissionList.get(0) : null; + } + } \ No newline at end of file diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java index a9cac47..d501108 100644 --- a/src/main/java/org/well/well/manager/LGGasManager.java +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -13,13 +13,11 @@ import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.LGGas; +import org.well.well.domain.*; import org.well.well.util.AbnormalDataProcessor; import org.well.well.util.AlarmPushProvider; import org.well.well.util.SnowFlakeUtil; +import wiremock.org.apache.commons.lang3.ObjectUtils; import javax.annotation.Resource; import java.io.IOException; @@ -73,8 +71,8 @@ Stream listFilter = jsonArray.stream() .filter(object -> ((JSONObject) object).containsKey("gas") - &&AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); - List jsonFilter=listFilter.collect(Collectors.toList()); + && AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); + List jsonFilter = listFilter.collect(Collectors.toList()); for (int i = 0; i < jsonFilter.size(); i++) { try { if (null == ((JSONObject) jsonFilter.get(i)).get("gas")) { @@ -89,9 +87,10 @@ if (i < jsonFilter.size() - 1) { continue; } - + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); //4.清除设备告警 - alarmRecordManager.clearAlarmByNormalData(devCode, ""); + AlarmRecord alarmRecord = alarmRecordManager.getDeviceAlarm(devCode, alarmContent); + alarmRecordManager.clearAlarmByAlarmContent(devCode, "1", alarmContent); //获取报警阈值 List ruleRankList = alarmRuleManager.getRuleRank(devCode); float rankThresh = 0; @@ -106,7 +105,6 @@ Device device = deviceManager.getDeviceByDevCode(devCode); // AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 - String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); Integer alarmLevel = 0; for (int j = 0; j < ruleRankList.size(); j++) { Object rankValue = ((Object[]) ruleRankList.get(j))[2]; @@ -122,11 +120,20 @@ if (device == null) { return; } - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); - Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); - if (alarmJob == null) { + Long jobId = alarmRecord != null && alarmRecord.getJobId() != null ? alarmRecord.getJobId() : SnowFlakeUtil.getId(); + if (!(alarmRecord != null && alarmRecord.getJobId() != null)) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + //配置了手机号,可以走短信平台发送 + if (configDeptPermission != null) { + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode, busWell.getTel(), gas, busWell.getPosition(), + alarmContent, DeviceTypeEnum.LG.toString(), "%LEL"); + } + } + } } //1.写入新的告警 alarmRecordManager.saveData(jobId, "1", alarmLevel, @@ -134,13 +141,10 @@ devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 ThreadUtil.excuteMsg(jobId, alarmContent); - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder(busWell.getWellCode() ,devCode, busWell.getTel(), gas, busWell.getPosition(), - alarmContent, DeviceTypeEnum.LG.toString(), "%LEL"); - } } else { - alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + if (alarmRecord != null && alarmRecord.getJobId() != null) { + alarmJobManager.updateAlarmJobById(alarmRecord.getJobId(), "数据正常,系统自动结束工单"); + } } //3.清离线 deviceManager.clearOffline(devCode); diff --git a/src/main/java/org/well/well/manager/LGLiquidManager.java b/src/main/java/org/well/well/manager/LGLiquidManager.java index d036063..b04e03b 100644 --- a/src/main/java/org/well/well/manager/LGLiquidManager.java +++ b/src/main/java/org/well/well/manager/LGLiquidManager.java @@ -12,15 +12,9 @@ import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.LGLiquid; +import org.well.well.domain.*; import org.well.well.dto.LiquidDTO; -import org.well.well.util.AlarmPushProvider; -import org.well.well.util.Configure; -import org.well.well.util.SnowFlakeUtil; -import org.well.well.util.Weather1Util; +import org.well.well.util.*; import javax.annotation.Resource; import java.io.IOException; @@ -29,6 +23,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Created by test203 on 2017/11/30. @@ -76,19 +72,22 @@ } - @Transactional public void processNormalData(JSONObject jsonObject, String devCode) { String cell = jsonObject.getString("cell"); JSONArray jsonArray = jsonObject.getJSONArray("datas"); BusWell busWell = busWellManager.getWellByDevCode(devCode); - for (int i = 0; i < jsonArray.size(); i++) { + Stream listFilter = jsonArray.stream() + .filter(object -> + ((JSONObject) object).containsKey("liquid")); + List jsonFilter = listFilter.collect(Collectors.toList()); + for (int i = 0; i < jsonFilter.size(); i++) { try { - if (null == ((JSONObject) jsonArray.get(i)).get("liquid")) { + if (null == ((JSONObject) jsonFilter.get(i)).get("liquid")) { continue; } - String level = ((JSONObject) jsonArray.get(i)).getString("liquid"); - String upTime = ((JSONObject) jsonArray.get(i)).getString("uptime"); + String level = ((JSONObject) jsonFilter.get(i)).getString("liquid"); + String upTime = ((JSONObject) jsonFilter.get(i)).getString("uptime"); if (StringUtils.isBlank(level)) continue; Double levelFloat = new BigDecimal(level).doubleValue() / 100; @@ -117,47 +116,51 @@ //存采集数据 this.saveData(liquidDTO); //2.有无超限处理流程(判断最后一条数据) - if (i < jsonArray.size() - 1) { + if (i < jsonFilter.size() - 1) { continue; } + String alarmContent = GasLiquidAlarmEnum.LIQUID_OVER_THRESH.getName(); //3.清离线 deviceManager.clearOffline(devCode); //4.清除设备告警 - alarmRecordManager.clearAlarmByNormalData(devCode, ""); + AlarmRecord alarmRecord=alarmRecordManager.getDeviceAlarm(devCode,alarmContent); + alarmRecordManager.clearAlarmByAlarmContent(devCode,"1", alarmContent); //获取报警阈值 String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString()); //超限 if (StringUtils.isNotBlank(thresh) && Float.valueOf(level) >= Float.valueOf(thresh)) { Device device = deviceManager.getDeviceByDevCode(devCode); - //获取报警内容 - String alarmContent = GasLiquidAlarmEnum.LIQUID_OVER_THRESH.getName(); //未注册设备舍弃 if (device == null) { return; } - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); - Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); - if (alarmJob == null) { + Long jobId = alarmRecord != null && alarmRecord.getJobId() != null ? alarmRecord.getJobId() : SnowFlakeUtil.getId(); + if (!(alarmRecord != null && alarmRecord.getJobId() != null)) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + if (configDeptPermission != null) { + //配置了手机号,可以走短信平台发送 + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode, busWell.getTel(), level, busWell.getPosition(), + alarmContent, DeviceTypeEnum.LG.toString(), ""); + } + } + } } //2.写入新的告警 alarmRecordManager.saveData(jobId, "1", null, alarmContent, level, device, devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder( busWell.getWellCode() ,devCode, busWell.getTel(), level, busWell.getPosition(), - alarmContent, DeviceTypeEnum.LG.toString(), ""); - } + ThreadUtil.excuteMsg(jobId, alarmContent); } else {//未超限 - //1.清除之前的报警 - alarmRecordManager.clearAlarmByNormalData(devCode, "1"); - alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + if (alarmRecord!=null&&alarmRecord.getJobId() != null) { + alarmJobManager.updateAlarmJobById(alarmRecord.getJobId(), "数据正常,系统自动结束工单"); + } } } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index 587cddb..0da6e23 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -66,9 +66,9 @@ public void processNormalData(JSONObject jsonObject, String devCode) { String cell = jsonObject.get("cell").toString(); - String pci = null!=jsonObject.get("pci")?jsonObject.get("pci").toString():""; - String rsrp = null!=jsonObject.get("rsrp")?jsonObject.get("rsrp").toString():""; - String snr = null!=jsonObject.get("snr")?jsonObject.get("snr").toString():""; + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); BusWell busWell = busWellManager.getWellByDevCode(devCode); for (int i = 0; i < jsonArray.size(); i++) { @@ -84,7 +84,7 @@ alarmRecordManager.clearAlarmByNormalData(devCode, "2"); //3.存数据 LiquidDTO liquidDTO = new LiquidDTO(level, cell, - upTime, devCode, busWell == null ? "" : busWell.getWellCode(),pci,rsrp,snr); + upTime, devCode, busWell == null ? "" : busWell.getWellCode(), pci, rsrp, snr); this.saveData(liquidDTO);//存采集数据 //4.有无超限处理流程(判断最后一条数据) if (i < jsonArray.size() - 1) continue; @@ -129,22 +129,26 @@ if (device == null) return;//未注册设备舍弃 //1.生成新的工单 Long jobId = SnowFlakeUtil.getId(); - alarmJobManager.saveData(jobId,devCode, busWell != null ? + alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); //2.写入新的告警 alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, level, device, - devCode, busWell!=null?busWell.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(jobId, alarmContent); //配置了手机号,可以走短信平台发送 - if(!StringUtils.isEmpty(busWell.getTel())){ - AlarmPushProvider.alarmPushBuilder( busWell.getWellCode() ,devCode,busWell.getTel(),level, busWell.getPosition(), - alarmContent,DeviceTypeEnum.Liquid.toString(),""); - } + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + if (configDeptPermission != null) { + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode,busWell.getTel(), level, busWell.getPosition(), + alarmContent, DeviceTypeEnum.Liquid.toString(), ""); + } + }} } } else {//未超限 //1.清除之前的报警 @@ -176,9 +180,9 @@ BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); - Long jobId=alarmJob==null? SnowFlakeUtil.getId():alarmJob.getId(); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); if (null == alarmJob) { - alarmJobManager.saveData(jobId,devCode, busWell != null ? + alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "0"); } alarmRecordManager.saveData(jobId, "2", null, diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index 706c405..43ef20a 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -2,6 +2,8 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -12,10 +14,7 @@ import org.well.well.core.util.SmsPushUtil; import org.well.well.core.util.StringUtils; import org.well.well.core.util.ThreadUtil; -import org.well.well.domain.AlarmJob; -import org.well.well.domain.BusWell; -import org.well.well.domain.Device; -import org.well.well.domain.Methane; +import org.well.well.domain.*; import org.well.well.util.AbnormalDataProcessor; import org.well.well.util.AlarmPushProvider; import org.well.well.util.SnowFlakeUtil; @@ -74,8 +73,8 @@ Stream listFilter = jsonArray.stream() .filter(object -> ((JSONObject) object).containsKey("gas") - &&AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); - List jsonFilter=listFilter.collect(Collectors.toList()); + && AbnormalDataProcessor.showSkip(((JSONObject) object).getString("gas"))); + List jsonFilter = listFilter.collect(Collectors.toList()); for (int i = 0; i < jsonFilter.size(); i++) { try { String gas = ((JSONObject) jsonFilter.get(i)).get("gas").toString(); @@ -125,6 +124,24 @@ if (alarmJob == null) { alarmJobManager.saveData(jobId, devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + ConfigDeptPermission configDeptPermission = busWellManager.getConfigDeptPermission(busWell.getDeptid()); + if (configDeptPermission != null) { + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("1")) { + if (!StringUtils.isEmpty(busWell.getTel())) { + final String pushMsgContent = "在" + DateUtils.sdf4.format(new Date()) + ",设备" + devCode + "在" + busWell.getPosition() + "发生" + alarmContent + ",浓度值为" + gas; + //4.toDO:向济南港华推送消息 + SmsPushUtil.excutePushMsg(busWell.getTel(), pushMsgContent); + } + } + if (!StringUtils.isEmpty(configDeptPermission.getSender()) && configDeptPermission.getSender().equals("2")) { + //配置了手机号,可以走短信平台发送 + if (!StringUtils.isEmpty(busWell.getTel())) { + AlarmPushProvider.alarmPushBuilder(busWell.getWellCode(), devCode,busWell.getTel(), gas, busWell.getPosition(), + alarmContent, DeviceTypeEnum.Methane.toString(), ""); + } + + } + } } //1.写入新的告警 alarmRecordManager.saveData(jobId, "1", alarmLevel, @@ -132,16 +149,7 @@ devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 ThreadUtil.excuteMsg(jobId, alarmContent); - if (!StringUtils.isEmpty(busWell.getTel())) { - final String pushMsgContent = "在" + DateUtils.sdf4.format(new Date()) + ",设备" + devCode + "在" + busWell.getPosition() + "发生" + alarmContent + ",浓度值为" + gas; - //4.toDO:向济南港华推送消息 - SmsPushUtil.excutePushMsg(busWell.getTel(), pushMsgContent); - } - //配置了手机号,可以走短信平台发送 - if (!StringUtils.isEmpty(busWell.getTel())) { - AlarmPushProvider.alarmPushBuilder( busWell.getWellCode() ,devCode, busWell.getTel(), gas, busWell.getPosition(), - alarmContent, DeviceTypeEnum.Methane.toString(), ""); - } + } else { alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); } diff --git a/src/main/java/org/well/well/util/AlarmPushProvider.java b/src/main/java/org/well/well/util/AlarmPushProvider.java index e1fb030..8724a09 100644 --- a/src/main/java/org/well/well/util/AlarmPushProvider.java +++ b/src/main/java/org/well/well/util/AlarmPushProvider.java @@ -2,8 +2,12 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import org.hibernate.Criteria; +import org.hibernate.criterion.Restrictions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.well.well.domain.AlarmRecord; +import org.well.well.domain.ConfigDeptPermission; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -14,7 +18,6 @@ private static final Logger log = LoggerFactory.getLogger(SendBatchSmsUtil.class.getName()); - public static void aliPushBuilder(String devcode, String tel, String value, String position, String alarmContent, String deviceType, String units) { // if (alarmPushConfig.getEnable().equals(1)) { diff --git a/src/main/java/org/well/well/util/SendBatchSmsUtil.java b/src/main/java/org/well/well/util/SendBatchSmsUtil.java index 32925ad..5337c8a 100644 --- a/src/main/java/org/well/well/util/SendBatchSmsUtil.java +++ b/src/main/java/org/well/well/util/SendBatchSmsUtil.java @@ -18,6 +18,9 @@ import java.util.Map; import java.util.concurrent.CompletableFuture; +/** + * 阿里云短信平台util + */ public class SendBatchSmsUtil { private static final Logger log = LoggerFactory.getLogger(SendBatchSmsUtil.class.getName());