Commit d74dd1e8 authored by 黄奎's avatar 黄奎

新增实体类

parent 852eb413
using EduSpider.Model.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VTX.FW.Config;
using VTX.FW.DB;
namespace EduSpider.IRepository
{
/// <summary>
/// 作业仓储层接口
/// </summary>
public interface IHomeWorkRepository : IDBRepository<RB_HomeWork>, IDependency
{
/// <summary>
/// 批量添加学生家庭作业
/// </summary>
/// <param name="homeWorks"></param>
/// <returns></returns>
public bool BatchSetHomeWorkRepository(List<RB_HomeWork> homeWorks);
}
}
...@@ -110,5 +110,20 @@ namespace EduSpider.Model.Entity ...@@ -110,5 +110,20 @@ namespace EduSpider.Model.Entity
/// 课程类型(1-标准课,公开课) /// 课程类型(1-标准课,公开课)
/// </summary> /// </summary>
public CourseTypeEnum courseType { get; set; } public CourseTypeEnum courseType { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime addTime { get; set; }
/// <summary>
/// 课程图片
/// </summary>
public string courseWare { get; set; }
/// <summary>
/// 封面图
/// </summary>
public string coverImg { get; set; }
} }
} }
...@@ -39,5 +39,10 @@ namespace EduSpider.Model.Entity ...@@ -39,5 +39,10 @@ namespace EduSpider.Model.Entity
/// 课程编号 /// 课程编号
/// </summary> /// </summary>
public int courseId { get; set; } public int courseId { get; set; }
/// <summary>
/// 课程教师编号
/// </summary>
public int courseTeacherId { get; set; }
} }
} }
using System;
using VTX.FW.Attr;
namespace EduSpider.Model.Entity
{
/// <summary>
/// 作业实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_HomeWork
{
/// <summary>
/// 作业编号
/// </summary>
public int homework_id { get; set; }
/// <summary>
/// 作业标题
/// </summary>
public string homework_title { get; set; }
/// <summary>
/// 作业分享Key
/// </summary>
public string homework_share_key { get; set; }
/// <summary>
/// 课程编号
/// </summary>
public int? course_id { get; set; }
/// <summary>
/// 课程名称
/// </summary>
public string course_name { get; set; }
/// <summary>
/// 作业开始时间
/// </summary>
public DateTime? start_time { get; set; }
/// <summary>
/// 作业结束时间
/// </summary>
public DateTime? end_time { get; set; }
/// <summary>
/// 作业状态(0-未开始,1-进行中,2-已结束)
/// </summary>
public int? status { get; set; }
/// <summary>
/// 显示状态(0-客户端显示,1-客户端隐藏)
/// </summary>
public int? is_del { get; set; }
/// <summary>
/// 是否公开作业(1-公开作业,2-不公开,3-公开优秀)
/// </summary>
public string is_open { get; set; }
/// <summary>
/// 公开方式(1-结束后)
/// </summary>
public string open_type { get; set; }
/// <summary>
/// 是否允许补交(1-否,2-是)
/// </summary>
public string is_revise { get; set; }
/// <summary>
/// 学生数
/// </summary>
public int? num { get; set; }
/// <summary>
/// 优秀人数
/// </summary>
public int? cream_num { get; set; }
/// <summary>
/// revised_num
/// </summary>
public int? revised_num { get; set; }
/// <summary>
/// 已批阅
/// </summary>
public int? rnum { get; set; }
/// <summary>
/// 已提交
/// </summary>
public int? cnum { get; set; }
/// <summary>
/// 学校编号
/// </summary>
public int? school_uid { get; set; }
/// <summary>
/// 评分机制(5-自定义,4-不评分,3-等第制,2-十分制,1-百分制)
/// </summary>
public int? score_type { get; set; }
/// <summary>
/// 自定义分数
/// </summary>
public decimal? score_value { get; set; }
/// <summary>
/// 教师账号
/// </summary>
public string teacher_account { get; set; }
/// <summary>
/// 教师姓名
/// </summary>
public string teacher_name { get; set; }
/// <summary>
/// 教师编号
/// </summary>
public int? teacher_uid { get; set; }
/// <summary>
/// th_cancel
/// </summary>
public string th_cancel { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime add_time { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime update_time { get; set; }
}
}
...@@ -33,7 +33,7 @@ namespace EduSpider.Repository ...@@ -33,7 +33,7 @@ namespace EduSpider.Repository
public List<RB_Course> GetCourseListRepository(CourseQuery query) public List<RB_Course> GetCourseListRepository(CourseQuery query)
{ {
var parameters = new DynamicParameters(); var parameters = new DynamicParameters();
StringBuilder builder = new StringBuilder(); StringBuilder builder = new();
builder.AppendFormat(@" builder.AppendFormat(@"
SELECT A.* SELECT A.*
FROM RB_Course AS A FROM RB_Course AS A
...@@ -65,7 +65,7 @@ WHERE 1=1 ...@@ -65,7 +65,7 @@ WHERE 1=1
public List<RB_Course> GetCoursePageRepository(int pageIndex, int pageSize, out long rowsCount, CourseQuery query) public List<RB_Course> GetCoursePageRepository(int pageIndex, int pageSize, out long rowsCount, CourseQuery query)
{ {
var parameters = new DynamicParameters(); var parameters = new DynamicParameters();
StringBuilder builder = new StringBuilder(); StringBuilder builder = new();
builder.AppendFormat(@" builder.AppendFormat(@"
SELECT A.* SELECT A.*
FROM RB_Course AS A FROM RB_Course AS A
......
using EduSpider.IRepository;
using EduSpider.Model.Entity;
using EduSpider.Repository.Base;
using System.Collections.Generic;
namespace EduSpider.Repository
{
/// <summary>
/// 作业仓储层实现
/// </summary>
public class HomeWorkRepository : BaseRepository<RB_HomeWork>, IHomeWorkRepository
{
/// <summary>
/// 批量添加学生家庭作业
/// </summary>
/// <param name="homeWorks"></param>
/// <returns></returns>
public bool BatchSetHomeWorkRepository(List<RB_HomeWork> homeWorks)
{
bool flag;
flag = base.BatchInsert(homeWorks, isReplace: true);
return flag;
}
}
}
using Newtonsoft.Json.Linq; using OpenCvSharp;
using OpenCvSharp;
using OpenQA.Selenium; using OpenQA.Selenium;
using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions; using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Remote;
using System; using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO; using System.IO;
using System.Linq;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
...@@ -68,8 +60,8 @@ namespace TicketSpider.Spiders.ClassInRule ...@@ -68,8 +60,8 @@ namespace TicketSpider.Spiders.ClassInRule
public static bool RunAsync() public static bool RunAsync()
{ {
var flag = false; var flag = false;
IWebElement inputEle = null; IWebElement inputEle;
IWebElement pwdEle = null; IWebElement pwdEle;
var option = new ChromeOptions(); var option = new ChromeOptions();
option.AddArgument("--incognito"); option.AddArgument("--incognito");
option.AddArgument("headless"); option.AddArgument("headless");
...@@ -240,9 +232,8 @@ namespace TicketSpider.Spiders.ClassInRule ...@@ -240,9 +232,8 @@ namespace TicketSpider.Spiders.ClassInRule
var res = new Mat(); var res = new Mat();
Cv2.MatchTemplate(bgPic,tpPic,res, TemplateMatchModes.CCoeffNormed); Cv2.MatchTemplate(bgPic,tpPic,res, TemplateMatchModes.CCoeffNormed);
double minVal = 0, maxVal = 0;
OpenCvSharp.Point minLoc = new OpenCvSharp.Point(), maxLoc = new OpenCvSharp.Point(); OpenCvSharp.Point minLoc = new OpenCvSharp.Point(), maxLoc = new OpenCvSharp.Point();
Cv2.MinMaxLoc(res,out minVal,out maxVal,out minLoc,out maxLoc); Cv2.MinMaxLoc(res,out double minVal,out double maxVal,out minLoc,out maxLoc);
var bt = new OpenCvSharp.Point(maxLoc.X+tpPic.Width,maxLoc.Y+tpPic.Height); var bt = new OpenCvSharp.Point(maxLoc.X+tpPic.Width,maxLoc.Y+tpPic.Height);
Cv2.Rectangle(bgImg, maxLoc, bt, Scalar.Red, 2); Cv2.Rectangle(bgImg, maxLoc, bt, Scalar.Red, 2);
...@@ -256,16 +247,17 @@ namespace TicketSpider.Spiders.ClassInRule ...@@ -256,16 +247,17 @@ namespace TicketSpider.Spiders.ClassInRule
{ {
while (_openHeartTimer) while (_openHeartTimer)
{ {
var handler = new HttpClientHandler(); var handler = new HttpClientHandler
handler.AllowAutoRedirect = false; {
handler.UseCookies = true; AllowAutoRedirect = false,
handler.CookieContainer = CreateCookie(); UseCookies = true,
handler.AutomaticDecompression = DecompressionMethods.GZip; CookieContainer = CreateCookie(),
handler.ClientCertificateOptions = ClientCertificateOption.Automatic; AutomaticDecompression = DecompressionMethods.GZip,
ClientCertificateOptions = ClientCertificateOption.Automatic
};
var http = new HttpClient(handler); var http = new HttpClient(handler);
http.GetAsync("https://console.eeo.cn/saas/school/index.html#/fullPage/Index?lang=zh-CN"); http.GetAsync("https://console.eeo.cn/saas/school/index.html#/fullPage/Index?lang=zh-CN");
//TODO:检查是否需要重新登录 //TODO:检查是否需要重新登录
Thread.Sleep(60 * 1000); Thread.Sleep(60 * 1000);
} }
} }
......
...@@ -44,11 +44,13 @@ namespace EduSpider.Spiders.ClassInRule ...@@ -44,11 +44,13 @@ namespace EduSpider.Spiders.ClassInRule
if (tempList != null && tempList.Count > 0) if (tempList != null && tempList.Count > 0)
{ {
courseRepository.BatchSetCourseRepository(tempList); courseRepository.BatchSetCourseRepository(tempList);
totalCount += tempList.Count(); totalCount += tempList.Count;
Console.WriteLine(string.Format("第{0}次,导入完成{1}条.", pageCount,totalCount)); Console.WriteLine(string.Format("第{0}次,导入完成{1}条.", pageCount, totalCount));
foreach (var item in tempList) foreach (var item in tempList)
{ {
RunCourseStudent(cookie, item.courseId); RunCourseStudent(cookie, item.courseId);
RunCourseTeacher(cookie, item.courseId);
RunCourseInfo(cookie, item.courseId);
} }
} }
if (totalNum % perpage == 0) if (totalNum % perpage == 0)
...@@ -80,11 +82,13 @@ namespace EduSpider.Spiders.ClassInRule ...@@ -80,11 +82,13 @@ namespace EduSpider.Spiders.ClassInRule
if (subtempList != null && subtempList.Count > 0) if (subtempList != null && subtempList.Count > 0)
{ {
courseRepository.BatchSetCourseRepository(subtempList); courseRepository.BatchSetCourseRepository(subtempList);
totalCount += subtempList.Count(); totalCount += subtempList.Count;
Console.WriteLine(string.Format("第{0}次,导入完成{1}条.", i, totalCount)); Console.WriteLine(string.Format("第{0}次,导入完成{1}条.", i, totalCount));
foreach (var sItem in subtempList) foreach (var sItem in subtempList)
{ {
RunCourseStudent(cookie, sItem.courseId); RunCourseStudent(cookie, sItem.courseId);
RunCourseTeacher(cookie, sItem.courseId);
RunCourseInfo(cookie, sItem.courseId);
} }
} }
} }
...@@ -101,7 +105,7 @@ namespace EduSpider.Spiders.ClassInRule ...@@ -101,7 +105,7 @@ namespace EduSpider.Spiders.ClassInRule
/// </summary> /// </summary>
/// <param name="data"></param> /// <param name="data"></param>
/// <returns></returns> /// <returns></returns>
public List<RB_Course> ParseJson(string data) public static List<RB_Course> ParseJson(string data)
{ {
List<RB_Course> list = new List<RB_Course>(); List<RB_Course> list = new List<RB_Course>();
JArray courseArray = JArray.Parse(data); JArray courseArray = JArray.Parse(data);
...@@ -144,10 +148,10 @@ namespace EduSpider.Spiders.ClassInRule ...@@ -144,10 +148,10 @@ namespace EduSpider.Spiders.ClassInRule
} }
/// <summary> /// <summary>
/// 获取课程学员列表 /// 获取课程关联学员列表
/// </summary> /// </summary>
public async void RunCourseStudent(string cookie,int courseId) public static async void RunCourseStudent(string cookie, int courseId)
{ {
var request = Utility.HttpHelper.GenerateHttp(cookie); var request = Utility.HttpHelper.GenerateHttp(cookie);
string queryStr = "courseId={0}"; string queryStr = "courseId={0}";
...@@ -157,14 +161,14 @@ namespace EduSpider.Spiders.ClassInRule ...@@ -157,14 +161,14 @@ namespace EduSpider.Spiders.ClassInRule
Console.WriteLine(string.Format("开始获取{0}课程学员数据", courseId)); Console.WriteLine(string.Format("开始获取{0}课程学员数据", courseId));
var response = await request.PostAsync("https://console.eeo.cn/saasajax/student.ajax.php?action=getCourseStudentList", content); var response = await request.PostAsync("https://console.eeo.cn/saasajax/student.ajax.php?action=getCourseStudentList", content);
var result = response.Content.ReadAsStringAsync().Result; var sutResult = response.Content.ReadAsStringAsync().Result;
List<RB_Course_Student> list = new List<RB_Course_Student>(); List<RB_Course_Student> list = new List<RB_Course_Student>();
if (!string.IsNullOrWhiteSpace(result)) if (!string.IsNullOrWhiteSpace(sutResult))
{ {
JObject rootObj = JObject.Parse(result); JObject stuRootObj = JObject.Parse(sutResult);
if (!string.IsNullOrWhiteSpace(rootObj.GetString("data"))) if (!string.IsNullOrWhiteSpace(stuRootObj.GetString("data")))
{ {
JArray courseStudentArray = JArray.Parse(rootObj.GetString("data")); JArray courseStudentArray = JArray.Parse(stuRootObj.GetString("data"));
if (courseStudentArray != null && courseStudentArray.Count > 0) if (courseStudentArray != null && courseStudentArray.Count > 0)
{ {
foreach (var jItem in courseStudentArray) foreach (var jItem in courseStudentArray)
...@@ -172,12 +176,12 @@ namespace EduSpider.Spiders.ClassInRule ...@@ -172,12 +176,12 @@ namespace EduSpider.Spiders.ClassInRule
JObject courseStuObj = JObject.Parse(jItem.ToString()); JObject courseStuObj = JObject.Parse(jItem.ToString());
list.Add(new RB_Course_Student() list.Add(new RB_Course_Student()
{ {
id=courseStuObj.GetInt("id"), id = courseStuObj.GetInt("id"),
uid=courseStuObj.GetInt("uid"), uid = courseStuObj.GetInt("uid"),
name = courseStuObj.GetString("name"), name = courseStuObj.GetString("name"),
account = courseStuObj.GetString("account"), account = courseStuObj.GetString("account"),
logo= courseStuObj.GetString("logo"), logo = courseStuObj.GetString("logo"),
courseId= courseId courseId = courseId
}); });
} }
} }
...@@ -188,5 +192,120 @@ namespace EduSpider.Spiders.ClassInRule ...@@ -188,5 +192,120 @@ namespace EduSpider.Spiders.ClassInRule
courseStudentRepository.BatchSetCourseStudentRepository(list); courseStudentRepository.BatchSetCourseStudentRepository(list);
} }
} }
/// <summary>
/// 获取课程关联老师列表
/// </summary>
/// <param name="cookie"></param>
/// <param name="courseId"></param>
public static async void RunCourseTeacher(string cookie, int courseId)
{
var request = Utility.HttpHelper.GenerateHttp(cookie);
string queryStr = "courseId={0}";
string paramStr = string.Format(queryStr, courseId);
var content = new StringContent(paramStr, System.Text.Encoding.UTF8, "application/x-www-form-urlencoded");
ICourseTeacherRepository courseTeacherRepository = new CourseTeacherRepository();
Console.WriteLine(string.Format("开始获取{0}课程老师数据", courseId));
var response = await request.PostAsync("https://console.eeo.cn/saasajax/course.ajax.php?action=getCourseTeacherList", content);
var teacherResult = response.Content.ReadAsStringAsync().Result;
List<RB_Course_Teacher> list = new List<RB_Course_Teacher>();
if (!string.IsNullOrWhiteSpace(teacherResult))
{
JObject teacherRootObj = JObject.Parse(teacherResult);
if (!string.IsNullOrWhiteSpace(teacherRootObj.GetString("data")))
{
JObject teacherObj= JObject.Parse(teacherRootObj.GetString("data"));
if (!string.IsNullOrWhiteSpace(teacherObj.GetString("teacherList")))
{
JArray courseTeacherArray = JArray.Parse(teacherObj.GetString("teacherList"));
if (courseTeacherArray != null && courseTeacherArray.Count > 0)
{
foreach (var jItem in courseTeacherArray)
{
JObject courseTeacherObj = JObject.Parse(jItem.ToString());
JObject infoObj = JObject.Parse(courseTeacherObj.GetString("teacherInfo"));
list.Add(new RB_Course_Teacher()
{
id = infoObj.GetInt("id"),
uid = infoObj.GetInt("uid"),
phone = infoObj.GetString("phone"),
logo = infoObj.GetString("logo"),
name = infoObj.GetString("name"),
courseId = courseId,
courseTeacherId= courseTeacherObj.GetInt("courseTeacherId")
});
}
}
}
}
}
if (list != null && list.Count > 0)
{
courseTeacherRepository.BatchSetCourseTeacherRepository(list);
}
}
/// <summary>
/// 查询课程信息
/// </summary>
/// <param name="cookie"></param>
/// <param name="courseId"></param>
public static async void RunCourseInfo(string cookie, int courseId)
{
var request = Utility.HttpHelper.GenerateHttp(cookie);
string queryStr = "courseId={0}";
string paramStr = string.Format(queryStr, courseId);
var content = new StringContent(paramStr, System.Text.Encoding.UTF8, "application/x-www-form-urlencoded");
ICourseRepository courseRepository = new CourseRepository();
Console.WriteLine(string.Format("开始获取{0}课程详情数据", courseId));
var response = await request.PostAsync("https://console.eeo.cn/saasajax/course.ajax.php?action=getCourseInfo", content);
var courseInfoResult = response.Content.ReadAsStringAsync().Result;
List<RB_Course> list = new List<RB_Course>();
if (!string.IsNullOrWhiteSpace(courseInfoResult))
{
JObject courseRootObj = JObject.Parse(courseInfoResult);
if (!string.IsNullOrWhiteSpace(courseRootObj.GetString("data")))
{
JObject courseObj = JObject.Parse(courseRootObj.GetString("data"));
var expiryTime = ConvertHelper.UnixToDateTime(courseObj.GetInt("expiryTime"));
if (ConvertHelper.FormatTime(expiryTime) == "1970-01-01 08:00:00")
{
expiryTime = new DateTime(0001, 01, 01);
}
list.Add(new RB_Course()
{
courseId = courseObj.GetInt("courseId"),
courseName = courseObj.GetString("courseName"),
beginTime = ConvertHelper.UnixToDateTime(courseObj.GetInt("beginTime")),
completeNum = courseObj.GetInt("completeNum"),
totalClassNum = courseObj.GetInt("totalClassNum"),
expiryTime = expiryTime,
liveNum = courseObj.GetInt("liveNum"),
recordNum = courseObj.GetInt("recordNum"),
openNum = courseObj.GetInt("openNum"),
studentNum = courseObj.GetInt("studentNum"),
auditNum = courseObj.GetInt("auditNum"),
teacherNum = courseObj.GetInt("teacherNum"),
courseStatus = (CourseStatusEnum)courseObj.GetInt("courseStatus"),
webCast = courseObj.GetString("webCast"),
teacherId = courseObj.GetInt("teacherId"),
teacherAccount = courseObj.GetString("teacherAccount"),
teacherUid = courseObj.GetInt("teacherUid"),
teacherName = courseObj.GetString("teacherName"),
teacherLogo = courseObj.GetString("teacherLogo"),
courseType = (CourseTypeEnum)courseObj.GetInt("courseType"),
addTime= ConvertHelper.UnixToDateTime(courseObj.GetInt("addTime")),
courseWare= courseObj.GetString("courseWare"),
coverImg=courseObj.GetString("coverImg"),
});
}
}
if (list != null && list.Count > 0)
{
courseRepository.BatchSetCourseRepository(list);
}
}
} }
} }
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
using EduSpider.Model.Entity; using EduSpider.Model.Entity;
using EduSpider.Repository; using EduSpider.Repository;
using EduSpider.Utility; using EduSpider.Utility;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment