AlarmBtService.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494
  1. package com.gyee.alarm.service;
  2. import com.gyee.alarm.init.CacheContext;
  3. import com.gyee.alarm.model.auto.*;
  4. import com.gyee.alarm.model.vo.*;
  5. import com.gyee.alarm.service.auto.IAlarmTsService;
  6. import com.gyee.alarm.service.auto.IProEconAlarmInfoService;
  7. import com.gyee.alarm.util.DateUtils;
  8. import com.gyee.alarm.util.StringUtils;
  9. import com.gyee.alarm.util.realtimesource.IEdosUtil;
  10. import com.gyee.alarm.websocket.PushParams;
  11. import com.gyee.alarm.websocket.WebSocket;
  12. import com.gyee.alarm.websocket.WebSocketBt;
  13. import com.gyee.common.model.PointData;
  14. import org.springframework.beans.factory.annotation.Value;
  15. import org.springframework.stereotype.Service;
  16. import org.springframework.web.socket.TextMessage;
  17. import javax.annotation.Resource;
  18. import javax.websocket.EncodeException;
  19. import java.io.IOException;
  20. import java.sql.SQLException;
  21. import java.sql.Timestamp;
  22. import java.util.*;
  23. import java.util.concurrent.ConcurrentHashMap;
  24. @Service
  25. public class AlarmBtService {
  26. @Resource
  27. private IAlarmTsService alarmTsService;
  28. @Resource
  29. private IProEconAlarmInfoService proEconAlarmInfoService;
  30. @Value("${initialcode}")
  31. private String initialcode;
  32. @Value("${pushinterval}")
  33. private Double pushinterval;
  34. @Resource
  35. private WebSocket webSocket;
  36. @Resource
  37. private PushDataSevice pushDataSevice;
  38. @Value("${read-rows}")
  39. private Integer readRows;
  40. @Resource
  41. private IEdosUtil edosUtil;
  42. public void dropSuperTable() {
  43. alarmTsService.dropSuperTable(AlarmSuperTalbeType.BT.getCode());
  44. }
  45. public void createSuperTable() {
  46. alarmTsService.createSuperTable(AlarmSuperTalbeType.BT.getCode());
  47. }
  48. public void initalBtAlarm() throws Exception {
  49. List<AlarmTag> alarmTags = new ArrayList<>();
  50. List<AlarmVo> alarmVoList = CacheContext.alarmBtList;
  51. if (!alarmVoList.isEmpty()) {
  52. for (AlarmVo vo : alarmVoList) {
  53. alarmTsService.createTable(vo.getTbName(), vo.getAlarmid(), vo.getAlarmtype(),
  54. vo.getCharacteristic(), vo.getComponents(),
  55. vo.getDescription(),
  56. vo.getDeviceid(), vo.getDevicename(),
  57. vo.getDevicetype(), vo.getEnabled(),
  58. vo.getLineid(), vo.getLinename(),
  59. vo.getModelId(), vo.getProjectid(),
  60. vo.getProjectname(), vo.getRank(),
  61. vo.getResettable(), vo.getStationid(),
  62. vo.getStationname(), vo.getSubcomponents(),
  63. vo.getSuffix(), vo.getTagid(),
  64. vo.getTriggertype(), vo.getUniformcode(), vo.getSuperTableName(),
  65. vo.getName(),
  66. vo.getNemCode(),vo.getFaultCause(),vo.getResolvent(),vo.getFaultType(),vo.getAname());
  67. }
  68. }
  69. // alarmTsService.insertList(alarmTags);
  70. }
  71. public List<AlarmVo> initalAlarmVo() throws Exception {
  72. List<ProEconAlarmConfiguration> btalarmls = CacheContext.btalarmls;
  73. List<AlarmVo> alarmVoList = new ArrayList<>();
  74. if (!btalarmls.isEmpty()) {
  75. for (ProEconAlarmConfiguration alarm : btalarmls) {
  76. if (StringUtils.notEmp(alarm.getTagId()) &&
  77. (alarm.getAlarmType().equals(AlarmTypeValue.BT.getCode()) || alarm.getAlarmType().equals(AlarmTypeValue.BTE.getCode()))) {
  78. AlarmVo vo = new AlarmVo();
  79. StringBuilder tbName = new StringBuilder();
  80. tbName.append(alarm.getStationId()).append("_").append(alarm.getId());
  81. vo.setTbName(String.valueOf(tbName));
  82. vo.setAlarmid(alarm.getId());
  83. vo.setTagid(alarm.getTagId());
  84. vo.setAlarmtype(alarm.getAlarmType());
  85. vo.setCharacteristic(alarm.getCharacteristic());
  86. vo.setComponents(alarm.getComponents());
  87. vo.setDescription(alarm.getDescription());
  88. vo.setDeviceid("");
  89. vo.setDevicename("");
  90. vo.setDevicetype(DeviceTypeValue.BT.getCode());
  91. vo.setEnabled(alarm.getEnable());
  92. vo.setLineid("");
  93. vo.setLinename("");
  94. vo.setModelId(alarm.getModelId());
  95. vo.setProjectid("");
  96. vo.setProjectname("");
  97. vo.setRank(alarm.getRank());
  98. vo.setResettable(alarm.getResetTable());
  99. vo.setStationid(alarm.getStationId());
  100. if (CacheContext.subwpmap.containsKey(alarm.getStationId())) {
  101. ProBasicSubStation wp = CacheContext.subwpmap.get(alarm.getStationId());
  102. vo.setStationname(wp.getName());
  103. }
  104. vo.setSubcomponents(alarm.getSubcomponents());
  105. vo.setSuffix(alarm.getSuffix());
  106. vo.setTriggertype(alarm.getTriggerType());
  107. vo.setUniformcode(alarm.getUniformCode());
  108. vo.setSuperTableName(AlarmSuperTalbeType.BT.getCode());
  109. // PointData temp=edosUtil.getRealData(equipmentPoint.getNemCode());
  110. // vo.setVal((int)temp.getPointValueInDouble());
  111. // vo.setOval((int)temp.getPointValueInDouble());
  112. vo.setVal(null);
  113. vo.setOval(null);
  114. vo.setFaultType(alarm.getDeviceId());
  115. vo.setAname(alarm.getSuffix());
  116. vo.setName(alarm.getName());
  117. vo.setNemCode(alarm.getNemCode());
  118. vo.setFaultCause(alarm.getFaultCause());
  119. vo.setResolvent(alarm.getResolvent());
  120. alarmVoList.add(vo);
  121. }
  122. }
  123. }
  124. return alarmVoList;
  125. }
  126. public List<AlarmTag> findTags(String stbaleName) {
  127. List<AlarmTag> ls = new ArrayList<>();
  128. if (StringUtils.notEmp(stbaleName)) {
  129. // List<AlarmVo> vos= alarmTsService.findTags(stbaleName);
  130. List<AlarmVo> vos = CacheContext.alarmBtList;
  131. if (!vos.isEmpty()) {
  132. for (AlarmVo vo : vos) {
  133. AlarmTag po=new AlarmTag();
  134. po.setId(vo.getTbName());
  135. po.setOval(null);
  136. po.setTriggerType(vo.getTriggertype());
  137. po.setTagId(vo.getTagid());
  138. po.setVal(null);
  139. po.setRank(vo.getRank());
  140. ls.add(po);
  141. }
  142. }
  143. }
  144. return ls;
  145. }
  146. public synchronized void saveAlarms(List<AlarmTag> ls) throws EncodeException, IOException {
  147. if (StringUtils.notEmp(ls) && !ls.isEmpty()) {
  148. alarmTsService.insertList(ls);
  149. Map<String,ProEconAlarmInfo> tempmap=new HashMap<>();
  150. if (StringUtils.notEmp(ls) && !ls.isEmpty()) {
  151. List<ProEconAlarmInfo> valuels = new ArrayList<>();
  152. for (AlarmTag alarm : ls) {
  153. if (CacheContext.alarmBtMap.containsKey(alarm.getId())) {
  154. AlarmVo vo = CacheContext.alarmBtMap.get(alarm.getId());
  155. ProEconAlarmInfo po = new ProEconAlarmInfo();
  156. po.setTbname(vo.getTbName());
  157. po.setLastUpdateTime(new Date(alarm.getTs()));
  158. po.setTagId(alarm.getTagId());
  159. po.setTriggerType(alarm.getTriggerType());
  160. if(alarm.getTriggerType()==-1)
  161. {
  162. if(alarm.getOval()==0)
  163. {
  164. po.setDescription(vo.getDescription()+"_分位");
  165. }else if(alarm.getOval()==1)
  166. {
  167. po.setDescription(vo.getDescription()+"_合位");
  168. }
  169. }else
  170. {
  171. po.setDescription(vo.getDescription());
  172. }
  173. po.setAlarmId(vo.getAlarmid());
  174. po.setDeviceId(vo.getDeviceid());
  175. po.setSubcomponents(vo.getSuffix());
  176. po.setRank(vo.getRank());
  177. po.setConfirmed(false);
  178. po.setUniformCode(vo.getUniformcode());
  179. po.setAlarmType(vo.getAlarmtype());
  180. po.setDeviceType(vo.getDevicetype());
  181. po.setComponents(vo.getComponents());
  182. po.setSubcomponents(vo.getSubcomponents());
  183. po.setModelId(vo.getModelId());
  184. po.setResetTable(vo.getResettable());
  185. po.setEnable(vo.getEnabled());
  186. po.setCharacteristic(vo.getCharacteristic());
  187. po.setStationId(vo.getStationid());
  188. po.setProjectId(vo.getProjectid());
  189. po.setLineId(vo.getLineid());
  190. po.setStationName(vo.getStationname());
  191. po.setProjectiName(vo.getProjectname());
  192. po.setLineidName(vo.getLinename());
  193. po.setDeviceName(vo.getDevicename());
  194. po.setOval(alarm.getOval().intValue());
  195. po.setVal(alarm.getVal().intValue());
  196. po.setIsOpen(1);
  197. alarm.setRank(vo.getRank());
  198. alarm.setDescription(vo.getDescription());
  199. alarm.setAlarmType(vo.getAlarmtype());
  200. alarm.setDeviceType(vo.getDevicetype());
  201. alarm.setCharacteristic(vo.getCharacteristic());
  202. alarm.setFaultCause(vo.getFaultCause());
  203. alarm.setResolvent(vo.getResolvent());
  204. alarm.setIsClose(false);
  205. alarm.setDeviceId(vo.getDeviceid());
  206. alarm.setAlarmId(vo.getAlarmid());
  207. if(CacheContext.subwpmap.containsKey(vo.getStationid()))
  208. {
  209. alarm.setWpName(CacheContext.subwpmap.get(vo.getStationid()).getName());
  210. }
  211. alarm.setWpId(vo.getStationid());
  212. pushDataSevice.pushBtData(alarm);
  213. tempmap.put(po.getTbname(),po);
  214. }
  215. }
  216. for (Map.Entry<String, ProEconAlarmInfo> entry : tempmap.entrySet()) {
  217. valuels.add(entry.getValue());
  218. }
  219. List<String> idls = new ArrayList<>();
  220. for (ProEconAlarmInfo vo : valuels) {
  221. idls.add(vo.getTbname());
  222. }
  223. if (!idls.isEmpty()) {
  224. proEconAlarmInfoService.removeByIds(idls);
  225. }
  226. List<ProEconAlarmInfo> templs = new ArrayList<>();
  227. for (ProEconAlarmInfo vo : valuels) {
  228. templs.add(vo);
  229. if (templs.size() == 100) {
  230. proEconAlarmInfoService.saveBatch(templs);
  231. templs = new ArrayList<>();
  232. }
  233. }
  234. if (!templs.isEmpty()) {
  235. proEconAlarmInfoService.saveBatch(templs);
  236. }
  237. }
  238. }
  239. }
  240. public synchronized void updateAlarms(List<AlarmTag> ls) throws EncodeException, IOException {
  241. if (StringUtils.notEmp(ls) && !ls.isEmpty()) {
  242. StringBuilder sb=new StringBuilder();
  243. Map<String,AlarmSimpleVo> map=new HashMap<>();
  244. for (AlarmTag alarm : ls) {
  245. if (CacheContext.alarmBtMap.containsKey(alarm.getId())) {
  246. AlarmVo vo = CacheContext.alarmBtMap.get(alarm.getId());
  247. if(vo.getAlarmtype().equals(AlarmTypeValue.BT.getCode()) )
  248. {
  249. sb.append("'").append(alarm.getId().toLowerCase()).append("',");
  250. }
  251. }
  252. }
  253. String ids=null;
  254. if(sb.length()>0)
  255. {
  256. ids=sb.substring(0,sb.length()-1);
  257. }
  258. List<AlarmSimpleVo> alarmls=new ArrayList<>();
  259. if( null !=ids)
  260. {
  261. alarmls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.BT.getCode(),ids);
  262. }
  263. if(!alarmls.isEmpty())
  264. {
  265. for(AlarmSimpleVo vo:alarmls)
  266. {
  267. map.put(vo.getTbName().toLowerCase(),vo);
  268. }
  269. }
  270. for (AlarmTag alarm : ls) {
  271. if(map.containsKey(alarm.getId().toLowerCase()))
  272. {
  273. AlarmSimpleVo tag=map.get(alarm.getId().toLowerCase());
  274. if(StringUtils.notEmp(tag.getTs()))
  275. {
  276. alarm.setTs(tag.getTs().getTime());
  277. }else
  278. {
  279. alarm.setTs(new Date().getTime());
  280. }
  281. Date begin = new Date(alarm.getEndts());
  282. Date end = new Date(alarm.getTs());
  283. double value= DateUtils.secondsDiff(begin,end);
  284. alarm.setTimeLong(value);
  285. alarm.setConfirmed(tag.getConfirmed());
  286. alarm.setSuperTalbe(AlarmSuperTalbeType.BT.getCode());
  287. }
  288. }
  289. alarmTsService.insertList(ls);
  290. Map<String,ProEconAlarmInfo> tempmap=new HashMap<>();
  291. if (StringUtils.notEmp(ls) && !ls.isEmpty()) {
  292. List<ProEconAlarmInfo> valuels = new ArrayList<>();
  293. for (AlarmTag alarm : ls) {
  294. if (CacheContext.alarmBtMap.containsKey(alarm.getId())) {
  295. AlarmVo vo = CacheContext.alarmBtMap.get(alarm.getId());
  296. ProEconAlarmInfo po = new ProEconAlarmInfo();
  297. po.setTbname(vo.getTbName());
  298. if(StringUtils.notEmp(alarm.getEndts()))
  299. {
  300. po.setLastUpdateTime(new Date(alarm.getEndts()));
  301. }else
  302. {
  303. po.setLastUpdateTime(new Date());
  304. }
  305. po.setTagId(alarm.getTagId());
  306. po.setTriggerType(alarm.getTriggerType());
  307. po.setAlarmId(vo.getAlarmid());
  308. po.setDeviceId(vo.getDeviceid());
  309. po.setSubcomponents(vo.getSuffix());
  310. po.setRank(vo.getRank());
  311. po.setConfirmed(alarm.getConfirmed());
  312. po.setUniformCode(vo.getUniformcode());
  313. po.setAlarmType(vo.getAlarmtype());
  314. po.setDeviceType(vo.getDevicetype());
  315. po.setComponents(vo.getComponents());
  316. po.setSubcomponents(vo.getSubcomponents());
  317. po.setDescription(vo.getDescription());
  318. po.setModelId(vo.getModelId());
  319. po.setResetTable(vo.getResettable());
  320. po.setEnable(vo.getEnabled());
  321. po.setCharacteristic(vo.getCharacteristic());
  322. po.setStationId(vo.getStationid());
  323. po.setProjectId(vo.getProjectid());
  324. po.setLineId(vo.getLineid());
  325. po.setStationName(vo.getStationname());
  326. po.setProjectiName(vo.getProjectname());
  327. po.setLineidName(vo.getLinename());
  328. po.setDeviceName(vo.getDevicename());
  329. po.setOval(alarm.getOval().intValue());
  330. po.setVal(alarm.getVal().intValue());
  331. if(StringUtils.notEmp(alarm.getEndts()))
  332. {
  333. po.setCloseTime(new Date(alarm.getEndts()));
  334. }else
  335. {
  336. po.setCloseTime(new Date());
  337. }
  338. po.setIsOpen(0);
  339. alarm.setRank(vo.getRank());
  340. alarm.setDescription(vo.getDescription());
  341. alarm.setAlarmType(vo.getAlarmtype());
  342. alarm.setDeviceType(vo.getDevicetype());
  343. alarm.setCharacteristic(vo.getCharacteristic());
  344. alarm.setFaultCause(vo.getFaultCause());
  345. alarm.setResolvent(vo.getResolvent());
  346. alarm.setDeviceId(vo.getDeviceid());
  347. alarm.setAlarmId(vo.getAlarmid());
  348. alarm.setIsClose(true);
  349. if(CacheContext.subwpmap.containsKey(vo.getStationid()))
  350. {
  351. alarm.setWpName(CacheContext.subwpmap.get(vo.getStationid()).getName());
  352. }
  353. alarm.setWpId(vo.getStationid());
  354. pushDataSevice.pushBtData(alarm);
  355. tempmap.put(po.getTbname(),po);
  356. }
  357. }
  358. for (Map.Entry<String, ProEconAlarmInfo> entry : tempmap.entrySet()) {
  359. valuels.add(entry.getValue());
  360. }
  361. List<String> idls = new ArrayList<>();
  362. for (ProEconAlarmInfo vo : valuels) {
  363. idls.add(vo.getTbname());
  364. }
  365. if (!idls.isEmpty()) {
  366. proEconAlarmInfoService.removeByIds(idls);
  367. }
  368. List<ProEconAlarmInfo> templs = new ArrayList<>();
  369. for (ProEconAlarmInfo vo : valuels) {
  370. templs.add(vo);
  371. if (templs.size() == 100) {
  372. proEconAlarmInfoService.saveBatch(templs);
  373. templs = new ArrayList<>();
  374. }
  375. }
  376. if (!templs.isEmpty()) {
  377. proEconAlarmInfoService.saveBatch(templs);
  378. }
  379. }
  380. }
  381. }
  382. // public synchronized void pushData(AlarmTag po) throws EncodeException, IOException {
  383. // ConcurrentHashMap<String, WebSocket> webSocketPushMap = WebSocket.webSocketMap;
  384. // ConcurrentHashMap<String, PushParams> webSocketPushParamsMap = WebSocket.webSocketParamsMap;
  385. // if(!webSocketPushMap.isEmpty()){
  386. // for(String key : webSocketPushMap.keySet()){
  387. // // 根据ws连接用户ID获取推送参数
  388. // PushParams pushParams = webSocketPushParamsMap.get(key);
  389. //
  390. // if(webSocketPushParamsMap.contains(po.getId()))
  391. // {
  392. // PushParams pp=webSocketPushParamsMap.get(po.getId());
  393. //
  394. // double hours=DateUtils.hoursDiff(pp.getStartTime(),new Date());
  395. // if(hours>pushinterval)
  396. // {
  397. //
  398. // webSocket.sendMessageByUserId(key,po);
  399. // pp.setStartTime(new Date(po.getTs()));
  400. //
  401. // }
  402. // }else
  403. // {
  404. // webSocket.sendMessageByUserId(key,po);
  405. // PushParams pp=new PushParams();
  406. // pp.setStartTime(new Date());
  407. // webSocketPushParamsMap.put(po.getId(),pp);
  408. //
  409. // }
  410. // }
  411. // }
  412. //
  413. // }
  414. }