Răsfoiți Sursa

作者:张哲
时间:2023/06/05
类型:需求变更
描述:下载报表

zizg 1 an în urmă
părinte
comite
4b3f212b7f
20 a modificat fișierele cu 589 adăugiri și 15 ștergeri
  1. 15 1
      src/main/java/com/redxun/knowledge/analysis/controller/AnalysisCommonController.java
  2. 31 0
      src/main/java/com/redxun/knowledge/analysis/entity/dto/DownloadDto.java
  3. 53 0
      src/main/java/com/redxun/knowledge/analysis/entity/enums/DownloadNameEnum.java
  4. 50 0
      src/main/java/com/redxun/knowledge/analysis/entity/enums/DownloadTypeEnum.java
  5. 2 0
      src/main/java/com/redxun/knowledge/analysis/entity/vo/AlbumCompanyVo.java
  6. 24 0
      src/main/java/com/redxun/knowledge/analysis/entity/vo/DownloadInfoVo.java
  7. 2 0
      src/main/java/com/redxun/knowledge/analysis/entity/vo/KnowledgeCompanyVo.java
  8. 2 0
      src/main/java/com/redxun/knowledge/analysis/entity/vo/MapCompanyVo.java
  9. 2 0
      src/main/java/com/redxun/knowledge/analysis/entity/vo/OrganizationSearchVo.java
  10. 3 0
      src/main/java/com/redxun/knowledge/analysis/entity/vo/SynthesizeCompanyVo.java
  11. 1 0
      src/main/java/com/redxun/knowledge/analysis/service/AnalysisAlbumServiceImpl.java
  12. 1 0
      src/main/java/com/redxun/knowledge/analysis/service/AnalysisCommonServiceImpl.java
  13. 282 0
      src/main/java/com/redxun/knowledge/analysis/service/AnalysisDownloadService.java
  14. 1 0
      src/main/java/com/redxun/knowledge/analysis/service/AnalysisMapServiceImpl.java
  15. 1 3
      src/main/java/com/redxun/knowledge/analysis/service/AnalysisSearchServiceImpl.java
  16. 1 0
      src/main/java/com/redxun/knowledge/analysis/service/AnalysisSynthesizeServiceImpl.java
  17. 99 0
      src/main/java/com/redxun/knowledge/analysis/utils/ExcelUtils.java
  18. 1 0
      src/main/java/com/redxun/knowledge/common/UserService.java
  19. 2 1
      src/main/java/com/redxun/knowledge/controller/KnowledgeController.java
  20. 16 10
      src/main/java/com/redxun/knowledge/service/KnowledgeServiceImpl.java

+ 15 - 1
src/main/java/com/redxun/knowledge/analysis/controller/AnalysisCommonController.java

@@ -1,12 +1,12 @@
 package com.redxun.knowledge.analysis.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.redxun.common.annotation.ClassDefine;
 import com.redxun.common.base.entity.JsonPageResult;
 import com.redxun.common.base.entity.JsonResult;
 import com.redxun.common.base.entity.QueryData;
 
+import com.redxun.knowledge.analysis.entity.dto.DownloadDto;
 import com.redxun.knowledge.analysis.entity.dto.PersonVisitDto;
 import com.redxun.knowledge.analysis.entity.page.MyJsonResult;
 import com.redxun.knowledge.analysis.entity.vo.*;
@@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.Date;
@@ -55,6 +56,9 @@ public class AnalysisCommonController {
     @Autowired
     private AnalysisSynthesizeServiceImpl analysisSynthesizeService;
 
+    @Autowired
+    private AnalysisDownloadService analysisDownloadService;
+
     @ApiOperation("PC 各模块整体数量统计")
     @GetMapping("totalAmount")
     public JsonResult totalAmount() {
@@ -322,4 +326,14 @@ public class AnalysisCommonController {
         List<SynthesizeCompanyVo> result = analysisSynthesizeService.personVisit(personVisitDto);
         return jsonResult.setData(result);
     }
+
+    @ApiOperation("人员模版导出")
+    @PostMapping("download")
+    public void download(@RequestBody @Valid DownloadDto downloadDto, BindingResult bindingResult, HttpServletResponse httpServletResponse){
+        if (bindingResult.hasErrors()){
+            throw new RuntimeException(bindingResult.toString());
+        }
+        analysisDownloadService.download(downloadDto,httpServletResponse);
+
+    }
 }

+ 31 - 0
src/main/java/com/redxun/knowledge/analysis/entity/dto/DownloadDto.java

@@ -0,0 +1,31 @@
+package com.redxun.knowledge.analysis.entity.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 文件名: DownloadDto
+ * 作者: zizg
+ * 时间: 2023/6/1
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@ApiModel("文件导出")
+@Data
+public class DownloadDto extends PersonVisitDto{
+
+    @ApiModelProperty("导出模块 1 综合统计 2 仓库统计 3 专辑统计 4 地图统计 5 搜索统计")
+    @NotNull(message = "导出模块不能为空")
+    private Integer name;
+
+    @ApiModelProperty("导出类型 1 人员 2 部门")
+    @NotNull(message = "导出类型不能为空")
+    private Integer downType;
+
+}

+ 53 - 0
src/main/java/com/redxun/knowledge/analysis/entity/enums/DownloadNameEnum.java

@@ -0,0 +1,53 @@
+package com.redxun.knowledge.analysis.entity.enums;
+
+/**
+ * 文件名: AlbumEnum
+ * 作者: Zizg
+ * 时间: 2023/2/2
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+public enum DownloadNameEnum {
+
+    TOTAL(1,"综合统计"),
+    KNOWLEDGE(2,"仓库统计"),
+    ALBUM(3,"专辑统计"),
+    MAP(4,"地图统计"),
+    SEARCH(5, "搜索统计");
+
+    private Integer code;
+    private String message;
+
+    DownloadNameEnum(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public static String getMessage(Integer code) {
+        DownloadNameEnum[] albumInfoEnums = values();
+        for (DownloadNameEnum albumInfoEnum : albumInfoEnums) {
+            if (albumInfoEnum.code.equals(code)) {
+                return albumInfoEnum.message;
+            }
+        }
+        return null;
+    }
+}

+ 50 - 0
src/main/java/com/redxun/knowledge/analysis/entity/enums/DownloadTypeEnum.java

@@ -0,0 +1,50 @@
+package com.redxun.knowledge.analysis.entity.enums;
+
+/**
+ * 文件名: AlbumEnum
+ * 作者: Zizg
+ * 时间: 2023/2/2
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+public enum DownloadTypeEnum {
+
+    PERSON(1,"员工"),
+    ORGANIZED(2,"部门");
+
+    private Integer code;
+    private String message;
+
+    DownloadTypeEnum(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public static String getMessage(Integer code) {
+        DownloadTypeEnum[] albumInfoEnums = values();
+        for (DownloadTypeEnum albumInfoEnum : albumInfoEnums) {
+            if (albumInfoEnum.code.equals(code)) {
+                return albumInfoEnum.message;
+            }
+        }
+        return null;
+    }
+}

+ 2 - 0
src/main/java/com/redxun/knowledge/analysis/entity/vo/AlbumCompanyVo.java

@@ -27,4 +27,6 @@ public class AlbumCompanyVo implements Serializable {
 
     @ApiModelProperty("专辑访问总量")
     private Integer pv;
+
+    private String pkId;
 }

+ 24 - 0
src/main/java/com/redxun/knowledge/analysis/entity/vo/DownloadInfoVo.java

@@ -0,0 +1,24 @@
+package com.redxun.knowledge.analysis.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 文件名: DonwloadInfoVo
+ * 作者: zizg
+ * 时间: 2023/6/1
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Data
+public class DownloadInfoVo implements Serializable {
+
+    private String personName;
+
+    private String deptName;
+
+    private Long num;
+}

+ 2 - 0
src/main/java/com/redxun/knowledge/analysis/entity/vo/KnowledgeCompanyVo.java

@@ -30,4 +30,6 @@ public class KnowledgeCompanyVo implements Serializable {
 
     @ApiModelProperty("文档知识创建量")
     private Integer archive;
+
+    private String pkId;
 }

+ 2 - 0
src/main/java/com/redxun/knowledge/analysis/entity/vo/MapCompanyVo.java

@@ -27,4 +27,6 @@ public class MapCompanyVo implements Serializable {
 
     @ApiModelProperty("地图访问总量")
     private Integer pv;
+
+    private String pkId;
 }

+ 2 - 0
src/main/java/com/redxun/knowledge/analysis/entity/vo/OrganizationSearchVo.java

@@ -22,4 +22,6 @@ public class OrganizationSearchVo implements Serializable {
     private String organization;
 
     private List<Map<String, Object>> item;
+
+    private String pkId;
 }

+ 3 - 0
src/main/java/com/redxun/knowledge/analysis/entity/vo/SynthesizeCompanyVo.java

@@ -37,4 +37,7 @@ public class SynthesizeCompanyVo implements Serializable {
 
     @ApiModelProperty("搜索服务访问量")
     private Integer search;
+
+    @ApiModelProperty("人员或部门id")
+    private String pkId;
 }

+ 1 - 0
src/main/java/com/redxun/knowledge/analysis/service/AnalysisAlbumServiceImpl.java

@@ -317,6 +317,7 @@ public class AnalysisAlbumServiceImpl {
             } else {
                 albumCompanyVo.setOrganization(userService.findDeptByDeptId(e).getName());
             }
+            albumCompanyVo.setPkId(e);
             return albumCompanyVo;
         }).collect(Collectors.toList());
         return result;

+ 1 - 0
src/main/java/com/redxun/knowledge/analysis/service/AnalysisCommonServiceImpl.java

@@ -415,6 +415,7 @@ public class AnalysisCommonServiceImpl {
             } else {
                 knowledgeCategoryVo.setOrganization(userService.findDeptByDeptId(e).getName());
             }
+            knowledgeCategoryVo.setPkId(e);
             return knowledgeCategoryVo;
         }).collect(Collectors.toList());
         return result;

+ 282 - 0
src/main/java/com/redxun/knowledge/analysis/service/AnalysisDownloadService.java

@@ -0,0 +1,282 @@
+package com.redxun.knowledge.analysis.service;
+
+import com.redxun.common.tool.StringUtils;
+import com.redxun.knowledge.analysis.entity.vo.*;
+import com.redxun.knowledge.analysis.mapper.PvLogMapper;
+import com.redxun.knowledge.analysis.utils.ExcelUtils;
+import com.redxun.knowledge.analysis.entity.dto.DownloadDto;
+import com.redxun.knowledge.analysis.entity.dto.PersonVisitDto;
+import com.redxun.knowledge.common.UserService;
+import com.redxun.knowledge.utils.DateUtils;
+import io.swagger.models.auth.In;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 文件名: AnalysisDownload
+ * 作者: zizg
+ * 时间: 2023/6/1
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Service
+@Slf4j
+public class AnalysisDownloadService {
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private AnalysisSynthesizeServiceImpl analysisSynthesizeService;
+
+    @Autowired
+    private AnalysisCommonServiceImpl analysisCommonService;
+
+    @Autowired
+    private AnalysisAlbumServiceImpl analysisAlbumService;
+
+    @Autowired
+    private AnalysisMapServiceImpl analysisMapService;
+
+    @Autowired
+    private AnalysisSearchServiceImpl analysisSearchService;
+
+    @Autowired
+    private PvLogMapper pvLogMapper;
+
+    /**
+     * 导出模版
+     * @param downloadDto
+     */
+    public void download(DownloadDto downloadDto,HttpServletResponse httpServletResponse) {
+        //人员和部门都为空
+        if (CollectionUtils.isEmpty(downloadDto.getPersonId()) && StringUtils.isEmpty(downloadDto.getOrganizationId())){
+            ExcelUtils.downloadExcel(null,downloadDto.getName(),downloadDto.getDownType(),httpServletResponse);
+            return;
+        }
+        //查找对应数据
+        List<DownloadInfoVo> downloadInfoList = new ArrayList<>();
+        if (downloadDto.getName() == 1){
+            downloadInfoList = getModuleTotal(downloadDto);
+        } else if (downloadDto.getName() == 2){
+            downloadInfoList = getModuleKnowledge(downloadDto);
+        } else if (downloadDto.getName() == 3){
+            downloadInfoList = getModuleAlbum(downloadDto);
+        } else if (downloadDto.getName() == 4){
+            downloadInfoList = getModuleMap(downloadDto);
+        } else if (downloadDto.getName() == 5){
+            downloadInfoList = getModuleSearch(downloadDto);
+        }
+        //下载文件
+        ExcelUtils.downloadExcel(downloadInfoList,downloadDto.getName(),downloadDto.getDownType(),httpServletResponse);
+    }
+
+
+    //人员部门名称赋值
+    private String personDeptName(String userId, Integer type){
+        //查询人员(把用户id转成部门id)
+        if (type == 1){
+            userId  = userService.queryOsUserDto(userId).getDeptId();
+        }
+        String deptPath = pvLogMapper.findAllDeptIdByDeptId(userId);
+        deptPath = deptPath.substring(deptPath.indexOf(".") + 1);
+        String[] split = deptPath.split("\\.");
+        String organization = Arrays.stream(split).map(e -> userService.findDeptByDeptId(e).getName()).collect(Collectors.joining(">"));
+        return organization;
+    }
+
+    /**
+     * 综合统计赋值
+     * @param downloadDto
+     * @return
+     */
+    private List<DownloadInfoVo> getModuleTotal(DownloadDto downloadDto)  {
+        PersonVisitDto personVisitDto = new PersonVisitDto();
+        BeanUtils.copyProperties(downloadDto,personVisitDto);
+        List<SynthesizeCompanyVo> synthesizeCompanyVos = analysisSynthesizeService.personVisit(personVisitDto);
+        //导出赋值
+        List<DownloadInfoVo> downloadInfoList = synthesizeCompanyVos.parallelStream().map(e -> {
+            DownloadInfoVo downloadInfoVo = new DownloadInfoVo();
+            String userId = null;
+            if (downloadDto.getDownType() == 1){
+                userId = downloadDto.getPersonId().stream().filter(h -> h.equals(e.getPkId())).findFirst().orElse(null);
+            } else {
+                userId = Arrays.stream(downloadDto.getOrganizationId().split(",")).collect(Collectors.toList()).stream().filter(h -> h.equals(e.getPkId())).findFirst().orElse(null);
+            }
+            //名称赋值
+            downloadInfoVo.setPersonName(e.getOrganization());
+            //部门路径赋值(人员)
+            if (!CollectionUtils.isEmpty(personVisitDto.getPersonId())){
+                personVisitDto.setOrganizationId(null);
+                String deptName = personDeptName(userId,downloadDto.getDownType());
+                downloadInfoVo.setDeptName(deptName);
+            } else {
+                //查询部门
+                String deptName = personDeptName(userId,downloadDto.getDownType());
+                downloadInfoVo.setDeptName(deptName);
+            }
+            //数量赋值
+            downloadInfoVo.setNum(e.getTotal().longValue());
+            return downloadInfoVo;
+        }).collect(Collectors.toList());
+        return downloadInfoList;
+    }
+
+    /**
+     * 仓库统计赋值
+     * @param downloadDto
+     * @return
+     */
+    private List<DownloadInfoVo> getModuleKnowledge(DownloadDto downloadDto){
+        PersonVisitDto personVisitDto = new PersonVisitDto();
+        BeanUtils.copyProperties(downloadDto,personVisitDto);
+        List<KnowledgeCompanyVo> knowledgeCompanyVoList = analysisCommonService.personKnowledge(personVisitDto);
+        List<DownloadInfoVo> result = knowledgeCompanyVoList.parallelStream().map(e -> {
+            DownloadInfoVo downloadInfoVo = new DownloadInfoVo();
+            String userId = null;
+            if (downloadDto.getDownType() == 1){
+                userId = downloadDto.getPersonId().stream().filter(h -> h.equals(e.getPkId())).findFirst().orElse(null);
+            } else {
+                userId = Arrays.stream(downloadDto.getOrganizationId().split(",")).collect(Collectors.toList()).stream().filter(h -> h.equals(e.getPkId())).findFirst().orElse(null);
+            }
+            //名称赋值
+            downloadInfoVo.setPersonName(e.getOrganization());
+            //部门路径赋值(人员)
+            if (!CollectionUtils.isEmpty(personVisitDto.getPersonId())){
+                personVisitDto.setOrganizationId(null);
+                String deptName = personDeptName(userId,downloadDto.getDownType());
+                downloadInfoVo.setDeptName(deptName);
+            } else {
+                //查询部门
+                String deptName = personDeptName(userId,downloadDto.getDownType());
+                downloadInfoVo.setDeptName(deptName);
+            }
+            //数量赋值
+            downloadInfoVo.setNum(e.getTotal().longValue());
+            return downloadInfoVo;
+        }).collect(Collectors.toList());
+        return result;
+    }
+
+    /**
+     * 专辑统计赋值
+     * @param downloadDto
+     * @return
+     */
+    private List<DownloadInfoVo> getModuleAlbum(DownloadDto downloadDto){
+        PersonVisitDto personVisitDto = new PersonVisitDto();
+        BeanUtils.copyProperties(downloadDto,personVisitDto);
+        List<AlbumCompanyVo> albumCompanyVoList = analysisAlbumService.personAlbum(personVisitDto);
+        List<DownloadInfoVo> result = albumCompanyVoList.parallelStream().map(e -> {
+            DownloadInfoVo downloadInfoVo = new DownloadInfoVo();
+            String userId = null;
+            if (downloadDto.getDownType() == 1){
+                userId = downloadDto.getPersonId().stream().filter(h -> h.equals(e.getPkId())).findFirst().orElse(null);
+            } else {
+                userId = Arrays.stream(downloadDto.getOrganizationId().split(",")).collect(Collectors.toList()).stream().filter(h -> h.equals(e.getPkId())).findFirst().orElse(null);
+            }
+            //名称赋值
+            downloadInfoVo.setPersonName(e.getOrganization());
+            //部门路径赋值(人员)
+            if (!CollectionUtils.isEmpty(personVisitDto.getPersonId())){
+                personVisitDto.setOrganizationId(null);
+                String deptName = personDeptName(userId,downloadDto.getDownType());
+                downloadInfoVo.setDeptName(deptName);
+            } else {
+                //查询部门
+                String deptName = personDeptName(userId,downloadDto.getDownType());
+                downloadInfoVo.setDeptName(deptName);
+            }
+            //数量赋值
+            downloadInfoVo.setNum(e.getAlbum().longValue());
+            return downloadInfoVo;
+        }).collect(Collectors.toList());
+        return result;
+    }
+
+    /**
+     * 地图统计赋值
+     * @param downloadDto
+     * @return
+     */
+    private List<DownloadInfoVo> getModuleMap(DownloadDto downloadDto){
+        PersonVisitDto personVisitDto = new PersonVisitDto();
+        BeanUtils.copyProperties(downloadDto,personVisitDto);
+        List<MapCompanyVo> mapCompanyVoList = analysisMapService.personMap(personVisitDto);
+        List<DownloadInfoVo> result = mapCompanyVoList.parallelStream().map(e -> {
+            DownloadInfoVo downloadInfoVo = new DownloadInfoVo();
+            String userId = null;
+            if (downloadDto.getDownType() == 1){
+                userId = downloadDto.getPersonId().stream().filter(h -> h.equals(e.getPkId())).findFirst().orElse(null);
+            } else {
+                userId = Arrays.stream(downloadDto.getOrganizationId().split(",")).collect(Collectors.toList()).stream().filter(h -> h.equals(e.getPkId())).findFirst().orElse(null);
+            }
+            //名称赋值
+            downloadInfoVo.setPersonName(e.getOrganization());
+            //部门路径赋值(人员)
+            if (!CollectionUtils.isEmpty(personVisitDto.getPersonId())){
+                personVisitDto.setOrganizationId(null);
+                String deptName = personDeptName(userId,downloadDto.getDownType());
+                downloadInfoVo.setDeptName(deptName);
+            } else {
+                //查询部门
+                String deptName = personDeptName(userId,downloadDto.getDownType());
+                downloadInfoVo.setDeptName(deptName);
+            }
+            //数量赋值
+            downloadInfoVo.setNum(e.getMap().longValue());
+            return downloadInfoVo;
+        }).collect(Collectors.toList());
+        return result;
+    }
+
+    /**
+     * 搜索统计赋值
+     * @param downloadDto
+     * @return
+     */
+    private List<DownloadInfoVo> getModuleSearch(DownloadDto downloadDto){
+        PersonVisitDto personVisitDto = new PersonVisitDto();
+        BeanUtils.copyProperties(downloadDto,personVisitDto);
+        List<OrganizationSearchVo> organizationSearchVoList = analysisSearchService.personSearch(personVisitDto);
+        List<DownloadInfoVo> result = organizationSearchVoList.parallelStream().map(e -> {
+            DownloadInfoVo downloadInfoVo = new DownloadInfoVo();
+            String userId = null;
+            if (downloadDto.getDownType() == 1){
+                userId = downloadDto.getPersonId().stream().filter(h -> h.equals(e.getPkId())).findFirst().orElse(null);
+            } else {
+                userId = Arrays.stream(downloadDto.getOrganizationId().split(",")).collect(Collectors.toList()).stream().filter(h -> h.equals(e.getPkId())).findFirst().orElse(null);
+            }
+            //名称赋值
+            downloadInfoVo.setPersonName(e.getOrganization());
+            //部门路径赋值(人员)
+            if (!CollectionUtils.isEmpty(personVisitDto.getPersonId())){
+                personVisitDto.setOrganizationId(null);
+                String deptName = personDeptName(userId,downloadDto.getDownType());
+                downloadInfoVo.setDeptName(deptName);
+            } else {
+                //查询部门
+                String deptName = personDeptName(userId,downloadDto.getDownType());
+                downloadInfoVo.setDeptName(deptName);
+            }
+            //数量赋值
+            downloadInfoVo.setNum(((BigDecimal) e.getItem().get(0).get("value")).longValue());
+            return downloadInfoVo;
+        }).collect(Collectors.toList());
+        return result;
+    }
+}

+ 1 - 0
src/main/java/com/redxun/knowledge/analysis/service/AnalysisMapServiceImpl.java

@@ -282,6 +282,7 @@ public class AnalysisMapServiceImpl {
             } else {
                 mapCompanyVo.setOrganization(userService.findDeptByDeptId(e).getName());
             }
+            mapCompanyVo.setPkId(e);
             return mapCompanyVo;
         }).collect(Collectors.toList());
         return result;

+ 1 - 3
src/main/java/com/redxun/knowledge/analysis/service/AnalysisSearchServiceImpl.java

@@ -1,11 +1,9 @@
 package com.redxun.knowledge.analysis.service;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.redxun.common.base.entity.QueryData;
 import com.redxun.common.tool.StringUtils;
 import com.redxun.knowledge.analysis.entity.consts.ComanyColumnsConst;
 import com.redxun.knowledge.analysis.entity.dto.PersonVisitDto;
-import com.redxun.knowledge.analysis.entity.enums.SystemDetailVisitsEnum;
 import com.redxun.knowledge.analysis.entity.vo.MapCompanyVo;
 import com.redxun.knowledge.analysis.entity.vo.OrganizationSearchVo;
 import com.redxun.knowledge.analysis.entity.vo.SystemCompanyVo;
@@ -14,7 +12,6 @@ import com.redxun.knowledge.analysis.mapper.AnalysisSearchMapper;
 import com.redxun.knowledge.analysis.mapper.PvLogMapper;
 import com.redxun.knowledge.common.UserService;
 import com.redxun.knowledge.utils.DateUtils;
-import com.redxun.knowledge.utils.PageListUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -229,6 +226,7 @@ public class AnalysisSearchServiceImpl {
             } else {
                 organizationSearchVo.setOrganization(userService.findDeptByDeptId(e).getName());
             }
+            organizationSearchVo.setPkId(e);
             return organizationSearchVo;
         }).collect(Collectors.toList());
         return result;

+ 1 - 0
src/main/java/com/redxun/knowledge/analysis/service/AnalysisSynthesizeServiceImpl.java

@@ -307,6 +307,7 @@ public class AnalysisSynthesizeServiceImpl {
             } else {
                 synthesizeCompanyVo.setOrganization(userService.findDeptByDeptId(e).getName());
             }
+            synthesizeCompanyVo.setPkId(e);
             return synthesizeCompanyVo;
         }).collect(Collectors.toList());
         return result;

+ 99 - 0
src/main/java/com/redxun/knowledge/analysis/utils/ExcelUtils.java

@@ -0,0 +1,99 @@
+package com.redxun.knowledge.analysis.utils;
+
+import com.redxun.common.tool.StringUtils;
+import com.redxun.knowledge.analysis.entity.enums.DownloadNameEnum;
+import com.redxun.knowledge.analysis.entity.enums.DownloadTypeEnum;
+import com.redxun.knowledge.analysis.entity.vo.DownloadInfoVo;
+import org.apache.poi.ss.formula.functions.T;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.util.CollectionUtils;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 文件名: ExcelUtils
+ * 作者: zizg
+ * 时间: 2023/6/1
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+public class ExcelUtils {
+
+    private ExcelUtils(){
+
+    }
+
+    /**
+     * 导出Excel
+     * @param list 导出数据
+     * @param name 导出模块
+     * @param type 导出类型(1 人员 2 部门)
+     * @param response
+     */
+    public static void downloadExcel(List<DownloadInfoVo> list,Integer name,Integer type, HttpServletResponse response){
+        try {
+            //创建一个空的工作薄
+            XSSFWorkbook workbook = new XSSFWorkbook();
+            //在工作薄中创建一个工作表
+            XSSFSheet sheet = workbook.createSheet("sheet1");
+            //设置列宽
+            sheet.setColumnWidth(0, 20 * 256);
+            sheet.setColumnWidth(1, 80 * 256);
+            sheet.setColumnWidth(2, 20 * 256);
+            //处理标题
+            String[] titles = new String[]{"名称", "部门路径", "数量"};
+
+            //创建标题行
+            Row titleRow = sheet.createRow(0);
+            Cell cell = null;
+            for (int i = 0; i < titles.length; i++) {
+                cell = titleRow.createCell(i);
+                cell.setCellValue(titles[i]);
+            }
+            //处理内容
+            int rowIndex = 1;
+            Row row = null;
+            if (!CollectionUtils.isEmpty(list)){
+                for (DownloadInfoVo info : list) {
+                    row = sheet.createRow(rowIndex);
+                    cell = row.createCell(0);
+                    cell.setCellValue(info.getPersonName());
+
+                    cell = row.createCell(1);
+                    cell.setCellValue(info.getDeptName());
+
+                    cell = row.createCell(2);
+                    cell.setCellValue(info.getNum());
+
+                    rowIndex++;
+                }
+            }
+            //设置文件的打开方式和mime类型
+            Date date = new Date();
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+            String dateStr = sdf.format(date);
+            String filename = DownloadNameEnum.getMessage(name) + DownloadTypeEnum.getMessage(type)
+                    + dateStr + ".xlsx";
+            ServletOutputStream outputStream = response.getOutputStream();
+            response.addHeader("Content-Disposition", "attachment;filename=" +
+                    new String(filename.getBytes(), "ISO8859-1"));
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
+            workbook.write(outputStream);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 1 - 0
src/main/java/com/redxun/knowledge/common/UserService.java

@@ -234,6 +234,7 @@ public class UserService {
             response.setHeader("Content-Disposition", "attachment;filename=" +
                     new String(filename.getBytes(), "ISO8859-1"));
             response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
             workbook.write(outputStream);
         } catch (Exception e) {
             e.printStackTrace();

+ 2 - 1
src/main/java/com/redxun/knowledge/controller/KnowledgeController.java

@@ -257,7 +257,8 @@ public class KnowledgeController extends BaseController<Knowledge> {
     @PostMapping("importKnowledge")
     public JsonResult importKnowledge(){
         JsonResult jsonResult = JsonResult.Success();
-        knowledgeService.importKnowledge();
+        List<String> strings = knowledgeService.importKnowledge();
+        jsonResult.setData(strings);
         return jsonResult.setMessage("导入成功");
     }
 }

+ 16 - 10
src/main/java/com/redxun/knowledge/service/KnowledgeServiceImpl.java

@@ -880,8 +880,8 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
         return groups.size() > 0 ? (OsGroup)groups.get(0) : null;
     }
 
-    @Transactional(rollbackFor = Exception.class)
-    public void importKnowledge() {
+    //@Transactional(rollbackFor = Exception.class)
+    public List<String> importKnowledge() {
         //查询需要导入的数据(组织架构格式化)
         List<KnowledgeCp> knowledgeCpList = knowledgeCpMapper.selectList(null);
         knowledgeCpList.parallelStream().forEach(e -> {
@@ -890,14 +890,20 @@ public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Know
                 e.setOrganizationId(s);
             }
         });
+        List<String> pkIdList = new ArrayList<>();
         //取出第一条数据
-        KnowledgeCp knowledgeCp = knowledgeCpList.stream().findAny().get();
-        KnowledgeDto knowledgeDto = new KnowledgeDto();
-        BeanUtils.copyProperties(knowledgeCp,knowledgeDto);
-        String pkId = this.create(null,knowledgeCp);
-        //导入成功,删除原数据
-        if (StringUtils.isNotEmpty(pkId) && knowledgeCp.getPkId().equals(pkId)){
-            knowledgeCpMapper.deleteCp(pkId);
-        }
+        knowledgeCpList.stream().limit(100).forEach(e -> {
+            String pkId = null;
+            try {
+                pkId = this.create(null,e);
+            } catch (Exception ex){
+                pkIdList.add(e.getPkId());
+            }
+            //导入成功,删除原数据
+            if (StringUtils.isNotEmpty(pkId) && e.getPkId().equals(pkId)){
+                knowledgeCpMapper.deleteCp(pkId);
+            }
+        });
+        return pkIdList;
     }
 }