using DocumentFormat.OpenXml.Office2013.Word; using MiniExcelLibs; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using MongoDB.Driver; // 确保使用这个命名空间 using MongoDB.Driver.Core; using MongoDB.Bson; using DocumentFormat.OpenXml.Spreadsheet; using SharpCompress.Common; using AngleSharp.Dom; using Flurl.Http; using static SKIT.FlurlHttpClient.Wechat.Api.Models.WxaBusinessGetLiveInfoResponse.Types; using Microsoft.AspNetCore.Http.HttpResults; using RazorEngine.Compilation.ImpromptuInterface.InvokeExt; using HtmlAgilityPack; using DocumentFormat.OpenXml.Wordprocessing; using Elastic.Clients.Elasticsearch.Requests; using MongoDB.Bson.IO; using System.Text.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; using AngleSharp.Text; using SqlSugar.Extensions; namespace Admin.NET.Core.Service; /// ///位次对应一分一段表融合数据模块 /// [ApiDescriptionSettings(ApplicationConst.ZYGroupName, Order = 900)] [Route("api/ZyFusionService")] public class ZYFusionService : IDynamicApiController, ITransient { private readonly IMongoDBRepository _mongoRepository; private readonly SqlSugarRepository _provinceInfo; private readonly string _uploadDirectory = Path.Combine(Directory.GetCurrentDirectory(), "uploads"); public ZYFusionService(IMongoDBRepository mongoDBRepository, SqlSugarRepository provinceInfo) { _mongoRepository = mongoDBRepository; _provinceInfo = provinceInfo; } /// /// 先上传excel 然后再通过唯一id传入逻辑计算(需要自己记住) /// /// /// [ApiDescriptionSettings(Name = "UploadExcel"), HttpPost] [DisplayName("UploadExcel")] public async Task UploadFile([Required] IFormFile file) { // 假设你把文件保存到服务器并返回一个文件 ID 或路径 // 确保上传目录存在 if (!Directory.Exists(_uploadDirectory)) { Directory.CreateDirectory(_uploadDirectory); } // 为文件生成唯一名称(避免文件名冲突) var uniqueFileName = $"{Guid.NewGuid()}_{file.FileName}"; var filePath = Path.Combine(_uploadDirectory, uniqueFileName); // 保存文件到指定路径 using (var fileStream = new FileStream(filePath, FileMode.Create)) { await file.CopyToAsync(fileStream); } // 返回文件路径或唯一标识符 return uniqueFileName; } /// /// 单纯招生计划数据导入 /// /// [ApiDescriptionSettings(Name = "SingleZsPlanExport"), HttpGet] public async Task ZsPlanExport([Required][FromQuery] ZYFusionRequestDto dto) { var zy_fusionlist = new List(); var filePath = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.FusionFilePath); //第一志愿投档表 var fusionlist = InputExcelUtil.InputExcel(filePath); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var newbejson = dbclient.GetCollection(string.Format("singlezsplan_{0}_{1}", dto.ProvinceCode, dto.Year)); fusionlist.ForEach(a => { zy_fusionlist.Add(new singlezsPlanmodel() { universityName = a.学校, enrollmentCode = a.全国统一招生代码, locationCode = dto.ProvinceCode, majorGroup = string.IsNullOrEmpty(a.专业组) ? "" : a.专业组, majorName = a.专业, majorCode = a.专业代码, plancount = string.IsNullOrEmpty(a.计划数) ? 0 : int.Parse(a.计划数), academicYear = a.学制, subjectClam = a.选科要求, batchName = a.批次, fee = a.学费, remark = a.专业备注, subjectType = a.科类 }); }); await newbejson.InsertManyAsync(zy_fusionlist); // 使用 MemoryStream 保存 Excel 数据 var stream = new MemoryStream(); // 异步创建 Excel 文件 await Task.Run(() => MiniExcel.SaveAs(stream, zy_fusionlist)); // 重置流的位置为开始 stream.Position = 0; var deletePath2 = Path.Combine(_uploadDirectory, dto.FusionFilePath); System.IO.File.Delete(deletePath2); // 返回 FileStreamResult,同时指定内容类型和文件名 return new FileStreamResult(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = string.Format("{0}_{1}_exprot.xlsx", dto.ProvinceCode, dto.Year) }; } /// /// 院校专业组批次线导入(不带院校组) /// /// /// [ApiDescriptionSettings(Name = "ExportExcel"), HttpGet] [DisplayName("ExportExcel")] public async Task Export([Required][FromQuery] ZYFusionRequestDto dto) { var zy_fusionlist = new List(); var filePath2 = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.FusionFilePath); //第一志愿投档表 var fusionlist = InputExcelUtil.InputExcel(filePath2); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var newbejson = dbclient.GetCollection(string.Format("fusion_{0}_{1}", dto.ProvinceCode, dto.Year)); var scoresetionjson = dbclient.GetCollection(string.Format("scoresection_{0}_{1}", dto.ProvinceCode, dto.Year)); var oneScorelist = await scoresetionjson.Find(new BsonDocument()).ToListAsync(); var oldjsons = await newbejson.Find(new BsonDocument()).ToListAsync(); fusionlist.ForEach(a => { if (!oldjsons.Any(e => e.UniversityName.Equals(a.院校名称.Trim()) && e.MajorName.Equals(a.专业名称.Trim()))) { var lowsectionscore = CalcuScoreFinder.FindScoreByRank(int.Parse(a.最低位次), oneScorelist); zy_fusionlist.Add(new ZyFusionResponseDto() { UniversityName = a.院校名称.Trim(), UniversityCode = a.院校代码, ProviceCode = dto.ProvinceCode, MajorGroupName = string.IsNullOrEmpty(a.专业组) ? "" : a.专业组.Trim(), MajorName = a.专业名称.Trim(), MajorCode = a.专业代码, PlanCount = int.Parse(a.投档计划数), LowSection = int.Parse(a.最低位次), LowScore = lowsectionscore }); } }); await newbejson.InsertManyAsync(zy_fusionlist); // 使用 MemoryStream 保存 Excel 数据 var stream = new MemoryStream(); // 异步创建 Excel 文件 await Task.Run(() => MiniExcel.SaveAs(stream, zy_fusionlist)); // 重置流的位置为开始 stream.Position = 0; var deletePath2 = Path.Combine(_uploadDirectory, dto.FusionFilePath); System.IO.File.Delete(deletePath2); // 返回 FileStreamResult,同时指定内容类型和文件名 return new FileStreamResult(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = string.Format("{0}_{1}_exprot.xlsx", dto.ProvinceCode, dto.Year) }; } /// /// 院校专业组批次线导入(带院校组) /// /// /// [ApiDescriptionSettings(Name = "ExportGroup"), HttpGet] [DisplayName("ExportGroup")] public async Task ExportGroup([Required][FromQuery] ZYFusionRequestDto dto) { var zy_fusionlist = new List(); var filePath2 = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.FusionFilePath); //愿投档表 var fusionlist = InputExcelUtil.InputExcel(filePath2); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var newbejson = dbclient.GetCollection(string.Format("fusion_{0}_{1}", dto.ProvinceCode, dto.Year)); var scoresetionjson = dbclient.GetCollection(string.Format("scoresection_{0}_{1}", dto.ProvinceCode, dto.Year)); var oneScorelist = await scoresetionjson.Find(new BsonDocument()).ToListAsync(); var oldjsons = await newbejson.Find(new BsonDocument()).ToListAsync(); fusionlist.ForEach(a => { if (!string.IsNullOrWhiteSpace(a.投档线)) { int touscore = a.投档线.Contains("及以上") ? 580 : int.Parse(a.投档线); int type = CalcuScoreFinder.ChangeSubjectName(a.类型); var lowpostion = CalcuScoreFinder.FindPostion(touscore, oneScorelist); zy_fusionlist.Add(new ZyFusionResponseDto { Type = type, LowScore = touscore, LowSection = lowpostion, UniversityCode = a.院校专业组代码, UniversityName = a.院校名称, MajorGroupName = a.院校专业组, ProviceCode = dto.ProvinceCode }); } }); await newbejson.InsertManyAsync(zy_fusionlist); // 使用 MemoryStream 保存 Excel 数据 var stream = new MemoryStream(); // 异步创建 Excel 文件 await Task.Run(() => MiniExcel.SaveAs(stream, zy_fusionlist)); // 重置流的位置为开始 stream.Position = 0; var deletePath2 = Path.Combine(_uploadDirectory, dto.FusionFilePath); System.IO.File.Delete(deletePath2); // 返回 FileStreamResult,同时指定内容类型和文件名 return new FileStreamResult(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = string.Format("{0}_{1}_exprot.xlsx", dto.ProvinceCode, dto.Year) }; } /// /// 河南招生计划最新数据更新特例(不通用) /// /// [ApiDescriptionSettings(Name = "HENANTSyncNewPlanData"), HttpGet] [DisplayName("HENANTSyncNewPlanData")] public async Task HENANTSyncNewPlanData([FromQuery] ZYFusionRequestDto dto) { var filePath2 = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.FusionFilePath); //投档表 var fusionlist = InputExcelUtil.InputExcel(filePath2); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var newbejson = dbclient.GetCollection(string.Format("zsplanpro_{0}_{1}", dto.ProvinceCode, dto.Year)); var universityjson = dbclient.GetCollection("university"); var universitylist = await universityjson.Find(new BsonDocument()).ToListAsync(); var zyfusionlist = await newbejson.Find(new BsonDocument()).ToListAsync(); var updateModels = new List>(); foreach (var item in zyfusionlist) { var matchingFusionItems = fusionlist.Where(f => f.全国统一招生代码.Trim() == item.universityCode && f.批次 == item.batchName && f.科类 == item.selectsubject && (f.专业代码 == item.majorcode) ).ToList(); if (matchingFusionItems.Count == 1) { var matchingItem = matchingFusionItems.First(); var newLowScore = int.Parse(matchingItem.最低分); var newLowSection = int.Parse(matchingItem.最低位次); var filter = Builders.Filter.Eq(x => x._id, item._id); var update = Builders.Update .Set(x => x.lowscore, newLowScore) .Set(x => x.lowscorerank, newLowSection); var updateModel = new UpdateOneModel(filter, update); updateModels.Add(updateModel); } } if (updateModels.Count > 0) { await newbejson.BulkWriteAsync(updateModels); } } /// /// 河南特例构造zsplanfusion /// /// /// [ApiDescriptionSettings(Name = "HNCreatezsplanfusion"), HttpGet] [DisplayName("HNCreatezsplanfusion")] public async Task HNCreatezsplanfusion([FromQuery] ZYFusionRequestDto dto) { var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var zsplanpro = dbclient.GetCollection(string.Format("zsplanpro_{0}_{1}", dto.ProvinceCode, dto.Year)); var newzsplanfusions = dbclient.GetCollection(string.Format("zsplanfusion_{0}_{1}", dto.ProvinceCode, dto.Year)); var zsplanprolist = await zsplanpro.Find(new BsonDocument()).ToListAsync(); var newfusionslist = new List(); var bejson = dbclient.GetCollection("zsplanfusion_410000"); var oldbaseuniversity = await bejson.Find(new BsonDocument()).ToListAsync(); int pid = 0; zsplanprolist.ForEach(a => { pid++; string subjecttype = a.selectsubject; var blist = oldbaseuniversity.Where(e => e.universityName == a.universityName && e.majorName == a.major && e.subjectType == a.selectsubject); var baseinfo = new OldzsplanfusionDto(); if (blist.Any()) { baseinfo = blist.FirstOrDefault(); newfusionslist.Add(new zsplanfusionDto() { pid = pid, city = blist.Any() ? baseinfo.city : "", educationCategory = blist.Any() ? baseinfo.educationCategory : "", enrollmentType = "普通计划", firstType = blist.Any() ? baseinfo.firstType : "", lnstitutionalLevel = blist.Any() ? baseinfo.lnstitutionalLevel : "", mjaorLevel = blist.Any() ? baseinfo.mjaorLevel : "", nature = blist.Any() ? baseinfo.nature : "", ownership = blist.Any() ? baseinfo.ownership : "", phDMajor = blist.Any() ? baseinfo.phDMajor : "", professionalAssessment = blist.Any() ? baseinfo.professionalAssessment : "", province = blist.Any() ? baseinfo.province : "", academicYear = a.academic, batchName = a.batchName, fee = a.fee, location = a.location, majorCode = a.majorcode, remark = a.remark, universityName = a.universityName, enrollmentCode = a.universityCode, subjectType = subjecttype, _24subject = a.selectsubject, _Score = a.lowscore, _ScoreLine = a.lowscorerank, majorName = baseinfo.majorName, majorGroup = baseinfo.majorGroup, _21Count = baseinfo._21Count, _21Score = baseinfo._21Score, _21ScoreLine = baseinfo._21ScoreLine, _22Count = baseinfo._22Count, _22Score = baseinfo._22Score, _22ScoreLine = baseinfo._22ScoreLine, _23Count = baseinfo._23Count, _23Score = baseinfo._23Score, _23ScoreLine = baseinfo._23ScoreLine, _23subject = baseinfo._23subject, }); } }); await newzsplanfusions.InsertManyAsync(newfusionslist); } /// /// 招生计划数据融合(河南)投档计划数加招生计划 /// /// /// [ApiDescriptionSettings(Name = "HeNanPlanProExport"), HttpGet] [DisplayName("HeNanPlanProExport")] public async Task HeNanPlanProExport([Required][FromQuery] ZsHeNanPlanProExcelRequestInput dto) { var zsplanpro = new List(); var filePath1 = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.fileName1); var sheetNames = MiniExcel.GetSheetNames(Path.Combine(_uploadDirectory, dto.fileName1)); string firstSheetName = sheetNames[0]; //第一志愿投档表 var toudanglist = InputExcelUtil.InputExcel(filePath1, firstSheetName); var filePath2 = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.fileName2); var sheetNames2 = MiniExcel.GetSheetNames(Path.Combine(_uploadDirectory, dto.fileName2)); string firstSheetName2 = sheetNames2[0]; //招生计划表 var zsplanslist = InputExcelUtil.InputExcel(filePath2, firstSheetName2); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var newbejson = dbclient.GetCollection(string.Format("zsplanpro_{0}_{1}", dto.ProvinceCode, dto.Year)); var universityjson = dbclient.GetCollection("university"); var universitylist = await universityjson.Find(new BsonDocument()).ToListAsync(); zsplanslist.ForEach(a => { var universityinfo = universitylist.Where(e => e.name == a.院校名称.Trim()); long _uid = universityinfo.Any() ? universityinfo.FirstOrDefault()._id : 0; var tongdang = toudanglist.Where(e => e.院校名称 == a.院校名称.Trim()); int lowscore = tongdang.Any() ? int.Parse(tongdang.FirstOrDefault().最低分) : 0; int lowsection = tongdang.Any() ? int.Parse(tongdang.FirstOrDefault().最低位次) : 0; zsplanpro.Add(new PlanProResponseDto() { academic = a.学制, batchName = a.批次, remark = a.选科要求,//河南招生计划无此列所以用选课代替备注 fee = a.学费, location = dto.ProvinceCode, major = a.专业名称, majorcode = a.专业代码, plancount = string.IsNullOrEmpty(a.计划人数) ? 0 : int.Parse(a.计划人数), universityName = a.院校名称.Trim(), universityCode = a.院校代码, selectsubject = a.类型, majorgroupname = string.Empty, _uid = _uid, years = a.年份, lowscore = lowscore, lowscorerank = lowsection }); }); await newbejson.InsertManyAsync(zsplanpro); var stream = new MemoryStream(); // 异步创建 Excel 文件 await Task.Run(() => MiniExcel.SaveAs(stream, zsplanpro)); // 重置流的位置为开始 stream.Position = 0; var deletePath1 = Path.Combine(_uploadDirectory, dto.fileName1); System.IO.File.Delete(deletePath1); var deletePath2 = Path.Combine(_uploadDirectory, dto.fileName2); System.IO.File.Delete(deletePath2); // 返回 FileStreamResult,同时指定内容类型和文件名 return new FileStreamResult(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = string.Format("zsplanpro_{0}_{1}_exprot.xlsx", dto.ProvinceCode, dto.Year) }; } /// /// 招生计划数据融合(不带专业组) /// /// [ApiDescriptionSettings(Name = "ZsPlanProExport"), HttpGet] [DisplayName("ZsPlanProExport")] public async Task ZsPlanProExport([Required][FromQuery] ZsPlanProExcelRequestInput dto) { var zsplanpro = new List(); var filePath = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.fileName); // 处理数据 var onelist = InputExcelUtil.InputExcel(filePath); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var zyfusionbejson = dbclient.GetCollection(string.Format("fusion_{0}_{1}", dto.ProvinceCode, dto.Year)); var zyfusionlist = await zyfusionbejson.Find(new BsonDocument()).ToListAsync(); var universityjson = dbclient.GetCollection("university"); var universitylist = await universityjson.Find(new BsonDocument()).ToListAsync(); var newbejson = dbclient.GetCollection(string.Format("zsplanpro_{0}_{1}", dto.ProvinceCode, dto.Year)); var oldjsons = await newbejson.Find(new BsonDocument()).ToListAsync(); onelist.ForEach(a => { var universityinfo = universitylist.Where(e => e.name == a.院校名称.Trim()); long _uid = universityinfo.Any() ? universityinfo.FirstOrDefault()._id : 0; var zyfusioninfo = zyfusionlist.Where(e => e.UniversityName == a.院校名称.Trim() && a.批次 == dto.BatchName && (e.MajorName.Contains(a.专业名称) || a.专业名称.Contains(e.MajorName))); int lowscore = zyfusioninfo.Any() ? zyfusioninfo.FirstOrDefault().LowScore : 0; int lowsection = zyfusioninfo.Any() ? zyfusioninfo.FirstOrDefault().LowSection : 0; if (!oldjsons.Any(e => e.universityName.Equals(a.院校名称.Trim()) && e.major.Equals(a.专业名称.Trim()) && e.batchName.Equals(a.批次))) { zsplanpro.Add(new PlanProResponseDto() { academic = a.学制, batchName = a.批次, remark = a.类型, fee = a.学费, location = dto.ProvinceCode, major = a.专业名称, majorcode = a.专业代码, plancount = string.IsNullOrEmpty(a.计划人数) ? 0 : int.Parse(a.计划人数), universityName = a.院校名称.Trim(), universityCode = a.院校代码, selectsubject = a.选科要求, majorgroupname = string.Empty, _uid = _uid, years = a.年份, lowscore = lowscore, lowscorerank = lowsection }); } }); await newbejson.InsertManyAsync(zsplanpro); // 使用 MemoryStream 保存 Excel 数据 var stream = new MemoryStream(); // 异步创建 Excel 文件 await Task.Run(() => MiniExcel.SaveAs(stream, zsplanpro)); // 重置流的位置为开始 stream.Position = 0; var deletePath1 = Path.Combine(_uploadDirectory, dto.fileName);//上传完了删除不需要的缓存文件 System.IO.File.Delete(deletePath1); // 返回 FileStreamResult,同时指定内容类型和文件名 return new FileStreamResult(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = string.Format("zsplanpro_{0}_{1}_exprot.xlsx", dto.ProvinceCode, dto.Year) }; } /// /// 招生计划数据融合(投档线没有专业的) /// /// /// [ApiDescriptionSettings(Name = "ZsShPlanProExport"), HttpGet] [DisplayName("ZsShPlanProExport")] public async Task ZsShPlanFusionModel([FromQuery] ZsPlanProExcelRequestInput dto) { var zsplanpro = new List(); var filePath = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.fileName); // 处理数据 var onelist = InputExcelUtil.InputExcel(filePath); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var zyfusionbejson = dbclient.GetCollection(string.Format("fusion_{0}_{1}", dto.ProvinceCode, dto.Year)); var zyfusionlist = await zyfusionbejson.Find(new BsonDocument()).ToListAsync(); var universityjson = dbclient.GetCollection("university"); var universitylist = await universityjson.Find(new BsonDocument()).ToListAsync(); var newbejson = dbclient.GetCollection(string.Format("zsplanpro_{0}_{1}", dto.ProvinceCode, dto.Year)); var oldjsons = await newbejson.Find(new BsonDocument()).ToListAsync(); onelist.ForEach(a => { var universityinfo = universitylist.Where(e => e.name == a.院校.Trim()); long _uid = universityinfo.Any() ? universityinfo.FirstOrDefault()._id : 0; var zyfusioninfo = new List(); int type = CalcuScoreFinder.ChangeSubjectName(a.类型); if (!string.IsNullOrWhiteSpace(a.专业组)) { zyfusioninfo = zyfusionlist.Where(e => e.UniversityName == a.院校.Trim() && e.UniversityCode == a.专业组 && e.Type == type).ToList(); } else { zyfusioninfo = zyfusionlist.Where(e => e.UniversityName == a.院校.Trim() && e.UniversityCode == a.院校代码 && e.Type == type).ToList(); } int lowscore = zyfusioninfo.Any() ? zyfusioninfo.FirstOrDefault().LowScore : 0; int lowsection = zyfusioninfo.Any() ? zyfusioninfo.FirstOrDefault().LowSection : 0; if (!oldjsons.Any(e => e.universityName.Equals(a.院校.Trim()))) { // string name = !string.IsNullOrWhiteSpace(a.专业组) ? string.Format("{0}({1})", a.院校, a.专业组.Substring(3, 2)) : ""; zsplanpro.Add(new PlanProResponseDto() { academic = a.学制, batchName = a.批次, remark = a.专业备注, fee = a.学费, location = dto.ProvinceCode, major = a.专业名称, majorcode = a.专业代码, plancount = string.IsNullOrEmpty(a.计划数) ? 0 : int.Parse(a.计划数), universityName = a.院校.Trim(), universityCode = a.院校代码, majorgroupname = a.专业组, selectsubject = a.科目要求, selecttype = type, _uid = _uid, years = dto.Year, lowscore = lowscore, lowscorerank = lowsection }); } }); await newbejson.InsertManyAsync(zsplanpro); // 使用 MemoryStream 保存 Excel 数据 var stream = new MemoryStream(); // 异步创建 Excel 文件 await Task.Run(() => MiniExcel.SaveAs(stream, zsplanpro)); // 重置流的位置为开始 stream.Position = 0; var deletePath1 = Path.Combine(_uploadDirectory, dto.fileName);//上传完了删除不需要的缓存文件 System.IO.File.Delete(deletePath1); // 返回 FileStreamResult,同时指定内容类型和文件名 return new FileStreamResult(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = string.Format("zsplanpro_{0}_{1}_exprot.xlsx", dto.ProvinceCode, dto.Year) }; } /// /// 融合总表数据 /// /// /// [ApiDescriptionSettings(Name = "ZsPlanFusionModel"), HttpGet] [DisplayName("ZsPlanFusionModel")] public async Task ZsPlanFusionModel([FromQuery] ZsPlanProExcelRequestInput dto) { var newlist = new List(); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var newplanmodels = dbclient.GetCollection(string.Format("zsplanfusionmodel_{0}_{1}", dto.ProvinceCode, dto.Year)); var zsplanfusionmodels = dbclient.GetCollection(string.Format("zsplanfusion_{0}_{1}", dto.ProvinceCode, dto.Year)); var zyfusionlist = await zsplanfusionmodels.Find(new BsonDocument()).ToListAsync(); var newbejson = dbclient.GetCollection(string.Format("zsplanpro_{0}_{1}", dto.ProvinceCode, dto.Year)); var oldplanpro = await newbejson.Find(new BsonDocument()).ToListAsync(); var universityjson = dbclient.GetCollection("university"); var universitylist = universityjson.Find(new BsonDocument()).ToList(); var namesjsons = dbclient.GetCollection("changeuniversityname_2024"); var nameslist = namesjsons.Find(new BsonDocument()).ToList(); zyfusionlist.ForEach(a => { var aa = nameslist; if (nameslist.Any(e => e.olduniversityName == a.universityName)) { a.universityName = nameslist.FirstOrDefault(e => e.olduniversityName.Equals(a.universityName)).newuniversityName; } }); int pid = 0; oldplanpro.ForEach(a => { pid++; var major = UtilExcelExt.RemoveBracketContent(a.major); var zzz = zyfusionlist.FirstOrDefault(b => b.universityName == a.universityName && (UtilExcelExt.RemoveBracketContent(b.majorName) == major || UtilExcelExt.AreBracketKeywordsFullyMatching(a.major, b.majorName))); var umodels = universitylist.Where(e => e.name == a.universityName).FirstOrDefault(); var models = new zsplanfusionmodel() { academicYear = a.academic, batchName = a.batchName, province = umodels?.provinceName, city = umodels?.cityName, educationCategory = umodels != null ? (umodels?.level == 0 ? "本科" : "专科") : "", enrollmentCode = a.universityCode, enrollmentType = zzz != null ? zzz?.enrollmentType : !string.IsNullOrWhiteSpace(a.remark) ? a.remark.Contains("中外") ? "中外合作" : "普通计划" : "普通计划", features = umodels?.features, fee = a.fee, firstType = zzz?.firstType, location = a.location, majorCode = a.majorcode, majorGroup = a?.majorgroupname, majorName = a.major, nature = umodels?.nature, pid = pid, universityName = a.universityName, remark = a?.remark, items = zzz != null ? new List() { new PlanItem(){ year="2023", count=zzz._23Count, planCount=zzz._23Count, rankLine=zzz._23ScoreLine, score = zzz._23Score, }, new PlanItem(){ year="2022", count=zzz._22Count, planCount=zzz._22Count, rankLine=zzz._22ScoreLine, score = zzz._22Score, }, new PlanItem(){ year="2021", count=zzz._21Count, planCount=zzz._21Count, rankLine=zzz._21ScoreLine, score = zzz._21Score, }, } : null, ownership = zzz?.ownership, phDMajor = zzz?.phDMajor, planCount = a.plancount.Value, professionalAssessment = zzz?.professionalAssessment, subjectType = (umodels != null && umodels.utype.Count() > 0) ? string.Join(',', umodels?.utype) : "", _24subject = a?.selectsubject, _23subject = zzz?._23subject, subjects = CalcuScoreFinder.GetSubjects(a?.selectsubject), _score = a.lowscore.Value, rankLine = a.lowscorerank.Value }; newlist.Add(models); }); newlist.ForEach(a => { if (a._score > 0) { a._schoolScore = newlist.Where(e => e.universityName == a.universityName).Min(s => s._score); a._schoolScoreLine = newlist.Where(e => e.universityName == a.universityName).Max(s => s.rankLine); a._schoolAvgScore = newlist.Where(e => e.universityName == a.universityName).Average(s => s._score).ToInt(); a._schoolAvgLine = newlist.Where(e => e.universityName == a.universityName).Average(s => s.rankLine).ToInt(); } }); await newplanmodels.InsertManyAsync(newlist); // 使用 MemoryStream 保存 Excel 数据 var stream = new MemoryStream(); // 异步创建 Excel 文件 await Task.Run(() => MiniExcel.SaveAs(stream, newlist)); // 重置流的位置为开始 stream.Position = 0; // 返回 FileStreamResult,同时指定内容类型和文件名 return new FileStreamResult(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = string.Format("zsplanpro_{0}_{1}_{2}.xlsx", dto.ProvinceCode, dto.Year, DateTime.Now.ToString("yyyyMMddHHssfff")) }; } /// /// 获取爬虫数据 /// /// [ApiDescriptionSettings(Name = "SyncZsGAOkaoSpNames"), HttpPost] [DisplayName("SyncZsGAOkaoSpNames")] public async Task SyncZsGAOkaoSpNames([FromBody] SpiderReuqestDto spider) { if (spider.year != "ycymedu") return; try { var signList = new string[] { "7566ed0f85620b2ee9209ffbcb1e3cf8", "5645e7fccefa6b00765bbce9410c2980", "dde40190bdada0441ccc2754f7745860", "4989a2c77678b43d07415517bc0e52b1", "8677cd6fac0669faed4bafd0a6bce3ab", "d6e067428e2280b5a4ea7cefbd6b3a28", "0e19fe352eaaf7986433630fe29d09f1", "24ca073fe53938fb44bb0546a34deeae" }; var dbClient = _mongoRepository.Context.GetDatabase("zhiyuan"); // string jsonString = await "https://api.static.ycymedu.com/api/v1/gaokaotype01.json".GetStringAsync(); string jsonString = await "https://api.static.ycymedu.com/api/v1/gaokaoplanrules.json".GetStringAsync(); var root = System.Text.Json.JsonSerializer.Deserialize(jsonString); var typeData = root?.data.newsdata.type; if (typeData == null) return; var universityCollection = dbClient.GetCollection("gaokaodatanames"); var gaokaoDataNames = await universityCollection.Find(FilterDefinition.Empty).ToListAsync(); var random = new Random(); foreach (var keyValue in typeData) { var keyParts = keyValue.Key.Split('_'); if (keyParts.Length != 2) continue; string locationCode = keyParts[0]; string year = keyParts[1]; string dbName = $"spnames_{locationCode}_{year}"; var newbeJson = dbClient.GetCollection(dbName); if (await newbeJson.Find(FilterDefinition.Empty).AnyAsync()) continue; var list = new List(); foreach (var localTypeId in keyValue.Value) { foreach (var school in gaokaoDataNames.OrderBy(e => e.school_id)) { try { string url = $"https://static-data.gaokao.cn/www/2.0/school/{school.school_id}/dic/specialplan.json?a=www.gaokao.cn"; string staticurl = await url.GetStringAsync(); // 反序列化 var result = JsonSerializer.Deserialize(staticurl); // 示例:取出某个省份的所有年份 var batchtypeitems = result?.data?.newsdata?.batch?.GetValueOrDefault($"{keyValue.Key}_{localTypeId}"); if (batchtypeitems == null) continue; foreach (var b in batchtypeitems) { int signIndex = random.Next(signList.Length); int delay = random.Next(1500, 2200); // 3~6秒随机间隔 await Task.Delay(delay); string baseUrl = $"https://api.zjzw.cn/web/api/?like_spname=&local_batch_id={b}&local_province_id={locationCode.Replace("0000", "")}&local_type_id={localTypeId}&page=1&school_id={school.school_id}&size=10&sp_xuanke=&special_group=&uri=apidata/api/gkv3/plan/school&year={year}&signsafe={signList[signIndex]}"; var sonamesresult = await baseUrl.GetStringAsync(); var spNamesObject = Newtonsoft.Json.JsonConvert.DeserializeObject(sonamesresult); if (spNamesObject?.code != "0000" || spNamesObject.data?.item == null) { } else { if (spNamesObject.data.item.Any()) { list.AddRange(spNamesObject.data.item); } // 计算总页数 int totalPages = (int)Math.Ceiling((double)spNamesObject.data.numFound / 10); for (int page = 2; page <= totalPages; page++) { try { await Task.Delay(random.Next(800, 1600)); // 再次延迟,防止请求过快 string pageUrl = $"https://api.zjzw.cn/web/api/?like_spname=&local_batch_id={b}&local_province_id={locationCode.Replace("0000", "")}&local_type_id={localTypeId}&page={page}&school_id={school.school_id}&size=10&sp_xuanke=&special_group=&uri=apidata/api/gkv3/plan/school&year={year}&signsafe={signList[signIndex]}"; var pageresult = await pageUrl.GetStringAsync(); var pageData = Newtonsoft.Json.JsonConvert.DeserializeObject(pageresult); if (pageData?.code == "0000" && pageData.data?.item != null) { list.AddRange(pageData.data.item); } } catch (Exception ex) { Console.WriteLine($"分页请求失败: {ex.Message},跳过 Page {page}"); } } } } ; } catch (Exception ex) { Console.WriteLine($"请求失败: {ex.Message},跳过当前 SchoolId {school.school_id}"); } } } if (list.Any()) { var university = dbClient.GetCollection("university"); var universitylist = await university.Find(new BsonDocument()).ToListAsync(); var universityDict = universitylist .Where(u => !string.IsNullOrEmpty(u.name)) .ToDictionary(u => u.name, u => u._id); list.ForEach(a => { a.school_id = universityDict.TryGetValue(a.name, out var universityId) ? universityId : 0; }); await newbeJson.InsertManyAsync(list); DingDingHook.DingTalkHookMessage("抓取数据成功!!", $"{dbName} 数据插入成功"); } // 每个大循环间隔一段时间,避免请求过于密集 await Task.Delay(1000); // 10 秒 } } catch (Exception ex) { Console.WriteLine($"抓取过程发生异常: {ex.Message}"); DingDingHook.DingTalkHookMessage("抓取数据异常!!", "抓取数据异常停止"); } } /// /// 抓取历年录取分数 /// /// /// [ApiDescriptionSettings(Name = "SyncZsGAOkaoSpNamesV2"), HttpPost] [DisplayName("SyncZsGAOkaoSpNamesV2")] public async Task SyncZsGAOkaoSpNamesV2([FromBody] SpiderReuqestDto spider) { if (spider.year != "ycymedu") return; try { var signList = new string[] { "7566ed0f85620b2ee9209ffbcb1e3cf8", "5645e7fccefa6b00765bbce9410c2980", "dde40190bdada0441ccc2754f7745860", "4989a2c77678b43d07415517bc0e52b1", "8677cd6fac0669faed4bafd0a6bce3ab", "d6e067428e2280b5a4ea7cefbd6b3a28", "0e19fe352eaaf7986433630fe29d09f1", "24ca073fe53938fb44bb0546a34deeae" }; var dbClient = _mongoRepository.Context.GetDatabase("zhiyuan"); string jsonString = await "https://api.static.ycymedu.com/api/v1/professionalscorerules.json".GetStringAsync(); //string jsonString = "{\"code\":\"0000\",\"message\":\"成功\",\"data\":{\"newsdata\":{\"type\":{\"31_2022\":[3],\"31_2021\":[3]}}}}"; var root = System.Text.Json.JsonSerializer.Deserialize(jsonString); var typeData = root?.data.newsdata.type; if (typeData == null) return; var universityCollection = dbClient.GetCollection("gaokaodatanames"); var gaokaoDataNames = await universityCollection.Find(FilterDefinition.Empty).ToListAsync(); var random = new Random(); foreach (var keyValue in typeData) { var keyParts = keyValue.Key.Split('_'); if (keyParts.Length != 2) continue; string locationCode = keyParts[0]; string year = keyParts[1]; string dbName = $"professionalscore_{locationCode}_{year}"; var newbeJson = dbClient.GetCollection(dbName); if (await newbeJson.Find(FilterDefinition.Empty).AnyAsync()) continue; var list = new List(); foreach (var localTypeId in keyValue.Value) { foreach (var school in gaokaoDataNames.OrderBy(e => e.school_id)) { try { string url = $"https://static-data.gaokao.cn/www/2.0/school/{school.school_id}/dic/professionalscore.json?a=www.gaokao.cn"; string staticurl = await url.GetStringAsync(); // 反序列化 var result = JsonSerializer.Deserialize(staticurl); // 示例:取出某个省份的所有年份 var batchtypeitems = result?.data?.newsdata?.batch?.GetValueOrDefault($"{keyValue.Key}_{localTypeId}"); if (batchtypeitems == null) continue; foreach (var b in batchtypeitems) { int signIndex = random.Next(signList.Length); int delay = random.Next(1500, 2200); // 3~6秒随机间隔 await Task.Delay(delay); string baseUrl = $"https://api.zjzw.cn/web/api/?like_spname=&local_batch_id={b}&local_province_id={locationCode.Replace("0000", "")}&local_type_id={localTypeId}&page=1&school_id={school.school_id}&size=10&sp_xuanke=&special_group=&uri=apidata/api/gk/score/special&year={year}&signsafe={signList[signIndex]}"; //https://api.zjzw.cn/web/api/?like_spname=&local_batch_id=10&local_province_id=31&local_type_id=3&page=1&school_id=669&sg_xuanke=&size=10&special_group=&uri=apidata/api/gk/score/special&year=2024&signsafe=fea045990c41860a270483168bd78b63 var sonamesresult = await baseUrl.GetStringAsync(); var spNamesObject = Newtonsoft.Json.JsonConvert.DeserializeObject(sonamesresult); if (spNamesObject?.code != "0000" || spNamesObject.data?.item == null) continue; if (spNamesObject.data.item.Any()) { list.AddRange(spNamesObject.data.item); } // 计算总页数 int totalPages = (int)Math.Ceiling((double)spNamesObject.data.numFound / 10); for (int page = 2; page <= totalPages; page++) { try { await Task.Delay(random.Next(800, 1600)); // 再次延迟,防止请求过快 string pageUrl = $"https://api.zjzw.cn/web/api/?like_spname=&local_batch_id={b}&local_province_id={locationCode.Replace("0000", "")}&local_type_id={localTypeId}&page={page}&school_id={school.school_id}&size=10&sp_xuanke=&special_group=&uri=apidata/api/gk/score/special&year={year}&signsafe={signList[signIndex]}"; var pageresult = await pageUrl.GetStringAsync(); var pageData = Newtonsoft.Json.JsonConvert.DeserializeObject(pageresult); if (pageData?.code == "0000" && pageData.data?.item != null) { list.AddRange(pageData.data.item); } } catch (Exception ex) { Console.WriteLine($"分页请求失败: {ex.Message},跳过 Page {page}"); } } } } catch (Exception ex) { Console.WriteLine($"请求失败: {ex.Message},跳过当前 SchoolId {school.school_id}"); } } } // } if (list.Any()) { var university = dbClient.GetCollection("university"); var universitylist = await university.Find(new BsonDocument()).ToListAsync(); var universityDict = universitylist .Where(u => !string.IsNullOrEmpty(u.name)) .ToDictionary(u => u.name, u => u._id); list.ForEach(a => { a.school_id = universityDict.TryGetValue(a.name, out var universityId) ? universityId : 0; }); await newbeJson.InsertManyAsync(list); DingDingHook.DingTalkHookMessage("抓取数据成功!!", $"{dbName} 数据插入成功"); } // 每个大循环间隔一段时间,避免请求过于密集 await Task.Delay(150000); // 10 秒 } } catch (Exception ex) { Console.WriteLine($"抓取过程发生异常: {ex.Message}"); DingDingHook.DingTalkHookMessage("抓取数据异常!!", "抓取数据异常停止"); } } /// /// 同步zsplanfusion_数据 /// /// /// [ApiDescriptionSettings(Name = "SyncXueXiaoGaokao"), HttpPost] [DisplayName("SyncXueXiaoGaokao")] public async Task SyncXueXiaoGaokao([FromBody] SpiderReuqestDto spider) { var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var xuexiaoDatu = dbclient.GetCollection("xuexingaokaouniveristys"); var universitychangeid = dbclient.GetCollection("universitychangeid"); var universitychangeidlist = await universitychangeid.Find(new BsonDocument()).ToListAsync(); if (spider.year == "ycymedu") { var xuelist = await xuexiaoDatu.Find(new BsonDocument()).ToListAsync(); var luqudataUrl = "http://api.xuexingaokao.com/api/tool/major/detail?"; string xid = spider.locationCode; var zsplanfusionmodels = dbclient.GetCollection($"zz_zsplanfusion_{xid}"); var newlist = new ConcurrentBag(); var semaphore = new SemaphoreSlim(5, 5); // 限制最多 5 个并行任务 var tasks = new List(); foreach (var u in xuelist) { tasks.Add(Task.Run(async () => { await semaphore.WaitAsync(); // 等待可用信号量 try { string mainUrl = $"{luqudataUrl}cid={u._id}&pro={xid}&year=&subject=&batch=×tamp={DateTimeOffset.Now.ToUnixTimeSeconds()}"; await Task.Delay(200); // 控制请求间隔 string mainRequest = await mainUrl.GetStringAsync(); var luqudata = Newtonsoft.Json.JsonConvert.DeserializeObject(mainRequest); if (luqudata?.code == 1 && luqudata.data.list.Any() && luqudata.data.configList.yearList.Any()) { foreach (var f in luqudata.data.configList.yearList) { foreach (var su in luqudata.data.configList.subjectList) { await Task.Delay(200); // 控制请求间隔 try { string detailUrl = $"{luqudataUrl}cid={u._id}&pro={xid}&year={f.year}&subject={su.subject_id}&batch=×tamp={DateTimeOffset.Now.ToUnixTimeSeconds()}"; string result = await detailUrl.GetStringAsync(); var luqudatay = Newtonsoft.Json.JsonConvert.DeserializeObject(result); if (luqudatay?.code == 1 && luqudatay.data.list.Any()) { var lulist = luqudatay.data.list.Select(s => new newZsplanfusionDto() { b_college_name = s.b_college_name, college_code = s.college_code, college_id = s.college_id, college_recruit_name = s.college_recruit_name, enroll_num = s.enroll_num, group_code = s.group_code, group_name = s.group_name, location = xid, major_code = s.major_code, major_memo = s.major_memo, major_name = s.major_name, post_score = s.post_score, post_score_grading = s.post_score_grading, rank_average = s.rank_average, rank_max = s.rank_max, rank_min = s.rank_min, score_average = s.score_average, score_max = s.score_max, score_min = s.score_min, second_subject = s.second_subject, subject_id = su.subject_id.ToString(), subject_name = su.subject_name, volunteer_type = s.volunteer_type, year = s.year }).ToList(); foreach (var item in lulist) { if (universitychangeidlist.Any(e => e.newid == item.college_id)) { item.college_id = universitychangeidlist.Where(e => e.newid == item.college_id).FirstOrDefault().yid; newlist.Add(item); } } } } catch (Exception ex) { Console.WriteLine($"请求失败,跳过:{ex.Message}"); } } } } } catch (Exception ex) { Console.WriteLine($"请求失败,跳过:{ex.Message}"); } finally { semaphore.Release(); // 释放信号量 } })); } await Task.WhenAll(tasks); // 确保 newlist 不为空再插入 if (!newlist.IsEmpty) { zsplanfusionmodels.InsertMany(newlist); } } } /// ///同步院校详情页面 /// /// /// [ApiDescriptionSettings(Name = "SyncXueXiaoUniversity"), HttpPost] [DisplayName("SyncXueXiaoUniversity")] public async Task SyncXueXiaoUniversity([FromBody] SpiderReuqestDto spider) { string luqudataUrl = "http://api.xuexingaokao.com/api/college/base_college/collegeDetail?"; var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var universitychangeid = dbclient.GetCollection("universitychangeid"); var universitydto = dbclient.GetCollection("university"); var universitychangeidlist = await universitychangeid.Find(new BsonDocument()).ToListAsync(); var universitylist = await universitydto.Find(new BsonDocument()).ToListAsync(); if (spider.year == "ycymedu") { var semaphore = new SemaphoreSlim(3); // 限制最多同时进行 3 个请求 var tasks = universitychangeidlist.Select(async a => { await semaphore.WaitAsync(); // 等待信号量 try { await Task.Delay(300); // 控制请求间隔,避免太快 string mainUrl = $"{luqudataUrl}college_id={a.newid}×tamp={DateTimeOffset.Now.ToUnixTimeSeconds()}"; string mainRequest = await mainUrl.GetStringAsync(); var luqudata = Newtonsoft.Json.JsonConvert.DeserializeObject(mainRequest); if (luqudata?.code == 1 && luqudata.data != null) { var result = luqudata.data; if (result.tag != null) { var filter = Builders.Filter.Eq(u => u._id, a.yid); var update = Builders.Update.Set(u => u.belong, result.tag.college_competent); await universitydto.UpdateOneAsync(filter, update); } } } catch (Exception ex) { Console.WriteLine($"请求失败 (college_id={a.newid}),跳过:{ex.Message}"); } finally { semaphore.Release(); // 释放信号量 } }); await Task.WhenAll(tasks); // 确保所有任务完成 } } /// /// 更新院校信息 /// /// [ApiDescriptionSettings(Name = "SyncUniversityInfoUpdate"), HttpPost] [DisplayName("SyncUniversityInfoUpdate")] public async Task SyncUniversityInfoUpdate() { var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var xuexiaoDatu = dbclient.GetCollection("xuexingaokaouniveristys"); var xuelist = await xuexiaoDatu.Find(new BsonDocument()).ToListAsync(); var university = dbclient.GetCollection("university"); var universitylist = await university.Find(new BsonDocument()).ToListAsync(); #region ################## 获取院校学院院系信息 ##################### //var facultys = dbclient.GetCollection("zfacultylist"); //var list = new List(); //var baseUrl = "https://static-data-ycymedu.oss-cn-shanghai.aliyuncs.com/college-faculty/"; //xuelist.ForEach(a => //{ // var goUrl = $"{baseUrl}{a._id}.json".SetJsonSerialization().GetAsAsync().Result; // if (goUrl.code == 1 && goUrl.data.facultyList.Any()) // { // var isany = universitylist.FirstOrDefault(e => e.name == goUrl.data.tag.college_name); // if (isany != null) // { // goUrl.data.facultyList.ForEach(f => // { // f._id = YitIdHelper.NextId(); // f.base_college_id = isany._id; // f.subject.Select(s => s.base_college_id = isany._id); // }); ; // var newmodels = goUrl.data.facultyList; // if (newmodels.Any()) // { // list.AddRange(newmodels); // } // } // } //}); //await facultys.InsertManyAsync(list); #endregion #region #####获取院校招生信息####### // var baseUrl = "https://static-data-ycymedu.oss-cn-shanghai.aliyuncs.com/college-recruitlist/"; // var recruits = dbclient.GetCollection("zrecruitlist"); // var relist = new List(); // xuelist.ForEach(a => // { // var goUrl = $"{baseUrl}{a._id}.json".SetJsonSerialization().GetAsAsync().Result; // if (goUrl.code == 1 && goUrl.data.recruit.Any()) // { // var isany = universitylist.FirstOrDefault(e => e.name == goUrl.data.tag.college_name); // if (isany != null) // { // goUrl.data.recruit.ForEach(f => // { // f.college_name = isany.name; // f.base_college_id = isany._id; // }); // relist.AddRange(goUrl.data.recruit); // } // } // }); //await recruits.InsertManyAsync(relist); #endregion #region 获取院校招生详情######### //var recruits = dbclient.GetCollection("zrecruitlist"); //var result = await recruits.Find(new BsonDocument()).ToListAsync(); //var baseUrl = "http://api.xuexingaokao.com/api/college/base_college/recruitDetail?recruit_id="; //var recruitdetail = dbclient.GetCollection("zrecruitdetail"); //var rdetail = await recruitdetail.Find(new BsonDocument()).ToListAsync(); //result.ForEach(a => //{ // try // { // if (!rdetail.Any(e => e.id == a.id)) // { // Thread.Sleep(150); // var goUrl = $"{baseUrl}{a.id}×tamp={DateTimeOffset.Now.ToUnixTimeSeconds()}".SetJsonSerialization().GetAsAsync().Result; // if (goUrl != null && goUrl.code == 1 && goUrl.data.recruit != null) // { // var isany = universitylist.FirstOrDefault(e => e.name == goUrl.data.recruit.college_name); // if (isany != null) // { // goUrl.data.recruit.base_college_id = isany._id; // recruitdetail.InsertOne(goUrl.data.recruit); // } // } // } // } // catch (Exception xx) // { // Console.WriteLine(xx.Message); // } //}); #endregion #region ########学科建设数据################# // SubjectIntroduceData var subjectIntroduceData = dbclient.GetCollection("zsubjectintroduces"); var subjUrl = "https://static-data-ycymedu.oss-cn-shanghai.aliyuncs.com/college-subjectIntroduce/"; xuelist.ForEach(a => { try { var goUrl = $"{subjUrl}{a._id}.json".GetJsonAsync().Result; if (goUrl.code == 1 && goUrl.data.data != null) { var isany = universitylist.FirstOrDefault(e => e.name == goUrl.data.tag.college_name); if (isany != null) { var datamodel = goUrl.data.data; datamodel.base_college_id = isany._id; subjectIntroduceData.InsertOne(datamodel); } } } catch (Exception ex) { Console.WriteLine(ex.Message); } }); #endregion } /// /// /// /// [ApiDescriptionSettings(Name = "SyncMajorInfoUpdate"), HttpPost] [DisplayName("SyncMajorInfoUpdate")] public async Task SyncMajorInfoUpdate() { var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var majorChild = dbclient.GetCollection("zmajorchild"); var list = new List(); #region #####################同步专业信息##################### //var majorRoot = dbclient.GetCollection("zmajorroots"); //var majorroots = await majorRoot.Find(new BsonDocument()).ToListAsync(); //var firstUrl = "https://gaokao.chsi.com.cn/zyk/zybk/xkCategory/"; //var scendUrl = "https://gaokao.chsi.com.cn/zyk/zybk/specialityesByCategory/"; //var majorChild = dbclient.GetCollection("zmajorchild"); //var majoritems = new List(); //majorroots.ForEach(a => //{ // a.majorMsgs.ForEach(c => // { // var majorMsglist = $"{firstUrl}{c.key}?_t={DateTimeOffset.Now.ToUnixTimeSeconds()}".SetJsonSerialization().GetAsAsync().Result; // if (majorMsglist.flag) // { // var items = new List(); // majorMsglist.msg.ForEach(m => // { // var newmosl = new GaokaoMajorMsgItems() // { // key = m.key, // name = m.name // }; // var url = $"{scendUrl}{m.key}?_t={DateTimeOffset.Now.ToUnixTimeSeconds()}"; // var majorMsgitems = url.SetJsonSerialization().GetAsAsync().Result; // if (majorMsgitems.flag) // { // newmosl.childMajors = majorMsgitems.msg.ToList(); // } // items.Add(newmosl); // }); // majoritems.Add(new GaoKaoMajorItemDto() // { // majorMsgs = items, // type = c.key // }); // } // }); //}); //await majorChild.InsertManyAsync(majoritems); #endregion #region #####专业详情###### // var majordetail = dbclient.GetCollection("zmajordetailmsg"); // var baseUrl = "https://gaokao.chsi.com.cn/zyk/zybk/specialityDetail/"; //var result = await majorChild.Find(new BsonDocument()).ToListAsync(); //result.ForEach(a => //{ // a.majorMsgs.ForEach(b => // { // b.childMajors.ForEach(c => // { // Thread.Sleep(120); // var gourl = $"{baseUrl}{c.specId}?_t={DateTimeOffset.Now.ToUnixTimeSeconds()}"; // var goresult = gourl.SetJsonSerialization().GetAsAsync().Result; // if (goresult.flag) // { // majordetail.InsertOne(goresult.msg); // } // }); // }); //}); #endregion #region ####专业详情关联课程###### //var majormap = dbclient.GetCollection("zkskcmajormap"); //var kskcUrl = "https://gaokao.chsi.com.cn/zyk/zybk/kskc/"; //var result = await majorChild.Find(new BsonDocument()).ToListAsync(); //result.ForEach(a => //{ // a.majorMsgs.ForEach(b => // { // b.childMajors.ForEach(c => // { // Thread.Sleep(120); // var gourl = $"{kskcUrl}{c.specId}?_t={DateTimeOffset.Now.ToUnixTimeSeconds()}"; // var goresult = gourl.SetJsonSerialization().GetAsAsync().Result; // if (goresult.flag) // { // var result = goresult.msg; // result.specId = c.specId; // majormap.InsertOne(result); // } // }); // }); //}); #endregion #region ########专业关联院校 //var majormap = dbclient.GetCollection("zksyxmajormap"); //var ksyxUrl = "https://gaokao.chsi.com.cn/zyk/zybk/ksyx?specId="; //var result = await majorChild.Find(new BsonDocument()).ToListAsync(); //result.ForEach(a => //{ // a.majorMsgs.ForEach(b => // { // b.childMajors.ForEach(c => // { // Thread.Sleep(120); // var gourl = $"{ksyxUrl}{c.specId}&_t={DateTimeOffset.Now.ToUnixTimeSeconds()}"; // var goresult = gourl.SetJsonSerialization().GetAsAsync().Result; // if (goresult.flag) // { // var result = goresult.msg; // result.specId = c.specId; // majormap.InsertOne(result); // } // }); // }); //}); #endregion #region ###########专业基础信息############## var majormap = dbclient.GetCollection("zbase_majors"); var base_subjectUrl = "http://api.xuexingaokao.com/api/college/base_subject/detail?type=0&code="; var result = await majorChild.Find(new BsonDocument()).ToListAsync(); var zbase_majors = await majormap.Find(new BsonDocument()).ToListAsync(); result.ForEach(a => { a.majorMsgs.ForEach(b => { b.childMajors.ForEach(c => { //var isexist = zbase_majors.Where(e => e.subject_code_three == c.zydm); //if (!isexist.Any()) //{ try { Thread.Sleep(120); var gourl = $"{base_subjectUrl}{c.zydm}×tamp={DateTimeOffset.Now.ToUnixTimeSeconds()}"; var goresult = gourl.GetJsonAsync().Result; if (goresult.code == 1 && goresult.data.subject != null) { goresult.data.subject.id = YitIdHelper.NextId(); majormap.InsertOne(goresult.data.subject); } } catch (Exception ex) { Console.WriteLine(ex.Message); } //} }); }); }); #endregion } /// /// /// /// /// [ApiDescriptionSettings(Name = "CombianGaokaoInfo"), HttpPost] [DisplayName("CombianGaokaoInfo")] public async Task CombianGaokaoInfo([FromBody] SpiderReuqestDto spider) { var list = new List(); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); string dbName = $"professionalscore_{spider.locationCode}_{spider.year}"; var professscorelist = dbclient.GetCollection(dbName); var professscoreresult = await professscorelist.Find(new BsonDocument()).ToListAsync(); string dbName2 = $"spnames_{spider.locationCode}_{spider.year}"; var spNamelist = dbclient.GetCollection(dbName2); var spNamelistresult = await spNamelist.Find(new BsonDocument()).ToListAsync(); var dbnewName = $"plannewcombiandata_{spider.locationCode}_{spider.year}"; var dbnewlist = dbclient.GetCollection(dbnewName); foreach (var item in spNamelistresult) { var pinfo = professscoreresult.Any(e => e.school_id == item.school_id && e.local_batch_name == item.local_batch_name && e.sp_name == item.sp_name && e.zslx_name == item.zslx_name) ? professscoreresult.First(e => e.school_id == item.school_id && e.local_batch_name == item.local_batch_name && e.sp_name == item.sp_name && e.zslx_name == item.zslx_name) : null; if (pinfo == null) { pinfo = professscoreresult.Any(e => e.school_id == item.school_id && e.local_batch_name == item.local_batch_name && e.level3_name == item.sp_name && e.zslx_name == item.zslx_name) ? professscoreresult.Where(e => e.school_id == item.school_id && e.local_batch_name == item.local_batch_name && e.level3_name == item.sp_name && e.zslx_name == item.zslx_name).OrderBy(e => e.min).FirstOrDefault() : null; //if (pinfo != null) //{ // var templist = professscoreresult.Where(e => e.school_id == item.school_id && e.local_batch_name == item.local_batch_name && e.level3_name == item.sp_name && e.zslx_name == item.zslx_name).ToList(); //} } list.Add(new plannewCombianData() { average = pinfo?.average, doublehigh = pinfo != null ? pinfo.doublehigh : 0, dual_class_name = pinfo?.dual_class_name, zslx_name = item.zslx_name, sp_name = item.sp_name, first_km = pinfo != null ? pinfo.first_km : 0, info = item.info, is_score_range = pinfo != null ? pinfo.is_score_range : 0, is_top = pinfo != null ? pinfo.is_top : 0, level2_name = item.level2_name, level3_name = item.level3_name, local_batch_name = item.local_batch_name, local_province_name = item.local_province_name, local_type_name = item.local_type_name, max = pinfo?.max, min = pinfo != null ? pinfo.min : 0, min_range = pinfo?.min_range, min_rank_range = pinfo?.min_rank_range, min_section = pinfo != null ? pinfo.min_section : 0, name = item.name, num = item.num, proscore = pinfo?.proscore, province_name = item.province_name, school_id = item.school_id, remark = item.remark, sg_fxk = item.sg_fxk, sg_info = item.sg_info, sg_name = item.sg_name, sg_sxk = item.sg_sxk, sg_type = item.sg_type, single = pinfo?.single, spcode = item.spcode, special_group = pinfo != null ? pinfo.special_group : 0, special_id = pinfo != null ? pinfo.special_id : 0, spe_id = pinfo != null ? pinfo.spe_id : 0, spname = item.spname, sp_fxk = item.sp_fxk, sp_info = item.sp_info, sp_scode = pinfo?.sp_scode, sp_sxk = item.sp_sxk, sp_type = pinfo != null ? pinfo.sp_type : 0, sp_xuanke = item.sp_sxk, tuition = item.tuition, year = pinfo != null ? pinfo.year : 0, }); } await dbnewlist.InsertManyAsync(list); } /// ///创建计划分数信息 /// /// /// [ApiDescriptionSettings(Name = "AddzsPlanNScores"), HttpPost] [DisplayName("AddzsPlanNScores")] public async Task AddzsPlanNScores([FromBody] SpiderReuqestDto spider) { var locationcode = spider.locationCode.Replace("0000", ""); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var professscorelist = dbclient.GetCollection($"professionalscore_{locationcode}_2024"); var professscoreresult = await professscorelist.Find(new BsonDocument()).ToListAsync(); var professscorelist2 = dbclient.GetCollection($"professionalscore_{locationcode}_2023"); var professscoreresult2 = await professscorelist2.Find(new BsonDocument()).ToListAsync(); var professscorelist3 = dbclient.GetCollection($"professionalscore_{locationcode}_2022"); var professscoreresult3 = await professscorelist3.Find(new BsonDocument()).ToListAsync(); var professscorelist4 = dbclient.GetCollection($"professionalscore_{locationcode}_2021"); var professscoreresult4 = await professscorelist4.Find(new BsonDocument()).ToListAsync(); var planspnames2 = dbclient.GetCollection($"spnames_{locationcode}_2023"); var planspnames3 = dbclient.GetCollection($"spnames_{locationcode}_2022"); var planspnames4 = dbclient.GetCollection($"spnames_{locationcode}_2021"); var planspnameslist2 = await planspnames2.Find(new BsonDocument()).ToListAsync(); var planspnameslist3 = await planspnames3.Find(new BsonDocument()).ToListAsync(); var planspnameslist4 = await planspnames4.Find(new BsonDocument()).ToListAsync(); var zsplanfusionCollection = dbclient.GetCollection($"zsplanfusionmodel_{spider.locationCode}_bak"); var zsplanfusionTask = await zsplanfusionCollection.Find(new BsonDocument()).ToListAsync(); var unlist = new List(); // 创建批量写入操作(可选,提高性能) var bulkWrite = new List(); foreach (var item in zsplanfusionTask) { var ninfo = new SpNameScoreItem(); var ninfo2 = new SpNameScoreItem(); var ninfo3 = new SpNameScoreItem(); var ninfo4 = new SpNameScoreItem(); var spname2 = new SpNameItem(); var spname3 = new SpNameItem(); var spname4 = new SpNameItem(); var items = new List(); var majorname = StringFilter.GetContentBeforeBrackets(item.majorName); bool iszwhz = item.majorName.Contains("中外合作") || (!string.IsNullOrWhiteSpace(item.remark) && item.remark.Contains("中外合作")); item.universityName = item.universityName.Replace("(", "(").Replace(")", ")"); if (item.universityName == "山东大学威海分校") { item.universityName = "山东大学(威海)"; } ninfo = professscoreresult.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); ninfo2 = professscoreresult2.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); ninfo3 = professscoreresult3.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); ninfo4 = professscoreresult4.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); spname2 = planspnameslist2.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); spname3 = planspnameslist3.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); spname4 = planspnameslist4.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); if (ninfo != null) { if (ninfo.min > 0) { item._score = ninfo.min; item.rankLine = ninfo.min_section; } if (!string.IsNullOrWhiteSpace(ninfo.sp_info)) { item._24subject = ninfo.sp_info; } items.Add(new PlanItem() { rankLine = ninfo.min_section, planCount = item.planCount, score = ninfo.min, year = ninfo.year.ToString() }); } if (ninfo2 != null) { int pcount = 0; if (spname2 != null) { pcount = spname2.num.ObjToInt(); items.Add(new PlanItem() { rankLine = ninfo2.min_section, planCount = pcount, score = ninfo2.min, year = spname2.year.ToString() }); } } if (ninfo3 != null) { int pcount = 0; if (spname3 != null) { pcount = spname3.num.ObjToInt(); items.Add(new PlanItem() { rankLine = ninfo3.min_section, planCount = pcount, score = ninfo3.min, year = spname3.year.ToString() }); } } if (ninfo4 != null) { int pcount = 0; if (spname4 != null) { pcount = spname4.num.ObjToInt(); items.Add(new PlanItem() { rankLine = ninfo4.min_section, planCount = pcount, score = ninfo4.min, year = spname4.year.ToString() }); } } if (items.Any()) { item.items = items; } bulkWrite.Add(new zsplanfusionmodel() { // items= item.items, // majorCode = item.majorCode, // majorName = item.majorName, // planCount = item.planCount, // rankLine = item.rankLine, // remark = item.remark, // universityCode = item.universityCode, // universityName = item.universityName, // year = item.year, // _24subject = item._24subject, // _score = item._score, // _id = item._id, // _id2 = item._id2 }); } // 执行批量写入(如果使用批量操作) if (bulkWrite.Count > 0) { await zsplanfusionCollection.InsertManyAsync(bulkWrite); } } /// /// 更新招生计划分数信息 /// /// /// [ApiDescriptionSettings(Name = "UpdatezsPlanNScores"), HttpPost] [DisplayName("UpdatezsPlanNScores")] public async Task UpdatezsPlanNScores([FromBody] SpiderReuqestDto spider) { var locationcode = spider.locationCode.Replace("0000", ""); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var professscorelist = dbclient.GetCollection($"professionalscore_{locationcode}_2024"); var professscoreresult = await professscorelist.Find(new BsonDocument()).ToListAsync(); var professscorelist2 = dbclient.GetCollection($"professionalscore_{locationcode}_2023"); var professscoreresult2 = await professscorelist2.Find(new BsonDocument()).ToListAsync(); var professscorelist3 = dbclient.GetCollection($"professionalscore_{locationcode}_2022"); var professscoreresult3 = await professscorelist3.Find(new BsonDocument()).ToListAsync(); var professscorelist4 = dbclient.GetCollection($"professionalscore_{locationcode}_2021"); var professscoreresult4 = await professscorelist4.Find(new BsonDocument()).ToListAsync(); var planspnames2 = dbclient.GetCollection($"spnames_{locationcode}_2023"); var planspnames3 = dbclient.GetCollection($"spnames_{locationcode}_2022"); var planspnames4 = dbclient.GetCollection($"spnames_{locationcode}_2021"); var planspnameslist2 = await planspnames2.Find(new BsonDocument()).ToListAsync(); var planspnameslist3 = await planspnames3.Find(new BsonDocument()).ToListAsync(); var planspnameslist4 = await planspnames4.Find(new BsonDocument()).ToListAsync(); var zsplanfusionCollection = dbclient.GetCollection($"zsplanfusionmodel_{spider.locationCode}_bak"); var zsplanfusionTask = await zsplanfusionCollection.Find(new BsonDocument()).ToListAsync(); var unlist = new List(); // 创建批量写入操作(可选,提高性能) var bulkWrite = new List>(); foreach (var item in zsplanfusionTask) { var ninfo = new SpNameScoreItem(); var ninfo2 = new SpNameScoreItem(); var ninfo3 = new SpNameScoreItem(); var ninfo4 = new SpNameScoreItem(); var spname2 = new SpNameItem(); var spname3 = new SpNameItem(); var spname4 = new SpNameItem(); var items = new List(); var majorname = StringFilter.GetContentBeforeBrackets(item.majorName); bool iszwhz = item.majorName.Contains("中外合作") || (!string.IsNullOrWhiteSpace(item.remark) && item.remark.Contains("中外合作")); item.universityName = item.universityName.Replace("(", "(").Replace(")", ")"); if(item.universityName== "山东大学威海分校") { item.universityName = "山东大学(威海)"; } ninfo = professscoreresult.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); ninfo2 = professscoreresult2.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); ninfo3 = professscoreresult3.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); ninfo4 = professscoreresult4.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); spname2 = planspnameslist2.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); spname3 = planspnameslist3.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); spname4 = planspnameslist4.Where(e => e.name == item.universityName && e.sp_name == majorname).WhereIF(iszwhz, e => e.zslx_name == "中外合作办学").FirstOrDefault(); if (ninfo != null) { if (ninfo.min > 0) { item._score = ninfo.min; item.rankLine = ninfo.min_section; } if (!string.IsNullOrWhiteSpace(ninfo.sp_info)) { item._24subject = ninfo.sp_info; } items.Add(new PlanItem() { rankLine = ninfo.min_section, planCount = item.planCount, score = ninfo.min, year = ninfo.year.ToString() }); } if (ninfo2 != null) { int pcount = 0; if (spname2 != null) { pcount = spname2.num.ObjToInt(); items.Add(new PlanItem() { rankLine = ninfo2.min_section, planCount = pcount, score = ninfo2.min, year = spname2.year.ToString() }); } } if (ninfo3 != null) { int pcount = 0; if (spname3 != null) { pcount = spname3.num.ObjToInt(); items.Add(new PlanItem() { rankLine = ninfo3.min_section, planCount = pcount, score = ninfo3.min, year = spname3.year.ToString() }); } } if (ninfo4 != null) { int pcount = 0; if (spname4 != null) { pcount = spname4.num.ObjToInt(); items.Add(new PlanItem() { rankLine = ninfo4.min_section, planCount = pcount, score = ninfo4.min, year = spname4.year.ToString() }); } } if (items.Any()) { item.items = items; } // 添加到批量操作列表 bulkWrite.Add(new ReplaceOneModel( Builders.Filter.Eq(doc => doc._id, item._id), item) { IsUpsert = false // 设置为false表示不插入新文档,只替换存在的 }); } // 执行批量写入(如果使用批量操作) if (bulkWrite.Count > 0) { await zsplanfusionCollection.BulkWriteAsync(bulkWrite); } } /// /// 更新院校信息 /// /// [ApiDescriptionSettings(Name = "UniversityInfoTabUpdate"), HttpPost] [DisplayName("UniversityInfoTabUpdate")] public async Task UniversityInfoTabUpdate([FromBody] ZsPlanProExcelRequestInput input) { //var filePath = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, input.fileName); //var sheetNames = MiniExcel.GetSheetNames(Path.Combine(_uploadDirectory, input.fileName)); // var fusionlist = InputExcelUtil.InputExcel(filePath, sheetNames[0]); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var university = dbclient.GetCollection("university"); var universitylist = await university.Find(new BsonDocument()).ToListAsync(); var zsplanfusionCollection = dbclient.GetCollection($"zsplanfusionmodel_310000"); var zsplanfusionTask = await zsplanfusionCollection.Find(new BsonDocument()).ToListAsync(); // 创建批量写入操作(可选,提高性能) var bulkWrite = new List>(); foreach(var item in zsplanfusionTask) { var uinfo = universitylist.Where(e => e.name == item.universityName); if (uinfo.Any()) { item.ownership = uinfo.FirstOrDefault().belong; } bulkWrite.Add(new ReplaceOneModel( Builders.Filter.Eq(doc => doc._id, item._id), item) { IsUpsert = false // 设置为false表示不插入新文档,只替换存在的 }); } // 执行批量写入(如果使用批量操作) if (bulkWrite.Count > 0) { await zsplanfusionCollection.BulkWriteAsync(bulkWrite); } } /// /// /// /// [ApiDescriptionSettings(Name = "SpscorenamesUNameIdUpdate"), HttpPost] [DisplayName("SpscorenamesUNameIdUpdate")] public async Task SpscorenamesUNameIdUpdate([FromBody] ZsPlanProExcelRequestInputV2 requestInputV2) { //var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); //var collection = dbclient.GetCollection(requestInputV2.locationCode); //var filter = Builders.Filter.Exists("proscore"); //var docs = await collection.Find(filter).ToListAsync(); //var bulkOps = new List>(); //foreach (var doc in docs) //{ // if (doc.Contains("proscore") && doc["proscore"].IsInt32) // { // var id = doc["_id"]; // var intValue = doc["proscore"].AsInt32; // var update = Builders.Update.Set("proscore", intValue.ToString()); // var filterById = Builders.Filter.Eq("_id", id); // bulkOps.Add(new UpdateOneModel(filterById, update)); // } //} //if (bulkOps.Count > 0) //{ // var result = await collection.BulkWriteAsync(bulkOps); // Console.WriteLine($"Modified: {result.ModifiedCount}"); //} var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var university = dbclient.GetCollection("university"); var universitylist = await university.Find(new BsonDocument()).ToListAsync(); // 将 university 的 name 和 _id 映射成字典,便于查找 var universityDict = universitylist .Where(u => !string.IsNullOrEmpty(u.name)) .ToDictionary(u => u.name, u => u._id); var newbeJson = dbclient.GetCollection($"spscorenames_{requestInputV2.locationCode}_{requestInputV2.year}_{requestInputV2.type}"); var updatejons = await newbeJson.Find(new BsonDocument()).ToListAsync(); var bulkOps = new List>(); foreach (var item in updatejons) { if (!string.IsNullOrEmpty(item.name) && universityDict.TryGetValue(item.name, out var matchedId)) { var filter = Builders.Filter.Eq(x => x.id, item.id); var update = Builders.Update.Set(x => x.school_id, matchedId); bulkOps.Add(new UpdateOneModel(filter, update)); } } if (bulkOps.Count > 0) { var result = await newbeJson.BulkWriteAsync(bulkOps); // 可选:返回处理结果 } } /// /// SyncProfession /// /// [ApiDescriptionSettings(Name = "SyncProfession"), HttpPost] [DisplayName("SyncProfession")] public async Task SyncProfession() { // var baselist = await $"https://static-data-ycymedu.oss-cn-shanghai.aliyuncs.com/qingting-data/list.json".SetJsonSerialization().GetAsAsync>(); var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan"); var zprofessionitems = dbclient.GetCollection("z_professionitems"); var zprofessiondetails = dbclient.GetCollection("z_professiondetails"); //await zprofessionitems.InsertManyAsync(baselist); var list = await zprofessionitems.Find(new BsonDocument()).ToListAsync(); var basUrl = $"https://static-data-ycymedu.oss-cn-shanghai.aliyuncs.com/qingting-data/"; //list.ForEach(a => //{ // a.itemDtos.ForEach(o => // { // var goUrl = $"{basUrl}{o.id}.json".SetJsonSerialization().GetAsAsync().Result; // if (goUrl.code == 200) // { // zprofessiondetails.InsertOne(goUrl.data); // } // }); //}); } }