BemsWebApplication.ElecPeak = function (params, viewInfo) { "use strict"; var and = BWA.DataUtil.andFilter; var dateBoxValue = ko.observable(new Date()); var BUILDING_DEPTH = 1, FLOOR_DEPTH = 2, ZONE_DEPTH = 3; var CODE = $Code, FuelType = CODE.FuelType, FT = CODE.FacilityType, FC = CODE.FacilityCode, F = CODE.Formula, TIT = CODE.TimeIntervalType; var goal = ko.observable(); var MaxDateTime = ko.observable(new Date()); var MinDateTime = ko.observable(new Date()); var MaxPeakValue = ko.observable(0); var MinPeakValue = ko.observable(0); var todayMaxPeakValue = ko.observable(0); var todayMinPeakValue = ko.observable(0); var SiteId = BWA.UserInfo.SiteId(); var invisableLeft = ko.observable(false); var arrowCount = ko.observable(0); var visiblePopup = ko.observable(false); var timeTypesForSearch = ko.observableArray(), timeTypeIdForSearch = ko.observable(0); var timer; var initialized = false, shouldReload = false, dataSource; var realtime_search = true; var pointHistoryGet = new BWA.Chart.PointHistoryGet(SiteId), formulaGet = new BWA.Chart.FormulaGet(SiteId); var ElecPeakDataSource = BemsWebApplication.db.createDataSource('BemsPeakHistory'), CmSiteDataSource = BemsWebApplication.db.createDataSource('CmSite'), BemsPeakInfoDataSource = BemsWebApplication.db.createDataSource('BemsPeakInfo'), BemsPeakHistoryDailyDataSource = BemsWebApplication.db.createDataSource('BemsPeakHistoryDaily'); var deferredForSearch = new $.Deferred(); var deferredForLoadData = new $.Deferred(); var chart = BWA.Chart.Instance('chartE8', 'dxChart'); var timeBoxForSearch = BWA.SearchView.createDateTimeBox1($G.TimeTypesForMin, null, false); // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가 var DataGridPopup_Visible = ko.observable(false); var dataArrayresult = ko.observableArray(); // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가 function handleSearchViewInitializeUpdate() { } function handleFacilityList() { viewModel.ElecPeakFacilityPopup.show(MaxDateTime); } function handleViewShown() { window.$SearchView.isNotUse(true); if (initialized === false) { var chartOption = BWA.ChartOptions.ElecPeak; chart = chart(chartOption.getChartOptionsMIN($Code.TimeType.MIN));//$Code.TimeType.MIN handleSearchInSearchView_renewal(); initialized = true; } else { handleSearchInSearchView_renewal(); } timeBoxForSearch.setDefaultDate(); if (shouldReload) { } timer = setInterval(function () { var now = new Date(); if ((now.getMinutes() % 1 == 0) && (now.getSeconds() == 58)) { arrowCount(0); invisableLeft(false); dateBoxValue(new Date()); handleSearchInSearchView_renewal(); } }, 1000); } function handleViewHidden() { visiblePopup(false); clearInterval(timer); // hcLee 2015 06 12 } function handleViewShowing() { //handleSearchInSearchView_renewal(); } function refreshList() { } function handleSearchInSearchView_renewal() { // 실시간용 if (realtime_search == true) { visiblePopup(true); CmSiteDataSource.filter([ ['SiteId', '=', SiteId] ]); CmSiteDataSource.load().done(function (datas) { goal = datas[0].MaxPeak(); var end = new Date(dateBoxValue()); var start = new Date(dateBoxValue()); start.setDate(start.getDate() - 1); ElecPeakDataSource.filter([ ['SiteId', '=', SiteId], and, ['CreatedDateTime', '>=', start], and, ['CreatedDateTime', '<=', end] ]); var bEndData = true; ElecPeakDataSource.load().done(function (datas) { var maxValue = 0; var dataArray = []; for (var i = 0; i < datas.length; i++) { dataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, datas[i].CreatedDateTime()), Value: datas[i].CurrentValue() }); if (maxValue < datas[i].CurrentValue()) maxValue = datas[i].CurrentValue(); } dataArrayresult = dataArray; if (dataArray.length == 0) { invisableLeft(true); arrowCount(arrowCount() - 1); if (arrowCount() < 0) arrowCount(0); visiblePopup(false); utils.toast.show('데이터가 없습니다.'); return; } if (maxValue < goal) maxValue = goal; var options = BWA.ChartOptions.ElecPeak.getChartOptionsMIN($Code.TimeType.MIN, goal, maxValue);//$Code.TimeType.MIN chart().option('argumentAxis', null); options.dataSource = dataArray; chart().option(options); visiblePopup(false); }) .fail(function (error) { visiblePopup(false); }); BemsPeakInfoDataSource.filter([ ['SiteId', '=', SiteId] ]); BemsPeakInfoDataSource.load().done(function (datas) { MaxDateTime(datas[0].MaxDateTime()); MinDateTime(datas[0].MinDateTime()); MaxPeakValue(Math.round(datas[0].MaxPeakValue() * 100) / 100); MinPeakValue(Math.round(datas[0].MinPeakValue() * 100) / 100); todayMaxPeakValue(Math.round(datas[0].todayMaxPeakValue() * 100) / 100); todayMinPeakValue(Math.round(datas[0].todayMinPeakValue() * 100) / 100); }); }); } } function handleSearchInSearchView() { //조회용 var date = timeBoxForSearch.getDate(); var end = date.endDate; var start = date.startDate; visiblePopup(true); if (timeBoxForSearch.type() == $Code.TimeType.HOUR) {//기존 CmSiteDataSource.filter([ ['SiteId', '=', SiteId] ]); CmSiteDataSource.load().done(function (datas) { goal = datas[0].MaxPeak(); ElecPeakDataSource.filter([ ['SiteId', '=', SiteId], and, ['CreatedDateTime', '>=', start], and, ['CreatedDateTime', '<=', end], ]); var bEndData = true; ElecPeakDataSource.load().done(function (datas) { var maxValue = 0; var dataArray = []; for (var i = 0; i < datas.length; i++) { dataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, datas[i].CreatedDateTime()), Value: datas[i].CurrentValue() }); if (maxValue < datas[i].CurrentValue()) maxValue = datas[i].CurrentValue(); } dataArrayresult = dataArray; if (dataArray.length == 0) { invisableLeft(true); arrowCount(arrowCount() - 1); if (arrowCount() < 0) arrowCount(0); visiblePopup(false); utils.toast.show('데이터가 없습니다.'); return; } if (maxValue < goal) maxValue = goal; var options = BWA.ChartOptions.ElecPeak.getChartOptionsMIN($Code.TimeType.MIN, goal, maxValue);//$Code.TimeType.MIN chart().option('argumentAxis', null); options.dataSource = dataArray; chart().option(options); visiblePopup(false); }) .fail(function (error) { visiblePopup(false); }); BemsPeakInfoDataSource.filter([ ['SiteId', '=', SiteId] ]); BemsPeakInfoDataSource.load().done(function (datas) { MaxDateTime(datas[0].MaxDateTime()); MinDateTime(datas[0].MinDateTime()); MaxPeakValue(Math.round(datas[0].MaxPeakValue() * 100) / 100); MinPeakValue(Math.round(datas[0].MinPeakValue() * 100) / 100); todayMaxPeakValue(Math.round(datas[0].todayMaxPeakValue() * 100) / 100); todayMinPeakValue(Math.round(datas[0].todayMinPeakValue() * 100) / 100); }); }); } else if (timeBoxForSearch.type() == $Code.TimeType.DAY) { CmSiteDataSource.filter([ ['SiteId', '=', SiteId] ]); CmSiteDataSource.load().done(function (datas) { goal = datas[0].MaxPeak(); BemsPeakHistoryDailyDataSource.filter([ ['SiteId', '=', SiteId], and, ['CreatedDateTime', '>=', start], and, ['CreatedDateTime', '<=', end], ]); var bEndData = true; BemsPeakHistoryDailyDataSource.load().done(function (datas) { var maxValue = 0; var dataArray = []; var tempdataArray = []; for (var i = 0; i < datas.length; i++) { tempdataArray.push({ DateTime: datas[i].CreatedDateTime(), MaxDateTime: datas[i].MaxDateTime(), Value: datas[i].MaxPeakValue() }); dataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), datas[i].CreatedDateTime()), MaxDateTime: BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, datas[i].MaxDateTime()), Value: datas[i].MaxPeakValue() }); if (maxValue < datas[i].MaxPeakValue()) maxValue = datas[i].MaxPeakValue(); } dataArrayresult = dataArray; if (dataArray.length == 0) { invisableLeft(true); arrowCount(arrowCount() - 1); if (arrowCount() < 0) arrowCount(0); visiblePopup(false); utils.toast.show('데이터가 없습니다.'); return; } if (maxValue < goal) maxValue = goal; var options1 = BWA.ChartOptions.ElecPeak.getChartOptionsDAY($Code.TimeType.DAY, goal, maxValue, start, end);//$Code.TimeType.MIN chart().option('argumentAxis', null); options1.dataSource = tempdataArray; chart().option(options1); visiblePopup(false); }) .fail(function (error) { visiblePopup(false); }); BemsPeakInfoDataSource.filter([ ['SiteId', '=', SiteId] ]); BemsPeakInfoDataSource.load().done(function (datas) { MaxDateTime(datas[0].MaxDateTime()); MinDateTime(datas[0].MinDateTime()); MaxPeakValue(Math.round(datas[0].MaxPeakValue() * 100) / 100); MinPeakValue(Math.round(datas[0].MinPeakValue() * 100) / 100); todayMaxPeakValue(Math.round(datas[0].todayMaxPeakValue() * 100) / 100); todayMinPeakValue(Math.round(datas[0].todayMinPeakValue() * 100) / 100); }); }); } else { CmSiteDataSource.filter([ ['SiteId', '=', SiteId] ]); CmSiteDataSource.load().done(function (datas) { goal = datas[0].MaxPeak(); var cnt = Math.round((end - start) / (24 * 60 * 60 * 1000 * 30)); var dataArray = []; var tempdataArray = []; for (var i = 0; i < cnt; i++) { tempdataArray.push({ DateTime: new Date(start.getFullYear(), start.getMonth() + i, 1, 0, 0, 0), MaxDateTime: new Date(start.getFullYear(), start.getMonth() + i, 1, 0, 0, 0), Value: 0 }); dataArray.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), new Date(start.getFullYear(), start.getMonth() + i, 1, 0, 0, 0)), MaxDateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), new Date(start.getFullYear(), start.getMonth() + i, 1, 0, 0, 0)), Value: 0 }); } BemsPeakHistoryDailyDataSource.filter([ ['SiteId', '=', SiteId], and, ['CreatedDateTime', '>=', start], and, ['CreatedDateTime', '<=', end], ]); var bEndData = true; BemsPeakHistoryDailyDataSource.load().done(function (datas) { if (datas.length != 0) { var maxValue = 0; for (var i = 0; i < datas.length; i++) { for (var j = 0; j < dataArray.length; j++) { if (datas[i].CreatedDateTime().getFullYear() == tempdataArray[j].DateTime.getFullYear() && datas[i].CreatedDateTime().getMonth() == tempdataArray[j].DateTime.getMonth()) { if (dataArray[j].Value < datas[i].MaxPeakValue()) { tempdataArray[j].Value = datas[i].MaxPeakValue(); tempdataArray[j].MaxDateTime = datas[i].MaxDateTime(), dataArray[j].MaxDateTime = BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, datas[i].MaxDateTime()), dataArray[j].Value = datas[i].MaxPeakValue(); } break; } } } dataArrayresult = dataArray; if (dataArray.length == 0) { invisableLeft(true); arrowCount(arrowCount() - 1); if (arrowCount() < 0) arrowCount(0); visiblePopup(false); utils.toast.show('데이터가 없습니다.'); return; } if (maxValue < goal) maxValue = goal; var options2 = BWA.ChartOptions.ElecPeak.getChartOptionsMONTH($Code.TimeType.MONTH, goal, maxValue, start, end);//$Code.TimeType.MIN chart().option('argumentAxis', null); options2.dataSource = tempdataArray;//dataArraytempdataArray chart().option(options2); visiblePopup(false); } }) .fail(function (error) { visiblePopup(false); }); BemsPeakInfoDataSource.filter([ ['SiteId', '=', SiteId] ]); BemsPeakInfoDataSource.load().done(function (datas) { MaxDateTime(datas[0].MaxDateTime()); MinDateTime(datas[0].MinDateTime()); MaxPeakValue(Math.round(datas[0].MaxPeakValue() * 100) / 100); MinPeakValue(Math.round(datas[0].MinPeakValue() * 100) / 100); todayMaxPeakValue(Math.round(datas[0].todayMaxPeakValue() * 100) / 100); todayMinPeakValue(Math.round(datas[0].todayMinPeakValue() * 100) / 100); }); }); } } var searchViewOptions = { searchViewItems: [ { id: 'TimeTypeId', defaultValue: 0, value: timeTypeIdForSearch, dataSource: timeTypesForSearch }, { id: 'DateForHour', type: 'dateRange', isOnlyDate: true }, { id: 'TimeForHour', type: 'dateRange', isOnlyDate: true }, ], promiseDataInSearchView: deferredForSearch.promise() }; function handleMenuItemClick(e) { } // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가 function DataGridPopup_ButtonClick() { DataGridPopup_Visible(true); } function handlePopupShown() { if (timeBoxForSearch.type() == $Code.TimeType.HOUR) { viewModel.ElecPeakDataGridOptions.columns[0].format = 'yyyy-MM-dd HH:mm'; if (viewModel.ElecPeakDataGridOptions.columns[2]) viewModel.ElecPeakDataGridOptions.columns[2] = null; } else if (timeBoxForSearch.type() == $Code.TimeType.DAY) { viewModel.ElecPeakDataGridOptions.columns[0].format = 'yyyy-MM-dd'; if (viewModel.ElecPeakDataGridOptions.columns[2] == null) viewModel.ElecPeakDataGridOptions.columns[2] = { dataField: 'MaxDateTime', caption: "피크날짜", width: '50%', alignment: 'center', format: 'yyyy-MM-dd HH:mm' }; } else { viewModel.ElecPeakDataGridOptions.columns[0].format = 'yyyy-MM'; if (viewModel.ElecPeakDataGridOptions.columns[2] == null) viewModel.ElecPeakDataGridOptions.columns[2] = { dataField: 'MaxDateTime', caption: "피크날짜", width: '50%', alignment: 'center', format: 'yyyy-MM-dd HH:mm' }; } if (realtime_search) { if (viewModel.ElecPeakDataGridOptions.columns[2]) viewModel.ElecPeakDataGridOptions.columns[2] = null; } $("#ElecPeakDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult); DataGridPopup_Visible(true); } // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가 var viewModel = $.extend(BWA.CommonView.create( params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView, handleSearchViewInitializeUpdate), { refreshList: refreshList, viewShowing: handleViewShowing, viewHidden: handleViewHidden, // hcLee 2015 03 23 processValueChange: function (e) { if (e.value == '실시간') { realtime_search = true; $("#search").dxButton({ disabled: true }); } else { realtime_search = false; $("#search").dxButton({ disabled: false }); } }, handleMenuItemClick: handleMenuItemClick, menuItems: [{ text: '엑셀(csv) 내보내기' }], dateBoxValue: dateBoxValue, MaxPeakValue: function () { return MaxPeakValue() }, MaxDateTime: function () { return MaxDateTime() }, MinPeakValue: function () { return MinPeakValue() }, MinDateTime: function () { return MinDateTime() }, todayMaxPeakValue: function () { return todayMaxPeakValue() }, todayMinPeakValue: function () { return todayMinPeakValue() }, arrowCount: function () { return arrowCount() }, invisableLeft: function () { return invisableLeft() }, boxOptions: { direction: 'row', width: '75%', height: 120, }, ElecPeakDataGridPopup_ButtonClicked: DataGridPopup_ButtonClick }); viewModel.timeBoxForSearch = timeBoxForSearch; // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가 viewModel.ElecPeakDataGridPopupOptions = { width: '450px', height: '830px', contentTemplate: "content", showTitle: true, title: "도표", visible: DataGridPopup_Visible, dragEnabled: true, closeOnOutsideClick: true, shownAction: handlePopupShown, animation: window.utils.popup.createAnimation(), shading: false }; // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가 $HourGlassPopup(viewModel, visiblePopup); viewModel.ElecPeakFacilityPopup = $ElecPeakFacilityPopup(viewModel, null, false, null); // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가 viewModel.ElecPeakDataGridOptions = { dataSource: dataArrayresult, columns: [ { dataField: 'DateTime', caption: "날짜", width: '50%', alignment: 'center', format: 'yyyy-MM-dd HH:mm' },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' }, { dataField: 'Value', caption: "전력피크", width: '50%', alignment: 'center', format: 'fixedPoint', precision: 2 }, { dataField: 'MaxDateTime', caption: "피크날짜", width: '50%', alignment: 'center', format: 'yyyy-MM-dd HH:mm' },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' }, ], "export": { enabled: true, fileName: '전력피크' } }; // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가 return viewModel; };