NewGaoKaoApi/New_College.Repository/BASE/D_PlanMajorDescProRepositor...

100 lines
4.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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.Linq.Expressions;
using System.Linq;
using System;
using System.Threading.Tasks;
using MathNet.Numerics.Statistics.Mcmc;
using System.Collections.Generic;
namespace New_College.Repository
{
/// <summary>
/// D_PlanMajorDescProRepository
/// </summary>
public class D_PlanMajorDescProRepository : BaseRepository<D_PlanMajorDescPro>, ID_PlanMajorDescProRepository
{
public D_PlanMajorDescProRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
/// <summary>
///
/// </summary>
/// <param name="majorDescs"></param>
/// <returns></returns>
public async Task<bool> Batchupdate(List<D_PlanMajorDescPro> majorDescs)
{
// int k = this.Db.Updateable(majorDescs).ExecuteCommand();
// this.Db.Fastest<D_PlanMajorDesc>().BulkUpdate(GetList()) //适合大批量更新
var kk = await this.Db.Fastest<D_PlanMajorDescPro>().BulkUpdateAsync(majorDescs);
return kk > 0;
}
public async Task<PageModel<UniversityPlanProView>> GetUniversityPlanPro(UniversityProViewQuery request)
{
RefAsync<int> totalCount = 0;
var pageresult = new PageModel<UniversityPlanProView>();
request.Year = request.Year > 2024 ? 2024 : request.Year;
var pagelist = await this.Db.Queryable<D_PlanMajorDescPro>()
.Where(c => c.Location == request.Location)
.Where(c => c.Years == request.Year)
.Where(c => !string.IsNullOrWhiteSpace(c.Logo))
.WhereIF(request.Sff.HasValue, c => c._211 == (request.Sff == 1 ? "是" : "否"))
.WhereIF(request.Nhef.HasValue, c => c._985 == (request.Nhef == 1 ? "是" : "否"))
.WhereIF(request.Syl.HasValue, c => c._SYL == (request.Syl == 1 ? "是" : "否"))
.WhereIF(request.Nature != null && request.Nature.Any(), x => SqlFunc.ContainsArray(request.Nature, x.Nature))
.WhereIF(request.AreaName != null && request.AreaName.Any() && !request.AreaName.Contains("全国"),
x => SqlFunc.ContainsArray(request.AreaName, x.AreaName))
.WhereIF(request.SubjectLevel.HasValue, c => c.EducationCategory == (request.SubjectLevel == 1 ? "本科" : "专科"))
.WhereIF(!string.IsNullOrWhiteSpace(request.Name), c => SqlFunc.Contains(c.UniversityName, request.Name))
// ✅ 关键:只按学校聚合(必要时带上地区)
.GroupBy(c => new { c.UId, c.UniversityName, c.AreaName })
.Select(c => new UniversityPlanProView
{
UId = c.UId,
Name = c.UniversityName,
AreaName = c.AreaName,
// 其它字段用聚合“取一个值”
Nature = SqlFunc.AggregateMax(c.Nature),
_985 = SqlFunc.AggregateMax(c._985),
_211 = SqlFunc.AggregateMax(c._211),
_SYL = SqlFunc.AggregateMax(c._SYL),
UniversityType = SqlFunc.AggregateMax(c.SchoolType),
SubjectLevel = SqlFunc.AggregateMax(c.EducationCategory),
Logo = SqlFunc.AggregateMax(c.Logo),
Web = SqlFunc.AggregateMax(c.Web),
Rank = SqlFunc.AggregateMax(c.Rank),
// ✅ 计划数合并
ALLCount = SqlFunc.AggregateSum(c.PlanCount),
// ⚠️ 你这里的 MajorCount 目前写法“数的是行数”,不一定等于专业数
// 如果表里每行就是一个专业,那用 Count() OK否则要 CountDistinct(专业ID/专业名)
MajorCount = SqlFunc.AggregateCount(1),
NewCount = SqlFunc.AggregateSum(c.NewCount),
})
.OrderBy(k => k.UId, OrderByType.Asc)
.ToPageListAsync(request.PageIndex, request.PageSize, totalCount);
pageresult.pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / request.PageSize.ObjToDecimal())).ObjToInt();
pageresult.page = request.PageIndex;
pageresult.data = pagelist;
pageresult.dataCount = totalCount;
pageresult.PageSize = request.PageSize;
return pageresult;
}
}
}