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 SqlSugar; using System; using System.Linq; 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; public T_EnrollmentPlanedescRepository(IUnitOfWork unitOfWork, IV_CustomerInfoRepository _CustomerInfoRepository, IT_EnrollmentPlaneRepository t_EnrollmentPlaneRepository) : base(unitOfWork) { this.v_CustomerInfo = _CustomerInfoRepository; this.t_EnrollmentPlane = t_EnrollmentPlaneRepository; } /// /// 智能选大学 /// /// /// 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.UniversityId == universitys.Id }) .Where((plans, universitys) => plans.PlanId == planId) .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.Scoreline <= maxscore) .WhereIF(minscore > 0, (plans, universitys) => plans.Scoreline > minscore) .WhereIF(query.Ranking > 0, (plans, universitys) => plans.scorepostion >= query.Ranking + 1) .WhereIF(!string.IsNullOrWhiteSpace(query.SubjectClaim), (plans, universitys) => (plans.Subjectclaim.Contains(sbuOne) || plans.Subjectclaim.Contains(sbuTwo) || plans.Subjectclaim.Contains(sbuTree))) .OrderBy((plans, universitys) => plans.Scoreline, OrderByType.Desc) .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.scorepostion.Value, ScoreLine = plans.Scoreline }) .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)) }; } } }