diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-client/pom.xml b/cloud-modules/cloud-breakdown/cloud-breakdown-client/pom.xml
new file mode 100644
index 0000000..603eba0
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-client/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-breakdown
+ 3.6.3
+
+
+ cloud-breakdown-client
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ com.muyu
+ cloud-breakdown-common
+ 3.6.3
+
+
+
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-common/pom.xml b/cloud-modules/cloud-breakdown/cloud-breakdown-common/pom.xml
new file mode 100644
index 0000000..fc96ca7
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-common/pom.xml
@@ -0,0 +1,26 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-breakdown
+ 3.6.3
+
+
+ cloud-breakdown-common
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+ com.muyu
+ cloud-common-core
+
+
+
+
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/DTO/MessageDTO.java b/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/DTO/MessageDTO.java
new file mode 100644
index 0000000..5e933f7
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/DTO/MessageDTO.java
@@ -0,0 +1,93 @@
+//package com.muyu.breakdown.DTO;
+//
+//
+//import com.muyu.breakdown.domain.Messages;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.stereotype.Component;
+//
+//import java.sql.*;
+//import java.util.*;
+//
+///**
+// * @ Tool:IntelliJ IDEA
+// * @ Author:CHX
+// * @ Date:2024-09-18-15:00
+// * @ Version:1.0
+// * @ Description:数据库连接层
+// * @author Lenovo
+// */
+//@Component
+//public class MessageDTO {
+// private static final String DB_URL = "jdbc:mysql://106.54.193.225:3306/one";
+// private static final String USER = "root";
+// private static final String PASSWORD = "bawei2112A";
+//
+// // 2. 建立数据库连接
+// Connection connection;
+// // 构造函数,初始化数据库连接
+// // 保存消息到数据库
+// public void saveMessage(Messages message) {
+// String sql = "INSERT INTO sys_messages (sender_id, receiver_id, content) VALUES (?, ?, ?)";
+// try {
+// Class.forName("com.mysql.cj.jdbc.Driver");
+// } catch (ClassNotFoundException e) {
+// throw new RuntimeException(e);
+// }
+// try {
+// connection = DriverManager.getConnection(DB_URL, USER, PASSWORD);
+// } catch (SQLException e) {
+// throw new RuntimeException(e);
+// }
+// try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+// preparedStatement.setInt(1, message.getSenderId());
+// preparedStatement.setInt(2, message.getReceiverId());
+// preparedStatement.setString(3, message.getContent());
+// // 执行添加操作
+// preparedStatement.executeUpdate();
+// } catch (SQLException e) {
+// throw new RuntimeException(e);
+// }
+// try {
+// connection.close();
+// } catch (SQLException e) {
+// throw new RuntimeException(e);
+// }
+// }
+//
+// // 获取所有消息
+// public List getAllMessages(int receiverId){
+// String sql = "SELECT * FROM sys_messages WHERE receiver_id = ?";
+// try {
+// Class.forName("com.mysql.cj.jdbc.Driver");
+// } catch (ClassNotFoundException e) {
+// throw new RuntimeException(e);
+// }
+// List messages = new ArrayList<>();
+// try {
+// connection = DriverManager.getConnection(DB_URL, USER, PASSWORD);
+// } catch (SQLException e) {
+// throw new RuntimeException(e);
+// }
+// try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
+// preparedStatement.setInt(1, receiverId);
+// // 执行查询操作
+// ResultSet rs = preparedStatement.executeQuery();
+// while (rs.next()) {
+// Messages message = new Messages(rs.getInt("sender_id"), receiverId, rs.getString("content"));
+//
+// // 添加到消息列表
+// messages.add(message);
+// }
+// } catch (SQLException e) {
+// throw new RuntimeException(e);
+// }
+// try {
+// connection.close();
+// } catch (SQLException e) {
+// throw new RuntimeException(e);
+// }
+// // 返回消息列表
+// return messages;
+// }
+//
+//}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/BreakDown.java b/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/BreakDown.java
new file mode 100644
index 0000000..208c12b
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/BreakDown.java
@@ -0,0 +1,74 @@
+package com.muyu.breakdown.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.muyu.common.core.annotation.Excel;
+import com.muyu.common.core.web.domain.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @author Lenovo
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-17-15:10
+ * @ Version:1.0
+ * @ Description:故障实体类
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("sys_car_fault")
+public class BreakDown extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+
+ @TableId(value = "id", type = IdType.AUTO)
+ @Excel(name = "主键")
+ private Long id;
+ /**
+ * 故障码
+ */
+ @Excel(name = "故障码")
+ private String faultCode;
+ /**
+ * 故障类型
+ */
+ @Excel(name = "故障类型")
+ private String faultType;
+ /**
+ * 故障标签
+ */
+ @Excel(name = "故障标签")
+ private String faultLabel;
+ /**
+ * 故障位
+ */
+ @Excel(name = "故障位")
+ private String faultBit;
+ /**
+ * 故障值
+ */
+ @Excel(name = "故障值")
+ private String faultValue;
+ /**
+ * 故障级别
+ */
+ @Excel(name = "故障级别")
+ private String faultWarn;
+ /**
+ * 报警状态(Y.是,N.否)
+ */
+ @Excel(name = "报警状态")
+ private String faultStatus;
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/FaultLog.java b/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/FaultLog.java
new file mode 100644
index 0000000..3dd3a01
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/FaultLog.java
@@ -0,0 +1,55 @@
+package com.muyu.breakdown.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;
+
+/**
+ * 故障日志对象 fault_log
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Setter
+@Getter
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("fault_log")
+public class FaultLog extends BaseEntity{
+ private static final long serialVersionUID = 1L;
+
+ /** id */
+ @TableId( type = IdType.AUTO)
+ private Long id;
+
+ /** 故障码 */
+ @Excel(name = "故障码")
+ private String faultCode;
+
+ /** 车辆VIN */
+ @Excel(name = "车辆VIN")
+ private String carVin;
+
+ /** 开始报警时间 */
+ @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;
+
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/MessageMap.java b/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/MessageMap.java
new file mode 100644
index 0000000..c75401f
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/MessageMap.java
@@ -0,0 +1,23 @@
+package com.muyu.breakdown.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-20-15:31
+ * @ Version:1.0
+ * @ Description:
+ * @author Lenovo
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@SuperBuilder
+public class MessageMap {
+ private String key;
+ private String value;
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/Messages.java b/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/Messages.java
new file mode 100644
index 0000000..4e430fb
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/Messages.java
@@ -0,0 +1,39 @@
+package com.muyu.breakdown.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.muyu.common.core.annotation.Excel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-18-14:51
+ * @ Version:1.0
+ * @ Description:站内信实体类
+ * @author Lenovo
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("sys_messages")
+public class Messages {
+ @TableId(value = "id", type = IdType.AUTO)
+ @Excel(name = "消息ID")
+ private Long id;
+ @Excel(name = "发送者ID")
+ private String senderId;
+ @Excel(name = "接收者ID")
+ private String receiverId;
+ @Excel(name = "消息内容")
+ private String content;
+ @Excel(name = "发送时间")
+ private Date createTime;
+ @Excel(name = "消息状态")
+ private String status;
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/SysCarMessage.java b/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/SysCarMessage.java
new file mode 100644
index 0000000..7cadf9c
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-common/src/main/java/com/muyu/breakdown/domain/SysCarMessage.java
@@ -0,0 +1,43 @@
+package com.muyu.breakdown.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-20-15:35
+ * @ Version:1.0
+ * @ Description:报文
+ * @author Lenovo
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@SuperBuilder
+@TableName("sys_car_message")
+public class SysCarMessage {
+ /**
+ * id
+ */
+ private Integer id;
+ /**
+ * 车辆型号编码
+ */
+ private String modelCode;
+ /**
+ * 车辆报文类型编码
+ */
+ private String messageTypeCode;
+ /**
+ * 开始位下标
+ */
+ private String messageStartIndex;
+ /**
+ * 结束位下标
+ */
+ private String messageEndIndex;
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-remote/pom.xml b/cloud-modules/cloud-breakdown/cloud-breakdown-remote/pom.xml
new file mode 100644
index 0000000..c3b50cc
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-remote/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-breakdown
+ 3.6.3
+
+
+ cloud-breakdown-remote
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ com.muyu
+ cloud-breakdown-common
+ 3.6.3
+
+
+
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-modules/cloud-breakdown/cloud-breakdown-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/pom.xml b/cloud-modules/cloud-breakdown/cloud-breakdown-server/pom.xml
new file mode 100644
index 0000000..a208436
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/pom.xml
@@ -0,0 +1,92 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-breakdown
+ 3.6.3
+
+
+ cloud-breakdown-server
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ com.mysql
+ mysql-connector-j
+
+
+
+
+ com.muyu
+ cloud-common-datasource
+
+
+
+
+ com.muyu
+ cloud-common-datascope
+
+
+
+
+ com.muyu
+ cloud-common-log
+
+
+
+
+ com.muyu
+ cloud-common-api-doc
+
+
+
+
+ com.muyu
+ cloud-common-xxl
+
+
+
+ com.muyu
+ cloud-common-rabbit
+
+
+
+ com.muyu
+ cloud-breakdown-common
+ 3.6.3
+
+
+
+
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/BreakDownApplication.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/BreakDownApplication.java
new file mode 100644
index 0000000..3d4869c
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/BreakDownApplication.java
@@ -0,0 +1,23 @@
+package com.muyu;
+
+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;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-17-15:00
+ * @ Version:1.0
+ * @ Description:故障启动类
+ * @author Lenovo
+ */
+@EnableCustomConfig
+@EnableMyFeignClients
+@SpringBootApplication
+public class BreakDownApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(BreakDownApplication.class, args);
+ }
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/config/MybatisPlusConfig.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..5a1131d
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/config/MybatisPlusConfig.java
@@ -0,0 +1,37 @@
+package com.muyu.breakdown.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-17-15:41
+ * @ Version:1.0
+ * @ Description:mybatisplus配置类
+ * @author Lenovo
+ */
+//@Configuration
+//public class MybatisPlusConfig {
+// /**
+// * 添加分页插件
+// */
+// @Bean
+// public MybatisPlusInterceptor mybatisPlusInterceptor() {
+// MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+// // 如果配置多个插件, 切记分页最后添加
+// interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+// // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
+// return interceptor;
+// }
+// @Bean
+// public MybatisConfiguration mybatisConfiguration(){
+// MybatisConfiguration configuration = new MybatisConfiguration();
+// return configuration;
+// }
+//
+//}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/config/RabbitMQConfig.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/config/RabbitMQConfig.java
new file mode 100644
index 0000000..a735a6e
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/config/RabbitMQConfig.java
@@ -0,0 +1,56 @@
+package com.muyu.breakdown.config;
+
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.FanoutExchange;
+import org.springframework.amqp.core.Queue;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+/**
+ * 绑定交换机与队列
+ * */
+@Configuration
+public class RabbitMQConfig {
+
+ // 1.生命注册fanout模式的交换机
+ @Bean
+ public FanoutExchange fanoutExchange(){
+ //1.fanout模式的路由名称 2.是否持久化 3. 是否自动删除
+ return new FanoutExchange("fanout",true,false);
+ }
+ // 2.生命队列 sms.fanout.queue email.fanout.queue,duanxin.fanout.queue
+ @Bean
+ public Queue duanxinQueue(){
+ return new Queue("duanxin",true);
+ }
+
+
+ @Bean
+ public Queue emailQueue(){
+ return new Queue("email",false);
+ }
+
+ @Bean
+ public Queue smsQueue(){
+ return new Queue("sms",false);
+ }
+
+ // 3.完成绑定关系(队列和交换机完成绑定关系
+ @Bean
+ public Binding duanxinExchange(){
+ return BindingBuilder.bind(duanxinQueue()).to(fanoutExchange());
+ }
+
+
+ @Bean
+ public Binding emailExchange(){
+ return BindingBuilder.bind(emailQueue()).to(fanoutExchange());
+ }
+
+ @Bean
+ public Binding smsExchange(){
+ return BindingBuilder.bind(smsQueue()).to(fanoutExchange());
+ }
+
+ // 4.生命注册fanout模式的交换机
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/config/RabbitMQDirectConfig.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/config/RabbitMQDirectConfig.java
new file mode 100644
index 0000000..e0b2f8b
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/config/RabbitMQDirectConfig.java
@@ -0,0 +1,62 @@
+package com.muyu.breakdown.config;
+
+import org.springframework.amqp.core.*;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.HashMap;
+
+/**
+ * 绑定交换机与队列
+ * */
+@Configuration
+public class RabbitMQDirectConfig {
+ /**
+ * 与fanout发布订阅模式不同的是 Direct 需要在Binding规定对应的 路由名称
+ * */
+ // 1.生命注册fanout模式的交换机
+ @Bean
+ public DirectExchange directExchange(){
+ //1.fanout模式的路由名称 2.是否持久化 3. 是否自动删除
+ return new DirectExchange("direct",true,false);
+ }
+ // 2.生命队列 sms.fanout.queue email.fanout.queue,duanxin.fanout.queue
+ @Bean
+ public Queue directduanxinQueue(){
+ HashMap map = new HashMap<>();
+ map.put("x-delayed-letter-exchange","direct");
+ map.put("x-delayed-routing-key","directduanxin");
+ map.put("x-message-ttl",10000);
+ return QueueBuilder.durable("directduanxin").withArguments(map).build();
+ }
+
+
+ @Bean
+ public Queue directemailQueue(){
+ return new Queue("directemail",false);
+ }
+
+ @Bean
+ public Queue directsmsQueue(){
+ return new Queue("directsms",false);
+ }
+
+ // 3.完成绑定关系(队列和交换机完成绑定关系
+ @Bean
+ public Binding directduanxinExchange(){
+ return BindingBuilder.bind(directduanxinQueue()).to(directExchange()).with("directduanxin");
+ }
+
+
+ @Bean
+ public Binding directemailExchange(){
+ return BindingBuilder.bind(directemailQueue()).to(directExchange()).with("directemail");
+ }
+
+ @Bean
+ public Binding directsmsExchange(){
+ return BindingBuilder.bind(directsmsQueue()).to(directExchange()).with("directsms");
+ }
+
+ // 4.生命注册fanout模式的交换机
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/config/RabbitMQTopicConfig.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/config/RabbitMQTopicConfig.java
new file mode 100644
index 0000000..58630e5
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/config/RabbitMQTopicConfig.java
@@ -0,0 +1,59 @@
+package com.muyu.breakdown.config;
+
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.core.TopicExchange;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 绑定交换机与队列
+ * */
+@Configuration
+public class RabbitMQTopicConfig {
+ /**
+ * 与fanout发布订阅模式不同的是 Direct 需要在Binding规定对应的 路由名称
+ * */
+ // 1.生命注册fanout模式的交换机
+ @Bean
+ public TopicExchange topicExchange(){
+ //1.fanout模式的路由名称 2.是否持久化 3. 是否自动删除
+ return new TopicExchange("topic",true,false);
+ }
+ // 2.生命队列 sms.fanout.queue email.fanout.queue,duanxin.fanout.queue
+ @Bean
+ public Queue topicduanxinQueue(){
+ return new Queue("topicduanxin.test.one",true);
+ }
+
+
+ @Bean
+ public Queue topicemailQueue(){
+ return new Queue("topicemail.test.two",false);
+ }
+
+ @Bean
+ public Queue topicsmsQueue(){
+ return new Queue("topicsms.test.three",false);
+ }
+
+ // 3.完成绑定关系(队列和交换机完成绑定关系
+ @Bean
+ public Binding topicduanxinExchange(){
+ return BindingBuilder.bind(topicduanxinQueue()).to(topicExchange()).with("topic.#");
+ }
+
+
+ @Bean
+ public Binding topicemailExchange(){
+ return BindingBuilder.bind(topicemailQueue()).to(topicExchange()).with("topic.*");
+ }
+
+ @Bean
+ public Binding topicsmsExchange(){
+ return BindingBuilder.bind(topicsmsQueue()).to(topicExchange()).with("topic.test.#");
+ }
+
+ // 4.生命注册fanout模式的交换机
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/controller/BreakDownController.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/controller/BreakDownController.java
new file mode 100644
index 0000000..1e8dea0
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/controller/BreakDownController.java
@@ -0,0 +1,115 @@
+package com.muyu.breakdown.controller;
+
+import com.muyu.breakdown.domain.BreakDown;
+import com.muyu.breakdown.domain.MessageMap;
+import com.muyu.breakdown.service.BreakDownService;
+import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.utils.poi.ExcelUtil;
+import com.muyu.common.core.web.controller.BaseController;
+import com.muyu.common.core.web.page.TableDataInfo;
+import com.muyu.common.security.annotation.RequiresPermissions;
+import com.muyu.common.security.utils.SecurityUtils;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-17-15:13
+ * @ Version:1.0
+ * @ Description:故障管理实体类
+ * @author Lenovo
+ */
+@RestController
+@RequestMapping("/breakdown")
+public class BreakDownController extends BaseController {
+
+ @Autowired
+ private BreakDownService breakDownService;
+ /**
+ * 查询车辆故障列表
+ */
+ @RequiresPermissions("breakdown:breakdown:list")
+ @GetMapping("/list")
+ public Result> list(BreakDown breakDown)
+ {
+ startPage();
+ List list = breakDownService.selectBreakDownList(breakDown);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出车辆故障列表
+ */
+ @RequiresPermissions("breakdown:breakdown:export")
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, BreakDown breakDown)
+ {
+ List list = breakDownService.selectBreakDownList(breakDown);
+ ExcelUtil util = new ExcelUtil(BreakDown.class);
+ util.exportExcel(response, list, "车辆故障数据");
+ }
+
+ /**
+ * 获取车辆故障详细信息
+ */
+ @RequiresPermissions("breakdown:breakdown:query")
+ @GetMapping(value = "/{id}")
+ public Result> getInfo(@PathVariable("id") Long id)
+ {
+ return success(breakDownService.selectBreakDownById(id));
+ }
+
+ /**
+ * 新增车辆故障
+ */
+ @RequiresPermissions("breakdown:breakdown:add")
+ @PostMapping
+ public Result add(
+ @Validated @RequestBody BreakDown breakDown)
+ {
+ if (breakDownService.checkIdUnique(breakDown)) {
+ return error("新增 车辆故障 '" + breakDown + "'失败,车辆故障已存在");
+ }
+ breakDown.setCreateBy(SecurityUtils.getUsername());
+ return toAjax(breakDownService.save(breakDown));
+ }
+
+ /**
+ * 修改车辆故障
+ */
+ @RequiresPermissions("breakdown:breakdown:edit")
+ @PutMapping
+ public Result edit(
+ @Validated @RequestBody BreakDown breakDown)
+ {
+ if (!breakDownService.checkIdUnique(breakDown)) {
+ return error("修改 车辆故障 '" + breakDown + "'失败,车辆故障不存在");
+ }
+ breakDown.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(breakDownService.updateById(breakDown));
+ }
+
+ /**
+ * 删除车辆故障
+ */
+ @RequiresPermissions("breakdown:breakdown:remove")
+ @DeleteMapping("/{ids}")
+ public Result remove(@PathVariable("ids") Long[] ids)
+ {
+ breakDownService.removeBatchByIds(Arrays.asList(ids));
+ return success();
+ }
+
+ public Result getMessages(MessageMap messageMap) {
+ Map messages =breakDownService.getMessages(messageMap);
+ return Result.success(messages);
+ }
+
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/controller/FaultLogController.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/controller/FaultLogController.java
new file mode 100644
index 0000000..d66c519
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/controller/FaultLogController.java
@@ -0,0 +1,113 @@
+package com.muyu.breakdown.controller;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.muyu.breakdown.domain.FaultLog;
+import com.muyu.breakdown.service.IFaultLogService;
+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.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("/log")
+public class FaultLogController extends BaseController
+{
+ @Resource
+ private IFaultLogService faultLogService;
+
+ /**
+ * 查询故障日志列表
+ */
+ @RequiresPermissions("platform:log:list")
+ @GetMapping("/list")
+ public Result> list(FaultLog faultLog)
+ {
+ startPage();
+ List list = faultLogService.selectFaultLogList(faultLog);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出故障日志列表
+ */
+ @RequiresPermissions("platform:log:export")
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, FaultLog faultLog)
+ {
+ List list = faultLogService.selectFaultLogList(faultLog);
+ ExcelUtil util = new ExcelUtil(FaultLog.class);
+ util.exportExcel(response, list, "故障日志数据");
+ }
+
+ /**
+ * 获取故障日志详细信息
+ */
+ @RequiresPermissions("platform:log:query")
+ @GetMapping(value = "/{id}")
+ public Result> getInfo(@PathVariable("id") Long id)
+ {
+ return success(faultLogService.selectFaultLogById(id));
+ }
+
+ /**
+ * 新增故障日志
+ */
+ @RequiresPermissions("platform:log:add")
+ @PostMapping
+ public Result add(
+ @Validated @RequestBody FaultLog faultLog)
+ {
+ if (faultLogService.checkIdUnique(faultLog)) {
+ return error("新增 故障日志 '" + faultLog + "'失败,故障日志已存在");
+ }
+ faultLog.setCreateBy(SecurityUtils.getUsername());
+ return toAjax(faultLogService.save(faultLog));
+ }
+
+ /**
+ * 修改故障日志
+ */
+ @RequiresPermissions("platform:log:edit")
+ @PutMapping
+ public Result edit(
+ @Validated @RequestBody FaultLog faultLog)
+ {
+ if (!faultLogService.checkIdUnique(faultLog)) {
+ return error("修改 故障日志 '" + faultLog + "'失败,故障日志不存在");
+ }
+ faultLog.setUpdateBy(SecurityUtils.getUsername());
+ return toAjax(faultLogService.updateById(faultLog));
+ }
+
+ /**
+ * 删除故障日志
+ */
+ @RequiresPermissions("platform:log:remove")
+ @DeleteMapping("/{ids}")
+ public Result remove(@PathVariable("ids") Long[] ids)
+ {
+ faultLogService.removeBatchByIds(Arrays.asList(ids));
+ return success();
+ }
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/controller/StationMessageController.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/controller/StationMessageController.java
new file mode 100644
index 0000000..2e2fdf9
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/controller/StationMessageController.java
@@ -0,0 +1,42 @@
+package com.muyu.breakdown.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.muyu.breakdown.domain.Messages;
+import com.muyu.breakdown.service.BreakDownService;
+import com.muyu.breakdown.service.StationMessageService;
+import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.web.controller.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-18-12:01
+ * @ Version:1.0
+ * @ Description:站内信控制层
+ * @author Lenovo
+ */
+@RestController
+@RequestMapping("/stationMessage")
+public class StationMessageController extends BaseController {
+ @Autowired
+ private StationMessageService stationMessageService;
+
+
+ /**
+ * 根据当前用户id获取站内信列表
+ * @param receiverId 当前用户id
+ * @return 站内信列表
+ */
+ @GetMapping("/getMessageList")
+ public Result> list(@RequestParam("receiverId") String receiverId){
+ List list = stationMessageService.list(new LambdaQueryWrapper<>() {{
+ eq(Messages::getReceiverId, receiverId);
+ }});
+ return Result.success(list);
+ }
+
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/controller/SysCarMessageController.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/controller/SysCarMessageController.java
new file mode 100644
index 0000000..11bba59
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/controller/SysCarMessageController.java
@@ -0,0 +1,20 @@
+package com.muyu.breakdown.controller;
+
+import com.muyu.breakdown.service.SysCarMessageService;
+import com.muyu.common.core.web.controller.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-20-15:41
+ * @ Version:1.0
+ * @ Description:报文模版控制层
+ * @author Lenovo
+ */
+@RestController
+public class SysCarMessageController extends BaseController {
+ @Autowired
+ private SysCarMessageService sysCarMessageService;
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/mapper/BreakDownMapper.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/mapper/BreakDownMapper.java
new file mode 100644
index 0000000..8f93626
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/mapper/BreakDownMapper.java
@@ -0,0 +1,18 @@
+package com.muyu.breakdown.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.muyu.breakdown.domain.BreakDown;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-17-15:14
+ * @ Version:1.0
+ * @ Description:故障管理持久层
+ * @author Lenovo
+ */
+@Mapper
+public interface BreakDownMapper extends MPJBaseMapper {
+
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/mapper/FaultLogMapper.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/mapper/FaultLogMapper.java
new file mode 100644
index 0000000..d5f1d7e
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/mapper/FaultLogMapper.java
@@ -0,0 +1,17 @@
+package com.muyu.breakdown.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muyu.breakdown.domain.FaultLog;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 故障日志Mapper接口
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+@Mapper
+public interface FaultLogMapper extends BaseMapper{
+
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/mapper/StationMessageMapper.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/mapper/StationMessageMapper.java
new file mode 100644
index 0000000..450ebb4
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/mapper/StationMessageMapper.java
@@ -0,0 +1,18 @@
+package com.muyu.breakdown.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.muyu.breakdown.domain.Messages;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-18-14:57
+ * @ Version:1.0
+ * @ Description:站内信持久层
+ * @author Lenovo
+ */
+@Mapper
+public interface StationMessageMapper extends MPJBaseMapper {
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/mapper/SysCarMessageMapper.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/mapper/SysCarMessageMapper.java
new file mode 100644
index 0000000..5629f33
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/mapper/SysCarMessageMapper.java
@@ -0,0 +1,17 @@
+package com.muyu.breakdown.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.muyu.breakdown.domain.SysCarMessage;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-20-15:54
+ * @ Version:1.0
+ * @ Description:
+ * @author Lenovo
+ */
+@Mapper
+public interface SysCarMessageMapper extends MPJBaseMapper {
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/BreakDownService.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/BreakDownService.java
new file mode 100644
index 0000000..325424c
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/BreakDownService.java
@@ -0,0 +1,43 @@
+package com.muyu.breakdown.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.muyu.breakdown.domain.BreakDown;
+import com.muyu.breakdown.domain.MessageMap;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-17-15:31
+ * @ Version:1.0
+ * @ Description:故障管理业务层
+ * @author Lenovo
+ */
+public interface BreakDownService extends IService {
+ /**
+ * 精确查询车辆故障
+ *
+ * @param id 车辆故障主键
+ * @return 车辆故障
+ */
+ public BreakDown selectBreakDownById(Long id);
+
+ /**
+ * 查询车辆故障列表
+ *
+ * @param breakDown 车辆故障
+ * @return 车辆故障集合
+ */
+ public List selectBreakDownList(BreakDown breakDown);
+
+ /**
+ * 判断 车辆故障 id是否唯一
+ * @param breakDown 车辆故障
+ * @return 结果
+ */
+ Boolean checkIdUnique(BreakDown breakDown);
+
+ Map getMessages(MessageMap messageMap);
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/IFaultLogService.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/IFaultLogService.java
new file mode 100644
index 0000000..e6ef523
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/IFaultLogService.java
@@ -0,0 +1,37 @@
+package com.muyu.breakdown.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.muyu.breakdown.domain.FaultLog;
+
+/**
+ * 故障日志Service接口
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+public interface IFaultLogService extends IService {
+ /**
+ * 精确查询故障日志
+ *
+ * @param id 故障日志主键
+ * @return 故障日志
+ */
+ public FaultLog selectFaultLogById(Long id);
+
+ /**
+ * 查询故障日志列表
+ *
+ * @param faultLog 故障日志
+ * @return 故障日志集合
+ */
+ public List selectFaultLogList(FaultLog faultLog);
+
+ /**
+ * 判断 故障日志 id是否唯一
+ * @param faultLog 故障日志
+ * @return 结果
+ */
+ Boolean checkIdUnique(FaultLog faultLog);
+
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/StationMessageService.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/StationMessageService.java
new file mode 100644
index 0000000..5af194c
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/StationMessageService.java
@@ -0,0 +1,19 @@
+package com.muyu.breakdown.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.muyu.breakdown.domain.Messages;
+
+import java.util.List;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-18-14:56
+ * @ Version:1.0
+ * @ Description:
+ * @author Lenovo
+ */
+public interface StationMessageService extends IService {
+
+ List getMessageList(String receiverId);
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/SysCarMessageService.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/SysCarMessageService.java
new file mode 100644
index 0000000..f0103b6
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/SysCarMessageService.java
@@ -0,0 +1,15 @@
+package com.muyu.breakdown.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.muyu.breakdown.domain.SysCarMessage;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-20-15:42
+ * @ Version:1.0
+ * @ Description:
+ * @author Lenovo
+ */
+public interface SysCarMessageService extends IService {
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/impl/BreakDownServiceImpl.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/impl/BreakDownServiceImpl.java
new file mode 100644
index 0000000..62c0085
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/impl/BreakDownServiceImpl.java
@@ -0,0 +1,97 @@
+package com.muyu.breakdown.service.impl;
+
+import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.muyu.breakdown.domain.BreakDown;
+import com.muyu.breakdown.domain.MessageMap;
+import com.muyu.breakdown.domain.SysCarMessage;
+import com.muyu.breakdown.mapper.BreakDownMapper;
+import com.muyu.breakdown.service.BreakDownService;
+import com.muyu.breakdown.service.SysCarMessageService;
+import com.muyu.common.core.utils.StringUtils;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-17-15:31
+ * @ Version:1.0
+ * @ Description:故障管理业务实现层
+ * @author Lenovo
+ */
+@Service
+public class BreakDownServiceImpl extends ServiceImpl implements BreakDownService {
+
+ @Autowired
+ private SysCarMessageService sysCarMessageService;
+ @Autowired
+ private RabbitTemplate rabbitTemplate;
+ /**
+ * 精确查询车辆故障
+ *
+ * @param id 车辆故障主键
+ * @return 车辆故障
+ */
+ @Override
+ public BreakDown selectBreakDownById(Long id)
+ {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ Assert.notNull(id, "id不可为空");
+ queryWrapper.eq(BreakDown::getId, id);
+ return this.getOne(queryWrapper);
+ }
+
+
+ /**
+ * 查询车辆故障列表
+ *
+ * @param breakDown 车辆故障
+ * @return 车辆故障
+ */
+ @Override
+ public List selectBreakDownList(BreakDown breakDown)
+ {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ if (StringUtils.isNotEmpty(breakDown.getFaultCode())){
+ queryWrapper.eq(BreakDown::getFaultCode, breakDown.getFaultCode());
+ }
+ if (StringUtils.isNotEmpty(breakDown.getFaultType())){
+ queryWrapper.eq(BreakDown::getFaultType, breakDown.getFaultType());
+ }
+ return this.list(queryWrapper);
+ }
+
+ /**
+ * 唯一 判断
+ * @param breakDown 车辆故障
+ * @return 车辆故障
+ */
+ @Override
+ public Boolean checkIdUnique(BreakDown breakDown) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(BreakDown::getId, breakDown.getId());
+ return this.count(queryWrapper) > 0;
+ }
+
+ @Override
+ public Map getMessages(MessageMap messageMap) {
+
+ return null;
+ }
+
+// @RabbitListener(queues = "car.message.queue")
+// private void sendMessage(String message) {
+//
+// }
+
+
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/impl/FaultLogServiceImpl.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/impl/FaultLogServiceImpl.java
new file mode 100644
index 0000000..7124779
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/impl/FaultLogServiceImpl.java
@@ -0,0 +1,78 @@
+package com.muyu.breakdown.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.muyu.breakdown.domain.FaultLog;
+import com.muyu.breakdown.mapper.FaultLogMapper;
+import com.muyu.breakdown.service.IFaultLogService;
+import com.muyu.common.core.utils.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+import java.util.List;
+
+/**
+ * 故障日志Service业务层处理
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+@Service
+public class FaultLogServiceImpl
+ extends ServiceImpl
+ implements IFaultLogService {
+
+ /**
+ * 精确查询故障日志
+ *
+ * @param id 故障日志主键
+ * @return 故障日志
+ */
+ @Override
+ public FaultLog selectFaultLogById(Long id)
+ {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ Assert.notNull(id, "id不可为空");
+ queryWrapper.eq(FaultLog::getId, id);
+ return this.getOne(queryWrapper);
+ }
+
+
+ /**
+ * 查询故障日志列表
+ *
+ * @param faultLog 故障日志
+ * @return 故障日志
+ */
+ @Override
+ public List selectFaultLogList(FaultLog faultLog)
+ {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ if (StringUtils.isNotEmpty(faultLog.getFaultCode())){
+ queryWrapper.eq(FaultLog::getFaultCode, faultLog.getFaultCode());
+ }
+ if (StringUtils.isNotEmpty(faultLog.getCarVin())){
+ queryWrapper.eq(FaultLog::getCarVin, faultLog.getCarVin());
+ }
+ if (faultLog.getStartTime()!=null){
+ queryWrapper.eq(FaultLog::getStartTime, faultLog.getStartTime());
+ }
+ if (faultLog.getEndTime()!=null){
+ queryWrapper.eq(FaultLog::getEndTime, faultLog.getEndTime());
+ }
+ return this.list(queryWrapper);
+ }
+
+ /**
+ * 唯一 判断
+ * @param faultLog 故障日志
+ * @return 故障日志
+ */
+ @Override
+ public Boolean checkIdUnique(FaultLog faultLog) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(FaultLog::getId, faultLog.getId());
+ return this.count(queryWrapper) > 0;
+ }
+
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/impl/StationMessageServiceImpl.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/impl/StationMessageServiceImpl.java
new file mode 100644
index 0000000..462db1f
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/impl/StationMessageServiceImpl.java
@@ -0,0 +1,35 @@
+package com.muyu.breakdown.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.muyu.breakdown.domain.Messages;
+import com.muyu.breakdown.mapper.StationMessageMapper;
+import com.muyu.breakdown.service.StationMessageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-18-14:56
+ * @ Version:1.0
+ * @ Description:站内信业务实现层
+ * @author Lenovo
+ */
+
+@Service
+public class StationMessageServiceImpl
+ extends ServiceImpl
+ implements StationMessageService {
+
+ @Autowired
+ private StationMessageMapper stationMessageMapper;
+
+ @Override
+ public List getMessageList(String receiverId) {
+
+ return null;
+ }
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/impl/SysCarMessageServiceImpl.java b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/impl/SysCarMessageServiceImpl.java
new file mode 100644
index 0000000..754fc9b
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/java/com/muyu/breakdown/service/impl/SysCarMessageServiceImpl.java
@@ -0,0 +1,19 @@
+package com.muyu.breakdown.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.muyu.breakdown.domain.SysCarMessage;
+import com.muyu.breakdown.mapper.SysCarMessageMapper;
+import com.muyu.breakdown.service.SysCarMessageService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @ Tool:IntelliJ IDEA
+ * @ Author:CHX
+ * @ Date:2024-09-20-15:42
+ * @ Version:1.0
+ * @ Description:
+ * @author Lenovo
+ */
+@Service
+public class SysCarMessageServiceImpl extends ServiceImpl implements SysCarMessageService {
+}
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/banner.txt b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/banner.txt
new file mode 100644
index 0000000..0dd5eee
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-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-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..f4097e8
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/bootstrap.yml
@@ -0,0 +1,60 @@
+# Tomcat
+server:
+ port: 9702
+
+# nacos线上地址
+nacos:
+ addr: 127.0.0.1:8848
+ user-name: nacos
+ password: nacos
+ namespace: one
+# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all
+# Spring
+spring:
+ amqp:
+ deserialization:
+ trust:
+ all: true
+ main:
+ allow-bean-definition-overriding: true
+ application:
+ # 应用名称
+ name: cloud-breakdown
+ profiles:
+ # 环境配置
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: ${nacos.addr}
+ # nacos用户名
+ username: ${nacos.user-name}
+ # nacos密码
+ password: ${nacos.password}
+ # 命名空间
+ namespace: ${nacos.namespace}
+ config:
+ # 服务注册地址
+ server-addr: ${nacos.addr}
+ # nacos用户名
+ username: ${nacos.user-name}
+ # nacos密码
+ password: ${nacos.password}
+ # 命名空间
+ 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}
+ # rabbit 配置文件
+ - application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+logging:
+ level:
+ com.muyu.breakdown.mapper: DEBUG
diff --git a/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/logback/dev.xml b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/logback/dev.xml
new file mode 100644
index 0000000..34cd186
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-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-breakdown/cloud-breakdown-server/src/main/resources/logback/prod.xml b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/logback/prod.xml
new file mode 100644
index 0000000..1193d09
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-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-breakdown/cloud-breakdown-server/src/main/resources/logback/test.xml b/cloud-modules/cloud-breakdown/cloud-breakdown-server/src/main/resources/logback/test.xml
new file mode 100644
index 0000000..1193d09
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/cloud-breakdown-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-breakdown/pom.xml b/cloud-modules/cloud-breakdown/pom.xml
new file mode 100644
index 0000000..03dc09d
--- /dev/null
+++ b/cloud-modules/cloud-breakdown/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-modules
+ 3.6.3
+
+
+ cloud-breakdown
+ pom
+
+ cloud-breakdown-common
+ cloud-breakdown-server
+ cloud-breakdown-remote
+ cloud-breakdown-client
+
+
+
+ 17
+ 17
+ UTF-8
+
+
+
diff --git a/cloud-modules/cloud-modules-car/pom.xml b/cloud-modules/cloud-modules-car/pom.xml
new file mode 100644
index 0000000..c7daf6d
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/pom.xml
@@ -0,0 +1,95 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-modules
+ 3.6.3
+
+
+ cloud-modules-car
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ com.mysql
+ mysql-connector-j
+
+
+
+
+ com.muyu
+ cloud-common-datasource
+
+
+
+
+ com.muyu
+ cloud-common-datascope
+
+
+
+ com.muyu
+ cloud-common-core
+
+
+
+ com.muyu
+ cloud-common-api-doc
+
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+
+
+
+
diff --git a/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/CloudCarRailApplication.java b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/CloudCarRailApplication.java
new file mode 100644
index 0000000..98d9546
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/CloudCarRailApplication.java
@@ -0,0 +1,23 @@
+package com.muyu.carrail;
+
+import com.muyu.common.security.annotation.EnableCustomConfig;
+import com.muyu.common.security.annotation.EnableMyFeignClients;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+
+@EnableCustomConfig
+@EnableMyFeignClients
+@MapperScan("com.muyu.carrail.mapper")
+@SpringBootApplication
+public class CloudCarRailApplication {
+ public static void main(String[] args) {
+// try {
+//
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+ SpringApplication.run(CloudCarRailApplication.class, args);
+ }
+}
diff --git a/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/controller/SysCorpuscleController.java b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/controller/SysCorpuscleController.java
new file mode 100644
index 0000000..15e083c
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/controller/SysCorpuscleController.java
@@ -0,0 +1,80 @@
+package com.muyu.carrail.controller;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.muyu.common.security.annotation.RequiresPermissions;
+import com.muyu.common.security.utils.SecurityUtils;
+import jakarta.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import com.muyu.carrail.domain.SysCorpuscle;
+import com.muyu.carrail.service.ISysCorpuscleService;
+import com.muyu.common.core.web.controller.BaseController;
+import com.muyu.common.core.domain.Result;
+
+import com.muyu.common.core.web.page.TableDataInfo;
+
+/**
+ * 电子围栏Controller
+ *
+ * @author muyu
+ * @date 2024-09-17
+ */
+@RestController
+@RequestMapping("/carRail")
+public class SysCorpuscleController extends BaseController
+{
+ @Autowired
+ private ISysCorpuscleService sysCorpuscleService;
+
+ /**
+ * 查询电子围栏列表
+ */
+ @RequiresPermissions("carRail:carRail:list")
+ @GetMapping("/list")
+ public Result> list(SysCorpuscle sysCorpuscle)
+ {
+ startPage();
+ List list = sysCorpuscleService.selectSysCorpuscleList(sysCorpuscle);
+ return getDataTable(list);
+ }
+
+ @RequiresPermissions("carRail:corpuscle:add")
+ @PostMapping
+ public Result add(
+ @Validated @RequestBody SysCorpuscle sysCorpuscle)
+ {
+
+ return toAjax(sysCorpuscleService.save(sysCorpuscle));
+ }
+
+ /**
+ * 修改电子围栏
+ */
+ @RequiresPermissions("carRail:corpuscle:edit")
+ @PutMapping
+ public Result edit(
+ @Validated @RequestBody SysCorpuscle sysCorpuscle)
+ {
+
+ return toAjax(sysCorpuscleService.updateById(sysCorpuscle));
+ }
+
+
+
+ /**
+ * 删除电子围栏
+ */
+ @RequiresPermissions("carRail:corpuscle:remove")
+ @DeleteMapping("/{ids}")
+ public Result remove(@PathVariable("ids") Long[] ids)
+ {
+ sysCorpuscleService.removeBatchByIds(Arrays.asList(ids));
+ return success();
+ }
+
+}
diff --git a/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/controller/SysFenceController.java b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/controller/SysFenceController.java
new file mode 100644
index 0000000..a3ff506
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/controller/SysFenceController.java
@@ -0,0 +1,106 @@
+package com.muyu.carrail.controller;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.muyu.carrail.domain.SysFence;
+import com.muyu.carrail.service.ISysFenceService;
+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.common.core.web.controller.BaseController;
+import com.muyu.common.core.domain.Result;
+import com.muyu.common.core.utils.poi.ExcelUtil;
+import org.springframework.validation.annotation.Validated;
+import com.muyu.common.core.web.page.TableDataInfo;
+
+/**
+ * 围栏组Controller
+ *
+ * @author muyu
+ * @date 2024-09-17
+ */
+@RestController
+@RequestMapping("/fence")
+public class SysFenceController extends BaseController
+{
+ @Resource
+ private ISysFenceService sysFenceService;
+
+ /**
+ * 查询围栏组列表
+ */
+ @RequiresPermissions("fence:fence:list")
+ @GetMapping("/list")
+ public Result> list(SysFence sysFence)
+ {
+ startPage();
+ List list = sysFenceService.selectSysFenceList(sysFence);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出围栏组列表
+ */
+ @RequiresPermissions("fence:fence:export")
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, SysFence sysFence)
+ {
+ List list = sysFenceService.selectSysFenceList(sysFence);
+ ExcelUtil util = new ExcelUtil(SysFence.class);
+ util.exportExcel(response, list, "围栏组数据");
+ }
+
+ /**
+ * 获取围栏组详细信息
+ */
+ @RequiresPermissions("fence:fence:query")
+ @GetMapping(value = "/{id}")
+ public Result> getInfo(@PathVariable("id") Long id)
+ {
+ return success(sysFenceService.selectSysFenceById(id));
+ }
+
+ /**
+ * 新增围栏组
+ */
+ @RequiresPermissions("fence:fence:add")
+ @PostMapping
+ public Result add(
+ @Validated @RequestBody SysFence sysFence)
+ {
+
+ return toAjax(sysFenceService.save(sysFence));
+ }
+
+ /**
+ * 修改围栏组
+ */
+ @RequiresPermissions("fence:fence:edit")
+ @PutMapping
+ public Result edit(
+ @Validated @RequestBody SysFence sysFence)
+ {
+
+ return toAjax(sysFenceService.updateById(sysFence));
+ }
+
+ /**
+ * 删除围栏组
+ */
+ @RequiresPermissions("fence:fence:remove")
+ @DeleteMapping("/{ids}")
+ public Result remove(@PathVariable("ids") Long[] ids)
+ {
+ sysFenceService.removeBatchByIds(Arrays.asList(ids));
+ return success();
+ }
+}
diff --git a/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/domain/SysCorpuscle.java b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/domain/SysCorpuscle.java
new file mode 100644
index 0000000..2f85c6e
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/domain/SysCorpuscle.java
@@ -0,0 +1,67 @@
+package com.muyu.carrail.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;
+
+/**
+ * 电子围栏对象 sys_corpuscle_fence
+ *
+ * @author muyu
+ * @date 2024-09-17
+ */
+
+@Data
+@Setter
+@Getter
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("sys_corpuscle_fence")
+public class SysCorpuscle{
+ private static final long serialVersionUID = 1L;
+
+ /** 自增主键 */
+ @TableId( type = IdType.AUTO)
+ private Long id;
+
+ /** 围栏编码 */
+ @Excel(name = "围栏编码")
+ private String fenceCode;
+
+ /** 围栏名称 */
+ @Excel(name = "围栏名称")
+ private String fenceName;
+
+ /** 围栏类型(1.驶入 2.驶出) */
+ @Excel(name = "围栏类型(1.驶入 2.驶出)")
+ private Long fenceType;
+
+ /** 围栏位置 */
+ @Excel(name = "围栏位置")
+ private String fencePosition;
+
+ /** 启用状态(1.启用 2.停用) */
+ @Excel(name = "启用状态(1.启用 2.停用)")
+ private String state;
+
+
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("fenceCode", getFenceCode())
+ .append("fenceName", getFenceName())
+ .append("fenceType", getFenceType())
+ .append("fencePosition", getFencePosition())
+ .append("state", getState())
+ .toString();
+ }
+}
diff --git a/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/domain/SysFence.java b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/domain/SysFence.java
new file mode 100644
index 0000000..b7d068b
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/domain/SysFence.java
@@ -0,0 +1,95 @@
+package com.muyu.carrail.domain;
+
+import cn.hutool.core.date.DateTime;
+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;
+
+import java.util.Date;
+
+/**
+ * 围栏组对象 sys_fence_group
+ *
+ * @author muyu
+ * @date 2024-09-17
+ */
+
+@Data
+@Setter
+@Getter
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("sys_fence_group")
+public class SysFence{
+ private static final long serialVersionUID = 1L;
+
+ /** 自增主键 */
+ @TableId( type = IdType.AUTO)
+ private Long id;
+
+ /** 围栏组编码 */
+ @Excel(name = "围栏组编码")
+ private String groupCode;
+
+ /** 围栏组名称 */
+ @Excel(name = "围栏组名称")
+ private String groupName;
+
+ /** 围栏组类型 */
+ @Excel(name = "围栏组类型")
+ private String groupType;
+
+ /** 启用状态 */
+ @Excel(name = "启用状态")
+ private String state;
+
+ /** 创建人 */
+ @Excel(name = "创建人")
+ private String createBy;
+
+ /** 创建时间 */
+ @Excel(name = "创建时间")
+ private Date createTime;
+
+ /** 更新人 */
+ @Excel(name = "更新人")
+ private String updateBy;
+
+ /** 更新时间 */
+ @Excel(name = "更新时间")
+ private Date updateTime;
+
+ /** 启用状态 */
+ @Excel(name = "启用状态")
+ private String remark;
+
+// /** sysfindname */
+// @Excel(name = "电子围栏集群")
+// private String sysfindname;
+
+
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("groupCode", getGroupCode())
+ .append("groupName", getGroupName())
+ .append("groupType", getGroupType())
+ .append("state", getState())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+// .append("sysfindname", getSysfindname())
+ .append("remark", getRemark())
+ .toString();
+ }
+}
diff --git a/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/mapper/SysCorpuscleMapper.java b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/mapper/SysCorpuscleMapper.java
new file mode 100644
index 0000000..b2cb32e
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/mapper/SysCorpuscleMapper.java
@@ -0,0 +1,21 @@
+package com.muyu.carrail.mapper;
+
+import java.util.List;
+import com.muyu.carrail.domain.SysCorpuscle;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 电子围栏Mapper接口
+ *
+ * @author muyu
+ * @date 2024-09-17
+ */
+
+public interface SysCorpuscleMapper extends BaseMapper{
+
+ List selectCarRail(SysCorpuscle sysCorpuscle);
+
+ boolean addCarRail(SysCorpuscle sysCorpuscle);
+
+}
diff --git a/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/mapper/SysFenceMapper.java b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/mapper/SysFenceMapper.java
new file mode 100644
index 0000000..725c176
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/mapper/SysFenceMapper.java
@@ -0,0 +1,16 @@
+package com.muyu.carrail.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muyu.carrail.domain.SysFence;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 围栏组Mapper接口
+ *
+ * @author muyu
+ * @date 2024-09-17
+ */
+public interface SysFenceMapper extends BaseMapper{
+
+}
diff --git a/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/service/ISysCorpuscleService.java b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/service/ISysCorpuscleService.java
new file mode 100644
index 0000000..276b2d4
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/service/ISysCorpuscleService.java
@@ -0,0 +1,25 @@
+package com.muyu.carrail.service;
+
+import java.util.List;
+import com.muyu.carrail.domain.SysCorpuscle;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 电子围栏Service接口
+ *
+ * @author muyu
+ * @date 2024-09-17
+ */
+public interface ISysCorpuscleService extends IService {
+
+ /**
+ * 查询电子围栏列表
+ *
+ * @param sysCorpuscle 电子围栏
+ * @return 电子围栏集合
+ */
+ public List selectSysCorpuscleList(SysCorpuscle sysCorpuscle);
+
+
+ boolean checkIdUnique(SysCorpuscle sysCorpuscle);
+}
diff --git a/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/service/ISysFenceService.java b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/service/ISysFenceService.java
new file mode 100644
index 0000000..7ba33a8
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/service/ISysFenceService.java
@@ -0,0 +1,38 @@
+package com.muyu.carrail.service;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.muyu.carrail.domain.SysFence;
+
+/**
+ * 围栏组Service接口
+ *
+ * @author muyu
+ * @date 2024-09-17
+ */
+public interface ISysFenceService extends IService {
+ /**
+ * 精确查询围栏组
+ *
+ * @param id 围栏组主键
+ * @return 围栏组
+ */
+ public SysFence selectSysFenceById(Long id);
+
+ /**
+ * 查询围栏组列表
+ *
+ * @param sysFence 围栏组
+ * @return 围栏组集合
+ */
+ public List selectSysFenceList(SysFence sysFence);
+
+ /**
+ * 判断 围栏组 id是否唯一
+ * @param sysFence 围栏组
+ * @return 结果
+ */
+ Boolean checkIdUnique(SysFence sysFence);
+
+}
diff --git a/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/service/impl/SysCorpuscleServiceImpl.java b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/service/impl/SysCorpuscleServiceImpl.java
new file mode 100644
index 0000000..61024fe
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/service/impl/SysCorpuscleServiceImpl.java
@@ -0,0 +1,43 @@
+package com.muyu.carrail.service.impl;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.muyu.carrail.mapper.SysCorpuscleMapper;
+import com.muyu.carrail.domain.SysCorpuscle;
+import com.muyu.carrail.service.ISysCorpuscleService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.util.Assert;
+
+/**
+ * 电子围栏Service业务层处理
+ *
+ * @author muyu
+ * @date 2024-09-17
+ */
+@Service
+public class SysCorpuscleServiceImpl
+ extends ServiceImpl
+ implements ISysCorpuscleService {
+
+ /**
+ * 精确查询电子围栏
+ *
+ * @param id 电子围栏主键
+ * @return 电子围栏
+ */
+ @Autowired
+ SysCorpuscleMapper sysCorpuscleMapper;
+
+ @Override
+ public List selectSysCorpuscleList(SysCorpuscle sysCorpuscle) {
+ return sysCorpuscleMapper.selectCarRail(sysCorpuscle);
+ }
+
+ @Override
+ public boolean checkIdUnique(SysCorpuscle sysCorpuscle) {
+ return sysCorpuscleMapper.addCarRail(sysCorpuscle);
+ }
+}
diff --git a/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/service/impl/SysFenceServiceImpl.java b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/service/impl/SysFenceServiceImpl.java
new file mode 100644
index 0000000..5ebffcc
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/java/com/muyu/carrail/service/impl/SysFenceServiceImpl.java
@@ -0,0 +1,63 @@
+package com.muyu.carrail.service.impl;
+
+import java.util.List;
+
+import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.muyu.carrail.domain.SysCorpuscle;
+import com.muyu.carrail.domain.SysFence;
+import com.muyu.carrail.mapper.SysFenceMapper;
+import com.muyu.carrail.service.ISysFenceService;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+
+
+/**
+ * 围栏组Service业务层处理
+ *
+ * @author muyu
+ * @date 2024-09-17
+ */
+@Service
+public class SysFenceServiceImpl
+ extends ServiceImpl
+ implements ISysFenceService {
+
+
+ @Override
+ public SysFence selectSysFenceById(Long id) {
+
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ Assert.notNull(id, "id不可为空");
+ queryWrapper.eq(SysFence::getId, id);
+ return this.getOne(queryWrapper);
+ }
+
+ @Override
+ public List selectSysFenceList(SysFence sysFence) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ if (StringUtils.isNotEmpty(sysFence.getGroupCode())){
+ queryWrapper.eq(SysFence::getGroupCode, sysFence.getGroupCode());
+ }
+ if (StringUtils.isNotEmpty(sysFence.getGroupName())){
+ queryWrapper.like(SysFence::getGroupName, sysFence.getGroupName());
+ }
+ if (StringUtils.isNotEmpty(sysFence.getGroupType())){
+ queryWrapper.eq(SysFence::getGroupType, sysFence.getGroupType());
+ }
+ if (StringUtils.isNotEmpty(sysFence.getState())){
+ queryWrapper.eq(SysFence::getState, sysFence.getState());
+ }
+ return this.list(queryWrapper);
+
+ }
+
+ @Override
+ public Boolean checkIdUnique(SysFence sysFence) {
+ return null;
+ }
+}
diff --git a/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..00342f2
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/resources/bootstrap.yml
@@ -0,0 +1,58 @@
+# Tomcat
+server:
+ port: 10011
+
+# nacos线上地址
+nacos:
+ addr: 127.0.0.1:8848
+ user-name: nacos
+ password: nacos
+ namespace: public
+# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all
+# Spring
+spring:
+ amqp:
+ deserialization:
+ trust:
+ all: true
+ main:
+ allow-bean-definition-overriding: true
+ application:
+ # 应用名称
+ name: cloud-car
+ profiles:
+ # 环境配置
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: ${nacos.addr}
+ # nacos用户名
+ username: ${nacos.user-name}
+ # nacos密码
+ password: ${nacos.password}
+ # 命名空间
+ namespace: ${nacos.namespace}
+ config:
+ # 服务注册地址
+ server-addr: ${nacos.addr}
+ # nacos用户名
+ username: ${nacos.user-name}
+ # nacos密码
+ password: ${nacos.password}
+ # 命名空间
+ 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}
+
+logging:
+ level:
+ com.muyu.carrail.mapper: DEBUG
+
diff --git a/cloud-modules/cloud-modules-car/src/main/resources/mapper/carrail/SysFenceMapper.xml b/cloud-modules/cloud-modules-car/src/main/resources/mapper/carrail/SysFenceMapper.xml
new file mode 100644
index 0000000..26be2dc
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/resources/mapper/carrail/SysFenceMapper.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, group_code, group_name, group_type, state, create_by, create_time, update_by, update_time, remark from sys_fence_group
+
+
+
+
+
+
+
+
+
+
+ delete from sys_fence_group where id = #{id}
+
+
+
+ delete from sys_fence_group where id in
+
+ #{id}
+
+
+
diff --git a/cloud-modules/cloud-modules-car/src/main/resources/mapper/carrail/SyscarRailMapper.xml b/cloud-modules/cloud-modules-car/src/main/resources/mapper/carrail/SyscarRailMapper.xml
new file mode 100644
index 0000000..c9f9205
--- /dev/null
+++ b/cloud-modules/cloud-modules-car/src/main/resources/mapper/carrail/SyscarRailMapper.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ insert into sys_corpuscle_fence(fence_code,fence_name,fence_type,fence_position,state)
+ values(#{fenceCode},#{fenceName},#{fenceType},#{fencePosition},#{state})
+
+
+
+
+
diff --git a/cloud-modules/cloud-modules-rail/pom.xml b/cloud-modules/cloud-modules-rail/pom.xml
new file mode 100644
index 0000000..2353a2c
--- /dev/null
+++ b/cloud-modules/cloud-modules-rail/pom.xml
@@ -0,0 +1,91 @@
+
+
+
+ cloud-modules
+ com.muyu
+ 3.6.3
+
+ 4.0.0
+
+ cloud-modules-rail
+
+
+ 17
+ 17
+
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ com.mysql
+ mysql-connector-j
+
+
+
+
+ com.muyu
+ cloud-common-datasource
+
+
+
+
+ com.muyu
+ cloud-common-datascope
+
+
+
+ com.muyu
+ cloud-common-core
+
+
+
+ com.muyu
+ cloud-common-api-doc
+
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+
+
diff --git a/cloud-modules/cloud-modules-rail/src/main/java/com/zhangyi/rail/CloudRailApplication.java b/cloud-modules/cloud-modules-rail/src/main/java/com/zhangyi/rail/CloudRailApplication.java
new file mode 100644
index 0000000..f490e2a
--- /dev/null
+++ b/cloud-modules/cloud-modules-rail/src/main/java/com/zhangyi/rail/CloudRailApplication.java
@@ -0,0 +1,7 @@
+package com.zhangyi.rail;
+
+public class CloudRailApplication {
+ public static void main(String[] args) {
+
+ }
+}
diff --git a/cloud-modules/cloud-modules-rail/src/main/java/com/zhangyi/rail/controller/RailController.java b/cloud-modules/cloud-modules-rail/src/main/java/com/zhangyi/rail/controller/RailController.java
new file mode 100644
index 0000000..be833e0
--- /dev/null
+++ b/cloud-modules/cloud-modules-rail/src/main/java/com/zhangyi/rail/controller/RailController.java
@@ -0,0 +1,4 @@
+package com.zhangyi.rail.controller;
+
+public class RailController {
+}
diff --git a/cloud-modules/cloud-modules-rail/src/main/java/com/zhangyi/rail/domain/SysFenceRail.java b/cloud-modules/cloud-modules-rail/src/main/java/com/zhangyi/rail/domain/SysFenceRail.java
new file mode 100644
index 0000000..dc11dbd
--- /dev/null
+++ b/cloud-modules/cloud-modules-rail/src/main/java/com/zhangyi/rail/domain/SysFenceRail.java
@@ -0,0 +1,38 @@
+package com.zhangyi.rail.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.muyu.common.core.annotation.Excel;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+@Data
+@Setter
+@Getter
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("sys_corpuscle_fence")
+public class SysFenceRail {
+private static final long seriaversionUID =1L;
+/** 自增主键 */
+@TableId(type = IdType.AUTO)
+ private Long id;
+
+/** 围栏编码 */
+@Excel(name="围栏编码")
+ private String fenceCode;
+ /**围栏名称**/
+ @Excel(name = "围栏名称")
+ private String fenceName;
+
+ /**围栏类型**/
+ @Excel(name = "围栏类型")
+ private Long fenceType;
+
+
+
+
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-client/pom.xml b/cloud-modules/cloud-modules-warn/cloud-warn-client/pom.xml
new file mode 100644
index 0000000..47ec49c
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-client/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-modules-warn
+ 3.6.3
+
+
+ cloud-warn-client
+
+
+ 17
+ 17
+ UTF-8
+
+
+
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-common/pom.xml b/cloud-modules/cloud-modules-warn/cloud-warn-common/pom.xml
new file mode 100644
index 0000000..809ecc3
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-common/pom.xml
@@ -0,0 +1,138 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-modules-warn
+ 3.6.3
+
+
+ cloud-warn-common
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ com.mysql
+ mysql-connector-j
+
+
+
+
+ com.muyu
+ cloud-common-datasource
+
+
+
+
+ com.muyu
+ cloud-common-datascope
+
+
+
+
+ com.muyu
+ cloud-common-log
+
+
+
+
+ com.muyu
+ cloud-common-api-doc
+
+
+
+
+ com.muyu
+ cloud-common-xxl
+
+
+
+ com.muyu
+ cloud-common-rabbit
+
+
+
+ com.muyu
+ cloud-common-core
+ 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-common/src/main/java/com/muyu/warning/domain/WarnLogs.java b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/warning/domain/WarnLogs.java
new file mode 100644
index 0000000..43250f3
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/warning/domain/WarnLogs.java
@@ -0,0 +1,90 @@
+package com.muyu.warning.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.muyu.common.core.annotation.Excel;
+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/warning/domain/WarnRule.java b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/warning/domain/WarnRule.java
new file mode 100644
index 0000000..7e82a98
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/warning/domain/WarnRule.java
@@ -0,0 +1,76 @@
+package com.muyu.warning.domain;
+
+import com.muyu.common.core.annotation.Excel;
+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/warning/domain/WarnRuleDTO.java b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/warning/domain/WarnRuleDTO.java
new file mode 100644
index 0000000..6a8d311
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/warning/domain/WarnRuleDTO.java
@@ -0,0 +1,63 @@
+package com.muyu.warning.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.muyu.common.core.annotation.Excel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @ClassName WarnRule
+ * @Description 描述
+ * @Author Chen
+ * @Date 2024/9/22 11:53
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class WarnRuleDTO {
+ /** 规则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;
+
+ /** 车辆类型id */
+ @Excel(name = "车辆类型id")
+ private Long carTypeId;
+
+ /** 策略名称 */
+ @Excel(name = "策略名称")
+ private String strategyName;
+
+ /** 报文模版id */
+ @Excel(name = "报文模版id")
+ private Long msgId;
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/warning/domain/WarnStrategy.java b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/warning/domain/WarnStrategy.java
new file mode 100644
index 0000000..481e6fe
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/warning/domain/WarnStrategy.java
@@ -0,0 +1,56 @@
+package com.muyu.warning.domain;
+
+import com.muyu.common.core.annotation.Excel;
+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/warning/wx/AccessToken.java b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/warning/wx/AccessToken.java
new file mode 100644
index 0000000..f844623
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/warning/wx/AccessToken.java
@@ -0,0 +1,20 @@
+package com.muyu.warning.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/warning/wx/Message.java b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/warning/wx/Message.java
new file mode 100644
index 0000000..f17130a
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-common/src/main/java/com/muyu/warning/wx/Message.java
@@ -0,0 +1,27 @@
+package com.muyu.warning.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-remote/pom.xml b/cloud-modules/cloud-modules-warn/cloud-warn-remote/pom.xml
new file mode 100644
index 0000000..dfaa873
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-remote/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-modules-warn
+ 3.6.3
+
+
+ cloud-warn-remote
+
+
+ 17
+ 17
+ UTF-8
+
+
+
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/pom.xml b/cloud-modules/cloud-modules-warn/cloud-warn-server/pom.xml
new file mode 100644
index 0000000..cb5da5d
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/pom.xml
@@ -0,0 +1,73 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-modules-warn
+ 3.6.3
+
+
+ cloud-warn-server
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+ com.muyu
+ cloud-warn-common
+ 3.6.3
+
+
+
+
+
+
+
+ com.github.yulichang
+ mybatis-plus-join-boot-starter
+ 1.4.11
+
+
+ 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/warning/WarnApplication.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/WarnApplication.java
new file mode 100644
index 0000000..6e3ebeb
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/WarnApplication.java
@@ -0,0 +1,21 @@
+package com.muyu.warning;
+
+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/warning/controller/WarnLogsController.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/controller/WarnLogsController.java
new file mode 100644
index 0000000..3ce89ca
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/controller/WarnLogsController.java
@@ -0,0 +1,109 @@
+package com.muyu.warning.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.warning.domain.WarnLogs;
+import com.muyu.warning.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 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("warning:logs:list")
+ @GetMapping("/list")
+ public Result> list(WarnLogs warnLogs)
+ {
+ startPage();
+ List list = warnLogsService.selectWarnLogsList(warnLogs);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出预警日志列表
+ */
+ @RequiresPermissions("warning: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("warning:logs:query")
+ @GetMapping(value = "/{id}")
+ public Result> getInfo(@PathVariable("id") Long id)
+ {
+ return success(warnLogsService.selectWarnLogsById(id));
+ }
+
+ /**
+ * 新增预警日志
+ */
+ @RequiresPermissions("warning:logs:add")
+ @PostMapping
+ public Result add(
+ @Validated @RequestBody WarnLogs warnLogs)
+ {
+ if (warnLogsService.checkIdUnique(warnLogs)) {
+ return error("新增 预警日志 '" + warnLogs + "'失败,预警日志已存在");
+ }
+ return toAjax(warnLogsService.save(warnLogs));
+ }
+
+ /**
+ * 修改预警日志
+ */
+ @RequiresPermissions("warning:logs:edit")
+ @PutMapping
+ public Result edit(
+ @Validated @RequestBody WarnLogs warnLogs)
+ {
+ if (!warnLogsService.checkIdUnique(warnLogs)) {
+ return error("修改 预警日志 '" + warnLogs + "'失败,预警日志不存在");
+ }
+ return toAjax(warnLogsService.updateById(warnLogs));
+ }
+
+ /**
+ * 删除预警日志
+ */
+ @RequiresPermissions("warning: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/warning/controller/WarnRuleController.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/controller/WarnRuleController.java
new file mode 100644
index 0000000..f549518
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/controller/WarnRuleController.java
@@ -0,0 +1,116 @@
+package com.muyu.warning.controller;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.github.yulichang.query.MPJLambdaQueryWrapper;
+import com.muyu.warning.domain.WarnRule;
+import com.muyu.warning.domain.WarnRuleDTO;
+import com.muyu.warning.domain.WarnStrategy;
+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.warning.domain.WarnRule;
+import com.muyu.warning.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 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("warning:list")
+ @GetMapping("/list")
+ public Result> list(WarnRuleDTO warnRuleDTO) {
+ startPage();
+ List list = warnRuleService.selectWarnRuleList(warnRuleDTO);
+// MPJLambdaQueryWrapper objectMPJLambdaQueryWrapper = new MPJLambdaQueryWrapper<>()
+// .selectAll(WarnRule.class)
+// .select(WarnStrategy::getStrategyName)
+// .leftJoin(WarnStrategy.class, WarnStrategy::getId, WarnRule::getStrategyId)
+// .stringQuery();
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出预警规则列表
+ */
+ @RequiresPermissions("warning:export")
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, WarnRuleDTO warnRuleDTO) {
+ List list = warnRuleService.selectWarnRuleList(warnRuleDTO);
+ ExcelUtil util = new ExcelUtil(WarnRuleDTO.class);
+ util.exportExcel(response, list, "预警规则数据");
+ }
+
+ /**
+ * 获取预警规则详细信息
+ */
+ @RequiresPermissions("warning:query")
+ @GetMapping(value = "/{id}")
+ public Result> getInfo(@PathVariable("id") Long id) {
+ return success(warnRuleService.selectWarnRuleById(id));
+ }
+
+ /**
+ * 新增预警规则
+ */
+ @RequiresPermissions("warning:add")
+ @PostMapping
+ public Result add(
+ @Validated @RequestBody WarnRuleDTO warnRuleDTO) {
+ if (warnRuleService.checkIdUnique(warnRuleDTO)) {
+ return error("新增 预警规则 '" + warnRuleDTO + "'失败,预警规则已存在");
+ }
+ return toAjax(warnRuleService.save(warnRuleDTO));
+ }
+
+ /**
+ * 修改预警规则
+ */
+ @RequiresPermissions("warning:edit")
+ @PutMapping
+ public Result edit(
+ @Validated @RequestBody WarnRuleDTO warnRuleDTO) {
+ if (!warnRuleService.checkIdUnique(warnRuleDTO)) {
+ return error("修改 预警规则 '" + warnRuleDTO + "'失败,预警规则不存在");
+ }
+ return toAjax(warnRuleService.updateById(warnRuleDTO));
+ }
+
+ /**
+ * 删除预警规则
+ */
+ @RequiresPermissions("warning: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/warning/controller/WarnRulesController.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/controller/WarnRulesController.java
new file mode 100644
index 0000000..8a87908
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/controller/WarnRulesController.java
@@ -0,0 +1,49 @@
+package com.muyu.warning.controller;
+
+import com.muyu.common.core.domain.Result;
+import com.muyu.warning.domain.WarnRule;
+import com.muyu.warning.domain.WarnRuleDTO;
+import com.muyu.warning.service.IWarRulesService;
+import lombok.val;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @ClassName WarnRulesController
+ * @Description 描述
+ * @Author Chen
+ * @Date 2024/9/23 21:07
+ */
+@RestController
+@RequestMapping("/rules")
+public class WarnRulesController {
+ @Autowired
+ private IWarRulesService warnRulesService;
+
+ /**
+ * 联查策略规则 联查
+ */
+
+ @GetMapping("/list")
+ public Result> list() {
+ List list = warnRulesService.selectWarnRulesList();
+ return Result.success(list);
+ }
+
+ /**
+ * 联查
+ *
+ * @param warnRuleDTO
+ * @return
+ */
+ @PostMapping("/listAll")
+ public Result> listAll(WarnRuleDTO warnRuleDTO) {
+ List list = warnRulesService.selectWarnRulesListAll(warnRuleDTO);
+ return Result.success(list);
+ }
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/controller/WarnStrategyController.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/controller/WarnStrategyController.java
new file mode 100644
index 0000000..4f1b51f
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/controller/WarnStrategyController.java
@@ -0,0 +1,105 @@
+package com.muyu.warning.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.warning.domain.WarnStrategy;
+import com.muyu.warning.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 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("warning:strategy:list")
+ @GetMapping("/list")
+ public Result> list(WarnStrategy warnStrategy) {
+ startPage();
+ List list = warnStrategyService.selectWarnStrategyList(warnStrategy);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出预警策略列表
+ */
+ @RequiresPermissions("warning: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("warning:strategy:query")
+ @GetMapping(value = "/{id}")
+ public Result> getInfo(@PathVariable("id") Long id) {
+ return success(warnStrategyService.selectWarnStrategyById(id));
+ }
+
+ /**
+ * 新增预警策略
+ */
+ @RequiresPermissions("warning:strategy:add")
+ @PostMapping
+ public Result add(
+ @Validated @RequestBody WarnStrategy warnStrategy) {
+ if (warnStrategyService.checkIdUnique(warnStrategy)) {
+ return error("新增 预警策略 '" + warnStrategy + "'失败,预警策略已存在");
+ }
+ return toAjax(warnStrategyService.save(warnStrategy));
+ }
+
+ /**
+ * 修改预警策略
+ */
+ @RequiresPermissions("warning:strategy:edit")
+ @PutMapping
+ public Result edit(
+ @Validated @RequestBody WarnStrategy warnStrategy) {
+ if (!warnStrategyService.checkIdUnique(warnStrategy)) {
+ return error("修改 预警策略 '" + warnStrategy + "'失败,预警策略不存在");
+ }
+ return toAjax(warnStrategyService.updateById(warnStrategy));
+ }
+
+ /**
+ * 删除预警策略
+ */
+ @RequiresPermissions("warning: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/warning/controller/WxTestController.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/controller/WxTestController.java
new file mode 100644
index 0000000..b512b94
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/controller/WxTestController.java
@@ -0,0 +1,153 @@
+package com.muyu.warning.controller;
+
+
+import com.muyu.warning.wx.Message;
+import com.muyu.warning.message.Article;
+import com.muyu.warning.message.NewMessage;
+import com.muyu.warning.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/warning/mapper/WarnLogsMapper.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/mapper/WarnLogsMapper.java
new file mode 100644
index 0000000..166720f
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/mapper/WarnLogsMapper.java
@@ -0,0 +1,16 @@
+package com.muyu.warning.mapper;
+
+import com.muyu.warning.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/warning/mapper/WarnRuleMapper.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/mapper/WarnRuleMapper.java
new file mode 100644
index 0000000..e3d67d3
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/mapper/WarnRuleMapper.java
@@ -0,0 +1,19 @@
+package com.muyu.warning.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.muyu.warning.domain.WarnRule;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muyu.warning.domain.WarnRule;
+import com.muyu.warning.domain.WarnRuleDTO;
+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/warning/mapper/WarnRulesMapper.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/mapper/WarnRulesMapper.java
new file mode 100644
index 0000000..61a6d1a
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/mapper/WarnRulesMapper.java
@@ -0,0 +1,21 @@
+package com.muyu.warning.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muyu.warning.domain.WarnRuleDTO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * @ClassName WarnRulesMapper
+ * @Description 描述
+ * @Author Chen
+ * @Date 2024/9/23 21:07
+ */
+@Mapper
+public interface WarnRulesMapper extends BaseMapper {
+ @Select("select r.*,s.id,s.strategy_name FROM warn_rule r left join warn_strategy s on r.strategy_id=s.id where r.strategy_id = #{s.id}")
+ List selectWarnRulesListAll(WarnRuleDTO warnRuleDTO);
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/mapper/WarnStrategyMapper.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/mapper/WarnStrategyMapper.java
new file mode 100644
index 0000000..e9bd988
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/mapper/WarnStrategyMapper.java
@@ -0,0 +1,16 @@
+package com.muyu.warning.mapper;
+
+import com.muyu.warning.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/warning/message/Article.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/message/Article.java
new file mode 100644
index 0000000..9c195ce
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/message/Article.java
@@ -0,0 +1,28 @@
+package com.muyu.warning.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/warning/message/NewMessage.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/message/NewMessage.java
new file mode 100644
index 0000000..a8b5dbf
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/message/NewMessage.java
@@ -0,0 +1,34 @@
+package com.muyu.warning.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/warning/service/IWarRulesService.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/IWarRulesService.java
new file mode 100644
index 0000000..25f71e8
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/IWarRulesService.java
@@ -0,0 +1,14 @@
+package com.muyu.warning.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.muyu.warning.domain.WarnRule;
+import com.muyu.warning.domain.WarnRuleDTO;
+
+import java.util.List;
+
+public interface IWarRulesService extends IService {
+ List selectWarnRulesList();
+ //联查
+ List selectWarnRulesListAll(WarnRuleDTO warnRuleDTO);
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/IWarnLogsService.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/IWarnLogsService.java
new file mode 100644
index 0000000..1f61aa4
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/IWarnLogsService.java
@@ -0,0 +1,37 @@
+package com.muyu.warning.service;
+
+import java.util.List;
+import com.muyu.warning.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/warning/service/IWarnRuleService.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/IWarnRuleService.java
new file mode 100644
index 0000000..ef327d0
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/IWarnRuleService.java
@@ -0,0 +1,39 @@
+package com.muyu.warning.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.yulichang.base.MPJBaseService;
+import com.muyu.warning.domain.WarnRuleDTO;
+
+import java.util.List;
+
+/**
+ * 预警规则Service接口
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+public interface IWarnRuleService extends IService {
+ /**
+ * 精确查询预警规则
+ *
+ * @param id 预警规则主键
+ * @return 预警规则
+ */
+ public WarnRuleDTO selectWarnRuleById(Long id);
+
+ /**
+ * 查询预警规则列表
+ *
+ * @param warnRuleDTO 预警规则
+ * @return 预警规则集合
+ */
+ public List selectWarnRuleList(WarnRuleDTO warnRuleDTO);
+
+ /**
+ * 判断 预警规则 id是否唯一
+ * @param warnRuleDTO 预警规则
+ * @return 结果
+ */
+ Boolean checkIdUnique(WarnRuleDTO warnRuleDTO);
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/IWarnStrategyService.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/IWarnStrategyService.java
new file mode 100644
index 0000000..d3fec08
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/IWarnStrategyService.java
@@ -0,0 +1,37 @@
+package com.muyu.warning.service;
+
+import java.util.List;
+import com.muyu.warning.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/warning/service/impl/WarnLogsServiceImpl.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/impl/WarnLogsServiceImpl.java
new file mode 100644
index 0000000..2e25a7b
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/impl/WarnLogsServiceImpl.java
@@ -0,0 +1,92 @@
+package com.muyu.warning.service.impl;
+
+import java.util.List;
+import org.springframework.stereotype.Service;
+import com.muyu.warning.mapper.WarnLogsMapper;
+import com.muyu.warning.domain.WarnLogs;
+import com.muyu.warning.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/warning/service/impl/WarnRuleServiceImpl.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/impl/WarnRuleServiceImpl.java
new file mode 100644
index 0000000..4fa0aab
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/impl/WarnRuleServiceImpl.java
@@ -0,0 +1,108 @@
+package com.muyu.warning.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.muyu.common.core.utils.StringUtils;
+import com.muyu.warning.domain.WarnRuleDTO;
+import com.muyu.warning.mapper.WarnRuleMapper;
+import com.muyu.warning.service.IWarnRuleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+import java.util.List;
+
+/**
+ * 预警规则Service业务层处理
+ *
+ * @author muyu
+ * @date 2024-09-20
+ */
+@Service
+public class WarnRuleServiceImpl
+ extends ServiceImpl
+ implements IWarnRuleService {
+
+
+ /**
+ * 精确查询预警规则
+ *
+ * @param id 预警规则主键
+ * @return 预警规则
+ */
+ @Override
+ public WarnRuleDTO selectWarnRuleById(Long id) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ Assert.notNull(id, "id不可为空");
+ queryWrapper.eq(WarnRuleDTO::getId, id);
+ return this.getOne(queryWrapper);
+ }
+
+
+ /**
+ * 查询预警规则列表
+ *
+ * @param warnRuleDTO 预警规则
+ * @return 预警规则
+ */
+ @Override
+ public List selectWarnRuleList(WarnRuleDTO warnRuleDTO) {
+
+// MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper()
+// .selectAll(WarnRule.class)
+// .select(WarnStrategy::getStrategyName)
+// .selectAs(WarnStrategy::getStrategyName, WarnRule::getStrategyName);
+// List list = warnRuleMapper.selectJoinList(WarnRule.class, queryWrapper);
+// return list;
+// MPJLambdaWrapper wrapper = JoinWrappers.lambda(WarnRule.class)
+// .selectAll(WarnRule.class)
+// .select(WarnStrategy::getStrategyName)
+// .leftJoin(WarnStrategy.class, WarnStrategy::getId, WarnRule::getId);
+// return warnRuleMapper.selectJoinList(WarnRule.class, wrapper);
+// MPJQueryWrapper queryWrapper = new MPJQueryWrapper<>();
+// if (StringUtils.isNotEmpty(warnRule.getRuleName())) {
+//// queryWrapper.like(WarnRule::getRuleName, warnRule.getRuleName());
+// queryWrapper.like("rule_name", warnRule.getRuleName());
+// }
+//
+
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ if (StringUtils.isNotNull(warnRuleDTO.getStrategyId())) {
+ queryWrapper.eq(WarnRuleDTO::getStrategyId, warnRuleDTO.getStrategyId());
+// queryWrapper.eq("strategy_id", warnRule.getStrategyId());
+ }
+ if (StringUtils.isNotNull(warnRuleDTO.getMsgTypeId())) {
+ queryWrapper.eq(WarnRuleDTO::getMsgTypeId, warnRuleDTO.getMsgTypeId());
+ }
+ if (StringUtils.isNotNull(warnRuleDTO.getSlideTime())) {
+ queryWrapper.eq(WarnRuleDTO::getSlideTime, warnRuleDTO.getSlideTime());
+ }
+ if (StringUtils.isNotNull(warnRuleDTO.getSlideFrequency())) {
+ queryWrapper.eq(WarnRuleDTO::getSlideFrequency, warnRuleDTO.getSlideFrequency());
+ }
+ if (StringUtils.isNotNull(warnRuleDTO.getMaxValue())) {
+ queryWrapper.eq(WarnRuleDTO::getMaxValue, warnRuleDTO.getMaxValue());
+ }
+ if (StringUtils.isNotNull(warnRuleDTO.getMinValue())) {
+ queryWrapper.eq(WarnRuleDTO::getMinValue, warnRuleDTO.getMinValue());
+ }
+ return this.list(queryWrapper);
+
+
+ }
+
+ /**
+ * 唯一 判断
+ *
+ * @param warnRuleDTO 预警规则
+ * @return 预警规则
+ */
+ @Override
+ public Boolean checkIdUnique(WarnRuleDTO warnRuleDTO) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(WarnRuleDTO::getId, warnRuleDTO.getId());
+ return this.count(queryWrapper) > 0;
+ }
+
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/impl/WarnRulesServiceImpl.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/impl/WarnRulesServiceImpl.java
new file mode 100644
index 0000000..54de66e
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/impl/WarnRulesServiceImpl.java
@@ -0,0 +1,47 @@
+package com.muyu.warning.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.muyu.warning.domain.WarnRule;
+import com.muyu.warning.domain.WarnRuleDTO;
+import com.muyu.warning.domain.WarnStrategy;
+import com.muyu.warning.mapper.WarnRulesMapper;
+import com.muyu.warning.service.IWarRulesService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @ClassName WarnRulesServiceImpl
+ * @Description 描述
+ * @Author Chen
+ * @Date 2024/9/23 22:02
+ */
+@Service
+public class WarnRulesServiceImpl
+ extends ServiceImpl
+ implements IWarRulesService {
+
+ @Autowired
+ private WarnRulesMapper warnRulesMapper;
+
+ @Override
+ public List selectWarnRulesList() {
+ MPJLambdaWrapper wrapper = new MPJLambdaWrapper()
+ .selectAll(WarnRule.class)
+ .selectAs(WarnStrategy::getStrategyName, WarnRuleDTO::getStrategyName)
+ .leftJoin(WarnStrategy.class, WarnStrategy::getId, WarnRule::getStrategyId);
+ return this.list(wrapper);
+ }
+
+ /**
+ * 双表查询
+ * @return
+ */
+ @Override
+ public List selectWarnRulesListAll(WarnRuleDTO warnRuleDTO) {
+ List list = warnRulesMapper.selectWarnRulesListAll(warnRuleDTO);
+ return list;
+ }
+}
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/impl/WarnStrategyServiceImpl.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/impl/WarnStrategyServiceImpl.java
new file mode 100644
index 0000000..505a01e
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/service/impl/WarnStrategyServiceImpl.java
@@ -0,0 +1,74 @@
+package com.muyu.warning.service.impl;
+
+import java.util.List;
+import org.springframework.stereotype.Service;
+import com.muyu.warning.mapper.WarnStrategyMapper;
+import com.muyu.warning.domain.WarnStrategy;
+import com.muyu.warning.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/warning/util/OkHttpUtils.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/util/OkHttpUtils.java
new file mode 100644
index 0000000..fc33154
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/util/OkHttpUtils.java
@@ -0,0 +1,36 @@
+package com.muyu.warning.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/warning/util/TokenUtil.java b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/util/TokenUtil.java
new file mode 100644
index 0000000..5587e4b
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/java/com/muyu/warning/util/TokenUtil.java
@@ -0,0 +1,35 @@
+package com.muyu.warning.util;
+
+import com.alibaba.fastjson2.JSON;
+import com.muyu.warning.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..756d816
--- /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: 127.0.0.1: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..6d23e91
--- /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}
+
+
+
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..290906f
--- /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}
+
+
+
diff --git a/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnRulesMapper.xml b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnRulesMapper.xml
new file mode 100644
index 0000000..a9ef466
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/cloud-warn-server/src/main/resources/mapper/platform/WarnRulesMapper.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
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..6959c4a
--- /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}
+
+
+
diff --git a/cloud-modules/cloud-modules-warn/pom.xml b/cloud-modules/cloud-modules-warn/pom.xml
new file mode 100644
index 0000000..7e15d11
--- /dev/null
+++ b/cloud-modules/cloud-modules-warn/pom.xml
@@ -0,0 +1,26 @@
+
+
+ 4.0.0
+
+ com.muyu
+ cloud-modules
+ 3.6.3
+
+
+ cloud-modules-warn
+ pom
+
+ cloud-warn-common
+ cloud-warn-client
+ cloud-warn-remote
+ cloud-warn-server
+
+
+
+ 17
+ 17
+ UTF-8
+
+