meetingService.js 9.4 KB
var meetingModel =  require('../model/meetingModel');
var oldMeetingModel =  require('../model/oldMeetingModel');
var oldMeetingRecording =  require('../model/oldMeetingRecording');
var v_meetingModel =  require('../model/v_meetingModel');
var status = require('../util/resTemplate');
var saitMd5 = require('../util/saltMD5');
var  sequelize = require('../config');
var tokenUtil =  require('../util/tokenUtil');
var saitMd5 = require('../util/saltMD5')
var co = require('co');

const xml2js = require('xml2js');
const requestUtil = require('../util/requestUtil')
const builder = new xml2js.Builder();  // JSON->xml
const parser = new xml2js.Parser();   //xml -> json


function meetingService(){
}

meetingService.prototype.createMeeting = async(meetingInfo) =>{
    try {
        let backMeeting = await meetingModel.create(meetingInfo);
        return backMeeting
    } catch (error) {
        throw error
    }
}
meetingService.prototype.getMeeting = async(queryData,page = 1,pageno =12) =>{
    try {
        let sql =`SELECT
                    id,
                    meeting_number AS meetingNumber,
                    meeting_name AS meetingName,
                    meeting_content AS meetingContent,
                    create_user,
                    create_time AS createTime,
                    begin_time AS beginTime,
                    end_time AS endTime,
                    invite_user AS inviteUser,
                    meeting_type AS meetingType,
                    meeting_status AS meetingStatus,
                    user_ip AS userIp,
                    meeting_key AS meetingKey,
                    host_password AS hostPassword,
                    presenter_password AS presenterPassword,
                    assistant_password AS assistantPassword,
                    attendee_password AS attendeePassword,
                    capacity,
                    top_node_id AS topNodeId,
                    top_node_addr AS topNodeAddr,
                    user_data AS userData,
                    site_id AS siteId,
                    classroom_number AS classroomNumber,
                    ui_language AS uiLanguage,
                    is_public AS isPublic,
                    control_mode AS controlMode,
                    mic_auto AS micAuto,
                    has_interaction AS hasInteraction,
                    auto_record AS autoRecord,
                    max_videoChannels AS maxVideoChannels,
                    max_audioChannels AS maxAudioChannels,
                    video_quality AS videoQuality,
                    pagenavi_Userprivilege AS pagenaviUserprivilege,
                    marker_Userprivilege AS markerUserprivilege,
                    chatToNormal_Userprivilege AS chatToNormalUserprivilege,
                    chatToHost_Userprivilege AS chatToHostUserprivilege,
                    doc_module AS docModule,
                    screen_module AS screenModule,
                    media_module AS mediaModule,
                    whiteboard_module AS whiteboardModule,
                    record_module AS recordModule,
                    video_module AS videoModule,
                    userList_module AS userListModule,
                    chat_module AS chatModule,
                    cycle,
                    repeatmode,
                    endmode,
                    finalenddate,
                    endcount,
                    repeatday,
                    repeatweek,
                    repeatmonthday,
                    repeatmonthweekweek,
                    repeatmonthweekday,
                    frequency,
                    month_type AS monthType,
                    inviter_radio AS inviterRadio,
                    ahead_time AS aheadTime,
                    chat_interval AS chatInterval,
                    h5_Module AS h5Module,
                    (SELECT
                        3m_attachment.path
                    FROM
                        3m_user
                    LEFT JOIN 3m_attachment ON 3m_attachment.business_id = 3m_user.id
                    WHERE
                        3m_user.login_name = 3m_meeting.create_user) teacherPhoto,
                    (
                        SELECT
                            path
                        FROM
                            3m_attachment
                        WHERE
                            3m_attachment.business_id = 3m_meeting.id and 3m_attachment.category = 1
                    ) meetingPhoto,
                    (
                        SELECT
                            COUNT(*)
                        FROM
                            3m_student_meeting
                        WHERE
                            3m_student_meeting.meeting_id = 3m_meeting.id
                    ) reservationNumber
                FROM
                    3m_meeting AS 3m_meeting
                WHERE 3m_meeting.site_id = '` +queryData.siteId+"'";
         if(queryData.create_user){
                    sql += " and 3m_meeting.create_user = '" + queryData.create_user+"'";
        }
        if(queryData.id){
            sql += " and 3m_meeting.id = '" + queryData.id+"'";
        }
        if(queryData.meetingStatus){
            sql += " and 3m_meeting.meeting_status = '" + queryData.meetingStatus+"'";
        }
        if(queryData.meetingType){
            sql += " and 3m_meeting.meeting_type = '" + queryData.meetingType+"'";
        }
        sql +=  ' ORDER BY  3m_meeting.create_time DESC  LIMIT '+(page-1)*pageno+' , ' +pageno
        let backMeeting = await sequelize.query(sql);
        //let backMeeting = await meetingModel.findAll({where:queryData,order:[['createTime', 'DESC']], offset: (page-1)*pageno, limit: pageno});
        let count = await meetingModel.count({where:queryData})
        return {meetingInfo:backMeeting[0],count:count,page:page,pageno:pageno};        
    } catch (error) {
        console.error(error)
        throw error;
    }
}

meetingService.prototype.delMeeting = async(meetingId) =>{
    try {
        let Meeting = await meetingModel.findOne({where:{id:meetingId}}); 
        if(!Meeting){
            return {code:11,msg:'课堂不存在'}            
        }     
        let backMeeting = await meetingModel.destroy({where:{id:meetingId}}); 
        return backMeeting
    } catch (error) {
        throw error;        
    }
}

meetingService.prototype.updateMeeting  = async(params,meetingId) =>{
    try {
        let Meeting = await meetingModel.findOne({where:{id:meetingId}}); 
        if(!Meeting){
            return {code:11,msg:'课堂不存在'}            
        }
        let backMeeting = await meetingModel.update({where:{id:meetingId}}); 
        return backMeeting        
    } catch (error) {
        console.error(error);
        throw error
    }
}

meetingService.prototype.getAllMeetingBySiteID = async(params,page = 1,pageno =10)=>{
    try {
        let oldMeeting = await oldMeetingModel.findAll({where:{siteId:params.meetingId}}); 
        let oldMeetingCont = await oldMeetingModel.count({where:{siteId:params.meetingId}});         
        let Meeting = await meetingModel.findAll({where:{site_id:params.meetingId}});
        let MeetingCount = await meetingModel.count({where:{site_id:params.meetingId}});                        
        if(!Meeting){
            return {code:11,msg:'课堂不存在'}            
        }
        let meetingAll = await v_meetingModel.findAll({where:params,offset: (page-1)*pageno, limit: pageno,order:[['beginTime', 'DESC']]});        
        let meetingdata  = Meeting.concat(oldMeeting);
        await meetingdata.sort(function(m1,m2){
            return new Date(m2.beginTime).getTime() -  new Date(m1.beginTime).getTime();
        });
        console.log((page-1)*pageno,(page-1)*pageno+10)
        // return {meeting:meetingdata.slice((page-1)*pageno,100)} 
        return {meeting:meetingAll}       
    } catch (error) {
        throw error
    }
}

meetingService.prototype.recording = async(params)=>{
    try {
        let newURL = 'http://'+params.siteId+'.xuedianyun.com/3m/doPlayRecord.do?meetingNumber=';
        let Meeting = await meetingModel.findOne({where:{classroomNumber:params.mtgKey}});
        if(Meeting){
            return {url:newURL+Meeting.meetingNumber}
        }else{
            let oldMeeting = await oldMeetingModel.findOne({where:{classroomNumber:params.mtgKey}}); 
            if(!oldMeeting){
                return {code:400,msg:'课堂不存在'}            
            }else{
                let oldURL = 'http://saas.3mang.com:80/3m/attend.do?meetingNumber='+oldMeeting.meetingNumber+'&streamNameOfRecord=';                
                let oldMRecording = await oldMeetingRecording.findOne({where:{meetingId:oldMeeting.meetingNumber}});
                if(!oldMRecording){
                    throw new Error('课堂没有录制')
                }
                var d = oldMRecording.configFile.split('.')[0]
                let a = oldURL+d+"&userRole=record&userName="+params.username+"&password="+oldMeeting.attendeePassword;
                return {url:a}
                // var xml =  builder.buildObject(recordInfo);
                // let info = await requestUtil.post('http://markettest.xuedianyun.com/3m/meeting/join_mtg.do',xml);
                // var jsonXml =  await requestUtil.json2xml(info); 
            }
        }
        return {meeting:Meeting.concat(oldMeeting)}        
    } catch (error) {
        console.error(error);
        throw error
    }
}



module.exports = new meetingService();