TG.WXCRM.V4/WEB/Controllers/WeiXin/CommissionUserController.cs

628 lines
26 KiB
C#

using Ninject;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
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()
{
ToolBar tool = new ToolBar();
string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights., userRightId);
tool.AllowButton(toolbtn);
tool.AddOtherButton("Other2", "导出分成明细", "icon-export", "ExportAllPage_Click", true);
ViewBag.ToolBar = tool;
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, string sort, string order)
{
try
{
if (eTime.HasValue)
{
eTime = eTime.Value.AddDays(1);
}
var data = _wxCommission.GetSaleUserReport(sTime, eTime, usercomboDto, sort, order);
var users = cache_BL.GetUserList();
Table tab = new Table("tablist");
Pager pager = new Pager() { page = 1, rows = 10000 };
tab.AddFixedLeftHeadCol("Eid", "工号", 80, 50, isSort: true);
tab.AddFixedLeftHeadCol("GName", "组别", 100, 130, isSort: true);
tab.AddFixedLeftHeadCol("UName", "姓名", 80, 230);
tab.AddFixedLeftHeadCol("IsDismiss", "【在/离】职", 150, 310);
tab.AddHeadCol("NewOrderCount", "", "新单数量", isSort: true);
tab.AddHeadCol("NewOrderPay", "", "新单金额", isSort: true);
tab.AddHeadCol("RenewOrderCount", "", "续费单数量", isSort: true);
tab.AddHeadCol("RenewOrderPay", "", "续费单金额", isSort: true);
tab.AddHeadCol("UpOrderCount", "", "升级单数量", isSort: true);
tab.AddHeadCol("UpOrderPay", "", "升级单金额", isSort: true);
tab.AddHeadCol("AllOrderCount", "", "总数量", isSort: true);
tab.AddHeadCol("AllOrderPay", "", "总金额", isSort: true);
tab.AddHeadCol("RefundOrderCount", "", "当月退款数量", isSort: true);
tab.AddHeadCol("RefundOrderPay", "", "当月退款金额", isSort: true);
tab.AddHeadCol("JsOrderCount", "", "业绩数量", isSort: true);
tab.AddHeadCol("JsOrderPay", "", "业绩金额", isSort: true);
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.AddHeadRow();
foreach (var item in data)
{
try
{
tab.AddFixedLeftCol(item.Eid, 80, 50);
tab.AddFixedLeftCol(item.GName, 100, 130);
tab.AddFixedLeftCol(item.UName, 80, 230);
if (item.IsDismiss == "离职")
{
tab.AddFixedLeftCol(item.IsDismiss, 150, 310);
}
else
{
var user = users.Find(p => p.EID == item.Eid);
if (user != null && user.ENTRYDATE.HasValue)
{
var entrydate = user.ENTRYDATE;
tab.AddFixedLeftCol(string.Format("在职{0}月{1}", (DateTime.Now.Year - entrydate.Value.Year) * 12 + (DateTime.Now.Month + 1) - entrydate.Value.Month, entrydate.ToUnityString(1)), 150, 310);
}
else
{
tab.AddFixedLeftCol("", 150, 310);
}
}
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.RefundOrderPay);
tab.AddCol(item.JsOrderCount);
tab.AddCol(item.JsOrderPay);
if (companyCode != "SHZZ")
{
foreach (var subItem in item.OrderProductList)
{
tab.AddCol(subItem.Value);
}
}
tab.AddRow();
}
catch (Exception exx)
{
LogHelper.Info(item.ToJson());
LogHelper.Info(exx.ToString());
}
}
if (data.Any())
{
tab.AddFixedLeftCol("合计", 80, 50);
tab.AddFixedLeftCol(string.Empty, 100, 130);
tab.AddFixedLeftCol(string.Empty, 80, 230);
tab.AddFixedLeftCol(string.Empty, 150, 310);
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.RefundOrderPay));
tab.AddCol(data.Sum(p => p.JsOrderCount));
tab.AddCol(data.Sum(p => p.JsOrderPay));
if (companyCode != "SHZZ")
{
var orderProduct = data.FirstOrDefault().OrderProductList;
foreach (var item in orderProduct)
{
tab.AddCol(string.Empty);
}
}
tab.AddFootRow();
}
var json = new
{
rowsList = tab.GetTable(),
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("gname", "", "组别");
tab.AddHeadCol("eid", "", "工号");
tab.AddHeadCol("name", "", "姓名");
tab.AddHeadCol("isdismiss", "", "【在/离】职");
tab.AddHeadCol("entrydate", "", "入职时间");
tab.AddHeadCol("dismisstime", "", "离职时间");
tab.AddHeadCol("szzyorderid", "", "订单号");
tab.AddHeadCol("SUBPRODUCTNAME", "", "产品名称");
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 list = _wxCommission.GetUserCommissionDetail(sTime, eTime, userId);
foreach (var model in list)
{
tb.AddCol(model.gname);
tb.AddCol(model.eid);
tb.AddCol(model.uname);
tb.AddCol(model.isdismiss);
if (model.entrydate.HasValue)
{
tb.AddCol(model.entrydate.Value.ToString());
}
else
{
tb.AddCol("");
}
if (model.dismisstime.HasValue)
{
tb.AddCol(model.dismisstime.Value.ToString());
}
else
{
tb.AddCol("");
}
tb.AddCol(model.szzyorderid);
tb.AddCol(model.SUBPRODUCTNAME);
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("");
tb.AddCol("");
tb.AddCol("");
tb.AddCol("");
tb.AddCol("");
tb.AddCol(list.Sum(p => p.price));
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("【在/离】职"));
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)));
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)));
}
}
}
foreach (var item in data)
{
DataRow dr = dt.NewRow();
dr[0] = item.Eid;
dr[1] = item.GName;
dr[2] = item.UName;
if (item.IsDismiss == "离职")
{
dr[3] = item.IsDismiss;
}
else
{
var user = users.Find(p => p.EID == item.Eid);
if (user != null && user.ENTRYDATE.HasValue)
{
var entrydate = user.ENTRYDATE;
dr[3] = string.Format("在职{0}月{1}", (DateTime.Now.Year - entrydate.Value.Year) * 12 + (DateTime.Now.Month + 1) - entrydate.Value.Month, entrydate.ToUnityString(1));
}
else
{
dr[3] = string.Empty;
}
}
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.RefundOrderPay;
dr["业绩数量"] = item.JsOrderCount;
dr["业绩金额"] = item.JsOrderPay;
if (companyCode != "SHZZ")
{
var i = 16;
foreach (var item1 in item.OrderProductList)
{
dr[i] = item1.Value;
i++;
}
}
dt.Rows.Add(dr);
}
return File(ExcelHelper.ExportDataTableToExcel(dt, "个人订单分成"), "application/ms-excel", PageRequest.GetDlownLoadName("个人订单分成.xls"));
}
public FileResult ExportDetial(DateTime sTime, DateTime eTime)
{
eTime = eTime.AddDays(1);
var list = _wxCommission.GetUserCommissionDetail(sTime, eTime, null).ToList();
var data = new List<UserOrderCommissionDetialExport>();
foreach (var model in list)
{
data.Add(new UserOrderCommissionDetialExport()
{
szzyorderid = model.szzyorderid,
SUBPRODUCTNAME = model.SUBPRODUCTNAME,
cname = model.cname,
commissionratio = string.Format("{0:P}", model.commissionratio),
arrivalpay = model.arrivalpay,
price = model.price,
gname = model.gname,
eid = model.eid,
uname = model.uname,
isdismiss = model.isdismiss,
entrydate = model.entrydate,
dismisstime = model.dismisstime,
});
}
return File(ExcelHelper.ExportListModelToExcel<UserOrderCommissionDetialExport>(data, "个人订单分成明细", 1000000, null), "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; }
}
}
}