代码提交
This commit is contained in:
14
pom.xml
14
pom.xml
@@ -173,9 +173,13 @@
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
<version>3.4.3.1</version>
|
||||
<version>3.4.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.jeffreyning</groupId>
|
||||
<artifactId>mybatisplus-plus</artifactId>
|
||||
<version>1.5.1-RELEASE</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
@@ -183,11 +187,7 @@
|
||||
<version>3.5.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.github.jeffreyning</groupId>
|
||||
<artifactId>mybatisplus-plus</artifactId>
|
||||
<version>1.5.1-RELEASE</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!--druid连接池-->
|
||||
<dependency>
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
package com.njcn.roma;
|
||||
|
||||
import com.github.jeffreyning.mybatisplus.conf.EnableMPP;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||
import org.springframework.context.annotation.DependsOn;
|
||||
|
||||
@SpringBootApplication(scanBasePackages = "com.njcn")
|
||||
@MapperScan("com.njcn.roma.mapper")
|
||||
@DependsOn("proxyMapperRegister")
|
||||
@EnableMPP
|
||||
public class RomaApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
File diff suppressed because one or more lines are too long
183
src/main/java/com/njcn/roma/controller/DeviceController.java
Normal file
183
src/main/java/com/njcn/roma/controller/DeviceController.java
Normal file
@@ -0,0 +1,183 @@
|
||||
package com.njcn.roma.controller;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.client.methods.HttpUriRequest;
|
||||
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
||||
import org.apache.http.conn.ssl.TrustStrategy;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.ssl.SSLContextBuilder;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.json.JSONException;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
import java.io.IOException;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
/**
|
||||
* roma
|
||||
* 设备台账控制
|
||||
* @author cdf
|
||||
* @date 2024/8/21
|
||||
*/
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class DeviceController {
|
||||
|
||||
|
||||
@Value("${roma.acceptIp}")
|
||||
private String acceptIp;
|
||||
|
||||
@Value("${roma.sendIp}")
|
||||
private String sendIp;
|
||||
|
||||
@Value("${roma.appId}")
|
||||
private String appId;
|
||||
|
||||
@Value("${roma.appKey}")
|
||||
private String appKey;
|
||||
|
||||
|
||||
/**
|
||||
* 查询设备信息
|
||||
* @author cdf
|
||||
* @date 2024/8/21
|
||||
*/
|
||||
@GetMapping("queryDevice")
|
||||
public String queryDeviceById(@RequestParam String devId){
|
||||
try {
|
||||
queryDeviceInfo(devId);
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyStoreException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyManagementException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return "获取成功";
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询告警信息
|
||||
* @author cdf
|
||||
* @date 2024/8/21
|
||||
*/
|
||||
|
||||
@GetMapping("alarmHistory")
|
||||
public String alarmHistory(@RequestParam String devId){
|
||||
try {
|
||||
queryAlarm(devId);
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyStoreException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyManagementException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return "获取成功";
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询设备信息
|
||||
*
|
||||
* @throws JSONException
|
||||
* @throws IOException
|
||||
* @throws NoSuchAlgorithmException
|
||||
* @throws KeyStoreException
|
||||
* @throws KeyManagementException
|
||||
*/
|
||||
public void queryDeviceInfo(String deviceId) throws NoSuchAlgorithmException, KeyStoreException, IOException, KeyManagementException {
|
||||
String url = "https://" + sendIp + "/iot/1.0/devices?deviceId="+deviceId+"&appId=" + appId;
|
||||
// /iot/1.0/devices?deviceId={deviceId}&appId={appId}
|
||||
HttpGet httpGet = new HttpGet(url); //创建post请求
|
||||
setSSLHeader(httpGet); //设置请求的header
|
||||
getSSLResponse(httpGet);//获取响应结果
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void queryAlarm(String deviceId) throws NoSuchAlgorithmException, KeyStoreException, IOException, KeyManagementException {
|
||||
String url = "https://" + sendIp + "/iot/1.0/devices?deviceId="+deviceId+"&appId=" + appId;
|
||||
// /iot/1.0/devices?deviceId={deviceId}&appId={appId}
|
||||
HttpGet httpGet = new HttpGet(url); //创建post请求
|
||||
setSSLHeader(httpGet); //设置请求的header
|
||||
getSSLResponse(httpGet);//获取响应结果
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 创建ssl连接,设置客户端信任所有证书
|
||||
* @return CloseableHttpClient
|
||||
* @throws KeyStoreException
|
||||
* @throws NoSuchAlgorithmException
|
||||
* @throws KeyManagementException
|
||||
*/
|
||||
private CloseableHttpClient createSSLClient() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
|
||||
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (TrustStrategy) (chain, authType) -> true).build();
|
||||
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new String[]{"TLSv1.2"}, null,
|
||||
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置请求时的header
|
||||
* @param httpUriRequest
|
||||
*/
|
||||
private void setSSLHeader(HttpUriRequest httpUriRequest) {
|
||||
long time = System.currentTimeMillis();
|
||||
String authorization = DigestUtils.sha256Hex(appId + appKey + time);
|
||||
httpUriRequest.addHeader("Content-Type", "application/json");
|
||||
httpUriRequest.addHeader("Authorization", authorization);
|
||||
httpUriRequest.addHeader("timestamp", String.valueOf(time));
|
||||
}
|
||||
/**
|
||||
* 解析响应结果
|
||||
* @param httpUriRequest
|
||||
* @return
|
||||
* @throws NoSuchAlgorithmException
|
||||
* @throws KeyStoreException
|
||||
* @throws KeyManagementException
|
||||
* @throws IOException
|
||||
*/
|
||||
private org.apache.http.HttpEntity getSSLResponse(HttpUriRequest httpUriRequest) throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException, IOException {
|
||||
CloseableHttpClient httpClient = createSSLClient();
|
||||
CloseableHttpResponse response = httpClient.execute(httpUriRequest);
|
||||
org.apache.http.HttpEntity responseEntity = response.getEntity();
|
||||
System.out.println("响应状态为:" + response.getStatusLine());
|
||||
if (responseEntity != null) {
|
||||
System.out.println("响应内容长度为:" + responseEntity.getContentLength());
|
||||
System.out.println("响应内容为:" + EntityUtils.toString(responseEntity));
|
||||
}
|
||||
return responseEntity;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,39 +2,40 @@ package com.njcn.roma.controller;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
|
||||
import com.huawei.it.eip.ump.client.producer.Producer;
|
||||
import com.huawei.it.eip.ump.client.producer.SendResult;
|
||||
import com.huawei.it.eip.ump.common.exception.UmpException;
|
||||
import com.huawei.it.eip.ump.common.message.Message;
|
||||
import com.njcn.influx.base.InfluxDbBaseMapper;
|
||||
import com.njcn.influx.imapper.DataHarmPowerPMapper;
|
||||
import com.njcn.influx.imapper.DataHarmRateVMapper;
|
||||
import com.njcn.influx.imapper.DataVMapper;
|
||||
import com.njcn.influx.pojo.po.DataHarmPowerP;
|
||||
import com.njcn.influx.pojo.po.DataHarmRateV;
|
||||
import com.njcn.influx.pojo.po.DataV;
|
||||
import com.njcn.influx.service.IDataVService;
|
||||
|
||||
import com.njcn.roma.client.ClientHandler;
|
||||
import com.njcn.roma.mapper.EleEpdPqdMapper;
|
||||
import com.njcn.roma.mapper.PmsHistoryDataMapper;
|
||||
|
||||
import com.njcn.roma.pojo.EleEpdPqd;
|
||||
import com.njcn.roma.pojo.PmsHistoryDataPO;
|
||||
|
||||
import com.njcn.roma.pojo.MonitorRealData;
|
||||
import com.njcn.roma.server.WebSocketServer;
|
||||
import com.njcn.roma.service.MonitorRealDataService;
|
||||
import com.njcn.roma.utils.JsonValueFluctuator;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.jdbc.core.ColumnMapRowMapper;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
@@ -55,16 +56,23 @@ public class TestController {
|
||||
|
||||
private final WebSocketServer webSocketServer;
|
||||
|
||||
public String topicMsg = "{\"HRPhV_H14_phsC\":\"0.0000\",\"HRPhV_H14_phsB\":\"0.0000\",\"HRPhV_H14_phsA\":\"0.0000\",\"HRPhV_H2_phsB\":\"0.0100\",\"HRPhV_H2_phsA\":\"0.0100\",\"HRPhV_H2_phsC\":\"0.0100\",\"HRPhV_H15_phsA\":\"0.0120\",\"TotW\":\"19771.1367\",\"HRPhV_H15_phsB\":\"0.0120\",\"HRPhV_H15_phsC\":\"0.0120\",\"FreqDev\":\"0.0000\",\"PPV_phsAB\":\"384.0318\",\"A_phsC\":\"60.7116\",\"TotPF\":\"0.4946\",\"A_phsA\":\"60.7123\",\"A_phsB\":\"60.7111\",\"PPV_phsBC\":\"383.3656\",\"HRPhV_H25_phsB\":\"0.0080\",\"HRPhV_H25_phsC\":\"0.0080\",\"HRPhV_H25_phsA\":\"0.0080\",\"DataTag\":\"0\",\"HRPhV_H20_phsA\":\"0.0000\",\"HRPhV_H20_phsB\":\"0.0000\",\"HRPhV_H20_phsC\":\"0.0000\",\"PPV_phsCA\":\"383.3637\",\"HRPhV_H3_phsB\":\"0.0640\",\"HRPhV_H3_phsC\":\"0.0640\",\"HRPhV_H9_phsC\":\"0.0220\",\"ThdPhV_phsA\":\"0.0913\",\"HRPhV_H9_phsB\":\"0.0220\",\"HRPhV_H9_phsA\":\"0.0220\",\"ThdPhV_phsB\":\"0.0913\",\"ThdPhV_phsC\":\"0.0913\",\"HRPhV_H19_phsC\":\"0.0100\",\"HRPhV_H19_phsB\":\"0.0100\",\"HRPhV_H19_phsA\":\"0.0100\",\"HRPhV_H16_phsA\":\"0.0000\",\"HRPhV_H13_phsA\":\"0.0140\",\"HRPhV_H16_phsC\":\"0.0000\",\"HRPhV_H13_phsB\":\"0.0140\",\"HRPhV_H16_phsB\":\"0.0000\",\"TotVA\":\"39977.2305\",\"HRPhV_H13_phsC\":\"0.0140\",\"HRPhV_H6_phsB\":\"0.0026\",\"HRPhV_H3_phsA\":\"0.0640\",\"HRPhV_H6_phsA\":\"0.0026\",\"HRPhV_H10_phsA\":\"0.0026\",\"HRPhV_H10_phsB\":\"0.0026\",\"HRPhV_H6_phsC\":\"0.0026\",\"HRPhV_H10_phsC\":\"0.0026\",\"ImbNgV\":\"0.0012\",\"TotVar\":\"34745.9492\",\"HRPhV_H7_phsC\":\"0.0280\",\"HRPhV_H7_phsB\":\"0.0280\",\"HRPhV_H22_phsC\":\"0.0000\",\"HRPhV_H22_phsB\":\"0.0000\",\"ImbZroV\":\"0.0012\",\"HRPhV_H22_phsA\":\"0.0000\",\"HRPhV_H7_phsA\":\"0.0280\",\"HRPhV_H8_phsA\":\"0.0026\",\"HRPhV_H23_phsB\":\"0.0080\",\"PhV_phsA\":\"221.9935\",\"HRPhV_H8_phsB\":\"0.0026\",\"HRPhV_H23_phsC\":\"0.0080\",\"HRPhV_H8_phsC\":\"0.0026\",\"PhV_phsB\":\"221.9947\",\"PhV_phsC\":\"221.9979\",\"HRPhV_H23_phsA\":\"0.0080\",\"PstPhV_phsC\":\"3.2942\",\"PstPhV_phsA\":\"3.3086\",\"PstPhV_phsB\":\"3.2987\",\"Freq\":\"50.0000\",\"HRPhV_H11_phsA\":\"0.0180\",\"HRPhV_H11_phsB\":\"0.0180\",\"HRPhV_H17_phsC\":\"0.0100\",\"HRPhV_H11_phsC\":\"0.0180\",\"HRPhV_H17_phsB\":\"0.0100\",\"HRPhV_H17_phsA\":\"0.0100\",\"SeqV_C2\":\"0.0715\",\"HRPhV_H4_phsB\":\"0.0050\",\"SeqV_C1\":\"60.4601\",\"HRPhV_H4_phsA\":\"0.0050\",\"SeqV_C0\":\"0.0714\",\"PhVDev_phsC\":\"0.0119\",\"HRPhV_H5_phsA\":\"0.0400\",\"HRPhV_H5_phsB\":\"0.0400\",\"HRPhV_H5_phsC\":\"0.0400\",\"PhVDev_phsB\":\"0.0119\",\"HRPhV_H12_phsC\":\"0.0010\",\"PltPhV_phsA\":\"0.0000\",\"PhVDev_phsA\":\"0.0119\",\"HRPhV_H12_phsB\":\"0.0010\",\"HRPhV_H4_phsC\":\"0.0050\",\"HRPhV_H18_phsB\":\"0.0000\",\"HRPhV_H18_phsC\":\"0.0000\",\"HRPhV_H12_phsA\":\"0.0010\",\"HRPhV_H18_phsA\":\"0.0000\",\"HFundPhV_phsC\":\"220.8052\",\"HRPhV_H21_phsC\":\"0.0080\",\"HRPhV_H21_phsB\":\"0.0080\",\"HRPhV_H24_phsC\":\"0.0000\",\"HFundPhV_phsA\":\"220.8056\",\"HRPhV_H21_phsA\":\"0.0080\",\"HFundPhV_phsB\":\"220.8055\",\"HRPhV_H24_phsB\":\"0.0000\",\"PltPhV_phsC\":\"0.0000\",\"HRPhV_H24_phsA\":\"0.0000\",\"PltPhV_phsB\":\"0.0000\",\"time\":\"20240816T150000Z\"}";
|
||||
public String topicMsg = "{\"DataType\":\"1.000\",\"HRPhV_H14_phsC\":\"0.2000\",\"HRPhV_H14_phsB\":\"0.0000\",\"HRPhV_H14_phsA\":\"0.0000\",\"HRPhV_H2_phsB\":\"0.0100\",\"HRPhV_H2_phsA\":\"0.0100\",\"HRPhV_H2_phsC\":\"0.0100\",\"HRPhV_H15_phsA\":\"0.0120\",\"TotW\":\"19771.1367\",\"HRPhV_H15_phsB\":\"0.0120\",\"HRPhV_H15_phsC\":\"0.0120\",\"FreqDev\":\"0.0000\",\"PPV_phsAB\":\"384.0318\",\"A_phsC\":\"60.7116\",\"TotPF\":\"0.4946\",\"A_phsA\":\"60.7123\",\"A_phsB\":\"60.7111\",\"PPV_phsBC\":\"383.3656\",\"HRPhV_H25_phsB\":\"0.0080\",\"HRPhV_H25_phsC\":\"0.0080\",\"HRPhV_H25_phsA\":\"0.0080\",\"DataTag\":\"0\",\"HRPhV_H20_phsA\":\"0.0000\",\"HRPhV_H20_phsB\":\"0.0000\",\"HRPhV_H20_phsC\":\"0.0000\",\"PPV_phsCA\":\"383.3637\",\"HRPhV_H3_phsB\":\"0.0640\",\"HRPhV_H3_phsC\":\"0.0640\",\"HRPhV_H9_phsC\":\"0.0220\",\"ThdPhV_phsA\":\"0.0913\",\"HRPhV_H9_phsB\":\"0.0220\",\"HRPhV_H9_phsA\":\"0.0220\",\"ThdPhV_phsB\":\"0.0913\",\"ThdPhV_phsC\":\"0.0913\",\"HRPhV_H19_phsC\":\"0.0100\",\"HRPhV_H19_phsB\":\"0.0100\",\"HRPhV_H19_phsA\":\"0.0100\",\"HRPhV_H16_phsA\":\"0.0000\",\"HRPhV_H13_phsA\":\"0.0140\",\"HRPhV_H16_phsC\":\"0.0000\",\"HRPhV_H13_phsB\":\"0.0140\",\"HRPhV_H16_phsB\":\"0.0000\",\"TotVA\":\"39977.2305\",\"HRPhV_H13_phsC\":\"0.0140\",\"HRPhV_H6_phsB\":\"0.0026\",\"HRPhV_H3_phsA\":\"0.0640\",\"HRPhV_H6_phsA\":\"0.0026\",\"HRPhV_H10_phsA\":\"0.0026\",\"HRPhV_H10_phsB\":\"0.0026\",\"HRPhV_H6_phsC\":\"0.0026\",\"HRPhV_H10_phsC\":\"0.0026\",\"ImbNgV\":\"0.0012\",\"TotVar\":\"34745.9492\",\"HRPhV_H7_phsC\":\"0.0280\",\"HRPhV_H7_phsB\":\"0.0280\",\"HRPhV_H22_phsC\":\"0.0000\",\"HRPhV_H22_phsB\":\"0.0000\",\"ImbZroV\":\"0.0012\",\"HRPhV_H22_phsA\":\"0.0000\",\"HRPhV_H7_phsA\":\"0.0280\",\"HRPhV_H8_phsA\":\"0.0026\",\"HRPhV_H23_phsB\":\"0.0080\",\"PhV_phsA\":\"221.9935\",\"HRPhV_H8_phsB\":\"0.0026\",\"HRPhV_H23_phsC\":\"0.0080\",\"HRPhV_H8_phsC\":\"0.0026\",\"PhV_phsB\":\"221.9947\",\"PhV_phsC\":\"221.9979\",\"HRPhV_H23_phsA\":\"0.0080\",\"PstPhV_phsC\":\"3.2942\",\"PstPhV_phsA\":\"3.3086\",\"PstPhV_phsB\":\"3.2987\",\"Freq\":\"50.0000\",\"HRPhV_H11_phsA\":\"0.0180\",\"HRPhV_H11_phsB\":\"0.0180\",\"HRPhV_H17_phsC\":\"0.0100\",\"HRPhV_H11_phsC\":\"0.0180\",\"HRPhV_H17_phsB\":\"0.0100\",\"HRPhV_H17_phsA\":\"0.0100\",\"SeqV_C2\":\"0.0715\",\"HRPhV_H4_phsB\":\"0.0050\",\"SeqV_C1\":\"60.4601\",\"HRPhV_H4_phsA\":\"0.0050\",\"SeqV_C0\":\"0.0714\",\"PhVDev_phsC\":\"0.0119\",\"HRPhV_H5_phsA\":\"0.0400\",\"HRPhV_H5_phsB\":\"0.0400\",\"HRPhV_H5_phsC\":\"0.0400\",\"PhVDev_phsB\":\"0.0119\",\"HRPhV_H12_phsC\":\"0.0010\",\"PltPhV_phsA\":\"0.0000\",\"PhVDev_phsA\":\"0.0119\",\"HRPhV_H12_phsB\":\"0.0010\",\"HRPhV_H4_phsC\":\"0.0050\",\"HRPhV_H18_phsB\":\"0.0000\",\"HRPhV_H18_phsC\":\"0.0000\",\"HRPhV_H12_phsA\":\"0.0010\",\"HRPhV_H18_phsA\":\"0.0000\",\"HFundPhV_phsC\":\"220.8052\",\"HRPhV_H21_phsC\":\"0.0080\",\"HRPhV_H21_phsB\":\"0.0080\",\"HRPhV_H24_phsC\":\"0.0000\",\"HFundPhV_phsA\":\"220.8056\",\"HRPhV_H21_phsA\":\"0.0080\",\"HFundPhV_phsB\":\"220.8055\",\"HRPhV_H24_phsB\":\"0.0000\",\"PltPhV_phsC\":\"0.0000\",\"HRPhV_H24_phsA\":\"0.0000\",\"PltPhV_phsB\":\"0.0000\",\"time\":\"20240816T150000Z\"}";
|
||||
|
||||
public String devId = "暂无数据";
|
||||
|
||||
private final PmsHistoryDataMapper pmsHistoryDataMapper;
|
||||
|
||||
private final EleEpdPqdMapper eleEpdPqdMapper;
|
||||
|
||||
|
||||
private final IDataVService iDataVService;
|
||||
private final DataVMapper dataVMapper;
|
||||
|
||||
private final DataHarmRateVMapper dataHarmRateVMapper;
|
||||
|
||||
private final DataHarmPowerPMapper dataHarmPowerPMapper;
|
||||
|
||||
private final MonitorRealDataService monitorRealDataService;
|
||||
|
||||
private final String idKey = "pmswifi_";
|
||||
|
||||
|
||||
@GetMapping("send")
|
||||
@@ -131,7 +139,6 @@ public class TestController {
|
||||
|
||||
|
||||
@GetMapping("list")
|
||||
@DS("sqlite")
|
||||
public List<JSONObject> list(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime, @RequestParam("devId") String devId) {
|
||||
String sql = "select content from pms_history_data where dev_id ='" + devId + "' and time between '" + startTime + "' and '" + endTime + "'";
|
||||
List<String> list = new ArrayList<>(); //= this.jdbcTemplate.queryForList(sql, String.class);
|
||||
@@ -141,7 +148,6 @@ public class TestController {
|
||||
}
|
||||
|
||||
|
||||
@DS("sqlite")
|
||||
@GetMapping("simulationWebSocket")
|
||||
public String simulationWebSocket() {
|
||||
devId = "NJCN230497";
|
||||
@@ -205,15 +211,7 @@ public class TestController {
|
||||
map.put("time", ten);
|
||||
webSocketServer.sendSocketMessageToAll(map.toJSONString());
|
||||
|
||||
//入库influxdb
|
||||
List<DataV> poList = new ArrayList<>();
|
||||
iDataVService.insertBatch(poList);
|
||||
|
||||
DataV dataV = new DataV();
|
||||
Class<?> clazz = dataV.getClass();
|
||||
Field timeInflux = clazz.getDeclaredField("time");
|
||||
timeInflux.setAccessible(true);
|
||||
timeInflux.set(dataV, dateTime.toInstant());
|
||||
|
||||
/* try {
|
||||
PmsHistoryDataPO pmsHistoryDataPO = new PmsHistoryDataPO();
|
||||
@@ -245,92 +243,120 @@ public class TestController {
|
||||
@GetMapping("simulationInfluxdb")
|
||||
@DS("master")
|
||||
public String simulationInfluxdb() {
|
||||
System.out.println("进入模拟数据生成接口++++++++++++++++++++++++++++++++++++++++");
|
||||
List<EleEpdPqd> eleEpdPqdList = eleEpdPqdMapper.selectList(new LambdaQueryWrapper<EleEpdPqd>().eq(EleEpdPqd::getSystemType, "pms"));
|
||||
Map<String,List<EleEpdPqd>> elePhaseMap = eleEpdPqdList.stream().collect(Collectors.groupingBy(EleEpdPqd::getPhase));
|
||||
Map<String, List<EleEpdPqd>> classMap = eleEpdPqdList.stream().collect(Collectors.groupingBy(EleEpdPqd::getClassId));
|
||||
|
||||
|
||||
//Map<String, EleEpdPqd> eleEpdPqdMap = eleEpdPqdList.stream().collect(Collectors.toMap(EleEpdPqd::getName, Function.identity()));
|
||||
devId = "NJCN230497";
|
||||
|
||||
List<DataV> poList = new ArrayList<>();
|
||||
|
||||
cn.hutool.json.JSONObject jsonObject = JsonValueFluctuator.fluctuateValuesInJson(topicMsg);
|
||||
for (int j = 0; j < 6; j++) {
|
||||
List<DataV> poList = new ArrayList<>();
|
||||
List<DataHarmRateV> dataHarmRateVList = new ArrayList<>();
|
||||
List<DataHarmPowerP> dataHarmPowerPList = new ArrayList<>();
|
||||
|
||||
|
||||
jsonObject.put("customDevId", devId);
|
||||
elePhaseMap.forEach((phase,list)->{
|
||||
Instant instant = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant();
|
||||
for (int i = 0; i < 4; i++) {
|
||||
|
||||
Map<String,EleEpdPqd> m = list.stream().collect(Collectors.toMap(EleEpdPqd::getName,Function.identity()));
|
||||
Map<String, Double> map = new HashMap<>();
|
||||
m.forEach((mk,mv)->{
|
||||
if(jsonObject.containsKey(mk)){
|
||||
if(StrUtil.isNotBlank(mv.getOtherName())) {
|
||||
map.put(mv.getOtherName(), Double.valueOf(jsonObject.get(mk).toString()));
|
||||
}
|
||||
JSONObject jsonObject = JsonValueFluctuator.fluctuateValuesInJson(topicMsg);
|
||||
jsonObject.put("customDevId", devId);
|
||||
|
||||
if (i == 0) {
|
||||
jsonObject.put("DataType", "MAX");
|
||||
} else if (i == 1) {
|
||||
jsonObject.put("DataType", "MIN");
|
||||
} else if (i == 2) {
|
||||
jsonObject.put("DataType", "AVG");
|
||||
} else if (i == 3) {
|
||||
jsonObject.put("DataType", "CP95");
|
||||
}
|
||||
});
|
||||
|
||||
String lineId = idKey + jsonObject.get("customDevId").toString();
|
||||
MonitorRealData monitorRealData = new MonitorRealData();
|
||||
monitorRealData.setLineId(lineId);
|
||||
monitorRealData.setId(IdUtil.simpleUUID());
|
||||
ZoneId zoneId = ZoneId.systemDefault();
|
||||
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
|
||||
|
||||
monitorRealData.setTimeId(localDateTime);
|
||||
monitorRealData.setValueType(jsonObject.get("DataType").toString());
|
||||
monitorRealData.setPmsContent(jsonObject.toJSONString());
|
||||
monitorRealDataService.saveOrUpdateByMultiId(monitorRealData);
|
||||
|
||||
|
||||
|
||||
DataV dataV = new DataV();
|
||||
BeanUtil.copyProperties(map,dataV);
|
||||
classMap.forEach((classId, classList) -> {
|
||||
Map<String, List<EleEpdPqd>> elePhaseMap = classList.stream().collect(Collectors.groupingBy(EleEpdPqd::getPhase));
|
||||
elePhaseMap.forEach((phase, list) -> {
|
||||
Map<String, EleEpdPqd> m = list.stream().collect(Collectors.toMap(EleEpdPqd::getName, Function.identity()));
|
||||
Map<String, Double> map = new HashMap<>();
|
||||
m.forEach((mk, mv) -> {
|
||||
if (jsonObject.containsKey(mk)) {
|
||||
if (StrUtil.isNotBlank(mv.getOtherName())) {
|
||||
map.put(mv.getOtherName(), Double.valueOf(jsonObject.get(mk).toString()));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
dataV.setPhaseType(phase);
|
||||
dataV.setLineId(jsonObject.get("customDevId").toString());
|
||||
dataV.setValueType("CP95");
|
||||
dataV.setQualityFlag("0");
|
||||
Class<?> clazz = dataV.getClass();
|
||||
Field timeInflux = null;
|
||||
if (classId.equals("data_v")) {
|
||||
DataV dataV = new DataV();
|
||||
BeanUtil.copyProperties(map, dataV);
|
||||
dataV.setPhaseType(phase);
|
||||
dataV.setLineId(lineId);
|
||||
dataV.setValueType(jsonObject.get("DataType").toString());
|
||||
dataV.setQualityFlag("0");
|
||||
dataV.setTime(instant);
|
||||
|
||||
JsonValueFluctuator.setNullNumberFieldsToZero(dataV);
|
||||
poList.add(dataV);
|
||||
} else if (classId.equals("data_harmrate_v")) {
|
||||
DataHarmRateV dataHarmRateV = new DataHarmRateV();
|
||||
BeanUtil.copyProperties(map, dataHarmRateV);
|
||||
dataHarmRateV.setPhaseType(phase);
|
||||
dataHarmRateV.setLineId(lineId);
|
||||
dataHarmRateV.setValueType(jsonObject.get("DataType").toString());
|
||||
dataHarmRateV.setQualityFlag("0");
|
||||
dataHarmRateV.setTime(instant);
|
||||
|
||||
JsonValueFluctuator.setNullNumberFieldsToZero(dataHarmRateV);
|
||||
dataHarmRateVList.add(dataHarmRateV);
|
||||
} else if (classId.equals("data_harmpower_p")) {
|
||||
DataHarmPowerP dataHarmPowerP = new DataHarmPowerP();
|
||||
BeanUtil.copyProperties(map, dataHarmPowerP);
|
||||
dataHarmPowerP.setPhaseType(phase);
|
||||
dataHarmPowerP.setLineId(lineId);
|
||||
dataHarmPowerP.setValueType(jsonObject.get("DataType").toString());
|
||||
dataHarmPowerP.setQualityFlag("0");
|
||||
dataHarmPowerP.setTime(instant);
|
||||
|
||||
JsonValueFluctuator.setNullNumberFieldsToZero(dataHarmPowerP);
|
||||
dataHarmPowerPList.add(dataHarmPowerP);
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
try {
|
||||
timeInflux = clazz.getDeclaredField("time");
|
||||
timeInflux.setAccessible(true);
|
||||
timeInflux.set(dataV, jsonObject.get("time"));
|
||||
|
||||
|
||||
} catch (NoSuchFieldException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (IllegalAccessException e) {
|
||||
dataVMapper.insertBatch(poList);
|
||||
dataHarmRateVMapper.insertBatch(dataHarmRateVList);
|
||||
dataHarmPowerPMapper.insertBatch(dataHarmPowerPList);
|
||||
System.out.println(instant.toString() + ">>>>>>>>>>>模拟数据至influxdb成功");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
try {
|
||||
Thread.sleep(60000);
|
||||
//Thread.sleep(180000);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
JsonValueFluctuator.setNullNumberFieldsToZero(dataV);
|
||||
poList.add(dataV);
|
||||
|
||||
});
|
||||
//for (int i = 0; i < 30; i++) {
|
||||
//for (int j = 0; j < 4; j++) {
|
||||
|
||||
|
||||
try {
|
||||
//入库influxdb
|
||||
|
||||
|
||||
|
||||
iDataVService.insertBatch(poList);
|
||||
/* try {
|
||||
PmsHistoryDataPO pmsHistoryDataPO = new PmsHistoryDataPO();
|
||||
pmsHistoryDataPO.setTime(ten);
|
||||
pmsHistoryDataPO.setDevId(devId);
|
||||
pmsHistoryDataPO.setContent(map.toJSONString());
|
||||
pmsHistoryDataMapper.insert(pmsHistoryDataPO);
|
||||
//int ret = jdbcTemplate.update();
|
||||
}catch (Exception e){
|
||||
System.out.println("执行sql语句错误"+e.getMessage());
|
||||
}*/
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
//Thread.sleep(180000);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
//}
|
||||
// }
|
||||
|
||||
return "推送成功";
|
||||
}
|
||||
return "模拟成功";
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.njcn.roma.mapper;
|
||||
|
||||
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
|
||||
import com.njcn.roma.pojo.MonitorRealData;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* roma
|
||||
*
|
||||
* @author cdf
|
||||
* @date 2024/8/25
|
||||
*/
|
||||
public interface MonitorRealDataMapper extends MppBaseMapper<MonitorRealData> {
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.njcn.roma.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.njcn.roma.pojo.PmsHistoryDataPO;
|
||||
|
||||
public interface PmsHistoryDataMapper extends BaseMapper<PmsHistoryDataPO> {
|
||||
}
|
||||
//package com.njcn.roma.mapper;
|
||||
//
|
||||
//import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
//import com.njcn.roma.pojo.PmsHistoryDataPO;
|
||||
//
|
||||
//public interface PmsHistoryDataMapper extends BaseMapper<PmsHistoryDataPO> {
|
||||
//}
|
||||
|
||||
47
src/main/java/com/njcn/roma/pojo/MonitorRealData.java
Normal file
47
src/main/java/com/njcn/roma/pojo/MonitorRealData.java
Normal file
@@ -0,0 +1,47 @@
|
||||
package com.njcn.roma.pojo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
|
||||
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p>
|
||||
*
|
||||
* @author xy
|
||||
* @since 2024-08-25
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("pms_real_data")
|
||||
public class MonitorRealData {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableField("id")
|
||||
private String id;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
@TableField("time_Id")
|
||||
private LocalDateTime timeId;
|
||||
|
||||
@MppMultiId
|
||||
@TableField("line_id")
|
||||
private String lineId;
|
||||
|
||||
@MppMultiId
|
||||
@TableField("value_type")
|
||||
private String valueType;
|
||||
|
||||
@TableField("pms_content")
|
||||
private String pmsContent;
|
||||
|
||||
|
||||
}
|
||||
@@ -1,24 +1,24 @@
|
||||
package com.njcn.roma.pojo;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@TableName("pms_history_data")
|
||||
public class PmsHistoryDataPO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableField(value = "time")
|
||||
private String time;
|
||||
|
||||
@TableField(value = "dev_id")
|
||||
private String devId;
|
||||
|
||||
@TableField(value = "content")
|
||||
private String content;
|
||||
}
|
||||
//package com.njcn.roma.pojo;
|
||||
//
|
||||
//
|
||||
//import com.baomidou.mybatisplus.annotation.TableField;
|
||||
//import com.baomidou.mybatisplus.annotation.TableId;
|
||||
//import com.baomidou.mybatisplus.annotation.TableName;
|
||||
//import lombok.Data;
|
||||
//
|
||||
//import java.io.Serializable;
|
||||
//
|
||||
//@Data
|
||||
//@TableName("pms_history_data")
|
||||
//public class PmsHistoryDataPO implements Serializable {
|
||||
// private static final long serialVersionUID = 1L;
|
||||
//
|
||||
// @TableField(value = "time")
|
||||
// private String time;
|
||||
//
|
||||
// @TableField(value = "dev_id")
|
||||
// private String devId;
|
||||
//
|
||||
// @TableField(value = "content")
|
||||
// private String content;
|
||||
//}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.njcn.roma.service;
|
||||
|
||||
import com.github.jeffreyning.mybatisplus.service.IMppService;
|
||||
import com.njcn.roma.pojo.MonitorRealData;
|
||||
|
||||
/**
|
||||
* roma
|
||||
*
|
||||
* @author cdf
|
||||
* @date 2024/8/25
|
||||
*/
|
||||
public interface MonitorRealDataService extends IMppService<MonitorRealData> {
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.njcn.roma.service.impl;
|
||||
|
||||
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
||||
import com.njcn.roma.mapper.MonitorRealDataMapper;
|
||||
import com.njcn.roma.pojo.MonitorRealData;
|
||||
import com.njcn.roma.service.MonitorRealDataService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* roma
|
||||
*
|
||||
* @author cdf
|
||||
* @date 2024/8/25
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class MonitorRealDataServiceImpl extends MppServiceImpl<MonitorRealDataMapper, MonitorRealData> implements MonitorRealDataService {
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.njcn.roma.utils;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.time.Instant;
|
||||
@@ -21,8 +22,39 @@ public class JsonValueFluctuator {
|
||||
* @return 修改后的JSON字符串
|
||||
*/
|
||||
public static JSONObject fluctuateValuesInJson(String jsonString) {
|
||||
JSONObject jsonObject = new JSONObject(jsonString);
|
||||
JSONObject jsonObject = JSONObject.parseObject(jsonString);
|
||||
// 遍历JSONObject的键值对
|
||||
jsonObject.keySet().forEach(key -> {
|
||||
Object value = jsonObject.get(key);
|
||||
if(key.equals("time")){
|
||||
//ZonedDateTime dateTime = ZonedDateTime.parse(value.toString(), formatter);
|
||||
// dateTime = dateTime.minusHours(8);
|
||||
//Instant instant = dateTime.toInstant();
|
||||
|
||||
Instant instant = Instant.now();
|
||||
jsonObject.put(key,instant);
|
||||
}else {
|
||||
if(!key.equals("DataTag") && !key.equals("DataType")){
|
||||
// 假设只有Double类型(或可以转换为Double的)值需要变动
|
||||
double numberValue = Double.parseDouble(value.toString());
|
||||
double fluctuatedValue = fluctuateValue(numberValue);
|
||||
jsonObject.put(key, fluctuatedValue);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
return jsonObject;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 真实环境使用
|
||||
* @author cdf
|
||||
* @date 2024/8/21
|
||||
*/
|
||||
public static JSONObject realToData(String jsonString) {
|
||||
JSONObject jsonObject = JSONObject.parseObject(jsonString);
|
||||
// 遍历JSONObject的键值对
|
||||
jsonObject.keySet().forEach(key -> {
|
||||
Object value = jsonObject.get(key);
|
||||
@@ -32,11 +64,10 @@ public class JsonValueFluctuator {
|
||||
Instant instant = dateTime.toInstant();
|
||||
jsonObject.put(key,instant);
|
||||
}else {
|
||||
// 假设只有Double类型(或可以转换为Double的)值需要变动
|
||||
if (value instanceof Number) {
|
||||
double numberValue = ((Number) value).doubleValue();
|
||||
double fluctuatedValue = fluctuateValue(numberValue);
|
||||
jsonObject.put(key, fluctuatedValue);
|
||||
if(!key.equals("DataTag") && !key.equals("DataType")) {
|
||||
// 假设只有Double类型(或可以转换为Double的)值需要变动
|
||||
double numberValue = Double.parseDouble(value.toString());
|
||||
jsonObject.put(key, numberValue);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,7 +96,9 @@ public class JsonValueFluctuator {
|
||||
try {
|
||||
// 检查字段是否为数字类型的包装类
|
||||
if(Integer.class.isAssignableFrom(field.getType())){
|
||||
field.set(obj, 0);
|
||||
if (field.get(obj) == null) {
|
||||
field.set(obj, 0);
|
||||
}
|
||||
} else if (Number.class.isAssignableFrom(field.getType())) {
|
||||
// 对于包装类型,我们可以安全地调用get和set
|
||||
// 如果字段为null,则设置为0
|
||||
|
||||
@@ -74,10 +74,14 @@ spring:
|
||||
username: root
|
||||
password: njcnpqs
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
sqlite:
|
||||
url: "jdbc:sqlite:D:\\pmsTest.db"
|
||||
driver-class-name: org.sqlite.JDBC
|
||||
type: com.alibaba.druid.pool.DruidDataSource
|
||||
#url: jdbc:mysql://25.36.232.37:13306/pmsinfo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=CTT
|
||||
#username: root
|
||||
#password: Huawei12#
|
||||
#driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
#sqlite:
|
||||
# url: "jdbc:sqlite:D:\\pmsTest.db"
|
||||
# driver-class-name: org.sqlite.JDBC
|
||||
# type: com.alibaba.druid.pool.DruidDataSource
|
||||
|
||||
|
||||
#influxDB内容配置
|
||||
@@ -87,6 +91,13 @@ spring:
|
||||
password: 123456
|
||||
database: pqsinfo_pms
|
||||
|
||||
#influx:
|
||||
#url: http://25.36.232.36:8086
|
||||
#user: admin
|
||||
#password: admin
|
||||
#database: pqsbase_hbcs
|
||||
#mapper-location: com.njcn.influx.imapper
|
||||
|
||||
|
||||
roma:
|
||||
acceptIp: 25.36.190.3:19776
|
||||
@@ -100,4 +111,9 @@ mybatis-plus:
|
||||
#别名扫描
|
||||
type-aliases-package: com.njcn.roma.pojo
|
||||
global-config:
|
||||
enable-sql-runner: true
|
||||
enable-sql-runner: true
|
||||
configuration:
|
||||
#驼峰命名
|
||||
map-underscore-to-camel-case: true
|
||||
#配置sql日志输出
|
||||
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
||||
|
||||
@@ -510,6 +510,8 @@
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
overflow-y: auto; /* 启用竖向滚动 */
|
||||
|
||||
}
|
||||
|
||||
table caption {
|
||||
@@ -604,62 +606,3 @@
|
||||
|
||||
</style>
|
||||
</html>
|
||||
<!--
|
||||
<div id="table">
|
||||
<table id="areaTable" class="table table-striped table-bordered dataTable no-footer"
|
||||
style="width:100%;cellspacing:0;margin-bottom: 0px;" role="grid" aria-describedby="example_info">
|
||||
<thead>
|
||||
<tr role="row">
|
||||
<th class="table-middle">指标</th>
|
||||
<th class="table-middle">2次</th>
|
||||
<th class="table-middle">3次</th>
|
||||
<th class="table-middle">4次</th>
|
||||
<th class="table-middle">5次</th>
|
||||
|
||||
<th class="table-middle">6次</th>
|
||||
<th class="table-middle">7次</th>
|
||||
<th class="table-middle">8次</th>
|
||||
<th class="table-middle">9次</th>
|
||||
|
||||
<th class="table-middle">10次</th>
|
||||
<th class="table-middle">11次</th>
|
||||
<th class="table-middle">12次</th>
|
||||
<th class="table-middle">13次</th>
|
||||
|
||||
<th class="table-middle">14次</th>
|
||||
<th class="table-middle">15次</th>
|
||||
<th class="table-middle">16次</th>
|
||||
<th class="table-middle">17次</th>
|
||||
|
||||
<th class="table-middle">18次</th>
|
||||
<th class="table-middle">19次</th>
|
||||
<th class="table-middle">20次</th>
|
||||
<th class="table-middle">21次</th>
|
||||
|
||||
<th class="table-middle">22次</th>
|
||||
<th class="table-middle">23次</th>
|
||||
<th class="table-middle">24次</th>
|
||||
<th class="table-middle">25次</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{((data.HRPhV_H2_phsA+data.HRPhV_H2_phsB+data.HRPhV_H2_phsC)/3).toFixed(3)}}</td>
|
||||
<td>{{((data.HRPhV_H2_phsA+data.HRPhV_H2_phsB+data.HRPhV_H2_phsC)/3).toFixed(3)}}</td>
|
||||
<td>{{((data.HRPhV_H2_phsA+data.HRPhV_H2_phsB+data.HRPhV_H2_phsC)/3).toFixed(3)}}</td>
|
||||
<td>{{((data.HRPhV_H2_phsA+data.HRPhV_H2_phsB+data.HRPhV_H2_phsC)/3).toFixed(3)}}</td>
|
||||
<td>{{((data.HRPhV_H2_phsA+data.HRPhV_H2_phsB+data.HRPhV_H2_phsC)/3).toFixed(3)}}</td>
|
||||
<td>{{((data.HRPhV_H2_phsA+data.HRPhV_H2_phsB+data.HRPhV_H2_phsC)/3).toFixed(3)}}</td>
|
||||
<td>{{((data.HRPhV_H2_phsA+data.HRPhV_H2_phsB+data.HRPhV_H2_phsC)/3).toFixed(3)}}</td>
|
||||
<td>{{((data.HRPhV_H2_phsA+data.HRPhV_H2_phsB+data.HRPhV_H2_phsC)/3).toFixed(3)}}</td>
|
||||
<td>{{((data.HRPhV_H2_phsA+data.HRPhV_H2_phsB+data.HRPhV_H2_phsC)/3).toFixed(3)}}</td>
|
||||
<td>{{((data.HRPhV_H2_phsA+data.HRPhV_H2_phsB+data.HRPhV_H2_phsC)/3).toFixed(3)}}</td>
|
||||
<td>{{((data.HRPhV_H2_phsA+data.HRPhV_H2_phsB+data.HRPhV_H2_phsC)/3).toFixed(3)}}</td>
|
||||
<td>{{((data.HRPhV_H2_phsA+data.HRPhV_H2_phsB+data.HRPhV_H2_phsC)/3).toFixed(3)}}</td>
|
||||
<td>{{((data.HRPhV_H2_phsA+data.HRPhV_H2_phsB+data.HRPhV_H2_phsC)/3).toFixed(3)}}</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>-->
|
||||
|
||||
Reference in New Issue
Block a user