forked from Open-CT/openscore
1060 lines
28 KiB
Go
1060 lines
28 KiB
Go
package controllers
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"log"
|
|
"math"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/open-ct/openscore/model"
|
|
"github.com/open-ct/openscore/service/paper"
|
|
)
|
|
|
|
func (c *ApiController) Display() {
|
|
defer c.ServeJSON()
|
|
var requestBody TestRequest
|
|
err := json.Unmarshal(c.Ctx.Input.RequestBody, &requestBody)
|
|
if err != nil {
|
|
resp := Response{"10001", "cannot unmarshal", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
testId := requestBody.TestId
|
|
|
|
var testPaper model.TestPaper
|
|
var topic model.Topic
|
|
var subTopic []model.SubTopic
|
|
var response TestDisplayResponse
|
|
|
|
_, err = testPaper.GetTestPaper(testId)
|
|
if err != nil {
|
|
resp := Response{"10002", "get test paper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
err = topic.GetTopic(testPaper.QuestionId)
|
|
if err != nil {
|
|
resp := Response{"10003", "get topic fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
err = model.GetSubTopicsByTestId(testPaper.QuestionId, &subTopic)
|
|
if err != nil {
|
|
resp := Response{"10004", "get subtopic fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
for i := 0; i < len(subTopic); i++ {
|
|
var testPaperInfo model.TestPaperInfo
|
|
err = testPaperInfo.GetTestPaperInfoByTestIdAndQuestionDetailId(testId, subTopic[i].QuestionDetailId)
|
|
if err != nil {
|
|
resp := Response{"10005", "get testPaperInfo fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
tempSubTopic := SubTopicPlus{SubTopic: subTopic[i], TestDetailId: testPaperInfo.TestDetailId}
|
|
|
|
response.SubTopics = append(response.SubTopics, tempSubTopic)
|
|
picName := testPaperInfo.PicSrc
|
|
// 图片地址拼接 ,按服务器
|
|
// src := "C:\\Users\\yang\\Desktop\\阅卷系统\\img\\" + picName
|
|
src := "./img/" + picName
|
|
|
|
bytes, err := os.ReadFile(src)
|
|
if err != nil {
|
|
log.Println(err)
|
|
resp := Response{"30020", "get 图片显示异常 ", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
encoding := base64.StdEncoding.EncodeToString(bytes)
|
|
tempTestPaperInfo := TestPaperInfoPlus{TestPaperInfo: testPaperInfo, PicCode: encoding}
|
|
response.TestInfos = append(response.TestInfos, tempTestPaperInfo)
|
|
}
|
|
response.QuestionId = topic.QuestionId
|
|
response.QuestionName = topic.QuestionName
|
|
response.TestId = testId
|
|
resp := Response{"10000", "OK", response}
|
|
c.Data["json"] = resp
|
|
}
|
|
|
|
func (c *ApiController) List() {
|
|
var response TestListResponse
|
|
|
|
userId, err := c.GetSessionUserId()
|
|
|
|
if err != nil {
|
|
resp := Response{Status: "10001", Msg: "get user info fail", Data: err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
if err := model.GetDistributedTestIdPaperByUserId(userId, &response.TestIds); err != nil {
|
|
c.ResponseError("get distribution fail", err)
|
|
return
|
|
}
|
|
if len(response.TestIds) != 0 {
|
|
c.ResponseOk(response)
|
|
return
|
|
}
|
|
|
|
u := model.User{}
|
|
if err := u.GetUser(userId); err != nil {
|
|
c.ResponseError("get user info fail", err)
|
|
return
|
|
}
|
|
|
|
// 查询相应试卷
|
|
papers, err := paper.FindUnDistributeTest(u.QuestionId)
|
|
if err != nil {
|
|
c.ResponseError("试卷分配异常,无法获取未分配试卷 ", err)
|
|
return
|
|
}
|
|
if len(papers) == 0 {
|
|
c.ResponseOk("there is no paper to correct")
|
|
return
|
|
}
|
|
|
|
if len(papers) > 10 {
|
|
papers = papers[:10]
|
|
}
|
|
|
|
response.TestIds = make([]int64, len(papers))
|
|
for i, p := range papers {
|
|
response.TestIds[i] = p.TestId
|
|
p.CorrectingNumber++
|
|
if err := p.Update(); err != nil {
|
|
c.ResponseError("无法更改试卷状态 ", err)
|
|
return
|
|
}
|
|
|
|
// 添加试卷未批改记录
|
|
underCorrectedPaper := model.UnderCorrectedPaper{
|
|
TestId: p.TestId,
|
|
QuestionId: p.QuestionId,
|
|
TestQuestionType: 1,
|
|
UserId: userId,
|
|
}
|
|
if err := underCorrectedPaper.Save(); err != nil {
|
|
c.ResponseError("无法生成待批改试卷 ", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
go func() {
|
|
time.Sleep(30 * time.Minute)
|
|
for _, p := range papers {
|
|
p.GetTestPaper(p.TestId)
|
|
p.CorrectingNumber--
|
|
if err := p.UpdateCols("correcting_number"); err != nil {
|
|
c.ResponseError("无法更改试卷状态 ", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
if err := model.DeleteUnderCorrectedPaperByUserId(userId); err != nil {
|
|
c.ResponseError("delete underCorrectedPaper fail after 30 min", err)
|
|
return
|
|
}
|
|
}()
|
|
|
|
c.ResponseOk(response)
|
|
}
|
|
|
|
func (c *ApiController) Point() {
|
|
defer c.ServeJSON()
|
|
var requestBody TestPoint
|
|
var resp Response
|
|
var err error
|
|
err = json.Unmarshal(c.Ctx.Input.RequestBody, &requestBody)
|
|
if err != nil {
|
|
resp := Response{"10001", "cannot unmarshal", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
userId, err := c.GetSessionUserId()
|
|
if err != nil {
|
|
resp := Response{Status: "10001", Msg: "get user info fail", Data: err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
scoresStr := requestBody.Scores
|
|
testId := requestBody.TestId
|
|
testDetailIdStr := requestBody.TestDetailId
|
|
scores := strings.Split(scoresStr, "-")
|
|
testDetailIds := strings.Split(testDetailIdStr, "-")
|
|
// -------------------------------------------------------
|
|
|
|
// 获取该试卷大题 和抽象大题信息
|
|
var test model.TestPaper
|
|
var topic model.Topic
|
|
_, err = test.GetTestPaper(testId)
|
|
if err != nil || test.TestId == 0 {
|
|
resp := Response{"10002", "get test paper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
err = topic.GetTopic(test.QuestionId)
|
|
if err != nil || topic.QuestionId == 0 {
|
|
resp := Response{"10003", "get topic fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
// 获取试卷未批改表信息(试卷批改状态类型)
|
|
var underTest model.UnderCorrectedPaper
|
|
err = underTest.GetUnderCorrectedPaper(userId, testId)
|
|
if err != nil || underTest.QuestionId == 0 {
|
|
resp := Response{"10004", "get underCorrected fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
if underTest.TestQuestionType == 0 {
|
|
standardError := topic.StandardError
|
|
|
|
// 分三种情况
|
|
if userId == test.ExaminerFirstId {
|
|
var sum int64
|
|
// 给试卷详情表打分
|
|
for i := 0; i < len(testDetailIds); i++ {
|
|
// 取出小题试卷id,和小题分数
|
|
var testInfo model.TestPaperInfo
|
|
testDetailIdString := testDetailIds[i]
|
|
testDetailId, _ := strconv.ParseInt(testDetailIdString, 10, 64)
|
|
scoreString := scores[i]
|
|
score, _ := strconv.ParseInt(scoreString, 10, 64)
|
|
// ------------------------------------------------
|
|
|
|
// 查试卷小题
|
|
err := testInfo.GetTestPaperInfo(testDetailId)
|
|
if err != nil {
|
|
resp := Response{"10008", "get testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
// 修改试卷详情表
|
|
|
|
testInfo.ExaminerFirstSelfScore = score
|
|
|
|
err = testInfo.Update()
|
|
if err != nil {
|
|
resp := Response{"10009", "update testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
sum += score
|
|
}
|
|
// 给试卷表打分
|
|
|
|
test.ExaminerFirstSelfScore = sum
|
|
err = test.Update()
|
|
if err != nil {
|
|
resp := Response{"10007", "update test fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
// 删除试卷待批改表 ,增加试卷记录表
|
|
var record model.ScoreRecord
|
|
var underTest model.UnderCorrectedPaper
|
|
|
|
err = model.GetSelfScorePaperByTestQuestionTypeAndTestId(&underTest, testId, userId)
|
|
if err != nil {
|
|
resp = Response{"20012", "GetUnderCorrectedPaperByUserIdAndTestId fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
record.Score = sum
|
|
record.TestId = testId
|
|
record.TestRecordType = underTest.TestQuestionType
|
|
record.UserId = userId
|
|
record.QuestionId = underTest.QuestionId
|
|
|
|
err = record.Save()
|
|
if err != nil {
|
|
resp = Response{"20013", "Save fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
err = underTest.SelfMarkDelete()
|
|
if err != nil {
|
|
resp = Response{"20014", "Delete fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
if math.Abs(float64(sum-test.ExaminerFirstScore)) > float64(standardError) {
|
|
var newUnderTest model.UnderCorrectedPaper
|
|
newUnderTest.UserId = 10000
|
|
newUnderTest.SelfScoreId = userId
|
|
newUnderTest.TestId = testId
|
|
newUnderTest.QuestionId = test.QuestionId
|
|
newUnderTest.TestQuestionType = 7
|
|
newUnderTest.Save()
|
|
}
|
|
|
|
} else if userId == test.ExaminerSecondId {
|
|
var sum int64
|
|
// 给试卷详情表打分
|
|
for i := 0; i < len(testDetailIds); i++ {
|
|
// 取出小题试卷id,和小题分数
|
|
var testInfo model.TestPaperInfo
|
|
testDetailIdString := testDetailIds[i]
|
|
testDetailId, _ := strconv.ParseInt(testDetailIdString, 10, 64)
|
|
scoreString := scores[i]
|
|
score, _ := strconv.ParseInt(scoreString, 10, 64)
|
|
// ------------------------------------------------
|
|
|
|
// 查试卷小题
|
|
err := testInfo.GetTestPaperInfo(testDetailId)
|
|
if err != nil {
|
|
resp := Response{"10008", "get testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
// 修改试卷详情表
|
|
|
|
testInfo.ExaminerSecondSelfScore = score
|
|
|
|
err = testInfo.Update()
|
|
if err != nil {
|
|
resp := Response{"10009", "update testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
sum += score
|
|
}
|
|
// 给试卷表打分
|
|
|
|
test.ExaminerSecondSelfScore = sum
|
|
|
|
err = test.Update()
|
|
if err != nil {
|
|
resp := Response{"10007", "update test fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
// 删除试卷待批改表 ,增加试卷记录表
|
|
var record model.ScoreRecord
|
|
var underTest model.UnderCorrectedPaper
|
|
|
|
err = model.GetSelfScorePaperByTestQuestionTypeAndTestId(&underTest, testId, userId)
|
|
if err != nil {
|
|
resp = Response{"20012", "GetUnderCorrectedPaperByUserIdAndTestId fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
record.Score = sum
|
|
record.TestId = testId
|
|
record.TestRecordType = underTest.TestQuestionType
|
|
record.UserId = userId
|
|
record.QuestionId = underTest.QuestionId
|
|
err = record.Save()
|
|
if err != nil {
|
|
resp = Response{"20013", "Save fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
err = underTest.SelfMarkDelete()
|
|
if err != nil {
|
|
resp = Response{"20014", "Delete fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
if math.Abs(float64(sum-test.ExaminerSecondScore)) > float64(standardError) {
|
|
var newUnderTest model.UnderCorrectedPaper
|
|
newUnderTest.UserId = 10000
|
|
newUnderTest.TestId = testId
|
|
newUnderTest.SelfScoreId = userId
|
|
newUnderTest.QuestionId = test.QuestionId
|
|
newUnderTest.TestQuestionType = 7
|
|
newUnderTest.Save()
|
|
}
|
|
|
|
} else if userId == test.ExaminerThirdId {
|
|
var sum int64
|
|
// 给试卷详情表打分
|
|
for i := 0; i < len(testDetailIds); i++ {
|
|
// 取出小题试卷id,和小题分数
|
|
var testInfo model.TestPaperInfo
|
|
testDetailIdString := testDetailIds[i]
|
|
testDetailId, _ := strconv.ParseInt(testDetailIdString, 10, 64)
|
|
scoreString := scores[i]
|
|
score, _ := strconv.ParseInt(scoreString, 10, 64)
|
|
// ------------------------------------------------
|
|
|
|
// 查试卷小题
|
|
err := testInfo.GetTestPaperInfo(testDetailId)
|
|
if err != nil {
|
|
resp := Response{"10008", "get testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
// 修改试卷详情表
|
|
|
|
testInfo.ExaminerThirdSelfScore = score
|
|
|
|
err = testInfo.Update()
|
|
if err != nil {
|
|
resp := Response{"10009", "update testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
sum += score
|
|
}
|
|
// 给试卷表打分
|
|
|
|
test.ExaminerThirdSelfScore = sum
|
|
|
|
err = test.Update()
|
|
if err != nil {
|
|
resp := Response{"10007", "update test fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
// 删除试卷待批改表 ,增加试卷记录表
|
|
var record model.ScoreRecord
|
|
var underTest model.UnderCorrectedPaper
|
|
|
|
err = model.GetSelfScorePaperByTestQuestionTypeAndTestId(&underTest, testId, userId)
|
|
if err != nil {
|
|
resp = Response{"20012", "GetUnderCorrectedPaperByUserIdAndTestId fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
record.Score = sum
|
|
record.TestId = testId
|
|
record.TestRecordType = underTest.TestQuestionType
|
|
record.UserId = userId
|
|
record.QuestionId = underTest.QuestionId
|
|
|
|
err = record.Save()
|
|
if err != nil {
|
|
resp = Response{"20013", "Save fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
err = underTest.SelfMarkDelete()
|
|
if err != nil {
|
|
resp = Response{"20014", "Delete fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
if math.Abs(float64(sum-test.ExaminerThirdScore)) > float64(standardError) {
|
|
var newUnderTest model.UnderCorrectedPaper
|
|
newUnderTest.UserId = 10000
|
|
newUnderTest.TestId = testId
|
|
newUnderTest.QuestionId = test.QuestionId
|
|
newUnderTest.SelfScoreId = userId
|
|
newUnderTest.TestQuestionType = 7
|
|
newUnderTest.Save()
|
|
}
|
|
|
|
}
|
|
|
|
} else { // score数组string转int
|
|
var scoreArr []int64
|
|
var sum int64 = 0
|
|
var record model.ScoreRecord
|
|
for _, i := range scores {
|
|
j, err := strconv.ParseInt(i, 10, 64)
|
|
sum += j
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
scoreArr = append(scoreArr, j)
|
|
}
|
|
|
|
final := false
|
|
|
|
if topic.ScoreType == 1 {
|
|
test.ExaminerFirstId = userId
|
|
test.ExaminerFirstScore = sum
|
|
final = true
|
|
} else if underTest.TestQuestionType == 2 && test.ExaminerFirstId == -1 {
|
|
test.ExaminerFirstId = userId
|
|
test.ExaminerFirstScore = sum
|
|
} else if underTest.TestQuestionType == 2 && test.ExaminerSecondId == -1 {
|
|
test.ExaminerSecondId = userId
|
|
test.ExaminerSecondScore = sum
|
|
if math.Abs(float64(test.ExaminerSecondScore)-float64(test.ExaminerFirstScore)) <= float64(topic.StandardError) {
|
|
log.Println(math.Abs(float64(test.ExaminerSecondScore) - float64(test.ExaminerFirstScore)))
|
|
sum = int64(math.Abs(float64(test.ExaminerSecondScore+test.ExaminerFirstScore)) / 2)
|
|
final = true
|
|
} else {
|
|
newUnderTest := model.UnderCorrectedPaper{}
|
|
// 随机 抽一个 人
|
|
|
|
newUnderTest.UserId = model.FindNewUserId(test.ExaminerFirstId, test.ExaminerSecondId, test.QuestionId)
|
|
newUnderTest.TestQuestionType = 3
|
|
newUnderTest.TestId = underTest.TestId
|
|
newUnderTest.QuestionId = underTest.QuestionId
|
|
err = newUnderTest.Save()
|
|
if err != nil {
|
|
resp := Response{"10005", "insert undertest fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
}
|
|
}
|
|
if underTest.TestQuestionType == 0 {
|
|
|
|
test.LeaderId = userId
|
|
test.LeaderScore = sum
|
|
final = true
|
|
}
|
|
if underTest.TestQuestionType == 3 {
|
|
test.ExaminerThirdId = userId
|
|
test.ExaminerThirdScore = sum
|
|
first := math.Abs(float64(test.ExaminerThirdScore - test.ExaminerFirstScore))
|
|
second := math.Abs(float64(test.ExaminerThirdScore - test.ExaminerSecondScore))
|
|
var small float64
|
|
if first <= second {
|
|
small = first
|
|
sum = (test.ExaminerThirdScore + test.ExaminerFirstScore) / 2
|
|
} else {
|
|
small = second
|
|
sum = (test.ExaminerThirdScore + test.ExaminerSecondScore) / 2
|
|
}
|
|
if small <= float64(topic.StandardError) {
|
|
final = true
|
|
} else {
|
|
|
|
test.QuestionStatus = 2
|
|
|
|
newUnderTest := model.UnderCorrectedPaper{}
|
|
// 阅卷组长类型默认 id 10000
|
|
newUnderTest.UserId = 10000
|
|
newUnderTest.TestQuestionType = 4
|
|
newUnderTest.TestId = underTest.TestId
|
|
newUnderTest.QuestionId = underTest.QuestionId
|
|
err = newUnderTest.Save()
|
|
if err != nil {
|
|
resp := Response{"10006", "insert undertest fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
}
|
|
}
|
|
if final {
|
|
test.FinalScore = sum
|
|
record.TestFinish = 1
|
|
}
|
|
|
|
err = underTest.Delete()
|
|
if err != nil {
|
|
resp := Response{"10006", "delete undertest fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
err = test.Update()
|
|
if err != nil {
|
|
resp := Response{"10007", "update test fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
for i := 0; i < len(scores); i++ {
|
|
score := scoreArr[i]
|
|
var tempTest model.TestPaperInfo
|
|
id, _ := strconv.ParseInt(testDetailIds[i], 10, 64)
|
|
log.Println(id)
|
|
err = tempTest.GetTestPaperInfo(id)
|
|
if err != nil {
|
|
resp := Response{"10008", "get testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
if topic.ScoreType == 1 {
|
|
tempTest.ExaminerFirstId = userId
|
|
tempTest.ExaminerFirstScore = score
|
|
} else if topic.ScoreType == 2 && tempTest.ExaminerFirstId == -1 {
|
|
tempTest.ExaminerFirstId = userId
|
|
tempTest.ExaminerFirstScore = score
|
|
} else if topic.ScoreType == 2 && tempTest.ExaminerSecondId == -1 {
|
|
tempTest.ExaminerSecondId = userId
|
|
tempTest.ExaminerSecondScore = score
|
|
}
|
|
if underTest.TestQuestionType == 4 || underTest.TestQuestionType == 5 {
|
|
tempTest.LeaderId = userId
|
|
tempTest.LeaderScore = score
|
|
} else if underTest.TestQuestionType == 3 {
|
|
tempTest.ExaminerThirdId = userId
|
|
tempTest.ExaminerThirdScore = score
|
|
}
|
|
if final {
|
|
tempTest.FinalScore = score
|
|
|
|
}
|
|
err = tempTest.Update()
|
|
if err != nil {
|
|
resp := Response{"10009", "update testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
}
|
|
|
|
record.Score = sum
|
|
record.QuestionId = topic.QuestionId
|
|
record.TestId = testId
|
|
record.TestRecordType = underTest.TestQuestionType
|
|
record.UserId = userId
|
|
record.ScoreTime = time.Now()
|
|
err = record.Save()
|
|
if err != nil {
|
|
resp := Response{"10010", "insert record fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
}
|
|
|
|
resp = Response{"10000", "ok", err}
|
|
c.Data["json"] = resp
|
|
}
|
|
|
|
func (c *ApiController) Problem() {
|
|
defer c.ServeJSON()
|
|
var requestBody TestProblem
|
|
err := json.Unmarshal(c.Ctx.Input.RequestBody, &requestBody)
|
|
if err != nil {
|
|
resp := Response{"10001", "cannot unmarshal", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
userId, err := c.GetSessionUserId()
|
|
if err != nil {
|
|
resp := Response{Status: "10001", Msg: "get user info fail", Data: err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
problemType := requestBody.ProblemType
|
|
testId := requestBody.TestId
|
|
problemMessage := requestBody.ProblemMessage
|
|
|
|
var underTest model.UnderCorrectedPaper
|
|
var record model.ScoreRecord
|
|
var test model.TestPaper
|
|
|
|
err = underTest.GetUnderCorrectedPaper(userId, testId)
|
|
if err != nil {
|
|
resp := Response{"10002", "get underCorrected fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
var newUnderTest = underTest
|
|
err = underTest.Delete()
|
|
if err != nil {
|
|
resp := Response{"10002", "delete underTest fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
newUnderTest.UserId = userId
|
|
newUnderTest.TestQuestionType = 6
|
|
newUnderTest.ProblemType = problemType
|
|
newUnderTest.ProblemMessage = problemMessage
|
|
has, _ := newUnderTest.IsDuplicate()
|
|
if !has {
|
|
err = newUnderTest.Save()
|
|
if err != nil {
|
|
resp := Response{"10003", "update underTest fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
_, err = test.GetTestPaper(testId)
|
|
if err != nil {
|
|
resp := Response{"10004", "get testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
test.QuestionStatus = 3
|
|
err = test.Update()
|
|
if err != nil {
|
|
resp := Response{"10005", "update testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
}
|
|
|
|
record.TestRecordType = 5
|
|
record.TestId = testId
|
|
record.UserId = userId
|
|
record.QuestionId = test.QuestionId
|
|
record.TestRecordType = 5
|
|
record.ProblemType = problemType
|
|
err = record.Save()
|
|
if err != nil {
|
|
resp := Response{"10006", "insert record fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
resp := Response{"10000", "ok", err}
|
|
c.Data["json"] = resp
|
|
}
|
|
|
|
func (c *ApiController) Answer() {
|
|
defer c.ServeJSON()
|
|
var requestBody TestRequest
|
|
err := json.Unmarshal(c.Ctx.Input.RequestBody, &requestBody)
|
|
if err != nil {
|
|
resp := Response{"10001", "cannot unmarshal", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
testId := requestBody.TestId
|
|
var test model.TestPaper
|
|
_, err = test.GetTestPaper(testId)
|
|
if err != nil {
|
|
resp := Response{"10002", "get testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
var answerTest model.TestPaper
|
|
err = answerTest.GetTestPaperByQuestionIdAndQuestionStatus(test.QuestionId, 5)
|
|
if err != nil {
|
|
resp := Response{"10003", "get testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
var as TestAnswerResponse
|
|
var tempString []string
|
|
err = model.GetTestInfoPicListByTestId(answerTest.TestId, &tempString)
|
|
if err != nil {
|
|
resp := Response{"10004", "get testPaperInfo fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
// 改成base64编码
|
|
for i := 0; i < len(tempString); i++ {
|
|
picName := tempString[i]
|
|
// 图片地址拼接 ,按服务器
|
|
// src:="C:\\Users\\yang\\Desktop\\阅卷系统\\img\\"+picName
|
|
src := "./img/" + picName
|
|
bytes, err := os.ReadFile(src)
|
|
if err != nil {
|
|
log.Println(err)
|
|
resp := Response{"30020", "get 图片显示异常 ", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
encoding := base64.StdEncoding.EncodeToString(bytes)
|
|
as.Pics = append(as.Pics, encoding)
|
|
}
|
|
resp := Response{"10000", "ok", as}
|
|
c.Data["json"] = resp
|
|
}
|
|
|
|
func (c *ApiController) ExampleDetail() {
|
|
c.GetSessionUserId()
|
|
defer c.ServeJSON()
|
|
var requestBody ExampleDetail
|
|
err := json.Unmarshal(c.Ctx.Input.RequestBody, &requestBody)
|
|
if err != nil {
|
|
resp := Response{"10001", "cannot unmarshal", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
testId := requestBody.ExampleTestId
|
|
log.Println(testId)
|
|
// ____________________________________________________________
|
|
var test model.TestPaper
|
|
_, err = test.GetTestPaper(testId)
|
|
if err != nil {
|
|
resp := Response{"10002", "get testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
var exampleTest []model.TestPaper
|
|
// ??
|
|
err = model.GetTestPaperListByQuestionIdAndQuestionStatus(test.QuestionId, 6, &exampleTest)
|
|
if err != nil {
|
|
resp := Response{"10003", "get testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
if len(exampleTest) == 0 {
|
|
resp := Response{"10004", "there is no exampleTest", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
|
|
}
|
|
|
|
var topic model.Topic
|
|
err = topic.GetTopic(exampleTest[0].QuestionId)
|
|
if err != nil {
|
|
resp := Response{"10005", "get topic fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
var response ExampleDetailResponse
|
|
response.QuestionName = topic.QuestionName
|
|
for i := 0; i < len(exampleTest); i++ {
|
|
var temp []model.TestPaperInfo
|
|
err = model.GetTestInfoListByTestId(exampleTest[i].TestId, &temp)
|
|
if err != nil {
|
|
resp := Response{"10006", "get testPaperInfo fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
// 转64编码
|
|
for j := 0; j < len(temp); j++ {
|
|
picName := temp[j].PicSrc
|
|
// src:="C:\\Users\\yang\\Desktop\\阅卷系统\\img\\"+picName
|
|
src := "./img/" + picName
|
|
bytes, err := os.ReadFile(src)
|
|
if err != nil {
|
|
log.Println(err)
|
|
resp := Response{"30020", "get 图片显示异常 ", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
encoding := base64.StdEncoding.EncodeToString(bytes)
|
|
temp[j].PicSrc = encoding
|
|
}
|
|
response.Test = append(response.Test, temp)
|
|
}
|
|
resp := Response{"10000", "ok", response}
|
|
c.Data["json"] = resp
|
|
|
|
}
|
|
|
|
func (c *ApiController) ExampleList() {
|
|
defer c.ServeJSON()
|
|
var requestBody TestRequest
|
|
err := json.Unmarshal(c.Ctx.Input.RequestBody, &requestBody)
|
|
if err != nil {
|
|
resp := Response{"10001", "cannot unmarshal", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
testId := requestBody.TestId
|
|
// ----------------------------------------------------------------------
|
|
var testPaper model.TestPaper
|
|
_, err = testPaper.GetTestPaper(testId)
|
|
if err != nil {
|
|
resp := Response{"10002", "get testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
var response ExampleListResponse
|
|
err = model.GetTestPaperListByQuestionIdAndQuestionStatus(testPaper.QuestionId, 6, &response.TestPapers)
|
|
if err != nil {
|
|
resp := Response{"10003", "get testPaper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
resp := Response{"10000", "ok", response}
|
|
c.Data["json"] = resp
|
|
|
|
}
|
|
|
|
func (c *ApiController) Review() {
|
|
defer c.ServeJSON()
|
|
var response TestReviewResponse
|
|
|
|
userId, err := c.GetSessionUserId()
|
|
if err != nil {
|
|
resp := Response{Status: "10001", Msg: "get user info fail", Data: err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
var records []model.ScoreRecord
|
|
err = model.GetLatestRecords(userId, &records)
|
|
if err != nil {
|
|
resp := Response{"10002", "get record fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
for i := 0; i < len(records); i++ {
|
|
response.TestId = append(response.TestId, records[i].TestId)
|
|
response.Score = append(response.Score, records[i].Score)
|
|
response.ScoreTime = append(response.ScoreTime, records[i].ScoreTime)
|
|
}
|
|
resp := Response{"10000", "ok", response}
|
|
c.Data["json"] = resp
|
|
}
|
|
|
|
func (c *ApiController) ReviewPoint() {
|
|
defer c.ServeJSON()
|
|
var requestBody TestPoint
|
|
err := json.Unmarshal(c.Ctx.Input.RequestBody, &requestBody)
|
|
if err != nil {
|
|
resp := Response{"10001", "cannot unmarshal", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
userId, err := c.GetSessionUserId()
|
|
if err != nil {
|
|
resp := Response{Status: "10001", Msg: "get user info fail", Data: err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
scoresstr := requestBody.Scores
|
|
testId := requestBody.TestId
|
|
testDetailIdstr := requestBody.TestDetailId
|
|
scores := strings.Split(scoresstr, "-")
|
|
testDetailIds := strings.Split(testDetailIdstr, "-")
|
|
var scoreArr []int64
|
|
var sum int64 = 0
|
|
var record model.ScoreRecord
|
|
for _, i := range scores {
|
|
j, err := strconv.ParseInt(i, 10, 64)
|
|
sum += j
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
scoreArr = append(scoreArr, j)
|
|
}
|
|
|
|
var test model.TestPaper
|
|
_, err = test.GetTestPaper(testId)
|
|
if err != nil || test.TestId == 0 {
|
|
resp := Response{"10002", "get test paper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
// 判断是否二次阅卷
|
|
var topic model.Topic
|
|
topic.GetTopic(test.QuestionId)
|
|
scoreType := topic.ScoreType
|
|
|
|
num := 0
|
|
if test.ExaminerFirstId == userId {
|
|
num = 0
|
|
test.ExaminerFirstScore = sum
|
|
if scoreType == 1 {
|
|
test.FinalScore = sum
|
|
record.TestFinish = 1
|
|
}
|
|
var record model.ScoreRecord
|
|
record.GetRecordByTestId(testId, userId)
|
|
record.Score = sum
|
|
record.Update()
|
|
|
|
} else if test.ExaminerSecondId == userId {
|
|
num = 1
|
|
test.ExaminerSecondScore = sum
|
|
var record model.ScoreRecord
|
|
record.GetRecordByTestId(testId, userId)
|
|
record.Score = sum
|
|
record.Update()
|
|
} else {
|
|
num = 2
|
|
test.ExaminerThirdScore = sum
|
|
var record model.ScoreRecord
|
|
record.GetRecordByTestId(testId, userId)
|
|
record.Score = sum
|
|
record.Update()
|
|
}
|
|
err = test.Update()
|
|
if err != nil || test.TestId == 0 {
|
|
resp := Response{"10003", "update test paper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
for i := 0; i < len(testDetailIds); i++ {
|
|
var testInfo model.TestPaperInfo
|
|
testInfoId, _ := strconv.ParseInt(testDetailIds[i], 10, 64)
|
|
testInfo.GetTestPaperInfo(testInfoId)
|
|
if num == 0 {
|
|
testInfo.ExaminerFirstScore = scoreArr[i]
|
|
if scoreType == 1 {
|
|
testInfo.FinalScore = scoreArr[i]
|
|
}
|
|
} else if num == 1 {
|
|
testInfo.ExaminerSecondScore = scoreArr[i]
|
|
} else {
|
|
testInfo.ExaminerThirdScore = scoreArr[i]
|
|
}
|
|
err = testInfo.Update()
|
|
if err != nil || test.TestId == 0 {
|
|
resp := Response{"10004", "update testinfo paper fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
}
|
|
c.Data["json"] = Response{"10000", "ok", nil}
|
|
}
|
|
|
|
// 自评列表 chen
|
|
func (c *ApiController) SelfScoreList() {
|
|
defer c.ServeJSON()
|
|
var response TestListResponse
|
|
|
|
userId, err := c.GetSessionUserId()
|
|
if err != nil {
|
|
resp := Response{Status: "10001", Msg: "get user info fail", Data: err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
|
|
err = model.GetUnMarkSelfTestIdPaperByUserId(userId, &response.TestIds)
|
|
if err != nil {
|
|
resp := Response{"10002", "get distribution fail", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
}
|
|
if len(response.TestIds) == 0 {
|
|
resp := Response{"10003", "there is no paper to correct", err}
|
|
c.Data["json"] = resp
|
|
return
|
|
|
|
}
|
|
log.Println(response)
|
|
resp := Response{"10000", "OK", response}
|
|
c.Data["json"] = resp
|
|
|
|
}
|
|
|
|
// /**
|
|
// 20.自评卷打分
|
|
// */
|
|
// func (c *ApiController) SelfMarkPoint() {
|
|
// defer c.ServeJSON()
|
|
// var requestBody TestPoint
|
|
//
|
|
// err := json.Unmarshal(c.Ctx.Input.RequestBody, &requestBody)
|
|
// if err != nil {
|
|
// c.Data["json"] = Response{"10001", "cannot unmarshal", err}
|
|
// return
|
|
// }
|
|
// userId, err := c.GetSessionUserId()
|
|
// if err != nil {
|
|
// resp := Response{Status: "10001", Msg: "get user info fail", Data: err}
|
|
// c.Data["json"] = resp
|
|
// return
|
|
// }
|
|
// testId := requestBody.TestIds
|
|
// scoreStr := requestBody.Scores
|
|
// testDetailIdStr := requestBody.TestDetailId
|
|
// testDetailIds := strings.Split(testDetailIdStr, "-")
|
|
// scores := strings.Split(scoreStr, "-")
|
|
//
|
|
// // ---------------------------------------------------------------------------------------
|
|
//
|
|
// // 查找大题
|
|
// var test model.TestPaper
|
|
// _, err = test.GetTestPaper(testId)
|
|
// if err != nil || test.TestIds == 0 {
|
|
// resp := Response{"10002", "get test paper fail", err}
|
|
// c.Data["json"] = resp
|
|
// return
|
|
// }
|
|
// var topic model.Topic
|
|
// topic.GetTopic(test.QuestionId)
|
|
//
|
|
// // ----------------------------------------
|
|
// c.Data["json"] = Response{"10000", "OK", nil}
|
|
// }
|