Browse Source

refactor(alert): 重构 EXA 相关接口和数据结构- 更新 EXAController、EXAService 和 EXAUtils 中的方法签名和返回类型

- 在 EXAHistoryReqVO 中添加 interval 字段
- 修改 ModelInfo 和相关 VO 类的字段名称和类型
- 优化 ModelServiceImpl 中的模型信息处理逻辑
pull/16/head
Jiale 1 month ago
parent
commit
4602c84790
  1. 4
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/EXAController.java
  2. 2
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/vo/EXAHistoryReqVO.java
  3. 10
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/ModelInfo.java
  4. 13
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/Point.java
  5. 7
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoVO.java
  6. 2
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelSimpleVO.java
  7. 4
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/exa/EXAService.java
  8. 4
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/exa/EXAServiceImpl.java
  9. 8
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelServiceImpl.java
  10. 88
      yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/utils/EXAUtils.java

4
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/EXAController.java

@ -64,8 +64,8 @@ public class EXAController {
@GetMapping("/historys") @GetMapping("/historys")
@Operation(summary = "获取点号历史-支持多点(点号之间用逗号分割)") @Operation(summary = "获取点号历史-支持多点(点号之间用逗号分割)")
@PreAuthorize("@ss.hasPermission('alert:exa:query')") @PreAuthorize("@ss.hasPermission('alert:exa:query')")
public CommonResult<List<List<String>>> getEXAHistorys(EXAHistoryReqVO exaHistoryReqVo) { public CommonResult<List<List<List<Double>>>> getEXAHistorys(EXAHistoryReqVO exaHistoryReqVo) {
List<List<String>> historyLists=exaService.getEXAHistorys(exaHistoryReqVo); List<List<List<Double>>> historyLists=exaService.getEXAHistorys(exaHistoryReqVo);
return success(historyLists); return success(historyLists);
} }

2
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/exa/vo/EXAHistoryReqVO.java

@ -12,4 +12,6 @@ public class EXAHistoryReqVO {
private String startTime; private String startTime;
@Schema(description = "结束时间") @Schema(description = "结束时间")
private String endTime; private String endTime;
@Schema(description = "间隔")
private Integer interval=300;
} }

10
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/ModelInfo.java

@ -1,8 +1,10 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.model; package cn.iocoder.yudao.module.alert.controller.admin.model.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*; import lombok.*;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -23,7 +25,9 @@ public class ModelInfo {
/** /**
* 创建人 * 创建人
*/ */
private String createName; private String creator;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
/** /**
* 名称 * 名称
*/ */
@ -32,4 +36,8 @@ public class ModelInfo {
private List<Point> pointInfo; private List<Point> pointInfo;
private String condition;
private Integer sampling;
} }

13
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/model/Point.java

@ -24,8 +24,7 @@ public class Point {
/** /**
* 目标点号 * 目标点号
*/ */
@JsonProperty("target_point") private String point;
private String targetPoint;
/** /**
* 描述 * 描述
@ -37,11 +36,6 @@ public class Point {
*/ */
private String unit; private String unit;
/**
* 类型
*/
private String marktype;
/** /**
* 上限 * 上限
*/ */
@ -51,9 +45,4 @@ public class Point {
* 下限 * 下限
*/ */
private BigDecimal lowerlimit; private BigDecimal lowerlimit;
/**
* 网格数
*/
private Integer gridNumber;
} }

7
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelInfoVO.java

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.alert.controller.admin.model.vo; package cn.iocoder.yudao.module.alert.controller.admin.model.vo;
import cn.iocoder.yudao.module.alert.controller.admin.model.model.Point;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*; import lombok.*;
@ -24,7 +25,7 @@ public class ModelInfoVO {
/** /**
* 创建人 * 创建人
*/ */
private String createName; private String creator;
/** /**
* 创建时间 * 创建时间
@ -43,11 +44,13 @@ public class ModelInfoVO {
private String modelName; private String modelName;
private List<PointVO> pointInfo; private List<Point> pointInfo;
private Integer algorithmId; private Integer algorithmId;
private Integer systemId; private Integer systemId;
private Integer sampling;
} }

2
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/controller/admin/model/vo/ModelSimpleVO.java

@ -33,7 +33,7 @@ public class ModelSimpleVO {
/** /**
* 创建人 * 创建人
*/ */
private String createName; private String creator;
/** /**
* 模型状态 * 模型状态

4
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/exa/EXAService.java

@ -24,9 +24,9 @@ public interface EXAService {
String getEXANow(String itemName) throws URISyntaxException, IOException; String getEXANow(String itemName) throws URISyntaxException, IOException;
List<String> getEXAHistory(EXAHistoryReqVO exaHistoryReqVo); List<List<Double>> getEXAHistory(EXAHistoryReqVO exaHistoryReqVo);
List<List<String>> getEXAHistorys(EXAHistoryReqVO exaHistoryReqVo); List<List<List<Double>>> getEXAHistorys(EXAHistoryReqVO exaHistoryReqVo);
String createPoint(Point pointVo) throws IOException; String createPoint(Point pointVo) throws IOException;

4
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/exa/EXAServiceImpl.java

@ -69,12 +69,12 @@ public class EXAServiceImpl implements EXAService {
} }
@Override @Override
public List<String> getEXAHistory(EXAHistoryReqVO exaHistoryReqVo) { public List<List<Double>> getEXAHistory(EXAHistoryReqVO exaHistoryReqVo) {
return exaUtils.getHistory(EXA_IP,exaHistoryReqVo); return exaUtils.getHistory(EXA_IP,exaHistoryReqVo);
} }
@Override @Override
public List<List<String>> getEXAHistorys(EXAHistoryReqVO exaHistoryReqVo) { public List<List<List<Double>>> getEXAHistorys(EXAHistoryReqVO exaHistoryReqVo) {
return exaUtils.getHistorys(EXA_IP,exaHistoryReqVo); return exaUtils.getHistorys(EXA_IP,exaHistoryReqVo);
} }

8
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/service/model/impl/ModelServiceImpl.java

@ -66,7 +66,7 @@ public class ModelServiceImpl implements ModelService {
return list.stream().map(modelCfg -> ModelSimpleVO.builder() return list.stream().map(modelCfg -> ModelSimpleVO.builder()
.id(modelCfg.getId()) .id(modelCfg.getId())
.name(modelCfg.getModelName().trim()) .name(modelCfg.getModelName().trim())
.createName(modelCfg.getCreator()) .creator(modelCfg.getCreator())
.createTime(modelCfg.getCreateTime()) .createTime(modelCfg.getCreateTime())
.status(modelCfg.getStatus()) .status(modelCfg.getStatus())
.algorithm(Algorithm.of(modelCfg.getAlgorithmId()).toString()) .algorithm(Algorithm.of(modelCfg.getAlgorithmId()).toString())
@ -76,6 +76,10 @@ public class ModelServiceImpl implements ModelService {
@Override @Override
public ModelInfoVO getModelInfo(Integer id) { public ModelInfoVO getModelInfo(Integer id) {
ModelCfg modelCfg = modelCfgService.getById(id);
if (Objects.nonNull(modelCfg)) {
return JsonUtils.parseObject(modelCfg.getModelInfo(), ModelInfoVO.class);
}
return null; return null;
} }
@ -97,6 +101,8 @@ public class ModelServiceImpl implements ModelService {
modelCfgService.save(modelCfg); modelCfgService.save(modelCfg);
Integer modelId = modelCfg.getId(); Integer modelId = modelCfg.getId();
info.setId(modelId); info.setId(modelId);
info.setCreator(modelCfg.getCreator());
info.setCreateTime(modelCfg.getCreateTime());
modelCfg.setModelInfo(JsonUtils.toJsonString(info)); modelCfg.setModelInfo(JsonUtils.toJsonString(info));
modelCfgService.updateById(modelCfg); modelCfgService.updateById(modelCfg);
return modelId; return modelId;

88
yudao-module-alert/yudao-module-alert-biz/src/main/java/cn/iocoder/yudao/module/alert/utils/EXAUtils.java

@ -1,8 +1,14 @@
package cn.iocoder.yudao.module.alert.utils; package cn.iocoder.yudao.module.alert.utils;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.*; import cn.hutool.http.HttpUtil;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.EXAHistoryReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.EXAHttp;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.EXAPageReqVO;
import cn.iocoder.yudao.module.alert.controller.admin.exa.vo.Point;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.fasterxml.jackson.core.type.TypeReference;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
@ -11,39 +17,33 @@ import org.apache.http.client.fluent.Request;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder; import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType; import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
public class EXAUtils { public class EXAUtils {
/** /**
* 根据分页条件和测点名称测点描述模糊查询 * 根据分页条件和测点名称测点描述模糊查询
* *
* @param reqVO 传入对象页数页数量查询条件 * @param reqVO 传入对象页数页数量查询条件
* @return exa列表 * @return exa列表
*/ */
public List<EXAHttp> getPointInfo(String EXA_IP,EXAPageReqVO reqVO) throws URISyntaxException, IOException { public List<EXAHttp> getPointInfo(String EXA_IP, EXAPageReqVO reqVO) throws URISyntaxException, IOException {
// PageResult<EXAHttp> result = new PageResult<>(); // PageResult<EXAHttp> result = new PageResult<>();
List<EXAHttp> exaListAll = new ArrayList<EXAHttp>(); List<EXAHttp> exaListAll = new ArrayList<EXAHttp>();
try { try {
// 目标 RPC 服务的 URL // 目标 RPC 服务的 URL
String url = "http://"+EXA_IP+":9000/exawebapi/exaitem/getitems"; String url = "http://" + EXA_IP + ":9000/exawebapi/exaitem/getitems";
//创建HttpClient对象 //创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpClient httpClient = HttpClients.createDefault();
/* /*
@ -104,11 +104,11 @@ public class EXAUtils {
* @return exa列表 * @return exa列表
*/ */
public List<String> getNowData(String EXA_IP,String itemNames) throws URISyntaxException, IOException { public List<String> getNowData(String EXA_IP, String itemNames) throws URISyntaxException, IOException {
List<String> result = new ArrayList<>(); List<String> result = new ArrayList<>();
try { try {
// 目标 RPC 服务的 URL // 目标 RPC 服务的 URL
String url = "http://"+EXA_IP+":9000/exawebapi/exanow/getfloatvaluebatch"; String url = "http://" + EXA_IP + ":9000/exawebapi/exanow/getfloatvaluebatch";
//创建HttpClient对象 //创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpClient httpClient = HttpClients.createDefault();
/* /*
@ -154,65 +154,43 @@ public class EXAUtils {
* @param exaHistoryReqVo 传入对象点号开始时间结束时间 * @param exaHistoryReqVo 传入对象点号开始时间结束时间
* @return exa列表 * @return exa列表
*/ */
public List<String> getHistory(String EXA_IP,EXAHistoryReqVO exaHistoryReqVo) { public List<List<Double>> getHistory(String EXA_IP, EXAHistoryReqVO exaHistoryReqVo) {
List<String> result = new ArrayList<>(); List<List<Double>> result = new ArrayList<>();
try { try {
// 目标 RPC 服务的 URL // 目标 RPC 服务的 URL
String url = "http://"+EXA_IP+":9000/exawebapi/exatime/GetRawValueArrayFloat"; String url = "http://" + EXA_IP + ":9000/exawebapi/exatime/GetSamplingValueArrayFloat";
//创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
/*
* 由于GET请求的参数都是拼装在URL地址后方所以我们要构建一个URL带参数
*/
URIBuilder uriBuilder = new URIBuilder(url);
/** 添加参数 */ Map<String,Object> params=new HashMap<>();
uriBuilder.addParameter("ItemName", exaHistoryReqVo.getItemName()); params.put("ItemName", exaHistoryReqVo.getItemName());
uriBuilder.addParameter("StartingTime", exaHistoryReqVo.getStartTime()); params.put("StartingTime", exaHistoryReqVo.getStartTime());
uriBuilder.addParameter("TerminalTime", exaHistoryReqVo.getEndTime()); params.put("TerminalTime", exaHistoryReqVo.getEndTime());
params.put("SamplingPeriod", exaHistoryReqVo.getInterval() * 1000);
//创建请求对象 String body = HttpUtil.createGet(url).form(params)
HttpGet httpGet = new HttpGet(uriBuilder.build()); .header("Content-Type", "application/json")
.execute().body();
// 传输的类型
httpGet.addHeader("Content-Type", "application/json");
//发送请求,请求响应结果
CloseableHttpResponse response = httpClient.execute(httpGet);
//获取服务器返回的状态码
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("服务端返回成功的状态码为:" + statusCode);
HttpEntity entity = response.getEntity();
String body = EntityUtils.toString(entity).replaceAll("\\\\", "");
System.out.println("服务端返回的数据为:" + body);
if (body.startsWith("\"") && body.endsWith("\"")) { if (body.startsWith("\"") && body.endsWith("\"")) {
// 步骤3:去掉双引号 // 步骤3:去掉双引号
body = body.substring(1, body.length() - 1); // 去掉首尾的双引号 body = body.substring(1, body.length() - 1); // 去掉首尾的双引号
} }
Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create(); result = JsonUtils.parseObject(body, new TypeReference<List<List<Double>>>(){});
Type listType = new TypeToken<List<List<Double>>>() {
}.getType();
result = gson.fromJson(body, listType);
//关闭资源
response.close();
httpClient.close();
} catch (Exception e) { } catch (Exception e) {
} }
return result; return result;
} }
public List<List<String>> getHistorys(String EXA_IP,EXAHistoryReqVO exaHistoryReqVo) { public List<List<List<Double>>> getHistorys(String EXA_IP, EXAHistoryReqVO exaHistoryReqVo) {
List<List<String>> results = new ArrayList<>(); List<List<List<Double>>> results = new ArrayList<>();
try { try {
String itemNames = exaHistoryReqVo.getItemName(); String itemNames = exaHistoryReqVo.getItemName();
List<String> pointName = Arrays.asList(itemNames.split(",")); List<String> pointName = Arrays.asList(itemNames.split(","));
pointName.forEach(entity -> { pointName.forEach(entity -> {
List<String> result = new ArrayList<>(); List<List<Double>> result = new ArrayList<>();
exaHistoryReqVo.setItemName(entity); exaHistoryReqVo.setItemName(entity);
result = getHistory(EXA_IP,exaHistoryReqVo); result = getHistory(EXA_IP, exaHistoryReqVo);
results.add(result); results.add(result);
}); });
} catch (Exception e) { } catch (Exception e) {
@ -222,8 +200,8 @@ public class EXAUtils {
} }
//写入点号 //写入点号
public String setPoint(String EXA_IP,Point point) throws IOException { public String setPoint(String EXA_IP, Point point) throws IOException {
String requestPathAddItem = "http://"+EXA_IP+":9000/exawebapi/exaitem/AddItem"; String requestPathAddItem = "http://" + EXA_IP + ":9000/exawebapi/exaitem/AddItem";
String param = JSON.toJSONString(point); String param = JSON.toJSONString(point);
String result = Request.Post(requestPathAddItem) String result = Request.Post(requestPathAddItem)
.addHeader("Content-type", "application/json") .addHeader("Content-type", "application/json")
@ -240,7 +218,7 @@ public class EXAUtils {
List<Object> result = new ArrayList<>(); List<Object> result = new ArrayList<>();
try { try {
// 目标 RPC 服务的 URL // 目标 RPC 服务的 URL
String url = "http://"+EXA_IP+":9000/exawebapi/exagroup/getgroups"; String url = "http://" + EXA_IP + ":9000/exawebapi/exagroup/getgroups";
//创建HttpClient对象 //创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpClient httpClient = HttpClients.createDefault();
/* /*
@ -283,8 +261,8 @@ public class EXAUtils {
return result; return result;
} }
public String deletePoint(String EXA_IP,String ItemName){ public String deletePoint(String EXA_IP, String ItemName) {
String requestPathDeleteItem ="http://"+EXA_IP+":9000/exawebapi/exaitem/DeleteItem?ItemName="+ItemName; String requestPathDeleteItem = "http://" + EXA_IP + ":9000/exawebapi/exaitem/DeleteItem?ItemName=" + ItemName;
// 创建HttpClient // 创建HttpClient
try (CloseableHttpClient httpClient = HttpClients.createDefault()) { try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
// 创建HttpDelete请求 // 创建HttpDelete请求

Loading…
Cancel
Save