|
|
@@ -64,10 +64,19 @@ import com.xjrsoft.module.teacher.entity.BaseTeacher;
|
|
|
import com.xjrsoft.module.teacher.entity.XjrUser;
|
|
|
import com.xjrsoft.module.teacher.service.ITeacherbaseManagerService;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
+import me.zhyd.oauth.log.Log;
|
|
|
import org.apache.poi.ss.usermodel.BorderStyle;
|
|
|
+import org.apache.poi.ss.usermodel.Cell;
|
|
|
+import org.apache.poi.ss.usermodel.CellStyle;
|
|
|
+import org.apache.poi.ss.usermodel.Font;
|
|
|
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
|
|
import org.apache.poi.ss.usermodel.IndexedColors;
|
|
|
+import org.apache.poi.ss.usermodel.Row;
|
|
|
+import org.apache.poi.ss.usermodel.Sheet;
|
|
|
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
|
|
+import org.apache.poi.ss.usermodel.Workbook;
|
|
|
+import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
import org.apache.poi.xwpf.usermodel.XWPFDocument;
|
|
|
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
|
|
import org.apache.poi.xwpf.usermodel.XWPFTable;
|
|
|
@@ -87,10 +96,12 @@ import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Collections;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -982,4 +993,251 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
|
|
|
public void deleteBakData(Long wfCourseAdjustId) {
|
|
|
courseTableBakMapper.delete(new QueryWrapper<CourseTableBak>().lambda().eq(CourseTableBak::getWfCourseAdjustId, wfCourseAdjustId));
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ByteArrayOutputStream scheduleWeekExportQuery(CourseTableDto dto){
|
|
|
+ try {
|
|
|
+ CourseTableVo data = this.getList(dto);
|
|
|
+
|
|
|
+ Workbook workbook = new XSSFWorkbook();
|
|
|
+ // 创建一个工作表(sheet)
|
|
|
+ String sheetName = "课表";
|
|
|
+ Sheet sheet = workbook.createSheet(sheetName);
|
|
|
+
|
|
|
+ createFirstTitle(workbook, sheet, data, dto);
|
|
|
+
|
|
|
+ createSecondTitle(workbook, sheet);
|
|
|
+
|
|
|
+ Map<Integer, ClassTime> timeNumberMap = data.getClassTimeList().stream().collect(Collectors.toMap(ClassTime::getNumber, x -> x));
|
|
|
+ Map<String, List<CourseDetailVo>> timeNumberDataMap = data.getCourseList().stream().collect(Collectors.groupingBy(CourseDetailVo::getTimeNumber));
|
|
|
+
|
|
|
+ List<Integer> weekList = new ArrayList<>();
|
|
|
+ weekList.add(1);weekList.add(2);weekList.add(3);
|
|
|
+ weekList.add(4);weekList.add(5);weekList.add(6);
|
|
|
+ weekList.add(7);
|
|
|
+ Collections.sort(weekList);
|
|
|
+
|
|
|
+ List<Integer> timeNumberList = data.getClassTimeList().stream().map(ClassTime::getNumber).collect(Collectors.toList());
|
|
|
+ Collections.sort(timeNumberList);
|
|
|
+
|
|
|
+ Map<Integer, Integer> timePeriodMap = data.getClassTimeList().stream().collect(Collectors.toMap(ClassTime::getNumber, ClassTime::getTimePeriod));
|
|
|
+
|
|
|
+ ArrayList<ArrayList<String>> dataList = new ArrayList<>();
|
|
|
+
|
|
|
+ for (Integer timeNumber : timeNumberList) {
|
|
|
+ ArrayList<String> rowData = new ArrayList<>();
|
|
|
+ Integer timePeriod = timePeriodMap.get(timeNumber);
|
|
|
+ String timePeriodStr = "";
|
|
|
+ if(timePeriod == 1){
|
|
|
+ timePeriodStr = "上午";
|
|
|
+ }else if(timePeriod == 2){
|
|
|
+ timePeriodStr = "下午";
|
|
|
+ }else if(timePeriod == 3){
|
|
|
+ timePeriodStr = "晚上";
|
|
|
+ }
|
|
|
+ rowData.add(timePeriodStr);
|
|
|
+ ClassTime classTime = timeNumberMap.get(timeNumber);
|
|
|
+ String timeNumberStr = classTime.getShortName() + "\r\n" + classTime.getSummerStartTime() + "-" + classTime.getSummerEndTime();
|
|
|
+ rowData.add(timeNumberStr);
|
|
|
+ List<CourseDetailVo> list1 = timeNumberDataMap.get(timeNumber.toString());
|
|
|
+ if(list1 == null){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Map<Integer, List<CourseDetailVo>> weeksMap = list1.stream().collect(Collectors.groupingBy(CourseDetailVo::getWeeks));
|
|
|
+ for (Integer week : weekList) {
|
|
|
+ String content = "";
|
|
|
+ List<CourseDetailVo> list = weeksMap.get(week);
|
|
|
+ if(list != null && !list.isEmpty()){
|
|
|
+ if(list.size() == 1){
|
|
|
+ CourseDetailVo courseDetailVo = list.get(0);
|
|
|
+ content += courseDetailVo.getCourseName() + "\r\n";
|
|
|
+ content += courseDetailVo.getClassroomName() + "\r\n";
|
|
|
+ if("teacher".equals(dto.getCourseType())){
|
|
|
+ content += courseDetailVo.getTeacherName();
|
|
|
+ }else if("class".equals(dto.getCourseType())){
|
|
|
+ content += courseDetailVo.getClassName() ;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ CourseDetailVo courseDetailVo = list.get(0);
|
|
|
+ content += courseDetailVo.getCourseName() + "\r\n";
|
|
|
+ content += courseDetailVo.getClassroomName() + "\r\n";
|
|
|
+ if("teacher".equals(dto.getCourseType())){
|
|
|
+ content += courseDetailVo.getTeacherName();
|
|
|
+ }else if("class".equals(dto.getCourseType())){
|
|
|
+ Set<String> classNames = list.stream().map(CourseDetailVo::getClassName).collect(Collectors.toSet());
|
|
|
+ content += classNames.toString().replace("]", "").replace("[", "").replace(" ","") ;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ rowData.add(content);
|
|
|
+ }
|
|
|
+ dataList.add(rowData);
|
|
|
+ }
|
|
|
+
|
|
|
+ Font font = workbook.createFont();
|
|
|
+ font.setFontName("宋体");
|
|
|
+ font.setFontHeightInPoints((short)9);
|
|
|
+
|
|
|
+ // 创建一个单元格样式对象
|
|
|
+ CellStyle cellStyle = workbook.createCellStyle();
|
|
|
+ cellStyle.setFont(font); // 将字体应用到样式
|
|
|
+ cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
|
+ cellStyle.setAlignment(HorizontalAlignment.CENTER);
|
|
|
+ cellStyle.setWrapText(true);
|
|
|
+ cellStyle.setBorderTop(BorderStyle.THIN);
|
|
|
+ cellStyle.setBorderBottom(BorderStyle.THIN);
|
|
|
+ cellStyle.setBorderLeft(BorderStyle.THIN);
|
|
|
+ cellStyle.setBorderRight(BorderStyle.THIN);
|
|
|
+
|
|
|
+ int rowNumber = 2;
|
|
|
+ for (ArrayList<String> strings : dataList) {
|
|
|
+ Row row = sheet.createRow(rowNumber);
|
|
|
+ int cellNumber = 0;
|
|
|
+ for (String string : strings) {
|
|
|
+ Cell row1cell1 = row.createCell(cellNumber);
|
|
|
+ row1cell1.setCellValue(string);
|
|
|
+ row1cell1.setCellStyle(cellStyle);
|
|
|
+ cellNumber ++;
|
|
|
+ }
|
|
|
+ rowNumber ++;
|
|
|
+ row.setHeightInPoints(48);
|
|
|
+ }
|
|
|
+ //合并
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(2, 5, 0, 0));
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(6, 8, 0, 0));
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(9, 11, 0, 0));
|
|
|
+
|
|
|
+ ByteArrayOutputStream bot = new ByteArrayOutputStream();
|
|
|
+ workbook.write(bot);
|
|
|
+ return bot;
|
|
|
+ }catch (Exception e){
|
|
|
+ Log.error(e.getMessage(), e);
|
|
|
+ throw new MyException("导出报错,请联系管理员");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ void createSecondTitle(Workbook workbook, Sheet sheet) {
|
|
|
+ // 创建一个字体对象
|
|
|
+ Font font = workbook.createFont();
|
|
|
+ font.setBold(true);// 设置为粗体
|
|
|
+ font.setFontName("宋体");
|
|
|
+ //font.setColor(IndexedColors.RED.getIndex()); // 设置字体颜色为红色
|
|
|
+ font.setFontHeightInPoints((short)12);
|
|
|
+
|
|
|
+ // 创建一个单元格样式对象
|
|
|
+ CellStyle cellStyle = workbook.createCellStyle();
|
|
|
+ cellStyle.setFont(font); // 将字体应用到样式
|
|
|
+ cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
|
+ cellStyle.setAlignment(HorizontalAlignment.CENTER);
|
|
|
+ cellStyle.setBorderTop(BorderStyle.THIN);
|
|
|
+ cellStyle.setBorderBottom(BorderStyle.THIN);
|
|
|
+ cellStyle.setBorderLeft(BorderStyle.THIN);
|
|
|
+ cellStyle.setBorderRight(BorderStyle.THIN);
|
|
|
+
|
|
|
+ int rowNumber = 1;
|
|
|
+ Row row = sheet.createRow(rowNumber);
|
|
|
+
|
|
|
+ int cellNumber = 0;
|
|
|
+ Cell row1cell1 = row.createCell(cellNumber);
|
|
|
+ row1cell1.setCellValue("时间");
|
|
|
+ row1cell1.setCellStyle(cellStyle);
|
|
|
+ sheet.setColumnWidth(0, 4*256);
|
|
|
+ cellNumber ++;
|
|
|
+
|
|
|
+ row1cell1 = row.createCell(cellNumber);
|
|
|
+ row1cell1.setCellValue("");
|
|
|
+ row1cell1.setCellStyle(cellStyle);
|
|
|
+
|
|
|
+ //合并
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 0, 1));
|
|
|
+ cellNumber ++;
|
|
|
+ sheet.setColumnWidth(1, 12*256);
|
|
|
+
|
|
|
+ row1cell1 = row.createCell(cellNumber);
|
|
|
+ row1cell1.setCellValue("周一");
|
|
|
+ row1cell1.setCellStyle(cellStyle);
|
|
|
+ sheet.setColumnWidth(2, 16*256);
|
|
|
+ cellNumber ++;
|
|
|
+
|
|
|
+
|
|
|
+ row1cell1 = row.createCell(cellNumber);
|
|
|
+ row1cell1.setCellValue("周二");
|
|
|
+ row1cell1.setCellStyle(cellStyle);
|
|
|
+ sheet.setColumnWidth(cellNumber, 16*256);
|
|
|
+ cellNumber ++;
|
|
|
+
|
|
|
+ row1cell1 = row.createCell(cellNumber);
|
|
|
+ row1cell1.setCellValue("周三");
|
|
|
+ row1cell1.setCellStyle(cellStyle);
|
|
|
+ sheet.setColumnWidth(cellNumber, 16*256);
|
|
|
+ cellNumber ++;
|
|
|
+
|
|
|
+ row1cell1 = row.createCell(cellNumber);
|
|
|
+ row1cell1.setCellValue("周四");
|
|
|
+ row1cell1.setCellStyle(cellStyle);
|
|
|
+ sheet.setColumnWidth(cellNumber, 16*256);
|
|
|
+ cellNumber ++;
|
|
|
+
|
|
|
+ row1cell1 = row.createCell(cellNumber);
|
|
|
+ row1cell1.setCellValue("周五");
|
|
|
+ row1cell1.setCellStyle(cellStyle);
|
|
|
+ sheet.setColumnWidth(cellNumber, 16*256);
|
|
|
+ cellNumber ++;
|
|
|
+
|
|
|
+ row1cell1 = row.createCell(cellNumber);
|
|
|
+ row1cell1.setCellValue("周六");
|
|
|
+ row1cell1.setCellStyle(cellStyle);
|
|
|
+ sheet.setColumnWidth(cellNumber, 16*256);
|
|
|
+ cellNumber ++;
|
|
|
+
|
|
|
+ row1cell1 = row.createCell(cellNumber);
|
|
|
+ row1cell1.setCellValue("周日");
|
|
|
+ row1cell1.setCellStyle(cellStyle);
|
|
|
+ sheet.setColumnWidth(cellNumber, 16*256);
|
|
|
+ }
|
|
|
+
|
|
|
+ void createFirstTitle(Workbook workbook, Sheet sheet, CourseTableVo data, CourseTableDto dto) {
|
|
|
+ // 创建一个字体对象
|
|
|
+ Font font = workbook.createFont();
|
|
|
+ font.setBold(true);// 设置为粗体
|
|
|
+ font.setFontName("宋体");
|
|
|
+ //font.setColor(IndexedColors.RED.getIndex()); // 设置字体颜色为红色
|
|
|
+ font.setFontHeightInPoints((short)18);
|
|
|
+
|
|
|
+ // 创建一个单元格样式对象
|
|
|
+ CellStyle cellStyle = workbook.createCellStyle();
|
|
|
+ cellStyle.setFont(font); // 将字体应用到样式
|
|
|
+ cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
|
+ cellStyle.setAlignment(HorizontalAlignment.CENTER);
|
|
|
+ cellStyle.setBorderTop(BorderStyle.THIN);
|
|
|
+ cellStyle.setBorderBottom(BorderStyle.THIN);
|
|
|
+ cellStyle.setBorderLeft(BorderStyle.THIN);
|
|
|
+ cellStyle.setBorderRight(BorderStyle.THIN);
|
|
|
+
|
|
|
+ Row row = sheet.createRow(0);
|
|
|
+ String title = data.getSemesterName();
|
|
|
+ if("class".equals(dto.getCourseType())){
|
|
|
+ title += " " + data.getClassName() + " ";
|
|
|
+ }else if("teacher".equals(dto.getCourseType())){
|
|
|
+ title += " " + data.getTeacherName() + " ";
|
|
|
+ }
|
|
|
+ title += data.getWeek() + " 课程表";
|
|
|
+
|
|
|
+ int cellNumber = 0;
|
|
|
+ Cell row1cell1 = row.createCell(cellNumber);
|
|
|
+ row1cell1.setCellValue(title);
|
|
|
+ row1cell1.setCellStyle(cellStyle);
|
|
|
+
|
|
|
+ for (int i = 1; i < 9; i ++){
|
|
|
+ row1cell1 = row.createCell(i);
|
|
|
+ row1cell1.setCellValue("");
|
|
|
+ row1cell1.setCellStyle(cellStyle);
|
|
|
+ }
|
|
|
+
|
|
|
+ //合并
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 8));
|
|
|
+// sheet.setColumnWidth(0, 335 * 256);
|
|
|
+ }
|
|
|
+
|
|
|
}
|