ComplianceServer/oldcode/BLL/QH/QH_COMMISSIONAPPLY_BL.cs

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
}
}