class Queue { constructor() { this.count = 0; this.lowestCount = 0; this.items = {}; } enqueue(ele) { this.items[this.count] = ele; this.count++; } dequeue() { if (this.isEmpty()) { return undefined; } const result = this.items[this.lowestCount]; delete this.items[this.lowestCount]; this.lowestCount++; return result; } peek() { if (this.isEmpty()) { return undefined; } return this.items[this.lowestCount]; } isEmpty() { return this.count - this.lowestCount === 0; } size() { return this.count - this.lowestCount; } clear() { this.count = 0; this.lowestCount = 0; this.items = {}; } toString() { if (this.isEmpty()) { return ""; } let objString = `${this.items[this.lowestCount]}`; for (let i = this.lowestCount + 1; i < this.count; i++) { objString = `${objString}, ${this.items[i]}`; } return objString; } } Date.prototype.Format = function (fmt) { // author: meizz var o = { "M+": this.getMonth() + 1, // 月份 "d+": this.getDate(), // 日 "h+": this.getHours(), // 小时 "m+": this.getMinutes(), // 分 "s+": this.getSeconds(), // 秒 "q+": Math.floor((this.getMonth() + 3) / 3), // 季度 "S": this.getMilliseconds() // 毫秒 }; if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; } const sleep = (time) => new Promise(resolve => setTimeout(resolve, time)); var refreshGirdData; // 更新数据 var selectedRow; var rangeoninput; var israngedrag = false; var clearPlayIntervalStart; var clearGetDataInterval; var clearGetDequeueDataInterval; var PlayStartframe; var time1; var time2; var Play = 1; var StartFrame; var StartFrameTicks; var Frame; var FrameTicks; var Starting = false; var Reading = false; var replayFlag = false; var Index = 0; var lastvalue = 0; var changed = false; var SliderTime; var SliderTimeTickts; var DataPack = {}; const Datas = new Queue(); var PlayIntervalStartEnd = false; var GetLastDatasEnd = false; var GetDataEnd = false; var FaultInfosTime; var bootstrap = function ($, learun) { "use strict"; var page = { init: function () { //page.GetDeviceData(); page.bind(); page.Start(); page.PlayRealTime(); page.OnGui(); page.SetFaultInfos(); page.GetWarehouseData(); }, bind: function () { //var srmlist = $("[wcssrm = 'wcssrm']"); // 新增 $('#lr_add') $(".left [srm]").on('click', function () { let name = $(this).attr('srm'); learun.layerForm({ id: 'form', btn: null,//['关闭'], title: '堆垛机', url: top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/DDJDetail?keyValue=' + name, width: 860, height: 745, callBack: function (id) { // return top[id].acceptClick(refreshGirdData); } }); }); //$(".left .station").on('click', function () { // let name = $(this).find('span').text(); // learun.layerForm({ // id: 'form', // btn: null,//['关闭'], // title: 'DB详情', // url: top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/StationDetail?keyValue=' + name, // width: 960, // height: 745, // callBack: function (id) { // // return top[id].acceptClick(refreshGirdData); // } // }); //}); $("#PlayerPlay").on('click', function () { Play = Play == 1 ? 0 : 1; if (Play == 1) $("#imgPlayerPlay").attr("src", "/Content/images/DeviceMonitor/PlayerPlay.png"); else { $("#imgPlayerPlay").attr("src", "/Content/images/DeviceMonitor/PlayerPause.png"); } }); $("#PlayerRealTime").on('click', function () { page.PlayRealTime(); }); $('#slider').on('input propertychange', function () { changed = true; }) $("#slider").on('change', function () { // alert(this.value); israngedrag = false; changed = true; SliderTimeTickts = this.value.replace('Date', '').replace('(', '').replace(')', '').replace(/\//g, ''); page.PlayBack(); //learun.httpAsyncGet(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetDatetime?timestamp=' + timeSpan, function (data) { // if (data.IsSucc) { // alert(data.data); // } // else { // let msg = data.info; // } // var sd = Datas.dequeue(); //}); //var ticks = Math.floor(timeSpan / 10000) - 62135596800000; // 将时间戳转换为Ticks //var date = new Date(ticks);//.toLocaleString('zh-CN'); // 将Ticks转换为DateTime格式 //date.setHours(date.getHours() - 8); ////alert(date.Format("yyyy-MM-dd hh:mm:ss")) }); setInterval(page.GetWarehouseData, 10000); //setInterval(page.SetFaultInfos, 4000); setTimeout(() => { let oneBottomLeft = document.getElementById('equipmentStatus'); let mt_value = 0; let speed = 100; let height = oneBottomLeft.clientHeight; if (height > 285) { function settimer1() { if (mt_value >= height) { mt_value = 0; page.SetFaultInfos(); } else { mt_value = mt_value + 1; } oneBottomLeft.style.marginTop = '-' + mt_value + 'px'; } time1 = setInterval(settimer1, speed); } // setInterval(timer2,speed) }, 5000); }, //加载 GetDeviceData: function () { learun.httpAsyncPost(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetData', {}, function (data) { if (data.IsSucc) { Datas.enqueue(data.data); learun.SetDeviceMonitor.SetDeviceData(data.data); } else { //let msg = data.info; } //var sd = Datas.dequeue(); }); //return deferred.promise(); }, search: function (param) { }, PlayRealTime: function () { Play = 1; Starting = true; Reading = false; page.GetLastDatas();// PlayStart(LastFrameTicks); }, PlayBack: function () { Starting = false; Reading = false; page.PlayStart(SliderTimeTickts); }, GetLastDatas: function () { DataPack = {}; if (!GetLastDatasEnd) { GetLastDatasEnd = true; sleep(10).then(() => { if (PlayStartframe < StartFrameTicks) PlayStartframe = StartFrameTicks; else if (PlayStartframe > LastFrameTicks) PlayStartframe = LastFrameTicks; // lock(Datas) Datas.clear(); replayFlag = Play == 1; //Index = 0; learun.httpAsyncGet(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetLastDatas', function (data) { if (data.IsSucc) { DataPack = data.data; learun.SetDeviceMonitor.SetDeviceData(data.data); Index = data.data.Index; Frame = data.data.Frame; FrameTicks = data.data.FrameTicks; //SRMStations //WCSAGVs //WCSSRMs //WCSStations GetLastDatasEnd = false; Starting = false; //clearGetDataInterval = setInterval(page.GetData, 500); console.log("PlayIntervalStart : " + Starting); } else { } }); }) } }, PlayStart: function (frame) { DataPack = {}; PlayStartframe = frame; //console.log("PlayStart : " + Reading); // !Reading 等待 //if (!Reading) { // if (clearPlayIntervalStart) // clearInterval(clearPlayIntervalStart); // sleep(5000); //} //else { // page.PlayIntervalStart(); // //clearPlayIntervalStart= setInterval(page.PlayIntervalStart,2000) //} if (!Reading) { //console.log("PlayIntervalStart : " + Reading ); page.PlayIntervalStart(); } }, PlayIntervalStart: function () { if (!PlayIntervalStartEnd) { PlayIntervalStartEnd = true; sleep(10).then(() => { if (PlayStartframe < StartFrameTicks) PlayStartframe = StartFrameTicks; else if (PlayStartframe > LastFrameTicks) PlayStartframe = LastFrameTicks; // lock(Datas) Datas.clear(); replayFlag = Play == 1; //Index = 0; learun.httpAsyncGet(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetStartDatas?timestamp=' + PlayStartframe + '&len=' + Len, function (data) { if (data.IsSucc) { DataPack = data.data; learun.SetDeviceMonitor.SetDeviceData(data.data); Index = data.data.Index; Frame = data.data.Frame; FrameTicks = data.data.FrameTicks; //SRMStations //WCSAGVs //WCSSRMs //WCSStations PlayIntervalStartEnd = false; Starting = false; //clearGetDataInterval = setInterval(page.GetData, 500); console.log("PlayIntervalStart : " + Starting); } else { } }); }) } }, Start: function () { clearGetDataInterval = setInterval(page.GetData, 500); clearGetDequeueDataInterval = setInterval(page.GetDequeueData, 300); }, GetDequeueData: function () { if (Play == 0) { return; } if (Datas.size() == 0) { return } else { var pack = Datas.dequeue(); DataPack = pack; Frame = pack.Frame; FrameTicks = pack.FrameTicks; } }, GetData: function () { if (!GetDataEnd) { console.log("GetData GetData : " + Starting); if (Starting) { Reading = false; // clearInterval(clearGetDataInterval); return; } else { Reading = true; if (Index <= 0) { return; } var qty = 0; qty = Datas.size(); if (qty < 600 * Play + 1) { learun.httpAsyncGet(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetLastFrame', function (data) { GetDataEnd = true; if (data.IsSucc) { var Length = parseInt(data.data.Len); LastFrameTicks = data.data.FrameTicks; LastFrame = data.data.Frame; if (parseInt(Index) >= parseInt(Length)) Index = Length - 1; var end = parseInt(Index) + 30; end = end < parseInt(Length) ? end : Length - 1; end = parseInt(end) > 0 ? end : 0; console.log("GetRangeData: " + Index + " end: " + end); learun.httpAsyncGet(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetRangeData?start=' + Index + '&end=' + end, function (data) { if (data.IsSucc) { for (var i = 0; i < parseInt(data.data.length); i++) { Datas.enqueue(data.data[i]); } Index = parseInt(Index) + parseInt(data.data.length); // console.log("Datas: "+ Datas.size() + " index: " + Index); } else { } GetDataEnd = false; }); } else { } }); } } } }, OnGui: function () { // PlayButton.image.sprite = Play == 1 ? sPlay : sPause; //Slider.minValue = DataSystem.StartFrame.Ticks - MinTime.Ticks; //Slider.maxValue = DataSystem.LastFrame.Ticks - MinTime.Ticks; //SliderTime = DateTime.FromBinary((long)Slider.value + MinTime.Ticks); setInterval(page.SetOnGui, 300) }, SetOnGui: function () { if (israngedrag) return; $('#slider').attr('min', StartFrameTicks); $('#slider').attr('max', LastFrameTicks); var timeSpan = $('#slider').val().replace('Date', '').replace('(', '').replace(')', '').replace(/\//g, ''); SliderTimeTickts = timeSpan; var ticks = Math.floor(timeSpan / 10000) - 62135596800000; // 将时间戳转换为Ticks var date = new Date(ticks); // 将Ticks转换为DateTime格式 date.setHours(date.getHours() - 8); $('#Frame').text(date.Format("yyyy-MM-dd hh:mm:ss")); learun.SetDeviceMonitor.SetDeviceData(DataPack); if (lastvalue != timeSpan && changed) { FrameTicks = timeSpan; Frame = date; changed = false; lastvalue = timeSpan; page.PlayBack(); } else { $('#slider').val(FrameTicks); $('#Frame').text(Frame); } }, GetWarehouseData: function () { learun.httpAsyncGet(top.$.rootUrl + '/DeviceMonitorManager/PTDeviceMonitor/GetWarehouseLocationInfo', function (data) { if (data.IsSucc) { $("#emptywarecellnum").text(data.data.EmptySpaces) $("#agvtasknum").text(data.data.TotalAGVs); $("#tasknum").text(data.data.TotalTasks); } }); }, SetFaultInfos: function () { if (DataPack != null && DataPack.FaultInfos && DataPack.FaultInfos.length > 0) { var equipmentStatus = $("#equipmentStatus"); var htmls = ''; for (var i = 0; i < DataPack.FaultInfos.length; i++) { htmls += '