Ver código fonte

Merge remote-tracking branch 'origin/dev_v3.2.2' into dev_v3.2.2

wangliang 2 anos atrás
pai
commit
3e1de74f65
17 arquivos alterados com 224 adições e 90 exclusões
  1. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/PrintPlanStatusEnum.java
  2. 5 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java
  3. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java
  4. 65 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  5. 15 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  6. 3 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java
  7. 1 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java
  8. 3 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysOrgController.java
  9. 7 7
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/BasicCourseExportDto.java
  10. 9 9
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/BasicStudentExportDto.java
  11. 9 9
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/UserExportDto.java
  12. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/excel/SysOrgImportDto.java
  13. 9 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java
  14. 1 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java
  15. 55 23
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java
  16. 1 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java
  17. 35 23
      teachcloud-common/src/main/resources/mapper/BasicStudentMapper.xml

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/PrintPlanStatusEnum.java

@@ -15,8 +15,7 @@ public enum PrintPlanStatusEnum {
     READY("就绪"),
     PRINTING("印刷中"),
     PRINT_FINISH("印刷完成"),
-    END("已结束")
-    ;
+    END("已结束");
     private final String desc;
 
     PrintPlanStatusEnum(String desc) {
@@ -26,6 +25,7 @@ public enum PrintPlanStatusEnum {
     public String getDesc() {
         return desc;
     }
+
     public static List<EnumResult> listTypes() {
         List<EnumResult> list = new ArrayList<>();
         for (PrintPlanStatusEnum value : PrintPlanStatusEnum.values()) {

+ 5 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java

@@ -12,14 +12,13 @@ import com.qmth.distributed.print.business.entity.ExamDetail;
 import com.qmth.distributed.print.business.entity.ExamDetailCourse;
 import com.qmth.distributed.print.business.enums.ExamDataSourceEnum;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
-import com.qmth.teachcloud.common.entity.BasicRoleDataPermission;
 import com.qmth.teachcloud.common.entity.SysUser;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * <p>
@@ -86,7 +85,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
      * @param startDate       考试开始日期
      * @param endDate         考试结束日期
      * @param pageSize        分页数量
-     * @param dpr          权限控制参数
+     * @param dpr             权限控制参数
      * @return 查询结果
      */
     IPage<ExaminationResult> findExaminationBriefPage(Long schoolId, Long semesterId, Long examId, List<Long> printPlanIdList, String courseCode, String paperNumber,
@@ -106,7 +105,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
      * @param packageCode     卷袋编号
      * @param startDate       考试日期-起始
      * @param endDate         考试日期-终止
-     * @param dpr          权限控制参数
+     * @param dpr             权限控制参数
      * @return 查询结果
      */
     SummarizedDataResult findSummarizedData(Long schoolId, Long semesterId, Long examId, List<Long> printPlanIdList, String courseCode, String paperNumber,
@@ -241,4 +240,6 @@ public interface ExamDetailService extends IService<ExamDetail> {
      * @return
      */
     List<ExamDetailPdfDownloadDto> findPdfDownload(List<Long> ids);
+
+    void dataDelete(Long id);
 }

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

@@ -233,4 +233,6 @@ public interface ExamTaskService extends IService<ExamTask> {
     List<ExamTaskExamStudentImportResult> examTaskExamStudentImport(MultipartFile file, SysUser requestUser) throws IOException, NoSuchFieldException, IllegalAccessException;
 
     void delete(Long id);
+
+    void applyDelete(Long id);
 }

+ 65 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -139,7 +139,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     public IPage<PrintTaskDto> listPrintTask(Long semesterId, Long examId, Long printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime, Long printStartTime, Long printEndTime, Long printHouseId, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(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());
         Page<PrintTaskDto> page = new Page<>(pageNumber, pageSize);
         return this.baseMapper.listPrintTask(page, schoolId, semesterId, examId, printPlanId, status, courseCode, paperNumber, examPlace, examRoom, examStartTime, examEndTime, printStartTime, printEndTime, printHouseId, dpr);
     }
@@ -148,7 +148,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     public PrintTaskTotalDto taskTotalData(Long printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime, Long printStartTime, Long printEndTime, Long printHouseId) {
         Long schoolId = Long.valueOf(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());
         PrintTaskTotalDto printTaskTotalDto = this.baseMapper.taskTotalData(schoolId, printPlanId, status, courseCode, paperNumber, examPlace, examRoom, examStartTime, examEndTime, printStartTime, printEndTime, printHouseId, dpr);
 
         if (printTaskTotalDto != null) {
@@ -184,7 +184,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
                 JSONObject object = jsonArray.getJSONObject(i);
                 JSONObject jsonObject = new JSONObject();
                 jsonObject.put(SystemConstant.TYPE, Objects.nonNull(object.get("printType")) ? PdfTypeEnum.valueOf((String) object.get("printType")) : null);
-                jsonObject.put("url", Objects.nonNull(object.get(SystemConstant.PDF_PATH)) ? teachcloudCommonService.filePreviewByPathAndType((String) object.get(SystemConstant.PDF_PATH),(String) object.get(SystemConstant.UPLOAD_TYPE), (String) object.get("type"), false) : null);
+                jsonObject.put("url", Objects.nonNull(object.get(SystemConstant.PDF_PATH)) ? teachcloudCommonService.filePreviewByPathAndType((String) object.get(SystemConstant.PDF_PATH), (String) object.get(SystemConstant.UPLOAD_TYPE), (String) object.get("type"), false) : null);
                 list.add(jsonObject);
             }
         }
@@ -682,7 +682,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             examStudent.setClazzId(String.valueOf(basicClazzService.getOne(new QueryWrapper<BasicClazz>()
                     .lambda()
                     .eq(BasicClazz::getClazzName, examStudent.getClazzName())
-                    .eq(BasicClazz::getSchoolId,examStudent.getSchoolId())).getId()));
+                    .eq(BasicClazz::getSchoolId, examStudent.getSchoolId())).getId()));
         }
         examStudentService.saveBatch(examStudentList);
 
@@ -712,7 +712,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         }
         List<Long> printPlanIdList = null;
         if (map.get("printPlanIdList") != null) {
-            printPlanIdList = JSON.parseArray(map.get("printPlanIdList").toString(),Long.class);
+            printPlanIdList = JSON.parseArray(map.get("printPlanIdList").toString(), Long.class);
         }
         String courseCode = null;
         if (map.get("courseCode") != null) {
@@ -898,6 +898,66 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         return examDetailMapper.findPdfDownload(ids);
     }
 
+    @Transactional
+    @Override
+    public void dataDelete(Long id) {
+        ExamDetail examDetail = this.getById(id);
+        if (examDetail == null) {
+            throw ExceptionResultEnum.ERROR.exception("考场数据不存在");
+        }
+        if (ExamDetailStatusEnum.WAITING.equals(examDetail.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception("考场数据已提交印刷,请先撤回后再删除");
+        } else if (ExamDetailStatusEnum.PRINTING.equals(examDetail.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception("考场数据已提交印刷,正在打印中,无法删除");
+        } else if (ExamDetailStatusEnum.FINISH.equals(examDetail.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception("考场数据已打印完成,无法删除");
+        }
+        //删除exam_detail
+        this.removeById(id);
+        // 删除exam_detail_course
+        QueryWrapper<ExamDetailCourse> examDetailCourseQueryWrapper = new QueryWrapper<>();
+        examDetailCourseQueryWrapper.lambda().eq(ExamDetailCourse::getExamDetailId, id);
+        List<ExamDetailCourse> examDetailCourses = examDetailCourseService.list(examDetailCourseQueryWrapper);
+        if (!examDetailCourses.isEmpty()) {
+            for (ExamDetailCourse examDetailCourse : examDetailCourses) {
+                examDetailCourseService.removeById(examDetailCourse.getId());
+
+                // 删除 exam_student
+                QueryWrapper<ExamStudent> examStudentQueryWrapper = new QueryWrapper<>();
+                examStudentQueryWrapper.lambda().eq(ExamStudent::getExamDetailCourseId, examDetailCourse.getId());
+                List<ExamStudent> examStudents = examStudentService.list(examStudentQueryWrapper);
+                if (!examStudents.isEmpty()) {
+                    List<Long> examStudentIds = examStudents.stream().map(ExamStudent::getId).collect(Collectors.toList());
+                    examStudentService.removeByIds(examStudentIds);
+                }
+            }
+        }
+
+        // 修改exam_print_plan状态
+        QueryWrapper<ExamDetail> examDetailQueryWrapper = new QueryWrapper<>();
+        examDetailQueryWrapper.lambda().eq(ExamDetail::getPrintPlanId, examDetail.getPrintPlanId());
+        List<ExamDetail> examDetailList = this.list(examDetailQueryWrapper);
+        PrintPlanStatusEnum printPlanStatusEnum = PrintPlanStatusEnum.READY;
+        if (examDetailList.isEmpty()) {
+            printPlanStatusEnum = PrintPlanStatusEnum.NEW;
+        } else {
+            // 打印中
+            long printingCount = examDetailList.stream().filter(m -> m.getStatus().equals(ExamDetailStatusEnum.PRINTING)).count();
+            // 已完成
+            long finishCount = examDetailList.stream().filter(m -> !m.getStatus().equals(ExamDetailStatusEnum.FINISH)).count();
+            if (printingCount > 0) {
+                printPlanStatusEnum = PrintPlanStatusEnum.PRINTING;
+            } else if (finishCount == 0) {
+                printPlanStatusEnum = PrintPlanStatusEnum.PRINT_FINISH;
+            }
+
+        }
+        // 由于考场数据变动,要同步更新最新的计划状态
+        UpdateWrapper<ExamPrintPlan> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(ExamPrintPlan::getStatus, printPlanStatusEnum).eq(ExamPrintPlan::getId, examDetail.getPrintPlanId());
+        examPrintPlanService.update(updateWrapper);
+    }
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void deleteExaminationData(Long printPlanId, ExamDataSourceEnum source) {

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

@@ -2221,6 +2221,21 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         this.removeByExamTaskId(id);
     }
 
+    @Transactional
+    @Override
+    public void applyDelete(Long id) {
+        ExamTask examTask = this.getById(id);
+        QueryWrapper<TFFlowApprove> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(TFFlowApprove::getFlowId, examTask.getFlowId());
+        TFFlowApprove tfFlowApprove = tfFlowApproveService.getOne(queryWrapper);
+        //审核状态
+        if (tfFlowApprove != null && !tfFlowApprove.getStatus().equals(FlowStatusEnum.START) && !tfFlowApprove.getStatus().equals(FlowStatusEnum.REJECT) && !tfFlowApprove.getStatus().equals(FlowStatusEnum.CANCEL)) {
+            throw ExceptionResultEnum.ERROR.exception("当前状态无法删除");
+        }
+        this.removeById(id);
+        this.removeByExamTaskId(id);
+    }
+
     /**
      * 简单校验提交参数
      *

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

@@ -253,13 +253,14 @@ public class ExamDetailController {
 
     /**
      * 考务数据导入-删除
+     * @param id examDetail表id
+     * @return
      */
     @ApiOperation(value = "考务数据导入-删除")
     @RequestMapping(value = "/data_delete", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.DELETE)
     public Result dataDelete(@RequestParam Long id) {
-//        examTaskService.delete(id);
-        // todo 考务数据导入-删除未做
+        examDetailService.dataDelete(id);
         return ResultUtil.ok(true);
     }
 }

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

@@ -293,8 +293,7 @@ public class ExamTaskController {
     @RequestMapping(value = "/apply_delete", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.DELETE)
     public Result applyDelete(@RequestParam Long id) {
-//        examTaskService.delete(id);
-        //todo 入库申请-删除未做
+        examTaskService.applyDelete(id);
         return ResultUtil.ok(true);
     }
 

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

@@ -59,7 +59,7 @@ public class SysOrgController {
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
     public Result list(@RequestParam(value = "specialPrivilege", required = false) SpecialPrivilegeEnum specialPrivilege,
                        @RequestParam(value = "withoutPrintingRoom", required = false) boolean withoutPrintingRoom) {
-        return ResultUtil.ok(sysOrgService.listOrgTree(specialPrivilege,withoutPrintingRoom));
+        return ResultUtil.ok(sysOrgService.listOrgTree(specialPrivilege, withoutPrintingRoom));
     }
 
     /**
@@ -134,8 +134,8 @@ public class SysOrgController {
     @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);
+    public void export(HttpServletResponse response) throws Exception {
+        sysOrgService.exportOrgData(response, false);
     }
 }
 

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

@@ -17,24 +17,24 @@ public class BasicCourseExportDto {
     @ApiModelProperty(value = "课程id")
     private Long id;
 
-    @ExcelProperty(name = "课程名称", width = 30, index = 1)
+    @ExcelProperty(name = "课程名称", width = 20, index = 1)
     private String courseName;
 
-    @ExcelProperty(name = "课程编码", width = 30, index = 2)
+    @ExcelProperty(name = "课程编码", width = 20, index = 2)
     private String courseCode;
 
-    @ExcelProperty(name = "开课部门", width = 30, index = 3)
+    @ExcelProperty(name = "开课部门", width = 20, index = 3)
     private String teachingRoomName;
 
     @ApiModelProperty(value = "班级信息集合")
     private List<ClazzDatasourceResult> clazzList;
 
-    @ExcelProperty(name = "开课部门", width = 30, index = 4)
+    @ExcelProperty(name = "授课班级", width = 20, index = 4)
     private String clazzName;
 
     private Boolean enable;
 
-    @ExcelProperty(name = "状态", width = 30, index = 5)
+    @ExcelProperty(name = "状态", width = 15, index = 5)
     private String enableName;
 
     public Long getId() {
@@ -97,7 +97,7 @@ public class BasicCourseExportDto {
         return enableName;
     }
 
-    public void setEnableName() {
-        this.enableName = this.enable ? "启用" : "禁用";
+    public void setEnableName(String enableName) {
+        this.enableName = enableName;
     }
 }

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

@@ -9,27 +9,27 @@ public class BasicStudentExportDto {
 
     private Long id;
 
-    @ExcelProperty(name = "学生姓名", width = 30, index = 1)
+    @ExcelProperty(name = "学生姓名", width = 15, index = 1)
     private String studentName;
 
-    @ExcelProperty(name = "学生学号", width = 30, index = 2)
+    @ExcelProperty(name = "学生学号", width = 15, index = 2)
     private String studentCode;
 
-    @ExcelProperty(name = "手机号", width = 30, index = 3)
+    @ExcelProperty(name = "手机号", width = 15, index = 3)
     private String phoneNumber;
 
-    @ExcelProperty(name = "学院", width = 30, index = 4)
+    @ExcelProperty(name = "学院", width = 15, index = 4)
     private String collegeName;
 
-    @ExcelProperty(name = "专业", width = 30, index = 5)
+    @ExcelProperty(name = "专业", width = 20, index = 5)
     private String majorName;
 
-    @ExcelProperty(name = "班级", width = 30, index = 6)
+    @ExcelProperty(name = "班级", width = 10, index = 6)
     private String clazzName;
 
     private Boolean enable;
 
-    @ExcelProperty(name = "状态", width = 30, index = 7)
+    @ExcelProperty(name = "状态", width = 8, index = 7)
     private String enableName;
 
     public Long getId() {
@@ -100,7 +100,7 @@ public class BasicStudentExportDto {
         return enableName;
     }
 
-    public void setEnableName() {
-        this.enableName = this.enable ? "启用" : "禁用";
+    public void setEnableName(String enableName) {
+        this.enableName = enableName;
     }
 }

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

@@ -14,21 +14,21 @@ public class UserExportDto {
 
     private Long id;
 
-    @ExcelProperty(name = "用户名", width = 30, index = 1)
+    @ExcelProperty(name = "用户名", width = 10, index = 1)
     private String loginName;
-    @ExcelProperty(name = "姓名", width = 30, index = 2)
+    @ExcelProperty(name = "姓名", width = 10, index = 2)
     private String realName;
-    @ExcelProperty(name = "工号", width = 30, index = 3)
+    @ExcelProperty(name = "工号", width = 10, index = 3)
     private String code;
-    @ExcelProperty(name = "手机号", width = 40, index = 4)
+    @ExcelProperty(name = "手机号", width = 15, index = 4)
     private String mobileNumber;
     private Boolean enable;
-    @ExcelProperty(name = "所在机构", width = 50, index = 5)
+    @ExcelProperty(name = "所在机构", width = 20, index = 5)
     private String orgName;
     private List<SysRole> roles;
-    @ExcelProperty(name = "角色", width = 50, index = 6)
+    @ExcelProperty(name = "角色", width = 30, index = 6)
     private String roleName;
-    @ExcelProperty(name = "状态", width = 30, index = 7)
+    @ExcelProperty(name = "状态", width = 8, index = 7)
     private String enableName;
 
     public Long getId() {
@@ -107,7 +107,7 @@ public class UserExportDto {
         return enableName;
     }
 
-    public void setEnableName() {
-        this.enableName = this.enable ? "启用" : "禁用";
+    public void setEnableName(String enableName) {
+        this.enableName = enableName;
     }
 }

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/excel/SysOrgImportDto.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.common.bean.dto.excel;
 
 import com.qmth.teachcloud.common.annotation.ExcelImportTempleteVaild;
 import com.qmth.teachcloud.common.annotation.ExcelNote;
+import com.qmth.teachcloud.common.annotation.ExcelProperty;
 
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
@@ -14,6 +15,7 @@ import java.io.Serializable;
 @ExcelImportTempleteVaild(value = true)
 public class SysOrgImportDto implements Serializable {
     @ExcelNote(value = "组织架构")
+    @ExcelProperty(name = "组织架构", width = 30, index = 1)
     @NotNull
     private String name;
 

+ 9 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java

@@ -6,6 +6,7 @@ import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -150,5 +151,12 @@ public interface SysOrgService extends IService<SysOrg> {
      */
     List<SysOrg> findCollegeLevelOrgList(Long schoolId);
 
-    void exportData(boolean withoutPrintingRoom);
+    /**
+     * 组织架构信息导出
+     *
+     * @param response            response
+     * @param withoutPrintingRoom 不包含印刷室
+     * @throws Exception e
+     */
+    void exportOrgData(HttpServletResponse response, boolean withoutPrintingRoom) throws Exception;
 }

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

@@ -323,6 +323,7 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
             } else {
                 basicCourseExportDto.setClazzName("");
             }
+            basicCourseExportDto.setEnableName(basicCourseExportDto.getEnable() ? "启用" : "禁用");
         }
         ExcelUtil.excelExport("课程数据", BasicCourseExportDto.class, courseExportDtos, response);
     }

+ 55 - 23
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.teachcloud.common.bean.dto.OrgDto;
+import com.qmth.teachcloud.common.bean.dto.excel.SysOrgImportDto;
 import com.qmth.teachcloud.common.bean.params.UserSaveParams;
 import com.qmth.teachcloud.common.bean.result.SysUserResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -20,6 +21,7 @@ import com.qmth.teachcloud.common.service.CommonCacheService;
 import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.service.SysRoleService;
 import com.qmth.teachcloud.common.service.SysUserService;
+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.collections4.CollectionUtils;
@@ -28,9 +30,11 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -441,32 +445,33 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     }
 
     @Override
-    public void exportData(boolean withoutPrintingRoom) {
+    public void exportOrgData(HttpServletResponse response, boolean withoutPrintingRoom) throws Exception {
         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);
-                }
-            }
+        List<SysOrgImportDto> sysOrgImportDtoList = new ArrayList<>();
+        SysOrg schoolLevelOrg = this.getOne(new QueryWrapper<SysOrg>().lambda()
+                .eq(SysOrg::getSchoolId, schoolId)
+                .eq(SysOrg::getType, OrgTypeEnum.SCHOOL));
+        if (Objects.isNull(schoolLevelOrg)) {
+            throw ExceptionResultEnum.ERROR.exception("学校级机构不存在");
         }
-        for (Long key : deleteKeys) {
-            map.remove(key);
+        Long schoolLevelOrgId = schoolLevelOrg.getId();
+        this.buildChildOrgInfoByParentId(schoolLevelOrgId, null, sysOrgImportDtoList);
+        if (!withoutPrintingRoom) {
+            // 需要导出印刷厂
+            List<SysOrg> printHousesOrg = this.list(new QueryWrapper<SysOrg>()
+                    .lambda()
+                    .eq(SysOrg::getSchoolId, schoolId)
+                    .eq(SysOrg::getParentId, schoolLevelOrgId)
+                    .eq(SysOrg::getType, OrgTypeEnum.PRINTING_HOUSE));
+            List<SysOrgImportDto> printHouses = printHousesOrg.stream().flatMap(e -> {
+                SysOrgImportDto sysOrgImportDto = new SysOrgImportDto();
+                sysOrgImportDto.setName(e.getName());
+                return Stream.of(sysOrgImportDto);
+            }).collect(Collectors.toList());
+            sysOrgImportDtoList.addAll(printHouses);
         }
-        List<OrgDto> orgDtos = new ArrayList<>(map.values());
-        // todo 机构导出 未完成
+        // 生成excel文件
+        ExcelUtil.excelExport("机构数据", SysOrgImportDto.class, sysOrgImportDtoList, response);
     }
 
     /**
@@ -551,4 +556,31 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
 
         return sysOrg;
     }
+
+    /**
+     * 根据父机构id构建该父机构下所有子机构信息集合
+     *
+     * @param parentId   父机构id
+     * @param parentInfo 父机构信息
+     * @param result     子机构信息结果集
+     */
+    private void buildChildOrgInfoByParentId(Long parentId, String parentInfo, List<SysOrgImportDto> result) {
+        if (SystemConstant.longNotNull(parentId)) {
+            List<SysOrg> childOrgList = this.list(new QueryWrapper<SysOrg>().lambda()
+                    .eq(SysOrg::getParentId, parentId))
+                    .stream()
+                    .filter(e -> !OrgTypeEnum.PRINTING_HOUSE.equals(e.getType()))
+                    .collect(Collectors.toList());
+            for (SysOrg child : childOrgList) {
+                String orgInfo = child.getName();
+                if (SystemConstant.strNotNull(parentInfo)) {
+                    orgInfo = parentInfo + SystemConstant.ORG_SPLIT + orgInfo;
+                }
+                SysOrgImportDto sysOrgImportDto = new SysOrgImportDto();
+                sysOrgImportDto.setName(orgInfo);
+                result.add(sysOrgImportDto);
+                this.buildChildOrgInfoByParentId(child.getId(), orgInfo, result);
+            }
+        }
+    }
 }

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

@@ -1084,6 +1084,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 List<String> roleList = roles.stream().map(SysRole::getName).collect(Collectors.toList());
                 m.setRoleName(String.join(",", roleList));
             }
+            m.setEnableName(m.getEnable() ? "启用" : "禁用");
         });
         // 生成excel文件
         ExcelUtil.excelExport("用户数据", UserExportDto.class, userExportDtos, response);

+ 35 - 23
teachcloud-common/src/main/resources/mapper/BasicStudentMapper.xml

@@ -167,29 +167,33 @@
     </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
+        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,
+        case stu.enable when true then '启用' else '禁用' end enableName,
+        stu.create_id AS createId,
+        stu.create_time AS createTime
         FROM
-            basic_student stu
+        basic_student stu
         LEFT JOIN
-            basic_clazz clz ON stu.clazz_id = clz.id AND clz.enable = TRUE
+        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
+        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
+        basic_college bc ON stu.belong_org_id = bc.id
         <where>
             and stu.enable = true
+            <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 != ''">
                 and stu.school_id = #{schoolId}
             </if>
@@ -199,15 +203,23 @@
             <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=")">
+            <if test="clazzIdList != null and clazzIdList != '' and clazzIdList.size > 0">
+                AND stu.clazz_id IN
+                <foreach collection="clazzIdList" item="item" index="index" open="(" separator="," close=")">
                     #{item}
                 </foreach>
             </if>
+            <if test="dpr != null">
+                <if test="dpr.requestUserId != null">
+                    AND stu.create_id = #{dpr.requestUserId}
+                </if>
+                <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                    AND stu.org_id IN
+                    <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                </if>
+            </if>
         </where>
         ORDER BY stu.create_time DESC
     </select>