2083 lines
95 KiB
C#
2083 lines
95 KiB
C#
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=×tamp={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=×tamp={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}×tamp={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}×tamp={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}×tamp={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);
|
||
// }
|
||
|
||
// });
|
||
//});
|
||
}
|
||
}
|