using Aop.Api.Domain; using CRM.Core.DTO; using Newtonsoft.Json; 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.Common.Layui; 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; private readonly IBAS_BUSINESSLINE_Q _bussinessLies; public WxResourceReportController(IWX_WORKACCOUNT wxWorkaccount, IWX_WORKACCOUNT_ONLINELOG wxWorkaccountOnlinelog, ICACHE_Q _cacheQ, IUserServices userComBo, IBAS_BUSINESSLINE_Q businessLine_q) { _wxWorkaccount = wxWorkaccount; _wxWorkaccountOnlinelog = wxWorkaccountOnlinelog; this.cacheQ = _cacheQ; this._userComBo = userComBo; this._bussinessLies = businessLine_q; } [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); ToolBar tool = new ToolBar(); string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights.员工日常工作报表, userRightId); tool.AllowButton(toolbtn); tool.AddOtherButton("Other1", "预警值配置", "icon-add", "Other1_Click", true); tool.AddOtherButton("Other2", "预警模板管理", "icon-export", "Other2_Click", true); tool.AddOtherButton("Other3", "预警通知人员配置", "icon-edit", "Other3_Click", false); ViewBag.ToolBar = tool; tab.isFloatHead = true; Pager pager = new Pager() { page = 1, rows = 1000 }; tab.AddHeadCol("uname", "", "客服"); tab.AddHeadCol("gname", "", "组别"); var statusTitle = "指员工在接粉周期内的最大资源 "; statusTitle += "量.该字段仅用于做预警通知. "; tab.AddTipHeadCol("maxnum", "", "最大资源量", "/image/icon/tip.png", statusTitle); tab.AddHeadCol("templatename", "", "预警模板"); 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("wx_amount_unionid", "", "加微数(工号去重)", true); x++; tab.AddHeadCol("wx_rate_unionid", "", "加微率(工号去重)", 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, string 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(); /* if (!string.IsNullOrWhiteSpace(deptId) && string.IsNullOrWhiteSpace(groupId)) { var deptids = deptId.Split(','); foreach(var dept in deptids) { var did = Convert.ToDecimal(dept); var users = _userComBo.GetUserComBoSSO(deptId, groupId, userId); userIdlist.AddRange(users.Select(m => m.UserId).ToList()); } }else if (!string.IsNullOrWhiteSpace(groupId)) { }*/ var users = _userComBo.GetUserComBoSSO(deptId, groupId, userId); userIdlist = users.Select(n=>n.UserId).Distinct().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); List warnSetList = new List(); if (list.Count > 0) { warnSetList = _wxWorkaccount.GetWarnSettingByEid(list.Select(n => n.EID).ToList()); } Table table = new Table(columns, true); table.gridPager = pager; foreach (var item in list) { table.AddCol($"{item.EID}-{item.UNAME}"); table.AddCol(item.GNAME); var set = warnSetList.FirstOrDefault(n => n.Eid == item.EID); table.AddCol(set?.MaxNum); table.AddCol(set?.Name); 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.WX_AMOUNT_UNIONID.ToString()); table.AddCol($"{item.WX_RATE_UNIONID.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(""); 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 wxdisUnionid = list.Sum(m => m.WX_AMOUNT_UNIONID);// 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(wxdisUnionid); var wxdisUnionidRate = regAmount == 0 ? 0 : (wxdisUnionid / regAmount * 100); table.AddCol($"{wxdisUnionidRate.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, string 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.GetUserComBoSSO(deptId, groupId, userId); userIdlist = users.Select(m => m.UserId).ToList(); var list = _wxWorkaccount.GetUserWorkStatistics(pager, userIdlist, stime.Value, etime.Value, hideQuit ?? false); List warnSetList = new List(); if (list.Count > 0) { warnSetList = _wxWorkaccount.GetWarnSettingByEid(list.Select(n => n.EID).ToList()); } foreach (var item in list) { item.UNAME = $"{item.EID}-{item.UNAME}"; var set = warnSetList.FirstOrDefault(n => n.Eid == item.EID); item.TemplateName = set?.Name; item.MaxNum = set?.MaxNum; } 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.WX_AMOUNT_UNIONID = list.Sum(m => m.WX_AMOUNT_UNIONID); //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 wxdisrateunionid = regAmount == 0 ? 0 : (sum.WX_AMOUNT_UNIONID / 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.WX_RATE_UNIONID = wxdisrateunionid; //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")); } [HttpGet] [AuthorizeToolBar(InitRights.CONST_员工日常工作报表, InitToolBar.CONST_Other2)] public ActionResult TemplateList() { return View(); } [HttpGet] [AuthorizeToolBar(InitRights.CONST_员工日常工作报表, InitToolBar.CONST_Other1)] public ActionResult EditWarnSetting() { ViewBag.eid = Eid; var line = _bussinessLies.GetBusinessLineByRoot(UserId); var dto = new GetWarnningTemplateDto(); if (line.Count > 0) { dto.DeptId = string.Join(",", line.Select(n => n.BUSINESSID)); } List deptList = new List(); foreach (var item in line) { deptList.Add(new SelectListItem { Text = item.BUSINESSNAME, Value = item.BUSINESSID.ToString() }); } ViewBag.deptList = deptList; ViewBag.deptid = deptList.FirstOrDefault()?.Value; var url = cacheQ.GetValue_Parameter("Core_ZxdService_WebApi"); ViewBag.webapi = url; var layUidata = new LayuiData(); if (line.Count >= 0) { dto.DeptId = string.Join(",", line.Select(n => n.BUSINESSID)); } return View(); } [HttpPost] [AuthorizeToolBar(InitRights.CONST_员工日常工作报表, InitToolBar.CONST_Other1)] public JsonResult EditWarnSetting(CreateOrEditSettingDto model) { bool result = false; retMsg ret = new retMsg() { result = result, retcode = 200 }; try { if(model.MaxNum.HasValue && model.MaxNum <= 0) { ret.retmsg = "最大资源量必须大于0"; return Json(ret); } /*if (!model.templateId.HasValue) { ret.retmsg = "模板不能为空"; return Json(ret); }*/ if (string.IsNullOrWhiteSpace(model.Participant)) { ret.retmsg = "人员不能为空"; return Json(ret); } model.Eid = Eid.ToString(); var eidFilter = model.Participant.Split(',').Select(n => Convert.ToDecimal(n)).ToList(); var userList = cacheQ.GetUserList().Where(n => eidFilter.Contains(n.EID)); List warnUserInfoList = new List(); foreach (var user in userList) { WarnUserInfo warnUser = new WarnUserInfo { Eid = user.EID, Name = user.UNAME }; warnUserInfoList.Add(warnUser); } model.WarnUserInfo = warnUserInfoList; ret.result = _wxWorkaccount.AddWarnSetting(model); } catch(Exception ex) { ret.retmsg = ex.Message; } return Json(ret); } [HttpGet] [AuthorizeToolBar(InitRights.CONST_员工日常工作报表, InitToolBar.CONST_Other2)] public ActionResult AddTemplate() { var line = _bussinessLies.GetBusinessLineByRoot(UserId); List deptList = new List(); foreach (var item in line) { deptList.Add(new SelectListItem { Text = item.BUSINESSNAME, Value = item.BUSINESSID.ToString() }); } ViewBag.deptList = deptList; TemplateListModel temp = _wxWorkaccount.GetNewTemplateListModel(deptList.Select(x => x.Value).FirstOrDefault()); if (temp == null) temp = new TemplateListModel(); if (temp.PeriodFrom.HasValue) { temp.PeriodFromShow = temp.PeriodFrom.Value.ToString("yyyy-MM-dd"); } if (temp.PeriodTo.HasValue) { temp.PeriodToShow = temp.PeriodTo.Value.ToString("yyyy-MM-dd"); } return View(temp); } [HttpPost] [AuthorizeToolBar(InitRights.CONST_员工日常工作报表, InitToolBar.CONST_Other2)] public JsonResult AddTemplate(TemplateListModel model) { retMsg ret = new retMsg(); ValidationErrors errors = new ValidationErrors(); if (model.TemplateName.Length > 20) { ret = new retMsg() { result = false, retcode = 200, retmsg = "模板名称不能超过20个字符!" }; return Json(ret); } if(model.PeriodFrom.HasValue && model.PeriodTo.HasValue && DateTime.Compare(model.PeriodFrom.Value, model.PeriodTo.Value) >0) { ret = new retMsg() { result = false, retcode = 200, retmsg = "接粉周期开始时间不能小于结束时间!" }; return Json(ret); } bool result = _wxWorkaccount.AddTemplate(model); ret = new retMsg() { result = result, retcode = 200, retmsg = "设置成功!" }; return Json(ret); } [HttpGet] [AuthorizeToolBar(InitRights.CONST_员工日常工作报表, InitToolBar.CONST_Other2)] public ActionResult EditTemplate(int Id) { var temp = GetTemplate(Id); if (temp.PeriodFrom.HasValue) { temp.PeriodFromShow = temp.PeriodFrom.Value.ToString("yyyy-MM-dd"); } if (temp.PeriodTo.HasValue) { temp.PeriodToShow = temp.PeriodTo.Value.ToString("yyyy-MM-dd"); } temp.TemplateSettingDetail = JsonConvert.DeserializeObject>(temp.PrewarningValue); var line = _bussinessLies.GetBusinessLineByRoot(UserId); List deptList = new List(); foreach (var item in line) { if(temp.DeptId == item.BUSINESSID) { deptList.Add(new SelectListItem { Text = item.BUSINESSNAME, Value = item.BUSINESSID.ToString(), Selected=true }); } else { deptList.Add(new SelectListItem { Text = item.BUSINESSNAME, Value = item.BUSINESSID.ToString() }); } } ViewBag.deptList = deptList; return View(temp); } private TemplateListModel GetTemplate(int Id) { return _wxWorkaccount.GetTemplate(Id); } public JsonResult GetTemplateJson(int Id) { var temp = GetTemplate(Id); var ret = new retMsgNew() { result = true, data = temp, retcode = 200, retmsg = "设置成功!" }; return Json(ret, JsonRequestBehavior.AllowGet); } [HttpPost] [AuthorizeToolBar(InitRights.CONST_员工日常工作报表, InitToolBar.CONST_Other2)] public JsonResult EditTemplate(TemplateListModel model) { bool result = _wxWorkaccount.AddTemplate(model); retMsg ret = new retMsg() { result = result, retcode = 200, retmsg = "设置成功!" }; return Json(ret); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_员工日常工作报表)] public JsonResult GetWarnnTemplateHtmlListByName(Laypage pager, GetWarnningTemplateDto dto) { var layUidata = new LayuiData(); if (dto.Name != null) { dto.Name = dto.Name.Trim(); } var line = _bussinessLies.GetBusinessLineByRoot(UserId); if (line.Count >= 0) { dto.DeptId = string.Join(",", line.Select(n => n.BUSINESSID)); } try { List list = _wxWorkaccount.GetTemplateList(pager, dto); foreach(var item in list) { item.DeptName = line.FirstOrDefault(n => n.BUSINESSID == item.DeptId)?.BUSINESSNAME; } layUidata.msg = "数据加载成功"; layUidata.code = 0; layUidata.data = list; layUidata.count = pager.count; } catch (Exception ex) { LogHelper.Error(ex.ToString()); layUidata.SetFail(1, "出现错误!" + ex.Message); } return Json(layUidata); } [HttpGet] [AuthorizeToolBar(InitRights.CONST_员工日常工作报表, InitToolBar.CONST_Other1)] public ActionResult ImportEmployee() { return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_员工日常工作报表)] public JsonResult SearchEmployee(string id) { string[] _ids = id.Replace("\r\n", ",").Replace("\r", ",").Replace("\n", ",").Split(','); var userList = cacheQ.GetUserList(); var innerGroupList = cacheQ.GetGroupList(); var deptList = cacheQ.GetList_InnerUserGroup(); var saleList = cacheQ.GetList_SalesDepartMent(); var users = userList.Where(n => _ids.Contains(Convert.ToString(n.EID))).ToList(); var notInPeople = _ids.Where(n => !users.Select(s => s.EID.ToString()).Contains(n)); SearchEmployeeModel res = new SearchEmployeeModel(); res.NotInPeople = string.Join(",",notInPeople); res.Count = users.Count(); res.NotCount = notInPeople.Count(); foreach (var item in users) { EmployeeModel model = new EmployeeModel { Eid = item.EID, Pkid = item.PKID, Uname = item.UNAME }; var map = deptList.FirstOrDefault(n => n.INNERUSERID == item.PKID); if (map != null&&map.GID.HasValue) { model.DeptName = innerGroupList.FirstOrDefault(n => n.GID == map.GID)?.GNAME; }else if(map != null && map.DEPTID.HasValue) { model.DeptName = saleList.FirstOrDefault(n => n.SALEDEPTID == map.DEPTID)?.DEPTNAME; } res.EmployeeModels.Add(model); } bool result = true; retMsgNew ret = new retMsgNew() { result = result, retcode = 200, data = res }; return Json(ret); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_员工日常工作报表)] public JsonResult SearchEmployeeIndex(Laypage pager, string txtoldId) { var layUidata = new LayuiData(); if (string.IsNullOrWhiteSpace(txtoldId)) { return Json(layUidata); } try { var _ids = txtoldId.Replace("\r\n", ",").Replace("\r", ",").Replace("\n", ",").Split(',').Where(n => !string.IsNullOrWhiteSpace(n)).Select(n=>n.Trim()).ToList(); var userList = cacheQ.GetUserList(); var innerGroupList = cacheQ.GetGroupList(); var deptList = cacheQ.GetList_InnerUserGroup(); var saleList = cacheQ.GetList_SalesDepartMent(); var users = userList.Where(n => _ids.Contains(Convert.ToString(n.EID))).ToList(); pager.count = users.Count(); var notInPeople = _ids.Where(n => !users.Select(s => s.EID.ToString()).Contains(n)); /* var data = users.Skip((pager.page - 1) * pager.limit).Take(pager.limit).ToList();//重新分页 */ List list = new List(); foreach (var item in users) { EmployeeModel model = new EmployeeModel { Eid = item.EID, Pkid = item.PKID, Uname = item.UNAME }; var map = deptList.FirstOrDefault(n => n.INNERUSERID == item.PKID); if (map != null && map.GID.HasValue) { model.DeptName = innerGroupList.FirstOrDefault(n => n.GID == map.GID)?.GNAME; } else if (map != null && map.DEPTID.HasValue) { model.DeptName = saleList.FirstOrDefault(n => n.SALEDEPTID == map.DEPTID)?.DEPTNAME; } list.Add(model); } layUidata.msg = $"共查询出{users.Count()}条数据,有{notInPeople.Count()}条未查询出"; if (notInPeople.Count()>0) { layUidata.msg += $"({string.Join(",", notInPeople)})"; } layUidata.code = 0; layUidata.data = list; layUidata.count = pager.count; } catch (Exception ex) { LogHelper.Error(ex.ToString()); layUidata.SetFail(1, "出现错误!" + ex.Message); } return Json(layUidata); } [HttpGet] [AuthorizeToolBar(InitRights.CONST_员工日常工作报表, InitToolBar.CONST_Other3)] public ActionResult WarnUserList() { return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_员工日常工作报表)] public JsonResult GetWarnUserList(Laypage pager, GetWarnningUserDto dto) { var layUidata = new LayuiData(); var line = _bussinessLies.GetBusinessLineByRoot(UserId); if (line.Count >= 0) { dto.DeptId = string.Join(",", line.Select(n => n.BUSINESSID)); } try { var list = _wxWorkaccount.GetWarnUser(pager, dto); var users = cacheQ.GetUserList(); users = users.Where(x => x.ISDISMISS != 1).ToList(); var groups = cacheQ.GetGroupList(); groups.Where(x => x.IS_DELETED != 1).ToList(); var userGroups = cacheQ.GetList_InnerUserGroup(); foreach (var item in list) { var groupNames = new List(); item.DeptName = line.FirstOrDefault(n => n.BUSINESSID == item.DeptId)?.BUSINESSNAME; foreach(var group in groups) { var userGroupList = userGroups.Where(x => x.GID == group.GID).ToList(); var userList = users.Where(x => userGroupList.Select(y => y.INNERUSERID).Contains(x.PKID)).ToList(); var eids = userList.Select(x => x.EID).ToList(); if (eids.Any() && eids.All(t => item.ParticipantIds.Distinct().Any(b => b == t))) { groupNames.Add(group.GNAME); item.ParticipantIds.RemoveAll(x => eids.Contains(x)); } } if (item.ParticipantIds.Any()) { var userNames = users.Where(x => item.ParticipantIds.Contains(x.EID)).Select(x => x.UNAME).ToList(); groupNames.AddRange(userNames); } item.Participant = string.Join(",", groupNames); } layUidata.msg = "数据加载成功"; layUidata.code = 0; layUidata.data = list; layUidata.count = pager.count; } catch (Exception ex) { LogHelper.Error(ex.ToString()); layUidata.SetFail(1, "出现错误!" + ex.Message); } return Json(layUidata); } [HttpGet] [AuthorizeToolBar(InitRights.CONST_员工日常工作报表, InitToolBar.CONST_Other2)] public ActionResult EditWarnUser(string code) { var line = _bussinessLies.GetBusinessLineByRoot(UserId); var model = _wxWorkaccount.GetWarnUserModel(code); var url = cacheQ.GetValue_Parameter("Core_ZxdService_WebApi"); ViewBag.webapi = url; ViewBag.Eid = Eid; List deptList = new List(); foreach (var item in line) { if (model.Deptid == item.BUSINESSID) { deptList.Add(new SelectListItem { Text = item.BUSINESSNAME, Value = item.BUSINESSID.ToString(), Selected = true }); } /* else { deptList.Add(new SelectListItem { Text = item.BUSINESSNAME, Value = item.BUSINESSID.ToString() }); }*/ } ViewBag.deptList = deptList; var setting = cacheQ.GetValue_Parameter("EarlyWarningSetting"); var setObject = new EarlyWarningSetting(); if (!string.IsNullOrWhiteSpace(setting)) { setObject = JsonConvert.DeserializeObject(setting); } EarlyWarningUser temp = new EarlyWarningUser() { AppId = setObject.AppId, CropId = setObject.Cropid, CropName = setObject?.CropName }; model.AppId = setObject.AppId; model.CropId = setObject.Cropid; model.CropName = setObject?.CropName; return View(model); } [HttpGet] public JsonResult DeleteWarnUser(string code) { _wxWorkaccount.DeleteWarnUser(code); return Json(new { result = true, message = "删除成功!" }, JsonRequestBehavior.AllowGet); } [HttpGet] [AuthorizeToolBar(InitRights.CONST_员工日常工作报表, InitToolBar.CONST_Other3)] public ActionResult AddWarnUser() { var url = cacheQ.GetValue_Parameter("Core_ZxdService_WebApi"); ViewBag.webapi = url; ViewBag.Eid = Eid; var line = _bussinessLies.GetBusinessLineByRoot(UserId); List deptList = new List(); foreach (var item in line) { deptList.Add(new SelectListItem { Text = item.BUSINESSNAME, Value = item.BUSINESSID.ToString() }); } ViewBag.deptList = deptList; var setting = cacheQ.GetValue_Parameter("EarlyWarningSetting"); var setObject = new EarlyWarningSetting(); if (!string.IsNullOrWhiteSpace(setting)) { setObject = JsonConvert.DeserializeObject(setting); } EarlyWarningUser temp = new EarlyWarningUser() { AppId = setObject.AppId, CropId = setObject.Cropid, CropName = setObject?.CropName }; return View(temp); } #endregion #region 员工日常工作报表(新媒体3) [HttpGet] [AuthorizeRedirect(Roles = InitRights.CONST_员工日常工作报表)] public ActionResult UserWorkReport3() { string tableId = "tablist"; Table tab = new Table(tableId); tab.isFloatHead = true; Pager pager = new Pager() { page = 1, rows = 1000 }; tab.AddHeadCol("uname", "", "客服"); tab.AddHeadCol("gname", "", "组别"); int x = 8; tab.AddHeadCol("wx_total", "", "加微数", true); x++; tab.AddHeadCol("wx_total_re_dep", "", "加微去重(部门去重)", 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("reg_total_pc", "", "PC注册人数", true); x++; tab.AddHeadCol("reg_rate_pc", "", "PC注册率", true); x++; tab.AddHeadCol("reg_total_app", "", "APP注册人数", true); x++; tab.AddHeadCol("reg_rate_app", "", "APP注册率", true); x++; tab.AddHeadCol("deal_total", "", "成交人数", true); x++; tab.AddHeadCol("deal_rate", "", "成交率", true); x++; tab.AddHeadCol("deal_total_m0", "", "当月成交人数", 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, string 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.GetUserComBoSSO(deptId, groupId, userId); userIdlist = users.Select(m => m.UserId).ToList(); if (string.IsNullOrEmpty(pager.order)) { pager.order = "desc"; pager.sort = "wx_amount"; } //获取当前登录用户的渠道段 string deptid = "";//cms 部门id BAS_PARAMETER_BL paramter_bl = new BAS_PARAMETER_BL(); var settingStr = paramter_bl.GetModel_Patameter("SalesLeadsDeptSetting"); List deptInfos = JsonHelper.JsonDivertToObj>(settingStr.PARAVALUE); var deptIds = users.GroupBy(m => m.DeptId) .Where(m=>m.Key!=null) .Select(m => Convert.ToDecimal(m.Key)).ToList(); var line = _bussinessLies.GetBusinessLineByAnyUser(deptIds); var deptidList = deptInfos.Where(n => line.Select(m=>m.COMPANYCODE).Contains(n.DeptCode)); if (deptidList.Any()) { deptid = string.Join(",", deptidList.Select(m=>m.DeptId)); } else { deptid = 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); table.AddCol(item.WX_TOTAL_RE_DEP); 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.REG_TOTAL_PC); table.AddCol($"{item.REG_RATE_PC.ToString("f2")}%"); table.AddCol(item.REG_TOTAL_APP); table.AddCol($"{item.REG_RATE_APP.ToString("f2")}%"); table.AddCol(item.DEAL_TOTAL); table.AddCol($"{item.DEAL_RATE.ToString("f2")}%"); table.AddCol(item.DEAL_TOTAL_M0); 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, string 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.GetUserComBoSSO(deptId, groupId, userId); userIdlist = users.Select(m => m.UserId).ToList(); if (string.IsNullOrEmpty(pager.order)) { pager.order = "desc"; pager.sort = "wx_amount"; } //获取当前登录用户的渠道段 string deptid = "";//cms 部门id BAS_PARAMETER_BL paramter_bl = new BAS_PARAMETER_BL(); var settingStr = paramter_bl.GetModel_Patameter("SalesLeadsDeptSetting"); List deptInfos = JsonHelper.JsonDivertToObj>(settingStr.PARAVALUE); var deptIds = users.GroupBy(m => m.DeptId) .Where(m => m.Key != null) .Select(m => Convert.ToDecimal(m.Key)).ToList(); var line = _bussinessLies.GetBusinessLineByAnyUser(deptIds); var deptidList = deptInfos.Where(n => line.Select(m => m.COMPANYCODE).Contains(n.DeptCode)); if (deptidList.Any()) { deptid = string.Join(",", deptidList.Select(m => m.DeptId)); } else { deptid = 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; } } public class SearchEmployeeModel { public int Count { get; set; } public int NotCount { get; set; } public string NotInPeople { get; set; } public List EmployeeModels { get; set; } = new List(); } public class EmployeeModel { public decimal Eid { get; set; } public decimal Pkid { get; set; } public string Uname { get; set; } public string DeptName { get; set; } } }