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 { /// ///院校扩缩招 /// [AllowAnonymous] [ApiDescriptionSettings(ApplicationConst.ZYGroupName, Order = 900)] [Route("api/admissionstreds")] public class ZYAdmissionsTrendsService : IDynamicApiController, ITransient { private readonly IMongoDBRepository _mongoRepository; public ZYAdmissionsTrendsService(IMongoDBRepository mongoDBRepository) { _mongoRepository = mongoDBRepository; } /// /// 院校扩缩招同步服务 /// /// /// [DisplayName("院校扩缩招同步服务"), HttpPost] public async Task> 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(); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var bejson = dbclient.GetCollection("university"); // 动态条件列表 var filterBuilders = new List>(); if (!string.IsNullOrWhiteSpace(request.keyword)) { filterBuilders.Add(Builders.Filter.Regex(p => p.name, new BsonRegularExpression($"/{request.keyword}/"))); } if (request.level.HasValue) { filterBuilders.Add(Builders.Filter.Eq("level", request.level.Value)); } if (request.provinceName != null && request.provinceName.Count() > 0)//省份 { filterBuilders.Add(Builders.Filter.In(p => p.provinceName, request.provinceName)); } if (request.nature != null && request.nature.Count() > 0)//包含--公办 民办 { filterBuilders.Add(Builders.Filter.In(p => p.nature, request.nature)); } if (request.utype != null && request.utype.Count() > 0)//包含--院校类型 综合 理工 { filterBuilders.Add(Builders.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.Filter.AnyIn(p => p.features, request.feature)); } // 使用And组合所有过滤条件 FilterDefinition filter = filterBuilders.Count > 0 ? Builders.Filter.And(filterBuilders) : new BsonDocument(); // 如果没有条件,则使用空过滤器 // 你可以根据需要添加排序字段 var sort = Builders.Sort.Ascending(x => x._id); // 替换YourField为实际的排序字段 // 创建分页对象并获取分页数据 var pagination = new MongoPagination(bejson, filter, sort, request.PageSize, request.PageIndex); var (items, totalCount, totalPages) = await pagination.GetPagedDataAsync(); var oldtrendjson = dbclient.GetCollection($"zsplanpro_{request.locationCode}_{year - 1}"); var newtrendjson = dbclient.GetCollection($"zsplanpro_{request.locationCode}_{year}"); var trendfilterBuilders = new List>(); if (items.Count() > 0) { var uids = items.Select(s => s._id).ToList(); trendfilterBuilders.Add(Builders.Filter.In("_uid", uids)); FilterDefinition trendfilter = filterBuilders.Count > 0 ? Builders.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($"zsadtrends_{request.locationCode}"); await newbeJson.InsertManyAsync(resultitems); return new PageBaseTrendsResult() { PageNo = request.PageIndex, PageSize = request.PageSize, TotalPage = totalPages, TotalRows = totalCount, TModel = zymodel, Rows = resultitems, }; } /// /// 院校扩缩招 /// /// /// [DisplayName("院校扩缩招"), HttpPost] public async Task> 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($"zsadtrends_{request.locationCode}"); // 动态条件列表 var filterBuilders = new List>(); if (!string.IsNullOrWhiteSpace(request.keyword)) { filterBuilders.Add(Builders.Filter.Regex(p => p.name, new BsonRegularExpression($"/{request.keyword}/"))); } if (request.level.HasValue) { filterBuilders.Add(Builders.Filter.Eq("level", request.level.Value)); } if (request.provinceName != null && request.provinceName.Count() > 0)//省份 { filterBuilders.Add(Builders.Filter.In(p => p.provinceName, request.provinceName)); } if (request.nature != null && request.nature.Count() > 0)//包含--公办 民办 { filterBuilders.Add(Builders.Filter.In(p => p.nature, request.nature)); } if (request.utype != null && request.utype.Count() > 0)//包含--院校类型 综合 理工 { filterBuilders.Add(Builders.Filter.AnyIn(p => p.utype, request.utype)); } if (request.feature != null && request.feature.Count() > 0) //985、211 { filterBuilders.Add(Builders.Filter.AnyIn(p => p.features, request.feature)); } // 使用And组合所有过滤条件 FilterDefinition filter = filterBuilders.Count > 0 ? Builders.Filter.And(filterBuilders) : new BsonDocument(); // 如果没有条件,则使用空过滤器 // 你可以根据需要添加排序字段 var sort = Builders.Sort.Ascending(x => x._id); // 替换YourField为实际的排序字段 // 创建分页对象并获取分页数据 var pagination = new MongoPagination(bejson, filter, sort, request.PageSize, request.PageIndex); var (items, totalCount, totalPages) = await pagination.GetPagedDataAsync(); return new PageBaseTrendsResult() { PageNo = request.PageIndex, PageSize = request.PageSize, TotalPage = totalPages, TotalRows = totalCount, TModel = zymodel, Rows = items, }; } /// /// 专业扩缩招 /// /// /// [DisplayName("专业扩缩招"), HttpGet] public async Task 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($"zsplanpro_{request.locationCode}_{result.Year - 1}"); var newtrendjson = dbclient.GetCollection($"zsplanpro_{request.locationCode}_{result.Year}"); var trendfilterBuilders = new List>(); trendfilterBuilders.Add(Builders.Filter.Eq(p => p._uid, request.uid)); FilterDefinition trendfilter = trendfilterBuilders.Count > 0 ? Builders.Filter.And(trendfilterBuilders) : new BsonDocument(); var oldtrend = await oldtrendjson.Find(trendfilter).ToListAsync(); var newtrend = await newtrendjson.Find(trendfilter).ToListAsync(); var items = new List(); 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; } } }