import { ProtocolRequest, ProtocolResponse, ProtocolEncoder, PacketBody, ProtocolDecoder, ProtocolMessage, PacketBodyValue, BodyStringDivider, ProtocolStream } from '@ucap-webmessenger/protocol'; import { EmployeeType } from '@ucap-webmessenger/protocol-room'; import { RoleCode } from '@ucap-webmessenger/protocol-authentication'; import { DeptSearchType } from '../types/dept-search.type'; import { CallMode } from '@ucap-webmessenger/core'; export interface DeptUserRequest extends ProtocolRequest { // DivCD(s) divCd: string; // 기관코드(s) companyCode: string; // 부서SEQ(n) seq?: number; // 검색string(s) search?: string; // 검색범위(s) searchRange: DeptSearchType; // 요청리스트(n) 사용안하면 0 최대 200 pageListCount?: number; // 요청페이지(n) 사용안하면 0 처음은 1 pageCurrent?: number; // 발신자회사코드(s) senderCompanyCode: string; // 발신자임직원유형(s) senderEmployeeType: EmployeeType; } export interface UserInfoSS { // 사용자SEQ seq: number; // 사용자명 name: string; // 사진파일 profileImageFile: string; // 직급 grade: string; // 업무소개 intro: string; // 기관코드 companyCode: string; // 핸드폰번호 hpNumber: string; // 내선번호 lineNumber: string; // 이메일 email: string; // 모바일YN isMobile: boolean; // 부서명 deptName: string; // 조회순서 order: string; // ActiveYN isActive: boolean; // 역할코드 roleCd: RoleCode; // 사번 employeeNum: string; // MADN madn: string; // HARDPHONE_SADN hardSadn: string; // FMC_SADN fmcSadn: string; // CALL_MODE callMode: CallMode; // 사용자명(영어) nameEn: string; // 사용자명(중국어) nameCn: string; // 직급(영어) gradeEn: string; // 직급(중국어) gradeCn: string; // 부서명(영어) deptNameEn: string; // 부서명(중국어) deptNameCn: string; // 부서SEQ deptSeq: number; // 이용약관동의여부YN isPrivacyAgree: boolean; // 유효접속여부YN isValidLogin: boolean; // 임직원유형(s) employeeType: EmployeeType; } export interface DeptUserData extends ProtocolStream { // DivCD(s) divCd: string; // {부서정보-S}... userInfos: UserInfoSS[]; } export interface DeptUserResponse extends ProtocolResponse { // DivCD(s) divCd: string; // 전체갯수(n) pageTotalCount: number; // 요청리스트(n) pageListCount?: number; // 페이지(n) pageCurrent?: number; } export const encodeDeptUser: ProtocolEncoder = ( req: DeptUserRequest ) => { const bodyList: PacketBody[] = []; bodyList.push({ type: PacketBodyValue.String, value: req.divCd }); bodyList.push({ type: PacketBodyValue.String, value: req.companyCode }); bodyList.push({ type: PacketBodyValue.Integer, value: req.seq || 0 }); bodyList.push({ type: PacketBodyValue.String, value: req.search || '' }); bodyList.push({ type: PacketBodyValue.String, value: req.searchRange }); bodyList.push({ type: PacketBodyValue.Integer, value: req.pageListCount || 0 }); bodyList.push({ type: PacketBodyValue.Integer, value: req.pageCurrent || 0 }); bodyList.push({ type: PacketBodyValue.String, value: req.senderCompanyCode }); bodyList.push({ type: PacketBodyValue.String, value: req.senderEmployeeType }); return bodyList; }; export const decodeDeptUserData: ProtocolDecoder = ( message: ProtocolMessage ) => { const userInfos: UserInfoSS[] = []; message.bodyList.slice(1).forEach(userInfo => { const info = userInfo.split(BodyStringDivider); let i = 0; userInfos.push({ seq: Number(info[i]), name: info[i++], profileImageFile: info[i++], grade: info[i++], intro: info[i++], companyCode: info[i++], hpNumber: info[i++], lineNumber: info[i++], email: info[i++], isMobile: info[i++] === 'Y' ? true : false, deptName: info[i++], order: info[i++], isActive: info[i++] === 'Y' ? true : false, roleCd: info[i++] as RoleCode, employeeNum: info[i++], madn: info[i++], hardSadn: info[i++], fmcSadn: info[i++], callMode: info[i++] as CallMode, nameEn: info[i++], nameCn: info[i++], gradeEn: info[i++], gradeCn: info[i++], deptNameEn: info[i++], deptNameCn: info[i++], deptSeq: info[i++], isPrivacyAgree: info[i++] === 'Y' ? true : false, isValidLogin: info[i++] === 'Y' ? true : false, employeeType: info[i++] as EmployeeType }); }); return { divCd: message.bodyList[0], userInfos } as DeptUserData; }; export const decodeDeptUser: ProtocolDecoder = ( message: ProtocolMessage ) => { return { divCd: message.bodyList[0], pageTotalCount: message.bodyList[1], pageListCount: message.bodyList[2], pageCurrent: message.bodyList[3] } as DeptUserResponse; };