浏览代码

登记簿批量导出代码提交

jingyuanchao 1 年之前
父节点
当前提交
bdb59523bf

+ 13 - 0
pom.xml

@@ -218,12 +218,25 @@
                 <version>${soc.version}</version>
             </dependency>
 
+            <!--redis模块-->
+            <dependency>
+                <groupId>com.xunmei</groupId>
+                <artifactId>soc-common-redis</artifactId>
+                <version>${soc.version}</version>
+            </dependency>
+
             <!-- 安全模块 -->
             <dependency>
                 <groupId>com.xunmei</groupId>
                 <artifactId>soc-common-security</artifactId>
                 <version>${soc.version}</version>
             </dependency>
+
+            <dependency>
+                <groupId>com.xunmei</groupId>
+                <artifactId>soc-modules-system</artifactId>
+                <version>${soc.version}</version>
+            </dependency>
             <dependency>
                 <groupId>org.projectlombok</groupId>
                 <artifactId>lombok</artifactId>

+ 1 - 1
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteFileService.java

@@ -75,6 +75,6 @@ public interface RemoteFileService {
     @PostMapping(value = "/file/registerBookCompressPdf",consumes = MediaType.APPLICATION_JSON_VALUE)
     Response registerBookCompressPdf(@RequestBody ExportPdfDto exportDto);
 
-    @PostMapping(value = "/file/cutFileCompress",consumes = MediaType.APPLICATION_JSON_VALUE)
+    @PostMapping(value = "/file/cutFileCompress")
     void cutFileCompress(@RequestBody CoreRegisterBookPdfExportDto exportDto);
 }

+ 5 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/constant/CacheConstants.java

@@ -71,4 +71,9 @@ public class CacheConstants
      * 安全指标字典缓存
      */
     public static final String SAFETY_DICT_LIST = "safety_dict_list";
+
+    /**
+     * 登记簿批量导出本地文件名称前缀key
+     */
+    public static final String REGISTER_PDF_FILE_KEY = "register_pdf_file_key_";
 }

+ 42 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/SysOrgCacheVo.java

@@ -0,0 +1,42 @@
+package com.xunmei.common.core.domain;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class SysOrgCacheVo {
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    private String code;
+    private String name;
+    private String path;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
+    private Integer type;
+    private String shortName;
+    private String treeShowPath;
+    private Integer sort;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long treeShowParentId;
+    private List<SysOrgCacheVo> children = new ArrayList<SysOrgCacheVo>();
+
+
+    public List<SysOrgCacheVo> getChildren() {
+        if(CollectionUtil.isNotEmpty(children)) {
+            children.sort(Comparator.comparing(SysOrgCacheVo::getSort));
+        }
+        return children;
+    }
+}

+ 2 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/registerbook/dto/CoreRegisterBookPdfExportDto.java

@@ -3,6 +3,7 @@ package com.xunmei.common.core.domain.registerbook.dto;
 import com.xunmei.common.core.domain.registerbook.vo.CoreRegisterBookPdfPageVo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotNull;
 import java.util.List;
@@ -12,7 +13,7 @@ import java.util.List;
  * @date 2022/10/10 14:36
  */
 @Data
-
+@EqualsAndHashCode(callSuper = true)
 public class CoreRegisterBookPdfExportDto extends CoreRegisterBookPdfPageDto {
 
     @NotNull(message = "请选择具体登记表类型进行导出!")

+ 4 - 5
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/registerbook/controller/CoreRegisterBookPdfController.java

@@ -13,7 +13,6 @@ import com.xunmei.common.security.annotation.RequiresPermissions;
 import com.xunmei.core.registerbook.service.ICoreRegisterBookPdfService;
 import com.xunmei.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteOrgService;
-import com.xunmei.system.api.domain.SysOrg;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -74,13 +73,13 @@ public class CoreRegisterBookPdfController extends BaseController {
     @ApiOperation(value = "批量导出登记簿zip")
     @PostMapping("/batch/cutExport")
     public AjaxResult exportPdfZipByCut(@RequestBody CoreRegisterBookPdfExportDto exportDto) {
-        SysOrg org = orgService.selectTopOrg(SecurityConstants.INNER);
-        if (ObjectUtil.isNull(exportDto.getOrgId())&&ObjectUtil.equal(exportDto.getExportType(), 0)) {
+        if (ObjectUtil.isNull(exportDto.getOrgId()) && ObjectUtil.equal(exportDto.getExportType(), 0)) {
             throw new RuntimeException("请选择机构!");
         }
+        /*SysOrg org = orgService.selectTopOrg(SecurityConstants.INNER);
         if (exportDto.getCheckSub() && org != null && ObjectUtil.equal(org.getId(), exportDto.getOrgId()) && ObjectUtil.equal(exportDto.getExportType(), 0)) {
             throw new RuntimeException("暂不支持导出全部机构数据!");
-        }
+        }*/
         CompletableFuture.runAsync(() -> {
             try {
                 registerBookPdfService.cutExport(exportDto);
@@ -88,7 +87,7 @@ public class CoreRegisterBookPdfController extends BaseController {
                 logger.error("导出异常", e);
                 throw new RuntimeException(e);
             }
-        },threadPoolTaskExecutor);
+        }, threadPoolTaskExecutor);
 
         return AjaxResult.success();
     }

+ 3 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/registerbook/service/impl/CoreRegisterBookPdfServiceImpl.java

@@ -110,8 +110,9 @@ public class CoreRegisterBookPdfServiceImpl extends ServiceImpl<CoreRegisterBook
     public void cutExport(CoreRegisterBookPdfExportDto exportDto) {
         List<CoreRegisterBookPdfPageVo> dataList = queryExportData(exportDto);
         exportDto.setDataList(dataList);
-        List<SysOrgVO> cacheList = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
-        //exportDto.setCacheList(cacheList);
+        /*List<SysOrgVO> cacheList = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
+        List<SysOrgCacheVo> sysOrgCacheVos = BeanHelper.copyProperties(cacheList, SysOrgCacheVo.class);
+        exportDto.setOrgList(sysOrgCacheVos);*/
         fileService.cutFileCompress(exportDto);
     }
 

+ 8 - 0
soc-modules/soc-modules-file/pom.xml

@@ -66,6 +66,14 @@
         </dependency>
 
         <dependency>
+            <groupId>com.xunmei</groupId>
+            <artifactId>soc-common-redis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.xunmei</groupId>
+            <artifactId>soc-common-core</artifactId>
+        </dependency>
+        <dependency>
             <groupId>ant</groupId>
             <artifactId>ant</artifactId>
             <version>1.6.5</version>

+ 50 - 18
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/LocalSysFileServiceImpl.java

@@ -1,17 +1,21 @@
 package com.xunmei.file.service;
 
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
 import com.lowagie.text.*;
 import com.lowagie.text.pdf.BaseFont;
 import com.lowagie.text.pdf.PdfPCell;
 import com.lowagie.text.pdf.PdfPTable;
 import com.lowagie.text.pdf.PdfWriter;
+import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.domain.IdName;
 import com.xunmei.common.core.domain.registerbook.dto.CoreRegisterBookPdfExportDto;
 import com.xunmei.common.core.domain.registerbook.dto.ExportPdfDto;
 import com.xunmei.common.core.domain.registerbook.vo.CoreRegisterBookPdfPageVo;
+import com.xunmei.common.core.domain.registerbook.vo.PdfLocalFileTempVo;
 import com.xunmei.common.core.domain.registerbook.vo.PdfToZipTempVo;
 import com.xunmei.common.core.enums.RegisterBookType;
 import com.xunmei.common.core.utils.DateHelper;
@@ -22,6 +26,7 @@ import com.xunmei.file.utils.PdfUtil;
 import com.xunmei.file.vo.FileBase64Vo;
 import com.xunmei.file.vo.ItextPdfTableVo;
 import com.xunmei.file.vo.PdfFilePathVo;
+import com.xunmei.system.api.domain.SysOrg;
 import io.netty.util.internal.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.tools.zip.ZipEntry;
@@ -41,6 +46,7 @@ import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
+import java.math.BigDecimal;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
@@ -187,6 +193,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         }
         return path;
     }
+
     private void dealHeader(Map<String, Object> dataMap, Document document, BaseFont abf, BaseFont fs) throws
             DocumentException {
         //处理标题
@@ -271,8 +278,10 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         String filePath = FileUploadUtils.uploadBase64(localFilePath, file);
         return filePath;
     }
+
     /**
      * 履职转pdf
+     *
      * @param dest
      * @throws IOException
      * @throws DocumentException
@@ -283,7 +292,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         document.open();
 
         // 使用语言包字体
-        BaseFont abf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
+        BaseFont abf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
         //字体
         Font font = new Font(abf, 8);
 
@@ -563,7 +572,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
             log.info("登记簿全部下载完成,开始压缩文件,数量:{}", pdfToZipTempVoList.size());
             for (PdfToZipTempVo tempVo : pdfToZipTempVoList) {
                 log.info("当前开始处理第{}个文件 ", pdfToZipTempVoList.indexOf(tempVo) + 1);
-                deal(zos, pdfDto, tempVo);
+                deal(zos, tempVo);
             }
             zos.flush();
             zos.close();
@@ -637,7 +646,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
     }
 
 
-    public void deal(ZipOutputStream zos, ExportPdfDto pdfDto, PdfToZipTempVo zipTempVo) throws Throwable {
+    public void deal(ZipOutputStream zos, PdfToZipTempVo zipTempVo) throws Throwable {
         zos.setEncoding("GBK");
         FileInputStream fileInputStream = new FileInputStream(zipTempVo.getFile());
         zos.putNextEntry(new ZipEntry(zipTempVo.getEntryName()));
@@ -651,12 +660,15 @@ public class LocalSysFileServiceImpl implements ISysFileService {
     }
 
 
-
     @Override
     public void cutFileCompress(CoreRegisterBookPdfExportDto pdfDto) {
+        //List<SysOrgCacheVo> cacheList = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
+
         // String orgName = objectMapper.selectOrgNameById(pdfDto.getOrgId());
-       /* Date date = new Date();
-        Sy org = objectMapper.selectOrg(pdfDto.getOrgId());
+        Date date = new Date();
+
+
+        SysOrg org = getOrg(pdfDto.getOrgId());
         String fileName = pdfDto.getIsRegisterBookPage() ? org.getName() + "_登记簿_" : org.getName() + "_数据报表_";
 
         //判断需要分几片导出
@@ -677,14 +689,14 @@ public class LocalSysFileServiceImpl implements ISysFileService {
                 pdfToZipTempVoList.removeIf(pdfToZipTempVo -> !FileUtil.exist(pdfToZipTempVo.getFile()));
                 log.info("登记簿全部下载完成,开始压缩文件,数量:{}", pdfToZipTempVoList.size());
 
-                String localFileName = URLEncoder.encode(RedisConstantKey.REGISTER_PDF_FILE_KEY + DateHelper.getDateString(date) + str + ZipUtil.ZIP_EXT, "UTF-8");
+                String localFileName = URLEncoder.encode(CacheConstants.REGISTER_PDF_FILE_KEY + DateHelper.getDateString(date) + str + ".zip", "UTF-8");
                 FileOutputStream fos = new FileOutputStream(localFileName);
                 ZipOutputStream zos = new ZipOutputStream(fos);
                 long fileSize = 0L;
                 for (PdfToZipTempVo tempVo : pdfToZipTempVoList) {
                     fileSize += tempVo.getFile().length();
-                    logger.info("当前开始处理第{}个文件 ", pdfToZipTempVoList.indexOf(tempVo) + 1);
-                    deal(zos, null, tempVo);
+                    log.info("当前开始处理第{}个文件 ", pdfToZipTempVoList.indexOf(tempVo) + 1);
+                    deal(zos, tempVo);
                 }
                 zos.flush();
                 fos.flush();
@@ -703,7 +715,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
                 pdfLocalFileTempVo.setCreateTime(new Date());
                 redisTemplate.opsForValue().set(URLDecoder.decode(localFileName, "UTF-8"), JSON.toJSONString(pdfLocalFileTempVo));
                 DateTime dateTime = DateUtil.offsetHour(new Date(), 1);
-                delayTaskService.add("ExportLocalFileBusiness", dateTime, URLDecoder.decode(localFileName, "UTF-8"), 5, 2);
+                //delayTaskService.add("ExportLocalFileBusiness", dateTime, URLDecoder.decode(localFileName, "UTF-8"), 5, 2);
             } catch (Throwable e) {
                 throw new RuntimeException(e);
             } finally {
@@ -713,11 +725,12 @@ public class LocalSysFileServiceImpl implements ISysFileService {
                 }
             }
         }
-*/
+
+
     }
-   /* private List<List<CoreRegisterBookPdfPageVo>> checkSubList(CoreRegisterBookPdfExportDto pdfDto) {
+
+    private List<List<CoreRegisterBookPdfPageVo>> checkSubList(CoreRegisterBookPdfExportDto pdfDto) {
         List<List<CoreRegisterBookPdfPageVo>> list = new ArrayList<>();
-        Long orgId = pdfDto.getOrgId();
         List<CoreRegisterBookPdfPageVo> registerBookPdfList = pdfDto.getDataList();
         if (registerBookPdfList == null || registerBookPdfList.size() == 0) {
             throw new RuntimeException("暂无可下载数据!");
@@ -727,12 +740,13 @@ public class LocalSysFileServiceImpl implements ISysFileService {
             list.add(registerBookPdfList);
             return list;
         }
-        List<SysOrgVO> orgList = objectMapper.selectChildOrgList(orgId);
+//        List<SysOrg> orgList = orgService.selectSysOrgByParentId(pdfDto.getOrgId(), SecurityConstants.INNER);
+        List<SysOrg> orgList = new ArrayList<>();
         //大于3000条需要分片
         return splitList(registerBookPdfList, orgList, 3000);
     }
 
-    public static List<List<CoreRegisterBookPdfPageVo>> splitList(List<CoreRegisterBookPdfPageVo> list, List<SysOrgVO> orgList, int size) {
+    public static List<List<CoreRegisterBookPdfPageVo>> splitList(List<CoreRegisterBookPdfPageVo> list, List<SysOrg> orgList, int size) {
         // 根据机构分组
         List<List<CoreRegisterBookPdfPageVo>> collect = orgList.stream().map(org -> {
             List<CoreRegisterBookPdfPageVo> arrayList = new ArrayList<>();
@@ -748,11 +762,11 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         List<List<CoreRegisterBookPdfPageVo>> merged = new LinkedList<>();
         List<CoreRegisterBookPdfPageVo> current = new ArrayList<>();
         for (List<CoreRegisterBookPdfPageVo> group : collect) {
-            if (group.size() >= 3000) {
+            if (group.size() >= size) {
                 merged.add(group);
             } else {
                 current.addAll(group);
-                if (current.size() >= 3000) {
+                if (current.size() >= size) {
                     merged.add(current);
                     current = new ArrayList<>();
                 }
@@ -763,5 +777,23 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         }
         return merged;
         //return merged.stream().limit(size).collect(Collectors.toList());
-    }*/
+    }
+
+    public String changeUnit(Long fileSize) {
+        if (fileSize == null || fileSize == 0) {
+            return "0";
+        }
+        //将fileSize转换为MB,保留整数
+        BigDecimal fileSizeMB = new BigDecimal(fileSize).divide(new BigDecimal(1024 * 1024), 2, BigDecimal.ROUND_HALF_UP);
+
+        return fileSizeMB.toString();
+    }
+
+    private SysOrg getOrg(Long orgId) {
+      /*  SysOrg sysOrg = orgService.selectOrgById(orgId, SecurityConstants.INNER);
+        return sysOrg;*/
+
+        return null;
+    }
+
 }