//发送邮件 eid:hr系统人员主键 type: 1-同意转出;2-提交
        private void sendEmailByType(int type, string taskID, int eid, string custID, int loginID)
        {
            //1 如果type=1 同意转出,则根据该条任务ID去邮件模板表找到对应的模板ID发送
            if (type == 1)
            {
                QueryCustHistoryTemplateMapping query_Template = new QueryCustHistoryTemplateMapping();
                query_Template.TaskID = taskID;
                int       count;
                DataTable dt_Template = BLL.CustHistoryTemplateMapping.Instance.GetCustHistoryTemplateMapping(query_Template, "", 1, 10000, out count);
                for (int i = 0; i < dt_Template.Rows.Count; i++)
                {
                    sendEmail(taskID, dt_Template.Rows[i]["TemplateID"].ToString(), int.Parse(dt_Template.Rows[i]["SolveUserEID"].ToString()), custID);
                }
            }
            else if (type == 2)
            {
                QueryCustHistoryTemplateMapping query_Template = new QueryCustHistoryTemplateMapping();
                query_Template.TaskID       = taskID;
                query_Template.SolveUserEID = loginID;
                int       count;
                DataTable dt_Template = BLL.CustHistoryTemplateMapping.Instance.GetCustHistoryTemplateMapping(query_Template, "", 1, 10000, out count);

                if (dt_Template.Rows.Count > 0)
                {
                    sendEmail(taskID, dt_Template.Rows[0]["TemplateID"].ToString(), eid, custID);
                }
                else
                {
                    sendEmail(taskID, "", eid, custID);
                }
            }
        }
        /// <summary>
        /// 按照查询条件查询
        /// </summary>
        /// <param name="query">查询条件</param>
        /// <param name="order">排序</param>
        /// <param name="currentPage">页号,-1不分页</param>
        /// <param name="pageSize">每页记录数</param>
        /// <param name="totalCount">总行数</param>
        /// <returns>集合</returns>
        public DataTable GetCustHistoryTemplateMapping(QueryCustHistoryTemplateMapping query, string order, int currentPage, int pageSize, out int totalCount)
        {
            string where = string.Empty;
            if (query.TaskID != Constant.STRING_INVALID_VALUE)
            {
                where += " AND TaskID='" + StringHelper.SqlFilter(query.TaskID) + "'";
            }
            if (query.SolveUserEID != Constant.INT_INVALID_VALUE)
            {
                where += " AND SolveUserEID=" + query.SolveUserEID.ToString();
            }

            DataSet ds;

            SqlParameter[] parameters =
            {
                new SqlParameter("@where",         SqlDbType.NVarChar, 40000),
                new SqlParameter("@order",         SqlDbType.NVarChar,   200),
                new SqlParameter("@pagesize",      SqlDbType.Int,          4),
                new SqlParameter("@indexpage",     SqlDbType.Int,          4),
                new SqlParameter("@totalRecorder", SqlDbType.Int, 4)
            };

            parameters[0].Value     = where;
            parameters[1].Value     = order;
            parameters[2].Value     = pageSize;
            parameters[3].Value     = currentPage;
            parameters[4].Direction = ParameterDirection.Output;

            ds         = SqlHelper.ExecuteDataset(CONNECTIONSTRINGS, CommandType.StoredProcedure, P_CUSTHISTORYTEMPLATEMAPPING_SELECT, parameters);
            totalCount = (int)(parameters[4].Value);
            return(ds.Tables[0]);
        }
        /// <summary>
        /// 得到一个对象实体
        /// </summary>
        public Entities.CustHistoryTemplateMapping GetCustHistoryTemplateMapping(long RecID)
        {
            QueryCustHistoryTemplateMapping query = new QueryCustHistoryTemplateMapping();

            query.RecID = RecID;
            DataTable dt    = new DataTable();
            int       count = 0;

            dt = GetCustHistoryTemplateMapping(query, string.Empty, 1, 1, out count);
            if (count > 0)
            {
                return(LoadSingleCustHistoryTemplateMapping(dt.Rows[0]));
            }
            else
            {
                return(null);
            }
        }
        /// <summary>
        /// 是否存在该记录
        /// </summary>
        public bool IsExistsByRecID(long RecID)
        {
            QueryCustHistoryTemplateMapping query = new QueryCustHistoryTemplateMapping();

            query.RecID = RecID;
            DataTable dt    = new DataTable();
            int       count = 0;

            dt = GetCustHistoryTemplateMapping(query, string.Empty, 1, 1, out count);
            if (count > 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        //发送邮件 外部提交-根据固定的模板发送邮件
        private void sendEmail(string taskID, string templateID, int eid, string custID)
        {
            //url
            string urlHead = ConfigurationUtil.GetAppSettingValue("TaskProcessUrl");

            //找到邮件接收人的邮箱
            string userEmail = BLL.Util.GetEmployeeEmailByEid(eid);
            //1 插入 发送邮件日志表 (记录)
            SendEmailLog model_Email   = new SendEmailLog();
            string       templateName  = BLL.Util.GetEmployeeNameByEid(eid);//收件人姓名
            string       urlInternal   = urlHead + "/TaskManager/TaskProcess.aspx?TaskID=" + taskID;
            string       urlExternal   = urlHead + "/ExternalTask/ExternalTaskProcess.aspx?TaskID=" + taskID;
            string       templateTitle = string.Empty; //模板标题
            string       templateLog   = string.Empty; //模板日志
            string       templateUrl   = string.Empty; //模板链接格式
            int          _templateID;                  //模板ID

            //根据TaskID和受理人ID获取所要发送的模板ID
            if (int.TryParse(templateID, out _templateID))
            {
                QueryCustHistoryTemplateMapping query_Template = new QueryCustHistoryTemplateMapping();
                query_Template.TaskID       = taskID;
                query_Template.SolveUserEID = eid;
                int       count;
                DataTable dt_Template = BLL.CustHistoryTemplateMapping.Instance.GetCustHistoryTemplateMapping(query_Template, "", 1, 10000, out count);
                if (dt_Template != null)
                {
                    //根据模板ID获取模板内容
                    TemplateInfo model_TemplateInfo = new TemplateInfo();
                    model_TemplateInfo = BLL.TemplateInfo.Instance.GetTemplateInfo(_templateID);
                    if (model_TemplateInfo == null)
                    {
                        return;
                    }
                    //templateInfo += model_TemplateInfo.Content;
                    templateUrl  += model_TemplateInfo.Content + "<br/>";
                    templateTitle = model_TemplateInfo.Title;
                }
                templateLog += "【同意转出】";
            }
            else
            {
                _templateID  = 0;
                templateUrl += "呼叫中心系统有需要您协助处理的问题,";
                templateLog += "【提交】";
            }

            templateLog += "发出邮件至【" + userEmail + "】;接收人【" + templateName + "】";
            templateUrl += "详情请点击:<br/><a href='" + urlExternal + "'>" + urlHead + "/ExternalTask/ExternalTaskProcess.aspx</a><br/>";
            templateUrl += "呼叫中心系统内部人员请访问:<br/><a href='" + urlInternal + "'>" + urlHead + "/TaskManager/TaskProcess.aspx</a>";

            model_Email.TemplateID   = 0;
            model_Email.CustID       = custID;
            model_Email.MailTo       = userEmail;
            model_Email.SendTime     = DateTime.Now;
            model_Email.SendContent  = templateUrl;
            model_Email.CreateUserID = int.Parse(RequestLoginEID);

            BLL.SendEmailLog.Instance.Insert(model_Email);

            //2根据 客户历史记录信息表中 模板ID来发送模板邮件
            BLL.EmailHelper.Instance.SendMail(templateName, templateUrl, "呼叫中心问题处理", new string[] { userEmail });

            BLL.Util.InsertUserLog("【外部提交】发送邮件日志表【插入】客户名称:【" + BLL.CustBasicInfo.Instance.GetCustBasicInfo(model_Email.CustID).CustName + "】接收人:【" + templateName + "】邮箱:【" + model_Email.MailTo + "】发送内容:【" + model_Email.SendContent + "】的记录【邮件发送成功】", int.Parse(RequestLoginEID));
        }
        //提交 外部使用(插入客户历史信息处理日志)
        private void CustHistoryLogExternalSubmit(out string msg)
        {
            msg = string.Empty;

            if (RequestCHITaskID == "")
            {
                msg = "{'result':'no','msg':'没有任务ID,操作失败!'}";
                return;
            }

            Entities.CustHistoryInfo model_CustHistoryInfo = getModelCustHistoryInfoByTaskID(RequestCHITaskID);
            if (model_CustHistoryInfo == null)
            {
                msg = "{'result':'no','msg':'没有找到该条任务记录,操作失败!'}";
                return;
            }

            int action = (int)Entities.Action.ActionSumbit;//记录动作 默认:提交

            //1 判断是否存在“转到受理人ID(ToNextSolveUserEID)”存在:向当前受理人表插入一条记录
            int nextSolveEID;

            if (RequestToNextSolveUserEID != "")
            {
                if (int.TryParse(RequestToNextSolveUserEID, out nextSolveEID))
                {
                    //判断登陆者权限 如果权限有高级操作权限,则不需要修改自己的记录 自己添加提交

                    //坐席权限
                    //修改:当前受理人表(修改自己的记录) 状态改为0 无效
                    QueryTaskCurrentSolveUser query_TCSUpdate = new QueryTaskCurrentSolveUser();
                    query_TCSUpdate.TaskID = RequestCHITaskID;
                    query_TCSUpdate.CurrentSolveUserEID = int.Parse(RequestLoginEID);
                    query_TCSUpdate.Status = 1;
                    int       count;
                    DataTable dt_TCSUpdate = BLL.TaskCurrentSolveUser.Instance.GetTaskCurrentSolveUser(query_TCSUpdate, "", 1, 10000, out count);
                    if (dt_TCSUpdate.Rows.Count == 0)
                    {
                        msg = "{'result':'no','msg':'您不是当前受理人,操作失败!'}";
                        return;
                    }
                    for (int i = 0; i < dt_TCSUpdate.Rows.Count; i++)
                    {
                        UpdateTaskCurrentSolveUser(dt_TCSUpdate.Rows[i]["RecID"].ToString(), 0);
                    }

                    // 插入:当前受理人表  (插入转到受理人的记录)
                    TaskCurrentSolveUser model_TCS = new TaskCurrentSolveUser();
                    model_TCS.TaskID = RequestCHITaskID;
                    model_TCS.CurrentSolveUserEID = nextSolveEID;
                    //model_TCS.CurrentSolveUserID = getUserEID(nextSolveEID);
                    model_TCS.Status     = 1;
                    model_TCS.CreateTime = DateTime.Now;
                    int _loginerEID;
                    if (int.TryParse(RequestLoginEID, out _loginerEID))
                    {
                        model_TCS.CreateUserAdName = BLL.Util.GetEmployeeDomainAccountByEid(_loginerEID);
                    }
                    InsertTaskCurrentSolveUser(model_TCS);
                    action = (int)Entities.Action.ActionTurnOut;//动作:转出

                    //发送邮件
                    sendEmailByType(2, RequestCHITaskID, nextSolveEID, model_CustHistoryInfo.CustID, _loginerEID);
                    //sendEmail(RequestCHITaskID, nextSolveEID, model_CustHistoryInfo.CustID);
                }
                else
                {
                    msg = "{'result':'no','msg':'转到下一个受理人ID出错,操作失败!'}";
                    return;
                }
            }

            //2 插入处理信息到CustHistoryLog表
            CustHistoryLog model = new CustHistoryLog();

            model.TaskID = RequestCHITaskID;
            //model.SolveUserID = BLL.Util.GetLoginUserID();
            model.SolveUserEID = int.Parse(RequestLoginEID);
            model.SolveTime    = DateTime.Now;
            model.Comment      = RequestComment;
            model.Action       = action;
            int status;

            if (int.TryParse(RequestCHLStatus, out status))
            {
                model.Status = status;
            }

            int toNextSolveUserEID;

            if (int.TryParse(RequestToNextSolveUserEID, out toNextSolveUserEID))
            {
                model.ToNextSolveUserEID = toNextSolveUserEID;
                //model.ToNextSolveUserID = getUserEID(toNextSolveUserEID);
            }
            int _loginEID;

            if (int.TryParse(RequestLoginEID, out _loginEID))
            {
                long pid = getPIDByNextSolveEID(RequestCHITaskID, _loginEID);
                if (pid != 0)
                {
                    model.Pid = pid;
                }
            }

            InsertCustHistoryLog(model);

            //查找登陆人的客户历史关联邮件模板的记录
            QueryCustHistoryTemplateMapping query_templateMappingOld = new QueryCustHistoryTemplateMapping();

            query_templateMappingOld.TaskID       = model.TaskID;
            query_templateMappingOld.SolveUserEID = model.SolveUserEID;
            int       templateCount;
            DataTable dt_templateMappingOld = BLL.CustHistoryTemplateMapping.Instance.GetCustHistoryTemplateMapping(query_templateMappingOld, "", 1, 10000, out templateCount);

            if (dt_templateMappingOld.Rows.Count > 0)
            {
                int _templateID;
                if (int.TryParse(dt_templateMappingOld.Rows[0]["TemplateID"].ToString(), out _templateID))
                {
                    //插入(下一个受理人)到客户历史关联邮件模板
                    CustHistoryTemplateMapping model_templateMappingNew = new CustHistoryTemplateMapping();
                    model_templateMappingNew.TaskID       = query_templateMappingOld.TaskID;
                    model_templateMappingNew.TemplateID   = _templateID;
                    model_templateMappingNew.SolveUserEID = toNextSolveUserEID;
                    model_templateMappingNew.CreateTime   = DateTime.Now;
                    model_templateMappingNew.CreateUserID = _loginEID;
                    BLL.CustHistoryTemplateMapping.Instance.Insert(model_templateMappingNew);
                }
            }

            msg = "{'result':'yes','msg':'操作成功'}";
        }
 /// <summary>
 /// 按照查询条件查询
 /// </summary>
 /// <param name="query">查询条件</param>
 /// <param name="order">排序</param>
 /// <param name="currentPage">页号,-1不分页</param>
 /// <param name="pageSize">每页记录数</param>
 /// <param name="totalCount">总行数</param>
 /// <returns>集合</returns>
 public DataTable GetCustHistoryTemplateMapping(QueryCustHistoryTemplateMapping query, string order, int currentPage, int pageSize, out int totalCount)
 {
     return(Dal.CustHistoryTemplateMapping.Instance.GetCustHistoryTemplateMapping(query, order, currentPage, pageSize, out totalCount));
 }
        //提交(插入客户历史信息处理日志)
        private void CustHistoryLogSubmit(out string msg)
        {
            msg = string.Empty;

            if (RequestCHITaskID == "")
            {
                msg = "{'result':'no','msg':'没有任务ID,操作失败!'}";
                return;
            }

            Entities.CustHistoryInfo model_CustHistoryInfo = getModelCustHistoryInfoByTaskID(RequestCHITaskID);
            if (model_CustHistoryInfo == null)
            {
                msg = "{'result':'no','msg':'没有找到该条任务记录,操作失败!'}";
                return;
            }

            int action = (int)Entities.Action.ActionSumbit;//记录动作 默认:提交

            //0 判断如果是有高级操作按钮的人操作,则在提交时将其他当前受理人的表中记录状态改为无效0
            bool right_AgreeTurnOut = BLL.Util.CheckRight(BLL.Util.GetLoginUserID(), "SYS024BUT1101");
            bool right_TaskTurnOver = BLL.Util.CheckRight(BLL.Util.GetLoginUserID(), "SYS024BUT1102");

            if (right_AgreeTurnOut && right_TaskTurnOver)
            {
                QueryTaskCurrentSolveUser query_taskCurrentSolveUser = new QueryTaskCurrentSolveUser();
                query_taskCurrentSolveUser.TaskID = model_CustHistoryInfo.TaskID;
                query_taskCurrentSolveUser.Status = 1;
                int       count;
                DataTable dt_taskCurrentSolveUser = BLL.TaskCurrentSolveUser.Instance.GetTaskCurrentSolveUser(query_taskCurrentSolveUser, "", 1, 10000, out count);
                for (int i = 0; i < dt_taskCurrentSolveUser.Rows.Count; i++)
                {
                    UpdateTaskCurrentSolveUser(dt_taskCurrentSolveUser.Rows[i]["RecID"].ToString(), 0);
                }
            }

            //1 判断是否存在“转到受理人ID(ToNextSolveUserEID)”存在:向当前受理人表插入一条记录
            int nextSolveEID;

            if (RequestToNextSolveUserEID != "")
            {
                if (int.TryParse(RequestToNextSolveUserEID, out nextSolveEID))
                {
                    //判断登陆者权限 如果权限有高级操作权限,则不需要修改自己的记录 自己添加提交

                    //坐席权限
                    if (!right_AgreeTurnOut && !right_TaskTurnOver)
                    {
                        //修改:当前受理人表(修改自己的记录) 状态改为0 无效
                        QueryTaskCurrentSolveUser query_TCSUpdate = new QueryTaskCurrentSolveUser();
                        query_TCSUpdate.TaskID = model_CustHistoryInfo.TaskID;
                        query_TCSUpdate.CurrentSolveUserEID = BLL.Util.GetLoginUserID();
                        query_TCSUpdate.Status = 1;
                        int       count;
                        DataTable dt_TCSUpdate = BLL.TaskCurrentSolveUser.Instance.GetTaskCurrentSolveUser(query_TCSUpdate, "", 1, 10000, out count);
                        if (dt_TCSUpdate.Rows.Count == 0)
                        {
                            msg = "{'result':'no','msg':'您不是当前受理人,操作失败!'}";
                            return;
                        }
                        for (int i = 0; i < dt_TCSUpdate.Rows.Count; i++)
                        {
                            UpdateTaskCurrentSolveUser(dt_TCSUpdate.Rows[i]["RecID"].ToString(), 0);
                        }
                    }

                    if (right_AgreeTurnOut && right_TaskTurnOver)
                    {
                        //因为是高级权限操作,先判断是否已经转出过,如果没有同意转出而直接点击提交,则向Log表插入一条同意转出的动作记录

                        //1 判断是否是第一次转出,如果是,则插入一条同意转出的动作记录
                        QueryCustHistoryLog query_Log = new QueryCustHistoryLog();
                        query_Log.TaskID = model_CustHistoryInfo.TaskID;
                        int totalCount;
                        query_Log.Action = (int)Entities.Action.ActionAgreeApplyTurn;
                        DataTable dt_Log = BLL.CustHistoryLog.Instance.GetCustHistoryLog(query_Log, "", 1, 10000, out totalCount);
                        if (dt_Log.Rows.Count == 0)
                        {
                            //2 插入 客户历史信息处理日志 (动作记录)
                            InsertCustHistoryLogByAction(model_CustHistoryInfo.TaskID, RequestComment, (int)Entities.Action.ActionAgreeApplyTurn);//动作:同意转出
                        }

                        //3 修改客户历史记录信息表的记录:是否确定投诉 可修改,是否确认发送邮件 必须修改为true,任务状态 必须修改为“处理中”
                        model_CustHistoryInfo.IsSendEmail = true;
                        if (RequestIsComplaint != "")
                        {
                            model_CustHistoryInfo.IsComplaint = bool.Parse(RequestIsComplaint);
                        }
                        model_CustHistoryInfo.ProcessStatus = (int)Entities.EnumTaskStatus.TaskStatusNow;

                        UpdateCustHistoryInfo(model_CustHistoryInfo);
                    }

                    // 插入:当前受理人表  (插入转到受理人的记录)
                    TaskCurrentSolveUser model_TCS = new TaskCurrentSolveUser();
                    model_TCS.TaskID = model_CustHistoryInfo.TaskID;
                    model_TCS.CurrentSolveUserEID = nextSolveEID;
                    model_TCS.CurrentSolveUserID  = getUserEID(nextSolveEID);
                    model_TCS.Status           = 1;
                    model_TCS.CreateTime       = DateTime.Now;
                    model_TCS.CreateUserAdName = BLL.Util.GetDomainAccountByLimitEID(BLL.Util.GetLoginUserID());
                    InsertTaskCurrentSolveUser(model_TCS);
                    action = (int)Entities.Action.ActionTurnOut;//动作:转出

                    //发送邮件
                    sendEmailByType(2, model_CustHistoryInfo.TaskID, nextSolveEID, model_CustHistoryInfo.CustID, BLL.Util.GetLoginUserID());
                }
                else
                {
                    msg = "{'result':'no','msg':'转到下一个受理人ID出错,操作失败!'}";
                    return;
                }
            }

            //2 插入处理信息到CustHistoryLog表
            CustHistoryLog model = new CustHistoryLog();

            //modify by qizq 2013-1-4首先判断是否是通话中
            if (IsCalling == "1")
            {
                if (HistoryLogID == "")
                {
                    //通话中提交把本地录音主键付给实体
                    long CallRecordReCID = 0;
                    if (CallRecordID != "")
                    {
                        if (long.TryParse(CallRecordID, out CallRecordReCID))
                        {
                            model.CallRecordID = CallRecordReCID;
                        }
                    }
                }
            }
            //
            model.TaskID       = model_CustHistoryInfo.TaskID;
            model.SolveUserID  = BLL.Util.GetLoginUserID();
            model.SolveUserEID = BLL.Util.GetLoginUserID();
            model.SolveTime    = DateTime.Now;
            model.Comment      = RequestComment;
            model.Action       = action;
            int status;

            if (int.TryParse(RequestCHLStatus, out status))
            {
                model.Status = status;
            }

            int toNextSolveUserEID;

            if (int.TryParse(RequestToNextSolveUserEID, out toNextSolveUserEID))
            {
                model.ToNextSolveUserEID = toNextSolveUserEID;
                model.ToNextSolveUserID  = getUserEID(toNextSolveUserEID);
            }
            long pid = getPIDByNextSolveEID(model_CustHistoryInfo.TaskID, BLL.Util.GetLoginUserID());

            if (pid != 0)
            {
                model.Pid = pid;
            }
            //modify by qizq 2013-1-4不是在通话中,处理记录已存在更新处理记录
            if (IsCalling != "1" && HistoryLogID != "")
            {
                //通话中提交把本地录音主键付给实体
                long CallRecordReCID = 0;
                if (CallRecordID != "")
                {
                    if (long.TryParse(CallRecordID, out CallRecordReCID))
                    {
                        model.CallRecordID = CallRecordReCID;
                    }
                }
                long HistoryLogIDLog = 0;
                if (long.TryParse(HistoryLogID, out HistoryLogIDLog))
                {
                    model.RecID = HistoryLogIDLog;
                }
                //CustHistoryLog 作废 2016-3-1 强斐
                //UpdateCustHistoryLog(model);
            }
            else
            {
                //CustHistoryLog 作废 2016-3-1 强斐
                //InsertCustHistoryLog(model);
            }

            //查找登陆人的客户历史关联邮件模板的记录
            QueryCustHistoryTemplateMapping query_templateMappingOld = new QueryCustHistoryTemplateMapping();

            query_templateMappingOld.TaskID       = model.TaskID;
            query_templateMappingOld.SolveUserEID = model.SolveUserEID;
            int       templateCount;
            DataTable dt_templateMappingOld = BLL.CustHistoryTemplateMapping.Instance.GetCustHistoryTemplateMapping(query_templateMappingOld, "", 1, 10000, out templateCount);

            if (dt_templateMappingOld.Rows.Count > 0)
            {
                int _templateID;
                if (int.TryParse(dt_templateMappingOld.Rows[0]["TemplateID"].ToString(), out _templateID))
                {
                    //插入(下一个受理人)到客户历史关联邮件模板
                    CustHistoryTemplateMapping model_templateMappingNew = new CustHistoryTemplateMapping();
                    model_templateMappingNew.TaskID       = query_templateMappingOld.TaskID;
                    model_templateMappingNew.TemplateID   = _templateID;
                    model_templateMappingNew.SolveUserEID = toNextSolveUserEID;
                    model_templateMappingNew.CreateTime   = DateTime.Now;
                    model_templateMappingNew.CreateUserID = BLL.Util.GetLoginUserID();
                    BLL.CustHistoryTemplateMapping.Instance.Insert(model_templateMappingNew);
                }
            }

            msg = "{'result':'yes','msg':'操作成功'}";
        }