using System; using System.Collections.Generic; using System.Data; using System.Linq; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.DAL.Res; using WX.CRM.IBLL.Res; using WX.CRM.Model.Entity; using WX.CRM.BLL.Util; using WX.CRM.Model.MAP; using WX.CRM.BLL.Application.UserComBox; namespace WX.CRM.BLL.Res { public class RES_ALLOCATE_BL : IRES_ALLOCATE { private RES_ALLOCATE_DAL _dal = new RES_ALLOCATE_DAL(); private CACHE_BL cache_BL = new CACHE_BL(); public DataTable GetTradeCalender() { return _dal.GetTradeCalender(); } /// /// 资源分配定时分配主过程 /// public void TimingExecuteAllocateProc() { _dal.TimingExecuteAllocateProc(); } /// /// 资源分配定时回收主过程 /// public void TimingExecuteRecycleProc() { _dal.TimingExecuteRecycleProc(); } public DataTable GetAllocateLogList(DateTime time1, DateTime time2) { return _dal.GetAllocateLogList(time1, time2); } public List GetList(ref Pager pager, QueryUserComboDto usercomboDto, DateTime? sTime, DateTime? eTime, string resid, decimal? resourcetypeid, string resourcetag, string category, decimal? disEid, bool? IsFx, decimal? IsBound) { using (var db = new crmContext()) { var lableList = from c in db.RES_CUSTOMER join lable in db.RES_CUSTOMER_LABEL on c.RESID equals lable.RESID where lable.RFMTYPE == 1 select c; var residList = from c in db.RES_CUSTOMER join lable in lableList on c.CUSTOMERID equals lable.CUSTOMERID select c; var data = (from a in db.RES_MYALLOCATERES join c in db.CACHE_RES_RESOURCE_COUNT on a.RESID equals c.RESID join d in db.RES_CUSTOMERDETAIL on a.RESID equals d.RESID join u in db.BAS_INNERUSER on a.INNERUSERID equals u.PKID join r in db.RES_RESOURCETYPE on a.RESTYPEID equals r.RESTYPEID join t in db.RES_ACTIVITY on a.RESOURCETAG equals t.RESOURCETAG join rl in residList on a.RESID equals rl.RESID into arTemp from ar in arTemp.DefaultIfEmpty() select new RES_MYALLOCATERES_VIEW() { ResourceTypeId = r.RESTYPEID, ResourceTypeName = r.TYPENAME, ActivityName = t.ACTIVITYNAME, ResourceTag = t.RESOURCETAG, ResId = a.RESID, SALESID = a.INNERUSERID, LASTACTIVETIME = c.LASTACTIVETIME, CUSTOMERCATEGORY = d.CUSTOMERCATEGORY, LASTCALLTIME = c.LASTCALLTIME, PKID = a.PKID, DISTIME = a.DISTIME.Value, DISUSERID = a.DISUSERID.Value, IsFx = ar != null ? true : false, IsBound = d.ISBOUND//(d==null?"否":(d.ISBOUND == 1 ? "是" : "否")) }); if (usercomboDto.userId.HasValue) { data = data.Where(m => m.SALESID == usercomboDto.userId.Value); } else if (!string.IsNullOrEmpty(usercomboDto.groupIds)) { var _groupids = OperationUtil.ConvertToDecimal(usercomboDto.groupIds.Split(',')); data = (from a in data join b in db.BAS_INNERUSERGROUP on a.SALESID equals b.INNERUSERID where _groupids.Contains(b.GID.Value) select a); } else if (!string.IsNullOrEmpty(usercomboDto.deptId)) { var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(',')); List ALLdeptIDS = new List(); List ALLgidS = new List(); UserServices userservices = new UserServices(cache_BL); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } data = (from a in data join b in db.BAS_INNERUSERGROUP on a.SALESID equals b.INNERUSERID //join g in db.BAS_INNERGROUP on b.GID equals g.GID where ALLdeptIDS.Contains(b.DEPTID.Value) || ALLgidS.Contains(b.GID.Value) select a); } //if (innerUserId.HasValue) //{ // data = data.Where(p => p.SALESID == innerUserId.Value); //} //else //{ // if (!string.IsNullOrWhiteSpace(groupId) && (groupId.IndexOf(',') < 0 || saleDeptId <= 1)) //当单个组时走这个判断 // { // var _groupids = OperationUtil.ConvertToDecimal(groupId.ToString().Split(',')); // List groupList = new List(); // if (_groupids != null) // { // foreach (var g in _groupids) // { // groupList.Add(g); // } // } // if (groupList != null) // { // var returnData = (from a in data // join b in db.BAS_INNERUSERGROUP on a.SALESID equals b.INNERUSERID // where groupList.Contains(b.GID) // select a); // data = returnData; // } // } // else if (saleDeptId > 1) //销售部门走这个判断 // { // data = (from a in data // join b in db.BAS_INNERUSERGROUP on a.SALESID equals b.INNERUSERID // join c in db.BAS_INNERGROUP on b.GID equals c.GID // join d in db.BAS_SALESDEPARTMENT on c.SALEDEPTID equals d.SALEDEPTID // where d.SALEDEPTID == saleDeptId // select a); // } //} if (!string.IsNullOrEmpty(category)) { data = data.Where(p => p.CUSTOMERCATEGORY == category); } if (sTime.HasValue) { data = data.Where(p => p.DISTIME >= sTime); } if (eTime.HasValue) { eTime = eTime.Value.AddDays(1); data = data.Where(p => p.DISTIME < eTime); } if (!string.IsNullOrEmpty(resid)) { data = data.Where(p => p.ResId == resid); } if (resourcetypeid.HasValue) { data = data.Where(p => p.ResourceTypeId == resourcetypeid.Value); } if (!string.IsNullOrEmpty(resourcetag)) { data = data.Where(p => p.ResourceTag == resourcetag); } if (disEid.HasValue) { data = data.Where(p => p.DISUSERID == disEid.Value); } if (IsFx.HasValue) { data = data.Where(p => p.IsFx == IsFx.Value); } if (IsBound.HasValue) { //var val = (IsBound == 1 ? "是" : "否"); data = data.Where(p => p.IsBound == IsBound); } data = data.OrderByDescending(m => m.DISTIME).ThenByDescending(m => m.PKID); PagerUtil.SetPager(ref data, ref pager); return data.ToList(); } } public List GetListByHis(ref Pager pager, ResMyAllocateLogQuery query, QueryUserComboDto usercomboDto) { using (var db = new crmContext()) { var queryData = db.RES_ALLCOTELOG_DETAIL.AsQueryable(); var sharedPoolHis = db.RES_SHAREDPOOL_HIS.AsQueryable(); //queryData = queryData.Where(p => p.DISUSERID != 600000207); if (query.IsFirst.HasValue && query.IsFirst.Value) { queryData = from a in queryData join b in queryData.GroupBy(p => p.RESID).Select(g => new { RESID = g.Key, ID = g.Min(p => p.PKID) }) on a.PKID equals b.ID select a; } if (query.sTime.HasValue) { queryData = queryData.Where(p => p.DISTIME >= query.sTime); sharedPoolHis = sharedPoolHis.Where(p => p.CTIME >= query.sTime); } if (query.eTime.HasValue) { query.eTime = query.eTime.Value.AddDays(1); queryData = queryData.Where(p => p.DISTIME < query.eTime); } if (!string.IsNullOrEmpty(query.resid)) { queryData = queryData.Where(p => p.RESID == query.resid); sharedPoolHis = sharedPoolHis.Where(p => p.RESID == query.resid); } //var resAllcoteLog = from a in queryData group a by new { a.RESID, a.SALESID, a.DISUSERID } into g select new { g.Key.RESID, g.Key.SALESID, g.Key.DISUSERID, PKID = g.Max(p => p.PKID), DISTIME = g.Max(p => p.DISTIME) }; var data = (from b in queryData join customer in db.RES_CUSTOMER on b.RESID equals customer.RESID join c in db.CACHE_RES_RESOURCE_COUNT on b.RESID equals c.RESID //join d in db.RES_CUSTOMERDETAIL on b.RESID equals d.RESID join u in db.BAS_INNERUSER on b.SALESID equals u.PKID join a in db.RES_ACTIVITY on customer.CUSTOMERFROM equals a.RESOURCETAG join t in db.RES_RESOURCETYPE on a.RESTYPEID equals t.RESTYPEID //join h in sharedPoolHis on new { b.RESID, b.SALESID } equals new { h.RESID, h.SALESID } into bhTmp //join h in sharedPoolHis on b.RESID equals h.RESID into bhTmp //from bh in bhTmp.DefaultIfEmpty() select new RES_MYALLOCATERES_VIEW() { ResourceTypeId = t.RESTYPEID, ResourceTypeName = t.TYPENAME, ActivityName = a.ACTIVITYNAME, ResourceTag = a.RESOURCETAG, ResId = customer.RESID, SALESID = b.SALESID, LASTACTIVETIME = c.LASTACTIVETIME, //CUSTOMERCATEGORY = d.CUSTOMERCATEGORY, LASTCALLTIME = c.LASTCALLTIME, PKID = b.PKID, DISTIME = b.DISTIME.Value, DISUSERID = b.DISUSERID.Value, //RECYCLETIME = bh.CTIME RECYCLETIME = null }); if (query.isrecycle.HasValue) { var hisList = from s in sharedPoolHis group s by new { s.RESID, s.SALESID } into g select new { g.Key.RESID, g.Key.SALESID, CTIME = g.Max(p => p.CTIME) }; if (query.isrecycle.Value == 1) { data = from a in data join h in hisList on new { RESID = a.ResId, a.SALESID } equals new { h.RESID, h.SALESID } select new RES_MYALLOCATERES_VIEW() { ResourceTypeId = a.ResourceTypeId, ResourceTypeName = a.ResourceTypeName, ActivityName = a.ActivityName, ResourceTag = a.ResourceTag, ResId = a.ResId, SALESID = a.SALESID, LASTACTIVETIME = a.LASTACTIVETIME, LASTCALLTIME = a.LASTCALLTIME, PKID = a.PKID, DISTIME = a.DISTIME, DISUSERID = a.DISUSERID, RECYCLETIME = h.CTIME }; } else { data = from a in data where !sharedPoolHis.Any(p => p.RESID == a.ResId) select a; } } if (usercomboDto.userId.HasValue) { data = data.Where(p => p.SALESID == usercomboDto.userId.Value); } else if (!string.IsNullOrEmpty(usercomboDto.groupIds)) { decimal[] _groupids = OperationUtil.ConvertToDecimal(usercomboDto.groupIds.Split(',')); var userIds = db.BAS_INNERUSERGROUP.Where(m => _groupids.Contains(m.GID.Value)).Select(m => m.INNERUSERID); data = data.Where(m => userIds.Contains(m.SALESID.Value)); } else if (!string.IsNullOrEmpty(usercomboDto.deptId)) { //decimal[] _saleDeptId = OperationUtil.ConvertToDecimal(userComboDto.deptId.Split(',')); //var groupIds = db.BAS_INNERGROUP.Where(m => _saleDeptId.Contains(m.SALEDEPTID.Value)).Select(p => p.GID).ToList(); //var userIds = (from a in db.BAS_INNERUSERGROUP where groupIds.Contains(a.GID.Value) select a.INNERUSERID); //queryData = queryData.Where(a => userIds.Contains(a.INNERUSERID.Value)); var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(',')); List ALLdeptIDS = new List(); List ALLgidS = new List(); UserServices userservices = new UserServices(); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } data = (from a in data join b in db.BAS_INNERUSERGROUP on a.SALESID equals b.INNERUSERID //join g in db.BAS_INNERGROUP on b.GID equals g.GID where ALLdeptIDS.Contains(b.DEPTID.Value) || ALLgidS.Contains(b.GID.Value) select a); } //else //{ // if (!string.IsNullOrWhiteSpace(query.groupId) && (query.groupId.IndexOf(',') < 0 || query.saleDeptId <= 1)) //当单个组时走这个判断 // { // var _groupids = OperationUtil.ConvertToDecimal(query.groupId.ToString().Split(',')); // List groupList = new List(); // if (_groupids != null) // { // foreach (var g in _groupids) // { // groupList.Add(g); // } // } // if (groupList != null) // { // var returnData = (from a in data // join b in db.BAS_INNERUSERGROUP on a.SALESID equals b.INNERUSERID // where groupList.Contains(b.GID) // select a); // data = returnData; // } // } // else if (query.saleDeptId > 1) //销售部门走这个判断 // { // data = (from a in data // join b in db.BAS_INNERUSERGROUP on a.SALESID equals b.INNERUSERID // join c in db.BAS_INNERGROUP on b.GID equals c.GID // join d in db.BAS_SALESDEPARTMENT on c.SALEDEPTID equals d.SALEDEPTID // where d.SALEDEPTID == query.saleDeptId // select a); // } //} if (!string.IsNullOrEmpty(query.category)) { data = data.Where(p => p.CUSTOMERCATEGORY == query.category); } if (query.resourcetypeid.HasValue) { data = data.Where(p => p.ResourceTypeId == query.resourcetypeid.Value); } if (!string.IsNullOrEmpty(query.resourcetag)) { data = data.Where(p => p.ResourceTag == query.resourcetag); } if (query.diseid.HasValue) { data = data.Where(p => p.DISUSERID == query.diseid.Value); } if (query.isrecycle.HasValue) { if (query.isrecycle == 1) { data = data.Where(p => p.RECYCLETIME.HasValue); if (query.r1Time.HasValue) { data = data.Where(p => p.RECYCLETIME >= query.r1Time.Value); } if (query.r2Time.HasValue) { query.r2Time = query.r2Time.Value.AddDays(1); data = data.Where(p => p.RECYCLETIME < query.r2Time); } } else { data = data.Where(p => p.RECYCLETIME == null); } } if (query.hasGt.HasValue) { if (query.hasGt == 1) { data = data.Where(p => p.LASTACTIVETIME.HasValue || p.LASTCALLTIME.HasValue); } else { data = data.Where(p => p.LASTACTIVETIME == null && p.LASTCALLTIME == null); } } data = data.OrderByDescending(m => m.DISTIME).ThenByDescending(p => p.PKID); PagerUtil.SetPager(ref data, ref pager); return data.ToList(); } } public void HandlerMyAllocate(ref Pager pg, QueryUserComboDto usercomboDto, string resid, string resourcetag, decimal resourcetypeid, decimal isview, decimal isnew, DateTime? stime, DateTime? etime, decimal? productId, decimal? subproductId, DateTime? stimeTH, DateTime? etimeTH, string pkids, string category, DateTime? stimeGD, DateTime? etimeGD, DateTime? stimeKT, DateTime? etimeKT, DateTime? stimeFP, DateTime? etimeFP, decimal? hasTH, decimal? hasGD, decimal fenpeiUser, decimal pici, string extxml, decimal? midproductid) { string groupId = usercomboDto.groupIds; List ALLdeptIDS = new List(); List ALLgidS = new List(); if (string.IsNullOrEmpty(usercomboDto.groupIds) && !string.IsNullOrEmpty(usercomboDto.deptId)) { var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(',')); UserServices userservices = new UserServices(); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } ALLdeptIDS.AddRange(ALLgidS); groupId = string.Join(",", ALLdeptIDS);//所有的部门ID和销售组ID } _dal.HandlerMyAllocate(ref pg, resid, usercomboDto.userId, resourcetag, resourcetypeid, isview, isnew, stime, etime, groupId, productId, subproductId, stimeTH, etimeTH, pkids, category, stimeGD, etimeGD, stimeKT, etimeKT, stimeFP, etimeFP, hasTH, hasGD, fenpeiUser, pici, extxml, midproductid); } } }