diff --git a/New_College.Api/Controllers/HealthCheckController.cs b/New_College.Api/Controllers/HealthCheckController.cs index 0365c56..4fdd370 100644 --- a/New_College.Api/Controllers/HealthCheckController.cs +++ b/New_College.Api/Controllers/HealthCheckController.cs @@ -24,7 +24,7 @@ namespace New_College.Controllers /// [HttpGet] public IActionResult Get() - { + { return Ok(); } @@ -39,7 +39,14 @@ namespace New_College.Controllers // return t_EnrollmentPlane.Import(); // return t_EnrollmentPlane.Importuniverbaseinfo(); - return t_EnrollmentPlane.universitydetailupdate(); + // return t_EnrollmentPlane.universitydetailupdate(); + + //return t_EnrollmentPlane.tradeupadte(); + + // return t_EnrollmentPlane.categoryupdate(); + + return t_EnrollmentPlane.ClassChildItems(); + } } diff --git a/New_College.Api/New_College.Model.xml b/New_College.Api/New_College.Model.xml index b348c65..1ed7116 100644 --- a/New_College.Api/New_College.Model.xml +++ b/New_College.Api/New_College.Model.xml @@ -242,7 +242,7 @@ - 本科/专科大类 1本科 2 专科 + 本科/专科大类 1本科 2 专科|3职业本科 diff --git a/New_College.IServices/IT_EnrollmentPlaneServices.cs b/New_College.IServices/IT_EnrollmentPlaneServices.cs index f8280a3..a8e924c 100644 --- a/New_College.IServices/IT_EnrollmentPlaneServices.cs +++ b/New_College.IServices/IT_EnrollmentPlaneServices.cs @@ -13,7 +13,12 @@ namespace New_College.IServices /// public interface IT_EnrollmentPlaneServices : IBaseServices { + + Task ClassChildItems(); Task Import(); + + Task categoryupdate(); + Task tradeupadte(); Task universitydetailupdate(); Task Importuniverbaseinfo(); /// diff --git a/New_College.Model/Models/D_Major.cs b/New_College.Model/Models/D_Major.cs index 21584a4..1f3cf7b 100644 --- a/New_College.Model/Models/D_Major.cs +++ b/New_College.Model/Models/D_Major.cs @@ -31,7 +31,7 @@ namespace New_College.Model.Models /// 热度 /// [SugarColumn(IsNullable = true)] - public int Hot { get; set; } + public decimal Hot { get; set; } /// /// 专业分类 1文科 2理科 3不区分 diff --git a/New_College.Model/Models/D_MajorCategory.cs b/New_College.Model/Models/D_MajorCategory.cs index 9d3024c..9988219 100644 --- a/New_College.Model/Models/D_MajorCategory.cs +++ b/New_College.Model/Models/D_MajorCategory.cs @@ -12,18 +12,18 @@ namespace New_College.Model.Models /// /// /// - [SugarColumn(IsNullable = true)] + [SugarColumn(IsNullable = true)] public string TradeNumber { get; set; } /// /// /// - [SugarColumn(IsNullable = true)] + [SugarColumn(IsNullable = true)] public string TradeName { get; set; } /// - /// 本科/专科大类 1本科 2 专科 + /// 本科/专科大类 1本科 2 专科|3职业本科 /// - [SugarColumn(IsNullable = true)] + [SugarColumn(IsNullable = true)] public int Type { get; set; } } diff --git a/New_College.Services/T_EnrollmentPlaneServices.cs b/New_College.Services/T_EnrollmentPlaneServices.cs index f677dde..390f7d8 100644 --- a/New_College.Services/T_EnrollmentPlaneServices.cs +++ b/New_College.Services/T_EnrollmentPlaneServices.cs @@ -31,7 +31,9 @@ namespace New_College.Services private readonly ID_MajorRepository d_Major; private readonly IT_EnrollmentBatchRepository t_EnrollmentBatch; private readonly IT_EnrollmentPlanedescRepository t_EnrollmentPlanedesc; - public T_EnrollmentPlaneServices(IBaseRepository dal, IT_EnrollmentPlaneRepository t_EnrollmentPlaneRepository, ID_UniversityRepository d_UniversityRepository, ID_MajorRepository d_MajorRepository, IT_EnrollmentBatchRepository t_EnrollmentBatchRepository, IT_EnrollmentPlanedescRepository t_EnrollmentPlanedescRepository) + private readonly ID_MajorCategoryRepository d_MajorCategoryRepository; + private readonly ID_MajorClassRepository d_MajorClassRepository; + public T_EnrollmentPlaneServices(IBaseRepository dal, IT_EnrollmentPlaneRepository t_EnrollmentPlaneRepository, ID_UniversityRepository d_UniversityRepository, ID_MajorRepository d_MajorRepository, IT_EnrollmentBatchRepository t_EnrollmentBatchRepository, IT_EnrollmentPlanedescRepository t_EnrollmentPlanedescRepository, ID_MajorCategoryRepository d_MajorCategoryRepository, ID_MajorClassRepository majorClassRepository) { this._dal = dal; base.BaseDal = dal; @@ -40,6 +42,8 @@ namespace New_College.Services this.d_Major = d_MajorRepository; this.t_EnrollmentBatch = t_EnrollmentBatchRepository; this.t_EnrollmentPlanedesc = t_EnrollmentPlanedescRepository; + this.d_MajorCategoryRepository = d_MajorCategoryRepository; + this.d_MajorClassRepository = majorClassRepository; } /// @@ -70,7 +74,7 @@ namespace New_College.Services Thread.Sleep(100); if (!string.IsNullOrWhiteSpace(c.description)) { - if (universitylist.Any(k => k.Name == c.name.Trim())&& string.IsNullOrWhiteSpace(universitylist.FirstOrDefault(k => k.Name == c.name.Trim()).Description)) + if (universitylist.Any(k => k.Name == c.name.Trim()) && string.IsNullOrWhiteSpace(universitylist.FirstOrDefault(k => k.Name == c.name.Trim()).Description)) { var defaultinfo = universitylist.FirstOrDefault(k => k.Name == c.name.Trim()); @@ -83,6 +87,7 @@ namespace New_College.Services + }); @@ -93,6 +98,184 @@ namespace New_College.Services + /// + /// 更新目录 + /// + /// + public async Task tradeupadte() + { + var jsontext = UniversityTypeRelsove.GetFileJson(@"D:\\Files\\1060.json"); + var result = JsonConvert.DeserializeObject(jsontext); + var newtrade = result.msg; + var majorcategory = await this.d_MajorCategoryRepository.Query(x => x.IsDelete == false); + var majorcategorylist = new List(); + newtrade.ToList().ForEach(async a => + { + + if (majorcategory.Any(n => n.TradeName == a.name && n.Type == 2)) + { + var majorcategorydetail = majorcategory.FirstOrDefault(n => n.TradeName == a.name && n.Type == 2); + majorcategorydetail.TradeNumber = a.key; + majorcategorydetail.ModifyTime = DateTime.Now; + await this.d_MajorCategoryRepository.Update(majorcategorydetail); + + } + + //if (!majorcategory.Any(n => n.TradeName == a.name && n.Type == 3)) + //{ + // majorcategorylist.Add(new D_MajorCategory() + // { + // CreateTime = DateTime.Now, + // IsDelete = false, + // ModifyTime = DateTime.Now, + // Name = a.name, + // OrderSort = 0, + // TradeName = a.name, + // TradeNumber = a.key, + // Type = 3, + // }); + //} + }); + //if (majorcategorylist.Any()) + // await this.d_MajorCategoryRepository.Add(majorcategorylist); + return true; + } + + + + /// + /// 专业类别二级目录 + /// + /// + public async Task categoryupdate() + { + string[] files = Directory.GetFiles(@"D:\\Files\\Type\\"); + var msglist = new List(); + + var majorclassitems = new List(); + var majorcategory = await this.d_MajorCategoryRepository.Query(x => x.IsDelete == false && x.Type == 3); + var majorclass = await this.d_MajorClassRepository.Query(x => x.IsDelete == false); + foreach (string itemfile in files) + { + if (itemfile.Contains("1070")) + { + var jsontext = UniversityTypeRelsove.GetFileJson(itemfile); + var result = JsonConvert.DeserializeObject(jsontext); + msglist.AddRange(result.msg); + } + } + + var majorclasslist = majorclass.ToList(); + msglist.ForEach(x => + { + + //if (majorclass.Any(n=> n.Name == x.name)) + //{ + + // var majorclassdefault = majorclass.FirstOrDefault(k => k.Name == x.name); + // majorclassdefault.ModifyTime = DateTime.Now; + // majorclassdefault.OrderSort = int.Parse(x.key); + // await this.d_MajorClassRepository.Update(majorclassdefault); + //} + //else + //{ + var tradenumber = x.key.Remove(x.key.Length - 2, 2); + var singletrade = majorcategory.FirstOrDefault(c => c.TradeNumber == tradenumber); + if (singletrade != null) + { + majorclassitems.Add(new D_MajorClass() + { + + Categoryname = x.name, + CreateTime = DateTime.Now, + IsDelete = false, + ModifyTime = DateTime.Now, + Name = x.name, + OrderSort = int.Parse(x.key), + TradeId = singletrade.Id + }); + } + // } + + + }); + if (majorclassitems.Any()) + { + + await this.d_MajorClassRepository.Add(majorclassitems); + } + + + return true; + } + + /// + /// 专业名称 + /// + /// + public async Task ClassChildItems() + { + string[] files = Directory.GetFiles(@"D:\\Files\\TypeChild\\"); + var msglist = new List(); + var majorclass = await this.d_MajorClassRepository.Query(x => x.IsDelete == false); + var majorinfolist = await this.d_Major.Query(x => x.IsDelete == false); + foreach (string itemfile in files) + { + if (itemfile.Contains("1070")) + { + int ordersort = int.Parse("1070" + itemfile.Split("1070")[1].Replace(".json", "")); + var categoryid = majorclass.FirstOrDefault(c => c.IsDelete == false && c.OrderSort == ordersort); + + var jsontext = UniversityTypeRelsove.GetFileJson(itemfile); + var result = JsonConvert.DeserializeObject(jsontext); + result.msg.ToList().ForEach(msg => + { + msg.categoryid = categoryid.Id; + msglist.Add(msg); + }); + + } + } + + var majoritems = new List(); + /// + msglist.ForEach(a => + { + var anyinfo = majorinfolist.Any(c => a.categoryid == c.CategoryClass_Id && a.zydm == c.MajorCode); + if (!anyinfo) + { + majoritems.Add(new D_Major() + { + Hot = a.zymyd==""?0:decimal.Parse(a.zymyd), + CategoryClass_Id = a.categoryid, + CreateTime = DateTime.Now, + IsDelete = false, + MajorCode = a.zydm, + MajorName = a.zymc, + ModifyTime = DateTime.Now, + Name = a.zymc, + OrderSort =0, + Type = 3, + + }); + } + }); + await d_Major.Add(majoritems); + + return true; + } + + public class Rootobject + { + public Msg[] msg { get; set; } + public bool flag { get; set; } + } + + public class Msg + { + public string key { get; set; } + public string name { get; set; } + } public class Class1 @@ -103,6 +286,25 @@ namespace New_College.Services } + public class MajorItem + { + public MsgITEMS[] msg { get; set; } + public bool flag { get; set; } + } + + public class MsgITEMS + { + public string zydm { get; set; } + public string zymc { get; set; } + public string specId { get; set; } + public string zymyd { get; set; } + + public int categoryid { get; set; } + } + + + + /// /// /// diff --git a/New_Spider/HtmlAgMajorHelper.cs b/New_Spider/HtmlAgMajorHelper.cs new file mode 100644 index 0000000..d30e955 --- /dev/null +++ b/New_Spider/HtmlAgMajorHelper.cs @@ -0,0 +1,119 @@ +using HtmlAgilityPack; +using New_College.Common.Helper; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace New_Spider +{ + public class HtmlAgMajorHelper + { + + public async void HtmlCreatePageData() + { + WebClient wc = new WebClient(); + wc.DownloadProgressChanged += (sender, args) => Console.WriteLine(args.ProgressPercentage + "% complete"); + Task.Delay(10000).ContinueWith(ant => wc.CancelAsync()); //如果超过限制时间,则取消下载 + + string pathFile = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Files/"; + //判断文件夹是否存在 + if (!Directory.Exists(pathFile)) + { + Directory.CreateDirectory(pathFile); + } + + + string type = "https://gaokao.chsi.com.cn/zyk/zybk/xkCategory/107021?_t=1694748927326"; + + string childtype = "https://gaokao.chsi.com.cn/zyk/zybk/specialityesByCategory/10702101?_t=1694748927386"; + + + await wc.DownloadFileTaskAsync("https://gaokao.chsi.com.cn/zyk/zybk/mlCategory/1070?_t=1694748266332", pathFile + "1070.json"); // await 是C# 5.0中实现异步操作的关键字 + + + + } + + + /// + /// 下载二级分类 + /// + public void DownloadTypeListFile() + { + + var basejson = UniversityTypeRelsove.GetFileJson(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Files/1070.json"); + // var jsontext2 = Regex.Unescape(jsontext.Remove(jsontext.Length - 1, 1).Remove(0, 1)); + + var jsons = JsonConvert.DeserializeObject(basejson); + string pathFile = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Files/Type/"; + //判断文件夹是否存在 + if (!Directory.Exists(pathFile)) + { + Directory.CreateDirectory(pathFile); + } + WebClient wc = new WebClient(); + + var list = jsons.msg.ToList(); + list.ForEach(c => + { + + wc.DownloadFile(string.Format("https://gaokao.chsi.com.cn/zyk/zybk/xkCategory/{0}?_t=1694748927326", c.key), string.Format(pathFile + "{0}.json", c.key)); + }); + + } + + /// + /// 下载三级分类 + /// + public void DownloadChildTypeListFile() + { + + string[] files = Directory.GetFiles(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Files/Type/"); + foreach (string itemfile in files) + { + var basejson = UniversityTypeRelsove.GetFileJson(itemfile); + var jsons = JsonConvert.DeserializeObject(basejson); + string pathFile = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Files/TypeChild/"; + //判断文件夹是否存在 + if (!Directory.Exists(pathFile)) + { + Directory.CreateDirectory(pathFile); + } + WebClient wc = new WebClient(); + + var list = jsons.msg.ToList(); + list.ForEach(c => + { + + wc.DownloadFile(string.Format("https://gaokao.chsi.com.cn/zyk/zybk/specialityesByCategory/{0}?_t=1694748927326", c.key), string.Format(pathFile + "{0}.json", c.key)); + }); + + Thread.Sleep(300); + } + } + + + + + + + public class Rootobject + { + public Msg[] msg { get; set; } + public bool flag { get; set; } + } + + public class Msg + { + public string key { get; set; } + public string name { get; set; } + } + + + } +} diff --git a/New_Spider/New_Spider.csproj b/New_Spider/New_Spider.csproj index da66fe9..91f8ed1 100644 --- a/New_Spider/New_Spider.csproj +++ b/New_Spider/New_Spider.csproj @@ -12,4 +12,8 @@ + + + + diff --git a/New_Spider/Program.cs b/New_Spider/Program.cs index e38bbc5..4be4f6c 100644 --- a/New_Spider/Program.cs +++ b/New_Spider/Program.cs @@ -3,9 +3,13 @@ using HtmlAgilityPack; using New_Spider; using System.Text.RegularExpressions; -HtmlAgHelper htmlAgHelper = new HtmlAgHelper(); +//HtmlAgHelper htmlAgHelper = new HtmlAgHelper(); + +//htmlAgHelper.HtmlCreatePageData(); +HtmlAgMajorHelper agMajorHelper = new HtmlAgMajorHelper(); +//agMajorHelper.DownloadTypeListFile(); +agMajorHelper.DownloadChildTypeListFile(); -htmlAgHelper.HtmlCreatePageData(); Console.Read();