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 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 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(); 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(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; } } /// /// 调用自动生(补充)成规则 /// /// /// /// 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 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 lis = q.Distinct().ToList(); return lis; } #region 佣金规则明细查询 public List 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(); 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(ref q, ref pager); return q.ToList(); } public List 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(); 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(ref q, ref pager); return q.ToList(); } #endregion } }