using Ninject; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Net; using System.Text; using System.Web.Mvc; using WX.CRM.BLL.Base; using WX.CRM.Common; using WX.CRM.IBLL.Base; using WX.CRM.IBLL.Csvr; using WX.CRM.IBLL.QH; using WX.CRM.IBLL.Res; using WX.CRM.IBLL.Util; using WX.CRM.Model.Entity; using WX.CRM.Model.MAP; using WX.CRM.WebHelper; namespace WX.CRM.WEB.Controllers.QH { public class AccountApplyController : BaseController { ValidationErrors errors = new ValidationErrors(); [Inject] public IQH_CUSTOMER_RESID QH_CustomerResId_BL { get; set; } [Inject] public ICACHE_Q _cacheQ { get; set; } [Inject] public IRES_CUSTOMER_Q res_Customer_Q_BL { get; set; } [Inject] public IRES_CUSTOMER res_Customer_BL { get; set; } [Inject] public ICSVR_CALLRECORD csvr_CallRecord_BL { get; set; } [Inject] public ICSVR_CALLRECORD_Q csvr_CallRecord_Q_BL { get; set; } [Inject] public IQH_CUSTOMER_RESID qh_customer_resid_BL { get; set; } [Ninject.Inject] public IBAS_PARAMETER_Q _BAS_PARAMETER_Q { get; set; } [Inject] public ICACHE_Q _CacheQ { get; set; } public AccountApplyController() { } #region [HttpGet] public ActionResult Edit(string resid) { var model = new QH_CUSTOMER_RESID(); if (!string.IsNullOrEmpty(resid)) { model = QH_CustomerResId_BL.Get(m => m.RESID == resid); if (model == null) { model = new QH_CUSTOMER_RESID(); } } return View(model); } [HttpPost] public JsonResult Edit(QH_CUSTOMER_RESID model) { if (!ModelState.IsValid) { return JsonHandler.ValidateFailMessage(); } if (model.PKID == 0) { if (!Utility.ChekMobile(model.MOBILE)) { errors.Add("请输入正确的手机号!"); return JsonHandler.InsertMessage(errors, false); } var resid = WX.CRM.Common.ResUtil.CreateResId(model.MOBILE); if (res_Customer_Q_BL.getResCustomerByResId(resid) == null) { res_Customer_BL.ResgisterCustomer(model.MOBILE, resid, "qh"); } model.MOBILE = Utility.NumberFormat(model.MOBILE);//手机号中间几位隐去 var account = QH_CustomerResId_BL.Get(m => m.USERCARD == model.USERCARD); if (account != null) { errors.Add("用户编号已经存在,不能重复使用!"); return JsonHandler.InsertMessage(errors, false); } account = QH_CustomerResId_BL.Get(m => m.RESID == resid); if (account != null) { errors.Add("该手机号已经申请过开户,不能重复使用!"); return JsonHandler.InsertMessage(errors, false); } model.CREATEUSERID = UserId; model.CTIME = DateTime.Now; model.STATUS = 0; model.PKID = new SEQUENCES_BL().Seq_base_get(); model.RESID = resid; bool result = QH_CustomerResId_BL.Add(model) == 1; return JsonHandler.InsertMessage(errors, result); } else { var entry = QH_CustomerResId_BL.Get(m => m.PKID == model.PKID); if (entry == null) { errors.Add("用户编号不能为空"); return JsonHandler.UpdateMessage(errors, false); } if (entry.STATUS != 0) { errors.Add("只有未审核的状态才能修改"); return JsonHandler.UpdateMessage(errors, false); } var account = QH_CustomerResId_BL.Get(m => m.USERCARD == model.USERCARD && m.PKID != model.PKID); if (account != null) { errors.Add("用户编号已经存在,不能重复使用!"); return JsonHandler.UpdateMessage(errors, false); } entry.NAME = model.NAME; entry.IDCARD = model.IDCARD; entry.USERCARD = model.USERCARD; bool result = QH_CustomerResId_BL.Update(entry); return JsonHandler.UpdateMessage(errors, result); } } #endregion [HttpGet] public ActionResult RiskRecord(string usercard, decimal? recordid) { var model = QH_CustomerResId_BL.Get(m => m.USERCARD == usercard && m.RECORDID == recordid); var record = new CSVR_CALLRECORD(); if (model != null) { record = csvr_CallRecord_BL.Get(m => m.RECORDID == model.RECORDID); if (record == null) { record = new CSVR_CALLRECORD(); } } ViewBag.Record = record; return View(model); } [AuthorizeRedirect(Roles = InitRights.CONST_期货开户列表)] public ActionResult AccountList() { //ToolBar ToolBar tool = new ToolBar(); string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights.期货开户列表, userRightId); tool.AllowButton(toolbtn); tool.AddOtherButton("Other1", "选择风控录音", "icon-lookup", "completeWindControl_click", true); tool.AddOtherButton("Other2", "审核完成", "icon-yes", "completeCheck_click", true); ViewBag.ToolBar = tool; Pager pager = new Pager() { page = 1, rows = 10 }; string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHiddenHeadCol("pkid", "ID");//影藏列 tab.AddHiddenHeadCol("status_2", "status");//影藏列 tab.AddHeadCol("resid", "", "客户ID"); tab.AddHeadCol("usercard", "", "客户编号"); tab.AddHeadCol("useraccount", "", "资金账户"); tab.AddHeadCol("name", "", "姓名"); tab.AddHeadCol("status", "", "状态"); tab.AddHeadCol("createuserid", "", "操作人"); tab.AddHeadCol("ctime", "", "创建时间"); tab.AddHeadCol("recordctime", "", "录音时间"); tab.AddHeadCol("audittime", "", "审核时间"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pager, tableId, "10,20,30"); return View(); } #region 列表 /// /// 按照条件获取数据 /// /// /// /// [AuthorizeRedirect(Roles = InitRights.CONST_期货开户列表)] public JsonResult AccountListGetHtmlList(Pager pager, string columns, string resid, decimal status, DateTime? stime, DateTime? etime) { ///System.Threading.Thread.Sleep(1000*60*10); Table table = new Table(columns, true); table.gridPager = pager; List list = qh_customer_resid_BL.GetList(ref pager, resid, status, stime, etime); foreach (WX.CRM.Model.Entity.QH_CUSTOMER_RESID model in list) { table.AddHiddenCol(model.PKID); table.AddHiddenCol(model.STATUS); var linkUrl = string.Format("{2}" , "客户详细" , "/Csvr/CustomerInfo/CustomerDetail?resid=" + model.RESID , model.RESID); table.AddCol(linkUrl); table.AddCol(model.USERCARD); table.AddCol(model.USERACCOUNT); table.AddCol(model.NAME); table.AddCol(GetStatus(Convert.ToInt32(model.STATUS))); table.AddCol(InnerUserHelper.Instance.GetEidAndTrueName(model.CREATEUSERID)); table.AddCol(model.CTIME); table.AddCol(model.RECORDCTIME); table.AddCol(model.AUDITTIME); table.AddRow(); } var json = new { totalPages = pager.totalPages, totalRows = pager.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } private string GetStatus(int status) { switch (status) { case 0: return "已注册"; case 1: return "风控审核中"; case 2: return "审核通过"; default: return "已注册"; } } #endregion [HttpGet] [AuthorizeToolBar(InitRights.CONST_期货开户列表, InitToolBar.CONST_Other1)] public ActionResult RecordList() { Pager pager = new Pager() { page = 1, rows = 10 }; string tableId = "tablist"; Table tab = new Table(tableId); tab.isCheckbox = true; tab.AddHiddenHeadCol("resid", "影藏客户ID"); tab.AddHiddenHeadCol("filename", "录音路径"); tab.AddHiddenHeadCol("serverid", "录音路径"); tab.AddHeadCol("recordid", "", "录音编号"); tab.AddHeadCol("timelength", "", "通话时长"); tab.AddHeadCol("timestart", "", "开始时间"); tab.AddHeadCol("", "", "播放"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pager, tableId, "10,20,30"); return View(); } /// /// 按照条件获取数据 /// /// [AuthorizeToolBar(InitRights.CONST_期货开户列表, InitToolBar.CONST_Other1)] public JsonResult RecordListGetHtmlList(Pager pager, string columns, decimal? recordid, string resid) { Table table = new Table(columns, true); table.gridPager = pager; table.isCheckbox = true; DataTable list = csvr_CallRecord_Q_BL.GetRecordByEID(recordid, Eid, resid, ref pager); foreach (DataRow model in list.Rows) { table.AddHiddenCol(model["resid"]); table.AddHiddenCol(model["FileName"]); table.AddHiddenCol(model["ServerID"]); table.AddCol(model["recordid"]); table.AddCol(model["timelength"]); table.AddCol(model["timestart"]); string cti; string playurl = _getCallRecordUrl(model["ServerID"].ToString(), model["FileName"].ToString(), out cti); var playcrl = string.Format("", playurl, model["RECORDID"], cti == null ? "" : cti); playcrl += string.Format("
", model["RECORDID"], playurl); table.AddCol(playcrl); table.AddRow(); } var json = new { totalPages = pager.totalPages, totalRows = pager.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } public JsonResult ChooseRecord(string resid, string recordid, string filename, string serverid) { if (string.IsNullOrWhiteSpace(resid)) return JsonHandler.ManageMessage("找不到客户ID", false); if (string.IsNullOrWhiteSpace(recordid)) return JsonHandler.ManageMessage("找不到录音编号", false); if (string.IsNullOrWhiteSpace(filename)) return JsonHandler.ManageMessage("找不到录音", false); try { bool isDownLoad = download(filename, serverid); bool isOk = qh_customer_resid_BL.SetRecord(resid, recordid, UserId, ref errors); return JsonHandler.ManageMessage(errors, isOk); } catch (Exception ex) { LogHelper.Error(ex.ToString()); return JsonHandler.ManageMessage("系统错误:" + ex.ToString(), false); } } private bool download(string file, string serverID) { string server = string.Empty; string _localurl = "\\";//期货风控路径 string _IAD_localhostCallRecord = _CacheQ.GetValue_Parameter("ICSR_IAD_localhostCallRecord"); try { string cti = csvr_CallRecord_Q_BL.Sys_Environment_CTI_VER(); if (cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷固定坐席).ToString() || cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷移动坐席).ToString()) { server = Utility.PostData(_IAD_localhostCallRecord + "?file=" + file, Encoding.UTF8); } else if (cti == ((int)WX.CRM.Model.Enum.CTI_VER.和声).ToString()) { string _file = file.Replace("\\", "/"); server = Utility.PostData(_IAD_localhostCallRecord + "?file=" + _file, Encoding.UTF8); } else if (cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯new).ToString()) { string _cti; server = _getCallRecordUrl(serverID, file, out _cti); } else { string _file = file.Replace("\\", "/"); server = Utility.PostData(_IAD_localhostCallRecord + "?serverID=" + serverID + "&file=" + _file, Encoding.UTF8); } string setpath = _CacheQ.GetValue_Parameter("QH_FK_Record_DownPath"); setpath = string.IsNullOrEmpty(setpath) ? null : setpath; string dirBasepath = FileUnit.GetBaseDirectory(); dirBasepath = dirBasepath.Substring(0, dirBasepath.IndexOf("\\", System.StringComparison.Ordinal)); string localurl = (setpath ?? dirBasepath) + _localurl + file; string d = localurl.Substring(0, localurl.LastIndexOf("\\", System.StringComparison.Ordinal)); if (cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯new).ToString() && localurl.LastIndexOf("/", System.StringComparison.Ordinal) > 0) { d = localurl.Substring(0, localurl.LastIndexOf("/", System.StringComparison.Ordinal)); } if (!Directory.Exists(d)) { Directory.CreateDirectory(d); } var isOLD = file.StartsWith("UP"); server = server.Replace("\\", "").Replace("\"", ""); string remoteUri = server; if (isOLD) { remoteUri = server + "/home/" + file; } Uri downUri = new Uri(remoteUri); HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(downUri); using (Stream inputStream = hwr.GetResponse().GetResponseStream()) { using (FileStream flieStream = new FileStream(localurl, FileMode.Create)) { inputStream.CopyTo(flieStream); } } return true; } catch (Exception ex) { LogHelper.Error(ex); return false; } } /// /// 获取录音地址 /// /// private string _getCallRecordUrl(string _ServerID, string _FileName, out string cti) { var playurl = ""; cti = ""; var _IAD_localhostCallRecord = _BAS_PARAMETER_Q.GetModel_Patameter("ICSR_IAD_localhostCallRecord"); if (null != _IAD_localhostCallRecord) { var FuturesRecordServerUrl = _IAD_localhostCallRecord.PARAVALUE; playurl = FuturesRecordServerUrl + "?serverID=" + _ServerID + "&file=" + _FileName.Replace("\\", "/"); cti = csvr_CallRecord_Q_BL.Sys_Environment_CTI_VER(); if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷移动坐席).ToString()) { playurl = FuturesRecordServerUrl + "?file=" + _FileName.Replace("\\", "/"); } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷固定坐席).ToString()) { var shjctiinterface = Utility.GetSettingByKey("shj"); playurl = shjctiinterface + "?action=record_download&filename=/var/spool/asterisk/monitor/" + _FileName.Replace("\\", "/"); } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.和声).ToString()) { playurl = FuturesRecordServerUrl + "?file=" + _FileName; } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯).ToString()) { playurl = FuturesRecordServerUrl + _FileName; } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯new).ToString()) { _IAD_localhostCallRecord = _BAS_PARAMETER_Q.GetModel_Patameter("ICSR_IAD_localhostCallRecord_AX"); var filename = _FileName; if (null != _IAD_localhostCallRecord) { playurl = _IAD_localhostCallRecord.PARAVALUE + (filename.StartsWith("UP") ? "/home/" + filename : filename); playurl = playurl.Replace("\\", "/"); } } } return playurl; } #region 编辑 [HttpGet] [AuthorizeToolBar(InitRights.CONST_期货开户列表, InitToolBar.CONST_Other2)] public ActionResult Check(string resid) { QH_Audituserid model = new QH_Audituserid(); model.resid = resid; return View(model); } [HttpPost] [AuthorizeToolBar(InitRights.CONST_期货开户列表, InitToolBar.CONST_Other2)] public JsonResult Check(QH_Audituserid model) { if (!ModelState.IsValid) { return JsonHandler.ValidateFailMessage(); } bool result = qh_customer_resid_BL.Check(model.resid, model.useraccount, UserId, ref errors); return JsonHandler.UpdateMessage(errors, result); } #endregion } }