a301a106889238cc48f66a06d07c486d6c096c82.svn-base 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897
  1. BemsWebApplication.CenterMainDashboard = function (params, viewInfo) {
  2. "use strict";
  3. var CurrSiteData;
  4. var sitename = "";
  5. var CmSite;
  6. function refreshList() {
  7. }
  8. function handleViewShowing() {
  9. DevExpress.ui.themes.current('generic.dark');
  10. if (BWA.config["center-mode"]) {
  11. sitename = "통합관리센터";
  12. }
  13. CmSiteDataSource.filter([
  14. ['lat', '>=', 1]
  15. ]);
  16. CmSiteDataSource.sort({ getter: "lat", asc: true });
  17. CmSiteDataSource.load().done(function (result) {
  18. CmSite = result;
  19. });
  20. }
  21. function handleViewHidden() {
  22. }
  23. function handleViewDisposing() {
  24. }
  25. var timer;
  26. var gaugeDataOptions = {};
  27. var //ELECTRICITY_DAY_MAX = 50000, // 전기금일목표
  28. //ELECTRICITY_MONTH_MAX = 1000000, //전기이달목표
  29. ELECTRICITY_YEAR_MAX = 0,
  30. //ELECTRICITY_GOAL_YEAR = 101165200, // 백만kWh
  31. //GAS_DAY_MAX = 40000,
  32. //GAS_MONTH_MAX = 100000,
  33. GAS_YEAR_MAX = 0,
  34. WATER_YEAR_MAX = 0;
  35. //GAS_GOAL_YEAR = 3708099, //
  36. var yearElectricityUsageValue = ko.observable(0),
  37. yearGasUsageValue = ko.observable(0);
  38. var CODE = $Code,
  39. FuelType = CODE.g_fuelTypes,
  40. FT = CODE.FacilityType,
  41. FC = CODE.FacilityCode,
  42. F = CODE.Formula,
  43. TIT = CODE.TimeIntervalType;
  44. var visiblePopup = ko.observable(false);
  45. var factorCo2 = null, factorToe = null, factorKcal = null;
  46. var serviceType = null;
  47. var fuelTypesDataSource = BemsWebApplication.db.createDataSource('BemsFuelType'),
  48. factorCo2DataSource = BemsWebApplication.db.createDataSource('BemsFactorCo2'),
  49. serviceTypesDataSource = BemsWebApplication.db.createDataSource('BemsServiceType'),
  50. factorToeDataSource = BemsWebApplication.db.createDataSource('BemsFactorToe'),
  51. CmSiteDataSource = BemsWebApplication.db.createDataSource('CmSite');
  52. var mainChart = BWA.Chart.Instance('mainChart', 'dxChart');
  53. var energyUsageStatusGet = new BWA.Chart.PointHistoryServiceTypeGet(BWA.UserInfo.SiteId());
  54. //var energyUsageStatusGet = new BWA.Chart.PointHistoryServiceTypeGet(BWA.UserInfo.SiteId());
  55. //var energyUsageStatusGet = new BWA.Chart.PointHistoryServiceTypeGet(BWA.UserInfo.SiteId());
  56. var yearElectricityUsageGauge = BWA.Chart.Instance('yearElectricityUsageGauge', 'dxCircularGauge'),
  57. yearGasUsageGauge = BWA.Chart.Instance('yearGasUsageGauge', 'dxCircularGauge'),
  58. yearEnergyUsageGauge = BWA.Chart.Instance('yearEnergyUsageGauge', 'dxCircularGauge');
  59. var chartPieDaySU = BWA.Chart.Instance('chartPieDaySU_CM', 'dxPieChart');
  60. var chartBarDaySU = BWA.Chart.Instance('chartBarDaySU_CM', 'dxChart');
  61. var works = ko.observableArray();
  62. var initialized = false;
  63. function handleViewShown() {
  64. /*
  65. var tests = [];
  66. for (var i=0; i < 2; i++)
  67. {
  68. tests.push({
  69. site: '대구은행',
  70. today_kcal_24h: '대구은행',
  71. elec: 100,
  72. gas: 200,
  73. per_target : 300,
  74. });
  75. }
  76. works(tests);*/
  77. if (initialized === false) {
  78. var chartOption = BWA.ChartOptions.CenterMainDashboard;
  79. var chartOptionService = BWA.ChartOptions.ServiceEnergyUsageKC;
  80. //var chartOption2 = BWA.ChartOptions.RefrigeratorAnalysis;
  81. mainChart = mainChart(chartOption.getMainChartOptions());
  82. //mainChart = mainChart(chartOption2.getCopChartOptions($Code.TimeType.HOUR));
  83. yearElectricityUsageGauge = yearElectricityUsageGauge(chartOption.getYearElectricityUsageStatusChartOptions());
  84. yearGasUsageGauge = yearGasUsageGauge(chartOption.getYearGasUsageStatusChartOptions());
  85. yearEnergyUsageGauge = yearEnergyUsageGauge(chartOption.getYearTotalEnergyUsageStatusChartOptions());
  86. gaugeDataOptions[FT.ELECTRICITY] = {
  87. gauge: yearElectricityUsageGauge,
  88. max: ELECTRICITY_YEAR_MAX,
  89. value: yearElectricityUsageValue
  90. };
  91. gaugeDataOptions[FT.GAS] = {
  92. gauge: yearGasUsageGauge,
  93. max: GAS_YEAR_MAX,
  94. value: yearGasUsageValue
  95. };
  96. serviceTypesDataSource.filter([
  97. ['ServiceTypeId', '<', 100]
  98. ]);
  99. var whenPromise = $.when(fuelTypesDataSource.load(),
  100. factorCo2DataSource.load(),
  101. factorToeDataSource.load(),
  102. serviceTypesDataSource.load())
  103. .then(function (dbfuelTypes, dbfactorsCo2, dbfactorsToe, dbServieType) {
  104. factorCo2 = BWA.Bems.refineFactorCo2DataArray(dbfactorsCo2[0]);
  105. factorToe = BWA.Bems.refineFactorToeDataArray(dbfactorsToe[0]);
  106. factorKcal = BWA.Bems.refineFactorKCalDataArray(dbfactorsToe[0]);
  107. serviceType = dbServieType[0];
  108. chartOptionService.MakeSeries(serviceType);
  109. chartPieDaySU = chartPieDaySU(chartOptionService.getPieChartDayOptions());
  110. chartBarDaySU = chartBarDaySU(chartOptionService.getBarChartDayOptions());
  111. visiblePopup(true);
  112. CenterDataLoad();
  113. timer = setInterval(function () {
  114. var now = new Date();
  115. if ((now.getMinutes() % 15 == 0) && (now.getSeconds() == 59)) {
  116. //if (now.getSeconds() == 59) {
  117. CenterDataLoad();
  118. //SelectSite(CurrSiteData);
  119. }
  120. }, 1000);
  121. });
  122. initialized = true;
  123. }
  124. }
  125. function loadCircularGaugeDatas(data) {
  126. // 파라미터 값들을 로드
  127. var startDateInYear = moment().startOf('year'),
  128. endDateInYear = moment();
  129. var param =
  130. {
  131. SiteId: data.site,
  132. BuildingId: 1, // 의미없음
  133. FuelType: 1, // 의미없음
  134. StartDate: startDateInYear,
  135. EndDate: endDateInYear
  136. };
  137. $.when(BWA.api.post('BemsMonitoringPointHistory/GetPrediction', param)) // 오늘,이달,금년 모두 한번에 온다
  138. .done(function (goals) {
  139. //ELECTRICITY_DAY_MAX = goals[0];
  140. //GAS_DAY_MAX = goals[1];
  141. //WATER_DAY_MAX = goals[2];
  142. //ELECTRICITY_MONTH_MAX = goals[3];
  143. //GAS_MONTH_MAX = goals[4];
  144. //WATER_MONTH_MAX = goals[5];
  145. ELECTRICITY_YEAR_MAX = goals[6];
  146. //2017 01 09 가스 목표량은 Kw 이다 해서 아래와 같이 처리한다 hcLee
  147. //GAS_YEAR_MAX = goals[7];
  148. GAS_YEAR_MAX = factorToe.calculate(goals[7], FC.ELECTRICITY) / factorToe[FC.GAS].pureFactor;
  149. WATER_YEAR_MAX = goals[8];
  150. gaugeDataOptions[FT.ELECTRICITY].max = ELECTRICITY_YEAR_MAX;
  151. gaugeDataOptions[FT.GAS].max = GAS_YEAR_MAX;
  152. //gaugeDataOptions[FT.WATER].max = WATER_YEAR_MAX;
  153. var promises = [];
  154. var param =
  155. {
  156. SiteId: data.site,
  157. TimeIntervalType: TIT.YEAR,
  158. FacilityTypeId: FT.ELECTRICITY,
  159. FacilityCode: FC.ELECTRICITY,
  160. FormulaId: F[FT.ELECTRICITY].TOTAL_ELECTRICITY_AMOUNT,
  161. StartDate: $G.dateTime(startDateInYear),
  162. EndDate: $G.dateTime(endDateInYear),
  163. };
  164. promises.push(BWA.api.get('BemsFormula/Calculation', param));
  165. param.FacilityTypeId = FT.GAS;
  166. param.FacilityCode = FC.GAS;
  167. param.FormulaId = F[FT.GAS].TOTAL_GAS_AMOUNT;
  168. promises.push(BWA.api.get('BemsFormula/Calculation', param));
  169. param.FacilityTypeId = FT.WATER;
  170. param.FacilityCode = FC.WATER;
  171. param.FormulaId = F[FT.WATER].TOTAL_WATER_AMOUNT;
  172. promises.push(BWA.api.get('BemsFormula/Calculation', param));
  173. $.when.apply(this, promises).done(function (e, g, w) {
  174. var V = (e[0].length == 1) ? e[0][0].Value : 0;
  175. gaugeDataOptions[FT.ELECTRICITY].gauge().value((V == 0) ? 0 : V / gaugeDataOptions[FT.ELECTRICITY].max * 100);
  176. gaugeDataOptions[FT.ELECTRICITY].value(V);
  177. V = (g[0].length == 1) ? g[0][0].Value : 0;
  178. gaugeDataOptions[FT.GAS].gauge().value((V == 0) ? 0 : V / gaugeDataOptions[FT.GAS].max * 100);
  179. gaugeDataOptions[FT.GAS].value(V);
  180. var maxCo2 = factorCo2.calculate(ELECTRICITY_YEAR_MAX, FC.ELECTRICITY) + factorCo2.calculate(GAS_YEAR_MAX, FC.GAS) + factorCo2.calculate(WATER_YEAR_MAX, FC.WATER);
  181. var Co2Electricity = factorCo2.calculate(yearElectricityUsageValue(), FC.ELECTRICITY);
  182. var Co2Gas = factorCo2.calculate(yearGasUsageValue(), FC.GAS);
  183. V = (w[0].length == 1) ? w[0][0].Value : 0;
  184. var Co2 = Co2Electricity + Co2Gas + factorCo2.calculate(V, FC.WATER);
  185. //if (V == 0) yearEnergyUsageGauge().value(0); // cyim 2016.12.08 데이타가 없으면 게이지 값을 초기화
  186. if (Co2 == 0 || maxCo2 == 0) yearEnergyUsageGauge().value(0); // 버그수정 hcLee 2017 02 16
  187. else yearEnergyUsageGauge().value(Co2 / maxCo2 * 100);
  188. $('#yearCO2').text(Math.round(Co2 * 100) / 100);
  189. });
  190. });
  191. //여기서 전체 Co2별도 계산 hcLee 2015 06 29
  192. //rateGauges[DAY_CO2_USAGE].setValue(1.1);
  193. //rateGauges[MONTH_CO2_USAGE].setValue(2.2);
  194. //rateGauges[YEAR_CO2_USAGE].setValue(3.3);
  195. //});
  196. }
  197. function loadTotalCo2Month(data) {
  198. var now = new Date();
  199. var startDate, endDate;
  200. var monthMoment;
  201. monthMoment = moment().month(now.getMonth());
  202. startDate = monthMoment.startOf('month');
  203. endDate = monthMoment.clone().endOf('month');
  204. var promises = [];
  205. var param =
  206. {
  207. SiteId: data.site,
  208. TimeIntervalType: TIT.MONTH,
  209. FacilityTypeId: FT.ELECTRICITY,
  210. FacilityCode: FC.ELECTRICITY,
  211. FormulaId: F[FT.ELECTRICITY].TOTAL_ELECTRICITY_AMOUNT,
  212. StartDate: $G.dateTime(startDate),
  213. EndDate: $G.dateTime(endDate),
  214. };
  215. promises.push(BWA.api.get('BemsFormula/Calculation', param));
  216. param.FacilityTypeId = FT.GAS;
  217. param.FacilityCode = FC.GAS;
  218. param.FormulaId = F[FT.GAS].TOTAL_GAS_AMOUNT;
  219. promises.push(BWA.api.get('BemsFormula/Calculation', param));
  220. param.FacilityTypeId = FT.WATER;
  221. param.FacilityCode = FC.WATER;
  222. param.FormulaId = F[FT.WATER].TOTAL_WATER_AMOUNT;
  223. promises.push(BWA.api.get('BemsFormula/Calculation', param));
  224. $.when.apply(this, promises).done(function (e, g, w) {
  225. var ee = (e[0].length == 1) ? e[0][0].Value : 0;
  226. var gg = (g[0].length == 1) ? g[0][0].Value : 0;
  227. var ww = (w[0].length == 1) ? w[0][0].Value : 0;
  228. var thisMonthCo2 = factorCo2.calculate(ee, FC.ELECTRICITY) + factorCo2.calculate(gg, FC.GAS) + factorCo2.calculate(ww, FC.WATER);
  229. $('#monthCO2').text(Math.round(thisMonthCo2 * 100) / 100);
  230. //yearEnergyUsageGauge().value(Co2 / maxCo2 * 100);
  231. });
  232. }
  233. function getChartDataFromDataSources2(loadedDataSources, barDataArray, pieDataArray, timeFormat) {
  234. var calculate = factorKcal.calculate;
  235. var sums = new Array(serviceType.length);
  236. for (var v = 0; v < sums.length; v++) sums[v] = 0;
  237. // 미리 준비한다.
  238. var Datas = new Array();
  239. _.each(loadedDataSources, function (array, i) {
  240. _.each(array, function (x) {
  241. if (i == 0) {
  242. var data = {
  243. DateTime: timeFormat == 'M' ? BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) : moment(x.DateTime).format(timeFormat),
  244. };
  245. var b = (function (data) {
  246. var ret;
  247. for (var d = 0; d < Datas.length; d++) {
  248. if (Datas[d].DateTime == data.DateTime) return false;
  249. }
  250. return true;
  251. })(data);
  252. if (b) {
  253. for (var s = 1; s < serviceType.length; s++) {
  254. var fieldName = serviceType[s].Name();
  255. data[fieldName] = 0;
  256. }
  257. Datas.push(data);
  258. }
  259. }
  260. else
  261. return false;
  262. });
  263. });
  264. _.each(loadedDataSources, function (array, i) {
  265. _.each(array, function (x) {
  266. var fieldName = serviceType[x.ServiceType].Name();
  267. _.each(Datas, function (d) {
  268. if (timeFormat == 'M') {
  269. if (d.DateTime == BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate())) {
  270. d[fieldName] += x.Value;
  271. }
  272. }
  273. else {
  274. if (d.DateTime == moment(x.DateTime).format(timeFormat)) {
  275. d[fieldName] += x.Value;
  276. }
  277. }
  278. });
  279. sums[x.ServiceType] += x.Value;
  280. });
  281. });
  282. _.each(Datas, function (x) {
  283. barDataArray.push(x);
  284. });
  285. _.each(sums, function (x, i) {
  286. if (i > 0)
  287. pieDataArray.push({
  288. FuelTypeName: serviceType[i].Name(),
  289. Value: x
  290. });
  291. });
  292. }
  293. function loadDailyEnergyUsage(sitedata, year, month) {
  294. var startDate, endDate;
  295. var monthMoment;
  296. monthMoment = moment(year).month(month - 1);
  297. startDate = monthMoment.startOf('month');
  298. endDate = monthMoment.clone().endOf('month');
  299. var commonParameters = {
  300. SiteId: sitedata.site,
  301. TimeIntervalType: TIT.DAY,
  302. StartDate: startDate,
  303. EndDate: endDate
  304. };
  305. var pointHistoryParameters = {
  306. BuildingId: 0,
  307. FloorId: null,
  308. ZoneId: null,
  309. FuelTypeId: null,
  310. };
  311. var promises = [];
  312. pointHistoryParameters.FuelTypeId = -1;
  313. //energyUsageStatusGet.siteId = sitedata.site;
  314. promises.push(energyUsageStatusGet.apiGet(_.extend(pointHistoryParameters, commonParameters)));
  315. $.when.apply(this, promises).done(function (v) {
  316. var barDataArray = [];
  317. var pieDataArray = [];
  318. getChartDataFromDataSources2(v, barDataArray, pieDataArray, 'D');
  319. var options = BWA.ChartOptions.ServiceEnergyUsageKC.getBarChartDayOptions();
  320. options.dataSource = barDataArray;
  321. chartBarDaySU().option(null);
  322. chartBarDaySU().option(options);
  323. chartPieDaySU().option('dataSource', pieDataArray);
  324. visiblePopup(false);
  325. $('#st1').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 사용 현황');
  326. $('#st2').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 전체 사용량 비율');
  327. $('#st3').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 사용량');
  328. $('#st4').text('kcal환산 용도별 사용 현황');
  329. $('#st5').text('kcal환산 용도별 전체 사용량 비율');
  330. $('#st6').text('kcal환산 용도별 사용량');
  331. })
  332. .fail(function (error) {
  333. visiblePopup(false);
  334. });
  335. }
  336. function loadDailyEnergyUsage_OLD(sitedata, year, month) {
  337. //2016 02 26
  338. var startDate, endDate;
  339. var monthMoment;
  340. monthMoment = moment(year).month(month - 1);
  341. startDate = monthMoment.startOf('month');
  342. endDate = monthMoment.clone().endOf('month');
  343. var promises = [];
  344. _.each(FuelType, function (x) {
  345. var param =
  346. {
  347. SiteId: sitedata.site,
  348. TimeIntervalType: TIT.DAY,
  349. StartDate: $G.dateTime(startDate),
  350. EndDate: $G.dateTime(endDate),
  351. BuildingId: 0,
  352. FloorId: null,
  353. ZoneId: null,
  354. FuelTypeId: x.FuelTypeId()
  355. };
  356. promises.push(BWA.api.get('BemsMonitoringPointHistory/ServiceType', param));
  357. });
  358. $.when.apply(this, promises).done(function () {
  359. var barDataArray = [];
  360. var pieDataArray = [];
  361. getChartDataFromDataSources(arguments, barDataArray, pieDataArray, 'D');
  362. //2015 11 23 차트 다시 그리지 않는 문제
  363. //chartBarDay().option('dataSource', barDataArray); // 대신 아래3줄로 변경
  364. var options = BWA.ChartOptions.ServiceEnergyUsageKC.getBarChartDayOptions();
  365. options.dataSource = barDataArray;
  366. chartBarDaySU().option(null);
  367. chartBarDaySU().option(options);
  368. chartPieDaySU().option('dataSource', pieDataArray);
  369. visiblePopup(false);
  370. $('#st2_CM').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 전체 사용량 비율');
  371. $('#st3_CM').text(monthMoment._d.getFullYear() + '년 ' + (monthMoment._d.getMonth() + 1) + '월 kcal환산 용도별 사용량');
  372. })
  373. .fail(function (error) {
  374. visiblePopup(false);
  375. });
  376. }
  377. function getChartDataFromDataSources(loadedDataSources, barDataArray, pieDataArray, timeFormat) {
  378. var calculate = factorKcal.calculate;
  379. _.each(loadedDataSources, function (array, i) {
  380. _.each(array[0], function (x) {
  381. x.Value = calculate(x.Value, FuelType[i].FuelTypeId());
  382. });
  383. });
  384. //var sums =new Number[8];
  385. var sums = new Array(serviceType.length);
  386. //var sums = new Array(8);
  387. for (var v = 0; v < sums.length; v++) sums[v] = 0;
  388. // 미리 준비한다.
  389. var Datas = new Array();
  390. _.each(loadedDataSources, function (array, i) {
  391. _.each(array[0], function (x) {
  392. if (i == 0) {
  393. var data = {
  394. //DateTime: moment(x.DateTime).format(timeFormat),
  395. DateTime: timeFormat == 'M' ? BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()) : moment(x.DateTime).format(timeFormat),
  396. };
  397. var b = (function (data) {
  398. var ret;
  399. for (var d = 0; d < Datas.length; d++) {
  400. if (Datas[d].DateTime == data.DateTime) return false;
  401. }
  402. return true;
  403. })(data);
  404. if (b) {
  405. for (var s = 1; s < serviceType.length; s++) {
  406. var fieldName = serviceType[s].Name();
  407. data[fieldName] = 0;
  408. }
  409. Datas.push(data);
  410. }
  411. }
  412. else
  413. return false;
  414. });
  415. });
  416. _.each(loadedDataSources, function (array, i) {
  417. _.each(array[0], function (x) {
  418. var fieldName = serviceType[x.ServiceType].Name();
  419. _.each(Datas, function (d) {
  420. if (timeFormat == 'M') {
  421. if (d.DateTime == BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate())) {
  422. d[fieldName] += x.Value;
  423. }
  424. }
  425. else {
  426. if (d.DateTime == moment(x.DateTime).format(timeFormat)) {
  427. d[fieldName] += x.Value;
  428. }
  429. }
  430. });
  431. sums[x.ServiceType] += x.Value;
  432. //barDataArray.push(data);
  433. });
  434. });
  435. _.each(Datas, function (x) {
  436. barDataArray.push(x);
  437. });
  438. //alert(serviceType[0].Name);
  439. _.each(sums, function (x, i) {
  440. if (i > 0)
  441. pieDataArray.push({
  442. FuelTypeName: serviceType[i].Name(),
  443. Value: x
  444. });
  445. });
  446. }
  447. function CenterDataLoad() {
  448. var siteDatas = [], tempsiteDatas = [];
  449. var startDateInYear = moment().startOf('year'), endDateInYear = moment();
  450. var param =
  451. {
  452. TimeIntervalType: TIT.YEAR,
  453. StartDate: $G.dateTime(startDateInYear),
  454. EndDate: $G.dateTime(endDateInYear)
  455. };
  456. $.when(BWA.api.post('BemsMonitoringPointHistory/GetCenterSiteData', param)) // 오늘,이달,금년 모두 한번에 온다
  457. .done(function (datas) {
  458. //console.log(datas);
  459. _.each(datas, function (s) {
  460. // 2017 01 11
  461. var gasTarget = factorToe.calculate(s.gas_target, FC.ELECTRICITY) / factorToe[FC.GAS].pureFactor;
  462. var tt = (factorKcal.calculate(s.elec_current, FuelType[0].FuelTypeId()) + factorKcal.calculate(s.gas_current, FuelType[1].FuelTypeId())) /
  463. (factorKcal.calculate(s.elec_target, FuelType[0].FuelTypeId()) + factorKcal.calculate(gasTarget, FuelType[1].FuelTypeId())) * 100;
  464. tt = 100 - tt;
  465. tt = Math.round(tt * 100) / 100;
  466. if (isNaN(tt)) tt = 0; // 정상코드
  467. //if (isNaN(tt)) tt = -10;
  468. var todaykcal = [];
  469. var i = 0;
  470. _.each(s.e_value_list, function (e) {
  471. todaykcal.push({
  472. DateTime: e.DateTime,
  473. Value: Math.round((factorKcal.calculate(e.Value, FuelType[0].FuelTypeId()) + factorKcal.calculate(s.g_value_list[i].Value, FuelType[1].FuelTypeId())) * 100) / 100,
  474. });
  475. i++;
  476. });
  477. siteDatas.push({
  478. site: s.siteid,
  479. name: s.name,
  480. //today_kcal_24h: '대구은행',
  481. elec: $NumberFormat(s.elec_current),
  482. gas: $NumberFormat(s.gas_current),
  483. elec_target: s.elec_target,
  484. gas_target: s.gas_target,
  485. //total_target: Math.abs(100-tt),
  486. total_target: tt,
  487. // today_e_list: s.e_value_list,
  488. // today_g_list: s.g_value_list,
  489. today_value_list: todaykcal,
  490. });
  491. });
  492. for (var i = 0; i < CmSite.length; i++) {
  493. for (var j = 0; j < siteDatas.length; j++) {
  494. if (CmSite[i].SiteId() == siteDatas[j].site) {
  495. tempsiteDatas.push({
  496. site: siteDatas[j].site,
  497. name: siteDatas[j].name,
  498. elec: siteDatas[j].elec,
  499. gas: siteDatas[j].gas,
  500. elec_target: siteDatas[j].elec_target,
  501. gas_target: siteDatas[j].gas_target,
  502. total_target: siteDatas[j].total_target,
  503. today_value_list: siteDatas[j].today_value_list,
  504. });
  505. break;
  506. }
  507. }
  508. }
  509. works(tempsiteDatas);
  510. if (CurrSiteData == undefined) CurrSiteData = tempsiteDatas[0];
  511. SelectSite(CurrSiteData);
  512. });
  513. }
  514. function setUpTitle(title) {
  515. $('#borad-title').html(title);
  516. $('#site-name').html(sitename);
  517. }
  518. function SelectSite(data) {
  519. setUpTitle(data.name);
  520. visiblePopup(true);
  521. var promises = [];
  522. var endDate = moment(); endDate.endOf('day')
  523. //return moment(date).subtract(number, unit).toDate();
  524. var startDate = moment().subtract(30, 'days'); startDate.startOf('day');
  525. //var lastWeekMoment = moment().subtract(7, 'days');
  526. var param =
  527. {
  528. SiteId: data.site,
  529. TimeIntervalType: TIT.DAY,
  530. FacilityTypeId: FT.ELECTRICITY,
  531. FacilityCode: FC.ELECTRICITY,
  532. FormulaId: F[FT.ELECTRICITY].TOTAL_ELECTRICITY_AMOUNT,
  533. StartDate: $G.dateTime(startDate),
  534. EndDate: $G.dateTime(endDate),
  535. };
  536. promises.push(BWA.api.get('BemsFormula/Calculation', param));
  537. var param =
  538. {
  539. SiteId: data.site,
  540. TimeIntervalType: TIT.DAY,
  541. FacilityTypeId: FT.GAS,
  542. FacilityCode: FC.GAS,
  543. FormulaId: F[FT.GAS].TOTAL_GAS_AMOUNT,
  544. StartDate: $G.dateTime(startDate),
  545. EndDate: $G.dateTime(endDate),
  546. };
  547. promises.push(BWA.api.get('BemsFormula/Calculation', param));
  548. $.when.apply(this, promises)
  549. //$.when(BWA.api.post('BemsFormula/Calculation', param)) // 오늘,이달,금년 모두 한번에 온다
  550. .done(function (e, g) {
  551. var dataArray = [];
  552. _.each(e[0], function (x) {
  553. dataArray.push({
  554. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(TIT.DAY, moment(x.DateTime).toDate()),
  555. eValue: x.Value
  556. });
  557. });
  558. _.each(g[0], function (x) {
  559. dataArray.push({
  560. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(TIT.DAY, moment(x.DateTime).toDate()),
  561. gValue: x.Value
  562. });
  563. });
  564. var options = BWA.ChartOptions.CenterMainDashboard.getMainChartOptions();
  565. options.dataSource = dataArray;
  566. mainChart().option(options);
  567. loadDailyEnergyUsage(data, endDate.toDate().getFullYear().toString(), (endDate.toDate().getMonth() + 1).toString());
  568. loadCircularGaugeDatas(data);
  569. loadTotalCo2Month(data);
  570. })
  571. //loadDailyEnergyUsage(data, $G.dateTime(endDate).getFullYear().toString(), ($G.dateTime(endDate).getMonth() + 1).toString());
  572. };
  573. var viewModel = $.extend(BWA.CommonView.create(
  574. params, viewInfo, null, null, handleViewShown), {
  575. workDataGridOptions: utils.datagrid.defaultOptions({
  576. onCellClick: function (object) {
  577. if (object.columnIndex == 5 && object.rowType == 'data') {
  578. var newWindow = window.open("about:blank");
  579. switch (object.values[5]) {
  580. case 1: //대구은행 제2본점
  581. newWindow.location.href = 'http://10.10.30.3:8081';
  582. break;
  583. case 2://서울시립 보라매병원
  584. newWindow.location.href = 'http://10.10.20.2:8081';
  585. break;
  586. case 6://아이파크몰
  587. newWindow.location.href = 'http://10.10.60.3:8081';
  588. break;
  589. case 11://대구은행 제1본점
  590. newWindow.location.href = 'http://10.10.80.4:8081';
  591. break;
  592. case 10://정선 파크로쉬
  593. newWindow.location.href = 'http://10.10.50.2:8081';
  594. break;
  595. }
  596. }
  597. },
  598. handleDataGridRowClick: function (id, dataGrid, clickRow) { // function () {
  599. dataGrid.clearSelection();
  600. CurrSiteData = clickRow.data;
  601. //console.log(data);
  602. SelectSite(CurrSiteData);
  603. },
  604. selection: {
  605. mode: 'single'
  606. },
  607. rowAlternationEnabled: true,
  608. //useNumberColumn: true,
  609. dataSource: works,
  610. datagridId: 'gridContainerCD',
  611. paging: {
  612. enabled: false,
  613. pageSize: 6
  614. },
  615. pager: {
  616. //allowedPageSizes: true,
  617. showPageSizeSelector: false,
  618. allowedPageSizes: [6],
  619. visible: false
  620. },
  621. columns: [
  622. { dataField: 'name', caption: '현장명', width: '25%', alignment: 'center' },
  623. //{ caption: '에너지 사용량', width: '30%', alignment: 'center' },
  624. {
  625. width: '25%',
  626. caption: "금일 에너지 사용량",
  627. alignment: 'left',
  628. //caption: "금일 전기 현황",
  629. //width: 155,
  630. cellTemplate: function (container, options) {
  631. container.addClass("chart-cell");
  632. $("<div />").dxSparkline({
  633. dataSource: options.data.today_value_list,
  634. argumentField: "DateTime",
  635. valueField: "Value",
  636. type: "line",
  637. showMinMax: true,
  638. lineColor: "#565077",
  639. maxColor: "#f00",
  640. minColor: "#2ab71b",
  641. pointSize: 2,
  642. size: {
  643. width: 'auto',
  644. height: 30
  645. },
  646. tooltip: {
  647. enabled: true
  648. }
  649. }).appendTo(container);
  650. }
  651. },
  652. /* {
  653. width: '20%',
  654. //caption: "에너지 사용량",
  655. caption: "금일 가스 현황",
  656. //width: 155,
  657. cellTemplate: function (container, options) {
  658. container.addClass("chart-cell");
  659. $("<div />").dxSparkline({
  660. dataSource: options.data.today_g_list,
  661. argumentField: "DateTime",
  662. valueField: "Value",
  663. type: "line",
  664. showMinMax: true,
  665. lineColor: "#565077",
  666. maxColor: "#f00",
  667. minColor: "#2ab71b",
  668. pointSize: 2,
  669. size: {
  670. width: 140,
  671. height: 30
  672. },
  673. tooltip: {
  674. enabled: true
  675. }
  676. }).appendTo(container);
  677. }
  678. },*/
  679. { dataField: 'elec', caption: '금년 전기 (kWh)', width: '17%', alignment: 'right' },
  680. { dataField: 'gas', caption: '금년 가스 (㎥)', width: '17%', alignment: 'right' },
  681. { dataField: 'total_target', caption: '목표대비 (%)', width: '17%', alignment: 'center' },
  682. {
  683. dataField: 'site', caption: '이동', width: '10%', alignment: 'center',
  684. customizeText: function (cellInfo) {
  685. return "이동";
  686. }
  687. /*
  688. cellTemplate: function (container, options) {
  689. $("<div />").dxButton({
  690. //text: options.data.name,
  691. site: options.data.site,
  692. text: '이동',
  693. onClick: function (e) {
  694. var newWindow = window.open("about:blank");
  695. //원래 코드 2017 02 09에 막음, 각각의 사이트를 별도로 구성하기 때문에 쿠키및 자동로그인 기능 사용불가
  696. //newWindow.location.href = '/index.html#Login';
  697. //$.cookie('id', 'admin');
  698. //$.cookie('password', 'kanu123');
  699. //$.cookie('siteId', options.data.site);
  700. //$.cookie('fromCenter', true);
  701. }
  702. }).appendTo(container);
  703. }*/
  704. },
  705. ],
  706. onCellPrepared: function (options) {
  707. if (options.columnIndex == 4 && options.rowType == 'data') {
  708. var fieldData = options.value,
  709. fieldHtml = "";
  710. if (fieldData != 0) {
  711. options.cellElement.addClass((fieldData < 0) ? "inc" : "dec");
  712. }
  713. fieldHtml += "<span class='current-value'>" +
  714. "</span> <div class='diff-container'><span class='diff'>" +
  715. Math.abs(fieldData) +
  716. "</span></div>";
  717. options.cellElement.html(fieldHtml);
  718. /*
  719. options.cellElement.addClass((fieldData < 0 ) ? "inc" : "dec");
  720. //if (fieldData && fieldData > 0) {
  721. //options.cellElement.addClass((fieldData.diff > 0) ? "inc" : "dec");
  722. fieldHtml += "<span class='current-value'>" +
  723. //Globalize.formatCurrency(fieldData.value, "USD") +
  724. "</span> <span class='diff'>" +
  725. Math.abs(fieldData) +
  726. //fieldData +
  727. //Math.abs(fieldData.diff).toFixed(2) +
  728. " </span>";
  729. //} else {
  730. //fieldHtml = fieldData.value;
  731. //}
  732. options.cellElement.html(fieldHtml);*/
  733. }
  734. },
  735. }),
  736. refreshList: refreshList,
  737. viewShowing: handleViewShowing,
  738. viewHidden: handleViewHidden,
  739. viewDisposing: handleViewDisposing,
  740. });
  741. $HourGlassPopup(viewModel, visiblePopup);
  742. return viewModel;
  743. };