|
@@ -2,8 +2,8 @@ package com.gyee.alarm.task.thread;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.gyee.alarm.feigns.IAlarmService;
|
|
|
-import com.gyee.alarm.model.vo.AlarmTag;
|
|
|
-import com.gyee.alarm.model.vo.AlarmVo;
|
|
|
+import com.gyee.alarm.model.vo.*;
|
|
|
+import com.gyee.alarm.service.auto.IAlarmTsService;
|
|
|
import com.gyee.common.contant.ContantXk;
|
|
|
import com.gyee.common.model.PointData;
|
|
|
import com.gyee.common.model.StringUtils;
|
|
@@ -21,179 +21,273 @@ import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.Callable;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
+import java.util.concurrent.CopyOnWriteArrayList;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
|
public class AlarmThreadPool implements Callable<String>, Serializable {
|
|
|
|
|
|
- private Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
+ private Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
|
|
|
- private static final long serialVersionUID = 0;
|
|
|
+ private static final long serialVersionUID = 0;
|
|
|
|
|
|
- // 保存任务所需要的数据
|
|
|
+ // 保存任务所需要的数据
|
|
|
|
|
|
- private Object threadPoolTaskData;
|
|
|
+ private Object threadPoolTaskData;
|
|
|
|
|
|
- private IEdosUtil edosUtil;
|
|
|
+ private IEdosUtil edosUtil;
|
|
|
|
|
|
- private IAlarmService alarmService;
|
|
|
+ private IAlarmService alarmService;
|
|
|
|
|
|
- private List<AlarmTag> alarmVoList;
|
|
|
- private String str;
|
|
|
+ private List<AlarmTag> alarmVoList;
|
|
|
+ private String str;
|
|
|
|
|
|
- private Integer interval;
|
|
|
- private String alarmType;
|
|
|
- private Integer readRows;
|
|
|
- public AlarmThreadPool(Object tasks, IEdosUtil edosUtil, IAlarmService alarmService, List<AlarmTag> alarmVoList,
|
|
|
- Integer interval, String str,Integer readRows, String alarmType
|
|
|
- ) {
|
|
|
+ private Integer interval;
|
|
|
+ private String alarmType;
|
|
|
+ private Integer readRows;
|
|
|
+ private IAlarmTsService alarmTsService;
|
|
|
|
|
|
- this.threadPoolTaskData = tasks;
|
|
|
- this.edosUtil = edosUtil;
|
|
|
- this.alarmService = alarmService;
|
|
|
- this.alarmVoList = alarmVoList;
|
|
|
- this.interval = interval;
|
|
|
- this.str = str;
|
|
|
- this.readRows = readRows;
|
|
|
- this.alarmType=alarmType;
|
|
|
- }
|
|
|
+ public AlarmThreadPool(Object tasks, IEdosUtil edosUtil, IAlarmService alarmService, List<AlarmTag> alarmVoList,
|
|
|
+ Integer interval, String str, Integer readRows, String alarmType, IAlarmTsService alarmTsService
|
|
|
+ ) {
|
|
|
|
|
|
- public synchronized String call() throws Exception {
|
|
|
+ this.threadPoolTaskData = tasks;
|
|
|
+ this.edosUtil = edosUtil;
|
|
|
+ this.alarmService = alarmService;
|
|
|
+ this.alarmVoList = alarmVoList;
|
|
|
+ this.interval = interval;
|
|
|
+ this.str = str;
|
|
|
+ this.readRows = readRows;
|
|
|
+ this.alarmType = alarmType;
|
|
|
+ this.alarmTsService = alarmTsService;
|
|
|
+ }
|
|
|
|
|
|
- String result = "";
|
|
|
+ public synchronized String call() throws Exception {
|
|
|
|
|
|
- try {
|
|
|
+ String result = "";
|
|
|
+
|
|
|
+ try {
|
|
|
|
|
|
// while (true)
|
|
|
// {
|
|
|
- List<String> ls=new ArrayList<>();
|
|
|
- List<PointData> values=new ArrayList<>();
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- int times=0;
|
|
|
- for(AlarmTag vo:alarmVoList)
|
|
|
- {
|
|
|
-
|
|
|
- ls.add(vo.getTagId());
|
|
|
- times++;
|
|
|
- if(times==readRows)
|
|
|
- {
|
|
|
- List<PointData> templs=edosUtil.getRealData(ls);
|
|
|
- values.addAll(templs);
|
|
|
- ls=new ArrayList<>();
|
|
|
- times=0;
|
|
|
- }
|
|
|
- }
|
|
|
- if(!ls.isEmpty())
|
|
|
- {
|
|
|
- List<PointData> templs=edosUtil.getRealData(ls);
|
|
|
- values.addAll(templs);
|
|
|
- }
|
|
|
+ List<String> ls = new ArrayList<>();
|
|
|
+ List<PointData> values = new ArrayList<>();
|
|
|
+
|
|
|
+
|
|
|
+ int times = 0;
|
|
|
+ for (AlarmTag vo : alarmVoList) {
|
|
|
+
|
|
|
+ ls.add(vo.getTagId());
|
|
|
+ times++;
|
|
|
+ if (times == readRows) {
|
|
|
+ List<PointData> templs = edosUtil.getRealData(ls);
|
|
|
+ values.addAll(templs);
|
|
|
+ ls = new ArrayList<>();
|
|
|
+ times = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!ls.isEmpty()) {
|
|
|
+ List<PointData> templs = edosUtil.getRealData(ls);
|
|
|
+ values.addAll(templs);
|
|
|
+ }
|
|
|
+
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+
|
|
|
+
|
|
|
+ List<AlarmSimpleVo> alarmls = new CopyOnWriteArrayList<>();
|
|
|
+ times = 0;
|
|
|
+ for (AlarmTag alarm : alarmVoList) {
|
|
|
+
|
|
|
+ sb.append("'").append(alarm.getId().toLowerCase()).append("',");
|
|
|
+ times++;
|
|
|
+ if (times == 300) {
|
|
|
+ String ids = sb.substring(0, sb.length() - 1);
|
|
|
+ List<AlarmSimpleVo> templs=new ArrayList<>();
|
|
|
+ if(alarm.getAlarmType().equals(AlarmTypeValue.BT.getCode()))
|
|
|
+ {
|
|
|
+ templs = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.BT.getCode(), ids);
|
|
|
+ }else if(alarm.getAlarmType().equals(AlarmTypeValue.WT.getCode()))
|
|
|
+ {
|
|
|
+ templs = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(), ids);
|
|
|
+ }else if(alarm.getAlarmType().equals(AlarmTypeValue.IN.getCode()))
|
|
|
+ {
|
|
|
+ templs = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(), ids);
|
|
|
+ }
|
|
|
+ alarmls.addAll(templs);
|
|
|
+ sb.setLength(0);
|
|
|
+ times = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (sb.length()>0) {
|
|
|
+
|
|
|
+ String ids = sb.substring(0, sb.length() - 1);
|
|
|
+ List<AlarmSimpleVo> templs=new ArrayList<>();
|
|
|
+ if(alarmVoList.get(0).getAlarmType().equals(AlarmTypeValue.BT.getCode()))
|
|
|
+ {
|
|
|
+ templs = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.BT.getCode(), ids);
|
|
|
+ }else if(alarmVoList.get(0).getAlarmType().equals(AlarmTypeValue.WT.getCode()))
|
|
|
+ {
|
|
|
+ templs = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(), ids);
|
|
|
+ }else if(alarmVoList.get(0).getAlarmType().equals(AlarmTypeValue.IN.getCode()))
|
|
|
+ {
|
|
|
+ templs = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(), ids);
|
|
|
+ }
|
|
|
+ alarmls.addAll(templs);
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, AlarmSimpleVo> map = new ConcurrentHashMap<>();
|
|
|
+
|
|
|
+
|
|
|
+ if (!alarmls.isEmpty()) {
|
|
|
+ for (AlarmSimpleVo vo : alarmls) {
|
|
|
+ map.put(vo.getTbName().toLowerCase(), vo);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
// System.out.println(values.size()+"____"+ alarmVoList.size());
|
|
|
- int alarmNumber=0;
|
|
|
- if(values.size() == alarmVoList.size())
|
|
|
- {
|
|
|
- List<AlarmTag> saveAlarmTags=new ArrayList<>();
|
|
|
+ int alarmNumber = 0;
|
|
|
+ if (values.size() == alarmVoList.size()) {
|
|
|
+ List<AlarmTag> saveAlarmTags = new ArrayList<>();
|
|
|
|
|
|
- List<AlarmTag> updateAlarmTags=new ArrayList<>();
|
|
|
+ List<AlarmTag> updateAlarmTags = new ArrayList<>();
|
|
|
|
|
|
- for(int i=0;i<alarmVoList.size();i++)
|
|
|
- {
|
|
|
+ for (int i = 0; i < alarmVoList.size(); i++) {
|
|
|
|
|
|
- AlarmTag vo=alarmVoList.get(i);
|
|
|
+ AlarmTag vo = alarmVoList.get(i);
|
|
|
|
|
|
- PointData value=values.get(i);
|
|
|
+// if(vo.getTagId().equals("FD-DJY-YuanDong.140623F0221MDQ02GS006DB0111SW09RAW00"))
|
|
|
+// {
|
|
|
+// System.out.println("");
|
|
|
+// }
|
|
|
|
|
|
-// if(vo.getTagId().equals("FD-DJY-YuanDong.140623F0221MDQ02GS006DB0111SW09RAW00"))
|
|
|
-// {
|
|
|
-// System.out.println("");
|
|
|
-// }
|
|
|
- if(vo.updateAndCheck(value))
|
|
|
- {
|
|
|
- if(vo.getVal()==1)
|
|
|
- {
|
|
|
- AlarmTag po=new AlarmTag();
|
|
|
-
|
|
|
- po.setId(vo.getId());
|
|
|
- po.setTs(vo.getTs());
|
|
|
- po.setEndts(po.getEndts());
|
|
|
- po.setVal(vo.getVal());
|
|
|
- po.setOval(vo.getOval());
|
|
|
- po.setTriggerType(vo.getTriggerType());
|
|
|
- po.setTagId(vo.getTagId());
|
|
|
- po.setRank(vo.getRank());
|
|
|
- po.setTimeLong(0.0);
|
|
|
- saveAlarmTags.add(po);
|
|
|
- alarmNumber++;
|
|
|
- }else
|
|
|
- {
|
|
|
- AlarmTag po=new AlarmTag();
|
|
|
-
|
|
|
- po.setId(vo.getId());
|
|
|
- po.setTs(vo.getTs());
|
|
|
- po.setEndts(vo.getEndts());
|
|
|
- po.setVal(vo.getVal());
|
|
|
- po.setOval(vo.getOval());
|
|
|
- po.setTriggerType(vo.getTriggerType());
|
|
|
- po.setTagId(vo.getTagId());
|
|
|
- po.setRank(vo.getRank());
|
|
|
- po.setTimeLong(0.0);
|
|
|
- updateAlarmTags.add(po);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ PointData value = values.get(i);
|
|
|
|
|
|
- switch (alarmType){
|
|
|
- case "in_alarms":
|
|
|
- if(!saveAlarmTags.isEmpty())
|
|
|
- {
|
|
|
- alarmService.saveInTags(saveAlarmTags);
|
|
|
- }
|
|
|
- if(!updateAlarmTags.isEmpty())
|
|
|
- {
|
|
|
- alarmService.updateInTags(updateAlarmTags);
|
|
|
- }
|
|
|
- break;
|
|
|
- case "wt_alarms":
|
|
|
- if(!saveAlarmTags.isEmpty())
|
|
|
- {
|
|
|
- alarmService.saveWtTags(saveAlarmTags);
|
|
|
- }
|
|
|
- if(!updateAlarmTags.isEmpty())
|
|
|
- {
|
|
|
- alarmService.updateWtTags(updateAlarmTags);
|
|
|
- }
|
|
|
- break;
|
|
|
- case "bt_alarms":
|
|
|
- if(!saveAlarmTags.isEmpty())
|
|
|
- {
|
|
|
- alarmService.saveBtTags(saveAlarmTags);
|
|
|
- }
|
|
|
- if(!updateAlarmTags.isEmpty())
|
|
|
- {
|
|
|
- alarmService.updateBtTags(updateAlarmTags);
|
|
|
- }
|
|
|
+// if (vo.getTagId().equals("FD-PYZK-Taizhong1.140728F0111MDY01GS002DB0111SW01RAW00")) {
|
|
|
+// System.out.println("");
|
|
|
+// }
|
|
|
+ if (vo.updateAndCheck(value)) {
|
|
|
+ if (vo.getVal() == 1) {
|
|
|
+ AlarmTag po = new AlarmTag();
|
|
|
+
|
|
|
+ po.setId(vo.getId());
|
|
|
+ po.setTs(vo.getTs());
|
|
|
+ po.setEndts(po.getEndts());
|
|
|
+ po.setVal(vo.getVal());
|
|
|
+ po.setOval(vo.getOval());
|
|
|
+ po.setTriggerType(vo.getTriggerType());
|
|
|
+ po.setTagId(vo.getTagId());
|
|
|
+ po.setRank(vo.getRank());
|
|
|
+ po.setTimeLong(0.0);
|
|
|
+ saveAlarmTags.add(po);
|
|
|
+ alarmNumber++;
|
|
|
|
|
|
- break;
|
|
|
+ } else if (vo.getVal() == 2) {
|
|
|
|
|
|
- }
|
|
|
+ if(map.containsKey(vo.getId().toLowerCase()))
|
|
|
+ {
|
|
|
+ AlarmSimpleVo svo=map.get(vo.getId().toLowerCase());
|
|
|
+
|
|
|
+ //有结束时间,创建新的报警
|
|
|
+ if(StringUtils.empty(svo.getEndts()))
|
|
|
+ {
|
|
|
+ //没有有结束时间,结束报警
|
|
|
+ AlarmTag po = new AlarmTag();
|
|
|
+
|
|
|
+ po.setId(vo.getId());
|
|
|
+ po.setTs(vo.getTs());
|
|
|
+ po.setEndts(vo.getEndts());
|
|
|
+ po.setVal(vo.getVal());
|
|
|
+ po.setOval(vo.getOval());
|
|
|
+ po.setTriggerType(vo.getTriggerType());
|
|
|
+ po.setTagId(vo.getTagId());
|
|
|
+ po.setRank(vo.getRank());
|
|
|
+ po.setTimeLong(0.0);
|
|
|
+ updateAlarmTags.add(po);
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- logger.info(String.valueOf(threadPoolTaskData)+"报警数量:" + alarmNumber);
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ AlarmTag po = new AlarmTag();
|
|
|
+
|
|
|
+ po.setId(vo.getId());
|
|
|
+ po.setTs(vo.getTs());
|
|
|
+ po.setEndts(vo.getEndts());
|
|
|
+ po.setVal(vo.getVal());
|
|
|
+ po.setOval(vo.getOval());
|
|
|
+ po.setTriggerType(vo.getTriggerType());
|
|
|
+ po.setTagId(vo.getTagId());
|
|
|
+ po.setRank(vo.getRank());
|
|
|
+ po.setTimeLong(0.0);
|
|
|
+ updateAlarmTags.add(po);
|
|
|
+ }
|
|
|
+ }else if(!map.containsKey(vo.getId().toLowerCase()))
|
|
|
+ {
|
|
|
+ if (vo.updateAndCheckNoInfo(value)) {
|
|
|
+ if (vo.getVal() == 1) {
|
|
|
+ AlarmTag po = new AlarmTag();
|
|
|
+
|
|
|
+ po.setId(vo.getId());
|
|
|
+ po.setTs(vo.getTs());
|
|
|
+ po.setEndts(po.getEndts());
|
|
|
+ po.setVal(vo.getVal());
|
|
|
+ po.setOval(vo.getOval());
|
|
|
+ po.setTriggerType(vo.getTriggerType());
|
|
|
+ po.setTagId(vo.getTagId());
|
|
|
+ po.setRank(vo.getRank());
|
|
|
+ po.setTimeLong(0.0);
|
|
|
+ saveAlarmTags.add(po);
|
|
|
+ alarmNumber++;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (alarmType) {
|
|
|
+ case "in_alarms":
|
|
|
+ if (!saveAlarmTags.isEmpty()) {
|
|
|
+ alarmService.saveInTags(saveAlarmTags);
|
|
|
+ }
|
|
|
+ if (!updateAlarmTags.isEmpty()) {
|
|
|
+ alarmService.updateInTags(updateAlarmTags);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "wt_alarms":
|
|
|
+ if (!saveAlarmTags.isEmpty()) {
|
|
|
+ alarmService.saveWtTags(saveAlarmTags);
|
|
|
+ }
|
|
|
+ if (!updateAlarmTags.isEmpty()) {
|
|
|
+ alarmService.updateWtTags(updateAlarmTags);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "bt_alarms":
|
|
|
+ if (!saveAlarmTags.isEmpty()) {
|
|
|
+ alarmService.saveBtTags(saveAlarmTags);
|
|
|
+ }
|
|
|
+ if (!updateAlarmTags.isEmpty()) {
|
|
|
+ alarmService.updateBtTags(updateAlarmTags);
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ logger.info(String.valueOf(threadPoolTaskData) + "报警数量:" + alarmNumber);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
- } catch (Exception e) {
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- threadPoolTaskData = null;
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ threadPoolTaskData = null;
|
|
|
|
|
|
- return result;
|
|
|
+ return result;
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
}
|