Browse Source

解决配方导出

wukai 11 months ago
parent
commit
4c73de94f2

+ 41 - 60
ruoyi-admin/src/main/java/com/ruoyi/biz/controller/ApiController.java

@@ -3,7 +3,6 @@ package com.ruoyi.biz.controller;
 import com.ruoyi.biz.domain.*;
 import com.ruoyi.biz.service.*;
 import com.ruoyi.biz.service.impl.AsyncServiceImpl;
-import com.ruoyi.biz.tools.Tools;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.R;
@@ -28,7 +27,6 @@ import java.io.BufferedOutputStream;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.OutputStream;
-import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.text.ParseException;
 import java.time.LocalDate;
@@ -65,8 +63,10 @@ public class ApiController extends BaseController {
     private ITwinPanHeadInfoService panHeadInfoService;
     @Resource
     private ISysConfigService configService;
-    @Value("${excel.template}")
-    private String excelTemplate;
+    @Value("${excel.total}")
+    private String totalExcelTemplate;
+    @Value("${excel.formula}")
+    private String formulaExcelTemplate;
 
     @ApiOperation("在线设备")
     @GetMapping("/device/online")
@@ -165,8 +165,40 @@ public class ApiController extends BaseController {
     @ApiOperation("配方详情导出")
     @GetMapping("/formula/export/{height}")
     @CrossOrigin(origins = "*")
-    public R<Map> formulaExport(@PathVariable Float height) {
-        return R.ok();
+    public void formulaExport(@PathVariable Float height, HttpServletResponse response) {
+        Object d = CacheUtils.get(Constants.IOT_TOKEN, Constants.INDEX_FORMULA_DETAIL);
+        if (d != null) {
+            List<FormulaDetail> list = (List<FormulaDetail>) d;
+            list = list.stream().filter(detail -> detail.getFormula_data_15().equals(height)).collect(Collectors.toList());
+            try (FileInputStream inputStream = new FileInputStream(formulaExcelTemplate); Workbook wb = new XSSFWorkbook(inputStream); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream())) {
+                Sheet sheet = wb.getSheetAt(0);
+                AtomicInteger rowNum = new AtomicInteger(2);
+
+                list.forEach(detail -> {
+                    Row row = sheet.createRow(rowNum.get());
+                    Cell[] cells = new Cell[26];
+                    for (int i = 0; i < cells.length; i++) {
+                        cells[i] = row.createCell(i);
+                    }
+                    detail.setCells(cells);
+                    rowNum.getAndIncrement();
+                });
+
+                // 清空response
+                response.reset();
+                // 设置response的Header
+                response.setCharacterEncoding("UTF-8");
+                //Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存
+                //attachment表示以附件方式下载 inline表示在线打开 "Content-Disposition: inline; filename=文件名.mp3"
+                // filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称
+                response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("毛高" + height + "设备明细导出" + System.currentTimeMillis() + ".xlsx", "UTF-8"));
+                response.setContentType("application/octet-stream");
+                wb.write(outputStream);
+                outputStream.flush();
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
     }
 
 
@@ -197,7 +229,7 @@ public class ApiController extends BaseController {
         List<TwinRecordAlarms> alarms = recordAlarmsService.selectTwinRecordAlarmsList(recordAlarms);
         // path是指想要下载的文件的路径
         // 读取现有的xlsx文件
-        try (FileInputStream inputStream = new FileInputStream(excelTemplate); Workbook wb = new XSSFWorkbook(inputStream); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream())) {
+        try (FileInputStream inputStream = new FileInputStream(totalExcelTemplate); Workbook wb = new XSSFWorkbook(inputStream); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream())) {
             Sheet sheet = wb.getSheetAt(0);
             AtomicInteger rowNum = new AtomicInteger(2);
             //填充数据
@@ -207,58 +239,7 @@ public class ApiController extends BaseController {
                 for (int i = 0; i < cells.length; i++) {
                     cells[i] = row.createCell(i);
                 }
-                //设备名称
-                cells[0].setCellValue(calc2hr.getRemark());
-                //时间
-                cells[1].setCellValue(DateUtils.parseDateToStr(calc2hr.getDataDate()));
-                //总长
-                cells[2].setCellValue(calc2hr.getLengthA().add(calc2hr.getLengthB()).floatValue());
-                //总重
-                cells[3].setCellValue(calc2hr.getWeightA().add(calc2hr.getWeightB()).floatValue());
-                //总稼动率
-                BigDecimal totalOpenTime = calc2hr.getOpenTimeA().add(calc2hr.getOpenTimeB());
-                BigDecimal totalCloseTime = calc2hr.getCloseTimeA().add(calc2hr.getCloseTimeB());
-                cells[4].setCellValue(Tools.calcPercent(totalOpenTime, totalCloseTime).floatValue());
-                // 总电量
-                cells[5].setCellValue(calc2hr.getKwh().floatValue());
-                //告警次数
-                cells[6].setCellValue(calc2hr.getAlarm());
-                //A班米长
-                cells[7].setCellValue(calc2hr.getLengthA().floatValue());
-                //A班重量
-                cells[8].setCellValue(calc2hr.getWeightA().floatValue());
-                //A班开机时间
-                cells[9].setCellValue(calc2hr.getOpenTimeA().floatValue());
-                //A班停机时间
-                cells[10].setCellValue(calc2hr.getCloseTimeA().floatValue());
-                //A班稼动率
-                cells[11].setCellValue(Tools.calcPercent(calc2hr.getOpenTimeA(), calc2hr.getCloseTimeA()).floatValue());
-                //A班电量
-                cells[12].setCellValue(calc2hr.getKwhA().floatValue());
-                //A班停经片停机次数
-                cells[13].setCellValue(calc2hr.getStop1A());
-                //A班CCD停机次数
-                cells[14].setCellValue(calc2hr.getStop2A());
-                //A班人工停机次数
-                cells[15].setCellValue(calc2hr.getStop3A());
-                //B班米长
-                cells[16].setCellValue(calc2hr.getLengthB().floatValue());
-                //B班重量
-                cells[17].setCellValue(calc2hr.getWeightB().floatValue());
-                //B班开机时间
-                cells[18].setCellValue(calc2hr.getOpenTimeB().floatValue());
-                //B班停机时间
-                cells[19].setCellValue(calc2hr.getCloseTimeB().floatValue());
-                //B班稼动率
-                cells[20].setCellValue(Tools.calcPercent(calc2hr.getOpenTimeB(), calc2hr.getCloseTimeB()).floatValue());
-                //B班电量
-                cells[21].setCellValue(calc2hr.getKwhB().floatValue());
-                //B班停经片停机次数
-                cells[22].setCellValue(calc2hr.getStop1B());
-                //B班CCD停机次数
-                cells[23].setCellValue(calc2hr.getStop2B());
-                //B班人工停机次数
-                cells[24].setCellValue(calc2hr.getStop3B());
+                calc2hr.setCells(cells);
                 rowNum.getAndIncrement();
             });
 
@@ -306,7 +287,7 @@ public class ApiController extends BaseController {
             //Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存
             //attachment表示以附件方式下载 inline表示在线打开 "Content-Disposition: inline; filename=文件名.mp3"
             // filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称
-            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("数据导出" + System.currentTimeMillis() + ".xlsx", "UTF-8"));
+            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("告警数据导出" + System.currentTimeMillis() + ".xlsx", "UTF-8"));
             response.setContentType("application/octet-stream");
             wb.write(outputStream);
             outputStream.flush();

+ 30 - 0
ruoyi-admin/src/main/java/com/ruoyi/biz/domain/FormulaDetail.java

@@ -3,6 +3,7 @@ package com.ruoyi.biz.domain;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.apache.poi.ss.usermodel.Cell;
 
 import java.util.Map;
 
@@ -98,4 +99,33 @@ public class FormulaDetail {
         this.formula_data_25 = (float) map.get("Formula_data_25");
     }
 
+    public void setCells(Cell[] cells) {
+        cells[0].setCellValue(this.device);
+        cells[1].setCellValue(this.formula_data_2);
+        cells[2].setCellValue(this.formula_data_15);
+        cells[3].setCellValue(this.formula_data_1);
+        cells[4].setCellValue(this.formula_data_3);
+        cells[5].setCellValue(this.formula_data_19);
+        cells[6].setCellValue(this.formula_data_20);
+        cells[7].setCellValue(this.formula_data_21);
+        cells[8].setCellValue(this.formula_data_22);
+        cells[9].setCellValue(this.formula_data_23);
+        cells[10].setCellValue(this.formula_data_4);
+        cells[11].setCellValue(this.formula_data_5);
+        cells[12].setCellValue(this.formula_data_6);
+        cells[13].setCellValue(this.formula_data_7);
+        cells[14].setCellValue(this.formula_data_8);
+        cells[15].setCellValue(this.formula_data_9);
+        cells[16].setCellValue(this.formula_data_10);
+        cells[17].setCellValue(this.formula_data_11);
+        cells[18].setCellValue(this.formula_data_12);
+        cells[19].setCellValue(this.formula_data_13);
+        cells[20].setCellValue(this.formula_data_14);
+        cells[21].setCellValue(this.formula_data_16);
+        cells[22].setCellValue(this.formula_data_17);
+        cells[23].setCellValue(this.formula_data_18);
+        cells[24].setCellValue(this.formula_data_24);
+        cells[25].setCellValue(this.formula_data_25);
+    }
+
 }

+ 58 - 0
ruoyi-admin/src/main/java/com/ruoyi/biz/domain/TwinCalc2hr.java

@@ -1,12 +1,15 @@
 package com.ruoyi.biz.domain;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.biz.tools.Tools;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.utils.DateUtils;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.apache.poi.ss.usermodel.Cell;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -271,4 +274,59 @@ public class TwinCalc2hr extends BaseEntity {
                 this.kwh, this.kwhA, this.kwhB};
         return objects;
     }
+
+    public void setCells(Cell[] cells) {
+        //设备名称
+        cells[0].setCellValue(this.getRemark());
+        //时间
+        cells[1].setCellValue(DateUtils.parseDateToStr(this.getDataDate()));
+        //总长
+        cells[2].setCellValue(this.getLengthA().add(this.getLengthB()).floatValue());
+        //总重
+        cells[3].setCellValue(this.getWeightA().add(this.getWeightB()).floatValue());
+        //总稼动率
+        BigDecimal totalOpenTime = this.getOpenTimeA().add(this.getOpenTimeB());
+        BigDecimal totalCloseTime = this.getCloseTimeA().add(this.getCloseTimeB());
+        cells[4].setCellValue(Tools.calcPercent(totalOpenTime, totalCloseTime).floatValue());
+        // 总电量
+        cells[5].setCellValue(this.getKwh().floatValue());
+        //告警次数
+        cells[6].setCellValue(this.getAlarm());
+        //A班米长
+        cells[7].setCellValue(this.getLengthA().floatValue());
+        //A班重量
+        cells[8].setCellValue(this.getWeightA().floatValue());
+        //A班开机时间
+        cells[9].setCellValue(this.getOpenTimeA().floatValue());
+        //A班停机时间
+        cells[10].setCellValue(this.getCloseTimeA().floatValue());
+        //A班稼动率
+        cells[11].setCellValue(Tools.calcPercent(this.getOpenTimeA(), this.getCloseTimeA()).floatValue());
+        //A班电量
+        cells[12].setCellValue(this.getKwhA().floatValue());
+        //A班停经片停机次数
+        cells[13].setCellValue(this.getStop1A());
+        //A班CCD停机次数
+        cells[14].setCellValue(this.getStop2A());
+        //A班人工停机次数
+        cells[15].setCellValue(this.getStop3A());
+        //B班米长
+        cells[16].setCellValue(this.getLengthB().floatValue());
+        //B班重量
+        cells[17].setCellValue(this.getWeightB().floatValue());
+        //B班开机时间
+        cells[18].setCellValue(this.getOpenTimeB().floatValue());
+        //B班停机时间
+        cells[19].setCellValue(this.getCloseTimeB().floatValue());
+        //B班稼动率
+        cells[20].setCellValue(Tools.calcPercent(this.getOpenTimeB(), this.getCloseTimeB()).floatValue());
+        //B班电量
+        cells[21].setCellValue(this.getKwhB().floatValue());
+        //B班停经片停机次数
+        cells[22].setCellValue(this.getStop1B());
+        //B班CCD停机次数
+        cells[23].setCellValue(this.getStop2B());
+        //B班人工停机次数
+        cells[24].setCellValue(this.getStop3B());
+    }
 }

+ 2 - 1
ruoyi-admin/src/main/resources/application.yml

@@ -7,7 +7,8 @@ iot:
   password: 123456
   authorization: Basic c2FiZXI6c2FiZXJfc2VjcmV0
 excel:
-  template: D:\SYSTEM\Desktop\temp\excel\template.xlsx
+  total: D:\SYSTEM\Desktop\temp\excel\total.xlsx
+  formula: D:\SYSTEM\Desktop\temp\excel\formula.xlsx
 # 项目相关配置
 ruoyi:
   # 名称