NewGaoKaoApi/New_College.Repository/BASE/T_EnrollmentPlanedescReposi...

227 lines
13 KiB
C#

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
{
/// <summary>
/// T_EnrollmentPlanedescRepository
/// </summary>
public class T_EnrollmentPlanedescRepository : BaseRepository<T_EnrollmentPlanedesc>, 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;
}
/// <summary>
/// 暂未实现
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public async Task<MessageModel<PageModel<UniversityEnrollmentPlanResult>>> GetCWBUniversityDetail(CWBUniversityDetailQuery query)
{
var regionlist = this.Db.Queryable<SysRegion>().Where(c => c.Level == 1).WhereIF(query.provinceIds != null && query.provinceIds.Any(), c => query.provinceIds.Contains(c.KeyId)).Select(c => c.RegionName).ToList();
RefAsync<int> 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<string>();
var majoraslist = new List<D_Major>();
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<PageModel<UniversityEnrollmentPlanResult>>() { success = false, msg = "所选专业大类数据完善中..." };
majornames = majoraslist.Select(x => x.MajorCode).ToList();
}
var testlist = new List<int>() { 1, 2, 3 };
var recommendInfo = await this.Db.Queryable<D_PlanMajorDesc, D_University>((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<D_PlanMajorDesc, D_University>((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<PageModel<UniversityEnrollmentPlanResult>>()
{
success = true,
msg = "获取成功",
response = new PageModel<UniversityEnrollmentPlanResult>()
{
data = recommendInfo,
dataCount = recommendInfo.Count,
page = query.PageIndex,
PageSize = query.PageSize,
pageCount = (int)Math.Ceiling(recommendInfo.Count / Convert.ToDecimal(query.PageSize))
}
};
}
/// <summary>
/// 智能选大学
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public async Task<PageModel<UniversityResult>> GetRecommendUniversity(RecommendUniversityQuery query)
{
RefAsync<int> 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<D_QualificationLine, D_University>((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<UniversityResult>()
{
data = recommendInfo,
page = query.PageIndex,
PageSize = query.PageSize,
dataCount = totalNumber,
pageCount = (int)Math.Ceiling(totalNumber / Convert.ToDecimal(query.PageSize))
};
}
}
}