//예측 차트 2020.05.**************** kgpark BemsWebApplication.PlanConsumeRegressionDevelopment = function (params, viewInfo) { "use strict"; var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForDayOnly); var visiblePopup = ko.observable(false); var timer; var initialized = false; var virtualNormalPointHistory_CurrentValueGet = new BWA.Chart.VirtualNormalPointHistory_CurrentValueGet(BWA.UserInfo.SiteId()), ForecastingPointHistory_DayAheadValueGet = new BWA.Chart.ForecastingPointHistory_DayAheadValueGet(BWA.UserInfo.SiteId()), ForecastingPointHistory_HourAheadValueGet = new BWA.Chart.ForecastingPointHistory_HourAheadValueGet(BWA.UserInfo.SiteId()); var timeTypesForSearch = ko.observableArray(), timeTypeIdForSearch = ko.observable(0), deferredForSearch = new $.Deferred(); var chart = BWA.Chart.Instance('chartRT', 'dxChart'); var locationEnableForSearch = ko.observable(true); // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 // 팝업창뷰 보이기 속성 제어용 변수 선언 var DataGridPopup_Visible = ko.observable(false); // 그래프 출력 이후 엑셀출력을 위한 팝업창을 위해 임시 저장용 배열 선언 var dataArrayresult = ko.observableArray(); // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 timeTypesForSearch($G.TimeTypes); function handleViewShown() { if (initialized === false) { //alert('handleViewShown1'); // 3 chart = chart(BWA.ChartOptions.PlanConsumeRegressionDevelopment.getChartOptions()); initialized = true; } // 날짜 초기화 (오늘) timeBoxForSearch.setDefaultDateToday(); handleSearchInSearchView(); timer = setInterval(function () { //alert('timer'); // For Debugging var now = new Date(); //if ((now.getMinutes() == 1 && now.getSeconds() == 30) || (now.getMinutes() == 5 && now.getSeconds() == 30)) { if (now.getMinutes() == 2 && now.getSeconds() == 30) { //alert('timer'); // For Debugging handleSearchInSearchView(); } }, 1000); } function handleViewHidden() { $SearchView.visibleObservable(false); // hcLee 2015 03 23 visiblePopup(false); clearInterval(timer); // hcLee 2015 06 12 } function handleViewShowing() { } function refreshList() { } var searchViewOptions = { searchViewItems: [ { id: 'TimeTypeId', defaultValue: 0, value: timeTypeIdForSearch, dataSource: timeTypesForSearch }, { id: 'DateForHour', type: 'dateRange', isOnlyDate: true }, ], promiseDataInSearchView: deferredForSearch.promise() }; function handleSearchInSearchView() { visiblePopup(true); var dataArray = []; var date = timeBoxForSearch.getDate(); if (moment()._d.getFullYear() == date.endDate.getFullYear() && moment()._d.getMonth() == date.endDate.getMonth() && moment()._d.getDate() == date.endDate.getDate()) { var endDate_current = new Date(moment()._d.getFullYear(), moment()._d.getMonth(), moment()._d.getDate(), moment()._d.getHours(), 0); var commonParameters_current = { TimeIntervalType: $Code.TimeIntervalType.HOUR, StartDate: date.startDate, EndDate: endDate_current }; var commonParameters_today = _.extend({}, commonParameters_current, { EndDate: date.endDate }); } else { var commonParameters_current = { TimeIntervalType: $Code.TimeIntervalType.HOUR, StartDate: date.startDate, EndDate: date.endDate }; var commonParameters_today = commonParameters_current } var ElectricConsumptionParameters = { FacilityTypeId: 99, FacilityCode: 4863, PropertyId: 1 }; $.when( virtualNormalPointHistory_CurrentValueGet.apiGet(_.extend(ElectricConsumptionParameters, commonParameters_current)), ForecastingPointHistory_DayAheadValueGet.apiGet(_.extend(ElectricConsumptionParameters, commonParameters_today)), ForecastingPointHistory_HourAheadValueGet.apiGet(_.extend(ElectricConsumptionParameters, commonParameters_current)) ).done(function (ObservedValues, DayAheadValues, HourAheadValues) { if (ObservedValues[0].length != 0 && DayAheadValues[0].length != 0 && HourAheadValues[0].length != 0) { var dataArray_Temp = []; var dataArray_Temp1 = []; var dataArray_Temp2 = []; var dataArray_Temp3 = []; _.each(ObservedValues[0][0], function (x) { dataArray.push({ DateTime: moment(x.DateTime).toDate(), ObservedValue: x.Value }); }); _.each(DayAheadValues[0][0], function (x) { dataArray.push({ DateTime: moment(x.DateTime).toDate(), DayAheadValue: x.Value }); }); _.each(HourAheadValues[0][0], function (x) { dataArray.push({ DateTime: moment(x.DateTime).toDate(), HourAheadValue: x.Value }) }); // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 _.each(ObservedValues[0][0], function (x) { dataArray_Temp.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, moment(x.DateTime).toDate()), ObservedValue: x.Value, }); }); _.each(DayAheadValues[0][0], function (x) { dataArray_Temp1.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, moment(x.DateTime).toDate()), DayAheadValue: x.Value }); }); _.each(HourAheadValues[0][0], function (x) { dataArray_Temp2.push({ DateTime: BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, moment(x.DateTime).toDate()), HourAheadValue: x.Value }) }); // 배열을 하나로 합치자 var array_length_size = Math.max(dataArray_Temp.length, dataArray_Temp1.length, dataArray_Temp2.length); for (var i = 0; i < array_length_size; i++) { if (i < dataArray_Temp.length) { dataArray_Temp3.push( { DateTime: dataArray_Temp1[i].DateTime, ObservedValue: dataArray_Temp[i].ObservedValue, DayAheadValue: dataArray_Temp1[i].DayAheadValue, HourAheadValue: dataArray_Temp2[i].HourAheadValue }); } else { dataArray_Temp3.push( { DateTime: dataArray_Temp1[i].DateTime, ObservedValue: 0, DayAheadValue: dataArray_Temp1[i].DayAheadValue, HourAheadValue: 0 }); } } // 만약 일렬로 병합을 원한다면 아래코드를 사용 //dataArray_Temp = dataArray_Temp1.concat(dataArray_Temp2); dataArrayresult = dataArray_Temp3; // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 var options = BWA.ChartOptions.PlanConsumeRegressionDevelopment.getSeriesOptions(); if (!_.isNull(date.startDate) && !_.isNull(date.endDate)) { options.argumentAxis.min = moment(date.startDate).add(-1, 'hours').toDate(); options.argumentAxis.max = moment(date.endDate).add(1, 'hours').toDate(); } chart().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결) options.dataSource = dataArray; chart().option(options); $('#st').text('에너지 사용량 예측 비교'); } else if (ObservedValues[0].length == 0) { utils.toast.show("[BemsMonitoringPointHourly] 데이터가 없습니다.", 'error'); } else if (DayAheadValues[0].length == 0) { utils.toast.show("[BemsMonitoringPointForecastingDayAhead] 데이터가 없습니다.", 'error'); } else if (HourAheadValues[0].length == 0) { utils.toast.show("[BemsMonitoringPointForecastingHourAhead] 데이터가 없습니다.", 'error'); } visiblePopup(false); }) .fail(function (error) { utils.toast.show("데이터를 불러오는데 실패 하였습니다.", 'error'); visiblePopup(false); }); } // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 function DataGridPopup_ButtonClick() { // DevExpress.ui.notify("날짜가 일치하지 않는 데이타가 존재합니다", "fail", 1000); DataGridPopup_Visible(true); } function handlePopupShown() { // 컬럼명 업데이트 viewModel.PlanConsumeRegressionDevelopmentDataGridOptions.columns[0].caption = "날짜"; viewModel.PlanConsumeRegressionDevelopmentDataGridOptions.columns[1].caption = "실 사용량"; viewModel.PlanConsumeRegressionDevelopmentDataGridOptions.columns[2].caption = "하루 전 예측량"; viewModel.PlanConsumeRegressionDevelopmentDataGridOptions.columns[3].caption = "한시간 전 예측량"; // 데이타소스 업데이트 $("#PlanConsumeRegressionDevelopmentDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult); // 팝업창 갱신 DataGridPopup_Visible(true); // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 } var viewModel = $.extend(BWA.CommonView.create( params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null, handleSearchInSearchView), { refreshList: refreshList, viewShowing: handleViewShowing, viewHidden: handleViewHidden, // hcLee 2015 03 23 //viewDisposing: handleViewHidden, // hcLee 2015 03 23 locationEnableForSearch: locationEnableForSearch, // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 PlanConsumeRegressionDevelopmentDataGridPopup_ButtonClicked: DataGridPopup_ButtonClick // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 }); // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 // 그래프 도표 팝업창 viewModel.PlanConsumeRegressionDevelopmentDataGridPopupOptions = { width: '480px', height: '830px', // cyim 2017.05.30 : 테스트 결과 Devextreme 버그임. px 로 지정하면 초기 출력시 정확하게 가운데에 있지만, auto 설정시 화면아래에 위치하게 됨 contentTemplate: "content", showTitle: true, title: "도표", visible: DataGridPopup_Visible, dragEnabled: true, closeOnOutsideClick: true, shownAction: handlePopupShown, animation: window.utils.popup.createAnimation(), shading: false }; // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 // 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 viewModel.PlanConsumeRegressionDevelopmentDataGridOptions = { dataSource: dataArrayresult, columns: [ { dataField: 'DateTime', width: '30%', alignment: 'center' },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' }, { dataField: 'ObservedValue', width: '23%', alignment: 'center', format: 'fixedPoint', precision: 2 }, { dataField: 'DayAheadValue', width: '23%', alignment: 'center', format: 'fixedPoint', precision: 2 }, { dataField: 'HourAheadValue', width: '23%', alignment: 'center', format: 'fixedPoint', precision: 2 } ], // 엑셀 출력 "export": { enabled: true, fileName: '에너지 사용 예측 결과' } }; /// 2017.09.08 : 그리드 도표 작업 : 팝업창 추가 viewModel.timeBoxForSearch = timeBoxForSearch; return viewModel; };