diff --git a/couplet-common/couplet-common-core/src/main/java/com/couplet/common/core/web/domain/BaseEntity.java b/couplet-common/couplet-common-core/src/main/java/com/couplet/common/core/web/domain/BaseEntity.java index 499f89e..27c4858 100644 --- a/couplet-common/couplet-common-core/src/main/java/com/couplet/common/core/web/domain/BaseEntity.java +++ b/couplet-common/couplet-common-core/src/main/java/com/couplet/common/core/web/domain/BaseEntity.java @@ -62,6 +62,7 @@ public class BaseEntity implements Serializable { /** * 备注 */ + @TableField(exist = false) private String remark; /** diff --git a/couplet-common/couplet-common-system/src/main/java/com/couplet/common/system/domain/SysDept.java b/couplet-common/couplet-common-system/src/main/java/com/couplet/common/system/domain/SysDept.java index ad05f69..e1183fc 100644 --- a/couplet-common/couplet-common-system/src/main/java/com/couplet/common/system/domain/SysDept.java +++ b/couplet-common/couplet-common-system/src/main/java/com/couplet/common/system/domain/SysDept.java @@ -83,14 +83,13 @@ public class SysDept extends BaseEntity { /** * 父部门名称 */ - @TableField(exist = false) private String parentName; - @TableField(exist = false) /** * 子部门 */ + @TableField(exist = false) private List children = new ArrayList(); public Long getDeptId () { diff --git a/couplet-modules/couplet-modules-mqtt/pom.xml b/couplet-modules/couplet-modules-mq/pom.xml similarity index 93% rename from couplet-modules/couplet-modules-mqtt/pom.xml rename to couplet-modules/couplet-modules-mq/pom.xml index 66187c1..7b1e760 100644 --- a/couplet-modules/couplet-modules-mqtt/pom.xml +++ b/couplet-modules/couplet-modules-mq/pom.xml @@ -9,7 +9,7 @@ 3.6.3 - couplet-modules-mqtt + couplet-modules-mq @@ -18,7 +18,7 @@ - couplet-modules-mqttx获取报文模块 + couplet-modules-mq MQ模块 @@ -91,6 +91,11 @@ 1.2.5 + + + org.springframework.boot + spring-boot-starter-amqp + diff --git a/couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/CoupletMqttxApplatcaion.java b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/CoupletMqApplatcaion.java similarity index 70% rename from couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/CoupletMqttxApplatcaion.java rename to couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/CoupletMqApplatcaion.java index f121aea..d1c309f 100644 --- a/couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/CoupletMqttxApplatcaion.java +++ b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/CoupletMqApplatcaion.java @@ -1,4 +1,4 @@ -package com.couplet.mqtt; +package com.couplet.mq; import com.couplet.common.security.annotation.EnableCustomConfig; import com.couplet.common.security.annotation.EnableMyFeignClients; @@ -10,15 +10,15 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @ProjectName: Default (Template) Project * @Author: LiuYunHu * @CreateTime: 2024/3/28 - * @Description: 获取报文模块启动类 + * @Description: rabbitMq模块启动类 */ @EnableCustomConfig @EnableCustomSwagger2 @EnableMyFeignClients @SpringBootApplication -public class CoupletMqttxApplatcaion { +public class CoupletMqApplatcaion { public static void main(String[] args) { - SpringApplication.run(CoupletMqttxApplatcaion.class, args); - System.out.println("获取报文模块启动成功"); + SpringApplication.run(CoupletMqApplatcaion.class, args); + System.out.println("获取报文、RabbitMQ模块启动成功"); } } diff --git a/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/config/RabbitMQConfig.java b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/config/RabbitMQConfig.java new file mode 100644 index 0000000..32976d5 --- /dev/null +++ b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/config/RabbitMQConfig.java @@ -0,0 +1,149 @@ +package com.couplet.mq.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.*; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.connection.CorrelationData; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + + +/** + * @ProjectName: five-groups-couplet + * @Author: LiuYunHu + * @CreateTime: 2024/3/29 + * @Description: rabbitMQ配置类 + */ + +@Configuration +@Slf4j +public class RabbitMQConfig implements RabbitTemplate.ConfirmCallback, RabbitTemplate.ReturnsCallback { + // 通过注入的方式获取队列名、交换机名和路由键 + //队列名 + @Value("${mq.queueName}") + public String queueName; + + //交换机 + @Value("${mq.exchangeName}") + public String exchangeName; + + //路由键 + @Value(("${mq.routingKey}")) + public String routingKey; + + private RabbitTemplate rabbitTemplate; + + /* + * @Author: LiuYunHu + * @Date: 2024/3/29 21:25 + * @Description: 创建并返回一个消息转换器,用于转换消息体。 + * @Param: [] + * @Return: 返回一个Jackson2JsonMessageConverter实例,用于JSON格式的消息转换。 + **/ + @Bean + public MessageConverter messageConverter() { + return new Jackson2JsonMessageConverter(); + } + + /* + * @Author: LiuYunHu + * @Date: 2024/3/29 21:26 + * @Description: 创建并返回一个持久化的队列。 + * @Param: [] + * @Return: 返回一个配置好的Queue实例。 + **/ + @Bean + public Queue queue() { + return new Queue(queueName, true); + } + + /* + * @Author: LiuYunHu + * @Date: 2024/3/29 21:26 + * @Description: 创建并返回一个直连交换机。 + * @Param: [] + * @Return: 返回一个配置好的DirectExchange实例。 + **/ + @Bean("exchange") + public DirectExchange directExchange() { + return new DirectExchange(exchangeName); + } + + /* + * @Author: LiuYunHu + * @Date: 2024/3/29 21:27 + * @Description: 配置并返回RabbitTemplate实例,用于发送消息。 + * @Param: connectionFactory RabbitMQ连接工厂。 + * @Return: 配置好的RabbitTemplate实例。 + **/ + @Primary + @Bean + public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { + RabbitTemplate rabbitTempalte = new RabbitTemplate(connectionFactory); + this.rabbitTemplate = rabbitTempalte; + rabbitTempalte.setMessageConverter(messageConverter()); + rabbitTempalte(); + + return rabbitTempalte; + } + + /* + * @Author: LiuYunHu + * @Date: 2024/3/29 21:27 + * @Description: 配置RabbitTemplate的回调函数。 + * @Param: [] + * @Return: void + **/ + public void rabbitTempalte() { + rabbitTemplate.setConfirmCallback(this); + rabbitTemplate.setReturnsCallback(this); + } + + /* + * @Author: LiuYunHu + * @Date: 2024/3/29 21:27 + * @Description: 创建并返回一个绑定,将队列与交换机绑定,并指定路由键 + * @Param: [] + * @Return: 返回一个配置好的Binding实例 + **/ + @Bean + public Binding binding() { + return BindingBuilder.bind(queue()).to(directExchange()).with(routingKey); + } + + /* + * @Author: LiuYunHu + * @Date: 2024/3/29 21:28 + * @Description: 消息确认回调函数。 + * 当消息被交换机成功处理后调用,或当消息未能被正确处理时调用。 + * @Param: correlationData 关联数据,用于追踪消息 + * @Param: ack 消息是否被成功处理 + * @Param: s 附加信息 + **/ + @Override + public void confirm(CorrelationData correlationData, boolean ack, String s) { + if (ack) { + log.info("{}消息到达交换机", correlationData.getId()); + } else { + log.error("{}消息丢失", correlationData.getId()); + } + } + + /* + * @Author: LiuYunHu + * @Date: 2024/3/29 21:29 + * @Description: 消息返回回调函数。 + * 当消息未能被正确路由到队列时调用 + * @Param: returnedMessage 被返回的消息 + * @Return: void + **/ + @Override + public void returnedMessage(ReturnedMessage returnedMessage) { + log.error("{}消息未到达队列", returnedMessage.getMessage().getMessageProperties().getMessageId()); + } +} diff --git a/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/controller/MqController.java b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/controller/MqController.java new file mode 100644 index 0000000..b5572aa --- /dev/null +++ b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/controller/MqController.java @@ -0,0 +1,36 @@ +package com.couplet.mq.controller; + +import com.alibaba.fastjson2.JSON; +import com.couplet.common.core.utils.uuid.IdUtils; +import com.couplet.mq.config.RabbitMQConfig; +import com.couplet.mq.domain.Test; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.connection.CorrelationData; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @ProjectName: five-groups-couplet + * @Author: LiuYunHu + * @CreateTime: 2024/3/29 + * @Description: MQController类 + */ +@RestController +@RequestMapping("/mq") +@Slf4j +public class MqController { + @Autowired + private RabbitTemplate rabbitTemplate; + + @PostMapping("/receive") + public void receive(@RequestBody Test data) { + //创建配置类对象,用于获取配置值 + RabbitMQConfig config = new RabbitMQConfig(); + + rabbitTemplate.convertAndSend(config.exchangeName, config.routingKey, JSON.toJSONString(data) , message -> { + message.getMessageProperties().setMessageId(IdUtils.randomUUID()); + return message; + }, new CorrelationData(IdUtils.randomUUID())); + } +} diff --git a/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/domain/Test.java b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/domain/Test.java new file mode 100644 index 0000000..618d7ec --- /dev/null +++ b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/domain/Test.java @@ -0,0 +1,14 @@ +package com.couplet.mq.domain; + +import java.io.Serializable; + +/** + * @ProjectName: five-groups-couplet + * @Author: LiuYunHu + * @CreateTime: 2024/3/29 + * @Description: 测试 参数类 + */ + +public class Test implements Serializable { + public String data; +} diff --git a/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/service/Consumer.java b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/service/Consumer.java new file mode 100644 index 0000000..f49c3ac --- /dev/null +++ b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/service/Consumer.java @@ -0,0 +1,72 @@ +package com.couplet.mq.service; + +import com.couplet.mq.config.RabbitMQConfig; +import com.rabbitmq.client.Channel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +/** + * @ProjectName: five-groups-couplet + * @Author: LiuYunHu + * @CreateTime: 2024/3/28 + * @Description: MQ消费者类 + */ +@RabbitListener(queues = "${mq.queueName}") +@Component +@Slf4j +public class Consumer { + @Autowired + private StringRedisTemplate redisTemplate; + + @RabbitHandler + public void receive(String data, Channel channel, Message message) throws IOException { + log.info("消费者接受到数据:{}", data); + + //获取信息的标记 + long deliveryTag = message.getMessageProperties().getDeliveryTag(); + + //获取到消息的id + String messageId = message.getMessageProperties().getMessageId(); + + Long add = redisTemplate.opsForSet().add("set:" + messageId, "set:" + messageId); + + if (!redisTemplate.hasKey("value:" + messageId)) { + redisTemplate.opsForValue().set("value:" + messageId, String.valueOf(deliveryTag), 10, TimeUnit.MINUTES); + } + + try { + if (add == 1) { + log.info("---------------消费者开始消费---------------"); + + System.out.println(data); + + log.info("---------------消费者结束消费---------------"); + }else { + log.error("重复消费!"); + channel.basicReject(deliveryTag, false); + } + } catch (IOException e) { +// throw new RuntimeException(e); + String s = redisTemplate.opsForValue().get("value:" + messageId); + long oldTag = Long.parseLong(s); + + if ((oldTag + 2) != deliveryTag) { + log.info("重新入队!"); + channel.basicNack(deliveryTag, false, true); + }else { + log.error("三次无法消费,不再入队!"); + channel.basicNack(deliveryTag, false, false); + } + + } + } +} diff --git a/couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/service/impl/MqttListen.java b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/service/MqttListen.java similarity index 98% rename from couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/service/impl/MqttListen.java rename to couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/service/MqttListen.java index 4132805..8b914e9 100644 --- a/couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/service/impl/MqttListen.java +++ b/couplet-modules/couplet-modules-mq/src/main/java/com/couplet/mq/service/MqttListen.java @@ -1,4 +1,4 @@ -package com.couplet.mqtt.service.impl; +package com.couplet.mq.service; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.*; diff --git a/couplet-modules/couplet-modules-mqtt/src/main/resources/banner.txt b/couplet-modules/couplet-modules-mq/src/main/resources/banner.txt similarity index 100% rename from couplet-modules/couplet-modules-mqtt/src/main/resources/banner.txt rename to couplet-modules/couplet-modules-mq/src/main/resources/banner.txt diff --git a/couplet-modules/couplet-modules-mqtt/src/main/resources/bootstrap.yml b/couplet-modules/couplet-modules-mq/src/main/resources/bootstrap.yml similarity index 88% rename from couplet-modules/couplet-modules-mqtt/src/main/resources/bootstrap.yml rename to couplet-modules/couplet-modules-mq/src/main/resources/bootstrap.yml index ec760c4..61d454f 100644 --- a/couplet-modules/couplet-modules-mqtt/src/main/resources/bootstrap.yml +++ b/couplet-modules/couplet-modules-mq/src/main/resources/bootstrap.yml @@ -6,7 +6,7 @@ server: spring: application: # 应用名称 - name: couplet-mqtt + name: couplet-mq profiles: # 环境配置 active: dev @@ -40,3 +40,9 @@ mqtt: clientid: mqttx qos: 0 topic: test + +# RabbitMQ配置 +mq: + queueName: queue + exchangeName: exchange + routingKey: routingKey diff --git a/couplet-modules/couplet-modules-mqtt/src/main/resources/logback.xml b/couplet-modules/couplet-modules-mq/src/main/resources/logback.xml similarity index 100% rename from couplet-modules/couplet-modules-mqtt/src/main/resources/logback.xml rename to couplet-modules/couplet-modules-mq/src/main/resources/logback.xml diff --git a/couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/mapper/MqttMapper.java b/couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/mapper/MqttMapper.java deleted file mode 100644 index c9c07e3..0000000 --- a/couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/mapper/MqttMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.couplet.mqtt.mapper; - -import org.apache.ibatis.annotations.Mapper; -import org.springframework.stereotype.Component; - -/** - * @ProjectName: five-groups-couplet - * @Author: LiuYunHu - * @CreateTime: 2024/3/28 - * @Description: - */ -@Component -@Mapper -public interface MqttMapper { -} diff --git a/couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/service/MqttService.java b/couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/service/MqttService.java deleted file mode 100644 index 452379c..0000000 --- a/couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/service/MqttService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.couplet.mqtt.service; - -/** - * @ProjectName: five-groups-couplet - * @Author: LiuYunHu - * @CreateTime: 2024/3/28 - * @Description: MQTT服务接口 - */ - -public interface MqttService { - -} diff --git a/couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/service/impl/MqttServiceImpl.java b/couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/service/impl/MqttServiceImpl.java deleted file mode 100644 index e546bab..0000000 --- a/couplet-modules/couplet-modules-mqtt/src/main/java/com/couplet/mqtt/service/impl/MqttServiceImpl.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.couplet.mqtt.service.impl; - -import com.couplet.mqtt.service.MqttService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * @ProjectName: five-groups-couplet - * @Author: LiuYunHu - * @CreateTime: 2024/3/28 - * @Description: MQTT服务实现类 - */ -@Service -@Slf4j -public class MqttServiceImpl implements MqttService { -} diff --git a/couplet-modules/couplet-modules-mqtt/src/main/resources/mapper/mqtt/MqttMapper.xml b/couplet-modules/couplet-modules-mqtt/src/main/resources/mapper/mqtt/MqttMapper.xml deleted file mode 100644 index 5a70a2c..0000000 --- a/couplet-modules/couplet-modules-mqtt/src/main/resources/mapper/mqtt/MqttMapper.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/couplet-modules/couplet-modules-vehicle/src/main/java/com/couplet/vehicle/domain/req/VehicleEditParams.java b/couplet-modules/couplet-modules-vehicle/src/main/java/com/couplet/vehicle/domain/req/VehicleEditParams.java index 75f8c05..d2186d4 100644 --- a/couplet-modules/couplet-modules-vehicle/src/main/java/com/couplet/vehicle/domain/req/VehicleEditParams.java +++ b/couplet-modules/couplet-modules-vehicle/src/main/java/com/couplet/vehicle/domain/req/VehicleEditParams.java @@ -5,6 +5,9 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import javax.validation.constraints.NotNull; + + /** * @ProjectName: five-groups-couplet * @Author: LiuYunHu @@ -20,11 +23,13 @@ public class VehicleEditParams { /* *车辆id * */ + @NotNull(message = "车辆id不能为空") private Long vehicleId; /* *车辆类型 * */ + @NotNull(message="车辆类型不能为空") private Integer vehicleType; diff --git a/couplet-modules/couplet-modules-vehicle/src/main/java/com/couplet/vehicle/exception/VehicleException.java b/couplet-modules/couplet-modules-vehicle/src/main/java/com/couplet/vehicle/exception/VehicleException.java new file mode 100644 index 0000000..37b0f52 --- /dev/null +++ b/couplet-modules/couplet-modules-vehicle/src/main/java/com/couplet/vehicle/exception/VehicleException.java @@ -0,0 +1,26 @@ +package com.couplet.vehicle.exception; + +/** + * @ProjectName: five-groups-couplet + * @Author: LiuYunHu + * @CreateTime: 2024/3/29 + * @Description: 车辆异常响应 + */ + +public class VehicleException extends RuntimeException { + private int code; + private String message; + + public VehicleException(int code, String message) { + this.code = code; + this.message = message; + } + + public VehicleException(String message) { + super(message); + } + + public VehicleException() { + + } +} diff --git a/couplet-modules/couplet-modules-vehicle/src/main/java/com/couplet/vehicle/service/impl/VehicleServiceImpl.java b/couplet-modules/couplet-modules-vehicle/src/main/java/com/couplet/vehicle/service/impl/VehicleServiceImpl.java index 7f68a38..33287c7 100644 --- a/couplet-modules/couplet-modules-vehicle/src/main/java/com/couplet/vehicle/service/impl/VehicleServiceImpl.java +++ b/couplet-modules/couplet-modules-vehicle/src/main/java/com/couplet/vehicle/service/impl/VehicleServiceImpl.java @@ -8,6 +8,7 @@ import com.couplet.vehicle.domain.LyhVehicle; import com.couplet.vehicle.domain.req.VehicleEditParams; import com.couplet.vehicle.domain.req.VehicleInsertParams; import com.couplet.vehicle.domain.req.VehicleListParams; +import com.couplet.vehicle.exception.VehicleException; import com.couplet.vehicle.mapper.VehicleMapper; import com.couplet.vehicle.service.VehicleService; import com.couplet.vehicle.utils.SnowflakeIdGenerator; @@ -79,7 +80,7 @@ public class VehicleServiceImpl extends ServiceImpl i if (!update) { result = "删除失败"; - throw new RuntimeException(result); + throw new VehicleException(result); } result = "删除成功!"; @@ -124,7 +125,7 @@ public class VehicleServiceImpl extends ServiceImpl i if (!update) { result = "编辑失败"; - throw new RuntimeException(result); + throw new VehicleException(result); } result = "编辑成功!"; @@ -153,7 +154,7 @@ public class VehicleServiceImpl extends ServiceImpl i if (insert == 0) { result = "新增失败"; - throw new RuntimeException(result); + throw new VehicleException(result); } result = "新增成功!"; diff --git a/couplet-modules/pom.xml b/couplet-modules/pom.xml index 6594626..1e1a446 100644 --- a/couplet-modules/pom.xml +++ b/couplet-modules/pom.xml @@ -16,7 +16,7 @@ couplet-trouble couplet-electronic-fence couplet-modules-vehicle - couplet-modules-mqtt + couplet-modules-mq couplet-enterprisemanagement diff --git a/pom.xml b/pom.xml index cfaa549..3152da5 100644 --- a/pom.xml +++ b/pom.xml @@ -245,6 +245,21 @@ couplet-enterprisemanagement-remote ${couplet.version} + + + + com.couplet + couplet-modules-vehicle + 3.6.3 + + + + + com.couplet + couplet-modules-mq + 3.6.3 + +