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 new file mode 100644 index 0000000..944cfa2 --- /dev/null +++ b/04.系统编码/Backend/src/main/java/com/userinformation/backend/controller/QualityCompareController.java @@ -0,0 +1,29 @@ +package com.userinformation.backend.controller; + +import com.userinformation.backend.service.QualityCompareService; +import com.userinformation.backend.util.RequestResult; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; + +/** + * @author: xiaowuler + * @createTime: 2022-05-05 16:31 + * @describe: 质控对比 控制层 + */ +@RestController +@RequestMapping("/qualityCompare") +public class QualityCompareController { + + private final QualityCompareService qualityCompareService; + public QualityCompareController(QualityCompareService qualityCompareService) { + this.qualityCompareService = qualityCompareService; + } + + @RequestMapping("findByTimeAndElement") + public RequestResult findByTimeAndElement(String date, String var, String locate) throws IOException { + date = "5_1_10"; + return RequestResult.success(qualityCompareService.findByTimeAndElement(date, var, locate)); + } +} diff --git a/04.系统编码/Backend/src/main/java/com/userinformation/backend/controller/TLogPController.java b/04.系统编码/Backend/src/main/java/com/userinformation/backend/controller/TLogPController.java index 5796eb9..b22f281 100644 --- a/04.系统编码/Backend/src/main/java/com/userinformation/backend/controller/TLogPController.java +++ b/04.系统编码/Backend/src/main/java/com/userinformation/backend/controller/TLogPController.java @@ -23,6 +23,6 @@ public class TLogPController { @RequestMapping("findLater") public String findLater(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime, @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime){ - return tLogPService.findLater(startTime, endTime); + return tLogPService.findLater(startTime, endTime.plusSeconds(1)); } } 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 new file mode 100644 index 0000000..86e2026 --- /dev/null +++ b/04.系统编码/Backend/src/main/java/com/userinformation/backend/service/QualityCompareService.java @@ -0,0 +1,84 @@ +package com.userinformation.backend.service; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * @author: xiaowuler + * @createTime: 2022-05-05 16:36 + * @describe: 质控对比服务层 + */ +@Service +public class QualityCompareService { + + 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"); + + @Value("${custom.quality-path}") + private String qualityPath; + + public List findByTimeAndElement(String date, String var, String locate) throws IOException { +// 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); + } + + private List read(String filepath, LocalDateTime time) throws IOException { + List lines = Files.readAllLines(Paths.get(filepath)); + // 将文件数据进行反转,从最后一行开始读取 + Collections.reverse(lines); + + List data = new ArrayList<>(288); + for(String line : lines){ + List rows = Arrays.asList(line.split(SEPARATOR)); + // 相关数据时间转换,以比较,并按照10分钟间隔过滤 + LocalDateTime targetTime = LocalDateTime.parse(rows.get(0), TIME_FORMATTER); + if (targetTime.isAfter(time)) { + continue; + } + + time = fillNaN(time, targetTime, data); + data.add(getValues(rows)); + time = time.minusMinutes(5); + } + + Collections.reverse(data); + AtomicInteger index = new AtomicInteger(0); + // 匹配老师处理的数据 + return data.stream().filter(values -> index.getAndIncrement() % 12 != 0).collect(Collectors.toList()); + } + + private LocalDateTime fillNaN(LocalDateTime time, LocalDateTime targetTime, List data){ + if (Duration.between(targetTime, time).toMinutes() > 5) { + Float[] values = new Float[801]; + Arrays.fill(values, Float.NaN); + data.add(values); + time = time.minusMinutes(10); + fillNaN(time, targetTime, data); + } + 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; + } +} diff --git a/04.系统编码/Backend/src/main/resources/application.yml b/04.系统编码/Backend/src/main/resources/application.yml index 9a2f6af..c330c12 100644 --- a/04.系统编码/Backend/src/main/resources/application.yml +++ b/04.系统编码/Backend/src/main/resources/application.yml @@ -20,9 +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 - 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: C:/Users/xiaowuler/Desktop/原始产品数据 # path: /home/develop/product # parent-url: http://rdp.nagr.com.cn diff --git a/04.系统编码/Frontend/src/components/MicrowaveRadiation.vue b/04.系统编码/Frontend/src/components/MicrowaveRadiation.vue index 2575fd1..e05d331 100644 --- a/04.系统编码/Frontend/src/components/MicrowaveRadiation.vue +++ b/04.系统编码/Frontend/src/components/MicrowaveRadiation.vue @@ -200,7 +200,7 @@
- +
@@ -1014,6 +1014,9 @@ export default { z-index: 1000; } } + .T-logpImg { + transform: scale(0.5); + } } .raman-picture-container { width: calc(~"100% - 1rem"); diff --git a/04.系统编码/Frontend/src/components/RamanLidar.vue b/04.系统编码/Frontend/src/components/RamanLidar.vue index 00806d3..b832ba9 100644 --- a/04.系统编码/Frontend/src/components/RamanLidar.vue +++ b/04.系统编码/Frontend/src/components/RamanLidar.vue @@ -52,10 +52,10 @@
+ || currentElement === 'extinctionOptics' || currentElement === 'backscatter' + || currentElement === 'pm2_5' || currentElement === 'pblh' + || currentElement === 'cloudSol' || currentElement === 'cloudbaseheight' + || currentElement === 'cloudtopheight'">
@@ -72,7 +72,6 @@
-
- -
@@ -116,7 +113,7 @@
-
+
-
+
-
+
import {onMounted, reactive, toRefs, watch} from 'vue'; import moment from "moment"; -import {RamanLidarConfig} from '../uilts/Config'; import {post} from '../uilts/axios'; import {ElMessage} from "element-plus"; import {ConstantRamanLidar} from "../model/constant"; @@ -291,6 +287,7 @@ export default { LidarRatio: HighChartCreate, opticalThickness: HighChartCreate, cloudRecognitionDrawer: HeatMapDrawer, + extinctionBeforeDrawer: HeatMapDrawer, extinctionDrawer: HeatMapDrawer, watervaporDrawer: HeatMapDrawer, opticsExtinctionDrawer: HeatMapDrawer, @@ -307,6 +304,7 @@ export default { opticalThickness: null, cloudRecognitionDrawer: null, extinctionDrawer: null, + extinctionBeforeDrawer: null, watervaporDrawer: null, singleWatervaporDrawer: null, opticsExtinctionDrawer: null, @@ -589,7 +587,7 @@ export default { // break; case 'extinction' : // initTimeLineDay() - reloadCloudRecognition('extinction', 801, 'extinction', drawExtinctionBefore); + reloadExtinctionBefore(); reloadCloudRecognition('extinction', 801, 'extinction', drawExtinctionAfter); break; case 'watervapor' : @@ -602,6 +600,48 @@ export default { } } + const reloadExtinctionBefore = () => { + let params = { + date: moment(options.date).format('YYYY-MM-DD'), + var: 'MEXT', + locate: options.currentRegion + } + post("/qualityCompare/findByTimeAndElement", params).then((response: any) => { + if (response.error != 0){ + console.log("未找到质控前数据文件"); + return; + } + + 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.setColorChart(prepareExtinctionnColors()); + creates.extinctionBeforeDrawer.draw(); + }) + } + + const convertValueToBox = (data) => { + let timeMoment = moment(options.date).add(-1, 'd'); + let timeFormat = timeMoment.format("MM月DD日HH时"); + + let boxes = new Array>(); + let index = 1; + data.forEach(r => { + if (index % 11 == 0){ + timeMoment.add(1, 'h'); + timeFormat = timeMoment.format("MM月DD日HH时"); + } + + 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, "米"); + } + index++; + boxes.push(rows); + }) + + return boxes; + } const preprocessing = (type: string) => { switch (type) { @@ -908,9 +948,6 @@ export default { creates.watervaporDrawer.draw(); } - - - const prepareWatervaporColors = () => { return new ColorChart(['#990000', '#CC0000', '#FF0000', '#FF3300', '#FF6600', '#FF9900', '#FFCC00', '#FFFF00', '#CCFF33', '#99FF66', '#66FF99', '#33FFCC', '#00FFFF', '#00CCFF', '#0099FF', '#0066FF', '#0033FF', '#0000FF', '#0000CC', '#000099'], @@ -918,21 +955,6 @@ export default { ); } - const drawExtinctionBefore = (result: CustomeArray) => { - if (result.length != 24) return; - - options.loadingExtinctionStatus = false; - if (creates.extinctionDrawer != null) { - creates.extinctionDrawer.close(); - } - - let matrix = converCloudRecognition(801, result, 'extinction'); - creates.extinctionDrawer = new HeatMapDrawer(800, 650, matrix, "extinction_chart-before", 'km/sr','质控前'); - 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(); - } - const drawExtinctionAfter = (result: CustomeArray) => { if (result.length != 24) return; diff --git a/04.系统编码/Frontend/src/model/high-chart-create.ts b/04.系统编码/Frontend/src/model/high-chart-create.ts index b6bd9bc..750a48e 100644 --- a/04.系统编码/Frontend/src/model/high-chart-create.ts +++ b/04.系统编码/Frontend/src/model/high-chart-create.ts @@ -149,6 +149,13 @@ export class HighChartCreate { } public init(): void{ + // 不换算单位, 不然出现 k + Highcharts.setOptions({ + lang: { + numericSymbols: null + }, + }) + const options = this.getOptions(); this.highChart = Highcharts.chart(this.id, options); // return this.highChart;