194 lines
4.9 KiB
TypeScript
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;
|
|
};
|