func GetStudentScore(user *models.Student, data []byte, cookies []*http.Cookie) (map[string]map[string]string, error) { userscorehref, _ := getUserScoreHref(string(data)) userscore_param, _, err := client.SendRequest("GET", Host_url+"/"+userscorehref, "", cookies, header) if err != nil { return nil, models.ErrorInfo("GetStudentScore", errors.New("连接失败,错误原因:"+err.Error())) } vierstate, eventvalidation, _ := getLoginKey(string(userscore_param)) userscore_info, _, err := client.SendRequest("POST", Host_url+"/"+userscorehref, url.Values{ "__VIEWSTATE": {vierstate}, "__EVENTVALIDATION": {eventvalidation}, "ddIXN": {""}, "ddIXQ": {""}, "Button1": {models.Utf82gbk("按学期查询")}, }.Encode(), cookies, header) if err != nil { return nil, models.ErrorInfo("GetStudentScore", errors.New("连接失败,错误原因:"+err.Error())) } userscore, _ := getUserScore(string(userscore_info)) for _, v := range userscore { if len(v) > 0 { if exist := models.CourseExist(v["课程名称"]); !exist { if exist := models.DepartmentExist(v["学院名称"]); !exist { if _, err := models.AddDepartment(&models.Department{Name: v["学院名称"]}); err == nil { EduLogCreate(&EduLog{Student: user, Content: v["学院名称"], Type: "department", Result: 1}) } else { EduLogCreate(&EduLog{Student: user, Content: v["学院名称"], Type: "department", Result: 0}) } } if department, err := models.GetDepartmentByName(v["学院名称"]); err == nil { f, _ := strconv.ParseFloat(v["学分"], 64) if err := models.AddCourse(&models.Course{Id: v["课程代码"], Name: v["课程名称"], Department: department, Remark: v["课程归属"], Type: v["课程性质"], Credit: f}); err == nil { EduLogCreate(&EduLog{Student: user, Content: v["课程名称"], Type: "course", Result: 1}) } else { EduLogCreate(&EduLog{Student: user, Content: v["课程名称"], Type: "course", Result: 0}) } } } } } return userscore, nil }
func GetStudentSchedule(user *models.Student, data []byte, cookies []*http.Cookie) (schedules map[*models.Term][]*models.TeacherCourse, err error) { if data == nil { return nil, models.ErrorInfo("GetStudentSchedule", errors.New("data in nil")) } userschedulehref, _ := getUserScheduleHref(string(data)) userschedule_data, _, err := client.SendRequest("GET", Host_url+"/"+userschedulehref, "", cookies, header) if err != nil { return nil, models.ErrorInfo("GetStudentSchedule", err) } // 获取当前学年度的学期 xq, _ := getUserXQ(string(userschedule_data)) // 根据用户的入学年份和当前学年度的学期 列出学期列表 xqs, err := getXQS(xq, user.EnterSchoolYear) if err != nil { return nil, models.ErrorInfo("GetStudentSchedule", err) } // 查询历年课表 schedules = make(map[*models.Term][]*models.TeacherCourse, len(xqs)) userschedule_xq_href, _ := getUserScheduleXQHref(string(userschedule_data)) vierstate, eventvalidation, _ := getLoginKey(string(userschedule_data)) for _, v := range xqs { // 判断学期是否存在 如果不存在则添加 if len(v["学年度"]) > 0 { if years := strings.Split(v["学年度"], "-"); len(years) == 2 { startyear, _ := strconv.Atoi(years[0]) endyear, _ := strconv.Atoi(years[1]) if len(v["学期"]) > 0 { num, _ := strconv.Atoi(v["学期"]) if exist := models.TermExist(num, startyear, endyear); !exist { if err := models.AddTerm(&models.Term{Number: num, StartYear: startyear, EndYear: endyear}); err == nil { EduLogCreate(&EduLog{Student: user, Content: `{"学年度": "` + v["学年度"] + `", "学期": "` + v["学期"] + `"}`, Type: "term", Result: 1}) } else { EduLogCreate(&EduLog{Student: user, Content: `{"学年度": "` + v["学年度"] + `", "学期": "` + v["学期"] + `"}`, Type: "term", Result: 0}) } } // 查询学期 term, err := models.SearchTerm(num, startyear, endyear) if err != nil { models.Info("EduGetStudentSchedule", err) continue } // 获取login key userschedule_temp_data, _, err := client.SendRequest("POST", Host_url+"/"+userschedule_xq_href, url.Values{ "__EVENTTARGET": {"ddlXQ"}, "__EVENTARGUMENT": {""}, "__LASTFOCUS": {""}, "__VIEWSTATE": {vierstate}, "__EVENTVALIDATION": {eventvalidation}, "ddlXN": {fmt.Sprintf("%d-%d", term.StartYear, term.EndYear)}, "ddlXQ": {fmt.Sprintf("%d", term.Number)}, }.Encode(), cookies, header) if err != nil { EduLogCreate(&EduLog{Student: user, Content: `获取` + v["学年度"] + ` ` + v["学期"] + `课表失败`, Type: "t_course", Result: 0}) continue } if !strings.Contains(string(userschedule_temp_data), `<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET"`) { EduLogCreate(&EduLog{Student: user, Content: `获取` + v["学年度"] + ` ` + v["学期"] + `课表失败`, Type: "t_course", Result: 0}) continue } usercourse, _, _ := getUserCourse(string(userschedule_temp_data), cookies) if usercourse == nil { EduLogCreate(&EduLog{Student: user, Content: `获取` + v["学年度"] + ` ` + v["学期"] + `课表失败`, Type: "t_course", Result: 0}) continue } // schedules[term] = make([]*models.TeacherCourse, len(usercourse)) for _, v := range usercourse { if len(v) > 0 { if exist := models.CourseExist(v["课程名称"]); !exist { if exist := models.DepartmentExist(v["教师所在系"]); !exist { if _, err := models.AddDepartment(&models.Department{Name: v["教师所在系"]}); err == nil { EduLogCreate(&EduLog{Student: user, Content: v["教师所在系"], Type: "department", Result: 1}) } else { EduLogCreate(&EduLog{Student: user, Content: v["教师所在系"], Type: "department", Result: 0}) } } if department, err := models.GetDepartmentByName(v["教师所在系"]); err == nil { if exist := models.TeacherExistByDep(v["教师姓名"], department.Id); !exist { if err := models.AddTeacher(&models.Teacher{Name: v["教师姓名"], Department: department, Password: "******", Headimgurl: "/static/img/avatar.jpeg"}); err == nil { EduLogCreate(&EduLog{Student: user, Content: v["教师姓名"], Type: "teacher", Result: 1}) } else { EduLogCreate(&EduLog{Student: user, Content: v["教师姓名"], Type: "teacher", Result: 0}) } } f, _ := strconv.ParseFloat(v["学分"], 64) if err := models.AddCourse(&models.Course{Id: v["课程代码"], Name: v["课程名称"], Department: department, Type: v["课程性质"], Credit: f}); err == nil { EduLogCreate(&EduLog{Student: user, Content: v["课程名称"], Type: "course", Result: 1}) } else { EduLogCreate(&EduLog{Student: user, Content: v["课程名称"], Type: "course", Result: 0}) } } } if department, err := models.GetDepartmentByName(v["教师所在系"]); err == nil { if teacher, err := models.SearchTeacher(v["教师姓名"], department.Id); err == nil { // search course if course, err := models.SearchCourse(v["课程名称"]); err == nil { if courseTime := getTime(v["上课时间"]); courseTime != nil { for _, v1 := range courseTime { end_week, _ := strconv.Atoi(v1["end_week"]) start_week, _ := strconv.Atoi(v1["start_week"]) spacing, _ := strconv.Atoi(v1["spacing"]) time := `{"week_day":"` + v1["week_day"] + `", "week_time":"` + v1["time"] + `"}` // add m2m between teacher and course if exist := models.TeacherCourseExist(course.Id, time, term.Id, teacher.Id); !exist { var teacher_course = &models.TeacherCourse{Course: course, Term: term, Teacher: teacher, Place: v["上课地点"], StartWeek: start_week, EndWeek: end_week, Time: time, Remark: v1["remark"], Spacing: spacing, } if err := models.AddTeacherCourse(teacher_course); err == nil { EduLogCreate(&EduLog{Student: user, Content: `教师 ` + teacher_course.Teacher.Name + ` 教授的课程:` + teacher_course.Course.Name + `, 上课时间:` + v["上课时间"] + `, 上课地点:` + v["上课地点"], Type: "t_course", Result: 1}) } else { models.Info("EduGetStudentSchedule", err) EduLogCreate(&EduLog{Student: user, Content: `教师 ` + teacher_course.Teacher.Name + ` 教授的课程:` + teacher_course.Course.Name + `, 上课时间:` + v["上课时间"] + `, 上课地点:` + v["上课地点"], Type: "t_course", Result: 0}) } } // search teacher course if t_course, err := models.SearchTeacherCourse(course.Id, time, term.Id, teacher.Id); err == nil { // add m2m between teacher_course and class if exist := models.ExistTeacherCourseAndClass(t_course.Id, user.Class.Id); !exist { if err := models.AddM2MBetweenTeacherCourseAndClass(t_course.Id, user.Class.Id); err == nil { EduLogCreate(&EduLog{Student: user, Content: `教师 ` + t_course.Teacher.Name + ` 教授的课程:` + t_course.Course.Name + `,班级:` + user.Class.Name, Type: "t_course_class", Result: 1}) } else { EduLogCreate(&EduLog{Student: user, Content: `教师 ` + t_course.Teacher.Name + ` 教授的课程:` + t_course.Course.Name + `,班级:` + user.Class.Name, Type: "t_course_class", Result: 0}) } } // add m2m between teacher_course and student if exist := models.StudentCourseExist(user.Id, t_course.Id); !exist { // add student course if err := models.AddStudentCourse(&models.StudentCourse{Student: user, TeacherCourse: t_course}); err == nil { EduLogCreate(&EduLog{Student: user, Content: `教师 ` + t_course.Teacher.Name + ` 教授的课程:` + t_course.Course.Name + `, 上课时间:` + v["上课时间"] + `, 上课地点:` + v["上课地点"], Type: "s_course", Result: 1}) } else { EduLogCreate(&EduLog{Student: user, Content: `教师 ` + t_course.Teacher.Name + ` 教授的课程:` + t_course.Course.Name + `, 上课时间:` + v["上课时间"] + `, 上课地点:` + v["上课地点"], Type: "s_course", Result: 0}) } } schedules[term] = append(schedules[term], t_course) } } } } } } } } } } } } return schedules, nil }