1092 lines
53 KiB
C#
1092 lines
53 KiB
C#
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 我的活动资源分配
|
|
/// <summary>
|
|
/// 我的活动资源分配
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
|
|
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]
|
|
/// <summary>
|
|
/// 按照条件获取数据
|
|
/// </summary>
|
|
/// <param name="pager"></param>
|
|
/// <param name="queryStr"></param>
|
|
/// <returns></returns>
|
|
|
|
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<WX.CRM.Model.Entity.RES_DISTRIBUTE_Extend> 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("<a href=\"javascript:parent.parent.ChildAddTab('{0}', '{1}', '')\" " + color + ">{2}</a>", "客户详细", "/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]
|
|
/// <summary>
|
|
/// 资源明细 列表
|
|
/// </summary>
|
|
/// <param name="pager"></param>
|
|
/// <param name="queryStr"></param>
|
|
/// <returns></returns>
|
|
public JsonResult GetDetailHtmlList(Pager pager, string columns)
|
|
{
|
|
decimal id = Convert.ToDecimal(Request.QueryString["id"]);
|
|
List<WX.CRM.Model.Entity.CACHE_RES_RESOURCE_COUNT> 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("<a href=\"javascript:parent.parent.ChildAddTab('{0}', '{1}', '')\">{2}</a>"
|
|
, "客户详细"
|
|
, "/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<WX.CRM.Model.Entity.RES_DISTRIBUTE_Extend> 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("<a href=\"javascript:parent.parent.ChildAddTab('{0}', '{1}', '')\" " + color + ">{2}</a>", "客户详细", "/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<WX.CRM.Model.Entity.RES_DISTRIBUTE_Extend>(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<SelectListItem> lis = new List<SelectListItem>();
|
|
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<ResDistributeHisEffectView>();
|
|
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<ResDistributeHisEffectView>();
|
|
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<ResDistributeHisEffectView>(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<SelectListItem> lis = new List<SelectListItem>();
|
|
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<ResAllcoteLogEffectView>();
|
|
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<ResAllcoteLogEffectView>();
|
|
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<DistributeCountView>();
|
|
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("<a href='javascript:void(0)' onclick='GetUnCount(\"{0}\",\"{3}\",{1});'>{2}</a>", 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<DistributeUnCountView>();
|
|
foreach (var item in list)
|
|
{
|
|
var resid = string.Format("<a href=\"javascript:parent.parent.ChildAddTab('{0}', '{1}', '')\">{2}</a>", "客户详细", "/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 资源明细数据导出
|
|
/// <summary>
|
|
/// 导出所有信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
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<WX.CRM.Model.Entity.RES_DISTRIBUTE_Extend>(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<string> 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<WX.CRM.Model.Entity.RES_DISTRIBUTE_HisCount_Extend> list = new List<Model.Entity.RES_DISTRIBUTE_HisCount_Extend>();
|
|
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<WX.CRM.Model.Entity.RES_DISTRIBUTE_HisCount_Extend>(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; }
|
|
}
|
|
}
|
|
}
|