tuiwucarrer/Admin.NET/Admin.NET.Core/Service/ZYAdmissionsTrends/ZYAdmissionsTrendsService.cs

272 lines
13 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 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;
}
}
}