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. po.setAlarmType(vo.getAlarmtype());
  141. ls.add(po);
  142. }
  143. }
  144. }
  145. return ls;
  146. }
  147. public synchronized void saveAlarms(List<AlarmTag> ls) throws EncodeException, IOException {
  148. if (StringUtils.notEmp(ls) && !ls.isEmpty()) {
  149. alarmTsService.insertList(ls);
  150. Map<String,ProEconAlarmInfo> tempmap=new HashMap<>();
  151. if (StringUtils.notEmp(ls) && !ls.isEmpty()) {
  152. List<ProEconAlarmInfo> valuels = new ArrayList<>();
  153. for (AlarmTag alarm : ls) {
  154. if (CacheContext.alarmBtMap.containsKey(alarm.getId())) {
  155. AlarmVo vo = CacheContext.alarmBtMap.get(alarm.getId());
  156. ProEconAlarmInfo po = new ProEconAlarmInfo();
  157. po.setTbname(vo.getTbName());
  158. po.setLastUpdateTime(new Date(alarm.getTs()));
  159. po.setTagId(alarm.getTagId());
  160. po.setTriggerType(alarm.getTriggerType());
  161. if(alarm.getTriggerType()==-1)
  162. {
  163. if(alarm.getOval()==0)
  164. {
  165. po.setDescription(vo.getDescription()+"_分位");
  166. }else if(alarm.getOval()==1)
  167. {
  168. po.setDescription(vo.getDescription()+"_合位");
  169. }
  170. }else
  171. {
  172. po.setDescription(vo.getDescription());
  173. }
  174. po.setAlarmId(vo.getAlarmid());
  175. po.setDeviceId(vo.getDeviceid());
  176. po.setSubcomponents(vo.getSuffix());
  177. po.setRank(vo.getRank());
  178. po.setConfirmed(false);
  179. po.setUniformCode(vo.getUniformcode());
  180. po.setAlarmType(vo.getAlarmtype());
  181. po.setDeviceType(vo.getDevicetype());
  182. po.setComponents(vo.getComponents());
  183. po.setSubcomponents(vo.getSubcomponents());
  184. po.setModelId(vo.getModelId());
  185. po.setResetTable(vo.getResettable());
  186. po.setEnable(vo.getEnabled());
  187. po.setCharacteristic(vo.getCharacteristic());
  188. po.setStationId(vo.getStationid());
  189. po.setProjectId(vo.getProjectid());
  190. po.setLineId(vo.getLineid());
  191. po.setStationName(vo.getStationname());
  192. po.setProjectiName(vo.getProjectname());
  193. po.setLineidName(vo.getLinename());
  194. po.setDeviceName(vo.getDevicename());
  195. po.setOval(alarm.getOval().intValue());
  196. po.setVal(alarm.getVal().intValue());
  197. po.setIsOpen(1);
  198. alarm.setRank(vo.getRank());
  199. alarm.setDescription(vo.getDescription());
  200. alarm.setAlarmType(vo.getAlarmtype());
  201. alarm.setDeviceType(vo.getDevicetype());
  202. alarm.setCharacteristic(vo.getCharacteristic());
  203. alarm.setFaultCause(vo.getFaultCause());
  204. alarm.setResolvent(vo.getResolvent());
  205. alarm.setIsClose(false);
  206. alarm.setDeviceId(vo.getDeviceid());
  207. alarm.setAlarmId(vo.getAlarmid());
  208. if(CacheContext.subwpmap.containsKey(vo.getStationid()))
  209. {
  210. alarm.setWpName(CacheContext.subwpmap.get(vo.getStationid()).getName());
  211. }
  212. alarm.setWpId(vo.getStationid());
  213. pushDataSevice.pushBtData(alarm);
  214. tempmap.put(po.getTbname(),po);
  215. }
  216. }
  217. for (Map.Entry<String, ProEconAlarmInfo> entry : tempmap.entrySet()) {
  218. valuels.add(entry.getValue());
  219. }
  220. List<String> idls = new ArrayList<>();
  221. for (ProEconAlarmInfo vo : valuels) {
  222. idls.add(vo.getTbname());
  223. }
  224. if (!idls.isEmpty()) {
  225. proEconAlarmInfoService.removeByIds(idls);
  226. }
  227. List<ProEconAlarmInfo> templs = new ArrayList<>();
  228. for (ProEconAlarmInfo vo : valuels) {
  229. templs.add(vo);
  230. if (templs.size() == 100) {
  231. proEconAlarmInfoService.saveBatch(templs);
  232. templs = new ArrayList<>();
  233. }
  234. }
  235. if (!templs.isEmpty()) {
  236. proEconAlarmInfoService.saveBatch(templs);
  237. }
  238. }
  239. }
  240. }
  241. public synchronized void updateAlarms(List<AlarmTag> ls) throws EncodeException, IOException {
  242. if (StringUtils.notEmp(ls) && !ls.isEmpty()) {
  243. StringBuilder sb=new StringBuilder();
  244. Map<String,AlarmSimpleVo> map=new HashMap<>();
  245. for (AlarmTag alarm : ls) {
  246. if (CacheContext.alarmBtMap.containsKey(alarm.getId())) {
  247. AlarmVo vo = CacheContext.alarmBtMap.get(alarm.getId());
  248. if(vo.getAlarmtype().equals(AlarmTypeValue.BT.getCode()) )
  249. {
  250. sb.append("'").append(alarm.getId().toLowerCase()).append("',");
  251. }
  252. }
  253. }
  254. String ids=null;
  255. if(sb.length()>0)
  256. {
  257. ids=sb.substring(0,sb.length()-1);
  258. }
  259. List<AlarmSimpleVo> alarmls=new ArrayList<>();
  260. if( null !=ids)
  261. {
  262. alarmls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.BT.getCode(),ids);
  263. }
  264. if(!alarmls.isEmpty())
  265. {
  266. for(AlarmSimpleVo vo:alarmls)
  267. {
  268. map.put(vo.getTbName().toLowerCase(),vo);
  269. }
  270. }
  271. List<AlarmTag> alarmTagls=new ArrayList<>();
  272. for (AlarmTag alarm : ls) {
  273. if(map.containsKey(alarm.getId().toLowerCase()))
  274. {
  275. AlarmSimpleVo tag=map.get(alarm.getId().toLowerCase());
  276. if(StringUtils.notEmp(tag.getTs()))
  277. {
  278. alarm.setTs(tag.getTs());
  279. Date begin = new Date(alarm.getEndts());
  280. Date end = new Date(alarm.getTs());
  281. double value= DateUtils.secondsDiff(begin,end);
  282. alarm.setTimeLong(value);
  283. alarm.setConfirmed(tag.getConfirmed());
  284. alarm.setSuperTalbe(AlarmSuperTalbeType.BT.getCode());
  285. alarmTagls.add(alarm);
  286. }
  287. }
  288. }
  289. if (StringUtils.notEmp(alarmTagls) && !alarmTagls.isEmpty()) {
  290. alarmTsService.insertList(alarmTagls);
  291. }
  292. Map<String,ProEconAlarmInfo> tempmap=new HashMap<>();
  293. if (StringUtils.notEmp(alarmTagls) && !alarmTagls.isEmpty()) {
  294. List<ProEconAlarmInfo> valuels = new ArrayList<>();
  295. for (AlarmTag alarm : alarmTagls) {
  296. if (CacheContext.alarmBtMap.containsKey(alarm.getId())) {
  297. AlarmVo vo = CacheContext.alarmBtMap.get(alarm.getId());
  298. ProEconAlarmInfo po = new ProEconAlarmInfo();
  299. po.setTbname(vo.getTbName());
  300. if(StringUtils.notEmp(alarm.getEndts()))
  301. {
  302. po.setLastUpdateTime(new Date(alarm.getEndts()));
  303. }else
  304. {
  305. po.setLastUpdateTime(new Date());
  306. }
  307. po.setTagId(alarm.getTagId());
  308. po.setTriggerType(alarm.getTriggerType());
  309. po.setAlarmId(vo.getAlarmid());
  310. po.setDeviceId(vo.getDeviceid());
  311. po.setSubcomponents(vo.getSuffix());
  312. po.setRank(vo.getRank());
  313. po.setConfirmed(alarm.getConfirmed());
  314. po.setUniformCode(vo.getUniformcode());
  315. po.setAlarmType(vo.getAlarmtype());
  316. po.setDeviceType(vo.getDevicetype());
  317. po.setComponents(vo.getComponents());
  318. po.setSubcomponents(vo.getSubcomponents());
  319. po.setDescription(vo.getDescription());
  320. po.setModelId(vo.getModelId());
  321. po.setResetTable(vo.getResettable());
  322. po.setEnable(vo.getEnabled());
  323. po.setCharacteristic(vo.getCharacteristic());
  324. po.setStationId(vo.getStationid());
  325. po.setProjectId(vo.getProjectid());
  326. po.setLineId(vo.getLineid());
  327. po.setStationName(vo.getStationname());
  328. po.setProjectiName(vo.getProjectname());
  329. po.setLineidName(vo.getLinename());
  330. po.setDeviceName(vo.getDevicename());
  331. po.setOval(alarm.getOval().intValue());
  332. po.setVal(alarm.getVal().intValue());
  333. if(StringUtils.notEmp(alarm.getEndts()))
  334. {
  335. po.setCloseTime(new Date(alarm.getEndts()));
  336. }else
  337. {
  338. po.setCloseTime(new Date());
  339. }
  340. po.setIsOpen(0);
  341. alarm.setRank(vo.getRank());
  342. alarm.setDescription(vo.getDescription());
  343. alarm.setAlarmType(vo.getAlarmtype());
  344. alarm.setDeviceType(vo.getDevicetype());
  345. alarm.setCharacteristic(vo.getCharacteristic());
  346. alarm.setFaultCause(vo.getFaultCause());
  347. alarm.setResolvent(vo.getResolvent());
  348. alarm.setDeviceId(vo.getDeviceid());
  349. alarm.setAlarmId(vo.getAlarmid());
  350. alarm.setIsClose(true);
  351. if(CacheContext.subwpmap.containsKey(vo.getStationid()))
  352. {
  353. alarm.setWpName(CacheContext.subwpmap.get(vo.getStationid()).getName());
  354. }
  355. alarm.setWpId(vo.getStationid());
  356. pushDataSevice.pushBtData(alarm);
  357. tempmap.put(po.getTbname(),po);
  358. }
  359. }
  360. for (Map.Entry<String, ProEconAlarmInfo> entry : tempmap.entrySet()) {
  361. valuels.add(entry.getValue());
  362. }
  363. List<String> idls = new ArrayList<>();
  364. for (ProEconAlarmInfo vo : valuels) {
  365. idls.add(vo.getTbname());
  366. }
  367. if (!idls.isEmpty()) {
  368. proEconAlarmInfoService.removeByIds(idls);
  369. }
  370. List<ProEconAlarmInfo> templs = new ArrayList<>();
  371. for (ProEconAlarmInfo vo : valuels) {
  372. templs.add(vo);
  373. if (templs.size() == 100) {
  374. proEconAlarmInfoService.saveBatch(templs);
  375. templs = new ArrayList<>();
  376. }
  377. }
  378. if (!templs.isEmpty()) {
  379. proEconAlarmInfoService.saveBatch(templs);
  380. }
  381. }
  382. }
  383. }
  384. // public synchronized void pushData(AlarmTag po) throws EncodeException, IOException {
  385. // ConcurrentHashMap<String, WebSocket> webSocketPushMap = WebSocket.webSocketMap;
  386. // ConcurrentHashMap<String, PushParams> webSocketPushParamsMap = WebSocket.webSocketParamsMap;
  387. // if(!webSocketPushMap.isEmpty()){
  388. // for(String key : webSocketPushMap.keySet()){
  389. // // 根据ws连接用户ID获取推送参数
  390. // PushParams pushParams = webSocketPushParamsMap.get(key);
  391. //
  392. // if(webSocketPushParamsMap.contains(po.getId()))
  393. // {
  394. // PushParams pp=webSocketPushParamsMap.get(po.getId());
  395. //
  396. // double hours=DateUtils.hoursDiff(pp.getStartTime(),new Date());
  397. // if(hours>pushinterval)
  398. // {
  399. //
  400. // webSocket.sendMessageByUserId(key,po);
  401. // pp.setStartTime(new Date(po.getTs()));
  402. //
  403. // }
  404. // }else
  405. // {
  406. // webSocket.sendMessageByUserId(key,po);
  407. // PushParams pp=new PushParams();
  408. // pp.setStartTime(new Date());
  409. // webSocketPushParamsMap.put(po.getId(),pp);
  410. //
  411. // }
  412. // }
  413. // }
  414. //
  415. // }
  416. }