From c1930204095035f65b34877bba820c80a953c1d5 Mon Sep 17 00:00:00 2001 From: leejinho Date: Sun, 15 Dec 2019 21:36:12 +0900 Subject: [PATCH] =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=ED=8C=9D=EC=97=85=20=EC=A0=95=EB=B3=B4=20=EC=88=98?= =?UTF-8?q?=EC=A7=91=EB=B0=A9=EC=8B=9D=20=EB=B3=80=EA=B2=BD.=20>>=20?= =?UTF-8?q?=EA=B8=B0=EC=A1=B4=20=EC=97=AC=EB=A0=A4=20type=20=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=9C=A0=EC=9E=85=EB=90=98=EB=8A=94=20userInfo=20?= =?UTF-8?q?=EB=93=A4=EC=9D=84=20SSVC=5FTYPE=5FQUERY=5FDATA=5FUSER=5FREQ=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=86=A0=EC=BD=9C=EC=9D=84=20=ED=86=B5?= =?UTF-8?q?=ED=95=9C=20{=EC=82=AC=EC=9A=A9=EC=9E=90=EC=A0=95=EB=B3=B4SS}?= =?UTF-8?q?=20=ED=83=80=EC=9E=85=EC=9C=BC=EB=A1=9C=20=EC=9D=BC=EA=B4=84?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit >> 대상향으로 추가정보 추가 수집하도록 커스터마이징 --- .../message/message-write.dialog.component.ts | 3 +- .../notice-detail.dialog.component.spec.ts | 2 +- .../profile/profile.dialog.component.ts | 14 +-- .../components/main.page.component.ts | 100 ++++++++++++++---- .../src/app/store/messenger/query/effects.ts | 2 - .../src/lib/protocols/data-user.ts | 77 ++++++++++++++ .../lib/services/daesang-protocol.service.ts | 33 ++++++ .../src/lib/ucap-daesang.module.ts | 3 +- .../src/public-api.ts | 3 + .../src/lib/models/user-info-ss.ts | 7 ++ .../src/lib/components/profile.component.html | 90 +++++++++++++++- .../src/lib/components/profile.component.ts | 38 +++++-- 12 files changed, 328 insertions(+), 44 deletions(-) create mode 100644 projects/ucap-webmessenger-daesang/src/lib/protocols/data-user.ts create mode 100644 projects/ucap-webmessenger-daesang/src/lib/services/daesang-protocol.service.ts diff --git a/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/message/message-write.dialog.component.ts b/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/message/message-write.dialog.component.ts index 070788f3..a40ff35b 100644 --- a/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/message/message-write.dialog.component.ts +++ b/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/message/message-write.dialog.component.ts @@ -27,13 +27,14 @@ import { } from '../chat/create-chat.dialog.component'; import { UserSelectDialogType, EnvironmentsInfo } from '@app/types'; import { take } from 'rxjs/operators'; +import { UserInfoSS } from '@ucap-webmessenger/protocol-query'; export interface MessageWriteDialogData { loginRes: LoginResponse; environmentsInfo: EnvironmentsInfo; detail?: DetailResponse; detailContents?: string; - receiverList?: UserInfo[]; + receiverList?: (UserInfo | UserInfoSS)[]; } // tslint:disable-next-line: no-empty-interface diff --git a/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/notice/notice-detail.dialog.component.spec.ts b/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/notice/notice-detail.dialog.component.spec.ts index 7a9834fb..38b38997 100644 --- a/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/notice/notice-detail.dialog.component.spec.ts +++ b/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/notice/notice-detail.dialog.component.spec.ts @@ -5,7 +5,7 @@ import { DebugElement } from '@angular/core'; import { NoticeDetailDialogComponent } from './notice-detail.dialog.component'; -describe('ProfileDialogComponent', () => { +describe('NoticeDialogComponent', () => { let component: NoticeDetailDialogComponent; let fixture: ComponentFixture; diff --git a/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/profile/profile.dialog.component.ts b/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/profile/profile.dialog.component.ts index a6625fe4..2687759a 100644 --- a/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/profile/profile.dialog.component.ts +++ b/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/profile/profile.dialog.component.ts @@ -111,7 +111,7 @@ export class ProfileDialogComponent implements OnInit, OnDestroy { } } - onClickChat(userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN) { + onClickChat(userInfo: UserInfoSS) { if (userInfo.seq === this.loginRes.userSeq) { this.store.dispatch( ChatStore.openRoom({ userSeqList: [this.loginRes.talkWithMeBotSeq] }) @@ -123,7 +123,7 @@ export class ProfileDialogComponent implements OnInit, OnDestroy { this.dialogRef.close(); } - onClickSendMessage(userInfo: UserInfo) { + onClickSendMessage(userInfo: UserInfoSS) { if (userInfo.seq !== this.loginRes.userSeq) { this.dialogRef.close(); @@ -145,10 +145,7 @@ export class ProfileDialogComponent implements OnInit, OnDestroy { } } - onClickToggleFavorit(param: { - userInfo: UserInfo | UserInfoF; - isFavorit: boolean; - }) { + onClickToggleFavorit(param: { userInfo: UserInfoSS; isFavorit: boolean }) { this.store.dispatch( SyncStore.updateBuddy({ seq: param.userInfo.seq, @@ -157,10 +154,7 @@ export class ProfileDialogComponent implements OnInit, OnDestroy { ); } - async onClickToggleBuddy(param: { - userInfo: UserInfo | UserInfoF; - isBuddy: boolean; - }) { + async onClickToggleBuddy(param: { userInfo: UserInfoSS; isBuddy: boolean }) { if (param.isBuddy) { // 동료추가. const result = await this.dialogService.open< diff --git a/projects/ucap-webmessenger-app/src/app/pages/messenger/components/main.page.component.ts b/projects/ucap-webmessenger-app/src/app/pages/messenger/components/main.page.component.ts index 9c625a77..535ffcb2 100644 --- a/projects/ucap-webmessenger-app/src/app/pages/messenger/components/main.page.component.ts +++ b/projects/ucap-webmessenger-app/src/app/pages/messenger/components/main.page.component.ts @@ -1,22 +1,19 @@ -import { map, tap } from 'rxjs/operators'; +import { map, tap, take } from 'rxjs/operators'; import { Component, OnInit, Inject, OnDestroy, ViewChild } from '@angular/core'; import { Store, select } from '@ngrx/store'; -import * as AppSotre from '@app/store'; +import * as AppStore from '@app/store'; import * as ChatStore from '@app/store/messenger/chat'; import { Observable, Subscription } from 'rxjs'; -import { - WindowIdle, - UCAP_NATIVE_SERVICE, - NativeService -} from '@ucap-webmessenger/native'; +import { UCAP_NATIVE_SERVICE, NativeService } from '@ucap-webmessenger/native'; import { UserInfo } from '@ucap-webmessenger/protocol-sync'; import { UserInfoSS, UserInfoF, - UserInfoDN + UserInfoDN, + QueryProtocolService } from '@ucap-webmessenger/protocol-query'; import { StatusProtocolService } from '@ucap-webmessenger/protocol-status'; import { StatusType, StatusCode } from '@ucap-webmessenger/core'; @@ -26,9 +23,10 @@ import { ProfileDialogData, ProfileDialogResult } from '@app/layouts/messenger/dialogs/profile/profile.dialog.component'; -import { MatSidenav, MatDrawer } from '@angular/material'; -import { SplitAreaDirective } from 'angular-split'; +import { MatDrawer } from '@angular/material'; import { NGXLogger } from 'ngx-logger'; +import { LoginResponse } from '@ucap-webmessenger/protocol-authentication'; +import { DaesangProtocolService } from '@ucap-webmessenger/daesang'; @Component({ selector: 'app-page-messenger-main', @@ -44,19 +42,23 @@ export class MainPageComponent implements OnInit, OnDestroy { defaultLeftSideComponentWidth = 380; leftSideComponentWidth = this.defaultLeftSideComponentWidth; + loginRes: LoginResponse; + loginResSubscription: Subscription; + @ViewChild('rightDrawer', { static: true }) rightDrawer: MatDrawer; constructor( @Inject(UCAP_NATIVE_SERVICE) private nativeService: NativeService, private store: Store, private statusProtocolService: StatusProtocolService, + private daesangProtocolService: DaesangProtocolService, private dialogService: DialogService, private logger: NGXLogger ) {} ngOnInit(): void { this.selectedChat$ = this.store.pipe( - select(AppSotre.MessengerSelector.ChatSelector.selectedRoom), + select(AppStore.MessengerSelector.ChatSelector.selectedRoom), tap(selectedRoom => { if (!selectedRoom) { this.rightDrawer.close(); @@ -65,7 +67,7 @@ export class MainPageComponent implements OnInit, OnDestroy { }) ); this.selectedRightDrawer$ = this.store.pipe( - select(AppSotre.MessengerSelector.ChatSelector.selectedRightDrawer), + select(AppStore.MessengerSelector.ChatSelector.selectedRightDrawer), tap(selectedRightDrawer => { if (!!selectedRightDrawer) { this.rightDrawer.open(); @@ -101,6 +103,15 @@ export class MainPageComponent implements OnInit, OnDestroy { .subscribe(roomSeq => { this.store.dispatch(ChatStore.selectedRoom({ roomSeq })); }); + + this.loginResSubscription = this.store + .pipe( + select(AppStore.AccountSelector.AuthenticationSelector.loginRes), + tap(loginRes => { + this.loginRes = loginRes; + }) + ) + .subscribe(); } ngOnDestroy(): void { @@ -112,6 +123,10 @@ export class MainPageComponent implements OnInit, OnDestroy { this.chatOpenRoomSubscription.unsubscribe(); } + if (!!this.loginResSubscription) { + this.loginResSubscription.unsubscribe(); + } + this.logger.debug('-----------------------MainPageComponent ngOnDestroy'); } @@ -133,15 +148,58 @@ export class MainPageComponent implements OnInit, OnDestroy { } onClickOpenProfile(userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN) { - this.dialogService.open< - ProfileDialogComponent, - ProfileDialogData, - ProfileDialogResult - >(ProfileDialogComponent, { - data: { - userInfo - } - }); + // [GROUP] + // this.queryProtocolService + // .dataUser({ + // divCd: 'OPENPROF', + // seq: userInfo.seq, + // senderCompanyCode: this.loginRes.userInfo.companyCode, + // senderEmployeeType: this.loginRes.userInfo.employeeType + // }) + // .pipe( + // take(1), + // map(res => { + // if (!!res && !!res.userInfo) { + // this.dialogService.open< + // ProfileDialogComponent, + // ProfileDialogData, + // ProfileDialogResult + // >(ProfileDialogComponent, { + // data: { + // userInfo: res.userInfo + // } + // }); + // } + // }) + // ) + // .subscribe(); + + // [Daesang] + this.daesangProtocolService + .dataUserDaesang({ + divCd: 'OPENPROF', + seq: userInfo.seq, + senderCompanyCode: this.loginRes.userInfo.companyCode, + senderEmployeeType: this.loginRes.userInfo.employeeType + }) + .pipe( + take(1), + map(res => { + console.log(res); + if (!!res && !!res.userInfo) { + this.dialogService.open< + ProfileDialogComponent, + ProfileDialogData, + ProfileDialogResult + >(ProfileDialogComponent, { + data: { + userInfo: res.userInfo + } + }); + } + }) + ) + .subscribe(); } onCloseRightDrawer() { diff --git a/projects/ucap-webmessenger-app/src/app/store/messenger/query/effects.ts b/projects/ucap-webmessenger-app/src/app/store/messenger/query/effects.ts index c9a14d88..063941ba 100644 --- a/projects/ucap-webmessenger-app/src/app/store/messenger/query/effects.ts +++ b/projects/ucap-webmessenger-app/src/app/store/messenger/query/effects.ts @@ -26,7 +26,6 @@ import { SSVC_TYPE_QUERY_DEPT_USER_RES, DeptUserResponse } from '@ucap-webmessenger/protocol-query'; -import { SessionStorageService } from '@ucap-webmessenger/web-storage'; import { Store } from '@ngrx/store'; @@ -106,7 +105,6 @@ export class Effects { constructor( private actions$: Actions, private store: Store, - private sessionStorageService: SessionStorageService, private queryProtocolService: QueryProtocolService ) {} } diff --git a/projects/ucap-webmessenger-daesang/src/lib/protocols/data-user.ts b/projects/ucap-webmessenger-daesang/src/lib/protocols/data-user.ts new file mode 100644 index 00000000..3773a261 --- /dev/null +++ b/projects/ucap-webmessenger-daesang/src/lib/protocols/data-user.ts @@ -0,0 +1,77 @@ +import { + ProtocolDecoder, + ProtocolMessage, + BodyStringDivider, + decodeProtocolMessage, + ProtocolResponse +} from '@ucap-webmessenger/protocol'; +import { EmployeeType } from '@ucap-webmessenger/protocol-room'; +import { RoleCode } from '@ucap-webmessenger/protocol-authentication'; +import { + UserInfoSS, + DataUserResponse +} from '@ucap-webmessenger/protocol-query'; + +// export interface UserInfoSSForDaesang extends UserInfoSS { +// /****** For daesang ******/ +// /** 사업장 */ +// workplace: string; +// /** 담당업무 */ +// responsibilities: string; +// /** 업무 상태 */ +// workstatus: string; +// } + +// export interface DataUserResponse extends ProtocolResponse { +// // DivCD(s) +// divCd: string; +// // {사용자정보-SS} +// userInfo?: UserInfoSS; +// } + +export const decodeDataUser: ProtocolDecoder = ( + message: ProtocolMessage +) => { + let userInfo: UserInfoSS; + if (message.bodyList.length > 1) { + const info = message.bodyList[1].split(BodyStringDivider); + userInfo = { + seq: Number(info[0]), + name: info[1], + profileImageFile: info[2], + grade: info[3], + intro: info[4], + companyCode: info[5], + hpNumber: info[6], + lineNumber: info[7], + email: info[8], + isMobile: info[9] === 'Y' ? true : false, + deptName: info[10], + order: info[11], + isActive: info[12] === 'Y' ? true : false, + roleCd: info[13] as RoleCode, + employeeNum: info[14], + madn: info[15], + hardSadn: info[16], + fmcSadn: info[17], + callMode: info[18], + nameEn: info[19], + nameCn: info[20], + gradeEn: info[21], + gradeCn: info[22], + deptNameEn: info[23], + deptNameCn: info[24], + deptSeq: info[25], + isPrivacyAgree: info[26] === 'Y' ? true : false, + isValidLogin: info[27] === 'Y' ? true : false, + employeeType: info[28] as EmployeeType, + workplace: info[29], + responsibilities: info[30], + workstatus: info[31] + }; + } + return decodeProtocolMessage(message, { + divCd: message.bodyList[0], + userInfo + } as DataUserResponse); +}; diff --git a/projects/ucap-webmessenger-daesang/src/lib/services/daesang-protocol.service.ts b/projects/ucap-webmessenger-daesang/src/lib/services/daesang-protocol.service.ts new file mode 100644 index 00000000..3c039355 --- /dev/null +++ b/projects/ucap-webmessenger-daesang/src/lib/services/daesang-protocol.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from '@angular/core'; + +import { Observable } from 'rxjs'; +import { take, map } from 'rxjs/operators'; +import { ProtocolService } from '@ucap-webmessenger/protocol'; +import { + DataUserRequest, + SSVC_TYPE_QUERY_DATA_USER_REQ, + SVC_TYPE_QUERY_DATA, + encodeDataUser, + DataUserResponse +} from '@ucap-webmessenger/protocol-query'; +import { decodeDataUser } from '../protocols/data-user'; + +@Injectable({ + providedIn: 'root' +}) +export class DaesangProtocolService { + constructor(private protocolService: ProtocolService) {} + + public dataUserDaesang(req: DataUserRequest): Observable { + return this.protocolService + .call( + SVC_TYPE_QUERY_DATA, + SSVC_TYPE_QUERY_DATA_USER_REQ, + ...encodeDataUser(req) + ) + .pipe( + take(1), + map(res => decodeDataUser(res)) + ); + } +} diff --git a/projects/ucap-webmessenger-daesang/src/lib/ucap-daesang.module.ts b/projects/ucap-webmessenger-daesang/src/lib/ucap-daesang.module.ts index d0c57055..34d47aa9 100644 --- a/projects/ucap-webmessenger-daesang/src/lib/ucap-daesang.module.ts +++ b/projects/ucap-webmessenger-daesang/src/lib/ucap-daesang.module.ts @@ -1,8 +1,9 @@ import { NgModule, ModuleWithProviders } from '@angular/core'; import { DaesangCipherService } from './services/daesang-cipher.service'; +import { DaesangProtocolService } from './services/daesang-protocol.service'; -const SERVICES = [DaesangCipherService]; +const SERVICES = [DaesangCipherService, DaesangProtocolService]; @NgModule({ declarations: [], diff --git a/projects/ucap-webmessenger-daesang/src/public-api.ts b/projects/ucap-webmessenger-daesang/src/public-api.ts index a59808f2..2605da8f 100644 --- a/projects/ucap-webmessenger-daesang/src/public-api.ts +++ b/projects/ucap-webmessenger-daesang/src/public-api.ts @@ -3,5 +3,8 @@ */ export * from './lib/services/daesang-cipher.service'; +export * from './lib/services/daesang-protocol.service'; export * from './lib/ucap-daesang.module'; + +export * from './lib/protocols/data-user'; diff --git a/projects/ucap-webmessenger-protocol-query/src/lib/models/user-info-ss.ts b/projects/ucap-webmessenger-protocol-query/src/lib/models/user-info-ss.ts index 6883118a..c5131223 100644 --- a/projects/ucap-webmessenger-protocol-query/src/lib/models/user-info-ss.ts +++ b/projects/ucap-webmessenger-protocol-query/src/lib/models/user-info-ss.ts @@ -61,4 +61,11 @@ export interface UserInfoSS { isValidLogin: boolean; /** 임직원유형(s) */ employeeType: EmployeeType; + + /** 사업장 */ + workplace?: string; + /** 담당업무 */ + responsibilities?: string; + /** 업무 상태 */ + workstatus?: string; } diff --git a/projects/ucap-webmessenger-ui-profile/src/lib/components/profile.component.html b/projects/ucap-webmessenger-ui-profile/src/lib/components/profile.component.html index 80045fde..7a3a3e59 100644 --- a/projects/ucap-webmessenger-ui-profile/src/lib/components/profile.component.html +++ b/projects/ucap-webmessenger-ui-profile/src/lib/components/profile.component.html @@ -116,6 +116,28 @@
    +
  • + + + + + + {{ userInfo.workplace }} +
  • {{ userInfo.hpNumber }}
  • +
  • + + + + + + {{ userInfo.responsibilities }} +
  • +
  • + + + + + + {{ getWorkstatus(userInfo) }} +
@@ -227,7 +293,7 @@ *ngIf="!isMe" matTooltip="전화" matTooltipPosition="above" - (click)="onClickCall()" + (click)="onClickCall('LINE')" > + + + + +