tongji.jsp 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@include file="/context/mytags.jsp"%>
  4. <html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <meta name="Generator" content="EditPlus®">
  8. <meta name="Author" content="">
  9. <meta name="Keywords" content="">
  10. <meta name="Description" content="">
  11. <title>群众艺术馆设备监测</title>
  12. <style type="text/css">
  13. #demo {
  14. overflow: hidden;
  15. border: 0px dashed #CCC;
  16. width: 100%;
  17. height: 200px;
  18. }
  19. #demo img {
  20. border: 0px solid #F2F2F2;
  21. }
  22. #indemo {
  23. height: 300%;
  24. }
  25. #yibiao1 {
  26. width: 100%;
  27. height: 230px;
  28. }
  29. </style>
  30. <link rel="stylesheet" href="plug-in/dataview/css/tongji.css">
  31. <link rel="stylesheet" href="plug-in/dataview/css/progresscircle.css">
  32. <script type="text/javascript"
  33. src="plug-in/dataview/jquery-1.8.1.min.js"></script>
  34. <script type="text/javascript" src="plug-in/dataview/echarts4.min.js"></script>
  35. <script type="text/javascript" src="plug-in/dataview/tongji.js"></script>
  36. <script type="text/javascript" src="plug-in/dataview/infographic.js"></script>
  37. <script type="text/javascript" src="plug-in/dataview/progresscircle.js"></script>
  38. <script type="text/javascript">
  39. <!--
  40. $(window).resize(function ()// 绑定到窗口的这个事件中
  41. {
  42. var whdef = 100/916;// 表示1920的设计图,使用100PX的默认值
  43. var wH = window.innerHeight;// 当前窗口的高度
  44. var wW = window.innerWidth;// 当前窗口的宽度
  45. // var rem = wW * whdef;// 以默认比例值乘以当前窗口宽度,得到该宽度下的相应FONT-SIZE值
  46. var rem = wH * whdef;// 以默认比例值乘以当前窗口宽度,得到该宽度下的相应FONT-SIZE值
  47. $('html').css('font-size', rem + "px");
  48. myChart1.resize();
  49. myChart2.resize();
  50. myChart3.resize();
  51. // yibiao1.resize();
  52. myChart4.resize();
  53. });
  54. //-->
  55. </script>
  56. </head>
  57. <body>
  58. <div class="container">
  59. <header>
  60. <div class="herder_bg"></div>
  61. </header>
  62. <article>
  63. <div class="wrap">
  64. <div class="wrap-left">
  65. <div class="left-top sun-div">
  66. <div class="sun-title">
  67. <span class="">实时功率</span>
  68. </div>
  69. <div class="left-top-ec">
  70. <!--<span>当天实时</span> <span>全局工作统计</span>-->
  71. <!--统计图一-->
  72. <div id="ec1"></div>
  73. <!--统计图二-->
  74. <div id="ec2"></div>
  75. </div>
  76. </div>
  77. <div class="left-btm sun-div">
  78. <div class="sun-title">
  79. <span class="">设备运行日历</span>
  80. </div>
  81. <!-- <table class="ri-table">
  82. <tr ><td style="width: 40%;"><span style="color:#fda400;position: relative;">设备</span></td><td style="width: 30%;"><span style="color:#fda400">位置</span></td><td style="width: 30%;"><span style="color:#fda400">运行状态</span></td></tr>
  83. <tr><td>集水井1</td><td>停车场东侧</td><td>正常</td></tr>
  84. <tr><td>集水井2</td><td>停车场东侧</td><td>正常</td></tr>
  85. <tr><td>集水井3</td><td>停车场东侧</td><td>正常</td></tr>
  86. <tr><td>集水井4</td><td>停车场东侧</td><td>正常</td></tr>
  87. <tr><td>集水井5</td><td>停车场东侧</td><td style="color:red">超出上限</td></tr>
  88. <tr><td>集水井6</td><td>停车场东侧</td><td>正常</td></tr>
  89. <tr><td>集水井7</td><td>停车场东侧</td><td>正常</td></tr>
  90. </table>-->
  91. <div id="ecRiLi"></div>
  92. </div>
  93. </div>
  94. <div class="wrap-right">
  95. <div class="right-top sun-div">
  96. <div class="sun-title">
  97. <span class="">能耗统计</span>
  98. </div>
  99. <div id="data-list">
  100. <table style="width: 100%">
  101. <tr style="height: 0.5rem">
  102. <td style="text-align: center; width: 33%; font-size: 0.15rem">今日能耗</td>
  103. <td style="text-align: center; width: 33%; font-size: 0.15rem">月度能耗</td>
  104. <td style="text-align: center; width: 33%; font-size: 0.15rem">季度能耗</td>
  105. </tr>
  106. <tr>
  107. <td style="text-align: center"><div id="rinenghao"
  108. class="circlechart" data-percentage="100">0</div></td>
  109. <td style="text-align: center">
  110. <div id="yuenenghao" class="circlechart" data-percentage="100">0</div>
  111. </td>
  112. <td style="text-align: center">
  113. <div id="jinenghao" class="circlechart" data-percentage="100">0</div>
  114. </td>
  115. </tr>
  116. </table>
  117. </div>
  118. <div id="ec3"></div>
  119. </div>
  120. <div class="right-btm">
  121. <div class="r-btm-left">
  122. <div class="sun-title">
  123. <span class="">报警统计</span>
  124. </div>
  125. <!--<div class="notice">
  126. <ul>
  127. <li><b class="litext" title="集水井5水位超出上限">集水井5水位 57cm, 超出上限</b><span class="r">04-17 17:52</span></li>
  128. <li><b class="litext" title="关于XX申请筹建幼儿园">集水井4水位 67cm, 超出上限</b><span class="r">04-17 17:56</span></li>
  129. <li><b class="litext" title="关于XX申请筹建幼儿园">集水井5水位 57cm, 超出上限</b><span class="r">04-17 17:23</span></li>
  130. <li><b class="litext" title="关于XX申请筹建幼儿园">集水井5水位 57cm, 超出上限</b><span class="r">04-17 17:23</span></li>
  131. </ul>
  132. </div>-->
  133. <div id='ec4'></div>
  134. </div>
  135. <div class="r-btm-righ">
  136. <div class="sun-title">
  137. <span class="">传感器实时数据</span>
  138. </div><%--
  139. <marquee id="scrollul"direction="up" behavior="scroll" scrollamount="12" scrolldelay="0" loop="-1" width="100%" height="80%"
  140. hspace="10" vspace="10">
  141. </marquee>
  142. --%>
  143. <div id="demo">
  144. <div id="indemo">
  145. <div id="demo1">
  146. <ul id="scrollul">
  147. <%--
  148. <li><b class="litextsmall" title="集水井5水位超出上限">04-17
  149. 17:52:00 : 1号消防泵压力采集值 [1000] [正常]</b></li>
  150. <li><b style="color: red" class="litextsmall"
  151. title="关于XX申请筹建幼儿园">04-17 17:26:09 : 4号集水井水位采集值 [67cm]
  152. [超出上限]</b></li>
  153. <li><b style="color: red" class="litextsmall"
  154. title="关于XX申请筹建幼儿园">04-17 17:26:09 : 5号集水井水位采集值 [57cm]
  155. [超出上限]</b></li>
  156. <li><b class="litextsmall" title="关于XX申请筹建幼儿园">04-17
  157. 17:26:09 : 1号电梯电压采集值 [381V] [正常]</b></li>
  158. <li><b class="litextsmall" title="集水井5水位超出上限">04-17
  159. 17:26:09 : 高压间环境温度采集值 [35℃] [正常]</b></li>
  160. <li><b class="litextsmall" title="关于XX申请筹建幼儿园">04-17
  161. 17:26:09 : 主变压箱温度采值 [44℃] [正常]</b></li>
  162. <li><b class="litextsmall" title="关于XX申请筹建幼儿园">04-17
  163. 17:26:09 : 备变压箱温度采集值 [33℃] [正常]</b></li>
  164. --%>
  165. </ul>
  166. </div>
  167. <div id="demo2"></div>
  168. </div>
  169. </div>
  170. </div>
  171. </div>
  172. </div>
  173. </div>
  174. </article>
  175. </div>
  176. <script type="text/javascript">
  177. var myChart1 = echarts.init(document.getElementById('ec1'));
  178. var myChart2 = echarts.init(document.getElementById('ec2'));
  179. var myChart3 = echarts.init(document.getElementById('ec3'));
  180. var myChart4 = echarts.init(document.getElementById('ec4'));
  181. var myChartRiLi = echarts.init(document.getElementById('ecRiLi'),'infographic');
  182. var scrollul = document.getElementById("scrollul");
  183. function refreshScrollul(){
  184. $.ajax({
  185. url:"dataviewController.do?getLiveDataText",
  186. type:"post",
  187. dataType:"json",
  188. async:false,
  189. success:function(result){
  190. if(result!=null){
  191. var d=result;
  192. if(false == d.success){
  193. layer.msg(d.msg);
  194. return;
  195. }
  196. document.getElementById("scrollul").innerHTML = "";
  197. //alert(d);
  198.    for(var key in d.attributes){
  199. var currDate = new Date();
  200. var currMonth = echarts.format.formatTime('yy-MM-dd hh:mm:ss:', currDate);
  201. var node=document.createTextNode(currMonth+d.attributes[key]);
  202. var li=document.createElement("li");
  203. if(d.attributes[key].indexOf("离线") > -1){
  204. li.setAttribute("class", "litextsmallOffline");
  205. }else if(d.attributes[key].indexOf("低于下限")>-1 || d.attributes[key].indexOf("超出上限")>-1){
  206. li.setAttribute("class", "litextsmallWarning");
  207. }
  208. else{
  209. li.setAttribute("class", "litextsmall");
  210. }
  211. li.appendChild(node);
  212. scrollul.appendChild(li);
  213.   }
  214. Marquee();
  215. // alert(scrollul.innerHTML);
  216. }
  217. }
  218. });
  219. }
  220. // var yibiao1 = echarts.init(document.getElementById('yibiao1'));
  221. //
  222. // var option = {
  223. // series : [{
  224. // name : '警告信息',
  225. // type : 'gauge',
  226. // detail : {formatter:'{value}条警告'},
  227. // axisLine : {lineStyle : {width:20}},
  228. // splitLine : {length :20},
  229. // date : [{value:2,name:''}]
  230. // }]
  231. // }
  232. // yibiao1.setOption(option);
  233. //var myChart4 = echarts.init(document.getElementById('ec4'));
  234. /*
  235. * 参数说明
  236. * obj : 动画的节点,本例中是ul
  237. * top : 动画的高度,本例中是-35px;注意向上滚动是负数
  238. * time : 动画的速度,即完成动画所用时间,本例中是500毫秒,即marginTop从0到-35px耗时500毫秒
  239. * function : 回调函数,每次动画完成,marginTop归零,并把此时第一条信息添加到列表最后;
  240. *
  241. */
  242. function noticeUp(obj,top,time) {
  243. $(obj).animate({
  244. marginTop: top
  245. }, time, function () {
  246. $(this).css({marginTop:"0"}).find(":first").appendTo(this);
  247. })
  248. }
  249. function getVirtulData() {
  250. var currDate = new Date();
  251. var currMonth = echarts.format.formatTime('yyyy-MM', currDate);
  252. var date = +echarts.number.parseDate(currMonth+"-01");
  253. var end = +echarts.number.parseDate(new Date());
  254. var dayTime = 3600 * 24 * 1000;
  255. var data = [];
  256. for (var time = date; time < end; time += dayTime) {
  257. data.push([
  258. echarts.format.formatTime('yyyy-MM-dd', time),
  259. Math.floor(Math.random() * 100)
  260. ]);
  261. }
  262. return data;
  263. }
  264. function getPieSeriesUpdate(scatterData, chart) {
  265. var currDate = new Date();
  266. var currMonth = echarts.format.formatTime('yyyy-MM', currDate);
  267. var date = +echarts.number.parseDate(currMonth+"-01");
  268. var ajaxdata;
  269. $.ajax({
  270. url:"dataviewController.do?getRiLi&startDate="+echarts.format.formatTime('yyyy-MM-dd', date)+"&endDate="+echarts.format.formatTime('yyyy-MM-dd', currDate),
  271. type:"post",
  272. dataType: 'json',
  273. async:false,
  274. success:function(result){
  275. ajaxdata = result;
  276. }
  277. }
  278. );
  279. return echarts.util.map(scatterData, function (item, index) {
  280. var obj = ajaxdata.attributes[item[0]];
  281. var warning = 0;
  282. var normal = 0;
  283. var offline = 0;
  284. if(obj && typeof obj === "object"){
  285. warning = obj.warningCount;
  286. normal = obj.normalCount;
  287. offline = obj.offlineCount;
  288. }
  289. var center = chart.convertToPixel('calendar', item);
  290. return {
  291. id: index + 'pie',
  292. type: 'pie',
  293. center: center,
  294. label: {
  295. normal: {
  296. formatter: '{c}',
  297. position: 'inside'
  298. }
  299. },
  300. radius: 25 ,
  301. data: [ {name: '报警', value: warning},
  302. {name: '正常', value:normal},
  303. {name: '设备离线', value: offline}
  304. ]
  305. };
  306. });
  307. }
  308. function loadOptionRiLi(){
  309. var app = {};
  310. option = null;
  311. var cellSize = [100, 90];
  312. var pieRadius = 30;
  313. var scatterData = getVirtulData();
  314. if(myChartRiLi){
  315. myChartRiLi.clear();
  316. }
  317. option = {
  318. tooltip : {},
  319. legend: {
  320. data: [ {
  321. name: '正常',
  322. // 设置文本为红色
  323. textStyle: {
  324. color: 'white'
  325. }
  326. },{
  327. name: '报警',
  328. // 设置文本为红色
  329. textStyle: {
  330. color: 'white'
  331. }
  332. },{
  333. name: '设备离线',
  334. // 设置文本为红色
  335. textStyle: {
  336. color: 'white'
  337. }
  338. }],
  339. top: 1,
  340. color:'red'
  341. },
  342. calendar: {
  343. top: 55,
  344. left: 'center',
  345. height:'auto',
  346. orient: 'vertical',
  347. cellSize: cellSize,
  348. splitLine: {
  349. show: true,
  350. lineStyle: {
  351. color: 'rgb(0,136,212)',
  352. width: 1,
  353. type: 'solid'
  354. }
  355. },
  356. yearLabel: {
  357. show: false,
  358. textStyle: {
  359. fontSize: 30
  360. }
  361. },
  362. dayLabel: {
  363. margin: 17,
  364. firstDay: 1,
  365. nameMap: ['日', '一', '二', '三', '四', '五', '六'],
  366. color:'white',
  367. fontSize:11
  368. },
  369. monthLabel: {
  370. show: false,
  371. },
  372. itemStyle: {
  373. normal: {
  374. color: 'rgba(255,255,255,0)',
  375. borderWidth: 1,
  376. borderColor: 'rgb(0,136,212)'
  377. }
  378. },
  379. range: [echarts.format.formatTime('yyyy-MM', new Date())]
  380. },
  381. series: [{
  382. id: 'label',
  383. type: 'scatter',
  384. coordinateSystem: 'calendar',
  385. symbolSize: 1,
  386. label: {
  387. normal: {
  388. show: true,
  389. formatter: function (params) {
  390. return echarts.format.formatTime('dd', params.value[0]);
  391. },
  392. offset: [-cellSize[0] / 2 + 10, -cellSize[1] / 2 + 10],
  393. textStyle: {
  394. color: 'white',
  395. fontSize: 14
  396. },
  397. }
  398. },
  399. data: scatterData
  400. }]
  401. };
  402. if (!app.inNode) {
  403. var pieInitialized;
  404. setTimeout(function () {
  405. pieInitialized = true;
  406. myChartRiLi.setOption({
  407. series: getPieSeriesUpdate(scatterData, myChartRiLi)
  408. });
  409. }, 10);
  410. app.onresize = function () {
  411. if (pieInitialized) {
  412. myChartRiLi.setOption({
  413. series: getPieSeriesUpdate(scatterData, myChartRiLi)
  414. });
  415. }
  416. };
  417. };
  418. if (option && typeof option === "object") {
  419. myChartRiLi.setOption(option, true);
  420. }
  421. }
  422. function rinenghaoCallback(result){
  423. var d=$.parseJSON(result);
  424. var div1 = document.getElementById("rinenghao");
  425. var div2 = document.getElementById("yuenenghao");
  426. var div3 = document.getElementById("jinenghao");
  427. div1.innerHTML = d.attributes["rinenghao"];
  428. div2.innerHTML = d.attributes["yuenenghao"];
  429. div3.innerHTML = d.attributes["jinenghao"];
  430. $('.circlechart').circlechart();
  431. }
  432. function refreshNenghao(){
  433. $("#rinenghao").load("dataviewController.do?getRiNenghao","",rinenghaoCallback);
  434. }
  435. function getRiLiData(){
  436. var currDate = new Date();
  437. var currMonth = echarts.format.formatTime('yyyy-MM', currDate);
  438. var date = +echarts.number.parseDate(currMonth+"-01");
  439. var data = [];
  440. $.ajax({
  441. url:"dataviewController.do?getRiLi&startDate="+echarts.format.formatTime('yyyy-MM-dd', date)+"&endDate="+echarts.format.formatTime('yyyy-MM-dd', currDate),
  442. type:"post",
  443. dataType: 'json',
  444. async:false,
  445. success:function(result){
  446. data = riliCallback(result);
  447. }
  448. }
  449. );
  450. }
  451. function refreshGonglvPie(){
  452. $.ajax({
  453. url:"dataviewController.do?getGonglvPie",
  454. type:"post",
  455. dataType: 'json',
  456. async:false,
  457. success:function(result){
  458. //alert(result.title.text);
  459. if(result!=null){
  460. // alert(result.series[0].data[0]);
  461. var opt = myChart1.getOption();
  462. var value = [];
  463. var serisdata = result.series[0].data;
  464. $.each(serisdata, function(i,p){
  465. value[i] = {'name':p['name'], 'value':p['value']};
  466. });
  467. //alert(opt.title[0].text);
  468. opt.legend[0].data = result.legend.data;
  469. opt.title[0].text = result.title.text;
  470. opt.series[0].data = value;
  471. myChart1.hideLoading();
  472. myChart1.setOption(opt);
  473. }
  474. }
  475. }
  476. );
  477. }
  478. function refreshWarningSumBar(){
  479. $.ajax({
  480. url:"dataviewController.do?getWarningSumBar",
  481. type:"post",
  482. dataType: 'json',
  483. async:false,
  484. success:function(result){
  485. // alert(result.title.text);
  486. if(result!=null){
  487. //alert(result.yaxis[0].data);
  488. var opt = myChart4.getOption();
  489. var serisdata = result.series[0].data;
  490. opt.series[0].data = serisdata;
  491. opt.xAxis[0].data = result.xaxis[0].data;
  492. myChart4.hideLoading();
  493. myChart4.setOption(opt);
  494. }
  495. }
  496. }
  497. );
  498. }
  499. function refreshGonglvBar(){
  500. $.ajax({
  501. url:"dataviewController.do?getGonglvBar",
  502. type:"post",
  503. dataType: 'json',
  504. async:false,
  505. success:function(result){
  506. // alert(result.title.text);
  507. if(result!=null){
  508. //alert(result.yaxis[0].data);
  509. var opt = myChart2.getOption();
  510. var serisdata = result.series[0].data;
  511. opt.series[0].data = serisdata;
  512. opt.yAxis[0].data = result.yaxis[0].data;
  513. myChart2.hideLoading();
  514. myChart2.setOption(opt);
  515. }
  516. }
  517. }
  518. );
  519. }
  520. function refreshNenghaoLine(){
  521. $.ajax({
  522. url:"dataviewController.do?getNenghaoLine",
  523. type:"post",
  524. dataType:"json",
  525. async:false,
  526. success:function(result){
  527. if(result!=null){
  528. var opt = myChart3.getOption();
  529. var serisdata = result.series[0].data;
  530. opt.series[0].data = serisdata;
  531. opt.xAxis[0].data = result.xaxis[0].data;
  532. myChart3.setOption(opt);
  533. }
  534. }
  535. });
  536. }
  537. $(function () {
  538. // 调用 公告滚动函数
  539. setInterval("noticeUp('.notice ul','-35px',500)", 7000);
  540. refreshNenghao();
  541. setInterval(refreshNenghao, 300000);
  542. refreshGonglvPie();
  543. setInterval(refreshGonglvPie, 300020);
  544. refreshGonglvBar();
  545. setInterval(refreshGonglvBar, 300040);
  546. refreshNenghaoLine();
  547. setInterval(refreshNenghaoLine, 300080);
  548. refreshWarningSumBar();
  549. setInterval(refreshWarningSumBar, 300180);
  550. //refreshScrollul();
  551. setInterval(refreshScrollul, 5000);
  552. loadOptionRiLi();
  553. setInterval(loadOptionRiLi, 300180);
  554. $('.circlechart').circlechart();
  555. var speed=10;//控制速度
  556. //定时器
  557. var MyMar=setInterval(Marquee,speed);//
  558. //鼠标滑过停止滚动
  559. //tab.onmouseover=function() {clearInterval(MyMar)};
  560. //鼠标滑出继续滚动
  561. //tab.onmouseout=function() {MyMar=setInterval(Marquee,speed)};
  562. });
  563. function Marquee(){
  564. var tab=document.getElementById("demo");
  565. var tab1=document.getElementById("demo1");
  566. var tab2=document.getElementById("demo2");
  567. tab2.innerHTML=tab1.innerHTML;
  568. //alert("tab2.offsetHeight:"+tab2.offsetHeight+"tab.scrollTop:"+tab.scrollTop+"tab1.offsetHeight:"+tab1.offsetHeight)
  569. if(tab1.offsetHeight-tab.scrollTop<=0)
  570. tab.scrollTop-=tab1.offsetHeight;
  571. else{
  572. tab.scrollTop++;
  573. }
  574. }
  575. </script>
  576. </body>
  577. </html>