main.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. var protocol = 'https';
  2. var host = 'www.qh-cloud.com';
  3. var apiKey = "913cd67c-e952-41e0-a74a-362624b2aa8f";
  4. var retryTimes = 2;
  5. var deviceIds = [1906041109,2010210017,2010210009,2010210002];
  6. var weatherURL = "https://free-api.heweather.net/s6/weather";
  7. var weatherKEY = "63683c81316f451bbd1d9ef64202e7ea";
  8. var weatherLocation = "";
  9. function applyData(data) {
  10. var element = $("#m_" + data.monitoringId);
  11. if (element.length == 0) {
  12. element = $("#" + data.monitoringId);
  13. }
  14. if (element.length == 0) {
  15. return;
  16. }
  17. var format = element.data("format");
  18. var kvMap = element.data("map") || { "0": "off", "1": "on" };
  19. if (format === "text") {
  20. if (data.dataType == "3") {
  21. //枚举
  22. try {
  23. var map = JSON.parse(data.dataMap);
  24. if (map[data.value] != "") {
  25. element.text(map[data.value]);
  26. } else {
  27. element.text(data.value);
  28. }
  29. } catch (err) {
  30. element.text(data.value);
  31. }
  32. } else {
  33. element.text(data.value);
  34. }
  35. } else if (format === "class") {
  36. for (var key in kvMap) {
  37. if (data.value != key) {
  38. element.removeClass(kvMap[key]);
  39. }
  40. }
  41. var className = kvMap[data.value];
  42. if (!element.hasClass(className)) {
  43. element.addClass(className);
  44. }
  45. } else if (format === "image") {
  46. for (var key in kvMap) {
  47. if (data.value == key) {
  48. element.attr("src", kvMap[key]);
  49. }
  50. }
  51. } else if (format === "text_today"){
  52. var today = new Date(new Date().pattern("yyyy/MM/dd 00:00:00"));
  53. var dataTime = new Date(data.dataTime);
  54. if (today.getTime() > dataTime.getTime()) {
  55. element.text('-');
  56. return;
  57. }
  58. if ($('#todayStart'+data.monitoringId).val() != '') {
  59. var value = data.value - $('#todayStart' + data.monitoringId).val();
  60. element.text(value.toFixed(2) + data.unit);
  61. }else {
  62. loadTodayStratData(data.monitoringId, true, data.unit);
  63. }
  64. }
  65. // 计算厕位数量, on 使用中,off 未使用
  66. var maleUse = $(".male.on").size();
  67. var maleNotUse = $(".male.off").size();
  68. var femaleUse = $(".female.on").size();
  69. var femaleNotUse = $(".female.off").size();
  70. $("#txt_allUse").text(maleUse + femaleUse + $(".other.on").size());
  71. $("#txt_allNotUse").text(maleNotUse + femaleNotUse + $(".other.off").size());
  72. $("#txt_maleUse").text(maleUse);
  73. $("#txt_maleNotUse").text(maleNotUse);
  74. $("#txt_femaleUse").text(femaleUse);
  75. $("#txt_femaleNotUse").text(femaleNotUse);
  76. }
  77. SUBSCRIBER_DEFAULTS = {
  78. WebSocketUrl: (protocol === "https" ? "wss" : "ws") + "://" + host + "/websocket",
  79. SockJSUrl: protocol + "://" + host + "/websocket/sockjs"
  80. };
  81. var subscribers = {};
  82. function subscribeMonitoringData(deviceId) {
  83. unSubscribeMonitoringData(deviceId);
  84. var subscriber = new Subscriber("/topic/transport/monitoringdata/" + deviceId, function (monitoringData) {
  85. applyData(monitoringData);
  86. });
  87. subscriber.subscribe();
  88. subscribers[deviceId] = subscriber;
  89. }
  90. function unSubscribeMonitoringData(deviceId) {
  91. if (subscribers[deviceId]) {
  92. subscribers[deviceId].unsubscribe();
  93. delete subscribers[deviceId];
  94. }
  95. }
  96. function loadMonitoringData(deviceId) {
  97. var times = retryTimes;
  98. var loop = function () {
  99. $.ajax({
  100. url: protocol + "://" + host + "/api/link/device/" + deviceId + "/monitoring",
  101. data: {
  102. key: apiKey,
  103. },
  104. type: "get",
  105. dataType: "json",
  106. success: function (data) {
  107. if (typeof data.code != "undefined" && data.code != 0) {
  108. } else {
  109. $.each(data.monitorings, function (i, n) {
  110. applyData({
  111. monitoringId: n.monitoringId,
  112. value: n.dataValue,
  113. unit: n.unit,
  114. dataMap: n.dataMap || {},
  115. dataTime: n.dataTime
  116. });
  117. });
  118. }
  119. },
  120. error: function () {
  121. if (times-- > 0) {
  122. loop();
  123. }
  124. }
  125. });
  126. };
  127. loop();
  128. }
  129. function loadDevice(deviceId) {
  130. loadMonitoringData(deviceId);
  131. subscribeMonitoringData(deviceId);
  132. }
  133. Date.prototype.pattern = function (fmt) {
  134. var o = {
  135. "M+": this.getMonth() + 1, //月份
  136. "d+": this.getDate(), //日
  137. "h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, //小时
  138. "H+": this.getHours(), //小时
  139. "m+": this.getMinutes(), //分
  140. "s+": this.getSeconds(), //秒
  141. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  142. S: this.getMilliseconds() //毫秒
  143. };
  144. var week = {
  145. 0: "日",
  146. 1: "一",
  147. 2: "二",
  148. 3: "三",
  149. 4: "四",
  150. 5: "五",
  151. 6: "六"
  152. };
  153. if (/(y+)/.test(fmt)) {
  154. fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  155. }
  156. if (/(E+)/.test(fmt)) {
  157. fmt = fmt.replace(
  158. RegExp.$1,
  159. (RegExp.$1.length > 1 ? (RegExp.$1.length > 2 ? "星期" : "周") : "") + week[this.getDay() + ""]
  160. );
  161. }
  162. for (var k in o) {
  163. if (new RegExp("(" + k + ")").test(fmt)) {
  164. fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
  165. }
  166. }
  167. return fmt;
  168. };
  169. function printNow() {
  170. var date = new Date();
  171. $("#txt_time").html(date.pattern("yyyy/MM/dd HH:mm"));
  172. }
  173. /**
  174. * 根据monitoringId获取测点今日起始的数据存于页面元素中
  175. * @param monitoringId
  176. */
  177. function loadTodayStratData(monitoringId, loadnow, unit){
  178. var times = retryTimes;
  179. var loop = function () {
  180. $.ajax({
  181. url: protocol + "://" + host + "/api/link/monitoring/" + monitoringId + "/today",
  182. data: {
  183. key: apiKey,
  184. },
  185. type: "get",
  186. dataType: "json",
  187. success: function (data) {
  188. if (typeof data.code != "undefined" && data.code != 0) {
  189. } else {
  190. if (data.datas.length > 0) {
  191. $('#todayStart' + monitoringId).val(data.datas[0].dataValue);
  192. if (loadnow != undefined && loadnow === true) {
  193. unit = unit === undefined?'':unit;
  194. var value = data.datas[data.datas.length-1].dataValue - data.datas[0].dataValue;
  195. var element = $('#m_'+monitoringId);
  196. if (element.length == 1) {
  197. $('#m_' + monitoringId).text(value.toFixed(2) + unit);
  198. }else {
  199. $('#' + monitoringId).text(value.toFixed(2) + unit);
  200. }
  201. }
  202. }
  203. }
  204. },
  205. error: function () {
  206. if (times-- > 0) {
  207. loop();
  208. }
  209. }
  210. });
  211. };
  212. loop();
  213. }
  214. /**
  215. * 在页面上生成用于存储今日起始数据的input元素,并初始化数据
  216. */
  217. function loadToday(){
  218. var elements = $("*");
  219. if (elements.length == 0) {
  220. return;
  221. }
  222. for (var i = 0; i < elements.length; i++) {
  223. var element = elements[i];
  224. var elementId = element.id;
  225. var monitoringId = element.id;
  226. if (monitoringId.startsWith("m_")){
  227. monitoringId = monitoringId.substr(2);
  228. }
  229. var format = $('#'+elementId).data("format");
  230. if (format === "text_today") {
  231. $('#'+elementId).after("<input type='hidden' id='todayStart" + monitoringId + "'>");
  232. loadTodayStratData(monitoringId);
  233. }
  234. }
  235. }
  236. /**
  237. * 天数切换时刷新今日的起始数据
  238. */
  239. function loadTodayStartAll(){
  240. var elements = $("*");
  241. if (elements.length == 0) {
  242. return;
  243. }
  244. for (var i = 0; i < elements.length; i++) {
  245. var element = elements[i];
  246. var elementId = element.id;
  247. var monitoringId = element.id;
  248. if (monitoringId.startsWith("m_")){
  249. monitoringId = monitoringId.substr(2);
  250. }
  251. var format = $('#'+elementId).data("format");
  252. if (format === "text_today") {
  253. loadTodayStratData(monitoringId);
  254. }
  255. }
  256. }
  257. function isNotEmpty(var1){
  258. if(var1 != null && var1 != ""){
  259. return true;
  260. }
  261. return false;
  262. }
  263. function loadWeather() {
  264. if(isNotEmpty(weatherURL)&&isNotEmpty(weatherKEY)&&isNotEmpty(weatherLocation)) {
  265. var weatherImg = {
  266. "100": "img/weather/qing.png",
  267. "403": "img/weather/baoxue.png",
  268. "310": "img/weather/baoyu.png",
  269. "311": "img/weather/dabaoyu.png",
  270. "402": "img/weather/daxue.png",
  271. "307": "img/weather/dayu.png",
  272. "101": "img/weather/duoyun.png",
  273. "302": "img/weather/leizhenyu.png",
  274. "103": "img/weather/qingzhuanduoyun.png",
  275. "312": "img/weather/tedabaoyu.png",
  276. "400": "img/weather/xiaoxue.png",
  277. "305": "img/weather/xiaoyu.png",
  278. "104": "img/weather/yin.png",
  279. "404": "img/weather/yujiaxue.png",
  280. "350": "img/weather/zhenyu.png",
  281. "401": "img/weather/zhongxue.png",
  282. "306": "img/weather/zhongyu.png"
  283. };
  284. $.ajax({
  285. url: "https://free-api.heweather.net/s6/weather",
  286. data: {
  287. key: "63683c81316f451bbd1d9ef64202e7ea",
  288. location: weatherLocation
  289. },
  290. type: "get",
  291. dataType: "json",
  292. success: function (data) {
  293. if (typeof data.HeWeather6[0].status != "undefined" && data.HeWeather6[0].status != "ok") {
  294. } else {
  295. var todayDate = new Date();
  296. var tomorrowDate = new Date();
  297. tomorrowDate.setTime(todayDate.getTime() + 24 * 60 * 60 * 1000);
  298. var afterTomorrowDate = new Date();
  299. afterTomorrowDate.setTime(tomorrowDate.getTime() + 24 * 60 * 60 * 1000);
  300. var today = todayDate.pattern("yyyy-MM-dd");
  301. var tomorrow = tomorrowDate.pattern("yyyy-MM-dd");
  302. var afterTomorrow = afterTomorrowDate.pattern("yyyy-MM-dd");
  303. $.each(data.HeWeather6[0].daily_forecast, function (i, n) {
  304. var weather = n.tmp_min + "℃" + "-" + n.tmp_max + "℃";
  305. var imgPath = weatherImg[n.cond_code_d];
  306. if (n.date == today) {
  307. $("#today").text(weather);
  308. $("#img_today_weather").attr("src", imgPath);
  309. } else if (n.date == tomorrow) {
  310. $("#tomorrow").text(weather);
  311. $("#img_tomorrow_weather").attr("src", imgPath);
  312. } else if (n.date == afterTomorrow) {
  313. $("#after_tomorrow").text(weather);
  314. $("#img_after_tomorrow_weather").attr("src", imgPath);
  315. }
  316. });
  317. }
  318. }
  319. });
  320. }
  321. }
  322. function initToday(){
  323. loadToday();
  324. window.setInterval("loadTodayStartAll()", 1000*60*10);
  325. }
  326. function initWeather(){
  327. loadWeather();
  328. window.setInterval("loadWeather()", 1000*60*60*6);
  329. }
  330. $(function () {
  331. initToday();
  332. initWeather();
  333. for (var i = 0; i < deviceIds.length; i++){
  334. loadDevice(deviceIds[i]);
  335. }
  336. window.setInterval("printNow()", 1000);
  337. });