//using CRM.Core.DTO; //using CRM.Core.DTO.Res; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WX.CRM.BLL.Application.UserComBox; using WX.CRM.BLL.Base; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.IBLL.Res; using WX.CRM.Model.Entity; using WX.CRM.Model.MAP; namespace WX.CRM.BLL.Res { public class RES_SALES_RULE_BL : DbContextRepository, IRES_SALES_RULE { private CACHE_BL _cache = new CACHE_BL(); private BAS_PARAMETER_BL _para = new BAS_PARAMETER_BL(); //private IRES_MYALLOCATERES _myallocate = NinjectControllerFactory.ninjectKernel.Get(); private RES_MYALLOCATERES_BL _myallocate = new RES_MYALLOCATERES_BL(); public List GetResSalesRule(ref Pager pager, QueryUserComboDto usercomboDto, int? level, int? sgid, int? isvalid) { using (var db = new crmContext()) { var users = _cache.GetUserList(); var groups = _cache.GetGroupList(); var userGroups = _cache.GetList_InnerUserGroup(); var salelevel = _cache.GetValue_Parameter("SaleLevel"); var ruleGroups = _cache.GetValue_Parameter("SaleGroup"); var queryData = db.RES_SALES_RULE.AsQueryable(); if (usercomboDto.userId.HasValue) { queryData = queryData.Where(m => m.INNERUSERID == usercomboDto.userId.Value); } else if (!string.IsNullOrEmpty(usercomboDto.groupIds)) { var _groupids = OperationUtil.ConvertToDecimal(usercomboDto.groupIds.Split(',')); queryData = (from a in queryData join b in db.BAS_INNERUSERGROUP on a.INNERUSERID 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 userservice = new UserServices(_cache); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); userservice.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } queryData = (from a in queryData join b in db.BAS_INNERUSERGROUP on a.INNERUSERID equals b.INNERUSERID //join g in db.BAS_INNERGROUP on b.GID equals g.GID //where depts.Contains(g.SALEDEPTID.Value) where ALLdeptIDS.Contains(b.DEPTID.Value) || ALLgidS.Contains(b.GID.Value) select a); } else if (usercomboDto.companyId.HasValue) { queryData = (from a in queryData join b in db.BAS_INNERUSERGROUP on a.INNERUSERID equals b.INNERUSERID join g in db.BAS_INNERGROUP on b.GID equals g.GID join m in db.BAS_SALESDEPARTMENT on g.SALEDEPTID equals m.SALEDEPTID where m.COMPANYID == usercomboDto.companyId.Value select a); } if (level.HasValue) { queryData = queryData.Where(p => p.LEVELNO == level.Value); } if (sgid.HasValue) { queryData = queryData.Where(p => p.SALEGROUPID == sgid.Value); } if (isvalid.HasValue) { queryData = queryData.Where(p => p.ISVALID == isvalid.Value); } PagerUtil.SetPager(ref queryData, ref pager); var data = queryData.ToList(); //var levelList = JsonConvert.DeserializeAnonymousType(salelevel, new { Level = 0, LevelNum = 0 }); var levelList = salelevel.ToObject>(); var ruleGroupList = ruleGroups.ToObject>(); var q = from a in data join u in users on a.EID equals u.EID join ug in userGroups on u.PKID equals ug.INNERUSERID join g in groups on ug.GID equals g.GID join e in levelList on a.LEVELNO equals e.Level join r in ruleGroupList on a.SALEGROUPID equals r.ID orderby g.SORT ascending, a.EID ascending select new ResSalesRuleListView() { EID = a.EID, GNAME = g.GNAME, UNAME = a.UNAME, ISLIMIT = a.ISLIMIT == 1 ? "是" : "否", LEVEL = Convert.ToInt32(e.Level), LEVELNAME = e.LevelName, NUM = Convert.ToInt32(a.NUM), ISVALID = a.ISVALID == 1 ? "是" : "否", ISDISMISS = u.ISDISMISS == 1 ? "是" : "否", SGNAME = r.GroupName, SID = r.ID }; return q.ToList(); } } public List GetResSalesUnRule(QueryUserComboDto usercomboDto, int? sgid) { var businessDept = _cache.GetValue_Parameter("BusinessDept"); var ruleList = new List(); var wwhhUserEidList = new List(); using (var db = new crmContext()) { var ruleQuery = db.RES_SALES_RULE.AsQueryable(); if (sgid.HasValue) { ruleQuery = ruleQuery.Where(p => p.SALEGROUPID == sgid.Value); } ruleList = ruleQuery.ToList(); wwhhUserEidList = db.WW_HHUSER_EID.ToList(); } var users = _cache.GetUserList().Where(p => p.ISDISMISS == 0); var groups = _cache.GetGroupList(); var userGroups = _cache.GetList_InnerUserGroup(); var depatment = new List(); if (string.IsNullOrEmpty(businessDept)) { depatment = _cache.GetList_SalesDepartMent(); } else { var businessArr = businessDept.Split(new char[1] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => Convert.ToDecimal(x)).ToArray(); depatment = _cache.GetList_SalesDepartMent().Where(p => businessArr.Contains(p.SALEDEPTID)).ToList(); } if (!string.IsNullOrEmpty(usercomboDto.groupIds)) { var _groupids = OperationUtil.ConvertToDecimal(usercomboDto.groupIds.Split(',')); return (from u in users join ug in userGroups on u.PKID equals ug.INNERUSERID join g in groups on ug.GID equals g.GID join m in depatment on g.SALEDEPTID equals m.SALEDEPTID where _groupids.Contains(ug.GID.Value) && !ruleList.Select(p => p.EID).Contains(u.EID) && wwhhUserEidList.Select(p => p.EID).Distinct().Contains(u.EID) orderby g.SORT ascending, u.EID ascending select new ResSaleUnRuleListView() { EID = u.EID, GNAME = g.GNAME, UNAME = u.UNAME } ).ToList(); } else if (!string.IsNullOrEmpty(usercomboDto.deptId)) { var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(',')); return (from u in users join ug in userGroups on u.PKID equals ug.INNERUSERID join g in groups on ug.GID equals g.GID join m in depatment on g.SALEDEPTID equals m.SALEDEPTID where depts.Contains(g.SALEDEPTID.Value) && !ruleList.Select(p => p.EID).Contains(u.EID) && wwhhUserEidList.Select(p => p.EID).Distinct().Contains(u.EID) orderby g.SORT ascending, u.EID ascending select new ResSaleUnRuleListView() { EID = u.EID, GNAME = g.GNAME, UNAME = u.UNAME } ).ToList(); } else if (usercomboDto.companyId.HasValue) { return (from u in users join ug in userGroups on u.PKID equals ug.INNERUSERID join g in groups on ug.GID equals g.GID join m in depatment on g.SALEDEPTID equals m.SALEDEPTID where m.COMPANYID == usercomboDto.companyId.Value && !ruleList.Select(p => p.EID).Contains(u.EID) && wwhhUserEidList.Select(p => p.EID).Distinct().Contains(u.EID) orderby g.SORT ascending, u.EID ascending select new ResSaleUnRuleListView() { EID = u.EID, GNAME = g.GNAME, UNAME = u.UNAME } ).ToList(); } else { return (from u in users join ug in userGroups on u.PKID equals ug.INNERUSERID join g in groups on ug.GID equals g.GID join m in depatment on g.SALEDEPTID equals m.SALEDEPTID where !ruleList.Select(p => p.EID).Contains(u.EID) && wwhhUserEidList.Select(p => p.EID).Distinct().Contains(u.EID) orderby g.SORT ascending, u.EID ascending select new ResSaleUnRuleListView() { EID = u.EID, GNAME = g.GNAME, UNAME = u.UNAME } ).ToList(); } } //public IList GetAssignLists(QueryUserComboDto usercomboDto) //{ // var url = _cache.GetValue_Parameter("AssignUrl"); // var ruleGroups = _cache.GetValue_Parameter("SaleGroup"); // var channel = Utility.GetSettingOrNullByKey("Channel"); // if (string.IsNullOrEmpty(url)) // { // LogHelper.Info("AssignUrl未配置"); // return null; // } // if (string.IsNullOrEmpty(channel)) // { // LogHelper.Info("Channel未配置"); // return null; // } // var reqUrl = url + "?ch=" + channel; // var rsp = Utility.PostData(reqUrl, Encoding.UTF8); // var rspObj = JsonConvert.DeserializeAnonymousType(rsp, new { result = false, retcode = 0, retmsg = new List() }); // LogHelper.Info("rsp:" + rspObj.ToJson()); // if (rspObj.result) // { // var data = rspObj.retmsg; // if (data.Any()) // { // var users = _cache.GetUserList(); // var groups = _cache.GetGroupList(); // var userGroups = _cache.GetList_InnerUserGroup(); // var depatment = _cache.GetList_SalesDepartMent(); // var ruleGroupList = ruleGroups.ToObject>(); // var list = new List(); // if (usercomboDto.userId.HasValue) // { // list = (from a in data // join u in users on a.eid equals u.EID // join ug in userGroups on u.PKID equals ug.INNERUSERID // join g in groups on ug.GID equals g.GID // join r in ruleGroupList on a.salegroupid equals r.ID // where u.PKID == usercomboDto.userId.Value && u.ISDISMISS == 0 // select new AssignListView() { rname = r.GroupName, eid = a.eid, uname = u.UNAME, gname = g.GNAME, allocations = a.allocations, todayallocations = a.todayallocations, quantity = a.quantity, tgquantity = a.tgquantity } // ).ToList(); // } // else if (!string.IsNullOrEmpty(usercomboDto.groupIds)) // { // var _groupids = OperationUtil.ConvertToDecimal(usercomboDto.groupIds.Split(',')); // list = (from a in data // join u in users on a.eid equals u.EID // join ug in userGroups on u.PKID equals ug.INNERUSERID // join g in groups on ug.GID equals g.GID // join r in ruleGroupList on a.salegroupid equals r.ID // where _groupids.Contains(g.GID) && u.ISDISMISS == 0 // select new AssignListView() { rname = r.GroupName, eid = a.eid, uname = u.UNAME, gname = g.GNAME, allocations = a.allocations, todayallocations = a.todayallocations, quantity = a.quantity, tgquantity = a.tgquantity } // ).ToList(); // } // else if (!string.IsNullOrEmpty(usercomboDto.deptId)) // { // UserServices userservices = new UserServices(); // List ALLdeptIDS = new List(); // List ALLgidS = new List(); // userservices.GetAllDeptIDOrGidByDeptStr(usercomboDto.deptId, ref ALLdeptIDS, ref ALLgidS);//获取所有的组别和gid // list = (from a in data // join u in users on a.eid equals u.EID // join ug in userGroups on u.PKID equals ug.INNERUSERID // join g in groups on ug.GID equals g.GID // join r in ruleGroupList on a.salegroupid equals r.ID // where (ALLdeptIDS.Contains(ug.DEPTID.Value) || (ug.GID != null && ALLgidS.Contains(ug.GID.Value))) && u.ISDISMISS == 0 // select new AssignListView() { rname = r.GroupName, eid = a.eid, uname = u.UNAME, gname = g.GNAME, allocations = a.allocations, todayallocations = a.todayallocations, quantity = a.quantity, tgquantity = a.tgquantity } // ).ToList(); // } // else if (usercomboDto.companyId.HasValue) // { // list = (from a in data // join u in users on a.eid equals u.EID // join ug in userGroups on u.PKID equals ug.INNERUSERID // join g in groups on ug.GID equals g.GID // join m in depatment on g.SALEDEPTID equals m.SALEDEPTID // join r in ruleGroupList on a.salegroupid equals r.ID // where m.COMPANYID == usercomboDto.companyId.Value && u.ISDISMISS == 0 // select new AssignListView() { rname = r.GroupName, eid = a.eid, uname = u.UNAME, gname = g.GNAME, allocations = a.allocations, todayallocations = a.todayallocations, quantity = a.quantity, tgquantity = a.tgquantity } // ).ToList(); // } // else // { // list = (from a in data // join u in users on a.eid equals u.EID // join ug in userGroups on u.PKID equals ug.INNERUSERID // join g in groups on ug.GID equals g.GID // join r in ruleGroupList on a.salegroupid equals r.ID // where u.ISDISMISS == 0 // select new AssignListView() { rname = r.GroupName, eid = a.eid, uname = u.UNAME, gname = g.GNAME, allocations = a.allocations, todayallocations = a.todayallocations, quantity = a.quantity, tgquantity = a.tgquantity } // ).ToList(); // } // var allocate = _myallocate.GetToDayAllocateRes(); // foreach (var item in allocate) // { // var distime = DateTime.Parse(item.DisTime.Value.ToShortDateString()); // var ctime = DateTime.Parse(item.CTime.Value.ToShortDateString()); // if (distime > ctime) // { // item.IsNew = 0; // } // } // var isNewList = allocate.Where(p => p.IsNew == 1).GroupBy(p => p.Eid).Select(p => new { eid = p.Key, count = p.Count() }); // var isOldList = allocate.Where(p => p.IsNew == 0).GroupBy(p => p.Eid).Select(p => new { eid = p.Key, count = p.Count() }); // foreach (var item in list) // { // item.isnew = 0; // item.isold = 0; // var isnew = isNewList.FirstOrDefault(p => p.eid == item.eid); // if (isnew != null) // { // item.isnew = isnew.count; // } // var isold = isOldList.FirstOrDefault(p => p.eid == item.eid); // if (isold != null) // { // item.isold = isold.count; // } // item.total = item.isnew + item.isold; // //LogHelper.Info(item.total.ToString()); // } // return list.OrderByDescending(p => p.quantity).ThenByDescending(p => p.total).ToList(); // } // } // return null; //} public bool Batch(int[] eids, int level, int sgid, int islimit) { var users = _cache.GetUserList(); var salelevel = _cache.GetValue_Parameter("SaleLevel"); var levelList = salelevel.ToObject>(); var e = levelList.Find(p => p.Level == level); var num = 0; decimal no = 0; if (e != null) { num = e.LevelNum; no = e.Level; } var data = new List(); foreach (var eid in eids) { var user = users.Find(p => p.EID == eid); var uname = string.Empty; decimal uid = 0; if (user != null) { uname = user.UNAME; uid = user.PKID; } var info = new RES_SALES_RULE() { EID = eid, UNAME = uname, NUM = num, ISLIMIT = islimit, CTIME = DateTime.Now, LEVELNO = no, ISVALID = 1, INNERUSERID = uid, SALEGROUPID = sgid }; data.Add(info); } AddList(data); return Push(); } public bool Update(string eids, int? level, int? islimit, int? isvalid) { var salelevel = _cache.GetValue_Parameter("SaleLevel"); var levelList = salelevel.ToObject>(); //var arr = eids.Split(new char[1] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => Convert.ToInt32(x)).ToArray(); var arr = eids.Split(','); foreach (var a in arr) { var subArr = a.Split('|'); var eid = int.Parse(subArr[0]); var sid = int.Parse(subArr[1]); var info = Get(p => p.EID == eid && p.SALEGROUPID == sid); if (info != null) { if (level.HasValue) { var e = levelList.Find(p => p.Level == level); if (e != null) { info.NUM = e.LevelNum; } info.LEVELNO = level.Value; } if (islimit.HasValue) info.ISLIMIT = islimit.Value; if (isvalid.HasValue) info.ISVALID = isvalid.Value; Update(info); } } return Push(); } //public retMsg UpdateLevel(string level) //{ // try // { // var levelList = level.ToObject>(); // var ruleList = GetList().ToList(); // var lArr = levelList.Select(m => m.Level); // var nArr = ruleList.Select(m => m.LEVELNO).Distinct(); // var gArr = ruleList.Select(m => m.SALEGROUPID).Distinct(); // var except = nArr.Except(lArr); // if (except.Any()) // { // return new retMsg() { result = false, retcode = 0, retmsg = "any" }; // } // foreach (var item in ruleList) // { // var e = levelList.Find(p => p.Level == item.LEVELNO); // if (e != null) // { // item.NUM = e.LevelNum; // } // } // Delete(p => gArr.Contains(p.SALEGROUPID)); // AddList(ruleList); // _para.Update_ParameterValueByKey("SaleLevel", level); // CacheHelper.Remove("cache_Parameter_getList"); // var ret = Push(); // if (ret) // { // return new retMsg() { result = true, retcode = 200, retmsg = "success" }; // } // else // { // return new retMsg() { result = false, retcode = 501, retmsg = "error" }; // } // } // catch (Exception ex) // { // LogHelper.Error(ex); // return new retMsg() { result = false, retcode = 500, retmsg = "error" }; // } //} public bool Push() { try { var ch = Utility.GetSettingOrNullByKey("Channel"); var url = _cache.GetValue_Parameter("Core_ZxdService_ResSaleRule"); if (string.IsNullOrEmpty(url)) { LogHelper.Info("Core_ZxdService_ResSaleRule:未配置"); return false; } if (string.IsNullOrEmpty(ch)) { LogHelper.Info("渠道号:未配置"); return false; } var ruleList = new List(); var deptList = new List(); using (var db = new crmContext()) { var ruleQuery = db.RES_SALES_RULE.AsQueryable(); ruleList = ruleQuery.ToList(); deptList = db.RES_DEPT_RULE.ToList(); } var users = _cache.GetUserList(); var groups = _cache.GetGroupList(); var userGroups = _cache.GetList_InnerUserGroup(); var depatment = _cache.GetList_SalesDepartMent(); ruleList = (from r in ruleList join u in users on r.EID equals u.EID where u.ISDISMISS == 0 select r).ToList(); var dept = from u in users join ug in userGroups on u.PKID equals ug.INNERUSERID join g in groups on ug.GID equals g.GID join m in depatment on g.SALEDEPTID equals m.SALEDEPTID join d in deptList on m.SALEDEPTID equals d.DEPTID select new { u.EID, d.DEPTID, d.RATE }; //var deptGroupList = from r in ruleList // join d in dept on r.EID equals d.EID // where r.ISVALID == 1 // select new { r.SALEGROUPID, d.DEPTID, r.NUM }; //var deptGroupCount = from g in deptGroupList // group g by new { g.SALEGROUPID, g.DEPTID } into gg // select new { gg.Key.SALEGROUPID, gg.Key.DEPTID, count = gg.Sum(p => p.NUM) }; var ruleGroup = from r in ruleList group r by r.SALEGROUPID into rg select new { Gid = rg.Key, Count = rg.Sum(p => p.NUM) }; foreach (var group in ruleGroup) { var rules = ruleList.Where(p => p.SALEGROUPID == group.Gid); //decimal totalCount = rules.Where(p => p.ISVALID == 1).Sum(p => p.NUM); foreach (var item in rules) { var deptInfo = dept.FirstOrDefault(p => p.EID == item.EID); if (deptInfo != null) { item.DEPTRATE = deptInfo.RATE; item.DEPTID = deptInfo.DEPTID; } //if (deptList.Any()) //{ // var deptCountInfo = deptGroupCount.FirstOrDefault(p => p.SALEGROUPID == group.Gid && p.DEPTID == item.DEPTID); // if (deptCountInfo != null) // totalCount = deptCountInfo.count; //} //if (totalCount > 0) //{ // if (item.DEPTRATE.HasValue) // { // item.RATE = (item.NUM / totalCount * (item.DEPTRATE.Value / 100)) * 100; // } // else // { // item.RATE = (item.NUM / totalCount) * 100; // } //} //else //{ // item.RATE = 0; //} //if (item.ISVALID == 0) //{ // item.RATE = 0; //} item.CH = decimal.Parse(ch); //item.RATE = decimal.Parse(item.RATE.ToString("f2")); } //var totalRate = rules.Where(p => p.ISVALID == 1).Sum(p => p.RATE); //if (!(totalRate > 99 && totalRate < 101)) //{ // LogHelper.Info("比例不正确:" + totalRate.ToString()); // //return false; //} } var para = ruleList.ToJson(); LogHelper.Info("para:" + para); var rsp = Utility.PostAjaxData(url, para, Encoding.UTF8); var rspObj = JsonConvert.DeserializeAnonymousType(rsp, new { result = false, retcode = 0, retmsg = string.Empty }); if (rspObj.result) { var gArr = ruleList.Select(m => m.SALEGROUPID).Distinct(); Delete(p => gArr.Contains(p.SALEGROUPID)); AddList(ruleList); } return rspObj.result; } catch (Exception ex) { LogHelper.Error(ex); return false; } } } }