using System; using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using WX.CRM.BLL.Application.UserComBox; using WX.CRM.BLL.Base; using WX.CRM.Common; using WX.CRM.IBLL.Util; using WX.CRM.IBLL.Wx; using WX.CRM.Model.Entity; using WX.CRM.Model.MAP; using WX.CRM.WEB.Handler; using WX.CRM.WebHelper; namespace WX.CRM.WEB.Controllers.WeiXin { public class WxResourceReportController : BaseController { private readonly IWX_WORKACCOUNT _wxWorkaccount; private readonly IWX_WORKACCOUNT_ONLINELOG _wxWorkaccountOnlinelog; private readonly IUserServices _userComBo; private ICACHE_Q cacheQ; public WxResourceReportController(IWX_WORKACCOUNT wxWorkaccount, IWX_WORKACCOUNT_ONLINELOG wxWorkaccountOnlinelog, ICACHE_Q _cacheQ, IUserServices userComBo) { _wxWorkaccount = wxWorkaccount; _wxWorkaccountOnlinelog = wxWorkaccountOnlinelog; this.cacheQ = _cacheQ; this._userComBo = userComBo; } [HttpGet] [AuthorizeRedirect(Roles = InitRights.CONST_微信推广资源统计)] public ActionResult Index() { ControlResource.JudgeSYQ(); Table tab = new Table("tablist"); tab.AddHiddenHeadCol("jobusername", "jobusername"); tab.AddHiddenHeadCol("inneruserid", "inneruserid"); tab.AddHeadCol("eid", "", "工号"); tab.AddHeadCol("uname", "", "姓名"); tab.AddHiddenHeadCol("gid", "gid"); tab.AddHeadCol("gname", "", "组别"); tab.AddHeadCol("isdismiss", "", "在/离职"); int x = 8; tab.AddHeadCol("nottuiguang", "", "线下资源数", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("tuiguang", "", "推广资源数", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("blackcount", "", "拉黑资源数", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("consume", "", "资源损耗率", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("unvalidResCount", "", "无响应资源数", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("unvalidReslv", "", "无响应率", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("validResCount", "", "有效沟通资源数", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("validReslv", "", "有效沟通率", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("useResCount", "", "使用资源数", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("useReslv", "", "使用资源率", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("OrderCount", "", "资源成交数", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("PerformanceAmount", "", "总成交额", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("chenjiaoday", "", "平均成交周期", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("chengjiaolv", "", "成交率", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("validReschengjiaolv", "", "有效资源成交率", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; //tab.AddHeadCol("communicatemonth", "", "本月沟通资源数", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); //x++; tab.AddHeadCol("CurTimeAmount", "", "区间成交额", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("communicateday1", "", "今日沟通资源数", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("communicateday1lv", "", "今日沟通率", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("onlinerate", "", "近3日在线率", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("curonlinerate", "", "时间段内在线率", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); tab.AddHeadRow(); ViewBag.RptList = tab.GetHead(); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); ViewBag.DeptCode = cacheQ.GetValue_Parameter(WX.CRM.Model.Enum.Parameter.Sys_Environment_DeptCode); return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_微信推广资源统计)] public JsonResult Index(QueryUserComboDto usercomboDto, DateTime? sTime, DateTime? eTime, DateTime? cjTime1, DateTime? cjTime2, bool curMonth, decimal? resType, string isdismiss, string columns) { ControlResource.JudgeSYQ(); try { if (sTime == null || eTime == null) { return JsonHandler.ManageMessage("参数错误!", false); } Table table = new Table(columns, true); eTime = eTime.Value.AddDays(1); cjTime2 = cjTime2.Value.AddDays(1); var d2 = DateTime.Parse(DateTime.Now.ToShortDateString()); var d1 = d2.AddDays(-3); var workAccountList = _wxWorkaccount.GetList(); //在线率 var onlineList = _wxWorkaccountOnlinelog.GetList(string.Empty, sTime.Value.ToString(), eTime.Value.ToString()); //3日在线率 var online3DayList = _wxWorkaccountOnlinelog.GetList(string.Empty, d1.ToString(), d2.ToString()); //_wxWorkaccount.GenWxResourceCount(); var list = _wxWorkaccount.GetWxResourceReport(usercomboDto, sTime.Value, eTime.Value, curMonth ? 1 : 0, resType, cjTime1, cjTime2); if (!string.IsNullOrEmpty(isdismiss)) { list = list.Where(p => p.isdismiss == isdismiss).ToList(); } foreach (var item in list) { var jobusernameArr = workAccountList.Where(p => p.INNERUSERID == item.inneruserid).Select(p => p.USERNAME).ToList(); var onlineInfoSum = onlineList.Where(p => jobusernameArr.Contains(p.USERNAME)).Sum(p => p.ONLINERATE); var onlineInfoCount = onlineList.Count(p => jobusernameArr.Contains(p.USERNAME)); var online3DayInfoSum = online3DayList.Where(p => jobusernameArr.Contains(p.USERNAME)).Sum(p => p.ONLINERATE); var online3DayInfoCount = online3DayList.Count(p => jobusernameArr.Contains(p.USERNAME)); var allResourceCount = item.tuiguang + item.nottuiguang; table.AddHiddenCol(string.Join(",", jobusernameArr)); table.AddHiddenCol(item.inneruserid); table.AddCol(item.eid); table.AddCol(item.uname); table.AddHiddenCol(item.gid); table.AddCol(item.gname); table.AddCol(item.isdismiss); table.AddCol(item.nottuiguang); table.AddCol(item.tuiguang); table.AddCol(item.blackcount); table.AddCol(allResourceCount > 0 ? string.Format("{0:p}", item.blackcount / allResourceCount) : "0%"); table.AddCol(item.unvalidResCount); table.AddCol(allResourceCount > 0 ? string.Format("{0:p}", item.unvalidResCount / allResourceCount) : "0%"); table.AddCol(item.validResCount); table.AddCol(allResourceCount > 0 ? string.Format("{0:p}", item.validResCount / allResourceCount) : "0%"); table.AddCol(item.useResCount); table.AddCol(allResourceCount > 0 ? string.Format("{0:p}", item.useResCount / allResourceCount) : "0%"); table.AddCol(item.OrderCount); table.AddCol(item.PerformanceAmount); table.AddCol(item.OrderCount > 0 ? string.Format("{0:f}", item.chenjiaoday / item.OrderCount) : "0"); table.AddCol(allResourceCount > 0 ? string.Format("{0:p}", item.OrderCount / allResourceCount) : "0%"); table.AddCol(allResourceCount > 0 && (item.validResCount / allResourceCount) > 0 ? string.Format("{0:p}", (item.OrderCount / allResourceCount) / (item.validResCount / allResourceCount)) : "0%"); table.AddCol(item.CurTimeAmount); table.AddCol(item.day1); table.AddCol(allResourceCount > 0 ? string.Format("{0:p}", item.day1 / allResourceCount) : "0%"); table.AddCol(online3DayInfoCount > 0 ? string.Format("{0:p}", online3DayInfoSum / online3DayInfoCount) : "0%"); table.AddCol(onlineInfoCount > 0 ? string.Format("{0:p}", onlineInfoSum / onlineInfoCount) : "0%"); table.AddRow(); } if (list.Count > 0) { var sumResourceCount = list.Sum(p => p.nottuiguang) + list.Sum(p => p.tuiguang); table.AddHiddenCol(""); table.AddHiddenCol(""); table.AddCol("合计:"); table.AddCol(""); table.AddHiddenCol(""); table.AddCol(""); table.AddCol(""); table.AddCol(list.Sum(p => p.nottuiguang)); table.AddCol(list.Sum(p => p.tuiguang)); table.AddCol(list.Sum(p => p.blackcount)); table.AddCol(sumResourceCount > 0 ? string.Format("{0:p}", list.Sum(p => p.blackcount) / sumResourceCount) : "0%"); table.AddCol(list.Sum(p => p.unvalidResCount)); table.AddCol(sumResourceCount > 0 ? string.Format("{0:p}", list.Sum(p => p.unvalidResCount) / sumResourceCount) : "0%"); table.AddCol(list.Sum(p => p.validResCount)); table.AddCol(sumResourceCount > 0 ? string.Format("{0:p}", list.Sum(p => p.validResCount) / sumResourceCount) : "0%"); table.AddCol(list.Sum(p => p.useResCount)); table.AddCol(sumResourceCount > 0 ? string.Format("{0:p}", list.Sum(p => p.useResCount) / sumResourceCount) : "0%"); table.AddCol(list.Sum(p => p.OrderCount)); table.AddCol(list.Sum(p => p.PerformanceAmount)); table.AddCol(list.Sum(p => p.OrderCount) > 0 ? string.Format("{0:f}", list.Sum(p => p.chenjiaoday) / list.Sum(p => p.OrderCount)) : "0"); table.AddCol(sumResourceCount > 0 ? string.Format("{0:p}", list.Sum(p => p.OrderCount) / sumResourceCount) : "0%"); table.AddCol(sumResourceCount > 0 && list.Sum(p => p.validResCount) / sumResourceCount > 0 ? string.Format("{0:p}", (list.Sum(p => p.OrderCount) / sumResourceCount) / (list.Sum(p => p.validResCount) / sumResourceCount)) : "0%"); table.AddCol(list.Sum(p => p.CurTimeAmount)); table.AddCol(list.Sum(p => p.day1)); table.AddCol(sumResourceCount > 0 ? string.Format("{0:p}", list.Sum(p => p.day1) / sumResourceCount) : "0%"); table.AddCol(""); table.AddCol(""); table.AddFootRow(); } var json = new { rowsList = table.GetRows(), foot = table.GetFoot() }; return Json(json, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error("WxResourceReportController:Index" + ex.Message + ex.StackTrace); return JsonHandler.ManageMessage(ex.Message, false); } } [AuthorizeRedirect(Roles = InitRights.CONST_微信推广资源统计)] public FileResult Export(QueryUserComboDto usercomboDto, DateTime? sTime, DateTime? eTime, DateTime? cjTime1, DateTime? cjTime2, bool curMonth, decimal? resType) { ControlResource.JudgeSYQ(); var checkedFilds = PageRequest.GetQueryString("checkedFilds"); var checkedTitle = PageRequest.GetQueryString("checkedTitles"); eTime = eTime.Value.AddDays(1); var d2 = DateTime.Parse(DateTime.Now.ToShortDateString()); var d1 = d2.AddDays(-3); var workAccountList = _wxWorkaccount.GetList(); var onlineList = _wxWorkaccountOnlinelog.GetList(string.Empty, sTime.Value.ToString(), eTime.Value.ToString()); var online3DayList = _wxWorkaccountOnlinelog.GetList(string.Empty, d1.ToString(), d2.ToString()); var list = _wxWorkaccount.GetWxResourceReport(usercomboDto, sTime.Value, eTime.Value, curMonth ? 1 : 0, resType, cjTime1, cjTime2); var data = new List(); foreach (var item in list) { var jobusernameArr = workAccountList.Where(p => p.INNERUSERID == item.inneruserid).Select(p => p.USERNAME).ToList(); var onlineInfoSum = onlineList.Where(p => jobusernameArr.Contains(p.USERNAME)).Sum(p => p.ONLINERATE); var onlineInfoCount = onlineList.Count(p => jobusernameArr.Contains(p.USERNAME)); var online3DayInfoSum = online3DayList.Where(p => jobusernameArr.Contains(p.USERNAME)).Sum(p => p.ONLINERATE); var online3DayInfoCount = online3DayList.Count(p => jobusernameArr.Contains(p.USERNAME)); var allResourceCount = item.tuiguang + item.nottuiguang; data.Add(new WxResourceReportExport() { eid = item.eid, uname = item.uname, gname = item.gname, isdismiss = item.isdismiss, tuiguang = item.tuiguang, nottuiguang = item.nottuiguang, blackcount = item.blackcount, consume = allResourceCount > 0 ? string.Format("{0:p}", item.blackcount / allResourceCount) : "0%", unvalidResCount = item.unvalidResCount, unvalidReslv = allResourceCount > 0 ? string.Format("{0:p}", item.unvalidResCount / allResourceCount) : "0%", validResCount = item.validResCount, validReslv = allResourceCount > 0 ? string.Format("{0:p}", item.validResCount / allResourceCount) : "0%", useResCount = item.useResCount, useReslv = allResourceCount > 0 ? string.Format("{0:p}", item.useResCount / allResourceCount) : "0%", OrderCount = item.OrderCount, PerformanceAmount = item.PerformanceAmount, chenjiaoday = item.OrderCount > 0 ? decimal.Parse(string.Format("{0:f}", item.chenjiaoday / item.OrderCount)) : 0, chengjiaolv = allResourceCount > 0 ? string.Format("{0:p}", item.OrderCount / allResourceCount) : "0%", validReschengjiaolv = allResourceCount > 0 && (item.validResCount / allResourceCount) > 0 ? string.Format("{0:p}", (item.OrderCount / allResourceCount) / (item.validResCount / allResourceCount)) : "0%", CurTimeAmount = item.CurTimeAmount, //communicatemonth = item.communicatemonth, communicateday1 = item.communicateday1, communicateday1lv = allResourceCount > 0 ? string.Format("{0:p}", item.day1 / allResourceCount) : "0%", //communicateday3 = allResourceCount - item.communicateday3 - item.communicateday1 + item.day3, //communicateday3lv = allResourceCount > 0 ? string.Format("{0:p}", item.day3 / allResourceCount) : "0%", //communicateday6 = allResourceCount - item.communicateday6 - item.communicateday1 + item.day6, //communicateday6lv = allResourceCount > 0 ? string.Format("{0:p}", item.day6 / allResourceCount) : "0%", //communicateday12 = allResourceCount - item.communicateday12 - item.communicateday1 + item.day12, //communicateday12lv = allResourceCount > 0 ? string.Format("{0:p}", item.day12 / allResourceCount) : "0%", //communicateday24 = allResourceCount - item.communicateday24 - item.communicateday1 + item.day24, //msgcount = item.msgcount > 0 ? decimal.Parse(string.Format("{0:p}", allResourceCount / item.msgcount)) : 0, onlinerate = online3DayInfoCount > 0 ? string.Format("{0:p}", online3DayInfoSum / online3DayInfoCount) : "0%", curonlinerate = onlineInfoCount > 0 ? string.Format("{0:p}", onlineInfoSum / onlineInfoCount) : "0%" }); } return File(ExcelHelper.ExportListModelToExcel(data, "微信推广资源统计", 60000, checkedFilds, checkedTitle, null), "application/ms-excel", PageRequest.GetDlownLoadName("微信推广资源统计.xls")); } public class WxResourceReportExport { public decimal eid { get; set; } public string uname { get; set; } public string gname { get; set; } public string isdismiss { get; set; } public decimal tuiguang { get; set; } public decimal nottuiguang { get; set; } public decimal blackcount { get; set; } public decimal PerformanceAmount { get; set; } public decimal OrderCount { get; set; } public string consume { get; set; } public decimal chenjiaoday { get; set; } public string chengjiaolv { get; set; } public string validReschengjiaolv { get; set; } public decimal communicatemonth { get; set; } public decimal communicateday1 { get; set; } public string communicateday1lv { get; set; } public decimal communicateday3 { get; set; } public string communicateday3lv { get; set; } public decimal communicateday6 { get; set; } public string communicateday6lv { get; set; } public decimal communicateday12 { get; set; } public string communicateday12lv { get; set; } public decimal communicateday24 { get; set; } public decimal msgcount { get; set; } public string onlinerate { get; set; } public string curonlinerate { get; set; } public decimal validResCount { get; set; } public string validReslv { get; set; } public decimal unvalidResCount { get; set; } public string unvalidReslv { get; set; } public decimal CurTimeAmount { get; set; } public decimal useResCount { get; set; } public string useReslv { get; set; } } #region 员工日常工作报表 public ActionResult UserWorkReportTab() { return View(); } [HttpGet] [AuthorizeRedirect(Roles = InitRights.CONST_员工日常工作报表)] public ActionResult UserWorkReport() { string tableId = "tablist"; Table tab = new Table(tableId); Pager pager = new Pager() { page = 1, rows = 1000 }; tab.AddHeadCol("uname", "", "客服"); tab.AddHeadCol("gname", "", "组别"); int x = 8; tab.AddHeadCol("total_amount", "", "资源分配数", true); x++; tab.AddHeadCol("reg_amount", "", "注册分配数(推广)", true); x++; tab.AddHeadCol("reg_f_amount", "", "注册分配数(非推广)", true); x++; tab.AddHeadCol("act_amount", "", "报名分配数", true); x++; tab.AddHeadCol("other_amount", "", "其他分配数", true); x++; tab.AddHeadCol("wx_amount", "", "加微数", true); x++; tab.AddHeadCol("wx_rate", "", "加微率", true); x++; tab.AddHeadCol("wx_amount_distinct", "", "加微数(去重)", true); x++; tab.AddHeadCol("wx_rate_distinct", "", "加微率(去重)", true); //x++; //tab.AddHeadCol("del_amount", "", "删除数", true); //x++; //tab.AddHeadCol("del_rate", "", "删除率", true); x++; tab.AddHeadCol("explain_amount", "", "讲解数", true); x++; tab.AddHeadCol("explain_rate", "", "讲解率", true); x++; tab.AddHeadCol("open_amount", "", "报价数", true); x++; tab.AddHeadCol("open_rate", "", "报价率", true); x++; tab.AddHeadCol("deal_amount", "", "成交人数", true); x++; tab.AddHeadCol("deal_rate", "", "成交率", true); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pager, tableId, "10,20,50,1000"); return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_员工日常工作报表)] public JsonResult UserWorkReport(Pager pager, decimal? companyId, decimal? deptId, string groupId, decimal? userId, DateTime? stime, DateTime? etime, bool? hideQuit, string columns) { try { if (stime == null || etime == null) { return JsonHandler.ManageMessage("参数错误!", false); } List userIdlist = new List(); var users = _userComBo.GetUserComBo(companyId, deptId, groupId, userId); userIdlist = users.Select(m => m.UserId).ToList(); if (string.IsNullOrEmpty(pager.order)) { pager.order = "desc"; pager.sort = "total_amount"; } var list = _wxWorkaccount.GetUserWorkStatistics(pager, userIdlist, stime.Value, etime.Value, hideQuit ?? false); Table table = new Table(columns, true); table.gridPager = pager; foreach (var item in list) { table.AddCol($"{item.EID}-{item.UNAME}"); table.AddCol(item.GNAME); table.AddCol(item.TOTAL_AMOUNT.ToString()); table.AddCol(item.REG_AMOUNT.ToString()); table.AddCol(item.REG_F_AMOUNT.ToString()); table.AddCol(item.ACT_AMOUNT.ToString()); table.AddCol(item.OTHER_AMOUNT.ToString()); table.AddCol(item.WX_AMOUNT.ToString()); table.AddCol($"{item.WX_RATE.ToString("f2")}%"); table.AddCol(item.WX_AMOUNT_DISTINCT.ToString()); table.AddCol($"{item.WX_RATE_DISTINCT.ToString("f2")}%"); //table.AddCol(item.DEL_AMOUNT.ToString()); //table.AddCol(item.DEL_RATE.ToString()); table.AddCol(item.EXPLAIN_AMOUNT.ToString()); table.AddCol($"{item.EXPLAIN_RATE.ToString("f2")}%"); table.AddCol(item.OPEN_AMOUNT.ToString());//意向单 table.AddCol(item.OPEN_RATE.ToString()); table.AddCol(item.DEAL_AMOUNT.ToString());// table.AddCol($"{item.DEAL_RATE.ToString("f2")}%");// table.AddRow(); } //汇总 table.AddCol("合计"); table.AddCol("合计"); table.AddCol(list.Sum(m => m.TOTAL_AMOUNT)); var regAmount = list.Sum(m => m.REG_AMOUNT); var wxAmount= list.Sum(m => m.WX_AMOUNT);//加微数量 var wxdisAmount = list.Sum(m => m.WX_AMOUNT_DISTINCT);//加微数量 var expAmount = list.Sum(m => m.EXPLAIN_AMOUNT); var dealAmount = list.Sum(m => m.DEAL_AMOUNT); var delAmount = list.Sum(m => m.DEL_RATE); var openAmount = list.Sum(m => m.OPEN_AMOUNT); table.AddCol(regAmount); table.AddCol(list.Sum(m => m.REG_F_AMOUNT)); table.AddCol(list.Sum(m => m.ACT_AMOUNT)); table.AddCol(list.Sum(m => m.OTHER_AMOUNT)); table.AddCol(wxAmount); var wxrate = regAmount == 0 ? 0 : (wxAmount / regAmount * 100); table.AddCol($"{wxrate.ToString("f2")}%");//加微率 table.AddCol(wxdisAmount); var wxdisrate = regAmount == 0 ? 0 : (wxdisAmount / regAmount * 100); table.AddCol($"{wxdisrate.ToString("f2")}%");//加微率 去重 //table.AddCol(delAmount);//删除 //var delrate = regAmount == 0 ? 0 : (delAmount / regAmount * 100); //table.AddCol($"{delrate.ToString("f2")}%");//加微率 去重 table.AddCol(expAmount); var exprate = regAmount == 0 ? 0 : (expAmount / regAmount * 100); table.AddCol($"{exprate.ToString("f2")}%"); table.AddCol(openAmount);//意向单 var openrate = regAmount == 0 ? 0 : (openAmount / regAmount * 100); table.AddCol($"{openrate.ToString("f2")}%"); table.AddCol(dealAmount);// var dealrate = regAmount == 0 ? 0 : (dealAmount / regAmount * 100); table.AddCol($"{dealrate.ToString("f2")}%");// table.AddRow(); var json = new { rowsList = table.GetRows(), totalPages = pager.totalPages, totalRows = pager.totalRows //foot = table.GetFoot() }; return Json(json, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error("WxResourceReportController:Index" + ex.Message + ex.StackTrace); return JsonHandler.ManageMessage(ex.Message, false); } } [AuthorizeRedirect(Roles = InitRights.CONST_员工日常工作报表)] public FileResult UserWorkReportExport(Pager pager, decimal? companyId, decimal? deptId, string groupId, decimal? userId, DateTime? stime, DateTime? etime, bool? hideQuit) { var checkedFilds = PageRequest.GetQueryString("checkedFilds"); var checkedTitle = PageRequest.GetQueryString("checkedTitles"); List userIdlist = new List(); if (string.IsNullOrEmpty(pager.order)) { pager.order = "desc"; pager.sort = "total_amount"; } var users = _userComBo.GetUserComBo(companyId, deptId, groupId, userId); userIdlist = users.Select(m => m.UserId).ToList(); var list = _wxWorkaccount.GetUserWorkStatistics(pager, userIdlist, stime.Value, etime.Value, hideQuit ?? false); foreach (var item in list) { item.UNAME = $"{item.EID}-{item.UNAME}"; } TMP_DANGSAN_DATA_REPORT sum = new TMP_DANGSAN_DATA_REPORT(); //汇总 sum.UNAME = "合计"; sum.GNAME = "合计"; var regAmount = list.Sum(m => m.REG_AMOUNT); sum.TOTAL_AMOUNT = list.Sum(m => m.TOTAL_AMOUNT); sum.REG_AMOUNT = regAmount; sum.ACT_AMOUNT = list.Sum(m => m.ACT_AMOUNT); sum.OTHER_AMOUNT = list.Sum(m => m.OTHER_AMOUNT); sum.DEAL_AMOUNT = list.Sum(m => m.DEAL_AMOUNT); sum.ACT_AMOUNT = list.Sum(m => m.ACT_AMOUNT); sum.OTHER_AMOUNT = list.Sum(m => m.OTHER_AMOUNT); sum.WX_AMOUNT = list.Sum(m => m.WX_AMOUNT); sum.WX_AMOUNT_DISTINCT = list.Sum(m => m.WX_AMOUNT_DISTINCT); //sum.DEL_AMOUNT = list.Sum(m => m.DEL_AMOUNT); sum.EXPLAIN_AMOUNT = list.Sum(m => m.EXPLAIN_AMOUNT); sum.DEAL_AMOUNT = list.Sum(m => m.DEAL_AMOUNT); var exprate = regAmount == 0 ? 0 : (sum.EXPLAIN_AMOUNT / regAmount * 100); var dealrate = regAmount == 0 ? 0 : (sum.DEAL_AMOUNT / regAmount * 100); var wxrate = regAmount == 0 ? 0 : (sum.WX_AMOUNT / regAmount * 100);//加微率 var wxdisrate = regAmount == 0 ? 0 : (sum.WX_AMOUNT_DISTINCT / regAmount * 100);//加微率去重 var delrate = regAmount == 0 ? 0 : (sum.DEL_AMOUNT / regAmount * 100);//删除率 var openrate = regAmount == 0 ? 0 : (sum.OPEN_AMOUNT / regAmount * 100);//删除率 sum.EXPLAIN_RATE = exprate; sum.DEAL_RATE = dealrate; sum.WX_RATE = wxrate; sum.WX_RATE_DISTINCT = wxdisrate; //sum.DEL_RATE = delrate; sum.OPEN_RATE = openrate; list.Add(sum); return File(ExcelHelper.ExportListModelToExcel(list, "员工日常工作报表", 60000, checkedFilds, checkedTitle, null), "application/ms-excel", PageRequest.GetDlownLoadName("员工日常工作报表.xls")); } #endregion #region 员工日常工作报表(新媒体3) [HttpGet] [AuthorizeRedirect(Roles = InitRights.CONST_员工日常工作报表)] public ActionResult UserWorkReport3() { string tableId = "tablist"; Table tab = new Table(tableId); Pager pager = new Pager() { page = 1, rows = 1000 }; tab.AddHeadCol("uname", "", "客服"); tab.AddHeadCol("gname", "", "组别"); int x = 8; tab.AddHeadCol("wx_total_re", "", "加微数", true); x++; tab.AddHeadCol("wx_total", "", "加微数(去重)", true); x++; tab.AddHeadCol("del_total", "", "删除数", true); x++; tab.AddHeadCol("del_rate", "", "删除率", true); x++; tab.AddHeadCol("reg_total", "", "注册人数", true); x++; tab.AddHeadCol("reg_rate", "", "注册率", true); x++; tab.AddHeadCol("deal_total", "", "成交人数", true); x++; tab.AddHeadCol("deal_rate", "", "成交率", true); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pager, tableId, "10,20,50,1000"); return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_员工日常工作报表)] public JsonResult UserWorkReport3(Pager pager, decimal? companyId, decimal? deptId, string groupId, decimal? userId,string uname,string eid, DateTime? stime, DateTime? etime, bool? hideQuit, string columns) { try { if (stime == null || etime == null) { return JsonHandler.ManageMessage("参数错误!", false); } List userIdlist = new List(); var users = _userComBo.GetUserComBo(companyId, deptId, groupId, userId); userIdlist = users.Select(m => m.UserId).ToList(); if (string.IsNullOrEmpty(pager.order)) { pager.order = "desc"; pager.sort = "wx_amount"; } //获取当前登录用户的渠道段 int deptid = 0;//cms 部门id BAS_PARAMETER_BL paramter_bl = new BAS_PARAMETER_BL(); var settingStr = paramter_bl.GetModel_Patameter("SalesLeadsDeptSetting"); List deptInfos = JsonHelper.JsonDivertToObj>(settingStr.PARAVALUE); deptid = deptInfos.FirstOrDefault(n => n.DeptCode == saleDeptCode)?.DeptId ?? Convert.ToInt32(Utility.GetSettingByKey("CmsApi_Dept")); //deptid = Convert.ToInt32(Utility.GetSettingByKey("CmsApi_Dept")); var list = _wxWorkaccount.GetMediareport(pager, userIdlist, deptid, uname, eid,stime.Value, etime.Value, hideQuit ?? false); Table table = new Table(columns, true); foreach (var item in list) { table.AddCol($"{item.EID}-{item.UNAME}"); table.AddCol(item.GNAME); table.AddCol(item.WX_TOTAL_RE); table.AddCol(item.WX_TOTAL); table.AddCol(item.DEL_TOTAL); table.AddCol($"{item.DEL_RATE.ToString("f2")}%"); table.AddCol(item.REG_TOTAL); table.AddCol($"{item.REG_RATE.ToString("f2")}%"); table.AddCol(item.DEAL_TOTAL); table.AddCol($"{item.DEAL_RATE.ToString("f2")}%"); table.AddRow(); } var json = new { rowsList = table.GetRows() //foot = table.GetFoot() }; return Json(json, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error("WxResourceReportController:Index" + ex.Message + ex.StackTrace); return JsonHandler.ManageMessage(ex.Message, false); } } [AuthorizeRedirect(Roles = InitRights.CONST_员工日常工作报表)] public FileResult UserWorkReport3Export(Pager pager, decimal? companyId, decimal? deptId, string groupId, decimal? userId, string uname, string eid, DateTime? stime, DateTime? etime, bool? hideQuit) { var checkedFilds = PageRequest.GetQueryString("checkedFilds"); var checkedTitle = PageRequest.GetQueryString("checkedTitles"); List userIdlist = new List(); var users = _userComBo.GetUserComBo(companyId, deptId, groupId, userId); userIdlist = users.Select(m => m.UserId).ToList(); if (string.IsNullOrEmpty(pager.order)) { pager.order = "desc"; pager.sort = "wx_amount"; } //获取当前登录用户的渠道段 int deptid = 0;//cms 部门id BAS_PARAMETER_BL paramter_bl = new BAS_PARAMETER_BL(); var settingStr = paramter_bl.GetModel_Patameter("SalesLeadsDeptSetting"); List deptInfos = JsonHelper.JsonDivertToObj>(settingStr.PARAVALUE); deptid = deptInfos.FirstOrDefault(n => n.DeptCode == saleDeptCode)?.DeptId ?? Convert.ToInt32(Utility.GetSettingByKey("CmsApi_Dept")); // deptid = Convert.ToInt32(Utility.GetSettingByKey("CmsApi_Dept")); var list = _wxWorkaccount.GetMediareport(pager, userIdlist, deptid, uname, eid, stime.Value, etime.Value, hideQuit ?? false); foreach (var item in list) { if(item.UNAME!="合计") item.UNAME = $"{item.EID}-{item.UNAME}"; } return File(ExcelHelper.ExportListModelToExcel(list, "新媒体资源工作报表", 60000, checkedFilds, checkedTitle, null), "application/ms-excel", PageRequest.GetDlownLoadName("新媒体资源工作报表.xls")); } #endregion } public class DeptInfo { public string DeptCode { get; set; } public int DeptId { get; set; } public string DeptName { get; set; } } }