فهرست منبع

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

大数据与最优化研究所 8 ماه پیش
والد
کامیت
cc5fbf378f

+ 136 - 22
src/main/java/com/xjrsoft/module/courseTable/service/impl/CourseTableServiceImpl.java

@@ -32,7 +32,11 @@ import com.xjrsoft.common.utils.excel.ExcelFillCellMergePrevColUtil;
 import com.xjrsoft.common.utils.excel.ExcelMergeUtil;
 import com.xjrsoft.config.TimetableConfig;
 import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.entity.BaseClassroom;
+import com.xjrsoft.module.base.entity.BaseOfficeBuild;
 import com.xjrsoft.module.base.entity.BaseSemester;
+import com.xjrsoft.module.base.mapper.BaseClassroomMapper;
+import com.xjrsoft.module.base.mapper.BaseOfficeBuildMapper;
 import com.xjrsoft.module.base.mapper.BaseSemesterMapper;
 import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.base.service.IBaseSemesterService;
@@ -109,6 +113,8 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
     private final IBaseStudentSchoolRollService baseStudentSchoolRollService;
     private final CourseTableBakMapper courseTableBakMapper;
     private final IUserService userService;
+    private final BaseClassroomMapper classroomMapper;
+    private final BaseOfficeBuildMapper officeBuildMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -1260,19 +1266,29 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
      */
     @Override
     public ByteArrayOutputStream exportQuery(CourseTableExportQueryDto dto) throws IOException {
-        BaseSemester semester = baseSemesterMapper.selectById(dto.getSemesterId());
-        //根据年级、专业部,查询需要导出的班级
-        List<BaseClass> classList = baseClassService.list(
-                new QueryWrapper<BaseClass>().lambda()
-                        .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
-                        .eq(BaseClass::getIsGraduate, 1)
-                        .in(BaseClass::getGradeId, dto.getGradeIds())
-                        .in(BaseClass::getOrgId, dto.getDeptIds())
-        );
+        BaseSemester baseSemester = baseSemesterMapper.selectById(dto.getSemesterId());
         CourseTableExportQueryUtil exportQueryUtil = new CourseTableExportQueryUtil();
         String schoolName = "重庆市铜梁职业教育中心";
         ByteArrayOutputStream bot = new ByteArrayOutputStream();
-        if("calss".equals(dto.getCourseType())){
+
+        //查询数据
+        CourseTableDto dataDto = new CourseTableDto();
+        dataDto.setSemesterId(dto.getSemesterId());
+        dataDto.setWeek(dto.getWeek());
+        CourseTableVo tableVo = this.getList(dataDto);
+
+        if("calss".equals(dto.getCourseType())){//班级课表
+            //根据年级、专业部,查询需要导出的班级
+            List<BaseClass> classList = baseClassService.list(
+                    new QueryWrapper<BaseClass>().lambda()
+                            .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
+                            .eq(BaseClass::getIsGraduate, 1)
+                            .in(BaseClass::getGradeId, dto.getGradeIds())
+                            .in(BaseClass::getOrgId, dto.getDeptIds())
+            );
+
+            Map<String, List<CourseDetailVo>> classDataMap = tableVo.getCourseList().stream().collect(Collectors.groupingBy(CourseDetailVo::getClassName));
+
             Workbook workbook = new XSSFWorkbook();
             String sheetName = "班级课表";
             Sheet sheet = workbook.createSheet(sheetName);
@@ -1281,27 +1297,125 @@ public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, Cours
             int classTableRowCount = 16;//每个班的课表占用的总行数
             for(int i = 0; i < classList.size(); i ++){
                 BaseClass baseClass = classList.get(i);
-                //查询数据
-                CourseTableDto dataDto = new CourseTableDto();
-                dataDto.setSemesterId(dto.getSemesterId());
-                dataDto.setClassId(baseClass.getId());
-                dataDto.setWeek(dto.getWeek());
-                CourseTableVo tableVo = this.getList(dataDto);
-                String rightName = "班主任:" + tableVo.getTeacherName() + " 行政班:" + tableVo.getClassName();
-
-                int bigHeadRow = (classTableRowCount + 2) * i;
+
+                CourseTableVo classData = new CourseTableVo();
+                classData.setClassTimeList(tableVo.getClassTimeList());
+                classData.setCourseList(classDataMap.get(baseClass.getName()));
+
+                String rightName = "班主任:" + tableVo.getTeacherName() + " 行政班:" + baseClass.getName();
+                int bigHeadRow = (classTableRowCount + 3) * i;
                 //生成第一行title
-                ImportExcelUtil.createBigHead(workbook, sheet, bigHead, bigHeadRow, 9);
+                ImportExcelUtil.createBigHead(workbook, sheet, bigHead, bigHeadRow, 8);
                 //生成副标题,展示所属学期
-                ImportExcelUtil.createSubtitle(workbook, sheet, semester.getName(), bigHeadRow + 1, 9);
+                ImportExcelUtil.createSubtitle(workbook, sheet, baseSemester.getName(), bigHeadRow + 1, 8);
                 //生成第三行,显示学校名字、班主任和班级名字
                 exportQueryUtil.createThirdTitle(workbook, sheet, bigHeadRow + 2, schoolName, rightName);
                 //生成表头
                 createSecondTitle(workbook, sheet, bigHeadRow + 3);
                 //生成内容
-                exportQueryUtil.createContent(workbook, sheet, bigHeadRow + 4, tableVo, dto.getCourseType());
+                exportQueryUtil.createContent(workbook, sheet, bigHeadRow + 4, classData, dto.getCourseType());
             }
             workbook.write(bot);
+        }else if("teacher".equals(dto.getCourseType())){//教师课表
+            //根据学期和周次,查询当前所有有课表的教师id
+            LocalDateTime startDateTime = LocalDateTime.ofInstant(baseSemester.getTeachingStart().toInstant(), ZoneId.systemDefault());
+
+            LocalDate startDate = startDateTime.plusDays((dto.getWeek() - 1) * 7L).toLocalDate();
+            LocalDate endDate = startDate.plusDays(6);
+
+            List<CourseTable> list = this.list(
+                    new QueryWrapper<CourseTable>().lambda()
+                            .eq(CourseTable::getBaseSemesterId, dto.getSemesterId())
+                            .ge(CourseTable::getScheduleDate, startDate)
+                            .le(CourseTable::getScheduleDate, endDate)
+            );
+            Set<String> teacherIds = list.stream().map(CourseTable::getTeacherId).collect(Collectors.toSet());
+            Set<Long> teacherIdList = new HashSet<>();
+            for (String teacherId : teacherIds) {
+                String[] split = teacherId.split(", ");
+                for (String s : split) {
+                    teacherIdList.add(Long.parseLong(s));
+                }
+            }
+            List<User> userList = userService.listByIds(teacherIdList);
+
+            Workbook workbook = new XSSFWorkbook();
+            String sheetName = "教师课表";
+            Sheet sheet = workbook.createSheet(sheetName);
+            String bigHead = "课程表";
+            int classTableRowCount = 16;//每个班的课表占用的总行数
+
+            for(int i = 0; i < userList.size(); i ++){
+                User user = userList.get(i);
+                List<CourseDetailVo> courseList = tableVo.getCourseList().stream().filter(x -> x.getTeacherName().contains(user.getName())).collect(Collectors.toList());
+
+                CourseTableVo classData = new CourseTableVo();
+                classData.setClassTimeList(tableVo.getClassTimeList());
+                classData.setCourseList(courseList);
+
+                String rightName = "教师:" + user.getName();
+                int bigHeadRow = (classTableRowCount + 3) * i;
+                //生成第一行title
+                ImportExcelUtil.createBigHead(workbook, sheet, bigHead, bigHeadRow, 8);
+                //生成副标题,展示所属学期
+                ImportExcelUtil.createSubtitle(workbook, sheet, baseSemester.getName(), bigHeadRow + 1, 8);
+                //生成第三行,显示学校名字、班主任和班级名字
+                exportQueryUtil.createThirdTitle(workbook, sheet, bigHeadRow + 2, schoolName, rightName);
+                //生成表头
+                createSecondTitle(workbook, sheet, bigHeadRow + 3);
+                //生成内容
+                exportQueryUtil.createContent(workbook, sheet, bigHeadRow + 4, classData, dto.getCourseType());
+            }
+            workbook.write(bot);
+        }else if("classroom".equals(dto.getCourseType())){//教室课表
+            Map<String, List<CourseDetailVo>> classroomDataMap = tableVo.getCourseList().stream().filter(x -> x.getClassroomName() != null).collect(Collectors.groupingBy(CourseDetailVo::getClassroomName));
+            List<BaseClassroom> classroomList = classroomMapper.selectList(
+                    new QueryWrapper<BaseClassroom>().lambda()
+                            .eq(BaseClassroom::getDeleteMark, DeleteMark.NODELETE.getCode())
+            );
+            List<BaseOfficeBuild> buildList = officeBuildMapper.selectList(
+                    new QueryWrapper<BaseOfficeBuild>().lambda()
+                            .eq(BaseOfficeBuild::getDeleteMark, DeleteMark.NODELETE.getCode())
+            );
+            Map<Long, String> buildMap = buildList.stream().collect(Collectors.toMap(BaseOfficeBuild::getId, BaseOfficeBuild::getName));
+
+            Workbook workbook = new XSSFWorkbook();
+            String sheetName = "教室课表";
+            Sheet sheet = workbook.createSheet(sheetName);
+            String bigHead = "课程表";
+            int classTableRowCount = 16;//每个班的课表占用的总行数
+
+            for (int i = 0; i < classroomList.size(); i ++){
+                BaseClassroom baseClassroom = classroomList.get(i);
+                String classroomName = buildMap.get(baseClassroom.getOfficeBuildId()) + baseClassroom.getName();
+                List<CourseDetailVo> courseList = classroomDataMap.get(classroomName);
+
+                CourseTableVo classData = new CourseTableVo();
+                classData.setClassTimeList(tableVo.getClassTimeList());
+                classData.setCourseList(courseList);
+
+                int bigHeadRow = (classTableRowCount + 3) * i;
+                //生成第一行title
+                ImportExcelUtil.createBigHead(workbook, sheet, bigHead, bigHeadRow, 8);
+                //生成副标题,展示所属学期
+                ImportExcelUtil.createSubtitle(workbook, sheet, baseSemester.getName(), bigHeadRow + 1, 8);
+                //生成第三行,显示学校名字、班主任和班级名字
+                exportQueryUtil.createThirdTitle(workbook, sheet, bigHeadRow + 2, schoolName, classroomName);
+                //生成表头
+                createSecondTitle(workbook, sheet, bigHeadRow + 3);
+                //生成内容
+                exportQueryUtil.createContent(workbook, sheet, bigHeadRow + 4, classData, dto.getCourseType());
+            }
+            workbook.write(bot);
+        }else if("all".equals(dto.getCourseType())){//总课表
+            //根据年级、专业部,查询需要导出的班级
+            List<BaseClass> classList = baseClassService.list(
+                    new QueryWrapper<BaseClass>().lambda()
+                            .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
+                            .eq(BaseClass::getIsGraduate, 1)
+                            .in(BaseClass::getGradeId, dto.getGradeIds())
+                            .in(BaseClass::getOrgId, dto.getDeptIds())
+            );
         }
 
         return bot;

+ 4 - 4
src/main/java/com/xjrsoft/module/generator/service/impl/ApiGeneratorServiceImpl.java

@@ -433,7 +433,7 @@ public class ApiGeneratorServiceImpl implements IApiGeneratorService {
                                 !StrUtil.equalsIgnoreCase(column.getName(), GlobalConstant.DELETE_MARK) &&
                                 !StrUtil.equalsIgnoreCase(column.getName(), GlobalConstant.DELETE_MARK)
                 ) {
-                    String fieldType = JdbcToJavaUtil.getClassName(column.getTypeEnum(), 1);
+                    String fieldType = JdbcToJavaUtil.getClassName(column.getTypeEnum(), 0);
                     fieldConfig.setFieldComment(column.getComment());
                     fieldConfig.setPk(false);
                     fieldConfig.setFieldType(fieldType);
@@ -529,7 +529,7 @@ public class ApiGeneratorServiceImpl implements IApiGeneratorService {
                                 !StrUtil.equalsIgnoreCase(column.getName(), GlobalConstant.DELETE_MARK) &&
                                 !StrUtil.equalsIgnoreCase(column.getName(), GlobalConstant.DELETE_MARK)
                 ) {
-                    String fieldType = JdbcToJavaUtil.getClassName(column.getTypeEnum(), 1);
+                    String fieldType = JdbcToJavaUtil.getClassName(column.getTypeEnum(), 0);
                     fieldConfig.setFieldComment(column.getComment());
                     fieldConfig.setPk(false);
                     fieldConfig.setFieldType(fieldType);
@@ -622,7 +622,7 @@ public class ApiGeneratorServiceImpl implements IApiGeneratorService {
 
                     fieldConfig.setFieldComment(column.getComment());
                     fieldConfig.setPk(false);
-                    fieldConfig.setFieldType(JdbcToJavaUtil.getClassName(column.getTypeEnum(), 1));
+                    fieldConfig.setFieldType(JdbcToJavaUtil.getClassName(column.getTypeEnum(), 0));
                     fieldConfig.setFieldName(StrUtil.toCamelCase(column.getName()));
 
                     fieldConfigList.add(fieldConfig);
@@ -751,7 +751,7 @@ public class ApiGeneratorServiceImpl implements IApiGeneratorService {
             fieldConfig.setLabel(column.getComment());
             fieldConfig.setPk(false);
             //如果是主键 就默认使用字符串类型 前端无法识别long类型的精度
-            fieldConfig.setFieldType(column.isPk() ? "String" : JdbcToJavaUtil.getClassName(column.getTypeEnum(), 1));
+            fieldConfig.setFieldType(column.isPk() ? "String" : JdbcToJavaUtil.getClassName(column.getTypeEnum(), 0));
             fieldConfig.setFieldName(StrUtil.toCamelCase(column.getName()));
             fieldConfigList.add(fieldConfig);
         }

+ 7 - 3
src/main/java/com/xjrsoft/module/organization/controller/DepartmentController.java

@@ -66,9 +66,13 @@ public class DepartmentController {
     @GetMapping(value = "/list")
     @ApiOperation(value = "机构列表(不分页)")
     @XjrLog(value = "获取不分页机构列表")
-    public R list() {
-        List<Department> list = departmentService.list(Wrappers.lambdaQuery(Department.class)
-                .select(Department.class, x -> VoToColumnUtil.fieldsToColumns(DepartmentListVo.class).contains(x.getProperty())));
+    public R list(DepartmentPageDto dto) {
+        List<Department> list = departmentService.list(
+                Wrappers.lambdaQuery(Department.class)
+                .select(Department.class, x -> VoToColumnUtil.fieldsToColumns(DepartmentListVo.class).contains(x.getProperty()))
+                        .eq(dto.getIsMajor() != null, Department::getIsMajor, dto.getIsMajor())
+                        .orderByAsc(Department::getId)
+        );
 
         List<DepartmentListVo> departmentListVos = BeanUtil.copyToList(list, DepartmentListVo.class);
         return R.ok(departmentListVos);

+ 48 - 3
src/main/java/com/xjrsoft/module/schedule/util/CourseTableExportQueryUtil.java

@@ -36,7 +36,7 @@ public class CourseTableExportQueryUtil {
         font.setBold(true);// 设置为粗体
         font.setFontName("宋体");
         //font.setColor(IndexedColors.RED.getIndex()); // 设置字体颜色为红色
-        font.setFontHeightInPoints((short) 18);
+        font.setFontHeightInPoints((short) 14);
 
         //设置样式
         CellStyle cellStyle = workbook.createCellStyle();
@@ -50,6 +50,15 @@ public class CourseTableExportQueryUtil {
 
         //创建一行
         Row row = sheet.createRow(rowNumber);
+        Cell cell = row.createCell(0);
+        cell.setCellValue(leftTitle);
+        cell.setCellStyle(cellStyle);
+        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 0, 3));
+
+        cell = row.createCell(1);
+        cell.setCellValue(rightTitle);
+        cell.setCellStyle(cellStyle);
+        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 4, 8));
     }
 
 
@@ -105,21 +114,27 @@ public class CourseTableExportQueryUtil {
                     if (list.size() == 1) {
                         CourseDetailVo courseDetailVo = list.get(0);
                         content += courseDetailVo.getCourseName() + "\r\n";
-                        content += courseDetailVo.getClassroomName() + "\r\n";
                         if ("teacher".equals(courseType)) {
+                            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)){
+
                         }
                     } else {
                         CourseDetailVo courseDetailVo = list.get(0);
                         content += courseDetailVo.getCourseName() + "\r\n";
-                        content += courseDetailVo.getClassroomName() + "\r\n";
                         if ("teacher".equals(courseType)) {
+                            content += courseDetailVo.getClassroomName() + "\r\n";
                             content += courseDetailVo.getClassName();
                         } else if ("class".equals(courseType)) {
+                            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)){
+
                         }
                     }
                 }
@@ -169,4 +184,34 @@ public class CourseTableExportQueryUtil {
             firstRow = firstRow + collect.get(i).size();
         }
     }
+
+    public void createAllCourseTableTitle(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);
+
+        //设置样式
+        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(rowNumber);
+        Cell cell = row.createCell(0);
+        cell.setCellValue(leftTitle);
+        cell.setCellStyle(cellStyle);
+        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 0, 3));
+
+        cell = row.createCell(1);
+        cell.setCellValue(rightTitle);
+        cell.setCellStyle(cellStyle);
+        sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 4, 8));
+    }
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/student/service/impl/PbCseFeeobjupdateServiceImpl.java

@@ -122,7 +122,7 @@ public class PbCseFeeobjupdateServiceImpl extends MPJBaseServiceImpl<PbCseFeeobj
                 setValue(entry.getValue());
                 if (pbCseSpecplanSumMap.get(entry.getKey()) != null) {
                     setPlannedNumber(pbCseSpecplanSumMap.get(entry.getKey()));
-                    setRemainder(pbCseSpecplanSumMap.get(entry.getKey()) - entry.getValue());
+                    setRemainder(pbCseSpecplanSumMap.get(entry.getKey()) - specnameCountMap.get(entry.getKey()));
                     setPaymentCount(specnameCountMap.get(entry.getKey()));
                 }
                 if (specnameCountMap.get(entry.getKey()) != null) {

+ 1 - 1
src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

@@ -15,7 +15,7 @@ import java.util.List;
 
 public class FreeMarkerGeneratorTest {
 
-    private static final DataSource ds = new SimpleDataSource("jdbc:mysql://10.150.10.136:3306/tl?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true",
+    private static final DataSource ds = new SimpleDataSource("jdbc:mysql://10.150.10.136:3308/tl?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&autoReconnect=true&failOverReadOnly=false&testWhileIdle=true",
             "data_tl" , "qwe123QWE" );
 
     @Test