|
|
|
@ -33,6 +33,7 @@ import java.math.BigDecimal;
|
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Set;
|
|
|
|
import java.util.Set;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
|
|
@ -72,6 +73,16 @@ public class TeaScoreController {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@GetMapping("/accessibleTeachingClasses")
|
|
|
|
|
|
|
|
@ApiOperation("成绩中心可查看的教学班列表")
|
|
|
|
|
|
|
|
public ResultEntity<List<SchoolClass>> accessibleTeachingClasses(HttpServletRequest request) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
return new ResultEntity<>(HttpStatus.OK, "查询成功", teacherScoreService.listAccessibleClasses(currentUser(request)));
|
|
|
|
|
|
|
|
} catch (com.sztzjy.linkCommerce.config.exception.handler.ServiceException e) {
|
|
|
|
|
|
|
|
return new ResultEntity<>(e.getCode(), e.getMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@PostMapping("/selectTeachingClassWeight")
|
|
|
|
@PostMapping("/selectTeachingClassWeight")
|
|
|
|
@ApiOperation("查询本人教学班六模块权重")
|
|
|
|
@ApiOperation("查询本人教学班六模块权重")
|
|
|
|
public ResultEntity<TeachingClassScoreWeight> selectTeachingClassWeight(@RequestParam String teachingClassId,
|
|
|
|
public ResultEntity<TeachingClassScoreWeight> selectTeachingClassWeight(@RequestParam String teachingClassId,
|
|
|
|
@ -107,13 +118,12 @@ public class TeaScoreController {
|
|
|
|
@RequestParam Integer index, @RequestParam Integer size,
|
|
|
|
@RequestParam Integer index, @RequestParam Integer size,
|
|
|
|
HttpServletRequest request) {
|
|
|
|
HttpServletRequest request) {
|
|
|
|
JwtUser teacher = currentUser(request);
|
|
|
|
JwtUser teacher = currentUser(request);
|
|
|
|
PageHelper.startPage(index, size);
|
|
|
|
|
|
|
|
StuRankExample stuRankExample = new StuRankExample();
|
|
|
|
StuRankExample stuRankExample = new StuRankExample();
|
|
|
|
StuRankExample.Criteria criteria = stuRankExample.createCriteria();
|
|
|
|
StuRankExample.Criteria criteria = stuRankExample.createCriteria();
|
|
|
|
criteria.andSchoolIdEqualTo(teacher.getSchoolId());
|
|
|
|
criteria.andSchoolIdEqualTo(teacher.getSchoolId());
|
|
|
|
String nowDate = scoreRankService.getNowDate();
|
|
|
|
String nowDate = scoreRankService.getNowDate();
|
|
|
|
criteria.andUpdateTimeEqualTo(nowDate);
|
|
|
|
criteria.andUpdateTimeEqualTo(nowDate);
|
|
|
|
applyOwnedTeacherClassCriteria(criteria, teacher, classId);
|
|
|
|
applyAccessibleTeacherClassCriteria(criteria, teacher, classId);
|
|
|
|
if(StringUtil.isNotEmpty(userName)){
|
|
|
|
if(StringUtil.isNotEmpty(userName)){
|
|
|
|
criteria.andUsernameEqualTo(userName);
|
|
|
|
criteria.andUsernameEqualTo(userName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -121,6 +131,7 @@ public class TeaScoreController {
|
|
|
|
criteria.andNameEqualTo(name);
|
|
|
|
criteria.andNameEqualTo(name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
stuRankExample.setOrderByClause("stu_rank asc");
|
|
|
|
stuRankExample.setOrderByClause("stu_rank asc");
|
|
|
|
|
|
|
|
PageHelper.startPage(index, size);
|
|
|
|
List<StuRank> stuRankList = stuRankMapper.selectByExample(stuRankExample);
|
|
|
|
List<StuRank> stuRankList = stuRankMapper.selectByExample(stuRankExample);
|
|
|
|
enrichTrainingProgress(stuRankList, classId);
|
|
|
|
enrichTrainingProgress(stuRankList, classId);
|
|
|
|
PageInfo<StuRank> rankPageInfo = new PageInfo<>(stuRankList);
|
|
|
|
PageInfo<StuRank> rankPageInfo = new PageInfo<>(stuRankList);
|
|
|
|
@ -130,7 +141,6 @@ public class TeaScoreController {
|
|
|
|
// Retained for existing direct controller tests; HTTP requests always use the JWT-scoped overload above.
|
|
|
|
// Retained for existing direct controller tests; HTTP requests always use the JWT-scoped overload above.
|
|
|
|
public ResultEntity<PageInfo<StuRank>> selectStuRankAndScore(String classId, String userName, String name,
|
|
|
|
public ResultEntity<PageInfo<StuRank>> selectStuRankAndScore(String classId, String userName, String name,
|
|
|
|
String schoolId, Integer index, Integer size) {
|
|
|
|
String schoolId, Integer index, Integer size) {
|
|
|
|
PageHelper.startPage(index, size);
|
|
|
|
|
|
|
|
StuRankExample example = new StuRankExample();
|
|
|
|
StuRankExample example = new StuRankExample();
|
|
|
|
StuRankExample.Criteria criteria = example.createCriteria();
|
|
|
|
StuRankExample.Criteria criteria = example.createCriteria();
|
|
|
|
criteria.andSchoolIdEqualTo(schoolId);
|
|
|
|
criteria.andSchoolIdEqualTo(schoolId);
|
|
|
|
@ -143,6 +153,7 @@ public class TeaScoreController {
|
|
|
|
criteria.andNameEqualTo(name);
|
|
|
|
criteria.andNameEqualTo(name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
example.setOrderByClause("stu_rank asc");
|
|
|
|
example.setOrderByClause("stu_rank asc");
|
|
|
|
|
|
|
|
PageHelper.startPage(index, size);
|
|
|
|
List<StuRank> rows = stuRankMapper.selectByExample(example);
|
|
|
|
List<StuRank> rows = stuRankMapper.selectByExample(example);
|
|
|
|
enrichTrainingProgress(rows, classId);
|
|
|
|
enrichTrainingProgress(rows, classId);
|
|
|
|
return new ResultEntity<>(HttpStatus.OK, "查询学生成绩和排名成功", new PageInfo<>(rows));
|
|
|
|
return new ResultEntity<>(HttpStatus.OK, "查询学生成绩和排名成功", new PageInfo<>(rows));
|
|
|
|
@ -156,7 +167,7 @@ public class TeaScoreController {
|
|
|
|
@RequestParam(required = false) String classId,
|
|
|
|
@RequestParam(required = false) String classId,
|
|
|
|
HttpServletRequest request) {
|
|
|
|
HttpServletRequest request) {
|
|
|
|
JwtUser teacher = currentUser(request);
|
|
|
|
JwtUser teacher = currentUser(request);
|
|
|
|
SchoolClass teachingClass = teacherScoreService.requireOwnedClass(teacher, classId);
|
|
|
|
SchoolClass teachingClass = teacherScoreService.requireAccessibleClass(teacher, classId);
|
|
|
|
if (teachingClassStudentMapper.countByStudentUserIdAndTeachingClassId(userId, teachingClass.getSchoolClassId()) == 0) {
|
|
|
|
if (teachingClassStudentMapper.countByStudentUserIdAndTeachingClassId(userId, teachingClass.getSchoolClassId()) == 0) {
|
|
|
|
return new ResultEntity<>(HttpStatus.FORBIDDEN, "无权查看该学生成绩");
|
|
|
|
return new ResultEntity<>(HttpStatus.FORBIDDEN, "无权查看该学生成绩");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -225,6 +236,20 @@ public class TeaScoreController {
|
|
|
|
return new ResultEntity<>(HttpStatus.OK, "查看学生成绩详情成功", stuGradeList);
|
|
|
|
return new ResultEntity<>(HttpStatus.OK, "查看学生成绩详情成功", stuGradeList);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@PostMapping("/saveTeacherScore")
|
|
|
|
|
|
|
|
@ApiOperation("保存老师人工评分")
|
|
|
|
|
|
|
|
public ResultEntity<?> saveTeacherScore(@RequestParam String classId,
|
|
|
|
|
|
|
|
@RequestParam String studentUserId,
|
|
|
|
|
|
|
|
@RequestParam BigDecimal teacherScore,
|
|
|
|
|
|
|
|
HttpServletRequest request) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
return new ResultEntity<>(HttpStatus.OK, "老师评分保存成功",
|
|
|
|
|
|
|
|
teacherScoreService.saveTeacherScore(currentUser(request), classId, studentUserId, teacherScore));
|
|
|
|
|
|
|
|
} catch (com.sztzjy.linkCommerce.config.exception.handler.ServiceException e) {
|
|
|
|
|
|
|
|
return new ResultEntity<>(e.getCode(), e.getMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//获取学校权重
|
|
|
|
//获取学校权重
|
|
|
|
@PostMapping("/selectWeight")
|
|
|
|
@PostMapping("/selectWeight")
|
|
|
|
@ApiOperation("查询权重")
|
|
|
|
@ApiOperation("查询权重")
|
|
|
|
@ -285,7 +310,7 @@ public class TeaScoreController {
|
|
|
|
criteria.andSchoolIdEqualTo(teacher.getSchoolId());
|
|
|
|
criteria.andSchoolIdEqualTo(teacher.getSchoolId());
|
|
|
|
String nowDate = scoreRankService.getNowDate();
|
|
|
|
String nowDate = scoreRankService.getNowDate();
|
|
|
|
criteria.andUpdateTimeEqualTo(nowDate);
|
|
|
|
criteria.andUpdateTimeEqualTo(nowDate);
|
|
|
|
applyOwnedTeacherClassCriteria(criteria, teacher, classId);
|
|
|
|
applyAccessibleTeacherClassCriteria(criteria, teacher, classId);
|
|
|
|
if(StringUtil.isNotEmpty(userName)){
|
|
|
|
if(StringUtil.isNotEmpty(userName)){
|
|
|
|
criteria.andUsernameEqualTo(userName);
|
|
|
|
criteria.andUsernameEqualTo(userName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -298,10 +323,10 @@ public class TeaScoreController {
|
|
|
|
//导出的表名
|
|
|
|
//导出的表名
|
|
|
|
String title = "学生成绩";
|
|
|
|
String title = "学生成绩";
|
|
|
|
//表中第一行表头字段
|
|
|
|
//表中第一行表头字段
|
|
|
|
String[] headers = {"学号", "学生姓名", "班级名称", "排名", "参考成绩", "实训进度"};
|
|
|
|
String[] headers = {"学号", "学生姓名", "班级名称", "排名", "参考成绩", "老师评分", "实训进度"};
|
|
|
|
|
|
|
|
|
|
|
|
//具体需要写入excel需要哪些字段,这些字段取自UserReward类,也就是上面的实际数据结果集的泛型
|
|
|
|
//具体需要写入excel需要哪些字段,这些字段取自UserReward类,也就是上面的实际数据结果集的泛型
|
|
|
|
List<String> listColumn = Arrays.asList("username", "name", "className", "stuRank", "score", "trainingProgress");
|
|
|
|
List<String> listColumn = Arrays.asList("username", "name", "className", "stuRank", "score", "teacherScore", "trainingProgress");
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
FilePortUtil.exportExcel(response, title, headers, stuRankList, listColumn);
|
|
|
|
FilePortUtil.exportExcel(response, title, headers, stuRankList, listColumn);
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
@ -332,8 +357,22 @@ public class TeaScoreController {
|
|
|
|
if (ranks == null || ranks.isEmpty()) {
|
|
|
|
if (ranks == null || ranks.isEmpty()) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, BigDecimal> classTeacherScores = Collections.emptyMap();
|
|
|
|
|
|
|
|
if (teacherScoreService != null && StringUtils.isNotBlank(requestedClassId)) {
|
|
|
|
|
|
|
|
Map<String, BigDecimal> loadedScores = teacherScoreService.getTeacherScores(requestedClassId, ranks.stream()
|
|
|
|
|
|
|
|
.map(StuRank::getUserId)
|
|
|
|
|
|
|
|
.filter(StringUtils::isNotBlank)
|
|
|
|
|
|
|
|
.distinct()
|
|
|
|
|
|
|
|
.collect(Collectors.toList()));
|
|
|
|
|
|
|
|
if (loadedScores != null) {
|
|
|
|
|
|
|
|
classTeacherScores = loadedScores;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
for (StuRank rank : ranks) {
|
|
|
|
for (StuRank rank : ranks) {
|
|
|
|
String classId = StringUtils.isNotBlank(requestedClassId) ? requestedClassId : rank.getSchoolClassId();
|
|
|
|
String classId = StringUtils.isNotBlank(requestedClassId) ? requestedClassId : rank.getSchoolClassId();
|
|
|
|
|
|
|
|
rank.setTeacherScore(StringUtils.isNotBlank(requestedClassId)
|
|
|
|
|
|
|
|
? classTeacherScores.get(rank.getUserId())
|
|
|
|
|
|
|
|
: teacherScoreService == null ? null : teacherScoreService.getTeacherScore(classId, rank.getUserId()));
|
|
|
|
Set<String> enabledModules = resolveEnabledTaskModules(classId);
|
|
|
|
Set<String> enabledModules = resolveEnabledTaskModules(classId);
|
|
|
|
int totalTaskCount = enabledModules.size();
|
|
|
|
int totalTaskCount = enabledModules.size();
|
|
|
|
rank.setTotalTaskCount(totalTaskCount);
|
|
|
|
rank.setTotalTaskCount(totalTaskCount);
|
|
|
|
@ -414,14 +453,14 @@ public class TeaScoreController {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void applyOwnedTeacherClassCriteria(StuRankExample.Criteria criteria, JwtUser teacher, String classId) {
|
|
|
|
private void applyAccessibleTeacherClassCriteria(StuRankExample.Criteria criteria, JwtUser teacher, String classId) {
|
|
|
|
List<SchoolClass> ownedClasses;
|
|
|
|
List<SchoolClass> accessibleClasses;
|
|
|
|
if (StringUtils.isNotBlank(classId)) {
|
|
|
|
if (StringUtils.isNotBlank(classId)) {
|
|
|
|
ownedClasses = Collections.singletonList(teacherScoreService.requireOwnedClass(teacher, classId));
|
|
|
|
accessibleClasses = Collections.singletonList(teacherScoreService.requireAccessibleClass(teacher, classId));
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
ownedClasses = teacherScoreService.listOwnedClasses(teacher);
|
|
|
|
accessibleClasses = teacherScoreService.listAccessibleClasses(teacher);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
List<String> studentIds = ownedClasses.stream()
|
|
|
|
List<String> studentIds = accessibleClasses.stream()
|
|
|
|
.flatMap(schoolClass -> teachingClassStudentMapper.selectByTeachingClassId(schoolClass.getSchoolClassId()).stream())
|
|
|
|
.flatMap(schoolClass -> teachingClassStudentMapper.selectByTeachingClassId(schoolClass.getSchoolClassId()).stream())
|
|
|
|
.map(TeachingClassStudent::getStudentUserId)
|
|
|
|
.map(TeachingClassStudent::getStudentUserId)
|
|
|
|
.filter(StringUtils::isNotBlank)
|
|
|
|
.filter(StringUtils::isNotBlank)
|
|
|
|
|