From 7ca521e4267b987270f6ccbb9a6c076aeb467d96 Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Wed, 04 Jul 2018 17:11:33 +0800
Subject: [PATCH] 设备,监控站 管理功能增强

---
 src/app/business/services/util/example.service.ts                                         |   13 +
 src/app/routes/devices/basic-info/basic-info.component.ts                                 |   64 ++++++++
 src/app/routes/devices/monitor-point/monitor-point-edit/monitor-point-edit.component.html |    2 
 src/app/business/services/http/organization.service.ts                                    |    1 
 src/app/routes/devices/monitor-point/monitor-point-edit/monitor-point-edit.component.ts   |   16 +
 src/app/routes/devices/version/version-edit/version-edit.component.ts                     |   58 +++++++
 src/app/routes/map/coordinates-picker/coordinates-picker.component.ts                     |   11 +
 src/app/routes/devices/basic-info/device-edit/device-edit.component.ts                    |   64 ++++++++-
 src/app/business/services/util/tools.service.ts                                           |    3 
 src/app/routes/devices/monitor-point/monitor-point.component.ts                           |   36 ++++
 src/app/routes/devices/basic-info/basic-info.component.html                               |   44 ++++-
 src/app/business/services/http/device.service.ts                                          |   30 +++
 src/app/routes/devices/monitor-point/monitor-point.component.html                         |   20 ++
 src/app/routes/devices/basic-info/device-edit/device-edit.component.html                  |   12 +
 14 files changed, 321 insertions(+), 53 deletions(-)

diff --git a/src/app/business/services/http/device.service.ts b/src/app/business/services/http/device.service.ts
index 8bf7bfd..83c70d2 100644
--- a/src/app/business/services/http/device.service.ts
+++ b/src/app/business/services/http/device.service.ts
@@ -3,7 +3,7 @@
 import { Injectable } from '@angular/core';
 import { ResultBean, PageBean } from '@business/entity/grid';
 import { Observable } from 'rxjs/Observable';
-import { ExampleService } from '@business/services/util/example.service';
+import { ExampleService, Criteria } from '@business/services/util/example.service';
 import { Device } from '@business/entity/data';
 
 @Injectable()
@@ -17,11 +17,31 @@
   public getListUrl () {
     return this.urls.list;
   }
-  public getSqlParams(queryText: string) {
+  public getSqlParams(queryMap: {[key: string]: number|string}) {
     const example = new ExampleService();
-    if (queryText != null && queryText !== '') {
-      example.or().andLike({name: 'name', value: '%' + queryText + '%'});
-      example.or().andLike({name: 'mac', value: '%' + queryText + '%'});
+    const orgId = !!queryMap.orgId ? queryMap.orgId : null;
+    const mpointId = !!queryMap.mpointId ? queryMap.mpointId : null;
+    const devMacOrName = !!queryMap.devMacOrName && !!(<string>queryMap.devMacOrName).trim() ? queryMap.devMacOrName : null;
+    let  criWithMac: Criteria = null;
+    let  criWithName: Criteria  = null;
+    if (!!devMacOrName) {
+      criWithName = example.or().andLike({name: 'name', value: '%' + devMacOrName + '%'});
+      criWithMac = example.or().andLike({name: 'mac', value: '%' + devMacOrName + '%'});
+    }
+    if (!!mpointId) {
+        if (!!devMacOrName) {
+          criWithName.andEqualTo({name: 'monitorPointId', value: mpointId});
+          criWithMac.andEqualTo({name: 'monitorPointId', value: mpointId});
+        }else {
+          example.or().andEqualTo({name: 'monitorPointId', value: mpointId});
+        }
+    } else if (!!orgId) {
+      if (!!devMacOrName) {
+        criWithName.andCondition(`monitor_point_id in (select id from monitor_point where organization_id = ${orgId})`);
+        criWithMac.andCondition(`monitor_point_id in (select id from monitor_point where organization_id = ${orgId})`);
+      }else {
+        example.or().andCondition(`monitor_point_id in (select id from monitor_point where organization_id = ${orgId})`);
+      }
     }
     return example.getSqlParam();
   }
diff --git a/src/app/business/services/http/organization.service.ts b/src/app/business/services/http/organization.service.ts
index 20fb068..ba9f9c1 100644
--- a/src/app/business/services/http/organization.service.ts
+++ b/src/app/business/services/http/organization.service.ts
@@ -22,6 +22,7 @@
   };
   constructor(private http: _HttpClient) { }
    public getPagingList(page: PageBean, queryText: string): Observable<PageBean> {
+    queryText = !!queryText && !!queryText.trim() ? queryText : null;
     const example = new ExampleService();
     if (queryText != null && queryText !== '') {
       example.or().andLike({name: 'name', value: '%' + queryText + '%'});
diff --git a/src/app/business/services/util/example.service.ts b/src/app/business/services/util/example.service.ts
index 082c31f..fdcb472 100644
--- a/src/app/business/services/util/example.service.ts
+++ b/src/app/business/services/util/example.service.ts
@@ -8,9 +8,16 @@
        return this.conditions;
      }
 
-     public addCondition(condition: string, colName: string, ...values: any[]) {
+     private addCondition(condition: string, colName: string, ...values: any[]) {
         const split = Criteria.CONDITION_SPLIT; // '||'
-        this.conditions.push(condition + split + colName + split + values.join(split));
+        let conditionStr = condition + split + colName;
+        if (!!values && values.length > 0) {
+            conditionStr += split + values.join(split);
+        }
+        this.conditions.push(conditionStr);
+     }
+     public andCondition(condition: string) {
+        this.addCondition('andCondition', condition);
      }
      public andLike(col: { name: string, value: any}): Criteria {
          this.addCondition('andLike', col.name, col.value);
@@ -47,7 +54,7 @@
      return encodeURI(whereSql);
   }
   constructor() { }
-    public or() {
+    public or(): Criteria {
         const cri = new Criteria();
         this.criterion.push(cri);
         return cri;
diff --git a/src/app/business/services/util/tools.service.ts b/src/app/business/services/util/tools.service.ts
index 3478144..3841b8f 100644
--- a/src/app/business/services/util/tools.service.ts
+++ b/src/app/business/services/util/tools.service.ts
@@ -44,4 +44,7 @@
         if (num) { result = num + result; }
         return result;
     }
+    public static getObjById<T>(id: number, list: T[]): T {
+        return list.find(item => item['id'] === id);
+    }
 }
diff --git a/src/app/routes/devices/basic-info/basic-info.component.html b/src/app/routes/devices/basic-info/basic-info.component.html
index bf288eb..3c5a796 100644
--- a/src/app/routes/devices/basic-info/basic-info.component.html
+++ b/src/app/routes/devices/basic-info/basic-info.component.html
@@ -5,23 +5,47 @@
     </h1>
 </div>
 <nz-card [nzBordered]="false">
-        <div class="mb-md">
+    <div nz-row class="mb-sm">
+        <div  nz-col [nzSpan]="4">
                 <button nz-button (click)="addOrModify($event)" [nzType]="'primary'" [nzSize]="'large'">
                     <i class="anticon anticon-plus"></i><span>������</span>
                 </button>
-                <ng-container *ngIf="selectedRows.length > 0"> &nbsp;
+                <ng-container *ngIf="selectedRows.length > 0">
                 <button nz-button [nzSize]="'large'" (click)="deleteSelected()">������������</button>
                 </ng-container>
-                <nz-input [ngStyle]="{'width': '280px','float':'right'}" [(ngModel)]="queryText" name=""  [nzPlaceHolder]="'������������������mac'"
+        </div>
+        <div  nz-col [nzSpan]="7">
+              <span style="padding: 5px 10px;">
+                ������:                  
+              </span>
+              <nz-select style="width: 79%;" [(ngModel)]="queryMap.orgId" (ngModelChange)="setOrgId($event)" [nzPlaceHolder]="'������ ������(������������������)'"
+                nzAllowClear [nzFilter]="false" nzShowSearch  (nzSearchChange)="orgSelectChange($event)" [nzNotFoundContent]="'������������'" >
+                <nz-option *ngFor="let option of orgOptions" [nzLabel]="option.name" [nzValue]="option.id" [nzDisabled]="option.disabled">
+                </nz-option>
+              </nz-select>
+        </div>
+        <div  nz-col [nzSpan]="7">
+                <span style="padding: 5px 10px;">
+                        ���������:                  
+                      </span>
+                      <nz-select style="width: 75%;" [(ngModel)]="queryMap.mpointId" (ngModelChange)="setMpointId($event)" [nzPlaceHolder]="'������ ���������������(������������������)'"
+                      nzAllowClear [nzFilter]="false" nzShowSearch (nzSearchChange)="monitorPointChange($event)" [nzNotFoundContent]="'������������'" >
+                        <nz-option *ngFor="let option of monitorPoints" [nzLabel]="option.name" [nzValue]="option.id" [nzDisabled]="option.disabled">
+                        </nz-option>
+                      </nz-select>
+        </div>
+        <div  nz-col [nzSpan]="6">
+                <nz-input [ngStyle]="{'width': '240px','float':'right'}" [(ngModel)]="queryText" name=""  [nzPlaceHolder]="'������������������������������mac'"
                 (keyup)="queryTextChanged($event)" (change)="queryTextChanged($event)" ></nz-input>
         </div>
-    	<div class="mb-md">
-                <nz-alert *ngIf="selectedRows.length > 0" [nzType]="'info'" [nzShowIcon]="true"> 
-                    <span alert-body>
-                         ���������<strong class="text-primary">{{selectedRows.length}}</strong>���
-                    </span> 
-                </nz-alert>
-         </div>
+    </div>
+    <div class="mb-md">
+            <nz-alert *ngIf="selectedRows.length > 0" [nzType]="'info'" [nzShowIcon]="true"> 
+                <span alert-body>
+                    ���������<strong class="text-primary">{{selectedRows.length}}</strong>���
+                </span> 
+            </nz-alert>
+    </div>
 <simple-table #simpleTable  [data]="listUrl" [extraParams]="extraParams"  [columns]="columns" [showTotal]="true"
 [reqReName]="{pi: 'pageIndex',ps: 'pageSize'}"  (checkboxChange)="checkboxChange($event)" [ps]="10" [resReName]="{list: 'data',total: 'total'}"></simple-table>
 </nz-card>
diff --git a/src/app/routes/devices/basic-info/basic-info.component.ts b/src/app/routes/devices/basic-info/basic-info.component.ts
index 3dfa853..3494c41 100644
--- a/src/app/routes/devices/basic-info/basic-info.component.ts
+++ b/src/app/routes/devices/basic-info/basic-info.component.ts
@@ -11,6 +11,8 @@
 import { Subject } from 'rxjs/Subject';
 import { CoordinatesPickerComponent } from 'app/routes/map/coordinates-picker/coordinates-picker.component';
 import { CoorPickerService } from 'app/routes/map/coordinates-picker/coordinates-picker.service';
+import { OrganizationService } from '@business/services/http/organization.service';
+import { ExampleService } from '@business/services/util/example.service';
 
 @Component({
   selector: 'app-basic-info',
@@ -61,13 +63,19 @@
     }
   ];
   queryTextStream: Subject<string> = new Subject<string>();
+  private queryMap: {orgId?: number, mpointId?: number, devMacOrName?: string}
+  = {orgId: null, mpointId: null, devMacOrName: ''};
+  extraParams = { queryParams: null };
+  public orgOptions = [];
+  public monitorPoints = [];
   constructor(
     private monitorPointService: MonitorPointService,
     private deviceService: DeviceService,
     private confirmServ: NzModalService,
     public msgSrv: NzMessageService,
     private modalHelper: ModalHelper,
-    private coorPickerService: CoorPickerService
+    private coorPickerService: CoorPickerService,
+    private organizationService: OrganizationService
   ) { }
 
   ngOnInit() {
@@ -75,14 +83,14 @@
       .debounceTime(900)
       .distinctUntilChanged()
       .subscribe(value => {
-        this.extraParams.queryParams = this.deviceService.getSqlParams(value);
+        this.queryMap.devMacOrName = value;
         this.load();
       });
+      this.orgSelectChange();
   }
   get listUrl() {
     return this.deviceService.getListUrl();
   }
-  extraParams = { queryParams: null };
   queryText: string;
   selectedRows: any[] = [];
   checkboxChange(list: any[]) {
@@ -107,6 +115,7 @@
     });
   }
   load() {
+    this.extraParams.queryParams = this.deviceService.getSqlParams(this.queryMap);
     this.selectedRows = [];
     this.simpleTable.load();
   }
@@ -129,7 +138,12 @@
     if (d != null) {  
       Object.assign(data, d);
     }
-    this.modalHelper.static(DeviceEditComponent, { data }).subscribe(
+    const configMap = this.queryMap;
+    // Object.assign(configMap, this.queryMap);
+    if (!!configMap['mpointId'] && !d['monitorPoint']) {
+      data['monitorPoint'] = this.getMonitorPoint(configMap['mpointId']);
+    }
+    this.modalHelper.static(DeviceEditComponent, { data, configMap }).subscribe(
       (ret: { data: any, close: Function }) => {
         // ������������
         if (ret.data['id'] != null) {
@@ -156,6 +170,11 @@
           }
         );
       });
+  }
+  private getMonitorPoint(mpointId: number) {
+     return this.monitorPoints.find(
+        mpoint => mpoint.id === mpointId
+     );
   }
   configCoord(record: Device): void {
      // ������������������������������������������adress������������
@@ -207,4 +226,41 @@
       }
    );
   }
+  public setOrgId(orgId) {
+    this.queryMap.orgId = orgId;
+    this.queryMap.mpointId = null;
+    // this.queryMap.devMacOrName = null;
+    this.monitorPointChange();
+    this.load();
+  }
+  public setMpointId(mpointId) {
+    this.queryMap.mpointId = mpointId;
+    this.load();
+  }
+  orgSelectChange(text?: string) {
+    const pageBean: PageBean = {pageIndex: 0, pageSize: 20};
+    this.organizationService.getPagingList(pageBean, text).subscribe(
+      (res: PageBean) => {
+           if (res != null && res.data != null) {               
+               this.orgOptions = res.data;
+           }
+      }
+   );
+  }
+    monitorPointChange(text?: string) {
+      const pageBean: PageBean = {pageIndex: 0, pageSize: 20};
+      const example = new ExampleService();
+      const organizationId = !!this.queryMap.orgId ? this.queryMap.orgId : null;
+      const mpointName = !!text ? '%' + text + '%' : null;
+      example.or()
+      .andEqualTo({name: 'organizationId', value: organizationId })
+      .andLike({name: 'name', value: mpointName  });
+      this.monitorPointService.getPageByExample(pageBean, example).subscribe(
+        (res: PageBean) => {
+            if (res != null && res.data != null) {
+                this.monitorPoints = res.data;
+            }
+        }
+    );
+    }
 }
diff --git a/src/app/routes/devices/basic-info/device-edit/device-edit.component.html b/src/app/routes/devices/basic-info/device-edit/device-edit.component.html
index b3b6f4b..9816dc7 100644
--- a/src/app/routes/devices/basic-info/device-edit/device-edit.component.html
+++ b/src/app/routes/devices/basic-info/device-edit/device-edit.component.html
@@ -105,7 +105,17 @@
                 </nz-input>
             </div>
           </div>
+  </form>   
     <div class="modal-footer">
+         <span style="padding: 5px 10px;">
+            ������:                  
+          </span>
+          <nz-select style="width: 240px;" [(ngModel)]="configMap.orgId" (ngModelChange)="setOrgId($event)" [nzPlaceHolder]="'������ ������(������������������)'"
+            nzAllowClear [nzFilter]="false" nzShowSearch  (nzSearchChange)="orgSelectChange($event)" [nzNotFoundContent]="'������������'" >
+            <nz-option *ngFor="let option of orgOptions" [nzLabel]="option.name" [nzValue]="option.id" [nzDisabled]="option.disabled">
+            </nz-option>
+          </nz-select>
+          &nbsp;
         <button nz-button type="button" (click)="close()">������</button>
         <button nz-button [nzType]="'primary'" [nzLoading]="isSaving">
           <span>
@@ -114,4 +124,4 @@
           </span>
         </button>
     </div>
-  </form>
+
diff --git a/src/app/routes/devices/basic-info/device-edit/device-edit.component.ts b/src/app/routes/devices/basic-info/device-edit/device-edit.component.ts
index 47ec2f0..26d687b 100644
--- a/src/app/routes/devices/basic-info/device-edit/device-edit.component.ts
+++ b/src/app/routes/devices/basic-info/device-edit/device-edit.component.ts
@@ -6,13 +6,14 @@
 import { FormBuilder, FormGroup, Validators, FormControl } from '@angular/forms';
 import { DeviceService } from '@business/services/http/device.service';
 import { Component, OnInit } from '@angular/core';
-import { Device} from '@business/entity/data';
+import { Device, MonitorPoint} from '@business/entity/data';
 import { _Validators } from '@delon/abc';
 import { PageBean, ResultBean } from '@business/entity/grid';
 import { _HttpClient } from '@delon/theme';
 import { environment } from '@env/environment';
 import { ExampleService } from '@business/services/util/example.service';
 import { Observable } from 'rxjs/Observable';
+import { OrganizationService } from '@business/services/http/organization.service';
 
 @Component({
   selector: 'app-device-edit',
@@ -25,6 +26,8 @@
   public deviceVersions: any [] = [];
   public operateUsers: any [] = [];
   public isSaving = false;
+  public configMap: {orgId?: number, mpointId?: number, mpoint?: MonitorPoint} = {orgId: null};
+  public orgOptions = [];
   constructor(
     private subject: NzModalSubject,
     private formBuilder: FormBuilder,
@@ -32,13 +35,16 @@
     private versionService: VersionService,
     private operateUserService: OperateUserService,
     private deviceService: DeviceService,
-    private  http: _HttpClient
+    private  http: _HttpClient,
+    private organizationService: OrganizationService
   ) { }
   data: Device;
-  //������������������
+  // ������������������
   originalData: Device = {};
+  orgId: number = null;
   validateForm: FormGroup;
   ngOnInit() {
+      console.log(this.configMap);
     if (!!this.data) {
         Object.assign(this.originalData, this.data);
     }    
@@ -50,6 +56,14 @@
     if (this.data.createTime == null) {
         this.data.createTime = new Date().getTime();
     }
+    if (!!this.configMap.mpointId 
+        && !!this.data.monitorPoint
+        && !data.longitude
+        && !data.latitude) {
+            data.longitude = this.data.monitorPoint.longitude;
+            data.latitude = this.data.monitorPoint.latitude;
+    }
+    data.monitorPointId = !!data.monitorPointId ? data.monitorPointId : this.configMap.mpointId;
     const validates: Device = {
          name: [data.name, [Validators.required]],
          mac: [data.mac, [Validators.required], [this.macAsyncValidator]],
@@ -67,6 +81,12 @@
     this.validateForm = this.formBuilder.group(
       validates
     );
+    this.orgSelectChange();
+    const control = this.validateForm.controls['monitorPointId'];
+    control.valueChanges.subscribe(value => {
+        const mpoint = ToolsService.getObjById<MonitorPoint>(value, this.monitorPoints);
+        this.resetCoor(mpoint);
+    });
   }
   macAsyncValidator = (control: FormControl): any => {
     return Observable.create(observer => {
@@ -79,7 +99,6 @@
             exampleService.or().andEqualTo({name: 'mac', value: control.value});
             this.deviceService.countByExample(exampleService).subscribe(
                 res => {
-                    debugger;
                      if (!!res.code && !!res.data) {
                          observer.next({ error: true, duplicated: true });
                      } else {
@@ -114,9 +133,15 @@
          }
      );
    }
-   monitorPointChange(text) {
-    const pageBean: PageBean = {pageIndex: 0, pageSize: 20};
-    this.monitorPointService.getPagingList(pageBean, text).subscribe(
+   monitorPointChange(text?: string) {
+    const pageBean: PageBean = {pageIndex: 0, pageSize: 100};
+    const orgId = this.configMap.orgId;
+    const example = new ExampleService();
+    text = !!text && !!text.trim() ? text : null;
+    example.or()
+    .andEqualTo({name: 'organizationId', value: this.configMap.orgId})
+    .andEqualTo({name: 'name', value: text});
+    this.monitorPointService.getPageByExample(pageBean, example).subscribe(
       (res: PageBean) => {
            if (res != null && res.data != null) {
                this.monitorPoints = res.data;
@@ -177,4 +202,29 @@
       }
    );
    }
+   orgSelectChange(text?: string) {
+    const pageBean: PageBean = {pageIndex: 0, pageSize: 20};
+    this.organizationService.getPagingList(pageBean, text).subscribe(
+      (res: PageBean) => {
+           if (res != null && res.data != null) {               
+               this.orgOptions = res.data;
+           }
+      }
+   );
+  }
+  setOrgId(orgId: number) {
+        this.configMap.mpointId = null;
+        this.monitorPointChange();
+        this.clearMpoint(); 
+  }
+  clearMpoint() {
+     ToolsService.setValueToControl(this.validateForm, 'monitorPointId', null);
+     this.resetCoor();
+  }
+  resetCoor(mpoint?: MonitorPoint) {
+    const longitude =  !!mpoint ?  mpoint.longitude : null;
+    const latitude =  !!mpoint ?  mpoint.latitude : null;
+    ToolsService.setValueToControl(this.validateForm, 'longitude', longitude);
+    ToolsService.setValueToControl(this.validateForm, 'latitude', latitude);
+  }
 }
diff --git a/src/app/routes/devices/monitor-point/monitor-point-edit/monitor-point-edit.component.html b/src/app/routes/devices/monitor-point/monitor-point-edit/monitor-point-edit.component.html
index c120cc2..e8b6eff 100644
--- a/src/app/routes/devices/monitor-point/monitor-point-edit/monitor-point-edit.component.html
+++ b/src/app/routes/devices/monitor-point/monitor-point-edit/monitor-point-edit.component.html
@@ -15,7 +15,7 @@
     </div>
     <div nz-form-control nz-col [nzSpan]="6" nzHasFeedback>
       <nz-select formControlName="organizationId" [nzPlaceHolder]="'������ ������(������������������)'"
-	    nzAllowClear [nzFilter]="false" nzShowSearch  (nzSearchChange)="OrgSelectChange($event)" [nzNotFoundContent]="'������������'" >
+	    nzAllowClear [nzFilter]="false" nzShowSearch  (nzSearchChange)="orgSelectChange($event)" [nzNotFoundContent]="'������������'" >
         <nz-option *ngFor="let option of orgOptions" [nzLabel]="option.name" [nzValue]="option.id" [nzDisabled]="option.disabled">
         </nz-option>
       </nz-select>
diff --git a/src/app/routes/devices/monitor-point/monitor-point-edit/monitor-point-edit.component.ts b/src/app/routes/devices/monitor-point/monitor-point-edit/monitor-point-edit.component.ts
index 826af7e..2e75da8 100644
--- a/src/app/routes/devices/monitor-point/monitor-point-edit/monitor-point-edit.component.ts
+++ b/src/app/routes/devices/monitor-point/monitor-point-edit/monitor-point-edit.component.ts
@@ -14,8 +14,8 @@
 })
 export class MonitorPointEditComponent implements OnInit {
 
-   orgOptions = [];
-
+  orgOptions = [];
+  configMap: {organizationId: number};
   data: MonitorPoint;
   isSaving = false;
   validateForm: FormGroup;
@@ -36,7 +36,10 @@
        value: data.areaCode
       };
     }
-     this.OrgSelectChange(null);
+     this.orgSelectChange(null);
+     if (!!this.configMap.organizationId && !data.organizationId) {
+          data.organizationId = this.configMap.organizationId;
+     }
      const validates: MonitorPoint|object  = {
           name: [data.name, [Validators.required] ],
           organizationId: [data.organizationId, [Validators.required]],
@@ -48,6 +51,11 @@
      };
      this.validateForm = this.formBuilder.group(
          validates
+     );
+     this.validateForm.controls['organizationId'].valueChanges.subscribe(
+       value => {
+        this.configMap.organizationId = value;
+       }
      );
   }
   close() {
@@ -121,7 +129,7 @@
       this.data.townCode = codes[3];
       this.data.villageCode = codes[4];
   }
-  OrgSelectChange(text) {
+  orgSelectChange(text) {
       const pageBean: PageBean = {pageIndex: 0, pageSize: 20};
       this.organizationService.getPagingList(pageBean, text).subscribe(
         (res: PageBean) => {
diff --git a/src/app/routes/devices/monitor-point/monitor-point.component.html b/src/app/routes/devices/monitor-point/monitor-point.component.html
index b676ceb..bf46e24 100644
--- a/src/app/routes/devices/monitor-point/monitor-point.component.html
+++ b/src/app/routes/devices/monitor-point/monitor-point.component.html
@@ -1,14 +1,28 @@
 <pro-header [title]="grid.title"></pro-header>
 <nz-card [nzBordered]="false">
-    	<div class="mb-md">
+    <div nz-row class="mb-sm">
+               <div nz-col [nzSpan]="6">
                 <button nz-button (click)="addOrModify($event)" [nzType]="'primary'" [nzSize]="'large'">
                     <i class="anticon anticon-plus"></i><span>������</span>
                 </button>
                 <ng-container *ngIf="grid.selectedIndexs.length > 0"> &nbsp;
                 <button nz-button [nzSize]="'large'" (click)="deleteSelected()">������������</button>
                 </ng-container>
-                <nz-input [ngStyle]="{'width': '280px','float':'right'}" [(ngModel)]="queryMap.value" name=""  [nzPlaceHolder]="queryMap.text"
-                (keyup)="queryTextChanged($event)" (change)="queryTextChanged($event)" ></nz-input>
+                </div>
+                <div nz-col style="text-align:right;padding: 5px 10px;" [nzSm]="6" [nzXs]="24">
+                    <label>���������</label>
+                </div>
+                <div nz-col [nzSpan]="6">
+                    <nz-select style="width: 90%;" [(ngModel)]="queryMap.organizationId" (ngModelChange)="setOrganizationId($event)" [nzPlaceHolder]="'������ ������(������������������)'"
+                      nzAllowClear [nzFilter]="false" nzShowSearch  (nzSearchChange)="orgSelectChange($event)" [nzNotFoundContent]="'������������'" >
+                      <nz-option *ngFor="let option of orgOptions" [nzLabel]="option.name" [nzValue]="option.id" [nzDisabled]="option.disabled">
+                      </nz-option>
+                    </nz-select>
+                </div>
+                <div nz-col [nzSpan]="6">
+                    <nz-input  [(ngModel)]="queryMap.mpointName" name=""  [nzPlaceHolder]="'������������������������'"
+                    (keyup)="queryTextChanged($event)" (change)="queryTextChanged($event)" ></nz-input>
+                </div>
         </div>
     	<div class="mb-md">
                 <nz-alert *ngIf="grid.selectedIndexs.length > 0" [nzType]="'info'" [nzShowIcon]="true"> 
diff --git a/src/app/routes/devices/monitor-point/monitor-point.component.ts b/src/app/routes/devices/monitor-point/monitor-point.component.ts
index 67e290b..6892d0e 100644
--- a/src/app/routes/devices/monitor-point/monitor-point.component.ts
+++ b/src/app/routes/devices/monitor-point/monitor-point.component.ts
@@ -14,6 +14,8 @@
 import { MonitorPointEditComponent } from 'app/routes/devices/monitor-point/monitor-point-edit/monitor-point-edit.component';
 import { MonitorPointService } from '@business/services/http/monitor-point.service';
 import { CoordinatesPickerComponent } from 'app/routes/map/coordinates-picker/coordinates-picker.component';
+import { OrganizationService } from '@business/services/http/organization.service';
+import { ExampleService } from '@business/services/util/example.service';
 
 
 @Component({
@@ -23,10 +25,10 @@
 })
 export class MonitorPointComponent implements OnInit {
 
-
+  public orgOptions = [];
   private monitorPoint: MonitorPoint;
   grid: Grid<MonitorPoint> = new Grid(null);
-  queryMap = { text: '���������������', value: '' };
+  queryMap: { mpointName?: string, organizationId?: number } = { mpointName: null, organizationId: null };
   queryTextStream: Subject<string> = new Subject<string>();
   private initPage() {
     this.monitorPoint = {
@@ -64,10 +66,10 @@
   constructor(
     private coorPickerService: CoorPickerService,
     private monitorPointService: MonitorPointService,
-
     private confirmServ: NzModalService,
     public msgSrv: NzMessageService,
     private modalHelper: ModalHelper,
+    private organizationService: OrganizationService
   ) { }
 
   ngOnInit() {
@@ -78,9 +80,14 @@
       .subscribe(queryText => {
         this.load();
       });
+    this.orgSelectChange();
+  }
+ public setOrganizationId(orgId) {
+    this.queryMap.organizationId = orgId;
+    this.load();
   }
   queryTextChanged($event) {
-    this.queryTextStream.next(this.queryMap.value);
+    this.queryTextStream.next(this.queryMap.mpointName);
   }
   load(reload: boolean = false) {
     if (reload) {
@@ -90,7 +97,13 @@
     setTimeout(() => {
       this.grid.loading = true;
     }, 1);
-    this.monitorPointService.getPagingList(this.grid, this.queryMap.value).subscribe(
+    const example = new ExampleService();
+    const organizationId = !!this.queryMap.organizationId ? this.queryMap.organizationId : null;
+    const mpointName = !!this.queryMap.mpointName ? '%' + this.queryMap.mpointName + '%' : null;
+    example.or()
+    .andEqualTo({name: 'organizationId', value: organizationId })
+    .andLike({name: 'name', value: mpointName  });
+    this.monitorPointService.getPageByExample(this.grid, example).subscribe(
       (res: PageBean) => {
         this.grid.loading = true;
         if (res != null && res.data != null) {
@@ -110,7 +123,8 @@
     if (d != null) {
       Object.assign(data, d);
     }
-    this.modalHelper.static(MonitorPointEditComponent, { data }).subscribe(
+    const configMap = this.queryMap;
+    this.modalHelper.static(MonitorPointEditComponent, { data, configMap }).subscribe(
       (ret: { data: any, close: Function }) => {
         // ������������
         if (ret.data['index'] != null) {
@@ -217,4 +231,14 @@
       }
     );
   }
+  orgSelectChange(text?: string) {    
+    const pageBean: PageBean = {pageIndex: 0, pageSize: 20};
+    this.organizationService.getPagingList(pageBean, text).subscribe(
+      (res: PageBean) => {
+           if (res != null && res.data != null) {               
+               this.orgOptions = res.data;
+           }
+      }
+   );
+  }
 }
diff --git a/src/app/routes/devices/version/version-edit/version-edit.component.ts b/src/app/routes/devices/version/version-edit/version-edit.component.ts
index b6d02dd..273b62f 100644
--- a/src/app/routes/devices/version/version-edit/version-edit.component.ts
+++ b/src/app/routes/devices/version/version-edit/version-edit.component.ts
@@ -1,8 +1,11 @@
 import { DeviceVersion } from '@business/entity/data';
 import { Component, OnInit } from '@angular/core';
 import { NzMessageService, NzModalSubject } from 'ng-zorro-antd';
-import { FormGroup, FormBuilder, Validators } from '@angular/forms';
-
+import { FormGroup, FormBuilder, Validators, FormControl } from '@angular/forms';
+import { _HttpClient } from '@delon/theme';
+import { ResultBean } from '@business/entity/grid';
+import { Observable } from 'rxjs/Observable';
+import { ToolsService } from '@business/services/util/tools.service';
 @Component({
   selector: 'app-version-edit',
   templateUrl: './version-edit.component.html',
@@ -10,29 +13,47 @@
 })
 export class VersionEditComponent implements OnInit {
  
+  private originalData: DeviceVersion = {};
   cols: DeviceVersion;
-
   data: DeviceVersion;
   isSaving = false;
   validateForm: FormGroup;
   constructor(    
     private subject: NzModalSubject,
-    private formBuilder: FormBuilder
+    private formBuilder: FormBuilder,
+    private http: _HttpClient
     ) { }
 
   ngOnInit() {
      if (this.data.createTime == null) {
       this.data.createTime = new Date().getTime();
      }
+     if (!this.data.version) { 
+       this.setMaxVersionNo();
+     }
      const validates: DeviceVersion = {
           name: [this.data.name, [Validators.required] ],
-          version: [this.data.version == null ? 1 : this.data.version, [Validators.required] ],
+          version: [this.data.version, [Validators.required], [this.versionAsyncValidator] ],
           createTime: [this.data.createTime, [Validators.required] ],
           description: [this.data.description]
      };
+     Object.assign(this.originalData, this.data);
      this.validateForm = this.formBuilder.group(
       validates
      );
+  }
+  private setMaxVersionNo() {
+      this.isSaving = true;
+      this.http.get('device-version/get-maxverno').subscribe(
+         (res: ResultBean<number>) => {
+              if (!!res.code && res.data) {
+                 ToolsService.setValueToControl(this.validateForm, 'version', res.data + 1);
+              }else {
+                this.data.version = 1;
+              }
+          this.isSaving = false;
+         }
+      );
   }
   close() {
        this.subject.destroy();
@@ -64,6 +85,33 @@
         this.validate(); 
       }
   }
+  versionAsyncValidator = (control: FormControl): any => {
+    return Observable.create(observer => {
+        if (!!control && !!control.value) {
+              // ���������������version���������
+              if (!!this.originalData && this.originalData.version === control.value) {
+                observer.next(null);
+                observer.complete();
+            } else {
+                this.isSaving = true;
+                this.http.get('device-version/get-byversion', {version: control.value} ).subscribe(
+                  (res: ResultBean<any>) => {
+                      if (!!res.code && !!res.data) {
+                        observer.next({ error: true, duplicated: true });
+                      } else {
+                        observer.next(null);
+                      }
+                      observer.complete();
+                      this.isSaving = false;
+                  }
+                );
+            }
+        }else {
+          observer.next(null);
+          observer.complete();
+        }        
+    });
+  }
   validate() {
      for (const i in this.validateForm.controls) {
        this.validateForm.controls[ i ].markAsDirty();
diff --git a/src/app/routes/map/coordinates-picker/coordinates-picker.component.ts b/src/app/routes/map/coordinates-picker/coordinates-picker.component.ts
index 470d625..726a069 100644
--- a/src/app/routes/map/coordinates-picker/coordinates-picker.component.ts
+++ b/src/app/routes/map/coordinates-picker/coordinates-picker.component.ts
@@ -1,6 +1,6 @@
 import { NzModalSubject } from 'ng-zorro-antd';
 import { ReactiveFormsModule } from '@angular/forms';
-import { ViewEncapsulation, Component,  ViewChild, ElementRef, NgZone } from '@angular/core';
+import { ViewEncapsulation, Component,  ViewChild, ElementRef, NgZone, OnInit } from '@angular/core';
 import { MapOptions, Point, MarkerOptions, ControlAnchor, NavigationControlOptions, NavigationControlType, BMapInstance } from 'angular2-baidu-map';
 import { CoorPicker } from '@business/entity/data';
 import { CoorPickerService } from 'app/routes/map/coordinates-picker/coordinates-picker.service';
@@ -13,7 +13,7 @@
   templateUrl: './coordinates-picker.component.html',
   styleUrls: [ './coordinates-picker.component.css' ],
 })
-export class CoordinatesPickerComponent {
+export class CoordinatesPickerComponent implements OnInit {
     Default_LNG = 121;
     Default_LAT = 31.4;
     isSaving = false;
@@ -30,6 +30,9 @@
     _BMap: any = null;
 
   constructor(private subject: NzModalSubject, private coorPickerService: CoorPickerService) {
+   
+  }
+  ngOnInit(): void {
     this.data = this.coorPickerService.data;
     let lng = this.data.longitude;
     lng = lng === 0 || lng == null ? this.Default_LNG : lng;
@@ -69,7 +72,7 @@
            width: -15
         }
        };
-  } 
+  }
   private _marker: any = null;
   loadMarker(marker) {
     if (this._marker == null) {
@@ -84,7 +87,7 @@
       this._map.addEventListener(
         'tilesloaded',
         (type, fn) => {
-           this._map.clearOverlays();
+          //  this._map.clearOverlays();
            this._map.addOverlay(this._marker);          
         }
       ); 

--
Gitblit v1.8.0