AppCurvesAnalysis.js 41 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190
  1. var devId = 0;
  2. var start, end;
  3. var waterSupplySection, salesWaterSection, intervalDays, leakFlow;
  4. var lastWaterSupply, lastSalesWater, lastStart, lastEnd, lastIntervalDays;
  5. var supplySection, deviceName, maoYikaoHe;
  6. var titleColor;
  7. var currentPage = 0;
  8. var totalPage = 0;
  9. var showHelp = 0;
  10. function GetCommonEcharsLegendArr(data) {
  11. var legendArr = new Array();
  12. var length = data.devDatas.length;
  13. for (var i = 0; i < length; i++) {
  14. legendArr.push(data.devDatas[i].devName);
  15. }
  16. return legendArr;
  17. }
  18. function calculateMA(dayCount, data) {
  19. var result = [];
  20. for (var i = 0, len = data.length; i < len; i++) {
  21. if (i < dayCount) {
  22. result.push('-');
  23. continue;
  24. }
  25. var sum = 0;
  26. for (var j = 0; j < dayCount; j++) {
  27. sum += parseFloat(data[i - j]);
  28. }
  29. result.push((sum / dayCount).toFixed(2));
  30. }
  31. return result;
  32. }
  33. function GetCommonEcharsXAxis(data) {
  34. var xAxis = {};
  35. xAxis["type"] = 'time';
  36. xAxis["min"] = d.start;
  37. xAxis["max"] = d.end;
  38. return xAxis;
  39. }
  40. function GetSeriesDataArr(data) {
  41. var dataArr = new Array();
  42. var length = data.devDatas.length;
  43. for (var i = 0; i < length; i++) {
  44. var entity = new Object();
  45. entity.name = data.devDatas[i].devName;
  46. entity.type = "line";
  47. entity.data = new Array();
  48. var dataLen = d.devDatas[i].devDatas.length;
  49. for (var j = 0; j < dataLen; j++) {
  50. var metaData = [data.devDatas[i].devDatas[j].FlowTime, parseFloat(d.devDatas[i].devDatas[j].FlowRate)];
  51. entity.data.push(metaData);
  52. }
  53. dataArr.push(entity);
  54. }
  55. }
  56. //瞬时流量
  57. function ShowInsAnalysisEcharts(data, echarts) {
  58. var flowArray = new Array();
  59. var pressureArr = new Array();
  60. var timeArray = new Array();
  61. var maxFlow = 0;
  62. //var devName = data.devName + "DN" + data.caliber;
  63. var devName = data.devName;
  64. deviceName = devName;
  65. var datas = data.devDatas;
  66. devId = data.deviceId;
  67. start = data.startTime;
  68. end = data.endTime;
  69. //console.log(arrFlow);
  70. for (var i = 0; i < datas.length; i++) {
  71. if (parseFloat(datas[i].FlowRate) > maxFlow) {
  72. maxFlow = parseFloat(datas[i].FlowRate);
  73. }
  74. flowArray.push(datas[i].FlowRate)
  75. pressureArr.push(datas[i].Pressure);
  76. timeArray.push(datas[i].FlowTime);
  77. }
  78. titleColor = data.devColor;
  79. maxFlow = Math.ceil(maxFlow * 1.2);
  80. maxFlow = parseInt(maxFlow, 10);
  81. echarts.setOption({
  82. title: {
  83. text: devName,
  84. x: 'center',
  85. align: 'right',
  86. textStyle: {
  87. color: data.devColor
  88. }
  89. },
  90. tooltip: {
  91. trigger: 'axis',
  92. formatter: function (params) {
  93. //console.log(params);
  94. if (params.length > 0) {
  95. if (params.length == 1) {
  96. return "时间:" + params[0].name + "<br/>" + params[0].seriesName + ' : ' + params[0].value + '';
  97. } else if (params.length == 2) {
  98. return "时间:" + params[0].name + "<br/>" + params[0].seriesName + ' : ' + params[0].value + ' (m³/h)<br/>'
  99. + params[1].seriesName + ' : ' + params[1].value + ' (Mpa)';
  100. }
  101. }
  102. },
  103. axisPointer: {
  104. animation: false
  105. }
  106. },
  107. legend: {
  108. data: ['瞬时流量', '压力'],
  109. //data: ['瞬时流量'],
  110. x: 'left',
  111. selected: {
  112. '瞬时流量': true,
  113. '压力': false
  114. }
  115. },
  116. toolbox: {
  117. show: true,
  118. feature: {
  119. mark: { show: true },
  120. dataZoom: {
  121. yAxisIndex: 'none'
  122. },
  123. dataView: { readOnly: true },
  124. magicType: { type: ['line', 'bar'] },
  125. restore: {},
  126. saveAsImage: {}
  127. }
  128. },
  129. xAxis: {
  130. data: timeArray.map(function (str) {
  131. return str.replace(' ', '\n')
  132. })
  133. },
  134. yAxis: [
  135. {
  136. name: '单位:m³/h',
  137. type: 'value'
  138. }, {
  139. name: '单位:Mpa',
  140. type: 'value'
  141. }
  142. ],
  143. series: [
  144. {
  145. name: '瞬时流量',
  146. type: 'line',
  147. data: flowArray,
  148. lineStyle: {
  149. normal: {
  150. color: '#2EC7C9'
  151. }
  152. },
  153. markLine: {
  154. data: [
  155. { type: 'max', name: '最大值', itemStyle: { normal: { color: '#dc143c' } } },
  156. { type: 'min', name: '最小值', itemStyle: { normal: { color: '#dc143c' } } },
  157. { type: 'average', name: '平均值', itemStyle: { normal: { color: '#dc143c' } } },
  158. ]
  159. }
  160. }, {
  161. name: '压力',
  162. type: 'line',
  163. yAxisIndex: 1,
  164. lineStyle: {
  165. normal: {
  166. color: '#f00'
  167. }
  168. },
  169. data: pressureArr
  170. }
  171. ]
  172. }
  173. )
  174. maoYikaoHe = data.maoYikaoHe;
  175. if (maoYikaoHe == '1') {//显示考核表
  176. $('#one').css('display', 'block');
  177. $('#three').css('display', 'none');
  178. } else {//显示贸易表的菜单
  179. $('#one').css('display', 'none');
  180. $('#three').css('display', 'block');
  181. }
  182. $('#nightAllowFlow').html(data.nightAllowLeakFlow);
  183. $('#suspectedLeakFlow').html(data.suspectedLeakFlow + " m³/h");
  184. $('#suspectedLeakFlow1').html(data.suspectedLeakFlow + " m³/h");
  185. $('.suspectedLeakFlow').html(data.suspectedLeakFlow);
  186. $('#waterSupply').html(data.waterSupply + " m³");
  187. $('#waterSupply1').html(data.waterSupply + " m³");
  188. $('#salesWater').html(data.salesWater + " m³");
  189. $('#suspectedLeakRate').html(data.suspectedLeakRate + " %");
  190. $('#suspectedLeakRate1').html(data.suspectedLeakRate + " %");
  191. $('.suspectedLeakRate').html(data.suspectedLeakRate);
  192. $('#deviceName').html(devName);
  193. supplySection = data.startTime + "-" + data.endTime;
  194. //stringToDate
  195. //supplySection = formatDate(stringToDate(data.startTime), "yyyy-MM-dd HH") + "-" + formatDate(stringToDate(data.endTime),"yyyy-MM-dd HH");
  196. var startTime = new Date(data.startTime);
  197. var endTime = new Date(data.endTime);
  198. $('#section').html(supplySection);
  199. $('#section1').html(supplySection);
  200. $('.section').html(startTime.getFullYear() + '年' + (startTime.getMonth() * 1 + 1) + '月' + startTime.getDate() + '日至' + endTime.getFullYear() + '年' + (endTime.getMonth() * 1 + 1) + '月' + endTime.getDate() + '日' + data.intervalDays + '天');
  201. $('#devName').html(devName);
  202. //$('#devName').attr("style", "color:" + data.devColor);
  203. $('.devName').html(devName);
  204. //$('.devName').attr("style", "color:" + data.devColor);
  205. $('#leakRate').html(data.suspectedLeakRate);
  206. $('#monthHan').html(startTime.getMonth() * 1 + 1);
  207. //$('#minFlow').val(data.minFlow);
  208. $('#minFlow').html(data.minFlow);
  209. $('#minFlow1').val(data.minFlow);
  210. //$('#continuousFlow').val(parseFloat(data.continuousFlow).toFixed(2));
  211. $('#continuousFlow').html(parseFloat(data.continuousFlow).toFixed(2));
  212. $('#continuousFlow1').val(parseFloat(data.continuousFlow).toFixed(2));
  213. var days = data.intervalDays + "天";
  214. intervalDays = data.intervalDays;
  215. leakFlow = data.suspectedLeakFlow;
  216. $('#intervalDays').html(days);
  217. $('#intervalDays1').html(days);
  218. $('.intervalDays').html(intervalDays);
  219. if (data.color == "True") {
  220. $('#suspectedLeakRate').css("color", "red");
  221. $('.suspectedLeakRate').css("color", "red");
  222. $('#suspectedLeakFlow').css("color", "red");
  223. } else {
  224. $('#suspectedLeakRate').css("color", "black");
  225. $('.suspectedLeakRate').css("color", "black");
  226. $('#suspectedLeakFlow').css("color", "black");
  227. }
  228. waterSupplySection = data.waterSupply;
  229. salesWaterSection = data.salesWater;
  230. //console.log(data.sysWaterSupply);
  231. //console.log(data.sysSalesWater);
  232. $('#waterSupply').html(waterSupplySection);
  233. $('#actualWaterSupply').val(data.sysWaterSupply);
  234. $('#actualWaterSupply1').val(data.sysWaterSupply);
  235. $('.actualWaterSupply').html(data.sysWaterSupply);
  236. $('#actualSalesWater').val(data.sysSalesWater);
  237. $('#actualSalesWater1').val(data.sysSalesWater);
  238. $('.actualSalesWater').html(data.sysSalesWater);
  239. if (data.sysSalesWater > 0) {
  240. $('#maoyi').css('display', 'initial');
  241. }
  242. var avgFlow = data.avgFlow;
  243. //流量计安装口径计算
  244. var flowMeter = Math.sqrt(((avgFlow * 1.26) * 4 / (2.5 * 3.1416 * 3600))) * 1000;
  245. $('#flowMeter').html(flowMeter.toFixed(0) + " mm");
  246. //机械表安装口径计算
  247. var mechMeter = Math.sqrt(((avgFlow * 1.26) * 4 / (1.5 * 3.1416 * 3600))) * 1000;
  248. $('#mechanicalMeter').html(mechMeter.toFixed(0) + " mm");
  249. $('#mechanicalMeter1').html(mechMeter.toFixed(0) + " mm");
  250. var MeterSize = 0;
  251. if (mechMeter < 35) {
  252. MeterSize = 32;
  253. } else if (mechMeter < 45) {
  254. MeterSize = 40;
  255. } else if (mechMeter < 65) {
  256. MeterSize = 50;
  257. } else if (mechMeter < 90) {
  258. MeterSize = 80;
  259. } else if (mechMeter < 130) {
  260. MeterSize = 100;
  261. } else if (mechMeter < 175) {
  262. MeterSize = 150;
  263. } else if (mechMeter < 250) {
  264. MeterSize = 200;
  265. } else if (mechMeter < 350) {
  266. MeterSize = 300;
  267. } else {
  268. MeterSize = 400;
  269. }
  270. $('#mechanicalMeter').html(MeterSize.toFixed(0) + " mm");
  271. $('#mechanicalMeter1').html(MeterSize.toFixed(0) + " mm");
  272. $('.mechanicalMeter').html(MeterSize.toFixed(0) + " mm");
  273. if (data.intervalDays < 30) {
  274. $('#smartMeter').html(',总表、分表误差计算需要大于一个月的数据');
  275. } else {
  276. $('#smartMeter').html('');
  277. }
  278. //上期用水
  279. lastWaterSupply = data.lastSysWaterSupply;
  280. lastSalesWater = data.lastSysSalesWater;
  281. lastStart = data.lastStart;
  282. lastEnd = data.lastEnd;
  283. lastIntervalDays = data.lastIntervalDays;
  284. CalApparentLeak();
  285. //报告
  286. $('.QuJian').html(supplySection + " " + days);//期间
  287. $('.leakFactor').html(parseFloat(data.leakFactor).toFixed(2));
  288. $('.dmaChXCL').html(parseFloat(data.dmaChanXCL).toFixed(2));
  289. var startDate = formatDate(stringToDate(start), "yyyy-MM-dd");
  290. $('.startDate').html(startDate);
  291. }
  292. //趋势分析
  293. function ShowDailyChart(datas, echarts) {
  294. var flowArray = new Array();
  295. var timeArray = new Array();
  296. var leakArr = new Array();
  297. for (var i = 0; i < datas.length; i++) {
  298. flowArray.push(datas[i].DayNetFlow)
  299. leakArr.push(datas[i].LeakRate);
  300. timeArray.push(datas[i].Day);
  301. }
  302. var dataMA7 = calculateMA(7, flowArray);
  303. var dataLeakMA5 = calculateMA(5, leakArr);
  304. var dataLeakMA7 = calculateMA(7, leakArr);
  305. echarts.setOption({
  306. title: {
  307. text: deviceName,
  308. x: 'center',
  309. align: 'right',
  310. textStyle: {
  311. color: titleColor
  312. }
  313. },
  314. tooltip: {
  315. trigger: 'axis',
  316. formatter: function (params) {
  317. console.log("this is params" + params);
  318. var len = params.length;
  319. var showInfo = "";
  320. for (var i = 0; i < len; i++) {
  321. if (i == 0) {
  322. showInfo += "时间:" + params[0].name + "<br/>";
  323. }
  324. showInfo += params[i].seriesName + ":" + params[i].value + "<br/>";
  325. }
  326. //return "时间:" + params[0].name + "<br/>" + params[0].value + ' m³';
  327. return showInfo;
  328. //+ params[1].seriesName + ' : ' + params[1].value + ' (Mpa)';
  329. },
  330. axisPointer: {
  331. animation: false
  332. }
  333. },
  334. legend: {
  335. data: ['日累计流量', '趋势曲线', '流量指数', '5日指数', '7日指数'],
  336. x: 'center',
  337. top: 25,
  338. selected: {
  339. '日累计流量': false,
  340. '趋势曲线': false,
  341. '流量指数': true
  342. }
  343. },
  344. toolbox: {
  345. show: true,
  346. feature: {
  347. dataZoom: {
  348. yAxisIndex: 'none'
  349. },
  350. dataView: { readOnly: true },
  351. magicType: { type: ['line', 'bar'] },
  352. restore: {},
  353. saveAsImage: {}
  354. }
  355. },
  356. xAxis: {
  357. data: timeArray
  358. },
  359. yAxis: [
  360. {
  361. name: '单位:m³',
  362. type: 'value'
  363. }
  364. ],
  365. series: [
  366. {
  367. name: '日累计流量',
  368. type: 'bar',
  369. itemStyle: {
  370. normal: {
  371. color: '#E0ECFF',
  372. barBorderColor: '#E0ECFF',
  373. }
  374. },
  375. data: flowArray
  376. }, {
  377. name: '趋势曲线',
  378. type: 'line',
  379. data: dataMA7,
  380. smooth: true,
  381. showSymbol: false,
  382. lineStyle: {
  383. normal: {
  384. width: 1
  385. }
  386. }
  387. }, {
  388. name: '流量指数',
  389. type: 'line',
  390. data: leakArr,
  391. smooth: true,
  392. showSymbol: false,
  393. lineStyle: {
  394. normal: {
  395. width: 1
  396. }
  397. }
  398. }, {
  399. name: '5日指数',
  400. type: 'line',
  401. data: dataLeakMA5,
  402. smooth: true,
  403. showSymbol: false,
  404. lineStyle: {
  405. normal: {
  406. width: 1
  407. }
  408. }
  409. }, {
  410. name: '7日指数',
  411. type: 'line',
  412. data: dataLeakMA7,
  413. smooth: true,
  414. showSymbol: false,
  415. lineStyle: {
  416. normal: {
  417. width: 1
  418. }
  419. }
  420. }
  421. ]
  422. });
  423. }
  424. //凌晨流量
  425. function ShowDaybreakFlow(datas, echarts) {
  426. var arrFlow = datas;
  427. var devNames = new Array();
  428. var dataArr = new Array();
  429. var timeArray = new Array();
  430. //console.log(arrFlow);
  431. if (arrFlow != undefined) {
  432. for (var i = 0; i < arrFlow.length; i++) {
  433. var obj = new Object();
  434. var tempname = arrFlow[i].devName;
  435. obj.name = arrFlow[i].devName;
  436. obj.type = arrFlow[i].lineType;
  437. devNames.push(arrFlow[i].devName);
  438. var datas = new Array();
  439. for (var j = 0; j < arrFlow[i].devData.length; j++) {
  440. if (i == 0) {
  441. timeArray.push(arrFlow[i].devData[j].RTime);
  442. if (i == 0 && j == 6) {
  443. $('.LCRuKou').html(arrFlow[i].devData[j].Flow);
  444. }
  445. }
  446. datas.push(arrFlow[i].devData[j].Flow);
  447. }
  448. obj.data = datas;
  449. dataArr.push(obj);
  450. }
  451. }
  452. flowDataArr =[];
  453. if (arrFlow != undefined) {
  454. if (arrFlow.length > 3) {
  455. var dataLen = arrFlow[0].devData.length;
  456. for (var i = 0; i < dataLen; i++) {
  457. var dataMinArr =[];
  458. for (var j = 0; j < arrFlow.length; j++) {
  459. var obj = new Object();
  460. obj.name = arrFlow[j].devName;
  461. obj.data = arrFlow[j].devData[i].Flow;
  462. obj.time = arrFlow[j].devData[i].RTime;
  463. dataMinArr.push(obj);
  464. }
  465. var ob = new Object();
  466. if (dataMinArr.length > 0) {
  467. var per = dataMinArr[dataMinArr.length - 1].data / dataMinArr[dataMinArr.length - 3].data;
  468. ob.name = "差率";
  469. ob.data = (per * 100).toFixed(2) + "%";
  470. ob.time = "";
  471. } else {
  472. ob.name = "差率";
  473. ob.data = "";
  474. ob.time = "";
  475. }
  476. dataMinArr.push(ob);
  477. flowDataArr.push(dataMinArr);
  478. }
  479. //console.log(flowDataArr);
  480. }
  481. }
  482. if (flowDataArr.length > 0) {
  483. totalPage = flowDataArr.length;
  484. currentPage = 0;
  485. //console.log(flowDataArr);
  486. if (totalPage >= 10) {
  487. var lc = flowDataArr[6];
  488. $('.LCRuKou').html(lc[0].data);
  489. $('.LCChuKou').html(lc[lc.length -3].data);
  490. $('.LCCL').html(lc[lc.length -2].data);
  491. $('.LCRate').html(lc[lc.length -1].data);
  492. }
  493. var item = flowDataArr[currentPage];
  494. fillTable(item);
  495. } else {
  496. $('#divMinFlow').hide();
  497. }
  498. var app = {
  499. };
  500. var minOption = null;
  501. minOption = {
  502. title: {
  503. text: deviceName,
  504. x: 'center',
  505. align: 'right',
  506. textStyle: {
  507. color: titleColor
  508. }
  509. },
  510. tooltip: {
  511. trigger: 'axis',
  512. formatter: function (params) {
  513. if (params == undefined) {
  514. return "";
  515. } else {
  516. var showInfo = "";
  517. var size = params.length;
  518. var per = params[size - 1].value / params[size - 3].value;
  519. if (size > 0) {
  520. showInfo = "时间:" +params[0].name + "<br/>";
  521. }
  522. //for (var i = 0; i < size; i++) {
  523. // //console.log(params[i]);
  524. // showInfo += params[i].seriesName + " " + params[i].value + "<br/>"
  525. //}
  526. //console.log(params);
  527. if (size > 2) {
  528. showInfo += "入口流量 " + params[size - 3].value + "<br/>";
  529. showInfo += "出口流量 " +params[size -2].value + "<br/>";
  530. showInfo += params[size -1].seriesName + " " +params[size -1].value + "<br/>";
  531. showInfo += "差率 " + (per * 100).toFixed(2) + "%";
  532. } else {
  533. showInfo += "瞬时流量 " +params[0].value;
  534. }
  535. return showInfo;
  536. }
  537. },
  538. axisPointer: {
  539. animation: false
  540. }
  541. },
  542. legend: {
  543. type: 'scroll',
  544. bottom: 10,
  545. data: devNames
  546. },
  547. toolbox: {
  548. show: true,
  549. feature: {
  550. dataZoom: {
  551. yAxisIndex: 'none'
  552. },
  553. dataView: { readOnly: false
  554. },
  555. magicType: { type: ['line', 'bar']
  556. },
  557. restore: {
  558. },
  559. saveAsImage: {}
  560. }
  561. },
  562. xAxis: {
  563. data: timeArray
  564. },
  565. yAxis: [
  566. {
  567. name: '单位:m³/h',
  568. type: 'value'
  569. }
  570. ],
  571. series: dataArr
  572. };
  573. if (minOption && typeof minOption === "object") {
  574. echarts.setOption(minOption, true);
  575. }
  576. }
  577. function fillTable(item) {
  578. var obj = item[0];
  579. var date = obj.time;
  580. if (date == undefined) {
  581. date = "";
  582. }
  583. $("#minGrid").append("<tr><td>入口流量</td><td>" + obj.data + "</td><td>" + date + "</td></tr>");
  584. obj = item[item.length - 3];
  585. date = obj.time;
  586. if (date == undefined) {
  587. date = "";
  588. }
  589. $("#minGrid").append("<tr><td>出口流量</td><td>" + obj.data + "</td><td>" + date + "</td></tr>");
  590. obj = item[item.length - 2];
  591. date = obj.time;
  592. if (date == undefined) {
  593. date = "";
  594. }
  595. $("#minGrid").append("<tr><td>" + obj.name + "</td><td>" + obj.data + "</td><td>" + date + "</td></tr>");
  596. obj = item[item.length - 1];
  597. date = obj.time;
  598. if (date == undefined) {
  599. date = "";
  600. }
  601. $("#minGrid").append("<tr><td>" + obj.name + "</td><td>" + obj.data + "</td><td>" + date + "</td></tr>");
  602. for (var i = 1; i < item.length - 4; i++) {
  603. var ob = item[i];
  604. var date = ob.time;
  605. if (date == undefined) {
  606. date = "";
  607. }
  608. $("#minGrid").append("<tr><td>" + ob.name + "</td><td>" + ob.data + "</td><td>" + date + "</td></tr>");
  609. }
  610. }
  611. function pre() {
  612. if (currentPage == 0) {
  613. } else {
  614. if (currentPage - 1 >= 0) {
  615. currentPage = currentPage - 1;
  616. var item = flowDataArr[currentPage];
  617. $("#minGrid tr:not(:first)").remove();
  618. fillTable(item);
  619. }
  620. }
  621. }
  622. function next() {
  623. if (currentPage + 1 < totalPage) {
  624. currentPage = currentPage + 1;
  625. var item = flowDataArr[currentPage];
  626. $("#minGrid tr:not(:first)").remove();
  627. fillTable(item);
  628. }
  629. }
  630. function ShowFlowKData(kDatas, echarts) {
  631. var dates = [];
  632. var data = [];
  633. var volumes = [];
  634. var dataMA1 = [];
  635. var size = kDatas.length;
  636. for (var i = 0; i < size; i++) {
  637. var pArr = [];
  638. //console.log(stringToDate(kDatas[i].开始时间));
  639. var start = formatDate(stringToDate(kDatas[i].开始时间), 'yy-MM-dd hh') + "时";
  640. var end = formatDate(stringToDate(kDatas[i].结束时间), 'hh') + "时";
  641. //console.log(start+"-"+end);
  642. dates.push(start + "-" + end);
  643. pArr.push(parseFloat(kDatas[i].最大瞬时));
  644. pArr.push(parseFloat(kDatas[i].最小瞬时));
  645. pArr.push(parseFloat(kDatas[i].最小瞬时));
  646. pArr.push(parseFloat(kDatas[i].最大瞬时));
  647. data.push(pArr);
  648. volumes.push('-');
  649. dataMA1.push(parseFloat(kDatas[i].平均瞬时));
  650. //volumes.push(parseFloat(datas.bData[i].TotalFlow));
  651. }
  652. var dataMA3 = calculateFlowMA(3, dataMA1);
  653. var dataMA5 = calculateFlowMA(6, dataMA1);
  654. var dataMA7 = calculateFlowMA(10, dataMA1);
  655. var colorList = ['#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3'];
  656. var option = {
  657. animation: false,
  658. color: colorList,
  659. title: {
  660. left: 'center',
  661. text: deviceName,
  662. textStyle: {
  663. color: titleColor
  664. }
  665. },
  666. legend: {
  667. top: 25,
  668. data: ['瞬时流量', '2时均线', '6时均线', '12时均线', '日均线'],
  669. selected: {
  670. '瞬时流量': true,
  671. '2时均线': true,
  672. '6时均线': false,
  673. '12时均线': false,
  674. '日均线': false
  675. }
  676. },
  677. toolbox: {
  678. show: true,
  679. feature: {
  680. dataZoom: { show: true },
  681. restore: { show: true },
  682. saveAsImage: { show: true },
  683. brush: {
  684. type: 'lineX'
  685. }
  686. }
  687. },
  688. tooltip: {
  689. triggerOn: 'none',
  690. transitionDuration: 0,
  691. confine: true,
  692. bordeRadius: 4,
  693. borderWidth: 1,
  694. borderColor: '#333',
  695. backgroundColor: 'rgba(255,255,255,0.9)',
  696. textStyle: {
  697. fontSize: 12,
  698. color: '#333'
  699. },
  700. position: function (pos, params, el, elRect, size) {
  701. var obj = {
  702. top: 60
  703. };
  704. obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 5;
  705. return obj;
  706. },
  707. formatter: function (params) {
  708. //console.log(params);
  709. //return params[0].name +
  710. // '<br/><span style="display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:#ef232a;"></span>瞬时流量<br/>'
  711. // + '--最小值:'
  712. // + params[1].data[3] + '<br/>--最大值:' + params[1].data[4];
  713. var showInfo = params[0].name;
  714. for (var i = 0; i < params.length; i++) {
  715. if (params[i].componentSubType == "candlestick") {
  716. showInfo += "<br/>" + params[i].marker + params[i].seriesName;
  717. showInfo += "<br/>最大值:" + params[i].value[1];
  718. showInfo += "<br/>最小值:" + params[i].value[2];
  719. } else {
  720. showInfo += "<br/>" + params[i].marker + params[i].seriesName + params[i].value;
  721. }
  722. }
  723. return showInfo;
  724. }
  725. },
  726. axisPointer: {
  727. link: [{
  728. xAxisIndex: [0, 1]
  729. }]
  730. },
  731. xAxis: [{
  732. type: 'category',
  733. data: dates,
  734. boundaryGap: false,
  735. axisLine: { lineStyle: { color: '#777' } },
  736. //axisLabel: {
  737. // formatter: function (value) {
  738. // return echarts.format.formatTime('MM-dd hh:mm', value);
  739. // }
  740. //},
  741. min: 'dataMin',
  742. max: 'dataMax',
  743. axisPointer: {
  744. type: 'shadow',
  745. label: { show: false },
  746. triggerTooltip: true,
  747. handle: {
  748. show: true,
  749. margin: 30,
  750. color: '#B80C00'
  751. }
  752. }
  753. }],
  754. yAxis: [{
  755. scale: true,
  756. splitNumber: 2,
  757. axisLine: { lineStyle: { color: '#777' } },
  758. splitLine: { show: true },
  759. axisTick: { show: false },
  760. axisLabel: {
  761. inside: true,
  762. formatter: '{value}\n'
  763. }
  764. }],
  765. grid: [{
  766. left: 20,
  767. right: 20,
  768. top: 60,
  769. height: 120
  770. }, {
  771. left: 20,
  772. right: 20,
  773. height: 50,
  774. top: 160
  775. }],
  776. series: [{
  777. type: 'candlestick',
  778. name: '瞬时流量',
  779. data: data,
  780. itemStyle: {
  781. normal: {
  782. color: '#ef232a',
  783. color0: '#14b143',
  784. borderColor: '#ef232a',
  785. borderColor0: '#14b143'
  786. },
  787. emphasis: {
  788. color: 'black',
  789. color0: '#444',
  790. borderColor: 'black',
  791. borderColor0: '#444'
  792. }
  793. }
  794. }, {
  795. name: '2时均线',
  796. type: 'line',
  797. data: dataMA1,
  798. smooth: true,
  799. showSymbol: false,
  800. lineStyle: {
  801. normal: {
  802. width: 1
  803. }
  804. }
  805. }, {
  806. name: '6时均线',
  807. type: 'line',
  808. data: dataMA3,
  809. smooth: true,
  810. showSymbol: false,
  811. lineStyle: {
  812. normal: {
  813. width: 1
  814. }
  815. }
  816. }, {
  817. name: '12时均线',
  818. type: 'line',
  819. data: dataMA5,
  820. smooth: true,
  821. showSymbol: false,
  822. lineStyle: {
  823. normal: {
  824. width: 1
  825. }
  826. }
  827. }, {
  828. name: '日均线',
  829. type: 'line',
  830. data: dataMA7,
  831. smooth: true,
  832. showSymbol: false,
  833. lineStyle: {
  834. normal: {
  835. width: 1
  836. }
  837. }
  838. }]
  839. };
  840. if (option && typeof option === "object") {
  841. echarts.setOption(option, true);
  842. }
  843. }
  844. function formatDate(date, format) {
  845. var v = "";
  846. if (typeof date == "string" || typeof date != "object") {
  847. return;
  848. }
  849. var year = date.getFullYear();
  850. var month = date.getMonth() + 1;
  851. var day = date.getDate();
  852. var hour = date.getHours();
  853. var minute = date.getMinutes();
  854. var second = date.getSeconds();
  855. var weekDay = date.getDay();
  856. var ms = date.getMilliseconds();
  857. var weekDayString = "";
  858. if (weekDay == 1) {
  859. weekDayString = "星期一";
  860. } else if (weekDay == 2) {
  861. weekDayString = "星期二";
  862. } else if (weekDay == 3) {
  863. weekDayString = "星期三";
  864. } else if (weekDay == 4) {
  865. weekDayString = "星期四";
  866. } else if (weekDay == 5) {
  867. weekDayString = "星期五";
  868. } else if (weekDay == 6) {
  869. weekDayString = "星期六";
  870. } else if (weekDay == 7) {
  871. weekDayString = "星期日";
  872. }
  873. v = format;
  874. //Year
  875. v = v.replace(/yyyy/g, year);
  876. v = v.replace(/YYYY/g, year);
  877. v = v.replace(/yy/g, (year + "").substring(2, 4));
  878. v = v.replace(/YY/g, (year + "").substring(2, 4));
  879. //Month
  880. var monthStr = ("0" + month);
  881. v = v.replace(/MM/g, monthStr.substring(monthStr.length - 2));
  882. //Day
  883. var dayStr = ("0" + day);
  884. v = v.replace(/dd/g, dayStr.substring(dayStr.length - 2));
  885. //hour
  886. var hourStr = ("0" + hour);
  887. v = v.replace(/HH/g, hourStr.substring(hourStr.length - 2));
  888. v = v.replace(/hh/g, hourStr.substring(hourStr.length - 2));
  889. //minute
  890. var minuteStr = ("0" + minute);
  891. v = v.replace(/mm/g, minuteStr.substring(minuteStr.length - 2));
  892. //Millisecond
  893. v = v.replace(/sss/g, ms);
  894. v = v.replace(/SSS/g, ms);
  895. //second
  896. var secondStr = ("0" + second);
  897. v = v.replace(/ss/g, secondStr.substring(secondStr.length - 2));
  898. v = v.replace(/SS/g, secondStr.substring(secondStr.length - 2));
  899. //weekDay
  900. v = v.replace(/E/g, weekDayString);
  901. return v;
  902. }
  903. function stringToDate(fDate) {
  904. //var fullDate = fDate.split("-");
  905. //return new Date(fullDate[0], fullDate[1]-1, fullDate[2], 0, 0, 0);
  906. //var s = '2017-04-18 09:16:15';
  907. fDate = fDate.replace(/-/g, "/");
  908. return new Date(fDate);
  909. }
  910. function calculateFlowMA(dayCount, data) {
  911. var result = [];
  912. for (var i = 0, len = data.length; i < len; i++) {
  913. if (i < dayCount) {
  914. result.push('-');
  915. continue;
  916. }
  917. var sum = 0;
  918. for (var j = 0; j < dayCount; j++) {
  919. sum += data[i - j];
  920. }
  921. result.push((sum / dayCount).toFixed(2));
  922. }
  923. return result;
  924. }
  925. function Analysis() {
  926. var InsEchartsDom = document.getElementById("InsAnalysisEcharts");
  927. var InsEcharts = echarts.init(InsEchartsDom, 'macarons');
  928. $.ajax({
  929. url: '/AppCurvesAnalysis/GetInstantFlowAnalysis?devId=' + devId + "&start=" + start + "&end=" + end + "&continuous=" + $('#continuousFlow').html() + "&z=" + $('#minFlow').html() + "&salesWater=" + $('#actualSalesWater').val() + "&calcType=1",
  930. type: 'get',
  931. dataType: 'json',
  932. success: function (d) {
  933. //console.log(d);
  934. ShowInsAnalysisEcharts(d, InsEcharts);
  935. }
  936. });
  937. }
  938. function MaoYiAnalysis() {
  939. var InsEchartsDom = document.getElementById("InsAnalysisEcharts");
  940. var InsEcharts = echarts.init(InsEchartsDom, 'macarons');
  941. $.messager.prompt('密码', '请输入密码:', function (r) {
  942. if (r == "shan") {
  943. $.ajax({
  944. url: '/AppCurvesAnalysis/GetInstantFlowAnalysis?devId=' + devId + "&start=" + start + "&end=" + end + "&continuous=" + $('#continuousFlow1').val() + "&calcType=2&salesWater=0",
  945. type: 'get',
  946. dataType: 'json',
  947. success: function (d) {
  948. //console.log(d);
  949. ShowChart(d, InsEcharts);
  950. }
  951. });
  952. }
  953. });
  954. }
  955. function CalApparentLeak() {
  956. var waterSupply = $('#actualWaterSupply').val();
  957. var salesWater = $('#actualSalesWater').val();
  958. if (waterSupply == "" || salesWater == "") {
  959. } else {
  960. if (salesWater == 0) {
  961. //$('#NrwFlow').html(waterSupply - salesWater);//产销差水量
  962. //$('.NrwFlow').html(waterSupply - salesWater);//产销差水量
  963. //var nrwFlowPer = (waterSupply - salesWater) / waterSupply * 100;
  964. //$('#NrwFlowPer').html(nrwFlowPer.toFixed(1));
  965. //$('.NrwFlowPer').html(nrwFlowPer.toFixed(1));
  966. //管网漏失量
  967. var leakFlowTotal = leakFlow * 24 * intervalDays;
  968. $('#LeakFlow').html(leakFlowTotal.toFixed(2));
  969. $('.LeakFlow').html(leakFlowTotal.toFixed(2));
  970. $('#LeakFlowPer').html((leakFlowTotal / waterSupply * 100).toFixed(2));
  971. $('.LeakFlowPer').html((leakFlowTotal / waterSupply * 100).toFixed(2));
  972. //表观漏失量
  973. //var apparentLeak = waterSupply - salesWater - leakFlowTotal;
  974. //$('#apparentLeak').html(apparentLeak.toFixed(3));
  975. //$('#apparentLeakPer').html((apparentLeak / waterSupply * 100).toFixed(2));
  976. //考核表误差
  977. var khError = (((waterSupply - waterSupplySection) / waterSupply) * 100).toFixed(2);
  978. if (!isFinite(khError)) {
  979. khError = '--'
  980. }
  981. $('#khMeterError').html((waterSupply - waterSupplySection).toFixed(2));
  982. $('#khMeterError1').html((waterSupply - waterSupplySection).toFixed(2));
  983. $('#khMeterErrorPer').html(khError);
  984. if (khError == '--') {
  985. $('.khMeterErrorPer').html(khError);
  986. } else {
  987. if ((khError * 1) < 0) {
  988. $('.khMeterErrorPer').html('慢' + khError * -1);
  989. } else {
  990. $('.khMeterErrorPer').html('快' + khError);
  991. }
  992. }
  993. $('#khMeterErrorPer1').html(" " + khError);
  994. $('.RuKou').html(waterSupply);//入口流量
  995. $('.ChuKou').html(salesWater);//出口流量
  996. $('.ChanXCh').html("--");//产销差水量
  997. $('.ChanXChL').html("--");//产销差率
  998. $('.GuanWLS').html(leakFlow);//管网漏水量
  999. $('.QiJianGuanWLS').html(leakFlowTotal.toFixed(2));//期间管网漏水量
  1000. $('.GuanWLSL').html((leakFlowTotal / waterSupply * 100).toFixed(2));//管网漏水率
  1001. $('.BiaoGLSS').html(waterSupply - waterSupplySection);//表观漏水量
  1002. $('.BiaoGLSL').html(khError);//表观漏失率
  1003. $('.YueLSL').html((leakFlow * 24 * 30.5).toFixed(2));
  1004. /****添加 表误差*** 2018-01-13** START**/
  1005. var checkRemoteError = khError;//考核表误差
  1006. var tradeRemoteError = '--';//贸易表误差
  1007. var statementStr = "%,未超出国家标准±2%。";
  1008. var nonStatementStr = "%,超出国家标准±2%,须进行对水表周期检定或校验。";
  1009. if (checkRemoteError >= -2 && checkRemoteError <= 2) {
  1010. $('.CheckRE').html(checkRemoteError + statementStr);
  1011. } else {
  1012. $('.CheckRE').html(checkRemoteError + nonStatementStr);
  1013. }
  1014. if (tradeRemoteError >= -2 && tradeRemoteError <= 2) {
  1015. $('.TradeRE').html(tradeRemoteError + statementStr);
  1016. } else {
  1017. $('.TradeRE').html(tradeRemoteError + nonStatementStr);
  1018. }
  1019. /****添加 表误差*** 2018-01-13** END**/
  1020. $('.PerMonthLoss').html((leakFlow * 24 * 30.5 * 4.73).toFixed(2));
  1021. } else {
  1022. $('#NrwFlow').html(waterSupply - salesWater);//产销差水量
  1023. $('.NrwFlow').html(waterSupply - salesWater);//产销差水量
  1024. var nrwFlowPer = (waterSupply - salesWater) / waterSupply * 100;
  1025. $('#NrwFlowPer').html(nrwFlowPer.toFixed(2));
  1026. $('.NrwFlowPer').html(nrwFlowPer.toFixed(2));
  1027. //管网漏失量
  1028. var leakFlowTotal = leakFlow * 24 * intervalDays;
  1029. $('#LeakFlow').html(leakFlowTotal.toFixed(2));
  1030. $('.LeakFlow').html(leakFlowTotal.toFixed(2));
  1031. $('#LeakFlowPer').html((leakFlowTotal / waterSupply * 100).toFixed(2));
  1032. $('.LeakFlowPer').html((leakFlowTotal / waterSupply * 100).toFixed(2));
  1033. //表观漏失量
  1034. var apparentLeak = waterSupply - salesWater - leakFlowTotal;
  1035. $('#apparentLeak').html(apparentLeak.toFixed(2));
  1036. $('#apparentLeakPer').html((apparentLeak / waterSupply * 100).toFixed(2));
  1037. $('.biaoGLoss').html(apparentLeak.toFixed(2));
  1038. $('.biaoGLossPer').html((apparentLeak / waterSupply * 100).toFixed(2));
  1039. //考核表误差
  1040. var khError = (((waterSupply - waterSupplySection) / waterSupply) * 100).toFixed(2);
  1041. if (!isFinite(khError)) {
  1042. khError = '--';
  1043. }
  1044. $('#khMeterError').html((waterSupply - waterSupplySection).toFixed(2));
  1045. $('#khMeterErrorPer').html(khError);
  1046. $('#khMeterErrorPer1').html(" " + khError);
  1047. if (khError == '--') {
  1048. $('.khMeterErrorPer').html(khError);
  1049. } else {
  1050. if ((khError * 1) < 0) {
  1051. $('.khMeterErrorPer').html('慢' + khError * -1);
  1052. } else {
  1053. $('.khMeterErrorPer').html('快' + khError);
  1054. }
  1055. }
  1056. //贸易表误差
  1057. var myError = ((salesWater - salesWaterSection) / salesWater * 100).toFixed(2);
  1058. $('#myMeterError').html((salesWater - salesWaterSection).toFixed(2));
  1059. $('#myMeterErrorPer').html(myError);
  1060. $('.RuKou').html(waterSupply);//入口流量
  1061. $('.ChuKou').html(salesWater);//出口流量
  1062. $('.ChanXCh').html(waterSupply - salesWater);//产销差水量
  1063. $('.ChanXChL').html(nrwFlowPer.toFixed(1));//产销差率
  1064. $('.GuanWLS').html(leakFlow);//管网漏水量
  1065. $('.QiJianGuanWLS').html(leakFlowTotal.toFixed(2));//期间管网漏水量
  1066. $('.GuanWLSL').html((leakFlowTotal / waterSupply * 100).toFixed(2));//管网漏水率
  1067. $('.BiaoGLSS').html(waterSupply - waterSupplySection);//表观漏水量
  1068. $('.BiaoGLSL').html(khError);//表观漏失率
  1069. $('.YueLSL').html((leakFlow * 24 * 30.5).toFixed(2));
  1070. /****添加 表误差*** 2018-01-13** START**/
  1071. var checkRemoteError = khError;//考核表误差
  1072. var tradeRemoteError = myError;//贸易表误差
  1073. var statementStr = "%,未超出国家标准±2%。";
  1074. var nonStatementStr = "%,超出国家标准±2%,须进行对水表周期检定或校验。";
  1075. if (checkRemoteError >= -2 && checkRemoteError <= 2) {
  1076. $('.CheckRE').html(checkRemoteError + statementStr);
  1077. } else {
  1078. $('.CheckRE').html(checkRemoteError + nonStatementStr);
  1079. }
  1080. if (tradeRemoteError >= -2 && tradeRemoteError <= 2) {
  1081. $('.TradeRE').html(tradeRemoteError + statementStr);
  1082. } else {
  1083. $('.TradeRE').html(tradeRemoteError + nonStatementStr);
  1084. }
  1085. /****添加 表误差*** 2018-01-13** END**/
  1086. //(leakFlow * 24 * 30.5)
  1087. $('.PerMonthLoss').html((leakFlow * 24 * 30.5 * 4.73).toFixed(2));
  1088. $('.BiaoGuanLoss').html((waterSupply - waterSupplySection).toFixed(2));
  1089. //
  1090. $('.BiaoGuanLossFee').html(((waterSupply - waterSupplySection) * 30.5 * 4.56).toFixed(2));
  1091. $('.TotalLossFee').html(((leakFlow * 24 * 30.5 * 2.63) + ((waterSupply - waterSupplySection) * 30.5 * 4.56)).toFixed(2));
  1092. //TotalLossFee
  1093. }
  1094. }
  1095. $('.lastSection').html(lastStart + "~" + lastEnd + " " + lastIntervalDays);
  1096. $('.LastRuKou').html(lastWaterSupply);
  1097. $('.LastChuKou').html(lastSalesWater);
  1098. $('.LastRiLaiShui').html((lastWaterSupply / lastIntervalDays).toFixed(2));
  1099. //LastChanXCh
  1100. if (lastWaterSupply == "--" || lastSalesWater == "--") {
  1101. $('.LastChanXCh').html("--");
  1102. $('.LastChanXChL').html("--");
  1103. } else {
  1104. if (lastSalesWater == 0) {
  1105. $('.LastChanXCh').html("--");
  1106. $('.LastChanXChL').html("--");
  1107. } else {
  1108. var lastchanxch = (lastWaterSupply - lastSalesWater).toFixed(0);
  1109. var lastchanxchl = "--";
  1110. if (lastWaterSupply != 0) {
  1111. lastchanxchl = ((lastchanxch / lastWaterSupply) * 100).toFixed(2);
  1112. }
  1113. $('.LastChanXCh').html(lastchanxch);
  1114. $('.LastChanXChL').html(lastchanxchl);
  1115. }
  1116. }
  1117. if (maoYikaoHe == '1') {//显示考核表
  1118. $('#dmaReport').css('display', 'block');
  1119. $('#maoyReport').css('display', 'none');
  1120. } else {//显示贸易表的菜单
  1121. $('#dmaReport').css('display', 'none');
  1122. $('#maoyReport').css('display', 'block');
  1123. }
  1124. }