1250 lines
60 KiB
C#
1250 lines
60 KiB
C#
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<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);
|
||
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<decimal> userIdlist = new List<decimal>();
|
||
/* 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<WranReportListModel> warnSetList = new List<WranReportListModel>();
|
||
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<decimal> userIdlist = new List<decimal>();
|
||
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<WranReportListModel> warnSetList = new List<WranReportListModel>();
|
||
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<TMP_DANGSAN_DATA_REPORT>(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<SelectListItem> deptList = new List<SelectListItem>();
|
||
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<TemplateListModel>();
|
||
|
||
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<WarnUserInfo> warnUserInfoList = new List<WarnUserInfo>();
|
||
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<SelectListItem> deptList = new List<SelectListItem>();
|
||
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<List<TemplateSettingDetail>>(temp.PrewarningValue);
|
||
var line = _bussinessLies.GetBusinessLineByRoot(UserId);
|
||
List<SelectListItem> deptList = new List<SelectListItem>();
|
||
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<TemplateListModel>() { 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<TemplateListModel>();
|
||
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<TemplateListModel> 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<SearchEmployeeModel> ret = new retMsgNew<SearchEmployeeModel>() { 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<EmployeeModel>();
|
||
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<EmployeeModel> list = new List<EmployeeModel>();
|
||
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<WarnUserList>();
|
||
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<string>();
|
||
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<SelectListItem> deptList = new List<SelectListItem>();
|
||
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<EarlyWarningSetting>(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<SelectListItem> deptList = new List<SelectListItem>();
|
||
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<EarlyWarningSetting>(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<decimal> userIdlist = new List<decimal>();
|
||
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<DeptInfo> deptInfos = JsonHelper.JsonDivertToObj<List<DeptInfo>>(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<decimal> userIdlist = new List<decimal>();
|
||
|
||
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<DeptInfo> deptInfos = JsonHelper.JsonDivertToObj<List<DeptInfo>>(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<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; }
|
||
}
|
||
public class SearchEmployeeModel
|
||
{
|
||
public int Count { get; set; }
|
||
public int NotCount { get; set; }
|
||
public string NotInPeople { get; set; }
|
||
public List<EmployeeModel> EmployeeModels { get; set; } = new List<EmployeeModel>();
|
||
}
|
||
public class EmployeeModel
|
||
{
|
||
public decimal Eid { get; set; }
|
||
public decimal Pkid { get; set; }
|
||
public string Uname { get; set; }
|
||
public string DeptName { get; set; }
|
||
}
|
||
} |