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