package com.whyc.service;
|
|
import com.whyc.alarm.Fbs5100Alarm;
|
import com.whyc.alarm.Fbs5100AlarmData;
|
import com.whyc.alarm.Fbs5100AlarmParam;
|
import com.whyc.charge.*;
|
import com.whyc.dto.AlarmFactoryDto;
|
import com.whyc.dto.ServletUtils;
|
import org.apache.poi.ss.usermodel.ClientAnchor;
|
import org.apache.poi.xssf.usermodel.*;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import sun.misc.BASE64Decoder;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.io.OutputStream;
|
import java.io.UnsupportedEncodingException;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
@Service
|
public class ExcelExportService {
|
@Autowired
|
private Fbs5100DisChargeDataService disChargeDataService;
|
|
@Autowired
|
private Fbs5100ChargeDataService chargeDataService;
|
|
@Autowired
|
private Fbs5100AlarmDataService alarmDataService;
|
|
//导出放电数据bcp
|
public void exportBcp(HttpServletRequest req, HttpServletResponse resp) {
|
String curr_echart = req.getParameter("curr_echart"); //电池电流折线图
|
String groupVol_echart = req.getParameter("groupVol_echart");//组端电压折线图
|
String cap_echart = req.getParameter("cap_echart"); //测试容量折线图
|
String temp_echart = req.getParameter("temp_echart");//温度折线图
|
|
String filePath = req.getParameter("filePath");
|
Fbs5100DisChargeData data = disChargeDataService.readFboFile(filePath);
|
//图片base64后的数据
|
List<byte[]> bytes = new ArrayList<>();
|
try {
|
if (ServletUtils.isNotNull(curr_echart)) {
|
String[] url = curr_echart.split(",");
|
bytes.add(new BASE64Decoder().decodeBuffer(url[1]));
|
}
|
if (ServletUtils.isNotNull(groupVol_echart)) {
|
String[] url = groupVol_echart.split(",");
|
bytes.add(new BASE64Decoder().decodeBuffer(url[1]));
|
}
|
if (ServletUtils.isNotNull(cap_echart)) {
|
String[] url = cap_echart.split(",");
|
bytes.add(new BASE64Decoder().decodeBuffer(url[1]));
|
}
|
if (ServletUtils.isNotNull(temp_echart)) {
|
String[] url = temp_echart.split(",");
|
bytes.add(new BASE64Decoder().decodeBuffer(url[1]));
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
//当前日期
|
String nowFormat = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
|
String excelName = "bcp-" + nowFormat;
|
|
XSSFWorkbook wb = new XSSFWorkbook();
|
XSSFSheet sheet = wb.createSheet("数据总表");
|
|
XSSFDrawing patriarch = sheet.createDrawingPatriarch();
|
int rowNumSheet = 0;
|
//从文件中获取数据
|
List<Fbs5100FbsData> list = data.fbsDatas;
|
Fbs5100BattParam battParam = data.battParam;
|
Fbs5100TestParam testParam = data.testParam;
|
Fbs5100CapState capState = data.capState;
|
|
sheet.createRow(rowNumSheet);
|
sheet.getRow(rowNumSheet).createCell(0).setCellValue("电池组数:" + battParam.BattGroupCount);
|
sheet.getRow(rowNumSheet).createCell(1).setCellValue("每组单体数:" + battParam.EachGroupBattCount);
|
sheet.getRow(rowNumSheet).createCell(2).setCellValue("标称单体电压:" + battParam.MonomerVol + "V");
|
|
rowNumSheet++;
|
sheet.createRow(rowNumSheet);
|
sheet.getRow(rowNumSheet).createCell(0).setCellValue("浮充电流阈值:" + battParam.FloatChargeVol + "A");
|
sheet.getRow(rowNumSheet).createCell(1).setCellValue("在线电压低阈值:" + battParam.OnlineVolLow + "A");
|
sheet.getRow(rowNumSheet).createCell(2).setCellValue("均充电压:" + battParam.JunChargeVol + "A");
|
|
rowNumSheet++;
|
sheet.createRow(rowNumSheet);
|
sheet.getRow(rowNumSheet).createCell(0).setCellValue("测试开始时间:" + formartDate(capState.StartDT.time,"yyyy-MM-dd HH:mm:ss"));
|
sheet.getRow(rowNumSheet).createCell(1).setCellValue("测试时长:" + capState.Test_Time.hour+":"+capState.Test_Time.minute+":"+capState.Test_Time.second);
|
|
rowNumSheet += 4;
|
//插入图片
|
int picNum = 0;
|
String[] picName = getPicName("bcp");
|
if (picName.length == bytes.size()) {
|
for (int i = 0; i < picName.length; i++) {
|
sheet.createRow(rowNumSheet - 1);
|
sheet.getRow(rowNumSheet - 1).createCell(0).setCellValue(picName[i]);
|
//rowNum++;
|
XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 512, 255, (short) 0, rowNumSheet, (short) 10, rowNumSheet + 27);
|
anchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE);
|
patriarch.createPicture(anchor, wb.addPicture(bytes.get(picNum), XSSFWorkbook.PICTURE_TYPE_PNG)).resize(1);
|
picNum++;
|
rowNumSheet += 27;
|
}
|
}
|
|
XSSFSheet sheet1 = wb.createSheet("数据");
|
//抬头
|
int rowNum = 0;
|
sheet1.createRow(rowNum).createCell(0).setCellValue("测试数据");
|
rowNum++;
|
//属性栏
|
String[] rowName = getRowName("bcp");
|
XSSFRow row = sheet1.createRow(rowNum);
|
for (int i = 0; i < rowName.length; i++) {
|
row.createCell(i).setCellValue(rowName[i]);
|
}
|
for (int i = 0; i < battParam.BattGroupCount; i++) {
|
row.createCell(rowName.length + i*2).setCellValue("#" + Integer.valueOf(i + 1)+"在线电压");
|
row.createCell(rowName.length + i*2+1).setCellValue("#" + Integer.valueOf(i + 1)+"组端电压");
|
}
|
rowNum++;
|
//数据栏
|
for (int i = 0; i < list.size(); i++) {
|
sheet1.createRow(rowNum); //创建行
|
Fbs5100FbsData fbsData = list.get(i);
|
sheet1.getRow(rowNum).createCell(0).setCellValue(fbsData.testTime.hour+":"+fbsData.testTime.minute+":"+fbsData.testTime.second);
|
sheet1.getRow(rowNum).createCell(1).setCellValue(String.valueOf(fbsData.muxianvol_discharge));
|
sheet1.getRow(rowNum).createCell(2).setCellValue(String.valueOf(fbsData.muxianvol_charge));
|
sheet1.getRow(rowNum).createCell(3).setCellValue(String.valueOf(fbsData.boostDCDC_OutVol));
|
sheet1.getRow(rowNum).createCell(4).setCellValue(String.valueOf(fbsData.muxianvol));
|
for (int j = 0; j < battParam.BattGroupCount; j++) {
|
sheet1.getRow(rowNum).createCell(rowName.length + j*2).setCellValue(String.valueOf(fbsData.onlinevol[j]));
|
sheet1.getRow(rowNum).createCell(rowName.length + j*2+1).setCellValue(String.valueOf(fbsData.groupvol[j]));
|
}
|
rowNum++;
|
}
|
rowNum++;
|
|
try {
|
// 转码防止乱码
|
resp.addHeader("Content-Disposition", "attachment;filename="
|
+ new String(excelName.getBytes("UTF-8"), "ISO8859-1")
|
+ ".xlsx");
|
OutputStream out = resp.getOutputStream();
|
wb.write(out);
|
out.close();
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
//将日期格式转换成指定的字符串格式
|
public static String formartDate(Date date, String str){
|
return new SimpleDateFormat(str).format(date);
|
}
|
public String[] getRowName(String bcp){
|
if (bcp.equals("bcp")){
|
String[] rowNameBcp = {"测试时间","放电母线电压(V)","充电母线电压(V)","升压DCDC输出电压","48V母线电压"};
|
return rowNameBcp;
|
}else if (bcp.equals("chr")){
|
String[] rowNameChr = {"测试时间","放电母线电压(V)","充电母线电压(V)","升压DCDC输出电压","48V母线电压"};
|
return rowNameChr;
|
}else if (bcp.equals("alm")){
|
String[] rowNameAlm = {"告警开始时间","告警名称","告警类型","告警值"};
|
return rowNameAlm;
|
}else{
|
String[] rowName1 = {"测试时间","总电压(V)","总电流(A)","环境温度","环境湿度","测试容量(AH)"};
|
return rowName1;
|
}
|
}
|
|
public String[] getPicName(String fileType){
|
if (fileType.equals("bcp")){
|
String[] picNameBcp = new String[]{
|
"电池电流折线图","组端电压折线图","测试容量折线图","温度折线图"
|
};
|
return picNameBcp;
|
}else if(fileType.equals("chr")){
|
String[] picNameChr = new String[]{
|
"电池电流折线图","组端电压折线图","测试容量折线图","温度折线图"
|
};
|
return picNameChr;
|
}else{
|
return null;
|
}
|
}
|
|
|
//导出充电数据chr
|
public void exportChr(HttpServletRequest req, HttpServletResponse resp){
|
String curr_echart = req.getParameter("curr_echart"); //电池电流折线图
|
String groupVol_echart = req.getParameter("groupVol_echart");//组端电压折线图
|
String cap_echart = req.getParameter("cap_echart"); //测试容量折线图
|
String temp_echart = req.getParameter("temp_echart");//温度折线图
|
String filePath = req.getParameter("filePath");
|
Fbs5100ChargeData data=chargeDataService.readFileData(filePath);
|
//图片base64后的数据
|
List<byte[]> bytes = new ArrayList<>();
|
try {
|
if (ServletUtils.isNotNull(curr_echart)) {
|
String[] url = curr_echart.split(",");
|
bytes.add(new BASE64Decoder().decodeBuffer(url[1]));
|
}
|
if (ServletUtils.isNotNull(groupVol_echart)) {
|
String[] url = groupVol_echart.split(",");
|
bytes.add(new BASE64Decoder().decodeBuffer(url[1]));
|
}
|
if (ServletUtils.isNotNull(cap_echart)) {
|
String[] url = cap_echart.split(",");
|
bytes.add(new BASE64Decoder().decodeBuffer(url[1]));
|
}
|
if (ServletUtils.isNotNull(temp_echart)) {
|
String[] url = temp_echart.split(",");
|
bytes.add(new BASE64Decoder().decodeBuffer(url[1]));
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
//数据
|
Fbs5100BattParam battParam =data.battParam;
|
Fbs5100ChargeParam chargeParam =data.chargeParam;
|
Fbs5100ChargeState chargeState =data.chargeState;
|
//从文件中获取数据
|
List<Fbs5100FbsData> list = data.fbsDatas;
|
//当前日期
|
String nowFormat = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
|
String excelName = "chr-"+nowFormat;
|
XSSFWorkbook wb = new XSSFWorkbook();
|
XSSFSheet sheet = wb.createSheet("数据总表");
|
int rowNumSheet = 0;
|
sheet.createRow(rowNumSheet);
|
sheet.getRow(rowNumSheet).createCell(0).setCellValue("电池组数:" + battParam.BattGroupCount);
|
sheet.getRow(rowNumSheet).createCell(1).setCellValue("每组单体数:" + battParam.EachGroupBattCount);
|
sheet.getRow(rowNumSheet).createCell(2).setCellValue("标称单体电压:" + battParam.MonomerVol + "V");
|
|
rowNumSheet++;
|
sheet.createRow(rowNumSheet);
|
sheet.getRow(rowNumSheet).createCell(0).setCellValue("浮充电流阈值:" + battParam.FloatChargeVol + "A");
|
sheet.getRow(rowNumSheet).createCell(1).setCellValue("在线电压低阈值:" + battParam.OnlineVolLow + "A");
|
sheet.getRow(rowNumSheet).createCell(2).setCellValue("均充电压:" + battParam.JunChargeVol + "A");
|
|
rowNumSheet++;
|
sheet.createRow(rowNumSheet);
|
sheet.getRow(rowNumSheet).createCell(0).setCellValue("测试开始时间:" + formartDate(chargeState.StartDT.time,"yyyy-MM-dd HH:mm:ss"));
|
sheet.getRow(rowNumSheet).createCell(1).setCellValue("测试时长:" + chargeState.Test_Time.hour+":"+chargeState.Test_Time.minute+":"+chargeState.Test_Time.second);
|
|
rowNumSheet += 4;
|
//图片元素
|
XSSFDrawing patriarch = sheet.createDrawingPatriarch();
|
//插入图片
|
int picNum = 0;
|
String[] picName =getPicName("chr");
|
if (picName.length==bytes.size()){
|
for(int i=0;i<picName.length;i++){
|
sheet.createRow(rowNumSheet-1);
|
sheet.getRow(rowNumSheet-1).createCell(0).setCellValue(picName[i]);
|
//rowNum++;
|
XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 512, 255,(short) 0, rowNumSheet, (short) 10, rowNumSheet+27);
|
anchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE);
|
patriarch.createPicture(anchor,wb.addPicture(bytes.get(picNum),XSSFWorkbook.PICTURE_TYPE_PNG)).resize(1);
|
picNum ++;
|
rowNumSheet+=30;
|
}
|
}
|
XSSFSheet sheet1 = wb.createSheet("数据");
|
//抬头
|
int rowNum = 0;
|
sheet1.createRow(rowNum).createCell(0).setCellValue("测试数据");
|
rowNum++;
|
//属性栏
|
String[] rowName = getRowName("chr");
|
XSSFRow row = sheet1.createRow(rowNum);
|
for (int i = 0; i < rowName.length; i++) {
|
row.createCell(i).setCellValue(rowName[i]);
|
}
|
for (int i = 0; i < battParam.BattGroupCount; i++) {
|
row.createCell(rowName.length + i*2).setCellValue("#" + Integer.valueOf(i + 1)+"在线电压");
|
row.createCell(rowName.length + i*2+1).setCellValue("#" + Integer.valueOf(i + 1)+"组端电压");
|
}
|
rowNum++;
|
//数据栏
|
for (int i = 0; i < list.size(); i++) {
|
sheet1.createRow(rowNum); //创建行
|
Fbs5100FbsData fbsData = list.get(i);
|
sheet1.getRow(rowNum).createCell(0).setCellValue(fbsData.testTime.hour+":"+fbsData.testTime.minute+":"+fbsData.testTime.second);
|
sheet1.getRow(rowNum).createCell(1).setCellValue(String.valueOf(fbsData.muxianvol_discharge));
|
sheet1.getRow(rowNum).createCell(2).setCellValue(String.valueOf(fbsData.muxianvol_charge));
|
sheet1.getRow(rowNum).createCell(3).setCellValue(String.valueOf(fbsData.boostDCDC_OutVol));
|
sheet1.getRow(rowNum).createCell(4).setCellValue(String.valueOf(fbsData.muxianvol));
|
for (int j = 0; j < battParam.BattGroupCount; j++) {
|
sheet1.getRow(rowNum).createCell(rowName.length + j*2).setCellValue(String.valueOf(fbsData.onlinevol[j]));
|
sheet1.getRow(rowNum).createCell(rowName.length + j*2+1).setCellValue(String.valueOf(fbsData.groupvol[j]));
|
}
|
rowNum++;
|
}
|
rowNum++;
|
|
try {
|
// 转码防止乱码
|
resp.addHeader("Content-Disposition", "attachment;filename="
|
+ new String(excelName.getBytes("UTF-8"), "ISO8859-1")
|
+ ".xlsx");
|
OutputStream out = resp.getOutputStream();
|
wb.write(out);
|
out.close();
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
//导出告警数据alm
|
public void exportAlm(HttpServletRequest req, HttpServletResponse resp){
|
String filePath = req.getParameter("filePath");
|
//数据
|
Fbs5100AlarmData data=alarmDataService.readFileData(filePath);
|
Fbs5100AlarmParam alarmParam = data.alarmParam;
|
List<Fbs5100Alarm> list=data.alarms;
|
//当前日期
|
String excelName ="alm-"+new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
|
XSSFWorkbook wb = new XSSFWorkbook();
|
XSSFSheet sheet = wb.createSheet("数据总表");
|
int rowNumSheet = 0;
|
sheet.createRow(rowNumSheet);
|
sheet.getRow(rowNumSheet).createCell(0).setCellValue("告警参数:");
|
rowNumSheet++;
|
sheet.createRow(rowNumSheet);
|
sheet.getRow(rowNumSheet).createCell(0).setCellValue("标称容量:"+alarmParam.Batt_CAP);
|
sheet.getRow(rowNumSheet).createCell(1).setCellValue("组端电压上限值:"+alarmParam.GroupVol_H);
|
sheet.getRow(rowNumSheet).createCell(2).setCellValue("组端电压下限值:"+alarmParam.GroupVol_L);
|
rowNumSheet++;
|
sheet.createRow(rowNumSheet);
|
sheet.getRow(rowNumSheet).createCell(0).setCellValue("交流电压上限值:"+alarmParam.AC_VOL_H);
|
sheet.getRow(rowNumSheet).createCell(1).setCellValue("交流电压下限值:"+alarmParam.AC_VOL_L);
|
rowNumSheet++;
|
|
//从文件中获取数据
|
String testName="测试数据:";
|
//抬头
|
sheet.createRow(rowNumSheet).createCell(0).setCellValue(testName);
|
rowNumSheet++;
|
|
XSSFRow row = sheet.createRow(rowNumSheet);
|
//属性栏
|
String[] rowName =getRowName("alm");
|
for (int i=0;i<rowName.length;i++){
|
row.createCell(i).setCellValue(rowName[i]);
|
}
|
rowNumSheet++;
|
//数据栏
|
for (int i = 0; i < list.size(); i++) {
|
sheet.createRow(rowNumSheet); //创建行
|
Fbs5100Alarm alarm= list.get(i);
|
sheet.getRow(rowNumSheet).createCell(0).setCellValue(formartDate(alarm.StartTime.time,"yyyy-MM-dd HH:mm:ss"));
|
sheet.getRow(rowNumSheet).createCell(1).setCellValue(AlarmFactoryDto.getAlmName(alarm.AlarmItem));
|
sheet.getRow(rowNumSheet).createCell(2).setCellValue(AlarmFactoryDto.getAlmType(alarm.AlarmType));
|
sheet.getRow(rowNumSheet).createCell(3).setCellValue(alarm.AlarmValue);
|
rowNumSheet++;
|
}
|
rowNumSheet++;
|
try {
|
// 转码防止乱码
|
resp.addHeader("Content-Disposition", "attachment;filename="
|
+ new String(excelName.getBytes("UTF-8"), "ISO8859-1")
|
+ ".xlsx");
|
OutputStream out = resp.getOutputStream();
|
wb.write(out);
|
out.close();
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|