fanxp 1 year ago
parent
commit
968806d911
36 changed files with 1154 additions and 216 deletions
  1. 62 0
      src/main/java/com/xjrsoft/common/enums/TimeNumberEnum.java
  2. 45 0
      src/main/java/com/xjrsoft/common/enums/TimePeriodEnum.java
  3. 73 0
      src/main/java/com/xjrsoft/module/base/entity/BaseClass.java
  4. 55 0
      src/main/java/com/xjrsoft/module/base/entity/BaseCourseSubject.java
  5. 61 0
      src/main/java/com/xjrsoft/module/base/entity/BaseSemester.java
  6. 19 0
      src/main/java/com/xjrsoft/module/base/mapper/BaseClassMapper.java
  7. 18 0
      src/main/java/com/xjrsoft/module/base/mapper/BaseCourseSubjectMapper.java
  8. 18 0
      src/main/java/com/xjrsoft/module/base/mapper/BaseSemesterMapper.java
  9. 3 3
      src/main/java/com/xjrsoft/module/base/service/IBaseClassService.java
  10. 16 0
      src/main/java/com/xjrsoft/module/base/service/IBaseCourseSubjectService.java
  11. 16 0
      src/main/java/com/xjrsoft/module/base/service/IBaseSemesterService.java
  12. 5 6
      src/main/java/com/xjrsoft/module/base/service/impl/BaseClassServiceImpl.java
  13. 20 0
      src/main/java/com/xjrsoft/module/base/service/impl/BaseCourseSubjectServiceImpl.java
  14. 20 0
      src/main/java/com/xjrsoft/module/base/service/impl/BaseSemesterServiceImpl.java
  15. 18 0
      src/main/java/com/xjrsoft/module/courseTable/controller/ClassTimeController.java
  16. 67 0
      src/main/java/com/xjrsoft/module/courseTable/controller/CourseTableController.java
  17. 15 0
      src/main/java/com/xjrsoft/module/courseTable/dto/ClassListDto.java
  18. 31 0
      src/main/java/com/xjrsoft/module/courseTable/dto/CourseTableParse.java
  19. 65 0
      src/main/java/com/xjrsoft/module/courseTable/entity/ClassTime.java
  20. 85 0
      src/main/java/com/xjrsoft/module/courseTable/entity/CourseTable.java
  21. 18 0
      src/main/java/com/xjrsoft/module/courseTable/mapper/ClassTimeMapper.java
  22. 19 0
      src/main/java/com/xjrsoft/module/courseTable/mapper/CourseTableMapper.java
  23. 16 0
      src/main/java/com/xjrsoft/module/courseTable/service/IClassTimeService.java
  24. 20 0
      src/main/java/com/xjrsoft/module/courseTable/service/ICourseTableService.java
  25. 20 0
      src/main/java/com/xjrsoft/module/courseTable/service/impl/ClassTimeServiceImpl.java
  26. 195 0
      src/main/java/com/xjrsoft/module/courseTable/service/impl/CourseTableServiceImpl.java
  27. 6 0
      src/main/java/com/xjrsoft/module/courseTable/vo/ClassListVo.java
  28. 1 9
      src/main/java/com/xjrsoft/module/organization/controller/UserController.java
  29. 0 3
      src/main/java/com/xjrsoft/module/student/controller/StudentManagerController.java
  30. 0 35
      src/main/java/com/xjrsoft/module/student/entity/BaseClass.java
  31. 0 10
      src/main/java/com/xjrsoft/module/student/mapper/BaseClassMapper.java
  32. 0 1
      src/main/java/com/xjrsoft/module/student/service/IStudentManagerService.java
  33. 2 0
      src/main/java/com/xjrsoft/module/student/service/impl/StudentManagerServiceImpl.java
  34. 5 5
      src/main/resources/sqlScript/init_sql.sql
  35. 37 0
      src/test/java/com/xjrsoft/xjrsoftboot/MysqlGeneratorTest.java
  36. 103 144
      src/test/java/com/xjrsoft/xjrsoftboot/WordTest.java

+ 62 - 0
src/main/java/com/xjrsoft/common/enums/TimeNumberEnum.java

@@ -0,0 +1,62 @@
+package com.xjrsoft.common.enums;
+
+public enum TimeNumberEnum {
+    /**
+     * 第1节
+     */
+    Section1(1, "第1节"),
+
+    /**
+     * 第2节
+     */
+    Section2(2, "第2节"),
+    /**
+     * 第3节
+     */
+    Section3(3, "第3节"),
+    /**
+     * 第4节
+     */
+    Section4(4, "第4节"),
+    /**
+     * 第5节
+     */
+    Section5(5, "第5节"),
+    /**
+     * 第6节
+     */
+    Section6(6, "第6节"),
+    /**
+     * 第7节
+     */
+    Section7(7, "第7节"),
+    /**
+     * 第8节
+     */
+    Section8(8, "第8节");
+
+    final int code;
+    final String value;
+
+    public int getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    TimeNumberEnum(final int code, final String message) {
+        this.code = code;
+        this.value = message;
+    }
+
+    public static int getCode(String value) {
+        for (TimeNumberEnum c : TimeNumberEnum.values()) {
+            if (c.getValue().equals(value)) {
+                return c.getCode();
+            }
+        }
+        return 0;
+    }
+}

+ 45 - 0
src/main/java/com/xjrsoft/common/enums/TimePeriodEnum.java

@@ -0,0 +1,45 @@
+package com.xjrsoft.common.enums;
+
+/**
+ * 课表时段
+ */
+public enum TimePeriodEnum {
+    /**
+     * 上午
+     */
+    MORNING(1, "上午"),
+
+    /**
+     * 下午
+     */
+    AFTERNOON(2, "下午"),
+    /**
+     * 晚上
+     */
+    NIGHT(3, "晚上");
+
+    final int code;
+    final String value;
+
+    public int getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    TimePeriodEnum(final int code, final String message) {
+        this.code = code;
+        this.value = message;
+    }
+
+    public static int getCode(String value) {
+        for (TimePeriodEnum c : TimePeriodEnum.values()) {
+            if (c.getValue().equals(value)) {
+                return c.getCode();
+            }
+        }
+        return 0;
+    }
+}

+ 73 - 0
src/main/java/com/xjrsoft/module/base/entity/BaseClass.java

@@ -0,0 +1,73 @@
+package com.xjrsoft.module.base.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 班级表
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 04:52:58
+ */
+@Data
+@TableName("base_class")
+@ApiModel(value = "BaseClass对象", description = "班级表")
+public class BaseClass implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键")
+    private Long id;
+
+    @ApiModelProperty("创建人")
+    private Long createUserId;
+
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+
+    @ApiModelProperty("修改人")
+    private Long modifyUserId;
+
+    @ApiModelProperty("修改时间")
+    private Date modifyDate;
+
+    @ApiModelProperty("删除标记")
+    private Integer deleteMark;
+
+    @ApiModelProperty("有效标志")
+    private Integer enabledMark;
+
+    @ApiModelProperty("班级名称")
+    private String name;
+
+    @ApiModelProperty("班级代码")
+    private String code;
+
+    @ApiModelProperty("所属年级(base_grade)")
+    private Long gradeId;
+
+    @ApiModelProperty("招生类型(xjr_dictionary_item[enroll_type])")
+    private String enrollType;
+
+    @ApiModelProperty("组织机构(xjr_department)")
+    private Long orgId;
+
+    @ApiModelProperty("是否订单班")
+    private Integer isOrderClass;
+
+    @ApiModelProperty("固定教室(base_classroom)")
+    private Long classroomId;
+
+    @ApiModelProperty("班主任(xjr_user)")
+    private Long teacherId;
+
+    @ApiModelProperty("在读状态(1: 在读 2: 毕业)")
+    private Integer isGraduate;
+}

+ 55 - 0
src/main/java/com/xjrsoft/module/base/entity/BaseCourseSubject.java

@@ -0,0 +1,55 @@
+package com.xjrsoft.module.base.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 课程学科
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 04:52:58
+ */
+@Data
+@TableName("base_course_subject")
+@ApiModel(value = "BaseCourseSubject对象", description = "课程学科")
+public class BaseCourseSubject implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键")
+    private Long id;
+
+    @ApiModelProperty("创建人")
+    private Long createUserId;
+
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+
+    @ApiModelProperty("修改人")
+    private Long modifyUserId;
+
+    @ApiModelProperty("修改时间")
+    private Date modifyDate;
+
+    @ApiModelProperty("删除标记")
+    private Integer deleteMark;
+
+    @ApiModelProperty("有效标志")
+    private Integer enabledMark;
+
+    @ApiModelProperty("课程学科名称")
+    private String name;
+
+    @ApiModelProperty("课程学科代码")
+    private String code;
+
+    @ApiModelProperty("备注")
+    private String remark;
+}

+ 61 - 0
src/main/java/com/xjrsoft/module/base/entity/BaseSemester.java

@@ -0,0 +1,61 @@
+package com.xjrsoft.module.base.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 学期表
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 04:52:58
+ */
+@Data
+@TableName("base_semester")
+@ApiModel(value = "BaseSemester对象", description = "学期表")
+public class BaseSemester implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键")
+    private Long id;
+
+    @ApiModelProperty("创建人")
+    private Long createUserId;
+
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+
+    @ApiModelProperty("修改人")
+    private Long modifyUserId;
+
+    @ApiModelProperty("修改时间")
+    private Date modifyDate;
+
+    @ApiModelProperty("删除标记")
+    private Integer deleteMark;
+
+    @ApiModelProperty("有效标志")
+    private Integer enabledMark;
+
+    @ApiModelProperty("学期名称")
+    private String name;
+
+    @ApiModelProperty("学期开始日期")
+    private Date startDate;
+
+    @ApiModelProperty("学期结束日期")
+    private Date endDate;
+
+    @ApiModelProperty("教学开始日期")
+    private Date teachingStart;
+
+    @ApiModelProperty("教学结束日期")
+    private Date teachingEnd;
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/base/mapper/BaseClassMapper.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.base.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.base.entity.BaseClass;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 班级表 Mapper 接口
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 04:52:58
+ */
+@Mapper
+public interface BaseClassMapper extends MPJBaseMapper<BaseClass> {
+
+}

+ 18 - 0
src/main/java/com/xjrsoft/module/base/mapper/BaseCourseSubjectMapper.java

@@ -0,0 +1,18 @@
+package com.xjrsoft.module.base.mapper;
+
+import com.xjrsoft.module.base.entity.BaseCourseSubject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 课程学科 Mapper 接口
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 04:52:58
+ */
+@Mapper
+public interface BaseCourseSubjectMapper extends BaseMapper<BaseCourseSubject> {
+
+}

+ 18 - 0
src/main/java/com/xjrsoft/module/base/mapper/BaseSemesterMapper.java

@@ -0,0 +1,18 @@
+package com.xjrsoft.module.base.mapper;
+
+import com.xjrsoft.module.base.entity.BaseSemester;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 学期表 Mapper 接口
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 04:52:58
+ */
+@Mapper
+public interface BaseSemesterMapper extends BaseMapper<BaseSemester> {
+
+}

+ 3 - 3
src/main/java/com/xjrsoft/module/student/service/IBaseClassService.java → src/main/java/com/xjrsoft/module/base/service/IBaseClassService.java

@@ -1,11 +1,11 @@
-package com.xjrsoft.module.student.service;
+package com.xjrsoft.module.base.service;
 
 import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.organization.vo.UserStudentVo;
-import com.xjrsoft.module.student.entity.BaseClass;
 
 import java.util.List;
 
-public interface IBaseClassService  extends MPJBaseService<BaseClass> {
+public interface IBaseClassService extends MPJBaseService<BaseClass> {
     List<UserStudentVo> getStudents(long id);
 }

+ 16 - 0
src/main/java/com/xjrsoft/module/base/service/IBaseCourseSubjectService.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.base.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xjrsoft.module.base.entity.BaseCourseSubject;
+
+/**
+ * <p>
+ * 课程学科 服务类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 04:52:58
+ */
+public interface IBaseCourseSubjectService extends IService<BaseCourseSubject> {
+
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/base/service/IBaseSemesterService.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.base.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xjrsoft.module.base.entity.BaseSemester;
+
+/**
+ * <p>
+ * 学期表 服务类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 04:52:58
+ */
+public interface IBaseSemesterService extends IService<BaseSemester> {
+
+}

+ 5 - 6
src/main/java/com/xjrsoft/module/student/service/impl/BaseClassServiceImpl.java → src/main/java/com/xjrsoft/module/base/service/impl/BaseClassServiceImpl.java

@@ -1,27 +1,26 @@
-package com.xjrsoft.module.student.service.impl;
+package com.xjrsoft.module.base.service.impl;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.mapper.BaseClassMapper;
+import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.organization.entity.UserStudent;
 import com.xjrsoft.module.organization.service.IUserStudentService;
 import com.xjrsoft.module.organization.vo.UserStudentVo;
-import com.xjrsoft.module.student.entity.BaseClass;
 import com.xjrsoft.module.student.entity.BaseStudent;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
 import com.xjrsoft.module.student.entity.BaseStudentUser;
-import com.xjrsoft.module.student.mapper.BaseClassMapper;
-import com.xjrsoft.module.student.service.IBaseClassService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
-public class BaseClassServiceImpl  extends MPJBaseServiceImpl<BaseClassMapper, BaseClass> implements IBaseClassService {
+public class BaseClassServiceImpl extends MPJBaseServiceImpl<BaseClassMapper, BaseClass> implements IBaseClassService {
 
     private final IUserStudentService userStudentService;
 

+ 20 - 0
src/main/java/com/xjrsoft/module/base/service/impl/BaseCourseSubjectServiceImpl.java

@@ -0,0 +1,20 @@
+package com.xjrsoft.module.base.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xjrsoft.module.base.entity.BaseCourseSubject;
+import com.xjrsoft.module.base.mapper.BaseCourseSubjectMapper;
+import com.xjrsoft.module.base.service.IBaseCourseSubjectService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 课程学科 服务实现类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 04:52:58
+ */
+@Service
+public class BaseCourseSubjectServiceImpl extends ServiceImpl<BaseCourseSubjectMapper, BaseCourseSubject> implements IBaseCourseSubjectService {
+
+}

+ 20 - 0
src/main/java/com/xjrsoft/module/base/service/impl/BaseSemesterServiceImpl.java

@@ -0,0 +1,20 @@
+package com.xjrsoft.module.base.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xjrsoft.module.base.entity.BaseSemester;
+import com.xjrsoft.module.base.mapper.BaseSemesterMapper;
+import com.xjrsoft.module.base.service.IBaseSemesterService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 学期表 服务实现类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 04:52:58
+ */
+@Service
+public class BaseSemesterServiceImpl extends ServiceImpl<BaseSemesterMapper, BaseSemester> implements IBaseSemesterService {
+
+}

+ 18 - 0
src/main/java/com/xjrsoft/module/courseTable/controller/ClassTimeController.java

@@ -0,0 +1,18 @@
+package com.xjrsoft.module.courseTable.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * <p>
+ * 上课时间 前端控制器
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 02:19:56
+ */
+@Controller
+@RequestMapping("/courseTable/classTime")
+public class ClassTimeController {
+
+}

+ 67 - 0
src/main/java/com/xjrsoft/module/courseTable/controller/CourseTableController.java

@@ -0,0 +1,67 @@
+package com.xjrsoft.module.courseTable.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.xjrsoft.common.model.result.R;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageInput;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.courseTable.dto.ClassListDto;
+import com.xjrsoft.module.courseTable.entity.CourseTable;
+import com.xjrsoft.module.courseTable.service.ICourseTableService;
+import com.xjrsoft.module.oa.dto.MessageListDto;
+import com.xjrsoft.module.oa.entity.Message;
+import com.xjrsoft.module.oa.service.IMessageService;
+import com.xjrsoft.module.oa.vo.MessageListVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 课表 前端控制器
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 02:19:56
+ */
+@RequestMapping("/coursetable")
+@Api(value = "/coursetable",tags = "课表")
+@AllArgsConstructor
+@RestController
+public class CourseTableController {
+
+    private ICourseTableService courseTableService;
+
+    @GetMapping("/class")
+    @ApiOperation(value = "获取班级课表")
+    public R classList(ClassListDto dto) {
+        List<CourseTable> courseTables = courseTableService.list(Wrappers.<CourseTable>query().lambda().eq(CourseTable::getClassId,dto.getClassId()));
+        return R.ok(courseTables);
+    }
+
+    @PostMapping("/wordimport")
+    @ApiOperation(value = "word课表导入")
+    @SaCheckPermission("coursetable:wordimport")
+    public R wordImport(@RequestParam("file") MultipartFile file) throws IOException {
+       InputStream inputStream =  file.getInputStream();
+
+        return R.ok(courseTableService.wordImport(inputStream));
+    }
+}

+ 15 - 0
src/main/java/com/xjrsoft/module/courseTable/dto/ClassListDto.java

@@ -0,0 +1,15 @@
+package com.xjrsoft.module.courseTable.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+@Data
+public class ClassListDto {
+
+    @ApiModelProperty("班级编号")
+    @NotNull(message = "班级编号不能为空")
+    private Long ClassId;
+}

+ 31 - 0
src/main/java/com/xjrsoft/module/courseTable/dto/CourseTableParse.java

@@ -0,0 +1,31 @@
+package com.xjrsoft.module.courseTable.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class CourseTableParse {
+    @ApiModelProperty("学期")
+    private String semester;
+
+    @ApiModelProperty("星期")
+    private String weeksCn;
+
+    @ApiModelProperty("时段(1=上午 2=下午 3=晚上)")
+    private int timePeriod;
+
+    @ApiModelProperty("节次")
+    private int timeNumber;
+
+    @ApiModelProperty("场地名称")
+    private String siteName;
+
+    @ApiModelProperty("教师名称")
+    private String teacherName;
+
+    @ApiModelProperty("课程名称")
+    private String courseName;
+
+    @ApiModelProperty("班级名称")
+    private String className;
+}

+ 65 - 0
src/main/java/com/xjrsoft/module/courseTable/entity/ClassTime.java

@@ -0,0 +1,65 @@
+package com.xjrsoft.module.courseTable.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Time;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * <p>
+ * 上课时间
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 02:19:56
+ */
+@Data
+@TableName("class_time")
+@ApiModel(value = "ClassTime对象", description = "上课时间")
+public class ClassTime implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键编号")
+    private Long id;
+
+    @ApiModelProperty("时段(1=上午 2=下午 3=晚上)")
+    private Integer timePeriod;
+
+    @ApiModelProperty("节次")
+    private Integer number;
+
+    @ApiModelProperty("全称")
+    private String fullName;
+
+    @ApiModelProperty("简称")
+    private String shortName;
+
+    @ApiModelProperty("夏天开始时间")
+    private Time summerStartTime;
+
+    @ApiModelProperty("夏天结束时间")
+    private Time summerEndTime;
+
+    @ApiModelProperty("冬天开始时间")
+    private Time winterStartTime;
+
+    @ApiModelProperty("冬天结束时间")
+    private Time winterEndTime;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createDate;
+
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime modifyDate;
+}

+ 85 - 0
src/main/java/com/xjrsoft/module/courseTable/entity/CourseTable.java

@@ -0,0 +1,85 @@
+package com.xjrsoft.module.courseTable.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * <p>
+ * 课表
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 02:19:56
+ */
+@Data
+@TableName("course_table")
+@ApiModel(value = "CourseTable对象", description = "课表")
+public class CourseTable implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键编号")
+      private Long id;
+
+    @ApiModelProperty("学期ID(base_semester)")
+    private Long baseSemesterId;
+
+    @ApiModelProperty("教师编号(用户表)")
+    private Long teacherId;
+
+    @ApiModelProperty("教师名称")
+    private String teacherName;
+
+    @ApiModelProperty("课程编号(course)")
+    private Long courseId;
+
+    @ApiModelProperty("课程名称")
+    private String courseName;
+
+    @ApiModelProperty("班级编号(class)")
+    private Long classId;
+
+    @ApiModelProperty("班级名称")
+    private String className;
+
+    @ApiModelProperty("周")
+    private Integer week;
+
+    @ApiModelProperty("星期几(1-7)")
+    private Integer weeks;
+
+    @ApiModelProperty("星期中文")
+    private String weeksCn;
+
+    @ApiModelProperty("时段(1=上午 2=下午 3=晚上)")
+    private Integer timePeriod;
+
+    @ApiModelProperty("节次")
+    private Integer timeNumber;
+
+    @ApiModelProperty("场地编号(site)")
+    private Integer siteId;
+
+    @ApiModelProperty("场地名称")
+    private String siteName;
+
+    @ApiModelProperty("状态 1=正常 2=错误")
+    private Integer status;
+
+    @ApiModelProperty("错误信息描述")
+    private String errMsg;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createDate;
+
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime modifyDate;
+}

+ 18 - 0
src/main/java/com/xjrsoft/module/courseTable/mapper/ClassTimeMapper.java

@@ -0,0 +1,18 @@
+package com.xjrsoft.module.courseTable.mapper;
+
+import com.xjrsoft.module.courseTable.entity.ClassTime;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 上课时间 Mapper 接口
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 02:19:56
+ */
+@Mapper
+public interface ClassTimeMapper extends BaseMapper<ClassTime> {
+
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/courseTable/mapper/CourseTableMapper.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.courseTable.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.courseTable.entity.CourseTable;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 课表 Mapper 接口
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 02:19:56
+ */
+@Mapper
+public interface CourseTableMapper extends MPJBaseMapper<CourseTable> {
+
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/courseTable/service/IClassTimeService.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.courseTable.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xjrsoft.module.courseTable.entity.ClassTime;
+
+/**
+ * <p>
+ * 上课时间 服务类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 02:19:56
+ */
+public interface IClassTimeService extends IService<ClassTime> {
+
+}

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

@@ -0,0 +1,20 @@
+package com.xjrsoft.module.courseTable.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xjrsoft.module.courseTable.entity.CourseTable;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * <p>
+ * 课表 服务类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 02:19:56
+ */
+public interface ICourseTableService extends IService<CourseTable> {
+
+    Boolean wordImport(InputStream inputStream) throws IOException;
+}

+ 20 - 0
src/main/java/com/xjrsoft/module/courseTable/service/impl/ClassTimeServiceImpl.java

@@ -0,0 +1,20 @@
+package com.xjrsoft.module.courseTable.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xjrsoft.module.courseTable.entity.ClassTime;
+import com.xjrsoft.module.courseTable.mapper.ClassTimeMapper;
+import com.xjrsoft.module.courseTable.service.IClassTimeService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 上课时间 服务实现类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 02:19:56
+ */
+@Service
+public class ClassTimeServiceImpl extends ServiceImpl<ClassTimeMapper, ClassTime> implements IClassTimeService {
+
+}

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

@@ -0,0 +1,195 @@
+package com.xjrsoft.module.courseTable.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.enums.TimeNumberEnum;
+import com.xjrsoft.common.enums.TimePeriodEnum;
+import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.entity.BaseSemester;
+import com.xjrsoft.module.base.service.IBaseClassService;
+import com.xjrsoft.module.base.service.IBaseSemesterService;
+import com.xjrsoft.module.courseTable.dto.CourseTableParse;
+import com.xjrsoft.module.courseTable.entity.CourseTable;
+import com.xjrsoft.module.courseTable.mapper.CourseTableMapper;
+import com.xjrsoft.module.courseTable.service.ICourseTableService;
+import com.xjrsoft.module.personnel.entity.CarManagement;
+import com.xjrsoft.module.system.entity.DictionaryDetail;
+import com.xjrsoft.module.teacher.entity.BaseTeacher;
+import com.xjrsoft.module.teacher.entity.XjrUser;
+import com.xjrsoft.module.teacher.mapper.BaseTeacherMapper;
+import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
+import com.xjrsoft.module.teacher.service.ITeacherbaseManagerService;
+import com.xjrsoft.module.teacher.vo.XjrUserPageVo;
+import lombok.AllArgsConstructor;
+import org.apache.poi.xwpf.usermodel.*;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 课表 服务实现类
+ * </p>
+ *
+ * @author baomidou
+ * @since 2023-09-02 02:19:56
+ */
+@Service
+@AllArgsConstructor
+public class CourseTableServiceImpl extends ServiceImpl<CourseTableMapper, CourseTable> implements ICourseTableService {
+
+    private final CourseTableMapper courseTableMapper;
+
+    private final IBaseClassService baseClassService;
+
+    private final ITeacherbaseManagerService teacherbaseManagerService;
+
+    private final IBaseSemesterService baseSemesterService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean wordImport(InputStream inputStream) throws IOException {
+        List<CourseTableParse> parses = courseTableWordParses(inputStream);
+
+
+        String semester = null;
+        if (parses.size() > 0) {
+            semester = parses.get(0).getSemester();
+        }
+
+        BaseSemester baseSemester = baseSemesterService.getOne(Wrappers.<BaseSemester>query().lambda().eq(BaseSemester::getName, semester));
+        if (baseSemester == null) {
+            throw new MyException(String.format("学期【%s】不存在", semester));
+        }
+
+        // 获取班级信息
+        List<BaseClass> baseClassList = baseClassService.list();
+        Map<String, BaseClass> baseClassMap = baseClassList.stream().collect(Collectors.toMap(BaseClass::getName, a -> a, (k1, k2) -> k1));
+
+        // 获取教师信息
+        MPJLambdaWrapper<XjrUser> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper
+                .disableSubLogicDel()
+                .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, XjrUser::getId)
+                .selectAll(XjrUser.class);
+        List<XjrUser> xjrUserList = teacherbaseManagerService.list(queryWrapper);
+        Map<String, XjrUser> xjrUsersMap = xjrUserList.stream().collect(Collectors.toMap(XjrUser::getName, a -> a, (k1, k2) -> k1));
+
+        // 清空所有数据
+        courseTableMapper.delete(Wrappers.<CourseTable>query().lambda().eq(CourseTable::getBaseSemesterId,baseSemester.getId()));
+
+        List<CourseTable> params = new ArrayList<>();
+        for (CourseTableParse item : parses) {
+            CourseTable courseTable = BeanUtil.toBean(item, CourseTable.class);
+            courseTable.setBaseSemesterId(baseSemester.getId());
+            BaseClass baseClass = baseClassMap.get(item.getClassName());
+            if (baseClass != null) {
+                courseTable.setClassId(baseClass.getId());
+            }
+            XjrUser xjrUser = xjrUsersMap.get(item.getTeacherName());
+            if (xjrUser != null) {
+                courseTable.setTeacherId(xjrUser.getId());
+            }
+            params.add(courseTable);
+        }
+        return this.saveBatch(params);
+    }
+
+    /**
+     * 解析word课表
+     *
+     * @param inputStream
+     * @return
+     * @throws IOException
+     */
+    private List<CourseTableParse> courseTableWordParses(InputStream inputStream) throws IOException {
+        XWPFDocument doc = new XWPFDocument(inputStream);
+
+        List<XWPFParagraph> paras = doc.getParagraphs();
+        String semester = null;
+        List<String> cNames = new ArrayList<>();
+        //获取标题
+        for (int i = 0; i < paras.size(); i++) {
+            String txt = paras.get(i).getText();
+            if (i == 0) {
+                semester = txt;
+                continue;
+            }
+            txt = txt.replaceAll("总课程表", "").replace("\n", "").trim();
+            if (!txt.equals("") && !txt.equals(semester)) {
+                cNames.add(txt);
+            }
+        }
+        List<CourseTableParse> result = new ArrayList<>();
+        //获取文档中所有的表格
+        List<XWPFTable> tables = doc.getTables();
+        int tNum = 0;
+        for (XWPFTable table : tables) {
+            int rNum = 0;
+            String timePeriod = null;
+            List<String> weeks = new ArrayList<>();
+            List<XWPFTableRow> rows = table.getRows();
+            for (XWPFTableRow row : rows) {
+                //获取行对应的单元格
+                List<XWPFTableCell> cells = row.getTableCells();
+                String timeNumber = null;
+                for (int i = 0; i < cells.size(); i++) {
+                    String cellText = cells.get(i).getText();
+                    if (cellText.equals("") || rNum < 1) continue;
+
+                    if (rNum == 1) {
+                        weeks.add(cellText);
+                        continue;
+                    }
+                    if (i == 0) {
+                        timePeriod = cellText;
+                        continue;
+                    }
+                    if (i == 1) {
+                        timeNumber = cellText;
+                        continue;
+                    }
+                    List<XWPFParagraph> cParagraph = cells.get(i).getParagraphs();
+                    CourseTableParse item = new CourseTableParse();
+                    item.setSemester(semester);
+                    item.setTimePeriod(TimePeriodEnum.getCode(timePeriod));
+                    item.setTimeNumber(TimeNumberEnum.getCode(timeNumber));
+                    String week = weeks.get(Math.max(i - 2, 0));
+                    item.setWeeksCn(week);
+                    item.setClassName(cNames.get(tNum));
+                    for (int j = 0; j < cParagraph.size(); j++) {
+                        cellText = cParagraph.get(j).getText().trim();
+                        switch (j) {
+                            case 0:
+                                item.setCourseName(cellText);
+                                break;
+                            case 1:
+                                item.setTeacherName(cellText);
+                                break;
+                            case 2:
+                                item.setSiteName(cellText);
+                                break;
+                        }
+                    }
+                    result.add(item);
+                }
+                rNum++;
+            }
+            tNum++;
+        }
+        inputStream.close();
+        return result;
+    }
+}

+ 6 - 0
src/main/java/com/xjrsoft/module/courseTable/vo/ClassListVo.java

@@ -0,0 +1,6 @@
+package com.xjrsoft.module.courseTable.vo;
+
+import com.xjrsoft.module.courseTable.entity.CourseTable;
+
+public class ClassListVo extends CourseTable {
+}

+ 1 - 9
src/main/java/com/xjrsoft/module/organization/controller/UserController.java

@@ -1,8 +1,6 @@
 package com.xjrsoft.module.organization.controller;
 
-import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.secure.BCrypt;
-import cn.dev33.satoken.secure.SaSecureUtil;
 import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
@@ -14,7 +12,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.toolkit.MPJWrappers;
-import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.constant.GlobalConstant;
 import com.xjrsoft.common.enums.EnabledMark;
 import com.xjrsoft.common.enums.RoleEnum;
@@ -26,17 +23,12 @@ import com.xjrsoft.common.sms.SmsCtcc;
 import com.xjrsoft.common.utils.RedisUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.config.CommonPropertiesConfig;
+import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.organization.dto.*;
 import com.xjrsoft.module.organization.entity.*;
 import com.xjrsoft.module.organization.service.*;
 import com.xjrsoft.module.organization.vo.*;
 import com.xjrsoft.module.oss.factory.OssFactory;
-import com.xjrsoft.module.student.entity.BaseClass;
-import com.xjrsoft.module.student.entity.BaseStudent;
-import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
-import com.xjrsoft.module.student.entity.BaseStudentUser;
-import com.xjrsoft.module.student.service.IBaseClassService;
-import com.xjrsoft.module.student.vo.BaseStudentClassVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;

+ 0 - 3
src/main/java/com/xjrsoft/module/student/controller/StudentManagerController.java

@@ -5,17 +5,14 @@ import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.model.result.R;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
-import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.student.dto.AddBaseStudentUserDto;
 import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
 import com.xjrsoft.module.student.dto.UpdateBaseStudentUserDto;
-import com.xjrsoft.module.student.entity.BaseClass;
 import com.xjrsoft.module.student.entity.BaseStudent;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
 import com.xjrsoft.module.student.entity.BaseStudentUser;

+ 0 - 35
src/main/java/com/xjrsoft/module/student/entity/BaseClass.java

@@ -1,35 +0,0 @@
-package com.xjrsoft.module.student.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-import com.xjrsoft.common.model.base.AuditEntity;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-@Data
-@TableName("base_class")
-@ApiModel(value = "学生班级", description = "学生班级管理")
-public class BaseClass extends AuditEntity implements Serializable {
-    private static final long serialVersionUID = 1L;
-    /**
-     * 主键
-     */
-    @ApiModelProperty("主键")
-    @TableId
-    private Long id;
-
-    /**
-     * 用户ID(xjr_user)
-     */
-    @ApiModelProperty("用户ID(xjr_user)")
-    private Long teacherId;
-
-    /**
-     * 名称
-     */
-    @ApiModelProperty("名称")
-    private String name;
-}

+ 0 - 10
src/main/java/com/xjrsoft/module/student/mapper/BaseClassMapper.java

@@ -1,10 +0,0 @@
-package com.xjrsoft.module.student.mapper;
-
-import com.github.yulichang.base.MPJBaseMapper;
-import com.xjrsoft.module.student.entity.BaseClass;
-import com.xjrsoft.module.student.entity.BaseStudentContact;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface BaseClassMapper extends MPJBaseMapper<BaseClass> {
-}

+ 0 - 1
src/main/java/com/xjrsoft/module/student/service/IStudentManagerService.java

@@ -1,7 +1,6 @@
 package com.xjrsoft.module.student.service;
 
 import com.github.yulichang.base.MPJBaseService;
-import com.xjrsoft.module.student.entity.BaseClass;
 import com.xjrsoft.module.student.entity.BaseStudentUser;
 import com.xjrsoft.module.student.vo.BaseStudentClassVo;
 

+ 2 - 0
src/main/java/com/xjrsoft/module/student/service/impl/StudentManagerServiceImpl.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.RoleEnum;
+import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.mapper.BaseClassMapper;
 import com.xjrsoft.module.organization.entity.UserRoleRelation;
 import com.xjrsoft.module.organization.mapper.UserRoleRelationMapper;
 import com.xjrsoft.module.student.entity.*;

+ 5 - 5
src/main/resources/sqlScript/init_sql.sql

@@ -853,18 +853,18 @@ drop table if exists course_table;
 create table course_table
 (
     id bigint not null comment '主键编号' ,
-    `base_semester_id` bigint not null COMMENT '学期ID(base_semester)',
+    `base_semester_id` bigint COMMENT '学期ID(base_semester)',
     teacher_id bigint not null default 0 comment '教师编号(用户表)',
     teacher_name varchar(50) not null default '' comment '教师名称',
     course_id bigint not null default 0 comment '课程编号(course)',
     course_name varchar(200) not null default '' comment '课程名称',
     class_id bigint not null default 0 comment '班级编号(class)',
     class_name varchar(200) not null default '' comment '班级名称',
-    week int not null comment '周',
-    weeks int not null comment '星期几(1-7)',
-    weeks_cn varchar(200) not null comment '星期中文',
+    week int comment '周',
+    weeks int comment '星期几(1-7)',
+    weeks_cn varchar(200) comment '星期中文',
     time_period int default 0 not null  comment '时段(1=上午 2=下午 3=晚上)',
-    time_number  int not null comment '节次',
+    time_number  int comment '节次',
     site_id int not null default 0 comment '场地编号(site)',
     site_name varchar(200) not null default '' comment '场地名称',
     status int not null default 1 comment '状态 1=正常 2=错误',

+ 37 - 0
src/test/java/com/xjrsoft/xjrsoftboot/MysqlGeneratorTest.java

@@ -0,0 +1,37 @@
+package com.xjrsoft.xjrsoftboot;
+
+import com.baomidou.mybatisplus.generator.FastAutoGenerator;
+import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
+import com.baomidou.mybatisplus.generator.config.rules.DateType;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+public class MysqlGeneratorTest {
+
+    /**
+     * 数据源配置
+     */
+    private static final DataSourceConfig.Builder DATA_SOURCE_CONFIG = new DataSourceConfig.Builder(
+            "jdbc:mysql://8.142.26.206:3306/tl?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true", "root", "Zwr~-f6H,u6QE^]C-AD_");
+
+    @Test
+    public void MysqlGeneratorTest() {
+        FastAutoGenerator.create(DATA_SOURCE_CONFIG)
+                .globalConfig(builder -> {
+                    builder.outputDir("/Users/fanxp/Documents/code/java/demo1/demo1/mybatis02/src/main/java") //设置输出路径:项目的 java 目录下【System.getProperty("user.dir")意思是获取到项目所在的绝对路径】
+                            .commentDate("yyyy-MM-dd hh:mm:ss")   //注释日期
+                            .dateType(DateType.ONLY_DATE)   //定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime;ONLY_DATE=Date;
+                            .enableSwagger()   //开启 swagger 模式
+                            .disableOpenDir();
+                })
+                .packageConfig(builder -> {
+                    builder.moduleName("courseTable")   //设置模块包名
+                            .parent("com.xjrsoft.module"); //设置报名
+                })
+                .strategyConfig(builder -> {
+                    builder.addInclude(Arrays.asList("course_table", "class_time"));// 设置需要生成的数据表名
+                })
+                .execute();
+    }
+}

+ 103 - 144
src/test/java/com/xjrsoft/xjrsoftboot/WordTest.java

@@ -1,15 +1,16 @@
 package com.xjrsoft.xjrsoftboot;
 
 
+import com.xjrsoft.common.enums.TimeNumberEnum;
+import com.xjrsoft.common.enums.TimePeriodEnum;
+import com.xjrsoft.module.courseTable.dto.CourseTableParse;
 import org.apache.poi.hwpf.HWPFDocument;
 import org.apache.poi.hwpf.extractor.WordExtractor;
 import org.apache.poi.xwpf.usermodel.*;
 import org.junit.jupiter.api.Test;
 
 import java.io.*;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 public class WordTest {
     @Test
@@ -21,174 +22,132 @@ public class WordTest {
         //获取标题
         for (XWPFParagraph para : paras) {
             System.out.println(para.getText());
+            System.out.println("--------------------");
+        }
+        //获取文档中所有的表格
+        List<XWPFTable> tables = doc.getTables();
 
-            //获取文档中所有的表格
-            List<XWPFTable> tables = doc.getTables();
-
-            List<XWPFTableRow> rows;
+        List<XWPFTableRow> rows;
 
-            List<XWPFTableCell> cells;
+        List<XWPFTableCell> cells;
 
-            for (XWPFTable table : tables) {
-                rows = table.getRows();
-                for (XWPFTableRow row : rows) {
-                    //获取行对应的单元格
-                    cells = row.getTableCells();
-                    for (XWPFTableCell cell : cells) {
-                        System.out.println(cell.getText());
-                    }
+        for (XWPFTable table : tables) {
+            rows = table.getRows();
+            for (XWPFTableRow row : rows) {
+                //获取行对应的单元格
+                cells = row.getTableCells();
+                for (XWPFTableCell cell : cells) {
+                    System.out.println(cell.getText());
                 }
-                break;
+                System.out.println("--------------------");
             }
             break;
         }
         close(is);
     }
 
-    /**
+    @Test
+    public void WordTest1() throws IOException {
+        InputStream is = new FileInputStream("/Users/fanxp/Downloads/2023年春期 班级总课程表.docx");
+        List<CourseTableParse> result = courseTableParses(is);
 
-     * 关闭输入流
+        System.out.println(result);
+    }
 
-     * @param is
 
-     */
+    public List<CourseTableParse> courseTableParses(InputStream inputStream) throws IOException {
+        XWPFDocument doc = new XWPFDocument(inputStream);
 
-    private void close(InputStream is) {
-        if (is != null) {
-            try {
-                is.close();
-            } catch (IOException e) {
-                e.printStackTrace();
+        List<XWPFParagraph> paras = doc.getParagraphs();
+        String semester = null;
+        List<String> cNames = new ArrayList<>();
+        //获取标题
+        for (int i = 0; i < paras.size(); i++) {
+            String txt = paras.get(i).getText();
+            if (i == 0) {
+                semester = txt;
+                continue;
             }
-        }
-    }
-
-    /**
-     * 获取正文文件内容,docx方法
-     *
-     * @param path
-     * @return
-     */
-    public Map<String, String> getContentDocx(String path) {
-        Map<String, String> map = new HashMap();
-        StringBuffer content = new StringBuffer("");
-        String result = "0";  // 0表示获取正常,1表示获取异常
-        InputStream is = null;
-        try {
-            is = new FileInputStream(new File(path));
-            // 2007版本的word
-            XWPFDocument xwpf = new XWPFDocument(is);    // 2007版本,仅支持docx文件处理
-            List<XWPFParagraph> paragraphs = xwpf.getParagraphs();
-            if (paragraphs != null && paragraphs.size() > 0) {
-                for (XWPFParagraph paragraph : paragraphs) {
-                    if (!paragraph.getParagraphText().startsWith("    ")) {
-                        content.append("    ").append(paragraph.getParagraphText().trim()).append("\r\n");
-                    } else {
-                        content.append(paragraph.getParagraphText());
-                    }
-                }
+            txt = txt.replaceAll("总课程表", "").replace("\n", "").trim();
+            if (txt != null && !txt.equals("") && !txt.equals(semester)) {
+                cNames.add(txt);
             }
-        } catch (Exception e) {
-            System.out.println("docx解析正文异常:" + e);
-            result = "1"; // 出现异常
-        } finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (IOException e) {
-                    System.out.println("" + e);
-                }
-            }
-            map.put("result", result);
-            map.put("content", content.toString());
         }
-        return map;
-    }
-
-    /**
-     * 获取正文文件内容,doc方法
-     *
-     * @param path
-     * @return
-     */
-    public Map<String, String> getContentDoc(String path) {
-        Map<String, String> map = new HashMap();
-        StringBuffer content = new StringBuffer("");
-        String result = "0";  // 0表示获取正常,1表示获取异常
-        InputStream is = null;
-        try {
-            is = new FileInputStream(new File(path));
-            // 2003版本的word
-            WordExtractor extractor = new WordExtractor(is);  // 2003版本 仅doc格式文件可处理,docx文件不可处理
-            String[] paragraphText = extractor.getParagraphText();   // 获取段落,段落缩进无法获取,可以在前添加空格填充
-            if (paragraphText != null && paragraphText.length > 0) {
-                for (String paragraph : paragraphText) {
-                    if (!paragraph.startsWith("    ")) {
-                        content.append("    ").append(paragraph.trim()).append("\r\n");
-                    } else {
-                        content.append(paragraph);
+        List<CourseTableParse> result = new ArrayList<>();
+        //获取文档中所有的表格
+        List<XWPFTable> tables = doc.getTables();
+        int tNum = 0;
+        for (XWPFTable table : tables) {
+            int rNum = 0;
+            String timePeriod = null;
+            List<String> weeks = new ArrayList<>();
+            List<XWPFTableRow> rows = table.getRows();
+            for (XWPFTableRow row : rows) {
+                //获取行对应的单元格
+                List<XWPFTableCell> cells = row.getTableCells();
+                String timeNumber = null;
+                for (int i = 0; i < cells.size(); i++) {
+                    String cellText = cells.get(i).getText();
+                    if (cellText.equals("") || rNum < 1) continue;
+
+                    if (rNum == 1) {
+                        weeks.add(cellText);
+                        continue;
                     }
+                    if (i == 0) {
+                        timePeriod = cellText;
+                        continue;
+                    }
+                    if (i == 1) {
+                        timeNumber = cellText;
+                        continue;
+                    }
+                    List<XWPFParagraph> cParagraph = cells.get(i).getParagraphs();
+                    CourseTableParse item = new CourseTableParse();
+                    item.setSemester(semester);
+                    item.setTimePeriod(TimePeriodEnum.getCode(timePeriod));
+                    item.setTimeNumber(TimeNumberEnum.getCode(timeNumber));
+                    String week = weeks.get(Math.max(i - 2, 0));
+                    item.setWeeksCn(week);
+                    item.setClassName(cNames.get(tNum));
+                    for (int j = 0; j < cParagraph.size(); j++) {
+                        cellText = cParagraph.get(j).getText().trim();
+                        switch (j) {
+                            case 0:
+                                item.setCourseName(cellText);
+                                break;
+                            case 1:
+                                item.setTeacherName(cellText);
+                                break;
+                            case 2:
+                                item.setSiteName(cellText);
+                                break;
+                        }
+                    }
+                    result.add(item);
+                    System.out.println(item);
                 }
+                rNum++;
             }
-        } catch (Exception e) {
-            System.out.println("doc解析正文异常:" + e);
-            result = "1"; // 出现异常
-        } finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (IOException e) {
-                    System.out.println("" + e);
-                }
-            }
-            map.put("result", result);
-            map.put("content", content.toString());
+            tNum++;
         }
-        return map;
+        inputStream.close();
+        return result;
     }
 
     /**
-     * 获取正文文件内容,wps方法
+     * 关闭输入流
      *
-     * @param path
-     * @return
+     * @param is
      */
-    public Map<String, String> getContentWps(String path) {
-        Map<String, String> map = new HashMap();
-        StringBuffer content = new StringBuffer("");
-        String result = "0";  // 0表示获取正常,1表示获取异常
-        InputStream is = null;
-        try {
-            is = new FileInputStream(new File(path));
-            // wps版本word
-            HWPFDocument hwpf = new HWPFDocument(is);
-            WordExtractor wordExtractor = new WordExtractor(hwpf);
-            // 文档文本内容
-            String[] paragraphText1 = wordExtractor.getParagraphText();
-            if (paragraphText1 != null && paragraphText1.length > 0) {
-                for (String paragraph : paragraphText1) {
-                    if (!paragraph.startsWith("    ")) {
-                        content.append("     ").append(paragraph.trim()).append("\r\n");
-                    } else {
-                        content.append(paragraph);
-                    }
-                }
-            }
-        } catch (Exception e) {
-            System.out.println("wps解析正文异常:" + e);
-            result = "1"; // 出现异常
-        } finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (IOException e) {
-                    System.out.println("" + e);
-                }
+
+    private void close(InputStream is) {
+        if (is != null) {
+            try {
+                is.close();
+            } catch (IOException e) {
+                e.printStackTrace();
             }
-            map.put("result", result);
-            map.put("content", content.toString());
         }
-        return map;
     }
-
 }