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 CommissionGroupController : BaseController { [Inject] public CACHE_BL cache_BL { get; set; } private readonly IWX_COMMISSION _wxCommission; private IWX_SZZYSUBPRODUCT wx_SzzySubProduct_BL; public CommissionGroupController(IWX_COMMISSION wxCommission, IWX_SZZYSUBPRODUCT wx_SzzySubProduct_BL) { _wxCommission = wxCommission; this.wx_SzzySubProduct_BL = wx_SzzySubProduct_BL; } [HttpGet] [AuthorizeRedirect(InitRights.CONST_销售组分成报表)] public ActionResult Index() { ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); return View(); } [HttpPost] [AuthorizeRedirect(InitRights.CONST_销售组分成报表)] public JsonResult SaleGroupReportHtml(DateTime? sTime, DateTime? eTime, QueryUserComboDto usercomboDto, decimal? saleDeptId, string groupId) { try { usercomboDto.deptId = saleDeptId == null ? null : saleDeptId.ToString(); usercomboDto.groupIds = groupId; //usercomboDto.userId = userId; if (eTime.HasValue) { eTime = eTime.Value.AddDays(1); } var data = _wxCommission.GetSaleGroupReport(usercomboDto, sTime, eTime); Table tab = new Table("tablist"); 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 = 2 + 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("UserOrderCount", "", "个人单量"); tab.AddHeadCol("UserOrderPrice", "", "个人业绩"); tab.AddHeadCol("JsOrderCount", "", "业绩数量"); tab.AddHeadCol("JsPrice", "", "业绩金额"); tab.AddHeadRow(); foreach (var item in data) { 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.UserOrderCount); tab.AddCol(item.UserOrderPrice); tab.AddCol(item.JsOrderCount); tab.AddCol(item.JsPrice); tab.AddRow(); } if (data.Any()) { tab.AddCol("合计"); 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.UserOrderCount)); tab.AddCol(data.Sum(p => p.UserOrderPrice)); 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); } } #region 导出 public FileResult Export(DateTime? sTime, DateTime? eTime, QueryUserComboDto usercomboDto, decimal? saleDeptId, string groupId) { usercomboDto.deptId = saleDeptId == null ? null : saleDeptId.ToString(); usercomboDto.groupIds = groupId; //usercomboDto.userId = userId; if (eTime.HasValue) { eTime = eTime.Value.AddDays(1); } var data = _wxCommission.GetSaleGroupReport(usercomboDto, sTime, eTime); var dt = new DataTable(); 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))); 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.GName; if (companyCode != "SHZZ") { var i = 1; 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.UserOrderCount; dr["个人业绩"] = item.UserOrderPrice; dr["业绩数量"] = item.JsOrderCount; dr["业绩金额"] = item.JsPrice; dt.Rows.Add(dr); } return File(ExcelHelper.ExportDataTableToExcel(dt, "销售组订单分成"), "application/ms-excel", PageRequest.GetDlownLoadName("销售组订单分成.xls")); } #endregion [HttpGet] //[AuthorizeRedirect(InitRights.CONST_销售组分成报表)] public ActionResult NewsOrderReport() { return View(); } [HttpPost] //[AuthorizeRedirect(InitRights.CONST_销售组分成报表)] public JsonResult NewsOrderReport(DateTime? sTime, DateTime? eTime, QueryUserComboDto usercomboDto) { if (eTime.HasValue) { eTime = eTime.Value.AddDays(1); } var data = _wxCommission.GetGroupNewsOrderReport(usercomboDto, sTime, eTime); Table tab = new Table("tablist"); 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 = 2 + i; tab.AddHeadCol("AllOrderCount", "", "总单数", "sortTable('tablist'," + x + ",'float');", true); x++; tab.AddHeadCol("AllOrderCount2", "", "合计单数", "sortTable('tablist'," + x + ",'float');", true, true); x++; tab.AddHeadCol("AllOrderPrice", "", "总金额"); //foreach (var item in refundOrderProduct) //{ // tab.AddHeadCol("Product" + i, "", item.Key); // i++; //} 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.GName); var dic1 = item.OrderProductCount.FirstOrDefault(p => p.Key == item.Gid).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.Gid).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) { if (eTime.HasValue) { eTime = eTime.Value.AddDays(1); } var data = _wxCommission.GetGroupNewsOrderReport(usercomboDto, sTime, eTime); var dt = new DataTable(); 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.GName; var i = 1; foreach (var item1 in item.OrderProductCount.FirstOrDefault(p => p.Key == item.Gid).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.Gid).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 class SubProdutCount { public decimal CountNum { get; set; } public decimal TotalCommission { get; set; } public decimal UserOrderCount { get; set; } public decimal GroupOrderCount { get; set; } public decimal? Gid { get; set; } public decimal SubProductId { get; set; } public string SubProductName { get; set; } } private string DataFormart(string key, object value) { string formartValue; switch (key) { default: formartValue = string.Format("{0}", value); break; } return formartValue; } private class OrderGroupTypeCount { public decimal Total { get; set; } public decimal TotalCommission { get; set; } public decimal Gid { get; set; } } private class OrderGroupAllCount { public decimal UserOrderCount { get; set; } public decimal UserPerformanceAmount { get; set; } public decimal GroupPerformanceAmount { get; set; } public decimal Gid { get; set; } } } }