541 lines
22 KiB
C#
541 lines
22 KiB
C#
using Ninject;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Web.Mvc;
|
|
using WX.CRM.BLL.Util;
|
|
using WX.CRM.Common;
|
|
using WX.CRM.IBLL.Wx;
|
|
using WX.CRM.Model.Entity;
|
|
using WX.CRM.Model.MAP;
|
|
using WX.CRM.WebHelper;
|
|
|
|
namespace WX.CRM.WEB.Controllers.WeiXin
|
|
{
|
|
public class CommissionUserController : BaseController
|
|
{
|
|
[Inject]
|
|
public CACHE_BL cache_BL { get; set; }
|
|
private readonly IWX_COMMISSION _wxCommission;
|
|
private readonly IWX_SZZYSUBPRODUCT wx_SzzySubProduct_BL;
|
|
private readonly IWX_SZZYORDER _wx_SzzyOrder_BL;
|
|
//[Inject]
|
|
//public IWX_MyIllegalRecord wx_IWX_MyIllegalRecord_BL { get; set; }
|
|
|
|
public CommissionUserController(IWX_COMMISSION wxCommission, IWX_SZZYSUBPRODUCT wx_SzzySubProduct_BL, IWX_SZZYORDER wx_SzzyOrder_BL)
|
|
{
|
|
_wxCommission = wxCommission;
|
|
this.wx_SzzySubProduct_BL = wx_SzzySubProduct_BL;
|
|
this._wx_SzzyOrder_BL = wx_SzzyOrder_BL;
|
|
}
|
|
|
|
[HttpGet]
|
|
public ActionResult Index()
|
|
{
|
|
ViewBag.inneruserid = UserId;
|
|
ViewBag.userGroupId = userGroupId;
|
|
ViewBag.saleDeptId = saleDeptId;
|
|
ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId);
|
|
|
|
return View();
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
//[AuthorizeToolBar(InitRights.CONST_订单分成, InitToolBar.CONST_Add)]
|
|
public JsonResult SaleUserReportHtml(DateTime? sTime, DateTime? eTime, QueryUserComboDto usercomboDto, decimal? saleDeptId, string groupId, decimal? userId)
|
|
{
|
|
try
|
|
{
|
|
if (eTime.HasValue)
|
|
{
|
|
eTime = eTime.Value.AddDays(1);
|
|
}
|
|
var data = _wxCommission.GetSaleUserReport(sTime, eTime, usercomboDto);
|
|
|
|
var users = cache_BL.GetUserList();
|
|
|
|
Table tab = new Table("tablist");
|
|
tab.AddHeadCol("Eid", "", "工号");
|
|
tab.AddHeadCol("UName", "", "姓名");
|
|
tab.AddHeadCol("IsDismiss", "", "【在/离】职");
|
|
tab.AddHeadCol("GName", "", "组别");
|
|
|
|
var i = 0;
|
|
//首华不要分类统计
|
|
if (companyCode != "SHZZ")
|
|
{
|
|
if (data.Any())
|
|
{
|
|
var orderProduct = data.FirstOrDefault().OrderProductList;
|
|
foreach (var item in orderProduct)
|
|
{
|
|
tab.AddHeadCol("Product" + i, "", item.Key);
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
|
|
var x = 5 + i;
|
|
tab.AddHeadCol("NewOrderCount", "", "新单数量");
|
|
tab.AddHeadCol("NewOrderPay", "", "新单金额");
|
|
tab.AddHeadCol("RenewOrderCount", "", "续费单数量");
|
|
tab.AddHeadCol("RenewOrderPay", "", "续费单金额");
|
|
tab.AddHeadCol("UpOrderCount", "", "升级单数量");
|
|
tab.AddHeadCol("UpOrderPay", "", "升级单金额");
|
|
tab.AddHeadCol("AllOrderCount", "", "总数量");
|
|
tab.AddHeadCol("AllOrderPay", "", "总金额");
|
|
tab.AddHeadCol("RefundOrderCount", "", "当月退款数量");
|
|
tab.AddHeadCol("RefundPrice", "", "当月退款金额");
|
|
tab.AddHeadCol("JsOrderCount", "", "业绩数量");
|
|
tab.AddHeadCol("JsPrice", "", "业绩金额");
|
|
tab.AddHeadRow();
|
|
|
|
foreach (var item in data)
|
|
{
|
|
tab.AddCol(item.Eid);
|
|
tab.AddCol(item.UName);
|
|
if (item.IsDismiss == "离职")
|
|
{
|
|
tab.AddCol(item.IsDismiss);
|
|
}
|
|
else
|
|
{
|
|
var entrydate = users.Find(p => p.EID == item.Eid).ENTRYDATE;
|
|
tab.AddCol(string.Format("在职{0}月{1}", (DateTime.Now.Year - entrydate.Value.Year) * 12 + (DateTime.Now.Month + 1) - entrydate.Value.Month, entrydate.ToUnityString(1)));
|
|
}
|
|
tab.AddCol(item.GName);
|
|
|
|
if (companyCode != "SHZZ")
|
|
{
|
|
foreach (var subItem in item.OrderProductList)
|
|
{
|
|
tab.AddCol(subItem.Value);
|
|
}
|
|
}
|
|
|
|
tab.AddCol(item.NewOrderCount);
|
|
tab.AddCol(item.NewOrderPay);
|
|
tab.AddCol(item.RenewOrderCount);
|
|
tab.AddCol(item.RenewOrderPay);
|
|
tab.AddCol(item.UpOrderCount);
|
|
tab.AddCol(item.UpOrderPay);
|
|
tab.AddCol(item.AllOrderCount);
|
|
tab.AddCol(item.AllOrderPay);
|
|
tab.AddCol(item.RefundOrderCount);
|
|
tab.AddCol(item.RefundPrice);
|
|
tab.AddCol(item.JsOrderCount);
|
|
tab.AddCol(item.JsPrice);
|
|
|
|
tab.AddRow();
|
|
}
|
|
|
|
if (data.Any())
|
|
{
|
|
tab.AddCol("合计");
|
|
tab.AddCol(string.Empty);
|
|
tab.AddCol(string.Empty);
|
|
tab.AddCol(string.Empty);
|
|
|
|
if (companyCode != "SHZZ")
|
|
{
|
|
var orderProduct = data.FirstOrDefault().OrderProductList;
|
|
foreach (var item in orderProduct)
|
|
{
|
|
tab.AddCol(string.Empty);
|
|
}
|
|
}
|
|
|
|
tab.AddCol(data.Sum(p => p.NewOrderCount));
|
|
tab.AddCol(data.Sum(p => p.NewOrderPay));
|
|
tab.AddCol(data.Sum(p => p.RenewOrderCount));
|
|
tab.AddCol(data.Sum(p => p.RenewOrderPay));
|
|
tab.AddCol(data.Sum(p => p.UpOrderCount));
|
|
tab.AddCol(data.Sum(p => p.UpOrderPay));
|
|
tab.AddCol(data.Sum(p => p.AllOrderCount));
|
|
tab.AddCol(data.Sum(p => p.AllOrderPay));
|
|
tab.AddCol(data.Sum(p => p.RefundOrderCount));
|
|
tab.AddCol(data.Sum(p => p.RefundPrice));
|
|
tab.AddCol(data.Sum(p => p.JsOrderCount));
|
|
tab.AddCol(data.Sum(p => p.JsPrice));
|
|
|
|
tab.AddFootRow();
|
|
}
|
|
var json = new
|
|
{
|
|
rowsList = tab.GetRows(),
|
|
foot = tab.GetFoot()
|
|
};
|
|
return Json(json, JsonRequestBehavior.AllowGet);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Error("SaleUserReportController:" + ex.Message + ex.StackTrace);
|
|
return JsonHandler.ManageMessage(ex.Message, false);
|
|
}
|
|
}
|
|
|
|
[HttpGet]
|
|
public ActionResult Detail(decimal eid, DateTime sTime, DateTime eTime)
|
|
{
|
|
Table tab = new Table("tablist");
|
|
tab.AddHeadCol("eid", "", "工号");
|
|
tab.AddHeadCol("name", "", "姓名");
|
|
tab.AddHeadCol("szzyorderid", "", "订单号");
|
|
tab.AddHeadCol("cname", "", "客户名称");
|
|
tab.AddHeadCol("arrivalpay", "", "订单金额");
|
|
tab.AddHeadCol("commissionratio", "", "分成比例");
|
|
tab.AddHeadCol("price", "", "分成金额");
|
|
tab.AddHeadRow();
|
|
ViewBag.gridTable = tab.GetHead();
|
|
ViewBag.eid = eid;
|
|
ViewBag.sTime = sTime;
|
|
ViewBag.eTime = eTime;
|
|
return View();
|
|
}
|
|
|
|
[HttpPost]
|
|
public JsonResult Detail(string columns, decimal eid, DateTime sTime, DateTime eTime)
|
|
{
|
|
try
|
|
{
|
|
Table tb = new Table(columns, true);
|
|
var userId = InnerUserHelper.Instance.GetUserIdByEid(eid);
|
|
eTime = eTime.AddDays(1);
|
|
var ds = _wxCommission.GetUserCommissionDetail(sTime, eTime, userId);
|
|
foreach (DataRow model in ds.Tables[0].Rows)
|
|
{
|
|
tb.AddCol(InnerUserHelper.Instance.GetEid(decimal.Parse(model["saleuserid"].ToString())));
|
|
tb.AddCol(InnerUserHelper.Instance.GetUsername(decimal.Parse(model["saleuserid"].ToString())));
|
|
tb.AddCol(model["szzyorderid"]);
|
|
tb.AddCol(model["cname"]);
|
|
tb.AddCol(model["arrivalpay"]);
|
|
tb.AddCol(string.Format("{0:P}", model["commissionratio"]));
|
|
tb.AddCol(model["price"]);
|
|
tb.AddRow();
|
|
}
|
|
tb.AddCol("合计:");
|
|
tb.AddCol("");
|
|
tb.AddCol("");
|
|
tb.AddCol("");
|
|
tb.AddCol("");
|
|
tb.AddCol("");
|
|
tb.AddCol(ds.Tables[0].Compute("Sum(price)", "true"));
|
|
tb.AddFootRow();
|
|
var json = new
|
|
{
|
|
rowsList = tb.GetRows(),
|
|
foot = tb.GetFoot()
|
|
};
|
|
return Json(json, JsonRequestBehavior.AllowGet);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Error("SaleUserReportController:" + ex.Message + ex.StackTrace);
|
|
return JsonHandler.ManageMessage(ex.Message, false);
|
|
}
|
|
}
|
|
|
|
#region 导出
|
|
public FileResult Export(DateTime? sTime, DateTime? eTime, QueryUserComboDto usercomboDto, decimal? saleDeptId, string groupId, decimal? userId)
|
|
{
|
|
usercomboDto.deptId = saleDeptId == null ? null : saleDeptId.ToString();
|
|
usercomboDto.groupIds = groupId;
|
|
usercomboDto.userId = userId;
|
|
if (eTime.HasValue)
|
|
{
|
|
eTime = eTime.Value.AddDays(1);
|
|
}
|
|
var data = _wxCommission.GetSaleUserReport(sTime, eTime, usercomboDto);
|
|
|
|
var users = cache_BL.GetUserList();
|
|
|
|
var dt = new DataTable();
|
|
dt.Columns.Add(new DataColumn("工号", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("姓名"));
|
|
dt.Columns.Add(new DataColumn("【在/离】职"));
|
|
dt.Columns.Add(new DataColumn("组别"));
|
|
|
|
if (companyCode != "SHZZ")
|
|
{
|
|
if (data.Any())
|
|
{
|
|
var orderProduct = data.FirstOrDefault().OrderProductList;
|
|
foreach (var item in orderProduct)
|
|
{
|
|
dt.Columns.Add(new DataColumn(item.Key, typeof(decimal)));
|
|
}
|
|
}
|
|
}
|
|
|
|
dt.Columns.Add(new DataColumn("新单数量", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("新单金额", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("续费单数量", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("续费单金额", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("升级单数量", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("升级单金额", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("总数量", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("总金额", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("本月退款数量", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("本月退款金额", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("业绩数量", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("业绩金额", typeof(decimal)));
|
|
|
|
foreach (var item in data)
|
|
{
|
|
DataRow dr = dt.NewRow();
|
|
dr[0] = item.Eid;
|
|
dr[1] = item.UName;
|
|
if (item.IsDismiss == "离职")
|
|
{
|
|
dr[2] = item.IsDismiss;
|
|
}
|
|
else
|
|
{
|
|
var entrydate = users.Find(p => p.EID == item.Eid).ENTRYDATE;
|
|
dr[2] = string.Format("在职{0}月{1}", (DateTime.Now.Year - entrydate.Value.Year) * 12 + (DateTime.Now.Month + 1) - entrydate.Value.Month, entrydate.ToUnityString(1));
|
|
}
|
|
|
|
dr[3] = item.GName;
|
|
if (companyCode != "SHZZ")
|
|
{
|
|
var i = 4;
|
|
foreach (var item1 in item.OrderProductList)
|
|
{
|
|
dr[i] = item1.Value;
|
|
i++;
|
|
}
|
|
}
|
|
dr["新单数量"] = item.NewOrderCount;
|
|
dr["新单金额"] = item.NewOrderPay;
|
|
dr["续费单数量"] = item.RenewOrderCount;
|
|
dr["续费单金额"] = item.RenewOrderPay;
|
|
dr["升级单数量"] = item.UpOrderCount;
|
|
dr["升级单金额"] = item.UpOrderPay;
|
|
dr["总数量"] = item.AllOrderCount;
|
|
dr["总金额"] = item.AllOrderPay;
|
|
dr["本月退款数量"] = item.RefundOrderCount;
|
|
dr["本月退款金额"] = item.RefundPrice;
|
|
dr["业绩数量"] = item.JsOrderCount;
|
|
dr["业绩金额"] = item.JsPrice;
|
|
|
|
dt.Rows.Add(dr);
|
|
}
|
|
|
|
return File(ExcelHelper.ExportDataTableToExcel(dt, "个人订单分成"), "application/ms-excel", PageRequest.GetDlownLoadName("个人订单分成.xls"));
|
|
}
|
|
#endregion
|
|
|
|
|
|
[HttpGet]
|
|
public ActionResult NewsOrderReport()
|
|
{
|
|
return View();
|
|
}
|
|
|
|
[HttpPost]
|
|
public JsonResult NewsOrderReport(DateTime? sTime, DateTime? eTime, QueryUserComboDto usercomboDto, decimal? saleDeptId, string groupId, decimal? userId)
|
|
{
|
|
usercomboDto.deptId = saleDeptId == null ? null : saleDeptId.ToString();
|
|
usercomboDto.groupIds = groupId;
|
|
usercomboDto.userId = userId;
|
|
if (eTime.HasValue)
|
|
{
|
|
eTime = eTime.Value.AddDays(1);
|
|
}
|
|
var data = _wxCommission.GetUserNewsOrderReport(usercomboDto, sTime, eTime);
|
|
|
|
Table tab = new Table("tablist");
|
|
tab.AddHeadCol("Ranking", "", "排名");
|
|
tab.AddHeadCol("Eid", "", "工号");
|
|
tab.AddHeadCol("UName", "", "姓名");
|
|
tab.AddHeadCol("IsDismiss", "", "【在/离】职");
|
|
tab.AddHeadCol("GName", "", "组别");
|
|
|
|
var i = 0;
|
|
if (data.Any())
|
|
{
|
|
var newsOrderProduct = data.FirstOrDefault().OrderProductCount.FirstOrDefault().Value;
|
|
foreach (var item in newsOrderProduct)
|
|
{
|
|
tab.AddHeadCol("Product" + i, "", item.Key);
|
|
i++;
|
|
}
|
|
}
|
|
var x = 6 + i;
|
|
tab.AddHeadCol("AllOrderCount", "", "总单数", "sortTable('tablist'," + x + ",'float');", true);
|
|
x++;
|
|
tab.AddHeadCol("AllOrderCount2", "", "合计单数", "sortTable('tablist'," + x + ",'float');", true, true);
|
|
x++;
|
|
tab.AddHeadCol("AllOrderPrice", "", "总金额");
|
|
|
|
x++;
|
|
tab.AddHeadCol("RefundOrderCount", "", "退款单数", "sortTable('tablist'," + x + ",'float');", true);
|
|
x++;
|
|
tab.AddHeadCol("RefundOrderCount2", "", "退款合计单数", "sortTable('tablist'," + x + ",'float');", true);
|
|
tab.AddHeadRow();
|
|
|
|
foreach (var item in data)
|
|
{
|
|
tab.AddCol(item.Ranking);
|
|
tab.AddCol(item.Eid);
|
|
tab.AddCol(item.UName);
|
|
tab.AddCol(item.IsDismiss == 1 ? "离职" : "在职");
|
|
tab.AddCol(item.GName);
|
|
|
|
var dic1 = item.OrderProductCount.FirstOrDefault(p => p.Key == item.Eid).Value;
|
|
foreach (var item1 in dic1)
|
|
{
|
|
tab.AddCol(item1.Value);
|
|
}
|
|
|
|
tab.AddCol(item.AllOrderCount);
|
|
tab.AddCol(item.AllOrderCount2);
|
|
tab.AddCol(item.AllOrderPrice);
|
|
|
|
//var dic2 = item.RefundOrderProductCount.FirstOrDefault(p => p.Key == item.Eid).Value;
|
|
//foreach (var item2 in dic2)
|
|
//{
|
|
// tab.AddCol(item2.Value);
|
|
//}
|
|
|
|
tab.AddCol(item.RefundOrderCount);
|
|
tab.AddCol(item.RefundOrderCount2);
|
|
|
|
tab.AddRow();
|
|
}
|
|
|
|
var json = new
|
|
{
|
|
rowsList = tab.GetTable()
|
|
//foot = tb.GetFoot()
|
|
};
|
|
return Json(json, JsonRequestBehavior.AllowGet);
|
|
|
|
}
|
|
|
|
|
|
public FileResult NewsOrderReportExport(DateTime? sTime, DateTime? eTime, QueryUserComboDto usercomboDto, decimal? saleDeptId, string groupId, decimal? userId)
|
|
{
|
|
usercomboDto.deptId = saleDeptId == null ? null : saleDeptId.ToString();
|
|
usercomboDto.groupIds = groupId;
|
|
usercomboDto.userId = userId;
|
|
if (eTime.HasValue)
|
|
{
|
|
eTime = eTime.Value.AddDays(1);
|
|
}
|
|
var data = _wxCommission.GetUserNewsOrderReport(usercomboDto, sTime, eTime);
|
|
|
|
var dt = new DataTable();
|
|
dt.Columns.Add(new DataColumn("排名", typeof(int)));
|
|
dt.Columns.Add(new DataColumn("工号", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("姓名", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("【在/离】职", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("组别", typeof(string)));
|
|
if (data.Any())
|
|
{
|
|
var newsOrderProduct = data.FirstOrDefault().OrderProductCount.FirstOrDefault().Value;
|
|
foreach (var item in newsOrderProduct)
|
|
{
|
|
dt.Columns.Add(new DataColumn(item.Key, typeof(decimal)));
|
|
}
|
|
}
|
|
dt.Columns.Add(new DataColumn("总单数", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("合计单数", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("总金额", typeof(decimal)));
|
|
//foreach (var item in refundOrderProduct)
|
|
//{
|
|
// dt.Columns.Add(new DataColumn(item.Key, typeof(decimal)));
|
|
//}
|
|
dt.Columns.Add(new DataColumn("退款单数", typeof(decimal)));
|
|
dt.Columns.Add(new DataColumn("退款合计单数", typeof(decimal)));
|
|
|
|
foreach (var item in data)
|
|
{
|
|
DataRow dr = dt.NewRow();
|
|
dr[0] = item.Ranking;
|
|
dr[1] = item.Eid;
|
|
dr[2] = item.UName;
|
|
dr[3] = item.IsDismiss == 1 ? "离职" : "在职";
|
|
dr[4] = item.GName;
|
|
var i = 5;
|
|
foreach (var item1 in item.OrderProductCount.FirstOrDefault(p => p.Key == item.Eid).Value)
|
|
{
|
|
dr[i] = item1.Value;
|
|
i++;
|
|
}
|
|
dr["总单数"] = item.AllOrderCount;
|
|
dr["合计单数"] = item.AllOrderCount2;
|
|
dr["总金额"] = item.AllOrderPrice;
|
|
//foreach (var item2 in item.RefundOrderProductCount.FirstOrDefault(p => p.Key == item.Eid).Value)
|
|
//{
|
|
// dr[i + 3] = item2.Value;
|
|
// i++;
|
|
//}
|
|
dr["退款单数"] = item.RefundOrderCount;
|
|
dr["退款合计单数"] = item.RefundOrderCount2;
|
|
|
|
dt.Rows.Add(dr);
|
|
}
|
|
|
|
return File(ExcelHelper.ExportDataTableToExcel(dt, "个人新单分成"), "application/ms-excel", PageRequest.GetDlownLoadName("个人新单分成.xls"));
|
|
}
|
|
|
|
private List<WX_SZZYSUBPRODUCT> getConfigSubProductList()
|
|
{
|
|
List<WX_SZZYSUBPRODUCT> list = new List<WX_SZZYSUBPRODUCT>();
|
|
var subProductIds = cache_BL.GetValue_Parameter(WX.CRM.Model.Enum.Parameter.WeiXin_OrderCountShowColumn);
|
|
if (subProductIds != null)
|
|
{
|
|
subProductIds = subProductIds.Trim().Trim(',');
|
|
string[] idArr = subProductIds.Split(',');
|
|
decimal[] ids = idArr.Select(m => Convert.ToDecimal(m)).ToArray();
|
|
list = wx_SzzySubProduct_BL.GetList(ids);
|
|
}
|
|
return list;
|
|
}
|
|
|
|
private string DataFormart(string key, object value)
|
|
{
|
|
string formartValue;
|
|
switch (key)
|
|
{
|
|
case "LAST7COMMISSION2":
|
|
formartValue = string.Format("{0}", value);
|
|
break;
|
|
default: formartValue = string.Format("{0}", value); break;
|
|
}
|
|
return formartValue;
|
|
}
|
|
|
|
private class SubProdutCount
|
|
{
|
|
public decimal CountNum { get; set; }
|
|
public decimal TotalCommission { get; set; }
|
|
|
|
public decimal SaleUserId { get; set; }
|
|
|
|
public decimal SubProductId { get; set; }
|
|
|
|
public string SubProductName { get; set; }
|
|
}
|
|
private class OrderTypeCount
|
|
{
|
|
public decimal OrderCount { get; set; }
|
|
public decimal TotalCommission { get; set; }
|
|
public decimal SaleUserId { get; set; }
|
|
public decimal Gid { get; set; }
|
|
}
|
|
|
|
private class IllegalRecordCount
|
|
{
|
|
public decimal Penalty { get; set; }
|
|
public decimal SaleUserId { get; set; }
|
|
public decimal Gid { get; set; }
|
|
}
|
|
|
|
|
|
}
|
|
}
|