From 234f914507b05a3b1a92435f5067df6ca4e5eee0 Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Tue, 13 Mar 2018 14:22:16 +0800
Subject: [PATCH] 数据报表

---
 src/app/routes/analysis/query/query.component.less |    2 
 src/app/business/entity/data.ts                    |    5 +
 src/app/routes/analysis/query/query.component.ts   |  118 ++++++++++++++++++++++++++---
 src/app/routes/analysis/analysis.module.ts         |    4 
 src/app/routes/analysis/query/query.component.html |    2 
 src/app/business/services/util/date.service.ts     |   50 ++++++++++++
 6 files changed, 164 insertions(+), 17 deletions(-)

diff --git a/src/app/business/entity/data.ts b/src/app/business/entity/data.ts
index 24f7cb5..c2458bb 100644
--- a/src/app/business/entity/data.ts
+++ b/src/app/business/entity/data.ts
@@ -153,3 +153,8 @@
   areaRangeId?: number;
   timeUnits?: TimeUnits;
 }
+
+export interface PairData {
+  category: string;
+  value: number;
+}
diff --git a/src/app/business/services/util/date.service.ts b/src/app/business/services/util/date.service.ts
index 7b3f33c..8dbcf7d 100644
--- a/src/app/business/services/util/date.service.ts
+++ b/src/app/business/services/util/date.service.ts
@@ -1,6 +1,8 @@
 import {Injectable} from '@angular/core';
 
 import * as moment from 'moment';
+import { TimePeriod } from '@business/entity/data';
+import { TimeUnits } from '@business/enum/types.enum';
 
 @Injectable()
 export class DateService {
@@ -12,4 +14,52 @@
   today(format: string) {
     return moment().format(format);
   }
+  /**
+   *  ������������������,������������
+   */   countTimeRange(timePeriod: TimePeriod): number {
+     let timeUnit = 0;
+    switch (timePeriod.timeUnits) {
+      case TimeUnits.YEAR: 
+      timeUnit = 1000 * 60 * 60 * 24 * 30 * 12; break;
+      case TimeUnits.MONTH: 
+      timeUnit = 1000 * 60 * 60 * 24 * 30; break;
+      case TimeUnits.DAY: 
+      timeUnit = 1000 * 60 * 60 * 24; break;
+      case TimeUnits.HOUR: 
+      timeUnit = 1000 * 60 * 60; break;
+      case TimeUnits.MINUTE: 
+      timeUnit = 1000 * 60; break;
+    }
+     return Math.floor((timePeriod.endTime.getTime() - timePeriod.startTime.getTime()) / timeUnit);
+   }
+   makeTimeList(timePeriod: TimePeriod): string [] {
+    const start = moment(timePeriod.startTime);
+    const end = moment(timePeriod.endTime);
+    const timeList: string[] = [];
+    let timeUnit: moment.DurationInputArg2 = 'day';
+    let formatStyle = '';
+    switch (timePeriod.timeUnits) {
+      case TimeUnits.YEAR: 
+      formatStyle = 'YYYY';
+      timeUnit = 'year'; break;
+      case TimeUnits.MONTH: 
+      formatStyle = 'YYYY-MM';
+      timeUnit = 'month'; break;
+      case TimeUnits.DAY: 
+      formatStyle = 'YYYY-MM-DD';
+      timeUnit = 'day'; break;
+      case TimeUnits.HOUR: 
+      formatStyle = 'YYYY-MM-DD HH';
+      timeUnit = 'hour'; break;
+      case TimeUnits.MINUTE: 
+      formatStyle = 'YYYY-MM-DD HH:mm';
+      timeUnit = 'minute'; break;
+    }
+    do {
+     const outTime = start.format(formatStyle);
+     timeList.push(outTime);
+     start.add(1, timeUnit);
+    }while (start.valueOf() < end.valueOf());
+    return timeList;
+   }
 }
diff --git a/src/app/routes/analysis/analysis.module.ts b/src/app/routes/analysis/analysis.module.ts
index b60cda5..efe9ed3 100644
--- a/src/app/routes/analysis/analysis.module.ts
+++ b/src/app/routes/analysis/analysis.module.ts
@@ -9,6 +9,8 @@
 import { CommonModule } from '@angular/common';
 import { DeviceService } from '@business/services/http/device.service';
 import { NgxEchartsModule  } from 'ngx-echarts';
+import { DateService } from '@business/services/util/date.service';
+import { NzMessageService } from 'ng-zorro-antd';
 const routes: Routes = [
   {
     path: '',
@@ -28,6 +30,6 @@
     RouterModule.forChild(routes)    
   ],
   declarations: [QueryComponent],
-  providers: [SensorsService, AreacodeService, MonitorPointService, DeviceService]
+  providers: [SensorsService, NzMessageService, AreacodeService, MonitorPointService, DeviceService, DateService]
 })
 export class AnalysisModule { }
diff --git a/src/app/routes/analysis/query/query.component.html b/src/app/routes/analysis/query/query.component.html
index dc05932..065739c 100644
--- a/src/app/routes/analysis/query/query.component.html
+++ b/src/app/routes/analysis/query/query.component.html
@@ -153,4 +153,4 @@
         </div>      
 </nz-card>
 </form>
-<div echarts [options]="chartOption" class="line-chart" (chartInit)="onChartInit($event)"></div>  
+<div echarts [options]="chartOption" [loading]="chartLoading" class="line-chart" (chartInit)="onChartInit($event)"></div>  
diff --git a/src/app/routes/analysis/query/query.component.less b/src/app/routes/analysis/query/query.component.less
index b2452d3..9300133 100644
--- a/src/app/routes/analysis/query/query.component.less
+++ b/src/app/routes/analysis/query/query.component.less
@@ -10,7 +10,7 @@
         right: 0;
     }
 }
-.demo-chart {
+.line-chart {
     height: 400px;
   }
 
diff --git a/src/app/routes/analysis/query/query.component.ts b/src/app/routes/analysis/query/query.component.ts
index 9d59510..4b327f8 100644
--- a/src/app/routes/analysis/query/query.component.ts
+++ b/src/app/routes/analysis/query/query.component.ts
@@ -1,7 +1,7 @@
 import { ExampleService } from '@business/services/util/example.service';
 import { MonitorPointService } from '@business/services/http/monitor-point.service';
 import { AreacodeService } from '@business/services/http/areacode.service';
-import { LineChartCriteria, TimePeriod, Organization, MonitorPoint, DataCondition, Device } from '@business/entity/data';
+import { LineChartCriteria, TimePeriod, Organization, MonitorPoint, DataCondition, Device, PairData } from '@business/entity/data';
 import { PageBean, ResultBean } from '@business/entity/grid';
 import { Sensor } from '@business/entity/data';
 import { SensorsService } from '@business/services/http/sensors.service';
@@ -12,6 +12,8 @@
 import { CascaderOption } from 'ng-zorro-antd/src/cascader/nz-cascader.component';
 import { environment } from '@env/environment';
 import { DeviceService } from '@business/services/http/device.service';
+import { DateService } from '@business/services/util/date.service';
+import { NzMessageService } from 'ng-zorro-antd';
 @Component({
     selector: 'app-query',
     templateUrl: './query.component.html',
@@ -89,6 +91,8 @@
         private http: _HttpClient,
         private monitorPointService: MonitorPointService,
         private deviceService: DeviceService,
+        private dateService: DateService,
+        private msg: NzMessageService
     ) {
     }
 
@@ -298,31 +302,32 @@
 
     }
     private getPeriodDate(value: Date , type?: 'start'|'end' ): Date {
-        debugger;
-        let month = 0 ;
-        let day = 0;
+        let month = 0;
+        let day = 1;
         let hour = 0;
         let minute = 0;
         let second = 0; 
+        let millisecond = 0;
         if ('end' === type) {
-            month = 12;
+            month = 11;
             day = 31;
             hour = 23;
             minute = 59;
             second = 59;
+            millisecond = 999;
         }
         const mo = moment(value);
         switch ( this.lineChartCriteria.timePeriod.timeUnits ) {
             case TimeUnits.YEAR:
-            mo.month(month).day(day).hour(hour).minute(minute).second(second); break;
+            mo.month(month).date(day).hour(hour).minute(minute).second(second).millisecond(millisecond); break;
             case TimeUnits.MONTH:
-            mo.day(day).hour(hour).minute(minute).second(second); break;
+            mo.date(day).hour(hour).minute(minute).second(second).millisecond(millisecond); break;
             case TimeUnits.DAY:
-            mo.hour(hour).minute(minute).second(second); break;
+            mo.hour(hour).minute(minute).second(second).millisecond(millisecond); break;
             case TimeUnits.HOUR:
-            mo.minute(minute).second(second); break;
+            mo.minute(minute).second(second).millisecond(millisecond); break;
             case TimeUnits.MINUTE:
-            mo.second(second); break;
+            mo.second(second).millisecond(millisecond); break;
         }
         return mo.toDate();
     }
@@ -465,7 +470,8 @@
     // ������������������������ actualTimeDisabled
     get actualTimeDisabled() {
       if (!!this.dataTimeUnitsList && this._dataTimeUnits === this.dataTimeUnitsList[0]) {
-            this._actualTime = null;
+            this.setActualTime(null);
+            // ������������������������������
             this.actualTimes = null;
          }
          return  !!this.dataTimeUnitsList && this._dataTimeUnits === this.dataTimeUnitsList[0];
@@ -483,10 +489,94 @@
        this.lineChartCriteria.timePeriod.endTime = this.getPeriodDate(endTime, 'end');
        this.lineChartCriteria.dataConditions.pop();
        this.lineChartCriteria.dataConditions.push(this.dataConditionTemp);
-       this.http.post(environment.SERVER_BASH_URL + '/report/line-chart', this.lineChartCriteria).subscribe(
-            res => console.log(res)
-       );
+       this.reloadChart();
     }
+      private reloadChart(): void {
+        const countTimeRange = this.dateService.countTimeRange(this.lineChartCriteria.timePeriod);
+        let timeList: string[];
+        const maxTimeRange = 5000;
+        if (countTimeRange < maxTimeRange ) {
+            timeList = this.dateService.makeTimeList(this.lineChartCriteria.timePeriod);
+        } else {
+            this.msg.error('������������������������' + maxTimeRange + '������������������������' + countTimeRange);
+            return ;
+        }
+    
+         if (!!this.echartsIntance) {
+             this.chartOption = null;
+             this.echartsIntance.clear();
+         }
+         this.initOpton({data: timeList});
+         this.chartLoading = true;
+         this.http.post(environment.SERVER_BASH_URL + '/report/line-chart', this.lineChartCriteria).subscribe(
+            (res: ResultBean<Array<Array<PairData>>>) => {
+               if (res.code === 1) {
+                  const series = [];
+                  const dataList =  res.data;
+                  if (!!dataList && !!dataList.length) {
+                    dataList.forEach(
+                         data => {
+                            const outData =  data.map( item => {
+                                return item.value;
+                            });
+                            series.push({type: 'line', data: outData});
+                        }
+                    );
+                    this.echartsIntance.setOption({
+                        series: series
+                    });
+                    this.chartLoading = false;
+                  }
+               }
+            }
+       );
+      }
+      private initOpton(opt: {data: string[]}) {
+          
+          this.chartOption = {
+            title: {
+                text: ''
+            },
+            tooltip : {
+                trigger: 'axis',
+                axisPointer: {
+                    type: 'cross',
+                    label: {
+                        backgroundColor: '#6a7985'
+                    }
+                }
+            },
+            legend: {
+                data: []
+            },
+            toolbox: {
+                feature: {
+                    saveAsImage: {}
+                }
+            },
+            grid: {
+                left: '3%',
+                right: '4%',
+                bottom: '3%',
+                containLabel: true
+            },
+            xAxis : [
+                {
+                    type : 'category',
+                    boundaryGap : false,
+                    data : opt.data
+                }
+            ],
+            yAxis : [
+                {
+                    type : 'value'
+                }
+            ],
+            series : [
+            ]
+        };
+      }
+      chartLoading: boolean;
       chartOption;
       echartsIntance;
       onChartInit(ec) {

--
Gitblit v1.8.0