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 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}")
private String qualityPath;
public List<Float[]> 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<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 {

22
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

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

@ -51,7 +51,7 @@
</div>
<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 === 'pm2_5' || currentElement === 'pblh'
|| currentElement === 'cloudSol' || currentElement === 'cloudbaseheight'
@ -72,7 +72,7 @@
</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="time-item" v-for="(time, index) in times" :key="index"
:class="{'active': currentTime === time.date, 'first-hour': time.day === '01'}">
@ -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<Array<Box>>();
@ -980,7 +988,7 @@ export default {
}
const drawExtinctionAfter = (result: CustomeArray<any>) => {
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'),

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';
}
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';
}

8
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";
}

Loading…
Cancel
Save