using System; using System.Collections.Generic; using System.Data; using System.Linq; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.IBLL.QH; using WX.CRM.Model.Entity; namespace WX.CRM.BLL.QH { public class QH_PerformanceQuery_BL : IQH_PerformanceQuery_Q { //员工业绩汇总查询(实时) public List QH_UserPerformanceQuery(ref Common.Pager pager, string p_groupId, string p_inneruserId, decimal p_saleEid, DateTime? p_sd1, DateTime? p_sd2, decimal p_isDismiss, string businessType) { var ds = new WX.CRM.DAL.QH.QH_PerformanceQuery_DAL().QH_UserPerformanceQuery( ref pager, p_groupId, p_inneruserId, p_saleEid, p_sd1, p_sd2, p_isDismiss, businessType); var list = ds.Tables[1].ToList(); var model = ds.Tables[2].ToList().FirstOrDefault(); //model.isDismiss = null; pager.totalRows = int.Parse(ds.Tables[0].Rows[0][0].ToString()); list.Add(model); return list; } //组别业绩汇总查询(实时) public List QH_GroupPerformanceQuery(ref Pager pager, string p_deptId, string p_groupId, DateTime? p_sd1, DateTime? p_sd2) { var ds = new WX.CRM.DAL.QH.QH_PerformanceQuery_DAL().QH_GroupPerformanceQuery( ref pager, p_deptId, p_groupId, p_sd1, p_sd2); var list = ds.Tables[1].ToList(); var model = ds.Tables[0].ToList().FirstOrDefault(); pager.totalRows = ds.Tables[1].Rows.Count; list.Add(model); return list; } //组别业绩汇总查询(缓存表初始化) //public void QH_GroupPerformanceInitCache(string deptid, decimal yearMonth) //{ // new WX.CRM.DAL.QH.QH_PerformanceQuery_DAL().QH_GroupPerformanceInitCache(deptid, yearMonth); //} //贵金属员工业绩汇总查询(缓存表查询) //public List QH_UserPerformanceQueryCache( // ref Pager pager, // string p_groupId, // string p_innseruserId, // decimal p_saleEid, // decimal? p_yearMont, // decimal p_isDismiss, // out DateTime initDate // ) //{ // var ds = new WX.CRM.DAL.QH.QH_PerformanceQuery_DAL().QH_UserPerformanceQueryCache( // ref pager, // p_groupId, // p_innseruserId, // p_saleEid, // p_yearMont, // p_isDismiss, // out initDate); // var list = ds.Tables[1].ToList(); // foreach (var item in list) // { // if (null != item.COMMISSIONTOTALENDAMT) // item.COMMISSIONTOTALENDAMT2 = item.COMMISSIONTOTALENDAMT.Value.ToString("p"); // } // var model = ds.Tables[2].ToList().FirstOrDefault(); // pager.totalRows = int.Parse(ds.Tables[0].Rows[0][0].ToString()); // list.Add(model); // return list; //} //员工业绩汇总查询(缓存表初始化) //public void QH_UserPerformanceInitCache(decimal yearMonth) //{ // new WX.CRM.DAL.QH.QH_PerformanceQuery_DAL().QH_UserPerformanceInitCache(yearMonth); //} //组别业绩汇总查询(缓存表查询) //public List QH_GroupPerformanceQueryCache( // ref Pager pager, // string p_deptId, // string p_groupId, // decimal? yearMont, // out DateTime initDate //) //{ // var ds = new WX.CRM.DAL.QH.QH_PerformanceQuery_DAL().QH_GroupPerformanceQueryCache( // ref pager, // p_deptId, // p_groupId, // yearMont, // out initDate); // var list = ds.Tables[1].ToList(); // foreach (var item in list) // { // if (null != item.COMMISSIONTOTALENDAMT) // item.COMMISSIONTOTALENDAMT2 = item.COMMISSIONTOTALENDAMT.Value.ToString("p"); // } // var model = ds.Tables[0].ToList().FirstOrDefault(); // pager.totalRows = ds.Tables[1].Rows.Count; // list.Add(model); // return list; //} //员工业绩汇总查询(月结) public List QH_MonthlyUserPerformanceQuery(ref Pager pager, decimal p_saleEid, decimal p_isDismiss, string groupId, decimal inneruserId, string checkResult, string month) { using (var db = new crmContext()) { var user = db.BAS_INNERUSER.Where(p => p.PKID == inneruserId).FirstOrDefault(); var data = db.QH_BALANCESALEUSER.AsQueryable(); DateTime dt2 = DateTime.Now; if (!string.IsNullOrWhiteSpace(month)) { DateTime dt = Convert.ToDateTime(month); dt2 = Convert.ToDateTime(month.Substring(0, 4) + "-" + month.Substring(4, 2) + "-01"); data = data.Where(m => m.MONTH == dt); } if (p_saleEid > 0) data = data.Where(m => m.EID == p_saleEid); if (p_isDismiss >= 0) data = data.Where(m => m.ISDISMISS == p_isDismiss); if (!string.IsNullOrWhiteSpace(checkResult)) { //data = data.Where(m => (m.OPENCOUNT + m.OUTAMT + m.OUTAMTTIMES + m.TRADENUMBER + m.TRADETIMES // + m.INAMT + m.INAMTTIMES + m.INOUTAMT + m.INTERVALTRADEUSERCOUNT + m.EXTENDELIVERYAMT // + m.CONTRACTCOUNT + m.COMMISSION + m.COMMISSIONTOTAL > 0) // && m.ISDISMISS == 1 && m.DISMISSTIME < dt); } if (inneruserId > 1 && user != null) { data = data.Where(m => m.EID == user.EID); } else if (!string.IsNullOrEmpty(groupId)) { decimal[] _groupids = OperationUtil.ConvertToDecimal(groupId.Split(',')); var userEIds = db.BAS_MON_INNERUSER.Where(d => (db.BAS_MON_INNERUSERGROUP.Where(m => _groupids.Contains(m.GID) && m.BALANCECODE == dt2).Select(m => m.INNERUSERID)).Contains(d.PKID) && d.BALANCECODE == dt2).Select(p => p.EID).ToArray(); data = data.Where(m => userEIds.Contains(m.EID)); } #region 排序 if (pager.order == "desc") { switch (pager.sort) { case "GNAME": data = data.OrderByDescending(m => m.GNAME); break; case "DIXING": data = data.OrderByDescending(m => m.DIXING); break; case "PERFORMANCEAMOUNT": data = data.OrderByDescending(m => m.PERFORMANCEAMOUNT); break; case "COMMISSIONRATIO": data = data.OrderByDescending(m => m.COMMISSIONRATIO); break; case "ORDERCOUNT": data = data.OrderByDescending(m => m.ORDERCOUNT); break; case "ORDERCOUNTRATIO": data = data.OrderByDescending(m => m.ORDERCOUNTRATIO); break; case "ALLRATIO": data = data.OrderByDescending(m => m.ALLRATIO); break; case "YULIU": data = data.OrderByDescending(m => m.YULIU); break; case "FANHUAN": data = data.OrderByDescending(m => m.FANHUAN); break; case "TUIKUAN": data = data.OrderByDescending(m => m.TUIKUAN); break; case "SHISHOU": data = data.OrderByDescending(m => m.SHISHOU); break; default: data = data.OrderByDescending(m => m.ALLPERFORMANCEAMOUNT); break; } } else { switch (pager.sort) { case "GNAME": data = data.OrderBy(m => m.GNAME); break; case "DIXING": data = data.OrderBy(m => m.DIXING); break; case "PERFORMANCEAMOUNT": data = data.OrderBy(m => m.PERFORMANCEAMOUNT); break; case "COMMISSIONRATIO": data = data.OrderBy(m => m.COMMISSIONRATIO); break; case "ORDERCOUNT": data = data.OrderBy(m => m.ORDERCOUNT); break; case "ORDERCOUNTRATIO": data = data.OrderBy(m => m.ORDERCOUNTRATIO); break; case "ALLRATIO": data = data.OrderBy(m => m.ALLRATIO); break; case "YULIU": data = data.OrderBy(m => m.YULIU); break; case "FANHUAN": data = data.OrderBy(m => m.FANHUAN); break; case "TUIKUAN": data = data.OrderBy(m => m.TUIKUAN); break; case "SHISHOU": data = data.OrderBy(m => m.SHISHOU); break; default: data = data.OrderBy(m => m.ALLPERFORMANCEAMOUNT); break; } } #endregion var model = (from a in data group a by 1 into q select new { pkid = -1, INNERUSERID = -1, EID = -1, UNAME = "", GID = -1, GNAME = "合计", DIXING = q.Sum(m => m.DIXING), PERFORMANCEAMOUNT = q.Sum(m => m.PERFORMANCEAMOUNT), COMMISSIONRATIO = q.Sum(m => m.COMMISSIONRATIO), ORDERCOUNT = q.Sum(m => m.ORDERCOUNT), ORDERCOUNTRATIO = q.Sum(m => m.ORDERCOUNTRATIO), ALLRATIO = q.Sum(m => m.ALLRATIO), YINGSHOU = q.Sum(m => m.YINGSHOU), YULIU = q.Sum(m => m.YULIU), FANHUAN = q.Sum(m => m.FANHUAN), TUIKUAN = q.Sum(m => m.TUIKUAN), SHISHOU = q.Sum(m => m.SHISHOU), // CTIME = q.Select(m => m.CTIME), // MONTH = q.Select(m => m.MONTH), TOUSU = q.Sum(m => m.TOUSU), CHUFA = q.Sum(m => m.CHUFA), CHUQIN = q.Sum(m => m.CHUQIN), ALLPERFORMANCEAMOUNT = q.Sum(m => m.ALLPERFORMANCEAMOUNT), WORKDAY = q.Sum(m => m.WORKDAY), DEDUCTIONS = q.Sum(m => m.DEDUCTIONS), REWARD = q.Sum(m => m.REWARD), isdismiss = q.Count() }).ToList().Select(m => new QH_BALANCESALEUSER() { PKID = m.pkid, INNERUSERID = m.INNERUSERID, EID = m.EID, UNAME = m.UNAME, GID = m.GID, GNAME = m.GNAME, DIXING = m.DIXING, PERFORMANCEAMOUNT = m.PERFORMANCEAMOUNT, COMMISSIONRATIO = m.COMMISSIONRATIO, ORDERCOUNT = m.ORDERCOUNT, ORDERCOUNTRATIO = m.ORDERCOUNTRATIO, ALLRATIO = m.ALLRATIO, YINGSHOU = m.YINGSHOU, YULIU = m.YULIU, FANHUAN = m.FANHUAN, TUIKUAN = m.TUIKUAN, SHISHOU = m.SHISHOU, TOUSU = m.TOUSU, CHUFA = m.CHUFA, CHUQIN = m.CHUQIN, ALLPERFORMANCEAMOUNT = m.ALLPERFORMANCEAMOUNT, WORKDAY = m.WORKDAY, DEDUCTIONS = m.DEDUCTIONS, REWARD = m.REWARD, ISDISMISS = m.isdismiss }).FirstOrDefault(); PagerUtil.SetPager(ref data, ref pager); var list = data.ToList(); if (model != null) list.Add(model); return list; } } //组别业绩汇总查询(月结) public List QH_MonthlyGroupPerformanceQuery(ref Pager pager, string groupId, DateTime month) { using (var db = new crmContext()) { var data = db.QH_BALANCESALEGROUPER.Where(m => m.MONTH == month).AsQueryable(); if (!string.IsNullOrEmpty(groupId)) { string[] _groupids = groupId.Split(','); List c = _groupids.Select(m => Convert.ToDecimal(m)).ToList(); List groupIds = new List(); c.ForEach(m => groupIds.Add(m)); //var groupNames = db.GJS_MON_INNERGROUP.Where(m => _groupids.Contains(m.GID)&&m.BALANCECODE==month).Select(m => m.GNAME).ToArray(); //data = data.Where(m => groupNames.Contains(m.GROUPNAME)); data = data.Where(m => groupIds.Contains(m.GID)); } #region 排序 if (pager.order == "desc") { switch (pager.sort) { case "GNAME": data = data.OrderByDescending(m => m.GNAME); break; case "DIXING": data = data.OrderByDescending(m => m.DIXING); break; case "PERFORMANCEAMOUNT": data = data.OrderByDescending(m => m.PERFORMANCEAMOUNT); break; case "COMMISSIONRATIO": data = data.OrderByDescending(m => m.COMMISSIONRATIO); break; case "ORDERCOUNT": data = data.OrderByDescending(m => m.ORDERCOUNT); break; case "ORDERCOUNTRATIO": data = data.OrderByDescending(m => m.ORDERCOUNTRATIO); break; case "ALLRATIO": data = data.OrderByDescending(m => m.ALLRATIO); break; case "YINGSHOU": data = data.OrderByDescending(m => m.YINGSHOU); break; case "YULIU": data = data.OrderByDescending(m => m.YULIU); break; case "FANHUAN": data = data.OrderByDescending(m => m.FANHUAN); break; case "TUIKUAN": data = data.OrderByDescending(m => m.TUIKUAN); break; case "SHISHOU": data = data.OrderByDescending(m => m.SHISHOU); break; case "ORDERRATE": data = data.OrderByDescending(m => m.ORDERRATE); break; default: data = data.OrderByDescending(m => m.ALLPERFORMANCEAMOUNT); break; } } else { switch (pager.sort) { case "GNAME": data = data.OrderBy(m => m.GNAME); break; case "DIXING": data = data.OrderBy(m => m.DIXING); break; case "PERFORMANCEAMOUNT": data = data.OrderBy(m => m.PERFORMANCEAMOUNT); break; case "COMMISSIONRATIO": data = data.OrderBy(m => m.COMMISSIONRATIO); break; case "ORDERCOUNT": data = data.OrderBy(m => m.ORDERCOUNT); break; case "ORDERCOUNTRATIO": data = data.OrderBy(m => m.ORDERCOUNTRATIO); break; case "ALLRATIO": data = data.OrderBy(m => m.ALLRATIO); break; case "YINGSHOU": data = data.OrderBy(m => m.YINGSHOU); break; case "YULIU": data = data.OrderBy(m => m.YULIU); break; case "FANHUAN": data = data.OrderBy(m => m.FANHUAN); break; case "TUIKUAN": data = data.OrderBy(m => m.TUIKUAN); break; case "SHISHOU": data = data.OrderBy(m => m.SHISHOU); break; case "ORDERRATE": data = data.OrderBy(m => m.ORDERRATE); break; default: data = data.OrderBy(m => m.ALLPERFORMANCEAMOUNT); break; } } #endregion var model = (from a in data group a by 1 into q select new { pkid = -1, GNAME = "合计", DIXING = q.Sum(m => m.DIXING), PERFORMANCEAMOUNT = q.Sum(m => m.PERFORMANCEAMOUNT), COMMISSIONRATIO = q.Sum(m => m.COMMISSIONRATIO), ORDERCOUNT = q.Sum(m => m.ORDERCOUNT), ORDERCOUNTRATIO = q.Sum(m => m.ORDERCOUNTRATIO), ALLRATIO = q.Sum(m => m.ALLRATIO), YINGSHOU = q.Sum(m => m.YINGSHOU), YULIU = q.Sum(m => m.YULIU), FANHUAN = q.Sum(m => m.FANHUAN), TUIKUAN = q.Sum(m => m.TUIKUAN), SHISHOU = q.Sum(m => m.SHISHOU) }).ToList().Select(m => new QH_BALANCESALEGROUPER() { PKID = m.pkid, GNAME = m.GNAME, DIXING = m.DIXING, PERFORMANCEAMOUNT = m.PERFORMANCEAMOUNT, COMMISSIONRATIO = m.COMMISSIONRATIO, ORDERCOUNT = m.ORDERCOUNT, ORDERCOUNTRATIO = m.ORDERCOUNTRATIO, ALLRATIO = m.ALLRATIO, YINGSHOU = m.YINGSHOU, YULIU = m.YULIU, FANHUAN = m.FANHUAN, TUIKUAN = m.TUIKUAN, SHISHOU = m.SHISHOU }).FirstOrDefault(); PagerUtil.SetPager(ref data, ref pager); var list = data.ToList(); if (model != null) list.Add(model); return list; } } //组别业绩时间段汇总查询(月结) public List QH_MonthlyGroupPerformanceCollectQuery(ref Pager pager, DateTime monthStart, DateTime month) { using (var db = new crmContext()) { var data = db.QH_BALANCESALEGROUPER.Where(m => m.MONTH >= monthStart && m.MONTH <= month).AsQueryable(); var dataGroup = (from a in data group a by a.GNAME into q select new { pkid = -1, GNAME = "合计", DIXING = q.Sum(m => m.DIXING), PERFORMANCEAMOUNT = q.Sum(m => m.PERFORMANCEAMOUNT), COMMISSIONRATIO = q.Sum(m => m.COMMISSIONRATIO), ORDERCOUNT = q.Sum(m => m.ORDERCOUNT), ORDERCOUNTRATIO = q.Sum(m => m.ORDERCOUNTRATIO), ALLRATIO = q.Sum(m => m.ALLRATIO), YINGSHOU = q.Sum(m => m.YINGSHOU), YULIU = q.Sum(m => m.YULIU), FANHUAN = q.Sum(m => m.FANHUAN), TUIKUAN = q.Sum(m => m.TUIKUAN), SHISHOU = q.Sum(m => m.SHISHOU) }).ToList().Select(m => new QH_BALANCESALEGROUPER() { PKID = m.pkid, GNAME = m.GNAME, DIXING = m.DIXING, PERFORMANCEAMOUNT = m.PERFORMANCEAMOUNT, COMMISSIONRATIO = m.COMMISSIONRATIO, ORDERCOUNT = m.ORDERCOUNT, ORDERCOUNTRATIO = m.ORDERCOUNTRATIO, ALLRATIO = m.ALLRATIO, YINGSHOU = m.YINGSHOU, YULIU = m.YULIU, FANHUAN = m.FANHUAN, TUIKUAN = m.TUIKUAN, SHISHOU = m.SHISHOU }).AsQueryable(); #region 排序 if (pager.order == "desc") { switch (pager.sort) { case "GNAME": data = data.OrderByDescending(m => m.GNAME); break; case "DIXING": data = data.OrderByDescending(m => m.DIXING); break; case "PERFORMANCEAMOUNT": data = data.OrderByDescending(m => m.PERFORMANCEAMOUNT); break; case "COMMISSIONRATIO": data = data.OrderByDescending(m => m.COMMISSIONRATIO); break; case "ORDERCOUNT": data = data.OrderByDescending(m => m.ORDERCOUNT); break; case "ORDERCOUNTRATIO": data = data.OrderByDescending(m => m.ORDERCOUNTRATIO); break; case "ALLRATIO": data = data.OrderByDescending(m => m.ALLRATIO); break; case "YINGSHOU": data = data.OrderByDescending(m => m.YINGSHOU); break; case "YULIU": data = data.OrderByDescending(m => m.YULIU); break; case "FANHUAN": data = data.OrderByDescending(m => m.FANHUAN); break; case "TUIKUAN": data = data.OrderByDescending(m => m.TUIKUAN); break; case "SHISHOU": data = data.OrderByDescending(m => m.SHISHOU); break; case "ORDERRATE": data = data.OrderByDescending(m => m.ORDERRATE); break; default: data = data.OrderByDescending(m => m.ALLPERFORMANCEAMOUNT); break; } } else { switch (pager.sort) { case "GNAME": data = data.OrderBy(m => m.GNAME); break; case "DIXING": data = data.OrderBy(m => m.DIXING); break; case "PERFORMANCEAMOUNT": data = data.OrderBy(m => m.PERFORMANCEAMOUNT); break; case "COMMISSIONRATIO": data = data.OrderBy(m => m.COMMISSIONRATIO); break; case "ORDERCOUNT": data = data.OrderBy(m => m.ORDERCOUNT); break; case "ORDERCOUNTRATIO": data = data.OrderBy(m => m.ORDERCOUNTRATIO); break; case "ALLRATIO": data = data.OrderBy(m => m.ALLRATIO); break; case "YINGSHOU": data = data.OrderBy(m => m.YINGSHOU); break; case "YULIU": data = data.OrderBy(m => m.YULIU); break; case "FANHUAN": data = data.OrderBy(m => m.FANHUAN); break; case "TUIKUAN": data = data.OrderBy(m => m.TUIKUAN); break; case "SHISHOU": data = data.OrderBy(m => m.SHISHOU); break; case "ORDERRATE": data = data.OrderBy(m => m.ORDERRATE); break; default: data = data.OrderBy(m => m.ALLPERFORMANCEAMOUNT); break; } } #endregion var model = (from a in dataGroup group a by 1 into q select new { pkid = -1, GNAME = "合计", DIXING = q.Sum(m => m.DIXING), PERFORMANCEAMOUNT = q.Sum(m => m.PERFORMANCEAMOUNT), COMMISSIONRATIO = q.Sum(m => m.COMMISSIONRATIO), ORDERCOUNT = q.Sum(m => m.ORDERCOUNT), ORDERCOUNTRATIO = q.Sum(m => m.ORDERCOUNTRATIO), ALLRATIO = q.Sum(m => m.ALLRATIO), YINGSHOU = q.Sum(m => m.YINGSHOU), YULIU = q.Sum(m => m.YULIU), FANHUAN = q.Sum(m => m.FANHUAN), TUIKUAN = q.Sum(m => m.TUIKUAN), SHISHOU = q.Sum(m => m.SHISHOU) }).ToList().Select(m => new QH_BALANCESALEGROUPER() { PKID = m.pkid, GNAME = m.GNAME, DIXING = m.DIXING, PERFORMANCEAMOUNT = m.PERFORMANCEAMOUNT, COMMISSIONRATIO = m.COMMISSIONRATIO, ORDERCOUNT = m.ORDERCOUNT, ORDERCOUNTRATIO = m.ORDERCOUNTRATIO, ALLRATIO = m.ALLRATIO, YINGSHOU = m.YINGSHOU, YULIU = m.YULIU, FANHUAN = m.FANHUAN, TUIKUAN = m.TUIKUAN, SHISHOU = m.SHISHOU }).FirstOrDefault(); PagerUtil.SetPager(ref dataGroup, ref pager); var list = dataGroup.ToList(); if (model != null) list.Add(model); return list; } } } }