From 2da8a0aad8b07c05e72ef4ece956d3751635a66c Mon Sep 17 00:00:00 2001
From: chentaisen <14615430+chentaisen@user.noreply.gitee.com>
Date: Fri, 20 Sep 2024 22:21:17 +0800
Subject: [PATCH] jich
---
.../cloud-warn-common/pom.xml | 38 +++++
.../com/muyu/platform/domain/WarnLogs.java | 91 +++++++++++
.../com/muyu/platform/domain/WarnRule.java | 77 +++++++++
.../muyu/platform/domain/WarnStrategy.java | 57 +++++++
.../muyu/platform/domain/wx/AccessToken.java | 20 +++
.../com/muyu/platform/domain/wx/Message.java | 27 ++++
.../cloud-warn-server/pom.xml | 38 +++++
.../com/muyu/platform/WarnApplication.java | 21 +++
.../controller/WarnLogsController.java | 110 +++++++++++++
.../controller/WarnRuleController.java | 110 +++++++++++++
.../controller/WarnStrategyController.java | 110 +++++++++++++
.../platform/controller/WxTestController.java | 153 ++++++++++++++++++
.../muyu/platform/mapper/WarnLogsMapper.java | 17 ++
.../muyu/platform/mapper/WarnRuleMapper.java | 17 ++
.../platform/mapper/WarnStrategyMapper.java | 17 ++
.../com/muyu/platform/message/Article.java | 28 ++++
.../com/muyu/platform/message/NewMessage.java | 34 ++++
.../platform/service/IWarnLogsService.java | 37 +++++
.../platform/service/IWarnRuleService.java | 37 +++++
.../service/IWarnStrategyService.java | 37 +++++
.../service/impl/WarnLogsServiceImpl.java | 92 +++++++++++
.../service/impl/WarnRuleServiceImpl.java | 87 ++++++++++
.../service/impl/WarnStrategyServiceImpl.java | 74 +++++++++
.../com/muyu/platform/util/OkHttpUtils.java | 36 +++++
.../com/muyu/platform/util/TokenUtil.java | 35 ++++
.../src/main/resources/banner.txt | 2 +
.../src/main/resources/bootstrap.yml | 48 ++++++
.../src/main/resources/logback/dev.xml | 74 +++++++++
.../src/main/resources/logback/prod.xml | 81 ++++++++++
.../src/main/resources/logback/test.xml | 81 ++++++++++
.../mapper/platform/WarnLogsMapper.xml | 96 +++++++++++
.../mapper/platform/WarnRuleMapper.xml | 86 ++++++++++
.../mapper/platform/WarnStrategyMapper.xml | 66 ++++++++
33 files changed, 1934 insertions(+)
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/WarnLogs.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/WarnRule.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/WarnStrategy.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/wx/AccessToken.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/wx/Message.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/WarnApplication.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WarnLogsController.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WarnRuleController.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WarnStrategyController.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WxTestController.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/mapper/WarnLogsMapper.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/mapper/WarnRuleMapper.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/mapper/WarnStrategyMapper.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/message/Article.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/message/NewMessage.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/IWarnLogsService.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/IWarnRuleService.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/IWarnStrategyService.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/impl/WarnLogsServiceImpl.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/impl/WarnRuleServiceImpl.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/impl/WarnStrategyServiceImpl.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/util/OkHttpUtils.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/util/TokenUtil.java
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/banner.txt
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/logback/dev.xml
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/logback/prod.xml
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/logback/test.xml
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnLogsMapper.xml
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnRuleMapper.xml
create mode 100644 cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnStrategyMapper.xml
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-common/pom.xml b/cloud-modules/cloud-modules-warn/cloud-warn-common/pom.xml
index 3180695..fa7ca2f 100644
--- a/cloud-modules/cloud-modules-warn/cloud-warn-common/pom.xml
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-common/pom.xml
@@ -92,5 +92,43 @@
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.3
+
+
+ com.thoughtworks.xstream
+ xstream
+ 1.4.20
+
+
+ org.projectlombok
+ lombok
+ 1.18.34
+
+
+ org.springframework.boot
+ spring-boot-starter
+ 3.3.2
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ 3.3.2
+
+
+
+ org.dom4j
+ dom4j
+ 2.1.3
+
+
+ com.alibaba.fastjson2
+ fastjson2
+ 2.0.43
+
+
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/WarnLogs.java b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/WarnLogs.java
new file mode 100644
index 0000000..b5da687
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/WarnLogs.java
@@ -0,0 +1,91 @@
+package com.muyu.platform.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.muyu.common.core.annotation.Excel;
+import com.muyu.common.core.web.domain.BaseEntity;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+
+/**
+ * 预警日志对象 warn_logs
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+
+@Data
+@Setter
+@Getter
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("warn_logs")
+public class WarnLogs {
+ private static final long serialVersionUID = 1L;
+
+ /** 预警日志id */
+ @TableId( type = IdType.AUTO)
+ private Long id;
+
+ /** 车辆vin码 */
+ @Excel(name = "车辆vin码")
+ private String vin;
+
+ /** 规则id */
+ @Excel(name = "规则id")
+ private Long warnRuleId;
+
+ /** 开始时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date startTime;
+
+ /** 结束时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date endTime;
+
+ /** 最大值 */
+ @Excel(name = "最大值")
+ private Long maxValue;
+
+ /** 最小值 */
+ @Excel(name = "最小值")
+ private Long minValue;
+
+ /** 平均值 */
+ @Excel(name = "平均值")
+ private Long avgValue;
+
+ /** 中位数 */
+ @Excel(name = "中位数")
+ private Long medianValue;
+
+ /** 是否发送预警 */
+ @Excel(name = "是否发送预警")
+ private Long status;
+
+
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("vin", getVin())
+ .append("warnRuleId", getWarnRuleId())
+ .append("startTime", getStartTime())
+ .append("endTime", getEndTime())
+ .append("maxValue", getMaxValue())
+ .append("minValue", getMinValue())
+ .append("avgValue", getAvgValue())
+ .append("medianValue", getMedianValue())
+ .append("status", getStatus())
+ .toString();
+ }
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/WarnRule.java b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/WarnRule.java
new file mode 100644
index 0000000..9915516
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/WarnRule.java
@@ -0,0 +1,77 @@
+package com.muyu.platform.domain;
+
+import com.muyu.common.core.annotation.Excel;
+import com.muyu.common.core.web.domain.BaseEntity;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+
+/**
+ * 预警规则对象 warn_rule
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+
+@Data
+@Setter
+@Getter
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("warn_rule")
+public class WarnRule{
+ private static final long serialVersionUID = 1L;
+
+ /** 规则id */
+ @TableId( type = IdType.AUTO)
+ private Long id;
+
+ /** 规则名称 */
+ @Excel(name = "规则名称")
+ private String ruleName;
+
+ /** 策略id */
+ @Excel(name = "策略id")
+ private Long strategyId;
+
+ /** 报文数据类型id */
+ @Excel(name = "报文数据类型id")
+ private Long msgTypeId;
+
+ /** 滑窗时间 */
+ @Excel(name = "滑窗时间")
+ private Long slideTime;
+
+ /** 滑窗频率 */
+ @Excel(name = "滑窗频率")
+ private Long slideFrequency;
+
+ /** 最大值 */
+ @Excel(name = "最大值")
+ private Long maxValue;
+
+ /** 最小值 */
+ @Excel(name = "最小值")
+ private Long minValue;
+
+
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("ruleName", getRuleName())
+ .append("strategyId", getStrategyId())
+ .append("msgTypeId", getMsgTypeId())
+ .append("slideTime", getSlideTime())
+ .append("slideFrequency", getSlideFrequency())
+ .append("maxValue", getMaxValue())
+ .append("minValue", getMinValue())
+ .toString();
+ }
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/WarnStrategy.java b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/WarnStrategy.java
new file mode 100644
index 0000000..1726024
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/WarnStrategy.java
@@ -0,0 +1,57 @@
+package com.muyu.platform.domain;
+
+import com.muyu.common.core.annotation.Excel;
+import com.muyu.common.core.web.domain.BaseEntity;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+
+/**
+ * 预警策略对象 warn_strategy
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+
+@Data
+@Setter
+@Getter
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("warn_strategy")
+public class WarnStrategy{
+ private static final long serialVersionUID = 1L;
+
+ /** 策略id */
+ @TableId( type = IdType.AUTO)
+ private Long id;
+
+ /** 车辆类型id */
+ @Excel(name = "车辆类型id")
+ private Long carTypeId;
+
+ /** 策略名称 */
+ @Excel(name = "策略名称")
+ private String strategyName;
+
+ /** 报文模版id */
+ @Excel(name = "报文模版id")
+ private Long msgId;
+
+
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("carTypeId", getCarTypeId())
+ .append("strategyName", getStrategyName())
+ .append("msgId", getMsgId())
+ .toString();
+ }
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/wx/AccessToken.java b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/wx/AccessToken.java
new file mode 100644
index 0000000..3236fc6
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/wx/AccessToken.java
@@ -0,0 +1,20 @@
+package com.muyu.platform.domain.wx;
+
+import lombok.Data;
+
+/**
+ * @author 24415
+ */
+@Data
+public class AccessToken {
+
+
+ private String access_token;
+
+ private Long expires_in;
+
+ public void setExpiresTime(Long expiresIn) {
+ this.expires_in = System.currentTimeMillis() + expiresIn * 1000;
+ }
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/wx/Message.java b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/wx/Message.java
new file mode 100644
index 0000000..f9019a9
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/platform/domain/wx/Message.java
@@ -0,0 +1,27 @@
+package com.muyu.platform.domain.wx;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import lombok.Data;
+
+/**
+ * @Author: Chen
+ * @name:Message
+ */
+@Data
+@XStreamAlias("xml")
+public class Message {
+ @XStreamAlias("ToUserName")
+ private String toUserName;
+
+ @XStreamAlias("FromUserName")
+ private String fromUserName;
+
+ @XStreamAlias("CreateTime")
+ private Long createTime;
+
+ @XStreamAlias("MsgType")
+ private String msgType;
+
+ @XStreamAlias("Content")
+ private String content;
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/pom.xml b/cloud-modules/cloud-modules-warn/cloud-warn-server/pom.xml
index 415e450..13b8bbc 100644
--- a/cloud-modules/cloud-modules-warn/cloud-warn-server/pom.xml
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/pom.xml
@@ -22,5 +22,43 @@
cloud-warn-common
3.6.3
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.3
+
+
+ com.thoughtworks.xstream
+ xstream
+ 1.4.20
+
+
+ org.projectlombok
+ lombok
+ 1.18.34
+
+
+ org.springframework.boot
+ spring-boot-starter
+ 3.3.2
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ 3.3.2
+
+
+
+ org.dom4j
+ dom4j
+ 2.1.3
+
+
+ com.alibaba.fastjson2
+ fastjson2
+ 2.0.43
+
+
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/WarnApplication.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/WarnApplication.java
new file mode 100644
index 0000000..e40942f
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/WarnApplication.java
@@ -0,0 +1,21 @@
+package com.muyu.platform;
+
+import com.muyu.common.security.annotation.EnableCustomConfig;
+import com.muyu.common.security.annotation.EnableMyFeignClients;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @Author Chen
+ * @name:WxApplication
+ * @Date:2024/9/16 20:39
+ */
+@EnableCustomConfig
+//@EnableCustomSwagger2
+@EnableMyFeignClients
+@SpringBootApplication
+public class WarnApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(WarnApplication.class);
+ }
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WarnLogsController.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WarnLogsController.java
new file mode 100644
index 0000000..c9807ee
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WarnLogsController.java
@@ -0,0 +1,110 @@
+package com.muyu.platform.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import javax.annotation.Resource;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.muyu.common.security.annotation.RequiresPermissions;
+import com.muyu.platform.domain.WarnLogs;
+import com.muyu.platform.service.IWarnLogsService;
+import com.muyu.common.core.web.controller.BaseController;
+import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.utils.poi.ExcelUtil;
+import com.muyu.common.security.utils.SecurityUtils;
+import org.springframework.validation.annotation.Validated;
+import com.muyu.common.core.web.page.TableDataInfo;
+
+/**
+ * 预警日志Controller
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+@RestController
+@RequestMapping("/logs")
+public class WarnLogsController extends BaseController
+{
+ @Resource
+ private IWarnLogsService warnLogsService;
+
+ /**
+ * 查询预警日志列表
+ */
+ @RequiresPermissions("platform:logs:list")
+ @GetMapping("/list")
+ public Result> list(WarnLogs warnLogs)
+ {
+ startPage();
+ List list = warnLogsService.selectWarnLogsList(warnLogs);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出预警日志列表
+ */
+ @RequiresPermissions("platform:logs:export")
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, WarnLogs warnLogs)
+ {
+ List list = warnLogsService.selectWarnLogsList(warnLogs);
+ ExcelUtil util = new ExcelUtil(WarnLogs.class);
+ util.exportExcel(response, list, "预警日志数据");
+ }
+
+ /**
+ * 获取预警日志详细信息
+ */
+ @RequiresPermissions("platform:logs:query")
+ @GetMapping(value = "/{id}")
+ public Result> getInfo(@PathVariable("id") Long id)
+ {
+ return success(warnLogsService.selectWarnLogsById(id));
+ }
+
+ /**
+ * 新增预警日志
+ */
+ @RequiresPermissions("platform:logs:add")
+ @PostMapping
+ public Result add(
+ @Validated @RequestBody WarnLogs warnLogs)
+ {
+ if (warnLogsService.checkIdUnique(warnLogs)) {
+ return error("新增 预警日志 '" + warnLogs + "'失败,预警日志已存在");
+ }
+ return toAjax(warnLogsService.save(warnLogs));
+ }
+
+ /**
+ * 修改预警日志
+ */
+ @RequiresPermissions("platform:logs:edit")
+ @PutMapping
+ public Result edit(
+ @Validated @RequestBody WarnLogs warnLogs)
+ {
+ if (!warnLogsService.checkIdUnique(warnLogs)) {
+ return error("修改 预警日志 '" + warnLogs + "'失败,预警日志不存在");
+ }
+ return toAjax(warnLogsService.updateById(warnLogs));
+ }
+
+ /**
+ * 删除预警日志
+ */
+ @RequiresPermissions("platform:logs:remove")
+ @DeleteMapping("/{ids}")
+ public Result remove(@PathVariable("ids") Long[] ids)
+ {
+ warnLogsService.removeBatchByIds(Arrays.asList(ids));
+ return success();
+ }
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WarnRuleController.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WarnRuleController.java
new file mode 100644
index 0000000..9ae401b
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WarnRuleController.java
@@ -0,0 +1,110 @@
+package com.muyu.platform.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import javax.annotation.Resource;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.muyu.common.security.annotation.RequiresPermissions;
+import com.muyu.platform.domain.WarnRule;
+import com.muyu.platform.service.IWarnRuleService;
+import com.muyu.common.core.web.controller.BaseController;
+import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.utils.poi.ExcelUtil;
+import com.muyu.common.security.utils.SecurityUtils;
+import org.springframework.validation.annotation.Validated;
+import com.muyu.common.core.web.page.TableDataInfo;
+
+/**
+ * 预警规则Controller
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+@RestController
+@RequestMapping("/rule")
+public class WarnRuleController extends BaseController
+{
+ @Resource
+ private IWarnRuleService warnRuleService;
+
+ /**
+ * 查询预警规则列表
+ */
+ @RequiresPermissions("platform:rule:list")
+ @GetMapping("/list")
+ public Result> list(WarnRule warnRule)
+ {
+ startPage();
+ List list = warnRuleService.selectWarnRuleList(warnRule);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出预警规则列表
+ */
+ @RequiresPermissions("platform:rule:export")
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, WarnRule warnRule)
+ {
+ List list = warnRuleService.selectWarnRuleList(warnRule);
+ ExcelUtil util = new ExcelUtil(WarnRule.class);
+ util.exportExcel(response, list, "预警规则数据");
+ }
+
+ /**
+ * 获取预警规则详细信息
+ */
+ @RequiresPermissions("platform:rule:query")
+ @GetMapping(value = "/{id}")
+ public Result> getInfo(@PathVariable("id") Long id)
+ {
+ return success(warnRuleService.selectWarnRuleById(id));
+ }
+
+ /**
+ * 新增预警规则
+ */
+ @RequiresPermissions("platform:rule:add")
+ @PostMapping
+ public Result add(
+ @Validated @RequestBody WarnRule warnRule)
+ {
+ if (warnRuleService.checkIdUnique(warnRule)) {
+ return error("新增 预警规则 '" + warnRule + "'失败,预警规则已存在");
+ }
+ return toAjax(warnRuleService.save(warnRule));
+ }
+
+ /**
+ * 修改预警规则
+ */
+ @RequiresPermissions("platform:rule:edit")
+ @PutMapping
+ public Result edit(
+ @Validated @RequestBody WarnRule warnRule)
+ {
+ if (!warnRuleService.checkIdUnique(warnRule)) {
+ return error("修改 预警规则 '" + warnRule + "'失败,预警规则不存在");
+ }
+ return toAjax(warnRuleService.updateById(warnRule));
+ }
+
+ /**
+ * 删除预警规则
+ */
+ @RequiresPermissions("platform:rule:remove")
+ @DeleteMapping("/{ids}")
+ public Result remove(@PathVariable("ids") Long[] ids)
+ {
+ warnRuleService.removeBatchByIds(Arrays.asList(ids));
+ return success();
+ }
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WarnStrategyController.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WarnStrategyController.java
new file mode 100644
index 0000000..4a7c769
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WarnStrategyController.java
@@ -0,0 +1,110 @@
+package com.muyu.platform.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import javax.annotation.Resource;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.muyu.common.security.annotation.RequiresPermissions;
+import com.muyu.platform.domain.WarnStrategy;
+import com.muyu.platform.service.IWarnStrategyService;
+import com.muyu.common.core.web.controller.BaseController;
+import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.utils.poi.ExcelUtil;
+import com.muyu.common.security.utils.SecurityUtils;
+import org.springframework.validation.annotation.Validated;
+import com.muyu.common.core.web.page.TableDataInfo;
+
+/**
+ * 预警策略Controller
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+@RestController
+@RequestMapping("/strategy")
+public class WarnStrategyController extends BaseController
+{
+ @Resource
+ private IWarnStrategyService warnStrategyService;
+
+ /**
+ * 查询预警策略列表
+ */
+ @RequiresPermissions("platform:strategy:list")
+ @GetMapping("/list")
+ public Result> list(WarnStrategy warnStrategy)
+ {
+ startPage();
+ List list = warnStrategyService.selectWarnStrategyList(warnStrategy);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出预警策略列表
+ */
+ @RequiresPermissions("platform:strategy:export")
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, WarnStrategy warnStrategy)
+ {
+ List list = warnStrategyService.selectWarnStrategyList(warnStrategy);
+ ExcelUtil util = new ExcelUtil(WarnStrategy.class);
+ util.exportExcel(response, list, "预警策略数据");
+ }
+
+ /**
+ * 获取预警策略详细信息
+ */
+ @RequiresPermissions("platform:strategy:query")
+ @GetMapping(value = "/{id}")
+ public Result> getInfo(@PathVariable("id") Long id)
+ {
+ return success(warnStrategyService.selectWarnStrategyById(id));
+ }
+
+ /**
+ * 新增预警策略
+ */
+ @RequiresPermissions("platform:strategy:add")
+ @PostMapping
+ public Result add(
+ @Validated @RequestBody WarnStrategy warnStrategy)
+ {
+ if (warnStrategyService.checkIdUnique(warnStrategy)) {
+ return error("新增 预警策略 '" + warnStrategy + "'失败,预警策略已存在");
+ }
+ return toAjax(warnStrategyService.save(warnStrategy));
+ }
+
+ /**
+ * 修改预警策略
+ */
+ @RequiresPermissions("platform:strategy:edit")
+ @PutMapping
+ public Result edit(
+ @Validated @RequestBody WarnStrategy warnStrategy)
+ {
+ if (!warnStrategyService.checkIdUnique(warnStrategy)) {
+ return error("修改 预警策略 '" + warnStrategy + "'失败,预警策略不存在");
+ }
+ return toAjax(warnStrategyService.updateById(warnStrategy));
+ }
+
+ /**
+ * 删除预警策略
+ */
+ @RequiresPermissions("platform:strategy:remove")
+ @DeleteMapping("/{ids}")
+ public Result remove(@PathVariable("ids") Long[] ids)
+ {
+ warnStrategyService.removeBatchByIds(Arrays.asList(ids));
+ return success();
+ }
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WxTestController.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WxTestController.java
new file mode 100644
index 0000000..c7b15ee
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/controller/WxTestController.java
@@ -0,0 +1,153 @@
+package com.muyu.platform.controller;
+
+
+import com.muyu.platform.domain.wx.Message;
+import com.muyu.platform.message.Article;
+import com.muyu.platform.message.NewMessage;
+import com.muyu.platform.util.TokenUtil;
+import com.thoughtworks.xstream.XStream;
+import io.micrometer.common.util.StringUtils;
+import jakarta.servlet.ServletInputStream;
+import jakarta.servlet.http.HttpServletRequest;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.*;
+
+/**
+ * @Author: Chen
+ * @name:GetWxController
+ */
+@RestController
+public class WxTestController {
+
+
+ @PostMapping("/")
+ public String receiveMessage(HttpServletRequest request) {
+ ServletInputStream inputStream = null;
+ HashMap map = new HashMap<>();
+ try {
+ inputStream = request.getInputStream();
+ SAXReader saxReader = new SAXReader();
+ //读取request输入流,获得Document对象
+ Document document = saxReader.read(inputStream);
+ //获得root结点
+ Element rootElement = document.getRootElement();
+ //获取所有的子节点
+ List elements = rootElement.elements();
+ for (Element element : elements) {
+ map.put(element.getName(), element.getStringValue());
+ }
+
+
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ } catch (DocumentException e) {
+ throw new RuntimeException(e);
+ }
+ System.out.println(map);
+ //回复消息
+ String message = "";
+ if ("图文".equals(map.get("Content"))) {
+ message = getReplyNewsMessage(map);
+ } else {
+ message = getReplyMessage(map);
+
+ }
+ return message;
+ }
+
+ /**
+ * 获得回复的消息内容
+ *
+ * @param map
+ * @return
+ */
+ private String getReplyMessage(HashMap map) {
+ Message message = new Message();
+ message.setToUserName(map.get("FromUserName"));
+ message.setFromUserName(map.get("ToUserName"));
+// message.setMsgType(map.get("MsgType"));
+ message.setMsgType("text");
+ message.setCreateTime(System.currentTimeMillis() / 1000);
+ message.setContent("自动回复:您好");
+ //XStream将java对象转换为xml字符串
+ XStream xStream = new XStream();
+ xStream.processAnnotations(Message.class);
+ String xml = xStream.toXML(message);
+ return xml;
+ }
+
+
+ @GetMapping("/")
+ public String check(@RequestParam("signature") String signature, @RequestParam("timestamp") String timestamp,
+ @RequestParam("nonce") String nonce, @RequestParam("echostr") String echostr) {
+
+ //1.将token、timestamp、nonce三个参数进行字典排序
+ String token = "asdasd";
+ List list = Arrays.asList(token, timestamp, nonce);
+ //排序
+ Collections.sort(list);
+ //2.将三个参数字符串拼接成一个字符串进行sha1加密
+ StringBuilder stringBuilder = new StringBuilder();
+ for (String s : list) {
+ stringBuilder.append(s);
+ }
+ //加密
+ try {
+ MessageDigest instance = MessageDigest.getInstance("sha1");
+ //使用sha1进行加密,获得byte数组
+ byte[] digest = instance.digest(stringBuilder.toString().getBytes());
+ StringBuilder sum = new StringBuilder();
+ for (byte b : digest) {
+ sum.append(Integer.toHexString((b >> 4) & 15));
+ sum.append(Integer.toHexString(b & 15));
+ }
+ //3.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
+ if (!StringUtils.isEmpty(signature) && signature.equals(sum.toString())) {
+ return echostr;
+ }
+
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ }
+
+ @PostMapping("/test")
+ public void test() {
+ String accessToken = TokenUtil.getAccessToken();
+ System.out.println(accessToken);
+ }
+
+ private String getReplyNewsMessage(Map map) {
+ NewMessage newsMessage = new NewMessage();
+ newsMessage.setToUserName(map.get("FromUserName"));
+ newsMessage.setFromUserName(map.get("ToUserName"));
+ newsMessage.setMsgType("news");
+ newsMessage.setCreateTime(System.currentTimeMillis() / 1000);
+ newsMessage.setArticleCount(1);
+ List articles = new ArrayList<>();
+ Article article = new Article();
+ article.setTitle("oneone哦恩恩");
+ article.setDescription("详细描述--------------信息");
+ article.setUrl("https://www.baidu.com");
+ article.setPicUrl("http://mmbiz.qpic.cn/mmbiz_jpg/RiaWwmABEMmkFKQMeQZLLYaxknlzE9CxSozVSH42iaXiaQcia5hPPUicuNYbS8dG99zsMZ1ic266ialM42Mbn8SkN54kA/0");
+ articles.add(article);
+ newsMessage.setArticles(articles);
+ //XStream将java对象转换为xml字符串
+ XStream xStream = new XStream();
+ xStream.processAnnotations(NewMessage.class);
+ String xml = xStream.toXML(newsMessage);
+ return xml;
+ }
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/mapper/WarnLogsMapper.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/mapper/WarnLogsMapper.java
new file mode 100644
index 0000000..69e67b3
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/mapper/WarnLogsMapper.java
@@ -0,0 +1,17 @@
+package com.muyu.platform.mapper;
+
+import java.util.List;
+import com.muyu.platform.domain.WarnLogs;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 预警日志Mapper接口
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+@Mapper
+public interface WarnLogsMapper extends BaseMapper{
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/mapper/WarnRuleMapper.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/mapper/WarnRuleMapper.java
new file mode 100644
index 0000000..a16dfcd
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/mapper/WarnRuleMapper.java
@@ -0,0 +1,17 @@
+package com.muyu.platform.mapper;
+
+import java.util.List;
+import com.muyu.platform.domain.WarnRule;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 预警规则Mapper接口
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+@Mapper
+public interface WarnRuleMapper extends BaseMapper{
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/mapper/WarnStrategyMapper.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/mapper/WarnStrategyMapper.java
new file mode 100644
index 0000000..4d9397e
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/mapper/WarnStrategyMapper.java
@@ -0,0 +1,17 @@
+package com.muyu.platform.mapper;
+
+import java.util.List;
+import com.muyu.platform.domain.WarnStrategy;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 预警策略Mapper接口
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+@Mapper
+public interface WarnStrategyMapper extends BaseMapper{
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/message/Article.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/message/Article.java
new file mode 100644
index 0000000..7f0b9b5
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/message/Article.java
@@ -0,0 +1,28 @@
+package com.muyu.platform.message;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @ClassName Article
+ * @Description 描述
+ * @Author Chen
+ * @Date 2024/9/18 19:13
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@XStreamAlias("item")
+public class Article {
+ @XStreamAlias("Title")
+ private String title;
+ @XStreamAlias("Description")
+ private String description;
+ @XStreamAlias("PicUrl")
+ private String picUrl;
+ @XStreamAlias("Url")
+ private String url;
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/message/NewMessage.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/message/NewMessage.java
new file mode 100644
index 0000000..17630d2
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/message/NewMessage.java
@@ -0,0 +1,34 @@
+package com.muyu.platform.message;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @ClassName NewMessage
+ * @Description 描述
+ * @Author Chen
+ * @Date 2024/9/18 19:08
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@XStreamAlias("xml")
+public class NewMessage {
+ @XStreamAlias("ToUserName")
+ private String toUserName;
+ @XStreamAlias("FromUserName")
+ private String fromUserName;
+ @XStreamAlias("CreateTime")
+ private long createTime;
+ @XStreamAlias("MsgType")
+ private String msgType;
+ @XStreamAlias("ArticleCount")
+ private int articleCount;
+ @XStreamAlias("Articles")
+ private List articles;
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/IWarnLogsService.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/IWarnLogsService.java
new file mode 100644
index 0000000..2b90b3e
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/IWarnLogsService.java
@@ -0,0 +1,37 @@
+package com.muyu.platform.service;
+
+import java.util.List;
+import com.muyu.platform.domain.WarnLogs;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 预警日志Service接口
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+public interface IWarnLogsService extends IService {
+ /**
+ * 精确查询预警日志
+ *
+ * @param id 预警日志主键
+ * @return 预警日志
+ */
+ public WarnLogs selectWarnLogsById(Long id);
+
+ /**
+ * 查询预警日志列表
+ *
+ * @param warnLogs 预警日志
+ * @return 预警日志集合
+ */
+ public List selectWarnLogsList(WarnLogs warnLogs);
+
+ /**
+ * 判断 预警日志 id是否唯一
+ * @param warnLogs 预警日志
+ * @return 结果
+ */
+ Boolean checkIdUnique(WarnLogs warnLogs);
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/IWarnRuleService.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/IWarnRuleService.java
new file mode 100644
index 0000000..cf3aedc
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/IWarnRuleService.java
@@ -0,0 +1,37 @@
+package com.muyu.platform.service;
+
+import java.util.List;
+import com.muyu.platform.domain.WarnRule;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 预警规则Service接口
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+public interface IWarnRuleService extends IService {
+ /**
+ * 精确查询预警规则
+ *
+ * @param id 预警规则主键
+ * @return 预警规则
+ */
+ public WarnRule selectWarnRuleById(Long id);
+
+ /**
+ * 查询预警规则列表
+ *
+ * @param warnRule 预警规则
+ * @return 预警规则集合
+ */
+ public List selectWarnRuleList(WarnRule warnRule);
+
+ /**
+ * 判断 预警规则 id是否唯一
+ * @param warnRule 预警规则
+ * @return 结果
+ */
+ Boolean checkIdUnique(WarnRule warnRule);
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/IWarnStrategyService.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/IWarnStrategyService.java
new file mode 100644
index 0000000..d83376b
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/IWarnStrategyService.java
@@ -0,0 +1,37 @@
+package com.muyu.platform.service;
+
+import java.util.List;
+import com.muyu.platform.domain.WarnStrategy;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 预警策略Service接口
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+public interface IWarnStrategyService extends IService {
+ /**
+ * 精确查询预警策略
+ *
+ * @param id 预警策略主键
+ * @return 预警策略
+ */
+ public WarnStrategy selectWarnStrategyById(Long id);
+
+ /**
+ * 查询预警策略列表
+ *
+ * @param warnStrategy 预警策略
+ * @return 预警策略集合
+ */
+ public List selectWarnStrategyList(WarnStrategy warnStrategy);
+
+ /**
+ * 判断 预警策略 id是否唯一
+ * @param warnStrategy 预警策略
+ * @return 结果
+ */
+ Boolean checkIdUnique(WarnStrategy warnStrategy);
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/impl/WarnLogsServiceImpl.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/impl/WarnLogsServiceImpl.java
new file mode 100644
index 0000000..32fc441
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/impl/WarnLogsServiceImpl.java
@@ -0,0 +1,92 @@
+package com.muyu.platform.service.impl;
+
+import java.util.List;
+import org.springframework.stereotype.Service;
+import com.muyu.platform.mapper.WarnLogsMapper;
+import com.muyu.platform.domain.WarnLogs;
+import com.muyu.platform.service.IWarnLogsService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.muyu.common.core.utils.StringUtils;
+import org.springframework.util.Assert;
+
+/**
+ * 预警日志Service业务层处理
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+@Service
+public class WarnLogsServiceImpl
+ extends ServiceImpl
+ implements IWarnLogsService {
+
+ /**
+ * 精确查询预警日志
+ *
+ * @param id 预警日志主键
+ * @return 预警日志
+ */
+ @Override
+ public WarnLogs selectWarnLogsById(Long id)
+ {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ Assert.notNull(id, "id不可为空");
+ queryWrapper.eq(WarnLogs::getId, id);
+ return this.getOne(queryWrapper);
+ }
+
+
+ /**
+ * 查询预警日志列表
+ *
+ * @param warnLogs 预警日志
+ * @return 预警日志
+ */
+ @Override
+ public List selectWarnLogsList(WarnLogs warnLogs)
+ {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ if (StringUtils.isNotEmpty(warnLogs.getVin())){
+ queryWrapper.eq(WarnLogs::getVin, warnLogs.getVin());
+ }
+ if (StringUtils.isNotNull(warnLogs.getWarnRuleId())){
+ queryWrapper.eq(WarnLogs::getWarnRuleId, warnLogs.getWarnRuleId());
+ }
+ if (StringUtils.isNotNull(warnLogs.getStartTime())){
+ queryWrapper.eq(WarnLogs::getStartTime, warnLogs.getStartTime());
+ }
+ if (StringUtils.isNotNull(warnLogs.getEndTime())){
+ queryWrapper.eq(WarnLogs::getEndTime, warnLogs.getEndTime());
+ }
+ if (StringUtils.isNotNull(warnLogs.getMaxValue())){
+ queryWrapper.eq(WarnLogs::getMaxValue, warnLogs.getMaxValue());
+ }
+ if (StringUtils.isNotNull(warnLogs.getMinValue())){
+ queryWrapper.eq(WarnLogs::getMinValue, warnLogs.getMinValue());
+ }
+ if (StringUtils.isNotNull(warnLogs.getAvgValue())){
+ queryWrapper.eq(WarnLogs::getAvgValue, warnLogs.getAvgValue());
+ }
+ if (StringUtils.isNotNull(warnLogs.getMedianValue())){
+ queryWrapper.eq(WarnLogs::getMedianValue, warnLogs.getMedianValue());
+ }
+ if (StringUtils.isNotNull(warnLogs.getStatus())){
+ queryWrapper.eq(WarnLogs::getStatus, warnLogs.getStatus());
+ }
+ return this.list(queryWrapper);
+ }
+
+ /**
+ * 唯一 判断
+ * @param warnLogs 预警日志
+ * @return 预警日志
+ */
+ @Override
+ public Boolean checkIdUnique(WarnLogs warnLogs) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(WarnLogs::getId, warnLogs.getId());
+ return this.count(queryWrapper) > 0;
+ }
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/impl/WarnRuleServiceImpl.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/impl/WarnRuleServiceImpl.java
new file mode 100644
index 0000000..fddf687
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/impl/WarnRuleServiceImpl.java
@@ -0,0 +1,87 @@
+package com.muyu.platform.service.impl;
+
+import java.util.List;
+
+import com.muyu.platform.mapper.WarnRuleMapper;
+import org.springframework.stereotype.Service;
+import com.muyu.platform.domain.WarnRule;
+import com.muyu.platform.service.IWarnRuleService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.muyu.common.core.utils.StringUtils;
+import org.springframework.util.Assert;
+
+/**
+ * 预警规则Service业务层处理
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+@Service
+public class WarnRuleServiceImpl
+ extends ServiceImpl
+ implements IWarnRuleService {
+
+ /**
+ * 精确查询预警规则
+ *
+ * @param id 预警规则主键
+ * @return 预警规则
+ */
+ @Override
+ public WarnRule selectWarnRuleById(Long id)
+ {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ Assert.notNull(id, "id不可为空");
+ queryWrapper.eq(WarnRule::getId, id);
+ return this.getOne(queryWrapper);
+ }
+
+
+ /**
+ * 查询预警规则列表
+ *
+ * @param warnRule 预警规则
+ * @return 预警规则
+ */
+ @Override
+ public List selectWarnRuleList(WarnRule warnRule)
+ {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ if (StringUtils.isNotEmpty(warnRule.getRuleName())){
+ queryWrapper.like(WarnRule::getRuleName, warnRule.getRuleName());
+ }
+ if (StringUtils.isNotNull(warnRule.getStrategyId())){
+ queryWrapper.eq(WarnRule::getStrategyId, warnRule.getStrategyId());
+ }
+ if (StringUtils.isNotNull(warnRule.getMsgTypeId())){
+ queryWrapper.eq(WarnRule::getMsgTypeId, warnRule.getMsgTypeId());
+ }
+ if (StringUtils.isNotNull(warnRule.getSlideTime())){
+ queryWrapper.eq(WarnRule::getSlideTime, warnRule.getSlideTime());
+ }
+ if (StringUtils.isNotNull(warnRule.getSlideFrequency())){
+ queryWrapper.eq(WarnRule::getSlideFrequency, warnRule.getSlideFrequency());
+ }
+ if (StringUtils.isNotNull(warnRule.getMaxValue())){
+ queryWrapper.eq(WarnRule::getMaxValue, warnRule.getMaxValue());
+ }
+ if (StringUtils.isNotNull(warnRule.getMinValue())){
+ queryWrapper.eq(WarnRule::getMinValue, warnRule.getMinValue());
+ }
+ return this.list(queryWrapper);
+ }
+
+ /**
+ * 唯一 判断
+ * @param warnRule 预警规则
+ * @return 预警规则
+ */
+ @Override
+ public Boolean checkIdUnique(WarnRule warnRule) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(WarnRule::getId, warnRule.getId());
+ return this.count(queryWrapper) > 0;
+ }
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/impl/WarnStrategyServiceImpl.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/impl/WarnStrategyServiceImpl.java
new file mode 100644
index 0000000..738bb3f
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/service/impl/WarnStrategyServiceImpl.java
@@ -0,0 +1,74 @@
+package com.muyu.platform.service.impl;
+
+import java.util.List;
+import org.springframework.stereotype.Service;
+import com.muyu.platform.mapper.WarnStrategyMapper;
+import com.muyu.platform.domain.WarnStrategy;
+import com.muyu.platform.service.IWarnStrategyService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.muyu.common.core.utils.StringUtils;
+import org.springframework.util.Assert;
+
+/**
+ * 预警策略Service业务层处理
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+@Service
+public class WarnStrategyServiceImpl
+ extends ServiceImpl
+ implements IWarnStrategyService {
+
+ /**
+ * 精确查询预警策略
+ *
+ * @param id 预警策略主键
+ * @return 预警策略
+ */
+ @Override
+ public WarnStrategy selectWarnStrategyById(Long id)
+ {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ Assert.notNull(id, "id不可为空");
+ queryWrapper.eq(WarnStrategy::getId, id);
+ return this.getOne(queryWrapper);
+ }
+
+
+ /**
+ * 查询预警策略列表
+ *
+ * @param warnStrategy 预警策略
+ * @return 预警策略
+ */
+ @Override
+ public List selectWarnStrategyList(WarnStrategy warnStrategy)
+ {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ if (StringUtils.isNotNull(warnStrategy.getCarTypeId())){
+ queryWrapper.eq(WarnStrategy::getCarTypeId, warnStrategy.getCarTypeId());
+ }
+ if (StringUtils.isNotNull(warnStrategy.getStrategyName())){
+ queryWrapper.like(WarnStrategy::getStrategyName, warnStrategy.getStrategyName());
+ }
+ if (StringUtils.isNotNull(warnStrategy.getMsgId())){
+ queryWrapper.eq(WarnStrategy::getMsgId, warnStrategy.getMsgId());
+ }
+ return this.list(queryWrapper);
+ }
+
+ /**
+ * 唯一 判断
+ * @param warnStrategy 预警策略
+ * @return 预警策略
+ */
+ @Override
+ public Boolean checkIdUnique(WarnStrategy warnStrategy) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(WarnStrategy::getId, warnStrategy.getId());
+ return this.count(queryWrapper) > 0;
+ }
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/util/OkHttpUtils.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/util/OkHttpUtils.java
new file mode 100644
index 0000000..d684491
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/util/OkHttpUtils.java
@@ -0,0 +1,36 @@
+package com.muyu.platform.util;
+
+import okhttp3.*;
+
+import java.io.IOException;
+
+public class OkHttpUtils {
+
+ private static final OkHttpClient client = new OkHttpClient();
+
+ public static String sendGetRequest(String urlString) {
+ Request request = new Request.Builder()
+ .url(urlString)
+ .build();
+ try (Response response = client.newCall(request).execute()) {
+ return response.body().string();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public static String sendPostRequest(String urlString, String params) {
+ RequestBody requestBody = RequestBody.create(params, MediaType.parse("application/json; charset=utf-8"));
+ Request request = new Request.Builder()
+ .url(urlString)
+ .post(requestBody)
+ .build();
+ try (Response response = client.newCall(request).execute()) {
+ return response.body().string();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/util/TokenUtil.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/util/TokenUtil.java
new file mode 100644
index 0000000..ddf7109
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/platform/util/TokenUtil.java
@@ -0,0 +1,35 @@
+package com.muyu.platform.util;
+
+import com.alibaba.fastjson2.JSON;
+import com.muyu.platform.domain.wx.AccessToken;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author: Chen //redisService.setCacheObject("WECHAT_TOKEN",wechatToken.getAccessToken(),wechatToken.getExpiresIn(), TimeUnit.SECONDS);
+ * @name:TokenUtil
+ */
+@Component
+public class TokenUtil {
+ private final static String APP_ID = "wx591e88abd208c297";
+
+ private final static String APP_SECRET = "64d92a751ef24acc8d37b2e6d7672491";
+
+ private static AccessToken accessToken = new AccessToken();
+
+
+ public static void getToken() {
+ String url = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", APP_ID, APP_SECRET);
+ String request = OkHttpUtils.sendGetRequest(url);
+ AccessToken wechatToken = JSON.parseObject(request, AccessToken.class);
+ if (wechatToken != null) {
+ accessToken.setExpiresTime(wechatToken.getExpires_in());
+ accessToken.setAccess_token(wechatToken.getAccess_token());
+ }
+ }
+
+ public static String getAccessToken() {
+ getToken();
+ return accessToken.getAccess_token();
+ }
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/banner.txt b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/banner.txt
new file mode 100644
index 0000000..0dd5eee
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/banner.txt
@@ -0,0 +1,2 @@
+Spring Boot Version: ${spring-boot.version}
+Spring Application Name: ${spring.application.name}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..e2b3575
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/bootstrap.yml
@@ -0,0 +1,48 @@
+# Tomcat
+server:
+ port: 10003
+
+# nacos线上地址
+nacos:
+ addr: 106.54.193.225:8848
+ user-name: nacos
+ password: nacos
+ namespace: one
+
+# Spring
+spring:
+ main:
+ allow-bean-definition-overriding: true
+ application:
+ # 应用名称
+ name: cloud-warn
+ profiles:
+ # 环境配置
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: ${nacos.addr}
+ # 命名空间
+ namespace: ${nacos.namespace}
+ config:
+ # 服务注册地址
+ server-addr: ${nacos.addr}
+ # 命名空间
+ namespace: ${nacos.namespace}
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ # 系统共享配置
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ # 系统环境Config共享配置
+ - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ # xxl-job 配置文件
+ - application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ # engine配置
+ - engine-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+logging:
+ level:
+ com.muyu.system.mapper: DEBUG
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/logback/dev.xml b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/logback/dev.xml
new file mode 100644
index 0000000..8b99495
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/logback/dev.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+ ${log.pattern}
+
+
+
+
+
+ ${log.path}/info.log
+
+
+
+ ${log.path}/info.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/error.log
+
+
+
+ ${log.path}/error.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/logback/prod.xml b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/logback/prod.xml
new file mode 100644
index 0000000..0fe8654
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/logback/prod.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+ ${log.sky.pattern}
+
+
+
+
+
+ ${log.path}/info.log
+
+
+
+ ${log.path}/info.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/error.log
+
+
+
+ ${log.path}/error.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+
+
+ ${log.sky.pattern}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/logback/test.xml b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/logback/test.xml
new file mode 100644
index 0000000..0fe8654
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/logback/test.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+ ${log.sky.pattern}
+
+
+
+
+
+ ${log.path}/info.log
+
+
+
+ ${log.path}/info.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/error.log
+
+
+
+ ${log.path}/error.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+
+
+ ${log.sky.pattern}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnLogsMapper.xml b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnLogsMapper.xml
new file mode 100644
index 0000000..ec2bd4d
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnLogsMapper.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, vin, warn_rule_id, start_time, end_time, max_value, min_value, avg_value, median_value, status from warn_logs
+
+
+
+
+
+
+
+ insert into warn_logs
+
+ vin,
+ warn_rule_id,
+ start_time,
+ end_time,
+ max_value,
+ min_value,
+ avg_value,
+ median_value,
+ status,
+
+
+ #{vin},
+ #{warnRuleId},
+ #{startTime},
+ #{endTime},
+ #{maxValue},
+ #{minValue},
+ #{avgValue},
+ #{medianValue},
+ #{status},
+
+
+
+
+ update warn_logs
+
+ vin = #{vin},
+ warn_rule_id = #{warnRuleId},
+ start_time = #{startTime},
+ end_time = #{endTime},
+ max_value = #{maxValue},
+ min_value = #{minValue},
+ avg_value = #{avgValue},
+ median_value = #{medianValue},
+ status = #{status},
+
+ where id = #{id}
+
+
+
+ delete from warn_logs where id = #{id}
+
+
+
+ delete from warn_logs where id in
+
+ #{id}
+
+
+
\ No newline at end of file
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnRuleMapper.xml b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnRuleMapper.xml
new file mode 100644
index 0000000..39e0ea9
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnRuleMapper.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, rule_name, strategy_id, msg_type_id, slide_time, slide_frequency, max_value, min_value from warn_rule
+
+
+
+
+
+
+
+ insert into warn_rule
+
+ rule_name,
+ strategy_id,
+ msg_type_id,
+ slide_time,
+ slide_frequency,
+ max_value,
+ min_value,
+
+
+ #{ruleName},
+ #{strategyId},
+ #{msgTypeId},
+ #{slideTime},
+ #{slideFrequency},
+ #{maxValue},
+ #{minValue},
+
+
+
+
+ update warn_rule
+
+ rule_name = #{ruleName},
+ strategy_id = #{strategyId},
+ msg_type_id = #{msgTypeId},
+ slide_time = #{slideTime},
+ slide_frequency = #{slideFrequency},
+ max_value = #{maxValue},
+ min_value = #{minValue},
+
+ where id = #{id}
+
+
+
+ delete from warn_rule where id = #{id}
+
+
+
+ delete from warn_rule where id in
+
+ #{id}
+
+
+
\ No newline at end of file
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnStrategyMapper.xml b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnStrategyMapper.xml
new file mode 100644
index 0000000..ef7feb6
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnStrategyMapper.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, car_type_id, strategy_name, msg_id from warn_strategy
+
+
+
+
+
+
+
+ insert into warn_strategy
+
+ car_type_id,
+ strategy_name,
+ msg_id,
+
+
+ #{carTypeId},
+ #{strategyName},
+ #{msgId},
+
+
+
+
+ update warn_strategy
+
+ car_type_id = #{carTypeId},
+ strategy_name = #{strategyName},
+ msg_id = #{msgId},
+
+ where id = #{id}
+
+
+
+ delete from warn_strategy where id = #{id}
+
+
+
+ delete from warn_strategy where id in
+
+ #{id}
+
+
+
\ No newline at end of file