update 81707 专项项目库导出zip

This commit is contained in:
lijiarao
2024-02-22 18:07:43 +08:00
parent 58858931e7
commit 8a3c523b17
8 changed files with 181 additions and 18 deletions
@@ -34,7 +34,7 @@ public class ZipUtil {
try {
zos = new ZipOutputStream(out);
File sourceFile = new File(srcDir);
compress(sourceFile, zos, sourceFile.getName(), KeepDirStructure);
compress(sourceFile, zos, sourceFile.getName().substring(0,sourceFile.getName().lastIndexOf("_")), KeepDirStructure);
long end = System.currentTimeMillis();
System.out.println("压缩完成,耗时:" + (end - start) + " ms");
@@ -5,11 +5,17 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jero.common.aspect.annotation.Dict;
import com.jero.modules.laws.enterprise.entity.vo.DeclareFileList;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
/**
*
@@ -132,6 +138,7 @@ public class ProcessProjectStandardTermUser {
* 设计工程师
*/
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname")
@Excel(name = "姓名", width = 15, dictTable = "sys_user", dicCode = "id", dicText = "realname")
@TableField(value = "design_engineer")
@ApiModelProperty(value="设计工程师")
private String designEngineer;
@@ -154,6 +161,7 @@ public class ProcessProjectStandardTermUser {
*/
@TableField(value = "model_series")
@Dict(dicCode = "model_series")
@Excel(name = "车型", width = 15, dicCode = "model_series")
@ApiModelProperty(value="车型系列")
private String modelSeries;
/**
@@ -167,6 +175,7 @@ public class ProcessProjectStandardTermUser {
* 依据描述
*/
@TableField(value = "description")
@Excel(name = "依据描述", width = 15)
@ApiModelProperty(value="依据描述")
private String description;
@@ -210,4 +219,9 @@ public class ProcessProjectStandardTermUser {
@TableField(exist = false)
@ApiModelProperty(value="部门id")
private String departId;
@TableField(exist = false)
@ApiModelProperty(value = "相关材料文件名")
@ExcelCollection(name = "")
private List<DeclareFileList> declareFileList = Collections.emptyList();
}
@@ -9,6 +9,7 @@ import com.jero.modules.laws.enterprise.entity.vo.EnterpriseStandardDeclareVo;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
/**
* @author ThinkBook
@@ -45,4 +46,7 @@ public interface EnterpriseStandardDeclareService extends IService<EnterpriseSta
void exportDataWithFile(HttpServletResponse response, ESQueryCommonDTO parameterMap, String fileName, String sheetName);
void exportDataWithFile(HttpServletRequest request, HttpServletResponse response, ESQueryCommonDTO parameterMap) throws IOException;
void writeToLocal(String destination, InputStream input)
throws IOException;
}
@@ -277,15 +277,16 @@ public class EnterpriseStandardDeclareServiceImpl extends ServiceImpl<Enterprise
/**
* 将InputStream写入本地文件
*
* @param destination 写入本地目录
* @param filePath 写入本地目录
* @param input 输入流
* @throws IOException
*/
private static void writeToLocal(String destination, InputStream input)
@Override
public void writeToLocal(String filePath, InputStream input)
throws IOException {
int index;
byte[] bytes = new byte[1024];
try (FileOutputStream downloadFile = new FileOutputStream(destination)){
try (FileOutputStream downloadFile = new FileOutputStream(filePath)){
while ((index = input.read(bytes)) != -1) {
downloadFile.write(bytes, 0, index);
downloadFile.flush();
@@ -1,18 +1,35 @@
package com.jero.modules.projectLibrary.controller;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.api.vo.Result;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.FileUtils;
import com.jero.common.util.oConvertUtils;
import com.jero.modules.projectLibrary.entity.LawsProjectLibrary;
import com.jero.modules.projectLibrary.entity.LawsSpecialProjectLibrary;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.projectLibrary.service.ILawsSpecialProjectLibraryService;
import lombok.extern.slf4j.Slf4j;
import com.jero.common.system.base.controller.JeroController;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecgframework.poi.excel.ExcelExportUtil;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -153,18 +170,8 @@ public class LawsSpecialProjectLibraryController extends JeroController<LawsSpec
@AutoLog(value = "专项项目库-导出")
@ApiOperation(value="专项项目库-导出")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, LawsSpecialProjectLibrary lawsSpecialProjectLibrary) {
IPage<LawsSpecialProjectLibrary> pageList = lawsSpecialProjectLibraryService.queryPage(lawsSpecialProjectLibrary, -1, -1, request);
List<LawsSpecialProjectLibrary> records = pageList.getRecords();
List<LawsSpecialProjectLibrary> exportList;
String selections = request.getParameter("selections");
if (StringUtils.isNotBlank(selections)) {
List<String> selectionList = Arrays.asList(selections.split(","));
exportList = records.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
}else {
exportList = records;
}
return super.exportListXls(exportList, LawsSpecialProjectLibrary.class, "专项项目库");
public void exportXls(HttpServletRequest request, HttpServletResponse response, LawsSpecialProjectLibrary lawsSpecialProjectLibrary) {
lawsSpecialProjectLibraryService.exportXls(request,response,lawsSpecialProjectLibrary);
}
}
@@ -99,11 +99,9 @@ public class LawsSpecialProjectLibrary implements Serializable {
@ApiModelProperty(value = "合规评估结果")
private String result;
/**问题描述*/
@Excel(name = "依据描述", width = 15)
@ApiModelProperty(value = "依据描述")
private String description;
/**佐证材料*/
@Excel(name = "佐证材料", width = 15)
@ApiModelProperty(value = "佐证材料")
private String material;
/**评估日期*/
@@ -3,6 +3,8 @@ package com.jero.modules.projectLibrary.service;
import com.jero.modules.projectLibrary.entity.LawsSpecialProjectLibrary;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.util.List;
@@ -73,4 +75,6 @@ public interface ILawsSpecialProjectLibraryService extends IService<LawsSpecialP
* @return
*/
LawsSpecialProjectLibrary queryById(String id);
void exportXls(HttpServletRequest request, HttpServletResponse response, LawsSpecialProjectLibrary lawsSpecialProjectLibrary);
}
@@ -1,42 +1,70 @@
package com.jero.modules.projectLibrary.service.impl;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.constant.CommonConstant;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.BeanCopyUtils;
import com.jero.common.util.FileUtils;
import com.jero.common.util.MinioUtil;
import com.jero.common.util.ZipUtil;
import com.jero.modules.activiti.process.projectstandard.entity.ProcessProjectStandardTermUser;
import com.jero.modules.activiti.process.projectstandard.service.ProcessProjectStandardService;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import com.jero.modules.laws.enterprise.entity.vo.DeclareFileList;
import com.jero.modules.laws.enterprise.service.EnterpriseStandardDeclareService;
import com.jero.modules.laws.standard.entity.LawsDomesticStandard;
import com.jero.modules.laws.standard.entity.LawsOverseasStandard;
import com.jero.modules.laws.standard.service.ILawsDomesticStandardService;
import com.jero.modules.laws.standard.service.ILawsOverseasStandardService;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService;
import com.jero.modules.projectLibrary.entity.LawsProjectLibrary;
import com.jero.modules.projectLibrary.entity.LawsSpecialProjectLibrary;
import com.jero.modules.projectLibrary.mapper.LawsSpecialProjectLibraryMapper;
import com.jero.modules.projectLibrary.service.ILawsSpecialProjectLibraryService;
import com.jero.modules.system.util.SysWaterMarkUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.util.Strings;
import org.apache.poi.ss.usermodel.Workbook;
import org.jeecgframework.poi.excel.ExcelExportUtil;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.jero.common.exception.JeroBootException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Date;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.system.query.QueryGenerator;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* @Description: 专项项目库
* @Author: jero-boot
* @Date: 2023-09-22
* @Version: V1.0
*/
@Slf4j
@Service
@Transactional(rollbackFor = JeroBootException.class)
public class LawsSpecialProjectLibraryServiceImpl extends ServiceImpl<LawsSpecialProjectLibraryMapper, LawsSpecialProjectLibrary> implements ILawsSpecialProjectLibraryService {
@@ -46,7 +74,18 @@ public class LawsSpecialProjectLibraryServiceImpl extends ServiceImpl<LawsSpecia
private ILawsOverseasStandardService lawsOverseasStandardService; //海外标准
@Resource
private LawsSpecialProjectLibraryMapper specialProjectLibraryMapper;
@Resource
private ProcessProjectStandardService processProjectStandardService;
@Resource
private EnterpriseStandardDeclareService enterpriseStandardDeclareService;
@Resource
private IOSSFileService ossFileService;
@Resource
private SysWaterMarkUtil sysWaterMarkUtil;
@Value("${jero.path.exportExcelTempPath}")
private String exportExcelTempPath;
private static final String EXPORT_EXCEL_TEMP = "exportExcelTemp";
/**
* 分页查询
*
@@ -148,4 +187,100 @@ public class LawsSpecialProjectLibraryServiceImpl extends ServiceImpl<LawsSpecia
public LawsSpecialProjectLibrary queryById(String id) {
return getById(id);
}
@Override
public void exportXls(HttpServletRequest request, HttpServletResponse response, LawsSpecialProjectLibrary lawsSpecialProjectLibrary) {
IPage<LawsSpecialProjectLibrary> pageList = this.queryPage(lawsSpecialProjectLibrary, -1, -1, request);
List<LawsSpecialProjectLibrary> records = pageList.getRecords();
List<LawsSpecialProjectLibrary> exportList;
String selections = request.getParameter("selections");
if (StringUtils.isNotBlank(selections)) {
List<String> selectionList = Arrays.asList(selections.split(","));
exportList = records.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
}else {
exportList = records;
}
String fileName = "专项项目库";
String termUserFileName = "依据描述";
String url = exportExcelTempPath.replace(EXPORT_EXCEL_TEMP, fileName + "_" + RandomUtil.randomString(12));
File file = new File(url);
if (!file.exists()){
boolean mkdirs = file.mkdirs();
log.info("创建临时目录:{}", mkdirs);
}
try (FileOutputStream fos = new FileOutputStream(url + File.separator + fileName + ".xls")){
// 生成excel
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.HSSF);
for (LawsSpecialProjectLibrary projectLibrary : exportList) {
String standardNumber = projectLibrary.getStandardNumber();
String termNumber = projectLibrary.getTermNumber();
String processTermId = projectLibrary.getProcessTermId();
//判断是否有描述依据
ProcessProjectStandardTermUser termUser = new ProcessProjectStandardTermUser();
termUser.setTermId(processTermId);
IPage<ProcessProjectStandardTermUser> termUserPage = processProjectStandardService.getTermUserList(termUser, -1, -1);
List<ProcessProjectStandardTermUser> termUserList = termUserPage.getRecords();
//导出描述依据和佐证材料
if (!termUserList.isEmpty()) {
//标准编号+条款号的文件夹
String termUserUrl = url + File.separator + standardNumber + (StringUtils.isBlank(termNumber)?"":termNumber) ;
File termUserFile = new File(termUserUrl);
if (!termUserFile.exists()){
boolean mkdirs = termUserFile.mkdirs();
log.info("创建临时子目录:{}", mkdirs);
}
//佐证材料
for (ProcessProjectStandardTermUser standardTermUser : termUserList) {
String fileId = standardTermUser.getFileId();
if (StringUtils.isNotBlank(fileId)){
List<String> fileIdList = Arrays.asList(fileId.split(","));
List<OSSFile> ossFileList = ossFileService.listByIds(fileIdList);
if (!ossFileList.isEmpty()){
// 赋值
List<DeclareFileList> declareFileLists = BeanCopyUtils.copyBeanList(ossFileList, DeclareFileList.class);
standardTermUser.setDeclareFileList(declareFileLists);
// 写出文件
for (OSSFile ossFile : ossFileList) {
InputStream inputStream = MinioUtil.getMinioFile(MinioUtil.getBucketName(), ossFile.getUrl());
// pdf加水印
if (StringUtils.endsWithIgnoreCase(ossFile.getFileName(), ".pdf")){
inputStream = sysWaterMarkUtil.addWatermarkToPdf(inputStream);
}
// 导出文件
String filePath = termUserFile + File.separator + ossFile.getFileName();
enterpriseStandardDeclareService.writeToLocal(filePath, inputStream);
}
}
}
}
//描述依据
try (FileOutputStream fos1 = new FileOutputStream(termUserFile + File.separator + termUserFileName + ".xls")){
// 生成excel
Workbook workbook1 = ExcelExportUtil.exportExcel(exportParams, ProcessProjectStandardTermUser.class, termUserList);
// 导出excel
workbook1.write(fos1);
}catch (Exception e){
log.error(e.getMessage());
throw new JeroBootException("excel导出失败!");
}
}
}
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, LawsSpecialProjectLibrary.class, exportList);
// 导出excel
workbook.write(fos);
// 生成并导出zip
ZipUtil.toZip(url, response.getOutputStream(), response, true);
}catch (Exception e){
log.error(e.getMessage());
throw new JeroBootException("excel导出失败!");
}finally {
// 删除文件
if (new File(url).exists()) {
FileUtils.deleteFolders(url);
}
}
}
}