소스 검색

组织机构导出

caozixuan 2 년 전
부모
커밋
e6eb970e9a

+ 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);
     }
 }
 

+ 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;
 

+ 10 - 0
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;
@@ -151,4 +152,13 @@ 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;
 }

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

@@ -4,6 +4,8 @@ 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.UserExportDto;
+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 +22,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 +31,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>
@@ -469,6 +474,36 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         // todo 机构导出 未完成
     }
 
+    @Override
+    public void exportOrgData(HttpServletResponse response, boolean withoutPrintingRoom) throws Exception {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        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("学校级机构不存在");
+        }
+        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);
+        }
+        // 生成excel文件
+        ExcelUtil.excelExport("机构数据", SysOrgImportDto.class, sysOrgImportDtoList, response);
+    }
+
     /**
      * 根据子机构id深度优先搜索其父机构们
      *
@@ -551,4 +586,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);
+            }
+        }
+    }
 }