Browse Source

课表导出

dzx 1 year ago
parent
commit
d81109e98d

+ 3 - 0
src/main/java/com/xjrsoft/module/courseTable/service/ICourseTableService.java

@@ -52,4 +52,7 @@ public interface ICourseTableService extends IService<CourseTable> {
     void deleteBakData(Long wfCourseAdjustId);
 
 
+    ByteArrayOutputStream scheduleWeekExportQuery(CourseTableDto dto);
+
+
 }

+ 258 - 0
src/main/java/com/xjrsoft/module/courseTable/service/impl/CourseTableServiceImpl.java

@@ -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);
+    }
+
 }

+ 3 - 3
src/main/java/com/xjrsoft/module/schedule/controller/ScheduleController.java

@@ -326,12 +326,12 @@ public class ScheduleController {
 
     @PostMapping("/schedule-week-export-query")
     @ApiOperation(value = "按周导出课表")
-    public ResponseEntity<byte[]> scheduleWeekExportQuery(@Valid @RequestBody ScheduleWeekExportQueryDto dto) {
+    public ResponseEntity<byte[]> scheduleWeekExportQuery(@Valid @RequestBody CourseTableDto dto) {
 //    @GetMapping("/schedule-week-export-query")
 //    @ApiOperation(value = "按周导出课表")
-//    public ResponseEntity<byte[]> textbookClaimExportQuery(@Valid ScheduleWeekExportQueryDto dto) {
+//    public ResponseEntity<byte[]> textbookClaimExportQuery(ScheduleWeekExportQueryDto dto) {
 
-        ByteArrayOutputStream bot = courseTableService.listScheduleWeekExportQuery(dto);
+        ByteArrayOutputStream bot = courseTableService.scheduleWeekExportQuery(dto);
         return RT.fileStream(bot.toByteArray(), "scheduleWeek" + ExcelTypeEnum.XLSX.getValue());
     }
 

+ 13 - 0
src/main/java/com/xjrsoft/module/workflow/utils/DataHandleUtil.java

@@ -0,0 +1,13 @@
+package com.xjrsoft.module.workflow.utils;
+
+/**
+ * @author dzx
+ * @date 2024/11/13
+ * 流程撤回后处理相关数据
+ */
+public class DataHandleUtil {
+
+    public static void execute(){
+
+    }
+}