虚拟清单-导出数据

This commit is contained in:
zhn
2022-04-21 16:17:20 +08:00
parent 71f705c08a
commit e009689622
4 changed files with 297 additions and 45 deletions
@@ -1,13 +1,10 @@
package com.jero.modules.dummy.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.constant.enums.CutEnum;
import com.jero.common.system.base.controller.JeroController;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.dummy.entity.DummyInventoryInfoEO;
import com.jero.modules.dummy.service.IDummyInventoryInfoEOService;
import io.swagger.annotations.Api;
@@ -146,16 +143,17 @@ public class DummyInventoryInfoEOController extends JeroController<DummyInventor
return Result.OK(dummyInventoryInfoEO);
}
/**
* 导出excel
*
* @param request
* @param dummyInventoryInfoEO
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, DummyInventoryInfoEO dummyInventoryInfoEO) {
return super.exportXls(request, dummyInventoryInfoEO, DummyInventoryInfoEO.class, "虚拟清单详情表");
}
// /**
// * 导出excel
// *
// * @param request
// * @param dummyInventoryInfoEO
// */
// @RequestMapping(value = "/exportXls")
// public ModelAndView exportXls(HttpServletRequest request, DummyInventoryInfoEO dummyInventoryInfoEO) {
// return super.exportXls(request, dummyInventoryInfoEO, DummyInventoryInfoEO.class, "虚拟清单详情表");
// }
/**
* 通过excel导入数据
@@ -175,11 +173,23 @@ public class DummyInventoryInfoEOController extends JeroController<DummyInventor
* @param request
* @param dummyInventoryInfoEO
*/
@GetMapping(value = "/exportData")
@GetMapping(value = "/exportXls")
public ModelAndView exportDate(HttpServletRequest request, DummyInventoryInfoEO dummyInventoryInfoEO) {
return super.exportXls(request, dummyInventoryInfoEO, DummyInventoryInfoEO.class, "虚拟清单详情表");
}
/**
* 导出数据
* @param request
* @param dummyInventoryInfoEO
*/
@RequestMapping(value = "/exportData")
public void exportData(HttpServletResponse response,
HttpServletRequest request,
DummyInventoryInfoEO dummyInventoryInfoEO) {
dummyInventoryInfoEOService.exportData(response,request, dummyInventoryInfoEO);
}
/**
* 导入数据
*
@@ -1,22 +1,20 @@
package com.jero.modules.dummy.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
/**
@@ -39,7 +37,6 @@ public class DummyInventoryInfoEO implements Serializable {
private java.lang.String id;
/**法规清单基础表id*/
@Excel(name = "法规清单基础表id", width = 15)
@ApiModelProperty(value = "法规清单基础表id")
private java.lang.String dummyInventoryBaseId;
@@ -78,7 +75,7 @@ public class DummyInventoryInfoEO implements Serializable {
private java.lang.String title;
/**适用范围*/
@Excel(name = "适用范围", width = 15)
@Excel(name = "适用范围", width = 15, dicCode = "apply_scope")
@ApiModelProperty(value = "适用范围")
@Dict(dicCode ="apply_scope")
private java.lang.String shi4Yong4Fan4Wei2;
@@ -86,10 +83,11 @@ public class DummyInventoryInfoEO implements Serializable {
/**适用地区*/
@ApiModelProperty(value = "适用地区")
@Dict(dicCode ="region")
@Excel(name = "适用地区", width = 15, dicCode = "region")
private java.lang.String region;
/**状态*/
@Excel(name = "状态", width = 15)
@Excel(name = "状态", width = 15,dicCode ="state")
@ApiModelProperty(value = "状态")
@Dict(dicCode ="state")
private java.lang.String state;
@@ -103,14 +101,14 @@ public class DummyInventoryInfoEO implements Serializable {
private java.lang.String technologyTerritoryName;
/**新车型实施日期*/
@Excel(name = "新车型实施日期", width = 15)
@Excel(name = "新车型实施日期", width = 15,format = "yyyy-MM-dd")
@ApiModelProperty(value = "新车型实施日期")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private java.util.Date xin1Che1Xing2Shi2Shi1Ri4Qi1;
/**在产车实施日期*/
@Excel(name = "在产车实施日期", width = 15)
@Excel(name = "在产车实施日期", width = 15,format = "yyyy-MM-dd")
@ApiModelProperty(value = "在产车实施日期")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@@ -134,25 +132,25 @@ public class DummyInventoryInfoEO implements Serializable {
private java.lang.String subtitle;
/**实施类别*/
@Excel(name = "实施类别", width = 15)
@Excel(name = "实施类别", width = 15,dicCode ="implement_type")
@ApiModelProperty(value = "实施类别")
@Dict(dicCode ="implement_type")
private java.lang.String implementType;
/**认证类型*/
@Excel(name = "认证类型", width = 15)
@Excel(name = "认证类型", width = 15,dicCode ="attestation_type")
@ApiModelProperty(value = "认证类型")
@Dict(dicCode ="attestation_type")
private java.lang.String attestationType;
/**认证级别*/
@Excel(name = "认证级别", width = 15)
@Excel(name = "认证级别", width = 15,dicCode ="attestation_rank")
@ApiModelProperty(value = "认证级别")
@Dict(dicCode ="attestation_rank")
private java.lang.String attestationRank;
/**责任领域*/
@Excel(name = "责任领域", width = 15)
@Excel(name = "责任领域", width = 15,dicCode ="duty_territory")
@ApiModelProperty(value = "责任领域")
@Dict(dicCode ="duty_territory")
private java.lang.String dutyTerritory;
@@ -163,79 +161,82 @@ public class DummyInventoryInfoEO implements Serializable {
private java.lang.String remark;
/**设计符合性确认-交付物类型*/
@Excel(name = "设计符合性确认-交付物类型", width = 15)
@Excel(name = "交付物类型", width = 15,dicCode ="deliverable_template")
@ApiModelProperty(value = "设计符合性确认-交付物类型")
@Dict(dicCode ="deliverable_template")
private java.lang.String designDeliverableType;
/**设计符合性确认-交付物模板*/
@Excel(name = "设计符合性确认-交付物模板", width = 15)
@ApiModelProperty(value = "设计符合性确认-交付物模板")
private java.lang.String designDeliverableTemplate;
@TableField(exist = false)
@Excel(name = "交付物模板", width = 15)
private java.lang.String designDeliverableTemplateName;
/**设计符合性确认-发起人*/
@Excel(name = "设计符合性确认-发起人", width = 15)
@Excel(name = "发起人", width = 15,dicCode ="fa1_qi3_ren2")
@ApiModelProperty(value = "设计符合性确认-发起人")
@Dict(dicCode ="fa1_qi3_ren2")
private java.lang.String designInitiator;
/**设计符合性确认-责任人*/
@Excel(name = "设计符合性确认-责任人", width = 15)
@Excel(name = "责任人", width = 15,dicCode ="ze2_ren4_ren2")
@ApiModelProperty(value = "设计符合性确认-责任人")
@Dict(dicCode ="ze2_ren4_ren2")
private java.lang.String designDuty;
/**prehomo确认-交付物类型*/
@Excel(name = "prehomo确认-交付物类型", width = 15)
@Excel(name = "交付物类型", width = 15,dicCode ="deliverable_template")
@ApiModelProperty(value = "prehomo确认-交付物类型")
@Dict(dicCode ="deliverable_template")
private java.lang.String prehomoDeliverableType;
/**prehomo确认-交付物模板*/
@Excel(name = "prehomo确认-交付物模板", width = 15)
@ApiModelProperty(value = "prehomo确认-交付物模板")
private java.lang.String prehomoDeliverableTemplate;
@TableField(exist = false)
@Excel(name = "交付物模板", width = 15)
private java.lang.String prehomoDeliverableTemplateName;
/**prehomo确认-发起人*/
@Excel(name = "prehomo确认-发起人", width = 15)
@Excel(name = "发起人", width = 15,dicCode ="fa1_qi3_ren2")
@ApiModelProperty(value = "prehomo确认-发起人")
@Dict(dicCode ="fa1_qi3_ren2")
private java.lang.String prehomoInitiator;
/**prehomo确认-责任人*/
@Excel(name = "prehomo确认-责任人", width = 15)
@Excel(name = "责任人", width = 15,dicCode ="ze2_ren4_ren2")
@ApiModelProperty(value = "prehomo确认-责任人")
@Dict(dicCode ="ze2_ren4_ren2")
private java.lang.String prehomoDuty;
/**验证符合性确认-交付物类型*/
@Excel(name = "验证符合性确认-交付物类型", width = 15)
@Excel(name = "交付物类型", width = 15,dicCode ="deliverable_template")
@ApiModelProperty(value = "验证符合性确认-交付物类型")
@Dict(dicCode ="deliverable_template")
private java.lang.String verifyDeliverableType;
/**验证符合性确认-交付物模板*/
@Excel(name = "验证符合性确认-交付物模板", width = 15)
@ApiModelProperty(value = "验证符合性确认-交付物模板")
private java.lang.String verifyDeliverableTemplate;
@TableField(exist = false)
@Excel(name = "交付物模板", width = 15)
private java.lang.String verifyDeliverableTemplateName;
/**验证符合性确认-发起人*/
@Excel(name = "验证符合性确认-发起人", width = 15)
@Excel(name = "发起人", width = 15,dicCode ="fa1_qi3_ren2")
@ApiModelProperty(value = "验证符合性确认-发起人")
@Dict(dicCode ="fa1_qi3_ren2")
private java.lang.String verifyInitiator;
/**验证符合性确认-责任人*/
@Excel(name = "验证符合性确认-责任人", width = 15)
@Excel(name = "责任人", width = 15,dicCode ="ze2_ren4_ren2")
@ApiModelProperty(value = "验证符合性确认-责任人")
@Dict(dicCode ="ze2_ren4_ren2")
private java.lang.String verifyDuty;
@@ -243,7 +244,6 @@ public class DummyInventoryInfoEO implements Serializable {
@TableField(exist = false)
private String cut;
/**文档库id*/
@TableField(exist = false)
private String ids;
@@ -89,4 +89,15 @@ public interface IDummyInventoryInfoEOService extends IService<DummyInventoryInf
* @param dummyInventoryInfoEO
*/
void importData(MultipartFile file, DummyInventoryInfoEO dummyInventoryInfoEO);
/**
* 数据导出
* @param response
* @param request
* @param dummyInventoryInfoEO
*/
void exportData(HttpServletResponse response,
HttpServletRequest request,
DummyInventoryInfoEO dummyInventoryInfoEO);
}
@@ -1,5 +1,6 @@
package com.jero.modules.dummy.service.impl;
import cn.hutool.core.util.ZipUtil;
import com.alibaba.fastjson.JSON;
import com.aliyuncs.utils.IOUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -40,6 +41,11 @@ import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.aspectj.util.FileUtil;
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.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -51,6 +57,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.DateFormat;
@@ -66,6 +73,8 @@ import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import static com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl.copyFile;
/**
* @Description: 虚拟清单详情表
* @Author: jero-boot
@@ -297,15 +306,16 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
String titleOne = "";
String titleTwo = "";
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
titleOne = "编号,标题,子标题,适用范围,状态,对应标准,实施类别,新车实施日期,在产车实施日期,WVTA ID,认证类型," +
titleOne = "编号,标题,子标题,适用范围,状态,对应标准,实施类别," +
"新车实施日期,在产车实施日期,WVTA ID,认证类型," +
"认证级别,技术领域," +
"责任领域,适用地区,备注," +
"设计符合性确认,Pre-homo确认,验证符合性确认";
titleTwo = "交付物类型,交付物模板,发起人,责任人,交付物类型,交付物模板,发起人,责任人,交付物类型,交付物模板,发起人,责任人";
}else{
titleOne = "serial number,title,subtitle,scope of application,state,corresponding standard,implementation category," +
"certification level,technical field," +
"new car implementation date,on the production vehicle implementation date,WVTA ID,certification type," +
"certification level,technical field," +
"area of responsibility,zone of application,remarks," +
"design compliance check,pre-homo check,validation compliance chech";
titleTwo = "type of deliverables,deliverable template,initiator,person liable," +
@@ -766,6 +776,7 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
}
private void importDatas(List<DummyInventoryInfoEO> dataList,
List<SysCategory> categoryList,
List<SysDictItem> dictItemList,
@@ -1278,4 +1289,224 @@ public class DummyInventoryInfoEOServiceImpl extends ServiceImpl<DummyInventoryI
}
return false;
}
/**
* 数据导出
* @param response
* @param request
* @param dummyInventoryInfoEO
*/
@SneakyThrows
@Override
public void exportData(HttpServletResponse response, HttpServletRequest request, DummyInventoryInfoEO dummyInventoryInfoEO) {
List<DummyInventoryInfoEO> dataList = new ArrayList<>();
QueryWrapper<DummyInventoryInfoEO> queryWrapper = QueryGenerator.initQueryWrapper(dummyInventoryInfoEO,request.getParameterMap());
if(StringUtils.isNotBlank(dummyInventoryInfoEO.getIds())){
queryWrapper.in("id",Arrays.asList(dummyInventoryInfoEO.getIds().split(",")));
}
//导出的数据
dataList = this.list(queryWrapper);
//文件
List<OSSFile> fileInfos = getOssFiles(dataList);
//数据转换(文件名称,技术领域,对应标准)
dataTransition(dataList, fileInfos);
OutputStream os = null;
try {
response.setContentType("application/force-download");
Workbook workbook = new XSSFWorkbook();
String path = uploadpath + "/tempZip";
File fileTemp = new File(path);
if (fileTemp.exists()) {
fileTemp.delete();
}
fileTemp.mkdirs();
//文件
exportFile(dataList,fileInfos);
//excel
OutputStream excelOS = new FileOutputStream(path + File.separator + "虚拟清单.xlsx");
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
workbook = ExcelExportUtil.exportExcel(exportParams, DummyInventoryInfoEO.class, dataList);
workbook.write(excelOS);
excelOS.flush();
ZipUtil.zip(path, path + ".zip");
//文件
FileInputStream fis = new FileInputStream(path + ".zip");
os = response.getOutputStream();
int len = 0;
while ((len = fis.read()) != -1) {
os.write(len);
}
os.flush();
fis.close();
} catch (IOException e) {
if(CutEnum.CN.getValue().equals(dummyInventoryInfoEO.getCut())){
throw new JeroBootException("下载文件失败");
}else{
throw new JeroBootException("Failed to download file");
}
} finally {
IOUtils.closeQuietly(os);
File file = new File(uploadpath + "/tempZip");
FileUtil.deleteContents(file);
}
}
/**
* 数据转换(文件名称,技术领域,对应标准)
* @param dataList
* @param fileInfos
*/
private void dataTransition(List<DummyInventoryInfoEO> dataList, List<OSSFile> fileInfos) {
//技术领域
List<SysCategory> sysCategoryList = sysCategoryService.list();
//文档库数据
List<String> correspondingStandardIdList = new ArrayList<>();
for (DummyInventoryInfoEO inventoryInfoEO : dataList) {
String correspondingStandard = inventoryInfoEO.getCorrespondingStandard();
if(StringUtils.isNotBlank(correspondingStandard)){
correspondingStandardIdList.addAll(Arrays.asList(correspondingStandard.split(",")));
}
}
LambdaQueryWrapper<BussDocumentLibraryEO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(BussDocumentLibraryEO::getId,correspondingStandardIdList);
List<BussDocumentLibraryEO> bussDocumentLibraryEOList = iBussDocumentLibraryEOService.list(lambdaQueryWrapper);
for (DummyInventoryInfoEO inventoryInfoEO : dataList) {
String correspondingStandard = inventoryInfoEO.getCorrespondingStandard();
String technologyTerritory = inventoryInfoEO.getTechnologyTerritory();
String designDeliverableTemplate = inventoryInfoEO.getDesignDeliverableTemplate();
String prehomoDeliverableTemplate = inventoryInfoEO.getPrehomoDeliverableTemplate();
String verifyDeliverableTemplate = inventoryInfoEO.getVerifyDeliverableTemplate();
//对应标准
if(StringUtils.isNotBlank(correspondingStandard)){
StringBuilder sb = new StringBuilder();
for (String s : correspondingStandard.split(",")) {
List<BussDocumentLibraryEO> collect = bussDocumentLibraryEOList.stream()
.filter(e -> s.equals(e.getId())).collect(Collectors.toList());
if(collect.size() != 0){
sb.append(collect.get(0).getSerialNumber() + ",");
}else{
sb.append(s + ",");
}
}
if(StringUtils.isNotBlank(sb)){
String substring = sb.substring(0, sb.length() - 1);
inventoryInfoEO.setCorrespondingStandard(substring);
}
}
//技术领域
if(StringUtils.isNotBlank(technologyTerritory)){
StringBuilder sb = new StringBuilder();
for (String s : technologyTerritory.split(",")) {
List<SysCategory> collect = sysCategoryList.stream()
.filter(e -> s.equals(e.getId())).collect(Collectors.toList());
if(collect.size() != 0){
sb.append(collect.get(0).getName()+",");
}
}
if(StringUtils.isNotBlank(sb)){
String substring = sb.substring(0, sb.length() - 1);
inventoryInfoEO.setTechnologyTerritory(substring);
}
}
//设计交付物模板
if(StringUtils.isNotBlank(designDeliverableTemplate)){
String designDeliverableTemplateName = template(fileInfos, designDeliverableTemplate);
inventoryInfoEO.setDesignDeliverableTemplateName(designDeliverableTemplateName);
}
//设计交付物模板
if(StringUtils.isNotBlank(prehomoDeliverableTemplate)){
String prehomoDeliverableTemplateName = template(fileInfos, prehomoDeliverableTemplate);
inventoryInfoEO.setPrehomoDeliverableTemplateName(prehomoDeliverableTemplateName);
}
//设计交付物模板
if(StringUtils.isNotBlank(verifyDeliverableTemplate)){
String verifyDeliverableTemplateName = template(fileInfos, verifyDeliverableTemplate);
inventoryInfoEO.setVerifyDeliverableTemplateName(verifyDeliverableTemplateName);
}
}
}
/**
* 模板名称转换
* @param fileInfos
* @param value
* @return
*/
private String template(List<OSSFile> fileInfos, String value) {
StringBuilder sb = new StringBuilder();
for (String s : value.split(",")) {
List<OSSFile> collect = fileInfos.stream().filter(e -> s.equals(e.getId())).collect(Collectors.toList());
if(collect.size() != 0){
sb.append(collect.get(0).getFileName()+",");
}
}
String substring = "";
if(StringUtils.isNotBlank(sb)){
substring = sb.substring(0, sb.length() - 1);
}
return substring;
}
/**
* 获取文件
* @param dataList
* @return
*/
private List<OSSFile> getOssFiles(List<DummyInventoryInfoEO> dataList) {
List<String> fileIdList = new ArrayList<>();
List<String> design = dataList.stream().map(DummyInventoryInfoEO::getDesignDeliverableTemplate).collect(Collectors.toList());
List<String> prehomo = dataList.stream().map(DummyInventoryInfoEO::getPrehomoDeliverableTemplate).collect(Collectors.toList());
List<String> verify = dataList.stream().map(DummyInventoryInfoEO::getVerifyDeliverableTemplate).collect(Collectors.toList());
fileIdList.addAll(design);
fileIdList.addAll(prehomo);
fileIdList.addAll(verify);
//查询所有的文件
List<OSSFile> fileInfos = new ArrayList<>();
if(fileIdList.size() != 0){
fileInfos = iOSSFileService.getFileInfos(StringUtils.join(fileIdList, ","));
}
return fileInfos;
}
private void exportFile(List<DummyInventoryInfoEO> dataList,List<OSSFile> fileInfos) throws IOException {
if(fileInfos.size() != 0){
for (DummyInventoryInfoEO inventoryInfoEO : dataList) {
String designDeliverableTemplate = inventoryInfoEO.getDesignDeliverableTemplate();
String prehomoDeliverableTemplate = inventoryInfoEO.getPrehomoDeliverableTemplate();
String verifyDeliverableTemplate = inventoryInfoEO.getVerifyDeliverableTemplate();
String serialNumber = inventoryInfoEO.getSerialNumber();
if(StringUtils.isBlank(serialNumber)){
continue;
}
List<OSSFile> designFileList = fileInfos.stream().filter(e -> designDeliverableTemplate.contains(e.getId())).collect(Collectors.toList());
List<OSSFile> prehomoFileList = fileInfos.stream().filter(e -> prehomoDeliverableTemplate.contains(e.getId())).collect(Collectors.toList());
List<OSSFile> verifyFileList = fileInfos.stream().filter(e -> verifyDeliverableTemplate.contains(e.getId())).collect(Collectors.toList());
List<OSSFile> oSSFileList = new ArrayList<>();
oSSFileList.addAll(designFileList);
oSSFileList.addAll(prehomoFileList);
oSSFileList.addAll(verifyFileList);
if(oSSFileList.size() != 0){
String fileNowPath = uploadpath + "/tempZip/" + serialNumber;
File file = new File(fileNowPath);
if (file.exists()) {
file.delete();
}
file.mkdirs();
for (OSSFile ossFile : oSSFileList) {
String url = ossFile.getUrl();
copyFile(url, fileNowPath + File.separator + ossFile.getFileName());
}
}
}
}
}
}