Index.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519
  1. class Queue {
  2. constructor() {
  3. this.count = 0;
  4. this.lowestCount = 0;
  5. this.items = {};
  6. }
  7. enqueue(ele) {
  8. this.items[this.count] = ele;
  9. this.count++;
  10. }
  11. dequeue() {
  12. if (this.isEmpty()) {
  13. return undefined;
  14. }
  15. const result = this.items[this.lowestCount];
  16. delete this.items[this.lowestCount];
  17. this.lowestCount++;
  18. return result;
  19. }
  20. peek() {
  21. if (this.isEmpty()) {
  22. return undefined;
  23. }
  24. return this.items[this.lowestCount];
  25. }
  26. isEmpty() {
  27. return this.count - this.lowestCount === 0;
  28. }
  29. size() {
  30. return this.count - this.lowestCount;
  31. }
  32. clear() {
  33. this.count = 0;
  34. this.lowestCount = 0;
  35. this.items = {};
  36. }
  37. toString() {
  38. if (this.isEmpty()) {
  39. return "";
  40. }
  41. let objString = `${this.items[this.lowestCount]}`;
  42. for (let i = this.lowestCount + 1; i < this.count; i++) {
  43. objString = `${objString}, ${this.items[i]}`;
  44. }
  45. return objString;
  46. }
  47. }
  48. Date.prototype.Format = function (fmt) { // author: meizz
  49. var o = {
  50. "M+": this.getMonth() + 1, // 月份
  51. "d+": this.getDate(), // 日
  52. "h+": this.getHours(), // 小时
  53. "m+": this.getMinutes(), // 分
  54. "s+": this.getSeconds(), // 秒
  55. "q+": Math.floor((this.getMonth() + 3) / 3), // 季度
  56. "S": this.getMilliseconds() // 毫秒
  57. };
  58. if (/(y+)/.test(fmt))
  59. fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  60. for (var k in o)
  61. if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  62. return fmt;
  63. }
  64. const sleep = (time) => new Promise(resolve => setTimeout(resolve, time));
  65. var refreshGirdData; // 更新数据
  66. var selectedRow;
  67. var rangeoninput;
  68. var israngedrag = false;
  69. var clearPlayIntervalStart;
  70. var clearGetDataInterval;
  71. var clearGetDequeueDataInterval;
  72. var PlayStartframe;
  73. var time1;
  74. var time2;
  75. var Play = 1;
  76. var StartFrame;
  77. var StartFrameTicks;
  78. var Frame;
  79. var FrameTicks;
  80. var Starting = false;
  81. var Reading = false;
  82. var replayFlag = false;
  83. var Index = 0;
  84. var lastvalue = 0;
  85. var changed = false;
  86. var SliderTime;
  87. var SliderTimeTickts;
  88. var DataPack = {};
  89. const Datas = new Queue();
  90. var PlayIntervalStartEnd = false;
  91. var GetLastDatasEnd = false;
  92. var GetDataEnd = false;
  93. var FaultInfosTime;
  94. var bootstrap = function ($, learun) {
  95. "use strict";
  96. var page = {
  97. init: function () {
  98. //page.GetDeviceData();
  99. page.bind();
  100. page.Start();
  101. page.PlayRealTime();
  102. page.OnGui();
  103. page.SetFaultInfos();
  104. page.GetWarehouseData();
  105. },
  106. bind: function () {
  107. //var srmlist = $("[wcssrm = 'wcssrm']");
  108. // 新增 $('#lr_add')
  109. $(".left [srm]").on('click', function () {
  110. let name = $(this).attr('srm');
  111. learun.layerForm({
  112. id: 'form',
  113. btn: null,//['关闭'],
  114. title: '堆垛机',
  115. url: top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/DDJDetail?keyValue=' + name,
  116. width: 860,
  117. height: 745,
  118. callBack: function (id) {
  119. // return top[id].acceptClick(refreshGirdData);
  120. }
  121. });
  122. });
  123. //$(".left .station").on('click', function () {
  124. // let name = $(this).find('span').text();
  125. // learun.layerForm({
  126. // id: 'form',
  127. // btn: null,//['关闭'],
  128. // title: 'DB详情',
  129. // url: top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/StationDetail?keyValue=' + name,
  130. // width: 960,
  131. // height: 745,
  132. // callBack: function (id) {
  133. // // return top[id].acceptClick(refreshGirdData);
  134. // }
  135. // });
  136. //});
  137. $("#PlayerPlay").on('click', function () {
  138. Play = Play == 1 ? 0 : 1;
  139. if (Play == 1)
  140. $("#imgPlayerPlay").attr("src", "/Content/images/DeviceMonitor/PlayerPlay.png");
  141. else {
  142. $("#imgPlayerPlay").attr("src", "/Content/images/DeviceMonitor/PlayerPause.png");
  143. }
  144. });
  145. $("#PlayerRealTime").on('click', function () {
  146. page.PlayRealTime();
  147. });
  148. $('#slider').on('input propertychange', function () {
  149. changed = true;
  150. })
  151. $("#slider").on('change', function () {
  152. // alert(this.value);
  153. israngedrag = false;
  154. changed = true;
  155. SliderTimeTickts = this.value.replace('Date', '').replace('(', '').replace(')', '').replace(/\//g, '');
  156. page.PlayBack();
  157. //learun.httpAsyncGet(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetDatetime?timestamp=' + timeSpan, function (data) {
  158. // if (data.IsSucc) {
  159. // alert(data.data);
  160. // }
  161. // else {
  162. // let msg = data.info;
  163. // }
  164. // var sd = Datas.dequeue();
  165. //});
  166. //var ticks = Math.floor(timeSpan / 10000) - 62135596800000; // 将时间戳转换为Ticks
  167. //var date = new Date(ticks);//.toLocaleString('zh-CN'); // 将Ticks转换为DateTime格式
  168. //date.setHours(date.getHours() - 8);
  169. ////alert(date.Format("yyyy-MM-dd hh:mm:ss"))
  170. });
  171. setInterval(page.GetWarehouseData, 10000);
  172. //setInterval(page.SetFaultInfos, 4000);
  173. setTimeout(() => {
  174. let oneBottomLeft = document.getElementById('equipmentStatus');
  175. let mt_value = 0;
  176. let speed = 100;
  177. let height = oneBottomLeft.clientHeight;
  178. if (height > 285) {
  179. function settimer1() {
  180. if (mt_value >= height) {
  181. mt_value = 0;
  182. page.SetFaultInfos();
  183. } else {
  184. mt_value = mt_value + 1;
  185. }
  186. oneBottomLeft.style.marginTop = '-' + mt_value + 'px';
  187. }
  188. time1 = setInterval(settimer1, speed);
  189. }
  190. // setInterval(timer2,speed)
  191. }, 5000);
  192. },
  193. //加载
  194. GetDeviceData: function () {
  195. learun.httpAsyncPost(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetData', {}, function (data) {
  196. if (data.IsSucc) {
  197. Datas.enqueue(data.data);
  198. learun.SetDeviceMonitor.SetDeviceData(data.data);
  199. }
  200. else {
  201. //let msg = data.info;
  202. }
  203. //var sd = Datas.dequeue();
  204. });
  205. //return deferred.promise();
  206. },
  207. search: function (param) {
  208. },
  209. PlayRealTime: function () {
  210. Play = 1;
  211. Starting = true;
  212. Reading = false;
  213. page.GetLastDatas();// PlayStart(LastFrameTicks);
  214. },
  215. PlayBack: function () {
  216. Starting = false;
  217. Reading = false;
  218. page.PlayStart(SliderTimeTickts);
  219. },
  220. GetLastDatas: function () {
  221. DataPack = {};
  222. if (!GetLastDatasEnd) {
  223. GetLastDatasEnd = true;
  224. sleep(10).then(() => {
  225. if (PlayStartframe < StartFrameTicks)
  226. PlayStartframe = StartFrameTicks;
  227. else if (PlayStartframe > LastFrameTicks)
  228. PlayStartframe = LastFrameTicks;
  229. // lock(Datas)
  230. Datas.clear();
  231. replayFlag = Play == 1;
  232. //Index = 0;
  233. learun.httpAsyncGet(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetLastDatas', function (data) {
  234. if (data.IsSucc) {
  235. DataPack = data.data;
  236. learun.SetDeviceMonitor.SetDeviceData(data.data);
  237. Index = data.data.Index;
  238. Frame = data.data.Frame;
  239. FrameTicks = data.data.FrameTicks;
  240. //SRMStations
  241. //WCSAGVs
  242. //WCSSRMs
  243. //WCSStations
  244. GetLastDatasEnd = false;
  245. Starting = false;
  246. //clearGetDataInterval = setInterval(page.GetData, 500);
  247. console.log("PlayIntervalStart : " + Starting);
  248. }
  249. else {
  250. }
  251. });
  252. })
  253. }
  254. },
  255. PlayStart: function (frame) {
  256. DataPack = {};
  257. PlayStartframe = frame;
  258. //console.log("PlayStart : " + Reading);
  259. // !Reading 等待
  260. //if (!Reading) {
  261. // if (clearPlayIntervalStart)
  262. // clearInterval(clearPlayIntervalStart);
  263. // sleep(5000);
  264. //}
  265. //else {
  266. // page.PlayIntervalStart();
  267. // //clearPlayIntervalStart= setInterval(page.PlayIntervalStart,2000)
  268. //}
  269. if (!Reading) {
  270. //console.log("PlayIntervalStart : " + Reading );
  271. page.PlayIntervalStart();
  272. }
  273. },
  274. PlayIntervalStart: function () {
  275. if (!PlayIntervalStartEnd) {
  276. PlayIntervalStartEnd = true;
  277. sleep(10).then(() => {
  278. if (PlayStartframe < StartFrameTicks)
  279. PlayStartframe = StartFrameTicks;
  280. else if (PlayStartframe > LastFrameTicks)
  281. PlayStartframe = LastFrameTicks;
  282. // lock(Datas)
  283. Datas.clear();
  284. replayFlag = Play == 1;
  285. //Index = 0;
  286. learun.httpAsyncGet(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetStartDatas?timestamp=' + PlayStartframe + '&len=' + Len, function (data) {
  287. if (data.IsSucc) {
  288. DataPack = data.data;
  289. learun.SetDeviceMonitor.SetDeviceData(data.data);
  290. Index = data.data.Index;
  291. Frame = data.data.Frame;
  292. FrameTicks = data.data.FrameTicks;
  293. //SRMStations
  294. //WCSAGVs
  295. //WCSSRMs
  296. //WCSStations
  297. PlayIntervalStartEnd = false;
  298. Starting = false;
  299. //clearGetDataInterval = setInterval(page.GetData, 500);
  300. console.log("PlayIntervalStart : " + Starting);
  301. }
  302. else {
  303. }
  304. });
  305. })
  306. }
  307. },
  308. Start: function () {
  309. clearGetDataInterval = setInterval(page.GetData, 500);
  310. clearGetDequeueDataInterval = setInterval(page.GetDequeueData, 300);
  311. },
  312. GetDequeueData: function () {
  313. if (Play == 0) {
  314. return;
  315. }
  316. if (Datas.size() == 0) {
  317. return
  318. }
  319. else {
  320. var pack = Datas.dequeue();
  321. DataPack = pack;
  322. Frame = pack.Frame;
  323. FrameTicks = pack.FrameTicks;
  324. }
  325. },
  326. GetData: function () {
  327. if (!GetDataEnd) {
  328. console.log("GetData GetData : " + Starting);
  329. if (Starting) {
  330. Reading = false;
  331. // clearInterval(clearGetDataInterval);
  332. return;
  333. }
  334. else {
  335. Reading = true;
  336. if (Index <= 0) {
  337. return;
  338. }
  339. var qty = 0;
  340. qty = Datas.size();
  341. if (qty < 600 * Play + 1) {
  342. learun.httpAsyncGet(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetLastFrame', function (data) {
  343. GetDataEnd = true;
  344. if (data.IsSucc) {
  345. var Length = parseInt(data.data.Len);
  346. LastFrameTicks = data.data.FrameTicks;
  347. LastFrame = data.data.Frame;
  348. if (parseInt(Index) >= parseInt(Length))
  349. Index = Length - 1;
  350. var end = parseInt(Index) + 30;
  351. end = end < parseInt(Length) ? end : Length - 1;
  352. end = parseInt(end) > 0 ? end : 0;
  353. console.log("GetRangeData: " + Index + " end: " + end);
  354. learun.httpAsyncGet(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetRangeData?start=' + Index + '&end=' + end, function (data) {
  355. if (data.IsSucc) {
  356. for (var i = 0; i < parseInt(data.data.length); i++) {
  357. Datas.enqueue(data.data[i]);
  358. }
  359. Index = parseInt(Index) + parseInt(data.data.length);
  360. // console.log("Datas: "+ Datas.size() + " index: " + Index);
  361. }
  362. else {
  363. }
  364. GetDataEnd = false;
  365. });
  366. }
  367. else {
  368. }
  369. });
  370. }
  371. }
  372. }
  373. },
  374. OnGui: function () {
  375. // PlayButton.image.sprite = Play == 1 ? sPlay : sPause;
  376. //Slider.minValue = DataSystem.StartFrame.Ticks - MinTime.Ticks;
  377. //Slider.maxValue = DataSystem.LastFrame.Ticks - MinTime.Ticks;
  378. //SliderTime = DateTime.FromBinary((long)Slider.value + MinTime.Ticks);
  379. setInterval(page.SetOnGui, 300)
  380. },
  381. SetOnGui: function () {
  382. if (israngedrag)
  383. return;
  384. $('#slider').attr('min', StartFrameTicks);
  385. $('#slider').attr('max', LastFrameTicks);
  386. var timeSpan = $('#slider').val().replace('Date', '').replace('(', '').replace(')', '').replace(/\//g, '');
  387. SliderTimeTickts = timeSpan;
  388. var ticks = Math.floor(timeSpan / 10000) - 62135596800000; // 将时间戳转换为Ticks
  389. var date = new Date(ticks); // 将Ticks转换为DateTime格式
  390. date.setHours(date.getHours() - 8);
  391. $('#Frame').text(date.Format("yyyy-MM-dd hh:mm:ss"));
  392. learun.SetDeviceMonitor.SetDeviceData(DataPack);
  393. if (lastvalue != timeSpan && changed) {
  394. FrameTicks = timeSpan;
  395. Frame = date;
  396. changed = false;
  397. lastvalue = timeSpan;
  398. page.PlayBack();
  399. }
  400. else {
  401. $('#slider').val(FrameTicks);
  402. $('#Frame').text(Frame);
  403. }
  404. },
  405. GetWarehouseData: function () {
  406. learun.httpAsyncGet(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetWarehouseLocationInfo', function (data) {
  407. if (data.IsSucc) {
  408. $("#emptywarecellnum").text(data.data.EmptySpaces)
  409. $("#agvtasknum").text(data.data.TotalAGVs);
  410. $("#tasknum").text(data.data.TotalTasks);
  411. }
  412. });
  413. },
  414. SetFaultInfos: function () {
  415. if (DataPack != null && DataPack.FaultInfos && DataPack.FaultInfos.length > 0) {
  416. var equipmentStatus = $("#equipmentStatus");
  417. var htmls = '';
  418. for (var i = 0; i < DataPack.FaultInfos.length; i++) {
  419. htmls += ' <div class="InfoItem"> <span class="titleS">故障</span> '
  420. htmls += '<div class="InfoBlock"> <span>区域:</span> <label>合金库</label> </div> ';
  421. htmls += '<div class="InfoBlock"> <span>交互点:</span> <label>' + DataPack.FaultInfos[i].DeviceCode + '</label> </div> ';
  422. htmls += '<div class="InfoBlock"> <span>故障原因:</span> <label>' + DataPack.FaultInfos[i].FaultInfos + '</label> </div> </div>';
  423. }
  424. equipmentStatus.empty();
  425. equipmentStatus.html(htmls);
  426. }
  427. },
  428. SetFaultMove: function () {
  429. setTimeout(() => {
  430. let oneBottomLeft = document.getElementById('equipmentStatus');
  431. let mt_value = 0;
  432. let speed = 100;
  433. let height = oneBottomLeft.clientHeight;
  434. if (height > 285) {
  435. clearInterval(FaultInfosTime);
  436. function settimer1() {
  437. if (mt_value >= height) {
  438. mt_value = 0;
  439. page.SetFaultInfos();
  440. //alert('获取新的数据');
  441. } else {
  442. mt_value = mt_value + 1;
  443. }
  444. oneBottomLeft.style.marginTop = '-' + mt_value + 'px';
  445. }
  446. time1 = setInterval(settimer1, speed);
  447. }
  448. else {
  449. FaultInfosTime = setInterval(page.SetFaultInfos, 500);
  450. }
  451. // setInterval(timer2,speed)
  452. }, 300);
  453. },
  454. };
  455. // 保存数据后回调刷新
  456. refreshGirdData = function () {
  457. page.search();
  458. }
  459. page.init();
  460. rangeoninput = function () {
  461. israngedrag = true;
  462. changed = true;
  463. console.log(Play);
  464. }
  465. //获取promise
  466. // var deferred = page.GetDeviceData();
  467. //setInterval(page.GetDeviceData,1000);
  468. }