configurable.api.ts 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. import { floor, isArray, random, slice } from 'lodash-es';
  2. import { defHttp } from '/@/utils/http/axios';
  3. import { get } from '../billboard/utils';
  4. import { useGlobSetting } from '/@/hooks/setting';
  5. import { ref, reactive } from 'vue'
  6. enum Api {
  7. list = '/safety/ventanalyDevice/homedata2',
  8. getHomeData = '/safety/ventanalyDevice/homedata',
  9. getDisHome = '/monitor/disaster/getDisHome',
  10. getBDDustData = '/monitor/disaster/getDisDustHome',
  11. getBDFireData = '/monitor/disaster/getDisFireHome',
  12. getDeviceSys = '/ventanaly-device/monitor/getSysFireHomeInfo',
  13. getAlarmRecord = '/ventanaly-device/safety/ventanalyAlarmLog/sysLinkDevAlarmLog',
  14. getTotal = '/safety/ventanalyAlarmLog/total',
  15. sysTypeWarnList = '/safety/ventanalyAlarmLog/sysTypeWarn',
  16. }
  17. // 搞这个缓存是由于:目前代码上的设计是多个模块发出多次请求,每个模块自己负责消费前者的响应。
  18. // 这会导致相同的请求被同时发送多次。
  19. const cache = new Map<string, Promise<any>>();
  20. /**
  21. * 列表接口,5.5专用,和6.0的getHomeData基本一致
  22. * @param params
  23. */
  24. export const list = (params) => {
  25. const key = `${Api.list}?${JSON.stringify(params)}`;
  26. if (!cache.has(key)) {
  27. cache.set(
  28. key,
  29. defHttp.post({ url: Api.list, params }).finally(() => {
  30. cache.delete(key);
  31. })
  32. );
  33. }
  34. return (cache.get(key) as Promise<any>).then((res) => {
  35. if (res.fanmain) {
  36. // 处理频率字段,为了兼容旧版保留,现配置项已支持一级动态字段
  37. res.fanmain.forEach((e) => {
  38. if (e.readData.Fan2StartStatus === '1') {
  39. e.current = '二号';
  40. e.readData.FanFreqHz = e.readData.Fan2FreqHz;
  41. } else {
  42. e.current = '一号';
  43. e.readData.FanFreqHz = e.readData.Fan1FreqHz;
  44. }
  45. });
  46. }
  47. if (res.fanlocal) {
  48. res.fanlocal.forEach((e) => {
  49. e.chartData = [
  50. {
  51. x: '吸风量',
  52. yRealtime: e.readData.windQuantity1,
  53. yMock: floor(parseFloat(e.inletAirVolume_merge) * random(0.98, 1, false), 2),
  54. y: e.inletAirVolume_merge,
  55. },
  56. {
  57. x: '供风量',
  58. yRealtime: e.readData.windQuantity2,
  59. yMock: floor(parseFloat(e.ductOutletAirVolume_merge) * random(0.98, 1, false), 2),
  60. y: e.ductOutletAirVolume_merge,
  61. },
  62. ];
  63. if (e.readData.Fan2StartStatus === '1') {
  64. e.current = '二号';
  65. e.readData.FanfHz = e.readData.Fan2fHz;
  66. } else {
  67. e.current = '一号';
  68. e.readData.FanfHz = e.readData.Fan1fHz;
  69. }
  70. });
  71. }
  72. if (res.sys_majorpath) {
  73. res.sys_majorpath.forEach((e) => {
  74. const { drag_1, drag_2, drag_3, drag_total } = e.majorpath;
  75. const { fy_merge = { value: '1' } } = e.readData;
  76. const drag_merge = parseInt(fy_merge.value);
  77. // const m3_merge = parseInt(retM3_merge.value);
  78. e.piechart = [
  79. { val: drag_1, valMock: floor((drag_1 / drag_total) * drag_merge), label: '进风区(Pa)' },
  80. { val: drag_2, valMock: floor((drag_2 / drag_total) * drag_merge), label: '用风区(Pa)' },
  81. { val: drag_3, valMock: floor((drag_3 / drag_total) * drag_merge), label: '回风区(Pa)' },
  82. ];
  83. e.readData.dengjikong_merge = get(res, 'midinfo[0].sysinfo.equalarea');
  84. e.readData.fy_merge_int = drag_merge;
  85. // e.dengjikong_merge = floor((1.19 * (m3_merge / 60)) / Math.sqrt(drag_merge), 2);
  86. });
  87. }
  88. if (res.sys_surface_caimei) {
  89. res.sys_surface_caimei.forEach((e) => {
  90. if (isArray(e.history)) {
  91. e.history = slice(e.history, e.history.length - 30, e.history.length);
  92. }
  93. if (isArray(e.history_report)) {
  94. e.history_report = slice(e.history_report, e.history_report.length - 30, e.history_report.length);
  95. }
  96. });
  97. }
  98. if (res.device_arr) {
  99. res.device_arr = Object.values(res.device);
  100. }
  101. if (res.sys_wind) {
  102. res.sys_wind.forEach((e) => {
  103. if (e.readData.m3) {
  104. e.readData.m3 = e.readData.m3.replace('-', '');
  105. }
  106. if (e.readData.va) {
  107. e.readData.va = e.readData.va.replace('-', '');
  108. }
  109. });
  110. }
  111. if (res.windrect) {
  112. res.windrect.forEach((e) => {
  113. if (e.readData.m3) {
  114. e.readData.m3 = e.readData.m3.replace('-', '');
  115. }
  116. if (e.readData.va) {
  117. e.readData.va = e.readData.va.replace('-', '');
  118. }
  119. });
  120. }
  121. return res;
  122. });
  123. };
  124. export const getHomeData = (params) => {
  125. const key = `${Api.getHomeData}?${JSON.stringify(params)}`;
  126. if (!cache.has(key)) {
  127. cache.set(
  128. key,
  129. defHttp.post({ url: Api.getHomeData, params }).finally(() => {
  130. cache.delete(key);
  131. })
  132. );
  133. }
  134. return (cache.get(key) as Promise<any>).then((res) => {
  135. res.fanmain.forEach((e) => {
  136. if (e.readData.Fan2StartStatus === '1') {
  137. e.current = '二号';
  138. e.readData.FanFreqHz = e.readData.Fan2FreqHz;
  139. } else {
  140. e.current = '一号';
  141. e.readData.FanFreqHz = e.readData.Fan1FreqHz;
  142. }
  143. });
  144. res.fanlocal.forEach((e) => {
  145. e.chartData = [
  146. {
  147. x: '吸风量',
  148. y: e.readData.windQuantity1,
  149. },
  150. {
  151. x: '供风量',
  152. y: e.readData.windQuantity2,
  153. },
  154. ];
  155. if (e.readData.Fan2StartStatus === '1') {
  156. e.current = '二号';
  157. e.readData.FanfHz = e.readData.Fan2fHz;
  158. } else {
  159. e.current = '一号';
  160. e.readData.FanfHz = e.readData.Fan1fHz;
  161. }
  162. });
  163. res.sys_majorpath.forEach((e) => {
  164. e.piechart = [
  165. { val: e.majorpath.drag_1, label: '进风区' },
  166. { val: e.majorpath.drag_2, label: '用风区' },
  167. { val: e.majorpath.drag_3, label: '回风区' },
  168. ];
  169. });
  170. return res;
  171. });
  172. };
  173. export const getBDDustData = (params) => {
  174. const key = `${Api.getBDDustData}?${JSON.stringify(params)}`;
  175. if (!cache.has(key)) {
  176. cache.set(
  177. key,
  178. defHttp.post({ url: Api.getBDDustData, params }).finally(() => {
  179. cache.delete(key);
  180. })
  181. );
  182. }
  183. return cache.get(key) as Promise<any>;
  184. };
  185. export const getBDFireData = (params) => {
  186. const key = `${Api.getBDFireData}?${JSON.stringify(params)}`;
  187. if (!cache.has(key)) {
  188. cache.set(
  189. key,
  190. defHttp.post({ url: Api.getBDFireData, params }).finally(() => {
  191. cache.delete(key);
  192. })
  193. );
  194. }
  195. return (cache.get(key) as Promise<any>).then((res) => {
  196. res.pdArray.forEach((e) => {
  197. e.arrayFiber.forEach((j) => {
  198. j.fibreTemperatureArr = JSON.parse(j.fibreTemperature);
  199. });
  200. });
  201. res.sgGxObj.devGxcw.forEach((e) => {
  202. e.fibreTemperatureArr = JSON.parse(e.fibreTemperature);
  203. });
  204. res.sgGxObj.devSgjc.forEach((e) => {
  205. e.o2val = e.o2Val || 0;
  206. e.coval = e.coVal || 0;
  207. e.gasval = e.gasVal || 0;
  208. e.ch2val = e.ch2Val || 0;
  209. e.chval = e.chVal || 0;
  210. });
  211. return res;
  212. });
  213. };
  214. // 塔山火灾预警页面获取数据接口
  215. export const getDeviceSys = (params) => {
  216. const key = `${Api.getDeviceSys}?${JSON.stringify(params)}`;
  217. if (!cache.has(key)) {
  218. cache.set(
  219. key,
  220. defHttp.post({ url: Api.getDeviceSys, params }).finally(() => {
  221. cache.delete(key);
  222. })
  223. );
  224. }
  225. return (cache.get(key) as Promise<any>).then((res) => {
  226. return res;
  227. });
  228. };
  229. export const getAlarmRecord = (params) => {
  230. const key = `${Api.getAlarmRecord}?${JSON.stringify(params)}`;
  231. if (!cache.has(key)) {
  232. cache.set(
  233. key,
  234. defHttp.post({ url: Api.getAlarmRecord, params }).finally(() => {
  235. cache.delete(key);
  236. })
  237. );
  238. }
  239. return (cache.get(key) as Promise<any>).then((res) => {
  240. return res;
  241. });
  242. };
  243. export const getDisHome = (params) => {
  244. const key = `${Api.getDisHome}?${JSON.stringify(params)}`;
  245. if (!cache.has(key)) {
  246. cache.set(
  247. key,
  248. defHttp.post({ url: Api.getDisHome, params }).finally(() => {
  249. cache.delete(key);
  250. })
  251. );
  252. }
  253. return (cache.get(key) as Promise<any>).then((res) => {
  254. if (res.pdArray) {
  255. res.pdArray.forEach((e) => {
  256. e.arrayFiber.forEach((j) => {
  257. j.fibreTemperatureArr = JSON.parse(j.fibreTemperature);
  258. });
  259. });
  260. }
  261. if (res.sgGxObj) {
  262. res.sgGxObj.devGxcw.forEach((e) => {
  263. e.fibreTemperatureArr = JSON.parse(e.fibreTemperature);
  264. });
  265. res.sgGxObj.devSgjc.forEach((e) => {
  266. e.o2val = e.o2Val || 0;
  267. e.coval = e.coVal || 0;
  268. e.gasval = e.gasVal || 0;
  269. e.ch2val = e.ch2Val || 0;
  270. e.chval = e.chVal || 0;
  271. });
  272. }
  273. if (res.obfObj) {
  274. res.obfObj.obfObjModded = [
  275. {
  276. objType: '氧气',
  277. arrayDev: res.obfObj.arrayDev.map((e) => {
  278. return {
  279. strinstallpos: e.strinstallpos,
  280. val: e.o2Val || 0,
  281. };
  282. }),
  283. },
  284. {
  285. objType: '甲烷',
  286. arrayDev: res.obfObj.arrayDev.map((e) => {
  287. return {
  288. strinstallpos: e.strinstallpos,
  289. val: e.ch4Val || 0,
  290. };
  291. }),
  292. },
  293. {
  294. objType: '一氧化碳',
  295. arrayDev: res.obfObj.arrayDev.map((e) => {
  296. return {
  297. strinstallpos: e.strinstallpos,
  298. val: e.coVal || 0,
  299. };
  300. }),
  301. },
  302. {
  303. objType: '乙炔',
  304. arrayDev: res.obfObj.arrayDev.map((e) => {
  305. return {
  306. strinstallpos: e.strinstallpos,
  307. val: e.c2h2Val || 0,
  308. };
  309. }),
  310. },
  311. {
  312. objType: '二氧化碳',
  313. arrayDev: res.obfObj.arrayDev.map((e) => {
  314. return {
  315. strinstallpos: e.strinstallpos,
  316. val: e.co2Val || 0,
  317. };
  318. }),
  319. },
  320. {
  321. objType: '乙烯',
  322. arrayDev: res.obfObj.arrayDev.map((e) => {
  323. return {
  324. strinstallpos: e.strinstallpos,
  325. val: e.c2h4Val || 0,
  326. };
  327. }),
  328. },
  329. {
  330. objType: '压差',
  331. arrayDev: res.obfObj.arrayDev.map((e) => {
  332. return {
  333. strinstallpos: e.strinstallpos,
  334. val: e.dpVal || 0,
  335. };
  336. }),
  337. },
  338. {
  339. objType: '温度',
  340. arrayDev: res.obfObj.arrayDev.map((e) => {
  341. return {
  342. strinstallpos: e.strinstallpos,
  343. val: e.tempVal || 0,
  344. };
  345. }),
  346. },
  347. ];
  348. }
  349. return res;
  350. });
  351. };
  352. export const sysTypeWarnList = (params) => {
  353. const key = `${Api.sysTypeWarnList}?${JSON.stringify(params)}`;
  354. if (!cache.has(key)) {
  355. cache.set(
  356. key,
  357. defHttp.post({ url: Api.sysTypeWarnList, params }).finally(() => {
  358. cache.delete(key);
  359. })
  360. );
  361. }
  362. return (cache.get(key) as Promise<any>).then((res) => {
  363. return res;
  364. });
  365. };
  366. //多灾融合预警
  367. function getLevelNum() {
  368. return new Promise(async (resolve) => {
  369. const list = {}
  370. const typeArr = ['fire', 'dust', 'vent', 'gas'];
  371. for (let i = 0; i < typeArr.length; i++) {
  372. const type = typeArr[i];
  373. const result = await sysTypeWarnList({ type });
  374. if (type == 'fire') {
  375. list.fire = result.length || 0
  376. } else if (type == 'dust') {
  377. list.dust = result.length || 0
  378. } else if (type == 'vent') {
  379. list.vent = result.length || 0
  380. } else if (type == 'gas') {
  381. list.gas = result.length || 0
  382. }
  383. }
  384. resolve(list);
  385. });
  386. }
  387. export const getTotal = (params) => {
  388. const { sysOrgCode, sysDataType } = useGlobSetting();
  389. let data = ref<any>({})
  390. getLevelNum().then(res => {
  391. data.value = res
  392. })
  393. console.log(data, '888')
  394. const key = `${Api.getTotal}?${JSON.stringify(params)}`;
  395. if (!cache.has(key)) {
  396. cache.set(
  397. key,
  398. defHttp.get({ url: Api.getTotal, params }).finally(() => {
  399. cache.delete(key);
  400. })
  401. );
  402. }
  403. return (cache.get(key) as Promise<any>).then((res) => {
  404. console.log(res, '多灾融合预警数据')
  405. const levelsList = [
  406. {
  407. name: "报警",
  408. value: 0
  409. },
  410. {
  411. name: "重大风险",
  412. value: 0
  413. },
  414. {
  415. name: "较大风险",
  416. value: 0
  417. },
  418. {
  419. name: "一般风险",
  420. value: 0
  421. },
  422. {
  423. name: "低风险",
  424. value: data.value ? data.value.vent : 0
  425. },
  426. ];
  427. //通风监测预警数据
  428. switch (sysDataType) {
  429. case 'monitor':
  430. res.ventWarn = {
  431. ventJf: res.ventInfo.zongjinfeng,
  432. ventXf: res.ventInfo.xufengliang,
  433. ventHf: res.ventInfo.zonghuifeng,
  434. }
  435. console.log(data.value,'999')
  436. res.ventData = [
  437. {
  438. name: "报警",
  439. value: res.info.sysInfo.ventS.levels.alarm
  440. },
  441. {
  442. name: "重大风险",
  443. value: res.info.sysInfo.ventS.levels.red
  444. },
  445. {
  446. name: "较大风险",
  447. value: res.info.sysInfo.ventS.levels.orange
  448. },
  449. {
  450. name: "一般风险",
  451. value: res.info.sysInfo.ventS.levels.yellow
  452. },
  453. {
  454. name: "低风险",
  455. value: data.value.vent ? data.value.vent : res.info.sysInfo.ventS.levels.blue
  456. },
  457. ];
  458. break;
  459. case 'report':
  460. res.ventWarn = {
  461. ventJf: res.ventInfo.totalIntM3,
  462. ventXf: res.ventInfo.xufengliang,
  463. ventHf: res.ventInfo.totalRetM3,
  464. }
  465. res.ventData = levelsList
  466. break;
  467. default:
  468. res.ventWarn = {
  469. ventJf: res.ventInfo.totalIntM3,
  470. ventXf: res.ventInfo.xufengliang,
  471. ventHf: res.ventInfo.totalRetM3,
  472. }
  473. res.ventData = levelsList
  474. }
  475. //设备监测预警数据
  476. res.deviceWarn = reactive({})
  477. Object.keys(res.info.devicekindInfo).forEach((el, index) => {
  478. res.deviceWarn[`${el}_all`] = res.info.devicekindInfo[el].totalcount;
  479. res.deviceWarn[`${el}_warn`] = res.info.devicekindInfo[el].count;
  480. res.deviceWarn[`${el}_close`] = res.info.devicekindInfo[el].netstatus;
  481. })
  482. return res;
  483. });
  484. };