Jelajahi Sumber

字典管理 - 班级管理

caozixuan 3 tahun lalu
induk
melakukan
a99b775896
25 mengubah file dengan 991 tambahan dan 118 penghapusan
  1. 0 12
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/excel/BasicStudentImportDto.java
  2. 5 18
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/BasicStudentParams.java
  3. 6 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/BasicStudent.java
  4. 20 39
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicStudentServiceImpl.java
  5. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java
  6. 72 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncBasicClazzImportService.java
  7. 8 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/TaskLogicService.java
  8. 46 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  9. 1 1
      distributed-print-business/src/main/resources/mapper/BasicStudentMapper.xml
  10. 83 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicClazzController.java
  11. 3 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicStudentController.java
  12. 36 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/excel/BasicClazzImportDto.java
  13. 67 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/BasicClazzParams.java
  14. 5 5
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/BasicCourseParams.java
  15. 127 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/BasicClazzResult.java
  16. 95 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicClazz.java
  17. 6 6
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicUserCourse.java
  18. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/TaskTypeEnum.java
  19. 23 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/BasicClazzMapper.java
  20. 52 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicClazzService.java
  21. 2 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicUserCourseService.java
  22. 255 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicClazzServiceImpl.java
  23. 24 20
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java
  24. 11 3
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicUserCourseServiceImpl.java
  25. 40 0
      teachcloud-common/src/main/resources/mapper/BasicClazzMapper.xml

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

@@ -21,10 +21,6 @@ public class BasicStudentImportDto {
     @ExcelNote(value = "手机号")
     private String phoneNumber;
 
-    @ExcelNote(value = "校区")
-    @NotNull
-    private String campusName;
-
     @ExcelNote(value = "班级")
     @NotNull
     private String clazz;
@@ -53,14 +49,6 @@ public class BasicStudentImportDto {
         this.phoneNumber = phoneNumber;
     }
 
-    public String getCampusName() {
-        return campusName;
-    }
-
-    public void setCampusName(String campusName) {
-        this.campusName = campusName;
-    }
-
     public String getClazz() {
         return clazz;
     }

+ 5 - 18
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/BasicStudentParams.java

@@ -35,15 +35,10 @@ public class BasicStudentParams {
     private String phoneNumber;
 
     @JsonSerialize(using = ToStringSerializer.class)
-    @ApiModelProperty(value = "校区主键")
-    @NotNull(message = "请选择校区")
-    @Range(min = 1L, message = "请选择校区")
-    private Long campusId;
-
     @ApiModelProperty(value = "班级信息")
     @NotNull(message = "请输入班级信息")
     @Length(min = 1,message = "请输入班级信息")
-    private String clazz;
+    private Long clazzId;
 
     public Long getId() {
         return id;
@@ -77,19 +72,11 @@ public class BasicStudentParams {
         this.phoneNumber = phoneNumber;
     }
 
-    public Long getCampusId() {
-        return campusId;
-    }
-
-    public void setCampusId(Long campusId) {
-        this.campusId = campusId;
-    }
-
-    public String getClazz() {
-        return clazz;
+    public Long getClazzId() {
+        return clazzId;
     }
 
-    public void setClazz(String clazz) {
-        this.clazz = clazz;
+    public void setClazzId(Long clazzId) {
+        this.clazzId = clazzId;
     }
 }

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

@@ -40,8 +40,8 @@ public class BasicStudent extends BaseEntity implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long campusId;
 
-    @ApiModelProperty(value = "班级")
-    private String clazz;
+    @ApiModelProperty(value = "班级id")
+    private Long clazzId;
 
     @ApiModelProperty(value = "可用状态(1:可用,0:不可用)")
     private Boolean enable;
@@ -95,12 +95,12 @@ public class BasicStudent extends BaseEntity implements Serializable {
         this.campusId = campusId;
     }
 
-    public String getClazz() {
-        return clazz;
+    public Long getClazzId() {
+        return clazzId;
     }
 
-    public void setClazz(String clazz) {
-        this.clazz = clazz;
+    public void setClazzId(Long clazzId) {
+        this.clazzId = clazzId;
     }
 
     public Boolean getEnable() {

+ 20 - 39
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicStudentServiceImpl.java

@@ -9,12 +9,13 @@ import com.qmth.distributed.print.business.bean.dto.TaskPrintClassDto;
 import com.qmth.distributed.print.business.bean.dto.excel.BasicStudentImportDto;
 import com.qmth.distributed.print.business.bean.params.BasicStudentParams;
 import com.qmth.distributed.print.business.bean.result.BasicStudentResult;
+import com.qmth.teachcloud.common.entity.BasicClazz;
 import com.qmth.distributed.print.business.entity.BasicStudent;
 import com.qmth.distributed.print.business.mapper.BasicStudentMapper;
+import com.qmth.teachcloud.common.service.BasicClazzService;
 import com.qmth.distributed.print.business.service.BasicStudentService;
 import com.qmth.teachcloud.common.bean.dto.excel.DescribeImportDto;
 import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.entity.BasicCampus;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.service.BasicCampusService;
@@ -45,6 +46,8 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
     private TeachcloudCommonService teachcloudCommonService;
     @Resource
     private BasicCampusService basicCampusService;
+    @Resource
+    private BasicClazzService basicClazzService;
 
     @Override
     public IPage<BasicStudentResult> basicStudentPage(String queryParams, int pageNumber, int pageSize) {
@@ -58,7 +61,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
     public IPage<BasicStudent> listPage(Page<BasicStudent> page, String classId) {
         List<String> classIds = Arrays.asList(classId.split(","));
         QueryWrapper<BasicStudent> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().in(BasicStudent::getClazz, classIds).orderByAsc(BasicStudent::getClazz, BasicStudent::getStudentCode);
+        queryWrapper.lambda().in(BasicStudent::getClazzId, classIds).orderByAsc(BasicStudent::getClazzId, BasicStudent::getStudentCode);
         return this.baseMapper.selectPage(page, queryWrapper);
     }
 
@@ -87,7 +90,6 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
         UpdateWrapper<BasicStudent> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda()
                 .set(BasicStudent::getEnable, false)
-                .set(BasicStudent::getOrgId, sysUser.getOrgId())
                 .set(BasicStudent::getUpdateId, sysUser.getId())
                 .in(BasicStudent::getId, idList);
         return this.update(updateWrapper);
@@ -115,30 +117,6 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
             }).collect(Collectors.toList());
             map.put("dataCount", datasource.size());
 
-
-            // 新校区名称集合
-            Set<String> newCampusNameSet = datasource.stream().map(BasicStudentImportDto::getCampusName).collect(Collectors.toSet());
-            // 旧校区集合
-            List<BasicCampus> basicCampusList = basicCampusService.list(new QueryWrapper<BasicCampus>().lambda().eq(BasicCampus::getEnable, true).eq(BasicCampus::getSchoolId, schoolId));
-            Set<String> oldCampusNameSet = basicCampusList.stream().map(BasicCampus::getCampusName).collect(Collectors.toSet());
-
-            // 需要新增的校区集合
-            Set<String> addCampusNameSet = newCampusNameSet.stream().filter(e -> !oldCampusNameSet.contains(e)).collect(Collectors.toSet());
-            List<BasicCampus> addBasicCampusList = new ArrayList<>();
-            for (String campusName : addCampusNameSet) {
-                BasicCampus basicCampus = new BasicCampus();
-                Long id = SystemConstant.getDbUuid();
-                basicCampus.setSchoolId(schoolId);
-                basicCampus.setCampusName(campusName);
-                basicCampus.setId(id);
-                basicCampus.setCampusCode(String.valueOf(id));
-                basicCampus.setEnable(true);
-                basicCampus.setCreateId(sysUser.getId());
-                addBasicCampusList.add(basicCampus);
-            }
-            // 批量新增校区
-            basicCampusService.saveBatch(addBasicCampusList);
-
             for (int y = 0; y < Objects.requireNonNull(basicStudentImportDtoList).size(); y++) {
                 BasicStudentImportDto basicStudentImportDto = (BasicStudentImportDto) basicStudentImportDtoList.get(y);
 
@@ -146,20 +124,21 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
                 String studentName = basicStudentImportDto.getStudentName();
                 String studentCode = basicStudentImportDto.getStudentCode();
                 String phoneNumber = basicStudentImportDto.getPhoneNumber();
-                String campusName = basicStudentImportDto.getCampusName();
                 String clazz = basicStudentImportDto.getClazz();
+                BasicClazz basicClazz = basicClazzService.getOne(new QueryWrapper<BasicClazz>().lambda()
+                        .eq(BasicClazz::getEnable,true)
+                        .eq(BasicClazz::getClazzName,clazz)
+                        .eq(BasicClazz::getSchoolId,schoolId));
+                if (Objects.isNull(basicClazz)){
+                    throw ExceptionResultEnum.ERROR.exception("【班级】" + clazz + "还没有构建");
+                }
 
 
                 BasicStudentParams basicStudentParams = new BasicStudentParams();
-                basicStudentParams.setCampusId(basicCampusService.getOne(new QueryWrapper<BasicCampus>().lambda()
-                        .eq(BasicCampus::getSchoolId, schoolId)
-                        .eq(BasicCampus::getCampusName, campusName)
-                        .eq(BasicCampus::getEnable, true))
-                        .getId());
                 basicStudentParams.setStudentName(studentName);
                 basicStudentParams.setStudentCode(studentCode);
                 basicStudentParams.setPhoneNumber(phoneNumber);
-                basicStudentParams.setClazz(clazz);
+                basicStudentParams.setClazzId(basicClazz.getId());
 
                 BasicStudent tmp = this.getOne(new QueryWrapper<BasicStudent>().lambda()
                         .eq(BasicStudent::getSchoolId, sysUser.getSchoolId())
@@ -193,11 +172,13 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
             String studentName = basicStudentParams.getStudentName();
             String studentCode = basicStudentParams.getStudentCode();
             String phoneNumber = basicStudentParams.getPhoneNumber();
-            Long campusId = basicStudentParams.getCampusId();
-            if (Objects.isNull(basicCampusService.getById(campusId))) {
-                throw ExceptionResultEnum.ERROR.exception("所选校区不存在");
+            Long clazzId = basicStudentParams.getClazzId();
+            BasicClazz basicClazz = basicClazzService.getById(clazzId);
+            if (Objects.isNull(basicClazz)) {
+                throw ExceptionResultEnum.ERROR.exception("所选班级不存在");
             }
-            String clazz = basicStudentParams.getClazz();
+
+            Long campusId = basicClazz.getCampusId();
             Long id = basicStudentParams.getId();
 
             // 检验学号在学校的唯一性
@@ -231,7 +212,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
             basicStudent.setStudentName(studentName);
             basicStudent.setPhoneNumber(phoneNumber);
             basicStudent.setCampusId(campusId);
-            basicStudent.setClazz(clazz);
+            basicStudent.setClazzId(clazzId);
             basicStudent.setSchoolId(schoolId);
 
             // 保存

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

@@ -271,7 +271,7 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
     public List<TaskPrintClassDto> listClass(String printPlanId, String courseCode, String campusId, String paperNumber, Long examTaskPrintId) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         List<BasicUserCourse> courseList = basicUserCourseService.listBySchoolIdAndCourseCode(schoolId, courseCode);
-        Set<String> stringList = courseList.stream().map(m -> m.getClazz()).collect(Collectors.toSet());
+        Set<String> stringList = courseList.stream().map(m -> String.valueOf(m.getClazzId())).collect(Collectors.toSet());
 
         if (!CollectionUtils.isEmpty(stringList)) {
             QueryWrapper<ExamTaskPrint> examTaskPrintQueryWrapper = new QueryWrapper<>();
@@ -350,7 +350,7 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
 
     private void saveBatchStudent(ExamTaskPrint examTaskPrint, List<String> classIds, Long examDetailCourseId, SysUser sysUser) {
         QueryWrapper<BasicStudent> queryWrapper1 = new QueryWrapper<>();
-        queryWrapper1.lambda().eq(BasicStudent::getSchoolId, examTaskPrint.getSchoolId()).in(BasicStudent::getClazz, classIds);
+        queryWrapper1.lambda().eq(BasicStudent::getSchoolId, examTaskPrint.getSchoolId()).in(BasicStudent::getClazzId, classIds);
         List<BasicStudent> basicStudents = basicStudentService.list(queryWrapper1);
         AtomicInteger atomicInteger = new AtomicInteger(1);
         List<ExamStudent> examStudents = new ArrayList<>();

+ 72 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncBasicClazzImportService.java

@@ -0,0 +1,72 @@
+package com.qmth.distributed.print.business.templete.execute;
+
+import cn.hutool.core.date.DateUtil;
+import com.qmth.boot.api.exception.ApiException;
+import com.qmth.distributed.print.business.templete.importData.AsyncImportTaskTemplete;
+import com.qmth.distributed.print.business.templete.service.TaskLogicService;
+import com.qmth.teachcloud.common.contant.SpringContextHolder;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.TBTask;
+import com.qmth.teachcloud.common.enums.TaskResultEnum;
+import com.qmth.teachcloud.common.enums.TaskStatusEnum;
+import com.qmth.teachcloud.common.service.TBTaskService;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.MessageFormat;
+import java.util.Date;
+import java.util.Map;
+import java.util.StringJoiner;
+
+/**
+ * @Description: 异步-班级基础信息导入
+ * @Author: CaoZixuan
+ * @Date: 2021-08-28
+ */
+@Service
+public class AsyncBasicClazzImportService extends AsyncImportTaskTemplete {
+
+    private final static Logger log = LoggerFactory.getLogger(AsyncStudentDataImportService.class);
+
+    public static final String OBJ_TITLE = "班级基础数据";
+    @Override
+    public Result importTask(Map<String, Object> map) throws IOException, Exception {
+        TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
+        InputStream inputStream = super.getUploadFileInputStream(tbTask);
+        map.put("inputStream",inputStream);
+
+        StringJoiner stringJoinerSummary = new StringJoiner("\n")
+                .add(MessageFormat.format("{0}{1}{2}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), BEGIN_TITLE, OBJ_TITLE));
+        tbTask.setStatus(TaskStatusEnum.RUNNING);
+        TBTaskService tbTaskService = SpringContextHolder.getBean(TBTaskService.class);
+        tbTaskService.updateById(tbTask);
+        try {
+            TaskLogicService taskLogicService = SpringContextHolder.getBean(TaskLogicService.class);
+
+            // 执行导入基础学生数据
+            Map<String, Object> result = taskLogicService.executeImportBasicClazzLogic(map);
+
+
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), FINISH_TITLE, Long.valueOf(String.valueOf(result.get("dataCount"))), FINISH_SIZE));
+            tbTask.setResult(TaskResultEnum.SUCCESS);
+        }catch (Exception e){
+            log.error("请求出错", e);
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), EXCEPTION_TITLE, EXCEPTION_DATA, e.getMessage()));
+            tbTask.setResult(TaskResultEnum.ERROR);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {//生成txt文件
+            tbTask.setSummary(stringJoinerSummary.toString());
+            super.createTxt(tbTask);
+        }
+        return ResultUtil.ok(map);
+    }
+}

+ 8 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/TaskLogicService.java

@@ -86,4 +86,12 @@ public interface TaskLogicService {
      * @throws Exception 异常
      */
     Map<String,Object> executeImportSysUserLogic(Map<String,Object> map) throws Exception;
+
+    /**
+     * 处理导入基础班级数据
+     * @param map 数据源
+     * @return 结果
+     * @throws Exception 异常
+     */
+    Map<String,Object> executeImportBasicClazzLogic(Map<String,Object> map) throws Exception;
 }

+ 46 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -12,6 +12,7 @@ import com.google.common.collect.Lists;
 import com.itextpdf.text.DocumentException;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.*;
+import com.qmth.teachcloud.common.bean.dto.excel.BasicClazzImportDto;
 import com.qmth.teachcloud.common.bean.dto.excel.BasicCourseImportDto;
 import com.qmth.distributed.print.business.bean.dto.excel.BasicStudentImportDto;
 import com.qmth.distributed.print.business.bean.params.SerialNumberParams;
@@ -154,6 +155,9 @@ public class TaskLogicServiceImpl implements TaskLogicService {
     @Resource
     FileStoreUtil fileStoreUtil;
 
+    @Resource
+    BasicClazzService basicClazzService;
+
 
     /**
      * 创建pdf前置条件
@@ -1117,7 +1121,6 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     String studentName = basicStudentImportDto.getStudentName();
                     String studentCode = basicStudentImportDto.getStudentCode();
                     String phoneNumber = basicStudentImportDto.getPhoneNumber();
-                    String campusName = basicStudentImportDto.getCampusName();
                     String clazz = basicStudentImportDto.getClazz();
 
                     // 检验excel中
@@ -1267,6 +1270,48 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         return sysUserService.executeSysUserImportLogic(finalList, map);
     }
 
+    @Transactional
+    @Override
+    public Map<String, Object> executeImportBasicClazzLogic(Map<String, Object> map) throws Exception {
+        InputStream inputStream = (InputStream) map.get("inputStream");
+        System.out.println(inputStream);
+        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(BasicClazzImportDto.class,DescribeImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
+            List<ExcelError> excelErrorTemp = new ArrayList<>();
+            Map<String, String> checkNameMap = new HashMap<>();
+            for (int i = 0; i < finalExcelList.size(); i++) {
+                LinkedMultiValueMap<Integer, Object> excelMap = finalExcelList.get(i);
+                List<Object> basicClazzImportDtoList = excelMap.get(i);
+                assert basicClazzImportDtoList != null;
+                if (basicClazzImportDtoList.get(0) instanceof DescribeImportDto){
+                    continue;
+                }
+                for (int y = 0; y < Objects.requireNonNull(basicClazzImportDtoList).size(); y++) {
+                    BasicClazzImportDto basicClazzImportDto = (BasicClazzImportDto) basicClazzImportDtoList.get(y);
+                    String clazzName = basicClazzImportDto.getClazzName();
+                    String campusName = basicClazzImportDto.getCampusName();
+
+                    // 检验excel中
+                    // 检验学号
+                    if (checkNameMap.containsKey(clazzName)) {
+                        throw ExceptionResultEnum.ERROR.exception("导入的excel中包含在重复的【班级名称】:" + clazzName);
+                    } else {
+                        checkNameMap.put(clazzName, campusName);
+                    }
+
+                    excelErrorTemp.addAll(ExcelUtil.checkExcelField(basicClazzImportDto, y, i));
+                    if (Objects.isNull(clazzName) || clazzName.length() > 50) {
+                        excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[学号]不符合输入规范"));
+                    }
+                }
+            }
+            if (excelErrorTemp.size() > 0) {
+                throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(excelErrorTemp));
+            }
+            return finalExcelList;
+        });
+        return basicClazzService.executeBasicClazzImportLogic(finalList, map);
+    }
+
 
     public String createTempNumber(SerialNumberParams serialNumberParams) {
         return convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit());

+ 1 - 1
distributed-print-business/src/main/resources/mapper/BasicStudentMapper.xml

@@ -40,7 +40,7 @@
                 AND cam.enable = TRUE
         <where>
             and stu.enable = true
-            <if test="queryParams != null and queryParams.length > 0">
+            <if test="queryParams != null and queryParams != ''">
                 and student_name like concat('%',#{queryParams},'%') or student_code like concat('%',#{queryParams},'%')
             </if>
             <if test="schoolId != null and schoolId > 0">

+ 83 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicClazzController.java

@@ -0,0 +1,83 @@
+package com.qmth.distributed.print.api;
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.bean.params.BasicClazzParams;
+import com.qmth.distributed.print.business.bean.result.EditResult;
+import com.qmth.teachcloud.common.service.BasicClazzService;
+import com.qmth.distributed.print.business.service.PrintCommonService;
+import com.qmth.distributed.print.business.templete.execute.AsyncBasicClazzImportService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.entity.TBTask;
+import com.qmth.teachcloud.common.enums.TaskTypeEnum;
+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.BindingResult;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @Description: 基础班级管理前端控制器
+ * @Author: CaoZixuan
+ * @Date: 2021-08-28
+ */
+@Api(tags = "班级管理controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.basic}/clazz")
+//@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
+public class BasicClazzController {
+    @Resource
+    private BasicClazzService basicClazzService;
+    @Resource
+    private PrintCommonService printCommonService;
+    @Resource
+    private AsyncBasicClazzImportService asyncBasicClazzImportService;
+
+    @ApiOperation(value = "班级基本信息管理-查询")
+    @RequestMapping(value = "/query", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findBasicClazzList(@ApiParam(value = "查询参数(班级号或班级名)") @RequestParam(required = false) String queryParams,
+                                      @ApiParam(value = "分页页码", required = true) @RequestParam int pageNumber,
+                                      @ApiParam(value = "分页数", required = true) @RequestParam int pageSize) {
+        return ResultUtil.ok(basicClazzService.basicClazzPage(queryParams, pageNumber, pageSize));
+    }
+
+    @ApiOperation(value = "班级基本信息管理-新增/编辑")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = EditResult.class)})
+    public Result saveBasicClazz(@Valid @RequestBody BasicClazzParams basicClazzParams, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(basicClazzService.saveBasicClazz(basicClazzParams,sysUser));
+    }
+
+    @ApiOperation(value = "班级基本信息管理-批量删除(逻辑)")
+    @RequestMapping(value = "/delete_batch", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    public Result deleteBasicClazz(@ApiParam(value = "选择的要删除的班级id集合",required = true) @RequestParam List<Long> idList) {
+        return ResultUtil.ok(basicClazzService.removeBasicClazzBatch(idList));
+    }
+
+    @ApiOperation(value = "班级基本信息管理-批量导入(异步)")
+    @RequestMapping(value = "/data_import", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    public Result basicClazzImportAysnc(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws Exception {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Map<String, Object> map = printCommonService.saveTask(file, TaskTypeEnum.CLAZZ_IMPORT);
+        map.put(SystemConstant.SYS_USER,sysUser);
+
+        asyncBasicClazzImportService.importTask(map);
+        TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
+        return Objects.nonNull(tbTask) ? ResultUtil.ok(tbTask.getId()) : ResultUtil.error("创建任务失败");
+    }
+}

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

@@ -50,7 +50,7 @@ public class BasicStudentController {
     @ApiOperation(value = "学生基本信息管理-查询")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result findBasicCampusList(@ApiParam(value = "查询参数(学生学号或姓名)") @RequestParam(required = false) String queryParams,
+    public Result findBasicStudentList(@ApiParam(value = "查询参数(学生学号或姓名)") @RequestParam(required = false) String queryParams,
                                       @ApiParam(value = "分页页码", required = true) @RequestParam int pageNumber,
                                       @ApiParam(value = "分页数", required = true) @RequestParam int pageSize) {
         return ResultUtil.ok(basicStudentService.basicStudentPage(queryParams, pageNumber, pageSize));
@@ -59,7 +59,7 @@ public class BasicStudentController {
     @ApiOperation(value = "学生基本信息管理-新增/编辑")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = EditResult.class)})
-    public Result saveBasicCampus(@Valid @RequestBody BasicStudentParams basicStudentParams, BindingResult bindingResult) {
+    public Result saveBasicStudent(@Valid @RequestBody BasicStudentParams basicStudentParams, BindingResult bindingResult) {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
@@ -70,7 +70,7 @@ public class BasicStudentController {
     @ApiOperation(value = "学生基本信息管理-批量删除(逻辑)")
     @RequestMapping(value = "/delete_batch", 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 deleteBasicStudent(@ApiParam(value = "选择的要删除的学生id集合",required = true) @RequestParam List<Long> idList) {
         return ResultUtil.ok(basicStudentService.removeBasicStudentBatch(idList));
     }
 

+ 36 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/excel/BasicClazzImportDto.java

@@ -0,0 +1,36 @@
+package com.qmth.teachcloud.common.bean.dto.excel;
+
+import com.qmth.teachcloud.common.annotation.ExcelNote;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description: 基础课程导入
+ * @Author: CaoZixuan
+ * @Date: 2021-08-28
+ */
+public class BasicClazzImportDto {
+    @ExcelNote(value = "班级名称")
+    @NotNull
+    private String clazzName;
+
+    @ExcelNote(value = "校区名称")
+    @NotNull
+    private String campusName;
+
+    public String getClazzName() {
+        return clazzName;
+    }
+
+    public void setClazzName(String clazzName) {
+        this.clazzName = clazzName;
+    }
+
+    public String getCampusName() {
+        return campusName;
+    }
+
+    public void setCampusName(String campusName) {
+        this.campusName = campusName;
+    }
+}

+ 67 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/BasicClazzParams.java

@@ -0,0 +1,67 @@
+package com.qmth.teachcloud.common.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Length;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description: 基础班级参数
+ * @Author: CaoZixuan
+ * @Date: 2021-08-28
+ */
+public class BasicClazzParams {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "班级id(修改时必填)")
+    private Long id;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "校区主键")
+    @NotNull(message = "请选择校区")
+    @Range(min = 1L, message = "请选择校区")
+    private Long campusId;
+
+    @ApiModelProperty(value = "班级编号")
+    private String clazzCode;
+
+    @ApiModelProperty(value = "班级名称")
+    @NotNull(message = "请输入班级名称")
+    @Length(min = 1,message = "请输入班级名称")
+    private String clazzName;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getCampusId() {
+        return campusId;
+    }
+
+    public void setCampusId(Long campusId) {
+        this.campusId = campusId;
+    }
+
+    public String getClazzCode() {
+        return clazzCode;
+    }
+
+    public void setClazzCode(String clazzCode) {
+        this.clazzCode = clazzCode;
+    }
+
+    public String getClazzName() {
+        return clazzName;
+    }
+
+    public void setClazzName(String clazzName) {
+        this.clazzName = clazzName;
+    }
+}

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

@@ -39,7 +39,7 @@ public class BasicCourseParams {
 
     @ApiModelProperty(value = "授课班级集合")
     @NotEmpty(message = "请输入班级名称")
-    private List<String> clazzList;
+    private List<Long> clazzIdList;
 
     public Long getId() {
         return id;
@@ -73,11 +73,11 @@ public class BasicCourseParams {
         this.teachingRoomId = teachingRoomId;
     }
 
-    public List<String> getClazzList() {
-        return clazzList;
+    public List<Long> getClazzIdList() {
+        return clazzIdList;
     }
 
-    public void setClazzList(List<String> clazzList) {
-        this.clazzList = clazzList;
+    public void setClazzIdList(List<Long> clazzIdList) {
+        this.clazzIdList = clazzIdList;
     }
 }

+ 127 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/BasicClazzResult.java

@@ -0,0 +1,127 @@
+package com.qmth.teachcloud.common.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: 2021-08-28
+ */
+public class BasicClazzResult {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "学生id")
+    private Long id;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "学校id")
+    private String schoolId;
+
+    @ApiModelProperty(value = "班级编号")
+    private String clazzCode;
+
+    @ApiModelProperty(value = "班级名称")
+    private String clazzName;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "校区id")
+    private String campusId;
+
+    @ApiModelProperty(value = "校区名称")
+    private String campusName;
+
+    @ApiModelProperty(value = "校区编号")
+    private String campusCode;
+
+    @ApiModelProperty(value = "是否被逻辑删除?")
+    private Boolean enable;
+
+    @ApiModelProperty(value = "创建时间")
+    private Long createTime;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "创建人id")
+    private Long createId;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(String schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public String getClazzCode() {
+        return clazzCode;
+    }
+
+    public void setClazzCode(String clazzCode) {
+        this.clazzCode = clazzCode;
+    }
+
+    public String getClazzName() {
+        return clazzName;
+    }
+
+    public void setClazzName(String clazzName) {
+        this.clazzName = clazzName;
+    }
+
+    public String getCampusId() {
+        return campusId;
+    }
+
+    public void setCampusId(String campusId) {
+        this.campusId = campusId;
+    }
+
+    public String getCampusName() {
+        return campusName;
+    }
+
+    public void setCampusName(String campusName) {
+        this.campusName = campusName;
+    }
+
+    public String getCampusCode() {
+        return campusCode;
+    }
+
+    public void setCampusCode(String campusCode) {
+        this.campusCode = campusCode;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+
+    public Long getCreateId() {
+        return createId;
+    }
+
+    public void setCreateId(Long createId) {
+        this.createId = createId;
+    }
+}

+ 95 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicClazz.java

@@ -0,0 +1,95 @@
+package com.qmth.teachcloud.common.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+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: 2021-08-28
+ */
+@ApiModel(value = "BasicStudent对象", description = "学校id")
+public class BasicClazz 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 campusId;
+
+    @ApiModelProperty(value = "班级编号")
+    private String clazzCode;
+
+    @ApiModelProperty(value = "班级名称")
+    private String clazzName;
+
+    @ApiModelProperty(value = "是否可用")
+    private Boolean enable;
+
+    @ApiModelProperty(value = "权限机构id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(value = "org_id", updateStrategy = FieldStrategy.IGNORED)
+    private Long orgId;
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public Long getCampusId() {
+        return campusId;
+    }
+
+    public void setCampusId(Long campusId) {
+        this.campusId = campusId;
+    }
+
+    public String getClazzCode() {
+        return clazzCode;
+    }
+
+    public void setClazzCode(String clazzCode) {
+        this.clazzCode = clazzCode;
+    }
+
+    public String getClazzName() {
+        return clazzName;
+    }
+
+    public void setClazzName(String clazzName) {
+        this.clazzName = clazzName;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public Long getOrgId() {
+        return orgId;
+    }
+
+    public void setOrgId(Long orgId) {
+        this.orgId = orgId;
+    }
+}

+ 6 - 6
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicUserCourse.java

@@ -46,8 +46,8 @@ public class BasicUserCourse extends BaseEntity implements Serializable {
     private Long courseId;
 
     @ApiModelProperty(value = "授课班级")
-    @TableField("clazz")
-    private String clazz;
+    @TableField("clazz_id")
+    private Long clazzId;
 
     public static long getSerialVersionUID() {
         return serialVersionUID;
@@ -85,11 +85,11 @@ public class BasicUserCourse extends BaseEntity implements Serializable {
         this.courseId = courseId;
     }
 
-    public String getClazz() {
-        return clazz;
+    public Long getClazzId() {
+        return clazzId;
     }
 
-    public void setClazz(String clazz) {
-        this.clazz = clazz;
+    public void setClazzId(Long clazzId) {
+        this.clazzId = clazzId;
     }
 }

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/TaskTypeEnum.java

@@ -17,6 +17,8 @@ public enum TaskTypeEnum {
 
     COURSE_IMPORT("课程导入"),
 
+    CLAZZ_IMPORT("班级导入"),
+
     QUESTION_MISSION_BATCH_CREATE("批量新建命题任务"),
 
     SAMPLE_EXPORT("导出审核样本"),

+ 23 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/BasicClazzMapper.java

@@ -0,0 +1,23 @@
+package com.qmth.teachcloud.common.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.teachcloud.common.bean.result.BasicClazzResult;
+import com.qmth.teachcloud.common.entity.BasicClazz;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Set;
+
+/**
+ * @Description: 基础课程管理mapper 接口
+ * @Author: CaoZixuan
+ * @Date: 2021-08-28
+ */
+public interface BasicClazzMapper extends BaseMapper<BasicClazz> {
+
+    IPage<BasicClazzResult> findBasicClazzPage(@Param("iPage") Page<BasicClazzResult> iPage,
+                                                   @Param("queryParams") String queryParams,
+                                                   @Param("schoolId") Long schoolId,
+                                                   @Param("orgIds") Set<Long> orgIds);
+}

+ 52 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicClazzService.java

@@ -0,0 +1,52 @@
+package com.qmth.teachcloud.common.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.teachcloud.common.bean.params.BasicClazzParams;
+import com.qmth.teachcloud.common.bean.result.BasicClazzResult;
+import com.qmth.teachcloud.common.entity.BasicClazz;
+import com.qmth.teachcloud.common.entity.SysUser;
+import org.springframework.util.LinkedMultiValueMap;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 基础班级service
+ * @Author: CaoZixuan
+ * @Date: 2021-08-28
+ */
+public interface BasicClazzService extends IService<BasicClazz> {
+    /**
+     * 班级基础信息分页查询
+     * @param queryParams 查询参数(班级号或名称)
+     * @param pageNumber 分页页码
+     * @param pageSize 分页容量
+     * @return 分页结果
+     */
+    IPage<BasicClazzResult> basicClazzPage(String queryParams, int pageNumber, int pageSize);
+
+    /**
+     * 新增/编辑 学生基础信息
+     * @param basicClazzParams 基础学生信息参数
+     * @param sysUser 创建人信息
+     * @return 新增或编辑的班级id
+     */
+    Long saveBasicClazz(BasicClazzParams basicClazzParams, SysUser sysUser);
+
+    /**
+     * 批量删除班级基本信息(逻辑)
+     * @param idList 要删除的班级主键集合
+     * @return 是否删除成功
+     */
+    Boolean removeBasicClazzBatch(List<Long> idList);
+
+    /**
+     * 执行批量导入班级逻辑
+     *
+     * @param finalList 基础班级数据集合
+     * @param map       参数
+     * @return 结果
+     */
+    Map<String, Object> executeBasicClazzImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map);
+}

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

@@ -24,11 +24,11 @@ public interface BasicUserCourseService extends IService<BasicUserCourse> {
      * 根据课程id和班级集合更新'basic_user_course'表
      * 逻辑:课程id查询出所有该课程相关记录并删除,添加和班级对应关系
      * @param courseId 课程id
-     * @param clazzList 班级集合
+     * @param clazzIdList 班级集合
      * @param sysUser 执行人
      * @param orgId 机构权限id
      */
-    void updateByCourseIdAndClazzList(Long courseId, List<String> clazzList,SysUser sysUser,Long orgId);
+    void updateByCourseIdAndClazzList(Long courseId, List<Long> clazzIdList,SysUser sysUser,Long orgId);
 
     List<BasicUserCourse> listBySchoolIdAndCourseCode(Long schoolId, String courseCode);
 }

+ 255 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicClazzServiceImpl.java

@@ -0,0 +1,255 @@
+package com.qmth.teachcloud.common.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.bean.dto.excel.BasicClazzImportDto;
+import com.qmth.teachcloud.common.bean.dto.excel.DescribeImportDto;
+import com.qmth.teachcloud.common.bean.params.BasicClazzParams;
+import com.qmth.teachcloud.common.bean.result.BasicClazzResult;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicCampus;
+import com.qmth.teachcloud.common.entity.BasicClazz;
+import com.qmth.teachcloud.common.entity.BasicUserCourse;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.mapper.BasicClazzMapper;
+import com.qmth.teachcloud.common.service.BasicCampusService;
+import com.qmth.teachcloud.common.service.BasicClazzService;
+import com.qmth.teachcloud.common.service.BasicUserCourseService;
+import com.qmth.teachcloud.common.service.TeachcloudCommonService;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import org.apache.tomcat.util.buf.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.LinkedMultiValueMap;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * @Description: 基础课程服务实现类
+ * @Author: CaoZixuan
+ * @Date: 2021-08-28
+ */
+@Service
+public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicClazz> implements BasicClazzService {
+    @Resource
+    private BasicClazzMapper basicClazzMapper;
+    @Resource
+    private TeachcloudCommonService teachcloudCommonService;
+//    @Resource
+//    private BasicStudentService basicStudentService;
+    @Resource
+    private BasicUserCourseService basicUserCourseService;
+    @Resource
+    private BasicCampusService basicCampusService;
+
+    @Override
+    public IPage<BasicClazzResult> basicClazzPage(String queryParams, int pageNumber, int pageSize) {
+        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
+        Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
+        queryParams = SystemConstant.translateSpecificSign(queryParams);
+        return basicClazzMapper.findBasicClazzPage(new Page<>(pageNumber, pageSize), queryParams, schoolId, orgIds);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Long saveBasicClazz(BasicClazzParams basicClazzParams, SysUser sysUser) {
+        List<BasicClazzParams> basicClazzParamsList = new ArrayList<>();
+        basicClazzParamsList.add(basicClazzParams);
+        BasicClazz basicClazz = this.editEntityHelp(basicClazzParamsList, sysUser).get(0);
+        this.saveOrUpdate(basicClazz);
+        return basicClazz.getId();
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean removeBasicClazzBatch(List<Long> idList) {
+        if (idList.size() == 0) {
+            throw ExceptionResultEnum.ERROR.exception("请选择要删除的目标");
+        }
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+        // 异常处理
+        String errorStudent = "";
+        String errorCourse = "";
+        // TODO: 2021/8/28  
+//        List<BasicStudent> basicStudentCheck = basicStudentService.list(new QueryWrapper<BasicStudent>().lambda().eq(BasicStudent::getEnable,true).in(BasicStudent::getClazzId,idList));
+//        if (basicStudentCheck.size() > 0){
+//            Set<Long> ids = basicStudentCheck.stream().map(BasicStudent::getClazzId).collect(Collectors.toSet());
+//            List<String> exStudentClazz = this.list(new QueryWrapper<BasicClazz>().lambda().in(BasicClazz::getId,ids)).stream().map(BasicClazz::getClazzName).collect(Collectors.toList());
+//            errorStudent = StringUtils.join(exStudentClazz,',');
+//        }
+
+        List<BasicUserCourse> basicUserCourseCheck = basicUserCourseService.list(new QueryWrapper<BasicUserCourse>().lambda().in(BasicUserCourse::getClazzId,idList));
+        if (basicUserCourseCheck.size() > 0){
+            Set<Long> ids = basicUserCourseCheck.stream().map(BasicUserCourse::getClazzId).collect(Collectors.toSet());
+            List<String> exUserCourseClazz = this.list(new QueryWrapper<BasicClazz>().lambda().in(BasicClazz::getId,ids)).stream().map(BasicClazz::getClazzName).collect(Collectors.toList());
+            errorCourse = StringUtils.join(exUserCourseClazz,',');
+        }
+
+        if (SystemConstant.strNotNull(errorStudent) && SystemConstant.strNotNull(errorCourse)){
+            throw ExceptionResultEnum.ERROR.exception("学生已绑定了要删除的【班级】 : " + errorStudent + ",课程已绑定了要删除的【班级】 : " + errorCourse);
+        } else if (SystemConstant.strNotNull(errorStudent) && !SystemConstant.strNotNull(errorCourse)){
+            throw ExceptionResultEnum.ERROR.exception("学生已绑定了要删除的【班级】 : " + errorStudent);
+        } else if (SystemConstant.strNotNull(errorCourse) && !SystemConstant.strNotNull(errorCourse)){
+            throw ExceptionResultEnum.ERROR.exception("课程已绑定了要删除的【班级】 : " + errorCourse);
+        }
+
+        // 逻辑删除
+        UpdateWrapper<BasicClazz> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(BasicClazz::getEnable, false)
+                .set(BasicClazz::getUpdateId, sysUser.getUpdateId())
+                .in(BasicClazz::getId, idList);
+        return this.update(updateWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Map<String, Object> executeBasicClazzImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) {
+        SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
+        Long schoolId = sysUser.getSchoolId();
+
+        List<BasicClazzParams> addBasicClazzParamsList = new ArrayList<>();
+        for (int i = 0; i < finalList.size(); i++) {
+            LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
+            List<Object> basicClazzImportDtoList = excelMap.get(i);
+
+            assert basicClazzImportDtoList != null;
+            if (basicClazzImportDtoList.get(0) instanceof DescribeImportDto) {
+                continue;
+            }
+            List<BasicClazzImportDto> datasource = basicClazzImportDtoList.stream().map(e -> {
+                BasicClazzImportDto basicClazzImportDto = new BasicClazzImportDto();
+                BeanUtils.copyProperties(e, basicClazzImportDto);
+                return basicClazzImportDto;
+            }).collect(Collectors.toList());
+            map.put("dataCount", datasource.size());
+
+
+            // 新校区名称集合
+            Set<String> newCampusNameSet = datasource.stream().map(BasicClazzImportDto::getCampusName).collect(Collectors.toSet());
+            // 旧校区集合
+            List<BasicCampus> basicCampusList = basicCampusService.list(new QueryWrapper<BasicCampus>().lambda().eq(BasicCampus::getEnable, true).eq(BasicCampus::getSchoolId, schoolId));
+            Set<String> oldCampusNameSet = basicCampusList.stream().map(BasicCampus::getCampusName).collect(Collectors.toSet());
+
+            // 需要新增的校区集合
+            Set<String> addCampusNameSet = newCampusNameSet.stream().filter(e -> !oldCampusNameSet.contains(e)).collect(Collectors.toSet());
+            List<BasicCampus> addBasicCampusList = new ArrayList<>();
+            for (String campusName : addCampusNameSet) {
+                BasicCampus basicCampus = new BasicCampus();
+                Long id = SystemConstant.getDbUuid();
+                basicCampus.setSchoolId(schoolId);
+                basicCampus.setCampusName(campusName);
+                basicCampus.setId(id);
+                basicCampus.setCampusCode(String.valueOf(id));
+                basicCampus.setEnable(true);
+                basicCampus.setCreateId(sysUser.getId());
+                addBasicCampusList.add(basicCampus);
+            }
+            // 批量新增校区
+            basicCampusService.saveBatch(addBasicCampusList);
+
+            for (int y = 0; y < Objects.requireNonNull(basicClazzImportDtoList).size(); y++) {
+                BasicClazzImportDto basicClazzImportDto = (BasicClazzImportDto) basicClazzImportDtoList.get(y);
+
+                // 取值
+                String clazzName = basicClazzImportDto.getClazzName();
+                String campusName = basicClazzImportDto.getCampusName();
+
+
+                BasicClazzParams basicClazzParams = new BasicClazzParams();
+                basicClazzParams.setCampusId(basicCampusService.getOne(new QueryWrapper<BasicCampus>().lambda()
+                        .eq(BasicCampus::getSchoolId, schoolId)
+                        .eq(BasicCampus::getCampusName, campusName)
+                        .eq(BasicCampus::getEnable, true))
+                        .getId());
+                basicClazzParams.setClazzName(clazzName);
+
+                BasicClazz tmp = this.getOne(new QueryWrapper<BasicClazz>().lambda()
+                        .eq(BasicClazz::getSchoolId, sysUser.getSchoolId())
+                        .eq(BasicClazz::getEnable, true)
+                        .eq(BasicClazz::getClazzName, clazzName));
+                if (Objects.nonNull(tmp)) {
+                    basicClazzParams.setId(tmp.getId());
+                }
+                addBasicClazzParamsList.add(basicClazzParams);
+            }
+
+            List<BasicClazz> basicClazzList = this.editEntityHelp(addBasicClazzParamsList, sysUser);
+            this.saveOrUpdateBatch(basicClazzList);
+        }
+        return map;
+    }
+
+    /**
+     * 基础班级保存助手方法
+     *
+     * @param basicClazzParamsList 基础班级参数
+     * @param sysUser              操作人
+     * @return 结果
+     */
+    private List<BasicClazz> editEntityHelp(List<BasicClazzParams> basicClazzParamsList, SysUser sysUser) {
+        Long schoolId = sysUser.getSchoolId();
+        List<BasicClazz> editEntityList = new ArrayList<>();
+        for (BasicClazzParams basicClazzParams : basicClazzParamsList) {
+            // 普通参数
+            Long id = basicClazzParams.getId();
+            Long campusId = basicClazzParams.getCampusId();
+            String clazzCode = basicClazzParams.getClazzCode();
+            String clazzName = basicClazzParams.getClazzName();
+
+            // 校验校区不存在
+            if (Objects.isNull(basicCampusService.getById(campusId))) {
+                throw ExceptionResultEnum.ERROR.exception("所选校区不存在");
+            }
+            // 检验班级名称在学校的唯一性
+            BasicClazz checkName = this.getOne(new QueryWrapper<BasicClazz>().lambda()
+                    .eq(BasicClazz::getSchoolId, schoolId)
+                    .eq(BasicClazz::getEnable, true)
+                    .eq(BasicClazz::getClazzName, clazzName));
+            if (Objects.nonNull(checkName)) {
+                if (!checkName.getId().equals(id)) {
+                    throw ExceptionResultEnum.ERROR.exception("班级名称【" + clazzName + "】重复");
+                }
+            }
+
+            // 组装基础参数
+            Long orgId;
+            BasicClazz basicClazz = new BasicClazz();
+            basicClazz.setCampusId(campusId);
+            basicClazz.setSchoolId(schoolId);
+            if (SystemConstant.strNotNull(clazzCode)) {
+                basicClazz.setClazzCode(clazzCode);
+            }
+            basicClazz.setClazzName(clazzName);
+
+            if (!SystemConstant.longNotNull(id)) {
+                // id为空 -> 新增
+                // 获取分布式id
+                orgId = sysUser.getOrgId();
+                id = SystemConstant.getDbUuid();
+                basicClazz.setId(id);
+                basicClazz.setCreateId(sysUser.getId());
+            } else {
+                // id不为空 -> 编辑
+                BasicClazz old = this.getById(id);
+                if (Objects.isNull(old) || old.getEnable().equals(false)) {
+                    throw ExceptionResultEnum.ERROR.exception("基础班级主键不存在或被禁用");
+                }
+                orgId = old.getOrgId();
+                basicClazz.setId(id);
+                basicClazz.setUpdateId(sysUser.getId());
+            }
+            basicClazz.setOrgId(orgId);
+            editEntityList.add(basicClazz);
+        }
+        return editEntityList;
+    }
+}

+ 24 - 20
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java

@@ -11,27 +11,18 @@ import com.qmth.teachcloud.common.bean.dto.excel.DescribeImportDto;
 import com.qmth.teachcloud.common.bean.params.BasicCourseParams;
 import com.qmth.teachcloud.common.bean.result.BasicCourseResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.entity.BasicCourse;
-import com.qmth.teachcloud.common.entity.BasicUserCourse;
-import com.qmth.teachcloud.common.entity.SysOrg;
-import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.OrgTypeEnum;
 import com.qmth.teachcloud.common.mapper.BasicCourseMapper;
-import com.qmth.teachcloud.common.service.BasicCourseService;
-import com.qmth.teachcloud.common.service.BasicUserCourseService;
-import com.qmth.teachcloud.common.service.SysOrgService;
-import com.qmth.teachcloud.common.service.TeachcloudCommonService;
+import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ServletUtil;
-import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.LinkedMultiValueMap;
 
 import javax.annotation.Resource;
-import javax.websocket.RemoteEndpoint;
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -52,6 +43,8 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
     private SysOrgService sysOrgService;
     @Resource
     private BasicUserCourseService basicUserCourseService;
+    @Resource
+    private BasicClazzService basicClazzService;
 
 
     @Override
@@ -184,21 +177,32 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                     throw ExceptionResultEnum.ERROR.exception("输入的教研室【" + teachingRoomName + "】不存在");
                 }
                 Long teachingRoomId = sysOrg.getId();
-                List<String> clazzList = Arrays.asList(clazz.split(clazzSplit));
+                String[] clazzList = clazz.split(clazzSplit);
+                List<Long> clazzIdList = new ArrayList<>();
+                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 + "不存在");
+                    }
+                    clazzIdList.add(basicClazz.getId());
+                }
+
                 BasicCourseParams basicCourseParams = new BasicCourseParams();
                 basicCourseParams.setCourseCode(courseCode);
                 basicCourseParams.setCourseName(courseName);
                 basicCourseParams.setTeachingRoomId(teachingRoomId);
-                basicCourseParams.setClazzList(clazzList);
+                basicCourseParams.setClazzIdList(clazzIdList);
                 BasicCourse old = this.getOne(new QueryWrapper<BasicCourse>().lambda().eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getEnable, true).eq(BasicCourse::getCode, courseCode));
                 if (Objects.nonNull(old)) {
                     basicCourseParams.setId(old.getId());
+                    addBasicCourseParamsList.add(basicCourseParams);
                 }
-
-                addBasicCourseParamsList.add(basicCourseParams);
+                List<BasicCourse> editBasicCourse = this.editEntityHelp(addBasicCourseParamsList, sysUser);
+                this.saveOrUpdateBatch(editBasicCourse);
             }
-            List<BasicCourse> editBasicCourse = this.editEntityHelp(addBasicCourseParamsList, sysUser);
-            this.saveOrUpdateBatch(editBasicCourse);
         }
         return map;
     }
@@ -244,8 +248,8 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                 throw ExceptionResultEnum.ERROR.exception("所选教研室不存在");
             }
             // 校验班级
-            List<String> clazzList = basicCourseParams.getClazzList();
-            if (clazzList.size() != clazzList.stream().distinct().count()) {
+            List<Long> clazzIdList = basicCourseParams.getClazzIdList();
+            if (clazzIdList.size() != clazzIdList.stream().distinct().count()) {
                 throw ExceptionResultEnum.ERROR.exception("输入的班级重复");
             }
 
@@ -277,7 +281,7 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
             basicCourse.setOrgId(orgId);
 
             // 根据课程id和授课班级集合更新'basic_user_course'表
-            basicUserCourseService.updateByCourseIdAndClazzList(id, clazzList, sysUser, orgId);
+            basicUserCourseService.updateByCourseIdAndClazzList(id, clazzIdList, sysUser, orgId);
 
             basicCourseList.add(basicCourse);
         }

+ 11 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicUserCourseServiceImpl.java

@@ -8,12 +8,15 @@ import com.qmth.teachcloud.common.entity.BasicUserCourse;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.mapper.BasicUserCourseMapper;
+import com.qmth.teachcloud.common.service.BasicClazzService;
 import com.qmth.teachcloud.common.service.BasicUserCourseService;
 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.stream.Collectors;
 
 /**
@@ -26,6 +29,8 @@ import java.util.stream.Collectors;
  */
 @Service
 public class BasicUserCourseServiceImpl extends ServiceImpl<BasicUserCourseMapper, BasicUserCourse> implements BasicUserCourseService {
+    @Resource
+    private BasicClazzService basicClazzService;
 
     @Override
     public void removeByUserId(Long userId) {
@@ -51,20 +56,23 @@ public class BasicUserCourseServiceImpl extends ServiceImpl<BasicUserCourseMappe
 
     @Transactional
     @Override
-    public void updateByCourseIdAndClazzList(Long courseId, List<String> clazzList, SysUser sysUser, Long orgId) {
+    public void updateByCourseIdAndClazzList(Long courseId, List<Long> clazzIdList, SysUser sysUser, Long orgId) {
         List<BasicUserCourse> willAddList = new ArrayList<>();
 
         // 删除原有的全部
         this.remove(new QueryWrapper<BasicUserCourse>().lambda().eq(BasicUserCourse::getCourseId,courseId).gt(BasicUserCourse::getId,0));
 
         // 新增
-        for (String clazz : clazzList) {
+        for (Long clazzId : clazzIdList) {
+            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.setClazz(clazz);
+            basicUserCourse.setClazzId(clazzId);
             basicUserCourse.setUpdateId(sysUser.getId());
             willAddList.add(basicUserCourse);
         }

+ 40 - 0
teachcloud-common/src/main/resources/mapper/BasicClazzMapper.xml

@@ -0,0 +1,40 @@
+<?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.teachcloud.common.mapper.BasicClazzMapper">
+
+    <select id="findBasicClazzPage"
+            resultType="com.qmth.teachcloud.common.bean.result.BasicClazzResult">
+        SELECT
+            clz.id,
+            clz.school_id AS schoolId,
+            clz.campus_id AS campusId,
+            clz.clazz_code AS clazzCode,
+            clz.clazz_name AS clazzName,
+            clz.enable,
+            clz.create_id AS createId,
+            clz.create_time AS createTime,
+            cap.campus_name AS campusName,
+            cap.campus_code AS campusCode
+        FROM
+            basic_clazz clz
+                LEFT JOIN
+            basic_campus cap ON clz.campus_id = cap.id
+                AND cap.enable = TRUE
+        <where>
+            AND clz.enable = TRUE
+            <if test="schoolId != null and schoolId > 0">
+                AND clz.school_id = #{schoolId}
+            </if>
+            <if test="queryParams != null and queryParams != ''">
+                AND clz.clazz_name LIKE CONCAT('%',#{queryParams},'%') OR clz.clazz_code LIKE CONCAT('%',#{queryParams},'%')
+            </if>
+            <if test="orgIds != null">
+                AND clz.org_id IN
+                <foreach collection="orgIds" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        ORDER BY clz.create_time DESC
+    </select>
+</mapper>