Bladeren bron

fix:教学课程班级修改

caozixuan 2 jaren geleden
bovenliggende
commit
fcc61c500a

+ 39 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/excel/TeachCourseDto.java

@@ -0,0 +1,39 @@
+package com.qmth.distributed.print.business.bean.dto.excel;
+
+import com.qmth.teachcloud.common.annotation.ExcelImportTempleteVaild;
+import com.qmth.teachcloud.common.annotation.ExcelNote;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @Description: 教学课程导入dto
+ * @Author: CaoZixuan
+ * @Date: 2023-03-15
+ */
+@ExcelImportTempleteVaild(value = true)
+public class TeachCourseDto implements Serializable {
+    @ExcelNote(value = "课程编号")
+    @NotNull
+    private String courseCode;
+
+    @ExcelNote(value = "课程名称")
+    @NotNull
+    private String courseName;
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+}

+ 8 - 10
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TeachClazzParams.java

@@ -24,16 +24,14 @@ public class TeachClazzParams {
     private Long id;
 
     @JsonSerialize(using = ToStringSerializer.class)
-    @ApiModelProperty(value = "教学课程主键")
-    @NotNull(message = "请选择教学课程")
-    @Range(min = 1L, message = "请选择教学课程")
-    @DBVerify(value = "教学课程id",required = true)
-    private Long teachCourseId;
+    @ApiModelProperty(value = "基础课程主键")
+    @NotNull(message = "请选择基础课程")
+    @Range(min = 1L, message = "请选择基础课程")
+    private Long basicCourseId;
 
     @ApiModelProperty(value = "教学班级名称")
     @NotNull(message = "请输入教学班级名称")
     @Length(min = 1,message = "请输入教学班级名称")
-    @DBVerify(value = "教学班级名称",required = true)
     private String teachClazzName;
 
     public Long getId() {
@@ -44,12 +42,12 @@ public class TeachClazzParams {
         this.id = id;
     }
 
-    public Long getTeachCourseId() {
-        return teachCourseId;
+    public Long getBasicCourseId() {
+        return basicCourseId;
     }
 
-    public void setTeachCourseId(Long teachCourseId) {
-        this.teachCourseId = teachCourseId;
+    public void setBasicCourseId(Long basicCourseId) {
+        this.basicCourseId = basicCourseId;
     }
 
     public String getTeachClazzName() {

+ 21 - 14
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TeachCourseParams.java

@@ -1,10 +1,7 @@
 package com.qmth.distributed.print.business.bean.params;
 
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import com.qmth.teachcloud.common.annotation.DBVerify;
 import io.swagger.annotations.ApiModelProperty;
-import org.hibernate.validator.constraints.Range;
+import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotNull;
 
@@ -14,19 +11,29 @@ import javax.validation.constraints.NotNull;
  * @Date: 2022-02-14
  */
 public class TeachCourseParams {
+    @ApiModelProperty("课程名称")
+    @NotNull(message = "请填写课程名称")
+    @Length(message = "请填写课程名称")
+    private String courseName;
 
-    @JsonSerialize(using = ToStringSerializer.class)
-    @ApiModelProperty(value = "基础课程id")
-    @NotNull(message = "请选择基础课程id")
-    @Range(min = 1L, message = "请选择基础课程id")
-    @DBVerify(value = "基础课程id")
-    private Long basicCourseId;
+    @ApiModelProperty("课程编号")
+    @NotNull(message = "请填写课程编号")
+    @Length(message = "请填写课程编号")
+    private String courseCode;
 
-    public Long getBasicCourseId() {
-        return basicCourseId;
+    public String getCourseName() {
+        return courseName;
     }
 
-    public void setBasicCourseId(Long basicCourseId) {
-        this.basicCourseId = basicCourseId;
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
     }
 }

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

@@ -32,9 +32,9 @@ public class TeachClazz extends BaseEntity implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long userId;
 
-    @ApiModelProperty(value = "教学课程主键")
+    @ApiModelProperty(value = "基础课程主键")
     @JsonSerialize(using = ToStringSerializer.class)
-    private Long teachCourseId;
+    private Long basicCourseId;
 
     public Long getSchoolId() {
         return schoolId;
@@ -68,11 +68,11 @@ public class TeachClazz extends BaseEntity implements Serializable {
         this.userId = userId;
     }
 
-    public Long getTeachCourseId() {
-        return teachCourseId;
+    public Long getBasicCourseId() {
+        return basicCourseId;
     }
 
-    public void setTeachCourseId(Long teachCourseId) {
-        this.teachCourseId = teachCourseId;
+    public void setBasicCourseId(Long basicCourseId) {
+        this.basicCourseId = basicCourseId;
     }
 }

+ 24 - 7
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachCourseService.java

@@ -2,11 +2,14 @@ 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.params.TeachCourseParams;
 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 org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -29,13 +32,29 @@ public interface TeachCourseService extends IService<TeachCourse> {
     IPage<TeachCourseResult> teachCoursePage(String courseName, int pageNumber, int pageSize, Long userId);
 
     /**
-     * 创建教学课程
+     * 手动创建教学课程
      *
-     * @param basicCourseId 基础课程id
-     * @param requestUser   请求的用户
+     * @param teachCourseParams 课程新增参数
+     * @param requestUser       请求的用户
      * @return 创建结果
      */
-    Boolean createTeachCourse(Long basicCourseId, SysUser requestUser);
+    Boolean manualCreate(TeachCourseParams teachCourseParams, SysUser requestUser);
+
+    /**
+     * 选择课程表并创建教学课程
+     *
+     * @param basicCourseIdList 基础课程id集合
+     * @param requestUser       请求的用户
+     */
+    void selectCreate(List<Long> basicCourseIdList, SysUser requestUser);
+
+    /**
+     * 导入教学课程
+     *
+     * @param file        文件
+     * @param requestUser 请求用户
+     */
+    void importTeachCourse(MultipartFile file, SysUser requestUser) throws IOException, NoSuchFieldException;
 
     /**
      * 根据用户id查询该用户所属机构下可以创建为教学课程的基础课程列表
@@ -49,8 +68,6 @@ public interface TeachCourseService extends IService<TeachCourse> {
      * 根据教学课程id集合批量删除教学课程
      *
      * @param idList 教学课程idList
-     * @return 删除结果
      */
-    Boolean deleteTeachCourseBatch(List<Long> idList);
-
+    void deleteTeachCourseBatch(List<Long> idList);
 }

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java

@@ -392,7 +392,7 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
                 throw ExceptionResultEnum.ERROR.exception("请优先在基础信息管理中创建【" + basicCourse.getName() + "】的教学课程信息");
             }
             TeachCourse teachCourse = teachCourseList.get(0);
-            List<TeachClazz> teachClazzList = teachClazzService.list(new QueryWrapper<TeachClazz>().lambda().in(TeachClazz::getTeachCourseId, teachCourse.getId()));
+            List<TeachClazz> teachClazzList = teachClazzService.list(new QueryWrapper<TeachClazz>().lambda().in(TeachClazz::getBasicCourseId, teachCourse.getBasicCourseId()));
             for (TeachClazz teachClazz : teachClazzList) {
                 TaskPrintClassDto dto = new TaskPrintClassDto();
                 dto.setClassId(String.valueOf(teachClazz.getId()));

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

@@ -64,13 +64,18 @@ public class TeachClazzServiceImpl extends ServiceImpl<TeachClazzMapper,TeachCla
     @Override
     public Boolean editTeachClazz(TeachClazzParams teachClazzParams, SysUser requestUser) {
         Long id = teachClazzParams.getId();
-        Long teachCourseId = teachClazzParams.getTeachCourseId();
+        Long basicCourseId = teachClazzParams.getBasicCourseId();
         String teachClazzName = teachClazzParams.getTeachClazzName();
         boolean result;
 
-        if (SystemConstant.isOneNull(teachClazzName, teachCourseId)) {
+        if (SystemConstant.isOneNull(teachClazzName, basicCourseId)) {
             throw ExceptionResultEnum.ERROR.exception("参数异常");
         }
+        BasicCourse basicCourse = basicCourseService.getById(basicCourseId);
+        if (Objects.isNull(basicCourse)) {
+            throw ExceptionResultEnum.ERROR.exception("未找到课程");
+        }
+        String courseName = basicCourse.getName();
 
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
         TeachClazz check = this.getOne(new QueryWrapper<TeachClazz>()
@@ -79,29 +84,19 @@ public class TeachClazzServiceImpl extends ServiceImpl<TeachClazzMapper,TeachCla
                 .eq(TeachClazz::getTeachClazzName, teachClazzName));
 
         if (Objects.nonNull(check) && !check.getId().equals(id)) {
-            throw ExceptionResultEnum.ERROR.exception("教学课程【" + basicCourseService.getById(teachCourseService.getById(check.getTeachCourseId()).getBasicCourseId()).getName()
+            throw ExceptionResultEnum.ERROR.exception("课程【" + courseName
                     + "】中已存在班级名称为【" + check.getTeachClazzName() + "】的班级");
         }
 
-
-
         if (SystemConstant.longNotNull(id)) {
             // 重命名课程
             result = this.update(new UpdateWrapper<TeachClazz>().lambda().eq(TeachClazz::getId, id).set(TeachClazz::getTeachClazzName, teachClazzName));
         } else {
-            TeachCourse teachCourse = teachCourseService.getById(teachCourseId);
-            if (Objects.isNull(teachCourse)) {
-                throw ExceptionResultEnum.ERROR.exception("教学课程不存在");
-            }
-            if (!Objects.equals(teachCourse.getUserId(), requestUser.getId())) {
-                throw ExceptionResultEnum.ERROR.exception("用户身份信息异常");
-            }
-
             TeachClazz teachClazz = new TeachClazz();
             teachClazz.setSchoolId(schoolId);
             teachClazz.setTeachClazzName(teachClazzName);
-            teachClazz.setUserId(teachCourse.getUserId());
-            teachClazz.setTeachCourseId(teachCourseId);
+            teachClazz.setUserId(requestUser.getId());
+            teachClazz.setBasicCourseId(basicCourseId);
             teachClazz.insertInfo(requestUser.getId());
             result = this.save(teachClazz);
         }
@@ -128,7 +123,7 @@ public class TeachClazzServiceImpl extends ServiceImpl<TeachClazzMapper,TeachCla
         List<DictionaryResult> dictionaryResultList = new ArrayList<>();
         for (TeachCourse teachCourse : teachCourseList) {
             BasicCourse basicCourse = basicCourseService.getById(teachCourse.getBasicCourseId());
-            if (basicCourse.getEnable()){
+            if (basicCourse.getEnable()) {
                 DictionaryResult dictionaryResult = new DictionaryResult();
                 dictionaryResult.setId(teachCourse.getId());
                 dictionaryResult.setCode(basicCourse.getCode());

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

@@ -1,9 +1,14 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 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.google.common.collect.Lists;
+import com.qmth.distributed.print.business.bean.dto.excel.TeachCourseDto;
+import com.qmth.distributed.print.business.bean.dto.excel.TeachStudentImportDto;
+import com.qmth.distributed.print.business.bean.params.TeachCourseParams;
 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.TeachClazz;
@@ -11,23 +16,31 @@ import com.qmth.distributed.print.business.entity.TeachCourse;
 import com.qmth.distributed.print.business.mapper.TeachCourseMapper;
 import com.qmth.distributed.print.business.service.TeachClazzService;
 import com.qmth.distributed.print.business.service.TeachCourseService;
+import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.bean.params.BasicCourseParams;
 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.ExcelUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @Description: 教学课程服务实现类
@@ -53,15 +66,43 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
         return this.baseMapper.findTeachCoursePage(new Page<>(pageNumber, pageSize), courseName, userId, schoolId);
     }
 
-    @Transactional(rollbackFor = Exception.class)
+    @Transactional
     @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();
+    public Boolean manualCreate(TeachCourseParams teachCourseParams, SysUser requestUser) {
+        String courseCode = teachCourseParams.getCourseCode();
+        String courseName = teachCourseParams.getCourseName();
+        Long schoolId = requestUser.getSchoolId();
         Long userId = requestUser.getId();
+        Long basicCourseId;
+
+        // 校验
+        BasicCourse basicCourse = basicCourseService.getOne(new QueryWrapper<BasicCourse>()
+                .lambda()
+                .eq(BasicCourse::getSchoolId, schoolId)
+                .eq(BasicCourse::getCode, courseCode));
+        if (Objects.nonNull(basicCourse)) {
+            // 根据课程编号查询存在课程判断名称是否一致
+            if (!courseName.equals(basicCourse.getName())) {
+                throw ExceptionResultEnum.ERROR.exception("课程编号为【" + courseCode + "】的课程名称错误");
+            } else {
+                basicCourseId = basicCourse.getId();
+                // 判断重复教学课程
+                if (this.count(new QueryWrapper<TeachCourse>()
+                        .lambda()
+                        .eq(TeachCourse::getSchoolId, schoolId)
+                        .eq(TeachCourse::getUserId, userId)
+                        .eq(TeachCourse::getBasicCourseId, basicCourseId)) > 0) {
+                    throw ExceptionResultEnum.ERROR.exception("课程【" + courseName + "】已经创建");
+                }
+            }
+        } else {
+            // 不存在课程,直接新增一个课程!
+            BasicCourseParams basicCourseParams = new BasicCourseParams();
+            basicCourseParams.setCourseCode(courseCode);
+            basicCourseParams.setCourseName(courseName);
+            basicCourseParams.setTeachingRoomId(requestUser.getOrgId());
+            basicCourseId = basicCourseService.saveBasicCourse(basicCourseParams, requestUser);
+        }
 
         // 唯一性检验
         TeachCourse checkUnique = this.getOne(new QueryWrapper<TeachCourse>()
@@ -83,13 +124,83 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
         return this.save(teachCourse);
     }
 
+    @Transactional
+    @Override
+    public void selectCreate(List<Long> basicCourseIdList, SysUser requestUser) {
+        Long schoolId = requestUser.getSchoolId();
+        Long userId = requestUser.getId();
+        if (CollectionUtils.isNotEmpty(basicCourseIdList)) {
+            basicCourseIdList = basicCourseService.listByIds(basicCourseIdList)
+                    .stream()
+                    .filter(BasicCourse::getEnable)
+                    .map(BaseEntity::getId)
+                    .distinct()
+                    .collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(basicCourseIdList)) {
+                List<Long> alreadyCreated = this.list(new QueryWrapper<TeachCourse>().lambda()
+                                .eq(TeachCourse::getUserId, userId)
+                                .in(TeachCourse::getBasicCourseId, basicCourseIdList))
+                        .stream()
+                        .map(TeachCourse::getBasicCourseId)
+                        .distinct()
+                        .collect(Collectors.toList());
+
+                // 去掉已经创建的教学课程
+                basicCourseIdList.removeAll(alreadyCreated);
+                // 创建教学课程
+                List<TeachCourse> teachCourseList = basicCourseIdList.stream().flatMap(e -> {
+                    TeachCourse teachCourse = new TeachCourse();
+                    teachCourse.setSchoolId(schoolId);
+                    teachCourse.setBasicCourseId(e);
+                    teachCourse.setUserId(userId);
+                    teachCourse.setEnable(true);
+                    teachCourse.insertInfo(userId);
+                    return Stream.of(teachCourse);
+                }).collect(Collectors.toList());
+
+                // 新增课程
+                this.saveBatch(teachCourseList);
+            }
+        }
+    }
+
+    @Transactional
+    @Override
+    public void importTeachCourse(MultipartFile file, SysUser requestUser) throws IOException, NoSuchFieldException {
+        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(TeachCourseDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
+            if (finalExcelErrorList.size() > 0) {
+                throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(finalExcelErrorList));
+            }
+            return finalExcelList;
+        });
+
+        if (Objects.nonNull(finalList) && finalList.size() > 0) {
+            for (int i = 0; i < finalList.size(); i++) {
+                LinkedMultiValueMap<Integer, Object> map = finalList.get(i);
+                List<Object> teachCourseImportDtoList = map.get(i);
+                for (int y = 0; y < Objects.requireNonNull(teachCourseImportDtoList).size(); y++) {
+                    if (teachCourseImportDtoList.get(y) instanceof TeachCourseDto) {
+                        TeachCourseDto teachCourseDto = (TeachCourseDto) teachCourseImportDtoList.get(y);
+                        String courseCode = teachCourseDto.getCourseCode();
+                        String courseName = teachCourseDto.getCourseName();
+                        TeachCourseParams teachCourseParams = new TeachCourseParams();
+                        teachCourseParams.setCourseCode(courseCode);
+                        teachCourseParams.setCourseName(courseName);
+                        this.manualCreate(teachCourseParams,requestUser);
+                    }
+                }
+            }
+        }
+    }
+
     @Override
     public List<DictionaryResult> findBasicCourseByUser(SysUser requestUser) {
         Long userId = requestUser.getId();
         Set<Long> orgIdSet = sysOrgService.findDeepOrgIdListByUserId(userId);
         QueryWrapper<BasicCourse> basicCourseQueryWrapper = new QueryWrapper<>();
         basicCourseQueryWrapper.lambda().eq(BasicCourse::getEnable, true);
-        if (orgIdSet.size() > 0){
+        if (orgIdSet.size() > 0) {
             basicCourseQueryWrapper.lambda().in(BasicCourse::getTeachingRoomId, orgIdSet);
         }
         List<BasicCourse> basicCourseList = basicCourseService.list(basicCourseQueryWrapper);
@@ -105,24 +216,23 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public Boolean deleteTeachCourseBatch(List<Long> idList) {
-        List<TeachClazz> teachClazzList = teachClazzService.list(new QueryWrapper<TeachClazz>().lambda().in(TeachClazz::getTeachCourseId, idList));
-        StringBuilder exception = new StringBuilder();
-        Set<Long> teachCourseIdSet = teachClazzList.stream().map(TeachClazz::getTeachCourseId).collect(Collectors.toSet());
-        for (Long teachCourseId : teachCourseIdSet) {
-            String e = "";
-            List<TeachClazz> cellList = teachClazzList.stream().filter(cell -> teachCourseId.equals(cell.getTeachCourseId())).collect(Collectors.toList());
-            if (cellList.size() > 0) {
-                String clazzNameStr = cellList.stream().map(TeachClazz::getTeachClazzName).collect(Collectors.joining(","));
-                String courseName = basicCourseService.getById(this.getById(teachCourseId).getBasicCourseId()).getName();
-                e = e + "【" + courseName + "】" + "已绑定教学班级【" + clazzNameStr + "】不能删除,请先删除被绑定的教学班级\n";
+    public void deleteTeachCourseBatch(List<Long> idList) {
+        List<Long> basicCourseIdList = this.listByIds(idList).stream().map(TeachCourse::getBasicCourseId).distinct().collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(basicCourseIdList)){
+            List<TeachClazz> teachClazzList = teachClazzService.list(new QueryWrapper<TeachClazz>()
+                    .lambda()
+                    .in(TeachClazz::getBasicCourseId, basicCourseIdList));
+            if (CollectionUtils.isNotEmpty(teachClazzList)){
+                // 教学课程下有教学班不能删除
+                String msg = "";
+                List<Long> existCourseIdList = teachClazzList.stream().map(TeachClazz::getBasicCourseId).distinct().collect(Collectors.toList());
+                msg = basicCourseService.listByIds(existCourseIdList)
+                        .stream()
+                        .map(e -> e.getName() + "(" + e.getCode() + ")")
+                        .collect(Collectors.joining(","));
+                throw ExceptionResultEnum.ERROR.exception("教学课程:【" + msg + "】下存在教学班级不能删除");
             }
-            exception.append(e);
-        }
-        if (teachClazzList.size() > 0) {
-            throw ExceptionResultEnum.ERROR.exception(exception.toString());
+            this.removeByIds(idList);
         }
-        return this.removeByIds(idList);
     }
-
 }

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

@@ -171,7 +171,7 @@ public class TeachStudentServiceImpl extends ServiceImpl<TeachStudentMapper, Tea
                 teachStudent.setSchoolId(basicStudent.getSchoolId());
                 teachStudent.setStudentId(basicStudent.getId());
                 teachStudent.setTeachClazzId(teachClazzId);
-                teachStudent.setTeachCourseId(teachClazz.getTeachCourseId());
+                teachStudent.setTeachCourseId(teachClazz.getBasicCourseId());
                 teachStudent.setUserId(teachClazz.getUserId());
                 teachStudent.insertInfo(requestUser.getId());
                 teachStudentList.add(teachStudent);

+ 11 - 4
distributed-print-business/src/main/resources/db/3.2.3更新脚本-增量.sql

@@ -15,7 +15,7 @@ CREATE TABLE `exam_task_sync` (
     `error_msg` VARCHAR(500) NULL COMMENT '同步失败原因',
     `sync_user_id` BIGINT(20) NULL COMMENT '同步用户ID',
     `sync_start_time` BIGINT(20) NULL COMMENT '同步开始时间 ',
-    `sync_end_time` BIGINT(20) NULL COMMENT '同步结束时间'
+    `sync_end_time` BIGINT(20) NULL COMMENT '同步结束时间',
     PRIMARY KEY (`id`));
 
 DELETE FROM `sys_privilege` WHERE (`id` = '791');
@@ -1121,8 +1121,8 @@ SET parent_id=585
 WHERE id=587;
 
 UPDATE sys_privilege
-SET parent_id=585,
-    WHERE id=588;
+SET parent_id=585
+WHERE id=588;
 
 UPDATE sys_privilege
 SET parent_id=585
@@ -1136,4 +1136,11 @@ delete t from sys_privilege t WHERE t.id=586;
 
 UPDATE sys_privilege
 SET name='管理'
-WHERE id=585;
+WHERE id=585;
+
+/*曹子轩新增*/
+ALTER TABLE `teach_clazz`
+    CHANGE COLUMN `teach_course_id` `basic_course_id` BIGINT NOT NULL COMMENT '基础课程主键' ,
+    DROP INDEX `teach_clazz_unique` ,
+    ADD UNIQUE INDEX `teach_clazz_unique` (`school_id` ASC, `basic_course_id` ASC, `teach_clazz_name` ASC) INVISIBLE;
+;

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

@@ -56,7 +56,6 @@ public class TeachClazzController {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
-        SystemConstant.verifyDBFields(teachClazzParams, teachClazzParams.getClass());
         return ResultUtil.ok(teachClazzService.editTeachClazz(teachClazzParams, requestUser));
     }
 

+ 29 - 8
distributed-print/src/main/java/com/qmth/distributed/print/api/TeachCourseController.java

@@ -18,11 +18,13 @@ import io.swagger.annotations.*;
 import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -51,18 +53,36 @@ public class TeachCourseController {
         return ResultUtil.ok(teachCourseService.teachCoursePage(courseName, pageNumber, pageSize, requestUser.getId()));
     }
 
-    @ApiOperation(value = "教学课程-创建教学课程")
-    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ApiOperation(value = "教学课程-手动添加课程")
+    @RequestMapping(value = "/manual_create", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "创建成功", response = EditResult.class)})
-//    @OperationLogDetail(detail = "创建教学课程,参数[{{teachCourseParams}}]", level = LevelEnum.TERTIARY, operationType = OperationTypeEnum.EDIT, operationUnit = OperationUnitEnum.TEACH_COURSE)
-    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.ADD)
-    public Result createTeachCourse(@Valid @RequestBody TeachCourseParams teachCourseParams, BindingResult bindingResult) throws IllegalAccessException {
+    @OperationLogDetail(detail = "手动添加教学课程,参数[{{teachCourseParams}}]", customizedOperationType = CustomizedOperationTypeEnum.ADD)
+    public Result manualCreate(@Valid @RequestBody TeachCourseParams teachCourseParams, BindingResult bindingResult) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
-        SystemConstant.verifyDBFields(teachCourseParams, teachCourseParams.getClass());
-        return ResultUtil.ok(teachCourseService.createTeachCourse(teachCourseParams.getBasicCourseId(), requestUser));
+        return ResultUtil.ok(teachCourseService.manualCreate(teachCourseParams, requestUser));
+    }
+
+    @ApiOperation(value = "教学课程-课程表选择教学课程")
+    @RequestMapping(value = "/select_create", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "创建成功", response = EditResult.class)})
+    @OperationLogDetail(detail = "从课程表选择并创建教学课程,参数[{{basicCourseIdList}}]", customizedOperationType = CustomizedOperationTypeEnum.ADD)
+    public Result selectCreate(@ApiParam(value = "基础课程id", required = true) @RequestParam List<Long> basicCourseIdList) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        teachCourseService.selectCreate(basicCourseIdList, requestUser);
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "教学课程-教学课程批量导入")
+    @RequestMapping(value = "/import", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "创建成功", response = EditResult.class)})
+    @OperationLogDetail(detail = "教学课程批量导入", customizedOperationType = CustomizedOperationTypeEnum.ADD)
+    public Result importTeachCourse(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws IOException, NoSuchFieldException {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        teachCourseService.importTeachCourse(file, requestUser);
+        return ResultUtil.ok();
     }
 
     @ApiOperation(value = "教学课程-查找基础课程")
@@ -79,6 +99,7 @@ public class TeachCourseController {
     @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
     @OperationLogDetail(detail = "用户根据教学课程id集合[{{idList}}]批量删除教学课程", level = LevelEnum.TERTIARY, operationType = OperationTypeEnum.DELETE, operationUnit = OperationUnitEnum.TEACH_COURSE, customizedOperationType = CustomizedOperationTypeEnum.DELETE)
     public Result deleteTeachCourse(@ApiParam(value = "选择的要删除的课程id集合", required = true) @RequestParam List<Long> idList) {
-        return ResultUtil.ok(teachCourseService.deleteTeachCourseBatch(idList));
+        teachCourseService.deleteTeachCourseBatch(idList);
+        return ResultUtil.ok();
     }
 }