فهرست منبع

基础课程中授课班级改为非必须字段
基础课程批量禁用
查询多机构的下级机构
教学课程管理

caozixuan 3 سال پیش
والد
کامیت
68dd1517e5
28فایلهای تغییر یافته به همراه888 افزوده شده و 35 حذف شده
  1. 59 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TeachCourseResult.java
  2. 111 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TeachClazz.java
  3. 100 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TeachCourse.java
  4. 102 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TeachStudent.java
  5. 12 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachClazzMapper.java
  6. 33 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachCourseMapper.java
  7. 12 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachStudentMapper.java
  8. 9 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachClazzService.java
  9. 53 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachCourseService.java
  10. 9 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachStudentService.java
  11. 16 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachClazzServiceImpl.java
  12. 110 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachCourseServiceImpl.java
  13. 16 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachStudentServiceImpl.java
  14. 5 0
      distributed-print-business/src/main/resources/mapper/TeachClazzMapper.xml
  15. 28 0
      distributed-print-business/src/main/resources/mapper/TeachCourseMapper.xml
  16. 5 0
      distributed-print-business/src/main/resources/mapper/TeachStudentMapper.xml
  17. 18 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCourseController.java
  18. 40 0
      distributed-print/src/test/java/com/qmth/distributed/print/SysOrgServiceTest.java
  19. 0 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/excel/BasicCourseImportDto.java
  20. 0 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/BasicCourseParams.java
  21. 14 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicCourseService.java
  22. 15 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java
  23. 8 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java
  24. 43 13
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java
  25. 14 15
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicUserCourseServiceImpl.java
  26. 44 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java
  27. 10 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java
  28. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

+ 59 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TeachCourseResult.java

@@ -0,0 +1,59 @@
+package com.qmth.distributed.print.business.bean.result;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 教学班分页查询结果
+ * @Author: CaoZixuan
+ * @Date: 2022-02-09
+ */
+public class TeachCourseResult {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "教学课程id")
+    private Long id;
+
+    @ApiModelProperty(value = "教学课程名称")
+    private String courseName;
+
+    @ApiModelProperty(value = "教学课程编号")
+    private String courseCode;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "创建时间")
+    private Long createTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+}

+ 111 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TeachClazz.java

@@ -0,0 +1,111 @@
+package com.qmth.distributed.print.business.entity;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.base.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 教学班级表
+ * @Author: CaoZixuan
+ * @Date: 2022-02-09
+ */
+@ApiModel(value = "TeachClazz对象", description = "教学班级表")
+public class TeachClazz extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "学校id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long schoolId;
+
+    @ApiModelProperty(value = "教学班编号")
+    private String teachClazzCode;
+
+    @ApiModelProperty(value = "教学班名称")
+    private String teachClazzName;
+
+    @ApiModelProperty(value = "用户id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long userId;
+
+    @ApiModelProperty(value = "用户姓名(冗余)")
+    private String userName;
+
+    @ApiModelProperty(value = "教学课程主键")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long teachCourseId;
+
+    @ApiModelProperty(value = "教学课程编号(冗余)")
+    private String teachCourseCode;
+
+    @ApiModelProperty(value = "教学课程名称(冗余)")
+    private String teachCourseName;
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public String getTeachClazzCode() {
+        return teachClazzCode;
+    }
+
+    public void setTeachClazzCode(String teachClazzCode) {
+        this.teachClazzCode = teachClazzCode;
+    }
+
+    public String getTeachClazzName() {
+        return teachClazzName;
+    }
+
+    public void setTeachClazzName(String teachClazzName) {
+        this.teachClazzName = teachClazzName;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public Long getTeachCourseId() {
+        return teachCourseId;
+    }
+
+    public void setTeachCourseId(Long teachCourseId) {
+        this.teachCourseId = teachCourseId;
+    }
+
+    public String getTeachCourseCode() {
+        return teachCourseCode;
+    }
+
+    public void setTeachCourseCode(String teachCourseCode) {
+        this.teachCourseCode = teachCourseCode;
+    }
+
+    public String getTeachCourseName() {
+        return teachCourseName;
+    }
+
+    public void setTeachCourseName(String teachCourseName) {
+        this.teachCourseName = teachCourseName;
+    }
+}

+ 100 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TeachCourse.java

@@ -0,0 +1,100 @@
+package com.qmth.distributed.print.business.entity;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.base.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 教学课程表
+ * @Author: CaoZixuan
+ * @Date: 2022-02-07
+ */
+@ApiModel(value = "TeachCourse对象", description = "教学课程表")
+public class TeachCourse extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "学校id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long schoolId;
+
+    @ApiModelProperty(value = "基础课程id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long basicCourseId;
+
+    @ApiModelProperty(value = "基础课程编号")
+    private String basicCourseCode;
+
+    @ApiModelProperty(value = "基础课程名称")
+    private String basicCourseName;
+
+    @ApiModelProperty(value = "创建此教学课程的用户id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long userId;
+
+    @ApiModelProperty(value = "创建此教学课程的用户姓名")
+    private String userName;
+
+    @ApiModelProperty(value = "是否删除")
+    private Boolean enable;
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public Long getBasicCourseId() {
+        return basicCourseId;
+    }
+
+    public void setBasicCourseId(Long basicCourseId) {
+        this.basicCourseId = basicCourseId;
+    }
+
+    public String getBasicCourseCode() {
+        return basicCourseCode;
+    }
+
+    public void setBasicCourseCode(String basicCourseCode) {
+        this.basicCourseCode = basicCourseCode;
+    }
+
+    public String getBasicCourseName() {
+        return basicCourseName;
+    }
+
+    public void setBasicCourseName(String basicCourseName) {
+        this.basicCourseName = basicCourseName;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+}

+ 102 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TeachStudent.java

@@ -0,0 +1,102 @@
+package com.qmth.distributed.print.business.entity;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.base.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 教学学生关系表
+ * @Author: CaoZixuan
+ * @Date: 2022-02-09
+ */
+@ApiModel(value = "TeachStudent对象", description = "教学学生关系表")
+public class TeachStudent extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "学校id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long schoolId;
+
+    @ApiModelProperty(value = "学生id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long studentId;
+
+    @ApiModelProperty(value = "学号(冗余)")
+    private String studentCode;
+
+    @ApiModelProperty(value = "学生姓名(冗余)")
+    private String studentName;
+
+    @ApiModelProperty(value = "教学班级id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long teachClazzId;
+
+    @ApiModelProperty(value = "教学课程id(冗余)")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long teachCourseId;
+
+    @ApiModelProperty(value = "用户id(冗余)")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long userId;
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public Long getTeachClazzId() {
+        return teachClazzId;
+    }
+
+    public void setTeachClazzId(Long teachClazzId) {
+        this.teachClazzId = teachClazzId;
+    }
+
+    public Long getTeachCourseId() {
+        return teachCourseId;
+    }
+
+    public void setTeachCourseId(Long teachCourseId) {
+        this.teachCourseId = teachCourseId;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+}

+ 12 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachClazzMapper.java

@@ -0,0 +1,12 @@
+package com.qmth.distributed.print.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.distributed.print.business.entity.TeachClazz;
+
+/**
+ * @Description: 教学班mapper
+ * @Author: CaoZixuan
+ * @Date: 2022-02-09
+ */
+public interface TeachClazzMapper extends BaseMapper<TeachClazz> {
+}

+ 33 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachCourseMapper.java

@@ -0,0 +1,33 @@
+package com.qmth.distributed.print.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.distributed.print.business.bean.result.TeachCourseResult;
+import com.qmth.distributed.print.business.entity.TeachCourse;
+import com.qmth.teachcloud.common.bean.result.BasicCourseResult;
+import com.qmth.teachcloud.common.entity.BasicCourse;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Set;
+
+/**
+ * @Description: 教学课程mapper
+ * @Author: CaoZixuan
+ * @Date: 2022-02-07
+ */
+public interface TeachCourseMapper extends BaseMapper<TeachCourse> {
+
+    /**
+     * 分页查询教学课程
+     * @param iPage 分页参数
+     * @param courseName 课程名称
+     * @param userId 用户id
+     * @param schoolId 学校id
+     * @return 结果
+     */
+    IPage<TeachCourseResult> findTeachCoursePage(@Param("iPage") Page<TeachCourseResult> iPage,
+                                                 @Param("courseName") String courseName,
+                                                 @Param("userId") Long userId,
+                                                 @Param("schoolId") Long schoolId);
+}

+ 12 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachStudentMapper.java

@@ -0,0 +1,12 @@
+package com.qmth.distributed.print.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.distributed.print.business.entity.TeachStudent;
+
+/**
+ * @Description: 教学学生mapper
+ * @Author: CaoZixuan
+ * @Date: 2022-02-09
+ */
+public interface TeachStudentMapper extends BaseMapper<TeachStudent> {
+}

+ 9 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachClazzService.java

@@ -0,0 +1,9 @@
+package com.qmth.distributed.print.business.service;
+
+/**
+ * @Description: 教学班服务类
+ * @Author: CaoZixuan
+ * @Date: 2022-02-09
+ */
+public interface TeachClazzService {
+}

+ 53 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachCourseService.java

@@ -0,0 +1,53 @@
+package com.qmth.distributed.print.business.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.distributed.print.business.bean.result.DictionaryResult;
+import com.qmth.distributed.print.business.bean.result.TeachCourseResult;
+import com.qmth.teachcloud.common.entity.SysUser;
+
+import java.util.List;
+
+/**
+ * @Description: 教学课程服务类
+ * @Author: CaoZixuan
+ * @Date: 2022-02-07
+ */
+public interface TeachCourseService {
+
+
+    /**
+     * 分页查询教学课程列表
+     *
+     * @param courseName 课程名称
+     * @param pageNumber 分页参数
+     * @param pageSize   分页容量
+     * @param userId     用户id
+     * @return 教学课程分页结果
+     */
+    IPage<TeachCourseResult> teachCoursePage(String courseName, int pageNumber, int pageSize, Long userId);
+
+    /**
+     * 创建教学课程
+     *
+     * @param basicCourseId 基础课程id
+     * @param requestUser        请求的用户
+     * @return 创建结果
+     */
+    Boolean createTeachCourse(Long basicCourseId, SysUser requestUser);
+
+    /**
+     * 根据用户id查询该用户所属机构下可以创建为教学课程的基础课程列表
+     *
+     * @param requestUser 请求的用户
+     * @return 课程列表
+     */
+    List<DictionaryResult> findBasicCourseByUserId(SysUser requestUser);
+
+    /**
+     * 根据教学课程id集合批量删除教学课程
+     *
+     * @param idList 教学课程idList
+     * @return 删除结果
+     */
+    Boolean deleteTeachCourseBatch(List<Long> idList);
+}

+ 9 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachStudentService.java

@@ -0,0 +1,9 @@
+package com.qmth.distributed.print.business.service;
+
+/**
+ * @Description: 教学学生服务类
+ * @Author: CaoZixuan
+ * @Date: 2022-02-09
+ */
+public interface TeachStudentService {
+}

+ 16 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachClazzServiceImpl.java

@@ -0,0 +1,16 @@
+package com.qmth.distributed.print.business.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.entity.TeachClazz;
+import com.qmth.distributed.print.business.mapper.TeachClazzMapper;
+import com.qmth.distributed.print.business.service.TeachClazzService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 教学班服务实现类
+ * @Author: CaoZixuan
+ * @Date: 2022-02-09
+ */
+@Service
+public class TeachClazzServiceImpl extends ServiceImpl<TeachClazzMapper,TeachClazz> implements TeachClazzService {
+}

+ 110 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachCourseServiceImpl.java

@@ -0,0 +1,110 @@
+package com.qmth.distributed.print.business.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.bean.result.DictionaryResult;
+import com.qmth.distributed.print.business.bean.result.TeachCourseResult;
+import com.qmth.distributed.print.business.entity.TeachCourse;
+import com.qmth.distributed.print.business.mapper.TeachCourseMapper;
+import com.qmth.distributed.print.business.service.TeachCourseService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicCourse;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.service.BasicCourseService;
+import com.qmth.teachcloud.common.service.SysOrgService;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+
+/**
+ * @Description: 教学课程服务实现类
+ * @Author: CaoZixuan
+ * @Date: 2022-02-07
+ */
+@Service
+public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, TeachCourse> implements TeachCourseService {
+    @Resource
+    private BasicCourseService basicCourseService;
+    @Resource
+    private SysOrgService sysOrgService;
+
+    @Override
+    public IPage<TeachCourseResult> teachCoursePage(String courseName, int pageNumber, int pageSize, Long userId) {
+        if (SystemConstant.longNotNull(userId)){
+            throw ExceptionResultEnum.ERROR.exception("请先登录");
+        }
+        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
+        courseName = SystemConstant.translateSpecificSign(courseName);
+        return this.baseMapper.findTeachCoursePage(new Page<>(pageNumber, pageSize), courseName, userId, schoolId);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean createTeachCourse(Long basicCourseId, SysUser requestUser) {
+        BasicCourse basicCourse = basicCourseService.getById(basicCourseId);
+        if (Objects.isNull(basicCourse)){
+            throw ExceptionResultEnum.ERROR.exception("基础课程不存在");
+        }
+        Long schoolId = basicCourse.getSchoolId();
+        Long userId = requestUser.getId();
+
+        // 唯一性检验
+        TeachCourse checkUnique = this.getOne(new QueryWrapper<TeachCourse>()
+                .lambda()
+                .eq(TeachCourse::getSchoolId,schoolId)
+                .eq(TeachCourse::getBasicCourseId,basicCourseId)
+                .eq(TeachCourse::getUserId,userId));
+        if (Objects.nonNull(checkUnique)){
+            throw ExceptionResultEnum.ERROR.exception("用户【" + requestUser.getRealName() + "】已存在课程编号为【"
+                    + basicCourse.getCode() + "】课程名称为【" + basicCourse.getName() + "】的教学课程");
+        }
+
+        TeachCourse teachCourse = new TeachCourse();
+        teachCourse.setSchoolId(schoolId);
+        teachCourse.setBasicCourseId(basicCourseId);
+        teachCourse.setBasicCourseCode(basicCourse.getCode());
+        teachCourse.setBasicCourseName(basicCourse.getName());
+        teachCourse.setUserId(userId);
+        teachCourse.setUserName(requestUser.getRealName());
+        teachCourse.setEnable(true);
+        teachCourse.insertInfo(userId);
+
+
+        return this.save(teachCourse);
+    }
+
+    @Override
+    public List<DictionaryResult> findBasicCourseByUserId(SysUser requestUser) {
+        Long userId = requestUser.getId();
+        Set<Long> orgIdSet = sysOrgService.findDeepOrgIdListByUserId(userId);
+        List<BasicCourse> basicCourseList = basicCourseService.list(new QueryWrapper<BasicCourse>()
+                .lambda().in(BasicCourse::getTeachingRoomId,orgIdSet));
+        List<DictionaryResult> resultList = new ArrayList<>();
+        for (BasicCourse basicCourse : basicCourseList) {
+            DictionaryResult dictionaryResult = new DictionaryResult();
+            BeanUtils.copyProperties(basicCourse,dictionaryResult);
+            resultList.add(dictionaryResult);
+        }
+        return resultList;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean deleteTeachCourseBatch(List<Long> idList) {
+
+        // TODO: 2022/2/9 实际删除逻辑不确定 先做enable
+        List<TeachCourse> willDeleteList = this.list(new QueryWrapper<TeachCourse>().lambda().in(TeachCourse::getId,idList));
+        willDeleteList.forEach(e -> e.setEnable(false));
+        return this.updateBatchById(willDeleteList);
+    }
+}

+ 16 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachStudentServiceImpl.java

@@ -0,0 +1,16 @@
+package com.qmth.distributed.print.business.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.entity.TeachStudent;
+import com.qmth.distributed.print.business.mapper.TeachStudentMapper;
+import com.qmth.distributed.print.business.service.TeachStudentService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 教学学生服务实现类
+ * @Author: CaoZixuan
+ * @Date: 2022-02-09
+ */
+@Service
+public class TeachStudentServiceImpl extends ServiceImpl<TeachStudentMapper, TeachStudent> implements TeachStudentService {
+}

+ 5 - 0
distributed-print-business/src/main/resources/mapper/TeachClazzMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.qmth.distributed.print.business.mapper.TeachClazzMapper">
+
+</mapper>

+ 28 - 0
distributed-print-business/src/main/resources/mapper/TeachCourseMapper.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.qmth.distributed.print.business.mapper.TeachCourseMapper">
+
+    <select id="findTeachCoursePage"
+            resultType="com.qmth.distributed.print.business.bean.result.TeachCourseResult">
+        SELECT
+            id,
+            basic_course_code as courseCode,
+            basic_course_name as courseName,
+            create_time as createTime
+        FROM
+            teach_course
+        <where>
+            <if test="schoolId != null and schoolId != ''">
+                AND school_id = #{schoolId}
+            </if>
+            <if test="courseName != null and courseName != ''">
+                AND basic_course_name LIKE CONCAT('%',#{courseName},'%')
+            </if>
+            <if test="userId != null and userId != ''">
+                AND user_id = #{userId}
+            </if>
+        AND enable = true
+        </where>
+        ORDER BY create_time DESC
+    </select>
+</mapper>

+ 5 - 0
distributed-print-business/src/main/resources/mapper/TeachStudentMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.qmth.distributed.print.business.mapper.TeachStudentMapper">
+
+</mapper>

+ 18 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCourseController.java

@@ -1,5 +1,7 @@
 package com.qmth.distributed.print.api;
 
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.service.PrintCommonService;
@@ -88,7 +90,7 @@ public class BasicCourseController {
     @ApiOperation(value = "课程管理-查询")
     @RequestMapping(value = "/list", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result findBasicCampusList(@ApiParam(value = "所属机构id") @RequestParam(required = false) String belongOrgId,
+    public Result findBasicCourseList(@ApiParam(value = "所属机构id") @RequestParam(required = false) String belongOrgId,
                                       @ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
                                       @ApiParam(value = "创建时间(起始位置)") @RequestParam(required = false) String startCreateTime,
                                       @ApiParam(value = "创建时间(终止位置)") @RequestParam(required = false) String endCreateTime,
@@ -101,7 +103,7 @@ public class BasicCourseController {
     @ApiOperation(value = "课程管理-新增/编辑")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = EditResult.class)})
-    public Result saveBasicCampus(@Valid @RequestBody BasicCourseParams basicCourseParams, BindingResult bindingResult) {
+    public Result saveBasicCourse(@Valid @RequestBody BasicCourseParams basicCourseParams, BindingResult bindingResult) {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
@@ -112,7 +114,7 @@ public class BasicCourseController {
     @ApiOperation(value = "课程管理-批量启用/禁用")
     @RequestMapping(value = "/enable", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
-    public Result deleteBasicCampus(@ApiParam(value = "选择的要删除的课程id集合", required = true) @RequestParam List<Long> idList,
+    public Result enableBasicCourse(@ApiParam(value = "选择的要删除的课程id集合", required = true) @RequestParam List<Long> idList,
                                     @ApiParam(value = "启用/禁用(默认禁用)") @RequestParam(required = false) Boolean enable) {
         if (Objects.isNull(enable)) {
             enable = false;
@@ -120,6 +122,19 @@ public class BasicCourseController {
         return ResultUtil.ok(basicCourseService.removeBasicCourseBatch(idList, enable));
     }
 
+    @ApiOperation(value = "课程管理-根据查询条件批量启用/禁用")
+    @RequestMapping(value = "/enable_by_query", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    @Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
+    public Result enableBasicCourseByQuery(@ApiParam(value = "所属机构id") @RequestParam(required = false) String belongOrgId,
+                                           @ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
+                                           @ApiParam(value = "创建时间(起始位置)") @RequestParam(required = false) String startCreateTime,
+                                           @ApiParam(value = "创建时间(终止位置)") @RequestParam(required = false) String endCreateTime,
+                                           @ApiParam(value = "状态") @RequestParam(required = false) Boolean enable,
+                                           @ApiParam(value = "启用&禁用操作",required = true) @RequestParam Boolean enableOperate) {
+        return ResultUtil.ok(basicCourseService.removeBasicCourseBatchByQuery(SystemConstant.convertIdToLong(belongOrgId), courseName, SystemConstant.convertIdToLong(startCreateTime), SystemConstant.convertIdToLong(endCreateTime), enable,enableOperate));
+    }
+
     @ApiOperation(value = "课程基本信息管理-批量导入(异步)")
     @RequestMapping(value = "/data_import", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})

+ 40 - 0
distributed-print/src/test/java/com/qmth/distributed/print/SysOrgServiceTest.java

@@ -0,0 +1,40 @@
+package com.qmth.distributed.print;
+
+import com.alibaba.fastjson.JSON;
+import com.qmth.teachcloud.common.service.SysOrgService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 系统机构服务类测试
+ * @Author: CaoZixuan
+ * @Date: 2022-02-09
+ */
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class SysOrgServiceTest {
+    @Resource
+    private SysOrgService sysOrgService;
+
+    @Test
+    public void testFindDeepOrgIdListByUserId(){
+        Long userId = 198146821464260608L;
+        List<Long> orgIdList = sysOrgService.findDeepOrgIdListByUserId(userId);
+        System.out.println(JSON.toJSONString(orgIdList));
+    }
+
+    @Test
+    public void testFindDeepOrgIdListByOrgIdList(){
+        List<Long> orgIdList = new ArrayList<>();
+        orgIdList.add(167590127315451904L);
+        orgIdList.add(198040177245945856L);
+        List<Long> result = sysOrgService.findDeepOrgIdListByOrgIdList(orgIdList);
+        System.out.println(JSON.toJSONString(result));
+    }
+}

+ 0 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/excel/BasicCourseImportDto.java

@@ -31,7 +31,6 @@ public class BasicCourseImportDto implements Serializable {
 
     @ExcelNote(value = "授课班级")
     @ExcelProperty(name = "授课班级", width = 30, index = 4)
-    @NotNull
     private String clazz;
 
     public String getCourseName() {

+ 0 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/BasicCourseParams.java

@@ -39,7 +39,6 @@ public class BasicCourseParams {
 
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "授课班级集合")
-    @NotEmpty(message = "请输入班级名称")
     private Set<Long> clazzIdSet;
 
     public Long getId() {

+ 14 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicCourseService.java

@@ -59,7 +59,7 @@ public interface BasicCourseService extends IService<BasicCourse> {
     /**
      * 查询课程信息-分页查询
      *
-     * @param belongOrgId      所属机构id
+     * @param belongOrgId     所属机构id
      * @param courseName      课程名称(模糊查询)
      * @param startCreateTime 课程创建时间(起始)
      * @param endCreateTime   课程创建时间(终止)
@@ -68,7 +68,7 @@ public interface BasicCourseService extends IService<BasicCourse> {
      * @param pageSize        分页容量
      * @return 查询结果
      */
-    IPage<BasicCourseResult> basicCoursePage(Long belongOrgId,String courseName, Long startCreateTime, Long endCreateTime, Boolean enable, int pageNumber, int pageSize);
+    IPage<BasicCourseResult> basicCoursePage(Long belongOrgId, String courseName, Long startCreateTime, Long endCreateTime, Boolean enable, int pageNumber, int pageSize);
 
     /**
      * 新增/编辑 课程基础信息
@@ -87,6 +87,18 @@ public interface BasicCourseService extends IService<BasicCourse> {
      */
     Boolean removeBasicCourseBatch(List<Long> idList, Boolean enable);
 
+    /**
+     * 根据查询条件批量禁用基础课程
+     *
+     * @param belongOrgId     所属机构id
+     * @param courseName      课程名称(模糊查询)
+     * @param startCreateTime 课程创建时间(起始)
+     * @param endCreateTime   课程创建时间(终止)
+     * @param enable          启用&禁用 状态
+     * @param enableOperate   操作 启用&禁用 状态
+     */
+    Boolean removeBasicCourseBatchByQuery(Long belongOrgId, String courseName, Long startCreateTime, Long endCreateTime, Boolean enable, Boolean enableOperate);
+
     /**
      * 执行批量导入课程逻辑
      *

+ 15 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java

@@ -7,6 +7,7 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.OrgTypeEnum;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -112,4 +113,18 @@ public interface SysOrgService extends IService<SysOrg> {
      * @return 父亲们
      */
     List<SysOrg> findParentsByOrgId(Long orgId);
+
+    /**
+     * 根据用户id查找其所在的机构和下属机构集合
+     * @param userId 用户id
+     * @return 机构id集合
+     */
+    Set<Long> findDeepOrgIdListByUserId(Long userId);
+
+    /**
+     * 根据机构集合查询其下属机构id集合
+     * @param orgIdList 机构id集合
+     * @return 机构id集合
+     */
+    Set<Long> findDeepOrgIdListByOrgIdList(List<Long> orgIdList);
 }

+ 8 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java

@@ -260,4 +260,12 @@ public interface SysUserService extends IService<SysUser> {
      * @return
      */
     List<SysUser> findByRoleIds(List<Long> roleIds);
+
+    /**
+     * 根据用户id查找该用户所属的机构集合
+     *
+     * @param userId 用户id
+     * @return 机构集合
+     */
+    List<Long> findOrgIdListByUserId(Long userId);
 }

+ 43 - 13
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.bean.dto.CourseInfoDto;
 import com.qmth.teachcloud.common.bean.dto.excel.BasicCourseImportDto;
 import com.qmth.teachcloud.common.bean.dto.excel.DescribeImportDto;
@@ -122,15 +123,15 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
         Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
         courseName = SystemConstant.translateSpecificSign(courseName);
-        IPage<BasicCourseResult> iPage = basicCourseMapper.findBasicCoursePage(new Page<>(pageNumber, pageSize),belongOrgId, courseName, startCreateTime, endCreateTime, enable, schoolId, orgIds);
+        IPage<BasicCourseResult> iPage = basicCourseMapper.findBasicCoursePage(new Page<>(pageNumber, pageSize), belongOrgId, courseName, startCreateTime, endCreateTime, enable, schoolId, orgIds);
         List<BasicCourseResult> list = iPage.getRecords();
         for (BasicCourseResult basicCourseResult : list) {
             Long courseId = basicCourseResult.getId();
-            List<BasicUserCourse> basicUserCourseList = basicUserCourseService.list(new QueryWrapper<BasicUserCourse>().lambda().eq(BasicUserCourse::getCourseId,courseId));
+            List<BasicUserCourse> basicUserCourseList = basicUserCourseService.list(new QueryWrapper<BasicUserCourse>().lambda().eq(BasicUserCourse::getCourseId, courseId));
             Set<Long> clazzIdSet = basicUserCourseList.stream().map(BasicUserCourse::getClazzId).collect(Collectors.toSet());
             List<ClazzDatasourceResult> clazzDatasourceResultList = new ArrayList<>();
-            if (clazzIdSet.size() > 0){
-                List<BasicClazz> clazzList = basicClazzService.list(new QueryWrapper<BasicClazz>().lambda().in(BasicClazz::getId,clazzIdSet).orderByAsc(BasicClazz::getCreateTime));
+            if (clazzIdSet.size() > 0) {
+                List<BasicClazz> clazzList = basicClazzService.list(new QueryWrapper<BasicClazz>().lambda().in(BasicClazz::getId, clazzIdSet).orderByAsc(BasicClazz::getCreateTime));
                 for (BasicClazz clazz : clazzList) {
                     ClazzDatasourceResult clazzDatasourceResult = new ClazzDatasourceResult();
                     clazzDatasourceResult.setId(clazz.getId());
@@ -139,6 +140,8 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                     clazzDatasourceResultList.add(clazzDatasourceResult);
                 }
                 basicCourseResult.setClazzList(clazzDatasourceResultList);
+            } else {
+                basicCourseResult.setClazzList(new ArrayList<>());
             }
         }
         return iPage;
@@ -197,6 +200,31 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
         return this.update(updateWrapper);
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean removeBasicCourseBatchByQuery(Long belongOrgId, String courseName, Long startCreateTime, Long endCreateTime, Boolean enable, Boolean enableOperate) {
+        QueryWrapper<BasicCourse> basicCourseQueryWrapper = new QueryWrapper<>();
+        if (SystemConstant.longNotNull(belongOrgId)){
+            basicCourseQueryWrapper.lambda().eq(BasicCourse::getTeachingRoomId,belongOrgId);
+        }
+        if (SystemConstant.strNotNull(courseName)){
+            basicCourseQueryWrapper.lambda().like(BasicCourse::getName,SystemConstant.translateSpecificSign(courseName));
+        }
+        if (SystemConstant.longNotNull(startCreateTime)){
+            basicCourseQueryWrapper.lambda().ge(BasicCourse::getCreateTime,startCreateTime);
+        }
+        if (SystemConstant.longNotNull(endCreateTime)){
+            basicCourseQueryWrapper.lambda().le(BasicCourse::getCreateTime,endCreateTime);
+        }
+        if (Objects.nonNull(enable)){
+            basicCourseQueryWrapper.lambda().eq(BasicCourse::getEnable,enable);
+        }
+        List<BasicCourse> basicCourseList = this.list(basicCourseQueryWrapper);
+        List<Long> idList = basicCourseList.stream().map(BaseEntity::getId).distinct().collect(Collectors.toList());
+
+        return idList.size() > 0 ? this.removeBasicCourseBatch(idList, enableOperate): true;
+    }
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public Map<String, Object> executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) {
@@ -226,17 +254,19 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                     throw ExceptionResultEnum.ERROR.exception("输入的教研室【" + teachingRoomName + "】不存在");
                 }
                 Long teachingRoomId = sysOrg.getId();
-                String[] clazzList = clazz.split(SystemConstant.COMMA);
                 LinkedHashSet<Long> clazzIdSet = new LinkedHashSet<>();
-                for (String clzName : clazzList) {
-                    BasicClazz basicClazz = basicClazzService.getOne(new QueryWrapper<BasicClazz>().lambda()
-                            .eq(BasicClazz::getEnable, true)
-                            .eq(BasicClazz::getSchoolId, schoolId)
-                            .eq(BasicClazz::getClazzName, clzName));
-                    if (Objects.isNull(basicClazz)) {
-                        throw ExceptionResultEnum.ERROR.exception("所选择【班级】" + clzName + "不存在");
+                if (SystemConstant.strNotNull(clazz)){
+                    String[] clazzList = clazz.split(SystemConstant.COMMA);
+                    for (String clzName : clazzList) {
+                        BasicClazz basicClazz = basicClazzService.getOne(new QueryWrapper<BasicClazz>().lambda()
+                                .eq(BasicClazz::getEnable, true)
+                                .eq(BasicClazz::getSchoolId, schoolId)
+                                .eq(BasicClazz::getClazzName, clzName));
+                        if (Objects.isNull(basicClazz)) {
+                            throw ExceptionResultEnum.ERROR.exception("所选择【班级】" + clzName + "不存在");
+                        }
+                        clazzIdSet.add(basicClazz.getId());
                     }
-                    clazzIdSet.add(basicClazz.getId());
                 }
 
                 BasicCourseParams basicCourseParams = new BasicCourseParams();

+ 14 - 15
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicUserCourseServiceImpl.java

@@ -14,10 +14,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 
 /**
  * <p>
@@ -63,18 +60,20 @@ public class BasicUserCourseServiceImpl extends ServiceImpl<BasicUserCourseMappe
         this.remove(new QueryWrapper<BasicUserCourse>().lambda().eq(BasicUserCourse::getCourseId,courseId).gt(BasicUserCourse::getId,0));
 
         // 新增
-        for (Long clazzId : clazzIdSet) {
-            if (Objects.isNull(basicClazzService.getById(clazzId))){
-                throw ExceptionResultEnum.ERROR.exception("班级主键不存在");
+        if (clazzIdSet != null && clazzIdSet.size() > 0){
+            for (Long clazzId : clazzIdSet) {
+                if (Objects.isNull(basicClazzService.getById(clazzId))){
+                    throw ExceptionResultEnum.ERROR.exception("班级主键不存在");
+                }
+                BasicUserCourse basicUserCourse = new BasicUserCourse();
+                basicUserCourse.setId(SystemConstant.getDbUuid());
+                basicUserCourse.setSchoolId(sysUser.getSchoolId());
+                basicUserCourse.setOrgId(orgId);
+                basicUserCourse.setCourseId(courseId);
+                basicUserCourse.setClazzId(clazzId);
+                basicUserCourse.setUpdateId(sysUser.getId());
+                willAddList.add(basicUserCourse);
             }
-            BasicUserCourse basicUserCourse = new BasicUserCourse();
-            basicUserCourse.setId(SystemConstant.getDbUuid());
-            basicUserCourse.setSchoolId(sysUser.getSchoolId());
-            basicUserCourse.setOrgId(orgId);
-            basicUserCourse.setCourseId(courseId);
-            basicUserCourse.setClazzId(clazzId);
-            basicUserCourse.setUpdateId(sysUser.getId());
-            willAddList.add(basicUserCourse);
         }
         this.saveBatch(willAddList);
     }

+ 44 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -343,6 +343,22 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         return this.findTopDFS(null, parentId);
     }
 
+    @Override
+    public Set<Long> findDeepOrgIdListByUserId(Long userId) {
+        List<Long> orgIdList = sysUserService.findOrgIdListByUserId(userId);
+        return this.findDeepOrgIdListByOrgIdList(orgIdList);
+    }
+
+    @Override
+    public Set<Long> findDeepOrgIdListByOrgIdList(List<Long> orgIdList) {
+        Set<Long> orgIdSet = new HashSet<>(orgIdList);
+        Set<Long> finishedIdSet = this.findDeepDFS(new HashSet<>(), orgIdSet, new HashSet<>());
+
+        // 加上他自己所在的机构
+        finishedIdSet.addAll(orgIdSet);
+        return finishedIdSet;
+    }
+
     /**
      * 根据子机构id深度优先搜索其父机构们
      *
@@ -365,4 +381,32 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         }
         return sysOrgList;
     }
+
+    /**
+     * 根据机构id集合深度搜索他们的子机构并且避免重复搜索(机构集合不在同一级导致的重复搜索)
+     *
+     * @param searchedIdSet 已经进行搜索过的机构id集合(标记)
+     * @param targetIdSet   目标机构集合(下一级机构)
+     * @param finishedIdSet 完成搜索的所有符合条件机构id集合(结果)
+     * @return finishedIdSet
+     */
+    private Set<Long> findDeepDFS(Set<Long> searchedIdSet, Set<Long> targetIdSet, Set<Long> finishedIdSet) {
+        for (Long targetId : targetIdSet) {
+            if (!searchedIdSet.contains(targetId)) {
+                Set<Long> orgIdSet = this.list(new QueryWrapper<SysOrg>()
+                                .lambda()
+                                .eq(SysOrg::getParentId, targetId))
+                        .stream()
+                        .map(SysOrg::getId)
+                        .collect(Collectors.toSet());
+
+                if (orgIdSet.size() > 0) {
+                    searchedIdSet.add(targetId);
+                    finishedIdSet.addAll(orgIdSet);
+                    this.findDeepDFS(searchedIdSet, orgIdSet, finishedIdSet);
+                }
+            }
+        }
+        return finishedIdSet;
+    }
 }

+ 10 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -1212,6 +1212,16 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return sysUserMapper.findByRoleIds(roleIds);
     }
 
+    @Override
+    public List<Long> findOrgIdListByUserId(Long userId) {
+        List<Long> orgIdList = new ArrayList<>();
+        Long orgId = this.getById(userId).getOrgId();
+        if (SystemConstant.longNotNull(orgId)){
+            orgIdList.add(orgId);
+        }
+        return orgIdList.stream().distinct().collect(Collectors.toList());
+    }
+
     /**
      * 批量处理用户信息帮助类
      *

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.google.common.reflect.TypeToken;
 import com.google.gson.Gson;
 import com.qmth.boot.core.enums.Platform;
+import com.qmth.boot.tools.signature.SignatureType;
+import com.qmth.teachcloud.common.SignatureEntityTest;
 import com.qmth.teachcloud.common.bean.auth.AuthBean;
 import com.qmth.teachcloud.common.bean.auth.ExpireTimeBean;
 import com.qmth.teachcloud.common.bean.dto.MenuDto;