using LinqKit; using New_College.IRepository; using New_College.IRepository.UnitOfWork; using New_College.Model; using New_College.Model.Models; using New_College.Model.ViewModels; using New_College.Repository.Base; using NPOI.SS.Formula.Functions; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Numerics; using System.Threading.Tasks; namespace New_College.Repository { /// /// T_EnrollmentPlanedescRepository /// public class T_EnrollmentPlanedescRepository : BaseRepository, IT_EnrollmentPlanedescRepository { private readonly IV_CustomerInfoRepository v_CustomerInfo; private readonly IT_EnrollmentPlaneRepository t_EnrollmentPlane; private readonly ID_MajorRepository d_Major; private readonly ID_PlanMajorDescRepository planMajorDesc; private readonly ID_PlanMajorScoreLineRepository planMajorScoreLine; private readonly ID_UniversityRepository d_University; private readonly ISysRegionRepository _sysRegionRepository; public T_EnrollmentPlanedescRepository(IUnitOfWork unitOfWork, IV_CustomerInfoRepository _CustomerInfoRepository, IT_EnrollmentPlaneRepository t_EnrollmentPlaneRepository, ID_MajorRepository d_MajorRepository, ID_PlanMajorDescRepository planMajorDesc, ID_PlanMajorScoreLineRepository planMajorScoreLine, ID_UniversityRepository d_University, ISysRegionRepository sysRegionRepository) : base(unitOfWork) { this.v_CustomerInfo = _CustomerInfoRepository; this.t_EnrollmentPlane = t_EnrollmentPlaneRepository; this.d_Major = d_MajorRepository; this.planMajorDesc = planMajorDesc; this.planMajorScoreLine = planMajorScoreLine; this.d_University = d_University; this._sysRegionRepository = sysRegionRepository; } /// /// 暂未实现 /// /// /// public async Task>> GetCWBUniversityDetail(CWBUniversityDetailQuery query) { var regionlist = this.Db.Queryable().Where(c => c.Level == 1).WhereIF(query.provinceIds != null && query.provinceIds.Any(), c => query.provinceIds.Contains(c.KeyId)).Select(c => c.RegionName).ToList(); RefAsync totalNumber = 0; // int planId = (await t_EnrollmentPlane.Query(e => e.Years == query.Year && e.Area_Id == query.AreaId)).FirstOrDefault().Id; var subjects = new string[] { }; string sbuOne = string.Empty; string sbuTwo = string.Empty; string sbuTree = string.Empty; float chongfirst = query.Score + 15; float chongend = query.Score + 5; float wenend = query.Score - 15; if (!string.IsNullOrWhiteSpace(query.SubjectClaim)) { subjects = query.SubjectClaim.Split(","); sbuOne = subjects[0]; sbuTwo = subjects[1]; sbuTree = subjects[2]; } var majornames = new List(); var majoraslist = new List(); if (query.MajorIds != null && query.MajorIds.Count > 0) { //所选专业增加majorids筛选 //query.MajorIds majoraslist = await this.d_Major.Query(x => x.IsDelete == false && query.MajorIds.Contains(x.Id)); if (majoraslist.Count() <= 0) return new MessageModel>() { success = false, msg = "所选专业大类数据完善中..." }; majornames = majoraslist.Select(x => x.MajorCode).ToList(); } var testlist = new List() { 1, 2, 3 }; var recommendInfo = await this.Db.Queryable((plans, universitys) => new object[] { JoinType.Left, plans.UId == universitys.Id, JoinType.Left }) //.Where((plans, universitys) => plans.PlanId == planId && plans.BatchtypeId == query.BatchId) // .WhereIF(query.areaIds != null && query.areaIds.Count() > 0, (plans, universitys) => query.areaIds.Contains(universitys.Area_Id)) .WhereIF(regionlist.Any(), (plans, universitys) => regionlist.Contains(universitys.Area_Name)) .WhereIF(query.Year > 0, (plans, universitys) => plans.Years == query.Year) .WhereIF(!string.IsNullOrEmpty(query.Location), (plans, universitys) => plans.Location == query.Location) .WhereIF(string.IsNullOrWhiteSpace(query.Type), (plans, universitys) => plans.LowScore > 0 && (plans.LowScore <= query.Score + 15)) .WhereIF(query.Type == "冲", (plans, universitys) => plans.LowScore > 0 && (plans.LowScore <= query.Score + 15 && plans.LowScore > query.Score + 5)) .WhereIF(query.Type == "稳", (plans, universitys) => plans.LowScore > 0 && (plans.LowScore <= query.Score + 5 && plans.LowScore > query.Score - 15)) .WhereIF(query.Type == "保", (plans, universitys) => plans.LowScore > 0 && (plans.LowScore < query.Score - 15)) .WhereIF(!string.IsNullOrWhiteSpace(query.SubjectClaim), (plans, universitys) => (plans.SelectSubject.Contains(sbuOne) || plans.SelectSubject.Contains(sbuTwo) || plans.SelectSubject.Contains(sbuTree))) .WhereIF(majornames.Any() && majornames.Count() > 0, (plans, universitys) => majornames.Contains(plans.MajorCode)).GroupBy(plans => new { // plans.Id, plans.UId, // plans.LowScore, // plans.LowScoreRank }) .Select((plans, universitys) => new UniversityEnrollmentPlanResult() { AreaName = universitys.Area_Name, UniversityId = plans.UId, AscriptionName = universitys.AscriptionName, Logo = universitys.Logo, Nhef = universitys.Nhef, Rank = universitys.Rank <= 0 ? "--" : universitys.Rank.ToString(), UniversityName = universitys.Name, Sff = universitys.Sff, Syl = universitys.Syl, planCount = SqlFunc.AggregateSum(plans.PlanCount),// plandesc.Where(x => x.UniversityId == item.Id).Select(x => x.Id).ToList() MjaorPlan = SqlFunc.AggregateCount(plans.UId), Scoreline = SqlFunc.AggregateMin(plans.LowScore), // PlanIds= String.Join(" ",plans.Id) }) .ToPageListAsync(query.PageIndex, query.PageSize, totalNumber); var plansinfo = await this.Db.Queryable((plans, universitys) => new object[] { JoinType.Left, plans.UId == universitys.Id, JoinType.Left }) //.Where((plans, universitys) => plans.PlanId == planId && plans.BatchtypeId == query.BatchId) .WhereIF(query.areaIds != null && query.areaIds.Count() > 0, (plans, universitys) => query.areaIds.Contains(universitys.Area_Id)) .WhereIF(string.IsNullOrWhiteSpace(query.Type), (plans, universitys) => plans.LowScore > 0 && (plans.LowScore <= query.Score + 15)) .WhereIF(query.Year > 0, (plans, universitys) => plans.Years == query.Year) .WhereIF(!string.IsNullOrEmpty(query.Location), (plans, universitys) => plans.Location == query.Location) .WhereIF(query.Type == "冲", (plans, universitys) => plans.LowScore > 0 && (plans.LowScore <= query.Score + 15 && plans.LowScore > query.Score + 5)) .WhereIF(query.Type == "稳", (plans, universitys) => plans.LowScore > 0 && (plans.LowScore <= query.Score + 5 && plans.LowScore > query.Score - 15)) .WhereIF(query.Type == "保", (plans, universitys) => plans.LowScore > 0 && (plans.LowScore < query.Score - 15)) .WhereIF(!string.IsNullOrWhiteSpace(query.SubjectClaim), (plans, universitys) => (plans.SelectSubject.Contains(sbuOne) || plans.SelectSubject.Contains(sbuTwo) || plans.SelectSubject.Contains(sbuTree))) .WhereIF(majornames.Any() && majornames.Count() > 0, (plans, universitys) => majornames.Contains(plans.MajorCode)).ToListAsync(); recommendInfo.ForEach(a => { a.PlanIds = plansinfo.Where(c => c.UId == a.UniversityId).Select(c => c.Id).ToList(); a.Type = (a.Scoreline <= chongfirst && a.Scoreline > chongend) ? "冲" : (a.Scoreline <= chongend && a.Scoreline > wenend) ? "稳" : "保"; }); return new MessageModel>() { success = true, msg = "获取成功", response = new PageModel() { data = recommendInfo, dataCount = recommendInfo.Count, page = query.PageIndex, PageSize = query.PageSize, pageCount = (int)Math.Ceiling(recommendInfo.Count / Convert.ToDecimal(query.PageSize)) } }; } /// /// 智能选大学 /// /// /// public async Task> GetRecommendUniversity(RecommendUniversityQuery query) { RefAsync totalNumber = 0; var maxscore = query.Score + 10; var minscore = query.Score - 10; //var custome = (await this.v_CustomerInfo.QueryById(query.CustomerId)); // int planId = (await t_EnrollmentPlane.Query(e => e.Years == custome.Year && e.Area_Id == custome.AreaId)).FirstOrDefault().Id; //var subjects = new string[] { }; //string sbuOne = string.Empty; //string sbuTwo = string.Empty; //string sbuTree = string.Empty; //if (!string.IsNullOrWhiteSpace(query.SubjectClaim)) //{ // subjects = query.SubjectClaim.Split(","); // sbuOne = subjects[0]; // sbuTwo = subjects[1]; // sbuTree = subjects[2]; //} var recommendInfo = await this.Db.Queryable((plans, universitys) => new object[] { JoinType.Left, plans.UId == universitys.Id }) .Where((plans, universitys) => plans.Location == query.Location) .Where((plans, universitys) => plans.Years == query.Year - 1) .WhereIF(query.SubjectLevel > 0, (plans, universitys) => universitys.Subject_Level == query.SubjectLevel) .WhereIF(query.Type >= 0, (plans, universitys) => universitys.Type == query.Type) .WhereIF(query.Nhef >= 0, (plans, universitys) => universitys.Nhef == query.Nhef) .WhereIF(query.Sff >= 0, (plans, universitys) => universitys.Sff == query.Sff) .WhereIF(query.Syl >= 0, (plans, universitys) => universitys.Syl == query.Syl) .WhereIF(query.Nature > 0, (plans, universitys) => universitys.Nature == query.Nature) .WhereIF(!string.IsNullOrWhiteSpace(query.AreaName) && query.AreaName != "选择省份", (plans, universitys) => universitys.Area_Name.Contains(query.AreaName)) .WhereIF(maxscore > 10, (plans, universitys) => plans.LowScore <= maxscore) .WhereIF(minscore > 0, (plans, universitys) => plans.LowScore > minscore) .WhereIF(query.Ranking > 0, (plans, universitys) => plans.LowScoreRank >= query.Ranking - 6) //.WhereIF(!string.IsNullOrWhiteSpace(query.SubjectClaim), (plans, universitys) => (plans.SelectSubject.Contains(sbuOne) || plans.SelectSubject.Contains(sbuTwo) || plans.SelectSubject.Contains(sbuTree))) .OrderBy((plans, universitys) => plans.LowScoreRank, OrderByType.Asc) .Select((plans, universitys) => new UniversityResult() { Id = plans.Id, Name = universitys.Name, Nature = universitys.Nature, AscriptionName = universitys.AscriptionName, SubjectLevel = universitys.Subject_Level, AreaName = universitys.Area_Name, Logo = universitys.Logo, Syl = universitys.Syl == 1 ? true : false, Nhef = universitys.Nhef == 1 ? true : false, Sff = universitys.Sff == 1 ? true : false, UniversityType = universitys.Type, Scorepostion = plans.LowScoreRank, ScoreLine = plans.LowScore, Years = plans.Years }) .ToPageListAsync(query.PageIndex, query.PageSize, totalNumber); return new PageModel() { data = recommendInfo, page = query.PageIndex, PageSize = query.PageSize, dataCount = totalNumber, pageCount = (int)Math.Ceiling(totalNumber / Convert.ToDecimal(query.PageSize)) }; } } }