Browse Source

modify some codes

master
xiaowuler 3 years ago
parent
commit
cc90aa2875
  1. 100
      04.系统编码/Backend/src/main/java/com/userinformation/backend/service/QualityCompareService.java
  2. 22
      04.系统编码/Backend/src/main/resources/application.yml
  3. 73
      04.系统编码/Frontend/src/components/RamanLidar.vue
  4. 4
      04.系统编码/Frontend/src/model/constant.ts
  5. 8
      04.系统编码/Frontend/src/uilts/Config.ts

100
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 EXTINCTION = "MEXT";
private static final String SEPARATOR = ","; 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<Float[]> ONE_HOUR_INVALID_101 = new ArrayList<>(12);
private static List<Float[]> 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}") @Value("${custom.quality-path}")
private String qualityPath; private String qualityPath;
public List<Float[]> findByTimeAndElement(String date, String var, String locate) throws IOException, IllegalAccessException { public List<Float[]> findByTimeAndElement(String date, String var, String locate) throws IOException, IllegalAccessException {
// String filepath = qualityPath + var + "-" + date + ".CSV"; //// String filepath = qualityPath + var + "-" + date + ".CSV";
boolean isExtinction = var.equals(EXTINCTION); // 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); // String filepath = String.format("%s/%s/%s/%s-%s.CSV", qualityPath, getFilepathByLocate(locate), isExtinction ? var : "Raman Products/" + var, var, time.format(TIME_FORMATTER));
LocalDateTime time = LocalDate.parse(date, DATE_FORMATTER).atStartOfDay().plusDays(1); //// return read(filepath, time, isExtinction? 801 : 101);
return read(filepath, time, isExtinction? 801 : 101); //// List<Float[]> 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<Float[]> data = new ArrayList<>(288);
int readCount = 101;
String fileSuffix = "Raman Products/" + var;
List<Float[]> 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<Float[]> read(String var, String locate, LocalDateTime tempTime, LocalDateTime startTime, List<Float[]> data, int readCount, String fileSuffix, List<Float[]> 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<String> lines = Files.readAllLines(Paths.get(filepath));
// 将文件数据进行反转,从最后一行开始读取
Collections.reverse(lines);
int addCount = 0;
for(String line : lines){
List<String> 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<Float[]> addInvalidOrBlackFile(String var, String locate, LocalDateTime tempTime, LocalDateTime startTime, List<Float[]> data, int readCount, String fileSuffix, List<Float[]> 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 { private String getFilepathByLocate(String locate) throws IllegalAccessException {

22
04.系统编码/Backend/src/main/resources/application.yml

@ -6,12 +6,12 @@ spring:
date-format: yyyy-MM-dd HH:mm:ss date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8 time-zone: GMT+8
datasource: datasource:
# url: jdbc:mysql://112.124.40.88:33306/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: 3cqscbr@only1
url: jdbc:mysql://10.124.102.10:3306/user_information?useUnicode=true&characteEncoding=utf-8
username: root 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 # url: jdbc:mysql://192.168.6.6:3306/njsthj?useUnicode=true&characteEncoding=utf-8
# username: njsthj # username: njsthj
# password: Njsqxj_sthj@2021 # password: Njsqxj_sthj@2021
@ -20,11 +20,11 @@ custom:
image: image:
url: ${custom.parent-url}:${server.port}/product url: ${custom.parent-url}:${server.port}/product
gifPath: ${custom.image.path}/gif gifPath: ${custom.image.path}/gif
# path: D:/Deployments/LamanRadar/product path: D:/Deployments/LamanRadar/product
# parent-url: http://localhost parent-url: http://localhost
# quality-path: C:/Users/xiaowuler/Desktop/原始产品数据 quality-path: E:/Memorandum/VPN配置/南京/多曼雷达项目/AllData
path: /home/project/NJEnvironmentPlatform/html/product # path: /home/project/NJEnvironmentPlatform/html/product
parent-url: http://10.124.102.10 # parent-url: http://10.124.102.10
quality-path: /share/win # quality-path: /share/win
# path: /home/develop/product # path: /home/develop/product
# parent-url: http://rdp.nagr.com.cn # parent-url: http://rdp.nagr.com.cn

73
04.系统编码/Frontend/src/components/RamanLidar.vue

@ -51,7 +51,7 @@
</div> </div>
<div class="container panel"> <div class="container panel">
<div class="toolbar day-toolbar" v-if="currentElement === 'singleWatervapor' || currentElement === 'aod-icot-wcot' <div class="toolbar day-toolbar" v-if="currentElement === 'extinction' || currentElement === 'singleWatervapor' || currentElement === 'aod-icot-wcot'
|| currentElement === 'extinctionOptics' || currentElement === 'backscatter' || currentElement === 'extinctionOptics' || currentElement === 'backscatter'
|| currentElement === 'pm2_5' || currentElement === 'pblh' || currentElement === 'pm2_5' || currentElement === 'pblh'
|| currentElement === 'cloudSol' || currentElement === 'cloudbaseheight' || currentElement === 'cloudSol' || currentElement === 'cloudbaseheight'
@ -72,7 +72,7 @@
</div> </div>
</div> </div>
<div class="toolbar day-toolbar" v-if="currentElement === 'extinction' || currentElement=== 'lidarratio' || currentElement === 'watervapor'"> <div class="toolbar day-toolbar" v-if="currentElement=== 'lidarratio' || currentElement === 'watervapor'">
<div class="times"> <div class="times">
<div class="time-item" v-for="(time, index) in times" :key="index" <div class="time-item" v-for="(time, index) in times" :key="index"
:class="{'active': currentTime === time.date, 'first-hour': time.day === '01'}"> :class="{'active': currentTime === time.date, 'first-hour': time.day === '01'}">
@ -324,7 +324,7 @@ export default {
// currentElement: 'PBLH', // currentElement: 'PBLH',
currentType: '边界层高度', currentType: '边界层高度',
// date: moment('2022-04-01 12:00:00').format('YYYY-MM-DD HH:mm:ss'), // 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: [], times: [],
currentTime: null, currentTime: null,
downloadImgUrl: '/images/default-picture.png', downloadImgUrl: '/images/default-picture.png',
@ -374,13 +374,11 @@ export default {
label: '水汽' label: '水汽'
}], }],
currentElement: 'layertype', currentElement: 'layertype',
timeLineFormat: 'hour' timeLineFormat: 'day'
}) })
onMounted(() => { onMounted(() => {
// initTimeLine(); initTimeLine(true);
initTimeLineDay();
// setTitle(moment(options.date, 'YYYY-MM-DD'));
setTimeout(() => { setTimeout(() => {
initEcharts(options.currentTab) initEcharts(options.currentTab)
reloadChangeData(); reloadChangeData();
@ -453,19 +451,23 @@ export default {
} }
const onTabClick = (name) => { const onTabClick = (name) => {
changeTimeLineFormat(name); setAndChangeCurrentTime(name);
options.currentTab = name; options.currentTab = name;
initEcharts(name) initEcharts(name)
reloadChangeData() reloadChangeData()
} }
const changeTimeLineFormat = (name) => { const setAndChangeCurrentTime = (name) => {
if (name === 'MWR'){ options.index = 23;
initTimeLineDay(); if ("MWR" === name){
return; 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 = () => { const reloadChangeData = () => {
@ -547,25 +549,25 @@ export default {
const elementChange = (code: string) => { const elementChange = (code: string) => {
switch (code) { switch (code) {
case 'singleWatervapor' : case 'singleWatervapor' :
// initTimeLine() initTimeLine()
reloadCloudRecognition('singleWatervapor', 101, 'watervapor', drawSingleWatervapor); reloadCloudRecognition('singleWatervapor', 101, 'watervapor', drawSingleWatervapor);
break; break;
case 'aod-icot-wcot' : case 'aod-icot-wcot' :
// initTimeLine() initTimeLine()
reloadChartsRecognition('aod', drawAerosolCharts); reloadChartsRecognition('aod', drawAerosolCharts);
reloadChartsRecognition('icot', drawIceCloudsCharts); reloadChartsRecognition('icot', drawIceCloudsCharts);
reloadChartsRecognition('wcot', drawWaterCloud); reloadChartsRecognition('wcot', drawWaterCloud);
break; break;
case 'extinctionOptics' : case 'extinctionOptics' :
// initTimeLine() initTimeLine()
reloadCloudRecognition('extinctionOptics', 801, 'extinction', drawOpticsExtinction); reloadCloudRecognition('extinctionOptics', 801, 'extinction', drawOpticsExtinction);
break; break;
case 'backscatter' : case 'backscatter' :
// initTimeLine() initTimeLine()
reloadCloudRecognition('backscatter', 801, 'backscatter', drawBackscatter); reloadCloudRecognition('backscatter', 801, 'backscatter', drawBackscatter);
break; break;
case 'pm2_5' : case 'pm2_5' :
// initTimeLine() initTimeLine()
reloadCloudRecognition('pm2_5', 201, 'pm2_5', drawPm2Point5); reloadCloudRecognition('pm2_5', 201, 'pm2_5', drawPm2Point5);
reloadCloudRecognition('pm2_5', 201, 'pm10', drawPm10); reloadCloudRecognition('pm2_5', 201, 'pm10', drawPm10);
break; break;
@ -582,11 +584,11 @@ export default {
reloadCloudRecognition('cloudSol', 801, 'layertype', drawCloudSol); reloadCloudRecognition('cloudSol', 801, 'layertype', drawCloudSol);
break; break;
case 'cloudbaseheight' : case 'cloudbaseheight' :
// initTimeLine() initTimeLine()
reloadChartsRecognition('cloudbaseheight', drawCloudsHeightCharts); reloadChartsRecognition('cloudbaseheight', drawCloudsHeightCharts);
break; break;
case 'cloudtopheight' : case 'cloudtopheight' :
// initTimeLine() initTimeLine()
reloadChartsRecognition('cloudtopheight', drawCloudTopHeightCharts); reloadChartsRecognition('cloudtopheight', drawCloudTopHeightCharts);
break; break;
// case 'layertype' : // case 'layertype' :
@ -594,11 +596,12 @@ export default {
// break; // break;
case 'extinction' : case 'extinction' :
// initTimeLineDay() // initTimeLineDay()
initTimeLine(true);
reloadExtinctionBefore(); reloadExtinctionBefore();
reloadCloudRecognition('extinction', 801, 'extinction', drawExtinctionAfter, true); reloadCloudRecognition('extinction', 801, 'extinction', drawExtinctionAfter, false, 12);
break; break;
case 'watervapor' : case 'watervapor' :
// initTimeLineDay() initTimeLineDay()
reloadWatervaporBefore(); reloadWatervaporBefore();
reloadCloudRecognition('watervapor', 101, 'watervapor', drawWatervaporAfter, true); reloadCloudRecognition('watervapor', 101, 'watervapor', drawWatervaporAfter, true);
break; break;
@ -610,7 +613,7 @@ export default {
const reloadWatervaporBefore = () => { const reloadWatervaporBefore = () => {
options.loadingWatervaporBeforeStatus = true; options.loadingWatervaporBeforeStatus = true;
let params = { 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', var: 'Vapor Mixing Ratio',
locate: options.currentRegion locate: options.currentRegion
} }
@ -636,7 +639,7 @@ export default {
const reloadExtinctionBefore = () => { const reloadExtinctionBefore = () => {
options.loadingExtinctionBeforeStatus = true; options.loadingExtinctionBeforeStatus = true;
let params = { let params = {
date: moment(options.date).add(-1, 'd').format('YYYY-MM-DD'), date: moment(options.date).format('YYYY-MM-DD HH'),
var: 'MEXT', var: 'MEXT',
locate: options.currentRegion locate: options.currentRegion
} }
@ -653,14 +656,19 @@ export default {
let matrix = convertValueToBox(response.data); let matrix = convertValueToBox(response.data);
creates.extinctionBeforeDrawer = new HeatMapDrawer(800, 650, matrix, "extinction_chart-before", 'km/sr','质控前'); 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.setColorChart(prepareExtinctionnColors());
creates.extinctionBeforeDrawer.draw(); creates.extinctionBeforeDrawer.draw();
}) })
} }
const convertValueToBox = (data) => { 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 timeFormat = timeMoment.format("MM月DD日HH时");
let boxes = new Array<Array<Box>>(); let boxes = new Array<Array<Box>>();
@ -980,7 +988,7 @@ export default {
} }
const drawExtinctionAfter = (result: CustomeArray<any>) => { const drawExtinctionAfter = (result: CustomeArray<any>) => {
if (result.length != 24) return; if (result.length != 12) return;
options.loadingExtinctionStatus = false; options.loadingExtinctionStatus = false;
if (creates.extinctionDrawer != null) { if (creates.extinctionDrawer != null) {
@ -989,7 +997,7 @@ export default {
let matrix = converCloudRecognition(801, result, 'extinction'); let matrix = converCloudRecognition(801, result, 'extinction');
creates.extinctionDrawer = new HeatMapDrawer(800, 650, matrix, "extinction_chart-after", 'km/sr','质控后'); 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.setColorChart(prepareExtinctionnColors());
creates.extinctionDrawer.draw(); creates.extinctionDrawer.draw();
} }
@ -1003,14 +1011,14 @@ export default {
return colorChart; 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); preprocessing(type);
let result = new CustomeArray(callback); let result = new CustomeArray(callback);
let time = moment(options.date); let time = moment(options.date);
if (isDay) time.set('h', 23).add(-1, 'd'); if (isDay) time.set('h', 23).add(-1, 'd');
options.timeArray = [] 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); reloadSingleCloudRecognition(capacity, time.clone().add(-index, 'h').format('M_D_H'), element, result);
options.timeArray.push(time.clone().add(-index, 'h').format('HH')) 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; if (options.timeLineFormat == "hour") return;
options.timeLineFormat = "hour"; options.timeLineFormat = "hour";
options.times = []; options.times = [];
options.currentTime = moment(options.date).format('YYYY-MM-DD HH'); 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++) { for (let i = 0; i < 24; i++) {
options.times.push({ options.times.push({
hour: now.add(-1, 'hour').format('HH'), hour: now.add(-1, 'hour').format('HH'),

4
04.系统编码/Frontend/src/model/constant.ts

@ -2,6 +2,6 @@ export class Constant{
public static readonly baseUrl: string = 'http://rdp.nagr.com.cn:18080'; public static readonly baseUrl: string = 'http://rdp.nagr.com.cn:18080';
} }
export class ConstantRamanLidar{ export class ConstantRamanLidar{
// public static readonly baseUrl: string = 'http://112.124.40.88:5511'; 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://10.124.102.10:9998';
} }

8
04.系统编码/Frontend/src/uilts/Config.ts

@ -2,10 +2,10 @@ import { Moment } from "moment";
import { format } from "./String"; import { format } from "./String";
export class Config { export class Config {
public static url: string = ""; // public static url: string = "";
public static parentUrl: string = "http://10.124.102.10:8002/product/picture"; // public static parentUrl: string = "http://10.124.102.10:8002/product/picture";
// public static url: string = "http://localhost:8002"; public static url: string = "http://localhost:8002";
// public static parentUrl: string = "http://112.124.40.88:8999/product/picture"; public static parentUrl: string = "http://112.124.40.88:8999/product/picture";
// public static parentUrl: string = "http://rdp.nagr.com.cn:8082/product/picture"; // public static parentUrl: string = "http://rdp.nagr.com.cn:8082/product/picture";
} }

Loading…
Cancel
Save