Commit 3bfab8b0 by 张祺

增加导出数据方法

parent bf92a8fa
package com.keymobile.indicators.api.hytobacco; package com.keymobile.indicators.api.hytobacco;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.merge.OnceAbsoluteMergeStrategy;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.keymobile.indicators.constant.Constants; import com.keymobile.indicators.constant.Constants;
import com.keymobile.indicators.model.entity.AuthModel; import com.keymobile.indicators.model.entity.AuthModel;
import com.keymobile.indicators.model.entity.dataenter.*; import com.keymobile.indicators.model.entity.dataenter.*;
...@@ -29,11 +34,11 @@ import org.springframework.data.domain.PageRequest; ...@@ -29,11 +34,11 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.net.URLEncoder;
import java.util.Arrays; import java.util.*;
import java.util.Date;
import java.util.List;
@Api(tags={"数据填报-在线填报、excel导入"}) @Api(tags={"数据填报-在线填报、excel导入"})
@RestController @RestController
...@@ -217,6 +222,15 @@ public class DataEnterCtrl { ...@@ -217,6 +222,15 @@ public class DataEnterCtrl {
InputStream is = file.getInputStream(); InputStream is = file.getInputStream();
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is); XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
XSSFSheet sheet = xssfWorkbook.getSheetAt(0); XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
// int lastRow = sheet.getLastRowNum();
// for(int i = 1; i < lastRow; i++) {
// XSSFRow row = sheet.getRow(i);
// for (int j = 0; j < 13; j++) {
// String val1 = ExcelUtil.getXSSFCellValue(row.getCell(j));
// System.out.println("-------" + val1);
// }
// }
ExcelTemplate template = excelTemplateService.getByTaskId(taskId); ExcelTemplate template = excelTemplateService.getByTaskId(taskId);
List<ExcelIndicator> inds = template.getInds(); List<ExcelIndicator> inds = template.getInds();
List<ExcelObj> objs = template.getObjs(); List<ExcelObj> objs = template.getObjs();
...@@ -224,7 +238,7 @@ public class DataEnterCtrl { ...@@ -224,7 +238,7 @@ public class DataEnterCtrl {
//需要同期? //需要同期?
int startRow = 1; int startRow = 1;
int startColumn = 1; int startColumn = 1;
int lastRow = sheet.getLastRowNum();
String sameTermValutTime = null; String sameTermValutTime = null;
Task task = taskService.getById(taskId, true, false); Task task = taskService.getById(taskId, true, false);
...@@ -334,4 +348,182 @@ public class DataEnterCtrl { ...@@ -334,4 +348,182 @@ public class DataEnterCtrl {
return value; return value;
} }
@ApiOperation("根据任务id导出excel")
@GetMapping("exportToExcel")
public void exportToExcel(@RequestParam("id")String taskId, HttpServletResponse response) throws IOException {
try {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
ExcelTemplate template = excelTemplateService.getByTaskId(taskId);
List<List<String>> headers = new ArrayList<>();
List<List<String>> datas = new ArrayList<>();
Task task = taskService.getById(taskId, false, false);
String fileName = URLEncoder.encode(task.getRuleName() + "_" + task.getValueTime(), "UTF-8");
ExcelWriterBuilder writerBuilder = EasyExcel.write(response.getOutputStream());
List<TaskIndValue> values = taskService.findValues(taskId, null);
if (template == null) {
List<String> header = new ArrayList<>();
header.add("指标名称");
headers.add(header);
List<String> header2 = new ArrayList<>();
header2.add("单位");
headers.add(header2);
List<String> header3 = new ArrayList<>();
header3.add("归属区域");
headers.add(header3);
List<String> header4 = new ArrayList<>();
header4.add("本期值");
headers.add(header4);
List<String> header5 = new ArrayList<>();
header5.add("同期值");
headers.add(header5);
List<String> header6 = new ArrayList<>();
header6.add("备注");
headers.add(header6);
for (TaskIndValue value : values) {
List<String> data = new ArrayList<>();
data.add(value.getIndName());
data.add(value.getIndUnit());
data.add(value.getObjName());
data.add(value.getIndValue());
if (StringUtils.isNotBlank(value.getIndValue())) {
data.add(value.getIndValue());
} else {
data.add("");
}
if (StringUtils.isNotBlank(value.getIndLastValue())) {
data.add(value.getIndLastValue());
} else {
data.add("");
}
datas.add(data);
}
} else {
List<ExcelIndicator> inds = template.getInds();
List<ExcelObj> objs = template.getObjs();
boolean hasSameTerm = false;
//需要同期?
if (template.getNeedSameTerm() != null && template.getNeedSameTerm()) {
hasSameTerm = true;
}
List<OnceAbsoluteMergeStrategy> merges = new ArrayList<>();
if (template.getCtype() == 1) {
// 列类型:1、指标 2 考核对象
List<String> column1 = new ArrayList<>();
column1.add("");
headers.add(column1);
for (ExcelIndicator indicator : inds) {
List<String> header = new ArrayList<>();
headers.add(header);
header.add(indicator.getIndName());
if (hasSameTerm) {
header.add("本期");
List<String> header2 = new ArrayList<>();
headers.add(header2);
header2.add(indicator.getIndName());
header2.add("同期");
hasSameTerm = true;
}
}
if (hasSameTerm) {
//如果有同期值需要占据两行
column1.add("");
}
for (ExcelObj obj : objs) {
List<String> data = new ArrayList<>();
data.add(obj.getObjName());
for (ExcelIndicator indicator : inds) {
genernateData(values, indicator, obj, hasSameTerm, data);
}
datas.add(data);
}
} else {
for (ExcelIndicator indicator : inds) {
List<String> data = new ArrayList<>();
datas.add(data);
data.add(indicator.getIndName());
for (ExcelObj obj : objs) {
genernateData(values, indicator, obj, hasSameTerm, data);
}
}
List<String> column1 = new ArrayList<>();
column1.add("");
headers.add(column1);
for (ExcelObj obj : objs) {
List<String> header = new ArrayList<>();
header.add(obj.getObjName());
headers.add(header);
if (hasSameTerm) {
header.add("本期");
List<String> header2 = new ArrayList<>();
headers.add(header2);
header2.add(obj.getObjName());
header2.add("同期");
hasSameTerm = true;
}
}
if (hasSameTerm) {
//如果有同期值需要占据两行
column1.add("");
}
}
if (hasSameTerm && merges.size() > 0) {
for (OnceAbsoluteMergeStrategy mergeStrategy : merges) {
writerBuilder.registerWriteHandler(mergeStrategy);
}
}
}
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
writerBuilder.excelType(ExcelTypeEnum.XLSX).head(headers)
.autoCloseStream(false).sheet("数据填报").doWrite(datas);
} catch (Exception e) {
log.error("生成excel模板出错" , e);
response.reset();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
Map<String, String> map = new HashMap<>(4);
map.put("status", "failure");
map.put("message", "导出数据失败:" + e.getMessage());
Gson gson = new Gson();
response.getWriter().write( gson.toJson(map));
}
}
/**
* 生成excel导出的填报值
* @param values
* @param indicator
* @param obj
* @param hasSameTerm
* @param data
*/
private void genernateData(List<TaskIndValue> values, ExcelIndicator indicator,
ExcelObj obj, boolean hasSameTerm, List<String> data) {
for (TaskIndValue value : values) {
if (indicator.getIndId().equals(value.getIndId()) &&
obj.getObjType().equals(value.getObjType())&&
obj.getObjId().equals(value.getObjId())) {
if (StringUtils.isNotBlank(value.getIndValue())) {
data.add(value.getIndValue());
} else {
data.add("");
}
if (hasSameTerm) {
if (StringUtils.isNotBlank(value.getIndLastValue())) {
data.add(value.getIndLastValue());
} else {
data.add("");
}
}
break;
}
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment