/// <summary> /// Init cusSvrConditionTable for one customer server if inner user is customer server. /// </summary> public void InitCusSvr(string cusSvrNum) { BLL.Config.OnlineCusSvrConfig bll = new BLL.Config.OnlineCusSvrConfig(); Dictionary <string, int> configData = bll.GetConfigDataG(); List <string> cusSvrNumList = application["cusSvrNumList"] as List <string>; DataTable dt = application["cusSvrConditionTable"] as DataTable; var linqData = dt.AsEnumerable().Where(c => c.Field <string>("cusSvrNum") == cusSvrNum && c.Field <int>("connLevel") == configData["maxCusSvrConnLevel"]).FirstOrDefault(); //如果是客服的话,设置客服已经登录 //if (cusSvrNumList.Contains(cusSvrNum)) if (linqData != null) { application.Lock(); try { //init cusSvrConditionTable for one customer server opeTable.InitCusSvrCondTableOne(application, cusSvrNum); } catch (Exception ex) { System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(); Log.WriteToLog(st.GetFrame(0).ToString(), ex.Message); throw ex; throw ex; } finally { application.UnLock(); } } }
//添加具有在线客服权限的用户到在线客服datatable中 public void AddInternalUserToCusSvrDatatable(List <string> workNumList) { BLL.Config.OnlineCusSvrConfig bll = new BLL.Config.OnlineCusSvrConfig(); Dictionary <string, int> configData = bll.GetConfigDataG(); try { application.Lock(); foreach (string workNum in workNumList) { DataTable dt = application["cusSvrConditionTable"] as DataTable; DataRow dr = dt.NewRow(); dr["cusSvrNum"] = workNum; dr["connLevel"] = configData["maxCusSvrConnLevel"]; dt.Rows.Add(dr); } } catch (Exception ex) { throw ex; } finally { application.UnLock(); } }
protected void Application_Start(object sender, EventArgs e) { //get online customer server config data BLL.Config.OnlineCusSvrConfig bll = new BLL.Config.OnlineCusSvrConfig(); Dictionary <string, int> configData = bll.GetConfigDataG(); BLL.OnlineCusSvr.CusSvrGlobal bllG = new BLL.OnlineCusSvr.CusSvrGlobal(); List <string> cusSvrNumList = bllG.GetCusSvrWorkNum(); CusSvrInit cusSvrInit = new CusSvrInit(configData); Application["cusSvrNumList"] = cusSvrNumList; Application["cusSvrConditionTable"] = cusSvrInit.CusSvrConditionTableInit(cusSvrNumList); Application["commMaintainTable"] = cusSvrInit.CommMaintainTableInit(); Application["chatRecordsTable"] = cusSvrInit.ChatRecordsTableInit(); cusSvrAssisterTimer = new Timer(new TimerCallback(cusSvrInit.StartAssisterThreading), Application, 0, configData["levelSeconds"] * 1000); //if (configData["cusSvrMode"] == 0) //{ // CusSvrInitLB cusSvrInit = new CusSvrInitLB(configData); // Application["cusSvrNumList"] = cusSvrNumList; // Application["cusSvrConditionTable"] = cusSvrInit.CusSvrConditionTableInit(cusSvrNumList); // Application["commMaintainTable"] = cusSvrInit.CommMaintainTableInit(); // Application["chatRecordsTable"] = cusSvrInit.ChatRecordsTableInit(); // cusSvrAssisterTimer = new Timer(new TimerCallback(cusSvrInit.StartAssisterThreading), Application, 0, configData["levelSeconds"] * 1000); //} //else //{ // CusSvrInitCM cusSvrInit = new CusSvrInitCM(configData); // Application["cusSvrNumList"] = cusSvrNumList; // Application["cusSvrConditionTable"] = cusSvrInit.CusSvrConditionTableInit(cusSvrNumList); // Application["commMaintainTable"] = cusSvrInit.CommMaintainTableInit(); // Application["chatRecordsTable"] = cusSvrInit.ChatRecordsTableInit(); // cusSvrAssisterTimer = new Timer(new TimerCallback(cusSvrInit.StartAssisterThreading), Application, 0, configData["levelSeconds"] * 1000); //} }
/// <summary> /// 在线客服的辅助线程 /// 作用:1、去除超过规定时间的用户,更新客服维护表中客服服务客服数 /// 2、把通信维护表中所有记录的commLevel加1 /// 2、维护客服状态表,设置断开连接的客服,给connLevel加1 /// 3、把聊天记录写入数据库,并清空聊天记录 /// </summary> public void StartAssisterThreading(object obj) { //get online customer server config data BLL.Config.OnlineCusSvrConfig bllConfig = new BLL.Config.OnlineCusSvrConfig(); Dictionary <string, int> configData = bllConfig.GetConfigDataG(); cusSvrMode = configData["cusSvrMode"]; cusSvrUserMaxAmount = configData["cusSvrUserMaxAmount"]; delLeval = configData["cusSvrUserDelLevel"]; maxCusSvrConnLevel = configData["maxCusSvrConnLevel"]; HttpApplicationState application = obj as HttpApplicationState; application.Lock(); try { if (cusSvrMode == 0) { DataTable dtComm = application["commMaintainTable"] as DataTable; DataTable dtCusSvrCondition = application["cusSvrConditionTable"] as DataTable; //删除超时用户 var linq = from c in dtComm.AsEnumerable() where c.Field <int>("commLevel") == delLeval select c; foreach (DataRow dr in linq) { var drTemp = dtCusSvrCondition.AsEnumerable().Where(c => c.Field <string>("cusSvrNum") == dr["cusSvrNum"]).First(); drTemp["userAmount"] = Convert.ToInt32(drTemp["userAmount"]) - 1; dr.Delete(); } //确认删除 dtComm.AcceptChanges(); foreach (DataRow dr in dtComm.Rows) { dr["commLevel"] = Convert.ToInt32(dr["commLevel"]) + 1; } //维护客服状态表 //客服是否已经下线或者断开 foreach (DataRow dr in dtCusSvrCondition.Rows) { if (Convert.ToInt32(dr["connLevel"]) == maxCusSvrConnLevel) { dr["userAmount"] = cusSvrUserMaxAmount; continue; } dr["connLevel"] = Convert.ToInt32(dr["connLevel"]) + 1; } //把聊天记录写入数据库 DataTable dtChatRecords = application["chatRecordsTable"] as DataTable; BLL.OnlineCusSvr.ChatRecords bll = new BLL.OnlineCusSvr.ChatRecords(); bll.SaveChatRecords(dtChatRecords); } else { DataTable dtComm = application["commMaintainTable"] as DataTable; DataTable dtCusSvrCondition = application["cusSvrConditionTable"] as DataTable; //删除超时用户 var linq = from c in dtComm.AsEnumerable() where c.Field <int>("commLevel") == delLeval select c; foreach (DataRow dr in linq) { var drTemp = dtCusSvrCondition.AsEnumerable().Where(c => c.Field <string>("cusSvrNum") == dr["cusSvrNum"]).First(); dr.Delete(); } //确认删除 dtComm.AcceptChanges(); foreach (DataRow dr in dtComm.Rows) { dr["commLevel"] = Convert.ToInt32(dr["commLevel"]) + 1; } //维护客服状态表 //客服是否已经下线或者断开 foreach (DataRow dr in dtCusSvrCondition.Rows) { if (Convert.ToInt32(dr["connLevel"]) == maxCusSvrConnLevel) { continue; } dr["connLevel"] = Convert.ToInt32(dr["connLevel"]) + 1; } //把聊天记录写入数据库 DataTable dtChatRecords = application["chatRecordsTable"] as DataTable; BLL.OnlineCusSvr.ChatRecords bll = new BLL.OnlineCusSvr.ChatRecords(); bll.SaveChatRecords(dtChatRecords); } } catch (Exception ex) { throw ex; } finally { application.UnLock(); } }