using New_College.IServices; using New_College.Model.Models; using New_College.Services.BASE; using New_College.IRepository.Base; using System.Threading.Tasks; using New_College.Model.ViewModels; using New_College.Model; using SqlSugar; using System.Linq.Expressions; using System; using System.Linq; using New_College.Common; using New_College.IRepository; using LinqKit; using System.Collections.Generic; using New_College.Repository; using System.Data.Entity.Infrastructure; using NPOI.SS.Formula.Functions; using StackExchange.Profiling.Internal; using System.Collections; using System.Security.Claims; namespace New_College.Services { /// /// 填报数据整合 /// public class D_PlanMajorDescServices : BaseServices, ID_PlanMajorDescServices { private readonly IBaseRepository _dal; private readonly ID_QualificationLineRepository _qualificationLineRepository; private readonly ID_PlanMajorDescRepository _planMajorDescRepository; private readonly IT_BatchlineRepository _batchlineRepository; private readonly IT_TbSNeedDataInfoServices sNeedDataInfoServices; private readonly ID_UniversityServices _UniversityServices; private readonly IT_TbSNeedDataInfoPevServices t_TbSNeedDataInfoPev; public D_PlanMajorDescServices(IBaseRepository dal, ID_QualificationLineRepository d_QualificationLineRepository, ID_PlanMajorDescRepository planMajorDescRepository, IT_BatchlineRepository batchlineRepository, IT_TbSNeedDataInfoServices sNeedDataInfoServices, ID_UniversityServices d_UniversityServices, IT_TbSNeedDataInfoPevServices tbSNeedDataInfoPev) { this._dal = dal; base.BaseDal = dal; _qualificationLineRepository = d_QualificationLineRepository; _planMajorDescRepository = planMajorDescRepository; _batchlineRepository = batchlineRepository; this.sNeedDataInfoServices = sNeedDataInfoServices; _UniversityServices = d_UniversityServices; t_TbSNeedDataInfoPev = tbSNeedDataInfoPev; } /// /// 批量更新 /// /// /// public async Task Batchupdate(List majorDescs) { return await _planMajorDescRepository.Batchupdate(majorDescs); } public async Task GetAIPerview(OneSubmitGoRequest request) { request.subjecttype = request.SubjectClaim.Length == 2 ? request.SubjectClaim : "综合"; request.SubjectClaim = request.SubjectClaim.Length == 2 ? (request.SubjectClaim == "理科" ? "物,化,生" : "政,史,地") : request.SubjectClaim; var aidto = new AIPerviewDto(); //int startscore = request.Score - 60; //int endscore = request.Score + 15; //var claim = request.SubjectClaim.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList(); //var natureNames = NatureHelper.NatureNames(request.Nature); //Expression> expression = Expressionable.Create() // .And(c => c.Location == request.Location) // .And(c => c.SubjectType == subjecttype) // .AndIF(!string.IsNullOrWhiteSpace(request.Major), c => SqlFunc.Contains(c.MajorName, request.Major)) // .AndIF(!string.IsNullOrWhiteSpace(request.SubjectClaim), c => SqlFunc.Contains(c._23subject, claim[0]) || SqlFunc.Contains(c._23subject, claim[1]) || SqlFunc.Contains(c._23subject, claim[2]) || c._23subject == "不限") // .AndIF(!string.IsNullOrWhiteSpace(request.Province), c => SqlFunc.Contains(request.Province, c.Province)) // .AndIF(request.Syl.HasValue && request.Syl == 1, c => SqlFunc.Contains(c.LnstitutionalLevel, "双一流")) // .AndIF(request._211.HasValue && request._211 == 1, c => SqlFunc.Contains(c.LnstitutionalLevel, "211")) // .AndIF(request._985.HasValue && request._985 == 1, c => SqlFunc.Contains(c.LnstitutionalLevel, "985")) // .AndIF(!string.IsNullOrWhiteSpace(request.Ownership), c => c.Ownership == request.Ownership) // .AndIF(!string.IsNullOrWhiteSpace(request.Nature), c => SqlFunc.ContainsArray(natureNames, c.Nature)) // .AndIF(request.EndScore > request.StartScore, c => SqlFunc.Between(c._23Score, startscore, endscore)) // .ToExpression(); var baselist = await t_TbSNeedDataInfoPev.GetAIPerview(request); var querylist = baselist.Select(c => new TbSNeedDataInfoPerviewViewDto() { //ID = c.ID, LnstitutionalLevel = c.LnstitutionalLevel, UniversityName = c.UniversityName, Nature = c.Nature, _23SchoolScore = c._23SchoolScore, }).ToList(); var unlist = querylist.GroupBy(b => b.UniversityName).Select(c => new AIPerviewItemDto() { UniversityName = c.Key }).ToList(); //var mapunlist = unlist.Select(c => new AIPerviewItemDto //{ // LnstitutionalLevel = querylist.Where(e => e.UniversityName == c.UniversityName).FirstOrDefault().LnstitutionalLevel, // Nature = querylist.Where(e => e.UniversityName == c.UniversityName).FirstOrDefault().Nature, // UniversityName = querylist.Where(e => e.UniversityName == c.UniversityName).FirstOrDefault().UniversityName, // Type = MajorPlanScoreTool.GetPlanScore(int.Parse(querylist.Where(e => e.UniversityName == c.UniversityName).FirstOrDefault()._23SchoolScore), request.Score), //}).ToList(); unlist.AsParallel().ForAll(c => { c.LnstitutionalLevel = querylist.Where(e => e.UniversityName == c.UniversityName).FirstOrDefault().LnstitutionalLevel; c.Nature = querylist.Where(e => e.UniversityName == c.UniversityName).FirstOrDefault().Nature; c.UniversityName = querylist.Where(e => e.UniversityName == c.UniversityName).FirstOrDefault().UniversityName; c.Type = MajorPlanScoreTool.GetPlanScore(int.Parse(querylist.Where(e => e.UniversityName == c.UniversityName).FirstOrDefault()._23SchoolScore), request.Score); }); aidto.universities = new List() { new UniversityPerviewDto() { Name="985", Count=unlist.Where(e=>e.LnstitutionalLevel!=null&&e.LnstitutionalLevel.Contains("985")).Count(), }, new UniversityPerviewDto() { Name="211", Count=unlist.Where(e=>e.LnstitutionalLevel!=null&&e.LnstitutionalLevel.Contains("211")).Count(), }, new UniversityPerviewDto() { Name="双一流", Count=unlist.Where(e=>e.LnstitutionalLevel!=null&&e.LnstitutionalLevel.Contains("双一流")).Count(), }, new UniversityPerviewDto() { Name="保研资格", Count=unlist.Where(e=>e.LnstitutionalLevel!=null&&e.LnstitutionalLevel.Contains("保研资格")).Count(), }, new UniversityPerviewDto() { Name="公办", Count=unlist.Where(e=>e.Nature=="公办").Count(), }, new UniversityPerviewDto() { Name="民办", Count=unlist.Where(e=>e.Nature=="民办").Count(), }, }; aidto.pieChats = new List() { new PieChatsDto() { name="需冲刺", value=unlist.Where(e=>e.Type==2).Count() }, new PieChatsDto() { name="较稳妥", value=unlist.Where(e=>e.Type==1).Count() }, new PieChatsDto() { name="可保底", value=unlist.Where(e=>e.Type==0).Count() }, }; return aidto; } /// /// /// /// /// public async Task> GetAIGoList(OneSubmitGoRequest request) { var NatureNames = NatureHelper.NatureNames(request.Nature); request.PageSize = request.PageSize > 50 ? 50 : request.PageSize; var pagemodel = new AIGOPageModel(); int startscore = request.Score - 60; int endscore = request.Score + 15; int qyear = request.Year > 2024 ? 2024 : request.Year; string batchtypeName = request.SubjectClaim.Length > 2 ? "综合" : request.SubjectClaim; request.SubjectClaim = request.SubjectClaim.Length == 2 ? (request.SubjectClaim == "理科" ? "物,化,生" : "政,史,地") : request.SubjectClaim; var claim01 = ""; var claim02 = ""; var claim03 = ""; if (!string.IsNullOrWhiteSpace(request.SubjectClaim)) { var claim = request.SubjectClaim.Split(","); claim01 = claim[0]; claim02 = claim[1]; claim03 = claim[2]; } var batlist = await _batchlineRepository.Query(c => c.Year == qyear && c.AreaName == request.Location && c.IsDelete == false && c.Type_name == batchtypeName); if (request.Location == "河南省") { request.BatchName = batlist.Where(c => c.Average <= request.Score && c.Batch_name == "本科一批").Any() ? "本科一批" : batlist.Where(c => c.Average <= request.Score && c.Batch_name == "本科二批").Any() ? "本科二批" : "专科批"; } else if (request.Location == "上海市") { request.BatchName = batlist.Where(c => c.Average <= request.Score && c.Batch_name == "本科").Any() ? "本科" : "专科"; } else { request.BatchName = batlist.Where(c => c.Average <= request.Score && c.Batch_name == "普通类一段").Any() ? "普通类一段" : "普通类二段"; } qyear = qyear > 2023 ? 2023 : qyear; Expression> expression = Expressionable.Create() .And(c => c.Years == qyear) .And(c => c.IsDelete == false) .And(c => c.Location == request.Location) .AndIF(!string.IsNullOrWhiteSpace(request.BatchName), c => c.BatchName.Equals(request.BatchName)) .AndIF(!string.IsNullOrWhiteSpace(request.Name), c => SqlFunc.Contains(c.UniversityName, request.Name)) .AndIF(!string.IsNullOrWhiteSpace(request.Province), c => SqlFunc.Contains(request.Province, c.AreaName)) .AndIF(!string.IsNullOrWhiteSpace(request.SchoolType), c => c.SubjectType == batchtypeName) //.AndIF(request.Score > 0 && (request.EndScore <= endscore && request.StartScore >= startscore), c => SqlFunc.Between(c.LowScore, startscore, endscore)) //.AndIF(request.EndScore > endscore || request.StartScore < startscore, c => SqlFunc.Between(c.LowScore, request.StartScore, request.EndScore)) .AndIF(request.EndScore > request.StartScore, c => SqlFunc.Between(c.LowScore, request.StartScore, request.EndScore)) .AndIF(request.Syl.HasValue && request.Syl == 1, c => c._SYL == "是") .AndIF(request._211.HasValue && request._211 == 1, c => c._211 == "是") .AndIF(request._985.HasValue && request._985 == 1, c => c._985 == "是") .AndIF(!string.IsNullOrWhiteSpace(request.Ownership), c => c.Ownership == request.Ownership) .AndIF(!string.IsNullOrWhiteSpace(request.Nature), c => SqlFunc.ContainsArray(NatureNames, c.Nature)) // .AndIF(!string.IsNullOrWhiteSpace(request.Ascription), c => SqlFunc.Contains(request.Ascription, c.Ascription)) //暂缺军校此字段数据 .ToExpression(); //var query = await _qualificationLineRepository.QueryPage(expression, request.PageIndex, request.PageSize, " LowScoreRank desc "); var query = await _qualificationLineRepository.QueryPage(expression, request.PageIndex, request.PageSize, " LowScoreRank desc "); //var majorarry = query.data.Select(c => c.Major).Distinct().ToArray(); var universityarry = query.data.Select(c => c.UniversityName).Distinct().ToArray();// Expression> expression3 = Expressionable.Create() .And(c => c.Location == request.Location) .And(c => c.SubjectType == batchtypeName) .AndIF(!string.IsNullOrWhiteSpace(request.Major), c => SqlFunc.Contains(c.MajorName, request.Major)) // .AndIF(!string.IsNullOrWhiteSpace(request.SubjectClaim), c => SqlFunc.Contains(c.SelectSubject, request.SubjectClaim)) //此条件不带 .AndIF(!string.IsNullOrWhiteSpace(request.SubjectClaim), c => (!SqlFunc.Contains(c._24subject, "&") && SqlFunc.Contains(c._24subject, claim01) || SqlFunc.Contains(c._24subject, claim02) || SqlFunc.Contains(c._24subject, claim03) || c._24subject == "不限") || (SqlFunc.Contains(c._24subject, "&") && SqlFunc.Contains(c._24subject, claim01) && SqlFunc.Contains(c._24subject, claim02) && SqlFunc.Contains(c._24subject, claim03)) ) //.AndIF(!string.IsNullOrWhiteSpace(request.BatchName), c => c.BatchName == request.BatchName) .AndIF(!string.IsNullOrWhiteSpace(request.Province), c => SqlFunc.Contains(request.Province, c.Province)) // .AndIF(!string.IsNullOrWhiteSpace(request.SchoolType), c => c.SchoolType == request.SchoolType) .AndIF(request.Syl.HasValue && request.Syl == 1, c => SqlFunc.Contains(c.LnstitutionalLevel, "双一流")) .AndIF(request._211.HasValue && request._211 == 1, c => SqlFunc.Contains(c.LnstitutionalLevel, "211")) .AndIF(request._985.HasValue && request._985 == 1, c => SqlFunc.Contains(c.LnstitutionalLevel, "985")) .AndIF(!string.IsNullOrWhiteSpace(request.Ownership), c => c.Ownership == request.Ownership) .AndIF(!string.IsNullOrWhiteSpace(request.Nature), c => SqlFunc.ContainsArray(NatureNames, c.Nature)) .AndIF(universityarry.Any(), c => SqlFunc.ContainsArray(universityarry, c.UniversityName)) .AndIF(request.EndScore > request.StartScore, c => SqlFunc.Between(c._23Score, request.StartScore, request.EndScore)) .ToExpression(); var querylist = await this.sNeedDataInfoServices.Query(expression3); var responselist = query.data.Select(c => new AIGOResponse() { AreaName = c.AreaName, Rank = c.Rank > 9999 ? "--" : c.Rank.ToString(), _985 = c._985, _211 = c._211, _SYL = c._SYL, UniversityId = c.UId, UniversityName = c.UniversityName, UniversityCode = UniversityCodeConvertRules.UniversityCodeConvertRulesMap(c.RecruitCode.ToString()), collegeCode = c.RecruitCode.ToString(), LowScoreRank = c.LowScoreRank, Ownership = c.Ownership, Type = MajorPlanScoreTool.GetPlanScore(c.LowScore, request.Score),//冲稳保院校 Percentage = MajorPlanScoreTool.GetPlanPercentage(c.LowScore, request.Score), planCount = querylist.Where(w => w.UniversityName == c.UniversityName).Sum(c => c._plancount), }).OrderByDescending(c => c.Type).OrderBy(c => c.Percentage).ToList(); responselist.ToList().ForEach(c => { var items = querylist.Where(e => e.UniversityName == c.UniversityName); c._fcount = items.Select(e => int.Parse(e._23Count)).Sum(); c._scount = items.Select(e => int.Parse(e._22Count)).Sum(); c._tcount = items.Select(e => int.Parse(e._21Count)).Sum(); if (items.Any() && items.Count() > 0) { c._fscore = items.Min(e => int.Parse(e._23SchoolScore)); c._frank = items.Min(e => int.Parse(e._23SchoolScoreLine)); c._sscore = items.Min(e => int.Parse(e._22Score)); c._srank = items.Min(e => int.Parse(e._22ScoreLine)); c._tscore = items.Min(e => int.Parse(e._21Score)); c._trank = items.Min(e => int.Parse(e._21ScoreLine)); } c.iGoPlanMajorItems = items.Select(t => new AIGoPlanMajorItem() { PlanId = t.ID, MajorCode = t.MajorCode, fee = t.Fee, Major = t.MajorName, // MajorGroup = t.MajorGroup,//山东无专业组 MajorRemark = t.Remark, AcademicYear = t.AcademicYear, planCount = t._plancount, SubjectClam = t._23subject, Type = MajorPlanScoreTool.GetPlanScore(int.Parse(t._23Score), request.Score),//冲稳保院校 Percentage = MajorPlanScoreTool.GetPlanPercentage(int.Parse(t._23Score), request.Score), PlanItems = new List() { new PlanItem() { PlanCount=t._23Count, RankLine=t._23ScoreLine.ToString(), Scoreline=t._23Score, Year="2023" }, new PlanItem() { PlanCount=t._22Count, RankLine=t._22ScoreLine, Scoreline=t._22Score, Year="2022" }, new PlanItem() { PlanCount=t._21Count, RankLine=t._21ScoreLine, Scoreline=t._21Score, Year="2021" } } }).ToList(); }); //var list = responselist; return new AIGOPageModel() { data = responselist.Where(e => e.planCount > 0).ToList(), c = responselist.Where(c => c.Type == 2 && c.planCount > 0).Count(), w = responselist.Where(c => c.Type == 1 && c.planCount > 0).Count(), b = responselist.Where(c => c.Type == 0 && c.planCount > 0).Count(), dataCount = query.dataCount, page = query.page, pageCount = query.pageCount, PageSize = query.PageSize }; } /// /// 一键填报招生计划展示 /// /// /// public async Task> GetPlanMajorList(OneSubmitGoRequest request) { var pagemodel = new PageModel(); // var NatureNames = NatureHelper.NatureNames(request.Nature); var NatureNames = !string.IsNullOrWhiteSpace(request.Nature) ? request.Nature.Split(",") : null; request.PageSize = request.PageSize < 100 ? 100 : request.PageSize; string batchtypeName = request.SubjectClaim.Length == 2 ? request.SubjectClaim : "综合"; request.SubjectClaim = request.SubjectClaim.Length == 2 ? (request.SubjectClaim == "理科" ? "物,化,生" : "政,史,地") : request.SubjectClaim; var claim01 = ""; var claim02 = ""; var claim03 = ""; if (!string.IsNullOrWhiteSpace(request.SubjectClaim)) { var claim = request.SubjectClaim.Split(","); claim01 = claim[0]; claim02 = claim[1]; claim03 = claim[2]; } //request.PageSize = 150;//山东省 request.Year = request.Year > 2024 ? 2024 : request.Year; // var claim = request.SubjectClaim.Split(",", StringSplitOptions.RemoveEmptyEntries).ToList(); Expression> expression3 = Expressionable.Create() .And(c => c.Location == request.Location) .And(c => c.SubjectType == batchtypeName) .And(c => c._plancount > 0) .AndIF(request.Score > 0 && (request.BatchName.Contains("本科") || request.BatchName.Contains("一段")), c => c._23ScoreLine > 0) .AndIF(!string.IsNullOrWhiteSpace(request.SubjectClaim), c => (!SqlFunc.Contains(c._24subject, "&") && SqlFunc.Contains(c._24subject, claim01) || SqlFunc.Contains(c._24subject, claim02) || SqlFunc.Contains(c._24subject, claim03) || c._24subject == "不限") || (SqlFunc.Contains(c._24subject, "&") && SqlFunc.Contains(c._24subject, claim01) && SqlFunc.Contains(c._24subject, claim02) && SqlFunc.Contains(c._24subject, claim03)) ) .AndIF(!string.IsNullOrWhiteSpace(request.Major), c => SqlFunc.Contains(c.MajorName, request.Major)) .AndIF(!string.IsNullOrWhiteSpace(request.Province), c => SqlFunc.Contains(request.Province, c.Province)) //.AndIF(!string.IsNullOrWhiteSpace(request.SchoolType), c => c.SchoolType == request.SchoolType) .AndIF(request.Score > 0 && (request.BatchName.Contains("本科") || request.BatchName.Contains("一段")), c => SqlFunc.Between(c._23Score, request.Score - 60, request.Score + 15)) .AndIF(request.Score > 0 && (request.BatchName.Contains("专科") || request.BatchName.Contains("二段")), c => SqlFunc.Between(c._23Score, request.Score - 150, request.Score + 20)||c._23Score== "0") .AndIF(request.Syl.HasValue && request.Syl == 1, c => SqlFunc.Contains(c.LnstitutionalLevel, "双一流")) .AndIF(request._211.HasValue && request._211 == 1, c => SqlFunc.Contains(c.LnstitutionalLevel, "211")) .AndIF(request._985.HasValue && request._985 == 1, c => SqlFunc.Contains(c.LnstitutionalLevel, "985")) .AndIF(!string.IsNullOrWhiteSpace(request.Ownership), c => c.Ownership == request.Ownership) .AndIF(!string.IsNullOrWhiteSpace(request.Nature), c => SqlFunc.ContainsArray(NatureNames, c.Nature)) //.AndIF(request. > 0, c => SqlFunc.Between(c.LowScore, request.Score, request.Score)) 位次区间 .ToExpression(); var querylist = await this.sNeedDataInfoServices.Query(expression3); var universitymaps = (await _UniversityServices.Query(c => c.IsDelete == false)).Select(c => new D_University() { Id = c.Id, Name = c.Name, }).ToList(); var responselist = querylist.OrderBy(c => c._23ScoreLine).Select(c => new OneSubmitGoResponse() { AreaName = c.Province, fee = c.Fee, Major = c.MajorName, // MajorGroup = c.MajorGroup, AcademicYear = c.AcademicYear, MajorRemark = c.Remark, planCount = c._plancount, Ownership = c.Ownership, Rank = c.UniversityRank, _985 = c.LnstitutionalLevel != null ? (c.LnstitutionalLevel.Contains("985") ? "是" : "否") : "否", _211 = c.LnstitutionalLevel != null ? (c.LnstitutionalLevel.Contains("211") ? "是" : "否") : "否", _SYL = c.LnstitutionalLevel != null ? (c.LnstitutionalLevel.Contains("双一流") ? "是" : "否") : "否", UniversityId = universitymaps.Where(e => e.Name == c.UniversityName).Any() ? universitymaps.FirstOrDefault(e => e.Name == c.UniversityName).Id : 0, UniversityName = c.UniversityName, SubjectClam = c._23subject, Type = MajorPlanScoreTool.GetPlanScore(int.Parse(c._23Score), request.Score),//还缺冲稳保 Percentage = MajorPlanScoreTool.GetPlanPercentage(int.Parse(c._23Score), request.Score), PlanId = (int)c.ID, UniversityCode = c.EnrollmentCode, collegeCode = c.EnrollmentCode, MajorCode = c.MajorCode, LowScoreRank = int.Parse(c._23SchoolScoreLine), LowScore = int.Parse(c._23SchoolScore), PlanItems = new List() { new PlanItem() { PlanCount=c._23Count, RankLine=c._23ScoreLine.ToString(), Scoreline=c._23Score, Year="2023" }, new PlanItem() { PlanCount=c._22Count, RankLine=c._22ScoreLine, Scoreline=c._22Score, Year="2022" }, new PlanItem() { PlanCount=c._21Count, RankLine=c._21ScoreLine, Scoreline=c._21Score, Year="2021" }, } }).ToList(); //冲稳保比例--待定 var newlist = responselist.Where(c => c.Type == 2).OrderByDescending(c => c.SubjectClam).OrderByDescending(c => c.LowScore).Take(25).ToList(); newlist.AddRange(responselist.Where(c => c.Type == 1).OrderByDescending(c => c.SubjectClam).OrderByDescending(c => c.LowScore).Take(45).ToList()); newlist.AddRange(responselist.Where(c => c.Type == 0).OrderByDescending(c => c.SubjectClam).OrderByDescending(c => c.LowScore).Take(30).ToList()); pagemodel.page = request.PageIndex; pagemodel.data = newlist.OrderBy(c => c.Percentage).ToList(); pagemodel.dataCount = responselist.Count; pagemodel.PageSize = request.PageSize; pagemodel.pageCount = pagemodel.data.Count(); return pagemodel; } } }