forked from Open-CT/openscore
1755 lines
55 KiB
Go
1755 lines
55 KiB
Go
package controllers
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"log"
|
||
"math"
|
||
"strconv"
|
||
"strings"
|
||
"time"
|
||
|
||
"github.com/open-ct/openscore/model"
|
||
"github.com/open-ct/openscore/util"
|
||
"github.com/xuri/excelize/v2"
|
||
)
|
||
|
||
func (c *ApiController) SuperVisorList() {
|
||
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.GetDistributedTestIdPaperByUserId(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
|
||
|
||
}
|
||
|
||
c.ResponseOk(response)
|
||
}
|
||
|
||
// 导出成绩
|
||
func (c *ApiController) WriteScoreExcel() {
|
||
c.Ctx.ResponseWriter.Header().Set("Access-Control-Allow-Origin", c.Ctx.Request.Header.Get("Origin"))
|
||
defer c.ServeJSON()
|
||
|
||
f := excelize.NewFile()
|
||
|
||
subjects := make([]model.Subject, 0)
|
||
if err := model.FindSubjectList(&subjects); err != nil {
|
||
log.Println(err)
|
||
c.Data["json"] = Response{Status: "30008", Msg: "科目列表获取错误 ", Data: err}
|
||
return
|
||
}
|
||
|
||
for _, subject := range subjects {
|
||
topics := make([]model.Topic, 0)
|
||
if err := model.FindTopicBySubNameList(&topics, subject.SubjectName); err != nil {
|
||
log.Println(err)
|
||
c.Data["json"] = Response{Status: "30004", Msg: "获取大题列表错误 ", Data: err}
|
||
return
|
||
}
|
||
|
||
topicMap := make(map[int64]string, len(topics))
|
||
// 获取subject的小题数
|
||
var subjectSubTopics []model.SubTopic
|
||
var subjectTestPapers []model.TestPaper
|
||
for _, topic := range topics {
|
||
topicMap[topic.QuestionId] = topic.QuestionName
|
||
subTopics := make([]model.SubTopic, 0)
|
||
if err := model.FindSubTopicsByQuestionId(topic.QuestionId, &subTopics); err != nil {
|
||
log.Println(err)
|
||
c.Data["json"] = Response{Status: "30022", Msg: "获取小题参数设置记录表失败 ", Data: err}
|
||
return
|
||
}
|
||
subjectSubTopics = append(subjectSubTopics, subTopics...)
|
||
|
||
testPapers := make([]model.TestPaper, 0)
|
||
if err := model.FindTestPaperByQuestionId(topic.QuestionId, &testPapers); err != nil {
|
||
log.Println(err)
|
||
c.Data["json"] = Response{Status: "30022", Msg: "获取大题参数设置记录表失败 ", Data: err}
|
||
return
|
||
}
|
||
subjectTestPapers = append(subjectTestPapers, testPapers...)
|
||
}
|
||
|
||
// Create a new sheet.
|
||
index := f.NewSheet(subject.SubjectName)
|
||
// Set value of a cell.
|
||
f.SetCellValue(subject.SubjectName, "A1", "ticket_id")
|
||
f.SetCellValue(subject.SubjectName, "B1", "name")
|
||
f.SetCellValue(subject.SubjectName, "C1", "school")
|
||
f.SetCellValue(subject.SubjectName, "D1", "mobile")
|
||
// Set active sheet of the workbook.
|
||
f.SetActiveSheet(index)
|
||
|
||
var subjectTestPaperInfos []model.TestPaperInfo
|
||
for i, subTopic := range subjectSubTopics {
|
||
testPaperInfos := make([]model.TestPaperInfo, 0)
|
||
model.FindTestPaperInfoByQuestionDetailId(subTopic.QuestionDetailId, &testPaperInfos)
|
||
subjectTestPaperInfos = append(subjectTestPaperInfos, testPaperInfos...)
|
||
|
||
f.SetCellValue(subject.SubjectName, string(byte(i+'E'))+"1", topicMap[subTopic.QuestionId]+"-"+subTopic.QuestionDetailName)
|
||
}
|
||
f.SetCellValue(subject.SubjectName, string(byte(len(subjectSubTopics)+'E'))+"1", "总分")
|
||
|
||
fmt.Println("subjectSubTopics: ", subjectSubTopics)
|
||
|
||
for i := 2; i <= len(subjectTestPaperInfos)/len(subjectSubTopics)+1; i++ {
|
||
f.SetCellValue(subject.SubjectName, "A"+strconv.Itoa(i), subjectTestPapers[(i-2)*len(topics)].TicketId)
|
||
f.SetCellValue(subject.SubjectName, "B"+strconv.Itoa(i), subjectTestPapers[(i-2)*len(topics)].Candidate)
|
||
f.SetCellValue(subject.SubjectName, "C"+strconv.Itoa(i), subjectTestPapers[(i-2)*len(topics)].School)
|
||
f.SetCellValue(subject.SubjectName, "D"+strconv.Itoa(i), subjectTestPapers[(i-2)*len(topics)].Mobile)
|
||
// 获取该用户的小题成绩
|
||
infos, err := model.FindTestPaperInfoByTicketId(subjectTestPapers[(i-2)*len(topics)].TicketId)
|
||
if err != nil {
|
||
log.Println(err)
|
||
c.Data["json"] = Response{Status: "30022", Msg: "获取小题参数设置记录表失败 ", Data: err}
|
||
return
|
||
}
|
||
var sum int64
|
||
for j, info := range infos {
|
||
if j < 22 {
|
||
fmt.Println("string(byte(j+'E'))+strconv.Itoa(i): ", string(byte(j+'E'))+strconv.Itoa(i))
|
||
f.SetCellValue(subject.SubjectName, string(byte(j+'E'))+strconv.Itoa(i), info.FinalScore)
|
||
}
|
||
sum += info.FinalScore
|
||
}
|
||
f.SetCellValue(subject.SubjectName, string(byte(len(subjectSubTopics)+'E'))+strconv.Itoa(i), sum)
|
||
}
|
||
|
||
}
|
||
|
||
// Save spreadsheet by the given path.
|
||
if err := f.SaveAs("../scores.xlsx"); err != nil {
|
||
log.Println(err)
|
||
c.Data["json"] = Response{Status: "30000", Msg: "excel 表导出错误", Data: err}
|
||
return
|
||
}
|
||
|
||
c.Ctx.Output.Download("../scores.xlsx", "scores.xlsx")
|
||
}
|
||
|
||
/**
|
||
9.大题选择列表
|
||
*/
|
||
func (c *ApiController) QuestionList() {
|
||
defer c.ServeJSON()
|
||
var resp Response
|
||
|
||
supervisorId, err := c.GetSessionUserId()
|
||
if err != nil {
|
||
resp := Response{Status: "10001", Msg: "get user info fail", Data: err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
|
||
// 获取大题列表
|
||
var user model.User
|
||
user.GetUser(supervisorId)
|
||
subjectName := user.SubjectName
|
||
|
||
topics := make([]model.Topic, 0)
|
||
err = model.FindTopicBySubNameList(&topics, subjectName)
|
||
fmt.Println("topics: ", topics, subjectName)
|
||
|
||
if err != nil {
|
||
resp = Response{"20000", "GetTopicList err ", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
|
||
var questions = make([]QuestionListVO, len(topics))
|
||
for i := 0; i < len(topics); i++ {
|
||
|
||
questions[i].QuestionId = topics[i].QuestionId
|
||
questions[i].QuestionName = topics[i].QuestionName
|
||
|
||
}
|
||
|
||
// ----------------------------------------------------
|
||
data := make(map[string]interface{})
|
||
data["questionsList"] = questions
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
}
|
||
|
||
/**
|
||
10.用户登入信息表
|
||
*/
|
||
func (c *ApiController) UserInfo() {
|
||
defer c.ServeJSON()
|
||
var resp Response
|
||
|
||
supervisorId, err := c.GetSessionUserId()
|
||
if err != nil {
|
||
resp := Response{Status: "10001", Msg: "get user info fail", Data: err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
|
||
user := model.User{}
|
||
if err := user.GetUser(supervisorId); err != nil {
|
||
resp = Response{"20001", "获取用户信息失败", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
var userInfoVO UserInfoVO
|
||
userInfoVO.UserName = user.UserName
|
||
userInfoVO.SubjectName = user.SubjectName
|
||
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
data["userInfo"] = userInfoVO
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
}
|
||
|
||
/**
|
||
8.教师监控页面
|
||
*/
|
||
func (c *ApiController) TeacherMonitoring() {
|
||
defer c.ServeJSON()
|
||
var requestBody Question
|
||
var resp Response
|
||
|
||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &requestBody)
|
||
if err != nil {
|
||
resp = Response{"10001", "cannot unmarshal", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// supervisorId := requestBody.SupervisorId
|
||
questionId := requestBody.QuestionId
|
||
|
||
// ----------------------------------------------------
|
||
// paperDistributions := make([]model.PaperDistribution, 0)
|
||
// err = model.FindPaperDistributionByQuestionId(&paperDistributions, questionId)
|
||
// if err != nil {
|
||
// resp = Response{"20021", "试卷分配信息获取失败 ", err}
|
||
// c.Data["json"] = resp
|
||
// return
|
||
// }
|
||
|
||
users, err := model.ListNormalUserByQuestionId(questionId)
|
||
if err != nil {
|
||
c.ResponseError(err.Error())
|
||
return
|
||
}
|
||
|
||
teacherMonitoringList := make([]TeacherMonitoringVO, len(users))
|
||
for i := 0; i < len(users); i++ {
|
||
// 教师id
|
||
userId := users[i].UserId
|
||
teacherMonitoringList[i].UserId = userId
|
||
// 分配试卷数量
|
||
// testDistributionNumber := users[i].TestDistributionNumber
|
||
testDistributionNumber := int64(10) // FIXME
|
||
teacherMonitoringList[i].TestDistributionNumber = testDistributionNumber
|
||
// 试卷失败数
|
||
failCount, err := model.CountFailTestNumberByUserId(userId, questionId)
|
||
if err != nil {
|
||
resp = Response{"20024", "获取试卷批改失败数 错误 ", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
teacherMonitoringList[i].TestProblemNumber = failCount
|
||
failCountString := strconv.FormatInt(failCount, 10)
|
||
failCountFloat, _ := strconv.ParseFloat(failCountString, 64)
|
||
|
||
// 试卷剩余未批改数
|
||
remainingTestNumber, err1 := model.CountRemainingTestNumberByUserId(questionId, userId)
|
||
if err1 != nil {
|
||
resp = Response{"20023", "无法获取试卷未批改数", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
teacherMonitoringList[i].TestRemainingNumber = remainingTestNumber
|
||
|
||
// 试卷完成数
|
||
records, err := model.ListScoreRecordByUserId(userId)
|
||
if err != nil {
|
||
c.ResponseError(err.Error())
|
||
return
|
||
}
|
||
// finishCount := paperDistributions[i].TestDistributionNumber - failCount - remainingTestNumber
|
||
// teacherMonitoringList[i].TestSuccessNumber = finishCount
|
||
teacherMonitoringList[i].TestSuccessNumber = int64(len(records))
|
||
// 用户信息
|
||
user := model.User{}
|
||
err = user.GetUser(userId)
|
||
if err != nil {
|
||
resp = Response{"20001", "无法获取用户信息", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// 用户名
|
||
teacherMonitoringList[i].UserName = user.UserName
|
||
// 是否在线
|
||
isOnline := user.IsOnlineStatus
|
||
teacherMonitoringList[i].IsOnline = isOnline
|
||
// 在线时间
|
||
var onlineTime int64
|
||
if isOnline { // FIXME
|
||
t, err := util.String2Time(user.LoginTime)
|
||
if err != nil {
|
||
resp = Response{"10001", "解析登录时间错误", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
onlineTime = user.OnlineTime + int64(t.Sub(time.Now()).Hours())
|
||
|
||
} else {
|
||
onlineTime = user.OnlineTime
|
||
}
|
||
// 平均速度 (秒/份)
|
||
var markingSpeed float64 = 99999999
|
||
s1 := strconv.FormatInt(onlineTime, 10)
|
||
s, _ := strconv.ParseFloat(s1, 64)
|
||
|
||
if len(records) != 0 {
|
||
tempSpeed := s / float64(len(records))
|
||
markingSpeed, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", tempSpeed), 64)
|
||
}
|
||
teacherMonitoringList[i].MarkingSpeed = markingSpeed
|
||
// 预计时间 (小时)
|
||
|
||
predictTime := markingSpeed * float64(remainingTestNumber)
|
||
predictTime = predictTime / 3600
|
||
predictTime, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", predictTime), 64)
|
||
teacherMonitoringList[i].PredictTime = predictTime
|
||
|
||
// 平均分
|
||
averageScore, err := model.AverageFinishScore(userId)
|
||
if err != nil {
|
||
resp = Response{"20025", "计算平均分失败", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// if len(records) != 0 {
|
||
// sum, err := model.SumFinishScore(userId, questionId)
|
||
// if err != nil {
|
||
// resp = Response{"20025", "计算平均分失败", err}
|
||
// c.Data["json"] = resp
|
||
// return
|
||
// }
|
||
// averageScore = sum / float64(len(records))
|
||
// }
|
||
|
||
teacherMonitoringList[i].AverageScore, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", averageScore), 64)
|
||
// 有效度
|
||
var validity float64 = 0
|
||
if (float64(len(records)) + failCountFloat) != 0 {
|
||
validity = float64(len(records)) / (float64(len(records)) + failCountFloat)
|
||
validity, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", validity), 64)
|
||
}
|
||
teacherMonitoringList[i].Validity = validity
|
||
// //自评率
|
||
// selfTestCount ,err1 := models.CountSelfScore(userId,questionId)
|
||
// if err1!=nil {
|
||
// resp = Response{"20026","CountSelfScore fail",err}
|
||
// c.Data["json"] = resp
|
||
// return
|
||
// }
|
||
// selfTestCountString:=strconv.FormatInt(selfTestCount,10)
|
||
// selfTestCountFloat,_:=strconv.ParseFloat(selfTestCountString,64)
|
||
//
|
||
// var selfScoreRate float64=0
|
||
// if finishCount!=0 {
|
||
// selfScoreRate= selfTestCountFloat/float64(finishCount)
|
||
// }
|
||
// teacherMonitoringList[i].EvaluationIndex=selfScoreRate
|
||
|
||
// 标准差
|
||
var add float64
|
||
finishScoreList := make([]model.ScoreRecord, 0)
|
||
model.FindFinishTestByUserId(&finishScoreList, userId, questionId)
|
||
for j := 0; j < len(finishScoreList); j++ {
|
||
scoreJ := finishScoreList[j].Score
|
||
tempJ := math.Abs((float64(scoreJ)) - averageScore)
|
||
add = add + math.Exp2(tempJ)
|
||
|
||
}
|
||
sqrt := math.Sqrt(add)
|
||
sqrt, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", sqrt), 64)
|
||
teacherMonitoringList[i].StandardDeviation = sqrt
|
||
|
||
}
|
||
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
|
||
data["teacherMonitoringList"] = teacherMonitoringList
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
}
|
||
|
||
/**
|
||
11.分数分布表
|
||
*/
|
||
func (c *ApiController) ScoreDistribution() {
|
||
defer c.ServeJSON()
|
||
var requestBody Question
|
||
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
|
||
}
|
||
// supervisorId := requestBody.SupervisorId
|
||
questionId := requestBody.QuestionId
|
||
|
||
// ----------------------------------------------------
|
||
// 求大题满分
|
||
topic := model.Topic{QuestionId: questionId}
|
||
err = topic.GetTopic(questionId)
|
||
if err != nil {
|
||
resp = Response{"20002", "could not find topic", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
questionScore := topic.QuestionScore
|
||
// 求该大题的已批改试卷表
|
||
scoreRecordList := make([]model.ScoreRecord, 0)
|
||
err = model.FindFinishScoreRecordListByQuestionId(&scoreRecordList, questionId)
|
||
if err != nil {
|
||
resp = Response{"20003", "FindFinishScoreRecordListByQuestionId err", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
|
||
}
|
||
// 该题已批改试卷总数
|
||
count := len(scoreRecordList)
|
||
countString := strconv.FormatInt(int64(count), 10)
|
||
countFloat, _ := strconv.ParseFloat(countString, 64)
|
||
// 标准的输出数据
|
||
scoreDistributionList := make([]ScoreDistributionVO, questionScore+1)
|
||
// 统计分数
|
||
var i int64 = 0
|
||
for ; i <= questionScore; i++ {
|
||
scoreDistributionList[i].Score = i
|
||
number, err := model.CountTestByScore(questionId, i)
|
||
if err != nil {
|
||
resp = Response{"20004", "CountTestByScore err", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
|
||
numberString := strconv.FormatInt(number, 10)
|
||
numberFloat, _ := strconv.ParseFloat(numberString, 64)
|
||
scoreDistribution := 0.00
|
||
if countFloat != 0 {
|
||
scoreDistribution = numberFloat / countFloat
|
||
scoreDistribution, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", scoreDistribution), 64)
|
||
}
|
||
scoreDistributionList[i].Rate = scoreDistribution
|
||
}
|
||
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
data["scoreDistributionList"] = scoreDistributionList
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
|
||
}
|
||
|
||
/**
|
||
12.大题教师选择列表
|
||
*/
|
||
func (c *ApiController) TeachersByQuestion() {
|
||
defer c.ServeJSON()
|
||
var requestBody Question
|
||
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
|
||
}
|
||
// supervisorId := requestBody.SupervisorId
|
||
questionId := requestBody.QuestionId
|
||
|
||
// ----------------------------------------------------
|
||
// 根据大题求试卷分配表
|
||
// paperDistributions := make([]model.PaperDistribution, 0)
|
||
// err = model.FindPaperDistributionByQuestionId(&paperDistributions, questionId)
|
||
// if err != nil {
|
||
// resp = Response{"20005", "FindPaperDistributionByQuestionId err", err}
|
||
// c.Data["json"] = resp
|
||
// return
|
||
// }
|
||
users, err := model.ListNormalUserByQuestionId(questionId)
|
||
if err != nil {
|
||
c.ResponseError(err.Error())
|
||
return
|
||
}
|
||
|
||
// 输出标准
|
||
teacherVOList := make([]TeacherVO, len(users))
|
||
|
||
// 求教师名和转化输出
|
||
for i := 0; i < len(users); i++ {
|
||
userId := users[i].UserId
|
||
user := model.User{}
|
||
err := user.GetUser(userId)
|
||
if err != nil {
|
||
resp = Response{"20001", "could not found user", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
userName := user.UserName
|
||
teacherVOList[i].UserId = userId
|
||
teacherVOList[i].UserName = userName
|
||
}
|
||
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
data["teacherVOList"] = teacherVOList
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
|
||
}
|
||
|
||
/**
|
||
13.自评监控表
|
||
*/
|
||
func (c *ApiController) SelfScore() {
|
||
defer c.ServeJSON()
|
||
var requestBody SelfScore
|
||
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
|
||
}
|
||
// supervisorId := requestBody.SupervisorId
|
||
examinerId := requestBody.ExaminerId
|
||
// ----------------------------------------------------
|
||
|
||
// 根据userId找到自评卷
|
||
|
||
selfScoreRecord := make([]model.ScoreRecord, 0)
|
||
model.FindSelfScoreRecordByUserId(&selfScoreRecord, examinerId)
|
||
if err != nil {
|
||
resp = Response{"20006", "FindSelfScoreRecordByUserId err", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// 输出标准
|
||
selfScoreRecordVOList := make([]SelfScoreRecordVO, len(selfScoreRecord))
|
||
|
||
// 求教师名和转化输出
|
||
for i := 0; i < len(selfScoreRecord); i++ {
|
||
testId := selfScoreRecord[i].TestId
|
||
var test model.TestPaper
|
||
test.GetTestPaperByTestId(testId)
|
||
|
||
// 求大题信息 标准误差
|
||
var topic model.Topic
|
||
topic.GetTopic(test.QuestionId)
|
||
standardError := topic.StandardError
|
||
var error float64
|
||
if test.ExaminerFirstId == examinerId {
|
||
selfScoreRecordVOList[i].Score = test.ExaminerFirstScore
|
||
selfScoreRecordVOList[i].SelfScore = test.ExaminerFirstSelfScore
|
||
selfScoreRecordVOList[i].StandardError = standardError
|
||
|
||
error = math.Abs(float64(selfScoreRecordVOList[i].Score - selfScoreRecordVOList[i].SelfScore))
|
||
if error <= float64(standardError) {
|
||
selfScoreRecordVOList[i].IsQualified = 1
|
||
} else {
|
||
selfScoreRecordVOList[i].IsQualified = 0
|
||
}
|
||
} else if test.ExaminerSecondId == examinerId {
|
||
selfScoreRecordVOList[i].Score = test.ExaminerSecondScore
|
||
selfScoreRecordVOList[i].SelfScore = test.ExaminerSecondSelfScore
|
||
selfScoreRecordVOList[i].StandardError = standardError
|
||
error = math.Abs(float64(selfScoreRecordVOList[i].Score - selfScoreRecordVOList[i].SelfScore))
|
||
if error <= float64(standardError) {
|
||
selfScoreRecordVOList[i].IsQualified = 1
|
||
} else {
|
||
selfScoreRecordVOList[i].IsQualified = 0
|
||
}
|
||
} else if test.ExaminerThirdId == examinerId {
|
||
selfScoreRecordVOList[i].Score = test.ExaminerThirdScore
|
||
selfScoreRecordVOList[i].SelfScore = test.ExaminerThirdSelfScore
|
||
selfScoreRecordVOList[i].StandardError = standardError
|
||
error = math.Abs(float64(selfScoreRecordVOList[i].Score - selfScoreRecordVOList[i].SelfScore))
|
||
if error <= float64(standardError) {
|
||
selfScoreRecordVOList[i].IsQualified = 1
|
||
} else {
|
||
selfScoreRecordVOList[i].IsQualified = 0
|
||
}
|
||
}
|
||
selfScoreRecordVOList[i].TestId = testId
|
||
selfScoreRecordVOList[i].Error = error
|
||
|
||
}
|
||
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
data["selfScoreRecordVOList"] = selfScoreRecordVOList
|
||
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
|
||
}
|
||
|
||
/**
|
||
14,平均分监控表
|
||
*/
|
||
func (c *ApiController) AverageScore() {
|
||
defer c.ServeJSON()
|
||
var requestBody Question
|
||
var resp Response
|
||
|
||
err := json.Unmarshal(c.Ctx.Input.RequestBody, &requestBody)
|
||
if err != nil {
|
||
resp = Response{"10001", "cannot unmarshal", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// supervisorId := requestBody.SupervisorId
|
||
questionId := requestBody.QuestionId
|
||
// --------------------------------------------
|
||
// 根据大题求试卷分配表
|
||
// paperDistributions := make([]model.PaperDistribution, 0)
|
||
// err = model.FindPaperDistributionByQuestionId(&paperDistributions, questionId)
|
||
// if err != nil {
|
||
// resp = Response{"20007", "FindPaperDistributionByQuestionId err", err}
|
||
// c.Data["json"] = resp
|
||
// return
|
||
// }
|
||
|
||
users, err := model.ListNormalUserByQuestionId(questionId)
|
||
if err != nil {
|
||
c.ResponseError(err.Error())
|
||
return
|
||
}
|
||
|
||
// 输出标准
|
||
scoreAverageVOList := make([]ScoreAverageVO, len(users))
|
||
var sumAllTestScore = 0.0
|
||
var count = 0.0
|
||
// 求教师名和转化输出
|
||
for i, user := range users {
|
||
// 求userId 和userName
|
||
// userId := paperDistributions[i].UserId
|
||
// user := model.User{}
|
||
// err := user.GetUser(userId)
|
||
// if err != nil {
|
||
// resp = Response{"20001", "could not found user", err}
|
||
// c.Data["json"] = resp
|
||
// return
|
||
// }
|
||
scoreAverageVOList[i].UserId = user.UserId
|
||
scoreAverageVOList[i].UserName = user.UserName
|
||
|
||
scoreNumber, err := model.CountTestScoreNumberByUserId(user.UserId, questionId)
|
||
if err != nil {
|
||
resp = Response{"20008", "CountFinishTestNumberByUserId fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
finishCountString := strconv.FormatInt(scoreNumber, 10)
|
||
finishCountFloat, _ := strconv.ParseFloat(finishCountString, 64)
|
||
count = count + finishCountFloat
|
||
var averageScore float64 = 0
|
||
if finishCountFloat != 0 {
|
||
sum, err := model.SumFinishScore(user.UserId, questionId)
|
||
if err != nil {
|
||
resp = Response{"20009", "SumFinishScore fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
averageScore = sum / finishCountFloat
|
||
sumAllTestScore = sumAllTestScore + sum
|
||
}
|
||
averageScore, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", averageScore), 64)
|
||
scoreAverageVOList[i].Average = averageScore
|
||
|
||
}
|
||
var topic = model.Topic{}
|
||
err = topic.GetTopic(questionId)
|
||
if err != nil {
|
||
resp = Response{"20000", "GetTopicList err ", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
var fullScore = topic.QuestionScore
|
||
var questionAverageScore = 0.0
|
||
if count != 0 {
|
||
questionAverageScore = sumAllTestScore / count
|
||
}
|
||
questionAverageScore, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", questionAverageScore), 64)
|
||
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
data["scoreAverageVOList"] = scoreAverageVOList
|
||
data["fullScore"] = fullScore
|
||
data["questionAverageScore"] = questionAverageScore
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
|
||
}
|
||
|
||
/**
|
||
17,问题卷表
|
||
*/
|
||
func (c *ApiController) ProblemTest() {
|
||
defer c.ServeJSON()
|
||
var requestBody Question
|
||
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
|
||
}
|
||
// supervisorId := requestBody.SupervisorId
|
||
questionId := requestBody.QuestionId
|
||
// ------------------------------------------------
|
||
|
||
// 根据大题号找到问题卷
|
||
problemUnderCorrectedPaper := make([]model.UnderCorrectedPaper, 0)
|
||
model.FindProblemUnderCorrectedPaperByQuestionId(&problemUnderCorrectedPaper, questionId)
|
||
if err != nil {
|
||
resp = Response{"20010", "FindProblemUnderCorrectedPaperByQuestionId fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
|
||
// 问题卷的数量
|
||
var count = len(problemUnderCorrectedPaper)
|
||
|
||
// 输出标准
|
||
ProblemUnderCorrectedPaperVOList := make([]ProblemUnderCorrectedPaperVO, count)
|
||
|
||
// 求阅卷老师名和转化输出
|
||
for i := 0; i < len(problemUnderCorrectedPaper); i++ {
|
||
// 存testId
|
||
ProblemUnderCorrectedPaperVOList[i].TestId = problemUnderCorrectedPaper[i].TestId
|
||
// 存userId userName
|
||
userId := problemUnderCorrectedPaper[i].UserId
|
||
user := model.User{}
|
||
err := user.GetUser(userId)
|
||
if err != nil {
|
||
resp = Response{"20001", "could not found user", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
userName := user.UserName
|
||
ProblemUnderCorrectedPaperVOList[i].ExaminerId = userId
|
||
ProblemUnderCorrectedPaperVOList[i].ExaminerName = userName
|
||
// 存问题类型
|
||
ProblemUnderCorrectedPaperVOList[i].ProblemType = problemUnderCorrectedPaper[i].ProblemType
|
||
ProblemUnderCorrectedPaperVOList[i].ProblemMes = problemUnderCorrectedPaper[i].ProblemMessage
|
||
|
||
}
|
||
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
data["ProblemUnderCorrectedPaperVOList"] = ProblemUnderCorrectedPaperVOList
|
||
data["count"] = count
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
|
||
}
|
||
|
||
/**
|
||
18,仲裁卷表
|
||
*/
|
||
func (c *ApiController) ArbitramentTest() {
|
||
defer c.ServeJSON()
|
||
var requestBody Question
|
||
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
|
||
}
|
||
// supervisorId := requestBody.SupervisorId
|
||
questionId := requestBody.QuestionId
|
||
// ------------------------------------------------
|
||
|
||
// 根据大题号找到仲裁卷
|
||
arbitramentUnderCorrectedPaper := make([]model.UnderCorrectedPaper, 0)
|
||
err = model.FindArbitramentUnderCorrectedPaperByQuestionId(&arbitramentUnderCorrectedPaper, questionId)
|
||
if err != nil {
|
||
resp = Response{"20011", "FindArbitramentUnderCorrectedPaperByQuestionId fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// 输出标准
|
||
arbitramentTestVOList := make([]ArbitramentTestVO, len(arbitramentUnderCorrectedPaper))
|
||
|
||
var count = len(arbitramentUnderCorrectedPaper)
|
||
// 求阅卷老师名和转化输出
|
||
for i := 0; i < len(arbitramentUnderCorrectedPaper); i++ {
|
||
// 存testId
|
||
var testId = arbitramentUnderCorrectedPaper[i].TestId
|
||
arbitramentTestVOList[i].TestId = testId
|
||
|
||
// 查试卷
|
||
var testPaper model.TestPaper
|
||
testPaper.TestId = testId
|
||
|
||
testPaper.GetTestPaper(testId)
|
||
// 查存试卷第一次评分人id
|
||
var examinerFirstId = testPaper.ExaminerFirstId
|
||
arbitramentTestVOList[i].ExaminerFirstId = examinerFirstId
|
||
// 查第一次评分人
|
||
firstExaminer := model.User{}
|
||
err = firstExaminer.GetUser(examinerFirstId)
|
||
if err != nil {
|
||
resp = Response{"20001", "could not found user", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// 查第一次评分人姓名
|
||
examinerFirstName := firstExaminer.UserName
|
||
// 存试卷第一次评分人姓名和分数
|
||
arbitramentTestVOList[i].ExaminerFirstName = examinerFirstName
|
||
arbitramentTestVOList[i].ExaminerFirstScore = testPaper.ExaminerFirstScore
|
||
|
||
// 查存试卷第二次评分人id
|
||
var examinerSecondId = testPaper.ExaminerSecondId
|
||
arbitramentTestVOList[i].ExaminerSecondId = examinerSecondId
|
||
// 查第二次试卷评分人
|
||
secondExaminer := model.User{}
|
||
err := secondExaminer.GetUser(examinerSecondId)
|
||
if err != nil {
|
||
resp = Response{"20001", "could not found user", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// 查第二次评分人姓名
|
||
secondExaminerName := secondExaminer.UserName
|
||
// 存第二次评分人姓名和分数
|
||
arbitramentTestVOList[i].ExaminerSecondName = secondExaminerName
|
||
arbitramentTestVOList[i].ExaminerSecondScore = testPaper.ExaminerSecondScore
|
||
|
||
// 查存试卷第三次评分人id
|
||
var examinerThirdId = testPaper.ExaminerThirdId
|
||
arbitramentTestVOList[i].ExaminerThirdId = examinerThirdId
|
||
// 查第二次试卷评分人
|
||
thirdExaminer := model.User{}
|
||
if err := thirdExaminer.GetUser(examinerThirdId); err != nil {
|
||
resp = Response{"20001", "could not found user", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// 查第三次评分人姓名
|
||
thirdExaminerName := thirdExaminer.UserName
|
||
// 存第三次评分人姓名和分数
|
||
arbitramentTestVOList[i].ExaminerThirdName = thirdExaminerName
|
||
arbitramentTestVOList[i].ExaminerThirdScore = testPaper.ExaminerThirdScore
|
||
// 查存实际误差
|
||
arbitramentTestVOList[i].PracticeError = testPaper.PracticeError
|
||
// 查存标准误差
|
||
var topic model.Topic
|
||
topic.GetTopic(questionId)
|
||
arbitramentTestVOList[i].StandardError = topic.StandardError
|
||
|
||
}
|
||
// 查存该题满分
|
||
var topic = model.Topic{QuestionId: questionId}
|
||
topic.GetTopic(questionId)
|
||
var fullScore = topic.QuestionScore
|
||
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
data["arbitramentTestVOList"] = arbitramentTestVOList
|
||
data["count"] = count
|
||
data["fullScore"] = fullScore
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
|
||
}
|
||
|
||
/**
|
||
15.总体进度
|
||
*/
|
||
func (c *ApiController) ScoreProgress() {
|
||
defer c.ServeJSON()
|
||
var requestBody ScoreProgress
|
||
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
|
||
}
|
||
// supervisorId := requestBody.SupervisorId
|
||
subject := requestBody.Subject
|
||
|
||
// ----------------------------------------------------
|
||
// 根据科目获取大题列表
|
||
topics := make([]model.Topic, 0)
|
||
err = model.FindTopicBySubNameList(&topics, subject)
|
||
if err != nil {
|
||
resp = Response{"20000", "GetTopicList err ", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// 确定输出标准
|
||
scoreProgressVOList := make([]ScoreProgressVO, len(topics))
|
||
|
||
for i := 0; i < len(topics); i++ {
|
||
// 获取大题id
|
||
questionId := topics[i].QuestionId
|
||
scoreProgressVOList[i].QuestionId = questionId
|
||
// 获取大题名
|
||
questionName := topics[i].QuestionName
|
||
scoreProgressVOList[i].QuestionName = questionName
|
||
// 自评率
|
||
scoreProgressVOList[i].SelfScoreRate = topics[i].SelfScoreRate
|
||
|
||
// 获取 任务总量
|
||
importNumber := topics[i].ImportNumber
|
||
scoreProgressVOList[i].ImportNumber = importNumber
|
||
|
||
// 出成绩量
|
||
finishNumber, err := model.CountFinishScoreNumberByQuestionId(questionId)
|
||
if err != nil {
|
||
resp = Response{"20013", "CountFinishScoreNumberByQuestionId fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
scoreProgressVOList[i].FinishNumber = finishNumber
|
||
|
||
// 出成绩率
|
||
finishNumberString := strconv.FormatInt(finishNumber, 10)
|
||
finishNumberFloat, _ := strconv.ParseFloat(finishNumberString, 64)
|
||
importNumberString := strconv.FormatInt(importNumber, 10)
|
||
importNumberFloat, _ := strconv.ParseFloat(importNumberString, 64)
|
||
var finishRate float64 = 0
|
||
if importNumberFloat != 0 {
|
||
finishRate = finishNumberFloat / importNumberFloat
|
||
finishRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", finishRate), 64)
|
||
}
|
||
scoreProgressVOList[i].FinishRate = finishRate
|
||
// 未出成绩量
|
||
unfinishedNumberFloat := importNumberFloat - finishNumberFloat
|
||
scoreProgressVOList[i].UnfinishedNumber = unfinishedNumberFloat
|
||
|
||
// 未出成绩率
|
||
var unfinishedRate float64 = 0
|
||
if importNumberFloat != 0 {
|
||
unfinishedRate = unfinishedNumberFloat / importNumberFloat
|
||
unfinishedRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", unfinishedRate), 64)
|
||
}
|
||
scoreProgressVOList[i].UnfinishedRate = unfinishedRate
|
||
// 是否全部完成
|
||
var isAllFinished string
|
||
if unfinishedNumberFloat != 0 {
|
||
isAllFinished = "未完成"
|
||
} else {
|
||
isAllFinished = "完成"
|
||
}
|
||
scoreProgressVOList[i].IsAllFinished = isAllFinished
|
||
// 在线人数
|
||
var users = make([]model.User, 0)
|
||
if err := model.FindUserNumberByQuestionId(&users, questionId); err != nil {
|
||
resp = Response{"20010", "FindUserNumberByQuestionId err ", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
|
||
}
|
||
usersNumber := len(users)
|
||
scoreProgressVOList[i].DistributionUserNumber = int64(usersNumber)
|
||
|
||
// -------------------------------------------------------------------------------
|
||
// 平均速度
|
||
var onlineUserNumber int64 = 0
|
||
// 全部用户在线时间
|
||
var totalUserOnlineTime int64 = 0
|
||
// 当前在线用户在线时间
|
||
var currentUserOnlineTime int64 = 0
|
||
// 全部用户批改量
|
||
var totalUserFinishNumber = 0
|
||
// 当前在线用户批改试卷量
|
||
var currentUserFinishNumber = 0
|
||
// 全部用户批改试卷总分
|
||
var totalUserScoreSum int64 = 0
|
||
// 当前用户 批改试卷总分
|
||
var currentUserScoreSum int64 = 0
|
||
|
||
for i := 0; i < usersNumber; i++ {
|
||
userId := users[i].UserId
|
||
isOnline := users[i].IsOnlineStatus
|
||
userOnlineTime := users[i].OnlineTime
|
||
userRecord := make([]model.ScoreRecord, 0)
|
||
model.FindFinishTestByUserId(&userRecord, userId, questionId)
|
||
tempFinishNumber := len(userRecord)
|
||
var tempScore int64 = 0
|
||
for j := 0; j < len(userRecord); j++ {
|
||
tempScore = tempScore + userRecord[j].Score
|
||
}
|
||
|
||
if isOnline {
|
||
// 计算时间
|
||
t, err := util.String2Time(users[i].LoginTime)
|
||
if err != nil {
|
||
resp = Response{"10001", "解析登录时间错误", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
userOnlineTime = users[i].OnlineTime + int64(t.Sub(time.Now()).Hours())
|
||
|
||
currentUserOnlineTime = currentUserOnlineTime + userOnlineTime
|
||
// 计算在线任务量和分数
|
||
currentUserFinishNumber = currentUserFinishNumber + tempFinishNumber
|
||
currentUserScoreSum = currentUserScoreSum + tempScore
|
||
onlineUserNumber = onlineUserNumber + 1
|
||
}
|
||
// 计算时间
|
||
totalUserOnlineTime = totalUserOnlineTime + userOnlineTime
|
||
// 计算任务量和分数
|
||
totalUserFinishNumber = totalUserFinishNumber + tempFinishNumber
|
||
totalUserScoreSum = totalUserScoreSum + tempScore
|
||
}
|
||
// 平均分
|
||
var averageScore = 0.0
|
||
if totalUserFinishNumber != 0 {
|
||
averageScore = float64(totalUserScoreSum) / float64(totalUserFinishNumber)
|
||
}
|
||
// 在线用户平均分
|
||
scoreProgressVOList[i].AverageScore = averageScore
|
||
var currentAverageScore = 0.0
|
||
if currentUserFinishNumber != 0 {
|
||
currentAverageScore = float64(currentUserScoreSum) / float64(currentUserFinishNumber)
|
||
}
|
||
scoreProgressVOList[i].OnlineAverageScore = currentAverageScore
|
||
// 阅卷速度
|
||
var scoreSpeed = 999999999.0
|
||
if totalUserFinishNumber != 0 {
|
||
scoreSpeed = float64(totalUserOnlineTime) / float64(totalUserFinishNumber)
|
||
}
|
||
scoreProgressVOList[i].AverageSpeed = scoreSpeed
|
||
// 在线阅卷速度
|
||
var onlineScoreSpeed = 99999999.0
|
||
if currentUserFinishNumber != 0 {
|
||
onlineScoreSpeed = float64(currentUserOnlineTime) / float64(currentUserFinishNumber)
|
||
}
|
||
scoreProgressVOList[i].OnlineAverageSpeed = onlineScoreSpeed
|
||
// 在线人数 预估时间
|
||
scoreProgressVOList[i].OnlinePredictTime = onlineScoreSpeed * unfinishedNumberFloat
|
||
// 全部人数预估时间
|
||
scoreProgressVOList[i].PredictTime = scoreSpeed * unfinishedNumberFloat
|
||
//
|
||
scoreProgressVOList[i].OnlineUserNumber = onlineUserNumber
|
||
|
||
// --------------------------------------------------
|
||
// 一次评卷完成数
|
||
firstScoreNumber, err1 := model.CountFirstScoreNumberByQuestionId(questionId)
|
||
if err1 != nil {
|
||
resp = Response{"20014", "CountFirstScoreNumberByQuestionId fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
scoreProgressVOList[i].FirstFinishedNumber = firstScoreNumber
|
||
// 一次评卷完成率
|
||
firstScoreNumberString := strconv.FormatInt(firstScoreNumber, 10)
|
||
firstScoreNumberFloat, _ := strconv.ParseFloat(firstScoreNumberString, 64)
|
||
var firstScoreRate float64 = 0
|
||
if importNumberFloat != 0 {
|
||
firstScoreRate = firstScoreNumberFloat / importNumberFloat
|
||
firstScoreRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", firstScoreRate), 64)
|
||
}
|
||
scoreProgressVOList[i].FirstFinishedRate = firstScoreRate
|
||
// 未出第一次成绩量
|
||
firstUnfinishedNumber := importNumberFloat - firstScoreNumberFloat
|
||
scoreProgressVOList[i].FirstUnfinishedNumber = firstUnfinishedNumber
|
||
// 第一次未出成绩率
|
||
var firstUnfinishedRate float64 = 0
|
||
if importNumberFloat != 0 {
|
||
firstUnfinishedRate = firstUnfinishedNumber / importNumberFloat
|
||
firstUnfinishedRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", firstUnfinishedRate), 64)
|
||
}
|
||
scoreProgressVOList[i].FirstUnfinishedRate = firstUnfinishedRate
|
||
// 第一次阅卷是否全部完成
|
||
var isFirstFinished string
|
||
if firstUnfinishedNumber != 0 {
|
||
isFirstFinished = "未完成"
|
||
} else {
|
||
isFirstFinished = "完成"
|
||
}
|
||
scoreProgressVOList[i].IsFirstFinished = isFirstFinished
|
||
|
||
// -----------------------------------------
|
||
|
||
// 二次评卷完成数
|
||
secondScoreNumber, err1 := model.CountSecondScoreNumberByQuestionId(questionId)
|
||
if err1 != nil {
|
||
resp = Response{"20015", "CountSecondScoreNumberByQuestionId fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
scoreProgressVOList[i].SecondFinishedNumber = secondScoreNumber
|
||
// 二次评卷完成率
|
||
secondScoreNumberString := strconv.FormatInt(secondScoreNumber, 10)
|
||
secondScoreNumberFloat, _ := strconv.ParseFloat(secondScoreNumberString, 64)
|
||
|
||
var secondScoreRate float64 = 0
|
||
if importNumberFloat != 0 {
|
||
secondScoreRate = secondScoreNumberFloat / importNumberFloat
|
||
secondScoreRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", secondScoreRate), 64)
|
||
}
|
||
scoreProgressVOList[i].SecondFinishedRate = secondScoreRate
|
||
|
||
// 未出第二次成绩量
|
||
secondUnfinishedNumber := importNumberFloat - firstScoreNumberFloat
|
||
scoreProgressVOList[i].SecondUnfinishedNumber = secondUnfinishedNumber
|
||
// 第二次未出成绩率
|
||
var secondUnfinishedRate float64 = 0
|
||
if importNumberFloat != 0 {
|
||
secondUnfinishedRate = secondUnfinishedNumber / importNumberFloat
|
||
secondUnfinishedRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", secondUnfinishedRate), 64)
|
||
}
|
||
scoreProgressVOList[i].SecondUnfinishedRate = secondUnfinishedRate
|
||
// 第二次阅卷是否全部完成
|
||
var isSecondFinished string
|
||
if secondUnfinishedNumber != 0 {
|
||
isSecondFinished = "未完成"
|
||
} else {
|
||
isSecondFinished = "完成"
|
||
}
|
||
scoreProgressVOList[i].IsSecondFinished = isSecondFinished
|
||
|
||
// -----------------------------------------
|
||
|
||
// 三次评卷完成数
|
||
thirdScoreNumber, err1 := model.CountThirdScoreNumberByQuestionId(questionId)
|
||
if err1 != nil {
|
||
resp = Response{"20016", "CountThirdScoreNumberByQuestionId fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
scoreProgressVOList[i].ThirdFinishedNumber = thirdScoreNumber
|
||
// 三次评卷完成率
|
||
thirdScoreNumberString := strconv.FormatInt(thirdScoreNumber, 10)
|
||
thirdScoreNumberFloat, _ := strconv.ParseFloat(thirdScoreNumberString, 64)
|
||
var thirdScoreRate float64 = 0
|
||
if importNumberFloat != 0 {
|
||
thirdScoreRate = thirdScoreNumberFloat / importNumberFloat
|
||
thirdScoreRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", thirdScoreRate), 64)
|
||
}
|
||
scoreProgressVOList[i].ThirdFinishedRate = thirdScoreRate
|
||
|
||
// 未出第三次成绩量
|
||
thirdUnfinishedNumber := importNumberFloat - thirdScoreNumberFloat
|
||
scoreProgressVOList[i].ThirdUnfinishedNumber = thirdUnfinishedNumber
|
||
// 未出成绩率
|
||
var thirdUnfinishedRate float64 = 0
|
||
if importNumberFloat != 0 {
|
||
thirdUnfinishedRate = thirdUnfinishedNumber / importNumberFloat
|
||
thirdUnfinishedRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", thirdUnfinishedRate), 64)
|
||
}
|
||
scoreProgressVOList[i].ThirdUnfinishedRate = thirdUnfinishedRate
|
||
// 第三次阅卷是否全部完成
|
||
var isThirdFinished string
|
||
if thirdUnfinishedNumber != 0 {
|
||
isThirdFinished = "未完成"
|
||
} else {
|
||
isThirdFinished = "完成"
|
||
}
|
||
scoreProgressVOList[i].IsThirdFinished = isThirdFinished
|
||
|
||
// -----------------------------------------
|
||
// 仲裁卷完成数
|
||
arbitramentFinishNumber, err1 := model.CountArbitramentFinishNumberByQuestionId(questionId)
|
||
if err1 != nil {
|
||
resp = Response{"20017", "CountArbitramentFinishNumberByQuestionId fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
scoreProgressVOList[i].ArbitramentFinishedNumber = arbitramentFinishNumber
|
||
// 仲裁卷未完成量
|
||
arbitramentUnfinishedNumber, err1 := model.CountArbitramentUnFinishNumberByQuestionId(questionId)
|
||
if err1 != nil {
|
||
resp = Response{"20018", "CountArbitramentUnFinishNumberByQuestionId fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
|
||
scoreProgressVOList[i].ArbitramentUnfinishedNumber = arbitramentUnfinishedNumber
|
||
// 仲裁卷产生量:
|
||
arbitramentNumber := arbitramentFinishNumber + arbitramentUnfinishedNumber
|
||
scoreProgressVOList[i].ArbitramentNumber = arbitramentNumber
|
||
// 仲裁卷产生率
|
||
arbitramentNumberString := strconv.FormatInt(arbitramentNumber, 10)
|
||
arbitramentNumberFloat, _ := strconv.ParseFloat(arbitramentNumberString, 64)
|
||
var arbitramentRate float64 = 0
|
||
if importNumberFloat != 0 {
|
||
arbitramentRate = arbitramentNumberFloat / importNumberFloat
|
||
arbitramentRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", arbitramentRate), 64)
|
||
}
|
||
scoreProgressVOList[i].ArbitramentRate = arbitramentRate
|
||
|
||
// 仲裁卷完成率
|
||
arbitramentFinishNumberString := strconv.FormatInt(arbitramentFinishNumber, 10)
|
||
arbitramentFinishNumberFloat, _ := strconv.ParseFloat(arbitramentFinishNumberString, 64)
|
||
var arbitramentFinishRate float64 = 0
|
||
if arbitramentNumberFloat != 0 {
|
||
arbitramentFinishRate = arbitramentFinishNumberFloat / arbitramentNumberFloat
|
||
arbitramentFinishRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", arbitramentFinishRate), 64)
|
||
}
|
||
scoreProgressVOList[i].ArbitramentFinishedRate = arbitramentFinishRate
|
||
|
||
// 仲裁卷未完成率
|
||
arbitramentUnFinishNumberString := strconv.FormatInt(arbitramentUnfinishedNumber, 10)
|
||
arbitramentUnFinishNumberFloat, _ := strconv.ParseFloat(arbitramentUnFinishNumberString, 64)
|
||
var arbitramentUnfinishedRate float64 = 0
|
||
if arbitramentNumberFloat != 0 {
|
||
arbitramentUnfinishedRate = arbitramentUnFinishNumberFloat / arbitramentNumberFloat
|
||
arbitramentUnfinishedRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", arbitramentUnfinishedRate), 64)
|
||
}
|
||
scoreProgressVOList[i].ArbitramentUnfinishedRate = arbitramentUnfinishedRate
|
||
// 仲裁卷是否全部完成
|
||
var ArbitramentFinished string
|
||
if arbitramentUnfinishedNumber != 0 {
|
||
ArbitramentFinished = "未完成"
|
||
} else {
|
||
ArbitramentFinished = "完成"
|
||
}
|
||
scoreProgressVOList[i].IsArbitramentFinished = ArbitramentFinished
|
||
|
||
// -----------------------------------------
|
||
|
||
// 问题卷完成数
|
||
problemFinishNumber, err1 := model.CountProblemFinishNumberByQuestionId(questionId)
|
||
if err1 != nil {
|
||
resp = Response{"20019", "CountProblemFinishNumberByQuestionId fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
scoreProgressVOList[i].ProblemFinishedNumber = problemFinishNumber
|
||
// 问题卷未完成量
|
||
problemUnfinishedNumber, err1 := model.CountProblemUnFinishNumberByQuestionId(questionId)
|
||
if err1 != nil {
|
||
resp = Response{"20020", "CountProblemUnFinishNumberByQuestionId fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
|
||
scoreProgressVOList[i].ProblemUnfinishedNumber = problemUnfinishedNumber
|
||
|
||
// 问题卷产生量:
|
||
problemNumber := problemFinishNumber + problemUnfinishedNumber
|
||
scoreProgressVOList[i].ProblemNumber = problemNumber
|
||
|
||
// 问题卷产生率
|
||
problemNumberString := strconv.FormatInt(problemNumber, 10)
|
||
problemNumberFloat, _ := strconv.ParseFloat(problemNumberString, 64)
|
||
var problemRate float64 = 0
|
||
if importNumberFloat != 0 {
|
||
problemRate = problemNumberFloat / importNumberFloat
|
||
problemRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", problemRate), 64)
|
||
}
|
||
scoreProgressVOList[i].ProblemRate = problemRate
|
||
|
||
// 问题卷完成率
|
||
problemFinishedNumberString := strconv.FormatInt(problemFinishNumber, 10)
|
||
problemFinishNumberFloat, _ := strconv.ParseFloat(problemFinishedNumberString, 64)
|
||
var problemFinishRate float64 = 0
|
||
if problemNumberFloat != 0 {
|
||
problemFinishRate = problemFinishNumberFloat / problemNumberFloat
|
||
problemFinishRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", problemFinishRate), 64)
|
||
}
|
||
scoreProgressVOList[i].ProblemFinishedRate = problemFinishRate
|
||
|
||
// 问题卷未完成率
|
||
problemUnfinishedNumberrString := strconv.FormatInt(problemUnfinishedNumber, 10)
|
||
problemUnfinishedNumberFloat, _ := strconv.ParseFloat(problemUnfinishedNumberrString, 64)
|
||
var problemUnfinishedRate float64 = 0
|
||
if problemNumberFloat != 0 {
|
||
problemUnfinishedRate = problemUnfinishedNumberFloat / problemNumberFloat
|
||
problemUnfinishedRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", problemUnfinishedRate), 64)
|
||
}
|
||
scoreProgressVOList[i].ProblemUnfinishedRate = problemUnfinishedRate
|
||
// 问题卷是否全部完成
|
||
var IsProblemFinished string
|
||
if problemUnfinishedNumber != 0 {
|
||
IsProblemFinished = "未完成"
|
||
} else {
|
||
IsProblemFinished = "完成"
|
||
}
|
||
scoreProgressVOList[i].IsProblemFinished = IsProblemFinished
|
||
}
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
|
||
data["scoreProgressVOList"] = scoreProgressVOList
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
}
|
||
|
||
/**
|
||
19.阅卷组长批改试卷
|
||
*/
|
||
func (c *ApiController) SupervisorPoint() {
|
||
defer c.ServeJSON()
|
||
var requestBody SupervisorPoint
|
||
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
|
||
}
|
||
|
||
supervisorId, err := c.GetSessionUserId()
|
||
if err != nil {
|
||
resp := Response{Status: "10001", Msg: "get user info fail", Data: err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
testId := requestBody.TestId
|
||
scoreStr := requestBody.Scores
|
||
testDetailIdStr := requestBody.TestDetailIds
|
||
testDetailIds := strings.Split(testDetailIdStr, "-")
|
||
scores := strings.Split(scoreStr, "-")
|
||
|
||
// ---------------------------------------------------------------------------------------
|
||
// 创建试卷小题详情
|
||
|
||
var test model.TestPaper
|
||
|
||
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.LeaderId = supervisorId
|
||
testInfo.LeaderScore = score
|
||
testInfo.FinalScore = score
|
||
testInfo.FinalScoreId = supervisorId
|
||
err = testInfo.Update()
|
||
if err != nil {
|
||
resp := Response{"10009", "update testPaper fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
sum += score
|
||
}
|
||
// 给试卷表打分
|
||
_, err = test.GetTestPaper(testId)
|
||
if err != nil || test.TestId == 0 {
|
||
resp := Response{"10002", "get test paper fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
test.LeaderId = supervisorId
|
||
test.LeaderScore = sum
|
||
test.FinalScore = sum
|
||
test.FinalScoreId = supervisorId
|
||
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.GetUnderCorrectedSupervisorPaperByTestQuestionTypeAndTestId(&underTest, testId)
|
||
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 = supervisorId
|
||
record.QuestionId = underTest.QuestionId
|
||
record.ProblemType = underTest.ProblemType
|
||
if underTest.TestQuestionType != 7 {
|
||
record.TestFinish = 1
|
||
}
|
||
|
||
err = record.Save()
|
||
if err != nil {
|
||
resp = Response{"20013", "Save fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
err = underTest.SupervisorDelete()
|
||
if err != nil {
|
||
resp = Response{"20014", "Delete fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// ----------------------------------------
|
||
resp = Response{"10000", "OK", nil}
|
||
c.Data["json"] = resp
|
||
}
|
||
|
||
/**
|
||
20.问题卷列表
|
||
*/
|
||
func (c *ApiController) ProblemUnmarkList() {
|
||
defer c.ServeJSON()
|
||
var requestBody Question
|
||
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
|
||
}
|
||
// supervisorId := requestBody.SupervisorId
|
||
questionId := requestBody.QuestionId
|
||
// ------------------------------------------------
|
||
|
||
// 根据大题号找到问题卷
|
||
problemUnderCorrectedPaper := make([]model.UnderCorrectedPaper, 0)
|
||
model.FindProblemUnderCorrectedPaperByQuestionId(&problemUnderCorrectedPaper, questionId)
|
||
if err != nil {
|
||
resp = Response{"20027", "FindProblemUnderCorrectedList fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// 输出标准
|
||
ProblemUnmarkVOList := make([]ProblemUnmarkListVO, len(problemUnderCorrectedPaper))
|
||
|
||
// 求阅卷输出
|
||
for i := 0; i < len(problemUnderCorrectedPaper); i++ {
|
||
// 存testId
|
||
ProblemUnmarkVOList[i].TestId = problemUnderCorrectedPaper[i].TestId
|
||
}
|
||
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
data["ProblemUnmarkVOList"] = ProblemUnmarkVOList
|
||
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
|
||
}
|
||
|
||
/**
|
||
20.自评卷列表
|
||
*/
|
||
func (c *ApiController) SelfUnmarkList() {
|
||
defer c.ServeJSON()
|
||
var requestBody Question
|
||
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
|
||
}
|
||
// supervisorId := requestBody.SupervisorId
|
||
questionId := requestBody.QuestionId
|
||
// ------------------------------------------------
|
||
|
||
// 根据大题号找到自评卷
|
||
selfUnderCorrectedPaper := make([]model.UnderCorrectedPaper, 0)
|
||
model.FindSelfUnderCorrectedPaperByQuestionId(&selfUnderCorrectedPaper, questionId)
|
||
if err != nil {
|
||
resp = Response{"20027", "FindSelfUnderCorrectedPaperByQuestionId fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// 输出标准
|
||
selfUnmarkVOList := make([]SelfUnmarkListVO, len(selfUnderCorrectedPaper))
|
||
|
||
// 求阅卷输出
|
||
for i := 0; i < len(selfUnderCorrectedPaper); i++ {
|
||
// 存testId
|
||
selfUnmarkVOList[i].TestId = selfUnderCorrectedPaper[i].TestId
|
||
}
|
||
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
data["selfUnmarkVOList"] = selfUnmarkVOList
|
||
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
|
||
}
|
||
|
||
/**
|
||
21.仲裁卷列表
|
||
*/
|
||
func (c *ApiController) ArbitramentUnmarkList() {
|
||
defer c.ServeJSON()
|
||
var requestBody Question
|
||
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
|
||
}
|
||
// supervisorId := requestBody.SupervisorId
|
||
questionId := requestBody.QuestionId
|
||
|
||
// ------------------------------------------------
|
||
|
||
// 找到仲裁卷
|
||
arbitramentUnderCorrectedPaper := make([]model.UnderCorrectedPaper, 0)
|
||
err = model.FindAllArbitramentUnderCorrectedPaper(&arbitramentUnderCorrectedPaper, questionId)
|
||
if err != nil {
|
||
resp = Response{"20026", "FindAllArbitramentUnderCorrectedPaper fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// 输出标准
|
||
arbitramentUnmarkListVOList := make([]ArbitramentUnmarkListVO, len(arbitramentUnderCorrectedPaper))
|
||
|
||
for i := 0; i < len(arbitramentUnderCorrectedPaper); i++ {
|
||
// 存testId
|
||
var testId = arbitramentUnderCorrectedPaper[i].TestId
|
||
arbitramentUnmarkListVOList[i].TestId = testId
|
||
}
|
||
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
data["arbitramentUnmarkListVOList"] = arbitramentUnmarkListVOList
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
|
||
}
|
||
|
||
// 16标准差
|
||
|
||
func (c *ApiController) ScoreDeviation() {
|
||
defer c.ServeJSON()
|
||
var requestBody Question
|
||
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
|
||
}
|
||
// supervisorId := requestBody.SupervisorId
|
||
questionId := requestBody.QuestionId
|
||
|
||
// ------------------------------------------------
|
||
|
||
// 根据大题求试卷分配表
|
||
// paperDistributions := make([]model.PaperDistribution, 0)
|
||
// err = model.FindPaperDistributionByQuestionId(&paperDistributions, questionId)
|
||
// if err != nil {
|
||
// resp = Response{"20007", "FindPaperDistributionByQuestionId err", err}
|
||
// c.Data["json"] = resp
|
||
// return
|
||
// }
|
||
|
||
users, err := model.ListNormalUserByQuestionId(questionId)
|
||
if err != nil {
|
||
c.ResponseError(err.Error())
|
||
return
|
||
}
|
||
|
||
// 输出标准
|
||
ScoreDeviationVOList := make([]ScoreDeviationVO, len(users))
|
||
userScoreNumbers := make([]int, len(users))
|
||
var count = 0
|
||
|
||
// 求教师名和转化输出
|
||
for i := 0; i < len(users); i++ {
|
||
// 求userId 和userName
|
||
userId := users[i].UserId
|
||
user := model.User{}
|
||
err := user.GetUser(userId)
|
||
if err != nil {
|
||
resp = Response{"20001", "could not found user", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
userName := user.UserName
|
||
ScoreDeviationVOList[i].UserId = userId
|
||
ScoreDeviationVOList[i].UserName = userName
|
||
|
||
var finishScoreList []model.ScoreRecord
|
||
err = model.FindFinishTestByUserId(&finishScoreList, userId, questionId)
|
||
if err != nil {
|
||
resp = Response{"2027", "FindFinishTestNumberByUserId fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
var finishCount = len(finishScoreList)
|
||
userScoreNumbers[i] = finishCount
|
||
count += finishCount
|
||
|
||
var averageScore float64 = 0
|
||
if finishCount != 0 {
|
||
sum, err := model.SumFinishScore(userId, questionId)
|
||
if err != nil {
|
||
resp = Response{"20009", "SumFinishScore fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
averageScore = math.Abs(sum / (float64(finishCount)))
|
||
}
|
||
|
||
var add float64
|
||
for j := 0; j < finishCount; j++ {
|
||
scoreJ := finishScoreList[j].Score
|
||
tempJ := math.Abs((float64(scoreJ)) - averageScore)
|
||
add = add + math.Exp2(tempJ)
|
||
|
||
}
|
||
sqrt := math.Sqrt(add)
|
||
sqrt, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", sqrt), 64)
|
||
ScoreDeviationVOList[i].DeviationScore = sqrt
|
||
}
|
||
QuestionScoreDeviation := 0.0
|
||
if count != 0 {
|
||
for j := 0; j < len(ScoreDeviationVOList); j++ {
|
||
QuestionScoreDeviation = QuestionScoreDeviation + (ScoreDeviationVOList[j].DeviationScore * (float64(userScoreNumbers[j]) / float64(count)))
|
||
}
|
||
}
|
||
|
||
QuestionScoreDeviation, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", QuestionScoreDeviation), 64)
|
||
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
data["ScoreDeviationVOList"] = ScoreDeviationVOList
|
||
data["QuestionScoreDeviation"] = QuestionScoreDeviation
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
}
|
||
|
||
/**
|
||
22.自评卷列表
|
||
*/
|
||
func (c *ApiController) SelfMarkList() {
|
||
defer c.ServeJSON()
|
||
var requestBody Question
|
||
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
|
||
}
|
||
// supervisorId := requestBody.SupervisorId
|
||
questionId := requestBody.QuestionId
|
||
|
||
// ------------------------------------------------
|
||
// 找到大题标准误差
|
||
var topic model.Topic
|
||
topic.GetTopic(questionId)
|
||
standardError := topic.StandardError
|
||
// 找到自评卷
|
||
selfMarkPaper := make([]model.UnderCorrectedPaper, 0)
|
||
err = model.FindSelfMarkPaperByQuestionId(&selfMarkPaper, questionId)
|
||
if err != nil {
|
||
resp = Response{"20026", "FindAllArbitramentUnderCorrectedPaper fail", err}
|
||
c.Data["json"] = resp
|
||
return
|
||
}
|
||
// 输出标准
|
||
selfMarkVOList := make([]SelfMarkListVO, len(selfMarkPaper))
|
||
|
||
for i := 0; i < len(selfMarkPaper); i++ {
|
||
// 存testId
|
||
testId := selfMarkPaper[i].TestId
|
||
selfScoreId := selfMarkPaper[i].SelfScoreId
|
||
|
||
var test model.TestPaper
|
||
test.GetTestPaperByTestId(testId)
|
||
|
||
if test.ExaminerFirstId == selfScoreId {
|
||
selfMarkVOList[i].Score = test.ExaminerFirstScore
|
||
selfMarkVOList[i].SelfScore = test.ExaminerFirstSelfScore
|
||
|
||
} else if test.ExaminerSecondId == selfScoreId {
|
||
selfMarkVOList[i].Score = test.ExaminerSecondScore
|
||
selfMarkVOList[i].SelfScore = test.ExaminerSecondSelfScore
|
||
} else if test.ExaminerThirdId == selfScoreId {
|
||
selfMarkVOList[i].Score = test.ExaminerThirdScore
|
||
selfMarkVOList[i].SelfScore = test.ExaminerThirdSelfScore
|
||
}
|
||
selfMarkVOList[i].Userid = selfScoreId
|
||
user := model.User{}
|
||
err = user.GetUser(selfScoreId)
|
||
|
||
selfMarkVOList[i].Name = user.UserName
|
||
selfMarkVOList[i].TestId = testId
|
||
selfMarkVOList[i].StandardError = standardError
|
||
selfMarkVOList[i].Error = math.Abs(float64(selfMarkVOList[i].Score - selfMarkVOList[i].SelfScore))
|
||
}
|
||
|
||
// --------------------------------------------------
|
||
|
||
data := make(map[string]interface{})
|
||
data["selfMarkVOList"] = selfMarkVOList
|
||
resp = Response{"10000", "OK", data}
|
||
c.Data["json"] = resp
|
||
|
||
}
|