diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alert/vo/AlertPageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alert/vo/AlertPageReqVO.java index ebd0c0e48c..ba1f7e1552 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alert/vo/AlertPageReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alert/vo/AlertPageReqVO.java @@ -1,10 +1,12 @@ package cn.iocoder.yudao.module.iot.controller.admin.alert.vo; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; + import java.time.LocalDateTime; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -31,7 +33,7 @@ public class AlertPageReqVO extends PageParam { private String content; @Schema(description = "告警条件") - private String condition; + private String conditionInfo; @Schema(description = "逻辑表达式") private String conditionFormula; diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alert/vo/AlertRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alert/vo/AlertRespVO.java index 298b9c72a5..a9fb1034b9 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alert/vo/AlertRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alert/vo/AlertRespVO.java @@ -1,14 +1,13 @@ package cn.iocoder.yudao.module.iot.controller.admin.alert.vo; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; @Schema(description = "管理后台 - 告警配置 Response VO") @Data @@ -43,7 +42,7 @@ public class AlertRespVO { @Schema(description = "告警条件") @ExcelProperty("告警条件") - private String condition; + private String conditionInfo; @Schema(description = "逻辑表达式") @ExcelProperty("逻辑表达式") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alert/vo/AlertSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alert/vo/AlertSaveReqVO.java index df0d72cc91..a290be6be0 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alert/vo/AlertSaveReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alert/vo/AlertSaveReqVO.java @@ -1,10 +1,10 @@ package cn.iocoder.yudao.module.iot.controller.admin.alert.vo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import cn.iocoder.yudao.module.iot.dal.dataobject.alertrecord.AlertRecordDO; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; @Schema(description = "管理后台 - 告警配置新增/修改 Request VO") @Data @@ -31,7 +31,7 @@ public class AlertSaveReqVO { private String content; @Schema(description = "告警条件") - private String condition; + private String conditionInfo; @Schema(description = "逻辑表达式") private String conditionFormula; diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alertrecord/vo/AlertRecordPageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alertrecord/vo/AlertRecordPageReqVO.java index ffd83d16dc..a7081f109d 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alertrecord/vo/AlertRecordPageReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alertrecord/vo/AlertRecordPageReqVO.java @@ -1,10 +1,12 @@ package cn.iocoder.yudao.module.iot.controller.admin.alertrecord.vo; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; + import java.time.LocalDateTime; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -31,7 +33,7 @@ public class AlertRecordPageReqVO extends PageParam { private String content; @Schema(description = "告警条件") - private String condition; + private String conditionInfo; @Schema(description = "逻辑表达式") private String conditionFormula; diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alertrecord/vo/AlertRecordRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alertrecord/vo/AlertRecordRespVO.java index fa8b0c3a92..c78b3b54d1 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alertrecord/vo/AlertRecordRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alertrecord/vo/AlertRecordRespVO.java @@ -1,14 +1,13 @@ package cn.iocoder.yudao.module.iot.controller.admin.alertrecord.vo; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; @Schema(description = "管理后台 - 告警记录 Response VO") @Data @@ -43,7 +42,7 @@ public class AlertRecordRespVO { @Schema(description = "告警条件") @ExcelProperty("告警条件") - private String condition; + private String conditionInfo; @Schema(description = "逻辑表达式") @ExcelProperty("逻辑表达式") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alertrecord/vo/AlertRecordSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alertrecord/vo/AlertRecordSaveReqVO.java index d6a483abe8..60282cd639 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alertrecord/vo/AlertRecordSaveReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/alertrecord/vo/AlertRecordSaveReqVO.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.iot.controller.admin.alertrecord.vo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; @Schema(description = "管理后台 - 告警记录新增/修改 Request VO") @Data @@ -30,7 +30,7 @@ public class AlertRecordSaveReqVO { private String content; @Schema(description = "告警条件") - private String condition; + private String conditionInfo; @Schema(description = "逻辑表达式") private String conditionFormula; diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/DeviceSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/DeviceSaveReqVO.java index be31fb6233..fbba7d341d 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/DeviceSaveReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/device/vo/DeviceSaveReqVO.java @@ -1,12 +1,10 @@ package cn.iocoder.yudao.module.iot.controller.admin.device.vo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import javax.validation.constraints.*; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; + +import javax.validation.constraints.NotNull; import java.time.LocalDateTime; -import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattribute.DeviceAttributeDO; @Schema(description = "管理后台 - 物联设备新增/修改 Request VO") @Data @@ -34,19 +32,15 @@ public class DeviceSaveReqVO { private String writeTopic; @Schema(description = "网关id", requiredMode = Schema.RequiredMode.REQUIRED, example = "16311") - @NotNull(message = "网关id不能为空") private Long gatewayId; @Schema(description = "设备品牌id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24731") - @NotNull(message = "设备品牌id不能为空") private Long deviceBrandId; @Schema(description = "离线间隔", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "离线间隔不能为空") private Long offLineDuration; @Schema(description = "最后上线时间", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "最后上线时间不能为空") private LocalDateTime lastOnlineTime; @Schema(description = "备注", example = "你说的对") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alert/AlertDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alert/AlertDO.java index 78613b6bc4..8b8034a141 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alert/AlertDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alert/AlertDO.java @@ -1,9 +1,6 @@ package cn.iocoder.yudao.module.iot.dal.dataobject.alert; import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; @@ -54,7 +51,7 @@ public class AlertDO extends BaseDO { /** * 告警条件 */ - private String condition; + private String conditionInfo; /** * 逻辑表达式 */ diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alertrecord/AlertRecordDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alertrecord/AlertRecordDO.java index 78d36a72cb..c8d5dcbaec 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alertrecord/AlertRecordDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alertrecord/AlertRecordDO.java @@ -1,9 +1,6 @@ package cn.iocoder.yudao.module.iot.dal.dataobject.alertrecord; import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; @@ -54,7 +51,7 @@ public class AlertRecordDO extends BaseDO { /** * 告警条件 */ - private String condition; + private String conditionInfo; /** * 逻辑表达式 */ diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/alert/AlertMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/alert/AlertMapper.java index 85c630ee6e..1edd8b2fb8 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/alert/AlertMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/alert/AlertMapper.java @@ -1,7 +1,5 @@ package cn.iocoder.yudao.module.iot.dal.mysql.alert; -import java.util.*; - import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; @@ -24,7 +22,7 @@ public interface AlertMapper extends BaseMapperX { .eqIfPresent(AlertDO::getAlertType, reqVO.getAlertType()) .eqIfPresent(AlertDO::getAlertLevel, reqVO.getAlertLevel()) .eqIfPresent(AlertDO::getContent, reqVO.getContent()) - .eqIfPresent(AlertDO::getCondition, reqVO.getCondition()) + .eqIfPresent(AlertDO::getConditionInfo, reqVO.getConditionInfo()) .eqIfPresent(AlertDO::getConditionFormula, reqVO.getConditionFormula()) .eqIfPresent(AlertDO::getAlertAudio, reqVO.getAlertAudio()) .eqIfPresent(AlertDO::getIsRepeat, reqVO.getIsRepeat()) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/alertrecord/AlertRecordMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/alertrecord/AlertRecordMapper.java index e225a619f0..48e01adabc 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/alertrecord/AlertRecordMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/alertrecord/AlertRecordMapper.java @@ -23,7 +23,7 @@ public interface AlertRecordMapper extends BaseMapperX { .eqIfPresent(AlertRecordDO::getAlertType, reqVO.getAlertType()) .eqIfPresent(AlertRecordDO::getAlertLevel, reqVO.getAlertLevel()) .eqIfPresent(AlertRecordDO::getContent, reqVO.getContent()) - .eqIfPresent(AlertRecordDO::getCondition, reqVO.getCondition()) + .eqIfPresent(AlertRecordDO::getConditionInfo, reqVO.getConditionInfo()) .eqIfPresent(AlertRecordDO::getConditionFormula, reqVO.getConditionFormula()) .eqIfPresent(AlertRecordDO::getDataValue, reqVO.getDataValue()) .eqIfPresent(AlertRecordDO::getDataType, reqVO.getDataType()) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/device/DeviceMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/device/DeviceMapper.java index 32ed4b4a27..e2cbd8df8d 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/device/DeviceMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/device/DeviceMapper.java @@ -1,13 +1,14 @@ package cn.iocoder.yudao.module.iot.dal.mysql.device; -import java.util.*; - +import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.DevicePageReqVO; import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO; import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.iot.controller.admin.device.vo.*; + +import java.util.List; /** * 物联设备 Mapper @@ -34,5 +35,17 @@ public interface DeviceMapper extends BaseMapperX { .betweenIfPresent(DeviceDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(DeviceDO::getId)); } + default PageResult selectPage(PageParam reqVO, Long gatewayId) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(DeviceDO::getGatewayId, gatewayId) + .orderByDesc(DeviceDO::getId)); + } + default int deleteByGatewayId(Long gatewayId) { + return delete(DeviceDO::getGatewayId, gatewayId); + } + + default List selectByGatewayId(Long gatewayId) { + return selectList(DeviceDO::getGatewayId, gatewayId); + } } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/util/HttpUtils.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/util/HttpUtils.java new file mode 100644 index 0000000000..eeb9caaadf --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/util/HttpUtils.java @@ -0,0 +1,334 @@ +package cn.iocoder.yudao.module.iot.framework.util; + +import org.apache.http.Header; +import org.apache.http.StatusLine; +import org.apache.http.client.entity.UrlEncodedFormEntity; +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.conn.ssl.NoopHostnameVerifier; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.ssl.SSLContextBuilder; +import org.apache.http.ssl.TrustStrategy; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.net.ssl.*; +import java.io.*; +import java.net.ConnectException; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.net.URLConnection; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.List; + +/** + * 通用http发送方法 + * + * @author ruoyi + */ +public class HttpUtils { + private static final Logger log = LoggerFactory.getLogger(HttpUtils.class); + + /** + * 向指定 URL 发送GET方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendGet(String url, String param) { + return sendGet(url, param, "UTF-8"); + } + + /** + * 向指定 URL 发送GET方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @param contentType 编码类型 + * @return 所代表远程资源的响应结果 + */ + public static String sendGet(String url, String param, String contentType) { + StringBuilder result = new StringBuilder(); + BufferedReader in = null; + try { + String urlNameString = url + "?" + param; + log.info("sendGet - {}", urlNameString); + URL realUrl = new URL(urlNameString); + URLConnection connection = realUrl.openConnection(); + connection.setRequestProperty("accept", "*/*"); + connection.setRequestProperty("connection", "Keep-Alive"); + connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + connection.connect(); + in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType)); + String line; + while ((line = in.readLine()) != null) { + result.append(line); + } + log.info("recv - {}", result); + } catch (ConnectException e) { + log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e); + } catch (SocketTimeoutException e) { + log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e); + } catch (IOException e) { + log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e); + } catch (Exception e) { + log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e); + } finally { + try { + if (in != null) { + in.close(); + } + } catch (Exception ex) { + log.error("调用in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString(); + } + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPost(String url, String param) { + PrintWriter out = null; + BufferedReader in = null; + StringBuilder result = new StringBuilder(); + try { + String urlNameString = url; + log.info("sendPost - {}", urlNameString); + URL realUrl = new URL(urlNameString); + URLConnection conn = realUrl.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("contentType", "utf-8"); + conn.setDoOutput(true); + conn.setDoInput(true); + out = new PrintWriter(conn.getOutputStream()); + out.print(param); + out.flush(); + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8")); + String line; + while ((line = in.readLine()) != null) { + result.append(line); + } + log.info("recv - {}", result); + } catch (ConnectException e) { + log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e); + } catch (SocketTimeoutException e) { + log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } catch (IOException e) { + log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e); + } catch (Exception e) { + log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e); + } finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException ex) { + log.error("调用in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString(); + } + + public static String sendSSLPost(String url, String param) { + StringBuilder result = new StringBuilder(); + String urlNameString = url + "?" + param; + try { + log.info("sendSSLPost - {}", urlNameString); + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom()); + URL console = new URL(urlNameString); + HttpsURLConnection conn = (HttpsURLConnection) console.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("contentType", "utf-8"); + conn.setDoOutput(true); + conn.setDoInput(true); + + conn.setSSLSocketFactory(sc.getSocketFactory()); + conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); + conn.connect(); + InputStream is = conn.getInputStream(); + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + String ret = ""; + while ((ret = br.readLine()) != null) { + if (ret != null && !"".equals(ret.trim())) { + result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8")); + } + } + log.info("recv - {}", result); + conn.disconnect(); + br.close(); + } catch (ConnectException e) { + log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e); + } catch (SocketTimeoutException e) { + log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } catch (IOException e) { + log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e); + } catch (Exception e) { + log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e); + } + return result.toString(); + } + + private static class TrustAnyTrustManager implements X509TrustManager { + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) { + } + + @Override + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[]{}; + } + } + + private static class TrustAnyHostnameVerifier implements HostnameVerifier { + @Override + public boolean verify(String hostname, SSLSession session) { + return true; + } + } + + public static CloseableHttpClient createSSLClientDefault() { + try { + //使用 loadTrustMaterial() 方法实现一个信任策略,信任所有证书 + SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { + // 信任所有 + public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { + return true; + } + }).build(); + //NoopHostnameVerifier类: 作为主机名验证工具,实质上关闭了主机名验证,它接受任何 + //有效的SSL会话并匹配到目标主机。 + HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE; + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, hostnameVerifier); + return HttpClients.custom().setSSLSocketFactory(sslsf).build(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (KeyStoreException e) { + e.printStackTrace(); + } + return HttpClients.createDefault(); + + } + + public static HttpPost getHttpPost(String url, List list) throws UnsupportedEncodingException { + // 创建 HttpPost 请求 + HttpPost httpPost = new HttpPost(url); + // 设置长连接 + httpPost.setHeader("Connection", "keep-alive"); + // 设置代理(模拟浏览器版本) + httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"); + httpPost.setHeader("Accept", "application/json, text/javascript, */*; q=0.01"); + httpPost.setHeader("Accept-Encoding", "gzip, deflate, br"); + httpPost.setHeader("Accept-Language", "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"); + httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); + + // 设置 Cookie + //httpPost.setHeader("Cookie", "UM_distinctid=16442706a09352-0376059833914f-3c604504-1fa400-16442706a0b345; CNZZDATA1262458286=1603637673-1530123020-%7C1530123020; JSESSIONID=805587506F1594AE02DC45845A7216A4"); + // 创建 HttpPost 参数 + if (list != null) { + List params = new ArrayList(list); + // 设置 HttpPost 参数 + httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); + } + return httpPost; + } + + public static HttpGet getHttpGet(String url, List list) throws UnsupportedEncodingException { + // 创建 HttpGet 请求 + HttpGet httpGet = new HttpGet(url); + // 设置长连接 + httpGet.setHeader("Connection", "keep-alive"); + // 设置代理(模拟浏览器版本) + httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"); + httpGet.setHeader("Accept", "application/json, text/javascript, */*; q=0.01"); + httpGet.setHeader("Accept-Encoding", "gzip, deflate, br"); + httpGet.setHeader("Accept-Language", "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"); + httpGet.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); + // 创建 httpGet 参数 + if (list != null) { + for (BasicNameValuePair pair : list) { + // 设置 httpGet 参数 + httpGet.setHeader(pair.getName(), pair.getValue()); + } + } + return httpGet; + } + + public static boolean testNetworkConnected(String url) { + // 创建 HttpClient 客户端 + CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault(); + CloseableHttpResponse httpResponse = null; + try { + HttpGet httpGet = HttpUtils.getHttpGet(url, new ArrayList<>()); + httpResponse = httpClient.execute(httpGet); + StatusLine statusLine = httpResponse.getStatusLine(); + if (statusLine.getStatusCode() == 200) return true; + } + // 无论如何必须关闭连接 + catch (IOException e) { + e.printStackTrace(); + } finally { + HttpUtils.closeHttp(httpClient, httpResponse); + } + return false; + } + + public static String getCookies(CloseableHttpResponse httpResponse) { + Header str = httpResponse.getHeaders("Set-Cookie")[0]; + return str.getValue().split(";")[0]; + } + + public static void closeHttp(CloseableHttpClient httpClient, CloseableHttpResponse httpResponse) { + try { + if (httpClient != null) { + httpClient.close(); + } + if (httpResponse != null) { + httpResponse.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + /*post操作是否成功*/ + public static Boolean isOk(CloseableHttpResponse httpResponse) { + try { + return "200".equals(EntityUtils.toString(httpResponse.getEntity())); + } catch (IOException e) { + } + return false; + } + +} diff --git a/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/alert/AlertServiceImplTest.java b/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/alert/AlertServiceImplTest.java index 08908b7321..3605c4165a 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/alert/AlertServiceImplTest.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/alert/AlertServiceImplTest.java @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.iot.service.alert; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; import javax.annotation.Resource; @@ -13,20 +12,14 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.alert.AlertDO; import cn.iocoder.yudao.module.iot.dal.mysql.alert.AlertMapper; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import javax.annotation.Resource; import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; -import static cn.hutool.core.util.RandomUtil.*; import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; /** * {@link AlertServiceImpl} 的单元测试类 @@ -115,7 +108,7 @@ public class AlertServiceImplTest extends BaseDbUnitTest { o.setAlertType(null); o.setAlertLevel(null); o.setContent(null); - o.setCondition(null); + o.setConditionInfo(null); o.setConditionFormula(null); o.setAlertAudio(null); o.setIsRepeat(null); @@ -135,7 +128,7 @@ public class AlertServiceImplTest extends BaseDbUnitTest { // 测试 content 不匹配 alertMapper.insert(cloneIgnoreId(dbAlert, o -> o.setContent(null))); // 测试 condition 不匹配 - alertMapper.insert(cloneIgnoreId(dbAlert, o -> o.setCondition(null))); + alertMapper.insert(cloneIgnoreId(dbAlert, o -> o.setConditionInfo(null))); // 测试 conditionFormula 不匹配 alertMapper.insert(cloneIgnoreId(dbAlert, o -> o.setConditionFormula(null))); // 测试 alertAudio 不匹配 diff --git a/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/alertrecord/AlertRecordServiceImplTest.java b/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/alertrecord/AlertRecordServiceImplTest.java index ac64594ca4..b5ae5fcaba 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/alertrecord/AlertRecordServiceImplTest.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/alertrecord/AlertRecordServiceImplTest.java @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.iot.service.alertrecord; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; import javax.annotation.Resource; @@ -13,20 +12,14 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.alertrecord.AlertRecordDO; import cn.iocoder.yudao.module.iot.dal.mysql.alertrecord.AlertRecordMapper; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import javax.annotation.Resource; import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; -import static cn.hutool.core.util.RandomUtil.*; import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; /** * {@link AlertRecordServiceImpl} 的单元测试类 @@ -115,7 +108,7 @@ public class AlertRecordServiceImplTest extends BaseDbUnitTest { o.setAlertType(null); o.setAlertLevel(null); o.setContent(null); - o.setCondition(null); + o.setConditionInfo(null); o.setConditionFormula(null); o.setDataValue(null); o.setDataType(null); @@ -142,7 +135,7 @@ public class AlertRecordServiceImplTest extends BaseDbUnitTest { // 测试 content 不匹配 alertRecordMapper.insert(cloneIgnoreId(dbAlertRecord, o -> o.setContent(null))); // 测试 condition 不匹配 - alertRecordMapper.insert(cloneIgnoreId(dbAlertRecord, o -> o.setCondition(null))); + alertRecordMapper.insert(cloneIgnoreId(dbAlertRecord, o -> o.setConditionInfo(null))); // 测试 conditionFormula 不匹配 alertRecordMapper.insert(cloneIgnoreId(dbAlertRecord, o -> o.setConditionFormula(null))); // 测试 dataValue 不匹配 diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/home/HomeController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/home/HomeController.java index 6e72908e22..9795063b02 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/home/HomeController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/home/HomeController.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.mes.controller.admin.home; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.iot.framework.gateway.util.HttpUtils; +import cn.iocoder.yudao.module.iot.framework.util.HttpUtils; import cn.iocoder.yudao.module.mes.controller.admin.home.weather.Forecast; import cn.iocoder.yudao.module.mes.controller.admin.home.weather.WeatherInfoGaodeVO; import com.alibaba.fastjson.JSON;