TG.WXCRM.V4/BLL/QH/QH_PerformanceQuery_BL.cs

656 lines
31 KiB
C#

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<Model.QueryMap.QH_UserPerformanceQuery> 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<Model.QueryMap.QH_UserPerformanceQuery>();
var model = ds.Tables[2].ToList<Model.QueryMap.QH_UserPerformanceQuery>().FirstOrDefault();
//model.isDismiss = null;
pager.totalRows = int.Parse(ds.Tables[0].Rows[0][0].ToString());
list.Add(model);
return list;
}
//组别业绩汇总查询(实时)
public List<Model.QueryMap.QH_GroupPerformanceQuery> 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<Model.QueryMap.QH_GroupPerformanceQuery>();
var model = ds.Tables[0].ToList<Model.QueryMap.QH_GroupPerformanceQuery>().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<Model.QueryMap.QH_UserPerformanceQuery> 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<Model.QueryMap.QH_UserPerformanceQuery>();
// foreach (var item in list)
// {
// if (null != item.COMMISSIONTOTALENDAMT)
// item.COMMISSIONTOTALENDAMT2 = item.COMMISSIONTOTALENDAMT.Value.ToString("p");
// }
// var model = ds.Tables[2].ToList<Model.QueryMap.QH_UserPerformanceQuery>().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<Model.QueryMap.QH_GroupPerformanceQuery> 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<Model.QueryMap.QH_GroupPerformanceQuery>();
// foreach (var item in list)
// {
// if (null != item.COMMISSIONTOTALENDAMT)
// item.COMMISSIONTOTALENDAMT2 = item.COMMISSIONTOTALENDAMT.Value.ToString("p");
// }
// var model = ds.Tables[0].ToList<Model.QueryMap.QH_GroupPerformanceQuery>().FirstOrDefault();
// pager.totalRows = ds.Tables[1].Rows.Count;
// list.Add(model);
// return list;
//}
//员工业绩汇总查询(月结)
public List<QH_BALANCESALEUSER> 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<decimal>();
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<QH_BALANCESALEUSER>(ref data, ref pager);
var list = data.ToList();
if (model != null)
list.Add(model);
return list;
}
}
//组别业绩汇总查询(月结)
public List<QH_BALANCESALEGROUPER> 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<decimal> c = _groupids.Select(m => Convert.ToDecimal(m)).ToList();
List<decimal?> groupIds = new List<decimal?>();
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<string>();
//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<QH_BALANCESALEGROUPER>(ref data, ref pager);
var list = data.ToList();
if (model != null)
list.Add(model);
return list;
}
}
//组别业绩时间段汇总查询(月结)
public List<QH_BALANCESALEGROUPER> 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<QH_BALANCESALEGROUPER>(ref dataGroup, ref pager);
var list = dataGroup.ToList();
if (model != null)
list.Add(model);
return list;
}
}
}
}