272 lines
13 KiB
C#
272 lines
13 KiB
C#
using DocumentFormat.OpenXml.Office2010.ExcelAc;
|
||
using DocumentFormat.OpenXml.Vml.Office;
|
||
using DocumentFormat.OpenXml.Wordprocessing;
|
||
using Elastic.Clients.Elasticsearch;
|
||
using Flurl;
|
||
using Flurl.Http;
|
||
using Flurl.Util;
|
||
using iText.Layout.Element;
|
||
using Microsoft.AspNetCore.Identity;
|
||
using Microsoft.Extensions.Caching.Distributed;
|
||
using Microsoft.Extensions.Caching.Memory;
|
||
using MongoDB.Bson;
|
||
using MongoDB.Driver;
|
||
using Newtonsoft.Json;
|
||
using RazorEngine.Compilation.ImpromptuInterface.InvokeExt;
|
||
using System.Collections.Generic;
|
||
|
||
namespace Admin.NET.Core.Service
|
||
{
|
||
|
||
|
||
|
||
/// <summary>
|
||
///院校扩缩招
|
||
/// </summary>
|
||
[AllowAnonymous]
|
||
[ApiDescriptionSettings(ApplicationConst.ZYGroupName, Order = 900)]
|
||
[Route("api/admissionstreds")]
|
||
public class ZYAdmissionsTrendsService : IDynamicApiController, ITransient
|
||
{
|
||
private readonly IMongoDBRepository _mongoRepository;
|
||
public ZYAdmissionsTrendsService(IMongoDBRepository mongoDBRepository)
|
||
{
|
||
_mongoRepository = mongoDBRepository;
|
||
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 院校扩缩招同步服务
|
||
/// </summary>
|
||
/// <param name="request"></param>
|
||
/// <returns></returns>
|
||
[DisplayName("院校扩缩招同步服务"), HttpPost]
|
||
public async Task<PageBaseTrendsResult<AdTrendsResponseDto, AdTrendsExtendDto>> SyncUniversity([FromBody] AdTrendsRequestDto request)
|
||
{
|
||
DateTime dt = DateTime.Now;
|
||
DateTime fixedDate = new DateTime(dt.Year, 7, 20); // 创建当前年份的7月20日
|
||
int year = dt > fixedDate ? dt.Year : dt.Year - 1; // 比较当前日期与固定日期
|
||
var zymodel = new AdTrendsExtendDto()
|
||
{
|
||
Year = year
|
||
};
|
||
var resultitems = new List<AdTrendsResponseDto>();
|
||
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
|
||
var bejson = dbclient.GetCollection<UniversityDto>("university");
|
||
// 动态条件列表
|
||
var filterBuilders = new List<FilterDefinition<UniversityDto>>();
|
||
if (!string.IsNullOrWhiteSpace(request.keyword))
|
||
{
|
||
filterBuilders.Add(Builders<UniversityDto>.Filter.Regex(p => p.name, new BsonRegularExpression($"/{request.keyword}/")));
|
||
}
|
||
if (request.level.HasValue)
|
||
{
|
||
filterBuilders.Add(Builders<UniversityDto>.Filter.Eq("level", request.level.Value));
|
||
}
|
||
|
||
if (request.provinceName != null && request.provinceName.Count() > 0)//省份
|
||
{
|
||
filterBuilders.Add(Builders<UniversityDto>.Filter.In(p => p.provinceName, request.provinceName));
|
||
}
|
||
if (request.nature != null && request.nature.Count() > 0)//包含--公办 民办
|
||
{
|
||
filterBuilders.Add(Builders<UniversityDto>.Filter.In(p => p.nature, request.nature));
|
||
}
|
||
if (request.utype != null && request.utype.Count() > 0)//包含--院校类型 综合 理工
|
||
{
|
||
filterBuilders.Add(Builders<UniversityDto>.Filter.AnyIn(p => p.utype, request.utype));
|
||
}
|
||
//// 构建查询条件:SubItems数组中的某个元素的Description字段包含subItemDescriptionSubstring
|
||
//var subItemFilter = filterBuilder.ElemMatch(x => x.SubItems, filterBuilder.Regex(y => y.Description, new BsonRegularExpression($".*{subItemDescriptionSubstring}.*", "i")));
|
||
if (request.feature != null && request.feature.Count() > 0) //985、211
|
||
{
|
||
filterBuilders.Add(Builders<UniversityDto>.Filter.AnyIn(p => p.features, request.feature));
|
||
}
|
||
// 使用And组合所有过滤条件
|
||
FilterDefinition<UniversityDto> filter = filterBuilders.Count > 0
|
||
? Builders<UniversityDto>.Filter.And(filterBuilders)
|
||
: new BsonDocument(); // 如果没有条件,则使用空过滤器
|
||
// 你可以根据需要添加排序字段
|
||
var sort = Builders<UniversityDto>.Sort.Ascending(x => x._id); // 替换YourField为实际的排序字段
|
||
// 创建分页对象并获取分页数据
|
||
var pagination = new MongoPagination<UniversityDto>(bejson, filter, sort, request.PageSize, request.PageIndex);
|
||
var (items, totalCount, totalPages) = await pagination.GetPagedDataAsync();
|
||
var oldtrendjson = dbclient.GetCollection<PlanProResponseDto>($"zsplanpro_{request.locationCode}_{year - 1}");
|
||
var newtrendjson = dbclient.GetCollection<PlanProResponseDto>($"zsplanpro_{request.locationCode}_{year}");
|
||
|
||
var trendfilterBuilders = new List<FilterDefinition<PlanProResponseDto>>();
|
||
if (items.Count() > 0)
|
||
{
|
||
var uids = items.Select(s => s._id).ToList();
|
||
trendfilterBuilders.Add(Builders<PlanProResponseDto>.Filter.In("_uid", uids));
|
||
|
||
FilterDefinition<PlanProResponseDto> trendfilter = filterBuilders.Count > 0
|
||
? Builders<PlanProResponseDto>.Filter.And(trendfilterBuilders)
|
||
: new BsonDocument();
|
||
var oldtrend = await oldtrendjson.Find(trendfilter).ToListAsync();
|
||
var newtrend = await newtrendjson.Find(trendfilter).ToListAsync();
|
||
items.ForEach(a =>
|
||
{
|
||
resultitems.Add(new AdTrendsResponseDto()
|
||
{
|
||
belong = a.belong,
|
||
cityName = a.cityName,
|
||
collegeCode = a.collegeCode,
|
||
features = a.features,
|
||
level = a.level,
|
||
logo = a.logo,
|
||
name = a.name,
|
||
nature = a.nature,
|
||
provinceName = a.provinceName,
|
||
// batchName = newtrend.Any(e => e._uid == a._id) ? newtrend.Where(e => e._uid == a._id).FirstOrDefault().batchName : "",
|
||
rank = a.rank,
|
||
utype = a.utype,
|
||
_id = a._id,
|
||
PlanCount = newtrend.Any(e => e._uid == a._id) ? newtrend.Where(e => e._uid == a._id).Count() : 0,
|
||
OldPlan = oldtrend.Where(e => e._uid == a._id).Sum(s => s.plancount) ?? 0,
|
||
NewPlan = newtrend.Where(e => e._uid == a._id).Sum(s => s.plancount) ?? 0,
|
||
});
|
||
});
|
||
}
|
||
|
||
var newbeJson = dbclient.GetCollection<AdTrendsResponseDto>($"zsadtrends_{request.locationCode}");
|
||
await newbeJson.InsertManyAsync(resultitems);
|
||
return new PageBaseTrendsResult<AdTrendsResponseDto, AdTrendsExtendDto>()
|
||
{
|
||
PageNo = request.PageIndex,
|
||
PageSize = request.PageSize,
|
||
TotalPage = totalPages,
|
||
TotalRows = totalCount,
|
||
TModel = zymodel,
|
||
Rows = resultitems,
|
||
};
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 院校扩缩招
|
||
/// </summary>
|
||
/// <param name="request"></param>
|
||
/// <returns></returns>
|
||
|
||
[DisplayName("院校扩缩招"), HttpPost]
|
||
public async Task<PageBaseTrendsResult<AdTrendsResponseDto, AdTrendsExtendDto>> University([FromBody] AdTrendsRequestDto request)
|
||
{
|
||
DateTime dt = DateTime.Now;
|
||
DateTime fixedDate = new DateTime(dt.Year, 7, 20); // 创建当前年份的7月20日
|
||
int year = dt > fixedDate ? dt.Year : dt.Year - 1; // 比较当前日期与固定日期
|
||
var zymodel = new AdTrendsExtendDto()
|
||
{
|
||
Year = year
|
||
};
|
||
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
|
||
var bejson = dbclient.GetCollection<AdTrendsResponseDto>($"zsadtrends_{request.locationCode}");
|
||
// 动态条件列表
|
||
var filterBuilders = new List<FilterDefinition<AdTrendsResponseDto>>();
|
||
if (!string.IsNullOrWhiteSpace(request.keyword))
|
||
{
|
||
filterBuilders.Add(Builders<AdTrendsResponseDto>.Filter.Regex(p => p.name, new BsonRegularExpression($"/{request.keyword}/")));
|
||
}
|
||
if (request.level.HasValue)
|
||
{
|
||
filterBuilders.Add(Builders<AdTrendsResponseDto>.Filter.Eq("level", request.level.Value));
|
||
}
|
||
|
||
if (request.provinceName != null && request.provinceName.Count() > 0)//省份
|
||
{
|
||
filterBuilders.Add(Builders<AdTrendsResponseDto>.Filter.In(p => p.provinceName, request.provinceName));
|
||
}
|
||
if (request.nature != null && request.nature.Count() > 0)//包含--公办 民办
|
||
{
|
||
filterBuilders.Add(Builders<AdTrendsResponseDto>.Filter.In(p => p.nature, request.nature));
|
||
}
|
||
if (request.utype != null && request.utype.Count() > 0)//包含--院校类型 综合 理工
|
||
{
|
||
filterBuilders.Add(Builders<AdTrendsResponseDto>.Filter.AnyIn(p => p.utype, request.utype));
|
||
}
|
||
if (request.feature != null && request.feature.Count() > 0) //985、211
|
||
{
|
||
filterBuilders.Add(Builders<AdTrendsResponseDto>.Filter.AnyIn(p => p.features, request.feature));
|
||
}
|
||
// 使用And组合所有过滤条件
|
||
FilterDefinition<AdTrendsResponseDto> filter = filterBuilders.Count > 0
|
||
? Builders<AdTrendsResponseDto>.Filter.And(filterBuilders)
|
||
: new BsonDocument(); // 如果没有条件,则使用空过滤器
|
||
// 你可以根据需要添加排序字段
|
||
var sort = Builders<AdTrendsResponseDto>.Sort.Ascending(x => x._id); // 替换YourField为实际的排序字段
|
||
// 创建分页对象并获取分页数据
|
||
var pagination = new MongoPagination<AdTrendsResponseDto>(bejson, filter, sort, request.PageSize, request.PageIndex);
|
||
var (items, totalCount, totalPages) = await pagination.GetPagedDataAsync();
|
||
return new PageBaseTrendsResult<AdTrendsResponseDto, AdTrendsExtendDto>()
|
||
{
|
||
PageNo = request.PageIndex,
|
||
PageSize = request.PageSize,
|
||
TotalPage = totalPages,
|
||
TotalRows = totalCount,
|
||
TModel = zymodel,
|
||
Rows = items,
|
||
};
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/// <summary>
|
||
/// 专业扩缩招
|
||
/// </summary>
|
||
/// <param name="request"></param>
|
||
/// <returns></returns>
|
||
[DisplayName("专业扩缩招"), HttpGet]
|
||
public async Task<MajorAdTrendsResponseDto> Major([FromQuery] MajorAdTrendsRequestDto request)
|
||
{
|
||
var result = new MajorAdTrendsResponseDto();
|
||
DateTime dt = DateTime.Now;
|
||
DateTime fixedDate = new DateTime(dt.Year, 7, 20); // 创建当前年份的7月20日
|
||
result.Year = dt > fixedDate ? dt.Year : dt.Year - 1; // 比较当前日期与固定日期
|
||
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
|
||
var oldtrendjson = dbclient.GetCollection<PlanProResponseDto>($"zsplanpro_{request.locationCode}_{result.Year - 1}");
|
||
var newtrendjson = dbclient.GetCollection<PlanProResponseDto>($"zsplanpro_{request.locationCode}_{result.Year}");
|
||
var trendfilterBuilders = new List<FilterDefinition<PlanProResponseDto>>();
|
||
trendfilterBuilders.Add(Builders<PlanProResponseDto>.Filter.Eq(p => p._uid, request.uid));
|
||
FilterDefinition<PlanProResponseDto> trendfilter = trendfilterBuilders.Count > 0
|
||
? Builders<PlanProResponseDto>.Filter.And(trendfilterBuilders)
|
||
: new BsonDocument();
|
||
var oldtrend = await oldtrendjson.Find(trendfilter).ToListAsync();
|
||
var newtrend = await newtrendjson.Find(trendfilter).ToListAsync();
|
||
var items = new List<MajorAdTrendsItemResponseDto>();
|
||
newtrend.ForEach(a =>
|
||
{
|
||
items.Add(new MajorAdTrendsItemResponseDto()
|
||
{
|
||
MajorCode = a.majorcode,
|
||
MajorName = a.major,
|
||
Academic = a.academic,
|
||
BatchName = a.batchName,
|
||
Fee = a.fee,
|
||
MajorGroup = a.majorgroupname,
|
||
MajroRemark = a.remark,
|
||
NewPlan = a.plancount.Value,
|
||
Selectsubject = a.selectsubject,
|
||
OldPlan = oldtrend.Any(e => e.major.Trim() == a.major.Trim() && e._uid == a._uid && e.batchName == a.batchName) ? oldtrend.Where(e => e.major.Trim() == a.major.Trim() && e._uid == a._uid && e.batchName == a.batchName).First().plancount.Value : 0
|
||
});
|
||
});
|
||
result.items = items;
|
||
return result;
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
}
|
||
}
|