1.添加安全登录功能
2.调整部分接口
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
package com.njcn.roma;
|
||||
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.DependsOn;
|
||||
|
||||
@SpringBootApplication
|
||||
@SpringBootApplication(scanBasePackages = "com.njcn")
|
||||
@MapperScan("com.njcn.roma.mapper")
|
||||
@DependsOn("proxyMapperRegister")
|
||||
public class RomaApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -6,6 +6,7 @@ import com.njcn.roma.pojo.UpSendPojo;
|
||||
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;
|
||||
@@ -78,32 +79,63 @@ public class SendCommandController {
|
||||
} catch (IOException e) {
|
||||
System.out.println("IOException---------------------------");
|
||||
e.printStackTrace();
|
||||
return "执行异常";
|
||||
return e.getMessage();
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
System.out.println("NoSuchAlgorithmException---------------------------");
|
||||
e.printStackTrace();
|
||||
return "执行异常";
|
||||
return e.getMessage();
|
||||
} catch (KeyStoreException e) {
|
||||
System.out.println("KeyStoreException---------------------------");
|
||||
e.printStackTrace();
|
||||
return "执行异常";
|
||||
return e.getMessage();
|
||||
} catch (KeyManagementException e) {
|
||||
System.out.println("KeyManagementException---------------------------");
|
||||
e.printStackTrace();
|
||||
return "执行异常";
|
||||
return e.getMessage();
|
||||
}catch (Exception e){
|
||||
System.out.println("Exception---------------------------");
|
||||
e.printStackTrace();
|
||||
return "执行异常";
|
||||
return e.getMessage();
|
||||
}
|
||||
return "执行成功";
|
||||
}
|
||||
|
||||
|
||||
|
||||
@GetMapping("test")
|
||||
public String test(){
|
||||
return "6666";
|
||||
|
||||
|
||||
|
||||
@GetMapping("queryService")
|
||||
public String test(@RequestParam(value = "deviceId",defaultValue = "D2899233167kupZT")String deviceId){
|
||||
//String url = "https://" + sendIp + "/iot/1.0/deviceCommands?appId=" + appId;
|
||||
|
||||
String url = "https://" + sendIp + "/iot/1.0/services?appId=" + appId+"&deviceId="+deviceId;
|
||||
HttpGet httpGet = new HttpGet(url); //创建post请求
|
||||
setSSLHeader(httpGet); //设置请求的header
|
||||
try {
|
||||
org.apache.http.HttpEntity responseEntity = getSSLResponse(httpGet);//获取响应结果
|
||||
return EntityUtils.toString(responseEntity);
|
||||
} catch (IOException e) {
|
||||
System.out.println("IOException---------------------------");
|
||||
e.printStackTrace();
|
||||
return e.getMessage();
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
System.out.println("NoSuchAlgorithmException---------------------------");
|
||||
e.printStackTrace();
|
||||
return e.getMessage();
|
||||
} catch (KeyStoreException e) {
|
||||
System.out.println("KeyStoreException---------------------------");
|
||||
e.printStackTrace();
|
||||
return e.getMessage();
|
||||
} catch (KeyManagementException e) {
|
||||
System.out.println("KeyManagementException---------------------------");
|
||||
e.printStackTrace();
|
||||
return e.getMessage();
|
||||
}catch (Exception e){
|
||||
System.out.println("Exception---------------------------");
|
||||
e.printStackTrace();
|
||||
return e.getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,19 +1,45 @@
|
||||
package com.njcn.roma.controller;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
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.DataVMapper;
|
||||
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.server.WebSocketServer;
|
||||
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.util.Map;
|
||||
import java.util.Random;
|
||||
import java.lang.reflect.Field;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* roma
|
||||
@@ -29,6 +55,16 @@ 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 devId = "暂无数据";
|
||||
|
||||
private final PmsHistoryDataMapper pmsHistoryDataMapper;
|
||||
|
||||
private final EleEpdPqdMapper eleEpdPqdMapper;
|
||||
|
||||
|
||||
private final IDataVService iDataVService;
|
||||
|
||||
|
||||
@GetMapping("send")
|
||||
@@ -81,9 +117,9 @@ public class TestController {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 启动客户端
|
||||
*
|
||||
* @author cdf
|
||||
* @date 2024/7/1
|
||||
*/
|
||||
@@ -94,27 +130,30 @@ public class TestController {
|
||||
}
|
||||
|
||||
|
||||
|
||||
@GetMapping("show")
|
||||
public String show() {
|
||||
return clientHandler.topicMsg +" >>>>>>> "+ clientHandler.devId;
|
||||
@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);
|
||||
List<JSONObject> jsonObjectList = new ArrayList<>();
|
||||
list.forEach(item -> jsonObjectList.add(JSONObject.parseObject(item)));
|
||||
return jsonObjectList;
|
||||
}
|
||||
|
||||
|
||||
@DS("sqlite")
|
||||
@GetMapping("simulationWebSocket")
|
||||
public String simulationWebSocket() {
|
||||
clientHandler.devId = "NJCN230497";
|
||||
devId = "NJCN230497";
|
||||
// 浮动范围(比如,我们希望数值在原始值的基础上最多变化10%)
|
||||
double fluctuationRange = 0.10;
|
||||
|
||||
// 创建Random实例
|
||||
Random random = new Random();
|
||||
|
||||
|
||||
|
||||
for(int i=0;i<1000;i++){
|
||||
JSONObject map = JSONObject.parseObject(clientHandler.topicMsg);
|
||||
map.put("customDevId",clientHandler.devId);
|
||||
for (int i = 0; i < 30; i++) {
|
||||
JSONObject map = JSONObject.parseObject(topicMsg);
|
||||
map.put("customDevId", devId);
|
||||
double vA = Double.valueOf(map.get("PhV_phsA").toString());
|
||||
double vB = Double.valueOf(map.get("PhV_phsB").toString());
|
||||
double vC = Double.valueOf(map.get("PhV_phsC").toString());
|
||||
@@ -130,10 +169,9 @@ public class TestController {
|
||||
double fluctuationC = (random.nextDouble() * 2 - 1) * (fluctuationRange * vC);
|
||||
// 计算新的数值
|
||||
double newValueC = vC + fluctuationC;
|
||||
map.put("PhV_phsA",String.valueOf(newValueA));
|
||||
map.put("PhV_phsB",String.valueOf(newValueB));
|
||||
map.put("PhV_phsC",String.valueOf(newValueC));
|
||||
|
||||
map.put("PhV_phsA", String.valueOf(newValueA));
|
||||
map.put("PhV_phsB", String.valueOf(newValueB));
|
||||
map.put("PhV_phsC", String.valueOf(newValueC));
|
||||
|
||||
|
||||
double iA = Double.valueOf(map.get("A_phsA").toString());
|
||||
@@ -151,12 +189,46 @@ public class TestController {
|
||||
double fluctuationIC = (random.nextDouble() * 2 - 1) * (fluctuationRange * iC);
|
||||
// 计算新的数值
|
||||
double newValueIC = iC + fluctuationIC;
|
||||
map.put("A_phsA",String.valueOf(newValueIA));
|
||||
map.put("A_phsB",String.valueOf(newValueIB));
|
||||
map.put("A_phsC",String.valueOf(newValueIC));
|
||||
map.put("A_phsA", String.valueOf(newValueIA));
|
||||
map.put("A_phsB", String.valueOf(newValueIB));
|
||||
map.put("A_phsC", String.valueOf(newValueIC));
|
||||
|
||||
String time = map.get("time").toString();
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmssX");
|
||||
try {
|
||||
ZonedDateTime dateTime = ZonedDateTime.parse(time, formatter);
|
||||
long aa = 1000 - i;
|
||||
System.out.println(aa);
|
||||
dateTime = dateTime.minusMinutes(aa);
|
||||
String ten = dateTime.format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN));
|
||||
System.out.println(ten);
|
||||
map.put("time", ten);
|
||||
webSocketServer.sendSocketMessageToAll(map.toJSONString());
|
||||
|
||||
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();
|
||||
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);
|
||||
@@ -169,4 +241,109 @@ public class TestController {
|
||||
return "推送成功";
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("simulationInfluxdb")
|
||||
@DS("master")
|
||||
public String simulationInfluxdb() {
|
||||
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, 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);
|
||||
|
||||
|
||||
jsonObject.put("customDevId", devId);
|
||||
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 dataV = new DataV();
|
||||
BeanUtil.copyProperties(map,dataV);
|
||||
|
||||
dataV.setPhaseType(phase);
|
||||
dataV.setLineId(jsonObject.get("customDevId").toString());
|
||||
dataV.setValueType("CP95");
|
||||
dataV.setQualityFlag("0");
|
||||
Class<?> clazz = dataV.getClass();
|
||||
Field timeInflux = null;
|
||||
try {
|
||||
timeInflux = clazz.getDeclaredField("time");
|
||||
timeInflux.setAccessible(true);
|
||||
timeInflux.set(dataV, jsonObject.get("time"));
|
||||
|
||||
|
||||
} catch (NoSuchFieldException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (IllegalAccessException 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 "推送成功";
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("createTable")
|
||||
public String createTable() {
|
||||
String ddl = "CREATE TABLE \"pms_history_data\" (\n" +
|
||||
" \"time\" text(16) NOT NULL,\n" +
|
||||
" \"dev_id\" text(10) NOT NULL,\n" +
|
||||
" \"content\" text NOT NULL,\n" +
|
||||
" PRIMARY KEY (\"time\", \"dev_id\")\n" +
|
||||
");";
|
||||
|
||||
return "创建pms_history_data成功";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
22
src/main/java/com/njcn/roma/mapper/EleEpdPqdMapper.java
Normal file
22
src/main/java/com/njcn/roma/mapper/EleEpdPqdMapper.java
Normal file
@@ -0,0 +1,22 @@
|
||||
package com.njcn.roma.mapper;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.njcn.roma.pojo.EleEpdPqd;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author xuyang
|
||||
* @since 2023-05-24
|
||||
*/
|
||||
public interface EleEpdPqdMapper extends BaseMapper<EleEpdPqd> {
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +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> {
|
||||
}
|
||||
170
src/main/java/com/njcn/roma/pojo/EleEpdPqd.java
Normal file
170
src/main/java/com/njcn/roma/pojo/EleEpdPqd.java
Normal file
@@ -0,0 +1,170 @@
|
||||
package com.njcn.roma.pojo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p>
|
||||
*
|
||||
* @author xuyang
|
||||
* @since 2023-05-24
|
||||
*/
|
||||
@Data
|
||||
@TableName("ele_epd_pqd")
|
||||
public class EleEpdPqd {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* Id
|
||||
*/
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 数据名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 别名
|
||||
*/
|
||||
private String otherName;
|
||||
|
||||
/**
|
||||
* 展示
|
||||
*/
|
||||
private String showName;
|
||||
|
||||
/**
|
||||
* 数据编号
|
||||
*/
|
||||
private Integer sort;
|
||||
|
||||
/**
|
||||
* 数据类型
|
||||
*/
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 相别
|
||||
*/
|
||||
private String phase;
|
||||
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
private String unit;
|
||||
|
||||
/**
|
||||
* 数据开始谐波次数
|
||||
*/
|
||||
private Integer harmStart;
|
||||
|
||||
/**
|
||||
* 数据结束谐波次数
|
||||
*/
|
||||
private Integer harmEnd;
|
||||
|
||||
/**
|
||||
* 数据分类,唯一类别
|
||||
*/
|
||||
private String classId;
|
||||
|
||||
/**
|
||||
* 数据统计方法,“max”“min”“avg”“cp95”
|
||||
*/
|
||||
private String statMethod;
|
||||
|
||||
/**
|
||||
* 系统类别(区分用能/电能)
|
||||
*/
|
||||
private String systemType;
|
||||
|
||||
/**
|
||||
* 数据类型(epd、pqd...)
|
||||
*/
|
||||
private String dataType;
|
||||
|
||||
/**
|
||||
* 数据是否上送 0:不上送 1:上送
|
||||
*/
|
||||
private Integer tranFlag;
|
||||
|
||||
/**
|
||||
* 上送规则 变化:“change”周期:“period”
|
||||
*/
|
||||
private String tranRule;
|
||||
|
||||
/**
|
||||
* evt的事件类别 "1"、"2"; parm的参数类别 系统参数:“sys”,运行参数:“run”,功能参数:“fun”; set的定值数据类型 “hex”“number”
|
||||
*/
|
||||
private String eventType;
|
||||
|
||||
/**
|
||||
* sts、di的是否存储 1:存储 0:不存储; ctrl的是否加密 1:加密 0:不加密
|
||||
*/
|
||||
private Integer storeFlag;
|
||||
|
||||
/**
|
||||
* sts、do的当前值; ctrl的是否需遥控校验 1:需要 0:不需要
|
||||
*/
|
||||
private Integer curSts;
|
||||
|
||||
/**
|
||||
* do的是否可远程控制 1:是 0:否; parm的是否可修改 1:是 0:否; ctrl的是否支持自动控制 1:是 0:否
|
||||
*/
|
||||
private Integer ctlSts;
|
||||
|
||||
/**
|
||||
* 设置最大值
|
||||
*/
|
||||
private Double maxNum;
|
||||
|
||||
/**
|
||||
* 设置最小值
|
||||
*/
|
||||
private Double minNum;
|
||||
|
||||
/**
|
||||
* 参数为enum可设置的所有值序列
|
||||
*/
|
||||
private String setValue;
|
||||
|
||||
/**
|
||||
* 参数string可设置字符串的长度上限
|
||||
*/
|
||||
private Integer strlen;
|
||||
|
||||
/**
|
||||
* 参数缺省值
|
||||
*/
|
||||
private String defaultValue;
|
||||
|
||||
/**
|
||||
* 状态(0:删除 1:正常)
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 报表数据来源(mysql表名)
|
||||
*/
|
||||
private String resourcesId;
|
||||
|
||||
/**
|
||||
* 限值名称
|
||||
*/
|
||||
private String limitName;
|
||||
|
||||
/**
|
||||
* 限值表名
|
||||
*/
|
||||
private String limitTable;
|
||||
|
||||
/**
|
||||
* 超标判断方式
|
||||
*/
|
||||
private String formula;
|
||||
|
||||
}
|
||||
24
src/main/java/com/njcn/roma/pojo/PmsHistoryDataPO.java
Normal file
24
src/main/java/com/njcn/roma/pojo/PmsHistoryDataPO.java
Normal file
@@ -0,0 +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;
|
||||
}
|
||||
92
src/main/java/com/njcn/roma/utils/JsonValueFluctuator.java
Normal file
92
src/main/java/com/njcn/roma/utils/JsonValueFluctuator.java
Normal file
@@ -0,0 +1,92 @@
|
||||
package com.njcn.roma.utils;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Random;
|
||||
|
||||
public class JsonValueFluctuator {
|
||||
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmssX");
|
||||
|
||||
|
||||
private static final Random random = new Random();
|
||||
|
||||
/**
|
||||
* 模拟给定JSON字符串中数值属性的值上下浮动10%
|
||||
* @param jsonString JSON字符串
|
||||
* @return 修改后的JSON字符串
|
||||
*/
|
||||
public static JSONObject fluctuateValuesInJson(String jsonString) {
|
||||
JSONObject jsonObject = new JSONObject(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();
|
||||
jsonObject.put(key,instant);
|
||||
}else {
|
||||
// 假设只有Double类型(或可以转换为Double的)值需要变动
|
||||
if (value instanceof Number) {
|
||||
double numberValue = ((Number) value).doubleValue();
|
||||
double fluctuatedValue = fluctuateValue(numberValue);
|
||||
jsonObject.put(key, fluctuatedValue);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
return jsonObject;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 将对象中所有数字类型的null值字段设置为0(对于包装类型)
|
||||
* 注意:此方法不处理基本数据类型,因为基本数据类型不能是null
|
||||
*
|
||||
* @param obj 要处理的对象
|
||||
*/
|
||||
public static void setNullNumberFieldsToZero(Object obj) {
|
||||
if (obj == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Field[] fields = obj.getClass().getDeclaredFields();
|
||||
for (Field field : fields) {
|
||||
// 确保我们可以访问私有字段
|
||||
field.setAccessible(true);
|
||||
|
||||
try {
|
||||
// 检查字段是否为数字类型的包装类
|
||||
if(Integer.class.isAssignableFrom(field.getType())){
|
||||
field.set(obj, 0);
|
||||
} else if (Number.class.isAssignableFrom(field.getType())) {
|
||||
// 对于包装类型,我们可以安全地调用get和set
|
||||
// 如果字段为null,则设置为0
|
||||
if (field.get(obj) == null) {
|
||||
field.set(obj, 0.00);
|
||||
}
|
||||
}
|
||||
} catch (IllegalAccessException e) {
|
||||
// 处理反射访问异常
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 对给定数值进行上下10%的随机浮动
|
||||
* @param value 原始数值
|
||||
* @return 浮动后的数值
|
||||
*/
|
||||
private static double fluctuateValue(double value) {
|
||||
double factor = 1.0 + (random.nextDouble() * 0.2) - 0.1; // 随机产生0.9到1.1之间的因子
|
||||
return value * factor;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user