diff --git a/cloud-auth/pom.xml b/cloud-auth/pom.xml index 4cd0756..c38fc2b 100644 --- a/cloud-auth/pom.xml +++ b/cloud-auth/pom.xml @@ -17,6 +17,11 @@ + + com.baomidou + mybatis-plus-boot-starter + 3.5.5 + @@ -36,6 +41,11 @@ spring-cloud-starter-alibaba-sentinel + + com.muyu + cloud-common-saas + + org.springframework.boot diff --git a/cloud-auth/src/main/java/com/muyu/auth/controller/TokenController.java b/cloud-auth/src/main/java/com/muyu/auth/controller/TokenController.java index 0b2f6f5..e4e2615 100644 --- a/cloud-auth/src/main/java/com/muyu/auth/controller/TokenController.java +++ b/cloud-auth/src/main/java/com/muyu/auth/controller/TokenController.java @@ -7,6 +7,7 @@ import com.muyu.auth.form.RegisterBody; import com.muyu.auth.service.SysFirmService; import com.muyu.auth.service.SysLoginService; import com.muyu.cloud.common.many.datasource.constents.DatasourceContent; +import com.muyu.common.core.constant.SecurityConstants; import com.muyu.common.core.domain.Result; import com.muyu.common.core.utils.JwtUtils; import com.muyu.common.core.utils.StringUtils; @@ -14,6 +15,8 @@ import com.muyu.common.security.auth.AuthUtil; import com.muyu.common.security.service.TokenService; import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.system.domain.LoginUser; +import com.muyu.common.system.domain.SysUser; +import com.muyu.common.system.remote.RemoteUserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.log4j.Log4j2; @@ -32,6 +35,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; +import java.util.Date; /** * token 控制 @@ -51,6 +55,9 @@ public class TokenController { @Autowired private SysFirmService sysFirmService; + @Autowired + private RemoteUserService remoteUserService; + @PostMapping("login") @Operation(summary = "登录", description = "登录") public Result login (@RequestBody LoginBody form) { @@ -120,6 +127,13 @@ public class TokenController { } else { log.warn("数据库 {} 创建成功", settlement.getDatabaseName()); + + SysUser sysUser = new SysUser(); + sysUser.setCreateTime(new Date()); + sysUser.setUserName(settlement.getFirmName()); + sysUser.setDatabaseName(settlement.getDatabaseName()); + remoteUserService.addUser(sysUser, SecurityConstants.INNER); + // 切换到新的数据库连接 Connection connection = null; try { diff --git a/cloud-auth/src/main/java/com/muyu/auth/service/SysLoginService.java b/cloud-auth/src/main/java/com/muyu/auth/service/SysLoginService.java index 28cb748..665a504 100644 --- a/cloud-auth/src/main/java/com/muyu/auth/service/SysLoginService.java +++ b/cloud-auth/src/main/java/com/muyu/auth/service/SysLoginService.java @@ -13,8 +13,10 @@ import com.muyu.common.core.utils.StringUtils; import com.muyu.common.core.utils.ip.IpUtils; import com.muyu.common.redis.service.RedisService; import com.muyu.common.security.utils.SecurityUtils; -import com.muyu.common.system.domain.Business; + + import com.muyu.common.system.remote.RemoteUserService; +import com.muyu.common.system.domain.Business; import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.LoginUser; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cloud-auth/src/main/resources/bootstrap.yml b/cloud-auth/src/main/resources/bootstrap.yml index 57dca73..fdf3847 100644 --- a/cloud-auth/src/main/resources/bootstrap.yml +++ b/cloud-auth/src/main/resources/bootstrap.yml @@ -7,7 +7,7 @@ nacos: addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: yzl + namespace: four # Spring spring: application: diff --git a/cloud-common/cloud-common-kafka/pom.xml b/cloud-common/cloud-common-kafka/pom.xml index 61a34c1..abe86fc 100644 --- a/cloud-common/cloud-common-kafka/pom.xml +++ b/cloud-common/cloud-common-kafka/pom.xml @@ -19,11 +19,11 @@ UTF-8 - - - - - + + + + + org.apache.kafka diff --git a/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaConsumerConfig.java b/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaConsumerConfig.java index 212d27c..a874b95 100644 --- a/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaConsumerConfig.java +++ b/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaConsumerConfig.java @@ -1,7 +1,5 @@ package com.muyu.common.kafka.config; - - import com.muyu.common.core.constant.KafkaConstant; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.common.serialization.StringDeserializer; diff --git a/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaProducerConfig.java b/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaProducerConfig.java index becdcda..d805b25 100644 --- a/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaProducerConfig.java +++ b/cloud-common/cloud-common-kafka/src/main/java/com/muyu/common/kafka/config/KafkaProducerConfig.java @@ -49,8 +49,6 @@ public class KafkaProducerConfig { private String acks; - - @Bean public KafkaProducer kafkaProducer() { Map configs = new HashMap<>(); diff --git a/cloud-common/cloud-common-rabbit/pom.xml b/cloud-common/cloud-common-rabbit/pom.xml index 79f5225..f8daff2 100644 --- a/cloud-common/cloud-common-rabbit/pom.xml +++ b/cloud-common/cloud-common-rabbit/pom.xml @@ -34,6 +34,8 @@ com.muyu cloud-common-redis + + diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/DelayedQueueConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/DelayedQueueConfig.java deleted file mode 100644 index 0b67d49..0000000 --- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/DelayedQueueConfig.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.muyu.common.rabbit.config; - - -import com.muyu.common.rabbit.constants.RabbitmqConstants; -import org.springframework.amqp.core.*; -import org.springframework.amqp.rabbit.core.RabbitAdmin; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import javax.annotation.Resource; -import java.util.HashMap; - -/** - * @ClassName: DelayedQueueConfig - * @Description: 延迟队列配置类 - */ -@Configuration -public class DelayedQueueConfig { - - - @Resource - private RabbitAdmin rabbitAdmin; - - /** - * 声明队列 - * @return 返回队列 - */ - @Bean - public Queue delayedQueue() { - Queue queue = new Queue(RabbitmqConstants.DELAYED_QUEUE_NAME); - rabbitAdmin.declareQueue(queue); - return queue; - } - - /** - * 声明交换机 - * @return 返回交换机 - */ - @Bean - public Exchange delayedExchange() { - HashMap arguments = new HashMap<>(3); - - arguments.put("x-delayed-type", "direct"); - - /** - * 声明自定义交换机 - * 第一个参数:交换机的名称 - * 第二个参数:交换机的类型 - * 第三个参数:是否需要持久化 - * 第四个参数:是否自动删除 - * 第五个参数:其他参数 - */ - CustomExchange customExchange = new CustomExchange( - RabbitmqConstants.DELAYED_EXCHANGE_NAME, - "x-delayed-message", - true, - false, - arguments); - rabbitAdmin.declareExchange(customExchange); - return customExchange; - } - - /** - * 绑定交换机 - * @param delayedQueue 队列对象 - * @param delayedExchange 交换机对象 - */ - @Bean - public Binding delayedQueueBindingDelayedExchange( - @Qualifier("delayedQueue") Queue delayedQueue, - @Qualifier("delayedExchange") Exchange delayedExchange) { - - Binding noargs = BindingBuilder.bind(delayedQueue) - .to(delayedExchange) - .with(RabbitmqConstants.DELAYED_ROUTING_KEY) - .noargs(); - rabbitAdmin.declareBinding(noargs); - return noargs; - } - - -} diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/TopicConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/TopicConfig.java deleted file mode 100644 index 58d717b..0000000 --- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/TopicConfig.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.muyu.common.rabbit.config; - -import org.springframework.amqp.core.*; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @Author: WangXin - * @Time: 2024/4/22 11:55 - * @Description: 主题模式配置 - */ -@Configuration -public class TopicConfig { - - /** - * 主题模式交换机 - * @return exchange - */ - @Bean(name = "topicExchange") - public Exchange getTopicExchange(){ - return ExchangeBuilder - .topicExchange("exchange_topic") - .build(); - } - - /** - * 主题队列 01 - * @return queue - */ - @Bean(name = "topicQueue01") - public Queue getTopicQueue01(){ - return QueueBuilder - .durable("queue_topic_01") - .build(); - } - - /** - * 主题队列 02 - * @return queue - */ - @Bean(name = "topicQueue02") - public Queue getTopicQueue02(){ - return QueueBuilder - .durable("queue_topic_02") - .build(); - } - - /** - * 绑定队列 01 - * @return binding - */ - @Bean - public Binding getTopicBinding01(){ - return BindingBuilder - .bind(getTopicQueue01()) - .to(getTopicExchange()) - //路由键 队列1接收debug级别的消息 - .with("front.#") - .noargs(); - } - - /** - * 绑定队列 02 - * @return binding - */ - @Bean - public Binding getTopicBinding02(){ - return BindingBuilder - .bind(getTopicQueue02()) - .to(getTopicExchange()) - // 路由键 队列2接收info级别的消息 - .with("back.order.*") - .noargs(); - } -} diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/producer/RabbitMQProducerUtil.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/producer/RabbitMQProducerUtil.java deleted file mode 100644 index fc7c3b8..0000000 --- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/producer/RabbitMQProducerUtil.java +++ /dev/null @@ -1,174 +0,0 @@ -package com.muyu.common.rabbit.producer; - -import com.muyu.common.core.domain.Result; -import com.muyu.common.rabbit.constants.RabbitmqConstants; -import lombok.AllArgsConstructor; -import lombok.extern.log4j.Log4j2; -import org.springframework.amqp.core.MessageProperties; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.stereotype.Component; - -import java.util.UUID; - -/** - * @ClassName: RabbitMQProducer - * @Description: rabbitmq生产者 - */ -@Component -@AllArgsConstructor -@Log4j2 -public class RabbitMQProducerUtil { - //redis工具类对象 - - //rabbit - private final RabbitTemplate rabbitTemplate; - - - /** - * 简单模型 - * - * @param param 传递的消息 (如果是对象需要序列化) - * @return 结果集 - * 一对一消费,只有一个消费者能接收到 - */ - public Result basicSendMessage(String queueName, Object param, String msg) { - - log.info("【简单模型mq】 : method: 【 basicSendMessage 】 - ages: 【 String : {}, Object : {}, String : {} 】 ---> 【 消息发送中。。。 】", RabbitmqConstants.BASIC_QUEUE_NAME, param, msg); - // 发送简单模型消息 - // 第一个参数: 绑定规则 相当于 队列名称 - // 第二个参数:消息内容 - rabbitTemplate.convertAndSend(queueName, param, message -> { - message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); - return message; - } ); - - log.info("【简单模型mq】 : method: 【 basicSendMessage 】- queue: 【 {} 】 ---> 【 消息发送成功 】", RabbitmqConstants.BASIC_QUEUE_NAME); - - return Result.success(msg!=null?msg:"消息发送成功"); - } - - /** - * Work queue 工作模型 - * - * @param obj 传递的消息 (如果是对象需要序列化) - * @return 结果集 - * 多个消费者,你一个我一个分配消费消息,有预取机制,默认公平消费,可配置 能者多劳模式(),谁完成的快,谁多做一点 - */ - public Result workSendMessage(String queueName, Object obj, String msg) { - - log.info("【工作模型mq】 : method: 【 workSendMessage 】 - ages: 【 String : {}, Object : {}, String : {} 】 ---> 【 消息发送中。。。 】", queueName, obj, msg); - // 发送简单模型消息 - // 第一个参数: 绑定规则 相当于 队列名称 - // 第二个参数:消息内容 - rabbitTemplate.convertAndSend(queueName, obj, message -> { - message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); - return message; - } ); - - log.info("【工作模型mq】 : method: 【 workSendMessage 】- queue: 【 {} 】 ---> 【 消息发送成功 】", queueName); - - return Result.success("消息发送成功"); - } - - /** - * Publish/Subscribe 发布订阅者模型 - * 多个消费者,多个消费者可以同时接收到消息 有交换机 类型 fanout - * - * @param exchange 交换机名称 - * @param obj 发送的消息Object - * @param msg 响应的内容 - * @return 结果集 - */ - public Result publishSubscribeSendMessage(String exchange, Object obj, String msg) { - - log.info("【订阅模型mq】 : method: 【 workSendMessage 】 - ages: 【 String : {}, Object : {}, String : {} 】 ---> 【 消息发送中。。。 】", exchange, obj, msg); - // 发送简单模型消息 - // 第一个参数: exchange 交换机的名称 - // 第二个参数: 绑定规则 发布订阅者模型 不写 默认 "" 只要绑定就行 不需要规则 - // 第三个参数:消息内容 - rabbitTemplate.convertAndSend(exchange, "", obj, message -> { - message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); - return message; - } ); - - log.info("【订阅模型mq】 : method: 【 workSendMessage 】- exchange: 【 {} 】 ---> 【 消息发送成功 】", exchange); - - return Result.success("消息发送成功"); - } - - /** - * Routing路由模型 - * 使用的是 Direct 类型的交换机,会将接收到的消息根据 规则 路由到指定的Queue(队列),因此称为路由模式 - * - * @param exchange 交换机名称 - * @param rule 绑定规则 一个字符串即可 - * @param obj 发送的消息Object - * @param msg 响应的内容 - * @return 结果集 - */ - public Result routingSendMessage(String exchange, String rule, Object obj, String msg) { - - log.info("【路由模型mq】 : method: 【 workSendMessage 】 - ages: 【 String : {}, Object : {}, String : {} 】 ---> 【 消息发送中。。。 】", exchange, obj, msg); - // 发送简单模型消息 - // 第一个参数: 绑定规则 相当于 队列名称 - // 第二个参数:消息内容 - rabbitTemplate.convertAndSend(exchange, rule, obj, message -> { - message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); - return message; - } ); - - log.info("【路由模型mq】 : method: 【 workSendMessage 】- exchange: 【 {} 】 ---> 【 消息发送成功 】", exchange); - - return Result.success("消息发送成功"); - } - - - /** - * Topic主题模型模型 - * 使用的是 topic 类型的交换机 - * - * @param exchange 交换机名称 - * @param rule 绑定规则 可以绑定多个单词以 . 拼接 也可以使用 #(匹配 零个 一个 或 多个 单词) 或 *(匹配 一个 单词) 通配符(例如:name.msg, *.msg, age.# ) - * @param obj 发送的消息Object - * @param msg 响应的内容 - * @return 结果集 - */ - public Result topicSendMessage(String exchange, String rule, Object obj) { - - log.info("【主题模型mq】 : method: 【 workSendMessage 】 - ages: 【 String : {}, Object : {} 】 ---> 【 消息发送中。。。 】", exchange, obj); - // 发送简单模型消息 - // 第一个参数: 绑定规则 相当于 队列名称 - // 第二个参数:消息内容 - rabbitTemplate.convertAndSend(exchange, rule, obj, message -> { - message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); - return message; - } ); - - log.info("【主题模型mq】 : method: 【 workSendMessage 】- exchange: 【 {} 】 ---> 【 消息发送成功 】", exchange); - - return Result.success(obj,"消息发送成功"); - } - - - /** - * 延迟队列模型 - * @param param 传输内容 - * @param delayTime 延迟时间 - * @return 结果集 - */ - public Result delayedSendMessage(Long delayTime, Object param) { - log.info("【延迟队列模型】 : method: 【 delayedSendMessage 】 消息内容:{}---> 【 消息发送中。。。 】",param); - - rabbitTemplate.convertAndSend(RabbitmqConstants.DELAYED_EXCHANGE_NAME, RabbitmqConstants.DELAYED_ROUTING_KEY,param, message -> { - MessageProperties messageProperties = message.getMessageProperties(); - messageProperties.setMessageId(UUID.randomUUID().toString()); - messageProperties.setDelayLong(delayTime); - return message; - }); - log.info("【延迟队列模型】 : method: 【 delayedSendMessage 】 消息内容:{}---> 【 消息发送成功 】",param); - - return Result.success(param,"消息发送成功"); - - } - -} diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/MyConfirmCallback.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/MyConfirmCallback.java similarity index 97% rename from cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/MyConfirmCallback.java rename to cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/MyConfirmCallback.java index 2b40812..4c31cd4 100644 --- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/MyConfirmCallback.java +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/MyConfirmCallback.java @@ -1,4 +1,4 @@ -package com.muyu.common.rabbit.config; +package com.muyu.rabbitmq.config; import lombok.AllArgsConstructor; import org.springframework.amqp.rabbit.connection.CorrelationData; diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitAdminConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/RabbitAdminConfig.java similarity index 88% rename from cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitAdminConfig.java rename to cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/RabbitAdminConfig.java index 27b24c5..cca4318 100644 --- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitAdminConfig.java +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/RabbitAdminConfig.java @@ -1,4 +1,4 @@ -package com.muyu.common.rabbit.config; +package com.muyu.rabbitmq.config; @@ -21,16 +21,16 @@ public class RabbitAdminConfig { private String username; @Value("${spring.rabbitmq.password}") private String password; - @Value("${spring.rabbitmq.virtualhost}") - private String virtualHost; + @Value("${spring.rabbitmq.port}") + private Integer port; @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(); cachingConnectionFactory.setHost(host); + cachingConnectionFactory.setPort(port); cachingConnectionFactory.setUsername(username); cachingConnectionFactory.setPassword(password); - cachingConnectionFactory.setVirtualHost(virtualHost); return cachingConnectionFactory; } diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitmqConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/RabbitmqConfig.java similarity index 94% rename from cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitmqConfig.java rename to cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/RabbitmqConfig.java index 9814d1b..1b08976 100644 --- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/RabbitmqConfig.java +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/RabbitmqConfig.java @@ -1,4 +1,4 @@ -package com.muyu.common.rabbit.config; +package com.muyu.rabbitmq.config; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/ReturnCallbackConfig.java similarity index 96% rename from cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java rename to cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/ReturnCallbackConfig.java index 212e2fd..e1c217b 100644 --- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/config/ReturnCallbackConfig.java +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/config/ReturnCallbackConfig.java @@ -1,4 +1,4 @@ -package com.muyu.common.rabbit.config; +package com.muyu.rabbitmq.config; import lombok.AllArgsConstructor; import org.springframework.amqp.core.ReturnedMessage; diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/constants/RabbitmqConstants.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/constants/RabbitmqConstants.java similarity index 94% rename from cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/constants/RabbitmqConstants.java rename to cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/constants/RabbitmqConstants.java index 45495ab..5826edd 100644 --- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/constants/RabbitmqConstants.java +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/constants/RabbitmqConstants.java @@ -1,4 +1,4 @@ -package com.muyu.common.rabbit.constants; +package com.muyu.rabbitmq.constants; /** * diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/consumer/RabbitMQConsumerUtil.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/consumer/RabbitMQConsumerUtil.java similarity index 91% rename from cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/consumer/RabbitMQConsumerUtil.java rename to cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/consumer/RabbitMQConsumerUtil.java index 2181562..5d462ce 100644 --- a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/common/rabbit/consumer/RabbitMQConsumerUtil.java +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/consumer/RabbitMQConsumerUtil.java @@ -1,11 +1,15 @@ -package com.muyu.common.rabbit.consumer; +package com.muyu.rabbitmq.consumer; import com.alibaba.fastjson2.JSONObject; import com.muyu.common.redis.service.RedisService; +//import com.muyu.rabbitmq.util.CacheUtil; import com.rabbitmq.client.Channel; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.IOException; @@ -22,6 +26,9 @@ public class RabbitMQConsumerUtil { private final RedisService redisService; +// @Autowired +// private CacheUtil cacheUtil; + /** * 普通消费者 @@ -29,7 +36,8 @@ public class RabbitMQConsumerUtil { * @param message * @param channel */ - public void rabbitMQBasicConsumer(Object data ,Message message , Channel channel) { +// @RabbitListener(queuesToDeclare = @Queue(name = "basic")) + public void rabbitMQBasicConsumer(String data ,Message message , Channel channel) { log.info("当前时间:{} :RabbitMQConsumerUtil : {}", new Date(), message); try { // 获取到消息 开始消费 @@ -42,10 +50,12 @@ public class RabbitMQConsumerUtil { return; } - /** * -----------------------------------以下为异步业务操作---------------------------- */ + String carList = (String) redisService.redisTemplate.opsForValue().get("carList"); + + /** * ------------------------------------------------------------------------------ diff --git a/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/producer/RabbitMQProducerUtil.java b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/producer/RabbitMQProducerUtil.java new file mode 100644 index 0000000..3d9a148 --- /dev/null +++ b/cloud-common/cloud-common-rabbit/src/main/java/com/muyu/rabbitmq/producer/RabbitMQProducerUtil.java @@ -0,0 +1,174 @@ +package com.muyu.rabbitmq.producer; + +import com.muyu.common.core.domain.Result; +import com.muyu.rabbitmq.constants.RabbitmqConstants; +import lombok.AllArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.MessageProperties; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Component; + +import java.util.UUID; + +/** + * @ClassName: RabbitMQProducer + * @Description: rabbitmq生产者 + */ +@Component +@AllArgsConstructor +@Log4j2 +public class RabbitMQProducerUtil { + //redis工具类对象 + + //rabbit + private final RabbitTemplate rabbitTemplate; + + + /** + * 简单模型 + * + * @param param 传递的消息 (如果是对象需要序列化) + * @return 结果集 + * 一对一消费,只有一个消费者能接收到 + */ + public void basicSendMessage(String queueName, String param) { + + log.info("【简单模型mq】 : method: 【 basicSendMessage 】 - ages: 【 String : {}, Object : {}】 ---> 【 消息发送中。。。 】", RabbitmqConstants.BASIC_QUEUE_NAME, param); + // 发送简单模型消息 + // 第一个参数: 绑定规则 相当于 队列名称 + // 第二个参数:消息内容 + rabbitTemplate.convertAndSend(queueName, param, message -> { + message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); + return message; + } ); + + log.info("【简单模型mq】 : method: 【 basicSendMessage 】- queue: 【 {} 】 ---> 【 消息发送成功 】", RabbitmqConstants.BASIC_QUEUE_NAME); + + + } + +// /** +// * Work queue 工作模型 +// * +// * @param obj 传递的消息 (如果是对象需要序列化) +// * @return 结果集 +// * 多个消费者,你一个我一个分配消费消息,有预取机制,默认公平消费,可配置 能者多劳模式(),谁完成的快,谁多做一点 +// */ +// public Result workSendMessage(String queueName, Object obj, String msg) { +// +// log.info("【工作模型mq】 : method: 【 workSendMessage 】 - ages: 【 String : {}, Object : {}, String : {} 】 ---> 【 消息发送中。。。 】", queueName, obj, msg); +// // 发送简单模型消息 +// // 第一个参数: 绑定规则 相当于 队列名称 +// // 第二个参数:消息内容 +// rabbitTemplate.convertAndSend(queueName, obj, message -> { +// message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); +// return message; +// } ); +// +// log.info("【工作模型mq】 : method: 【 workSendMessage 】- queue: 【 {} 】 ---> 【 消息发送成功 】", queueName); +// +// return Result.success("消息发送成功"); +// } +// +// /** +// * Publish/Subscribe 发布订阅者模型 +// * 多个消费者,多个消费者可以同时接收到消息 有交换机 类型 fanout +// * +// * @param exchange 交换机名称 +// * @param obj 发送的消息Object +// * @param msg 响应的内容 +// * @return 结果集 +// */ +// public Result publishSubscribeSendMessage(String exchange, Object obj, String msg) { +// +// log.info("【订阅模型mq】 : method: 【 workSendMessage 】 - ages: 【 String : {}, Object : {}, String : {} 】 ---> 【 消息发送中。。。 】", exchange, obj, msg); +// // 发送简单模型消息 +// // 第一个参数: exchange 交换机的名称 +// // 第二个参数: 绑定规则 发布订阅者模型 不写 默认 "" 只要绑定就行 不需要规则 +// // 第三个参数:消息内容 +// rabbitTemplate.convertAndSend(exchange, "", obj, message -> { +// message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); +// return message; +// } ); +// +// log.info("【订阅模型mq】 : method: 【 workSendMessage 】- exchange: 【 {} 】 ---> 【 消息发送成功 】", exchange); +// +// return Result.success("消息发送成功"); +// } +// +// /** +// * Routing路由模型 +// * 使用的是 Direct 类型的交换机,会将接收到的消息根据 规则 路由到指定的Queue(队列),因此称为路由模式 +// * +// * @param exchange 交换机名称 +// * @param rule 绑定规则 一个字符串即可 +// * @param obj 发送的消息Object +// * @param msg 响应的内容 +// * @return 结果集 +// */ +// public Result routingSendMessage(String exchange, String rule, Object obj, String msg) { +// +// log.info("【路由模型mq】 : method: 【 workSendMessage 】 - ages: 【 String : {}, Object : {}, String : {} 】 ---> 【 消息发送中。。。 】", exchange, obj, msg); +// // 发送简单模型消息 +// // 第一个参数: 绑定规则 相当于 队列名称 +// // 第二个参数:消息内容 +// rabbitTemplate.convertAndSend(exchange, rule, obj, message -> { +// message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); +// return message; +// } ); +// +// log.info("【路由模型mq】 : method: 【 workSendMessage 】- exchange: 【 {} 】 ---> 【 消息发送成功 】", exchange); +// +// return Result.success("消息发送成功"); +// } +// +// +// /** +// * Topic主题模型模型 +// * 使用的是 topic 类型的交换机 +// * +// * @param exchange 交换机名称 +// * @param rule 绑定规则 可以绑定多个单词以 . 拼接 也可以使用 #(匹配 零个 一个 或 多个 单词) 或 *(匹配 一个 单词) 通配符(例如:name.msg, *.msg, age.# ) +// * @param obj 发送的消息Object +// * @param msg 响应的内容 +// * @return 结果集 +// */ +// public Result topicSendMessage(String exchange, String rule, Object obj) { +// +// log.info("【主题模型mq】 : method: 【 workSendMessage 】 - ages: 【 String : {}, Object : {} 】 ---> 【 消息发送中。。。 】", exchange, obj); +// // 发送简单模型消息 +// // 第一个参数: 绑定规则 相当于 队列名称 +// // 第二个参数:消息内容 +// rabbitTemplate.convertAndSend(exchange, rule, obj, message -> { +// message.getMessageProperties().setMessageId(UUID.randomUUID().toString()); +// return message; +// } ); +// +// log.info("【主题模型mq】 : method: 【 workSendMessage 】- exchange: 【 {} 】 ---> 【 消息发送成功 】", exchange); +// +// return Result.success(obj,"消息发送成功"); +// } + + + /** + * 延迟队列模型 + * @param param 传输内容 + * @param delayTime 延迟时间 + * @return 结果集 + */ +// public Result delayedSendMessage(Long delayTime, Object param) { +// log.info("【延迟队列模型】 : method: 【 delayedSendMessage 】 消息内容:{}---> 【 消息发送中。。。 】",param); +// +// rabbitTemplate.convertAndSend(RabbitmqConstants.DELAYED_EXCHANGE_NAME, RabbitmqConstants.DELAYED_ROUTING_KEY,param, message -> { +// MessageProperties messageProperties = message.getMessageProperties(); +// messageProperties.setMessageId(UUID.randomUUID().toString()); +// messageProperties.setDelayLong(delayTime); +// return message; +// }); +// log.info("【延迟队列模型】 : method: 【 delayedSendMessage 】 消息内容:{}---> 【 消息发送成功 】",param); +// +// return Result.success(param,"消息发送成功"); +// +// } + +} diff --git a/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 6cd925a..cffeca7 100644 --- a/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/cloud-common/cloud-common-rabbit/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -2,6 +2,5 @@ com.muyu.rabbitmq.producer.RabbitMQProducerUtil com.muyu.rabbitmq.consumer.RabbitMQConsumerUtil com.muyu.rabbitmq.config.RabbitmqConfig com.muyu.rabbitmq.config.MyConfirmCallback -com.muyu.rabbitmq.config.DelayedQueueConfig com.muyu.rabbitmq.config.RabbitAdminConfig com.muyu.rabbitmq.config.ReturnCallbackConfig diff --git a/cloud-common/cloud-common-saas/pom.xml b/cloud-common/cloud-common-saas/pom.xml index 6c0d2f6..bb7f692 100644 --- a/cloud-common/cloud-common-saas/pom.xml +++ b/cloud-common/cloud-common-saas/pom.xml @@ -33,9 +33,10 @@ com.muyu cloud-common-security - - - + + com.mysql + mysql-connector-j + diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/ManyDataSource.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/ManyDataSource.java index 7245b4d..58d672f 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/ManyDataSource.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/ManyDataSource.java @@ -6,17 +6,17 @@ import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; import com.muyu.cloud.common.many.datasource.constents.DatasourceContent; import com.muyu.cloud.common.many.datasource.domain.model.DataSourceInfo; import com.muyu.cloud.common.many.datasource.factory.DruidDataSourceFactory; +import com.muyu.cloud.common.many.datasource.init.InitDataSource; import com.muyu.cloud.common.many.datasource.role.DynamicDataSource; +import com.muyu.cloud.common.saas.domain.Datasource; import com.muyu.cloud.common.saas.domain.model.EntInfo; import com.muyu.cloud.common.saas.exception.SaaSException; import com.muyu.common.core.domain.Result; import com.muyu.common.core.utils.SpringUtils; -import com.muyu.common.system.domain.Datasource; -import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.remote.RemoteSaaSService; -import com.muyu.common.system.remote.RemoteUserService; import lombok.extern.log4j.Log4j2; import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.boot.autoconfigure.AutoConfiguration; @@ -29,8 +29,7 @@ import java.util.List; import java.util.Map; /** - * 多数据源 - * @author liuwu + * @Author: DongZeLiang * @date: 2024/6/3 * @Description: 多数据源 * @Version: 1.0 @@ -39,9 +38,14 @@ import java.util.Map; @Component @AutoConfiguration(before = {MybatisPlusAutoConfiguration.class, MybatisAutoConfiguration.class}) public class ManyDataSource implements ApplicationRunner{ + + @Autowired + private InitDataSource initDataSource; + + private List dataSourceInfoList(){ RemoteSaaSService remoteSaaSService = SpringUtils.getBean(RemoteSaaSService.class); - Result> tableDataInfoResult = remoteSaaSService.findDatabaseList(); + Result> tableDataInfoResult = initDataSource.initDatasource(); if (tableDataInfoResult==null){ throw new SaaSException("saas远调数据源错误"); } diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java index bb27584..b69b858 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java @@ -1,8 +1,7 @@ package com.muyu.cloud.common.many.datasource.constents; /** - * 数据源常量 - * @author liuwu + * @author DongZl * @description: 数据源常量 * @Date 2023-8-1 上午 11:02 */ @@ -17,8 +16,4 @@ public class DatasourceContent { public final static String IP = "47.101.53.251"; public final static Integer PORT = 3306; - - public static String getDatasourceUrl(String databaseName) { - return String.format(DATASOURCE_URL,USER_NAME,PASSWORD,IP,PORT, databaseName); - } } diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/domain/model/DataSourceInfo.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/domain/model/DataSourceInfo.java index 6406cfc..73cc26e 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/domain/model/DataSourceInfo.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/domain/model/DataSourceInfo.java @@ -8,8 +8,7 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * 数据源实体类 - * @author liuwu + * @author DongZl * @description: 数据源实体类 * @Date 2023-8-1 上午 11:15 */ diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/factory/DruidDataSourceFactory.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/factory/DruidDataSourceFactory.java index 30eee74..7ceb782 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/factory/DruidDataSourceFactory.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/factory/DruidDataSourceFactory.java @@ -8,8 +8,7 @@ import org.springframework.stereotype.Component; import java.sql.SQLException; /** - * Druid工厂 - * @author liuwu + * @Author: DongZeLiang * @date: 2024/6/3 * @Description: Druid工厂 * @Version: 1.0 diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/holder/DynamicDataSourceHolder.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/holder/DynamicDataSourceHolder.java index 5cafaa0..e53229a 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/holder/DynamicDataSourceHolder.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/holder/DynamicDataSourceHolder.java @@ -6,7 +6,7 @@ import org.springframework.util.Assert; /** * 数据源切换处理 * - * @author liuwu + * @author Dongzl */ @Slf4j public class DynamicDataSourceHolder { diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/init/InitDataSource.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/init/InitDataSource.java new file mode 100644 index 0000000..3dc4237 --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/init/InitDataSource.java @@ -0,0 +1,58 @@ +package com.muyu.cloud.common.many.datasource.init; + + +import com.muyu.cloud.common.saas.domain.Datasource; +import com.muyu.common.core.domain.Result; +import lombok.extern.log4j.Log4j2; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; + +@Component +@Log4j2 +public class InitDataSource { + + public static final String USER="root"; + public static final String PASSWORD="Lw030106"; + + @Bean + @Primary + public Result> initDatasource(){ + ArrayList list = new ArrayList<>(); + + try { + DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver()); + Connection connection= DriverManager.getConnection("jdbc:mysql://47.101.53.251:3306/datasource?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT&useSSL=false",USER,PASSWORD); + String sql="select * from `datasource` "; + + Statement stmt = connection.createStatement(); + ResultSet rs = stmt.executeQuery(sql); + + while (rs.next()){ + Datasource datasource = new Datasource(); + datasource.setId(rs.getInt("id")); + datasource.setFirmName(rs.getString("firm_name")); + datasource.setDatabaseName(rs.getString("database_name")); + list.add(datasource); + } + + } catch (SQLException e) { + throw new RuntimeException(e); + } + return Result.success(list); + }; + + + + + + + + + + +} diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/contents/SaaSConstant.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/contents/SaaSConstant.java index 042fe95..241ce32 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/contents/SaaSConstant.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/contents/SaaSConstant.java @@ -1,8 +1,7 @@ package com.muyu.cloud.common.saas.contents; /** - * SAAS常量 - * @author liuwu + * @Author: DongZeLiang * @date: 2024/6/3 * @Description: SAAS常量 * @Version: 1.0 diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/domain/model/EntInfo.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/domain/model/EntInfo.java index db7e230..5c1985a 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/domain/model/EntInfo.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/domain/model/EntInfo.java @@ -6,7 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @Author: liuwu + * @Author: DongZeLiang * @date: 2024/6/3 * @Description: 企业信息 * @Version: 1.0 diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/exception/SaaSException.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/exception/SaaSException.java index 60e5054..b2b4cc7 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/exception/SaaSException.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/exception/SaaSException.java @@ -4,8 +4,7 @@ package com.muyu.cloud.common.saas.exception; import com.muyu.common.core.exception.ServiceException; /** - * SaaS异常类 - * @author liuwu + * @Author: DongZeLiang * @date: 2024/6/3 * @Description: SaaS异常类 * @Version: 1.0 diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/SaaSInterceptor.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/SaaSInterceptor.java index 997fe6b..d4d87b6 100644 --- a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/SaaSInterceptor.java +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/SaaSInterceptor.java @@ -1,10 +1,9 @@ package com.muyu.cloud.common.saas.interceptor; -import com.alibaba.fastjson2.JSONObject; -import com.muyu.cloud.common.saas.contents.SaaSConstant; import com.muyu.cloud.common.many.datasource.holder.DynamicDataSourceHolder; -import com.muyu.cloud.common.saas.exception.SaaSException; import com.muyu.cloud.common.many.datasource.role.DynamicDataSource; +import com.muyu.cloud.common.saas.contents.SaaSConstant; +import com.muyu.cloud.common.saas.exception.SaaSException; import com.muyu.common.core.utils.ServletUtils; import com.muyu.common.core.utils.SpringUtils; import jakarta.servlet.http.HttpServletRequest; @@ -14,8 +13,7 @@ import org.springframework.web.servlet.AsyncHandlerInterceptor; /** - * SAAS拦截器 - * @author liuwu + * @Author: DongZeLiang * @date: 2024/6/3 * @Description: SAAS拦截器 * @Version: 1.0 diff --git a/cloud-common/cloud-common-saas/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-common/cloud-common-saas/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..4076e9f --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,4 @@ +com.muyu.cloud.common.saas.interceptor.WebMvcSaaSConfig +com.muyu.cloud.common.many.datasource.ManyDataSource +com.muyu.cloud.common.many.datasource.factory.DruidDataSourceFactory +com.muyu.cloud.common.many.datasource.init.InitDataSource diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/RemoteUserService.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/RemoteUserService.java index 1154a72..d3cd939 100644 --- a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/RemoteUserService.java +++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/RemoteUserService.java @@ -8,6 +8,7 @@ import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.remote.factory.RemoteUserFallbackFactory; import com.muyu.common.system.domain.LoginUser; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -52,4 +53,12 @@ public interface RemoteUserService { */ @PostMapping("/user/enterprise") ResultsettlementEnterpriseInfo(@RequestBody Business enterprise, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 用户添加 + * @param sysUser + * @return + */ + @PostMapping("/user/addUser") + public Result addUser(@RequestBody SysUser sysUser,@RequestHeader(SecurityConstants.FROM_SOURCE)String source); } diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/factory/RemoteUserFallbackFactory.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/factory/RemoteUserFallbackFactory.java index f725a4c..c9045dd 100644 --- a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/factory/RemoteUserFallbackFactory.java +++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/factory/RemoteUserFallbackFactory.java @@ -45,6 +45,12 @@ public class RemoteUserFallbackFactory implements FallbackFactory addUser(SysUser sysUser, String source) { + return Result.error("用户添加失败"); + } + + }; } } diff --git a/cloud-gateway/src/main/resources/bootstrap.yml b/cloud-gateway/src/main/resources/bootstrap.yml index de95a70..cf1cc9f 100644 --- a/cloud-gateway/src/main/resources/bootstrap.yml +++ b/cloud-gateway/src/main/resources/bootstrap.yml @@ -7,7 +7,7 @@ nacos: addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: yzl + namespace: four # Spring spring: diff --git a/cloud-modules/cloud-event/pom.xml b/cloud-modules/cloud-event/pom.xml index cae475e..d9321b3 100644 --- a/cloud-modules/cloud-event/pom.xml +++ b/cloud-modules/cloud-event/pom.xml @@ -115,6 +115,12 @@ cloud-common-rabbit + + com.muyu + saas-cache + 3.6.3 + + diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/basic/EventPublisher.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/basic/EventPublisher.java index 624f7fa..f724836 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/basic/EventPublisher.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/basic/EventPublisher.java @@ -28,6 +28,4 @@ public class EventPublisher implements ApplicationEventPublisherAware { publisher.publishEvent(event); } - - } diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/IoTDBConfig.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/IoTDBConfig.java index eb71267..8016558 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/IoTDBConfig.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/config/IoTDBConfig.java @@ -66,9 +66,7 @@ public class IoTDBConfig { measurements.add("car_vin"); measurements.add("information"); - session.insertRecord(TABLENAME,System.currentTimeMillis(),measurements,list); - //关闭连接 session.close(); } catch (IoTDBConnectionException e) { diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MessageConsumer.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MessageConsumer.java index 3cb39c0..5caad0b 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MessageConsumer.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MessageConsumer.java @@ -1,7 +1,5 @@ package com.muyu.event.consumer; - - import com.alibaba.fastjson2.JSONObject; import com.muyu.event.basic.EventPublisher; import lombok.extern.log4j.Log4j2; @@ -36,7 +34,6 @@ public class MessageConsumer implements ApplicationRunner { private final String topic="four_car"; - @Override public void run(ApplicationArguments args) throws Exception { List list = Collections.singletonList(topic); @@ -48,10 +45,8 @@ public class MessageConsumer implements ApplicationRunner { String value = record.value(); JSONObject jsonObject = JSONObject.parseObject(value); log.info("value:{}",value); -// eventPublisher.publishEvent(jsonObject); + eventPublisher.publishEvent(jsonObject); }); - - } } } diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MqConsumer.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MqConsumer.java new file mode 100644 index 0000000..89babbf --- /dev/null +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/MqConsumer.java @@ -0,0 +1,90 @@ +package com.muyu.event.consumer; + +import com.alibaba.fastjson2.JSONObject; +import com.muyu.cache.ElectronicFenceGroupCacheService; +import com.muyu.cache.SysCarCacheService; +import com.muyu.common.domain.database.ElectronicFenceGroup; +import com.muyu.common.domain.resp.SysCarVo; +import com.muyu.common.redis.service.RedisService; +import com.muyu.rabbitmq.consumer.RabbitMQConsumerUtil; +import com.rabbitmq.client.Channel; +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.Date; +import java.util.List; + +/** + * rabbitmq 监听器 + * @author 刘武 + * @package:com.muyu.event.consumer + * @name:MqConsumer + * @date:2024/10/2 14:17 + */ + +@Component +@Log4j2 +public class MqConsumer { + + @Autowired + private RedisService redisService; + + @Autowired + private SysCarCacheService sysCarCacheService; + @Autowired + private ElectronicFenceGroupCacheService electronicFenceGroupCacheService; + + @RabbitListener(queuesToDeclare = @Queue(name = "basic")) + public void rabbitMQBasicConsumer(String data , Message message , Channel channel) { + log.info("当前时间:{} :RabbitMQConsumerUtil : {}", new Date(), message); + try { + // 获取到消息 开始消费 + log.info("消息消费者接收到消息,消息内容:{}", JSONObject.toJSONString(data)); + + Long add = redisService.redisTemplate.opsForSet().add(data, message.getMessageProperties().getMessageId()); + + if (add != 1) { + return; + } + + /** + * -----------------------------------以下为异步业务操作---------------------------- + */ + + + /** + * ------------------------------------------------------------------------------ + */ + // 消费消息成功之后需要确认 + // long deliveryTag 消息投递序号 自增的数字 在整个队列中唯一 拿到这个序号就相当于拿到这条消息 + // boolean multiple 是否批量确认 true 批量 确认小于等于当前投递序号的消息 false 单个确认 + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + log.info("xxx消费者接收到消息,消息内容:{},消费成功...", message); + + } catch (Exception e) { + log.error("xxx消费者接收到消息,消息内容:{},消费消息异常,异常信息:{}", message, e); + // 消息回退 拒绝消费消息 + // long deliveryTag 消息投递序号 自增的数字 在整个队列中唯一 拿到这个序号就相当于拿到这条消息 + // boolean requeue 是否回到原来的队列 + try { + channel.basicReject(message.getMessageProperties().getDeliveryTag(), true); +// channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); + } catch (IOException ex) { + log.error("xxx消费者接收到消息,消息内容:{},回退消息异常,异常信息:{}", message, ex); + } + }finally { + try { + channel.close(); + } catch (Exception e) { + log.error("xxx消费者关闭Channel异常,消息内容:{},异常信息:{}", message, e); + } + } + } + + +} diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/OnlineConsumer.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/OnlineConsumer.java index d8871b7..1fecc2e 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/OnlineConsumer.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/consumer/OnlineConsumer.java @@ -18,4 +18,6 @@ public class OnlineConsumer { + + } diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/DataController.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/DataController.java index d1ff027..d02d4b7 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/DataController.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/DataController.java @@ -4,11 +4,13 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** + * 数据处理 * @author 刘武 * @package:com.muyu.event.controller * @name:DataController * @date:2024/9/29 20:16 */ + @RestController @RequestMapping("data") public class DataController { diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/IoTDBController.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/IoTDBController.java index 3fa091c..d73514c 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/IoTDBController.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/IoTDBController.java @@ -19,13 +19,12 @@ import java.util.List; * @name:ItodbController * @date:2024/9/28 19:17 */ -@RestController() +@RestController public class IoTDBController { @Autowired private IoTDBService tdbService; - /** * 查询实时车辆信息列表 * @return list @@ -47,7 +46,6 @@ public class IoTDBController { return Result.success(carInformation); }; - /** * 车辆添加 * @param addCarInformation @@ -59,16 +57,4 @@ public class IoTDBController { return Result.success("添加成功"); }; - - - - - - - - - - - - } diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/TestController.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/TestController.java index fb46a2e..cb379a4 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/TestController.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/controller/TestController.java @@ -2,20 +2,17 @@ package com.muyu.event.controller; import com.alibaba.fastjson2.JSONObject; -import com.muyu.event.service.TestService; +import com.muyu.rabbitmq.producer.RabbitMQProducerUtil; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord; -import org.springframework.amqp.core.AmqpTemplate; -import org.springframework.beans.factory.annotation.Autowired; - import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.text.SimpleDateFormat; -import java.util.Date; + /** + * 测试 * @author 刘武 * @package:com.muyu.event.controller * @name:TestController @@ -26,25 +23,33 @@ public class TestController { @Resource private KafkaProducer kafkaProducer; - + @Resource + private RabbitMQProducerUtil rabbitMQProducerUtil; private static final String topic="four_car"; - @GetMapping("send") + @GetMapping("sendKafka") public String sendKafka(){ String message="发送一条信息"; JSONObject jsonObject = new JSONObject(); - jsonObject.put("cj","sb"); - - - ProducerRecord producerRecord = new ProducerRecord(topic,jsonObject.toJSONString()); + jsonObject.put("cj","hh"); + ProducerRecord producerRecord = new ProducerRecord(topic,jsonObject.toString()); kafkaProducer.send(producerRecord); return "success"; } + @GetMapping("sendMq") + public String sendMq(){ + String message="发送一条信息-mq"; + rabbitMQProducerUtil.basicSendMessage("basic",message); + return "success-mq"; + }; + + + diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/domian/Event.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/domian/Event.java index 8111375..82761e8 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/domian/Event.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/domian/Event.java @@ -13,7 +13,13 @@ import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; - +/** + * 事件实体类 + * @author 刘武 + * @package:com.muyu.event.domain + * @name:Event + * @date:2024/9/28 23:10 + */ @Data @AllArgsConstructor @NoArgsConstructor diff --git a/cloud-modules/cloud-event/src/main/java/com/muyu/event/listener/AddDatabaseListener.java b/cloud-modules/cloud-event/src/main/java/com/muyu/event/listener/AddDatabaseListener.java index e3fc4a7..95e33bd 100644 --- a/cloud-modules/cloud-event/src/main/java/com/muyu/event/listener/AddDatabaseListener.java +++ b/cloud-modules/cloud-event/src/main/java/com/muyu/event/listener/AddDatabaseListener.java @@ -28,6 +28,10 @@ public class AddDatabaseListener implements EventListener { keys.add(key); values.add((String) value); }); + + + + } @Override diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/controller/SysUserController.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/controller/SysUserController.java index f8ef4d5..13bce5c 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/controller/SysUserController.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/controller/SysUserController.java @@ -302,4 +302,11 @@ public class SysUserController extends BaseController { public Result deptTree (SysDept dept) { return success(deptService.selectDeptTreeList(dept)); } + + + @PostMapping("/addUser") + public Result addUser(@RequestBody SysUser sysUser){ + Integer i = userService.addUser(sysUser); + return Result.success(i); + } } diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java index 3dc6b0b..4015eff 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java @@ -158,5 +158,8 @@ public interface SysUserMapper extends BaseMapper { List selectCompanyList(); + Integer addUser(SysUser sysUser); + + } diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysUserService.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysUserService.java index 7dc514c..6ac720a 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysUserService.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysUserService.java @@ -230,5 +230,6 @@ public interface SysUserService extends IService { List selectCompanyList(); + Integer addUser(SysUser sysUser); } diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java index bc4162a..7c46437 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java @@ -518,4 +518,9 @@ public class SysUserServiceImpl extends ServiceImpl impl return userMapper.selectCompanyList(); } + @Override + public Integer addUser(SysUser sysUser) { + return userMapper.addUser(sysUser); + } + } diff --git a/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml index afe1a22..566c624 100644 --- a/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml @@ -7,7 +7,7 @@ nacos: addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: yzl + namespace: four # SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all # Spring spring: diff --git a/cloud-modules/cloud-modules-system/src/main/resources/mapper/system/SysUserMapper.xml b/cloud-modules/cloud-modules-system/src/main/resources/mapper/system/SysUserMapper.xml index 6023ef5..95edafd 100644 --- a/cloud-modules/cloud-modules-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/cloud-modules/cloud-modules-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -24,6 +24,7 @@ + @@ -204,6 +205,7 @@ status, create_by, remark, + database_name, create_time )values( #{userId}, @@ -218,6 +220,7 @@ #{status}, #{createBy}, #{remark}, + #{databaseName} sysdate() ) @@ -228,6 +231,11 @@ INSERT INTO `saas`.`tb_enterprise` (`enterprise_id`, `enterprise_name`, `enterprise_car_count`, `enterprise_fence_count`, `enterprise_database_name`) VALUES (NULL, #{firmName}, 0, 0, #{databaseName}); + + INSERT INTO `four`.`sys_user` + (`dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`, `database_name`) + VALUES ( 105, #{userName}, '若依', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '47.101.53.251', '2024-05-23 15:08:18', 'admin', #{createTime}, '', NULL, '测试员', #{databaseName}); + update sys_user diff --git a/cloud-modules/cloud-modules-template/pom.xml b/cloud-modules/cloud-modules-template/pom.xml index 65e4bd1..12015f9 100644 --- a/cloud-modules/cloud-modules-template/pom.xml +++ b/cloud-modules/cloud-modules-template/pom.xml @@ -17,11 +17,12 @@ - - com.muyu - cloud-common-kafka - 3.6.3 - + + + + + + com.muyu.server @@ -88,6 +89,15 @@ com.muyu cloud-common-xxl + + + org.springframework.boot + spring-boot-starter-data-redis + + + redis.clients + jedis + diff --git a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/CloudTemplateApplication.java b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/CloudTemplateApplication.java index 80804e6..359305f 100644 --- a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/CloudTemplateApplication.java +++ b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/CloudTemplateApplication.java @@ -13,11 +13,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableMyFeignClients @SpringBootApplication public class CloudTemplateApplication { - public static void main(String[] args) { - SpringApplication.run(CloudTemplateApplication.class, args); - } - } diff --git a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/config/MqttConfigure.java b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/config/MqttConfigure.java index a3a6474..9802526 100644 --- a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/config/MqttConfigure.java +++ b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/config/MqttConfigure.java @@ -1,11 +1,17 @@ package com.muyu.template.config; import cn.hutool.json.JSONObject; import com.alibaba.fastjson2.JSON; +import com.muyu.cache.MessageTemplateCacheService; +import com.muyu.cache.MessageTemplateTypeCacheService; +import com.muyu.cache.SysCarCacheService; +import com.muyu.cache.TemplateCacheService; +import com.muyu.common.domain.MessageTemplate; import com.muyu.common.domain.MessageTemplateType; import com.muyu.common.domain.SysCar; +import com.muyu.common.domain.Template; +import com.muyu.common.domain.resp.SysCarVo; import com.muyu.common.redis.service.RedisService; -import com.muyu.server.service.MessageTemplateTypeService; -import com.muyu.server.service.SysCarService; + import lombok.extern.log4j.Log4j2; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord; @@ -13,11 +19,18 @@ import org.eclipse.paho.client.mqttv3.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.PostConstruct; +import javax.annotation.Resource; import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** - * * @author liuxinyue * @Package:com.muyu.mqtt.configure * @Project:cloud-server @@ -32,21 +45,20 @@ public class MqttConfigure { private RedisService redisService; @Autowired - private RedisTemplate redisTemplate; + private SysCarCacheService service; + + @Autowired + private MessageTemplateCacheService messageTemplateCacheService; + + @Autowired + private MessageTemplateTypeCacheService messageTemplateTypeCacheService; @Autowired private KafkaProducer kafkaProducer; - @Autowired - private SysCarService service; - - @Autowired - private MessageTemplateTypeService messageTemplateTypeService; - @PostConstruct public void MQTTMonitoring(){ - - String topic = "vehicle"; + String topic = "car"; int qos = 2; String broker = "tcp://47.101.53.251:1883"; String clientId = "lxy"; @@ -74,8 +86,8 @@ public class MqttConfigure { JSONObject jsonObject = new JSONObject(messageContent); // 从JSON对象中获取"msg"字段的值 String msgValue = jsonObject.getStr("msg"); -// messageParsing(msgValue); - log.info("接收到的值为:"+msgValue); + log.info("接收到的报文为:"+msgValue); + messageParsing(msgValue); } //交付完成 @Override @@ -100,7 +112,8 @@ public class MqttConfigure { if (templateMessage.length() < 18) { throw new RuntimeException("The vehicle message is incorrect"); } - //将报文进行切割 + //将 templateMessage 按空格切割成多个字符串,得到一个字符串数组 hexArray。接着, + // 将每个十六进制字符串转换成十进制整数,然后再转换为字符,最后将所有字符拼接成一个完整的字符串 result。 String[] hexArray = templateMessage.split(" "); StringBuilder result = new StringBuilder(); for (String hex : hexArray) { @@ -108,35 +121,34 @@ public class MqttConfigure { result.append((char) decimal); } //取出VIN码 - String carVin = result.substring(0, 18 - 1); + String carVin = result.substring(1, 18 ); log.info("carVin码为:" + carVin); //根据VIN码获取车辆信息 - SysCar carByVin = service.findCarByVin(carVin); + SysCar carByVin = null; + List carList = service.get("carList"); + if(carList==null){ + throw new RuntimeException("Redis未获取到车辆数据!!!"); + }else{ + // 使用 HashMap 存储车信息,以 VIN 作为键 + Map carMap = carList.stream() + .collect(Collectors.toMap(SysCarVo::getCarVin, Function.identity())); + carByVin = carMap.get(carVin); + } + log.info("车辆信息为:" + carByVin); //对应车辆所对应的报文模版 Integer templateId = carByVin.getTemplateId(); - List templateTypeList; - //key - String redisKey = "messageTemplateType" + templateId; + List messageTemplateTypes=null; + String redisKey = "messageTemplateTypeList"; //key存在 - if (redisTemplate.hasKey(redisKey)) { - - List list = redisTemplate.opsForList().range(redisKey, 0, -1); - - templateTypeList = list.stream().map(o -> JSON.parseObject(o.toString(), MessageTemplateType.class)) - .toList(); - } else { - List templateTypeList1 = messageTemplateTypeService.findTemplateById(templateId); - templateTypeList = templateTypeList1; - templateTypeList.forEach( - templateType -> - redisTemplate.opsForList().rightPush( - redisKey, com.alibaba.fastjson.JSON.toJSONString(templateType) - ) - ); + Boolean b = redisService.hasKey(redisKey); + if (b) { + messageTemplateTypes = messageTemplateTypeCacheService.get(redisKey); + }else{ + throw new RuntimeException("请先将配置存入Redis!!!"); } //将模版里面有的配置进行循环 - for (MessageTemplateType messageTemplateType : templateTypeList) { + for (MessageTemplateType messageTemplateType : messageTemplateTypes) { //开始位置 Integer startIndex = messageTemplateType.getStartIndex() - 1; //结束位置 @@ -144,14 +156,13 @@ public class MqttConfigure { //将每个解析后的字段都存入到JSON对象中 jsonObject.put(messageTemplateType.getMessageField(), result.substring(startIndex, endIndex)); } - log.info("解析后的报文是:" + jsonObject); sendKafka(jsonObject); log.info("发送kafka成功"); return jsonObject; } - + //kafka发送消息 public void sendKafka(JSONObject jsonObject){ ProducerRecord stringStringProducerRecord = new ProducerRecord<>("four_car", jsonObject.toString()); kafkaProducer.send(stringStringProducerRecord); diff --git a/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/test.java b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/test.java new file mode 100644 index 0000000..ad62d51 --- /dev/null +++ b/cloud-modules/cloud-modules-template/src/main/java/com/muyu/template/test.java @@ -0,0 +1,136 @@ +package com.muyu.template; +import cn.hutool.json.JSONObject; +import com.muyu.cache.MessageTemplateTypeCacheService; +import com.muyu.cache.SysCarCacheService; +import com.muyu.cache.WarnRuleCacheService; +import com.muyu.cache.WarnStrategyCacheService; +import com.muyu.common.domain.MessageTemplateType; +import com.muyu.common.domain.SysCar; +import com.muyu.common.domain.resp.SysCarVo; +import com.muyu.common.domain.resp.WarnRuleResp; +import com.muyu.common.domain.resp.WarnStrategyResp; +import lombok.extern.log4j.Log4j2; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.stream.Collectors; +/** + * @author liuxinyue + * @Package:com.muyu.template + * @name:test2 + * @Date:2024/10/6 10:34 + */ +@Log4j2 +public class test { + private static int DURATION_SECONDS = 5; + private static List receivedStrings = new ArrayList<>(); + private static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + private static int elapsedSeconds = 0; + private static String file="elapsed"; + private static List messageTemplateTypes=null; + private static Long msgTypeId=null; + //滑窗时间 + private static Long slideTime=null; + //增长率 + private static Long slideFrequency=null; + //预警策略 + @Resource + private WarnStrategyCacheService warnStrategyCacheService; + //车辆 + @Resource + private SysCarCacheService sysCarCacheService; + //预警规则 + @Resource + private WarnRuleCacheService warnRuleCacheService; + //报文模版 + @Resource + private MessageTemplateTypeCacheService messageTemplateTypeCacheService; + public void main(String[] args) { + //协议解析:每秒穿过来一个JSONObject jsonObject; 添加进receivedStrings + //根据这个车辆VIN查询出他对应的车辆类型 + String carVin=null; + //报文模版的ID + Integer templateId=null; + for (JSONObject receivedString : receivedStrings) { + carVin = receivedString.getStr("carVin"); + } + SysCar carByVin = null; + List carVoList = sysCarCacheService.get(sysCarCacheService.keyPre()); + Map carMap = carVoList.stream() + .collect(Collectors.toMap(SysCarVo::getCarVin, Function.identity())); + //获取到了这个车辆的信息 + carByVin = carMap.get(carVin); + //获取到这辆车绑定的报文模版 + templateId=carByVin.getTemplateId(); + //这个是这辆车对应的所有策略 + List carWithWarnStrategyList=null; + List warnStrategyResps = warnStrategyCacheService.get(warnStrategyCacheService.keyPre()); + for (WarnStrategyResp warnStrategyResp : warnStrategyResps) { + if(warnStrategyResp.getCarTypeId()==carByVin.getCarTypeId()){ + carWithWarnStrategyList.add(warnStrategyResp); + } + } + //该车对应的所有预警规则 + List warnRuleResp=null; + List warnRuleResps = warnRuleCacheService.get(warnRuleCacheService.keyPre()); + for (WarnStrategyResp warnStrategyResp : carWithWarnStrategyList) { + for (WarnRuleResp ruleResp : warnRuleResps) { + if(warnStrategyResp.getId().equals(ruleResp.getStrategyId())){ + warnRuleResp.add(ruleResp); + } + } + } + //报文模版 + messageTemplateTypes = messageTemplateTypeCacheService.get(messageTemplateTypeCacheService.keyPre()); + for (WarnRuleResp ruleResp : warnRuleResp) { + //每一个规则他绑定了报文模版里面对应的一个配置 比如:电池,或者车速 + msgTypeId = ruleResp.getMsgTypeId(); + //将规则中对应的滑窗时间赋值为DURATION_SECONDS + DURATION_SECONDS = Math.toIntExact(ruleResp.getSlideTime()); + slideFrequency = ruleResp.getSlideFrequency(); + } + // 定义一个任务,每秒执行一次 + Runnable task = new Runnable() { + @Override + public void run() { + // 清理超过的数据 + cleanUpOldStrings(); + // 检查超速条件 + checkForSpeeding(); + } + }; + // 每隔1秒执行一次任务 + scheduler.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS); + } + + // 清理超过60秒的数据 + private static void cleanUpOldStrings() { + long currentTime = System.currentTimeMillis(); + receivedStrings.removeIf(jsonObject -> + currentTime - jsonObject.getLong("time") > TimeUnit.SECONDS.toMillis(DURATION_SECONDS) + ); + } + + // 检查是否有超速情况 + private static void checkForSpeeding() { + if (receivedStrings.size() < 2) return; // 如果数据不足,直接返回 + for (int i = 0; i < receivedStrings.size(); i++) { + JSONObject current = receivedStrings.get(i); + JSONObject next = receivedStrings.get(i + 1); + for (MessageTemplateType messageTemplateType : messageTemplateTypes) { + if(messageTemplateType.getMessageTemplateTypeId().equals(msgTypeId)){ + Short currentElapsed = current.getShort(messageTemplateType.getMessageField()); + Short nextElapsed = next.getShort(messageTemplateType.getMessageField()); + if (nextElapsed > currentElapsed + slideFrequency) { + log.info("出错啦,出错啦,您的"+messageTemplateType.getMessageField()+"不正常,请检查!!!"); + } + } + } + } + } +} diff --git a/cloud-modules/cloud-modules-vehiclegateway/pom.xml b/cloud-modules/cloud-modules-vehiclegateway/pom.xml index 34448dd..112b41e 100644 --- a/cloud-modules/cloud-modules-vehiclegateway/pom.xml +++ b/cloud-modules/cloud-modules-vehiclegateway/pom.xml @@ -131,6 +131,18 @@ 4.2.0 + + com.muyu.server + saas-server + 3.6.3 + + + + + com.dtflys.forest + forest-spring-boot-starter + 1.5.36 + diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/VehicleGatewayApplication.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/VehicleGatewayApplication.java index 62108bf..884f25f 100644 --- a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/VehicleGatewayApplication.java +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/VehicleGatewayApplication.java @@ -6,6 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableMyFeignClients + public class VehicleGatewayApplication { public static void main(String[] args) { SpringApplication.run(VehicleGatewayApplication.class,args); diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/ManageInstance.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/ManageInstance.java index 272ab93..c8457c5 100644 --- a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/ManageInstance.java +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/ManageInstance.java @@ -1,15 +1,15 @@ package com.muyu.vehicle; - +import com.alibaba.fastjson.JSONObject; import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.*; import com.aliyun.tea.TeaException; -import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.Common; import com.aliyun.teautil.models.RuntimeOptions; +import com.muyu.common.redis.service.RedisService; +import com.muyu.vehicle.config.SelectInstance; import com.muyu.vehicle.domain.InstanceInfo; -import com.muyu.vehicle.service.OpenInstance; -import com.muyu.vehicle.service.SelectInstance; +import com.muyu.vehicle.utils.CreateClient; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; @@ -19,73 +19,49 @@ import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; + + @Component @Log4j2 +/** + * 项目启动创建实例 + */ public class ManageInstance implements ApplicationRunner { - - /** - * ACCESS_KEY_ID - */ - public static final String ALIBABA_CLOUD_ACCESS_KEY_ID="LTAI5tGabdxedjfCh2uXHNrw"; - - /** - *ACCESS_KEY_SECRET - */ - public static final String ACCESS_KEY_SECRET="NHb7wHVpesLW6Axc0bFBs6ThhuNR10"; - + @Autowired + private RedisService redisService; /** * 镜像ID */ - public static final String IMAGE_ID="m-uf6agr9i6g27gj23om34"; + public static final String IMAGE_ID = "m-uf6ffgkry85fwu4znr6s"; /** * 实例类型 */ - public static final String INSTANCE_TYPE="ecs.e-c1m1.large"; + public static final String INSTANCE_TYPE = "ecs.e-c1m1.large"; /** * 安全组ID */ - public static final String SECURITY_GROUP_ID="sg-uf6glo8c4k17szhxu7sk"; + public static final String SECURITY_GROUP_ID = "sg-uf6glo8c4k17szhxu7sk"; /** *交换机ID */ - public static final String V_SWITCH_ID="vsw-uf6xy4rbt9ggcz93t6oib"; + public static final String V_SWITCH_ID = "vsw-uf6xy4rbt9ggcz93t6oib"; /** * 实例付费类型 */ - public static final String INSTANCE_CHARGE_TY="PostPaid"; + public static final String INSTANCE_CHARGE_TY = "PostPaid"; - - - /** - * 使用AK&SK初始化账号Client - * @return Client - * @throws Exception - */ - - public static Client createClient() throws Exception { - // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 - Config config = new Config() - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 - .setAccessKeyId(ALIBABA_CLOUD_ACCESS_KEY_ID) - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 - .setAccessKeySecret(ACCESS_KEY_SECRET); - // Endpoint 请参考 https://api.aliyun.com/product/Ecs - config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; - return new com.aliyun.ecs20140526.Client(config); - } - - - public static void generateInstance() throws Exception { + public static List generateInstance() throws Exception { // 创建阿里云ECS客户端 - Client client = ManageInstance.createClient(); + // 创建ECS客户端对象,用于后续调用ECS相关API + Client client = CreateClient.createClient(); // 配置系统盘参数 - RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk= + RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequest.RunInstancesRequestSystemDisk() .setSize("40") .setCategory("cloud_essd"); @@ -109,7 +85,7 @@ public class ManageInstance implements ApplicationRunner { //创建运行时选择对象 - RuntimeOptions runTime= + RuntimeOptions runTime = new RuntimeOptions(); // 尝试执行创建实例请求 try { @@ -121,6 +97,7 @@ public class ManageInstance implements ApplicationRunner { list.add(instance); } log.info("ESC创建成功,实例ID为:" + list); + return list; } catch (TeaException error) { // 错误 message log.info(error.getMessage()); @@ -131,43 +108,27 @@ public class ManageInstance implements ApplicationRunner { TeaException error = new TeaException(_error.getMessage(), _error); // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 // 错误 message - log.info("实例创建失败:"+error.getMessage()); + log.info("实例创建失败:" + error.getMessage()); + } + return null; + } + + + + @Override + public void run(ApplicationArguments args) throws Exception { + List list = generateInstance(); + log.info("创建实例成功"); + log.info("正在加载实例"); + Thread.sleep(30000); + List instanceInfos = SelectInstance.selectInstance(list); + log.info("实例信息查询成功"); + for (InstanceInfo instanceInfo : instanceInfos) { + redisService.setCacheObject("FourInstanceIdKey:"+instanceInfo.getInstanceId(),instanceInfo); + } + System.out.println("实例信息:"+instanceInfos); + log.info("实例信息:", JSONObject.toJSONString(instanceInfos)); } } - private static List selectInstance() throws Exception { - Client client = ManageInstance.createClient(); - ArrayList instanceInfos = new ArrayList<>();// 实例基础信息 - DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest() - .setRegionId("cn-shanghai") - .setInternetChargeType("PayByTraffic") - .setInstanceChargeType("PostPaid") - .setInstanceName("cloud-MQTT") // 设置实例名称 - ; - // 创建运行时选项对象 - RuntimeOptions runtime = new RuntimeOptions(); - //实例ID Instances.Instance.InstanceId - //实例IP Instances.Instance.PublicIpAddress.IpAddress - //状态 Instances.Instance.Status - DescribeInstancesResponse resp =client.describeInstancesWithOptions(describeInstancesRequest, runtime); - DescribeInstancesResponseBody body = resp.getBody(); - - for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.getInstances().getInstance()){ - InstanceInfo instanceInfo = new InstanceInfo(); - instanceInfo.setInstanceId(instance.getInstanceId()); - instanceInfo.setIpAddress(String.valueOf(instance.getPublicIpAddress().getIpAddress())); - instanceInfo.setStatus(instance.getStatus()); - instanceInfos.add(instanceInfo); - - } - log.info("实例信息为:"+Common.toJSONString(instanceInfos)); - return instanceInfos; - } - - @Override - public void run(ApplicationArguments args) throws Exception { - generateInstance(); - selectInstance(); - } -} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/CloseInstance.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/config/CloseInstance.java similarity index 73% rename from cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/CloseInstance.java rename to cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/config/CloseInstance.java index 8843c7c..dd6ab92 100644 --- a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/CloseInstance.java +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/config/CloseInstance.java @@ -1,6 +1,4 @@ -package com.muyu.vehicle.service; - - +package com.muyu.vehicle.config; import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.DeleteInstancesRequest; import com.aliyun.ecs20140526.models.DescribeInstancesRequest; @@ -10,42 +8,33 @@ import com.aliyun.tea.TeaException; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.Common; import com.aliyun.teautil.models.RuntimeOptions; +import com.muyu.vehicle.utils.CreateClient; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; +/** + * 删除实例信息 + */ @Component @Log4j2 -public class CloseInstance implements DisposableBean { - /** - * ACCESS_KEY_ID - */ - public static final String ALIBABA_CLOUD_ACCESS_KEY_ID="LTAI5tGabdxedjfCh2uXHNrw"; +public class CloseInstance implements DisposableBean{ /** - *ACCESS_KEY_SECRET + * description : + *

使用AK&SK初始化账号Client

+ * @return Client + * + * @throws Exception */ - public static final String ACCESS_KEY_SECRET="NHb7wHVpesLW6Axc0bFBs6ThhuNR10"; - public static Client createClient() throws Exception { - // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 - // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。 - Config config = new Config() - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 - .setAccessKeyId(ALIBABA_CLOUD_ACCESS_KEY_ID) - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 - .setAccessKeySecret(ACCESS_KEY_SECRET); - // Endpoint 请参考 https://api.aliyun.com/product/Ecs - config.endpoint = "ecs.cn-shanghai.aliyuncs.com"; - return new Client(config); - } - public static void delInstance() throws Exception { // 创建ECS客户端对象,用于后续调用ECS相关API - Client client = CloseInstance.createClient(); + Client client = CreateClient.createClient(); DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest() .setRegionId("cn-shanghai"); @@ -61,7 +50,7 @@ public class CloseInstance implements DisposableBean { DescribeInstancesResponseBody body = describeInstancesResponse.getBody(); for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.getInstances().getInstance()) { - if (!instance.getInstanceId().equals("i-uf68jwsbbqq4b4xc893s")){ + if (!instance.getInstanceId().equals("i-uf68jwsbbqq4b4xc893s")) { list.add(instance.getInstanceId()); } } @@ -79,7 +68,7 @@ public class CloseInstance implements DisposableBean { .setInstanceId(list); // 创建运行时选项对象,用于配置运行时的选项参数 - RuntimeOptions runtime = new RuntimeOptions(); + RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 client.deleteInstancesWithOptions(deleteInstancesRequest, runtime); @@ -108,3 +97,4 @@ public class CloseInstance implements DisposableBean { delInstance(); } } + diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/config/ConnectFluxMq.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/config/ConnectFluxMq.java new file mode 100644 index 0000000..fbe5ae6 --- /dev/null +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/config/ConnectFluxMq.java @@ -0,0 +1,54 @@ +package com.muyu.vehicle.config; + +import com.muyu.vehicle.domain.MqttServerModel; +import feign.Client; +import lombok.extern.log4j.Log4j2; +import org.eclipse.paho.client.mqttv3.*; + +/** + * 链接fluxMq + */ +@Log4j2 +public class ConnectFluxMq { + + + + public void FluxMqConnect(String IP,String vin){ + String topic = "car"; + String broker = "tcp://"+IP+":1883"; + String clientId = vin+"vehicleGateway"; + MqttClient client; + try { + //创建 + client = new MqttClient(broker,clientId); + //设置连接参数 + MqttConnectOptions options = new MqttConnectOptions(); + options.setCleanSession(true); + //连接到Broker + client.connect(options); + log.info("Connecting to broker: " + broker); + //连接 + client.subscribe(topic,0); + client.setCallback(new MqttCallback() { + @Override + public void connectionLost(Throwable throwable) { + + } + + @Override + public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { + + } + + @Override + public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { + + } + }); + + } catch (MqttException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/config/CreateExchange.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/config/CreateExchange.java new file mode 100644 index 0000000..eb7436b --- /dev/null +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/config/CreateExchange.java @@ -0,0 +1,41 @@ +package com.muyu.vehicle.config; + +import lombok.extern.log4j.Log4j2; +import org.springframework.amqp.core.*; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +@Log4j2 +@Component +public class CreateExchange implements ApplicationRunner { + + @Autowired + private ConnectionFactory connectionFactory; + + @Override + public void run(ApplicationArguments args) throws Exception { + log.info("=====>开始创建交换机"); + + RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); + + // 创建Fanout类型的交换机 + FanoutExchange exchange = new FanoutExchange("ONLINE_EXCHANGE", true, false); + + rabbitAdmin.declareExchange(exchange); + + // 创建队列 + Queue queue = new Queue("GO_ONLINE", true, false, false); + + rabbitAdmin.declareQueue(queue); + + // Fanout交换机绑定 + rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange)); + + log.info("=====>交换机创建成功"); + log.info("=====>队列创建成功并绑定到交换机"); + } +} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/config/SelectInstance.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/config/SelectInstance.java new file mode 100644 index 0000000..e2048d7 --- /dev/null +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/config/SelectInstance.java @@ -0,0 +1,63 @@ +package com.muyu.vehicle.config; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.aliyun.ecs20140526.Client; +import com.aliyun.ecs20140526.models.DescribeInstancesRequest; +import com.aliyun.ecs20140526.models.DescribeInstancesResponse; +import com.aliyun.ecs20140526.models.DescribeInstancesResponseBody; +import com.aliyun.teautil.Common; +import com.aliyun.teautil.models.RuntimeOptions; +import com.muyu.common.core.exception.ServiceException; +import com.muyu.common.redis.service.RedisService; +import com.muyu.vehicle.domain.InstanceInfo; +import com.muyu.vehicle.utils.CreateClient; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * 查询实例信息 + */ + +/** + * 查询实例信息 + */ + +@Log4j2 +public class SelectInstance { + public static List selectInstance(List instanceIds) throws Exception { + // 创建ECS客户端对象,用于后续调用ECS相关API + Client client = CreateClient.createClient(); + ArrayList instanceInfos = new ArrayList<>();// 实例基础信息 + com.aliyun.ecs20140526.models.DescribeInstancesRequest describeInstancesRequest = new com.aliyun.ecs20140526.models.DescribeInstancesRequest() + .setInstanceIds(JSON.toJSONString(instanceIds)) + .setRegionId("cn-shanghai"); + // 创建运行时选项对象 + RuntimeOptions runtime = new RuntimeOptions(); + //实例ID Instances.Instance.InstanceId + //实例IP Instances.Instance.PublicIpAddress.IpAddress + //状态 Instances.Instance.Status + DescribeInstancesResponse resp = client.describeInstancesWithOptions(describeInstancesRequest, runtime); + DescribeInstancesResponseBody body = resp.getBody(); + + ArrayList list = new ArrayList<>(); + for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.getInstances().getInstance()){ + InstanceInfo instanceInfo = new InstanceInfo(); + instanceInfo.setInstanceId(instance.getInstanceId()); + log.info("实例ID:{}",instanceInfo.getInstanceId()); + instanceInfo.setStatus(instance.getStatus()); + log.info("实例状态:{}",instanceInfo.getStatus()); + instanceInfo.setIpAddress(String.valueOf(instance.getPublicIpAddress().getIpAddress())); + log.info("实例IP:{}",instanceInfo.getIpAddress()); + list.add(instanceInfo); + } + System.out.println("实例信息:"+list); + log.info("实例信息:",list); + return list; + } + +} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/controller/CarInstanceController.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/controller/CarInstanceController.java new file mode 100644 index 0000000..0ba1477 --- /dev/null +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/controller/CarInstanceController.java @@ -0,0 +1,26 @@ +package com.muyu.vehicle.controller; +import com.muyu.common.core.domain.Result; +import com.muyu.vehicle.domain.MqttServerModel; +import com.muyu.vehicle.domain.req.VehicleConnectionReq; +import com.muyu.vehicle.service.VehicleConnectService; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@Log4j2 +@RestController +@RequestMapping("/carInstance") +public class CarInstanceController { + + @Autowired + private VehicleConnectService vehicleConnectService; + + + @PostMapping("/receiveMsg") + public Result receiveMsg(@RequestBody VehicleConnectionReq vehicleConnectionReq){ + log.info("=======>"+vehicleConnectionReq); + Result connect = vehicleConnectService.getConnect(vehicleConnectionReq); + return Result.success(connect); + } + +} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/domain/FluxMqProperties.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/domain/FluxMqProperties.java new file mode 100644 index 0000000..9d20965 --- /dev/null +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/domain/FluxMqProperties.java @@ -0,0 +1,40 @@ +package com.muyu.vehicle.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * fluxMq配置 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FluxMqProperties { + + + /** + * 节点 + */ + private String broker; + + /** + * 主题 + */ + private String topic; + /** + * 密码 + */ + private String password; + + /** + * 节点ID + */ + private String clientId; + + + + +} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/domain/InstanceInfo.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/domain/InstanceInfo.java index 2b4a528..a3b9192 100644 --- a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/domain/InstanceInfo.java +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/domain/InstanceInfo.java @@ -4,6 +4,9 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +/** + * 网关实例信息 + */ @Data @AllArgsConstructor @NoArgsConstructor diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/domain/MqttServerModel.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/domain/MqttServerModel.java new file mode 100644 index 0000000..4436afb --- /dev/null +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/domain/MqttServerModel.java @@ -0,0 +1,31 @@ +package com.muyu.vehicle.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Mqtt服务器模型 + * @author YunFei.Du + * @date 22:08 2024/5/29 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MqttServerModel { + + /** + * MQTT服务节点 + */ + private String broker; + + + /** + * MQTT订阅主题 + */ + private String topic; + + +} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/domain/req/VehicleConnectionReq.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/domain/req/VehicleConnectionReq.java new file mode 100644 index 0000000..5a984e1 --- /dev/null +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/domain/req/VehicleConnectionReq.java @@ -0,0 +1,58 @@ +package com.muyu.vehicle.domain.req; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 车辆连接信息 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName(value = "vehicle_connection") +public class VehicleConnectionReq { + + /** + * ID + */ + @TableId(type = IdType.AUTO) + private Integer id; + + + /** + * 车辆VIN + */ + private String vehicleVin; + + /** + * 时间戳 + */ + + private String timestamp; + + /** + * 用户名 + */ + + private String username; + + + /** + * 随机字符串 + */ + private String nonce; + + + /** + * 密码 + */ + private String password; + + +} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/mapper/VehicleConnectMapper.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/mapper/VehicleConnectMapper.java new file mode 100644 index 0000000..50af952 --- /dev/null +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/mapper/VehicleConnectMapper.java @@ -0,0 +1,12 @@ +package com.muyu.vehicle.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.vehicle.domain.req.VehicleConnectionReq; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface VehicleConnectMapper extends BaseMapper { + + VehicleConnectionReq selectByVehicleVin(String vin); + +} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/OpenInstance.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/OpenInstance.java deleted file mode 100644 index 2a6cb6e..0000000 --- a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/OpenInstance.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.muyu.vehicle.service; - -import com.aliyun.ecs20140526.Client; -import com.aliyun.ecs20140526.models.RunInstancesRequest; -import com.aliyun.ecs20140526.models.RunInstancesResponse; -import com.aliyun.ecs20140526.models.RunInstancesResponseBody; -import com.aliyun.tea.TeaException; -import com.aliyun.teaopenapi.models.Config; -import com.aliyun.teautil.Common; -import com.aliyun.teautil.models.RuntimeOptions; -import com.muyu.vehicle.ManageInstance; -import lombok.extern.log4j.Log4j2; - -import java.util.ArrayList; - -@Log4j2 -public class OpenInstance { - /** - * ACCESS_KEY_ID - */ - public static final String ALIBABA_CLOUD_ACCESS_KEY_ID="LTAI5tGabdxedjfCh2uXHNrw"; - - /** - *ACCESS_KEY_SECRET - */ - public static final String ACCESS_KEY_SECRET="NHb7wHVpesLW6Axc0bFBs6ThhuNR10"; - - - /** - * 镜像ID - */ - public static final String IMAGE_ID="m-uf6agr9i6g27gj23om34"; - - /** - * 实例类型 - */ - public static final String INSTANCE_TYPE="ecs.e-c1m1.large"; - - /** - * 安全组ID - */ - public static final String SECURITY_GROUP_ID="sg-uf6glo8c4k17szhxu7sk"; - - /** - *交换机ID - */ - public static final String V_SWITCH_ID="vsw-uf6xy4rbt9ggcz93t6oib"; - - - /** - * 实例付费类型 - */ - public static final String INSTANCE_CHARGE_TY="PostPaid"; - - - - /** - * 使用AK&SK初始化账号Client - * @return Client - * @throws Exception - */ - - public static Client createClient() throws Exception { - // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 - Config config = new Config() - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 - .setAccessKeyId(ALIBABA_CLOUD_ACCESS_KEY_ID) - // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 - .setAccessKeySecret(ACCESS_KEY_SECRET); - // Endpoint 请参考 https://api.aliyun.com/product/Ecs - config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; - return new com.aliyun.ecs20140526.Client(config); - } - - - public static void generateInstance() throws Exception { - // 创建阿里云ECS客户端 - Client client = OpenInstance.createClient(); - // 配置系统盘参数 - RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk= - new RunInstancesRequest.RunInstancesRequestSystemDisk() - .setSize("40") - .setCategory("cloud_essd"); - - // 创建创建实例请求对象并设置参数 - - RunInstancesRequest runInstancesRequest = new RunInstancesRequest() - .setRegionId("cn-shanghai") // 设置地域ID - .setImageId(IMAGE_ID) // 设置镜像ID - .setInstanceType(INSTANCE_TYPE) // 设置实例类型 - .setSecurityGroupId(SECURITY_GROUP_ID) // 设置安全组ID - .setVSwitchId(V_SWITCH_ID) // 设置虚拟交换机ID - .setInstanceName("cloud-MQTT") // 设置实例名称 - .setInstanceChargeType(INSTANCE_CHARGE_TY) // 设置实例付费类型为后付费按量付费 - .setSystemDisk(systemDisk) // 设置系统盘配置 - .setHostName("root") // 设置主机名 - .setPassword("2112A-four") // 设置实例密码 - .setAmount(2) // 设置创建实例的数量 - .setInternetChargeType("PayByTraffic") - .setInternetMaxBandwidthOut(1); - - - //创建运行时选择对象 - RuntimeOptions runTime= - new RuntimeOptions(); - // 尝试执行创建实例请求 - try { - ArrayList list = new ArrayList<>(); - // 复制代码运行请自行打印 API 的返回值 - RunInstancesResponse runInstancesResponse = client.runInstancesWithOptions(runInstancesRequest, runTime); - RunInstancesResponseBody body = runInstancesResponse.getBody(); - for (String instance : body.getInstanceIdSets().getInstanceIdSet()) { - list.add(instance); - log.info("ESC创建成功,实例ID为:" + list); - } - } catch (TeaException error) { - // 错误 message - log.info(error.getMessage()); - // 诊断地址 - log.info(error.getData().get("Recommend")); - Common.assertAsString(error.message); - } catch (Exception _error) { - TeaException error = new TeaException(_error.getMessage(), _error); - // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 - // 错误 message - log.info("实例创建失败:"+error.getMessage()); - } - } -} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/SelectInstance.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/SelectInstance.java deleted file mode 100644 index 6340b52..0000000 --- a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/SelectInstance.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.muyu.vehicle.service; - -import com.aliyun.ecs20140526.Client; -import com.aliyun.ecs20140526.models.DescribeInstancesRequest; -import com.aliyun.ecs20140526.models.DescribeInstancesResponse; -import com.aliyun.ecs20140526.models.DescribeInstancesResponseBody; -import com.aliyun.teaopenapi.models.Config; -import com.aliyun.teautil.Common; -import com.aliyun.teautil.models.RuntimeOptions; -import com.muyu.vehicle.domain.InstanceInfo; -import lombok.extern.log4j.Log4j2; - -import java.util.ArrayList; - -@Log4j2 -public class SelectInstance { - /** - * ACCESS_KEY_ID - */ - public static final String ALIBABA_CLOUD_ACCESS_KEY_ID="LTAI5tGabdxedjfCh2uXHNrw"; - - /** - *ACCESS_KEY_SECRET - */ - public static final String ACCESS_KEY_SECRET="NHb7wHVpesLW6Axc0bFBs6ThhuNR10"; - - public static Client createClient(String accessKeyId, String accessKeySecret) throws Exception { - Config config = new com.aliyun.teaopenapi.models.Config() - // 必填,您的 AccessKey ID - .setAccessKeyId(ALIBABA_CLOUD_ACCESS_KEY_ID) - // 必填,您的 AccessKey Secret - .setAccessKeySecret(ACCESS_KEY_SECRET); - // 访问的域名 - config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; - return new Client(config); - } - - public static void main(String[] args_) throws Exception { - java.util.List args = java.util.Arrays.asList(args_); - // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 - // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式 - Client client = SelectInstance.createClient(ALIBABA_CLOUD_ACCESS_KEY_ID, ACCESS_KEY_SECRET); - DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest() - .setRegionId("cn-shanghai") - .setInternetChargeType("PayByTraffic") - .setInstanceChargeType("PostPaid") - .setInstanceName("cloud-MQTT") // 设置实例名称 - ; - //实例ID Instances.Instance.InstanceId - //实例IP Instances.Instance.PublicIpAddress.IpAddress - //状态 Instances.Instance.Status - RuntimeOptions runtime = new RuntimeOptions(); - DescribeInstancesResponse resp = client.describeInstancesWithOptions(describeInstancesRequest, runtime); - DescribeInstancesResponseBody body = resp.getBody(); - ArrayList instanceInfos = new ArrayList<>();// 实例基础信息 - for (DescribeInstancesResponseBody.DescribeInstancesResponseBodyInstancesInstance instance : body.getInstances().getInstance()){ - - InstanceInfo instanceInfo = new InstanceInfo(); - instanceInfo.setInstanceId(instance.getInstanceId()); - instanceInfo.setIpAddress(String.valueOf(instance.getPublicIpAddress().getIpAddress())); - instanceInfo.setStatus(instance.getStatus()); - instanceInfos.add(instanceInfo); - } - log.info(Common.toJSONString(instanceInfos)); - } -} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/VehicleConnectService.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/VehicleConnectService.java new file mode 100644 index 0000000..cf276da --- /dev/null +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/VehicleConnectService.java @@ -0,0 +1,12 @@ +package com.muyu.vehicle.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.common.core.domain.Result; +import com.muyu.vehicle.domain.MqttServerModel; +import com.muyu.vehicle.domain.req.VehicleConnectionReq; + +public interface VehicleConnectService extends IService { + + Result getConnect(VehicleConnectionReq vehicleConnectionReq); + +} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/impl/VehicleConnectServiceImpl.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/impl/VehicleConnectServiceImpl.java new file mode 100644 index 0000000..340c273 --- /dev/null +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/service/impl/VehicleConnectServiceImpl.java @@ -0,0 +1,36 @@ +package com.muyu.vehicle.service.impl; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.core.domain.Result; +import com.muyu.vehicle.domain.MqttServerModel; +import com.muyu.vehicle.domain.req.VehicleConnectionReq; +import com.muyu.vehicle.mapper.VehicleConnectMapper; +import com.muyu.vehicle.service.VehicleConnectService; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +@Log4j2 +public class VehicleConnectServiceImpl extends ServiceImpl implements VehicleConnectService { + @Autowired + private VehicleConnectMapper vehicleConnectMapper; + + @Override + public Result getConnect(VehicleConnectionReq vehicleConnectionReq) { + log.info("车辆连接信息:{}", vehicleConnectionReq); + //生成密码 + vehicleConnectionReq.setPassword(vehicleConnectionReq.getVehicleVin() + vehicleConnectionReq.getTimestamp() + + vehicleConnectionReq.getNonce()); + + VehicleConnectionReq connection = vehicleConnectMapper.selectByVehicleVin(vehicleConnectionReq.getVehicleVin()); + if (connection==null){ + vehicleConnectMapper.insert(vehicleConnectionReq); + log.info("车辆预上线成功"); + }else { + log.info("车辆已预上线成功,禁止重复"); + } + return null; + } +} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/utils/CreateClient.java b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/utils/CreateClient.java new file mode 100644 index 0000000..abb7023 --- /dev/null +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/java/com/muyu/vehicle/utils/CreateClient.java @@ -0,0 +1,33 @@ + +package com.muyu.vehicle.utils; + +import com.aliyun.ecs20140526.Client; +import com.aliyun.teaopenapi.models.Config; + +/** + * 创建ECS客户端对象 + */ +public class CreateClient { + /** + * ACCESS_KEY_ID + */ + public static final String ALIBABA_CLOUD_ACCESS_KEY_ID = "LTAI5tGabdxedjfCh2uXHNrw"; + + /** + *ACCESS_KEY_SECRET + */ + public static final String ACCESS_KEY_SECRET = "NHb7wHVpesLW6Axc0bFBs6ThhuNR10"; + + public static Client createClient() throws Exception { + // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 + // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。 + Config config = new Config() + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 + .setAccessKeyId(ALIBABA_CLOUD_ACCESS_KEY_ID) + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 + .setAccessKeySecret(ACCESS_KEY_SECRET); + // Endpoint 请参考 https://api.aliyun.com/product/Ecs + config.endpoint = "ecs.cn-shanghai.aliyuncs.com"; + return new Client(config); + } +} diff --git a/cloud-modules/cloud-modules-vehiclegateway/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-vehiclegateway/src/main/resources/bootstrap.yml index b027b47..7739f36 100644 --- a/cloud-modules/cloud-modules-vehiclegateway/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-vehiclegateway/src/main/resources/bootstrap.yml @@ -7,10 +7,12 @@ nacos: addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: yzl + namespace: sx # Spring spring: + main: + allow-bean-definition-overriding: true application: # 应用名称 name: cloud-vehicleGateway diff --git a/cloud-modules/saas/pom.xml b/cloud-modules/saas/pom.xml index 6810929..ec2653a 100644 --- a/cloud-modules/saas/pom.xml +++ b/cloud-modules/saas/pom.xml @@ -51,6 +51,16 @@ org.apache.kafka kafka-clients + + + + + + + + + + diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/MessageTemplateType.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/MessageTemplateType.java index 3c2cd95..87cbb7f 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/MessageTemplateType.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/MessageTemplateType.java @@ -30,7 +30,7 @@ public class MessageTemplateType implements Serializable { * 主键 */ @TableId(value = "message_template_type_id",type = IdType.AUTO) - private String messageTemplateTypeId; + private Long messageTemplateTypeId; /** * 报文类别 */ diff --git a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/SysCarVo.java b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/SysCarVo.java index c798859..966d328 100644 --- a/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/SysCarVo.java +++ b/cloud-modules/saas/saas-common/src/main/java/com/muyu/common/domain/resp/SysCarVo.java @@ -2,10 +2,7 @@ package com.muyu.common.domain.resp; import com.muyu.common.core.annotation.Excel; import com.muyu.common.domain.SysCar; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; +import lombok.*; /** * 车辆管理返回值 @@ -18,6 +15,7 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor @EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) public class SysCarVo extends SysCar { @Excel(name = "车辆类型名称") diff --git a/cloud-modules/saas/saas-server/pom.xml b/cloud-modules/saas/saas-server/pom.xml index 4286b11..1546f6d 100644 --- a/cloud-modules/saas/saas-server/pom.xml +++ b/cloud-modules/saas/saas-server/pom.xml @@ -106,6 +106,7 @@ com.muyu cloud-common-xxl + org.apache.iotdb service-rpc diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/SaasApplication.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/SaasApplication.java index 7186808..4232b74 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/SaasApplication.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/SaasApplication.java @@ -1,9 +1,14 @@ package com.muyu.server; +import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration; +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; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + /** * saas模块启动类 * @author YuPing @@ -11,7 +16,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @Version 1.0 * @Data 2024-09-28 17:34:31 */ -@SpringBootApplication +@SpringBootApplication(exclude = { + DataSourceAutoConfiguration.class, + DruidDataSourceAutoConfigure.class, + DynamicDataSourceAutoConfiguration.class +}) +@EnableCustomConfig @EnableMyFeignClients public class SaasApplication { public static void main(String[] args) { diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/CarTypeController.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/CarTypeController.java index 6311e4c..6bdfd55 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/CarTypeController.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/CarTypeController.java @@ -21,8 +21,6 @@ import java.util.List; * @Date 2024/9/29 12:06 */ - - @RestController @RequestMapping("/carType") @AllArgsConstructor diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/EnterpriseController.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/EnterpriseController.java index dce3a11..8b315dc 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/EnterpriseController.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/EnterpriseController.java @@ -6,6 +6,7 @@ import com.muyu.common.core.constant.SecurityConstants; import com.muyu.common.core.domain.Result; import com.muyu.common.domain.Enterprise; import com.muyu.common.system.domain.Business; +import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.remote.RemoteUserService; import com.muyu.common.util.PageUtils; import com.muyu.server.controller.form.DeleteEnterpriseByIds; @@ -27,6 +28,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; +import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -95,9 +97,14 @@ public class EnterpriseController { business.setDatabaseName(form.getEnterpriseDatabaseName()); remoteUserService.settlementEnterpriseInfo(business, SecurityConstants.INNER); - //创建新的数据库 + SysUser sysUser = new SysUser(); + sysUser.setDatabaseName(form.getEnterpriseDatabaseName()); + sysUser.setUserName(form.getEnterpriseName()); + sysUser.setCreateTime(new Date()); + remoteUserService.addUser(sysUser, SecurityConstants.INNER); String createDatabaseUrl="jdbc:mysql://"+ DatasourceContent.IP+":"+DatasourceContent.PORT+"?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"; String createDatabaseSql = "CREATE DATABASE IF NOT EXISTS " + form.getEnterpriseDatabaseName() + ";"; + try (Connection adminConn = DriverManager.getConnection(createDatabaseUrl, DatasourceContent.USER_NAME, DatasourceContent.PASSWORD); Statement stmt = adminConn.createStatement()) { @@ -123,6 +130,8 @@ public class EnterpriseController { ClassPathResource rc = new ClassPathResource("static/saas.sql"); EncodedResource er = new EncodedResource(rc, "utf-8"); ScriptUtils.executeSqlScript(connection, er); + + } } catch (SQLException e) { diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/SysCarController.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/SysCarController.java index 7246208..4127e0c 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/SysCarController.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/SysCarController.java @@ -1,5 +1,6 @@ package com.muyu.server.controller; +import com.alibaba.fastjson2.JSONObject; import com.muyu.cache.SysCarCacheService; import com.muyu.common.core.domain.Result; import com.muyu.common.domain.SysCar; @@ -12,6 +13,8 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j2; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -31,6 +34,8 @@ public class SysCarController { @Autowired private SysCarService sysCarService; + @Autowired + private RabbitTemplate rabbitTemplate; @Autowired private SysCarCacheService sysCarCacheService; diff --git a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/TemplateController.java b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/TemplateController.java index 9126fff..30228b0 100644 --- a/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/TemplateController.java +++ b/cloud-modules/saas/saas-server/src/main/java/com/muyu/server/controller/TemplateController.java @@ -1,6 +1,5 @@ package com.muyu.server.controller; -import com.muyu.cache.TemplateCacheService; import com.muyu.common.core.domain.Result; import com.muyu.common.domain.Template; import com.muyu.server.service.TemplateService; @@ -35,9 +34,6 @@ public class TemplateController { @Autowired private TemplateService templateService; - @Autowired - private TemplateCacheService templateCacheService; - /** * 报文模版列表 * @return @@ -45,19 +41,24 @@ public class TemplateController { @PostMapping("/templateList") @Operation(summary = "报文模版列表",description = "报文模版列表") public Result> templateList() { - - List