using Ninject; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web.Mvc; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.IBLL.Res; using WX.CRM.Model.Enum; using WX.CRM.WebHelper; namespace WX.CRM.WEB.Controllers.Res { public class DistributeController : BaseController { private IRES_DISTRIBUTE_Q distributeBiz_Q; ValidationErrors errors = new ValidationErrors(); [Inject] public CACHE_BL cache_BL { get; set; } [Inject] public IRES_RESOURCETYPE_Q resourceTypeBiz_Q { get; set; } public DistributeController(IRES_DISTRIBUTE_Q _distributeBiz_Q) { this.distributeBiz_Q = _distributeBiz_Q; } #region 我的活动资源分配 /// /// 我的活动资源分配 /// /// public ActionResult MyActivityResDsb() { ToolBar tool = new ToolBar(); var flag = cache_BL.GetValue_Parameter(WX.CRM.Model.Enum.Parameter.Sys_CanExportAllocate); if (flag == "1") { tool.AllowButton("Other2"); //tool.AddOtherButton("Other1", "查看明细", "icon-details", "ResDetails_Click", true); tool.AddOtherButton("Other2", "导出明细", "icon-export", "ExportDetails_Click", true); //tool.AddOtherButton("Other3", "导出手机号码", "icon-export", "ExportPhone_Click", true); } else { tool.AllowButton("Other2"); //tool.AddOtherButton("Other1", "查看明细", "icon-details", "ResDetails_Click", true); tool.AddOtherButton("Other2", "导出明细", "icon-export", "ExportDetails_Click", true); } ViewBag.ToolBar = tool; //table Pager pager = new Pager() { page = 1, rows = 10 }; string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHeadCol("map_PKID", "", "PKID"); tab.AddHeadCol("map_PICI", "", "批次"); tab.AddHeadCol("RESID", "", "客户ID"); tab.AddHeadCol("SALESID", "", "客服"); tab.AddHeadCol("CUSTOMERCATEGORY", "", "分类"); tab.AddHeadCol("ResourceTypeName", "", "资源类型"); tab.AddHeadCol("ActivityName", "", "活动名称"); tab.AddHeadCol("HASACTIVE", "", "是否工单"); tab.AddHeadCol("LASTACTIVETIME", "", "工单最后时间"); tab.AddHeadCol("LASTCALLTIME", "", "录音最后时间"); tab.AddHeadCol("map_CREATEUSER", "", "分配人"); tab.AddHeadCol("DisTime", "", "分配时间"); //tab.AddHeadCol("map_SALESREMARK", "", "附言"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetTable() + Pagination.GetPage(pager, tableId, "10,20,50"); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); var category = cache_BL.GetList_SubComType(ComType.CustomerCategory).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPENAME }).ToList(); category.Insert(0, new SelectListItem() { Text = string.Empty, Value = string.Empty }); ViewBag.category = category; return View(); } #endregion #region 我的活动资源分配 列表 [HttpPost] /// /// 按照条件获取数据 /// /// /// /// public JsonResult GetHtmlList(Pager pager, string columns, string category, decimal? saleDeptId, string groupId, decimal? userId, DateTime? sTime, DateTime? eTime, string resid) { string pici = Request.Form["pici"]; List list = distributeBiz_Q.GetList(ref pager, pici, 0, category, saleDeptId, groupId, userId, sTime, eTime, resid); Table table = new Table(columns, true); table.gridPager = pager; foreach (WX.CRM.Model.Entity.RES_DISTRIBUTE_Extend model in list) { var color = string.Empty; if (model.LASTACTIVETIME > model.DisTime || model.LASTCALLTIME > model.DisTime) color = "style =\"color:green\""; var a = string.Format("{2}", "客户详细", "/Csvr/CustomerInfo/CustomerDetail?resid=" + model.ResId, model.ResId); table.AddCol(model.res_Distribute.PKID); table.AddCol(model.res_Distribute.PICI); table.AddCol(a); table.AddCol(InnerUserHelper.Instance.EidAndName(model.SALESID)); table.AddCol(model.CUSTOMERCATEGORY); table.AddCol(model.ResourceTypeName); table.AddCol(model.ActivityName); table.AddCol(model.HASACTIVE); table.AddCol(model.LASTACTIVETIME); table.AddCol(model.LASTCALLTIME); table.AddCol(InnerUserHelper.Instance.EidAndName(model.res_Distribute.CREATEUSER)); table.AddCol(model.DisTime); //table.AddCol(model.res_Distribute.SALESREMARK); table.AddRow(); } var json = new { totalPages = pager.totalPages, totalRows = pager.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } #endregion #region 资源明细 [HttpGet] public ActionResult DistributeDetail() { Pager pager = new Pager() { page = 1, rows = 10 }; string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHeadCol("RESID", "", "客户ID"); tab.AddHeadCol("HASACTIVE", "", "是否工单"); tab.AddHeadCol("", "", "工单最后时间"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pager, tableId, "8,10,15,20"); return View(); } #endregion #region 资源明细 html列表获取 [HttpPost] /// /// 资源明细 列表 /// /// /// /// public JsonResult GetDetailHtmlList(Pager pager, string columns) { decimal id = Convert.ToDecimal(Request.QueryString["id"]); List list = distributeBiz_Q.GetDetail_Distribute(ref pager, id, UserId); Table table = new Table(columns, true); foreach (WX.CRM.Model.Entity.CACHE_RES_RESOURCE_COUNT model in list) { var resid = string.Format("{2}" , "客户详细" , "/Csvr/CustomerInfo/CustomerDetail?resid=" + model.map_RESID , model.map_RESID); table.AddCol(resid); table.AddCol(model.map_HASACTIVE); //table.AddCol(model.map_HASBOCE); //table.AddCol(model.map_HASGJS); //table.AddCol(model.map_HASUSERNAME); table.AddCol(model.LASTACTIVETIME); table.AddRow(); } var json = new { totalPages = pager.totalPages, totalRows = pager.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } #endregion #region 分配资源历史 [HttpGet] [AuthorizeRedirect(Roles = InitRights.CONST_分配资源历史查询)] public ActionResult ResDistributeHis() { ToolBar tool = new ToolBar(); tool.AllowButton("Other2"); tool.AddOtherButton("Other2", "导出", "icon-export", "ExportDetails_Click", true); //table Pager pager = new Pager() { page = 1, rows = 20 }; string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHeadCol("map_PKID", "", "PKID"); tab.AddHeadCol("map_PICI", "", "批次"); tab.AddHeadCol("RESID", "", "客户ID"); tab.AddHeadCol("SALESID", "", "客服"); tab.AddHeadCol("CUSTOMERCATEGORY", "", "分类"); tab.AddHeadCol("ResourceTypeName", "", "资源类型"); tab.AddHeadCol("ActivityName", "", "活动名称"); tab.AddHeadCol("HASACTIVE", "", "是否工单"); tab.AddHeadCol("LASTACTIVETIME", "", "工单最后时间"); tab.AddHeadCol("LASTCALLTIME", "", "录音最后时间"); tab.AddHeadCol("RECYCLETIME", "", "回收时间"); tab.AddHeadCol("map_CREATEUSER", "", "分配人"); tab.AddHeadCol("DisTime", "", "分配时间"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetTable() + Pagination.GetPage(pager, tableId, "10,20,50"); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); var category = cache_BL.GetList_SubComType(ComType.CustomerCategory).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPENAME }).ToList(); category.Insert(0, new SelectListItem() { Text = string.Empty, Value = string.Empty }); ViewBag.category = category; return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_分配资源历史查询)] public JsonResult ResDistributeHis(Pager pager, string columns, string pici, string category, decimal? saleDeptId, string groupId, decimal? userId, DateTime? sTime, DateTime? eTime, string resid, decimal? isrecycle, DateTime? r1Time, DateTime? r2Time, decimal? hasGt) { List list = distributeBiz_Q.GetListByHis(ref pager, pici, 0, category, saleDeptId, groupId, userId, sTime, eTime, resid, isrecycle, r1Time, r2Time, hasGt); Table table = new Table(columns, true); table.gridPager = pager; foreach (WX.CRM.Model.Entity.RES_DISTRIBUTE_Extend model in list) { var color = string.Empty; //if (model.LASTACTIVETIME > model.res_Distribute.CTIME || model.LASTCALLTIME > model.res_Distribute.CTIME) if (model.LASTACTIVETIME > model.DisTime || model.LASTCALLTIME > model.DisTime) color = "style =\"color:green\""; if (model.RECYCLETIME.HasValue) color = "style =\"color:red\""; var a = string.Format("{2}", "客户详细", "/Csvr/CustomerInfo/CustomerDetail?resid=" + model.ResId, model.ResId); table.AddCol(model.res_Distribute.PKID); table.AddCol(model.res_Distribute.PICI); table.AddCol(a); table.AddCol(InnerUserHelper.Instance.EidAndName(model.SALESID)); table.AddCol(model.CUSTOMERCATEGORY); table.AddCol(model.ResourceTypeName); table.AddCol(model.ActivityName); table.AddCol(model.HASACTIVE); table.AddCol(model.LASTACTIVETIME); table.AddCol(model.LASTCALLTIME); table.AddCol(model.RECYCLETIME); table.AddCol(InnerUserHelper.Instance.EidAndName(model.res_Distribute.CREATEUSER)); table.AddCol(model.DisTime); table.AddRow(); } var json = new { totalPages = pager.totalPages, totalRows = pager.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } public FileResult ExportResDistributeHis(string category, decimal? saleDeptId, string groupId, decimal? userId, DateTime? sTime, DateTime? eTime, string resid, decimal? isrecycle, DateTime? r1Time, DateTime? r2Time, decimal? hasGt) { string pici = Request.Form["pici"]; Pager pager = new Pager() { page = 1, rows = int.MaxValue }; string checkFilds = "[map_PICI][RESID][SALESID][CUSTOMERCATEGORY][ResourceTypeName][ActivityName][HASACTIVE][LASTACTIVETIME][RECYCLETIME][map_CREATEUSER][DisTime]"; var checkTitles = "批次,客户ID,客服,分类,资源类型,活动名称,是否工单,工单最后时间,回收时间,分配人,分配时间"; var list = distributeBiz_Q.GetListByHis(ref pager, pici, 0, category, saleDeptId, groupId, userId, sTime, eTime, resid, isrecycle, r1Time, r2Time, hasGt); string contentType = "application/ms-excel"; System.IO.Stream stream = ExcelHelper.ExportListModelToExcel(list, "资源明细", 50000, checkFilds, checkTitles, DataFormart); string fileName = PageRequest.GetDlownLoadName("资源历史明细导出" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ".xls"); return File(stream, contentType, fileName); } [HttpGet] [AuthorizeRedirect(Roles = InitRights.CONST_分配资源效果统计)] public ActionResult ResDistributeHisEffect() { string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHeadCol("PICI", "", "批次"); tab.AddHeadCol("disleader", "", "分配人"); tab.AddHeadCol("RESTYPEID", "", "分配类型"); tab.AddHeadCol("STIME", "", "分配时间"); tab.AddHeadCol("DISCOUNT", "", "分配数量"); tab.AddHeadCol("recycleCount", "", "回收数量"); tab.AddHeadCol("ALLCALL", "", "呼出数"); tab.AddHeadCol("uncancall", "", "未接通"); tab.AddHeadCol("allcancall", "", "非有效接通"); tab.AddHeadCol("cancall", "", "有效接通"); tab.AddHeadCol("htl", "", "呼通率"); tab.AddHeadCol("memo", "", "工单数"); if (companyCode == "DNZZ") tab.AddHeadCol("jihuo", "", "激活"); else tab.AddHeadCol("fuwu", "", "服务"); tab.AddHeadCol("weixin", "", "加好友"); tab.AddHeadCol("jiangjie", "", "讲解"); tab.AddHeadCol("yixiang", "", "意向"); tab.AddHeadCol("firstorder", "", "下单"); tab.AddHeadCol("xdl", "", "下单率"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetTable(); List lis = new List(); var rlis = resourceTypeBiz_Q.GetList(); lis.Add(new SelectListItem() { Value = "", Text = "-请选择-" }); foreach (var obj in rlis) { lis.Add(new SelectListItem() { Value = string.Format("{0}", obj.RESTYPEID), Text = obj.TYPENAME }); } ViewBag.slt_ResourctType = lis; return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_分配资源效果统计)] public JsonResult ResDistributeHisEffect(string columns, string pici, decimal? restypeid, DateTime? stime, DateTime? etime) { if (etime.HasValue) etime = etime.Value.AddDays(1); var tab = new Table(columns, true); var resourceType = cache_BL.GetResourceType(); var ds = distributeBiz_Q.GetResDistributeHisEffect(pici, restypeid, stime, etime); if (ds != null && ds.Tables[0] != null) { var data = ds.Tables[0].ToList(); foreach (var item in data) { var resTypeModel = resourceType.FirstOrDefault(p => p.RESTYPEID == item.RESTYPEID); var resTypeName = string.Empty; if (resTypeModel != null) { item.RESTYPENAME = resTypeModel.TYPENAME; } } foreach (var item in data) { tab.AddCol(item.PICI); tab.AddCol(InnerUserHelper.Instance.EidAndName(item.disleader)); tab.AddCol(item.RESTYPENAME); tab.AddCol(item.STIME); tab.AddCol(item.DISCOUNT); tab.AddCol(item.RECYCLECOUNT); tab.AddCol(item.ALLCALL); tab.AddCol(item.UNCANCALL); tab.AddCol(item.ALLCANCALL); tab.AddCol(item.CANCALL); tab.AddCol(item.ALLCALL > 0 ? string.Format("{0:p}", item.CANCALL / item.ALLCALL) : "0%"); tab.AddCol(item.MEMO); if (companyCode == "DNZZ") tab.AddCol(item.JIHUO); else tab.AddCol(item.FUWU); tab.AddCol(item.WEIXIN); tab.AddCol(item.JIANGJIE); tab.AddCol(item.YIXIANG); tab.AddCol(item.FIRSTORDER); tab.AddCol(item.DISCOUNT > 0 ? string.Format("{0:p}", item.FIRSTORDER / item.DISCOUNT) : "0%"); tab.AddRow(); } tab.AddCol("合计:"); tab.AddCol(""); tab.AddCol(""); tab.AddCol(""); tab.AddCol(data.Sum(p => p.DISCOUNT)); tab.AddCol(data.Sum(p => p.RECYCLECOUNT)); tab.AddCol(data.Sum(p => p.ALLCALL)); tab.AddCol(data.Sum(p => p.UNCANCALL)); tab.AddCol(data.Sum(p => p.ALLCANCALL)); tab.AddCol(data.Sum(p => p.CANCALL)); tab.AddCol(data.Sum(p => p.ALLCALL) > 0 ? string.Format("{0:p}", data.Sum(p => p.CANCALL) / data.Sum(p => p.ALLCALL)) : "0%"); tab.AddCol(data.Sum(p => p.MEMO)); if (companyCode == "DNZZ") tab.AddCol(data.Sum(p => p.JIHUO)); else tab.AddCol(data.Sum(p => p.FUWU)); tab.AddCol(data.Sum(p => p.WEIXIN)); tab.AddCol(data.Sum(p => p.JIANGJIE)); tab.AddCol(data.Sum(p => p.YIXIANG)); tab.AddCol(data.Sum(p => p.FIRSTORDER)); tab.AddCol(data.Sum(p => p.DISCOUNT) > 0 ? string.Format("{0:p}", data.Sum(p => p.FIRSTORDER) / data.Sum(p => p.DISCOUNT)) : "0%"); tab.AddRow(); } return Json(new { rowsList = tab.GetRows() }, JsonRequestBehavior.AllowGet); } public FileResult ExportResDistributeHisEffect(string pici, decimal? restypeid, DateTime? stime, DateTime? etime) { if (etime.HasValue) etime = etime.Value.AddDays(1); var checkFilds = "[PICI][disleader][RESTYPENAME][STIME][DISCOUNT][RECYCLECOUNT][ALLCALL][UNCANCALL][ALLCANCALL][cancall][htl][memo][fuwu][jihuo][weixin][jiangjie][yixiang][firstorder][xdl]"; if (companyCode != "DNZZ") checkFilds = checkFilds.Replace("[jihuo]", ""); else checkFilds = checkFilds.Replace("[fuwu]", ""); var checkTitles = "批次,分配人,分配类型,分配时间,分配数量,回收数量,呼出数,未接通,非有效接通,有效接通,呼通率,工单数,服务,激活,加好友,讲解,意向,下单,下单率"; if (companyCode != "DNZZ") checkTitles = checkTitles.Replace("激活,", ""); else checkTitles = checkTitles.Replace("服务,", ""); var resourceType = cache_BL.GetResourceType(); var ds = distributeBiz_Q.GetResDistributeHisEffect(pici, restypeid, stime, etime); if (ds != null && ds.Tables[0] != null) { var data = ds.Tables[0].ToList(); foreach (var item in data) { var resTypeModel = resourceType.FirstOrDefault(p => p.RESTYPEID == item.RESTYPEID); var resTypeName = string.Empty; if (resTypeModel != null) { item.RESTYPENAME = resTypeModel.TYPENAME; } item.htl = item.ALLCALL > 0 ? string.Format("{0:p}", item.CANCALL / item.ALLCALL) : "0%"; item.xdl = item.DISCOUNT > 0 ? string.Format("{0:p}", item.FIRSTORDER / item.DISCOUNT) : "0%"; } string contentType = "application/ms-excel"; System.IO.Stream stream = ExcelHelper.ExportListModelToExcel(data, "分配资源效果", 50000, checkFilds, checkTitles, DataFormart); string fileName = PageRequest.GetDlownLoadName("分配资源效果导出" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ".xls"); return File(stream, contentType, fileName); } return null; } [HttpGet] [AuthorizeRedirect(Roles = InitRights.CONST_分配资源效果统计)] public ActionResult ResAllcoteLogEffect() { string tableId = "tablist"; Table tab = new Table(tableId); tab.AddHeadCol("RESTYPEID", "", "分配类型"); tab.AddHeadCol("STIME", "", "分配时间"); tab.AddHeadCol("DISCOUNT", "", "分配数量"); tab.AddHeadCol("recycleCount", "", "回收数量"); tab.AddHeadCol("ALLCALL", "", "呼出数"); tab.AddHeadCol("uncancall", "", "未接通"); tab.AddHeadCol("allcancall", "", "非有效接通"); tab.AddHeadCol("cancall", "", "有效接通"); tab.AddHeadCol("htl", "", "呼通率"); tab.AddHeadCol("memo", "", "工单数"); if (companyCode == "DNZZ") tab.AddHeadCol("jihuo", "", "激活"); else tab.AddHeadCol("fuwu", "", "服务"); tab.AddHeadCol("weixin", "", "加好友"); tab.AddHeadCol("jiangjie", "", "讲解"); tab.AddHeadCol("yixiang", "", "意向"); tab.AddHeadCol("firstorder", "", "下单"); tab.AddHeadCol("xdl", "", "下单率"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetTable(); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); List lis = new List(); var rlis = resourceTypeBiz_Q.GetList(); lis.Add(new SelectListItem() { Value = "", Text = "-请选择-" }); foreach (var obj in rlis) { lis.Add(new SelectListItem() { Value = string.Format("{0}", obj.RESTYPEID), Text = obj.TYPENAME }); } ViewBag.slt_ResourctType = lis; return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_分配资源效果统计)] public JsonResult ResAllcoteLogEffect(string columns,string saleDeptId, string groupId, decimal? userId, decimal? restypeid, DateTime? stime, DateTime? etime) { if (etime.HasValue) etime = etime.Value.AddDays(1); var tab = new Table(columns, true); var resourceType = cache_BL.GetResourceType(); var ds = distributeBiz_Q.GetResAllcoteLogEffect(saleDeptId,groupId, userId, restypeid, stime, etime); if (ds != null && ds.Tables[0] != null) { var data = ds.Tables[0].ToList(); foreach (var item in data) { var resTypeModel = resourceType.FirstOrDefault(p => p.RESTYPEID == item.RESTYPEID); var resTypeName = string.Empty; if (resTypeModel != null) { item.RESTYPENAME = resTypeModel.TYPENAME; } } foreach (var item in data) { tab.AddCol(item.RESTYPENAME); tab.AddCol(item.STIME); tab.AddCol(item.DISCOUNT); tab.AddCol(item.RECYCLECOUNT); tab.AddCol(item.ALLCALL); tab.AddCol(item.UNCANCALL); tab.AddCol(item.ALLCANCALL); tab.AddCol(item.CANCALL); tab.AddCol(item.ALLCALL > 0 ? string.Format("{0:p}", item.CANCALL / item.ALLCALL) : "0%"); tab.AddCol(item.MEMO); if (companyCode == "DNZZ") tab.AddCol(item.JIHUO); else tab.AddCol(item.FUWU); tab.AddCol(item.WEIXIN); tab.AddCol(item.JIANGJIE); tab.AddCol(item.YIXIANG); tab.AddCol(item.FIRSTORDER); tab.AddCol(item.DISCOUNT > 0 ? string.Format("{0:p}", item.FIRSTORDER / item.DISCOUNT) : "0%"); tab.AddRow(); } tab.AddCol("合计:"); tab.AddCol(""); tab.AddCol(data.Sum(p => p.DISCOUNT)); tab.AddCol(data.Sum(p => p.RECYCLECOUNT)); tab.AddCol(data.Sum(p => p.ALLCALL)); tab.AddCol(data.Sum(p => p.UNCANCALL)); tab.AddCol(data.Sum(p => p.ALLCANCALL)); tab.AddCol(data.Sum(p => p.CANCALL)); tab.AddCol(data.Sum(p => p.ALLCALL) > 0 ? string.Format("{0:p}", data.Sum(p => p.CANCALL) / data.Sum(p => p.ALLCALL)) : "0%"); tab.AddCol(data.Sum(p => p.MEMO)); if (companyCode == "DNZZ") tab.AddCol(data.Sum(p => p.JIHUO)); else tab.AddCol(data.Sum(p => p.FUWU)); tab.AddCol(data.Sum(p => p.WEIXIN)); tab.AddCol(data.Sum(p => p.JIANGJIE)); tab.AddCol(data.Sum(p => p.YIXIANG)); tab.AddCol(data.Sum(p => p.FIRSTORDER)); tab.AddCol(data.Sum(p => p.DISCOUNT) > 0 ? string.Format("{0:p}", data.Sum(p => p.FIRSTORDER) / data.Sum(p => p.DISCOUNT)) : "0%"); tab.AddRow(); } return Json(new { rowsList = tab.GetRows() }, JsonRequestBehavior.AllowGet); } public FileResult ExportResAllcoteLogEffect(string saleDeptId, string groupId, decimal? userId, decimal? restypeid, DateTime? stime, DateTime? etime) { if (etime.HasValue) etime = etime.Value.AddDays(1); var checkFilds = "[RESTYPENAME][STIME][DISCOUNT][RECYCLECOUNT][ALLCALL][UNCANCALL][ALLCANCALL][cancall][htl][memo][fuwu][jihuo][weixin][jiangjie][yixiang][firstorder][xdl]"; if (companyCode != "DNZZ") checkFilds = checkFilds.Replace("[jihuo]", ""); else checkFilds = checkFilds.Replace("[fuwu]", ""); var checkTitles = "分配类型,分配时间,分配数量,回收数量,呼出数,未接通,非有效接通,有效接通,呼通率,工单数,服务,激活,加好友,讲解,意向,下单,下单率"; if (companyCode != "DNZZ") checkTitles = checkTitles.Replace("激活,", ""); else checkTitles = checkTitles.Replace("服务,", ""); var resourceType = cache_BL.GetResourceType(); var ds = distributeBiz_Q.GetResAllcoteLogEffect(saleDeptId,groupId, userId, restypeid, stime, etime); if (ds != null && ds.Tables[0] != null) { var data = ds.Tables[0].ToList(); foreach (var item in data) { var resTypeModel = resourceType.FirstOrDefault(p => p.RESTYPEID == item.RESTYPEID); var resTypeName = string.Empty; if (resTypeModel != null) { item.RESTYPENAME = resTypeModel.TYPENAME; } item.htl = item.ALLCALL > 0 ? string.Format("{0:p}", item.CANCALL / item.ALLCALL) : "0%"; item.xdl = item.DISCOUNT > 0 ? string.Format("{0:p}", item.FIRSTORDER / item.DISCOUNT) : "0%"; } string contentType = "application/ms-excel"; System.IO.Stream stream = ExcelHelper.ExportListModelToExcel(data, "分配资源效果", 50000, checkFilds, checkTitles, DataFormart); string fileName = PageRequest.GetDlownLoadName("分配资源效果导出" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ".xls"); return File(stream, contentType, fileName); } return null; } #endregion #region 分配资源统计 [HttpGet] [AuthorizeRedirect(Roles = InitRights.CONST_资源分配统计)] public ActionResult DistributeCount() { var tab = new Table("tablist"); tab.AddHeadCol("ctime", "", "分配日期"); tab.AddHeadCol("salesid", "", "客服"); tab.AddHeadCol("allcount", "", "接收资源数"); tab.AddHeadCol("uncount", "", "未使用资源数"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead(); return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_资源分配统计)] public JsonResult DistributeCount(DateTime sTime, DateTime eTime, string columns) { var tab = new Table(columns, true); //var eTime = sTime.AddDays(1); var list = distributeBiz_Q.Res_DistributeCount(sTime, eTime.AddDays(1)).Tables[0].ToList(); foreach (var item in list) { tab.AddCol(sTime.ToShortDateString() + "-" + eTime.ToShortDateString()); tab.AddCol(InnerUserHelper.Instance.EidAndName(item.SalesId)); tab.AddCol(item.AllCount); tab.AddCol(string.Format("{2}", sTime.ToShortDateString(), item.SalesId, item.UnCount, eTime.ToShortDateString())); tab.AddRow(); } var json = new { rowsList = tab.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } [HttpGet] [AuthorizeRedirect(Roles = InitRights.CONST_资源分配统计)] public ActionResult DistributeUnCount() { var tab = new Table("tablist"); tab.AddHeadCol("resid", "", "客户ID"); //tab.AddHeadCol("cname", "", "名称"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead(); return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_资源分配统计)] public JsonResult DistributeUnCount(DateTime stime, DateTime etime, decimal saleid, string columns) { var tab = new Table(columns, true); //var eTime = stime.AddDays(1); var list = distributeBiz_Q.Res_DistributeUnCount(stime, etime.AddDays(1), saleid).Tables[0].ToList(); foreach (var item in list) { var resid = string.Format("{2}", "客户详细", "/Csvr/CustomerInfo/CustomerDetail?resid=" + item.ResId, item.ResId); tab.AddCol(resid); //tab.AddCol(item.CName); tab.AddRow(); } var json = new { rowsList = tab.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } #endregion #region 资源明细数据导出 /// /// 导出所有信息 /// /// public FileResult ExportDistributeDetails(string category, decimal? saleDeptId, string groupId, decimal? userId, DateTime? sTime, DateTime? eTime, string resid) { string pici = Request.Form["pici"]; Pager pager = new Pager() { page = 1, rows = int.MaxValue }; string checkFilds = "[map_PICI][RESID][SALESID][CUSTOMERCATEGORY][ResourceTypeName][ActivityName][HASACTIVE][LASTACTIVETIME][map_CREATEUSER][DisTime]"; var checkTitles = "批次,客户ID,客服,分类,资源类型,活动名称,是否工单,工单最后时间,分配人,分配时间"; var list = distributeBiz_Q.GetList(ref pager, pici, 0, category, saleDeptId, groupId, userId, sTime, eTime, resid); string contentType = "application/ms-excel"; System.IO.Stream stream = ExcelHelper.ExportListModelToExcel(list, "资源明细", 50000, checkFilds, checkTitles, DataFormart); string fileName = PageRequest.GetDlownLoadName("资源明细导出" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ".xls"); return File(stream, contentType, fileName); } //public ActionResult ExportTxtMobile(decimal DISTRIBUTEID) //{ // var flag = cache_BL.GetValue_Parameter(WX.CRM.Model.Enum.Parameter.Sys_CanExportAllocate); // if (flag == "1") // { // try // { // List list = distributeBiz_Q.GetFBMobile(DISTRIBUTEID, UserId); // string fileName = PageRequest.GetDlownLoadName("手机号码导出" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ".xls"); // Response.Clear(); // Response.Buffer = false; // Response.ContentType = "application/octet-stream"; // Response.AppendHeader("content-disposition", "attachment;filename=" + fileName + ".txt;"); // //Response.Write("这里是要输出的内容|输出的内容\r\n"); // // 读取数据库,循环 // foreach (var item in list) // { // Response.Write(item + "\r\n"); // } // Response.Flush(); // Response.End(); // } // catch { } // } // return View(); //} //委托进行数据格式化 protected string DataFormart(string key, object value) { string nvalue = ""; switch (key) { case "map_HASMEMO": if (Convert.ToString(value) == "0") nvalue = "否"; else nvalue = "是"; break; case "map_HASBOCE": if (Convert.ToString(value) == "0") nvalue = "否"; else nvalue = "是"; break; case "map_HASGJS": if (Convert.ToString(value) == "0") nvalue = "否"; else nvalue = "是"; break; case "map_HASUSERNAME": if (Convert.ToString(value) == "0") nvalue = "否"; else nvalue = "是"; break; case "SALESID": nvalue = InnerUserHelper.Instance.EidAndName(Convert.ToDecimal(value)); break; case "map_CREATEUSER": nvalue = InnerUserHelper.Instance.EidAndName(Convert.ToDecimal(value)); break; case "FirstPkid": nvalue = InnerUserHelper.Instance.EidAndName(Convert.ToDecimal(value)); break; case "SecondPkid": nvalue = InnerUserHelper.Instance.EidAndName(Convert.ToDecimal(value)); break; case "ThreePkid": nvalue = InnerUserHelper.Instance.EidAndName(Convert.ToDecimal(value)); break; case "disleader": nvalue = InnerUserHelper.Instance.EidAndName(Convert.ToDecimal(value)); break; case "FirstTimeLengthZero": nvalue = value.ToString() == "1" ? "是" : "否"; break; case "FirstTimeLengthMinute": nvalue = value.ToString() == "1" ? "是" : "否"; break; case "SecondTimeLengthZero": nvalue = value.ToString() == "1" ? "是" : "否"; break; case "SecondTimeLengthMinute": nvalue = value.ToString() == "1" ? "是" : "否"; break; case "ThreeTimeLengthZero": nvalue = value.ToString() == "1" ? "是" : "否"; break; case "ThreeTimeLengthMinute": nvalue = value.ToString() == "1" ? "是" : "否"; break; default: return Convert.ToString(value); } return nvalue; } #endregion #region 分配历史资源统计 [HttpGet] [AuthorizeRedirect(Roles = InitRights.CONST_分配历史资源统计)] public ActionResult DistributeHisCount() { ToolBar tool = new ToolBar(); tool.AllowButton("Other1"); tool.AddOtherButton("Other1", "导出", "icon-export", "ExportHis_Click", true); ViewBag.ToolBar = tool; var tab = new Table("tablist"); tab.AddHeadCol("salesid", "", "客服"); tab.AddHeadCol("group", "", "组别"); tab.AddHeadCol("disCount", "", "分配资源数"); tab.AddHeadCol("recycleCount", "", "回收数量"); tab.AddHeadCol("ALLCALL", "", "呼出数"); tab.AddHeadCol("uncancall", "", "未接通"); tab.AddHeadCol("allcancall", "", "非有效接通"); tab.AddHeadCol("cancall", "", "有效接通"); tab.AddHeadCol("htl", "", "呼通率"); tab.AddHeadCol("memo", "", "工单数"); if (companyCode == "DNZZ") tab.AddHeadCol("jihuo", "", "激活"); else tab.AddHeadCol("fuwu", "", "服务"); tab.AddHeadCol("weixin", "", "加好友"); tab.AddHeadCol("jiangjie", "", "讲解"); tab.AddHeadCol("yixiang", "", "意向"); tab.AddHeadCol("regnum", "", "注册资源分配数"); tab.AddHeadCol("activenum", "", "活动报名分配数"); tab.AddHeadCol("tgnum", "", "诊股推广分配数"); tab.AddHeadCol("collectnum", "", "活动报名收藏数"); tab.AddHeadCol("ordernum", "", "开单资源"); tab.AddHeadCol("orderrate", "", "开单率"); tab.AddHeadRow(); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); ViewBag.gridTable = tab.GetHead(); return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_分配历史资源统计)] public JsonResult DistributeHisCount(DateTime sTime, DateTime eTime, string columns) { var tab = new Table(columns, true); string saleDeptId = Request["saleDeptId"]; string groupId = Request["groupId"]; string innerUserId = Request["userId"]; var ds = distributeBiz_Q.GetDistbuteHisCount(sTime, eTime, saleDeptId, groupId, innerUserId); var userGroup = cache_BL.GetList_InnerUserGroup(); DataTable dt = new DataTable(); if (ds != null && ds.Tables[0] != null) { dt = ds.Tables[0]; foreach (DataRow item in dt.Rows) { var uid = Convert.ToDecimal(item["salesid"]); var group = userGroup.Find(p => p.INNERUSERID == uid); decimal? gid = null; if (group != null) gid = group.GID; tab.AddCol(InnerUserHelper.Instance.EidAndName(uid)); tab.AddCol(InnerUserHelper.Instance.GetGroupName(gid)); var total = Convert.ToDouble(item["disCount"]); tab.AddCol(total); tab.AddCol(item["recycleCount"]); tab.AddCol(item["ALLCALL"]); tab.AddCol(item["uncancall"]); tab.AddCol(item["allcancall"]); tab.AddCol(item["cancall"]); tab.AddCol(Convert.ToDecimal(item["ALLCALL"]) > 0 ? string.Format("{0:p}", Convert.ToDecimal(item["cancall"]) / Convert.ToDecimal(item["ALLCALL"])) : "0%"); tab.AddCol(item["memo"]); if (companyCode == "DNZZ") tab.AddCol(item["jihuo"]); else tab.AddCol(item["fuwu"]); //tab.AddCol(item["weixin"]); tab.AddCol(item["weixinnew"]);//新增字段 tab.AddCol(item["jiangjie"]); tab.AddCol(item["yixiang"]); tab.AddCol(item["regnum"]); tab.AddCol(item["activenum"]); tab.AddCol(item["tgnum"]); tab.AddCol(item["collectnum"]); tab.AddCol(item["ordernum"]); if (total != 0) { tab.AddCol(string.Format("{0:F}%", Convert.ToDouble(item["ordernum"]) / total * 100)); } else { tab.AddCol("0.00%"); } tab.AddRow(); } if (ds.Tables[0].Rows.Count > 0) { tab.AddCol("合计:"); tab.AddCol(""); tab.AddCol(ds.Tables[0].Compute("Sum(disCount)", "true")); tab.AddCol(ds.Tables[0].Compute("Sum(recycleCount)", "true")); tab.AddCol(ds.Tables[0].Compute("Sum(ALLCALL)", "true")); tab.AddCol(ds.Tables[0].Compute("Sum(uncancall)", "true")); tab.AddCol(ds.Tables[0].Compute("Sum(allcancall)", "true")); tab.AddCol(ds.Tables[0].Compute("Sum(cancall)", "true")); tab.AddCol(Convert.ToDecimal(ds.Tables[0].Compute("Sum(ALLCALL)", "true")) > 0 ? string.Format("{0:P}%", Convert.ToDecimal(ds.Tables[0].Compute("Sum(cancall)", "true")) / Convert.ToDecimal(ds.Tables[0].Compute("Sum(ALLCALL)", "true"))) : string.Empty); tab.AddCol(ds.Tables[0].Compute("Sum(memo)", "true")); if (companyCode == "DNZZ") tab.AddCol(ds.Tables[0].Compute("Sum(jihuo)", "true")); else tab.AddCol(ds.Tables[0].Compute("Sum(fuwu)", "true")); //tab.AddCol(ds.Tables[0].Compute("Sum(weixin)", "true")); tab.AddCol(ds.Tables[0].Compute("Sum(weixinnew)", "true")); tab.AddCol(ds.Tables[0].Compute("Sum(jiangjie)", "true")); tab.AddCol(ds.Tables[0].Compute("Sum(yixiang)", "true")); tab.AddCol(ds.Tables[0].Compute("Sum(regnum)", "true")); tab.AddCol(ds.Tables[0].Compute("Sum(activenum)", "true")); tab.AddCol(ds.Tables[0].Compute("Sum(tgnum)", "true")); tab.AddCol(ds.Tables[0].Compute("Sum(collectnum)", "true")); tab.AddCol(ds.Tables[0].Compute("Sum(ordernum)", "true")); tab.AddCol(Convert.ToDecimal(ds.Tables[0].Compute("Sum(num)", "true")) > 0 ? string.Format("{0:P}%", Convert.ToDecimal(ds.Tables[0].Compute("Sum(ordernum)", "true")) / Convert.ToDecimal(ds.Tables[0].Compute("Sum(num)", "true"))) : string.Empty); tab.AddRow(); } } var json = new { rowsList = tab.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } #endregion #region 分配历史统计资源导出 public ActionResult ExportDistributeHisCount(DateTime sTime, DateTime eTime, string columns) { string saleDeptId = Request["saleDeptId"]; string groupId = Request["groupId"]; string innerUserId = Request["userId"]; string checkFilds = "[salesid][group][disCount][recycleCount][ALLCALL][uncancall][allcancall][cancall][htl][memo][fuwu][jihuo][weixinnew][jiangjie][yixiang][regnum][activenum][collectnum][ordernum][orderrate]"; if (companyCode != "DNZZ") checkFilds = checkFilds.Replace("[jihuo]", ""); else checkFilds = checkFilds.Replace("[fuwu]", ""); string checkTitles = "客服,组别,分配资源数,回收数量,呼出数,未接通,非有效接通,有效接通,呼通率,工单数,服务,激活,加好友,讲解,意向,注册资源分配数,活动报名分配数,活动报名收藏数,开单资源,开单率"; if (companyCode != "DNZZ") checkTitles = checkTitles.Replace("激活,", ""); else checkTitles = checkTitles.Replace("服务,", ""); var ds = distributeBiz_Q.GetDistbuteHisCount(sTime, eTime, saleDeptId, groupId, innerUserId); var userGroup = cache_BL.GetList_InnerUserGroup(); List list = new List(); DataTable dt = new DataTable(); if (ds != null && ds.Tables[0] != null) { dt = ds.Tables[0]; foreach (DataRow item in dt.Rows) { var uid = Convert.ToDecimal(item["salesid"]); var group = userGroup.Find(p => p.INNERUSERID == uid); decimal? gid = null; if (group != null) gid = group.GID; WX.CRM.Model.Entity.RES_DISTRIBUTE_HisCount_Extend model = new Model.Entity.RES_DISTRIBUTE_HisCount_Extend { salesid = InnerUserHelper.Instance.EidAndName(uid), group = InnerUserHelper.Instance.GetGroupName(gid), disCount = Convert.ToDecimal(item["disCount"]), recycleCount = Convert.ToDecimal(item["recycleCount"]), ALLCALL = Convert.ToDecimal(item["ALLCALL"]), uncancall = Convert.ToDecimal(item["uncancall"]), allcancall = Convert.ToDecimal(item["allcancall"]), cancall = Convert.ToDecimal(item["cancall"]), htl = Convert.ToDecimal(item["ALLCALL"]) > 0 ? string.Format("{0:p}", Convert.ToDecimal(item["cancall"]) / Convert.ToDecimal(item["ALLCALL"])) : "0%", memo = Convert.ToDecimal(item["memo"]), jihuo = Convert.ToDecimal(item["jihuo"]), fuwu = Convert.ToDecimal(item["fuwu"]), weixin = Convert.ToDecimal(item["weixin"]), jiangjie = Convert.ToDecimal(item["jiangjie"]), yixiang = Convert.ToDecimal(item["yixiang"]), regnum = Convert.ToDecimal(item["regnum"]), activenum = Convert.ToDecimal(item["activenum"]), collectnum = Convert.ToDecimal(item["collectnum"]), ordernum = Convert.ToDecimal(item["ordernum"]), orderrate = Convert.ToDecimal(item["num"]) == 0 ? "0.00%" : string.Format("{0:F}%", Convert.ToDecimal(item["ordernum"]) / Convert.ToDecimal(item["num"]) * 100) }; list.Add(model); } } string contentType = "application/ms-excel"; System.IO.Stream stream = ExcelHelper.ExportListModelToExcel(list, "手工分配历史资源统计", 50000, checkFilds, checkTitles, null); string fileName = PageRequest.GetDlownLoadName("手工分配历史资源统计" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ".xls"); return File(stream, contentType, fileName); } #endregion private class DistributeCountView { public DateTime CTime { get; set; } public decimal SalesId { get; set; } public decimal AllCount { get; set; } public decimal UnCount { get; set; } } private class DistributeUnCountView { public string ResId { get; set; } public string CName { get; set; } } private class ResDistributeHisEffectView { public string PICI { get; set; } public decimal RESTYPEID { get; set; } public string RESTYPENAME { get; set; } public DateTime STIME { get; set; } public decimal DISCOUNT { get; set; } public decimal RECYCLECOUNT { get; set; } public decimal ALLCALL { get; set; } public decimal UNCANCALL { get; set; } public decimal ALLCANCALL { get; set; } public decimal CANCALL { get; set; } public string htl { get; set; } public decimal MEMO { get; set; } public decimal WEIXIN { get; set; } public decimal FIRSTORDER { get; set; } public decimal JIHUO { get; set; } public decimal JIANGJIE { get; set; } public decimal YIXIANG { get; set; } public decimal FUWU { get; set; } public string xdl { get; set; } public decimal disleader { get; set; } } private class ResAllcoteLogEffectView { public decimal RESTYPEID { get; set; } public string RESTYPENAME { get; set; } public DateTime STIME { get; set; } public decimal DISCOUNT { get; set; } public decimal RECYCLECOUNT { get; set; } public decimal ALLCALL { get; set; } public decimal UNCANCALL { get; set; } public decimal ALLCANCALL { get; set; } public decimal CANCALL { get; set; } public string htl { get; set; } public decimal MEMO { get; set; } public decimal WEIXIN { get; set; } public decimal FIRSTORDER { get; set; } public decimal JIHUO { get; set; } public decimal JIANGJIE { get; set; } public decimal YIXIANG { get; set; } public decimal FUWU { get; set; } public string xdl { get; set; } } private class ResCallTopThreeView { public string ResId { get; set; } public DateTime CTime { get; set; } public decimal? FirstPkid { get; set; } public string FirstGName { get; set; } public DateTime? FirstTime { get; set; } public decimal FirstTimeLengthZero { get; set; } public decimal FirstTimeLengthMinute { get; set; } public decimal? SecondPkid { get; set; } public string SecondGName { get; set; } public DateTime? SecondTime { get; set; } public decimal SecondTimeLengthZero { get; set; } public decimal SecondTimeLengthMinute { get; set; } public decimal? ThreePkid { get; set; } public string ThreeGName { get; set; } public DateTime? ThreeTime { get; set; } public decimal ThreeTimeLengthZero { get; set; } public decimal ThreeTimeLengthMinute { get; set; } } private class UserCallTopThreeView { public string GName { get; set; } public decimal SALESID { get; set; } public DateTime CTime { get; set; } public string ResId { get; set; } public DateTime? FirstTime { get; set; } public decimal FirstTimeLengthZero { get; set; } public decimal FirstTimeLengthMinute { get; set; } public DateTime? SecondTime { get; set; } public decimal SecondTimeLengthZero { get; set; } public decimal SecondTimeLengthMinute { get; set; } public DateTime? ThreeTime { get; set; } public decimal ThreeTimeLengthZero { get; set; } public decimal ThreeTimeLengthMinute { get; set; } } } }