--调整智能选大学功能模块代码已完善 --按分数选择--

develop
易大师 2021-06-29 15:11:24 +08:00
parent 37de04305c
commit 585fbcdd02
11 changed files with 292 additions and 82 deletions

View File

@ -31,11 +31,11 @@ namespace New_College.Controllers
/// ///
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
// [HttpPost] [HttpPost]
// public Task<bool> Post() public Task<bool> Post()
//{ {
// return t_EnrollmentPlane.Import(); return t_EnrollmentPlane.Import();
// } }
} }
} }

View File

@ -3319,6 +3319,11 @@
是否双一流 0、否1、是 是否双一流 0、否1、是
</summary> </summary>
</member> </member>
<member name="P:New_College.Model.ViewModels.RecommendUniversityQuery.SubjectClaim">
<summary>
选择科目
</summary>
</member>
<member name="T:New_College.Model.ViewModels.UniversityProbabilityQuery"> <member name="T:New_College.Model.ViewModels.UniversityProbabilityQuery">
<summary> <summary>
录取概率传入 录取概率传入
@ -4854,6 +4859,16 @@
长学校id 长学校id
</summary> </summary>
</member> </member>
<member name="P:New_College.Model.ViewModels.UniversityResult.ScoreLine">
<summary>
最低录取分数
</summary>
</member>
<member name="P:New_College.Model.ViewModels.UniversityResult.Scorepostion">
<summary>
位次
</summary>
</member>
<member name="T:New_College.Model.ViewModels.UniversityDetailResponse"> <member name="T:New_College.Model.ViewModels.UniversityDetailResponse">
<summary> <summary>

View File

@ -13,7 +13,7 @@ namespace New_College.IServices
/// </summary> /// </summary>
public interface IT_EnrollmentPlaneServices : IBaseServices<T_EnrollmentPlane> public interface IT_EnrollmentPlaneServices : IBaseServices<T_EnrollmentPlane>
{ {
//Task<bool> Import(); Task<bool> Import();
/// <summary> /// <summary>

View File

@ -126,6 +126,11 @@ namespace New_College.IServices
/// <param name="query"></param> /// <param name="query"></param>
/// <returns></returns> /// <returns></returns>
Task<MessageModel<List<IdNameResult>>> GetBatchByYearArea(YearAreaQuery query); Task<MessageModel<List<IdNameResult>>> GetBatchByYearArea(YearAreaQuery query);
} }
} }

View File

@ -31,17 +31,22 @@ namespace New_College.Model.ViewModels
/// <summary> /// <summary>
/// 是否985 0、否1、是 /// 是否985 0、否1、是
/// </summary> /// </summary>
public int Nhef { get; set; } public int Nhef { get; set; } = -1;
/// <summary> /// <summary>
/// 是否211 0、否1、是 /// 是否211 0、否1、是
/// </summary> /// </summary>
public int Sff { get; set; } public int Sff { get; set; } = -1;
/// <summary> /// <summary>
/// 是否双一流 0、否1、是 /// 是否双一流 0、否1、是
/// </summary> /// </summary>
public int Syl { get; set; } public int Syl { get; set; } = -1;
/// <summary>
/// 选择科目
/// </summary>
public string SubjectClaim { get; set; }
} }
/// <summary> /// <summary>

View File

@ -101,6 +101,16 @@ namespace New_College.Model.ViewModels
/// 长学校id /// 长学校id
/// </summary> /// </summary>
public string LongSchoolId { get; set; } public string LongSchoolId { get; set; }
/// <summary>
/// 最低录取分数
/// </summary>
public int ScoreLine { get; set; }
/// <summary>
/// 位次
/// </summary>
public int Scorepostion { get; set; }
} }
/// <summary> /// <summary>

View File

@ -1,5 +1,8 @@
using New_College.IRepository.Base; using New_College.IRepository.Base;
using New_College.Model;
using New_College.Model.Models; using New_College.Model.Models;
using New_College.Model.ViewModels;
using System.Threading.Tasks;
namespace New_College.IRepository namespace New_College.IRepository
{ {
@ -8,5 +11,12 @@ namespace New_College.IRepository
/// </summary> /// </summary>
public interface IT_EnrollmentPlanedescRepository : IBaseRepository<T_EnrollmentPlanedesc> public interface IT_EnrollmentPlanedescRepository : IBaseRepository<T_EnrollmentPlanedesc>
{ {
/// <summary>
/// 只能选大学
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
Task<PageModel<UniversityResult>> GetRecommendUniversity(RecommendUniversityQuery query);
} }
} }

View File

@ -1,17 +1,92 @@
using New_College.IRepository; using LinqKit;
using New_College.IRepository;
using New_College.IRepository.UnitOfWork; using New_College.IRepository.UnitOfWork;
using New_College.Model;
using New_College.Model.Models; using New_College.Model.Models;
using New_College.Model.ViewModels;
using New_College.Repository.Base; using New_College.Repository.Base;
using SqlSugar;
using System;
using System.Linq;
using System.Threading.Tasks;
namespace New_College.Repository namespace New_College.Repository
{ {
/// <summary> /// <summary>
/// T_EnrollmentPlanedescRepository /// T_EnrollmentPlanedescRepository
/// </summary> /// </summary>
public class T_EnrollmentPlanedescRepository : BaseRepository<T_EnrollmentPlanedesc>, IT_EnrollmentPlanedescRepository public class T_EnrollmentPlanedescRepository : BaseRepository<T_EnrollmentPlanedesc>, IT_EnrollmentPlanedescRepository
{ {
public T_EnrollmentPlanedescRepository(IUnitOfWork unitOfWork) : base(unitOfWork) 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;
}
/// <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(!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,
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
})
.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))
};
} }
} }
} }

View File

@ -13,6 +13,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="LinqKit" Version="1.1.17" />
<PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.1.0" /> <PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.1.0" />
</ItemGroup> </ItemGroup>

View File

@ -22,12 +22,19 @@ namespace New_College.Services
private readonly IBaseRepository<T_EnrollmentPlane> _dal; private readonly IBaseRepository<T_EnrollmentPlane> _dal;
private readonly IT_EnrollmentPlaneRepository planeRepository; private readonly IT_EnrollmentPlaneRepository planeRepository;
private readonly ID_UniversityRepository d_University;
public T_EnrollmentPlaneServices(IBaseRepository<T_EnrollmentPlane> dal, IT_EnrollmentPlaneRepository t_EnrollmentPlaneRepository) private readonly ID_MajorRepository d_Major;
private readonly IT_EnrollmentBatchRepository t_EnrollmentBatch;
private readonly IT_EnrollmentPlanedescRepository t_EnrollmentPlanedesc;
public T_EnrollmentPlaneServices(IBaseRepository<T_EnrollmentPlane> dal, IT_EnrollmentPlaneRepository t_EnrollmentPlaneRepository, ID_UniversityRepository d_UniversityRepository, ID_MajorRepository d_MajorRepository, IT_EnrollmentBatchRepository t_EnrollmentBatchRepository, IT_EnrollmentPlanedescRepository t_EnrollmentPlanedescRepository)
{ {
this._dal = dal; this._dal = dal;
base.BaseDal = dal; base.BaseDal = dal;
this.planeRepository = t_EnrollmentPlaneRepository; this.planeRepository = t_EnrollmentPlaneRepository;
this.d_University = d_UniversityRepository;
this.d_Major = d_MajorRepository;
this.t_EnrollmentBatch = t_EnrollmentBatchRepository;
this.t_EnrollmentPlanedesc = t_EnrollmentPlanedescRepository;
} }
/// <summary> /// <summary>
@ -41,10 +48,69 @@ namespace New_College.Services
return await this.planeRepository.GetEnrollmentPlans(request); return await this.planeRepository.GetEnrollmentPlans(request);
} }
//public Task<bool> Import() //2020 最低录取分数导入
//{ public async Task<bool> Import()
// throw new NotImplementedException(); {
//} var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\一草一木\\山东2020年招生录取数据.xlsx");
if (dataSet.Tables.Count > 0)
{
var universitylist = await this.d_University.Query(x => x.IsDelete == false);
var majorlist = await this.d_Major.Query(x => x.IsDelete == false);
var batchlist = await this.t_EnrollmentBatch.Query(x => x.IsDelete == false);
var planinfo =
await this.t_EnrollmentPlanedesc.Query(e => e.PlanId == 7);
List<T_EnrollmentPlanedesc> list = new List<T_EnrollmentPlanedesc>() { };
List<string> adduniversity = new List<string>() { };
foreach (DataRow dr in dataSet.Tables[0].Rows)
{
string schoolname = dr["院校名称"].ToString();
string area = dr["省份"].ToString();
string major = dr["专业"].ToString();
string batch = dr["批次"].ToString();
string lowerscore = dr["最低分"].ToString();
string lowerlevel = dr["最低位次"].ToString();
var universityid = universitylist.Where(x => x.Name == schoolname).Select(x => x.Id).FirstOrDefault();
if (universityid <= 0)
{
//记录学校 并添加
adduniversity.Add(schoolname);
continue;
}
var batchid = batchlist.Where(x => x.Batch_name == batch).Select(x => x.Id).FirstOrDefault();
var remake = "";
if (major.Contains("("))
{
int indexs = major.IndexOf("(");
remake = major.Substring(indexs);
major = major.Substring(0, indexs);
}
var majorid = majorlist.Where(x => x.Name == major).Select(x => x.Id).FirstOrDefault();
var planinfomodel = planinfo.Where(e => e.UniversityId == universityid && e.MajorId == majorid && e.BatchtypeId == batchid);
if (planinfomodel.Any())
{
var models = planinfomodel.FirstOrDefault();
models.scorepostion = Convert.ToInt32(lowerlevel);
models.Scoreline = Convert.ToInt32(lowerscore);
bool kk = await this.t_EnrollmentPlanedesc.Update(models);
}
}
// var cc = adduniversity;
// var count = await this.t_EnrollmentPlanedesc.Add(list);
}
return true;
}
#region 2019上海招生分数更新 #region 2019上海招生分数更新
///// <summary> ///// <summary>

View File

@ -81,70 +81,93 @@ namespace New_College.Services
/// <returns></returns> /// <returns></returns>
public async Task<PageModel<UniversityResult>> GetRecommendUniversity(RecommendUniversityQuery query) public async Task<PageModel<UniversityResult>> GetRecommendUniversity(RecommendUniversityQuery query)
{ {
var maxscore = query.Score + 10;
var minscore = query.Score - 10;
var descnear = await _dal.QuerySql("select Scoreline,UniversityId from T_EnrollmentPlanedesc where IsDelete=0 and Scoreline<=" + maxscore + " and Scoreline>" + minscore + "");
var nearids = descnear.Select(x => x.UniversityId).Distinct().ToList();
var desc = await _dal.QuerySql("select Scoreline,UniversityId from T_EnrollmentPlanedesc where IsDelete=0 and Scoreline<=" + maxscore + " and Scoreline>180"); return await t_EnrollmentPlanedesc.GetRecommendUniversity(query);
//降序求出所符合院校 //var maxscore = query.Score + 10;
var orderdesc = desc.OrderByDescending(x => x.Scoreline).Select(x => x.UniversityId).Distinct().ToList(); //var minscore = query.Score - 10;
var wheres = PredicateBuilder.New<D_University>(); //var custome = (await this._CustomerInfoRepository.QueryById(query.CustomerId));
wheres = wheres.And(x => x.IsDelete == false && orderdesc.Contains(x.Id));
if (!string.IsNullOrEmpty(query.AreaName) && query.AreaName != "全国")
wheres = wheres.And(x => x.Area_Name.Contains(query.AreaName));
if (query.SubjectLevel < 2)
wheres = wheres.And(x => x.Subject_Level == query.SubjectLevel);
if (query.Type >= 0)
wheres = wheres.And(x => x.Type == query.Type);
if (query.Nhef < 2)
wheres = wheres.And(x => x.Nhef == query.Nhef);
if (query.Sff < 2)
wheres = wheres.And(x => x.Sff == query.Sff);
if (query.Syl < 2)
wheres = wheres.And(x => x.Syl == query.Syl);
if (query.Nature > 0)
wheres = wheres.And(x => x.Nature == query.Nature);
var info = await d_UniversityRepository.QueryPage(wheres, query.PageIndex, query.PageSize, "Rank Asc"); //int planId = (await t_EnrollmentPlaneRepository.Query(e => e.Years == custome.Year && e.Area_Id == custome.AreaId)).FirstOrDefault().Id;
if (info.data.Count <= 0)
return new PageModel<UniversityResult>() { }; //StringBuilder sb = new StringBuilder();
var collectionuniversity = await d_UniversityCollectionRepository.Query(x => x.CustomerId == query.CustomerId && x.IsDelete == false); //sb.AppendFormat("select Scoreline,UniversityId from T_EnrollmentPlanedesc where IsDelete=0 and Scoreline<={0} and Scoreline>{1} and PlanId={2}", maxscore, minscore, planId);
List<UniversityResult> list = new List<UniversityResult>() { }; //if (!string.IsNullOrWhiteSpace(query.SubjectClaim))
foreach (var c in info.data) //{
{ // var sp = query.SubjectClaim.Split(",");
string attribute = ""; // sb.AppendFormat(" and ( ");
if (c.Nhef == 1) // for (var i = 0; i < sp.Length; i++)
attribute += "985"; // {
if (c.Sff == 1) // sb.AppendFormat(" SubjectClaim in('{0}') or ", sp[i]);
attribute += "211"; // }
if (c.Syl == 1)
attribute += "双一流"; // sb.AppendFormat(") ");
list.Add(new UniversityResult // sb = sb.Replace("or )", ")");
{ //}
Id = c.Id,
Name = c.Name,
Nature = c.Nature,
AscriptionName = c.AscriptionName, //var desc = await _dal.QuerySql(sb.ToString());
AreaName = c.Area_Name, ////降序求出所符合院校
Logo = c.Logo, //var orderdesc = desc.OrderByDescending(x => x.Scoreline).Select(x => x.UniversityId).Distinct().ToList();
Syl = c.Syl == 1 ? true : false, //var nearids = desc.Select(x => x.UniversityId).Distinct().ToList();
Nhef = c.Nhef == 1 ? true : false,
Sff = c.Sff == 1 ? true : false, //var wheres = PredicateBuilder.New<D_University>();
UniversityType = c.Type, //wheres = wheres.And(x => x.IsDelete == false && orderdesc.Contains(x.Id));
IsNearScore = nearids.Contains(c.Id), //if (!string.IsNullOrEmpty(query.AreaName) && query.AreaName != "全国")
IsContrast = collectionuniversity.Count(x => x.Type == 2 && x.UniversityId == c.Id) > 0 // wheres = wheres.And(x => x.Area_Name.Contains(query.AreaName));
}); //if (query.SubjectLevel < 2)
} // wheres = wheres.And(x => x.Subject_Level == query.SubjectLevel);
return new PageModel<UniversityResult>() //if (query.Type >= 0)
{ // wheres = wheres.And(x => x.Type == query.Type);
data = list, //if (query.Nhef < 2)
dataCount = info.dataCount, // wheres = wheres.And(x => x.Nhef == query.Nhef);
page = info.page, //if (query.Sff < 2)
pageCount = info.pageCount, // wheres = wheres.And(x => x.Sff == query.Sff);
PageSize = info.PageSize //if (query.Syl < 2)
}; // wheres = wheres.And(x => x.Syl == query.Syl);
//if (query.Nature > 0)
// wheres = wheres.And(x => x.Nature == query.Nature);
//var info = await d_UniversityRepository.QueryPage(wheres, query.PageIndex, query.PageSize, "Rank Asc");
//if (info.data.Count <= 0)
// return new PageModel<UniversityResult>() { };
//var collectionuniversity = await d_UniversityCollectionRepository.Query(x => x.CustomerId == query.CustomerId && x.IsDelete == false);
//List<UniversityResult> list = new List<UniversityResult>() { };
//foreach (var c in info.data)
//{
// string attribute = "";
// if (c.Nhef == 1)
// attribute += "985";
// if (c.Sff == 1)
// attribute += "211";
// if (c.Syl == 1)
// attribute += "双一流";
// list.Add(new UniversityResult
// {
// Id = c.Id,
// Name = c.Name,
// Nature = c.Nature,
// AscriptionName = c.AscriptionName,
// AreaName = c.Area_Name,
// Logo = c.Logo,
// Syl = c.Syl == 1 ? true : false,
// Nhef = c.Nhef == 1 ? true : false,
// Sff = c.Sff == 1 ? true : false,
// UniversityType = c.Type,
// IsNearScore = nearids.Contains(c.Id),
// IsContrast = collectionuniversity.Count(x => x.Type == 2 && x.UniversityId == c.Id) > 0
// });
//}
//return new PageModel<UniversityResult>()
//{
// data = list,
// dataCount = info.dataCount,
// page = info.page,
// pageCount = info.pageCount,
// PageSize = info.PageSize
//};
} }
/// <summary> /// <summary>