From cb3cd5ee05938921d4c43bced329085c6594b471 Mon Sep 17 00:00:00 2001 From: xiaowuler Date: Fri, 6 May 2022 16:02:40 +0800 Subject: [PATCH 1/2] modify some codes --- 04.系统编码/Backend/pom.xml | 6 ++ .../controller/QualityCompareController.java | 3 +- .../service/QualityCompareService.java | 52 +++++++----- .../src/main/resources/application.yml | 20 ++--- 04.系统编码/Backend/部署.md | 6 ++ .../Frontend/src/components/RamanLidar.vue | 84 ++++++++++++------- .../Frontend/src/model/constant.ts | 4 +- .../Frontend/src/model/heat-map-drawer.ts | 4 +- 04.系统编码/Frontend/src/uilts/Config.ts | 8 +- 9 files changed, 119 insertions(+), 68 deletions(-) diff --git a/04.系统编码/Backend/pom.xml b/04.系统编码/Backend/pom.xml index 1f413de..51e8f7f 100644 --- a/04.系统编码/Backend/pom.xml +++ b/04.系统编码/Backend/pom.xml @@ -101,6 +101,12 @@ bcprov-jdk15on 1.59 + + org.jetbrains + annotations + RELEASE + compile + diff --git a/04.系统编码/Backend/src/main/java/com/userinformation/backend/controller/QualityCompareController.java b/04.系统编码/Backend/src/main/java/com/userinformation/backend/controller/QualityCompareController.java index 944cfa2..f22053a 100644 --- a/04.系统编码/Backend/src/main/java/com/userinformation/backend/controller/QualityCompareController.java +++ b/04.系统编码/Backend/src/main/java/com/userinformation/backend/controller/QualityCompareController.java @@ -22,8 +22,7 @@ public class QualityCompareController { } @RequestMapping("findByTimeAndElement") - public RequestResult findByTimeAndElement(String date, String var, String locate) throws IOException { - date = "5_1_10"; + public RequestResult findByTimeAndElement(String date, String var, String locate) throws IOException, IllegalAccessException { return RequestResult.success(qualityCompareService.findByTimeAndElement(date, var, locate)); } } diff --git a/04.系统编码/Backend/src/main/java/com/userinformation/backend/service/QualityCompareService.java b/04.系统编码/Backend/src/main/java/com/userinformation/backend/service/QualityCompareService.java index 86e2026..1c1f6da 100644 --- a/04.系统编码/Backend/src/main/java/com/userinformation/backend/service/QualityCompareService.java +++ b/04.系统编码/Backend/src/main/java/com/userinformation/backend/service/QualityCompareService.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.time.Duration; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @@ -22,21 +23,36 @@ import java.util.stream.Collectors; @Service public class QualityCompareService { + private static final String EXTINCTION = "MEXT"; private static final String SEPARATOR = ","; private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy_M_d_HH"); + private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @Value("${custom.quality-path}") private String qualityPath; - public List findByTimeAndElement(String date, String var, String locate) throws IOException { + public List findByTimeAndElement(String date, String var, String locate) throws IOException, IllegalAccessException { // String filepath = qualityPath + var + "-" + date + ".CSV"; - String filepath = "C:\\Users\\xiaowuler\\Desktop\\原始产品数据\\MEXT-2021-05-01.CSV"; - LocalDateTime time = LocalDateTime.parse("2021_" + date, DATE_FORMATTER).withHour(0).plusDays(1); - return read(filepath, time); + boolean isExtinction = var.equals(EXTINCTION); + String filepath = String.format("%s/%s/%s/%s-%s.CSV", qualityPath, getFilepathByLocate(locate), isExtinction ? var : "Raman Products/" + var, var, date); + LocalDateTime time = LocalDate.parse(date, DATE_FORMATTER).atStartOfDay().plusDays(1); + return read(filepath, time, isExtinction? 801 : 101); } - private List read(String filepath, LocalDateTime time) throws IOException { + private String getFilepathByLocate(String locate) throws IllegalAccessException { + switch (locate){ + case "pk": + return "CloudOutPut2_PUKOU/R1W4201224002"; + case "liuhe": + return "CloudOutPut1_LIUHE/R1W4201224001"; + case "jn": + return "CloudOutPut_JIANGNING/R1W4210113003"; + default: + throw new IllegalAccessException("未知的站点:" + locate); + } + } + + private List read(String filepath, LocalDateTime time, int readCount) throws IOException { List lines = Files.readAllLines(Paths.get(filepath)); // 将文件数据进行反转,从最后一行开始读取 Collections.reverse(lines); @@ -50,8 +66,8 @@ public class QualityCompareService { continue; } - time = fillNaN(time, targetTime, data); - data.add(getValues(rows)); + time = fillNaN(time, targetTime, data, readCount); + data.add(getValues(rows, readCount)); time = time.minusMinutes(5); } @@ -61,24 +77,22 @@ public class QualityCompareService { return data.stream().filter(values -> index.getAndIncrement() % 12 != 0).collect(Collectors.toList()); } - private LocalDateTime fillNaN(LocalDateTime time, LocalDateTime targetTime, List data){ + private LocalDateTime fillNaN(LocalDateTime time, LocalDateTime targetTime, List data, int readCount){ if (Duration.between(targetTime, time).toMinutes() > 5) { - Float[] values = new Float[801]; + Float[] values = new Float[readCount]; Arrays.fill(values, Float.NaN); data.add(values); time = time.minusMinutes(10); - fillNaN(time, targetTime, data); + fillNaN(time, targetTime, data, readCount); } return time; } - private Float[] getValues(List rows){ - Float[] values = rows.stream().skip(7).limit(801).map(row -> Float.parseFloat(row)).toArray(Float[]::new); - int length = values.length; - if (length != 801) { - values = Arrays.copyOf(values, 801); - Arrays.fill(values, length - 1, 800, Float.NaN); - } - return values; + private Float[] getValues(List rows, int readCount){ + Float[] values = rows.stream().skip(7).limit(readCount - 6).map(row -> Float.parseFloat(row)).toArray(Float[]::new); + Float[] targetValues = new Float[readCount]; + Arrays.fill(targetValues, Float.NaN); + System.arraycopy(values, 0, targetValues, 6, values.length); + return targetValues; } } diff --git a/04.系统编码/Backend/src/main/resources/application.yml b/04.系统编码/Backend/src/main/resources/application.yml index c330c12..6392bef 100644 --- a/04.系统编码/Backend/src/main/resources/application.yml +++ b/04.系统编码/Backend/src/main/resources/application.yml @@ -6,12 +6,12 @@ spring: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 datasource: - url: jdbc:mysql://112.124.40.88:33306/user_information?useUnicode=true&characteEncoding=utf-8 - username: root - password: 3cqscbr@only1 -# url: jdbc:mysql://10.124.102.10:3306/user_information?useUnicode=true&characteEncoding=utf-8 +# url: jdbc:mysql://112.124.40.88:33306/user_information?useUnicode=true&characteEncoding=utf-8 # username: root -# password: Njsqxj_sthj@2021 +# password: 3cqscbr@only1 + url: jdbc:mysql://10.124.102.10:3306/user_information?useUnicode=true&characteEncoding=utf-8 + username: root + password: Njsqxj_sthj@2021 # url: jdbc:mysql://192.168.6.6:3306/njsthj?useUnicode=true&characteEncoding=utf-8 # username: njsthj # password: Njsqxj_sthj@2021 @@ -20,11 +20,11 @@ custom: image: url: ${custom.parent-url}:${server.port}/product gifPath: ${custom.image.path}/gif - path: D:/Deployments/LamanRadar/product - parent-url: http://localhost - quality-path: C:/Users/xiaowuler/Desktop/原始产品数据 -# path: /home/project/NJEnvironmentPlatform/html/product -# parent-url: http://10.124.102.10 +# path: D:/Deployments/LamanRadar/product +# parent-url: http://localhost # quality-path: C:/Users/xiaowuler/Desktop/原始产品数据 + path: /home/project/NJEnvironmentPlatform/html/product + parent-url: http://10.124.102.10 + quality-path: /share/win # path: /home/develop/product # parent-url: http://rdp.nagr.com.cn diff --git a/04.系统编码/Backend/部署.md b/04.系统编码/Backend/部署.md index 9ba5837..c08b5bd 100644 --- a/04.系统编码/Backend/部署.md +++ b/04.系统编码/Backend/部署.md @@ -14,3 +14,9 @@ ps -ef | grep UserInformation-0.0.1-SNAPSHOT.jar kill -9 id ``` +挂载 + +``` +mount -t cifs -o username=administrator,password=xxzx_211@LMJGLD //10.124.102.250/AllData /share/win +``` + diff --git a/04.系统编码/Frontend/src/components/RamanLidar.vue b/04.系统编码/Frontend/src/components/RamanLidar.vue index 27873c0..a2ac98e 100644 --- a/04.系统编码/Frontend/src/components/RamanLidar.vue +++ b/04.系统编码/Frontend/src/components/RamanLidar.vue @@ -224,7 +224,7 @@
-
@@ -243,7 +243,7 @@
-
@@ -281,6 +281,9 @@ export default { name: 'RamanLidar', setup() { let timer = null; + const quailtyTimes = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", + "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"]; + let creates: { boundaryLayerHeight: HighChartCreate cloudsHeight: HighChartCreate @@ -291,6 +294,7 @@ export default { extinctionBeforeDrawer: HeatMapDrawer, extinctionDrawer: HeatMapDrawer, watervaporDrawer: HeatMapDrawer, + watervaporBeforeDrawer: HeatMapDrawer, opticsExtinctionDrawer: HeatMapDrawer, singleWatervaporDrawer: HeatMapDrawer, cloudSolDrawer: HeatMapDrawer, @@ -307,6 +311,7 @@ export default { extinctionDrawer: null, extinctionBeforeDrawer: null, watervaporDrawer: null, + watervaporBeforeDrawer: null, singleWatervaporDrawer: null, opticsExtinctionDrawer: null, cloudSolDrawer: null, @@ -343,6 +348,8 @@ export default { loadingCloudSolStatus: false, loadingCloudRecognitionStatus: false, loadingExtinctionStatus: false, + loadingExtinctionBeforeStatus: false, + loadingWatervaporBeforeStatus: false, loadingWaterVaporStatus: false, loadingBackscatterStatus: false, loadingLidarRatioStatus: false, @@ -589,40 +596,72 @@ export default { case 'extinction' : // initTimeLineDay() reloadExtinctionBefore(); - reloadCloudRecognition('extinction', 801, 'extinction', drawExtinctionAfter); + reloadCloudRecognition('extinction', 801, 'extinction', drawExtinctionAfter, true); break; case 'watervapor' : // initTimeLineDay() - reloadCloudRecognition('watervapor', 101, 'watervapor', drawWatervaporBefore); - reloadCloudRecognition('watervapor', 101, 'watervapor', drawWatervaporAfter); + reloadWatervaporBefore(); + reloadCloudRecognition('watervapor', 101, 'watervapor', drawWatervaporAfter, true); break; default: throw new Error("无效的type类型"); } } + const reloadWatervaporBefore = () => { + options.loadingWatervaporBeforeStatus = true; + let params = { + date: moment(options.date).add(-1, 'd').format('YYYY-MM-DD'), + var: 'Vapor Mixing Ratio', + locate: options.currentRegion + } + post("/qualityCompare/findByTimeAndElement", params).then((response: any) => { + options.loadingWatervaporBeforeStatus = false; + if (response.error != 0){ + console.log("未找到质控前数据文件"); + return; + } + + if (creates.watervaporBeforeDrawer != null) { + creates.watervaporBeforeDrawer.close(); + } + + let matrix = convertValueToBox(response.data); + creates.watervaporBeforeDrawer = new HeatMapDrawer(800, 650, matrix, "watervapor_chart-before", 'g/kg','质控前'); + creates.watervaporBeforeDrawer.setAxis(new CoordinateScale(quailtyTimes), new CoordinateScale([0, 500, 1000, 1500], true, true)); + creates.watervaporBeforeDrawer.setColorChart(prepareWatervaporColors()); + creates.watervaporBeforeDrawer.draw(); + }) + } + const reloadExtinctionBefore = () => { + options.loadingExtinctionBeforeStatus = true; let params = { - date: moment(options.date).format('YYYY-MM-DD'), + date: moment(options.date).add(-1, 'd').format('YYYY-MM-DD'), var: 'MEXT', locate: options.currentRegion } post("/qualityCompare/findByTimeAndElement", params).then((response: any) => { + options.loadingExtinctionBeforeStatus = false; if (response.error != 0){ console.log("未找到质控前数据文件"); return; } + if (creates.extinctionBeforeDrawer != null) { + creates.extinctionBeforeDrawer.close(); + } + let matrix = convertValueToBox(response.data); - creates.extinctionBeforeDrawer = new HeatMapDrawer(800, 650, matrix, "extinction_chart-before", 'km/sr','质控后'); - creates.extinctionBeforeDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true)); + creates.extinctionBeforeDrawer = new HeatMapDrawer(800, 650, matrix, "extinction_chart-before", 'km/sr','质控前'); + creates.extinctionBeforeDrawer.setAxis(new CoordinateScale(quailtyTimes), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true)); creates.extinctionBeforeDrawer.setColorChart(prepareExtinctionnColors()); creates.extinctionBeforeDrawer.draw(); }) } const convertValueToBox = (data) => { - let timeMoment = moment(options.date).add(-1, 'd'); + let timeMoment = moment(options.date).set('h', 0).add(-1, 'd'); let timeFormat = timeMoment.format("MM月DD日HH时"); let boxes = new Array>(); @@ -635,7 +674,7 @@ export default { let rows = new Array(r.length); for (let h = 0, len = r.length; h < len; h++) { - rows[h] = new Box(index - 1, h, 0, 0, r[h], h * 15, timeFormat, "米"); + rows[h] = new Box(index - 1, h, 0, 0, parseFloat(r[h]), h * 15, timeFormat, "米"); } index++; boxes.push(rows); @@ -919,21 +958,6 @@ export default { creates.singleWatervaporDrawer.draw(); } - const drawWatervaporBefore = (result: CustomeArray) => { - if (result.length != 24) return; - - options.loadingWaterVaporStatus = false; - if (creates.watervaporDrawer != null) { - creates.watervaporDrawer.close(); - } - - let matrix = converCloudRecognition(101, result, 'watervapor'); - creates.watervaporDrawer = new HeatMapDrawer(800, 650, matrix, "watervapor_chart-before",'g/kg', '质控前'); - creates.watervaporDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 500, 1000, 1500], true, true)); - creates.watervaporDrawer.setColorChart(prepareWatervaporColors()); - creates.watervaporDrawer.draw(); - } - const drawWatervaporAfter = (result: CustomeArray) => { if (result.length != 24) return; @@ -943,8 +967,8 @@ export default { } let matrix = converCloudRecognition(101, result, 'watervapor'); - creates.watervaporDrawer = new HeatMapDrawer(800, 650, matrix, "watervapor_chart-after",'g/kg', '质控后'); - creates.watervaporDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 500, 1000, 1500], true, true)); + creates.watervaporDrawer = new HeatMapDrawer(800, 650, matrix, "watervapor_chart-after",'g/kg', '质控前'); + creates.watervaporDrawer.setAxis(new CoordinateScale(quailtyTimes), new CoordinateScale([0, 500, 1000, 1500], true, true)); creates.watervaporDrawer.setColorChart(prepareWatervaporColors()); creates.watervaporDrawer.draw(); } @@ -966,7 +990,7 @@ export default { let matrix = converCloudRecognition(801, result, 'extinction'); creates.extinctionDrawer = new HeatMapDrawer(800, 650, matrix, "extinction_chart-after", 'km/sr','质控后'); - creates.extinctionDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true)); + creates.extinctionDrawer.setAxis(new CoordinateScale(quailtyTimes), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true)); creates.extinctionDrawer.setColorChart(prepareExtinctionnColors()); creates.extinctionDrawer.draw(); } @@ -980,10 +1004,12 @@ export default { return colorChart; } - const reloadCloudRecognition = (type: string, capacity: number, element: string, callback: any) => { + const reloadCloudRecognition = (type: string, capacity: number, element: string, callback: any, isDay: boolean = false) => { preprocessing(type); let result = new CustomeArray(callback); let time = moment(options.date); + if (isDay) time.set('h', 23).add(-1, 'd'); + options.timeArray = [] for (let index = 0; index < 24; index++) { reloadSingleCloudRecognition(capacity, time.clone().add(-index, 'h').format('M_D_H'), element, result); diff --git a/04.系统编码/Frontend/src/model/constant.ts b/04.系统编码/Frontend/src/model/constant.ts index 3f9b68c..90184dd 100644 --- a/04.系统编码/Frontend/src/model/constant.ts +++ b/04.系统编码/Frontend/src/model/constant.ts @@ -2,6 +2,6 @@ export class Constant{ public static readonly baseUrl: string = 'http://rdp.nagr.com.cn:18080'; } export class ConstantRamanLidar{ - public static readonly baseUrl: string = 'http://112.124.40.88:5511'; - // public static readonly baseUrl: string = 'http://10.124.102.10:9998'; + // public static readonly baseUrl: string = 'http://112.124.40.88:5511'; + public static readonly baseUrl: string = 'http://10.124.102.10:9998'; } \ No newline at end of file diff --git a/04.系统编码/Frontend/src/model/heat-map-drawer.ts b/04.系统编码/Frontend/src/model/heat-map-drawer.ts index a631e65..64f5062 100644 --- a/04.系统编码/Frontend/src/model/heat-map-drawer.ts +++ b/04.系统编码/Frontend/src/model/heat-map-drawer.ts @@ -381,11 +381,11 @@ export class HeatMapDrawer{ export class CoordinateScale { - public scales: Array; + public scales: Array; public showStartValue: boolean; public showEndValue: boolean; - constructor(scales: Array, showStartValue: boolean = false, showEndValue: boolean = false){ + constructor(scales: Array, showStartValue: boolean = false, showEndValue: boolean = false){ this.scales = scales; this.showEndValue = showEndValue; this.showStartValue = showStartValue; diff --git a/04.系统编码/Frontend/src/uilts/Config.ts b/04.系统编码/Frontend/src/uilts/Config.ts index 6662a4e..115f322 100644 --- a/04.系统编码/Frontend/src/uilts/Config.ts +++ b/04.系统编码/Frontend/src/uilts/Config.ts @@ -2,10 +2,10 @@ import { Moment } from "moment"; import { format } from "./String"; export class Config { - // public static url: string = ""; - // public static parentUrl: string = "http://10.124.102.10:8002/product/picture"; - public static url: string = "http://localhost:8002"; - public static parentUrl: string = "http://112.124.40.88:8999/product/picture"; + public static url: string = ""; + public static parentUrl: string = "http://10.124.102.10:8002/product/picture"; + // public static url: string = "http://localhost:8002"; + // public static parentUrl: string = "http://112.124.40.88:8999/product/picture"; // public static parentUrl: string = "http://rdp.nagr.com.cn:8082/product/picture"; } From cc90aa2875fa6bf2034d70b35c40dc51a2b055ed Mon Sep 17 00:00:00 2001 From: xiaowuler Date: Fri, 6 May 2022 18:20:53 +0800 Subject: [PATCH 2/2] modify some codes --- .../service/QualityCompareService.java | 100 ++++++++++++++++-- .../src/main/resources/application.yml | 22 ++-- .../Frontend/src/components/RamanLidar.vue | 75 +++++++------ .../Frontend/src/model/constant.ts | 4 +- 04.系统编码/Frontend/src/uilts/Config.ts | 8 +- 5 files changed, 152 insertions(+), 57 deletions(-) diff --git a/04.系统编码/Backend/src/main/java/com/userinformation/backend/service/QualityCompareService.java b/04.系统编码/Backend/src/main/java/com/userinformation/backend/service/QualityCompareService.java index 1c1f6da..394ec59 100644 --- a/04.系统编码/Backend/src/main/java/com/userinformation/backend/service/QualityCompareService.java +++ b/04.系统编码/Backend/src/main/java/com/userinformation/backend/service/QualityCompareService.java @@ -25,18 +25,104 @@ public class QualityCompareService { private static final String EXTINCTION = "MEXT"; private static final String SEPARATOR = ","; - private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + private static final DateTimeFormatter NORMAL_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH"); + + private static List ONE_HOUR_INVALID_101 = new ArrayList<>(12); + private static List ONE_HOUR_INVALID_801 = new ArrayList<>(12); + static { + for(int i = 0; i < 12; i++) { + Float[] _101 = new Float[101]; + Float[] _801 = new Float[801]; + Arrays.fill(_101, Float.NaN); + Arrays.fill(_801, Float.NaN); + ONE_HOUR_INVALID_101.add(_101); + ONE_HOUR_INVALID_801.add(_801); + } + } @Value("${custom.quality-path}") private String qualityPath; public List findByTimeAndElement(String date, String var, String locate) throws IOException, IllegalAccessException { -// String filepath = qualityPath + var + "-" + date + ".CSV"; - boolean isExtinction = var.equals(EXTINCTION); - String filepath = String.format("%s/%s/%s/%s-%s.CSV", qualityPath, getFilepathByLocate(locate), isExtinction ? var : "Raman Products/" + var, var, date); - LocalDateTime time = LocalDate.parse(date, DATE_FORMATTER).atStartOfDay().plusDays(1); - return read(filepath, time, isExtinction? 801 : 101); +//// String filepath = qualityPath + var + "-" + date + ".CSV"; +// boolean isExtinction = var.equals(EXTINCTION); +// String filepath = String.format("%s/%s/%s/%s-%s.CSV", qualityPath, getFilepathByLocate(locate), isExtinction ? var : "Raman Products/" + var, var, time.format(TIME_FORMATTER)); +//// return read(filepath, time, isExtinction? 801 : 101); +//// List data = read(var, locate, time, isExtinction? 801 : 101); + int timeLength = 24; + LocalDateTime time = LocalDateTime.parse(date, DATE_FORMATTER).withMinute(59).withSecond(59); + LocalDateTime tempTime = time; + List data = new ArrayList<>(288); + int readCount = 101; + String fileSuffix = "Raman Products/" + var; + List invalid = ONE_HOUR_INVALID_101; + + if (var.equals(EXTINCTION)){ + tempTime = time; + timeLength = 12; + readCount = 801; + fileSuffix = var; + invalid = ONE_HOUR_INVALID_801; + } + LocalDateTime startTime = time.minusHours(timeLength); + data = read(var, locate, tempTime, startTime, data, readCount, fileSuffix, invalid, 0, timeLength); + Collections.reverse(data); + AtomicInteger index = new AtomicInteger(0); + // 匹配老师处理的数据 + return data.stream().filter(values -> index.getAndIncrement() % 12 != 0).collect(Collectors.toList()); + } + + private List read(String var, String locate, LocalDateTime tempTime, LocalDateTime startTime, List data, int readCount, String fileSuffix, List invalid, int currentLength, int timeLength) throws IOException, IllegalAccessException { + String filepath = String.format("%s/%s/%s/%s-%s.CSV", qualityPath, getFilepathByLocate(locate), fileSuffix, var, tempTime.format(TIME_FORMATTER)); + if (Files.notExists(Paths.get(filepath))) { + return addInvalidOrBlackFile(var, locate, tempTime, startTime, data, readCount, fileSuffix, invalid, data.size() / 12, timeLength); + } + + List lines = Files.readAllLines(Paths.get(filepath)); + // 将文件数据进行反转,从最后一行开始读取 + Collections.reverse(lines); + + int addCount = 0; + for(String line : lines){ + List rows = Arrays.asList(line.split(SEPARATOR)); + // 相关数据时间转换,以比较,并按照10分钟间隔过滤 + LocalDateTime targetTime = LocalDateTime.parse(rows.get(0), NORMAL_TIME_FORMATTER); + if (targetTime.isAfter(tempTime)) { + continue; + } + + addCount++; + tempTime = fillNaN(tempTime, targetTime, data, readCount); + data.add(getValues(rows, readCount)); + tempTime = tempTime.minusMinutes(5); + if (tempTime.isBefore(startTime)) { + return data; + } + } + + // 文件是空的 + if (addCount == 0) { + return addInvalidOrBlackFile(var, locate, tempTime, startTime, data, readCount, fileSuffix, invalid, data.size() / 12, timeLength); + } + + return read(var, locate, tempTime, startTime, data, readCount, fileSuffix, invalid, data.size() / 12, timeLength); + } + + private List addInvalidOrBlackFile(String var, String locate, LocalDateTime tempTime, LocalDateTime startTime, List data, int readCount, String fileSuffix, List invalid, int currentLength, int timeLength) throws IOException, IllegalAccessException { + int hours = tempTime.getHour() + 1 - currentLength; + boolean isOut = hours > timeLength || hours <= 0; + for(int i = 0, len = isOut ? timeLength - currentLength : hours; i < len; i++) { + data.addAll(invalid); + } + if (isOut) { + return data; + } + + tempTime = tempTime.minusDays(1).withHour(23); + return read(var, locate, tempTime, startTime, data, readCount, fileSuffix, invalid, data.size() / 12, timeLength); } private String getFilepathByLocate(String locate) throws IllegalAccessException { diff --git a/04.系统编码/Backend/src/main/resources/application.yml b/04.系统编码/Backend/src/main/resources/application.yml index 6392bef..e5ce902 100644 --- a/04.系统编码/Backend/src/main/resources/application.yml +++ b/04.系统编码/Backend/src/main/resources/application.yml @@ -6,12 +6,12 @@ spring: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 datasource: -# url: jdbc:mysql://112.124.40.88:33306/user_information?useUnicode=true&characteEncoding=utf-8 -# username: root -# password: 3cqscbr@only1 - url: jdbc:mysql://10.124.102.10:3306/user_information?useUnicode=true&characteEncoding=utf-8 + url: jdbc:mysql://112.124.40.88:33306/user_information?useUnicode=true&characteEncoding=utf-8 username: root - password: Njsqxj_sthj@2021 + password: 3cqscbr@only1 +# url: jdbc:mysql://10.124.102.10:3306/user_information?useUnicode=true&characteEncoding=utf-8 +# username: root +# password: Njsqxj_sthj@2021 # url: jdbc:mysql://192.168.6.6:3306/njsthj?useUnicode=true&characteEncoding=utf-8 # username: njsthj # password: Njsqxj_sthj@2021 @@ -20,11 +20,11 @@ custom: image: url: ${custom.parent-url}:${server.port}/product gifPath: ${custom.image.path}/gif -# path: D:/Deployments/LamanRadar/product -# parent-url: http://localhost -# quality-path: C:/Users/xiaowuler/Desktop/原始产品数据 - path: /home/project/NJEnvironmentPlatform/html/product - parent-url: http://10.124.102.10 - quality-path: /share/win + path: D:/Deployments/LamanRadar/product + parent-url: http://localhost + quality-path: E:/Memorandum/VPN配置/南京/多曼雷达项目/AllData +# path: /home/project/NJEnvironmentPlatform/html/product +# parent-url: http://10.124.102.10 +# quality-path: /share/win # path: /home/develop/product # parent-url: http://rdp.nagr.com.cn diff --git a/04.系统编码/Frontend/src/components/RamanLidar.vue b/04.系统编码/Frontend/src/components/RamanLidar.vue index f8ff90e..631e7a0 100644 --- a/04.系统编码/Frontend/src/components/RamanLidar.vue +++ b/04.系统编码/Frontend/src/components/RamanLidar.vue @@ -51,7 +51,7 @@
-
+
@@ -324,7 +324,7 @@ export default { // currentElement: 'PBLH', currentType: '边界层高度', // date: moment('2022-04-01 12:00:00').format('YYYY-MM-DD HH:mm:ss'), - date: moment().format('YYYY-MM-DD HH:mm:ss'), + date: moment().format('YYYY-MM-DD 00:00:00'), times: [], currentTime: null, downloadImgUrl: '/images/default-picture.png', @@ -374,13 +374,11 @@ export default { label: '水汽' }], currentElement: 'layertype', - timeLineFormat: 'hour' + timeLineFormat: 'day' }) onMounted(() => { - // initTimeLine(); - initTimeLineDay(); - // setTitle(moment(options.date, 'YYYY-MM-DD')); + initTimeLine(true); setTimeout(() => { initEcharts(options.currentTab) reloadChangeData(); @@ -453,19 +451,23 @@ export default { } const onTabClick = (name) => { - changeTimeLineFormat(name); + setAndChangeCurrentTime(name); options.currentTab = name; initEcharts(name) reloadChangeData() } - const changeTimeLineFormat = (name) => { - if (name === 'MWR'){ - initTimeLineDay(); - return; + const setAndChangeCurrentTime = (name) => { + options.index = 23; + if ("MWR" === name){ + options.date = moment().format('YYYY-MM-DD 00:00:00'); + options.timeLineFormat = ""; + }else{ + options.date = moment().format('YYYY-MM-DD HH:00:00'); + options.timeLineFormat = ""; } - - initTimeLine(); + + options.currentTime = options.date; } const reloadChangeData = () => { @@ -547,25 +549,25 @@ export default { const elementChange = (code: string) => { switch (code) { case 'singleWatervapor' : - // initTimeLine() + initTimeLine() reloadCloudRecognition('singleWatervapor', 101, 'watervapor', drawSingleWatervapor); break; case 'aod-icot-wcot' : - // initTimeLine() + initTimeLine() reloadChartsRecognition('aod', drawAerosolCharts); reloadChartsRecognition('icot', drawIceCloudsCharts); reloadChartsRecognition('wcot', drawWaterCloud); break; case 'extinctionOptics' : - // initTimeLine() + initTimeLine() reloadCloudRecognition('extinctionOptics', 801, 'extinction', drawOpticsExtinction); break; case 'backscatter' : - // initTimeLine() + initTimeLine() reloadCloudRecognition('backscatter', 801, 'backscatter', drawBackscatter); break; case 'pm2_5' : - // initTimeLine() + initTimeLine() reloadCloudRecognition('pm2_5', 201, 'pm2_5', drawPm2Point5); reloadCloudRecognition('pm2_5', 201, 'pm10', drawPm10); break; @@ -582,11 +584,11 @@ export default { reloadCloudRecognition('cloudSol', 801, 'layertype', drawCloudSol); break; case 'cloudbaseheight' : - // initTimeLine() + initTimeLine() reloadChartsRecognition('cloudbaseheight', drawCloudsHeightCharts); break; case 'cloudtopheight' : - // initTimeLine() + initTimeLine() reloadChartsRecognition('cloudtopheight', drawCloudTopHeightCharts); break; // case 'layertype' : @@ -594,11 +596,12 @@ export default { // break; case 'extinction' : // initTimeLineDay() + initTimeLine(true); reloadExtinctionBefore(); - reloadCloudRecognition('extinction', 801, 'extinction', drawExtinctionAfter, true); + reloadCloudRecognition('extinction', 801, 'extinction', drawExtinctionAfter, false, 12); break; case 'watervapor' : - // initTimeLineDay() + initTimeLineDay() reloadWatervaporBefore(); reloadCloudRecognition('watervapor', 101, 'watervapor', drawWatervaporAfter, true); break; @@ -610,7 +613,7 @@ export default { const reloadWatervaporBefore = () => { options.loadingWatervaporBeforeStatus = true; let params = { - date: moment(options.date).add(-1, 'd').format('YYYY-MM-DD'), + date: moment(options.date).format('YYYY-MM-DD 00'), var: 'Vapor Mixing Ratio', locate: options.currentRegion } @@ -636,7 +639,7 @@ export default { const reloadExtinctionBefore = () => { options.loadingExtinctionBeforeStatus = true; let params = { - date: moment(options.date).add(-1, 'd').format('YYYY-MM-DD'), + date: moment(options.date).format('YYYY-MM-DD HH'), var: 'MEXT', locate: options.currentRegion } @@ -653,14 +656,19 @@ export default { let matrix = convertValueToBox(response.data); creates.extinctionBeforeDrawer = new HeatMapDrawer(800, 650, matrix, "extinction_chart-before", 'km/sr','质控前'); - creates.extinctionBeforeDrawer.setAxis(new CoordinateScale(quailtyTimes), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true)); + creates.extinctionBeforeDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true)); creates.extinctionBeforeDrawer.setColorChart(prepareExtinctionnColors()); creates.extinctionBeforeDrawer.draw(); }) } const convertValueToBox = (data) => { - let timeMoment = moment(options.date).set('h', 0).add(-1, 'd'); + let timeMoment = moment(options.date).set('h', 1).add(-1, 'd'); + console.log(options.currentElement) + if (options.currentElement === 'extinction'){ + timeMoment.add(12, 'h'); + } + let timeFormat = timeMoment.format("MM月DD日HH时"); let boxes = new Array>(); @@ -980,7 +988,7 @@ export default { } const drawExtinctionAfter = (result: CustomeArray) => { - if (result.length != 24) return; + if (result.length != 12) return; options.loadingExtinctionStatus = false; if (creates.extinctionDrawer != null) { @@ -989,7 +997,7 @@ export default { let matrix = converCloudRecognition(801, result, 'extinction'); creates.extinctionDrawer = new HeatMapDrawer(800, 650, matrix, "extinction_chart-after", 'km/sr','质控后'); - creates.extinctionDrawer.setAxis(new CoordinateScale(quailtyTimes), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true)); + creates.extinctionDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true)); creates.extinctionDrawer.setColorChart(prepareExtinctionnColors()); creates.extinctionDrawer.draw(); } @@ -1003,14 +1011,14 @@ export default { return colorChart; } - const reloadCloudRecognition = (type: string, capacity: number, element: string, callback: any, isDay: boolean = false) => { + const reloadCloudRecognition = (type: string, capacity: number, element: string, callback: any, isDay: boolean = false, length = 24) => { preprocessing(type); let result = new CustomeArray(callback); let time = moment(options.date); if (isDay) time.set('h', 23).add(-1, 'd'); options.timeArray = [] - for (let index = 0; index < 24; index++) { + for (let index = 0; index < length; index++) { reloadSingleCloudRecognition(capacity, time.clone().add(-index, 'h').format('M_D_H'), element, result); options.timeArray.push(time.clone().add(-index, 'h').format('HH')) } @@ -1291,12 +1299,13 @@ export default { // } //初始化时间轴 - const initTimeLine = () => { + const initTimeLine = (isQuality: boolean = false) => { if (options.timeLineFormat == "hour") return; options.timeLineFormat = "hour"; options.times = []; options.currentTime = moment(options.date).format('YYYY-MM-DD HH'); - let now = moment(options.date).add(1, 'h') + let now = moment(options.date).add(1, 'h'); + if (isQuality) now = now.set('h', 1); for (let i = 0; i < 24; i++) { options.times.push({ hour: now.add(-1, 'hour').format('HH'), diff --git a/04.系统编码/Frontend/src/model/constant.ts b/04.系统编码/Frontend/src/model/constant.ts index 90184dd..3f9b68c 100644 --- a/04.系统编码/Frontend/src/model/constant.ts +++ b/04.系统编码/Frontend/src/model/constant.ts @@ -2,6 +2,6 @@ export class Constant{ public static readonly baseUrl: string = 'http://rdp.nagr.com.cn:18080'; } export class ConstantRamanLidar{ - // public static readonly baseUrl: string = 'http://112.124.40.88:5511'; - public static readonly baseUrl: string = 'http://10.124.102.10:9998'; + public static readonly baseUrl: string = 'http://112.124.40.88:5511'; + // public static readonly baseUrl: string = 'http://10.124.102.10:9998'; } \ No newline at end of file diff --git a/04.系统编码/Frontend/src/uilts/Config.ts b/04.系统编码/Frontend/src/uilts/Config.ts index 115f322..6662a4e 100644 --- a/04.系统编码/Frontend/src/uilts/Config.ts +++ b/04.系统编码/Frontend/src/uilts/Config.ts @@ -2,10 +2,10 @@ import { Moment } from "moment"; import { format } from "./String"; export class Config { - public static url: string = ""; - public static parentUrl: string = "http://10.124.102.10:8002/product/picture"; - // public static url: string = "http://localhost:8002"; - // public static parentUrl: string = "http://112.124.40.88:8999/product/picture"; + // public static url: string = ""; + // public static parentUrl: string = "http://10.124.102.10:8002/product/picture"; + public static url: string = "http://localhost:8002"; + public static parentUrl: string = "http://112.124.40.88:8999/product/picture"; // public static parentUrl: string = "http://rdp.nagr.com.cn:8082/product/picture"; }