200 lines
11 KiB
C#
200 lines
11 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 SqlSugar;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
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;
|
|
public T_EnrollmentPlanedescRepository(IUnitOfWork unitOfWork, IV_CustomerInfoRepository _CustomerInfoRepository, IT_EnrollmentPlaneRepository t_EnrollmentPlaneRepository, ID_MajorRepository d_MajorRepository) : base(unitOfWork)
|
|
{
|
|
this.v_CustomerInfo = _CustomerInfoRepository;
|
|
this.t_EnrollmentPlane = t_EnrollmentPlaneRepository;
|
|
this.d_Major = d_MajorRepository;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 暂未实现
|
|
/// </summary>
|
|
/// <param name="query"></param>
|
|
/// <returns></returns>
|
|
public async Task<MessageModel<PageModel<UniversityEnrollmentPlanResult>>> GetCWBUniversityDetail(CWBUniversityDetailQuery query)
|
|
{
|
|
|
|
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>();
|
|
if (query.MajorIds != null && query.MajorIds.Count > 0)
|
|
{
|
|
//所选专业增加majorids筛选
|
|
//query.MajorIds
|
|
var major = await this.d_Major.Query(x => x.IsDelete == false && query.MajorIds.Contains(x.CategoryClass_Id));
|
|
if (major.Count() <= 0)
|
|
return new MessageModel<PageModel<UniversityEnrollmentPlanResult>>() { success = false, msg = "所选专业大类数据完善中..." };
|
|
majornames = major.Select(x => x.MajorName).ToList();
|
|
}
|
|
|
|
var recommendInfo = await this.Db.Queryable<T_EnrollmentPlanedesc, D_University>((plans, universitys) => new object[] { JoinType.Left, plans.UniversityId == universitys.Id })
|
|
.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.Scoreline > 0 && (plans.Scoreline <= query.Score + 15))
|
|
.WhereIF(query.Type == "冲", (plans, universitys) => plans.Scoreline > 0 && (plans.Scoreline <= query.Score + 15 && plans.Scoreline > query.Score + 5))
|
|
.WhereIF(query.Type == "稳", (plans, universitys) => plans.Scoreline > 0 && (plans.Scoreline <= query.Score + 5 && plans.Scoreline > query.Score - 15))
|
|
.WhereIF(query.Type == "保", (plans, universitys) => plans.Scoreline > 0 && (plans.Scoreline < query.Score - 15))
|
|
.WhereIF(!string.IsNullOrWhiteSpace(query.SubjectClaim), (plans, universitys) => (plans.Subjectclaim.Contains(sbuOne) || plans.Subjectclaim.Contains(sbuTwo) || plans.Subjectclaim.Contains(sbuTree)))
|
|
.WhereIF(majornames.Any() && majornames.Count() > 0, (plans, universitys) => majornames.Contains(plans.MajorName))
|
|
|
|
.Select((plans, universitys) => new UniversityEnrollmentPlanResult()
|
|
{
|
|
AreaName = universitys.Area_Name,
|
|
UniversityId = plans.UniversityId,
|
|
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 = plans.Plancount,
|
|
Scoreline = plans.Scoreline,
|
|
PlanId = plans.Id
|
|
}).MergeTable()
|
|
.GroupBy(it => new
|
|
{
|
|
it.UniversityId
|
|
})
|
|
//plandesc.Where(x => x.UniversityId == item.Id && x.Scoreline <= query.Score + 15 && x.Scoreline > query.Score + 5).Any() ? "冲" : (plandesc.Where(x => x.Scoreline <= query.Score + 5 && x.Scoreline > query.Score - 15)).Any() ? "稳" : plandesc.Where(x => x.UniversityId == item.Id && x.Scoreline > 0 && query.Score > x.Scoreline).Any() ? "保" : "其他"
|
|
.OrderBy(it => it.UniversityId, OrderByType.Asc)
|
|
.Select(it => new UniversityEnrollmentPlanResult
|
|
{
|
|
planCount = SqlFunc.AggregateSum(it.planCount),
|
|
MjaorPlan = SqlFunc.AggregateCount(it.UniversityId),
|
|
//PlanIds = SqlFunc.Subqueryable<List<UniversityEnrollmentPlanResult>>().Select(s =>),
|
|
// Score = it.Score,
|
|
Type = (it.Scoreline <= chongfirst && it.Scoreline > chongend) ? "冲" : (it.Scoreline <= chongend && it.Scoreline > wenend) ? "稳" : "保",
|
|
AreaName = it.AreaName,
|
|
UniversityId = it.UniversityId,
|
|
AscriptionName = it.AscriptionName,
|
|
Logo = it.Logo,
|
|
Nhef = it.Nhef,
|
|
Rank = it.Rank,
|
|
UniversityName = it.UniversityName,
|
|
|
|
Sff = it.Sff,
|
|
Syl = it.Syl
|
|
})
|
|
.ToPageListAsync(query.PageIndex, query.PageSize, totalNumber);
|
|
|
|
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<T_EnrollmentPlanedesc, D_University>((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<UniversityResult>()
|
|
{
|
|
data = recommendInfo,
|
|
page = query.PageIndex,
|
|
PageSize = query.PageSize,
|
|
dataCount = totalNumber,
|
|
pageCount = (int)Math.Ceiling(totalNumber / Convert.ToDecimal(query.PageSize))
|
|
};
|
|
|
|
}
|
|
}
|
|
} |