diff --git a/AES-front/README.md b/AES-front/README.md index 93606fc..2486ee3 100644 --- a/AES-front/README.md +++ b/AES-front/README.md @@ -30,13 +30,13 @@ Node 安装 18 及以上 ### Build and Release -```shell -# Prod Environment -pnpm build -4.导出功能的依赖 + ```shell + pnpm build + +4. 导出功能的依赖 ```shell npm install xlsx file-saver -5.展示图标的依赖 +5. 展示图标的依赖 ```shell npm install echarts diff --git a/AES-front/src/api/admin.js b/AES-front/src/api/admin.js index 6b57e85..e39f9a0 100644 --- a/AES-front/src/api/admin.js +++ b/AES-front/src/api/admin.js @@ -93,4 +93,7 @@ export default { addTime:(data)=>request.post('/problem/addTime',data), findProblemReview:(data)=>request.post('/problem/findProblemReview',data), findScore:(data)=>request.post('/problem/findScore',data), + reviewProblem:(data)=>request.post('/problem/reviewProblem',data), + redoReport:(data)=>request.post('/problem/redoReport',data), + findNextReport:(data)=>request.post('/problem/findNextReport',data), } diff --git a/AES-front/src/views/admin/problem/problem-review.vue b/AES-front/src/views/admin/problem/problem-review.vue index ba6c3b5..a1d2c1b 100644 --- a/AES-front/src/views/admin/problem/problem-review.vue +++ b/AES-front/src/views/admin/problem/problem-review.vue @@ -49,8 +49,8 @@ - +
@@ -74,7 +74,7 @@ style='width: 50%;margin-left: 30px'> @@ -136,8 +136,8 @@ const problemReviewValue=ref({ banji:'', autoscore:90, autocomment:``, - score:'', - comment:'', + score:"", + comment:"", attachment:'' }) @@ -170,23 +170,60 @@ const down = async() =>{ } catch (err) { } } -// const submit =async ()=>{ -// if(problemInfoValue.value.name!==''){ -// try { -// await api.Addproblem({ -// ...problemInfoValue.value -// }) -// $message.success("添加课程成功") -// tagsStore.removeTag(path.value) -// await router.push({name: 'AdminProblemList'}) -// } catch (err) { -// tagsStore.removeTag(path.value) -// await router.push({name: 'AdminProblemList'}) -// } -// }else { -// $message.error("作业名称不能为空") -// } -// } +const submit =async ()=>{ + if(problemReviewValue.value.score!==''){ + try { + await api.reviewProblem({ + ...problemReviewValue.value, + studentId:studentId, + problemId:problemId, + }) + $message.success("批阅成功") + tagsStore.removeTag(path.value) + // await router.push({name: 'AdminProblemList'}) + } catch (err) { + tagsStore.removeTag(path.value) + // await router.push({name: 'AdminProblemList'}) + } + }else { + $message.error("教师评分不能为空") + } +} +const submitAndNext =async ()=>{ + if(problemReviewValue.value.score!==''){ + await api.reviewProblem({ + ...problemReviewValue.value, + studentId:studentId, + problemId:problemId, + }) + $message.success("批阅成功") + + }else { + $message.error("教师评分不能为空") + } + const res =await api.findNextReport({ +problemId:problemId + }) + if(res.message=="所有报告都批阅完成") + tagsStore.removeTag(path.value) + else + problemReviewValue.value=res.data + loading.value=false +} +const redo=async ()=>{ + try { + await api.redoReport({ + studentId:studentId, + problemId:problemId, + }) + $message.success("打回成功") + tagsStore.removeTag(path.value) + // await router.push({name: 'AdminProblemList'}) + } catch (err) { + tagsStore.removeTag(path.value) + // await router.push({name: 'AdminProblemList'}) + } +} const queryByPage = async () => { loading.value = true try { diff --git a/AES-front/src/views/admin/problem/problem-student.vue b/AES-front/src/views/admin/problem/problem-student.vue index 5e98213..d12cb72 100644 --- a/AES-front/src/views/admin/problem/problem-student.vue +++ b/AES-front/src/views/admin/problem/problem-student.vue @@ -127,6 +127,9 @@ const paginationReactive = reactive({ } }) const columns=ref([]) + + + const updateColumns=()=>{ if(selectedStatus.value==='weijiao'){ columns.value = [ @@ -289,6 +292,23 @@ const onReview=async (studentId)=>{ const {id} = studentId await router.push({name: 'AdminProblemReview', query:{classId: classId,problemId:problemId,courseId:courseId,studentId:id}}) } +const onBack=async (studentId)=>{ + const {id} = studentId + try { + await api.redoReport({ + studentId:id, + problemId:problemId, + }) + $message.success("打回成功") + filterData() + // tagsStore.removeTag(path.value) + // await router.push({name: 'AdminProblemList'}) + } catch (err) { + filterData() + // tagsStore.removeTag(path.value) + // await router.push({name: 'AdminProblemList'}) + } +} const onDeleteClass = async (classId)=>{ try { await api.remove({ids:classId.username}) diff --git a/AES/src/main/java/com/example/aes/problem/controller/ProblemController.java b/AES/src/main/java/com/example/aes/problem/controller/ProblemController.java index cf41646..344fff7 100644 --- a/AES/src/main/java/com/example/aes/problem/controller/ProblemController.java +++ b/AES/src/main/java/com/example/aes/problem/controller/ProblemController.java @@ -186,7 +186,28 @@ public class ProblemController { return RespBean.error("加时失败"); } + @PostMapping( + "/reviewProblem") + public RespBean reviewProblem(@RequestBody PMReviewMessage pmReviewMessage) { + int num = + problemServiceI.editScoreAndComment(pmReviewMessage); + if (num == 1) + return RespBean.ok("批阅成功"); + else + return RespBean.error("批阅失败"); + } + @PostMapping( + "/redoReport") + public RespBean redoReport(@RequestBody PMReviewMessage pmReviewMessage) { + int num = + problemServiceI.redoReport(pmReviewMessage); + if (num == 1) + return RespBean.ok("打回成功"); + else + return RespBean.error("打回失败"); + + } @PostMapping("/findProblemById") public RespBean findProblemById(@RequestBody PMProblem pmProblem) { List problems = @@ -312,6 +333,20 @@ public class ProblemController { return RespBean.ok("获取批阅报告成功!", reviewMessage); } + @PostMapping("findNextReport") + public RespBean findNextReport(@RequestBody PMReviewMessage pmReviewMessage){ + //找到下一个studentId + int studentId= + problemServiceI.findNextId(pmReviewMessage.getProblemId()); + if(studentId==0) + return RespBean.error("所有报告都批阅完成"); + else pmReviewMessage.setStudentId(studentId); + //根据studentId和problemId查找 + PMReviewMessage reviewMessage= + problemServiceI.findProblemReview(pmReviewMessage); + return RespBean.ok("获取下一份批阅报告成功!", + reviewMessage); + } //根据作业id和学生id获取学生当前报告成绩排名 @GetMapping("/getStudentRank") diff --git a/AES/src/main/java/com/example/aes/problem/dao/SubmitReportDaoI.java b/AES/src/main/java/com/example/aes/problem/dao/SubmitReportDaoI.java index 8768d2d..1bbc65d 100644 --- a/AES/src/main/java/com/example/aes/problem/dao/SubmitReportDaoI.java +++ b/AES/src/main/java/com/example/aes/problem/dao/SubmitReportDaoI.java @@ -12,7 +12,10 @@ public interface SubmitReportDaoI extends BaseDaoI { public List findWeijiaoList(PMStudentSubmit pmStudentSubmit); public List findYijiaoList(PMStudentSubmit pmStudentSubmit); public int updateAddTime(LocalDateTime addTime,int problemId,int studentId); + public int editScoreAndComment(PMReviewMessage pmReviewMessage); + public int redoReport(PMReviewMessage pmReviewMessage); public List findProblemReview(PMReviewMessage pmReviewMessage); public List findScoreList(PMStudentSubmit pmStudentSubmit); + public List findNextId(int problemId); } diff --git a/AES/src/main/java/com/example/aes/problem/dao/impl/SubmitReportDaoImpl.java b/AES/src/main/java/com/example/aes/problem/dao/impl/SubmitReportDaoImpl.java index a80cd9f..2dab613 100644 --- a/AES/src/main/java/com/example/aes/problem/dao/impl/SubmitReportDaoImpl.java +++ b/AES/src/main/java/com/example/aes/problem/dao/impl/SubmitReportDaoImpl.java @@ -8,6 +8,7 @@ import com.example.aes.user.dao.impl.BaseDaoImpl; import org.hibernate.Query; import org.springframework.stereotype.Repository; +import javax.persistence.criteria.CriteriaBuilder; import java.time.LocalDateTime; import java.util.List; @@ -74,6 +75,44 @@ String chineseName= return num; } @Override + public int editScoreAndComment(PMReviewMessage pmReviewMessage){ + Float score= pmReviewMessage.getScore(); + String comment= + pmReviewMessage.getComment(); + String hql= "UPDATE SubmitReport sr SET" + + " sr.score= :score,sr" + + ".comment=:comment,sr" + + ".submissionStatus='已批阅' " + + "WHERE sr.problemId = " + + ":problemId" + + " AND sr.studentId= :studentId"; + Query q = this.getCurrentSession().createQuery(hql); + q.setParameter("score",score); + q.setParameter("comment",comment); + q.setParameter("problemId", + pmReviewMessage.getProblemId()); + q.setParameter("studentId", + pmReviewMessage.getStudentId()); + int num = q.executeUpdate(); + return num; + } + @Override + public int redoReport(PMReviewMessage pmReviewMessage){ + String hql= "UPDATE SubmitReport sr set" + + " sr.submissionStatus='已领取'," + + "sr.submissionTime=null " + + "WHERE sr.problemId = " + + ":problemId" + + " AND sr.studentId= :studentId"; + Query q = this.getCurrentSession().createQuery(hql); + q.setParameter("problemId", + pmReviewMessage.getProblemId()); + q.setParameter("studentId", + pmReviewMessage.getStudentId()); + int num = q.executeUpdate(); + return num; + } + @Override public List findYijiaoList(PMStudentSubmit pmStudentSubmit){ int classId= pmStudentSubmit.getClassId(); int problemId= pmStudentSubmit.getProblemId(); @@ -186,4 +225,23 @@ String chineseName= query.setParameter("problemId", problemId); return query.getResultList(); } + @Override + public List findNextId(int problemId){ + String hql="SELECT " + + "sr.studentId " + + "FROM Users u " + + "INNER JOIN " + + " SubmitReport sr ON " + + "sr.studentId " + + "= u.id " + + "WHERE " + + " sr.problemId =:problemId " + + "and " + + "sr.submissionTime is not null " + + "and sr.submissionStatus='待批阅'"; + Query q = this.getCurrentSession().createQuery(hql); +// query.setParameter("studentId", studentId); + q.setParameter("problemId", problemId); + return q.list(); + } } diff --git a/AES/src/main/java/com/example/aes/problem/service/Impl/ProblemServiceImpl.java b/AES/src/main/java/com/example/aes/problem/service/Impl/ProblemServiceImpl.java index 1243b9a..09dc715 100644 --- a/AES/src/main/java/com/example/aes/problem/service/Impl/ProblemServiceImpl.java +++ b/AES/src/main/java/com/example/aes/problem/service/Impl/ProblemServiceImpl.java @@ -320,7 +320,14 @@ public class ProblemServiceImpl implements ProblemServiceI { return studentSubmitDao.updateAddTime(addTime,problemId,studentId); } - +@Override +public int editScoreAndComment(PMReviewMessage pmReviewMessage){ + return studentSubmitDao.editScoreAndComment(pmReviewMessage); +} +@Override +public int redoReport(PMReviewMessage pmReviewMessage){ + return studentSubmitDao.redoReport(pmReviewMessage); +} @Override public DataGrid findProblemByCourseIdAndClassId(PMProblem pmProblem){ DataGrid dg = new DataGrid(); @@ -464,6 +471,14 @@ public class ProblemServiceImpl implements ProblemServiceI { }return scoreList; } @Override + public int findNextId(int problemId){ + List nextList= + studentSubmitDao.findNextId(problemId); + if(nextList.size()!=0) + return studentSubmitDao.findNextId(problemId).get(0); + else return 0; + } + @Override public int editPostProblem(int classId, int problemId,LocalDateTime startTime,LocalDateTime endTime,boolean allow){ int n=0; diff --git a/AES/src/main/java/com/example/aes/problem/service/ProblemServiceI.java b/AES/src/main/java/com/example/aes/problem/service/ProblemServiceI.java index f2645bd..3d7fad7 100644 --- a/AES/src/main/java/com/example/aes/problem/service/ProblemServiceI.java +++ b/AES/src/main/java/com/example/aes/problem/service/ProblemServiceI.java @@ -51,5 +51,8 @@ public interface ProblemServiceI { public DataGrid findYijiaoList(PMStudentSubmit pmStudentSubmit); public PMReviewMessage findProblemReview(PMReviewMessage pmReviewMessage); public int editSubmitReport(LocalDateTime addTime,int problemId,int studentId); + public int editScoreAndComment(PMReviewMessage pmReviewMessage); + public int redoReport(PMReviewMessage pmReviewMessage); public List findScoreList(PMStudentSubmit pmStudentSubmit); + public int findNextId(int problemId); }