430 lines
21 KiB
C#
430 lines
21 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
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_COMMISSIONAPPLY_BL : IQH_COMMISSIONAPPLY_Q, IQH_COMMISSIONAPPLY
|
|
{
|
|
crmContext db = new crmContext();
|
|
|
|
public List<QH_COMMISSIONAPPLY> GetList(
|
|
ref Pager pager,
|
|
string txtTradeCode,
|
|
int? userEid,
|
|
string userName,
|
|
int SltCheckStatus,
|
|
DateTime? sdCtime,
|
|
DateTime? edCtime,
|
|
DateTime? sdVtime,
|
|
DateTime? edVtime,
|
|
DateTime? sdAtime,
|
|
DateTime? edAtime,
|
|
DateTime? sdJtime,
|
|
DateTime? edJtime,
|
|
string[] customerCategoryTypeFrom
|
|
)
|
|
{
|
|
var arrLength = customerCategoryTypeFrom.Length;
|
|
var qe = from c in db.QH_CUSTOMER
|
|
join gc in db.QH_CUSTOMER_SALEUSER on c.USERACCOUNT equals gc.USERACCOUNT
|
|
join u in db.BAS_INNERUSER on gc.INNERUSERID equals u.PKID
|
|
join a in db.QH_COMMISSIONAPPLY on c.USERACCOUNT equals a.USERACCOUNT into aps
|
|
from ap in aps.DefaultIfEmpty()
|
|
join ck in db.BAS_INNERUSER on ap.VERIFIERUSER equals ck.PKID into cks
|
|
from v in cks.DefaultIfEmpty()
|
|
//join tp in db.QH_CUSTOMERCATEGORY on c.RESID equals tp.RESID into tps
|
|
//from typ in tps.DefaultIfEmpty()
|
|
//join tpn in db.QH_CUSTOMERCATEGORYTYPE on typ.CATEGORYID equals tpn.CATEGORYID into tpns
|
|
//from tn in tpns.DefaultIfEmpty()
|
|
where 1 == 1
|
|
&& (string.IsNullOrEmpty(txtTradeCode) || c.USERACCOUNT == txtTradeCode)
|
|
&& (userEid == null || u.EID == userEid)
|
|
&& (string.IsNullOrEmpty(userName) || u.UNAME == userName)
|
|
&& (SltCheckStatus == -1 || (SltCheckStatus >= 1 && ap.STATUS == SltCheckStatus && ap.PKID != null) || (SltCheckStatus == 0 && ap.PKID == null))
|
|
&& (sdCtime == null || ap.CTIME >= sdCtime)
|
|
&& (edCtime == null || ap.CTIME < edCtime)
|
|
&& (sdVtime == null || ap.VERIFITIME >= sdVtime)
|
|
&& (edVtime == null || ap.VERIFITIME < edVtime)
|
|
//&& (arrLength == 0 || customerCategoryTypeFrom.Contains(tn.CATEGORYNAME))
|
|
select new
|
|
{
|
|
PKID = ap.PKID == null ? 0 : ap.PKID,
|
|
USERACCOUNT = c.USERACCOUNT,
|
|
USERNAME = c.USERNAME,
|
|
STARTDATE = ap.STARTDATE == null ? DateTime.MinValue : ap.STARTDATE,
|
|
ENDDATE = ap.ENDDATE == null ? DateTime.MinValue : ap.ENDDATE,
|
|
SALESEID = u.EID,
|
|
SALESID = gc.INNERUSERID,
|
|
CREATEUSER = ap.CREATEUSER == null ? 0 : ap.CREATEUSER,
|
|
CTIME = ap.CTIME == null ? DateTime.MinValue : ap.CTIME,
|
|
COMMISSTIONXML = ap.COMMISSTIONXML,
|
|
STATUS = ap.STATUS == null ? 0 : ap.STATUS,
|
|
VERIFIERUSER = ap.VERIFIERUSER,
|
|
VERIFITIME = ap.VERIFITIME,
|
|
REMARK = ap.REMARK,
|
|
userName = u.UNAME,
|
|
userEid = u.EID,
|
|
groupName = "",
|
|
checkUserName = v.UNAME
|
|
//CategoryName=tn.CATEGORYNAME
|
|
};
|
|
//if (sdJtime.HasValue && edJtime.HasValue)
|
|
//{
|
|
// var qt = from t in db.QH_TRANSACTIONDETAIL
|
|
// where t.TRADETIME >= sdJtime.Value && t.TRADETIME < edJtime.Value
|
|
// group t by t.TRADECODE
|
|
// into g
|
|
// select g;
|
|
|
|
// qe = from qe2 in qe
|
|
// join qt2 in qt on qe2.TRADECODE equals qt2.Key
|
|
// select qe2;
|
|
//}
|
|
pager.totalRows = qe.Count();
|
|
int startIndex = 0;
|
|
if (pager.page > 1)
|
|
startIndex = (pager.page - 1) * pager.rows;
|
|
var _lis = qe.OrderByDescending(p => p.USERACCOUNT).Skip(startIndex).Take(pager.rows).ToList().Select(c => new QH_COMMISSIONAPPLY
|
|
{
|
|
PKID = c.PKID,
|
|
USERACCOUNT = c.USERACCOUNT,
|
|
USERNAME = c.USERNAME,
|
|
STARTDATE = c.STARTDATE,
|
|
ENDDATE = c.ENDDATE,
|
|
SALESEID = c.SALESEID,
|
|
SALESID = c.SALESID,
|
|
CREATEUSER = c.CREATEUSER,
|
|
CTIME = c.CTIME,
|
|
COMMISSTIONXML = c.COMMISSTIONXML,
|
|
STATUS = c.STATUS,
|
|
VERIFIERUSER = c.VERIFIERUSER,
|
|
VERIFITIME = c.VERIFITIME,
|
|
REMARK = c.REMARK,
|
|
userName = c.userName,
|
|
userEid = c.userEid,
|
|
groupName = c.groupName,
|
|
checkUserName = c.checkUserName,
|
|
applyDate = c.CTIME == DateTime.MinValue ? "" : c.CTIME.ToString("yyyy-MM-dd")
|
|
}).ToList();
|
|
|
|
foreach (var o in _lis)
|
|
{
|
|
//一个员工可能存在多个组
|
|
var gq = from g in db.BAS_INNERGROUP
|
|
join gu in db.BAS_INNERUSERGROUP on g.GID equals gu.GID
|
|
where gu.INNERUSERID == o.SALESID
|
|
select g;
|
|
o.groupName = string.Join(",", gq.ToList().Select(p => p.GNAME).ToArray());
|
|
}
|
|
return _lis;
|
|
}
|
|
public List<QH_COMMISSIONRULE_APPLY_VIEW> GetRouleList(
|
|
ref Pager pager,
|
|
string tradeCode,
|
|
decimal? eid,
|
|
decimal? assignEid,
|
|
DateTime? sd,
|
|
DateTime? ed, decimal user, string group, DateTime? aTime1, DateTime? aTime2, DateTime? sdJtime,
|
|
DateTime? edJtime
|
|
)
|
|
{
|
|
var customer_list = db.QH_CUSTOMER.AsQueryable();
|
|
if (user > 0)
|
|
{
|
|
var sales = db.QH_CUSTOMER_SALEUSER.AsQueryable().Where(m => m.INNERUSERID == user).FirstOrDefault();
|
|
var userAccount = sales != null ? sales.USERACCOUNT : "";
|
|
customer_list = customer_list.Where(m => m.USERACCOUNT == userAccount);
|
|
}
|
|
else if (!string.IsNullOrEmpty(group))
|
|
{
|
|
decimal[] _groupids = OperationUtil.ConvertToDecimal(group.Split(','));
|
|
var userIds = db.BAS_INNERUSERGROUP.Where(m => _groupids.Contains(m.GID.Value)).Select(m => m.INNERUSERID).ToArray<decimal>();
|
|
var sales = db.QH_CUSTOMER_SALEUSER.AsQueryable().Where(m => userIds.Contains(m.INNERUSERID)).Select(m => m.USERACCOUNT);
|
|
customer_list = customer_list.Where(m => sales.Contains(m.USERACCOUNT));
|
|
}
|
|
var q = from r in db.QH_COMMISSIONRULE
|
|
join u in db.BAS_INNERUSER on r.SALEUSERID equals u.PKID
|
|
join fc in customer_list on r.USERACCOUNT equals fc.USERACCOUNT
|
|
join c in db.QH_CUSTOMER_SALEUSER on r.USERACCOUNT equals c.USERACCOUNT into ces
|
|
from sc in ces.DefaultIfEmpty()
|
|
join fu in db.BAS_INNERUSER on sc.INNERUSERID equals fu.PKID
|
|
join apply in db.QH_COMMISSIONAPPLY on r.APPLYPKID equals apply.PKID into ra
|
|
from rApply in ra.DefaultIfEmpty()
|
|
//join tp in db.GJS_CUSTOMERCATEGORY on fc.RESID equals tp.RESID into tps
|
|
//from typ in tps.DefaultIfEmpty()
|
|
//join tpn in db.GJS_CUSTOMERCATEGORYTYPE on typ.CATEGORYID equals tpn.CATEGORYID into tpns
|
|
//from tn in tpns.DefaultIfEmpty()
|
|
where 1 == 1
|
|
&& (string.IsNullOrEmpty(tradeCode) || r.USERACCOUNT == tradeCode)
|
|
&& (eid == null || (u.EID == eid))
|
|
&& (assignEid == null || (fu.EID == assignEid))
|
|
&& (sd == null || r.THEDATE >= sd)
|
|
&& (ed == null || r.THEDATE <= ed)
|
|
select new QH_COMMISSIONRULE_APPLY_VIEW
|
|
{
|
|
USERACCOUNT = r.USERACCOUNT,
|
|
THEDATE = r.THEDATE,
|
|
userEid = u.EID,
|
|
COMMISSTIONRATIO = r.COMMISSIONRATIO,
|
|
CTIME = rApply.CTIME,
|
|
VERIFITIME = rApply.VERIFITIME,
|
|
STATUS = rApply.STATUS,
|
|
mainSalesEid = fu.EID
|
|
};
|
|
//if (sdJtime.HasValue && edJtime.HasValue)
|
|
//{
|
|
// var qt = from t in db.QH_TRANSACTIONDETAIL
|
|
// where t.TRADETIME >= sdJtime.Value && t.TRADETIME < edJtime.Value
|
|
// group t by t.TRADECODE
|
|
// into g
|
|
// select g;
|
|
|
|
// q = from qe2 in q
|
|
// join qt2 in qt on qe2.TRADECODE equals qt2.Key
|
|
// select qe2;
|
|
//}
|
|
q = q.OrderByDescending(p => p.USERACCOUNT).OrderBy(p => p.THEDATE);
|
|
PagerUtil.SetPager<QH_COMMISSIONRULE_APPLY_VIEW>(ref q, ref pager);
|
|
return q.ToList();
|
|
}
|
|
public QH_COMMISSIONAPPLY GetInfo(decimal id)
|
|
{
|
|
return db.QH_COMMISSIONAPPLY.FirstOrDefault(p => p.PKID == id);
|
|
}
|
|
public QH_COMMISSIONAPPLY GetInfo(string tradeCode)
|
|
{
|
|
return db.QH_COMMISSIONAPPLY.Where(p => p.USERACCOUNT == tradeCode).OrderByDescending(p => p.PKID).FirstOrDefault();
|
|
}
|
|
public void Insert(QH_COMMISSIONAPPLY model)
|
|
{
|
|
model.PKID = new BLL.Base.SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable);
|
|
var c = db.QH_CUSTOMER.FirstOrDefault(p => p.USERACCOUNT == model.USERACCOUNT);
|
|
if (c != null)
|
|
{
|
|
var saler = db.QH_CUSTOMER_SALEUSER.FirstOrDefault(m => m.USERACCOUNT == c.USERACCOUNT);
|
|
var salerid = saler != null ? saler.INNERUSERID : 0;
|
|
model.USERACCOUNT = c.USERACCOUNT;
|
|
model.SALESID = salerid;
|
|
var u = db.BAS_INNERUSER.FirstOrDefault(p => p.PKID == salerid);
|
|
if (u != null)
|
|
model.SALESEID = u.EID;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("此交易商不存在!");
|
|
}
|
|
|
|
db.QH_COMMISSIONAPPLY.Add(model);
|
|
db.SaveChanges();
|
|
}
|
|
public void Update(QH_COMMISSIONAPPLY model)
|
|
{
|
|
var up_model = db.QH_COMMISSIONAPPLY.FirstOrDefault(p => p.PKID == model.PKID);
|
|
if (up_model.STATUS == (int)WX.CRM.Model.Enum.QHCommissionAuditSta.Auduit)
|
|
throw new Exception("审核已通过,不能再修改!");
|
|
if (up_model != null)
|
|
{
|
|
var c = db.QH_CUSTOMER.FirstOrDefault(p => p.USERACCOUNT == model.USERACCOUNT);
|
|
if (c != null)
|
|
{
|
|
var saler = db.QH_CUSTOMER_SALEUSER.FirstOrDefault(m => m.USERACCOUNT == c.USERACCOUNT);
|
|
var salerid = saler != null ? saler.INNERUSERID : 0;
|
|
model.USERACCOUNT = c.USERACCOUNT;
|
|
model.SALESID = salerid;
|
|
var u = db.BAS_INNERUSER.FirstOrDefault(p => p.PKID == salerid);
|
|
if (u != null)
|
|
model.SALESEID = u.EID;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("此交易商不存在!");
|
|
}
|
|
up_model.USERACCOUNT = model.USERACCOUNT;
|
|
up_model.USERNAME = model.USERNAME;
|
|
up_model.STARTDATE = model.STARTDATE;
|
|
up_model.ENDDATE = model.ENDDATE;
|
|
up_model.SALESEID = model.SALESEID;
|
|
up_model.CREATEUSER = model.CREATEUSER;
|
|
up_model.STATUS = model.STATUS;
|
|
up_model.COMMISSTIONXML = model.COMMISSTIONXML;
|
|
up_model.REMARK = model.REMARK;
|
|
db.SaveChanges();
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("此审请记录不存在!");
|
|
}
|
|
}
|
|
public void Audit(QH_COMMISSIONAPPLY model)
|
|
{
|
|
try
|
|
{
|
|
new WX.CRM.DAL.QH.CommissionApply_DAL().CommissionApplyAudit(model);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 调用自动生(补充)成规则
|
|
/// </summary>
|
|
/// <param name="tradeCode"></param>
|
|
/// <param name="thdate"></param>
|
|
/// <param name="companyCode"></param>
|
|
public void genCommissionRoule(string tradeCode, DateTime thdate, string companyCode)
|
|
{
|
|
try
|
|
{
|
|
new WX.CRM.DAL.QH.CommissionApply_DAL().GenCommissionRoule(tradeCode, thdate, companyCode);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Error(ex);
|
|
throw ex;
|
|
}
|
|
}
|
|
public void Delete(QH_COMMISSIONAPPLY model)
|
|
{
|
|
var del_model = db.QH_COMMISSIONAPPLY.FirstOrDefault(p => p.PKID == model.PKID);
|
|
if (del_model.STATUS > (int)WX.CRM.Model.Enum.QHCommissionAuditSta.newRecord)
|
|
throw new Exception("不是未审核状态不能删除!");
|
|
if (del_model != null)
|
|
{
|
|
db.QH_COMMISSIONAPPLY.Remove(del_model);
|
|
db.SaveChanges();
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("此审请记录不存在!");
|
|
}
|
|
}
|
|
public bool isExistsRule(string tradeCode, DateTime sd, DateTime ed)
|
|
{
|
|
int c = db.QH_COMMISSIONRULE.Where(P => P.USERACCOUNT == tradeCode && P.THEDATE >= sd && P.THEDATE <= ed).Count();
|
|
return c > 0;
|
|
}
|
|
public bool isExistsApply(string tradeCode, DateTime sd, DateTime ed)
|
|
{
|
|
int c = db.QH_COMMISSIONAPPLY.Where(p => p.USERACCOUNT == tradeCode
|
|
&& p.STARTDATE >= sd
|
|
&& p.ENDDATE <= ed
|
|
&& p.STATUS == (int)WX.CRM.Model.Enum.QHCommissionAuditSta.Auduit).Count();
|
|
return c > 0;
|
|
}
|
|
public List<decimal> GetuserIDSByGrouper(decimal grouperId)
|
|
{
|
|
var q = from u in db.BAS_INNERUSERGROUP
|
|
join du in db.BAS_INNERUSER on u.INNERUSERID equals du.PKID
|
|
join g in db.BAS_GROUPLEADER on u.GID equals g.INNERGROUPID
|
|
where g.INNERUSERID == grouperId && du.ISDISMISS == 1
|
|
select u.INNERUSERID;
|
|
List<decimal> lis = q.Distinct().ToList();
|
|
return lis;
|
|
}
|
|
|
|
#region 佣金规则明细查询
|
|
public List<QH_COMMISSIONRULE_APPLY_VIEW> GetCommissionRuleList(ref Pager pager, string tradeCode, decimal? eid, decimal? assignEid, DateTime? sd, DateTime? ed, decimal user, string group)
|
|
{
|
|
var customer_list = db.QH_CUSTOMER.AsQueryable();
|
|
if (user > 0)
|
|
{
|
|
var sales = db.QH_CUSTOMER_SALEUSER.AsQueryable().Where(m => m.INNERUSERID == user).FirstOrDefault();
|
|
var userAccount = sales != null ? sales.USERACCOUNT : "";
|
|
customer_list = customer_list.Where(m => m.USERACCOUNT == userAccount);
|
|
}
|
|
else if (!string.IsNullOrEmpty(group))
|
|
{
|
|
decimal[] _groupids = OperationUtil.ConvertToDecimal(group.Split(','));
|
|
var userIds = db.BAS_INNERUSERGROUP.Where(m => _groupids.Contains(m.GID.Value)).Select(m => m.INNERUSERID).ToArray<decimal>();
|
|
var sales = db.QH_CUSTOMER_SALEUSER.AsQueryable().Where(m => userIds.Contains(m.INNERUSERID)).Select(m => m.USERACCOUNT);
|
|
customer_list = customer_list.Where(m => sales.Contains(m.USERACCOUNT));
|
|
}
|
|
var q = from r in db.QH_COMMISSIONRULE
|
|
join u in db.BAS_INNERUSER on r.SALEUSERID equals u.PKID
|
|
join fc in customer_list on r.USERACCOUNT equals fc.USERACCOUNT
|
|
join c in db.QH_CUSTOMER_SALEUSER on r.USERACCOUNT equals c.USERACCOUNT into ces
|
|
from sc in ces.DefaultIfEmpty()
|
|
join f in db.BAS_INNERUSER on sc.INNERUSERID equals f.PKID into fus
|
|
from fu in fus.DefaultIfEmpty()
|
|
where 1 == 1
|
|
&& (string.IsNullOrEmpty(tradeCode) || r.USERACCOUNT == tradeCode)
|
|
&& (eid == null || (u.EID == eid))
|
|
&& (assignEid == null || (fu.EID == assignEid))
|
|
&& (sd == null || r.THEDATE >= sd)
|
|
&& (ed == null || r.THEDATE <= ed)
|
|
select new QH_COMMISSIONRULE_APPLY_VIEW
|
|
{
|
|
USERACCOUNT = r.USERACCOUNT,
|
|
THEDATE = r.THEDATE,
|
|
userEid = u.EID,
|
|
COMMISSTIONRATIO = r.COMMISSIONRATIO,
|
|
CTIME = DateTime.Now,
|
|
VERIFITIME = DateTime.Now,
|
|
STATUS = 2,
|
|
mainSalesEid = fu.EID,
|
|
};
|
|
q = q.OrderByDescending(p => p.USERACCOUNT).OrderByDescending(p => p.THEDATE);
|
|
PagerUtil.SetPager<QH_COMMISSIONRULE_APPLY_VIEW>(ref q, ref pager);
|
|
return q.ToList();
|
|
}
|
|
public List<QH_COMMISSIONRULE_APPLY_VIEW> GetCommissionRuleHisList(ref Pager pager, string tradeCode, decimal? eid, decimal? assignEid, DateTime? sd, DateTime? ed, decimal user, string group)
|
|
{
|
|
var customer_list = db.QH_CUSTOMER.AsQueryable();
|
|
if (user > 0)
|
|
{
|
|
var sales = db.QH_CUSTOMER_SALEUSER.AsQueryable().Where(m => m.INNERUSERID == user).FirstOrDefault();
|
|
var userAccount = sales != null ? sales.USERACCOUNT : "";
|
|
customer_list = customer_list.Where(m => m.USERACCOUNT == userAccount);
|
|
}
|
|
else if (!string.IsNullOrEmpty(group))
|
|
{
|
|
decimal[] _groupids = OperationUtil.ConvertToDecimal(group.Split(','));
|
|
var userIds = db.BAS_INNERUSERGROUP.Where(m => _groupids.Contains(m.GID.Value)).Select(m => m.INNERUSERID).ToArray<decimal>();
|
|
var sales = db.QH_CUSTOMER_SALEUSER.AsQueryable().Where(m => userIds.Contains(m.INNERUSERID)).Select(m => m.USERACCOUNT);
|
|
customer_list = customer_list.Where(m => sales.Contains(m.USERACCOUNT));
|
|
}
|
|
var q = from r in db.QH_COMMISSIONRULEHIS
|
|
join u in db.BAS_INNERUSER on r.SALESUSERID equals u.PKID
|
|
join fc in customer_list on r.USERACCOUNT equals fc.USERACCOUNT
|
|
join c in db.QH_CUSTOMER_SALEUSER on r.USERACCOUNT equals c.USERACCOUNT into ces
|
|
from sc in ces.DefaultIfEmpty()
|
|
join f in db.BAS_INNERUSER on sc.INNERUSERID equals f.PKID into fus
|
|
from fu in fus.DefaultIfEmpty()
|
|
where 1 == 1
|
|
&& (string.IsNullOrEmpty(tradeCode) || r.USERACCOUNT == tradeCode)
|
|
&& (eid == null || (u.EID == eid))
|
|
&& (assignEid == null || (fu.EID == assignEid))
|
|
&& (sd == null || r.THEDATE >= sd)
|
|
&& (ed == null || r.THEDATE <= ed)
|
|
select new QH_COMMISSIONRULE_APPLY_VIEW
|
|
{
|
|
USERACCOUNT = r.USERACCOUNT,
|
|
THEDATE = r.THEDATE,
|
|
userEid = u.EID,
|
|
COMMISSTIONRATIO = r.COMMISSTIONRATIO,
|
|
CTIME = DateTime.Now,
|
|
VERIFITIME = DateTime.Now,
|
|
STATUS = 2,
|
|
mainSalesEid = fu.EID,
|
|
};
|
|
//select new GJS_COMMISSIONRULE_EXTEND()
|
|
//{
|
|
// gjs_CommissionRule = new GJS_COMMISSIONRULE() {PKID=r.PKID,TRADECODE=r.TRADECODE,SALESUSERID=r.SALESUSERID,THEDATE=r.THEDATE,COMMISSTIONRATIO=r.COMMISSTIONRATIO,APPLYPKID=r.APPLYPKID,ISLOCKED=0 },
|
|
// userEid = fu.EID,
|
|
// customerRate = sc.COMMISSIONRATE,
|
|
//};
|
|
q = q.OrderByDescending(p => p.USERACCOUNT).OrderByDescending(p => p.THEDATE);
|
|
PagerUtil.SetPager<QH_COMMISSIONRULE_APPLY_VIEW>(ref q, ref pager);
|
|
return q.ToList();
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|