tuiwucarrer/Admin.NET/Admin.NET.Core/Service/ZYFusion/ZYFusionService.cs

2083 lines
95 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using DocumentFormat.OpenXml.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;
/// <summary>
///位次对应一分一段表融合数据模块
/// </summary>
[ApiDescriptionSettings(ApplicationConst.ZYGroupName, Order = 900)]
[Route("api/ZyFusionService")]
public class ZYFusionService : IDynamicApiController, ITransient
{
private readonly IMongoDBRepository _mongoRepository;
private readonly SqlSugarRepository<BusProvince> _provinceInfo;
private readonly string _uploadDirectory = Path.Combine(Directory.GetCurrentDirectory(), "uploads");
public ZYFusionService(IMongoDBRepository mongoDBRepository, SqlSugarRepository<BusProvince> provinceInfo)
{
_mongoRepository = mongoDBRepository;
_provinceInfo = provinceInfo;
}
/// <summary>
/// 先上传excel 然后再通过唯一id传入逻辑计算(需要自己记住)
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "UploadExcel"), HttpPost]
[DisplayName("UploadExcel")]
public async Task<string> 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;
}
/// <summary>
/// 单纯招生计划数据导入
/// </summary>
/// <returns></returns>
[ApiDescriptionSettings(Name = "SingleZsPlanExport"), HttpGet]
public async Task<IActionResult> ZsPlanExport([Required][FromQuery] ZYFusionRequestDto dto)
{
var zy_fusionlist = new List<singlezsPlanmodel>();
var filePath = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.FusionFilePath);
//第一志愿投档表
var fusionlist = InputExcelUtil<ZySinglePlanInput>.InputExcel(filePath);
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var newbejson = dbclient.GetCollection<singlezsPlanmodel>(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)
};
}
/// <summary>
/// 院校专业组批次线导入(不带院校组)
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "ExportExcel"), HttpGet]
[DisplayName("ExportExcel")]
public async Task<IActionResult> Export([Required][FromQuery] ZYFusionRequestDto dto)
{
var zy_fusionlist = new List<ZyFusionResponseDto>();
var filePath2 = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.FusionFilePath);
//第一志愿投档表
var fusionlist = InputExcelUtil<ZyFusionInput>.InputExcel(filePath2);
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var newbejson = dbclient.GetCollection<ZyFusionResponseDto>(string.Format("fusion_{0}_{1}", dto.ProvinceCode, dto.Year));
var scoresetionjson = dbclient.GetCollection<ZYOneScoreOneSection>(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)
};
}
/// <summary>
/// 院校专业组批次线导入(带院校组)
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "ExportGroup"), HttpGet]
[DisplayName("ExportGroup")]
public async Task<IActionResult> ExportGroup([Required][FromQuery] ZYFusionRequestDto dto)
{
var zy_fusionlist = new List<ZyFusionResponseDto>();
var filePath2 = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.FusionFilePath);
//愿投档表
var fusionlist = InputExcelUtil<ZyFusionDocSHInput>.InputExcel(filePath2);
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var newbejson = dbclient.GetCollection<ZyFusionResponseDto>(string.Format("fusion_{0}_{1}", dto.ProvinceCode, dto.Year));
var scoresetionjson = dbclient.GetCollection<ZYOneScoreOneSection>(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)
};
}
/// <summary>
/// 河南招生计划最新数据更新特例(不通用)
/// </summary>
/// <returns></returns>
[ApiDescriptionSettings(Name = "HENANTSyncNewPlanData"), HttpGet]
[DisplayName("HENANTSyncNewPlanData")]
public async Task HENANTSyncNewPlanData([FromQuery] ZYFusionRequestDto dto)
{
var filePath2 = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.FusionFilePath);
//投档表
var fusionlist = InputExcelUtil<ZyHeNanTFusionInput>.InputExcel(filePath2);
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var newbejson = dbclient.GetCollection<PlanProResponseDto>(string.Format("zsplanpro_{0}_{1}", dto.ProvinceCode, dto.Year));
var universityjson = dbclient.GetCollection<UniversityDto>("university");
var universitylist = await universityjson.Find(new BsonDocument()).ToListAsync();
var zyfusionlist = await newbejson.Find(new BsonDocument()).ToListAsync();
var updateModels = new List<UpdateOneModel<PlanProResponseDto>>();
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<PlanProResponseDto>.Filter.Eq(x => x._id, item._id);
var update = Builders<PlanProResponseDto>.Update
.Set(x => x.lowscore, newLowScore)
.Set(x => x.lowscorerank, newLowSection);
var updateModel = new UpdateOneModel<PlanProResponseDto>(filter, update);
updateModels.Add(updateModel);
}
}
if (updateModels.Count > 0)
{
await newbejson.BulkWriteAsync(updateModels);
}
}
/// <summary>
/// 河南特例构造zsplanfusion
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "HNCreatezsplanfusion"), HttpGet]
[DisplayName("HNCreatezsplanfusion")]
public async Task HNCreatezsplanfusion([FromQuery] ZYFusionRequestDto dto)
{
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var zsplanpro = dbclient.GetCollection<PlanProResponseDto>(string.Format("zsplanpro_{0}_{1}", dto.ProvinceCode, dto.Year));
var newzsplanfusions = dbclient.GetCollection<zsplanfusionDto>(string.Format("zsplanfusion_{0}_{1}", dto.ProvinceCode, dto.Year));
var zsplanprolist = await zsplanpro.Find(new BsonDocument()).ToListAsync();
var newfusionslist = new List<zsplanfusionDto>();
var bejson = dbclient.GetCollection<OldzsplanfusionDto>("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);
}
/// <summary>
/// 招生计划数据融合(河南)投档计划数加招生计划
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "HeNanPlanProExport"), HttpGet]
[DisplayName("HeNanPlanProExport")]
public async Task<IActionResult> HeNanPlanProExport([Required][FromQuery] ZsHeNanPlanProExcelRequestInput dto)
{
var zsplanpro = new List<PlanProResponseDto>();
var filePath1 = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.fileName1);
var sheetNames = MiniExcel.GetSheetNames(Path.Combine(_uploadDirectory, dto.fileName1));
string firstSheetName = sheetNames[0];
//第一志愿投档表
var toudanglist = InputExcelUtil<ZyHeNanFusionInput>.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<zsPlanProfessionDto>.InputExcel(filePath2, firstSheetName2);
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var newbejson = dbclient.GetCollection<PlanProResponseDto>(string.Format("zsplanpro_{0}_{1}", dto.ProvinceCode, dto.Year));
var universityjson = dbclient.GetCollection<UniversityDto>("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)
};
}
/// <summary>
/// 招生计划数据融合(不带专业组)
/// </summary>
/// <returns></returns>
[ApiDescriptionSettings(Name = "ZsPlanProExport"), HttpGet]
[DisplayName("ZsPlanProExport")]
public async Task<IActionResult> ZsPlanProExport([Required][FromQuery] ZsPlanProExcelRequestInput dto)
{
var zsplanpro = new List<PlanProResponseDto>();
var filePath = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.fileName);
// 处理数据
var onelist = InputExcelUtil<zsPlanProfessionDto>.InputExcel(filePath);
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var zyfusionbejson = dbclient.GetCollection<ZyFusionResponseDto>(string.Format("fusion_{0}_{1}", dto.ProvinceCode, dto.Year));
var zyfusionlist = await zyfusionbejson.Find(new BsonDocument()).ToListAsync();
var universityjson = dbclient.GetCollection<UniversityDto>("university");
var universitylist = await universityjson.Find(new BsonDocument()).ToListAsync();
var newbejson = dbclient.GetCollection<PlanProResponseDto>(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)
};
}
/// <summary>
/// 招生计划数据融合(投档线没有专业的)
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "ZsShPlanProExport"), HttpGet]
[DisplayName("ZsShPlanProExport")]
public async Task<IActionResult> ZsShPlanFusionModel([FromQuery] ZsPlanProExcelRequestInput dto)
{
var zsplanpro = new List<PlanProResponseDto>();
var filePath = await UtilExcelExt.GetFileByIdAsync(_uploadDirectory, dto.fileName);
// 处理数据
var onelist = InputExcelUtil<zsShPlanProfessionDto>.InputExcel(filePath);
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var zyfusionbejson = dbclient.GetCollection<ZyFusionResponseDto>(string.Format("fusion_{0}_{1}", dto.ProvinceCode, dto.Year));
var zyfusionlist = await zyfusionbejson.Find(new BsonDocument()).ToListAsync();
var universityjson = dbclient.GetCollection<UniversityDto>("university");
var universitylist = await universityjson.Find(new BsonDocument()).ToListAsync();
var newbejson = dbclient.GetCollection<PlanProResponseDto>(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<ZyFusionResponseDto>();
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)
};
}
/// <summary>
/// 融合总表数据
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "ZsPlanFusionModel"), HttpGet]
[DisplayName("ZsPlanFusionModel")]
public async Task<IActionResult> ZsPlanFusionModel([FromQuery] ZsPlanProExcelRequestInput dto)
{
var newlist = new List<zsplanfusionmodel>();
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var newplanmodels = dbclient.GetCollection<zsplanfusionmodel>(string.Format("zsplanfusionmodel_{0}_{1}", dto.ProvinceCode, dto.Year));
var zsplanfusionmodels = dbclient.GetCollection<zsplanfusionDto>(string.Format("zsplanfusion_{0}_{1}", dto.ProvinceCode, dto.Year));
var zyfusionlist = await zsplanfusionmodels.Find(new BsonDocument()).ToListAsync();
var newbejson = dbclient.GetCollection<PlanProResponseDto>(string.Format("zsplanpro_{0}_{1}", dto.ProvinceCode, dto.Year));
var oldplanpro = await newbejson.Find(new BsonDocument()).ToListAsync();
var universityjson = dbclient.GetCollection<UniversityDto>("university");
var universitylist = universityjson.Find(new BsonDocument()).ToList();
var namesjsons = dbclient.GetCollection<ChangeuniversityDto>("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<PlanItem>()
{ 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"))
};
}
/// <summary>
/// 获取爬虫数据
/// </summary>
/// <returns></returns>
[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<PeiZhiRoot>(jsonString);
var typeData = root?.data.newsdata.type;
if (typeData == null) return;
var universityCollection = dbClient.GetCollection<GaokaoDatum>("gaokaodatanames");
var gaokaoDataNames = await universityCollection.Find(FilterDefinition<GaokaoDatum>.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<SpNameItem>(dbName);
if (await newbeJson.Find(FilterDefinition<SpNameItem>.Empty).AnyAsync()) continue;
var list = new List<SpNameItem>();
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<BatchRoot>(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<SpNamesObject>(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<SpNamesObject>(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<UniversityDto>("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("抓取数据异常!!", "抓取数据异常停止");
}
}
/// <summary>
/// 抓取历年录取分数
/// </summary>
/// <param name="spider"></param>
/// <returns></returns>
[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<PeiZhiRoot>(jsonString);
var typeData = root?.data.newsdata.type;
if (typeData == null) return;
var universityCollection = dbClient.GetCollection<GaokaoDatum>("gaokaodatanames");
var gaokaoDataNames = await universityCollection.Find(FilterDefinition<GaokaoDatum>.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<SpNameScoreItem>(dbName);
if (await newbeJson.Find(FilterDefinition<SpNameScoreItem>.Empty).AnyAsync()) continue;
var list = new List<SpNameScoreItem>();
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<BatchRoot>(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<SpNameScorebject>(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<SpNameScorebject>(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<UniversityDto>("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("抓取数据异常!!", "抓取数据异常停止");
}
}
/// <summary>
/// 同步zsplanfusion_数据
/// </summary>
/// <param name="spider"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "SyncXueXiaoGaokao"), HttpPost]
[DisplayName("SyncXueXiaoGaokao")]
public async Task SyncXueXiaoGaokao([FromBody] SpiderReuqestDto spider)
{
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var xuexiaoDatu = dbclient.GetCollection<XueXiaoDatum>("xuexingaokaouniveristys");
var universitychangeid = dbclient.GetCollection<universitychangeidDto>("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<newZsplanfusionDto>($"zz_zsplanfusion_{xid}");
var newlist = new ConcurrentBag<newZsplanfusionDto>();
var semaphore = new SemaphoreSlim(5, 5); // 限制最多 5 个并行任务
var tasks = new List<Task>();
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=&timestamp={DateTimeOffset.Now.ToUnixTimeSeconds()}";
await Task.Delay(200); // 控制请求间隔
string mainRequest = await mainUrl.GetStringAsync();
var luqudata = Newtonsoft.Json.JsonConvert.DeserializeObject<xueXiaomajorobject>(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=&timestamp={DateTimeOffset.Now.ToUnixTimeSeconds()}";
string result = await detailUrl.GetStringAsync();
var luqudatay = Newtonsoft.Json.JsonConvert.DeserializeObject<xueXiaomajorobject>(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);
}
}
}
/// <summary>
///同步院校详情页面
/// </summary>
/// <param name="spider"></param>
/// <returns></returns>
[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<universitychangeidDto>("universitychangeid");
var universitydto = dbclient.GetCollection<UniversityDto>("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}&timestamp={DateTimeOffset.Now.ToUnixTimeSeconds()}";
string mainRequest = await mainUrl.GetStringAsync();
var luqudata = Newtonsoft.Json.JsonConvert.DeserializeObject<xuexiaoCollegeDataobject>(mainRequest);
if (luqudata?.code == 1 && luqudata.data != null)
{
var result = luqudata.data;
if (result.tag != null)
{
var filter = Builders<UniversityDto>.Filter.Eq(u => u._id, a.yid);
var update = Builders<UniversityDto>.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); // 确保所有任务完成
}
}
/// <summary>
/// 更新院校信息
/// </summary>
/// <returns></returns>
[ApiDescriptionSettings(Name = "SyncUniversityInfoUpdate"), HttpPost]
[DisplayName("SyncUniversityInfoUpdate")]
public async Task SyncUniversityInfoUpdate()
{
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var xuexiaoDatu = dbclient.GetCollection<XueXiaoDatum>("xuexingaokaouniveristys");
var xuelist = await xuexiaoDatu.Find(new BsonDocument()).ToListAsync();
var university = dbclient.GetCollection<UniversityDto>("university");
var universitylist = await university.Find(new BsonDocument()).ToListAsync();
#region ################## 获取院校学院院系信息 #####################
//var facultys = dbclient.GetCollection<Facultylist>("zfacultylist");
//var list = new List<Facultylist>();
//var baseUrl = "https://static-data-ycymedu.oss-cn-shanghai.aliyuncs.com/college-faculty/";
//xuelist.ForEach(a =>
//{
// var goUrl = $"{baseUrl}{a._id}.json".SetJsonSerialization<NewtonsoftJsonSerializerProvider>().GetAsAsync<FacultyRootobject>().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<RecruitlistRecruit>("zrecruitlist");
// var relist = new List<RecruitlistRecruit>();
// xuelist.ForEach(a =>
// {
// var goUrl = $"{baseUrl}{a._id}.json".SetJsonSerialization<NewtonsoftJsonSerializerProvider>().GetAsAsync<Recruitlistobject>().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<RecruitlistRecruit>("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<RecruitDetailDto>("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}&timestamp={DateTimeOffset.Now.ToUnixTimeSeconds()}".SetJsonSerialization<NewtonsoftJsonSerializerProvider>().GetAsAsync<Recruitobject>().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<SubjectIntroduceData>("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<SubjectIntroduceRootobject>().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
}
/// <summary>
///
/// </summary>
/// <returns></returns>
[ApiDescriptionSettings(Name = "SyncMajorInfoUpdate"), HttpPost]
[DisplayName("SyncMajorInfoUpdate")]
public async Task SyncMajorInfoUpdate()
{
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var majorChild = dbclient.GetCollection<GaoKaoMajorItemDto>("zmajorchild");
var list = new List<MajorDetailMsg>();
#region #####################同步专业信息#####################
//var majorRoot = dbclient.GetCollection<GaoKaoMajorRootDto>("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<GaoKaoMajorItemDto>("zmajorchild");
//var majoritems = new List<GaoKaoMajorItemDto>();
//majorroots.ForEach(a =>
//{
// a.majorMsgs.ForEach(c =>
// {
// var majorMsglist = $"{firstUrl}{c.key}?_t={DateTimeOffset.Now.ToUnixTimeSeconds()}".SetJsonSerialization<NewtonsoftJsonSerializerProvider>().GetAsAsync<GaokaoMajorMsgObject>().Result;
// if (majorMsglist.flag)
// {
// var items = new List<GaokaoMajorMsgItems>();
// 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<NewtonsoftJsonSerializerProvider>().GetAsAsync<MajorChildbject>().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<MajorDetailMsg>("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<NewtonsoftJsonSerializerProvider>().GetAsAsync<MajorDetailObject>().Result;
// if (goresult.flag)
// {
// majordetail.InsertOne(goresult.msg);
// }
// });
// });
//});
#endregion
#region ####专业详情关联课程######
//var majormap = dbclient.GetCollection<KskcMsg>("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<NewtonsoftJsonSerializerProvider>().GetAsAsync<KskcObject>().Result;
// if (goresult.flag)
// {
// var result = goresult.msg;
// result.specId = c.specId;
// majormap.InsertOne(result);
// }
// });
// });
//});
#endregion
#region ########专业关联院校
//var majormap = dbclient.GetCollection<KyfxMsg>("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<NewtonsoftJsonSerializerProvider>().GetAsAsync<KyfxObject>().Result;
// if (goresult.flag)
// {
// var result = goresult.msg;
// result.specId = c.specId;
// majormap.InsertOne(result);
// }
// });
// });
//});
#endregion
#region ###########专业基础信息##############
var majormap = dbclient.GetCollection<base_Subject>("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}&timestamp={DateTimeOffset.Now.ToUnixTimeSeconds()}";
var goresult = gourl.GetJsonAsync<Base_subjectobject>().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
}
/// <summary>
///
/// </summary>
/// <param name="spider"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "CombianGaokaoInfo"), HttpPost]
[DisplayName("CombianGaokaoInfo")]
public async Task CombianGaokaoInfo([FromBody] SpiderReuqestDto spider)
{
var list = new List<plannewCombianData>();
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
string dbName = $"professionalscore_{spider.locationCode}_{spider.year}";
var professscorelist = dbclient.GetCollection<SpNameScoreItem>(dbName);
var professscoreresult = await professscorelist.Find(new BsonDocument()).ToListAsync();
string dbName2 = $"spnames_{spider.locationCode}_{spider.year}";
var spNamelist = dbclient.GetCollection<SpNameItem>(dbName2);
var spNamelistresult = await spNamelist.Find(new BsonDocument()).ToListAsync();
var dbnewName = $"plannewcombiandata_{spider.locationCode}_{spider.year}";
var dbnewlist = dbclient.GetCollection<plannewCombianData>(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);
}
/// <summary>
///创建计划分数信息
/// </summary>
/// <param name="spider"></param>
/// <returns></returns>
[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<SpNameScoreItem>($"professionalscore_{locationcode}_2024");
var professscoreresult = await professscorelist.Find(new BsonDocument()).ToListAsync();
var professscorelist2 = dbclient.GetCollection<SpNameScoreItem>($"professionalscore_{locationcode}_2023");
var professscoreresult2 = await professscorelist2.Find(new BsonDocument()).ToListAsync();
var professscorelist3 = dbclient.GetCollection<SpNameScoreItem>($"professionalscore_{locationcode}_2022");
var professscoreresult3 = await professscorelist3.Find(new BsonDocument()).ToListAsync();
var professscorelist4 = dbclient.GetCollection<SpNameScoreItem>($"professionalscore_{locationcode}_2021");
var professscoreresult4 = await professscorelist4.Find(new BsonDocument()).ToListAsync();
var planspnames2 = dbclient.GetCollection<SpNameItem>($"spnames_{locationcode}_2023");
var planspnames3 = dbclient.GetCollection<SpNameItem>($"spnames_{locationcode}_2022");
var planspnames4 = dbclient.GetCollection<SpNameItem>($"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>($"zsplanfusionmodel_{spider.locationCode}_bak");
var zsplanfusionTask = await zsplanfusionCollection.Find(new BsonDocument()).ToListAsync();
var unlist = new List<NPlanChangeUnName>();
// 创建批量写入操作(可选,提高性能)
var bulkWrite = new List<zsplanfusionmodel>();
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<PlanItem>();
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);
}
}
/// <summary>
/// 更新招生计划分数信息
/// </summary>
/// <param name="spider"></param>
/// <returns></returns>
[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<SpNameScoreItem>($"professionalscore_{locationcode}_2024");
var professscoreresult = await professscorelist.Find(new BsonDocument()).ToListAsync();
var professscorelist2 = dbclient.GetCollection<SpNameScoreItem>($"professionalscore_{locationcode}_2023");
var professscoreresult2 = await professscorelist2.Find(new BsonDocument()).ToListAsync();
var professscorelist3 = dbclient.GetCollection<SpNameScoreItem>($"professionalscore_{locationcode}_2022");
var professscoreresult3 = await professscorelist3.Find(new BsonDocument()).ToListAsync();
var professscorelist4 = dbclient.GetCollection<SpNameScoreItem>($"professionalscore_{locationcode}_2021");
var professscoreresult4 = await professscorelist4.Find(new BsonDocument()).ToListAsync();
var planspnames2 = dbclient.GetCollection<SpNameItem>($"spnames_{locationcode}_2023");
var planspnames3 = dbclient.GetCollection<SpNameItem>($"spnames_{locationcode}_2022");
var planspnames4 = dbclient.GetCollection<SpNameItem>($"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>($"zsplanfusionmodel_{spider.locationCode}_bak");
var zsplanfusionTask = await zsplanfusionCollection.Find(new BsonDocument()).ToListAsync();
var unlist = new List<NPlanChangeUnName>();
// 创建批量写入操作(可选,提高性能)
var bulkWrite = new List<WriteModel<zsplanfusionmodel>>();
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<PlanItem>();
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<zsplanfusionmodel>(
Builders<zsplanfusionmodel>.Filter.Eq(doc => doc._id, item._id),
item)
{
IsUpsert = false // 设置为false表示不插入新文档只替换存在的
});
}
// 执行批量写入(如果使用批量操作)
if (bulkWrite.Count > 0)
{
await zsplanfusionCollection.BulkWriteAsync(bulkWrite);
}
}
/// <summary>
/// 更新院校信息
/// </summary>
/// <returns></returns>
[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<featuresObjectInput>.InputExcel(filePath, sheetNames[0]);
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var university = dbclient.GetCollection<UniversityDto>("university");
var universitylist = await university.Find(new BsonDocument()).ToListAsync();
var zsplanfusionCollection = dbclient.GetCollection<zsplanfusionmodel>($"zsplanfusionmodel_310000");
var zsplanfusionTask = await zsplanfusionCollection.Find(new BsonDocument()).ToListAsync();
// 创建批量写入操作(可选,提高性能)
var bulkWrite = new List<WriteModel<zsplanfusionmodel>>();
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<zsplanfusionmodel>(
Builders<zsplanfusionmodel>.Filter.Eq(doc => doc._id, item._id),
item)
{
IsUpsert = false // 设置为false表示不插入新文档只替换存在的
});
}
// 执行批量写入(如果使用批量操作)
if (bulkWrite.Count > 0)
{
await zsplanfusionCollection.BulkWriteAsync(bulkWrite);
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
[ApiDescriptionSettings(Name = "SpscorenamesUNameIdUpdate"), HttpPost]
[DisplayName("SpscorenamesUNameIdUpdate")]
public async Task SpscorenamesUNameIdUpdate([FromBody] ZsPlanProExcelRequestInputV2 requestInputV2)
{
//var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
//var collection = dbclient.GetCollection<BsonDocument>(requestInputV2.locationCode);
//var filter = Builders<BsonDocument>.Filter.Exists("proscore");
//var docs = await collection.Find(filter).ToListAsync();
//var bulkOps = new List<WriteModel<BsonDocument>>();
//foreach (var doc in docs)
//{
// if (doc.Contains("proscore") && doc["proscore"].IsInt32)
// {
// var id = doc["_id"];
// var intValue = doc["proscore"].AsInt32;
// var update = Builders<BsonDocument>.Update.Set("proscore", intValue.ToString());
// var filterById = Builders<BsonDocument>.Filter.Eq("_id", id);
// bulkOps.Add(new UpdateOneModel<BsonDocument>(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<UniversityDto>("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<SpNameScoreItem>($"spscorenames_{requestInputV2.locationCode}_{requestInputV2.year}_{requestInputV2.type}");
var updatejons = await newbeJson.Find(new BsonDocument()).ToListAsync();
var bulkOps = new List<WriteModel<SpNameScoreItem>>();
foreach (var item in updatejons)
{
if (!string.IsNullOrEmpty(item.name) && universityDict.TryGetValue(item.name, out var matchedId))
{
var filter = Builders<SpNameScoreItem>.Filter.Eq(x => x.id, item.id);
var update = Builders<SpNameScoreItem>.Update.Set(x => x.school_id, matchedId);
bulkOps.Add(new UpdateOneModel<SpNameScoreItem>(filter, update));
}
}
if (bulkOps.Count > 0)
{
var result = await newbeJson.BulkWriteAsync(bulkOps);
// 可选:返回处理结果
}
}
/// <summary>
/// SyncProfession
/// </summary>
/// <returns></returns>
[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<NewtonsoftJsonSerializerProvider>().GetAsAsync<List<BaseProfessions>>();
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var zprofessionitems = dbclient.GetCollection<BaseProfessions>("z_professionitems");
var zprofessiondetails = dbclient.GetCollection<BaseProData>("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<NewtonsoftJsonSerializerProvider>().GetAsAsync<BaseProRootobject>().Result;
// if (goUrl.code == 200)
// {
// zprofessiondetails.InsertOne(goUrl.data);
// }
// });
//});
}
}