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(); 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(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 getConfigSubProductList() { List list = new List(); 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; } } } }