2c1139956017ad11e30d9a5d666cbcd481ad7486.svn-base 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527
  1. BemsWebApplication.ElecPeak = function (params, viewInfo) {
  2. "use strict";
  3. var and = BWA.DataUtil.andFilter;
  4. var dateBoxValue = ko.observable(new Date());
  5. var BUILDING_DEPTH = 1, FLOOR_DEPTH = 2, ZONE_DEPTH = 3;
  6. var CODE = $Code, FuelType = CODE.FuelType, FT = CODE.FacilityType, FC = CODE.FacilityCode, F = CODE.Formula, TIT = CODE.TimeIntervalType;
  7. var goal = ko.observable();
  8. var MaxDateTime = ko.observable(new Date());
  9. var MinDateTime = ko.observable(new Date());
  10. var MaxPeakValue = ko.observable(0);
  11. var MinPeakValue = ko.observable(0);
  12. var todayMaxPeakValue = ko.observable(0);
  13. var todayMinPeakValue = ko.observable(0);
  14. var SiteId = BWA.UserInfo.SiteId();
  15. var invisableLeft = ko.observable(false);
  16. var arrowCount = ko.observable(0);
  17. var visiblePopup = ko.observable(false);
  18. var timeTypesForSearch = ko.observableArray(), timeTypeIdForSearch = ko.observable(0);
  19. var timer;
  20. var initialized = false, shouldReload = false, dataSource;
  21. var realtime_search = true;
  22. var pointHistoryGet = new BWA.Chart.PointHistoryGet(SiteId), formulaGet = new BWA.Chart.FormulaGet(SiteId);
  23. var ElecPeakDataSource = BemsWebApplication.db.createDataSource('BemsPeakHistory'),
  24. CmSiteDataSource = BemsWebApplication.db.createDataSource('CmSite'),
  25. BemsPeakInfoDataSource = BemsWebApplication.db.createDataSource('BemsPeakInfo'),
  26. BemsPeakHistoryDailyDataSource = BemsWebApplication.db.createDataSource('BemsPeakHistoryDaily');
  27. var deferredForSearch = new $.Deferred();
  28. var deferredForLoadData = new $.Deferred();
  29. var chart = BWA.Chart.Instance('chartE8', 'dxChart');
  30. var timeBoxForSearch = BWA.SearchView.createDateTimeBox1($G.TimeTypesForMin, null, false);
  31. // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가
  32. var DataGridPopup_Visible = ko.observable(false);
  33. var dataArrayresult = ko.observableArray();
  34. // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가
  35. function handleSearchViewInitializeUpdate() {
  36. }
  37. function handleFacilityList() {
  38. viewModel.ElecPeakFacilityPopup.show(MaxDateTime);
  39. }
  40. function handleViewShown() {
  41. window.$SearchView.isNotUse(true);
  42. if (initialized === false) {
  43. var chartOption = BWA.ChartOptions.ElecPeak;
  44. chart = chart(chartOption.getChartOptionsMIN($Code.TimeType.MIN));//$Code.TimeType.MIN
  45. handleSearchInSearchView_renewal();
  46. initialized = true;
  47. }
  48. else {
  49. handleSearchInSearchView_renewal();
  50. }
  51. timeBoxForSearch.setDefaultDate();
  52. if (shouldReload) {
  53. }
  54. timer = setInterval(function () {
  55. var now = new Date();
  56. if ((now.getMinutes() % 1 == 0) && (now.getSeconds() == 58)) {
  57. arrowCount(0);
  58. invisableLeft(false);
  59. dateBoxValue(new Date());
  60. handleSearchInSearchView_renewal();
  61. }
  62. }, 1000);
  63. }
  64. function handleViewHidden() {
  65. visiblePopup(false);
  66. clearInterval(timer); // hcLee 2015 06 12
  67. }
  68. function handleViewShowing() {
  69. //handleSearchInSearchView_renewal();
  70. }
  71. function refreshList() {
  72. }
  73. function handleSearchInSearchView_renewal() { // 실시간용
  74. if (realtime_search == true) {
  75. visiblePopup(true);
  76. CmSiteDataSource.filter([
  77. ['SiteId', '=', SiteId]
  78. ]);
  79. CmSiteDataSource.load().done(function (datas) {
  80. goal = datas[0].MaxPeak();
  81. var end = new Date(dateBoxValue());
  82. var start = new Date(dateBoxValue());
  83. start.setDate(start.getDate() - 1);
  84. ElecPeakDataSource.filter([
  85. ['SiteId', '=', SiteId],
  86. and,
  87. ['CreatedDateTime', '>=', start],
  88. and,
  89. ['CreatedDateTime', '<=', end]
  90. ]);
  91. var bEndData = true;
  92. ElecPeakDataSource.load().done(function (datas) {
  93. var maxValue = 0;
  94. var dataArray = [];
  95. for (var i = 0; i < datas.length; i++) {
  96. dataArray.push({
  97. DateTime: BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, datas[i].CreatedDateTime()),
  98. Value: datas[i].CurrentValue()
  99. });
  100. if (maxValue < datas[i].CurrentValue()) maxValue = datas[i].CurrentValue();
  101. }
  102. dataArrayresult = dataArray;
  103. if (dataArray.length == 0) {
  104. invisableLeft(true);
  105. arrowCount(arrowCount() - 1);
  106. if (arrowCount() < 0) arrowCount(0);
  107. visiblePopup(false);
  108. utils.toast.show('데이터가 없습니다.');
  109. return;
  110. }
  111. if (maxValue < goal) maxValue = goal;
  112. var options = BWA.ChartOptions.ElecPeak.getChartOptionsMIN($Code.TimeType.MIN, goal, maxValue);//$Code.TimeType.MIN
  113. chart().option('argumentAxis', null);
  114. options.dataSource = dataArray;
  115. chart().option(options);
  116. visiblePopup(false);
  117. })
  118. .fail(function (error) {
  119. visiblePopup(false);
  120. });
  121. BemsPeakInfoDataSource.filter([
  122. ['SiteId', '=', SiteId]
  123. ]);
  124. BemsPeakInfoDataSource.load().done(function (datas) {
  125. MaxDateTime(datas[0].MaxDateTime());
  126. MinDateTime(datas[0].MinDateTime());
  127. MaxPeakValue(Math.round(datas[0].MaxPeakValue() * 100) / 100);
  128. MinPeakValue(Math.round(datas[0].MinPeakValue() * 100) / 100);
  129. todayMaxPeakValue(Math.round(datas[0].todayMaxPeakValue() * 100) / 100);
  130. todayMinPeakValue(Math.round(datas[0].todayMinPeakValue() * 100) / 100);
  131. });
  132. });
  133. }
  134. }
  135. function handleSearchInSearchView() { //조회용
  136. var date = timeBoxForSearch.getDate();
  137. var end = date.endDate;
  138. var start = date.startDate;
  139. visiblePopup(true);
  140. if (timeBoxForSearch.type() == $Code.TimeType.HOUR) {//기존
  141. CmSiteDataSource.filter([
  142. ['SiteId', '=', SiteId]
  143. ]);
  144. CmSiteDataSource.load().done(function (datas) {
  145. goal = datas[0].MaxPeak();
  146. ElecPeakDataSource.filter([
  147. ['SiteId', '=', SiteId],
  148. and,
  149. ['CreatedDateTime', '>=', start],
  150. and,
  151. ['CreatedDateTime', '<=', end],
  152. ]);
  153. var bEndData = true;
  154. ElecPeakDataSource.load().done(function (datas) {
  155. var maxValue = 0;
  156. var dataArray = [];
  157. for (var i = 0; i < datas.length; i++) {
  158. dataArray.push({
  159. DateTime: BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, datas[i].CreatedDateTime()),
  160. Value: datas[i].CurrentValue()
  161. });
  162. if (maxValue < datas[i].CurrentValue()) maxValue = datas[i].CurrentValue();
  163. }
  164. dataArrayresult = dataArray;
  165. if (dataArray.length == 0) {
  166. invisableLeft(true);
  167. arrowCount(arrowCount() - 1);
  168. if (arrowCount() < 0) arrowCount(0);
  169. visiblePopup(false);
  170. utils.toast.show('데이터가 없습니다.');
  171. return;
  172. }
  173. if (maxValue < goal) maxValue = goal;
  174. var options = BWA.ChartOptions.ElecPeak.getChartOptionsMIN($Code.TimeType.MIN, goal, maxValue);//$Code.TimeType.MIN
  175. chart().option('argumentAxis', null);
  176. options.dataSource = dataArray;
  177. chart().option(options);
  178. visiblePopup(false);
  179. })
  180. .fail(function (error) {
  181. visiblePopup(false);
  182. });
  183. BemsPeakInfoDataSource.filter([
  184. ['SiteId', '=', SiteId]
  185. ]);
  186. BemsPeakInfoDataSource.load().done(function (datas) {
  187. MaxDateTime(datas[0].MaxDateTime());
  188. MinDateTime(datas[0].MinDateTime());
  189. MaxPeakValue(Math.round(datas[0].MaxPeakValue() * 100) / 100);
  190. MinPeakValue(Math.round(datas[0].MinPeakValue() * 100) / 100);
  191. todayMaxPeakValue(Math.round(datas[0].todayMaxPeakValue() * 100) / 100);
  192. todayMinPeakValue(Math.round(datas[0].todayMinPeakValue() * 100) / 100);
  193. });
  194. });
  195. }
  196. else if (timeBoxForSearch.type() == $Code.TimeType.DAY) {
  197. CmSiteDataSource.filter([
  198. ['SiteId', '=', SiteId]
  199. ]);
  200. CmSiteDataSource.load().done(function (datas) {
  201. goal = datas[0].MaxPeak();
  202. BemsPeakHistoryDailyDataSource.filter([
  203. ['SiteId', '=', SiteId],
  204. and,
  205. ['CreatedDateTime', '>=', start],
  206. and,
  207. ['CreatedDateTime', '<=', end],
  208. ]);
  209. var bEndData = true;
  210. BemsPeakHistoryDailyDataSource.load().done(function (datas) {
  211. var maxValue = 0;
  212. var dataArray = [];
  213. var tempdataArray = [];
  214. for (var i = 0; i < datas.length; i++) {
  215. tempdataArray.push({
  216. DateTime: datas[i].CreatedDateTime(),
  217. MaxDateTime: datas[i].MaxDateTime(),
  218. Value: datas[i].MaxPeakValue()
  219. });
  220. dataArray.push({
  221. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), datas[i].CreatedDateTime()),
  222. MaxDateTime: BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, datas[i].MaxDateTime()),
  223. Value: datas[i].MaxPeakValue()
  224. });
  225. if (maxValue < datas[i].MaxPeakValue()) maxValue = datas[i].MaxPeakValue();
  226. }
  227. dataArrayresult = dataArray;
  228. if (dataArray.length == 0) {
  229. invisableLeft(true);
  230. arrowCount(arrowCount() - 1);
  231. if (arrowCount() < 0) arrowCount(0);
  232. visiblePopup(false);
  233. utils.toast.show('데이터가 없습니다.');
  234. return;
  235. }
  236. if (maxValue < goal) maxValue = goal;
  237. var options1 = BWA.ChartOptions.ElecPeak.getChartOptionsDAY($Code.TimeType.DAY, goal, maxValue, start, end);//$Code.TimeType.MIN
  238. chart().option('argumentAxis', null);
  239. options1.dataSource = tempdataArray;
  240. chart().option(options1);
  241. visiblePopup(false);
  242. })
  243. .fail(function (error) {
  244. visiblePopup(false);
  245. });
  246. BemsPeakInfoDataSource.filter([
  247. ['SiteId', '=', SiteId]
  248. ]);
  249. BemsPeakInfoDataSource.load().done(function (datas) {
  250. MaxDateTime(datas[0].MaxDateTime());
  251. MinDateTime(datas[0].MinDateTime());
  252. MaxPeakValue(Math.round(datas[0].MaxPeakValue() * 100) / 100);
  253. MinPeakValue(Math.round(datas[0].MinPeakValue() * 100) / 100);
  254. todayMaxPeakValue(Math.round(datas[0].todayMaxPeakValue() * 100) / 100);
  255. todayMinPeakValue(Math.round(datas[0].todayMinPeakValue() * 100) / 100);
  256. });
  257. });
  258. }
  259. else {
  260. CmSiteDataSource.filter([
  261. ['SiteId', '=', SiteId]
  262. ]);
  263. CmSiteDataSource.load().done(function (datas) {
  264. goal = datas[0].MaxPeak();
  265. var cnt = Math.round((end - start) / (24 * 60 * 60 * 1000 * 30));
  266. var dataArray = [];
  267. var tempdataArray = [];
  268. for (var i = 0; i < cnt; i++) {
  269. tempdataArray.push({
  270. DateTime: new Date(start.getFullYear(), start.getMonth() + i, 1, 0, 0, 0),
  271. MaxDateTime: new Date(start.getFullYear(), start.getMonth() + i, 1, 0, 0, 0),
  272. Value: 0
  273. });
  274. dataArray.push({
  275. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), new Date(start.getFullYear(), start.getMonth() + i, 1, 0, 0, 0)),
  276. MaxDateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), new Date(start.getFullYear(), start.getMonth() + i, 1, 0, 0, 0)),
  277. Value: 0
  278. });
  279. }
  280. BemsPeakHistoryDailyDataSource.filter([
  281. ['SiteId', '=', SiteId],
  282. and,
  283. ['CreatedDateTime', '>=', start],
  284. and,
  285. ['CreatedDateTime', '<=', end],
  286. ]);
  287. var bEndData = true;
  288. BemsPeakHistoryDailyDataSource.load().done(function (datas) {
  289. if (datas.length != 0) {
  290. var maxValue = 0;
  291. for (var i = 0; i < datas.length; i++) {
  292. for (var j = 0; j < dataArray.length; j++) {
  293. if (datas[i].CreatedDateTime().getFullYear() == tempdataArray[j].DateTime.getFullYear() && datas[i].CreatedDateTime().getMonth() == tempdataArray[j].DateTime.getMonth()) {
  294. if (dataArray[j].Value < datas[i].MaxPeakValue()) {
  295. tempdataArray[j].Value = datas[i].MaxPeakValue();
  296. tempdataArray[j].MaxDateTime = datas[i].MaxDateTime(),
  297. dataArray[j].MaxDateTime = BWA.Chart.getCustermTimeArgumentAxisString($Code.TimeType.QUARTERMIN, datas[i].MaxDateTime()),
  298. dataArray[j].Value = datas[i].MaxPeakValue();
  299. }
  300. break;
  301. }
  302. }
  303. }
  304. dataArrayresult = dataArray;
  305. if (dataArray.length == 0) {
  306. invisableLeft(true);
  307. arrowCount(arrowCount() - 1);
  308. if (arrowCount() < 0) arrowCount(0);
  309. visiblePopup(false);
  310. utils.toast.show('데이터가 없습니다.');
  311. return;
  312. }
  313. if (maxValue < goal) maxValue = goal;
  314. var options2 = BWA.ChartOptions.ElecPeak.getChartOptionsMONTH($Code.TimeType.MONTH, goal, maxValue, start, end);//$Code.TimeType.MIN
  315. chart().option('argumentAxis', null);
  316. options2.dataSource = tempdataArray;//dataArraytempdataArray
  317. chart().option(options2);
  318. visiblePopup(false);
  319. }
  320. })
  321. .fail(function (error) {
  322. visiblePopup(false);
  323. });
  324. BemsPeakInfoDataSource.filter([
  325. ['SiteId', '=', SiteId]
  326. ]);
  327. BemsPeakInfoDataSource.load().done(function (datas) {
  328. MaxDateTime(datas[0].MaxDateTime());
  329. MinDateTime(datas[0].MinDateTime());
  330. MaxPeakValue(Math.round(datas[0].MaxPeakValue() * 100) / 100);
  331. MinPeakValue(Math.round(datas[0].MinPeakValue() * 100) / 100);
  332. todayMaxPeakValue(Math.round(datas[0].todayMaxPeakValue() * 100) / 100);
  333. todayMinPeakValue(Math.round(datas[0].todayMinPeakValue() * 100) / 100);
  334. });
  335. });
  336. }
  337. }
  338. var searchViewOptions = {
  339. searchViewItems: [
  340. { id: 'TimeTypeId', defaultValue: 0, value: timeTypeIdForSearch, dataSource: timeTypesForSearch },
  341. { id: 'DateForHour', type: 'dateRange', isOnlyDate: true },
  342. { id: 'TimeForHour', type: 'dateRange', isOnlyDate: true },
  343. ],
  344. promiseDataInSearchView: deferredForSearch.promise()
  345. };
  346. function handleMenuItemClick(e) {
  347. }
  348. // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가
  349. function DataGridPopup_ButtonClick() {
  350. DataGridPopup_Visible(true);
  351. }
  352. function handlePopupShown() {
  353. if (timeBoxForSearch.type() == $Code.TimeType.HOUR) {
  354. viewModel.ElecPeakDataGridOptions.columns[0].format = 'yyyy-MM-dd HH:mm';
  355. if (viewModel.ElecPeakDataGridOptions.columns[2])
  356. viewModel.ElecPeakDataGridOptions.columns[2] = null;
  357. }
  358. else if (timeBoxForSearch.type() == $Code.TimeType.DAY) {
  359. viewModel.ElecPeakDataGridOptions.columns[0].format = 'yyyy-MM-dd';
  360. if (viewModel.ElecPeakDataGridOptions.columns[2] == null)
  361. viewModel.ElecPeakDataGridOptions.columns[2] = {
  362. dataField: 'MaxDateTime', caption: "피크날짜", width: '50%', alignment: 'center', format: 'yyyy-MM-dd HH:mm'
  363. };
  364. }
  365. else {
  366. viewModel.ElecPeakDataGridOptions.columns[0].format = 'yyyy-MM';
  367. if (viewModel.ElecPeakDataGridOptions.columns[2] == null)
  368. viewModel.ElecPeakDataGridOptions.columns[2] = {
  369. dataField: 'MaxDateTime', caption: "피크날짜", width: '50%', alignment: 'center', format: 'yyyy-MM-dd HH:mm'
  370. };
  371. }
  372. if (realtime_search) {
  373. if (viewModel.ElecPeakDataGridOptions.columns[2])
  374. viewModel.ElecPeakDataGridOptions.columns[2] = null;
  375. }
  376. $("#ElecPeakDataGrid_Container").dxDataGrid("instance").option("dataSource", dataArrayresult);
  377. DataGridPopup_Visible(true);
  378. }
  379. // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가
  380. var viewModel = $.extend(BWA.CommonView.create(
  381. params, viewInfo, searchViewOptions, ko.observable(null), handleViewShown, null,
  382. handleSearchInSearchView, handleSearchViewInitializeUpdate), {
  383. refreshList: refreshList,
  384. viewShowing: handleViewShowing,
  385. viewHidden: handleViewHidden, // hcLee 2015 03 23
  386. processValueChange: function (e) {
  387. if (e.value == '실시간') {
  388. realtime_search = true;
  389. $("#search").dxButton({
  390. disabled: true
  391. });
  392. }
  393. else {
  394. realtime_search = false;
  395. $("#search").dxButton({
  396. disabled: false
  397. });
  398. }
  399. },
  400. handleMenuItemClick: handleMenuItemClick,
  401. menuItems: [{
  402. text: '엑셀(csv) 내보내기'
  403. }],
  404. dateBoxValue: dateBoxValue,
  405. MaxPeakValue: function () { return MaxPeakValue() },
  406. MaxDateTime: function () { return MaxDateTime() },
  407. MinPeakValue: function () { return MinPeakValue() },
  408. MinDateTime: function () { return MinDateTime() },
  409. todayMaxPeakValue: function () { return todayMaxPeakValue() },
  410. todayMinPeakValue: function () { return todayMinPeakValue() },
  411. arrowCount: function () { return arrowCount() },
  412. invisableLeft: function () { return invisableLeft() },
  413. boxOptions: {
  414. direction: 'row', width: '75%', height: 120,
  415. },
  416. ElecPeakDataGridPopup_ButtonClicked: DataGridPopup_ButtonClick
  417. });
  418. viewModel.timeBoxForSearch = timeBoxForSearch;
  419. // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가
  420. viewModel.ElecPeakDataGridPopupOptions = {
  421. width: '450px',
  422. height: '830px',
  423. contentTemplate: "content",
  424. showTitle: true,
  425. title: "도표",
  426. visible: DataGridPopup_Visible,
  427. dragEnabled: true,
  428. closeOnOutsideClick: true,
  429. shownAction: handlePopupShown,
  430. animation: window.utils.popup.createAnimation(),
  431. shading: false
  432. };
  433. // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가
  434. $HourGlassPopup(viewModel, visiblePopup);
  435. viewModel.ElecPeakFacilityPopup = $ElecPeakFacilityPopup(viewModel, null, false, null);
  436. // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가
  437. viewModel.ElecPeakDataGridOptions = {
  438. dataSource: dataArrayresult,
  439. columns: [
  440. { dataField: 'DateTime', caption: "날짜", width: '50%', alignment: 'center', format: 'yyyy-MM-dd HH:mm' },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' },
  441. { dataField: 'Value', caption: "전력피크", width: '50%', alignment: 'center', format: 'fixedPoint', precision: 2 },
  442. { dataField: 'MaxDateTime', caption: "피크날짜", width: '50%', alignment: 'center', format: 'yyyy-MM-dd HH:mm' },// dataType: 'date', format: 'yyyy-MM-dd HH:mm' },
  443. ],
  444. "export": {
  445. enabled: true,
  446. fileName: '전력피크'
  447. }
  448. };
  449. // 2017.09.11 : 그리드 도표 작업 : 팝업창 추가
  450. return viewModel;
  451. };