Browse Source

导出数据excel表格

tags/V1.0.1^2
chengwang 1 year ago
parent
commit
3dabf12434
3 changed files with 125 additions and 24 deletions
  1. +1
    -6
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/controller/AirDataController.java
  2. +5
    -0
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/airData/IAirDataService.java
  3. +119
    -18
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/airData/query/QueryAirDataListService.java

+ 1
- 6
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/controller/AirDataController.java View File

@@ -44,18 +44,13 @@ public class AirDataController {
}

/**
* 生成excel表格
* 生成并导出excel表格
*/
@GetMapping("/generateTable/{id}")
public JsonResult generateTableById(@PathVariable("id") String id) {
return airDataService.generateTable(id);
}

/**
* 下载表格
*/


/**
* 导出报告
*/

+ 5
- 0
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/airData/IAirDataService.java View File

@@ -12,6 +12,11 @@ import java.util.List;
*/
public interface IAirDataService extends IBaseService<AirData> {

/**
* 根据任务id查询大气数据列表
* @param id
* @return
*/
List<AirData> getAirDataList(String id);

JsonResult generateTable(String id);

+ 119
- 18
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/airData/query/QueryAirDataListService.java View File

@@ -1,17 +1,27 @@
package com.tuoheng.admin.service.airData.query;

import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.tuoheng.admin.constant.SystemConstant;
import com.tuoheng.admin.entity.domain.AirData;
import com.tuoheng.admin.entity.domain.AirDataExport;
import com.tuoheng.admin.entity.domain.Inspection;
import com.tuoheng.admin.entity.domain.User;
import com.tuoheng.admin.entity.vo.airData.AirDataExcelVo;
import com.tuoheng.admin.enums.AirDataEnum;
import com.tuoheng.admin.enums.MarkEnum;
import com.tuoheng.admin.mapper.AirDataExportMapper;
import com.tuoheng.admin.mapper.AirDataMapper;
import com.tuoheng.admin.mapper.InspectionMapper;
import com.tuoheng.admin.utils.AliyunOSSUtil;
import com.tuoheng.admin.utils.CurrentUserUtil;
import com.tuoheng.common.core.config.UploadFileConfig;
import com.tuoheng.common.core.enums.ServiceExceptionEnum;
import com.tuoheng.common.core.exception.ServiceException;
import com.tuoheng.common.core.utils.DateUtils;
import com.tuoheng.common.core.utils.JsonResult;
import com.tuoheng.common.core.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
@@ -19,6 +29,10 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -38,6 +52,12 @@ public class QueryAirDataListService {
@Autowired
private InspectionMapper inspectionMapper;

@Autowired
private AirDataExportMapper airDataExportMapper;

@Autowired
private AliyunOSSUtil aliyunOSSUtil;


public List<AirData> list(String id) {
List<AirData> airDataList = airDataMapper.selectList(Wrappers.<AirData>lambdaQuery()
@@ -48,11 +68,25 @@ public class QueryAirDataListService {
}

public JsonResult generateTable(String id) {
User user = CurrentUserUtil.getUserInfo();
String tenantId = user.getTenantId();
String userId = user.getId();
//校验
JsonResult jsonResult = this.check(id);
if(0 != jsonResult.getCode()){
log.info("生成excel表格的任务id为空");
return JsonResult.error(jsonResult.getCode(),jsonResult.getMsg());
log.info("生成excel表格数据校验失败:{}",jsonResult.getMsg());
return jsonResult;
}
AirDataExport airDataExport = this.checkAirDataExport(id);
if (ObjectUtil.isNotEmpty(airDataExport)) {
return JsonResult.success(airDataExport);
}
//获取任务名称
Inspection inspection = inspectionMapper.selectById(id);
String name = inspection.getName();
if(StringUtils.isEmpty(name)){
log.info("对应的任务名称为空");
throw new ServiceException(ServiceExceptionEnum.FILE_DATA_TIME_IS_ERROR);
}
//获取当前任务id下的大气数据
List<AirData> airDataList = airDataMapper.selectList(Wrappers.<AirData>lambdaQuery()
@@ -61,38 +95,105 @@ public class QueryAirDataListService {
if(CollectionUtils.isEmpty(airDataList) || airDataList.size() == 0){
return JsonResult.error(AirDataEnum.AIR_DATA_IS_NOT_EXIST.getCode(),AirDataEnum.AIR_DATA_IS_NOT_EXIST.getMsg());
}
//数据转换
List<AirDataExcelVo> airDataExcelVoList = new ArrayList<>();
airDataList.forEach(x->{
AirDataExcelVo vo = new AirDataExcelVo();
BeanUtils.copyProperties(x,vo);
airDataExcelVoList.add(vo);
});
//获取任务名称
Inspection inspection = inspectionMapper.selectById(id);
String name = inspection.getName();
//获取到vo
JsonResult result = easyExcel(airDataExcelVoList,name);

return JsonResult.success("表格上传下载成功");
String fileName = inspection.getCode()+ "-" + "浓度监测数据" + ".xlsx";
String filePath = UploadFileConfig.uploadFolder + "/data/" + fileName;
File fd = new File(UploadFileConfig.uploadFolder + "/data");
//目录是否存在
if(!fd.exists()){
fd.mkdirs();
}
//生成excel
JsonResult result = this.easyExcel(airDataExcelVoList,inspection,fileName,filePath);
if (0 != result.getCode()) {
log.info("导出数据业务:生成excel失败:{}", result.getMsg());
return result;
}
//上传到oss
String ossUrl = this.uploadOss(filePath,fileName);
//数据导入记录表中
Integer count = this.addAirDataExport(id,ossUrl,tenantId,userId);
if(count <= 0){
log.info("添加大气数据报告导出记录失败");
}
return JsonResult.success();
}

private Integer addAirDataExport(String id, String ossUrl, String tenantId,String userId) {
AirDataExport airDataExport = new AirDataExport();
airDataExport.setInspectionId(id);
airDataExport.setTenantId(tenantId);
airDataExport.setOssUrl(ossUrl);
airDataExport.setExportType("data");
airDataExport.setCreateUser(userId);
airDataExport.setCreateTime(DateUtils.now());
int count = airDataExportMapper.insert(airDataExport);
return count;
}

private String uploadOss(String filePath, String fileName) {
File file = new File(filePath);
InputStream in = null;
String ossUrl = "";

try {
in = new FileInputStream(file);
//上传到oss
aliyunOSSUtil.uploadFile2OSS(in,fileName);
//通过文件名获取文件完整路径
ossUrl = aliyunOSSUtil.getFileUrl(fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return ossUrl;
}

public static JsonResult easyExcel(List<AirDataExcelVo> voArrayList,String inspectionName) {
String fileNameTemp = "G:/测试/"; //文件输出目录(路径自定义)
String temp = UUID.randomUUID().toString()+".xlsx";
String fileName = fileNameTemp+temp;
/**
* 大气报告导出记录表数据校验
* @param id
* @return
*/
private AirDataExport checkAirDataExport(String id) {
AirDataExport airDataExport = airDataExportMapper.selectOne(Wrappers.<AirDataExport>lambdaQuery()
.eq(AirDataExport::getInspectionId, id)
.eq(AirDataExport::getExportType, "data")
.eq(AirDataExport::getMark, MarkEnum.VALID.getCode()));
return airDataExport;
}

/**
* 生成excel表格
* @param voArrayList
* @param inspection
* @return
*/
public JsonResult easyExcel(List<AirDataExcelVo> voArrayList,Inspection inspection,String fileName,String filePath) {
String filePathName = filePath + fileName;
log.info("文件输出目录及格式:filePathName={}",filePathName);
List<List<String>> heads = new ArrayList<>();
String totalName = "项目名称:"+ inspectionName;
String totalName = "项目名称:"+ inspection.getName();
String[] nameString = SystemConstant.EXCEL_NAME;
for (String excelName : nameString) {
heads.add(Arrays.asList(totalName,excelName));
}
//需要写出的表格(对应实体类)
try {
EasyExcel.write(filePathName, AirDataExcelVo.class).sheet("浓度监测数据").head(heads)
.registerWriteHandler(new SimpleColumnWidthStyleStrategy(20)) // 简单的列宽策略,列宽20
.doWrite(voArrayList);//数据源
} catch (Exception e) {
log.info("生成数据导出excel异常");
throw new RuntimeException(e);
}
log.info("开始写入表格中");
EasyExcel.write(fileName, AirDataExcelVo.class).sheet("环境大气数据表").head(heads)
.registerWriteHandler(new SimpleColumnWidthStyleStrategy(20)) // 简单的列宽策略,列宽20
//.registerWriteHandler(new SimpleRowHeightStyleStrategy((short)20,(short)20)) // 设置行高策略
.doWrite(voArrayList);//数据源
log.info("写入表格已完成");

return JsonResult.success();
}

Loading…
Cancel
Save