master
wenyu441069198 5 months ago
parent d925ed37b5
commit c8df5be72e
  1. 202
      src/main/java/com/teaching/backend/service/impl/courses/CoursesServiceImpl.java
  2. 6
      src/main/java/com/teaching/backend/service/impl/records/LearningRecordsServiceImpl.java
  3. 36
      src/main/resources/application.yml
  4. BIN
      src/main/resources/templates/courses.docx

@ -25,9 +25,9 @@ import com.teaching.backend.model.vo.courses.CourseObjectivesTreeVO;
import com.teaching.backend.model.vo.courses.CoursesVO; import com.teaching.backend.model.vo.courses.CoursesVO;
import com.teaching.backend.service.courses.ICoursesService; import com.teaching.backend.service.courses.ICoursesService;
import com.teaching.backend.utils.CourseCode; import com.teaching.backend.utils.CourseCode;
import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.xwpf.usermodel.XWPFRun; import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -38,7 +38,9 @@ import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -323,8 +325,9 @@ public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses> impl
public void down(HttpServletResponse response, String id) throws Exception { public void down(HttpServletResponse response, String id) throws Exception {
File rootPath = new File(ResourceUtils.getURL("classpath:").getPath()); //SpringBoot项目获取根目录的方式 File rootPath = new File(ResourceUtils.getURL("classpath:").getPath()); //SpringBoot项目获取根目录的方式
File templatePath = new File(rootPath.getAbsolutePath(),"/templates/courses.docx");//------------------需要模板的地址 File templatePath = new File(rootPath.getAbsolutePath(),"/templates/courses.docx");//------------------需要模板的地址
// 加载Word模板
FileInputStream template = new FileInputStream("/templates/courses.docx"); // 加载Word模板------------------路径换成服务器里文件的绝对路径(要是相对路径也行也OK)
FileInputStream template = new FileInputStream("D:\\Users\\Desktop\\teaching-backend\\src\\main\\resources\\templates\\courses.docx");
XWPFDocument document = new XWPFDocument(template); XWPFDocument document = new XWPFDocument(template);
//准备导出数据 //准备导出数据
@ -339,50 +342,34 @@ public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses> impl
Integer course_classhour = courses.getClasshours(); Integer course_classhour = courses.getClasshours();
String course_description = courses.getDescription(); String course_description = courses.getDescription();
//查询课程目标 //查询课程目标
List<CourseObjectivesTreeVO> courseObjectivesTreeVO = objectivesService.queryCourseObjectivesTree(id); List<CourseObjectivesTreeVO> courseObjectivesTreeVO = objectivesService.queryCourseObjectivesTree(id);
// System.out.println("课程目标:"+courseObjectivesTreeVO);
//准备数据 //准备数据
//总目标 //总目标
StringBuilder overall_goal = new StringBuilder(); StringBuilder overall_goal = new StringBuilder();
for (ObjectiveContents content : courseObjectivesTreeVO.get(0).getContents()) { List<ObjectiveContents> contents = courseObjectivesTreeVO.get(0).getContents();
overall_goal.append("\r\n ").append(content.getContent()); for (int i = 0; i < contents.size(); i++) {
ObjectiveContents content = contents.get(i);
overall_goal.append(content.getContent());
} }
System.out.println(overall_goal);
//分项目标 //分项目标
//知识目标 StringBuilder sub_objectives = new StringBuilder();
StringBuilder knowledge_goals = new StringBuilder(); //课程目标数
StringBuilder political_goals = new StringBuilder(); int course_number = 0;
StringBuilder value_goals = new StringBuilder();
for (int i = 0; i < courseObjectivesTreeVO.get(0).getCourseObjectivesTrees().size(); i++){ for (int i = 0; i < courseObjectivesTreeVO.get(0).getCourseObjectivesTrees().size(); i++){
CourseObjectivesTreeVO content = courseObjectivesTreeVO.get(0).getCourseObjectivesTrees().get(i); CourseObjectivesTreeVO content = courseObjectivesTreeVO.get(0).getCourseObjectivesTrees().get(i);
//知识目标 String name = content.getName();
if (i == 0){ sub_objectives.append(name).append(":");
for (ObjectiveContents c : content.getContents()) { for (int j = 0; j < content.getContents().size(); j++) {
knowledge_goals.append("\r\n ").append(c.getContent()); course_number++;
} sub_objectives.append("\r\n ").append("课程目标").append(course_number).append(":").append(content.getContents().get(i).getContent());
}
//思政目标
if (i == 1){
for (ObjectiveContents c : content.getContents()) {
political_goals.append("\r\n ").append(c.getContent());
}
}
//价值目标
if (i == 2){
for (ObjectiveContents c : content.getContents()) {
value_goals.append("\r\n ").append(c.getContent());
} }
if (i != courseObjectivesTreeVO.get(0).getCourseObjectivesTrees().size() - 1){
sub_objectives.append("\r\n ");
} }
} }
System.out.println("知识目标:"+knowledge_goals); System.out.println("课程目标数:"+course_number);
System.out.println("思政目标:"+political_goals);
System.out.println("价值目标:"+value_goals);
Map<String,Object> params = new HashMap<String,Object>(); Map<String,Object> params = new HashMap<String,Object>();
params.put("course_name",course_name); params.put("course_name",course_name);
params.put("course_code",course_code); params.put("course_code",course_code);
@ -393,26 +380,145 @@ public class CoursesServiceImpl extends ServiceImpl<CoursesMapper, Courses> impl
//课程目标 //课程目标
params.put("overall_goal", overall_goal); params.put("overall_goal", overall_goal);
params.put("knowledge_goals", knowledge_goals); params.put("sub_objectives", sub_objectives);
params.put("political_goals", political_goals);
params.put("value_goals", value_goals);
//导出图片
params.put("img","wyii\t");
//根据模板+数据 导出文档
//根据模板+数据 导出文档
XWPFDocument xwpfDocument = WordExportUtil.exportWord07(templatePath.getPath(), params); document = WordExportUtil.exportWord07(templatePath.getPath(), params);
//----------------修改表格模版在导入参数之后
//获取第2个表格----------
XWPFTable table = document.getTables().get(1);
// // 获取表格行
// List<XWPFTableRow> rows = table.getRows();
// //获取第一行
// XWPFTableRow row = rows.get(0);
// //获取第一行第一列
// XWPFTableCell cell = row.getCell(0);
//获取此行的每列数据
// List<XWPFTableCell> cells = row.getTableCells();
// System.out.println(cells.size());// 打印单元格数量
for (int i = 0; i < course_number - 1; i++) {
//新增一行单元格
XWPFTableRow newRow = table.createRow();
newRow.getCell(0).setText("课程目标" + (i + 2));
// //垂直居中
// newRow.getCell(0).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
}
//获取第5个表格
XWPFTable table5 = document.getTables().get(4);
for (int i = 0; i < course_number - 1; i++) {
//新增一行单元格
XWPFTableRow newRow = table5.createRow();
//获取第一列里的段落
// XWPFParagraph newPara = newRow.getCell(0).getParagraphArray(0);
// XWPFRun newRun = newPara.createRun();
//序号
newRow.getCell(0).getParagraphArray(0).setIndentationLeft(0);
newRow.getCell(0).getParagraphArray(0).setIndentationHanging(0);
newRow.getCell(0).setText(Integer.valueOf(i+2).toString());
newRow.getCell(0).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.TOP);
// newRow.getCell(0).setText(Integer.valueOf(i+2).toString().replaceAll("[\\s\\u00A0]+","").trim());
// newRun.setText((i + 2) + "");
// newPara.setAlignment(ParagraphAlignment.CENTER);//水平居中
// newRow.getCell(0).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);//垂直居中
//课程目标
newRow.getCell(1).setText(" 课程目标" + (i + 2));
//扩四列
for (int j = 0; j < 4; j++) {
newRow.createCell();
}
}
table5.setTableAlignment(TableRowAlign.CENTER);
// //遍历单元格并打印内容
// for (XWPFTableCell cell : cells) {
// // 假设单元格只包含段落,遍历段落并打印文本
// for (XWPFParagraph paragraph : cell.getParagraphs()) {
// for (XWPFRun run : paragraph.getRuns()) {
// run.setText("xxx",0);
// System.out.print(run.getText(0)); // 打印文本内容,参数0表示不考虑样式分隔符
// }
// System.out.println(); // 在每个段落后打印换行符
// }
// }
// System.out.println("表格行数:"+rows.size());
//文件名=课程名+课程标准 //文件名=课程名+课程标准
String filename= courses.getName()+"课程标准.docx"; String filename= courses.getName()+"课程标准.docx";
//设置文件的打开方式和mime类型 //设置文件的打开方式和mime类型
ServletOutputStream outputStream = response.getOutputStream(); ServletOutputStream outputStream = response.getOutputStream();
response.setHeader( "Content-Disposition", "attachment;filename=" + new String(filename.getBytes(),"ISO8859-1")); response.setHeader( "Content-Disposition", "attachment;filename=" + new String(filename.getBytes(),"ISO8859-1"));
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
xwpfDocument.write(outputStream); document.write(outputStream);
} }
// public static void insertRow(XWPFTable table, int copyrowIndex, int newrowIndex) {
// // 在表格中指定的位置新增一行
// XWPFTableRow targetRow = table.insertNewTableRow(newrowIndex);
// // 获取需要复制行对象
// XWPFTableRow copyRow = table.getRow(copyrowIndex);
// //复制行对象给新增的行对象
// targetRow.getCtRow().setTrPr(copyRow.getCtRow().getTrPr());
// //获取需要复制行对象的列
// List<XWPFTableCell> copyCells = copyRow.getTableCells();
// //新增的对象的列
// XWPFTableCell targetCell = null;
// //遍历复制行对象的列
// for (int i = 0; i < copyCells.size(); i++) {
// //复制行对象的列
// XWPFTableCell copyCell = copyCells.get(i);
// //新增的行对象创建一列
// targetCell = targetRow.addNewTableCell();
// //格式复制
// targetCell.getCTTc().setTcPr(copyCell.getCTTc().getTcPr());
// if (copyCell.getParagraphs() != null && copyCell.getParagraphs().size() > 0) {
// targetCell.getParagraphs().get(0).getCTP().setPPr(copyCell.getParagraphs().get(0).getCTP().getPPr());
// if (copyCell.getParagraphs().get(0).getRuns() != null
// && copyCell.getParagraphs().get(0).getRuns().size() > 0) {
// XWPFRun cellR = targetCell.getParagraphs().get(0).createRun();
// cellR.setBold(copyCell.getParagraphs().get(0).getRuns().get(0).isBold());
// }
// }
// }
//
// }
//
// private static void replaceVariable(XWPFDocument document, String variable, String replacement) {
// for (XWPFParagraph paragraph : document.getParagraphs()) {
// for (XWPFRun run : paragraph.getRuns()) {
// String text = run.getText(0);
// if (text != null && text.contains(variable)) {
// text = text.replace(variable, replacement);
// run.setText(text, 0);
// // run.setFontFamily("Arial");
// // run.setFontSize(14);
// }
// }
// }
// }
// private static void replaceVariableInTable(XWPFTable table, String variable, String replacement) {
// for (XWPFTableRow row : table.getRows()) {
// for (XWPFTableCell cell : row.getTableCells()) {
// for (XWPFParagraph paragraph : cell.getParagraphs()) {
// for (XWPFRun run : paragraph.getRuns()) {
// String text = run.getText(0);
// if (text != null && text.contains(variable)) {
// text = text.replace(variable, replacement);
// run.setText(text, 0);
// }
// }
// }
// }
// }
// }
} }

@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.teaching.backend.common.ErrorCode;
import com.teaching.backend.exception.BusinessException;
import com.teaching.backend.mapper.records.LearningRecordsMapper; import com.teaching.backend.mapper.records.LearningRecordsMapper;
import com.teaching.backend.model.entity.records.LearningRecords; import com.teaching.backend.model.entity.records.LearningRecords;
@ -130,7 +132,9 @@ public class LearningRecordsServiceImpl extends ServiceImpl<LearningRecordsMappe
String userId = learningRecords.getUserId(); String userId = learningRecords.getUserId();
String coursesId = learningRecords.getCoursesId(); String coursesId = learningRecords.getCoursesId();
//如果userId或者coursesId为空就抛出异常事务回滚---------------------------- //如果userId或者coursesId为空就抛出异常事务回滚----------------------------
if (userId == null || userId.equals("") || coursesId == null || coursesId.equals("")){
throw new BusinessException(ErrorCode.PARAMS_ERROR);
}
System.out.println("学习记录:"+learningRecords); System.out.println("学习记录:"+learningRecords);
//查找该用户是否观看过该学习资源 //查找该用户是否观看过该学习资源

@ -44,24 +44,24 @@ knife4j:
secure: secure:
ignored: ignored:
urls: urls:
- /swagger-ui/ # - /swagger-ui/
# - /** - /**
- /swagger-resources/** # - /swagger-resources/**
- /**/v2/api-docs # - /**/v2/api-docs
- /**/*.html # - /**/*.html
- /**/*.js # - /**/*.js
- /**/*.css # - /**/*.css
- /**/*.png # - /**/*.png
- /**/*.map # - /**/*.map
- /favicon.ico # - /favicon.ico
- /actuator/** # - /actuator/**
- /druid/** # - /druid/**
- /user/** # - /user/**
- /user/login # - /user/login
- /user/register # - /user/register
- /user/info # - /user/info
- /user/logout # - /user/logout
- /minio/upload # - /minio/upload

Loading…
Cancel
Save