100 lines
4.2 KiB
C#
100 lines
4.2 KiB
C#
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;
|
||
}
|
||
}
|
||
} |