f67334b82ff4ac6bf7c7da3725a166271d87ad01.svn-base 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934
  1. BemsWebApplication.RefrigeratorAnalysis = function(params, viewInfo) {
  2. "use strict";
  3. var initialized = false,
  4. shouldReload = false,
  5. datagrid = null,
  6. check_A = ko.observable(false),
  7. check_R = ko.observable(false),
  8. //check_s = ko.observable(true),
  9. currentTabIndex = ko.observable(0),
  10. facilityViewModel = new BWA.CmFacilityViewModel(),
  11. dataSource;
  12. var m_Facility;
  13. var multiViewItems = [{
  14. template: 'mainCharts'
  15. }, {
  16. template: 'subCharts',
  17. check_A: check_A,
  18. check_R: check_R,
  19. //check_s : check_s,
  20. }
  21. ];
  22. //var buttonInstance = $('#check_input').dxChechkBox('instance');
  23. var facilityDataSource = BWA.db.createDataSource('CmFacility'),
  24. facilitiesForSearch = ko.observableArray(),
  25. facilityCodeForSearch = ko.observable(0),
  26. deferredForSearch = new $.Deferred();
  27. var dataArraycoolingApproaches = [];
  28. var dataSourceCop = ko.observableArray(),
  29. dataSourceLoadRate = ko.observableArray(),
  30. dataSourceElectricityLoadRate = ko.observableArray(),
  31. dataSourceTemperatureCop = ko.observableArray(),
  32. dataSourceCoolingApproach = ko.observableArray();
  33. //todayValue = ko.observable(0)
  34. var visiblePopup = ko.observable(false);
  35. var formulaGet = new BWA.Chart.FormulaGet(BWA.UserInfo.SiteId());
  36. //var timeBoxForSearch = BWA.SearchView.createDateTimeBox();
  37. // cyim 2016.08.22 : 성능분석 그래프의 경우 시간 데이타만 표시되어야 한다
  38. var timeBoxForSearch = BWA.SearchView.createDateTimeBox($G.TimeTypesForHourOnly, null, false);
  39. var chartCop = BWA.Chart.Instance('chartCop', 'dxChart'),
  40. chartLoadRate = BWA.Chart.Instance('chartLoadRate', 'dxChart'),
  41. chartGasLoadRate = BWA.Chart.Instance('chartGasLoadRate', 'dxChart'),
  42. chartElectricityLoadRate = BWA.Chart.Instance('chartElectricityLoadRate', 'dxChart'),
  43. chartTemperatureCop = BWA.Chart.Instance('chartTemperatureCop', 'dxChart'),
  44. chart6 = BWA.Chart.Instance('chart6', 'dxChart'),
  45. chartReturnEfficiency = BWA.Chart.Instance('chartReturnEfficiency', 'dxChart'),
  46. chartATF = BWA.Chart.Instance('chartATF', 'dxChart'),
  47. chartCopLoadRate = BWA.Chart.Instance('chartCopLoadRate', 'dxChart'),
  48. chartEFFSW = BWA.Chart.Instance('chartEFFSW', 'dxChart'),
  49. chartCoolingApproach = BWA.Chart.Instance('chartCoolingApproach', 'dxChart')
  50. //chartCoolingApproach_ChangeSeries = BWA.Chart.Instance('chartCoolingApproach', 'dxChart')
  51. ;
  52. var m = moment();
  53. dataSourceCop([
  54. { DateTime: new Date(m.year(), m.month(), 1), Value: 50 },
  55. { DateTime: new Date(m.year(), m.month(), 2), Value: 50 },
  56. { DateTime: new Date(m.year(), m.month(), 3), Value: 60 },
  57. { DateTime: new Date(m.year(), m.month(), 4), Value: 80 },
  58. { DateTime: new Date(m.year(), m.month(), 5), Value: 100 },
  59. { DateTime: new Date(m.year(), m.month(), 6), Value: 40, },
  60. { DateTime: new Date(m.year(), m.month(), 7), Value: 120 },
  61. { DateTime: new Date(m.year(), m.month(), 31), Value: 120 }
  62. ]);
  63. // 추가 2015 04 20 hcLee ->
  64. var CODE = $Code,
  65. FuelType = CODE.FuelType,
  66. FT = CODE.FacilityType,
  67. FC = CODE.FacilityCode,
  68. F = CODE.Formula,
  69. TIT = CODE.TimeIntervalType;
  70. // 추가 2015 04 20 hcLee <-
  71. var chartLayout = new BWA.ChartLayout({
  72. divs: [[{ //hcLee 2015 07 20 V14.1-V15.1
  73. id: 'regrigeratorDetail'
  74. }, {
  75. id: 'cop',
  76. chartId: 'chartCop'
  77. }, {
  78. id: 'loadRate',
  79. chartId: 'chartLoadRate'
  80. }, {
  81. id: 'GasLoadRate',
  82. chartId: 'chartGasLoadRate'
  83. }, {
  84. id: 'electricityLoadRate',
  85. chartId: 'chartElectricityLoadRate'
  86. }, {
  87. id: 'temperatureCop',
  88. chartId: 'chartTemperatureCop'
  89. }], [{
  90. id: 'b6',
  91. chartId: 'chart6'
  92. },
  93. {
  94. id: 'returnEfficiency',
  95. chartId: 'chartReturnEfficiency'
  96. }, {
  97. id: 'ATF',
  98. chartId: 'chartATF'
  99. },
  100. {
  101. id: 'CopLoadRate',
  102. chartId: 'chartCopLoadRate'
  103. },
  104. {
  105. id: 'EFFSW',
  106. chartId: 'chartEFFSW'
  107. }, {
  108. id: 'coolingApproach',
  109. chartId: 'chartCoolingApproach'
  110. }]
  111. ],
  112. multiViewOptions: {
  113. viewIndex: currentTabIndex,
  114. viewCount: 2,
  115. PageChanged: function () { // //hcLee 2015 07 20 V14.1-V15.1
  116. //alert(currentTabIndex());
  117. handleSearchInSearchView();
  118. },
  119. }
  120. });
  121. //dataMonthForBar(dataDayForBar());
  122. //dataDayForPie([
  123. // { FuelTypeName: '전기', Value: 320 },
  124. // { FuelTypeName: '가스', Value: 350 },
  125. // { FuelTypeName: '수도', Value: 360 },
  126. //]);
  127. //dataMonthForPie(dataDayForPie());
  128. function handleViewShown() {
  129. if (initialized === false) {
  130. var chartOption = BWA.ChartOptions.RefrigeratorAnalysis;
  131. // chart 설정, 최초 한번
  132. chartCop = chartCop(chartOption.getCopChartOptions($Code.TimeType.HOUR));
  133. chartLoadRate = chartLoadRate(chartOption.getLoadRateChartOptions($Code.TimeType.HOUR));
  134. //chartGasLoadRate = chartGasLoadRate(chartOption.getGasLoadRateChartOptions($Code.TimeType.HOUR));
  135. chartGasLoadRate = chartGasLoadRate(chartOption.getChart_3_Options($Code.TimeType.HOUR));
  136. chartElectricityLoadRate = chartElectricityLoadRate(chartOption.getElectricityLoadRateChartOptions($Code.TimeType.HOUR));
  137. chartTemperatureCop = chartTemperatureCop(chartOption.getTemperatureCopChartOptions($Code.TimeType.HOUR));
  138. chart6 = chart6(chartOption.getChart_678_Options($Code.TimeType.HOUR));
  139. chartReturnEfficiency = chartReturnEfficiency(chartOption.getChart_678_Options($Code.TimeType.HOUR));
  140. chartATF = chartATF(chartOption.getChart_678_Options($Code.TimeType.HOUR));
  141. chartCopLoadRate = chartCopLoadRate(chartOption.getCopLoadRateChartOptions($Code.TimeType.HOUR));
  142. chartEFFSW = chartEFFSW(chartOption.getEFFSWChartOptions($Code.TimeType.HOUR));
  143. chartCoolingApproach = chartCoolingApproach(chartOption.getCoolingApproachChartOptions($Code.TimeType.HOUR));
  144. initialized = true;
  145. }
  146. //hcLee 2016 07 12
  147. timeBoxForSearch.setDefaultDate();
  148. //timeBoxForSearch.hour();
  149. var eq = BWA.DataUtil.constructEqualFilter;
  150. facilityDataSource.filter([
  151. eq('SiteId', BWA.UserInfo.SiteId()),
  152. 'and',
  153. eq('FacilityTypeId', $Code.FacilityType.REFRIGERATOR) // 냉동기($Code.FacilityType.REFRIGERATOR)
  154. ]);
  155. facilityDataSource.load().done(function (facilities) {
  156. facilitiesForSearch(facilities);
  157. if (_.isEmpty(facilities) === false) {
  158. var f = facilities[0]; // 첫번째 설비 그려주기 위해
  159. handleSelectedFacilityInSearchView(f);
  160. handleSearchInSearchView();
  161. var datagrid = $('#refrigeratorDataGridViewInSearchView').dxDataGrid('instance');
  162. if (_.has(datagrid, 'selectRows')) {
  163. datagrid.selectRows(f);
  164. }
  165. }
  166. });
  167. }
  168. $('#temperatureCop').css('visibility', 'hidden');
  169. $('#coolingApproach').css('margin-left', '10.5%');
  170. if (shouldReload) {
  171. //shouldReload = false;
  172. //dataSource.pageIndex(0);
  173. //dataSource.load();
  174. }
  175. function handleViewHidden() {
  176. //hideOverlay();
  177. // var dataGrid = $('#gridContainer').dxDataGrid('instance');
  178. // dataGrid.clearSelection();
  179. //chartLayout.multiViewOptions.viewCount = 1;
  180. //var view = $('#RefrigeratorAnalysisView');
  181. //view.
  182. //$('#RefrigeratorAnalysisView').sideOverlayVisible(false);
  183. //$('#RefrigeratorAnalysisView').paging.hideNextButton(true);
  184. //$('#RefrigeratorAnalysisView').paging.hideNextButton(true);
  185. var paging = BWA.ChartLayout.Paging;
  186. paging.sideOverlayVisible(false);
  187. //paging.hideNextButton(true);
  188. //paging.hidePrevButton(true);
  189. $SearchView.visibleObservable(false); // hcLee 2015 03 23
  190. visiblePopup(false);
  191. }
  192. function handleViewShowing() {
  193. }
  194. function refreshList() {
  195. //dataSource.pageIndex(0);
  196. //dataSource.load();
  197. }
  198. var searchViewOptions = {
  199. searchViewItems: [
  200. { id: 'FacilityCode', ignoreValue: 0, defaultValue: 0, value: facilityCodeForSearch, dataSource: facilitiesForSearch },
  201. ],
  202. promiseDataInSearchView: deferredForSearch.promise()
  203. };
  204. function handleSelectedFacilityInSearchView(facility) {
  205. m_Facility = facility;
  206. return;
  207. }
  208. function setChartElectricityByLoadRate(loadRateDataArray, electricityDataArray) {
  209. var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  210. loadRateDataArray, electricityDataArray, 'LoadRate', 'EV');
  211. //chartElectricityLoadRate().option('dataSource', dataArray);
  212. var options = BWA.ChartOptions.RefrigeratorAnalysis.getElectricityLoadRateChartOptions(timeBoxForSearch.type());
  213. //chartElectricityLoadRate().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  214. options.dataSource = dataArray;
  215. chartElectricityLoadRate().option(options);
  216. }
  217. function setChartGasByLoadRate(loadRateDataArray, gasDataArray) {
  218. var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  219. loadRateDataArray, gasDataArray, 'LoadRate', 'm');
  220. //chartGasLoadRate().option('dataSource', dataArray); // 아래 4줄로 변경
  221. var options = BWA.ChartOptions.RefrigeratorAnalysis.getGasLoadRateChartOptions(timeBoxForSearch.type());
  222. //chartGasLoadRate().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  223. options.dataSource = dataArray;
  224. chartGasLoadRate().option(options);
  225. }
  226. // 냉열원 생산열량
  227. function setChart_3(DataArray1, DataArray2, maxValueatf) {
  228. var dataArray = [];
  229. _.each(DataArray1, function (x) {
  230. dataArray.push({
  231. //DateTime: moment(x.DateTime).toDate(),
  232. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  233. kcal : x.Value
  234. });
  235. });
  236. _.each(DataArray2, function (x) {
  237. dataArray.push({
  238. //DateTime: moment(x.DateTime).toDate(),
  239. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  240. temp : x.Value
  241. });
  242. });
  243. var options = BWA.ChartOptions.RefrigeratorAnalysis.getChart_3_Options(timeBoxForSearch.type());
  244. if (maxValueatf != undefined) // 한축에 온도가 있는 경우
  245. options.valueAxis[0].tickInterval = Math.round(maxValueatf / 5) + 1;
  246. options.dataSource = dataArray;
  247. chartGasLoadRate().option(options);
  248. }
  249. function setChartCopByTemperature(temperatureDataArray, copDataArray, loadDataArray) {
  250. var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  251. temperatureDataArray, copDataArray, 'Temperature', 'Cop');
  252. var dataArray2 = BWA.Chart.getRelationDataArrayOnDateTime(
  253. temperatureDataArray, loadDataArray, 'Temperature', 'load');
  254. _.each(dataArray2, function (x) {
  255. dataArray.push(x);
  256. });
  257. //console.log(dataArray);
  258. //chartTemperatureCop().option('dataSource', dataArray);
  259. var options = BWA.ChartOptions.RefrigeratorAnalysis.getTemperatureCopChartOptions(timeBoxForSearch.type());
  260. //chartTemperatureCop().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  261. options.dataSource = dataArray;
  262. chartTemperatureCop().option(options);
  263. }
  264. function setChart_678(DataArray1, DataArray2, chart678) {
  265. var dataArray = [];
  266. _.each(DataArray1, function (x) {
  267. dataArray.push({
  268. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  269. kw : x.Value
  270. });
  271. });
  272. _.each(DataArray2, function (x) {
  273. dataArray.push({
  274. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  275. hz: x.Value
  276. });
  277. });
  278. var options = BWA.ChartOptions.RefrigeratorAnalysis.getChart_678_Options(timeBoxForSearch.type());
  279. options.dataSource = dataArray;
  280. chart678().option(options);
  281. }
  282. function setChartCopLoadRates(copDataArray, loadRateDataArray) {
  283. var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  284. copDataArray, loadRateDataArray, 'cop', 'LoadRate');
  285. //chartCopLoadRate().option('dataSource', dataArray);
  286. var options = BWA.ChartOptions.RefrigeratorAnalysis.getCopLoadRateChartOptions(timeBoxForSearch.type());
  287. //chartCopLoadRate().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  288. options.dataSource = dataArray;
  289. chartCopLoadRate().option(options);
  290. }
  291. function setChartReturnEfficiency(pkwDataArray, CoolAbtyDataArray) {
  292. var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  293. pkwDataArray, CoolAbtyDataArray, 'pkwh', 'CoolAbty');
  294. //chartReturnEfficiency().option('dataSource', dataArray);
  295. var options = BWA.ChartOptions.RefrigeratorAnalysis.getReturnEfficiencyChartOptions(timeBoxForSearch.type());
  296. //chartReturnEfficiency().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  297. options.dataSource = dataArray;
  298. chartReturnEfficiency().option(options);
  299. }
  300. function setChartATF(tempDataArray, atfDataArray, maxValueatf) {
  301. //var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  302. // tempDataArray, atfDataArray, 'temp', 'atf');
  303. var dataArray = [];
  304. _.each(tempDataArray, function (x) {
  305. dataArray.push({
  306. //DateTime: moment(x.DateTime).toDate(),
  307. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  308. temp: x.Value
  309. });
  310. });
  311. _.each(atfDataArray, function (x) {
  312. dataArray.push({
  313. //DateTime: moment(x.DateTime).toDate(),
  314. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  315. atf: x.Value
  316. });
  317. });
  318. //chartATF().option('dataSource', dataArray);
  319. var options = BWA.ChartOptions.RefrigeratorAnalysis.getATFChartOptions(timeBoxForSearch.type());
  320. //chartATF().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  321. options.valueAxis[0].tickInterval = Math.round(maxValueatf / 5)+1;
  322. options.dataSource = dataArray;
  323. chartATF().option(options);
  324. }
  325. function setChartEFFSW(effDataArray, swDataArray) {
  326. //var dataArray = BWA.Chart.getRelationDataArrayOnDateTime(
  327. // tempDataArray, atfDataArray, 'temp', 'atf');
  328. var dataArray = [];
  329. /*
  330. _.each(effDataArray, function (x) {
  331. dataArray.push({
  332. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  333. eff: x.Value
  334. });
  335. }); */
  336. _.each(swDataArray, function (x) {
  337. dataArray.push({
  338. //DateTime: moment(x.DateTime).toDate(),
  339. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  340. sw: x.Value
  341. });
  342. });
  343. //chartEFFSW().option('dataSource', dataArray);
  344. var options = BWA.ChartOptions.RefrigeratorAnalysis.getEFFSWChartOptions(timeBoxForSearch.type());
  345. //chartEFFSW().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  346. options.dataSource = dataArray;
  347. chartEFFSW().option(options);
  348. }
  349. function handleSearchInSearchView(filter, searchViewItems) {
  350. //console.log(filter);
  351. //console.log(searchViewItems);
  352. if (m_Facility == null) return;
  353. visiblePopup(true);
  354. var f = m_Facility.toJS();
  355. facilityViewModel.fromJS(f); // 선택한 설비
  356. //var timeIntervalType = $Code.TimeIntervalType.QUARTERMIN;
  357. var timeIntervalType = timeBoxForSearch.type();
  358. // $Code.FacilityType.REFRIGERATOR -> 이 화면은 냉동기 -> REFRIGERATOR: 2, 냉동기 (DB FacilityType 테이블 내용과 같아야 한다.)
  359. var formula = $Code.Formula[$Code.FacilityType.REFRIGERATOR]; // 1~ 6까지
  360. var formulaIds = _.values(formula);
  361. var date = timeBoxForSearch.getDate();
  362. /*
  363. timeBoxForSearch.type($Code.TimeIntervalType.DAY);
  364. timeIntervalType = $Code.TimeIntervalType.DAY;
  365. date.startDate = new Date(2015, 0, 1);
  366. date.endDate = new Date(2015, 11, 31);
  367. */
  368. // var startDate = moment().
  369. var promises = [];
  370. _.each(formulaIds, function (formulaId) {
  371. var p = formulaGet.apiGet({
  372. FacilityTypeId: f.FacilityTypeId,
  373. FacilityCode: f.FacilityCode, // 선택한 설비별 포뮬러를 가져온다
  374. FormulaId: formulaId,
  375. TimeIntervalType: timeIntervalType,
  376. StartDate: date.startDate,
  377. EndDate: date.endDate
  378. });
  379. promises.push(p);
  380. });
  381. // 외기 온도와 습도를 위해 추가 hcLee 2015 04 20 ->
  382. var commonParameters = {
  383. TimeIntervalType: timeBoxForSearch.type(),
  384. StartDate: date.startDate,
  385. EndDate: date.endDate
  386. };
  387. var temperatureParameters = {
  388. FacilityTypeId: FT.OUTDOOR,
  389. FacilityCode: FC.OUTDOOR,
  390. FormulaId: F[FT.OUTDOOR].TEMPERATURE,
  391. };
  392. var humidityParameters = _.extend({}, temperatureParameters, {
  393. FormulaId: F[FT.OUTDOOR].HUMIDITY,
  394. });
  395. promises.push(formulaGet.apiGet(_.extend(temperatureParameters, commonParameters)));
  396. promises.push(formulaGet.apiGet(_.extend(humidityParameters, commonParameters)));
  397. // 외기 온도와 습도를 위해 추가 hcLee 2015 04 20 <-
  398. $.when.apply(this, promises)
  399. .done(function (cops, loadRates, coolingApproaches,
  400. ratedCapacities, electricities, temperatures, gas, pkwh, CoolAbty, atf, eff, sw,
  401. c_out_temp, h_temp,
  402. R15, R16, R17, R18, R19, R20, R21,
  403. R22, // 2016 06 30 추가 쿨링레인지
  404. OUTtemperatures, humidities) { // done의 리턴 파라메터는 정해져 있다 2015 04 20, 끝에 2개 (OUTtemperatures, humidities)추가
  405. R15 = R15[0]; R16 = R16[0]; R17 = R17[0]; R18 = R18[0]; R19 = R19[0]; R20 = R20[0]; R21 = R21[0];
  406. R22 = R22[0]; // 2016 06 30 추가 쿨링레인지
  407. cops = cops[0];
  408. loadRates = loadRates[0];
  409. var maxValuecops = 0;
  410. var maxValueloadRates = 0;
  411. _.each(cops, function (x) {
  412. if (maxValuecops < x.Value) maxValuecops = x.Value;
  413. });
  414. _.each(loadRates, function (x) {
  415. if (maxValueloadRates < x.Value) maxValueloadRates = x.Value;
  416. });
  417. coolingApproaches = coolingApproaches[0];
  418. /*
  419. var maxValuecoolingApproaches = 0;
  420. _.each(coolingApproaches, function (x) {
  421. if (maxValuecoolingApproaches < x.Value) maxValuecoolingApproaches= x.Value; // 2015 07 02 쿨링어프로치의 온도들은 외기온도가 아니기 떄문에 min max가 없는 걸로 일단 처리 한다.
  422. });*/
  423. dataArraycoolingApproaches = coolingApproaches;
  424. ratedCapacities = ratedCapacities[0]; // 추가 hcLee 2015 04 20
  425. electricities = electricities[0]; // 전력량
  426. temperatures = temperatures[0]; // 냉각수 입구 온도
  427. gas = gas[0];
  428. pkwh = pkwh[0];
  429. CoolAbty = CoolAbty[0];
  430. //OUTtemperatures = OUTtemperatures[0];
  431. atf = atf[0];
  432. var maxValueatf = 0;
  433. _.each(atf, function (x) {
  434. if (maxValueatf < x.Value) maxValueatf = x.Value;
  435. });
  436. eff = eff[0];
  437. sw = sw[0];
  438. c_out_temp = c_out_temp[0];
  439. h_temp = h_temp[0];
  440. /*
  441. var dataArray = [];
  442. _.each(OUTtemperatures[0], function (x) {
  443. dataArray.push({
  444. //DateTime: moment(x.DateTime).toDate(),
  445. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  446. Temperature: x.Value
  447. });
  448. });
  449. _.each(humidities[0], function (x) {
  450. dataArray.push({
  451. //DateTime: moment(x.DateTime).toDate(),
  452. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  453. Humidity: x.Value
  454. });
  455. }); */
  456. var copDataArray = BWA.Chart.mapNewWithConvertingDateTime(cops, timeBoxForSearch.type());
  457. var loadRateDataArray = BWA.Chart.mapNewWithConvertingDateTime(loadRates, timeBoxForSearch.type());
  458. //_.each(OUTtemperatures[0], function (x) {
  459. // copDataArray.push({
  460. // //DateTime: moment(x.DateTime).toDate(),
  461. // DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  462. // Temperature: x.Value
  463. // });
  464. // loadRateDataArray.push({
  465. // //DateTime: moment(x.DateTime).toDate(),
  466. // DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  467. // Temperature: x.Value
  468. // });
  469. //});
  470. //_.each(humidities[0], function (x) {
  471. // copDataArray.push({
  472. // //DateTime: moment(x.DateTime).toDate(),
  473. // DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  474. // Humidity: x.Value
  475. // });
  476. // loadRateDataArray.push({
  477. // //DateTime: moment(x.DateTime).toDate(),
  478. // DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  479. // Humidity: x.Value
  480. // });
  481. //});
  482. //hcLee 2015 07 20 V14.1-V15.1
  483. if (currentTabIndex() == 0) {
  484. //BWA.Chart.mapWithConvertingDateTime(coolingApproaches, timeBoxForSearch.type());
  485. // 1차트 냉동기 COP
  486. // chartCop().option('dataSource', copDataArray); 2015 06 25 아래 4줄로 변경
  487. var options = BWA.ChartOptions.RefrigeratorAnalysis.getCopChartOptions(timeBoxForSearch.type());
  488. //chartCop().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  489. //options.valueAxis[0].tickInterval = Math.round(maxValuecops / 5) + 1;
  490. options.dataSource = copDataArray;
  491. chartCop().option(options);
  492. // 2차트 부하율
  493. //chartLoadRate().option('dataSource', loadRateDataArray);
  494. options = BWA.ChartOptions.RefrigeratorAnalysis.getLoadRateChartOptions(timeBoxForSearch.type());
  495. //options.valueAxis[0].tickInterval = Math.round(maxValueloadRates / 5) + 1;
  496. //chartLoadRate().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  497. options.dataSource = loadRateDataArray;
  498. chartLoadRate().option(options);
  499. // 3차트 추가 가스량vs부하
  500. //setChartGasByLoadRate(loadRates, gas);
  501. setChart_3(R15, electricities, maxValueatf);
  502. //$('#electricityLoadRate').css('visibility', 'hidden'); //
  503. //$('#electricityLoadRate').css('width', '0%');
  504. // 4차트 냉동기 소비전력과 부하율 관계 -> 차트4
  505. setChartElectricityByLoadRate(loadRates, electricities);
  506. // 5차트 냉각수 입구 온도와 COP, 부하율 관계
  507. setChartCopByTemperature(temperatures, cops, loadRates);
  508. }
  509. //hcLee 2015 07 20 V14.1-V15.1
  510. else if (currentTabIndex() == 1) {
  511. //if (chartCopLoadRate().option == 'undefined')
  512. //if (chartCopLoadRate() != object)
  513. //BWA.Chart.mapWithConvertingDateTime(coolingApproaches, timeBoxForSearch.type());
  514. {
  515. //hcLee 2015 07 20 V14.1-V15.1
  516. var chartOption = BWA.ChartOptions.RefrigeratorAnalysis;
  517. chart6 = BWA.Chart.Instance('chart6', 'dxChart'),
  518. chartReturnEfficiency = BWA.Chart.Instance('chartReturnEfficiency', 'dxChart'),
  519. chartATF = BWA.Chart.Instance('chartATF', 'dxChart'),
  520. chartCopLoadRate = BWA.Chart.Instance('chartCopLoadRate', 'dxChart'),
  521. chartEFFSW = BWA.Chart.Instance('chartEFFSW', 'dxChart'),
  522. chartCoolingApproach = BWA.Chart.Instance('chartCoolingApproach', 'dxChart')
  523. chart6 = chart6(chartOption.getChart_678_Options($Code.TimeType.HOUR));
  524. chartReturnEfficiency = chartReturnEfficiency(chartOption.getChart_678_Options($Code.TimeType.HOUR));
  525. chartATF = chartATF(chartOption.getChart_678_Options($Code.TimeType.HOUR));
  526. chartCopLoadRate = chartCopLoadRate(chartOption.getCopLoadRateChartOptions($Code.TimeType.HOUR));
  527. chartEFFSW = chartEFFSW(chartOption.getEFFSWChartOptions($Code.TimeType.HOUR));
  528. chartCoolingApproach = chartCoolingApproach(chartOption.getCoolingApproachChartOptions($Code.TimeType.HOUR));
  529. }
  530. // 6차트 COP와 부하율 분석 (다음페이지 첫 차트)
  531. setChart_678(R16, R19, chart6);
  532. // 7차트 수반송 효율
  533. //setChartReturnEfficiency(pkwh, CoolAbty);
  534. setChart_678(R17, R20, chartReturnEfficiency);
  535. // 8차트 ATF
  536. //setChartATF(temperatures, atf);
  537. //setChartATF(OUTtemperatures[0], atf, maxValueatf);
  538. setChart_678(R18, R21, chartATF);
  539. //
  540. setChartCopLoadRates(cops, loadRates);
  541. // 9차트 EFFSW
  542. setChartEFFSW(eff, sw);
  543. // 마지막차트 냉동기 시간대별 쿨링어프로치
  544. var OUTtemperatures = OUTtemperatures[0];
  545. BWA.Chart.mapWithConvertingDateTime(OUTtemperatures, timeBoxForSearch.type());
  546. _.each(temperatures, function (x) {
  547. OUTtemperatures.push({
  548. //DateTime: moment(x.DateTime).toDate(),
  549. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  550. c_in_temp: x.Value
  551. });
  552. });
  553. _.each(c_out_temp, function (x) {
  554. OUTtemperatures.push({
  555. //DateTime: moment(x.DateTime).toDate(),
  556. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(x.DateTime).toDate()),
  557. c_out_temp: x.Value
  558. });
  559. });
  560. _.each(h_temp, function (y) {
  561. OUTtemperatures.push({
  562. //DateTime: moment(y.DateTime).toDate(),
  563. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(y.DateTime).toDate()),
  564. h_temp: y.Value
  565. });
  566. });
  567. _.each(coolingApproaches, function (ca) {
  568. OUTtemperatures.push({
  569. //DateTime: moment(y.DateTime).toDate(),
  570. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(ca.DateTime).toDate()),
  571. ca_value: ca.Value
  572. });
  573. });
  574. _.each(R22, function (cr) {
  575. OUTtemperatures.push({
  576. //DateTime: moment(y.DateTime).toDate(),
  577. DateTime: BWA.Chart.getCustermTimeArgumentAxisString(timeBoxForSearch.type(), moment(cr.DateTime).toDate()),
  578. cr_value: cr.Value
  579. });
  580. });
  581. //chartCoolingApproach().option('dataSource', coolingApproaches);
  582. options = BWA.ChartOptions.RefrigeratorAnalysis.getCoolingApproachChartOptions(timeBoxForSearch.type());
  583. //chartCoolingApproach().option('argumentAxis', null); // 2015 05 21 결국 이 코드가 필요 함 (시간 축 에러 해결)
  584. //options.valueAxis[0].tickInterval = Math.round(maxValuecoolingApproaches / 10); // 2015 07 02 쿨링어프로치의 온도들은 외기온도가 아니기 떄문에 min max가 없는 걸로 일단 처리 한다.
  585. options.dataSource = OUTtemperatures;
  586. chartCoolingApproach().option(options);
  587. }
  588. visiblePopup(false);
  589. })
  590. .fail(function (error) {
  591. //alert(error);
  592. visiblePopup(false);
  593. });
  594. }
  595. var viewModel = $.extend(BWA.CommonView.create(
  596. params, viewInfo, searchViewOptions, ko.observable(null),
  597. handleViewShown, null, handleSearchInSearchView,
  598. undefined, chartLayout), {
  599. facility: facilityViewModel,
  600. viewHidden: handleViewHidden, // hcLee 2015 06 03
  601. refreshList: refreshList,
  602. viewShowing: handleViewShowing,
  603. scrolling: { mode: 'infinite' },
  604. waterCoolingDataGridOptions: {
  605. dataSource: facilitiesForSearch,
  606. columns: [
  607. { dataField: 'Name', caption: $G('facilityName'), width: '100%', alignment: 'left' }
  608. ],
  609. filterRow: {
  610. visible: true,
  611. showOperationChooser: false
  612. },
  613. selection: {
  614. mode: 'single'
  615. },
  616. rowClick: function(clickRow) {
  617. handleSelectedFacilityInSearchView(clickRow.data);
  618. }
  619. },
  620. contentReadyAction: function(e) {
  621. datagrid = e.component;
  622. },
  623. });
  624. viewModel.check_A_f = function () {
  625. setCheckBoxChart();
  626. }
  627. var valueAxises = [
  628. {
  629. title: {
  630. text: '온도 (°C)'
  631. }
  632. },
  633. ];
  634. var seriesS = [
  635. {
  636. //type: 'bar',
  637. type: 'spline',
  638. argumentField: 'DateTime',
  639. valueField: 'Value',
  640. //width: 5,
  641. //valueField: 'h_temp',
  642. name: '외기온도',
  643. label: {
  644. visible: false,
  645. },
  646. point: { size: 1 }
  647. },
  648. {
  649. type: 'spline',
  650. color: '#c96374',
  651. //pane: 'topPane',
  652. // axis: 'intemp',
  653. valueField: 'c_in_temp',
  654. point: { size: 1 },
  655. //name: '냉각수 입구온도',
  656. name : '냉각탑 출구온도',
  657. label: {
  658. visible: false,
  659. font: { color: '#c96374', },
  660. customizeText: function () {
  661. return this.valueText + ' °C';
  662. }
  663. }
  664. }, {
  665. type: 'spline',
  666. //pane: 'topPane',
  667. // axis: 'outtemp',
  668. color: '#00A7C6',
  669. valueField: 'c_out_temp',
  670. point: { size: 1 },
  671. //name: '냉각수 출구온도',
  672. name: '냉각탑 입구온도',
  673. label: {
  674. font: { color: '#00A7C6', },
  675. visible: false,
  676. customizeText: function () {
  677. return this.valueText + ' °C';
  678. }
  679. }
  680. }, {
  681. type: 'spline',
  682. // pane: 'topPane',
  683. // axis: 'htemp',
  684. color: 'darkgreen',
  685. valueField: 'h_temp',
  686. point: { size: 1 },
  687. name: '습구온도',
  688. label: {
  689. font: { color: 'darkgreen', },
  690. visible: false,
  691. customizeText: function () {
  692. return this.valueText + ' °C';
  693. }
  694. }
  695. },
  696. {
  697. type: 'bar',
  698. argumentField: 'DateTime',
  699. //argumentField: 'string',
  700. valueField: 'ca_value',
  701. color: 'red',
  702. width: 5,
  703. //valueField: 'h_temp',
  704. name: $G('coolingApproach'),
  705. label: {
  706. visible: false,
  707. },
  708. point: { size: 4 }
  709. },
  710. {
  711. type: 'bar',
  712. argumentField: 'DateTime',
  713. //argumentField: 'string',
  714. valueField: 'cr_value',
  715. color: 'blue',
  716. width: 5,
  717. //valueField: 'h_temp',
  718. name: '쿨링 레인지',
  719. label: {
  720. visible: false,
  721. },
  722. point: { size: 4 }
  723. },
  724. ];
  725. function setCheckBoxChart()
  726. {
  727. /*
  728. var cO = BWA.ChartOptions.RefrigeratorAnalysis;
  729. var S = chartCoolingApproach(cO.getCoolingApproachSeriesOptions(check_input(), check_out(), check_s()));
  730. var V = chartCoolingApproach(cO.getCoolingApproachvalueAxisOptions(check_input(), check_out(), check_s()));
  731. var chart = $('#chartCoolingApproach').dxChart('instance');
  732. chart.option('valueAxis', V);
  733. chart.option('series', S); */ // 이렇게 옵션에서 가져오면 안됨.
  734. // OK 코드
  735. var chart = $('#chartCoolingApproach').dxChart('instance');
  736. var valueAxisNew = [];
  737. valueAxisNew.push(valueAxises[0]);
  738. //if (check_input()) valueAxisNew.push(valueAxises[1]);
  739. //if (check_out()) valueAxisNew.push(valueAxises[2]);
  740. //if (check_s()) valueAxisNew.push(valueAxises[3]);
  741. chart.option('valueAxis', valueAxisNew);
  742. var seriesNew = [];
  743. for (var i = 0; i < 4; i++)
  744. seriesNew.push(seriesS[i]); // 기본4개, 외기/입구/출구/습구
  745. if (check_A()) seriesNew.push(seriesS[4]);
  746. if (check_R()) seriesNew.push(seriesS[5]);
  747. chart.option('series', seriesNew);
  748. // OK 코드
  749. }
  750. viewModel.check_A_f = function () {
  751. setCheckBoxChart();
  752. }
  753. viewModel.check_R_f = function () {
  754. setCheckBoxChart();
  755. }
  756. check_A.subscribe(viewModel.check_A_f);
  757. check_R.subscribe(viewModel.check_R_f);
  758. viewModel.timeBoxForSearch = timeBoxForSearch;
  759. viewModel.currentTabIndex = currentTabIndex;
  760. viewModel.multiViewItems = [{
  761. facility: facilityViewModel,
  762. template: 'mainCharts'
  763. }, {
  764. template: 'subCharts',
  765. check_A: check_A,
  766. check_R: check_R,
  767. //check_s: check_s,
  768. }
  769. ];
  770. //ko.applyBindgings(viewModel, check_input);
  771. //ko.a
  772. //ko.applyBindings(viewModel, document.getElementById("multiview"));
  773. $HourGlassPopup(viewModel, visiblePopup);
  774. return viewModel;
  775. };