configurable.api.ts 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. import { floor, isArray, random, slice } from 'lodash-es';
  2. import { defHttp } from '/@/utils/http/axios';
  3. import { get } from '../billboard/utils';
  4. enum Api {
  5. list = '/safety/ventanalyDevice/homedata2',
  6. getHomeData = '/safety/ventanalyDevice/homedata',
  7. getDisHome = '/monitor/disaster/getDisHome',
  8. getBDDustData = '/monitor/disaster/getDisDustHome',
  9. getBDFireData = '/monitor/disaster/getDisFireHome',
  10. getDeviceSys = '/ventanaly-device/monitor/system',
  11. }
  12. // 搞这个缓存是由于:目前代码上的设计是多个模块发出多次请求,每个模块自己负责消费前者的响应。
  13. // 这会导致相同的请求被同时发送多次。
  14. const cache = new Map<string, Promise<any>>();
  15. /**
  16. * 列表接口,5.5专用,和6.0的getHomeData基本一致
  17. * @param params
  18. */
  19. export const list = (params) => {
  20. const key = `${Api.list}?${JSON.stringify(params)}`;
  21. if (!cache.has(key)) {
  22. cache.set(
  23. key,
  24. defHttp.post({ url: Api.list, params }).finally(() => {
  25. cache.delete(key);
  26. })
  27. );
  28. }
  29. return (cache.get(key) as Promise<any>).then((res) => {
  30. if (res.fanmain) {
  31. // 处理频率字段,为了兼容旧版保留,现配置项已支持一级动态字段
  32. res.fanmain.forEach((e) => {
  33. if (e.readData.Fan2StartStatus === '1') {
  34. e.current = '二号';
  35. e.readData.FanFreqHz = e.readData.Fan2FreqHz;
  36. } else {
  37. e.current = '一号';
  38. e.readData.FanFreqHz = e.readData.Fan1FreqHz;
  39. }
  40. });
  41. }
  42. if (res.fanlocal) {
  43. res.fanlocal.forEach((e) => {
  44. e.chartData = [
  45. {
  46. x: '吸风量',
  47. yRealtime: e.readData.windQuantity1,
  48. yMock: floor(parseFloat(e.inletAirVolume_merge) * random(0.98, 1, false), 2),
  49. y: e.inletAirVolume_merge,
  50. },
  51. {
  52. x: '供风量',
  53. yRealtime: e.readData.windQuantity2,
  54. yMock: floor(parseFloat(e.ductOutletAirVolume_merge) * random(0.98, 1, false), 2),
  55. y: e.ductOutletAirVolume_merge,
  56. },
  57. ];
  58. if (e.readData.Fan2StartStatus === '1') {
  59. e.current = '二号';
  60. e.readData.FanfHz = e.readData.Fan2fHz;
  61. } else {
  62. e.current = '一号';
  63. e.readData.FanfHz = e.readData.Fan1fHz;
  64. }
  65. });
  66. }
  67. if (res.sys_majorpath) {
  68. res.sys_majorpath.forEach((e) => {
  69. const { drag_1, drag_2, drag_3, drag_total } = e.majorpath;
  70. const { fy_merge = { value: '1' } } = e.readData;
  71. const drag_merge = parseInt(fy_merge.value);
  72. // const m3_merge = parseInt(retM3_merge.value);
  73. e.piechart = [
  74. { val: drag_1, valMock: floor((drag_1 / drag_total) * drag_merge), label: '进风区(Pa)' },
  75. { val: drag_2, valMock: floor((drag_2 / drag_total) * drag_merge), label: '用风区(Pa)' },
  76. { val: drag_3, valMock: floor((drag_3 / drag_total) * drag_merge), label: '回风区(Pa)' },
  77. ];
  78. e.readData.dengjikong_merge = get(res, 'midinfo[0].sysinfo.equalarea');
  79. e.readData.fy_merge_int = drag_merge;
  80. // e.dengjikong_merge = floor((1.19 * (m3_merge / 60)) / Math.sqrt(drag_merge), 2);
  81. });
  82. }
  83. if (res.sys_surface_caimei) {
  84. res.sys_surface_caimei.forEach((e) => {
  85. if (isArray(e.history)) {
  86. e.history = slice(e.history, e.history.length - 30, e.history.length);
  87. }
  88. if (isArray(e.history_report)) {
  89. e.history_report = slice(e.history_report, e.history_report.length - 30, e.history_report.length);
  90. }
  91. });
  92. }
  93. if (res.device_arr) {
  94. res.device_arr = Object.values(res.device);
  95. }
  96. if (res.sys_wind) {
  97. res.sys_wind.forEach((e) => {
  98. if (e.readData.m3) {
  99. e.readData.m3 = e.readData.m3.replace('-', '');
  100. }
  101. if (e.readData.va) {
  102. e.readData.va = e.readData.va.replace('-', '');
  103. }
  104. });
  105. }
  106. if (res.windrect) {
  107. res.windrect.forEach((e) => {
  108. if (e.readData.m3) {
  109. e.readData.m3 = e.readData.m3.replace('-', '');
  110. }
  111. if (e.readData.va) {
  112. e.readData.va = e.readData.va.replace('-', '');
  113. }
  114. });
  115. }
  116. return res;
  117. });
  118. };
  119. export const getHomeData = (params) => {
  120. const key = `${Api.getHomeData}?${JSON.stringify(params)}`;
  121. if (!cache.has(key)) {
  122. cache.set(
  123. key,
  124. defHttp.post({ url: Api.getHomeData, params }).finally(() => {
  125. cache.delete(key);
  126. })
  127. );
  128. }
  129. return (cache.get(key) as Promise<any>).then((res) => {
  130. res.fanmain.forEach((e) => {
  131. if (e.readData.Fan2StartStatus === '1') {
  132. e.current = '二号';
  133. e.readData.FanFreqHz = e.readData.Fan2FreqHz;
  134. } else {
  135. e.current = '一号';
  136. e.readData.FanFreqHz = e.readData.Fan1FreqHz;
  137. }
  138. });
  139. res.fanlocal.forEach((e) => {
  140. e.chartData = [
  141. {
  142. x: '吸风量',
  143. y: e.readData.windQuantity1,
  144. },
  145. {
  146. x: '供风量',
  147. y: e.readData.windQuantity2,
  148. },
  149. ];
  150. if (e.readData.Fan2StartStatus === '1') {
  151. e.current = '二号';
  152. e.readData.FanfHz = e.readData.Fan2fHz;
  153. } else {
  154. e.current = '一号';
  155. e.readData.FanfHz = e.readData.Fan1fHz;
  156. }
  157. });
  158. res.sys_majorpath.forEach((e) => {
  159. e.piechart = [
  160. { val: e.majorpath.drag_1, label: '进风区' },
  161. { val: e.majorpath.drag_2, label: '用风区' },
  162. { val: e.majorpath.drag_3, label: '回风区' },
  163. ];
  164. });
  165. return res;
  166. });
  167. };
  168. export const getBDDustData = (params) => {
  169. const key = `${Api.getBDDustData}?${JSON.stringify(params)}`;
  170. if (!cache.has(key)) {
  171. cache.set(
  172. key,
  173. defHttp.post({ url: Api.getBDDustData, params }).finally(() => {
  174. cache.delete(key);
  175. })
  176. );
  177. }
  178. return cache.get(key) as Promise<any>;
  179. };
  180. export const getBDFireData = (params) => {
  181. const key = `${Api.getBDFireData}?${JSON.stringify(params)}`;
  182. if (!cache.has(key)) {
  183. cache.set(
  184. key,
  185. defHttp.post({ url: Api.getBDFireData, params }).finally(() => {
  186. cache.delete(key);
  187. })
  188. );
  189. }
  190. return (cache.get(key) as Promise<any>).then((res) => {
  191. res.pdArray.forEach((e) => {
  192. e.arrayFiber.forEach((j) => {
  193. j.fibreTemperatureArr = JSON.parse(j.fibreTemperature);
  194. });
  195. });
  196. res.sgGxObj.devGxcw.forEach((e) => {
  197. e.fibreTemperatureArr = JSON.parse(e.fibreTemperature);
  198. });
  199. res.sgGxObj.devSgjc.forEach((e) => {
  200. e.o2val = e.o2Val || 0;
  201. e.coval = e.coVal || 0;
  202. e.gasval = e.gasVal || 0;
  203. e.ch2val = e.ch2Val || 0;
  204. e.chval = e.chVal || 0;
  205. });
  206. return res;
  207. });
  208. };
  209. // ceshi
  210. export const getDeviceSys = (params) => {
  211. const key = `${Api.getDeviceSys}?${JSON.stringify(params)}`;
  212. if (!cache.has(key)) {
  213. cache.set(
  214. key,
  215. defHttp.post({ url: Api.getDeviceSys, params }).finally(() => {
  216. cache.delete(key);
  217. })
  218. );
  219. }
  220. return (cache.get(key) as Promise<any>).then((res) => {
  221. console.log('getDeviceSys', res);
  222. return res;
  223. });
  224. }
  225. export const getDisHome = (params) => {
  226. const key = `${Api.getDisHome}?${JSON.stringify(params)}`;
  227. if (!cache.has(key)) {
  228. cache.set(
  229. key,
  230. defHttp.post({ url: Api.getDisHome, params }).finally(() => {
  231. cache.delete(key);
  232. })
  233. );
  234. }
  235. return (cache.get(key) as Promise<any>).then((res) => {
  236. if (res.pdArray) {
  237. res.pdArray.forEach((e) => {
  238. e.arrayFiber.forEach((j) => {
  239. j.fibreTemperatureArr = JSON.parse(j.fibreTemperature);
  240. });
  241. });
  242. }
  243. if (res.sgGxObj) {
  244. res.sgGxObj.devGxcw.forEach((e) => {
  245. e.fibreTemperatureArr = JSON.parse(e.fibreTemperature);
  246. });
  247. res.sgGxObj.devSgjc.forEach((e) => {
  248. e.o2val = e.o2Val || 0;
  249. e.coval = e.coVal || 0;
  250. e.gasval = e.gasVal || 0;
  251. e.ch2val = e.ch2Val || 0;
  252. e.chval = e.chVal || 0;
  253. });
  254. }
  255. if (res.obfObj) {
  256. res.obfObj.obfObjModded = [
  257. {
  258. objType: '氧气',
  259. arrayDev: res.obfObj.arrayDev.map((e) => {
  260. return {
  261. strinstallpos: e.strinstallpos,
  262. val: e.o2Val || 0,
  263. };
  264. }),
  265. },
  266. {
  267. objType: '甲烷',
  268. arrayDev: res.obfObj.arrayDev.map((e) => {
  269. return {
  270. strinstallpos: e.strinstallpos,
  271. val: e.ch4Val || 0,
  272. };
  273. }),
  274. },
  275. {
  276. objType: '一氧化碳',
  277. arrayDev: res.obfObj.arrayDev.map((e) => {
  278. return {
  279. strinstallpos: e.strinstallpos,
  280. val: e.coVal || 0,
  281. };
  282. }),
  283. },
  284. {
  285. objType: '乙炔',
  286. arrayDev: res.obfObj.arrayDev.map((e) => {
  287. return {
  288. strinstallpos: e.strinstallpos,
  289. val: e.c2h2Val || 0,
  290. };
  291. }),
  292. },
  293. {
  294. objType: '二氧化碳',
  295. arrayDev: res.obfObj.arrayDev.map((e) => {
  296. return {
  297. strinstallpos: e.strinstallpos,
  298. val: e.co2Val || 0,
  299. };
  300. }),
  301. },
  302. {
  303. objType: '乙烯',
  304. arrayDev: res.obfObj.arrayDev.map((e) => {
  305. return {
  306. strinstallpos: e.strinstallpos,
  307. val: e.c2h4Val || 0,
  308. };
  309. }),
  310. },
  311. {
  312. objType: '压差',
  313. arrayDev: res.obfObj.arrayDev.map((e) => {
  314. return {
  315. strinstallpos: e.strinstallpos,
  316. val: e.dpVal || 0,
  317. };
  318. }),
  319. },
  320. {
  321. objType: '温度',
  322. arrayDev: res.obfObj.arrayDev.map((e) => {
  323. return {
  324. strinstallpos: e.strinstallpos,
  325. val: e.tempVal || 0,
  326. };
  327. }),
  328. },
  329. ];
  330. }
  331. return res;
  332. });
  333. };