Compare commits

..

2 Commits

Author SHA1 Message Date
sugarBecomer 3641fb1782 🐛 学习通答题 2025-12-12 11:49:57 +08:00
sugarBecomer d0e7652bf6 🐛 学习通答题 2025-12-12 11:37:33 +08:00
3 changed files with 37 additions and 36 deletions
@@ -302,6 +302,7 @@ func (c *XuexitongCourse) FetchChapterCards(ctx context.Context, course entity.X
CourseID: course.CourseID,
ClassID: course.Key,
Cpi: cpiStr,
Title: card.Title,
}
switch pointType {
@@ -439,32 +439,32 @@ func cleanText(text string) string {
// SubmitWorkAnswers 提交作业答案
func (c *XuexitongCourse) SubmitWorkAnswers(ctx context.Context, workDto *entity.WorkDto, isSave bool) (string, error) {
formData := url.Values{}
pyFlag := ""
if isSave {
pyFlag = "1"
}
formData.Set("pyFlag", pyFlag)
formData.Set("courseId", workDto.CourseId)
formData.Set("classId", workDto.ClassId)
formData.Set("api", workDto.Api)
formData.Set("workAnswerId", workDto.WorkAnswerId)
formData.Set("answerId", workDto.AnswerId)
formData.Set("totalQuestionNum", workDto.TotalQuestionNum)
formData.Set("fullScore", workDto.FullScore)
formData.Set("knowledgeid", workDto.KnowledgeId)
formData.Set("oldSchoolId", workDto.OldSchoolId)
formData.Set("oldWorkId", workDto.OldWorkId)
formData.Set("jobid", workDto.JobId)
formData.Set("workRelationId", workDto.WorkRelationId)
formData.Set("enc", "")
formData.Set("enc_work", workDto.EncWork)
formData.Set("userId", workDto.UserId)
formData.Set("cpi", workDto.Cpi)
formData.Set("workTimesEnc", "")
formData.Set("randomOptions", "false")
formData.Set("isAccessibleCustomFid", "0")
formMap := map[string]string{
"pyFlag": pyFlag,
"courseId": workDto.CourseId,
"classId": workDto.ClassId,
"api": workDto.Api,
"mooc": "0",
"workAnswerId": workDto.WorkAnswerId,
"answerId": "",
"totalQuestionNum": workDto.TotalQuestionNum,
"fullScore": workDto.FullScore,
"knowledgeid": workDto.KnowledgeId,
"oldSchoolId": workDto.OldSchoolId,
"oldWorkId": workDto.OldWorkId,
"jobid": workDto.JobId,
"workRelationId": workDto.WorkRelationId,
"enc_work": workDto.EncWork,
"isphone": "true",
"userId": workDto.UserId,
"workTimesEnc": "",
"isAccessibleCustomFid": "0",
}
answerwqbid := ""
for _, q := range workDto.Questions {
if q.Qid != "" {
@@ -474,24 +474,24 @@ func (c *XuexitongCourse) SubmitWorkAnswers(ctx context.Context, workDto *entity
switch q.Type {
case entity.QuestionTypeSingleChoice:
answer := strings.Join(q.Answers, "")
formData.Set("answer"+q.Qid, answer)
formData.Set("answertype"+q.Qid, "0")
formMap["answer"+q.Qid] = answer
formMap["answertype"+q.Qid] = "0"
case entity.QuestionTypeMultipleChoice:
answer := strings.Join(q.Answers, "")
formData.Set("answer"+q.Qid, answer)
formData.Set("answertype"+q.Qid, "1")
formMap["answer"+q.Qid] = answer
formMap["answertype"+q.Qid] = "1"
case entity.QuestionTypeFillBlank:
for key, val := range q.BlankAnswer {
re := regexp.MustCompile(`\d+`)
numbers := re.FindAllString(key, -1)
if len(numbers) > 0 {
formData.Set("answer"+q.Qid+numbers[0], val)
formMap["answer"+q.Qid+numbers[0]] = val
}
}
formData.Set("tiankongsize"+q.Qid, strconv.Itoa(q.BlankCount))
formData.Set("answertype"+q.Qid, "2")
formMap["tiankongsize"+q.Qid] = strconv.Itoa(q.BlankCount)
formMap["answertype"+q.Qid] = "2"
case entity.QuestionTypeTrueFalse:
answer := ""
@@ -504,16 +504,16 @@ func (c *XuexitongCourse) SubmitWorkAnswers(ctx context.Context, workDto *entity
answer = a
}
}
formData.Set("answer"+q.Qid, answer)
formData.Set("answertype"+q.Qid, "3")
formMap["answer"+q.Qid] = answer
formMap["answertype"+q.Qid] = "3"
case entity.QuestionTypeShortAnswer:
answer := strings.Join(q.Answers, "")
formData.Set("answer"+q.Qid, answer)
formData.Set("answertype"+q.Qid, "4")
formMap["answer"+q.Qid] = answer
formMap["answertype"+q.Qid] = "4"
}
}
formData.Set("answerwqbid", answerwqbid)
formMap["answerwqbid"] = answerwqbid
urlStr := fmt.Sprintf("%s?_classId=%s&courseid=%s&token=%s&totalQuestionNum=%s&ua=pc&formType=post&saveStatus=1&version=1&tempsave=1",
ApiWorkSubmit, workDto.ClassId, workDto.CourseId, workDto.EncWork, workDto.TotalQuestionNum)
@@ -523,7 +523,7 @@ func (c *XuexitongCourse) SubmitWorkAnswers(ctx context.Context, workDto *entity
resp, err := c.client.R().SetHeaders(map[string]string{
"User-Agent": GetUA("mobile"),
"Content-Type": "application/x-www-form-urlencoded",
}).SetBody(formData.Encode()).Post(urlStr)
}).SetFormData(formMap).Post(urlStr)
if err != nil {
return err
}
@@ -192,7 +192,7 @@ func (h *XuexitongTaskHandler) ProcessTask(ctx context.Context, task *asynq.Task
// 执行刷课(带AI配置)
err = courseService.AutoStudyByCourseIDWithOptions(ctx, targetCourse.CourseID, &xuexitong.AutoStudyOptions{
AIConfig: aiConfig,
AutoSubmit: false, // 默认不自动提交,仅保存
AutoSubmit: true, // 默认不自动提交,仅保存
})
if err != nil {
// 如果是时间限制导致的停止,不算失败