UNPKG

fcc-core

Version:

Fusion communication center.

213 lines (209 loc) 8.13 kB
// import { XWPrivate } from '../../core/XW' import BaseException from '../../../errors/base-exception' import { sendPartMessage } from '../../../utils/webServiceSocket/messageSocketApi' import { reject } from 'q' let MDP_MEETING_ID = '' let MDP_MEETING_SNO = '' let MDP_MEETING_NAME = '' let MDP_MEETING_DATA = [] let version = '' let location = {} export default async function (xw, params) { await xw.validate(params, { 'members': { type: 'array', required: true }, 'meetingName': { type: 'string', required: true }, 'location': { type: 'object' }, 'type': { type: 'string' }, 'EVENT': { type: 'object' } }) version = xw.getSysParam('PLATFORM_VERSION') let { members, EVENT, meetingName, type } = params location = params.location || {} const ICP_MAX_NUMBER = xw.getSysParam('ICP_MAX_NUMBER') || 49 if (members.length > ICP_MAX_NUMBER) { throw new xw.BaseException(423, `超过最大与会人数${ICP_MAX_NUMBER}`) } if (!EVENT) { EVENT = { EVENT_ID: '100001', MEET_PLAN_TYPE: '2' } } MDP_MEETING_NAME = meetingName if (xw.agentState !== '1') { throw new BaseException(421) } const HOST_USER_INFO = { OBJ_TYPE: '2', OBJ_ID: String(xw.userInfo.USER_CODE), OBJ_NAME: xw.userInfo.USER_NAME, PART_DEV: '4', PART_SNO: xw.userInfo.ICP_CODE, GLASS_NUM: xw.userInfo.GLASS_NUM, USER_ICON: xw.userInfo.USER_ICON } let MEMBERS = members MEMBERS.push(HOST_USER_INFO) MEMBERS = unique(MEMBERS, 'PART_SNO') if (MEMBERS.length <= 1) { throw new BaseException(420) } return new Promise(async (resolve, reject) => { if (version === '1') { createFuseMeetingOnServiceICP(xw, MEMBERS, EVENT, resolve, reject) // icp创会逻辑 } else { createFuseMeetingOnVC(xw, MEMBERS, EVENT, resolve, reject, type) // VC创会逻辑 } }) } // 服务端创建会议 ICP版 function createFuseMeetingOnServiceICP (xw, MEMBERS, EVENT, resolve, reject) { xw.ajaxRequest([{ service: 'E2601501', CREATE_MEET_FLAG: version === '1' ? '1' : '', MEETING_NAME: MDP_MEETING_NAME, MEETING_TYPE: 1, // 1 融合会议 MEDIAENCRYPTTYPE: 0, DURATION: 1000, EVENT_ID: EVENT.EVENT_ID, // 先写死 HOST_USER: xw.userInfo.USER_CODE, MEET_START_ID: xw.userInfo.USER_CODE, MEMBERS: MEMBERS, CONTINUOUSPRESENCEMODE: '0' }]).then(res => { if (res.code === '0') { MDP_MEETING_ID = res.data[0].MEETING_ID MDP_MEETING_SNO = res.data[0].MEETING_SNO MDP_MEETING_DATA = res.data[0].MEMBERS sendPartMessage({ MEETING_SNO: MDP_MEETING_SNO, MEETING_NAME: MDP_MEETING_NAME, MEETING_ID: '' }, MDP_MEETING_DATA, xw) createFuseMeetingOnICP(xw, MEMBERS, EVENT, resolve, reject) } else { reject(new xw.BaseException(423)) } }) } // 服务端创建会议 VC版 function createFuseMeetingOnServiceVC (xw, MEMBERS, EVENT, resolve, reject, type) { xw.ajaxRequest([{ service: 'E2601501', CREATE_MEET_FLAG: version === '1' ? '1' : '', MEETING_NAME: MDP_MEETING_NAME, MEETING_TYPE: 1, // 1 融合会议 MEDIAENCRYPTTYPE: 0, DURATION: 1000, EVENT_ID: EVENT.EVENT_ID, HOST_USER: xw.userInfo.USER_CODE, MEET_START_ID: xw.userInfo.USER_CODE, CONFMEDIA_TYPE: type, MEMBERS: MEMBERS, // 与会人员 CONTINUOUSPRESENCEMODE: '0' }]).then(async res => { if (res.code === '0') { MDP_MEETING_ID = res.data[0].MEETING_ID MDP_MEETING_SNO = res.data[0].MEETING_SNO MDP_MEETING_DATA = res.data[0].MEMBERS xw.ajaxRequest([{ service: 'E2601302', MEETING_SNO: MDP_MEETING_SNO, MEETING_ID: MDP_MEETING_ID, ACCESS_CODE: res.data[0].ACCESS_CODE, PASSCODE: res.data[0].PASSCODE }]) sendPartMessage({ MEETING_SNO: MDP_MEETING_SNO, MEETING_NAME: MDP_MEETING_NAME, MEETING_ID: MDP_MEETING_ID }, MDP_MEETING_DATA, xw) // 再发一次带url的 let url = xw.icpBaseUrl + 'exe/implant-meeting?USER_CODE=' + xw.userInfo.USER_CODE + '&LANGUAGE=ZH_CN&MDP_MEETING_SNO=' + MDP_MEETING_SNO + '&ROLE_ID=' + xw.userInfo.CURR_ROLE + '&MEET_PLAN_TYPE=' + EVENT.MEET_PLAN_TYPE + '&MDP_MEETING_ID=' + MDP_MEETING_ID if (EVENT.EVENT_TYPE && EVENT.EVENT_LVL_ID) { url += '&EVENT_TYPE=' + EVENT.EVENT_TYPE + '&EVENT_LVL_ID=' + EVENT.EVENT_LVL_ID } xw.exe.emit('SetConfUrl', { confName: MDP_MEETING_NAME, confUrl: url, locX: location ? location.locX : '', locY: location ? location.locY : '', width: location ? location.width : '', height: location ? location.height : '' }) resolve({ MEETING_ID: MDP_MEETING_ID, MEETING_SNO: MDP_MEETING_SNO, ACCESS_CODE: res.data[0].ACCESS_CODE }) } else { reject(new xw.BaseException(423)) } }) } // cs端创建会议 VC版本 function createFuseMeetingOnVC (xw, MEMBERS, EVENT, resolve, reject, type) { xw.exe.emit('SetConfUrl', { confName: MDP_MEETING_NAME, confUrl: '', locX: location ? location.locX : '99', locY: location ? location.locY : '99', width: location ? location.width : '', height: location ? location.height : '' }) xw.exe.once('OnSetConfUrl', data => { if (data.resultCode === 0) { createFuseMeetingOnServiceVC(xw, MEMBERS, EVENT, resolve, reject, type) } else { reject(new xw.BaseException(423)) } }) } // cs端创建会议 ICP版本 function createFuseMeetingOnICP (xw, meetingData, EVENT, resolve, reject) { const MEMBERS = setContinuousMeetingPersonEx(meetingData) const host = xw.icpBaseUrl const ROLE_ID = xw.userInfo.CURR_ROLE let url = host + 'exe/implant-meeting?USER_CODE=' + xw.userInfo.USER_CODE + '&LANGUAGE=ZH_CN&MDP_MEETING_SNO=' + MDP_MEETING_SNO + '&ROLE_ID=' + ROLE_ID + '&MEET_PLAN_TYPE=' + EVENT.MEET_PLAN_TYPE if (EVENT.EVENT_TYPE && EVENT.EVENT_LVL_ID) { url += '&EVENT_TYPE=' + EVENT.EVENT_TYPE + '&EVENT_LVL_ID=' + EVENT.EVENT_LVL_ID } xw.exe.emit('CreateConf', { resId: xw.userInfo.ICP_CODE, isVideo: '1', memberInfo: MEMBERS, confName: MDP_MEETING_NAME, confUrl: url }) let timer = setTimeout(() => { reject(new xw.BaseException(423)) }, 30000) xw.exe.once('OnCreateConf', (res) => { if (res.resultCode === 0) { // 调用后台接口修改会议入会信息(入参内部会议ID,ICP会议ID) sendPartMessage({ MEETING_SNO: MDP_MEETING_SNO, MEETING_ID: MDP_MEETING_ID, MEETING_NAME: MDP_MEETING_NAME }, meetingData, xw) // 点对点会议通知消息 好像有点问题 xw.ajaxRequest([{ service: 'E2601302', MEETING_SNO: MDP_MEETING_SNO, MEETING_ID: res.data.confId, ACCESS_CODE: res.data.accessCode, PASSCODE: res.data.password }]) clearTimeout(timer) resolve({ MEETING_ID: MDP_MEETING_ID, MEETING_SNO: MDP_MEETING_SNO }) } }) } // 处理会议人员数据 function setContinuousMeetingPersonEx (meetingData) { let arr = [] meetingData.forEach(item => { const obj = {} obj.memberId = item.PART_SNO obj.memberName = item.OBJ_NAME || item.PART_SNO obj.glassNum = (item.PART_DEV !== '3' || item.PART_DEV === '6') ? item.GLASS_NUM || '' : '' // 不是电话入会,或者是语音入会的 obj.isMute = (item.USER_TYPE === '4' || item.OBJ_TYPE === '1') ? '0' : '1' // 0静音 1不静音 USER_TYPE=4 一线人员 或者设备 默认都是静音 obj.isCamera = item.OBJ_TYPE === '1' ? '1' : '0' // 只有设备传1 obj.isWatchOnly = '0' // 先默认传0 obj.OBJ_TYPE = item.OBJ_TYPE obj.OBJ_NAME = item.OBJ_NAME || item.PART_SNO obj.OBJ_ID = item.OBJ_ID obj.PART_SNO = item.PART_SNO obj.IS_MUTE = item.IS_MUTE arr.push(obj) }) return arr } // 对象数组根据某个属性去重 function unique (arr, attr) { const res = new Map() return arr.filter((a) => !res.has(a[attr]) && res.set(a[attr], 1)) }