📄 worker.cs
字号:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Xml;
using System.Diagnostics;
using WebHelper.Model;
using System.Text;
/// <summary>
/// Worker 的摘要说明
/// </summary>
public class Worker
{
/// <summary>
/// 所有的客服
/// </summary>
private Dictionary<string, CustomService> _all;
/// <summary>
/// 按分类、在线
/// </summary>
private Dictionary<int, List<string>> _online;
/// <summary>
/// 客服分组
/// </summary>
private List<int> _types;
/// <summary>
/// 记入系统日志
/// </summary>
public Dictionary<string, CustomService> All
{
get { return _all; }
}
private string _fatType;
public string FatType
{
get { return _fatType; }
}
private string _typePath;
public Worker(string path)
{
_typePath = path;
this.loadOnline();
this.loadService();
}
#region 私有
/// <summary>
/// 初始化在线列表
/// </summary>
/// <returns></returns>
public void loadOnline()
{
_online = new Dictionary<int, List<string>>();
_types = new List<int>();
XmlDocument doc = new XmlDocument();
doc.Load(_typePath);
XmlNodeList nl = doc.GetElementsByTagName("Item");
for (int i = 0; i < nl.Count; i++)
{
_online.Add(int.Parse(nl[i].Attributes["Value"].InnerText), new List<string>());
_types.Add(int.Parse(nl[i].Attributes["Value"].InnerText));
}
_fatType = doc.LastChild.InnerXml;
doc = null;
}
/// <summary>
/// 加载所有客服
/// </summary>
public void loadService()
{
_all = new Dictionary<string, CustomService>();
WebHelper.DAL.CustomService dal = new WebHelper.DAL.CustomService();
SqlDataReader dr = dal.GetList();
while (dr.Read())
{
CustomService model = new CustomService();
model.ClassID = (int)dr["ClassID"];
model.CustomServiceID = (int)dr["CustomServiceID"];
model.Name = dr["Name"].ToString();
model.Password = dr["Password"].ToString();
model.Status = 0;
model.Title = dr["Title"].ToString();
model.TrueName = dr["TrueName"].ToString();
model.LastActiveTime = (DateTime)dr["LastActiveTime"];
_all.Add(model.Name, model);
}
dr.Close();
dr.Dispose();
dal = null;
}
#endregion
/// <summary>
/// 访问者登录进来分配客服
/// </summary>
/// <param name="type"></param>
/// <param name="guestID"></param>
/// <returns></returns>
public bool Allot(Guest guest)
{
if (!_online.ContainsKey(guest.AskType))
return false;
int size = 1000000;
CustomService selected=null;
if (_online[guest.AskType].Count > 0)
{
List<string> allOn = _online[guest.AskType];
for (int i = 0; i < allOn.Count; i++)
{
if (_all[allOn[i]].Status < 1) continue;
if (_all[allOn[i]].Guest.Count < size)
{
size = _all[allOn[i]].Guest.Count;
selected = _all[allOn[i]];
}
}
}
else
{
foreach(string k in _all.Keys)
{
if (_all[k].Status < 1) continue;
if (_all[k].Guest.Count < size)
{
size = _all[k].Guest.Count;
selected = _all[k];
}
}
}
if (selected == null) return false;
if(selected.Guest.ContainsKey(guest.GuestID))return true;
selected.Guest.Add(guest.GuestID,guest);
guest.Worker = selected.Name;
return true;
}
/// <summary>
/// 客服登录,1是否成功,2原因
/// </summary>
/// <param name="tcp"></param>
/// <param name="data"></param>
public bool Login(string name, string passWD,out int errorCode)
{
if (!_all.ContainsKey(name))
{
errorCode = 1;
return false;
}
CustomService model = _all[name];
if (model.Password.Trim() != passWD.Trim())
{
errorCode = 2;
return false;
}
////一个客服帐户只能一个地方使用,所以,新的不能登录
//if (model.Status > 0)
//{
// errorCode = 3;
// return false;
//}
model.Status = 1;
_online[model.ClassID].Add(name);
errorCode = 0;
return true;
// model.Log = new Logs.Log(model);//添加日志
}
/// <summary>
/// 退出后,处理他服务的对象
/// </summary>
/// <param name="name"></param>
public void LoginOut(string name)
{
CustomService model = _all[name];
_online[model.ClassID].Remove(name);
_all[name].Status = 0;
foreach (string g in _all[name].Guest.Keys )
{
this.Allot(_all[name].Guest[g]);
}
_all[name].Guest.Clear();
//model.Status = 0;
}
public void ClearGuest(CustomService model)
{
foreach(string k in model.Guest.Keys)
{
model.Guest[k].Worker = null;
}
model.Guest.Clear();
}
/// <summary>
/// 字符串类型的所有客服
/// </summary>
public string AllString()
{
StringBuilder sb = new StringBuilder();
sb.Append("[");
foreach (CustomService v in _all.Values)
{
sb.Append("{");
sb.Append("'TrueName':'"+v.TrueName+"',");
sb.Append("'Name':'" + v.Name + "',");
sb.Append("'Status':'" + v.Status.ToString() + "',");
sb.Append("'ClassID':'" + v.ClassID.ToString() + "'");
sb.Append("},");
}
if(sb.Length>1)
sb.Remove(sb.Length - 1, 1);
sb.Append("]");
return sb.ToString();
}
public string GetAllOnline()
{
StringBuilder sb = new StringBuilder();
sb.Append("{");
foreach (CustomService v in _all.Values)
{
if (v.Status < 1) continue;
sb.Append("'" + v.Name + "':'" + v.Guest.Count.ToString() + "',");
}
if(sb.Length>1)
sb.Remove(sb.Length - 1, 1);
sb.Append("}");
return sb.ToString();
}
public bool ReLine(string send, string to, string guest)
{
CustomService model = _all[to];
if (model.Status < 1)
return false;
model.Guest.Add(guest, _all[send].Guest[guest]);
_all[send].Guest.Remove(guest);
model.Guest[guest].CreateLog();
model.Guest[guest].Worker = model.Name;
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -