学生教师关系管理系统 API 文档 - StudentTeacherRelationController
学生教师关系管理系统 API 文档 - StudentTeacherRelationController
该控制器类提供学生选题、教师审核、论文评分等功能的接口定义。
1. 类定义
@RequestMapping("/studentTeacherRelation")
@Controller
public class StudentTeacherRelationController {
private static final Logger LOG = LoggerFactory.getLogger(StudentTeacherRelationController.class);
@Autowired
private StudentTeacherRelationService studentTeacherRelationService;
@Autowired
private StudentInfoService studentInfoService;
@Autowired
private InitService initService;
@Autowired
private ThesisInfoService thesisInfoService;
@Autowired
private TeacherInfoService teacherInfoService;
@Autowired
private NoPassThesisService noPassThesisService;
@Autowired
private MailUtils mailUtils;
private final String AGREE = '1';
private final String DISAGREE = '2';
private final String MAIL_TITLE = '论文选题教师处理结果';
@Value("${mail.from.account}")
private String mailFromAccount;
/**
* 学生选题
*
* @param thesisId
* @param request
* @return
*/
@RequestMapping("/getStudentSelectThesisResult")
@ResponseBody
@Transactional
public Object getInfoByStudentNo(String thesisId, HttpServletRequest request) {
User u = (User) request.getSession().getAttribute('user');
int studentNum;
try {
Init init = initService.getInitData();
studentNum = init.getStudentNum();
StudentInfo studentInfo = studentInfoService.getInfo(u.getId());
LOG.info('==================开始根据学生学号查询学生选题信息,学生学号:{}==================', studentInfo.getStudentNo());
List<StudentTeacherRelation> res = studentTeacherRelationService.getInfoByStudentNo(studentInfo.getStudentNo());
LOG.info('==================根据学生学号查询学生选题信息完成,数据:{}==================', res);
// 选题数量达到了系统设定值
if (res.size() >= studentNum) {
return ResultUtil.success('选题数已经达到最大值,不能再选!');
}
ThesisInfo thesisInfo = thesisInfoService.selectById(thesisId);
if (thesisInfo.getSelectNum() != 0) {
return ResultUtil.success('该选题已经被选,不能选择该选题!');
}
StudentTeacherRelation studentTeacherRelation = new StudentTeacherRelation();
studentTeacherRelation.setStudentName(studentInfo.getStudentName());
studentTeacherRelation.setStudentNo(studentInfo.getStudentNo());
studentTeacherRelation.setStudentClass(studentInfo.getStudentClass());
studentTeacherRelation.setTeacherName(thesisInfo.getTeacherName());
studentTeacherRelation.setTeacherNo(thesisInfo.getTeacherNo());
studentTeacherRelation.setThesisNo(thesisInfo.getId().toString());
studentTeacherRelation.setThesisTitle(thesisInfo.getThesisTitle());
studentTeacherRelationService.insert(studentTeacherRelation);
LOG.info('==================选题成功==================');
// 选题成功,论文被选择数累加
thesisInfo.setSelectNum(thesisInfo.getSelectNum() + 1);
thesisInfoService.updateById(thesisInfo);
return ResultUtil.success('选题成功');
} catch (Exception e) {
LOG.error('==================根据学生学号查询学生选题信息异常,e={}==================', e);
return ResultUtil.error('根据学生学号查询学生选题信息异常');
}
}
/**
* 根据学号查询学生选题信息
*/
@RequestMapping("/getStudentSelectThesisByStudentNo")
@ResponseBody
public Object getStudentSelectThesisByStudentNo(HttpServletRequest request) {
User u = (User) request.getSession().getAttribute('user');
try {
StudentInfo studentInfo = studentInfoService.getInfo(u.getId());
LOG.info('==================开始根据学号查询学生选题信息,学号:{}==================', studentInfo.getStudentNo());
List<StudentTeacherRelation> res = studentTeacherRelationService.getInfoByStudentNo(studentInfo.getStudentNo());
res.forEach(item -> {
item.setOpinionFlagStr(item.getOpinionFlag() == null ? '未审核' : (item.getOpinionFlag() == 1 ? '同意' : '未审核'));
item.setTeacherOpinion(item.getTeacherOpinion() == null ? '' : item.getTeacherOpinion());
});
LOG.info('==================根据学号查询学生选题信息完成,选题信息:{}==================', res);
return ResultUtil.success(res);
} catch (Exception e) {
LOG.error('==================查询学生选题信息异常==================');
return ResultUtil.error('查询学生选题信息异常');
}
}
/**
* 根据教师id查询
*
* @param page
* @param rows
* @param request
* @return
*/
@RequestMapping("/getStudentSelectThesisByTeacherNo")
@ResponseBody
public Object getStudentSelectThesisByTeacherNo(int page, int rows, HttpServletRequest request) {
User user = (User) request.getSession().getAttribute('user');
TeacherInfo teacherInfo = teacherInfoService.getInfo(user.getId());
try {
LOG.info('==================开始根据教师编号查询学生选题信息==================');
Map<String, Object> res = studentTeacherRelationService.getInfoByTeacherNo(page, rows, teacherInfo.getTeacherNo());
LOG.info('==================根据教师id查询学生选题信息完成,信息:{}==================', res);
return res;
} catch (Exception e) {
LOG.error('==================根据教师id查询学生选题信息失败,e={}==================', e);
return ResultUtil.dataGridEmptyResult();
}
}
/**
* @param opinionFlag 意见标识1:同意,2:不同意
* @param teacherOpinion 老师意见
* @param thesisNo 论文id
* @return
*/
@RequestMapping("/operate")
@ResponseBody
@Transactional
public Object operate(String opinionFlag, String teacherOpinion, String thesisNo) {
LOG.info('==================开始处理论文意见==================');
StudentTeacherRelation studentTeacherRelation = studentTeacherRelationService.getInfoByThesisNo(thesisNo);
StringBuilder sb = new StringBuilder();
try {
// 教师同意选题
if ('1'.equals(opinionFlag)) {
// 根据论文id更新关系表
studentTeacherRelationService.updateByThesisNo(thesisNo, opinionFlag, teacherOpinion);
// 发送邮件通知学生
try {
mailUtils.sendEmail(mailFromAccount, studentTeacherRelation.getStudentEmail(), MAIL_TITLE,
'您选取的论文已经被教师审核通过!');
sb.append('邮件发送成功!');
} catch (MailException e) {
LOG.error('==================邮件发送失败==================');
sb.append('邮件发送失败!');
}
} else {
// 教师不同意选题
// 删除关系表对应数据
Integer[] thesisNos = {Integer.parseInt(thesisNo)};
studentTeacherRelationService.deleteByThesisId(thesisNos);
// 插入新数据到不通过论文信息表
NoPassThesis noPassThesis = new NoPassThesis();
studentTeacherRelation.setTeacherOpinion(teacherOpinion);
BeanUtils.copyProperties(studentTeacherRelation, noPassThesis);
noPassThesisService.insert(noPassThesis);
// 更新论文信息表,设置论文选题数量-1
ThesisInfo thesisInfo = thesisInfoService.selectById(studentTeacherRelation.getThesisNo());
thesisInfo.setSelectNum(thesisInfo.getSelectNum() - 1);
thesisInfoService.updateById(thesisInfo);
// 发送邮件通知学生
try {
mailUtils.sendEmail(mailFromAccount, studentTeacherRelation.getStudentEmail(), MAIL_TITLE, '很遗憾,你选择的论文审核未通过,请及时处理');
sb.append('邮件发送成功!');
} catch (MailException e) {
LOG.error('==================邮件发送失败,e={}==================', e);
sb.append('邮件发送失败!');
}
}
return ResultUtil.success('操作成功!' + sb.toString());
} catch (Exception e) {
LOG.error('==================操作失败,e={}==================', e);
return ResultUtil.error('操作失败');
}
}
@RequestMapping("/getAgreeThesisByTeacherId")
@ResponseBody
public Object getAgreeThesisByTeacherId(int page, int rows, HttpServletRequest request) {
LOG.info('==================开始查询审核通过的论文信息==================');
User user = (User) request.getSession().getAttribute('user');
try {
TeacherInfo teacherInfo = teacherInfoService.getInfo(user.getId());
Map<String, Object> res = studentTeacherRelationService.getAgreeThesisByTeacherId(page, rows, teacherInfo.getId());
LOG.info('==================查询审核通过的论文信息结束,信息:{}==================', res);
return res;
} catch (Exception e) {
LOG.error('查询审核通过的论文信息异常,e={}', e);
return ResultUtil.dataGridEmptyResult();
}
}
@RequestMapping("/selectStudentScore")
@ResponseBody
public Object selectStudentScore(int page, int rows, HttpServletRequest request) {
LOG.info('==================老师开始查询论文评分信息==================');
User user = (User) request.getSession().getAttribute('user');
try {
TeacherInfo teacherInfo = teacherInfoService.getInfo(user.getId());
Map<String, Object> res = studentTeacherRelationService.selectStudentScore(page, rows, teacherInfo.getId());
LOG.info('==================老师查询论文评分信息结束:{}==================', res);
return res;
} catch (Exception e) {
LOG.error('老师查询论文评分信息异常,e={}', e);
return ResultUtil.dataGridEmptyResult();
}
}
@RequestMapping("/selectScore")
@ResponseBody
public Object selectScore(int page, int rows, HttpServletRequest request) {
LOG.info('==================学生开始查询论文评分信息==================');
User user = (User) request.getSession().getAttribute('user');
try {
StudentInfo studentInfo = studentInfoService.getInfo(user.getId());
Map<String, Object> res = studentTeacherRelationService.selectScore(page, rows, studentInfo.getId());
LOG.info('==================学生查询论文评分信息结束:{}==================', res);
return res;
} catch (Exception e) {
LOG.error('学生查询论文评分信息异常,e={}', e);
return ResultUtil.dataGridEmptyResult();
}
}
@RequestMapping("/getFinalThesisByTeacherId")
@ResponseBody
public Object getFinalThesisByTeacherId(int page, int rows, HttpServletRequest request) {
LOG.info('==================开始查询需要评分的论文信息==================');
User user = (User) request.getSession().getAttribute('user');
try {
TeacherInfo teacherInfo = teacherInfoService.getInfo(user.getId());
Map<String, Object> res = studentTeacherRelationService.getFinalThesisByTeacherId(page, rows, teacherInfo.getId());
LOG.info('==================查询需要评分的论文信息结束,信息:{}==================', res);
return res;
} catch (Exception e) {
LOG.error('查询需要评分的论文信息异常,e={}', e);
return ResultUtil.dataGridEmptyResult();
}
}
@RequestMapping("/reply")
@ResponseBody
public Object reply(Reply reply, int page, int rows) {
LOG.info('==================开始查询批复列表==================');
try {
Map<String, Object> res = studentTeacherRelationService.selectAllReply(reply, page, rows);
LOG.info('==================开始查询批复列表完成,列表:{}==================', res);
return res;
} catch (Exception e) {
LOG.error('==================开始查询批复列表异常==================');
}
return ResultUtil.dataGridEmptyResult();
}
@RequestMapping("/list")
@ResponseBody
public Object list(UploadWord uploadWord, int page, int rows) {
LOG.info('==================开始查询论文列表==================');
try {
Map<String, Object> res = studentTeacherRelationService.selectAllWord(uploadWord, page, rows);
LOG.info('==================开始查询批复列表完成,列表:{}==================', res);
return res;
} catch (Exception e) {
LOG.error('==================开始查询批复列表异常==================');
}
return ResultUtil.dataGridEmptyResult();
}
@RequestMapping("/getAgreeThesisByTeacherNo")
@ResponseBody
public Object getAgreeThesisByTeacherNo(int page, int rows, HttpServletRequest request) {
LOG.info('==================开始查询审核通过的论文信息==================');
User user = (User) request.getSession().getAttribute('user');
try {
TeacherInfo teacherInfo = teacherInfoService.getInfo(user.getId());
Map<String, Object> res = studentTeacherRelationService.getAgreeThesisByTeacherNo(page, rows, teacherInfo.getTeacherNo());
LOG.info('==================查询审核通过的论文信息结束,信息:{}==================', res);
return res;
} catch (Exception e) {
LOG.error('查询审核通过的论文信息异常,e={}', e);
return ResultUtil.dataGridEmptyResult();
}
}
@RequestMapping("/getAgreeThesisByStudentNo")
@ResponseBody
public Object getAgreeThesisByStudentNo(int page, int rows, HttpServletRequest request) {
LOG.info('==================开始查询审核通过的论文信息==================');
User user = (User) request.getSession().getAttribute('user');
try {
StudentInfo studentInfo = studentInfoService.getInfo(user.getId());
Map<String, Object> res = studentTeacherRelationService.getAgreeThesisByStudentNo(page, rows, studentInfo.getStudentNo());
LOG.info('==================查询审核通过的论文信息结束,信息:{}==================', res);
return res;
} catch (Exception e) {
LOG.error('查询审核通过的论文信息异常,e={}', e);
return ResultUtil.dataGridEmptyResult();
}
}
@RequestMapping("/getAgreeThesisByStudentId")
@ResponseBody
public Object getAgreeThesisByStudentId(int page, int rows, HttpServletRequest request) {
LOG.info('==================开始查询审核通过的论文信息==================');
User user = (User) request.getSession().getAttribute('user');
try {
StudentInfo studentInfo = studentInfoService.getInfo(user.getId());
Map<String, Object> res = studentTeacherRelationService.getAgreeThesisById(page, rows, studentInfo.getId());
LOG.info('==================查询审核通过的论文信息结束,信息:{}==================', res);
return res;
} catch (Exception e) {
LOG.error('查询审核通过的论文信息异常,e={}', e);
return ResultUtil.dataGridEmptyResult();
}
}
@RequestMapping("/getThesisInfoDetail")
@ResponseBody
public Object getThesisInfoDetail(StudentTeacherRelation studentTeacherRelation, int page, int rows) {
LOG.info('==================开始查询论文情况信息==================');
try {
return studentTeacherRelationService.getThesisInfoDetail(studentTeacherRelation, page, rows);
} catch (Exception e) {
LOG.error('==================查询论文情况信息异常,e={}==================', e);
}
return ResultUtil.dataGridEmptyResult();
}
@RequestMapping("/getEchartData")
@ResponseBody
public Object getEchartData() {
//['选题审核通过','选题未审核','选题未通过']
DataAnalysis dataAnalysis = new DataAnalysis();
try {
LOG.info('==================开始查询图标数据==================');
int passNum = studentTeacherRelationService.selectPassNum();
dataAnalysis.setPassNum(passNum);
dataAnalysis.setUnderPassNum(studentTeacherRelationService.selectUnderPassNumAndPassNum() - passNum);
dataAnalysis.setNoPassNum(studentTeacherRelationService.selectNoPassNum());
} catch (Exception e) {
LOG.error('==================查询图表数据异常,e={}==================', e);
}
return ResultUtil.success(dataAnalysis);
}
}
2. 代码解释
@RequestMapping("/studentTeacherRelation"): 声明该类的请求路径为/studentTeacherRelation。所有该类中方法的请求路径都会以/studentTeacherRelation作为前缀。@Controller: 声明该类为控制器类,表示该类负责处理来自客户端的请求。private static final Logger LOG = LoggerFactory.getLogger(StudentTeacherRelationController.class): 声明一个日志记录器,用于记录程序运行时的日志信息。@Autowired: 自动注入依赖的组件。该注解会自动将spring容器中与该属性类型匹配的组件注入到该属性中。private StudentTeacherRelationService studentTeacherRelationService: 声明一个名为studentTeacherRelationService的依赖,该依赖是StudentTeacherRelationService类型。@Value("${mail.from.account}") private String mailFromAccount: 从配置文件中读取名为mail.from.account的属性值,并赋值给mailFromAccount变量。@RequestMapping("/getStudentSelectThesisResult"): 声明该方法的请求路径为/getStudentSelectThesisResult。@ResponseBody: 声明该方法的返回值将直接作为响应体返回。@Transactional: 声明该方法需要进行事务管理。该注解会将该方法内的操作包装在一个事务中,保证所有操作要么全部成功,要么全部失败。User u = (User) request.getSession().getAttribute('user'): 从Session中获取名为user的属性值,并将其强制转换为User类型。该代码用于获取当前登录的用户的信息。@RequestMapping("/getStudentSelectThesisByStudentNo"): 声明该方法的请求路径为/getStudentSelectThesisByStudentNo。@RequestMapping("/getStudentSelectThesisByTeacherNo"): 声明该方法的请求路径为/getStudentSelectThesisByTeacherNo。@RequestMapping("/operate"): 声明该方法的请求路径为/operate。@RequestMapping("/getAgreeThesisByTeacherId"): 声明该方法的请求路径为/getAgreeThesisByTeacherId。@RequestMapping("/selectStudentScore"): 声明该方法的请求路径为/selectStudentScore。@RequestMapping("/selectScore"): 声明该方法的请求路径为/selectScore。@RequestMapping("/getFinalThesisByTeacherId"): 声明该方法的请求路径为/getFinalThesisByTeacherId。@RequestMapping("/reply"): 声明该方法的请求路径为/reply。@RequestMapping("/list"): 声明该方法的请求路径为/list。@RequestMapping("/getAgreeThesisByTeacherNo"): 声明该方法的请求路径为/getAgreeThesisByTeacherNo。@RequestMapping("/getAgreeThesisByStudentNo"): 声明该方法的请求路径为/getAgreeThesisByStudentNo。@RequestMapping("/getAgreeThesisByStudentId"): 声明该方法的请求路径为/getAgreeThesisByStudentId。@RequestMapping("/getThesisInfoDetail"): 声明该方法的请求路径为/getThesisInfoDetail。@RequestMapping("/getEchartData"): 声明该方法的请求路径为/getEchartData。
3. 接口说明
该控制器类提供以下接口:
/studentTeacherRelation/getStudentSelectThesisResult: 学生选题/studentTeacherRelation/getStudentSelectThesisByStudentNo: 根据学号查询学生选题信息/studentTeacherRelation/getStudentSelectThesisByTeacherNo: 根据教师id查询学生选题信息/studentTeacherRelation/operate: 教师处理论文意见/studentTeacherRelation/getAgreeThesisByTeacherId: 查询审核通过的论文信息(教师视角)/studentTeacherRelation/selectStudentScore: 查询论文评分信息(教师视角)/studentTeacherRelation/selectScore: 查询论文评分信息(学生视角)/studentTeacherRelation/getFinalThesisByTeacherId: 查询需要评分的论文信息(教师视角)/studentTeacherRelation/reply: 查询批复列表/studentTeacherRelation/list: 查询论文列表/studentTeacherRelation/getAgreeThesisByTeacherNo: 查询审核通过的论文信息(教师视角)/studentTeacherRelation/getAgreeThesisByStudentNo: 查询审核通过的论文信息(学生视角)/studentTeacherRelation/getAgreeThesisByStudentId: 查询审核通过的论文信息(学生视角)/studentTeacherRelation/getThesisInfoDetail: 查询论文情况信息/studentTeacherRelation/getEchartData: 查询图标数据
每个接口的具体参数和返回值请参考代码中的注释。
4. 注意事项
- 该 API 文档仅供参考,具体功能实现请参考代码。
- 该 API 文档可能存在更新,请及时关注最新版本。
- 使用该 API 前请先进行登录认证。
5. 代码解释
private final String AGREE = '1';: 定义一个常量,表示同意选题。private final String DISAGREE = '2';: 定义一个常量,表示不同意选题。private final String MAIL_TITLE = '论文选题教师处理结果';: 定义一个常量,表示邮件标题。@Value("${mail.from.account}") private String mailFromAccount;: 从配置文件中读取名为mail.from.account的属性值,并赋值给mailFromAccount变量。该变量用于发送邮件时的发件人地址。User u = (User) request.getSession().getAttribute('user');: 从 Session 中获取名为user的属性值,并将其强制转换为User类型。该代码用于获取当前登录的用户的信息。LOG.info('==================开始根据学生学号查询学生选题信息,学生学号:{}==================', studentInfo.getStudentNo());: 使用LOG对象记录信息,方便调试和排查问题。if ('1'.equals(opinionFlag)) { ... }: 判断教师是否同意选题。如果同意,则更新关系表,并发送邮件通知学生。else { ... }: 如果教师不同意选题,则删除关系表对应数据,插入新数据到不通过论文信息表,更新论文信息表,并发送邮件通知学生。mailUtils.sendEmail(mailFromAccount, studentTeacherRelation.getStudentEmail(), MAIL_TITLE, '您选取的论文已经被教师审核通过!');: 使用mailUtils对象发送邮件。BeanUtils.copyProperties(studentTeacherRelation, noPassThesis);: 使用BeanUtils类将studentTeacherRelation对象中的属性复制到noPassThesis对象中。return ResultUtil.success('操作成功!' + sb.toString());: 返回操作结果,包括操作成功信息和邮件发送结果。return ResultUtil.error('操作失败');: 返回操作失败信息。return ResultUtil.dataGridEmptyResult();: 返回空数据表格信息。return ResultUtil.success(dataAnalysis);: 返回图标数据。
6. 总结
该控制器类提供了一系列接口,用于实现学生选题、教师审核、论文评分等功能。代码中使用了 Spring 的注解、日志记录、邮件发送等功能,并对异常进行了处理,保证了系统功能的稳定性和可靠性。
原文地址: https://www.cveoy.top/t/topic/kSuz 著作权归作者所有。请勿转载和采集!