688 lines
36 KiB
C#
688 lines
36 KiB
C#
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<WxResourceReportExport>();
|
||
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<WxResourceReportExport>(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<decimal> userIdlist = new List<decimal>();
|
||
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<decimal> userIdlist = new List<decimal>();
|
||
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<TMP_DANGSAN_DATA_REPORT>(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<decimal> userIdlist = new List<decimal>();
|
||
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<DeptInfo> deptInfos = JsonHelper.JsonDivertToObj<List<DeptInfo>>(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<decimal> userIdlist = new List<decimal>();
|
||
|
||
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<DeptInfo> deptInfos = JsonHelper.JsonDivertToObj<List<DeptInfo>>(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<UserWorkReport3View>(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; }
|
||
}
|
||
} |