using LinqKit;
using New_College.Common;
using New_College.Common.Helper;
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;
private readonly IT_TbSNeedDataInfoRepository t_TbSNeedDataInfo;
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,
IT_TbSNeedDataInfoRepository tbSNeedDataInfo) : 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;
this.t_TbSNeedDataInfo = tbSNeedDataInfo;
}
public async Task>> GetUniversityMapItems(CWBUniversityDetailQuery query)
{
query.Year = query.Year > 2023 ? 2023 : query.Year;
var response = new List();
RefAsync totalNumber = 0;
var regionlist = this.Db.Queryable().Where(c => c.Level == 1).WhereIF(query.provinceIds != null && query.provinceIds.Any(), c => SqlFunc.ContainsArray(query.provinceIds, c.KeyId)).Select(c => c.RegionName).ToList();
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 && SqlFunc.ContainsArray(query.MajorIds, x.Id));
if (majoraslist.Count() <= 0)
// return new MessageModel>() { success = false, msg = "所选专业大类数据完善中..." };
majornames = majoraslist.Select(x => x.MajorCode).ToList();
}
var recommandinfo = await this.Db.Queryable()
.WhereIF(regionlist.Any(), p => SqlFunc.ContainsArray(regionlist, p.Province))
//.WhereIF(query.Year > 0, p => p.Years == query.Year)
.WhereIF(!string.IsNullOrEmpty(query.Location), p => p.Location == query.Location)
// .WhereIF(!string.IsNullOrEmpty(query.BatchName), p => p.BatchName == query.BatchName)
.WhereIF(string.IsNullOrWhiteSpace(query.Type), p => int.Parse(p._23Score) > 0 && (int.Parse(p._23Score) <= query.Score + 15))
.WhereIF(query.Type == "冲", p => int.Parse(p._23Score) > 0 && (int.Parse(p._23Score) <= query.Score + 15 && int.Parse(p._23Score) > query.Score + 5))
.WhereIF(query.Type == "稳", p => int.Parse(p._23Score) > 0 && (int.Parse(p._23Score) <= query.Score + 5 && int.Parse(p._23Score) > query.Score - 15))
.WhereIF(query.Type == "保", p => int.Parse(p._23Score) > 0 && (int.Parse(p._23Score) < query.Score - 15))
.WhereIF(!string.IsNullOrWhiteSpace(query.SubjectClaim), p => (SqlFunc.Contains(p._23subject, sbuOne) || SqlFunc.Contains(p._23subject, sbuTwo) || SqlFunc.Contains(p._23subject, sbuTree)))
.WhereIF(majornames.Any() && majornames.Count() > 0, p => SqlFunc.ContainsArray(majornames, p.MajorCode))
//.WhereIF(query.UniversityIds.Any() && query.UniversityIds.Count() > 0, p => SqlFunc.ContainsArray(query.UniversityIds, p.UId))
.Select(p => new UniversityEnrollmentPlanResult()
{
// UniversityId = p.UId,
//PlanId = p.Id,
// Scoreline = p.LowScore
})
.ToListAsync();
// var recommendInfo = await this.Db.Queryable()
// .WhereIF(regionlist.Any(), p => SqlFunc.ContainsArray(regionlist, p.AreaName))
//.WhereIF(query.Year > 0, p => p.Years == query.Year)
//.WhereIF(!string.IsNullOrEmpty(query.Location), p => p.Location == query.Location)
//.WhereIF(!string.IsNullOrEmpty(query.BatchName), p => p.BatchName == query.BatchName)
//.WhereIF(string.IsNullOrWhiteSpace(query.Type), p => p.LowScore > 0 && (p.LowScore <= query.Score + 15))
//.WhereIF(query.Type == "冲", p => p.LowScore > 0 && (p.LowScore <= query.Score + 15 && p.LowScore > query.Score + 5))
//.WhereIF(query.Type == "稳", p => p.LowScore > 0 && (p.LowScore <= query.Score + 5 && p.LowScore > query.Score - 15))
//.WhereIF(query.Type == "保", p => p.LowScore > 0 && (p.LowScore < query.Score - 15))
//.WhereIF(!string.IsNullOrWhiteSpace(query.SubjectClaim), p => (SqlFunc.Contains(p.SelectSubject, sbuOne) || SqlFunc.Contains(p.SelectSubject, sbuTwo) || SqlFunc.Contains(p.SelectSubject, sbuTree)))
//.WhereIF(majornames.Any() && majornames.Count() > 0, p => SqlFunc.ContainsArray(majornames, p.MajorCode))
// .WhereIF(query.UniversityIds.Any() && query.UniversityIds.Count() > 0, p => SqlFunc.ContainsArray(query.UniversityIds, p.UId))
//.Select(p => new UniversityEnrollmentPlanResult()
//{
// UniversityId = p.UId,
// PlanId = p.Id,
// // Scoreline = p.LowScore
//})
//.ToListAsync();
// var universitylist = recommendInfo.Select(c => c.UniversityId).Distinct().ToList();
// universitylist.ForEach(a =>
// {
// response.Add(new UniversityMapMajorItems()
// {
// UId = a,
// MIds = recommendInfo.Where(e => e.UniversityId == a).Select(c => c.PlanId).ToList()
// });
// });
return new MessageModel>() { response = response };
}
///
/// CWB
///
///
///
public async Task>> GetCWBUniversityDetail(CWBUniversityDetailQuery query)
{
query.Year = query.Year > 2023 ? 2023 : query.Year;
RefAsync totalNumber = 0;
if (query.provinceIds == null)
{
query.provinceIds = new List() { 0 };
}
var regionlist = this.Db.Queryable().Where(c => c.Level == 1).WhereIF(query.provinceIds != null && query.provinceIds.Any(), c => SqlFunc.ContainsArray(query.provinceIds, c.KeyId)).Select(c => c.RegionName).ToList();
var claim = 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))
{
claim = query.SubjectClaim.Split(",");
//sbuOne = claim[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 && SqlFunc.ContainsArray(query.MajorIds, x.Id));
if (majoraslist.Count() <= 0)
return new MessageModel>() { success = false, msg = "所选专业大类数据完善中..." };
majornames = majoraslist.Select(x => x.MajorName).ToList();
}
var recommendInfo = await this.Db.Queryable()
.WhereIF(regionlist.Any(), p => SqlFunc.ContainsArray(regionlist, p.Province))
//.WhereIF(query.Year > 0, p => p.Years == query.Year)
.WhereIF(!string.IsNullOrEmpty(query.Location), p => p.Location == query.Location)
//.WhereIF(!string.IsNullOrEmpty(query.BatchName), p => p.BatchName == query.BatchName)
.WhereIF(string.IsNullOrWhiteSpace(query.Type), p => int.Parse(p._23Score) > 0 && (int.Parse(p._23Score) <= query.Score + 15))
.WhereIF(query.Type == "冲", p => int.Parse(p._23Score) > 0 && (int.Parse(p._23Score) <= query.Score + 15 && int.Parse(p._23Score) > query.Score + 5))
.WhereIF(query.Type == "稳", p => int.Parse(p._23Score) > 0 && (int.Parse(p._23Score) <= query.Score + 5 && int.Parse(p._23Score) > query.Score - 15))
.WhereIF(query.Type == "保", p => int.Parse(p._23Score) > 0 && (int.Parse(p._23Score) < query.Score - 15))
.WhereIF(!string.IsNullOrWhiteSpace(query.SubjectClaim), c => SqlFunc.Contains(c._24subject, claim[0]) || SqlFunc.Contains(c._24subject, claim[1]) || SqlFunc.Contains(c._24subject, claim[2]) || c._24subject == "不限")
.WhereIF(majornames.Any() && majornames.Count() > 0, p => SqlFunc.ContainsArray(majornames, p.MajorCode))
.ToListAsync();
var universitylist = recommendInfo.GroupBy(g => g.UniversityName).Select(c => new UniversityEnrollmentPlanResult() { UniversityName = c.Key }).ToList();
var universitytemps = (await d_University.Query(c => SqlFunc.ContainsArray(recommendInfo.Select(c => c.UniversityName).ToList(), c.Name))).Select(c => new
D_University()
{ Id = c.Id, Logo = c.Logo, Name = c.Name }).ToList();
var ulist = universitylist.Select(s => new UniversityEnrollmentPlanResult()
{
Logo = universitytemps.FirstOrDefault(e => e.Name == s.UniversityName).Logo,
UniversityId = universitytemps.FirstOrDefault(e => e.Name == s.UniversityName).Id,
AreaName = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).Province,
UniversityCode = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).EnrollmentCode,
Rank = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).UniversityRank.ToString(),
_985 = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).LnstitutionalLevel != null ? (recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).LnstitutionalLevel.Contains("985") ? "是" : "否") : "否",
_211 = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).LnstitutionalLevel != null ? (recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).LnstitutionalLevel.Contains("211") ? "是" : "否") : "否",
_SYL = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).LnstitutionalLevel != null ? (recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).LnstitutionalLevel.Contains("双一流") ? "是" : "否") : "否",
SchoolScoreline = int.Parse(recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName)._23SchoolScoreLine),
SchoolLowScore = int.Parse(recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName)._23SchoolScore),
Type = MajorPlanScoreTool.GetPlanScore(int.Parse(recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName)._23Score), (int)query.Score) == 2 ? "冲" : MajorPlanScoreTool.GetPlanScore(int.Parse(recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName)._23Score), (int)query.Score) == 1 ? "稳" : "保",//冲稳保院校
Percentage = MajorPlanScoreTool.GetPlanPercentage(int.Parse(recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName)._23Score), (int)query.Score),
AscriptionName = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).Ownership,
CityName = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).City,
MjaorPlan = recommendInfo.Where(e => e.UniversityName == s.UniversityName).Count(),
planCount = recommendInfo.Where(e => e.UniversityName == s.UniversityName).Sum(m => int.Parse(m._23Count)),
PlanIds = recommendInfo.Where(e => e.UniversityName == s.UniversityName).Select(c => c.ID).ToList(),
UniversityName = s.UniversityName,
}).Skip(query.PageSize * (query.PageIndex - 1)).Take(query.PageSize).ToList();
return new MessageModel>()
{
success = true,
msg = "获取成功",
response = new PageModel()
{
data = ulist,
dataCount = universitylist.Count,
page = query.PageIndex,
PageSize = query.PageSize,
pageCount = (int)Math.Ceiling(universitylist.Count / Convert.ToDecimal(query.PageSize))
}
};
}
///
/// 智能选大学
///
///
///
public async Task> GetRecommendUniversity(RecommendUniversityQuery query)
{
RefAsync totalNumber = 0;
var maxscore = query.Score + 10;
var minscore = query.Score - 10;
query.Year = query.Year > 2023 ? 2023 : query.Year;
//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 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)
.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 == 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 = universitys.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);
recommendInfo.ForEach(recommendInfo =>
{
recommendInfo.Percentage = MajorPlanScoreTool.GetPlanPercentage((int)recommendInfo.ScoreLine, query.Score);
});
return new PageModel()
{
data = recommendInfo,
page = query.PageIndex,
PageSize = query.PageSize,
dataCount = totalNumber,
pageCount = (int)Math.Ceiling(totalNumber / Convert.ToDecimal(query.PageSize))
};
}
}
}