|
@@ -358,181 +358,180 @@ public class DataServiceImpl {
|
|
|
|
|
|
|
|
|
Map m = JSON.parseObject(content);
|
|
|
- String time = m.get("flexem_timestamp").toString();
|
|
|
- List<Map> realJson =JSONObject.parseArray(m.get("实际数据").toString(), Map.class);
|
|
|
- List<Map> warningJson = JSONObject.parseArray(m.get("报警状态").toString(), Map.class);
|
|
|
- List<Map> warningSetJson = JSONObject.parseArray(m.get("报警设置").toString(), Map.class);
|
|
|
- realJson.addAll(warningSetJson);
|
|
|
- realJson.addAll(warningJson);
|
|
|
-
|
|
|
- String deviceDesc = (String) m.get("设备名称");
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- int updateCount=0;
|
|
|
- int saveCount=0;
|
|
|
- for (Object real : realJson) {
|
|
|
- Map<String,Object> item = (Map) real;
|
|
|
- for (String key : item.keySet()) {
|
|
|
- Map<String, Object> groupOpt = mapList.stream().filter(f -> key.equals(f.get("attribute"))).findAny().orElse(null);
|
|
|
- String value =String.valueOf(item.get(key));
|
|
|
- String id = deviceName + "_" + key.replace("_设定值"," _bjsxz");
|
|
|
-
|
|
|
- if (groupOpt != null) {//有修改
|
|
|
- Update up = new Update();
|
|
|
- //写主题只更新读写状态,读主题更新值
|
|
|
- up.set("value", value);
|
|
|
- up.set("date", date);
|
|
|
- up.set("onLine", "在线");
|
|
|
- Query queryUpdate = Query.query(Criteria.where("deviceName").is(deviceName).and("_id").is(id));
|
|
|
- ops.updateOne(queryUpdate, up);
|
|
|
- updateCount++;
|
|
|
- }else{
|
|
|
- Map<String, Object> realData = new HashMap<>();
|
|
|
- realData.put("_id", id);
|
|
|
- realData.put("dataCode",id);
|
|
|
- realData.put("dataName", key);
|
|
|
- realData.put("value", value);
|
|
|
- realData.put("attribute", key);
|
|
|
- realData.put("date",date);
|
|
|
-
|
|
|
- realData.put("dataPointType", dataPointType);
|
|
|
- realData.put("productKey", productKey);
|
|
|
- realData.put("deviceName", deviceName);
|
|
|
- realData.put("alarmLevel", "无");
|
|
|
- realData.put("saveHistory", "是");
|
|
|
- realData.put("warning", "否");
|
|
|
- realData.put("onLine", "在线");
|
|
|
- realData.put("custom1", ip);
|
|
|
- realData.put("custom2", port);
|
|
|
- realData.put("custom3", "smart_heating");
|
|
|
- realData.put("deviceDesc", deviceDesc);
|
|
|
-
|
|
|
- if(key.contains("_报警状态")){
|
|
|
- realData.put("warningStartTime", "");
|
|
|
- }
|
|
|
-
|
|
|
- if(key.contains("_设定值")){
|
|
|
- realData.put("readWrite", "写");
|
|
|
+ if(!m.isEmpty()){
|
|
|
+ String time = m.get("flexem_timestamp").toString();
|
|
|
+ List<Map> realJson =JSONObject.parseArray(m.get("实际数据").toString(), Map.class);
|
|
|
+ List<Map> warningJson = JSONObject.parseArray(m.get("报警状态").toString(), Map.class);
|
|
|
+ List<Map> warningSetJson = JSONObject.parseArray(m.get("报警设置").toString(), Map.class);
|
|
|
+ realJson.addAll(warningSetJson);
|
|
|
+ realJson.addAll(warningJson);
|
|
|
+
|
|
|
+ String deviceDesc = (String) m.get("设备名称");
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ int updateCount=0;
|
|
|
+ int saveCount=0;
|
|
|
+ for (Object real : realJson) {
|
|
|
+ Map<String,Object> item = (Map) real;
|
|
|
+ for (String key : item.keySet()) {
|
|
|
+ Map<String, Object> groupOpt = mapList.stream().filter(f -> key.equals(f.get("attribute"))).findAny().orElse(null);
|
|
|
+ String value =String.valueOf(item.get(key));
|
|
|
+ String id = deviceName + "_" + key.replace("_设定值","_bjsxz");
|
|
|
+
|
|
|
+ if (groupOpt != null) {//有修改
|
|
|
+ Update up = new Update();
|
|
|
+ //写主题只更新读写状态,读主题更新值
|
|
|
+ up.set("value", value);
|
|
|
+ up.set("date", date);
|
|
|
+ up.set("onLine", "在线");
|
|
|
+ Query queryUpdate = Query.query(Criteria.where("deviceName").is(deviceName).and("_id").is(id));
|
|
|
+ ops.updateOne(queryUpdate, up);
|
|
|
+ updateCount++;
|
|
|
}else{
|
|
|
- realData.put("readWrite", "读");
|
|
|
+ Map<String, Object> realData = new HashMap<>();
|
|
|
+ realData.put("_id", id);
|
|
|
+ realData.put("dataCode",id);
|
|
|
+ realData.put("dataName", key);
|
|
|
+ realData.put("value", value);
|
|
|
+ realData.put("attribute", key);
|
|
|
+ realData.put("date",date);
|
|
|
+
|
|
|
+ realData.put("dataPointType", dataPointType);
|
|
|
+ realData.put("productKey", productKey);
|
|
|
+ realData.put("deviceName", deviceName);
|
|
|
+ realData.put("alarmLevel", "无");
|
|
|
+ realData.put("saveHistory", "是");
|
|
|
+ realData.put("warning", "否");
|
|
|
+ realData.put("onLine", "在线");
|
|
|
+ realData.put("custom1", ip);
|
|
|
+ realData.put("custom2", port);
|
|
|
+ realData.put("custom3", "smart_heating");
|
|
|
+ realData.put("deviceDesc", deviceDesc);
|
|
|
+ realData.put("topic",topic.replace("up","down"));
|
|
|
+
|
|
|
+ if(key.contains("_报警状态")){
|
|
|
+ realData.put("warningStartTime", "");
|
|
|
+ }
|
|
|
+
|
|
|
+ if(key.contains("_设定值")){
|
|
|
+ realData.put("readWrite", "写");
|
|
|
+ }else{
|
|
|
+ realData.put("readWrite", "读");
|
|
|
+ }
|
|
|
+ ops.insert(realData);
|
|
|
+ saveCount++;
|
|
|
}
|
|
|
- ops.insert(realData);
|
|
|
- saveCount++;
|
|
|
}
|
|
|
+ //updateCount = setOpt(item, deviceAll, ops, host, port, date, deviceName, dataPointType, updateCount, saveCount);
|
|
|
}
|
|
|
- //updateCount = setOpt(item, deviceAll, ops, host, port, date, deviceName, dataPointType, updateCount, saveCount);
|
|
|
- }
|
|
|
- //插入或修改
|
|
|
+ //插入或修改
|
|
|
|
|
|
- if (updateCount != 0 || saveCount !=0) {
|
|
|
- BulkWriteResult result = ops.execute();
|
|
|
- logger.info("更新实时记录:" + updateCount);
|
|
|
- updateCount= 0;
|
|
|
- saveCount = 0;
|
|
|
- }
|
|
|
+ if (updateCount != 0 || saveCount !=0) {
|
|
|
+ BulkWriteResult result = ops.execute();
|
|
|
+ logger.info("更新实时记录:" + updateCount);
|
|
|
+ }
|
|
|
|
|
|
- //查询报警历史记录
|
|
|
- for(Object warning : warningJson){
|
|
|
- Map<String,Object> item = (Map) warning;
|
|
|
- for (String key : item.keySet()) {
|
|
|
- Map<String, Object> groupOpt = mapList.stream().filter(f -> key.equals(f.get("attribute"))).findAny().orElse(null);
|
|
|
- String value = String.valueOf(item.get(key));
|
|
|
- String id = deviceName + "_" + key;
|
|
|
- if (groupOpt != null) {
|
|
|
- //有修改
|
|
|
- //判断报警历史表是否有该code数据
|
|
|
- Query h =Query.query(Criteria.where("dataCode").is(id).and("restoreTime").is(null));
|
|
|
- Map his = dataServiceImpl.historymongoTemplate.findOne(h,Map.class, tableNameHis);
|
|
|
-
|
|
|
- Query queryUpdate = Query.query(Criteria.where("deviceName").is(deviceName).and("_id").is(id));
|
|
|
-
|
|
|
- if(value.equals("0.0") || value.equals("0")) {
|
|
|
- //报警恢复正常
|
|
|
- //修改历史数据库
|
|
|
- if(his != null) {
|
|
|
- Update update = new Update();
|
|
|
- update.set("restoreTime",new Date());
|
|
|
- dataServiceImpl.historymongoTemplate.updateMulti(h,update,tableNameHis);
|
|
|
- }
|
|
|
- //修改实时数据库
|
|
|
- Update updateRel = new Update();
|
|
|
- updateRel.set("deviceDesc", deviceDesc);
|
|
|
- updateRel.set("warning", "否");
|
|
|
- updateRel.set("warningStartTime", "");
|
|
|
- updateRel.set("alarmLevel", "");
|
|
|
- updateRel.set("value", value);
|
|
|
- updateRel.set("date", date);
|
|
|
- updateRel.set("onLine", "在线");
|
|
|
-
|
|
|
- dataServiceImpl.realDataMongoTemplate.updateMulti(queryUpdate, updateRel, tableNameReal);
|
|
|
-
|
|
|
- }else {
|
|
|
- Update update = new Update();
|
|
|
- update.set("warning", "未知报警");
|
|
|
- update.set("alarmLevel", "提醒");
|
|
|
- update.set("deviceDesc", deviceDesc);
|
|
|
- update.set("date", date);
|
|
|
- update.set("warningStartTime", new Date());
|
|
|
- update.set("value", value);
|
|
|
- update.set("dataName", key);
|
|
|
- update.set("readWrite", "读");
|
|
|
- //判断此数据点是否已经完成工单,如果完成就把状态标识字段删除
|
|
|
- if(groupOpt.containsKey("orderState")) {
|
|
|
- if((Integer)groupOpt.get("orderState") == 1) {
|
|
|
- update.unset("orderState");
|
|
|
+ //查询报警历史记录
|
|
|
+ for(Object warning : warningJson){
|
|
|
+ Map<String,Object> item = (Map) warning;
|
|
|
+ for (String key : item.keySet()) {
|
|
|
+ Map<String, Object> groupOpt = mapList.stream().filter(f -> key.equals(f.get("attribute"))).findAny().orElse(null);
|
|
|
+ String value = String.valueOf(item.get(key));
|
|
|
+ String id = deviceName + "_" + key;
|
|
|
+ if (groupOpt != null) {
|
|
|
+ //有修改
|
|
|
+ //判断报警历史表是否有该code数据
|
|
|
+ Query h =Query.query(Criteria.where("dataCode").is(id).and("restoreTime").is(null));
|
|
|
+ Map his = dataServiceImpl.historymongoTemplate.findOne(h,Map.class, tableNameHis);
|
|
|
+
|
|
|
+ Query queryUpdate = Query.query(Criteria.where("deviceName").is(deviceName).and("_id").is(id));
|
|
|
+
|
|
|
+ if(value.equals("0.0") || value.equals("0")) {
|
|
|
+ //报警恢复正常
|
|
|
+ //修改历史数据库
|
|
|
+ if(his != null) {
|
|
|
+ Update update = new Update();
|
|
|
+ update.set("restoreTime",new Date());
|
|
|
+ dataServiceImpl.historymongoTemplate.updateMulti(h,update,tableNameHis);
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- //此设备是否存在项目
|
|
|
- Query queryStru= new Query(new Criteria("companyStructureId").is(new BasicDBObject("$ne", null)).and("deviceName").is(deviceName));
|
|
|
- Map mm = dataServiceImpl.realDataMongoTemplate.findOne(queryStru,Map.class, tableNameReal);
|
|
|
- CompanyStructure co = JSON.parseObject(JSON.toJSONString(groupOpt.get("companyStructure")),CompanyStructure.class);
|
|
|
- if(co == null) {
|
|
|
- if(mm != null) {
|
|
|
- update.set("companyStructureId", mm.get("companyStructureId"));
|
|
|
- update.set("companyStructure", mm.get("companyStructure"));
|
|
|
+ //修改实时数据库
|
|
|
+ Update updateRel = new Update();
|
|
|
+ updateRel.set("deviceDesc", deviceDesc);
|
|
|
+ updateRel.set("warning", "否");
|
|
|
+ updateRel.set("warningStartTime", "");
|
|
|
+ updateRel.set("alarmLevel", "无");
|
|
|
+ updateRel.set("value", value);
|
|
|
+ updateRel.set("date", date);
|
|
|
+ updateRel.set("onLine", "在线");
|
|
|
+
|
|
|
+ dataServiceImpl.realDataMongoTemplate.updateMulti(queryUpdate, updateRel, tableNameReal);
|
|
|
+
|
|
|
+ }else if(value.equals("1.0") || value.equals("1")){
|
|
|
+ Update update = new Update();
|
|
|
+ update.set("warning", "未知报警");
|
|
|
+ update.set("alarmLevel", "提醒");
|
|
|
+ update.set("deviceDesc", deviceDesc);
|
|
|
+ update.set("date", date);
|
|
|
+ update.set("warningStartTime", new Date());
|
|
|
+ update.set("value", value);
|
|
|
+ update.set("readWrite", "读");
|
|
|
+ //判断此数据点是否已经完成工单,如果完成就把状态标识字段删除
|
|
|
+ if(groupOpt.containsKey("orderState")) {
|
|
|
+ if((Integer)groupOpt.get("orderState") == 1) {
|
|
|
+ update.unset("orderState");
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- dataServiceImpl.realDataMongoTemplate.updateMulti(query,update,tableNameReal);
|
|
|
- //重新查询去除掉orderState字段的记录
|
|
|
- Map delOrder = dataServiceImpl.realDataMongoTemplate.findOne(query, Map.class,tableNameReal);
|
|
|
|
|
|
- //进行拨打电话操作
|
|
|
- if(delOrder.get("orderState") == null || "".equals(delOrder.get("orderState"))) {
|
|
|
+ //此设备是否存在项目
|
|
|
+ Query queryStru= new Query(new Criteria("companyStructureId").is(new BasicDBObject("$ne", null)).and("deviceName").is(deviceName));
|
|
|
+ Map mm = dataServiceImpl.realDataMongoTemplate.findOne(queryStru,Map.class, tableNameReal);
|
|
|
+ CompanyStructure co = JSON.parseObject(JSON.toJSONString(groupOpt.get("companyStructure")),CompanyStructure.class);
|
|
|
if(co == null) {
|
|
|
- //拨打语音电话
|
|
|
- VoiceCallUtils.SingleCallByTts(deviceDesc+" "+key+" ");
|
|
|
- logger.info(deviceDesc+" "+key+" ");
|
|
|
- }else {
|
|
|
- String structureName = co.getName();
|
|
|
- //拨打语音电话
|
|
|
- VoiceCallUtils.SingleCallByTts(structureName+" 项目 "+deviceDesc+" "+key+" ");
|
|
|
- logger.info(structureName+" 项目 "+deviceDesc+" "+key+" ");
|
|
|
+ if(mm != null) {
|
|
|
+ update.set("companyStructureId", mm.get("companyStructureId"));
|
|
|
+ update.set("companyStructure", mm.get("companyStructure"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dataServiceImpl.realDataMongoTemplate.updateMulti(queryUpdate,update,tableNameReal);
|
|
|
+ //重新查询去除掉orderState字段的记录
|
|
|
+ Query queryDelOrder =Query.query(Criteria.where("dataCode").is(id));
|
|
|
+ Map delOrder = dataServiceImpl.realDataMongoTemplate.findOne(queryDelOrder, Map.class,tableNameReal);
|
|
|
+
|
|
|
+ //进行拨打电话操作
|
|
|
+ if(delOrder.get("orderState") == null || "".equals(delOrder.get("orderState"))) {
|
|
|
+ if(co == null) {
|
|
|
+ //拨打语音电话
|
|
|
+ VoiceCallUtils.SingleCallByTts(deviceDesc+" "+key+" ");
|
|
|
+ logger.info(deviceDesc+" "+key+" ");
|
|
|
+ }else {
|
|
|
+ String structureName = co.getName();
|
|
|
+ //拨打语音电话
|
|
|
+ VoiceCallUtils.SingleCallByTts(structureName+" 项目 "+deviceDesc+" "+key+" ");
|
|
|
+ logger.info(structureName+" 项目 "+deviceDesc+" "+key+" ");
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- if(his == null) {
|
|
|
- //没有这条历史记录
|
|
|
- HistoryWarning hw = new HistoryWarning();
|
|
|
- hw.setAlarmLevel(delOrder.get("alarmLevel").toString());
|
|
|
- if(delOrder.get("companyStructureId") != null && !"".equals(delOrder.get("companyStructureId"))) {
|
|
|
- hw.setStructureId(delOrder.get("companyStructureId").toString());
|
|
|
- hw.setStructureName(co.getName());
|
|
|
+ if(his == null) {
|
|
|
+ //没有这条历史记录
|
|
|
+ HistoryWarning hw = new HistoryWarning();
|
|
|
+ hw.setAlarmLevel(delOrder.get("alarmLevel").toString());
|
|
|
+ if(delOrder.get("companyStructureId") != null && !"".equals(delOrder.get("companyStructureId"))) {
|
|
|
+ hw.setStructureId(delOrder.get("companyStructureId").toString());
|
|
|
+ hw.setStructureName(co.getName());
|
|
|
+ }
|
|
|
+ hw.setDataCode(delOrder.get("_id").toString());
|
|
|
+ hw.setDataName(delOrder.get("dataName").toString());
|
|
|
+ hw.setValue(Double.parseDouble(value));
|
|
|
+ hw.setWarningTime(new Date());
|
|
|
+ hw.setRestoreTime(null);
|
|
|
+ dataServiceImpl.historymongoTemplate.insert(hw,tableNameHis);
|
|
|
}
|
|
|
- hw.setDataCode(delOrder.get("_id").toString());
|
|
|
- hw.setDataName(delOrder.get("dataName").toString());
|
|
|
- hw.setValue(Double.parseDouble(value));
|
|
|
- hw.setWarningTime(new Date());
|
|
|
- hw.setRestoreTime(null);
|
|
|
- dataServiceImpl.historymongoTemplate.insert(hw,tableNameHis);
|
|
|
}
|
|
|
}
|
|
|
- }else{
|
|
|
-
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
//插入或修改
|
|
|
|