Эх сурвалжийг харах

3.2.2-删除、导出功能

xiaof 2 жил өмнө
parent
commit
f4b6b02d48
28 өөрчлөгдсөн 723 нэмэгдсэн , 20 устгасан
  1. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java
  2. 10 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  3. 15 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCourseController.java
  4. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicExamRuleController.java
  5. 24 5
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicStudentController.java
  6. 12 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java
  7. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanSyncController.java
  8. 25 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java
  9. 9 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysOrgController.java
  10. 15 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysUserController.java
  11. 103 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/BasicCourseExportDto.java
  12. 106 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/BasicStudentExportDto.java
  13. 113 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/UserExportDto.java
  14. 3 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/BasicCourseMapper.java
  15. 8 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/BasicStudentMapper.java
  16. 3 4
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysUserMapper.java
  17. 3 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicCourseService.java
  18. 3 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicStudentService.java
  19. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java
  20. 4 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java
  21. 35 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java
  22. 17 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicStudentServiceImpl.java
  23. 29 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java
  24. 25 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java
  25. 22 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/FileUtil.java
  26. 45 0
      teachcloud-common/src/main/resources/mapper/BasicCourseMapper.xml
  27. 46 0
      teachcloud-common/src/main/resources/mapper/BasicStudentMapper.xml
  28. 40 0
      teachcloud-common/src/main/resources/mapper/SysUserMapper.xml

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java

@@ -231,4 +231,6 @@ public interface ExamTaskService extends IService<ExamTask> {
      * @return 命题任务考生导入
      */
     List<ExamTaskExamStudentImportResult> examTaskExamStudentImport(MultipartFile file, SysUser requestUser) throws IOException, NoSuchFieldException, IllegalAccessException;
+
+    void delete(Long id);
 }

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

@@ -2211,6 +2211,16 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return result;
     }
 
+    @Override
+    public void delete(Long id) {
+        // 命题任务生成,命题老师未提交前允许删除
+        ExamTask examTask = this.getById(id);
+        if (examTask != null && examTask.getStatus().equals(ExamStatusEnum.SUBMIT)) {
+            throw ExceptionResultEnum.ERROR.exception("命题老师已提交,不能删除");
+        }
+        this.removeByExamTaskId(id);
+    }
+
     /**
      * 简单校验提交参数
      *

+ 15 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCourseController.java

@@ -26,6 +26,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
@@ -118,13 +119,13 @@ public class BasicCourseController {
     @RequestMapping(value = "/delete_by_query", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
     @OperationLogDetail(detail = "根据查询条件【所属机构id[{{belongOrgId}}],课程名称(模糊查询)[{{courseName}}],创建时间(起始位置)[{{startCreateTime}}]," +
-            "创建时间(终止位置)[{{endCreateTime}}],状态[{{enable}}],启用&禁用操作[{{enableOperate}}]】批量启用/禁用课程",level = LevelEnum.TERTIARY,operationType = OperationTypeEnum.EDIT,customizedOperationType = CustomizedOperationTypeEnum.DELETE)
+            "创建时间(终止位置)[{{endCreateTime}}],状态[{{enable}}],启用&禁用操作[{{enableOperate}}]】批量启用/禁用课程", level = LevelEnum.TERTIARY, operationType = OperationTypeEnum.EDIT, customizedOperationType = CustomizedOperationTypeEnum.DELETE)
     public Result enableBasicCourseByQuery(@ApiParam(value = "所属机构id") @RequestParam(required = false) String belongOrgId,
                                            @ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
                                            @ApiParam(value = "创建时间(起始位置)") @RequestParam(required = false) String startCreateTime,
                                            @ApiParam(value = "创建时间(终止位置)") @RequestParam(required = false) String endCreateTime) {
         // 禁用条件
-        if (!SystemConstant.strNotNull(belongOrgId) && !SystemConstant.strNotNull(courseName) && !SystemConstant.strNotNull(startCreateTime) && !SystemConstant.strNotNull(endCreateTime)){
+        if (!SystemConstant.strNotNull(belongOrgId) && !SystemConstant.strNotNull(courseName) && !SystemConstant.strNotNull(startCreateTime) && !SystemConstant.strNotNull(endCreateTime)) {
             throw ExceptionResultEnum.ERROR.exception("请选择要禁用的条件");
         }
         return ResultUtil.ok(basicCourseService.removeBasicCourseBatchByQuery(SystemConstant.convertIdToLong(belongOrgId), courseName, SystemConstant.convertIdToLong(startCreateTime), SystemConstant.convertIdToLong(endCreateTime)));
@@ -143,5 +144,17 @@ public class BasicCourseController {
         TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
         return Objects.nonNull(tbTask) ? ResultUtil.ok(tbTask.getId()) : ResultUtil.error("创建任务失败");
     }
+
+    @ApiOperation(value = "课程管理-导出")
+    @RequestMapping(value = "/export", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息")})
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EXPORT)
+    public void export(@ApiParam(value = "所属机构id") @RequestParam(required = false) String belongOrgId,
+                       @ApiParam(value = "课程名称(模糊查询)") @RequestParam(required = false) String courseName,
+                       @ApiParam(value = "创建时间(起始位置)") @RequestParam(required = false) String startCreateTime,
+                       @ApiParam(value = "创建时间(终止位置)") @RequestParam(required = false) String endCreateTime,
+                       HttpServletResponse response) throws Exception {
+        basicCourseService.exportData(response, SystemConstant.convertIdToLong(belongOrgId), courseName, SystemConstant.convertIdToLong(startCreateTime), SystemConstant.convertIdToLong(endCreateTime));
+    }
 }
 

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicExamRuleController.java

@@ -19,13 +19,13 @@ import org.springframework.web.bind.annotation.RestController;
 
 /**
  * <p>
- * 考务规则 前端控制器
+ * 通用规则 前端控制器
  * </p>
  *
  * @author xf
  * @since 2021-03-23
  */
-@Api(tags = "考务规则Controller")
+@Api(tags = "通用规则Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_BASIC + "/exam_rule")
 public class BasicExamRuleController {

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

@@ -2,18 +2,18 @@ package com.qmth.distributed.print.api;
 
 
 import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.teachcloud.common.annotation.OperationLogDetail;
-import com.qmth.teachcloud.common.bean.params.BasicStudentParams;
 import com.qmth.distributed.print.business.bean.result.EditResult;
-import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
-import com.qmth.teachcloud.common.service.BasicStudentService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.templete.execute.AsyncStudentDataImportService;
+import com.qmth.teachcloud.common.annotation.OperationLogDetail;
+import com.qmth.teachcloud.common.bean.params.BasicStudentParams;
 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.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.TaskTypeEnum;
+import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
+import com.qmth.teachcloud.common.service.BasicStudentService;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
@@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
@@ -123,4 +124,22 @@ public class BasicStudentController {
         TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
         return Objects.nonNull(tbTask) ? ResultUtil.ok(tbTask.getId()) : ResultUtil.error("创建任务失败");
     }
+
+    @ApiOperation(value = "用户管理-导出")
+    @RequestMapping(value = "/export", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EXPORT)
+    public void export(@ApiParam(value = "查询参数(学生学号或姓名)") @RequestParam(required = false) String queryParams,
+                       @ApiParam(value = "学院主键") @RequestParam(required = false) String collegeId,
+                       @ApiParam(value = "专业主键") @RequestParam(required = false) String majorId,
+                       @ApiParam(value = "班级主键") @RequestParam(required = false) String clazzId,
+                       HttpServletResponse response) throws Exception {
+        Set<Long> clazzIdSet = new HashSet<>();
+        if (SystemConstant.strNotNull(clazzId)) {
+            clazzIdSet.add(SystemConstant.convertIdToLong(clazzId));
+        } else {
+            clazzIdSet = null;
+        }
+        basicStudentService.exportData(response, queryParams, SystemConstant.convertIdToLong(collegeId), SystemConstant.convertIdToLong(majorId), clazzIdSet);
+    }
 }

+ 12 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java

@@ -250,5 +250,17 @@ public class ExamDetailController {
         TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
         return Objects.nonNull(tbTask) ? ResultUtil.ok(tbTask.getId()) : ResultUtil.error("创建任务失败");
     }
+
+    /**
+     * 考务数据导入-删除
+     */
+    @ApiOperation(value = "考务数据导入-删除")
+    @RequestMapping(value = "/data_delete", method = RequestMethod.POST)
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.DELETE)
+    public Result dataDelete(@RequestParam Long id) {
+//        examTaskService.delete(id);
+        // todo 考务数据导入-删除未做
+        return ResultUtil.ok(true);
+    }
 }
 

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanSyncController.java

@@ -66,7 +66,7 @@ public class ExamPrintPlanSyncController {
      *
      * @param printPlanIds 印刷计划ID
      */
-    @ApiOperation(value = "印刷计划推送管理-查询计划下需要同步的命题任务")
+    @ApiOperation(value = "印刷计划推送管理-推送数据查询")
     @RequestMapping(value = "/list_sync_exam_task", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
@@ -84,7 +84,7 @@ public class ExamPrintPlanSyncController {
      * @return
      * @throws Exception
      */
-    @ApiOperation(value = "印刷计划推送管理-推送")
+    @ApiOperation(value = "印刷计划推送管理-开始推送")
     @RequestMapping(value = "/sync_data_cloud", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.PUSH)

+ 25 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -49,13 +49,13 @@ import java.util.stream.Collectors;
 
 /**
  * <p>
- * 命题任务 前端控制器
+ * 命题任务管理 前端控制器
  * </p>
  *
  * @author xf
  * @since 2021-03-23
  */
-@Api(tags = "命题任务Controller")
+@Api(tags = "命题任务管理Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_EXAM + "/task")
 @Validated
@@ -195,6 +195,17 @@ public class ExamTaskController {
         return ResultUtil.ok(true);
     }
 
+    /**
+     * 命题任务管理-删除
+     */
+    @ApiOperation(value = "命题任务管理-删除")
+    @RequestMapping(value = "/delete", method = RequestMethod.POST)
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.DELETE)
+    public Result delete(@RequestParam Long id) {
+        examTaskService.delete(id);
+        return ResultUtil.ok(true);
+    }
+
     /**
      * 命题任务管理-文件导入
      */
@@ -275,6 +286,18 @@ public class ExamTaskController {
         return ResultUtil.ok(examTaskService.listTaskApply(semesterId, examId, auditStatus, SystemConstant.convertIdToLong(cardRuleId), courseCode, paperNumber, startTime, endTime, userName, pageNumber, pageSize));
     }
 
+    /**
+     * 入库申请-删除
+     */
+    @ApiOperation(value = "入库申请-删除")
+    @RequestMapping(value = "/apply_delete", method = RequestMethod.POST)
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.DELETE)
+    public Result applyDelete(@RequestParam Long id) {
+//        examTaskService.delete(id);
+        //todo 入库申请-删除未做
+        return ResultUtil.ok(true);
+    }
+
     /**
      * 根据命题任务ID查询单个数据
      *

+ 9 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/SysOrgController.java

@@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.util.Map;
 import java.util.Objects;
@@ -128,5 +129,13 @@ public class SysOrgController {
         TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
         return Objects.nonNull(tbTask) ? ResultUtil.ok(tbTask.getId()) : ResultUtil.error("创建任务失败");
     }
+
+    @ApiOperation(value = "机构管理-导出")
+    @RequestMapping(value = "/export", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EXPORT)
+    public void export(HttpServletResponse response) {
+        sysOrgService.exportData(false);
+    }
 }
 

+ 15 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/SysUserController.java

@@ -9,6 +9,7 @@ import com.qmth.distributed.print.business.service.CloudUserPushStatusService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.templete.execute.AsyncSysUserDataImportService;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
+import com.qmth.teachcloud.common.bean.dto.UserExportDto;
 import com.qmth.teachcloud.common.bean.params.UserSaveParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysOrg;
@@ -17,6 +18,7 @@ import com.qmth.teachcloud.common.entity.TBTask;
 import com.qmth.teachcloud.common.enums.TaskTypeEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.service.SysUserService;
+import com.qmth.teachcloud.common.util.FileUtil;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
@@ -30,6 +32,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
@@ -259,5 +262,17 @@ public class SysUserController {
         cloudUserPushService.pushCloudUser(userIdList, sysUser);
         return ResultUtil.ok();
     }
+
+    @ApiOperation(value = "用户管理-导出")
+    @RequestMapping(value = "/export", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EXPORT)
+    public void export(@RequestParam(value = "userInfo", required = false) String userInfo,
+                         @RequestParam(value = "orgId", required = false) String orgId,
+                         @RequestParam(value = "roleId", required = false) String roleId,
+                         @RequestParam(value = "enable", required = false) Boolean enable,
+                         HttpServletResponse response) throws Exception {
+        sysUserService.exportData(response, userInfo, SystemConstant.convertIdToLong(orgId), roleId, enable);
+    }
 }
 

+ 103 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/BasicCourseExportDto.java

@@ -0,0 +1,103 @@
+package com.qmth.teachcloud.common.bean.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.annotation.ExcelProperty;
+import com.qmth.teachcloud.common.bean.result.ClazzDatasourceResult;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * 课程导出Dto
+ */
+public class BasicCourseExportDto {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "课程id")
+    private Long id;
+
+    @ExcelProperty(name = "课程名称", width = 30, index = 1)
+    private String courseName;
+
+    @ExcelProperty(name = "课程编码", width = 30, index = 2)
+    private String courseCode;
+
+    @ExcelProperty(name = "开课部门", width = 30, index = 3)
+    private String teachingRoomName;
+
+    @ApiModelProperty(value = "班级信息集合")
+    private List<ClazzDatasourceResult> clazzList;
+
+    @ExcelProperty(name = "开课部门", width = 30, index = 4)
+    private String clazzName;
+
+    private Boolean enable;
+
+    @ExcelProperty(name = "状态", width = 30, index = 5)
+    private String enableName;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getTeachingRoomName() {
+        return teachingRoomName;
+    }
+
+    public void setTeachingRoomName(String teachingRoomName) {
+        this.teachingRoomName = teachingRoomName;
+    }
+
+    public List<ClazzDatasourceResult> getClazzList() {
+        return clazzList;
+    }
+
+    public void setClazzList(List<ClazzDatasourceResult> clazzList) {
+        this.clazzList = clazzList;
+    }
+
+    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 String getEnableName() {
+        return enableName;
+    }
+
+    public void setEnableName() {
+        this.enableName = this.enable ? "启用" : "禁用";
+    }
+}

+ 106 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/BasicStudentExportDto.java

@@ -0,0 +1,106 @@
+package com.qmth.teachcloud.common.bean.dto;
+
+import com.qmth.teachcloud.common.annotation.ExcelProperty;
+
+/**
+ * 学生导出Dto
+ */
+public class BasicStudentExportDto {
+
+    private Long id;
+
+    @ExcelProperty(name = "学生姓名", width = 30, index = 1)
+    private String studentName;
+
+    @ExcelProperty(name = "学生学号", width = 30, index = 2)
+    private String studentCode;
+
+    @ExcelProperty(name = "手机号", width = 30, index = 3)
+    private String phoneNumber;
+
+    @ExcelProperty(name = "学院", width = 30, index = 4)
+    private String collegeName;
+
+    @ExcelProperty(name = "专业", width = 30, index = 5)
+    private String majorName;
+
+    @ExcelProperty(name = "班级", width = 30, index = 6)
+    private String clazzName;
+
+    private Boolean enable;
+
+    @ExcelProperty(name = "状态", width = 30, index = 7)
+    private String enableName;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+
+    public String getPhoneNumber() {
+        return phoneNumber;
+    }
+
+    public void setPhoneNumber(String phoneNumber) {
+        this.phoneNumber = phoneNumber;
+    }
+
+    public String getCollegeName() {
+        return collegeName;
+    }
+
+    public void setCollegeName(String collegeName) {
+        this.collegeName = collegeName;
+    }
+
+    public String getMajorName() {
+        return majorName;
+    }
+
+    public void setMajorName(String majorName) {
+        this.majorName = majorName;
+    }
+
+    public String getClazzName() {
+        return clazzName;
+    }
+
+    public void setClazzName(String clazzName) {
+        this.clazzName = clazzName;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public String getEnableName() {
+        return enableName;
+    }
+
+    public void setEnableName() {
+        this.enableName = this.enable ? "启用" : "禁用";
+    }
+}

+ 113 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/UserExportDto.java

@@ -0,0 +1,113 @@
+package com.qmth.teachcloud.common.bean.dto;
+
+
+import com.qmth.teachcloud.common.annotation.ExcelProperty;
+import com.qmth.teachcloud.common.entity.SysRole;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 用户导出dto
+ */
+public class UserExportDto {
+
+    private Long id;
+
+    @ExcelProperty(name = "用户名", width = 30, index = 1)
+    private String loginName;
+    @ExcelProperty(name = "姓名", width = 30, index = 2)
+    private String realName;
+    @ExcelProperty(name = "工号", width = 30, index = 3)
+    private String code;
+    @ExcelProperty(name = "手机号", width = 40, index = 4)
+    private String mobileNumber;
+    private Boolean enable;
+    @ExcelProperty(name = "所在机构", width = 50, index = 5)
+    private String orgName;
+    private List<SysRole> roles;
+    @ExcelProperty(name = "角色", width = 50, index = 6)
+    private String roleName;
+    @ExcelProperty(name = "状态", width = 30, index = 7)
+    private String enableName;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMobileNumber() {
+        return mobileNumber;
+    }
+
+    public void setMobileNumber(String mobileNumber) {
+        this.mobileNumber = mobileNumber;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public String getOrgName() {
+        return orgName;
+    }
+
+    public void setOrgName(String orgName) {
+        this.orgName = orgName;
+    }
+
+    public List<SysRole> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(List<SysRole> roles) {
+        this.roles = roles;
+    }
+
+    public String getRoleName() {
+        return roleName;
+    }
+
+    public void setRoleName(String roleName) {
+        this.roleName = roleName;
+    }
+
+    public String getEnableName() {
+        return enableName;
+    }
+
+    public void setEnableName() {
+        this.enableName = this.enable ? "启用" : "禁用";
+    }
+}

+ 3 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/BasicCourseMapper.java

@@ -3,6 +3,7 @@ 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.dto.BasicCourseExportDto;
 import com.qmth.teachcloud.common.bean.dto.CourseInfoDto;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.result.BasicCourseResult;
@@ -51,4 +52,6 @@ public interface BasicCourseMapper extends BaseMapper<BasicCourse> {
 
     @SuppressWarnings("MybatisXMapperMethodInspection")
     Set<Map<String, Object>> findExamTaskByCourseCode(@Param("schoolId") Long schoolId, @Param("courseCodeSet") Set<String> courseCodeSet);
+
+    List<BasicCourseExportDto> listExportData(@Param("belongOrgId") Long belongOrgId, @Param("courseName") String courseName, @Param("startCreateTime") Long startCreateTime, @Param("endCreateTime") Long endCreateTime, @Param("schoolId") Long schoolId, @Param("dpr") DataPermissionRule dpr);
 }

+ 8 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/BasicStudentMapper.java

@@ -3,6 +3,7 @@ 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.dto.BasicStudentExportDto;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.dto.TaskPrintClassDto;
 import com.qmth.teachcloud.common.bean.result.BasicStudentResult;
@@ -64,4 +65,11 @@ public interface BasicStudentMapper extends BaseMapper<BasicStudent> {
                                                   @Param("majorId") Long majorId,
                                                   @Param("clazzId") Long clazzId,
                                                   @Param("studentCodeList") List<String> studentCodeList);
+
+    List<BasicStudentExportDto> listExportData(@Param("queryParams") String queryParams,
+                                               @Param("schoolId") Long schoolId,
+                                               @Param("collegeId") Long collegeId,
+                                               @Param("majorId") Long majorId,
+                                               @Param("clazzIdList") Set<Long> clazzIdList,
+                                               @Param("dpr") DataPermissionRule dpr);
 }

+ 3 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysUserMapper.java

@@ -3,10 +3,7 @@ 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.dto.BlurryUserDto;
-import com.qmth.teachcloud.common.bean.dto.CloudUserPushStatusDto;
-import com.qmth.teachcloud.common.bean.dto.UserDto;
-import com.qmth.teachcloud.common.bean.dto.VerifyCodeCheckDto;
+import com.qmth.teachcloud.common.bean.dto.*;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.bean.result.SysUserResult;
 import com.qmth.teachcloud.common.bean.result.UserRoleNameResult;
@@ -116,4 +113,6 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
     List<ApproveUserResult> findByRoldIdAndMemberName(@Param("roleId") Long roleId, @Param("name") String name, @Param("schoolId") Long schoolId);
 
     List<CloudUserPushStatusDto> findCloudUserPushStatus(@Param("userId") Long userId, @Param("schoolId") Long schoolId);
+
+    List<UserExportDto> listExportData(@Param("schoolId") Long schoolId, @Param("userInfo") String userInfo, @Param("orgId") Long orgId, @Param("roleId") String roleId, @Param("enable") Boolean enable);
 }

+ 3 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicCourseService.java

@@ -8,6 +8,7 @@ import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.SysUser;
 import org.springframework.util.LinkedMultiValueMap;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.Map;
 
@@ -104,4 +105,6 @@ public interface BasicCourseService extends IService<BasicCourse> {
     Long getOrgIdBySchoolIdAndCourseCode(Long schoolId, String courseCode);
 
     List<BasicCourse> findBySchoolIdAndCourseCode(Long schoolId, List<String> courseCodes);
+
+    void exportData(HttpServletResponse response, Long belongOrgId, String courseName, Long startCreateTime, Long endCreateTime) throws Exception;
 }

+ 3 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicStudentService.java

@@ -11,6 +11,7 @@ import com.qmth.teachcloud.common.entity.BasicStudent;
 import com.qmth.teachcloud.common.entity.SysUser;
 import org.springframework.util.LinkedMultiValueMap;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -114,4 +115,6 @@ public interface BasicStudentService extends IService<BasicStudent> {
      * @return 结果
      */
     Map<String, Object> executeBasicStudentImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) throws IllegalAccessException;
+
+    void exportData(HttpServletResponse response, String queryParams, Long collegeId, Long majorId, Set<Long> clazzIdList) throws Exception;
 }

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

@@ -149,4 +149,6 @@ public interface SysOrgService extends IService<SysOrg> {
      * @return 学院级机构集合
      */
     List<SysOrg> findCollegeLevelOrgList(Long schoolId);
+
+    void exportData(boolean withoutPrintingRoom);
 }

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
 import com.qmth.teachcloud.common.bean.dto.LoginDto;
 import com.qmth.teachcloud.common.bean.dto.UserDto;
+import com.qmth.teachcloud.common.bean.dto.UserExportDto;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.bean.params.UserSaveParams;
 import com.qmth.teachcloud.common.bean.params.UserSaveReportParams;
@@ -17,6 +18,7 @@ import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
 import org.springframework.util.LinkedMultiValueMap;
 
+import javax.servlet.http.HttpServletResponse;
 import java.security.NoSuchAlgorithmException;
 import java.util.List;
 import java.util.Map;
@@ -261,4 +263,6 @@ public interface SysUserService extends IService<SysUser> {
      boolean removeBasicCourseBatch(List<Long> idList);
 
     boolean remove(Long id) throws NoSuchAlgorithmException;
+
+    void exportData(HttpServletResponse response, String userInfo, Long orgId, String roleId, Boolean enable) throws Exception;
 }

+ 35 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.bean.dto.BasicCourseExportDto;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.dto.excel.BasicCourseImportDto;
 import com.qmth.teachcloud.common.bean.dto.excel.DescribeImportDto;
@@ -16,6 +17,7 @@ import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.mapper.BasicCourseMapper;
 import com.qmth.teachcloud.common.service.*;
+import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
@@ -23,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.LinkedMultiValueMap;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -116,7 +119,7 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
 
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId,requestUser.getId(),ServletUtil.getRequest().getServletPath());
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
 
         courseName = SystemConstant.translateSpecificSign(courseName);
         IPage<BasicCourseResult> iPage = basicCourseMapper.findBasicCoursePage(new Page<>(pageNumber, pageSize), belongOrgId, courseName, startCreateTime, endCreateTime, schoolId, dpr);
@@ -293,6 +296,37 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
         return this.list(basicCourseQueryWrapper);
     }
 
+    @Override
+    public void exportData(HttpServletResponse response, Long belongOrgId, String courseName, Long startCreateTime, Long endCreateTime) throws Exception {
+        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
+
+        courseName = SystemConstant.translateSpecificSign(courseName);
+        List<BasicCourseExportDto> courseExportDtos = basicCourseMapper.listExportData(belongOrgId, courseName, startCreateTime, endCreateTime, schoolId, dpr);
+        if (courseExportDtos.isEmpty()) {
+            throw ExceptionResultEnum.ERROR.exception("没有可导出数据");
+        }
+        for (BasicCourseExportDto basicCourseExportDto : courseExportDtos) {
+            Long courseId = basicCourseExportDto.getId();
+            List<BasicUserCourse> basicUserCourseList = basicUserCourseService.list(new QueryWrapper<BasicUserCourse>().lambda().eq(BasicUserCourse::getCourseId, courseId));
+            Set<Long> clazzIdSet = basicUserCourseList.stream().map(BasicUserCourse::getClazzId).collect(Collectors.toSet());
+            if (clazzIdSet.size() > 0) {
+                List<BasicClazz> clazzList = basicClazzService.list(new QueryWrapper<BasicClazz>().lambda().in(BasicClazz::getId, clazzIdSet).orderByAsc(BasicClazz::getCreateTime));
+                if (clazzList.isEmpty()) {
+                    basicCourseExportDto.setClazzName("");
+                } else {
+                    List<String> clazzNameList = clazzList.stream().map(BasicClazz::getClazzName).collect(Collectors.toList());
+                    basicCourseExportDto.setClazzName(String.join(",", clazzNameList));
+                }
+            } else {
+                basicCourseExportDto.setClazzName("");
+            }
+        }
+        ExcelUtil.excelExport("课程数据", BasicCourseExportDto.class, courseExportDtos, response);
+    }
+
     private List<BasicCourse> editEntityHelp(List<BasicCourseParams> basicCourseParamsList, SysUser sysUser) {
         Long schoolId = sysUser.getSchoolId();
         List<BasicCourse> basicCourseList = new ArrayList<>();

+ 17 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicStudentServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.bean.dto.BasicStudentExportDto;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.dto.TaskPrintClassDto;
 import com.qmth.teachcloud.common.bean.dto.excel.BasicStudentImportDto;
@@ -18,6 +19,7 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.TeachBasicEnum;
 import com.qmth.teachcloud.common.mapper.BasicStudentMapper;
 import com.qmth.teachcloud.common.service.*;
+import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -25,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.LinkedMultiValueMap;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -55,7 +58,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
     public IPage<BasicStudentResult> basicStudentPage(String queryParams, Long collegeId, Long majorId, Set<Long> clazzIdList, int pageNumber, int pageSize) {
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId,requestUser.getId(),ServletUtil.getRequest().getServletPath());
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
         queryParams = SystemConstant.translateSpecificSign(queryParams);
         return basicStudentMapper.findBasicStudentPage(new Page<>(pageNumber, pageSize), queryParams, schoolId, collegeId, majorId, clazzIdList, dpr);
     }
@@ -310,6 +313,19 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
         return map;
     }
 
+    @Override
+    public void exportData(HttpServletResponse response, String queryParams, Long collegeId, Long majorId, Set<Long> clazzIdList) throws Exception {
+        Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
+        queryParams = SystemConstant.translateSpecificSign(queryParams);
+        List<BasicStudentExportDto> studentExportDtos = basicStudentMapper.listExportData(queryParams, schoolId, collegeId, majorId, clazzIdList, dpr);
+        if (studentExportDtos.isEmpty()) {
+            throw ExceptionResultEnum.ERROR.exception("没有可导出数据");
+        }
+        ExcelUtil.excelExport("学生数据", BasicStudentExportDto.class, studentExportDtos, response);
+    }
+
     /**
      * 学生保存助手方法(应对学生保存和导入批量保存)
      *

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

@@ -440,6 +440,35 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
                 .collect(Collectors.toList());
     }
 
+    @Override
+    public void exportData(boolean withoutPrintingRoom) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        List<SysUserResult> sysUserResultList = sysUserService.findSysUserResultList();
+
+        List<OrgDto> orgList = this.listOrgAll(schoolId);
+        if (withoutPrintingRoom) {
+            orgList = orgList.stream().filter(e -> !OrgTypeEnum.PRINTING_HOUSE.name().equals(e.getType())).collect(Collectors.toList());
+        }
+        Map<Long, OrgDto> map = orgList.stream().collect(Collectors.toMap(OrgDto::getId, Function.identity(), (dto1, dto2) -> dto1));
+
+        Iterator<Long> iterator = map.keySet().iterator();
+        Set<Long> deleteKeys = new HashSet<>();
+        while (iterator.hasNext()) {
+            Long parentId = iterator.next();
+            if (map.get(parentId).getParentId() != null) {
+                if (Objects.nonNull(map.get(map.get(parentId).getParentId()))) {
+                    map.get(map.get(parentId).getParentId()).getChildren().add(map.get(parentId));
+                    deleteKeys.add(parentId);
+                }
+            }
+        }
+        for (Long key : deleteKeys) {
+            map.remove(key);
+        }
+        List<OrgDto> orgDtos = new ArrayList<>(map.values());
+        // todo 机构导出 未完成
+    }
+
     /**
      * 根据子机构id深度优先搜索其父机构们
      *

+ 25 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -26,6 +26,7 @@ import com.qmth.teachcloud.common.mapper.SysUserMapper;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.sync.CloudMarkingTaskUtils;
 import com.qmth.teachcloud.common.util.Base64Util;
+import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.lang3.StringUtils;
@@ -36,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.LinkedMultiValueMap;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import java.security.NoSuchAlgorithmException;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -1057,7 +1059,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     public boolean remove(Long id) throws NoSuchAlgorithmException {
         this.removeById(id);
         //如果用户被删除,需要踢下线重新登录
-        commonService.removeUserInfo(id, true);
+//        commonService.removeUserInfo(id, true);
         commonCacheService.removeUserCache(id);
         commonCacheService.removeUserAuthCache(id);
         commonCacheService.removeUserMenuCache(id);
@@ -1065,6 +1067,28 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return true;
     }
 
+    @Override
+    public void exportData(HttpServletResponse response, String userInfo, Long orgId, String roleId, Boolean enable) throws Exception {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+
+        List<UserExportDto> userExportDtos = this.baseMapper.listExportData(schoolId, SystemConstant.translateSpecificSign(userInfo), orgId, roleId, enable);
+        if (userExportDtos.isEmpty()) {
+            throw ExceptionResultEnum.ERROR.exception("没有可导出数据");
+        }
+        userExportDtos.forEach(m -> {
+            //角色
+            List<SysRole> roles = sysRoleService.listRolesByUserId(Long.valueOf(m.getId()));
+            if (roles.isEmpty()) {
+                m.setRoleName("");
+            } else {
+                List<String> roleList = roles.stream().map(SysRole::getName).collect(Collectors.toList());
+                m.setRoleName(String.join(",", roleList));
+            }
+        });
+        // 生成excel文件
+        ExcelUtil.excelExport("用户数据", UserExportDto.class, userExportDtos, response);
+    }
+
     /**
      * 批量处理用户信息帮助类
      *

+ 22 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/FileUtil.java

@@ -12,9 +12,11 @@ import javax.crypto.Cipher;
 import javax.crypto.CipherOutputStream;
 import javax.crypto.spec.IvParameterSpec;
 import javax.crypto.spec.SecretKeySpec;
+import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.net.HttpURLConnection;
 import java.net.URL;
+import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.Enumeration;
 import java.util.LinkedList;
@@ -562,4 +564,24 @@ public class FileUtil {
             throw ExceptionResultEnum.ERROR.exception(e.getMessage());
         }
     }
+
+    public static void outputFile(HttpServletResponse response, File file, String fileName) {
+        try {
+            if (!file.exists()) {
+                response.sendError(404, "File not found!");
+            }
+
+            BufferedInputStream br = new BufferedInputStream(new FileInputStream(file));
+            String fName = URLEncoder.encode(fileName, SystemConstant.CHARSET_NAME);
+
+            response.reset();
+            response.setContentType("application/x-msdownload");
+            response.setHeader("Content-Disposition", "attachment; filename=" + fName);
+            IOUtils.copy(br, response.getOutputStream());
+            br.close();
+//            outStream.close();
+        } catch (IOException e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+        }
+    }
 }

+ 45 - 0
teachcloud-common/src/main/resources/mapper/BasicCourseMapper.xml

@@ -128,4 +128,49 @@
         </where>
         GROUP BY course_code,course_name
     </select>
+    <select id="listExportData" resultType="com.qmth.teachcloud.common.bean.dto.BasicCourseExportDto">
+        SELECT
+        bc.id,
+        bc.code AS courseCode,
+        bc.name AS courseName,
+        teaching_room_id AS teachingRoomId,
+        org.name AS teachingRoomName,
+        bc.enable AS enable,
+        bc.create_id AS createId,
+        bc.create_time AS createTime
+        FROM
+        basic_course bc
+        LEFT JOIN
+        sys_org org ON bc.teaching_room_id = org.id
+        AND org.enable = TRUE
+        <where>
+            <if test="belongOrgId != null and belongOrgId != ''">
+                AND bc.teaching_room_id = #{belongOrgId}
+            </if>
+            <if test="courseName != null and courseName != ''">
+                AND bc.name LIKE CONCAT('%',#{courseName},'%')
+            </if>
+            <if test="startCreateTime != null and startCreateTime != ''">
+                AND bc.create_time >= #{startCreateTime}
+            </if>
+            <if test="endCreateTime != null and endCreateTime != ''">
+                AND #{endCreateTime} >= bc.create_time
+            </if>
+            <if test="schoolId != null and schoolId != ''">
+                and bc.school_id = #{schoolId}
+            </if>
+            <if test="dpr != null">
+                <if test="dpr.requestUserId != null">
+                    AND bc.create_id = #{dpr.requestUserId}
+                </if>
+                <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                    AND bc.org_id IN
+                    <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                </if>
+            </if>
+        </where>
+        ORDER BY createTime DESC
+    </select>
 </mapper>

+ 46 - 0
teachcloud-common/src/main/resources/mapper/BasicStudentMapper.xml

@@ -165,4 +165,50 @@
         </where>
         ORDER BY stu.create_time DESC
     </select>
+    <select id="listExportData" resultType="com.qmth.teachcloud.common.bean.dto.BasicStudentExportDto">
+        SELECT
+            stu.id,
+            student_name AS studentName,
+            student_code AS studentCode,
+            phone_number AS phoneNumber,
+            bc.id AS collegeId,
+            bc.college_name AS collegeName,
+            bm.id AS majorId,
+            bm.name AS majorName,
+            clazz_id AS clazzId,
+            clz.clazz_name AS clazzName,
+            stu.enable,
+            stu.create_id AS createId,
+            stu.create_time AS createTime
+        FROM
+            basic_student stu
+        LEFT JOIN
+            basic_clazz clz ON stu.clazz_id = clz.id AND clz.enable = TRUE
+        LEFT JOIN
+            basic_major bm ON stu.major_id = bm.id AND bm.enable = TRUE
+        LEFT JOIN
+            basic_college bc ON stu.belong_org_id = bc.id
+        <where>
+            and stu.enable = true
+            <if test="schoolId != null and schoolId != ''">
+                and stu.school_id = #{schoolId}
+            </if>
+            <if test="collegeId != null and collegeId != ''">
+                and stu.belong_org_id = #{collegeId}
+            </if>
+            <if test="majorId != null and majorId != ''">
+                and stu.major_id = #{majorId}
+            </if>
+            <if test="clazzId != null and clazzId != ''">
+                and stu.clazz_id = #{clazzId}
+            </if>
+            <if test="studentCodeList != null and studentCodeList != '' and studentCodeList.size > 0">
+                AND stu.student_code IN
+                <foreach collection="studentCodeList" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        ORDER BY stu.create_time DESC
+    </select>
 </mapper>

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

@@ -373,4 +373,44 @@
         </where>
     </select>
 
+    <select id="listExportData" resultType="com.qmth.teachcloud.common.bean.dto.UserExportDto">
+        SELECT
+        a.id,
+        a.school_id schoolId,
+        a.login_name loginName,
+        a.real_name realName,
+        a.mobile_number mobileNumber,
+        a.enable,
+        a.remark,
+        a.org_id orgId,
+        a.code code,
+        c.marker_status as markerStatus,
+        c.marker_leader_status as markerLeaderStatus,
+        b.name orgName
+        FROM
+        sys_user a
+        left join
+        sys_org b on a.org_id = b.id
+        LEFT JOIN
+        cloud_user_push_status c on a.school_id = c.school_id and a.id = c.user_id
+        <where>
+            <if test="schoolId != null and schoolId != ''">
+                and a.school_id = #{schoolId}
+            </if>
+            <if test="userInfo != null and userInfo != ''">
+                and (a.login_name like concat('%', #{userInfo} , '%') or a.real_name like concat('%', #{userInfo} , '%') or a.mobile_number like concat('%', #{userInfo} , '%'))
+            </if>
+            <if test="orgId != null and orgId != ''">
+                and a.org_id = #{orgId}
+            </if>
+            <if test="roleId != null and roleId != ''">
+                and a.id in (select user_id from sys_user_role b where b.role_id = #{roleId})
+            </if>
+            <if test="enable != null and enable != '' or enable == 0">
+                and a.enable = #{enable}
+            </if>
+        </where>
+        order by a.create_time desc
+    </select>
+
 </mapper>