浏览代码

增加纱线规格导出

wukai 7 月之前
父节点
当前提交
5a3c550c4d

+ 69 - 0
ruoyi-admin/src/main/java/com/ruoyi/biz/controller/ApiController.java

@@ -13,6 +13,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
@@ -77,6 +78,8 @@ public class ApiController extends BaseController {
     private String stopsTypeExcelTemplate;
     @Value("${excel.alarms}")
     private String alarmsExcelTemplate;
+    @Value("${excel.yarn}")
+    private String yarnExcelTemplate;
 
     @ApiOperation("在线设备")
     @GetMapping("/device/online")
@@ -219,6 +222,72 @@ public class ApiController extends BaseController {
         }
     }
 
+    @ApiOperation("纱线规格")
+    @GetMapping("/export/yarn-specifications")
+    @CrossOrigin(origins = "*")
+    public void yarnSpecificationsExport(HttpServletResponse response) {
+        Object d = CacheUtils.get(Constants.IOT_TOKEN, Constants.INDEX_FORMULA_DETAIL);
+        if (d != null) {
+            List<FormulaDetail> list = (List<FormulaDetail>) d;
+            List<FormulaDetail> yarnDList = list.stream().sorted(Comparator.comparing(FormulaDetail::getFormula_data_6)).collect(Collectors.toList());
+            Map<String, List<FormulaDetail>> dMap = yarnDList.stream().collect(Collectors.groupingBy(FormulaDetail::getYarnD));
+            List<FormulaDetail> yarnFList = list.stream().sorted(Comparator.comparing(FormulaDetail::getFormula_data_9)).collect(Collectors.toList());
+            Map<String, List<FormulaDetail>> fMap = yarnFList.stream().collect(Collectors.groupingBy(FormulaDetail::getYarnF));
+            try (FileInputStream inputStream = new FileInputStream(yarnExcelTemplate); Workbook wb = new XSSFWorkbook(inputStream); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream())) {
+                Sheet sheet = wb.getSheetAt(0);
+                AtomicInteger rowNum = new AtomicInteger(2);
+                CellStyle p2 = wb.createCellStyle();
+                p2.setDataFormat(wb.createDataFormat().getFormat("0.00"));
+                //规格D
+                combo(sheet, rowNum, p2, dMap, true);
+                //规格F
+                Sheet sheetF = wb.getSheetAt(1);
+                rowNum = new AtomicInteger(2);
+                combo(sheetF, rowNum, p2, fMap, false);
+                // 清空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("纱线规格导出" + System.currentTimeMillis() + ".xlsx", "UTF-8"));
+                response.setContentType("application/octet-stream");
+                wb.write(outputStream);
+                outputStream.flush();
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
+    }
+
+    private void combo(Sheet sheet, AtomicInteger rowNum, CellStyle p2, Map<String, List<FormulaDetail>> map, boolean flag) {
+        for (String s : map.keySet()) {
+            int sr = rowNum.get();
+            List<FormulaDetail> list = map.get(s);
+            for (FormulaDetail detail : list) {
+                Row row = sheet.createRow(rowNum.get());
+                Cell[] cells = new Cell[39];
+                for (int i = 0; i < cells.length; i++) {
+                    cells[i] = row.createCell(i);
+                }
+                if (flag) {
+                    detail.setYarnDCells(cells, p2);
+                } else {
+                    detail.setYarnFCells(cells, p2);
+                }
+                rowNum.getAndIncrement();
+            }
+            if (list.size() > 1) {
+                int er = sr + list.size() - 1;
+                sheet.addMergedRegion(new CellRangeAddress(sr, er, 0, 0));
+                sheet.addMergedRegion(new CellRangeAddress(sr, er, 1, 1));
+                sheet.addMergedRegion(new CellRangeAddress(sr, er, 2, 2));
+            }
+        }
+
+    }
+
 
     @ApiOperation("平方米克重")
     @GetMapping("/gram-mass/total")

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

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
 
 import java.util.Map;
 
@@ -68,6 +69,31 @@ public class FormulaDetail {
     private Float formula_data_24;
     @ApiModelProperty("卷曲张力系数")
     private Float formula_data_25;
+    @ApiModelProperty("GB1盘头剩余周长")
+    private Float capacity_data_10;
+    @ApiModelProperty("GB2盘头剩余周长")
+    private Float capacity_data_11;
+    @ApiModelProperty("GB3盘头剩余周长")
+    private Float capacity_data_12;
+    @ApiModelProperty("GB4盘头剩余周长")
+    private Float capacity_data_13;
+    @ApiModelProperty("GB5盘头剩余周长")
+    private Float capacity_data_14;
+    @ApiModelProperty("GB1盘头剩余圈数")
+    private Integer capacity_data_15;
+    @ApiModelProperty("GB2盘头剩余圈数")
+    private Integer capacity_data_16;
+    @ApiModelProperty("GB3盘头剩余圈数")
+    private Integer capacity_data_17;
+    @ApiModelProperty("GB4盘头剩余圈数")
+    private Integer capacity_data_18;
+    @ApiModelProperty("GB5盘头剩余圈数")
+    private Integer capacity_data_19;
+    @ApiModelProperty("纱线规格D")
+    private String yarnD;
+    @ApiModelProperty("纱线规格F")
+    private String yarnF;
+
 
     public FormulaDetail(Map<String, Object> map) {
         TwinDevice twinDevice = (TwinDevice) map.get("device");
@@ -97,6 +123,20 @@ public class FormulaDetail {
         this.formula_data_23 = (int) map.get("Formula_data_23");
         this.formula_data_24 = (float) map.get("Formula_data_24");
         this.formula_data_25 = (float) map.get("Formula_data_25");
+
+        this.capacity_data_10 = (float) map.get("Capacity_data_10");
+        this.capacity_data_11 = (float) map.get("Capacity_data_11");
+        this.capacity_data_12 = (float) map.get("Capacity_data_12");
+        this.capacity_data_13 = (float) map.get("Capacity_data_13");
+        this.capacity_data_14 = (float) map.get("Capacity_data_14");
+        this.capacity_data_15 = (int) map.get("Capacity_data_15");
+        this.capacity_data_16 = (int) map.get("Capacity_data_16");
+        this.capacity_data_17 = (int) map.get("Capacity_data_17");
+        this.capacity_data_18 = (int) map.get("Capacity_data_18");
+        this.capacity_data_19 = (int) map.get("Capacity_data_19");
+
+        this.yarnD = this.formula_data_4 + "/" + formula_data_5 + "/" + formula_data_6;
+        this.yarnF = this.formula_data_7 + "/" + formula_data_8 + "/" + formula_data_9;
     }
 
     public void setCells(Cell[] cells) {
@@ -128,4 +168,78 @@ public class FormulaDetail {
         cells[25].setCellValue(this.formula_data_25);
     }
 
+    /**
+     * 设置纱线规格D 表格
+     *
+     * @param cells cell
+     */
+    public void setYarnDCells(Cell[] cells, CellStyle p2) {
+        cells[0].setCellValue(this.formula_data_4);
+        cells[1].setCellValue(this.formula_data_5);
+        cells[2].setCellValue(this.formula_data_6);
+        setYarnCells(cells,p2);
+    }
+
+    /**
+     * 设置纱线规格F 表格
+     *
+     * @param cells cell
+     */
+    public void setYarnFCells(Cell[] cells, CellStyle p2) {
+        cells[0].setCellValue(this.formula_data_7);
+        cells[1].setCellValue(this.formula_data_8);
+        cells[2].setCellValue(this.formula_data_9);
+        setYarnCells(cells,p2);
+    }
+
+    public void setYarnCells(Cell[] cells, CellStyle p2) {
+        cells[3].setCellValue(this.device);
+        cells[4].setCellValue(this.formula_data_2);
+        cells[5].setCellValue(this.formula_data_15);
+        cells[6].setCellValue(this.formula_data_1);
+        cells[7].setCellValue(this.formula_data_3);
+        cells[8].setCellValue(this.formula_data_13);
+        cells[9].setCellValue(this.formula_data_14);
+        cells[10].setCellValue(this.formula_data_16);
+        cells[11].setCellValue(this.formula_data_17);
+        cells[12].setCellValue(this.formula_data_18);
+        cells[13].setCellValue(this.formula_data_24);
+        cells[14].setCellValue(this.formula_data_25);
+
+        cells[15].setCellValue(this.capacity_data_10);
+        cells[16].setCellValue(this.capacity_data_11);
+        cells[17].setCellValue(this.capacity_data_12);
+        cells[18].setCellValue(this.capacity_data_13);
+        cells[19].setCellValue(this.capacity_data_14);
+        cells[20].setCellValue(this.capacity_data_15);
+        cells[21].setCellValue(this.capacity_data_16);
+        cells[22].setCellValue(this.capacity_data_17);
+        cells[23].setCellValue(this.capacity_data_18);
+        cells[24].setCellValue(this.capacity_data_19);
+
+        cells[25].setCellValue(this.formula_data_19);
+        cells[26].setCellValue(this.formula_data_20);
+        cells[27].setCellValue(this.formula_data_21);
+        cells[28].setCellValue(this.formula_data_22);
+        cells[29].setCellValue(this.formula_data_23);
+        cells[30].setCellValue(this.formula_data_4);
+        cells[31].setCellValue(this.formula_data_5);
+        cells[32].setCellValue(this.formula_data_6);
+        cells[33].setCellValue(this.formula_data_7);
+        cells[34].setCellValue(this.formula_data_8);
+        cells[35].setCellValue(this.formula_data_9);
+        cells[36].setCellValue(this.formula_data_10);
+        cells[37].setCellValue(this.formula_data_11);
+        cells[38].setCellValue(this.formula_data_12);
+
+        cells[8].setCellStyle(p2);
+        cells[13].setCellStyle(p2);
+        cells[14].setCellStyle(p2);
+        cells[15].setCellStyle(p2);
+        cells[16].setCellStyle(p2);
+        cells[17].setCellStyle(p2);
+        cells[18].setCellStyle(p2);
+        cells[19].setCellStyle(p2);
+    }
+
 }

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

@@ -14,6 +14,7 @@ excel:
   stops: D:\SYSTEM\Desktop\temp\excel\stops.xlsx
   stopsType: D:\SYSTEM\Desktop\temp\excel\stopsType.xlsx
   alarms: D:\SYSTEM\Desktop\temp\excel\alarms.xlsx
+  yarn: D:\SYSTEM\Desktop\temp\excel\yarn.xlsx
 #数据补录
 data:
   bl: false
@@ -35,7 +36,7 @@ ruoyi:
 # 开发环境配置
 server:
   # 服务器的HTTP端口,默认为80
-  port: 80
+  port: 8080
   servlet:
     # 应用的访问路径
     context-path: /

文件差异内容过多而无法显示
+ 14 - 1
ruoyi-admin/src/test/java/com/jjt/LastProcess.java


部分文件因为文件数量过多而无法显示