fcc-core
Version:
Fusion communication center.
213 lines (209 loc) • 8.13 kB
JavaScript
// 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))
}