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;
}
}
}