2019-09-27 12:51:57 +09:00

194 lines
4.9 KiB
TypeScript

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<DeptUserRequest> = (
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<DeptUserData> = (
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<DeptUserResponse> = (
message: ProtocolMessage
) => {
return {
divCd: message.bodyList[0],
pageTotalCount: message.bodyList[1],
pageListCount: message.bodyList[2],
pageCurrent: message.bodyList[3]
} as DeptUserResponse;
};