Browse Source

基础信息管理

caozixuan 3 năm trước cách đây
mục cha
commit
a86cb3f76f
17 tập tin đã thay đổi với 733 bổ sung23 xóa
  1. 59 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TeachClazzResult.java
  2. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TeachCourseResult.java
  3. 80 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TeachStudentResult.java
  4. 18 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachClazzMapper.java
  5. 4 7
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachCourseMapper.java
  6. 18 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachStudentMapper.java
  7. 38 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachClazzService.java
  8. 5 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachCourseService.java
  9. 41 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachStudentService.java
  10. 80 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachClazzServiceImpl.java
  11. 10 10
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachCourseServiceImpl.java
  12. 118 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachStudentServiceImpl.java
  13. 21 0
      distributed-print-business/src/main/resources/mapper/TeachClazzMapper.xml
  14. 32 0
      distributed-print-business/src/main/resources/mapper/TeachStudentMapper.xml
  15. 67 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/TeachClazzController.java
  16. 74 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/TeachCourseController.java
  17. 67 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/TeachStudentController.java

+ 59 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TeachClazzResult.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-10
+ */
+public class TeachClazzResult {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "教学班级id")
+    private Long id;
+
+    @ApiModelProperty(value = "教学班级名称")
+    private String teachClazzName;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "创建时间")
+    private Long createTime;
+
+    @ApiModelProperty(value = "教学学生人数")
+    private Integer teachStudentCount;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getTeachClazzName() {
+        return teachClazzName;
+    }
+
+    public void setTeachClazzName(String teachClazzName) {
+        this.teachClazzName = teachClazzName;
+    }
+
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getTeachStudentCount() {
+        return teachStudentCount;
+    }
+
+    public void setTeachStudentCount(Integer teachStudentCount) {
+        this.teachStudentCount = teachStudentCount;
+    }
+}

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

@@ -5,7 +5,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 
 /**
- * @Description: 教学分页查询结果
+ * @Description: 教学课程分页查询结果
  * @Author: CaoZixuan
  * @Date: 2022-02-09
  */

+ 80 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TeachStudentResult.java

@@ -0,0 +1,80 @@
+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-10
+ */
+public class TeachStudentResult {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "教学学生id")
+    private Long id;
+
+    @ApiModelProperty(value = "学生姓名")
+    private String studentName;
+
+    @ApiModelProperty(value = "学生编号")
+    private String studentCode;
+
+    @ApiModelProperty(value = "院系")
+    private String belongOrgName;
+
+    @ApiModelProperty(value = "专业名称")
+    private String majorName;
+
+    @ApiModelProperty(value = "基础班级名称")
+    private String clazzName;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+
+    public String getBelongOrgName() {
+        return belongOrgName;
+    }
+
+    public void setBelongOrgName(String belongOrgName) {
+        this.belongOrgName = belongOrgName;
+    }
+
+    public String getMajorName() {
+        return majorName;
+    }
+
+    public void setMajorName(String majorName) {
+        this.majorName = majorName;
+    }
+
+    public String getClazzName() {
+        return clazzName;
+    }
+
+    public void setClazzName(String clazzName) {
+        this.clazzName = clazzName;
+    }
+}

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

@@ -1,7 +1,11 @@
 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.TeachClazzResult;
 import com.qmth.distributed.print.business.entity.TeachClazz;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @Description: 教学班mapper
@@ -9,4 +13,18 @@ import com.qmth.distributed.print.business.entity.TeachClazz;
  * @Date: 2022-02-09
  */
 public interface TeachClazzMapper extends BaseMapper<TeachClazz> {
+
+    /**
+     * 分页查询教学班级
+     *
+     * @param iPage          分页参数
+     * @param teachCourseId  教学课程主键
+     * @param teachClazzName 教学班级名称
+     * @param schoolId       学校id
+     * @return 结果
+     */
+    IPage<TeachClazzResult> findTeachClazzPage(@Param("iPage") Page<TeachClazzResult> iPage,
+                                               @Param("teachCourseId") Long teachCourseId,
+                                               @Param("teachClazzName") String teachClazzName,
+                                               @Param("schoolId") Long schoolId);
 }

+ 4 - 7
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TeachCourseMapper.java

@@ -5,12 +5,8 @@ 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
@@ -20,10 +16,11 @@ public interface TeachCourseMapper extends BaseMapper<TeachCourse> {
 
     /**
      * 分页查询教学课程
-     * @param iPage 分页参数
+     *
+     * @param iPage      分页参数
      * @param courseName 课程名称
-     * @param userId 用户id
-     * @param schoolId 学校id
+     * @param userId     用户id
+     * @param schoolId   学校id
      * @return 结果
      */
     IPage<TeachCourseResult> findTeachCoursePage(@Param("iPage") Page<TeachCourseResult> iPage,

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

@@ -1,7 +1,11 @@
 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.TeachStudentResult;
 import com.qmth.distributed.print.business.entity.TeachStudent;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @Description: 教学学生mapper
@@ -9,4 +13,18 @@ import com.qmth.distributed.print.business.entity.TeachStudent;
  * @Date: 2022-02-09
  */
 public interface TeachStudentMapper extends BaseMapper<TeachStudent> {
+
+    /**
+     * 分页查询教学学生列表
+     *
+     * @param iPage        分页参数
+     * @param teachClazzId 教学班级id
+     * @param studentInfo  学生信息(学号、姓名)
+     * @param schoolId     学校id
+     * @return 查询结果
+     */
+    IPage<TeachStudentResult> findTeachStudentPage(@Param("iPage") Page<TeachStudentResult> iPage,
+                                                   @Param("teachClazzId") Long teachClazzId,
+                                                   @Param("studentInfo") String studentInfo,
+                                                   @Param("schoolId") Long schoolId);
 }

+ 38 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachClazzService.java

@@ -1,9 +1,46 @@
 package com.qmth.distributed.print.business.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.bean.result.TeachClazzResult;
+import com.qmth.distributed.print.business.entity.TeachClazz;
+import com.qmth.teachcloud.common.entity.SysUser;
+
+import java.util.List;
+
 /**
  * @Description: 教学班服务类
  * @Author: CaoZixuan
  * @Date: 2022-02-09
  */
-public interface TeachClazzService {
+public interface TeachClazzService extends IService<TeachClazz> {
+
+    /**
+     * 分页查询教学班列表
+     *
+     * @param teachCourseId  教学课程id
+     * @param teachClazzName 班级名称
+     * @param pageNumber     分页页数
+     * @param pageSize       分页容量
+     * @return 教学班分页结果
+     */
+    IPage<TeachClazzResult> teachClazzPage(Long teachCourseId, String teachClazzName, int pageNumber, int pageSize);
+
+    /**
+     * 创建教学班
+     *
+     * @param teachClazzName 班级名称
+     * @param teachCourseId  教学课程id
+     * @param requestUser    请求的用户
+     * @return 教学班新增结果
+     */
+    Boolean createTeachClazz(String teachClazzName, Long teachCourseId, SysUser requestUser);
+
+    /**
+     * 根据教学班级id集合批量删除教学班级
+     *
+     * @param idList 教学班级id集合
+     * @return 教学班删除结果
+     */
+    Boolean deleteTeachClazzBatch(List<Long> idList);
 }

+ 5 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachCourseService.java

@@ -1,8 +1,10 @@
 package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
 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.teachcloud.common.entity.SysUser;
 
 import java.util.List;
@@ -12,7 +14,7 @@ import java.util.List;
  * @Author: CaoZixuan
  * @Date: 2022-02-07
  */
-public interface TeachCourseService {
+public interface TeachCourseService extends IService<TeachCourse> {
 
 
     /**
@@ -30,7 +32,7 @@ public interface TeachCourseService {
      * 创建教学课程
      *
      * @param basicCourseId 基础课程id
-     * @param requestUser        请求的用户
+     * @param requestUser   请求的用户
      * @return 创建结果
      */
     Boolean createTeachCourse(Long basicCourseId, SysUser requestUser);
@@ -41,7 +43,7 @@ public interface TeachCourseService {
      * @param requestUser 请求的用户
      * @return 课程列表
      */
-    List<DictionaryResult> findBasicCourseByUserId(SysUser requestUser);
+    List<DictionaryResult> findBasicCourseByUser(SysUser requestUser);
 
     /**
      * 根据教学课程id集合批量删除教学课程

+ 41 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachStudentService.java

@@ -1,9 +1,49 @@
 package com.qmth.distributed.print.business.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.bean.result.TeachStudentResult;
+import com.qmth.distributed.print.business.entity.TeachStudent;
+import com.qmth.teachcloud.common.entity.SysUser;
+
+import java.util.List;
+
 /**
  * @Description: 教学学生服务类
  * @Author: CaoZixuan
  * @Date: 2022-02-09
  */
-public interface TeachStudentService {
+public interface TeachStudentService extends IService<TeachStudent> {
+
+    /**
+     * 分页查询教学学生列表
+     *
+     * @param teachClazzId 教学班级主键
+     * @param studentInfo  学生信息(学号、姓名)
+     * @param pageNumber   分页页数
+     * @param pageSize     分页容量
+     * @return 查询结果
+     */
+    IPage<TeachStudentResult> teachStudentPage(Long teachClazzId, String studentInfo, int pageNumber, int pageSize);
+
+    /**
+     * 创建教学学生
+     *
+     * @param studentName  学生姓名
+     * @param studentCode  学生学号
+     * @param teachClazzId 教学班级id
+     * @param requestUser  请求用户
+     * @return 创建结果
+     */
+    Boolean createTeachStudent(String studentName, String studentCode, Long teachClazzId, SysUser requestUser);
+
+    // TODO: 2022/2/10 批量导入
+
+    /**
+     * 删除教学学生
+     *
+     * @param idList 教学学生主键集合
+     * @return 删除结果
+     */
+    Boolean deleteTeachStudentBatch(List<Long> idList);
 }

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

@@ -1,10 +1,27 @@
 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.TeachClazzResult;
 import com.qmth.distributed.print.business.entity.TeachClazz;
+import com.qmth.distributed.print.business.entity.TeachCourse;
+import com.qmth.distributed.print.business.entity.TeachStudent;
 import com.qmth.distributed.print.business.mapper.TeachClazzMapper;
 import com.qmth.distributed.print.business.service.TeachClazzService;
+import com.qmth.distributed.print.business.service.TeachCourseService;
+import com.qmth.distributed.print.business.service.TeachStudentService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * @Description: 教学班服务实现类
@@ -13,4 +30,67 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class TeachClazzServiceImpl extends ServiceImpl<TeachClazzMapper,TeachClazz> implements TeachClazzService {
+    @Resource
+    private TeachStudentService teachStudentService;
+    @Resource
+    private TeachCourseService teachCourseService;
+
+    @Override
+    public IPage<TeachClazzResult> teachClazzPage(Long teachCourseId, String teachClazzName, int pageNumber, int pageSize) {
+        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
+        teachClazzName = SystemConstant.translateSpecificSign(teachClazzName);
+        IPage<TeachClazzResult> resultIPage = this.baseMapper.findTeachClazzPage(new Page<>(pageNumber, pageSize), teachCourseId, teachClazzName, schoolId);
+        List<TeachClazzResult> teachClazzResultList = resultIPage.getRecords();
+
+        for (TeachClazzResult teachClazzResult : teachClazzResultList) {
+            Long id = teachClazzResult.getId();
+            int count = teachStudentService.count(new QueryWrapper<TeachStudent>().lambda().eq(TeachStudent::getTeachClazzId, id));
+            teachClazzResult.setTeachStudentCount(count);
+        }
+        return resultIPage;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean createTeachClazz(String teachClazzName, Long teachCourseId, SysUser requestUser) {
+        if (SystemConstant.isOneNull(teachClazzName, teachCourseId)) {
+            throw ExceptionResultEnum.ERROR.exception("参数异常");
+        }
+        TeachCourse teachCourse = teachCourseService.getById(teachCourseId);
+        if (Objects.isNull(teachCourse)) {
+            throw ExceptionResultEnum.ERROR.exception("教学课程不存在");
+        }
+        if (!Objects.equals(teachCourse.getUserId(), requestUser.getId())) {
+            throw ExceptionResultEnum.ERROR.exception("用户身份信息异常");
+        }
+
+        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
+        TeachClazz check = this.getOne(new QueryWrapper<TeachClazz>()
+                .lambda()
+                .eq(TeachClazz::getSchoolId, schoolId)
+                .eq(TeachClazz::getTeachClazzName, teachClazzName)
+                .eq(TeachClazz::getTeachCourseId, teachCourseId));
+
+        if (Objects.nonNull(check)) {
+            throw ExceptionResultEnum.ERROR.exception("教学课程【" + check.getTeachCourseName() + "】中已存在班级名称为【" + check.getTeachClazzName() + "】的班级");
+        }
+
+        TeachClazz teachClazz = new TeachClazz();
+        teachClazz.setSchoolId(schoolId);
+        teachClazz.setTeachClazzName(teachClazzName);
+        teachClazz.setUserId(teachCourse.getUserId());
+        teachClazz.setUserName(teachCourse.getUserName());
+        teachClazz.setTeachCourseId(teachCourseId);
+        teachClazz.setTeachCourseCode(teachCourse.getBasicCourseCode());
+        teachClazz.setTeachCourseName(teachCourse.getBasicCourseName());
+        teachClazz.insertInfo(requestUser.getId());
+        return this.save(teachClazz);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean deleteTeachClazzBatch(List<Long> idList) {
+        // TODO: 2022/2/10 删除逻辑不确定 先直接删除
+        return this.removeByIds(idList);
+    }
 }

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

@@ -40,7 +40,7 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
 
     @Override
     public IPage<TeachCourseResult> teachCoursePage(String courseName, int pageNumber, int pageSize, Long userId) {
-        if (SystemConstant.longNotNull(userId)){
+        if (SystemConstant.longNotNull(userId)) {
             throw ExceptionResultEnum.ERROR.exception("请先登录");
         }
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
@@ -52,7 +52,7 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
     @Override
     public Boolean createTeachCourse(Long basicCourseId, SysUser requestUser) {
         BasicCourse basicCourse = basicCourseService.getById(basicCourseId);
-        if (Objects.isNull(basicCourse)){
+        if (Objects.isNull(basicCourse)) {
             throw ExceptionResultEnum.ERROR.exception("基础课程不存在");
         }
         Long schoolId = basicCourse.getSchoolId();
@@ -61,10 +61,10 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
         // 唯一性检验
         TeachCourse checkUnique = this.getOne(new QueryWrapper<TeachCourse>()
                 .lambda()
-                .eq(TeachCourse::getSchoolId,schoolId)
-                .eq(TeachCourse::getBasicCourseId,basicCourseId)
-                .eq(TeachCourse::getUserId,userId));
-        if (Objects.nonNull(checkUnique)){
+                .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() + "】的教学课程");
         }
@@ -84,15 +84,15 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
     }
 
     @Override
-    public List<DictionaryResult> findBasicCourseByUserId(SysUser requestUser) {
+    public List<DictionaryResult> findBasicCourseByUser(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));
+                .lambda().in(BasicCourse::getTeachingRoomId, orgIdSet));
         List<DictionaryResult> resultList = new ArrayList<>();
         for (BasicCourse basicCourse : basicCourseList) {
             DictionaryResult dictionaryResult = new DictionaryResult();
-            BeanUtils.copyProperties(basicCourse,dictionaryResult);
+            BeanUtils.copyProperties(basicCourse, dictionaryResult);
             resultList.add(dictionaryResult);
         }
         return resultList;
@@ -103,7 +103,7 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
     public Boolean deleteTeachCourseBatch(List<Long> idList) {
 
         // TODO: 2022/2/9 实际删除逻辑不确定 先做enable
-        List<TeachCourse> willDeleteList = this.list(new QueryWrapper<TeachCourse>().lambda().in(TeachCourse::getId,idList));
+        List<TeachCourse> willDeleteList = this.list(new QueryWrapper<TeachCourse>().lambda().in(TeachCourse::getId, idList));
         willDeleteList.forEach(e -> e.setEnable(false));
         return this.updateBatchById(willDeleteList);
     }

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

@@ -1,10 +1,28 @@
 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.TeachStudentResult;
+import com.qmth.distributed.print.business.entity.TeachClazz;
 import com.qmth.distributed.print.business.entity.TeachStudent;
 import com.qmth.distributed.print.business.mapper.TeachStudentMapper;
+import com.qmth.distributed.print.business.service.TeachClazzService;
 import com.qmth.distributed.print.business.service.TeachStudentService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicStudent;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.service.BasicStudentService;
+import com.qmth.teachcloud.common.util.ServletUtil;
 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;
 
 /**
  * @Description: 教学学生服务实现类
@@ -13,4 +31,104 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class TeachStudentServiceImpl extends ServiceImpl<TeachStudentMapper, TeachStudent> implements TeachStudentService {
+    @Resource
+    private BasicStudentService basicStudentService;
+    @Resource
+    private TeachClazzService teachClazzService;
+
+    @Override
+    public IPage<TeachStudentResult> teachStudentPage(Long teachClazzId, String studentInfo, int pageNumber, int pageSize) {
+        studentInfo = SystemConstant.translateSpecificSign(studentInfo);
+        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
+        return this.baseMapper.findTeachStudentPage(new Page<>(pageNumber, pageSize), teachClazzId, studentInfo, schoolId);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean createTeachStudent(String studentName, String studentCode, Long teachClazzId, SysUser requestUser) {
+        if (SystemConstant.isOneNull(studentName, studentCode, teachClazzId)) {
+            throw ExceptionResultEnum.ERROR.exception("参数不完整");
+        }
+        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
+        BasicStudent basicStudent = basicStudentService.getOne(new QueryWrapper<BasicStudent>()
+                .lambda()
+                .eq(BasicStudent::getSchoolId, schoolId)
+                .eq(BasicStudent::getStudentCode, studentCode)
+                .eq(BasicStudent::getStudentName, studentName));
+        if (Objects.isNull(basicStudent)) {
+            throw ExceptionResultEnum.ERROR.exception("学生姓名为【" + studentName + "】学号为【" + studentCode + "】的学生在学生字典中不存在,请先创建该学生字典");
+        }
+        if (this.checkTeachStudentRepeat(basicStudent.getId(), teachClazzId, schoolId)) {
+            throw ExceptionResultEnum.ERROR.exception("学生姓名为【" + studentName + "】学号为【" + studentCode + "】的学生在该班级已存在");
+        }
+        List<BasicStudent> basicStudentList = new ArrayList<>();
+        basicStudentList.add(basicStudent);
+        return this.createTeachStudentBatch(basicStudentList, teachClazzId, schoolId, requestUser);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean deleteTeachStudentBatch(List<Long> idList) {
+        // TODO: 2022/2/10 不确定删除逻辑目前直接做删除操作
+        return this.removeByIds(idList);
+    }
+
+    /**
+     * 批量创建教学学生
+     *
+     * @param basicStudentList 要创建教学学生的基础学生集合
+     * @param teachClazzId     教学班级id
+     * @param schoolId         学校id
+     * @param requestUser      请求用户
+     * @return 创建结果
+     */
+    private Boolean createTeachStudentBatch(List<BasicStudent> basicStudentList, Long teachClazzId, Long schoolId, SysUser requestUser) {
+        TeachClazz teachClazz = teachClazzService.getById(teachClazzId);
+        if (Objects.isNull(teachClazz)) {
+            throw ExceptionResultEnum.ERROR.exception("教学班级不存在");
+        }
+        if (!Objects.equals(teachClazz.getUserId(), requestUser.getId())) {
+            throw ExceptionResultEnum.ERROR.exception("用户信息异常");
+        }
+
+        List<TeachStudent> teachStudentList = new ArrayList<>();
+        if (basicStudentList != null && basicStudentList.size() > 0) {
+            for (BasicStudent basicStudent : basicStudentList) {
+                Long basicStudentId = basicStudent.getId();
+                // 批量新增重复的课程跳过
+                if (this.checkTeachStudentRepeat(basicStudentId, teachClazzId, schoolId)) {
+                    continue;
+                }
+
+                TeachStudent teachStudent = new TeachStudent();
+                teachStudent.setSchoolId(basicStudent.getSchoolId());
+                teachStudent.setStudentId(basicStudent.getId());
+                teachStudent.setStudentCode(basicStudent.getStudentCode());
+                teachStudent.setStudentName(basicStudent.getStudentName());
+                teachStudent.setTeachClazzId(teachClazzId);
+                teachStudent.setTeachCourseId(teachClazz.getTeachCourseId());
+                teachStudent.setUserId(teachClazz.getUserId());
+                teachStudent.insertInfo(requestUser.getId());
+                teachStudentList.add(teachStudent);
+            }
+        }
+        return this.saveBatch(teachStudentList);
+    }
+
+    /**
+     * 检验教学学生已存在
+     *
+     * @param basicStudentId 基础学生id
+     * @param teachClazzId   教学班级id
+     * @param schoolId       学校id
+     * @return true-已存在不能新增、false-不存在可以新增
+     */
+    private Boolean checkTeachStudentRepeat(Long basicStudentId, Long teachClazzId, Long schoolId) {
+        TeachStudent teachStudent = this.getOne(new QueryWrapper<TeachStudent>()
+                .lambda()
+                .eq(TeachStudent::getStudentId, basicStudentId)
+                .eq(TeachStudent::getTeachClazzId, teachClazzId)
+                .eq(TeachStudent::getSchoolId, schoolId));
+        return Objects.nonNull(teachStudent);
+    }
 }

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

@@ -2,4 +2,25 @@
 <!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">
 
+    <select id="findTeachClazzPage"
+            resultType="com.qmth.distributed.print.business.bean.result.TeachClazzResult">
+        SELECT
+            id,
+            teach_clazz_name AS teachClazzName,
+            create_time AS createTime
+        FROM
+            teach_clazz
+        <where>
+            <if test="schoolId != null and schoolId != ''">
+                AND school_id = #{schoolId}
+            </if>
+            <if test="teachClazzName != null and teachClazzName != ''">
+                AND teach_clazz_name LIKE CONCAT('%',#{teachClazzName},'%')
+            </if>
+            <if test="teachCourseId != null and teachCourseId != ''">
+                AND teach_course_id = #{teachCourseId}
+            </if>
+        </where>
+        ORDER BY create_time DESC
+    </select>
 </mapper>

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

@@ -2,4 +2,36 @@
 <!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">
 
+    <select id="findTeachStudentPage"
+            resultType="com.qmth.distributed.print.business.bean.result.TeachStudentResult">
+        SELECT
+            ts.id AS id,
+            bs.student_name AS studentName,
+            bs.student_code AS studentCode,
+            so.name AS belongOrgName,
+            bm.name AS majorName,
+            bc.clazz_name AS clazzName
+        FROM
+            teach_student ts
+                LEFT JOIN
+            basic_student bs ON ts.student_id = bs.id
+                LEFT JOIN
+            sys_org so ON bs.belong_org_id = so.id
+                LEFT JOIN
+            basic_major bm ON bs.major_id = bm.id
+                LEFT JOIN
+            basic_clazz bc ON bs.clazz_id = bc.id
+        <where>
+            <if test="schoolId != null and schoolId != ''">
+                AND ts.school_id = #{schoolId}
+            </if>
+            <if test="teachClazzId != null and teachClazzId != ''">
+                AND ts.teach_clazz_id = #{teachClazzId}
+            </if>
+            <if test="studentInfo != null and studentInfo != ''">
+                AND (bs.student_name LIKE CONCAT('%',#{studentInfo},'%') OR bs.student_code LIKE CONCAT('%',#{studentInfo},'%'))
+            </if>
+        </where>
+        ORDER BY ts.create_time DESC
+    </select>
 </mapper>

+ 67 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/TeachClazzController.java

@@ -0,0 +1,67 @@
+package com.qmth.distributed.print.api;
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.result.EditResult;
+import com.qmth.distributed.print.business.service.TeachClazzService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.util.List;
+
+/**
+ * @Description: 教学班级 前端控制器
+ * @Author: CaoZixuan
+ * @Date: 2022-02-10
+ */
+@Api(tags = "教学班级Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.teach}/clazz")
+@Validated
+//@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
+public class TeachClazzController {
+    @Resource
+    private TeachClazzService teachClazzService;
+
+    @ApiOperation(value = "教学班级-查询")
+    @RequestMapping(value = "/page", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findTeachClazzPage(@ApiParam(value = "教学课程id", required = true) @RequestParam String teachCourseId,
+                                     @ApiParam(value = "班级名称(模糊查询)") @RequestParam(required = false) String teachClazzName,
+                                     @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                                     @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        return ResultUtil.ok(teachClazzService.teachClazzPage(SystemConstant.convertIdToLong(teachCourseId), teachClazzName, pageNumber, pageSize));
+    }
+
+    @ApiOperation(value = "教学班级-创建教学班级")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "创建成功", response = EditResult.class)})
+    public Result createTeachClazz(@ApiParam(value = "班级名称", required = true) @RequestParam String teachClazzName,
+                                   @ApiParam(value = "教学课程id", required = true) @RequestParam String teachCourseId) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        Long id = SystemConstant.convertIdToLong(teachCourseId);
+        if (!SystemConstant.longNotNull(id)) {
+            throw ExceptionResultEnum.ERROR.exception("缺少教学课程信息");
+        }
+        return ResultUtil.ok(teachClazzService.createTeachClazz(teachClazzName, id,requestUser));
+    }
+
+    @ApiOperation(value = "教学班级-批量删除")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    public Result deleteTeachClazz(@ApiParam(value = "选择的要删除的班级id集合", required = true) @RequestParam List<Long> idList) {
+        return ResultUtil.ok(teachClazzService.deleteTeachClazzBatch(idList));
+    }
+}

+ 74 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/TeachCourseController.java

@@ -0,0 +1,74 @@
+package com.qmth.distributed.print.api;
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.result.EditResult;
+import com.qmth.distributed.print.business.service.TeachCourseService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.util.List;
+
+/**
+ * @Description: 教学课程 前端控制器
+ * @Author: CaoZixuan
+ * @Date: 2022-02-10
+ */
+@Api(tags = "教学课程Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.teach}/course")
+@Validated
+//@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
+public class TeachCourseController {
+    @Resource
+    private TeachCourseService teachCourseService;
+
+    @ApiOperation(value = "教学课程-查询")
+    @RequestMapping(value = "/page", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findTeachCoursePage(@ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
+                                      @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                                      @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(teachCourseService.teachCoursePage(courseName, pageNumber, pageSize, requestUser.getId()));
+    }
+
+    @ApiOperation(value = "教学课程-创建教学课程")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "创建成功", response = EditResult.class)})
+    public Result createTeachCourse(@ApiParam(value = "基础课程主键", required = true) @RequestParam String basicCourseId) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        Long id = SystemConstant.convertIdToLong(basicCourseId);
+        if (!SystemConstant.longNotNull(id)) {
+            throw ExceptionResultEnum.ERROR.exception("请选择要创建教学课程的基础课程");
+        }
+        return ResultUtil.ok(teachCourseService.createTeachCourse(id, requestUser));
+    }
+
+    @ApiOperation(value = "教学课程-查找基础课程")
+    @RequestMapping(value = "/find_basic_course", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findBasicCourse() {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(teachCourseService.findBasicCourseByUser(requestUser));
+    }
+
+    @ApiOperation(value = "教学课程-批量删除")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    public Result deleteTeachCourse(@ApiParam(value = "选择的要删除的课程id集合", required = true) @RequestParam List<Long> idList) {
+        return ResultUtil.ok(teachCourseService.deleteTeachCourseBatch(idList));
+    }
+}

+ 67 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/TeachStudentController.java

@@ -0,0 +1,67 @@
+package com.qmth.distributed.print.api;
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.result.EditResult;
+import com.qmth.distributed.print.business.service.TeachStudentService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.util.List;
+
+/**
+ * @Description: 教学学生 前端控制器
+ * @Author: CaoZixuan
+ * @Date: 2022-02-10
+ */
+@Api(tags = "教学学生Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.teach}/student")
+@Validated
+//@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
+public class TeachStudentController {
+    @Resource
+    private TeachStudentService teachStudentService;
+
+    @ApiOperation(value = "教学学生-查询")
+    @RequestMapping(value = "/page", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findTeachStudentPage(@ApiParam(value = "教学班级id", required = true) @RequestParam String teachClazzId,
+                                       @ApiParam(value = "学生信息(学号、姓名)") @RequestParam(required = false) String studentInfo,
+                                       @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                                       @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        return ResultUtil.ok(teachStudentService.teachStudentPage(SystemConstant.convertIdToLong(teachClazzId), studentInfo, pageNumber, pageSize));
+    }
+
+    @ApiOperation(value = "教学学生-创建教学学生")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "创建成功", response = EditResult.class)})
+    public Result createTeachStudent(@ApiParam(value = "学生名称", required = true) @RequestParam String studentName,
+                                     @ApiParam(value = "学生编号", required = true) @RequestParam String studentCode,
+                                     @ApiParam(value = "教学班级id", required = true) @RequestParam String teachClazzId) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        if (SystemConstant.isOneNull(studentName, studentCode, teachClazzId)) {
+            throw ExceptionResultEnum.ERROR.exception("缺少参数");
+        }
+        return ResultUtil.ok(teachStudentService.createTeachStudent(studentName, studentCode, SystemConstant.convertIdToLong(teachClazzId), requestUser));
+    }
+
+    @ApiOperation(value = "教学学生-批量删除")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    public Result deleteTeachStudent(@ApiParam(value = "选择的要删除的学生id集合", required = true) @RequestParam List<Long> idList) {
+        return ResultUtil.ok(teachStudentService.deleteTeachStudentBatch(idList));
+    }
+}