Ver código fonte

Merge remote-tracking branch 'origin/dev' into dev

大数据与最优化研究所 7 meses atrás
pai
commit
3284022e88

+ 46 - 10
src/main/java/com/xjrsoft/module/courseTable/service/impl/CourseTableServiceImpl.java

@@ -1290,18 +1290,24 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
                             .in(BaseClass::getGradeId, dto.getGradeIds())
                             .in(BaseClass::getOrgId, dto.getDeptIds())
             );
+            if(classList.isEmpty()){
+                throw new MyException("未查询到班级,无法导出");
+            }
 
             Map<String, List<CourseDetailVo>> classDataMap = tableVo.getCourseList().stream().filter(x -> x.getClassName() != null).collect(Collectors.groupingBy(CourseDetailVo::getClassName));
 
+            List<Long> teacherIds = classList.stream().map(BaseClass::getTeacherId).collect(Collectors.toList());
+            List<User> userList = userService.listByIds(teacherIds);
+            Map<Long, String> teacherMap = userList.stream().collect(Collectors.toMap(User::getId, User::getName));
+
             Workbook workbook = new XSSFWorkbook();
             String sheetName = "班级课表";
             Sheet sheet = workbook.createSheet(sheetName);
             String bigHead = "课程表";
 
             int classTableRowCount = 16;//每个班的课表占用的总行数
-            for(int i = 0; i < classList.size(); i ++){
-                BaseClass baseClass = classList.get(i);
-
+            int i = 0;
+            for (BaseClass baseClass : classList) {
                 CourseTableVo classData = new CourseTableVo();
                 classData.setClassTimeList(tableVo.getClassTimeList());
                 if(!classDataMap.containsKey(baseClass.getName())){
@@ -1309,7 +1315,7 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
                 }
                 classData.setCourseList(classDataMap.get(baseClass.getName()));
 
-                String rightName = "班主任:" + tableVo.getTeacherName() + " 行政班:" + baseClass.getName();
+                String rightName = "班主任:" + teacherMap.get(baseClass.getTeacherId()) + " 行政班:" + baseClass.getName();
                 int bigHeadRow = (classTableRowCount + 3) * i;
                 //生成第一行title
                 ImportExcelUtil.createBigHead(workbook, sheet, bigHead, bigHeadRow, 8);
@@ -1321,6 +1327,7 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
                 createSecondTitle(workbook, sheet, bigHeadRow + 3);
                 //生成内容
                 exportQueryUtil.createContent(workbook, sheet, bigHeadRow + 4, classData, dto.getCourseType());
+                i ++;
             }
             workbook.write(bot);
         }else if("teacher".equals(dto.getCourseType())){//教师课表
@@ -1391,10 +1398,13 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
             Sheet sheet = workbook.createSheet(sheetName);
             String bigHead = "课程表";
             int classTableRowCount = 16;//每个班的课表占用的总行数
-
-            for (int i = 0; i < classroomList.size(); i ++){
-                BaseClassroom baseClassroom = classroomList.get(i);
+            int i = 0;
+            for (BaseClassroom baseClassroom : classroomList) {
                 String classroomName = buildMap.get(baseClassroom.getOfficeBuildId()) + baseClassroom.getName();
+                if(!classroomDataMap.containsKey(classroomName)){
+                    continue;
+                }
+
                 List<CourseDetailVo> courseList = classroomDataMap.get(classroomName);
 
                 CourseTableVo classData = new CourseTableVo();
@@ -1412,6 +1422,8 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
                 createSecondTitle(workbook, sheet, bigHeadRow + 3);
                 //生成内容
                 exportQueryUtil.createContent(workbook, sheet, bigHeadRow + 4, classData, dto.getCourseType());
+
+                i ++;
             }
             workbook.write(bot);
         }else if("all".equals(dto.getCourseType())){//总课表
@@ -1424,10 +1436,16 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
                             .in(BaseClass::getOrgId, dto.getDeptIds())
                             .orderByAsc(BaseClass::getName)
             );
-            Map<String, List<CourseDetailVo>> classDataMap = tableVo.getCourseList().stream().collect(Collectors.groupingBy(CourseDetailVo::getClassName));
+            if(classList.isEmpty()){
+                throw new MyException("未查询到班级,无法导出");
+            }
+            Map<String, List<CourseDetailVo>> classDataMap = tableVo.getCourseList().stream().filter(x -> x.getClassName() != null).collect(Collectors.groupingBy(CourseDetailVo::getClassName));
             ArrayList<ArrayList<String>> dataList = new ArrayList<>();
             for (BaseClass baseClass : classList) {
                 List<CourseDetailVo> detailVoList = classDataMap.get(baseClass.getName());
+                if(detailVoList == null){
+                    continue;
+                }
                 Map<Integer, List<CourseDetailVo>> weeksMap = detailVoList.stream().collect(Collectors.groupingBy(CourseDetailVo::getWeeks));
 
                 List<Integer> weekList = new ArrayList<>();
@@ -1442,14 +1460,24 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
                 ArrayList<String> classData = new ArrayList<>();
                 classData.add(baseClass.getName());
                 for (Integer weeks : weekList) {
-                    Map<String, CourseDetailVo> timeNumberMap = weeksMap.get(weeks).stream().collect(Collectors.toMap(CourseDetailVo::getTimeNumber, x -> x));
+                    if(!weeksMap.containsKey(weeks)){
+                        for (ClassTime classTime : tableVo.getClassTimeList()) {
+                            classData.add("");
+                        }
+                        continue;
+                    }
+                    Map<String, CourseDetailVo> timeNumberMap = weeksMap.get(weeks).stream().filter(x -> x.getTimeNumber() != null).collect(Collectors.toMap(CourseDetailVo::getTimeNumber, x -> x));
                     for (ClassTime classTime : tableVo.getClassTimeList()) {
                         CourseDetailVo courseDetailVo = timeNumberMap.get(classTime.getNumber().toString());
                         if(courseDetailVo == null){
                             classData.add("");
                             continue;
                         }
-                        classData.add(courseDetailVo.getCourseName() + "\r\n" + courseDetailVo.getTeacherName() + "\r\n" + courseDetailVo.getClassroomName());
+                        String content = courseDetailVo.getCourseName() + "\r\n" + courseDetailVo.getTeacherName();
+                        if(courseDetailVo.getClassroomName() != null){
+                            content += "\r\n" + courseDetailVo.getClassroomName();
+                        }
+                        classData.add(content);
                     }
                 }
                 dataList.add(classData);
@@ -1459,6 +1487,8 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
             String sheetName = "总课表";
             Sheet sheet = workbook.createSheet(sheetName);
 
+            exportQueryUtil.createAllCourseTableTitle(workbook, sheet, tableVo.getClassTimeList());
+
             Font font = workbook.createFont();
             font.setFontName("宋体");
             font.setFontHeightInPoints((short) 12);
@@ -1467,6 +1497,11 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
             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);
+            cellStyle.setWrapText(true);
             int rowNumber = 2;
             for (ArrayList<String> rowData : dataList) {
                 Row row = sheet.createRow(rowNumber);
@@ -1476,6 +1511,7 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
                     cell.setCellStyle(cellStyle);
                 }
                 rowNumber++;
+                row.setHeightInPoints(48);
             }
 
             workbook.write(bot);

+ 70 - 84
src/main/java/com/xjrsoft/module/schedule/util/CourseTableExportQueryUtil.java

@@ -33,7 +33,6 @@ public class CourseTableExportQueryUtil {
      */
     public void createThirdTitle(Workbook workbook, Sheet sheet, int rowNumber, String leftTitle, String rightTitle){
         Font font = workbook.createFont();
-        font.setBold(true);// 设置为粗体
         font.setFontName("宋体");
         //font.setColor(IndexedColors.RED.getIndex()); // 设置字体颜色为红色
         font.setFontHeightInPoints((short) 14);
@@ -42,7 +41,7 @@ public class CourseTableExportQueryUtil {
         CellStyle cellStyle = workbook.createCellStyle();
         cellStyle.setFont(font); // 将字体应用到样式
         cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
-        cellStyle.setAlignment(HorizontalAlignment.CENTER);
+        cellStyle.setAlignment(HorizontalAlignment.LEFT);
         cellStyle.setBorderTop(BorderStyle.THIN);
         cellStyle.setBorderBottom(BorderStyle.THIN);
         cellStyle.setBorderLeft(BorderStyle.THIN);
@@ -53,16 +52,34 @@ public class CourseTableExportQueryUtil {
         Cell cell = row.createCell(0);
         cell.setCellValue(leftTitle);
         cell.setCellStyle(cellStyle);
+        for (int i = 1; i < 4; i ++){
+            cell = row.createCell(i);
+            cell.setCellStyle(cellStyle);
+        }
         sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 0, 3));
 
-        cell = row.createCell(1);
+        cellStyle = workbook.createCellStyle();
+        cellStyle.setFont(font); // 将字体应用到样式
+        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        cellStyle.setAlignment(HorizontalAlignment.RIGHT);
+        cellStyle.setBorderTop(BorderStyle.THIN);
+        cellStyle.setBorderBottom(BorderStyle.THIN);
+        cellStyle.setBorderLeft(BorderStyle.THIN);
+        cellStyle.setBorderRight(BorderStyle.THIN);
+
+        cell = row.createCell(4);
         cell.setCellValue(rightTitle);
         cell.setCellStyle(cellStyle);
+        for (int i = 5; i < 9; i ++){
+            cell = row.createCell(i);
+            cell.setCellStyle(cellStyle);
+        }
         sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 4, 8));
     }
 
 
     public void createContent(Workbook workbook, Sheet sheet, int rowNumber, CourseTableVo data, String courseType){
+        int firstRow = rowNumber;
         Map<Integer, ClassTime> timeNumberMap = data.getClassTimeList().stream().collect(Collectors.toMap(ClassTime::getNumber, x -> x));
         Map<String, List<CourseDetailVo>> timeNumberDataMap = data.getCourseList().stream().filter(x -> x.getTimeNumber() != null).collect(Collectors.groupingBy(CourseDetailVo::getTimeNumber));
 
@@ -115,26 +132,37 @@ public class CourseTableExportQueryUtil {
                         CourseDetailVo courseDetailVo = list.get(0);
                         content += courseDetailVo.getCourseName() + "\r\n";
                         if ("teacher".equals(courseType)) {
-                            content += courseDetailVo.getClassroomName() + "\r\n";
+                            if(courseDetailVo.getClassroomName() != null){
+                                content += courseDetailVo.getClassroomName() + "\r\n";
+                            }
                             content += courseDetailVo.getClassName();
                         } else if ("class".equals(courseType)) {
-                            content += courseDetailVo.getClassroomName() + "\r\n";
-                            content += courseDetailVo.getTeacherName();
-                        } else if("classroom".equals(content)){
+                            if(courseDetailVo.getClassroomName() != null){
+                                content += courseDetailVo.getClassroomName() + "\r\n";
+                            }
 
+                            content += courseDetailVo.getTeacherName();
+                        } else if("classroom".equals(courseType)){
+                            content += courseDetailVo.getClassName() + "\r\n";
+                            content += courseDetailVo.getTeacherName();
                         }
                     } else {
                         CourseDetailVo courseDetailVo = list.get(0);
                         content += courseDetailVo.getCourseName() + "\r\n";
                         if ("teacher".equals(courseType)) {
-                            content += courseDetailVo.getClassroomName() + "\r\n";
+                            if(courseDetailVo.getClassroomName() != null){
+                                content += courseDetailVo.getClassroomName() + "\r\n";
+                            }
                             content += courseDetailVo.getClassName();
                         } else if ("class".equals(courseType)) {
-                            content += courseDetailVo.getClassroomName() + "\r\n";
+                            if(courseDetailVo.getClassroomName() != null){
+                                content += courseDetailVo.getClassroomName() + "\r\n";
+                            }
                             Set<String> classNames = list.stream().map(CourseDetailVo::getTeacherName).collect(Collectors.toSet());
                             content += classNames.toString().replace("]", "").replace("[", "").replace(" ", "");
-                        } else if("classroom".equals(content)){
-
+                        } else if("classroom".equals(courseType)){
+                            content += courseDetailVo.getClassName() + "\r\n";
+                            content += courseDetailVo.getTeacherName();
                         }
                     }
                 }
@@ -173,7 +201,6 @@ public class CourseTableExportQueryUtil {
         //合并
         Map<Integer, List<Integer>> collect = data.getClassTimeList().stream()
                 .collect(Collectors.groupingBy(ClassTime::getTimePeriod, Collectors.mapping(ClassTime::getNumber, Collectors.toList())));
-        int firstRow = rowNumber;
         for (Integer i : collect.keySet()) {
             int lastRow = firstRow + collect.get(i).size() - 1;
             if (lastRow == firstRow) {
@@ -202,91 +229,50 @@ public class CourseTableExportQueryUtil {
         cellStyle.setBorderBottom(BorderStyle.THIN);
         cellStyle.setBorderLeft(BorderStyle.THIN);
         cellStyle.setBorderRight(BorderStyle.THIN);
+        cellStyle.setWrapText(true);
 
         int rowNumber = 0;
         Row row = sheet.createRow(rowNumber);
+        row.setHeightInPoints(48);
+
+        List<String> weekList = new ArrayList<>();
+        weekList.add("周一");
+        weekList.add("周二");
+        weekList.add("周三");
+        weekList.add("周四");
+        weekList.add("周五");
+        weekList.add("周六");
+        weekList.add("周日");
 
         int cellNumber = 0;
         Cell row1cell1 = row.createCell(cellNumber);
-        row1cell1.setCellValue("节次");
+        row1cell1.setCellValue("班级");
         row1cell1.setCellStyle(cellStyle);
-        sheet.setColumnWidth(0, 4 * 256);
+        sheet.setColumnWidth(0, 24 * 256);
+        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber + 1, cellNumber, cellNumber));
         cellNumber ++;
 
-        row1cell1 = row.createCell(cellNumber);
-        row1cell1.setCellValue("");
-        row1cell1.setCellStyle(cellStyle);
-        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 0, 1));
-        sheet.setColumnWidth(1, 12 * 256);
-        cellNumber = cellNumber + 12;
+        int size = classTimeList.size();
 
-        row1cell1 = row.createCell(cellNumber);
-        row1cell1.setCellValue("周一");
-        row1cell1.setCellStyle(cellStyle);
-        sheet.setColumnWidth(2, 16 * 256);
-        cellNumber = cellNumber + 12;
+        Row row2 = sheet.createRow(rowNumber + 1);
+        int cellNumber2 = 1;
 
-
-        row1cell1 = row.createCell(cellNumber);
-        row1cell1.setCellValue("周二");
-        row1cell1.setCellStyle(cellStyle);
-        sheet.setColumnWidth(cellNumber, 16 * 256);
-        cellNumber = cellNumber + 12;
-
-        row1cell1 = row.createCell(cellNumber);
-        row1cell1.setCellValue("周三");
-        row1cell1.setCellStyle(cellStyle);
-        sheet.setColumnWidth(cellNumber, 16 * 256);
-        cellNumber = cellNumber + 12;
-
-        row1cell1 = row.createCell(cellNumber);
-        row1cell1.setCellValue("周四");
-        row1cell1.setCellStyle(cellStyle);
-        sheet.setColumnWidth(cellNumber, 16 * 256);
-        cellNumber = cellNumber + 12;
-
-        row1cell1 = row.createCell(cellNumber);
-        row1cell1.setCellValue("周五");
-        row1cell1.setCellStyle(cellStyle);
-        sheet.setColumnWidth(cellNumber, 16 * 256);
-        cellNumber = cellNumber + 12;
-
-        row1cell1 = row.createCell(cellNumber);
-        row1cell1.setCellValue("周六");
-        row1cell1.setCellStyle(cellStyle);
-        sheet.setColumnWidth(cellNumber, 16 * 256);
-        cellNumber = cellNumber + 12;
-
-        row1cell1 = row.createCell(cellNumber);
-        row1cell1.setCellValue("周日");
-        row1cell1.setCellStyle(cellStyle);
-        sheet.setColumnWidth(cellNumber, 16 * 256);
-
-        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 1, 12));
-        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 13, 24));
-        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 25, 36));
-        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 37, 48));
-        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 49, 60));
-        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 61, 72));
-        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 73, 84));
-
-        rowNumber ++;
-        row = sheet.createRow(rowNumber);
-
-        cellNumber = 0;
-        row1cell1 = row.createCell(cellNumber);
-        row1cell1.setCellValue("班级");
-        row1cell1.setCellStyle(cellStyle);
-        sheet.setColumnWidth(2, 16 * 256);
-        cellNumber ++;
-
-        for (ClassTime classTime : classTimeList) {
+        for (String week : weekList) {
             row1cell1 = row.createCell(cellNumber);
-            row1cell1.setCellValue(classTime.getShortName() + "\r\n" + classTime.getSummerStartTime() + "-" + classTime.getSummerEndTime());
+            row1cell1.setCellValue(week);
             row1cell1.setCellStyle(cellStyle);
-            sheet.setColumnWidth(2, 16 * 256);
-            cellNumber ++;
+            int firstCol = cellNumber;
+            int lastCol = firstCol + size - 1;
+            sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, firstCol, lastCol));
+            cellNumber = cellNumber + size;
+
+            for (ClassTime classTime : classTimeList) {
+                row1cell1 = row2.createCell(cellNumber2);
+                row1cell1.setCellValue(classTime.getShortName() + "\r\n" + classTime.getSummerStartTime() + "-" + classTime.getSummerEndTime());
+                row1cell1.setCellStyle(cellStyle);
+                sheet.setColumnWidth(cellNumber2, 24 * 256);
+                cellNumber2 ++;
+            }
         }
-
     }
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/schedule/util/DataUtil.java

@@ -350,7 +350,7 @@ public class DataUtil {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         String spring = "春";
         String autumn = "秋";
-
+        //  秋1春2
         for (Map<String, Object> semesterMap : list) {
             BaseSemester semester = SqlRunnerAdapterUtil.convertMapToEntity(semesterMap, BaseSemester.class);
             String url = ScheduleUtil.apiUrl + "semester/Create";

+ 12 - 0
src/main/java/com/xjrsoft/module/veb/util/ImportExcelUtil.java

@@ -147,6 +147,12 @@ public class ImportExcelUtil {
         Cell cell = row.createCell(0);
         cell.setCellValue(bigHead);
         cell.setCellStyle(normalCellStyle);
+
+        for (int i = 1; i < lastCol + 1; i ++){
+            cell = row.createCell(i);
+            cell.setCellStyle(normalCellStyle);
+        }
+
         sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 0, lastCol));
     }
 
@@ -261,6 +267,12 @@ public class ImportExcelUtil {
         Cell cell = row.createCell(0);
         cell.setCellValue(bigHead);
         cell.setCellStyle(normalCellStyle);
+
+        for (int i = 1; i < lastCol + 1; i ++){
+            cell = row.createCell(i);
+            cell.setCellStyle(normalCellStyle);
+        }
+
         sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 0, lastCol));
     }
 

+ 1 - 1
src/main/resources/mapper/courseTable/CourseTable.xml

@@ -4,7 +4,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.xjrsoft.module.courseTable.mapper.CourseTableMapper">
     <select id="getList" parameterType="com.xjrsoft.module.schedule.dto.CourseTableDto" resultType="com.xjrsoft.module.schedule.vo.CourseDetailVo">
-        SELECT t1.course_name, t1.teacher_name,CONCAT(t4.name,t3.name) AS classroom_name,t1.weeks,t1.time_period,t1.time_number,t5.name as class_name,t1.schedule_date,t1.adjust_type FROM course_table t1
+        SELECT distinct  t1.course_name, t1.teacher_name,CONCAT(t4.name,t3.name) AS classroom_name,t1.weeks,t1.time_period,t1.time_number,t5.name as class_name,t1.schedule_date,t1.adjust_type FROM course_table t1
         LEFT JOIN base_classroom t3 ON t1.site_id = t3.id
         LEFT JOIN base_office_build t4 ON t3.office_build_id = t4.id
         LEFT JOIN base_class t5 ON t1.class_id = t5.id