Files
nuttyreading-java/src/main/java/com/peanut/modules/common/controller/ClassController.java
2025-05-06 14:11:39 +08:00

596 lines
25 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.peanut.modules.common.controller;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.promeg.pinyinhelper.Pinyin;
import com.peanut.common.utils.DateUtils;
import com.peanut.common.utils.R;
import com.peanut.common.utils.ShiroUtils;
import com.peanut.modules.common.dao.ClassExamUserDao;
import com.peanut.modules.common.entity.*;
import com.peanut.modules.common.service.ClassEntityService;
import com.peanut.modules.common.service.ClassExamUserService;
import com.peanut.modules.common.service.MyUserService;
import com.peanut.modules.common.service.UserCertificateService;
import com.peanut.modules.medical.service.CourseService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController("commonClass")
@RequestMapping("common/class")
public class ClassController {
@Autowired
private ClassEntityService classEntityService;
@Autowired
private UserCertificateService userCertificateService;
@Autowired
private CourseService courseService;
@Autowired
private ClassExamUserService classExamUserService;
@Autowired
private StringRedisTemplate redisTemplate;
//班级模型列表
@RequestMapping("/getClassModelList")
public R getClassModelList(@RequestBody Map<String,Object> params){
Page classModelList = classEntityService.getClassModelList(params);
return R.ok().put("page",classModelList);
}
//新增班级模型
@RequestMapping("/addClassModel")
public R addClassModel(@RequestBody ClassModel classModel){
String[] courseIds = classModel.getCourseIds().split(",");
if(courseIds.length > 0){
HashSet<String> set = new HashSet<>();
for (String courseId : courseIds) {
if (!set.add(courseId)){
return R.error("课程不能重复");
}
}
}
int score = 0;
if (classModel.getIsQuestion()==1){
score += classModel.getQuestionScore();
}
if (classModel.getIsTask()==1){
score += classModel.getTaskScore();
}
if (classModel.getIsMedicalcase()==1){
score += classModel.getMedicalcaseScore();
}
if (classModel.getIsExperience()==1){
score += classModel.getExperienceScore();
}
if (classModel.getIsExam()==1){
score += classModel.getExamScore();
}
if (score==100){
return classEntityService.addClassModel(classModel);
}else {
return R.error("请设置各模块占比总和为100");
}
}
//修改班级模型
@RequestMapping("/editClassModel")
public R editClassModel(@RequestBody ClassModel classModel){
String[] courseIds = classModel.getCourseIds().split(",");
if(courseIds.length > 0){
HashSet<String> set = new HashSet<>();
for (String courseId : courseIds) {
if (!set.add(courseId)){
return R.error("课程不能重复");
}
}
}
int score = 0;
if (classModel.getIsQuestion()==1){
score += classModel.getQuestionScore();
}
if (classModel.getIsTask()==1){
score += classModel.getTaskScore();
}
if (classModel.getIsMedicalcase()==1){
score += classModel.getMedicalcaseScore();
}
if (classModel.getIsExperience()==1){
score += classModel.getExperienceScore();
}
if (classModel.getIsExam()==1){
score += classModel.getExamScore();
}
if (score==100){
return classEntityService.editClassModel(classModel);
}else {
return R.error("请设置各模块占比总和为100");
}
}
//获取模型可选课程
@RequestMapping("/getClassModelCourseList")
public R getClassModelCourseList(@RequestBody Map<String,Object> params){
List<CourseEntity> courseList = classEntityService.getClassModelCourseList(params);
return R.ok().put("courseList",courseList);
}
//获取主任下的班级模型
@RequestMapping("/getClassModelByUserid")
public R getClassModelByUserid(@RequestBody Map<String,Object> params){
List<ClassModel> classModelList = classEntityService.getClassModelByUserid(params);
return R.ok().put("classModelList",classModelList);
}
//获取主任下的班级
@RequestMapping("/getClassByDirectorid")
public R getClassByDirectorid(@RequestBody Map<String,Object> params){
return R.ok().put("classEntityList",classEntityService.getClassByDirectorid(params));
}
//获取班级列表
@RequestMapping("/getClassList")
public R getClassList(@RequestBody Map<String,Object> params){
Page classList = classEntityService.getClassList(params);
return R.ok().put("page",classList);
}
//新增班级
@RequestMapping("/addClass")
public R addClass(@RequestBody ClassEntity classEntity){
return classEntityService.addClass(classEntity);
}
//开班
@RequestMapping("/openClass")
public R openClass(@RequestBody Map<String,Object> params){
return classEntityService.openClass(params);
}
//修改班级
@RequestMapping("/editClass")
public R editClass(@RequestBody Map<String,Object> params){
if (classEntityService.editClass(params)){
return R.ok();
}else {
return R.error("修改出错");
}
}
//设置班委
@RequestMapping("/setUserRole")
public R setUserRole(@RequestBody Map<String,Object> params){
return classEntityService.setUserRole(params);
}
//获取用户在班级中角色
@RequestMapping("/getUserRole")
public R getUserRole(@RequestBody Map<String,Object> params){
return R.ok().put("result",classEntityService.getUserRole(params));
}
//获取用户拥有角色类型
@RequestMapping("/getRoleType")
public R getRoleType(){
return R.ok().put("result",classEntityService.getRoleType());
}
//删除班级
@RequestMapping("/delClass")
public R delClass(@RequestBody Map<String,Object> params){
return classEntityService.delClass(params);
}
//获取班级详情
@RequestMapping("/getClassInfo")
public R getClassInfo(@RequestBody Map<String,Object> params){
return R.ok().put("result",classEntityService.getClassInfo(params));
}
//同一小班未开班小班
@RequestMapping("/getNoOpenClassSameClass")
public R getNoOpenClassSameClass(@RequestBody Map<String,Object> params){
return R.ok().put("result",classEntityService.getNoOpenClassSameClass(params));
}
//查询未加入小班
@RequestMapping("/getClassNoUser")
public R getClassNoUser(){
return R.ok().put("result",classEntityService.getClassNoUser());
}
//查询包含课程的小班(登陆人未加入)
@RequestMapping("/getClassByCourseIdNoUser")
public R getClassByCourseIdNoUser(@RequestBody Map<String,Object> params){
return R.ok().put("result",classEntityService.getClassByCourseIdNoUser(params));
}
//查询登陆人已加入小班
@RequestMapping("/getClassByUser")
public R getClassByUser(@RequestBody Map<String,Object> params){
return R.ok().put("result",classEntityService.getClassByUser(params));
}
//加入小班前查询用户买课情况
@RequestMapping("/getUserCourseBuy")
public R getUserCourseBuy(@RequestBody Map<String,Object> params){
return classEntityService.getUserCourseBuy(params);
}
//加入小班
@RequestMapping("/joinClass")
public R joinClass(@RequestBody Map<String,Object> params){
return classEntityService.joinClass(params);
}
//退出小班
@RequestMapping("/quitClass")
public R quitClass(@RequestBody Map<String,Object> params){
classEntityService.quitClass(params);
return R.ok();
}
//我的小班列表
@RequestMapping("/MyClassList")
public R MyClassList(@RequestBody Map<String,Object> params){
return R.ok().put("result",classEntityService.MyClassList(params));
}
//新增班级任务医案心得
@RequestMapping("/addClassTask")
public R addClassTask(@RequestBody ClassTask classTask){
classEntityService.addClassTask(classTask);
return R.ok();
}
//删除任务
@RequestMapping("/delClassTask")
public R delClassTask(@RequestBody Map<String,Object> params){
classEntityService.delClassTask(params);
return R.ok();
}
//生成班级任务
@RequestMapping("/generateClassTask")
public R generateClassTask(@RequestBody Map<String,Object> params){
classEntityService.generateClassTask(params);
return R.ok();
}
//获取班级任务列表
@RequestMapping("/getClassTaskList")
public R getClassTaskList(@RequestBody Map<String,Object> params){
Page classTaskList = classEntityService.getClassTaskList(params);
return R.ok().put("page",classTaskList);
}
//获取班级任务列表(学员)
@RequestMapping("/getClassTaskListStudent")
public R getClassTaskListStudent(@RequestBody Map<String,Object> params){
Page classTaskList = classEntityService.getClassTaskListStudent(params);
return R.ok().put("page",classTaskList);
}
//编辑班级任务医案心得
@RequestMapping("/editClassTask")
public R editClassTask(@RequestBody ClassTask classTask){
classEntityService.editClassTask(classTask);
return R.ok();
}
//获取任务详情
@RequestMapping("/getClassTaskInfo")
public R getClassTaskInfo(@RequestBody Map<String,Object> params){
return R.ok().put("result",classEntityService.getClassTaskInfo(params));
}
//获取任务详情学员
@RequestMapping("/getClassTaskInfoStudent")
public R getClassTaskInfoStudent(@RequestBody Map<String,Object> params){
ClassTask classTask = classEntityService.getClassTaskInfoStudent(params);
return R.ok().put("classTask",classTask);
}
//新增作业
@RequestMapping("/addClassTaskAndQuesReply")
public R addClassTaskAndQuesReply(@RequestBody ClassTaskAndQuesReply classTaskAndQuesReply){
ClassEntity classEntity = classEntityService.getById(classTaskAndQuesReply.getClassId());
if ("3".equals(classEntity.getState())) {
return R.error("考试周禁止提交作业");
}
int res = classEntityService.addClassTaskAndQuesReply(classTaskAndQuesReply);
if (res==2){
return R.error("已提交");
}else if (res==1){
return R.ok();
}else {
return R.error("提交失败");
}
}
//通过任务获取作业列表
@RequestMapping("/getReplyListByTaskId")
public R getReplyListByTaskId(@RequestBody Map<String,Object> params){
Page classTaskAndQuesReplyList = classEntityService.getReplyListByTaskId(params);
return R.ok().put("page",classTaskAndQuesReplyList);
}
//通过任务获取作业列表(学员)
@RequestMapping("/getReplyListByTaskIdStudent")
public R getReplyListByTaskIdStudent(@RequestBody Map<String,Object> params){
Page classTaskAndQuesReplyList = classEntityService.getReplyListByTaskIdStudent(params);
return R.ok().put("page",classTaskAndQuesReplyList);
}
//心得评分
@RequestMapping("/editTaskScore")
public R editTaskScore(@RequestBody Map<String,Object> params){
return classEntityService.editTaskScore(params);
}
//打分
@RequestMapping("/editScore")
public R editScore(@RequestBody Map<String,Object> params){
return classEntityService.editScore(params);
}
//编辑作业
@RequestMapping("/editClassTaskAndQuesReply")
public R editClassTaskAndQuesReply(@RequestBody ClassTaskAndQuesReply classTaskAndQuesReply){
classEntityService.editClassTaskAndQuesReply(classTaskAndQuesReply);
return R.ok();
}
//作业详情
@RequestMapping("/getClassTaskAndQuesReplyInfo")
public R getClassTaskAndQuesReplyInfo(@RequestBody Map<String,Object> params){
ClassTaskAndQuesReply classTaskAndQuesReply = classEntityService.getClassTaskAndQuesReplyInfo(params);
return R.ok().put("classTaskAndQuesReply", classTaskAndQuesReply);
}
//课后题详情
@RequestMapping("/getQuesReplyInfo")
public R getQuesReplyInfo(@RequestBody Map<String,Object> params){
ClassTaskAndQuesReply classTaskAndQuesReply = classEntityService.getQuesReplyInfo(params);
return R.ok().put("classTaskAndQuesReply", classTaskAndQuesReply);
}
//思考题列表
@RequestMapping("/getThinkQuestionList")
public R getThinkQuestionList(@RequestBody Map<String,Object> params){
return R.ok().put("thinkQuestionList",classEntityService.getThinkQuestionList(params));
}
//思考题列表(学员)
@RequestMapping("/getThinkQuestionListStudent")
public R getThinkQuestionListStudent(@RequestBody Map<String,Object> params){
return R.ok().put("getThinkQuestionListStudent",classEntityService.getThinkQuestionListStudent(params));
}
//学员成绩
@RequestMapping("/getUserScore")
public R getUserScore(@RequestBody Map<String,Object> params){
return R.ok().put("result",classEntityService.getUserScore(params));
}
//学员成绩列表
@RequestMapping("/userScoreList")
public R userScoreList(@RequestBody Map<String,Object> params){
return R.ok().put("result",classEntityService.userScoreList(params));
}
//导出学员成绩
@RequestMapping("/exportUserScore")
public void exportUserScore(HttpServletResponse response,@RequestBody Map<String,Object> params){
List<Map<String,Object>> userScoreList = classEntityService.userScoreList(params);
XSSFWorkbook wb = new XSSFWorkbook();
//创建一张表
Sheet sheet = wb.createSheet("Student");
//创建第一行起始为0
Row titleRow = sheet.createRow(0);
titleRow.createCell(0).setCellValue("姓名");
titleRow.createCell(1).setCellValue("电话");
titleRow.createCell(2).setCellValue("邮箱");
titleRow.createCell(3).setCellValue("任务");
titleRow.createCell(4).setCellValue("医案");
titleRow.createCell(5).setCellValue("心得");
titleRow.createCell(6).setCellValue("思考题");
titleRow.createCell(7).setCellValue("考试");
titleRow.createCell(8).setCellValue("总成绩");
//序号默认为1
int cell = 1;
//遍历
for (Map<String,Object> map : userScoreList) {
Row row = sheet.createRow(cell);
MyUserEntity user = (MyUserEntity)map.get("user");
row.createCell(0).setCellValue(user.getName());
row.createCell(1).setCellValue(user.getTel());
row.createCell(2).setCellValue(user.getEmail());
row.createCell(3).setCellValue(map.get("task0Score").toString());
row.createCell(4).setCellValue(map.get("task1Score").toString());
row.createCell(5).setCellValue(map.get("experienceScore").toString());
row.createCell(6).setCellValue(map.get("questionScore").toString());
row.createCell(7).setCellValue(map.get("examScore").toString());
row.createCell(8).setCellValue(map.get("userScore").toString());
//序号自增
cell++;
}
String fileName = "学生成绩.xlsx";
OutputStream outputStream =null;
try {
//文件名编码格式
fileName = URLEncoder.encode(fileName,"UTF-8");
//设置ContentType请求信息格式
response.setContentType("application/vnd.ms-excel");
//设置标头
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
outputStream = response.getOutputStream();
wb.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//结班
@RequestMapping("/closeClass")
@Transactional
public R closeClass(@RequestBody Map<String,Object> params){
//结班限制
R r = classEntityService.closeClass(params);
//结班后给合格学员发放证书
if ("0".equals(r.get("code").toString())){
ClassEntity classEntity = classEntityService.getById(params.get("classId").toString());
List<Map<String,Object>> userScoreList = classEntityService.userScoreList(params);
for (Map<String, Object> userScoreMap : userScoreList) {
if (new BigDecimal(userScoreMap.get("userScore").toString()).compareTo(new BigDecimal(60))>=0){
UserCertificate userCertificate = new UserCertificate();
userCertificate.setTitle(classEntity.getTitle());
String type = "B";
if (new BigDecimal(userScoreMap.get("userScore").toString()).compareTo(new BigDecimal(70))>=0){
type = "A";
}
userCertificate.setType(type);
userCertificate.setLabelId(5);
MyUserEntity user = (MyUserEntity)userScoreMap.get("user");
userCertificate.setUserId(user.getId());
userCertificate.setClassId(classEntity.getId());
//查询小班下得课程信息
List<Map<String,Object>> classCourseInfoLlist = classEntityService.classCourseInfoClassId(classEntity.getId(),0);
for (Map<String,Object> classCourseInfo:classCourseInfoLlist){
if (StringUtils.isNotEmpty(classCourseInfo.get("titleAbbr").toString())
&&StringUtils.isNotEmpty(classCourseInfo.get("courseETitle").toString())){
String certificateNo = classEntityService.getNextCertificateNo(type,classCourseInfo.get("titleAbbr").toString());
userCertificate.setCertificateNo(certificateNo);
userCertificate.setCourseId((Integer) classCourseInfo.get("courseId"));
if (StringUtils.isNotEmpty(user.getPhoto())&&StringUtils.isNotEmpty(user.getName())){
String startYear = DateUtil.year(classEntity.getStartTime())+"";
String startMonth = DateUtil.month(classEntity.getStartTime())+1+"";
String startDay = DateUtil.dayOfMonth(classEntity.getStartTime())+"";
String endYear = DateUtil.year(classEntity.getEndTime())+"";
String endMonth = DateUtil.month(classEntity.getEndTime())+1+"";
String endDay = DateUtil.dayOfMonth(classEntity.getEndTime())+"";
double keshiTotal = (double)classCourseInfo.get("keshi");
String keshi = (keshiTotal+"").replace(".0","");
String courseTitle = classCourseInfo.get("courseTitle").toString();
if (courseTitle.contains("")){
courseTitle = courseTitle.substring(0,courseTitle.indexOf(""));
}
String[] des = {startYear,startMonth,startDay,endYear,endMonth,endDay,
classEntity.getTitle(),courseTitle,keshi};
String[] edes = {classCourseInfo.get("courseETitle").toString(),keshi};
String url = userCertificateService.generateCertificate(type,certificateNo,user.getPhoto(),user.getName(),
des, edes, endYear,endMonth,endDay);
userCertificate.setCertificateUrl(url);
}
userCertificateService.save(userCertificate);
}else {
R.error("课程未设置英文名或缩写");
}
}
}
}
return R.ok();
}else {
return r;
}
}
//生成证书图片
@RequestMapping("/generateCertificateClass")
public R generateCertificateClass(@RequestBody Map<String,Object> params) {
MyUserEntity user = ShiroUtils.getUser();
String photoUrl = user.getPhoto();//证书人照片
String realName = user.getName();//真实姓名
UserCertificate userCertificate = userCertificateService.getById(params.get("id").toString());
String type = userCertificate.getType();//证书类型A a证 B b证 ZK自考
if ("ZK".equals(type)){
CourseEntity courseEntity = courseService.getById(userCertificate.getCourseId());
String courseTitle = userCertificate.getTitle();
// ClassExamUser classExamUser = classExamUserService.getOne(new LambdaQueryWrapper<ClassExamUser>()
// .eq(ClassExamUser::getUserId,ShiroUtils.getUId())
// .eq(ClassExamUser::getRelationId,userCertificate.getCourseId()));
ClassExamUser classExamUser = classExamUserService.getUserHighExam(ShiroUtils.getUId());
String endYear = DateUtil.year(classExamUser.getEndTime())+"";
String endMonth = DateUtil.month(classExamUser.getEndTime())+1+"";
String endDay = DateUtil.dayOfMonth(classExamUser.getEndTime())+"";
String[] description= {endYear,endMonth,endDay,courseTitle};
String[] edes = {courseEntity.getEtitle()};
String certificateNo = userCertificate.getCertificateNo();//证书编号
String url = userCertificateService.generateCertificate(type,certificateNo,photoUrl,realName, description, edes, endYear,endMonth,endDay);
userCertificate.setCertificateUrl(url);
userCertificateService.updateById(userCertificate);
}else {
ClassEntity classEntity = classEntityService.getById(userCertificate.getClassId());
String startYear = DateUtil.year(classEntity.getStartTime())+"";
String startMonth = DateUtil.month(classEntity.getStartTime())+1+"";
String startDay = DateUtil.dayOfMonth(classEntity.getStartTime())+"";
String endYear = DateUtil.year(classEntity.getEndTime())+"";
String endMonth = DateUtil.month(classEntity.getEndTime())+1+"";
String endDay = DateUtil.dayOfMonth(classEntity.getEndTime())+"";
List<Map<String,Object>> list = classEntityService.classCourseInfoClassId(classEntity.getId(),userCertificate.getCourseId());
for (Map<String,Object> map:list){
double keshiTotal = (double)map.get("keshi");
String keshi = (keshiTotal+"").replace(".0","");
String courseTitle = map.get("courseTitle").toString();
if (courseTitle.contains("")){
courseTitle = courseTitle.substring(0,courseTitle.indexOf(""));
}
String[] des = {startYear,startMonth,startDay,endYear,endMonth,endDay,
classEntity.getTitle(),courseTitle,keshi};
String[] edes = {map.get("courseETitle").toString(),keshi};
String certificateNo = userCertificate.getCertificateNo();
String url = userCertificateService.generateCertificate(type,certificateNo,photoUrl,realName,des, edes, endYear,endMonth,endDay);
userCertificate.setCertificateUrl(url);
userCertificateService.updateById(userCertificate);
}
}
return R.ok();
}
//获取小班证书
@RequestMapping("/getUserCertificateByClassId")
public R getUserCertificateByClassId(@RequestBody Map<String,Object> params) {
LambdaQueryWrapper<UserCertificate> wrapper = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(params.get("classId").toString())){
wrapper.eq(UserCertificate::getClassId,params.get("classId"));
}
wrapper.eq(UserCertificate::getUserId,params.get("userId"));
List<UserCertificate> userCertificate = userCertificateService.list(wrapper);
return R.ok().put("userCertificate",userCertificate);
}
}