///  保存日志类信息
        /// <summary>
        ///  保存日志类信息
        /// </summary>
        /// <param name="jsondata"></param>
        public void SaveLogsInfo(WOrderJsonData jsondata, int loginuserid, string loginusername)
        {
            try
            {
                LogForWebForCall("[保存日志类信息]Start", loginuserid, loginusername);
                //号码访问表 CustPhoneVisitBusiness
                CustPhoneVisitBusinessInfo visitinfo = new CustPhoneVisitBusinessInfo();
                visitinfo.PhoneNum     = jsondata.CustBaseInfo.Phone_Out;
                visitinfo.TaskID       = jsondata.WOrderID;
                visitinfo.BusinessType = (int)VisitBusinessTypeEnum.S1_工单;                                                                                 //任务类型:-1 不存在 0 其他非CC系统 ,1:工单  3:客户核实  4:其他任务  5:YJK 6:CJK  7:易团购
                visitinfo.TaskSource   = (int)jsondata.Common.CallSource_Out;                                                                              //任务来源 0:未知 1:呼入 2:呼出 3,4:IM
                visitinfo.CallID       = jsondata.CustBaseInfo.CallIds_Out != null && jsondata.CustBaseInfo.CallIds_Out.Count > 0 ?
                                         CommonFunction.ObjectToLong(jsondata.CustBaseInfo.CallIds_Out[jsondata.CustBaseInfo.CallIds_Out.Count - 1]) : -1; //最后一次话务ID
                BLL.CustPhoneVisitBusiness.Instance.InsertOrUpdateCustPhoneVisitBusiness(visitinfo, loginuserid);
                LogForWebForCall("[保存日志类信息]访问记录表:电话=" + jsondata.CustBaseInfo.Phone_Out + ";任务ID=" + jsondata.WOrderID, loginuserid, loginusername);

                //话务结果表 CallResult_ORIG_Task
                if (jsondata.WOrderInfo.IsHuifang && jsondata.WOrderInfo.IsJxs)
                {
                    BLL.CallResult_ORIG_Task.Instance.InseretOrUpdateOneData(jsondata.WOrderID, -1, ProjectSource.S3_工单,
                                                                             jsondata.WOrderInfo.IsJieTong_Out, jsondata.WOrderInfo.NoJtReason_Out, -1, -1);
                    LogForWebForCall("[保存日志类信息]话务结果表 CallResult_ORIG_Task:工单ID=" + jsondata.WOrderID
                                     + ";结果=" + jsondata.WOrderInfo.IsJieTong_Out + "-" + jsondata.WOrderInfo.NoJtReason_Out, loginuserid, loginusername);
                }
            }
            catch (Exception ex)
            {
                LogForWebForCall("[保存日志类信息]保存日志类信息 " + ex.Message + ex.StackTrace, loginuserid, loginusername);
            }
            LogForWebForCall("[保存日志类信息]END\r\n", loginuserid, loginusername);
        }
        /// 保存工单主表信息
        /// <summary>
        /// 保存工单主表信息
        /// </summary>
        /// <param name="jsondata"></param>
        /// <param name="sysinfo"></param>
        private void SaveWOrderMainInfo(WOrderJsonData jsondata, SysRightUserInfo sysinfo)
        {
            WOrderInfoInfo main = new WOrderInfoInfo();

            main.OrderID          = GetNewWOrderID();
            main.CallSource       = (int)jsondata.Common.CallSource_Out;
            main.ModuleSource     = (int)jsondata.Common.ModuleSource_Out;
            main.DataSource       = (int)jsondata.WOrderInfo.DataSource_Out;
            main.WorkOrderStatus  = (int)jsondata.OrderStatus;
            main.CategoryID       = (int)jsondata.WOrderInfo.Category_Out;
            main.ComplaintLevel   = jsondata.WOrderInfo.ComplaintLevel_Out;
            main.BusinessType     = jsondata.WOrderInfo.BusinessType_Out;
            main.BusinessTag      = jsondata.WOrderInfo.BusinessTag_Out;
            main.IsSyncCRM        = jsondata.WOrderInfo.IsSysCRM_Out;
            main.VisitType        = jsondata.WOrderInfo.VisitType_Out;
            main.CBID             = jsondata.CBID;
            main.Phone            = jsondata.CustBaseInfo.Phone_Out;
            main.CRMCustID        = jsondata.CRMCustID_Out;
            main.Content          = jsondata.WOrderInfo.Content_Out;
            main.ContactName      = jsondata.WOrderInfo.ContactName_Out;
            main.ContactTel       = jsondata.WOrderInfo.ContactTel_Out;
            main.LastReceiverID   = null;
            main.BGID             = sysinfo.BGID;
            main.Status           = 0;
            main.CreateUserID     = sysinfo.UserID;
            main.CreateTime       = DateTime.Now;
            main.LastUpdateUserID = sysinfo.UserID;
            main.LastUpdateTime   = DateTime.Now;
            CommonBll.Instance.InsertComAdoInfo(main);
            //存储工单id
            jsondata.WOrderID = main.OrderID;
        }
 /// 保存工单信息
 /// <summary>
 /// 保存工单信息
 /// </summary>
 /// <param name="jsondata"></param>
 public void SaveWOrderInfo(WOrderJsonData jsondata, SysRightUserInfo sysinfo)
 {
     //工单主表 WOrderInfo
     SaveWOrderMainInfo(jsondata, sysinfo);
     //保存WOrderProcess表
     SaveWOrderProcessInfo(jsondata, sysinfo);
     //附件表 CommonAttachment
     SaveCommonAttachment(jsondata, sysinfo);
 }
        /// 保存绑定信息
        /// <summary>
        /// 保存绑定信息
        /// </summary>
        /// <param name="jsondata"></param>
        public void SaveBindInfo(WOrderJsonData jsondata, int loginuserid, string loginusername)
        {
            try
            {
                LogForWebForCall("[保存绑定信息]Start", loginuserid, loginusername);
                //来去电表 CallRecordInfo,话务业务表 CallRecord_ORIG_Business,工单关联数据表 WOrderData,短信表 SMSSendHistory
                //话务信息
                if (jsondata.CustBaseInfo.CallIds_Out != null && jsondata.CustBaseInfo.CallIds_Out.Count > 0)
                {
                    foreach (string callid in jsondata.CustBaseInfo.CallIds_Out)
                    {
                        long callid_val = CommonFunction.ObjectToLong(callid);
                        //工单关联数据表 WOrderData
                        BLL.WOrderData.Instance.InsertWOrderDataForCC(jsondata.WOrderID, -1, callid_val, loginuserid);
                        LogForWebForCall("[保存绑定信息]工单关联数据表:工单ID=" + jsondata.WOrderID + ";话务ID=" + callid_val, loginuserid, loginusername);
                    }
                    string callids = string.Join(",", jsondata.CustBaseInfo.CallIds_Out.ToArray());
                    //来去电表 CallRecordInfo (CustID,CustName,TaskTypeID,TaskID)
                    BLL.CallAfterTaskProcess.Instance.UpdateCallRecordInfoAfterTask(callids, jsondata.CBID, jsondata.CustBaseInfo.CBName_Out, ProjectSource.S3_工单, jsondata.WOrderID);
                    //话务业务表 CallRecord_ORIG_Business (BusinessID)
                    BLL.CallAfterTaskProcess.Instance.UpdateCallRecord_ORIG_BusinessAfterTask(callids, jsondata.WOrderID);

                    LogForWebForCall("[保存绑定信息]来去电表和话务业务表:工单ID=" + jsondata.WOrderID + ";话务ID=" + callids + ";CBID=" + jsondata.CBID, loginuserid, loginusername);
                }
                //对话信息
                if ((jsondata.Common.CallSource_Out == CallSourceEnum.C03_IM对话 || jsondata.Common.CallSource_Out == CallSourceEnum.C04_IM留言) &&
                    jsondata.Common.RelatedCSID > 0)
                {
                    //工单关联数据表 WOrderData
                    BLL.WOrderData.Instance.InserWOrderDataForIM(jsondata.WOrderID, -1, jsondata.Common.RelatedCSID, loginuserid);
                    LogForWebForCall("[保存绑定信息]工单关联数据表:工单ID=" + jsondata.WOrderID + ";会话ID=" + jsondata.Common.RelatedCSID, loginuserid, loginusername);
                }
                //未接来电
                if (jsondata.Common.ModuleSource_Out == ModuleSourceEnum.M04_未接来电 && jsondata.Common.RelatedMissID > 0)
                {
                    //保存工单id和cbid到未接来电表 CustomerVoiceMsg
                    BLL.CustomerVoiceMsg.Instance.UpdateCustomerVoiceMsgInfoAfterNewOrder(jsondata.Common.RelatedMissID, jsondata.WOrderID, jsondata.CBID);
                    LogForWebForCall("[保存绑定信息]保存工单id和cbid到未接来电表:RecID=" + jsondata.Common.RelatedMissID, loginuserid, loginusername);
                }
                //短信信息
                if (jsondata.CustBaseInfo.SmsIds_Out != null && jsondata.CustBaseInfo.SmsIds_Out.Count > 0)
                {
                    string smsids = string.Join(",", jsondata.CustBaseInfo.SmsIds_Out.ToArray());
                    //短信表 SMSSendHistory (CustID,CRMCustID,TaskType,TaskID)
                    BLL.CallAfterTaskProcess.Instance.UpdateSMSSendHistoryAfterTask(smsids, jsondata.CBID, jsondata.CRMCustID_Out, ProjectSource.S3_工单, jsondata.WOrderID);
                    LogForWebForCall("[保存绑定信息]短信表 SMSSendHistory:smsids=" + smsids, loginuserid, loginusername);
                }
            }
            catch (Exception ex)
            {
                LogForWebForCall("[保存绑定信息]保存绑定信息 " + ex.Message + ex.StackTrace, loginuserid, loginusername);
            }
            LogForWebForCall("[保存绑定信息]END\r\n", loginuserid, loginusername);
        }
        /// 保存工单处理记录
        /// <summary>
        /// 保存工单处理记录
        /// </summary>
        /// <param name="jsondata"></param>
        /// <param name="sysinfo"></param>
        private void SaveWOrderProcessInfo(WOrderJsonData jsondata, SysRightUserInfo sysinfo)
        {
            WOrderProcessInfo process = new WOrderProcessInfo();

            process.ProcessType        = (int)jsondata.OperType;
            process.OrderID            = jsondata.WOrderID;
            process.WorkOrderStatus    = (int)jsondata.OrderStatus;
            process.IsReturnVisit      = -1;
            process.ProcessContent     = sysinfo.TrueName + jsondata.Oper + "了工单 [" + jsondata.WOrderID + "]";
            process.Status             = 0;
            process.CreateUserID       = sysinfo.UserID;
            process.CreateUserNum      = sysinfo.UserCode;
            process.CreateUserName     = sysinfo.TrueName;
            process.CreateUserDeptName = sysinfo.MainDepartName;
            process.CreateTime         = DateTime.Now;
            CommonBll.Instance.InsertComAdoInfo(process);
        }
 /// 保存附件信息
 /// <summary>
 /// 保存附件信息
 /// </summary>
 /// <param name="jsondata"></param>
 /// <param name="sysinfo"></param>
 private void SaveCommonAttachment(WOrderJsonData jsondata, SysRightUserInfo sysinfo)
 {
     if (jsondata.WOrderInfo.Attachment != null)
     {
         foreach (AttachmentJsonData item in jsondata.WOrderInfo.Attachment)
         {
             CommonAttachmentInfo attach = new CommonAttachmentInfo();
             attach.BTypeID      = (int)BLL.Util.ProjectTypePath.WorkOrder;
             attach.RelatedID    = jsondata.WOrderID;
             attach.FileName     = item.FileRealName_Out;
             attach.FileType     = item.FileType_Out;
             attach.FileSize     = item.FileSize_Out;
             attach.FilePath     = item.FileAllPath_Out;
             attach.Status       = 0;
             attach.CreateUserID = sysinfo.UserID;
             attach.CreateTime   = DateTime.Now;
             CommonBll.Instance.InsertComAdoInfo(attach);
         }
     }
 }
        /// json转换实体类
        /// <summary>
        /// json转换实体类
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static WOrderJsonData CreateWOrderJsonData(string json)
        {
            WOrderJsonData jsondata = (WOrderJsonData)Newtonsoft.Json.JsonConvert.DeserializeObject(json, typeof(WOrderJsonData));

            return(jsondata);
        }
        /// 保存个人信息
        /// <summary>
        /// 保存个人信息
        /// </summary>
        /// <param name="jsondata"></param>
        public void SaveCustBasicInfo(WOrderJsonData jsondata, int loginuserid)
        {
            //构造个人主表数据
            Entities.CustBasicInfo model = new Entities.CustBasicInfo();
            model.CustName       = jsondata.CustBaseInfo.CBName_Out;
            model.Sex            = jsondata.CustBaseInfo.CBSex_Out;
            model.CustCategoryID = (int)jsondata.CustBaseInfo.CustTypeID_Out;
            model.ProvinceID     = jsondata.CustBaseInfo.ProvinceID_Out;
            model.CityID         = jsondata.CustBaseInfo.CityID_Out;
            model.CountyID       = jsondata.CustBaseInfo.CountyID_Out;
            //废弃字段
            model.Address    = null;
            model.DataSource = null;
            model.CallTime   = null;
            model.Status     = 0;

            //查询数据库
            string cbid = BLL.CustBasicInfo.Instance.GetMaxNewCustBasicInfoByTel(jsondata.CustBaseInfo.Phone_Out);

            if (!string.IsNullOrEmpty(cbid))
            {
                //更新
                model.CustID       = cbid;
                model.ModifyTime   = DateTime.Now;
                model.ModifyUserID = loginuserid;
                BLL.CustBasicInfo.Instance.Update(model);
            }
            else
            {
                //新增
                model.CreateTime   = DateTime.Now;
                model.CreateUserID = loginuserid;
                model.ModifyTime   = null;
                model.ModifyUserID = null;
                cbid = BLL.CustBasicInfo.Instance.Insert(model);

                //插入电话信息
                Entities.CustTel model_Tel = new Entities.CustTel();
                model_Tel.CustID       = cbid;
                model_Tel.Tel          = jsondata.CustBaseInfo.Phone_Out;
                model_Tel.CreateTime   = DateTime.Now;
                model_Tel.CreateUserID = loginuserid;
                BLL.CustTel.Instance.Insert(model_Tel);
            }
            //存储
            jsondata.CBID = cbid;
            //删除经销商信息
            BLL.DealerInfo.Instance.Delete(cbid);
            //存储经销商信息
            if (jsondata.CustBaseInfo.CustTypeID_Out == CustTypeEnum.T02_经销商)
            {
                //插入经销商信息
                Entities.DealerInfo model_Dealer = new Entities.DealerInfo();
                model_Dealer.CustID       = cbid;
                model_Dealer.MemberCode   = jsondata.CustBaseInfo.MemberCode_Out;
                model_Dealer.Name         = jsondata.CustBaseInfo.MemberName_Out;
                model_Dealer.Status       = 0;
                model_Dealer.CreateTime   = DateTime.Now;
                model_Dealer.CreateUserID = loginuserid;
                BLL.DealerInfo.Instance.Insert(model_Dealer);
            }
        }
        ///  保存日志类信息
        /// <summary>
        ///  保存日志类信息
        /// </summary>
        /// <param name="jsondata"></param>
        public void SaveLogsInfoASync(WOrderJsonData jsondata, int loginuserid, string loginusername)
        {
            Action <WOrderJsonData, int, string> func = new Action <WOrderJsonData, int, string>(SaveLogsInfo);

            func.BeginInvoke(jsondata, loginuserid, loginusername, null, null);
        }