pom.xml
@@ -267,6 +267,23 @@ <artifactId>mapstruct</artifactId> <version>${mapstruct.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java
New file @@ -0,0 +1,50 @@ package cc.mrbird.febs.common.configure; import cc.mrbird.febs.rabbit.constants.ExchangeConstants; import cc.mrbird.febs.rabbit.constants.QueueConstants; import cc.mrbird.febs.rabbit.constants.RouteKeyConstants; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.DirectExchange; import org.springframework.amqp.core.Queue; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * @author wzy * @date 2021-09-25 **/ @Configuration public class RabbitConfigure { @Resource private ConnectionFactory connectionFactory; @Bean @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public RabbitTemplate rabbitTemplate() { return new RabbitTemplate(connectionFactory); } @Bean public DirectExchange defaultExchange() { return new DirectExchange(ExchangeConstants.EXCHANGE_DEFAULT); } @Bean public Queue defaultQueue() { return new Queue(QueueConstants.QUEUE_DEFAULT); } @Bean public Binding defaultBind() { return BindingBuilder.bind(defaultQueue()).to(defaultExchange()).with(RouteKeyConstants.ROUTE_KEY_DEFAULT); } } src/main/java/cc/mrbird/febs/mall/entity/AgentInfo.java
New file @@ -0,0 +1,44 @@ package cc.mrbird.febs.mall.entity; import lombok.Data; import java.math.BigDecimal; /** * @author wzy * @date 2021-09-25 **/ @Data public class AgentInfo { /** * 下单数量要求 1-直推 2-团队 */ private Integer orderType; /** * 下单数量 */ private Integer orderCnt; /** * 需要上一级的数量 */ private Integer lastCnt; /** * 直推收益 */ private BigDecimal directIncome; /** * 团队收益 */ private BigDecimal TeamIncome; /** * 团队收益 1-指定金额 2-比例 */ private BigDecimal teamIncomeType; } src/main/java/cc/mrbird/febs/rabbit/constants/ExchangeConstants.java
New file @@ -0,0 +1,10 @@ package cc.mrbird.febs.rabbit.constants; /** * @author wzy * @date 2021-09-25 **/ public class ExchangeConstants { public static final String EXCHANGE_DEFAULT = "exchange_default"; } src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
New file @@ -0,0 +1,10 @@ package cc.mrbird.febs.rabbit.constants; /** * @author wzy * @date 2021-09-25 **/ public class QueueConstants { public static final String QUEUE_DEFAULT = "queue_default"; } src/main/java/cc/mrbird/febs/rabbit/constants/RouteKeyConstants.java
New file @@ -0,0 +1,10 @@ package cc.mrbird.febs.rabbit.constants; /** * @author wzy * @date 2021-09-25 **/ public class RouteKeyConstants { public static final String ROUTE_KEY_DEFAULT = "route_key_default"; } src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
New file @@ -0,0 +1,22 @@ package cc.mrbird.febs.rabbit.consumer; import cc.mrbird.febs.rabbit.constants.QueueConstants; import com.rabbitmq.client.Channel; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; /** * @author wzy * @date 2021-09-25 **/ @Slf4j @Component public class AgentConsumer { @RabbitListener(queues = QueueConstants.QUEUE_DEFAULT) public void agentReturn(Message message, Channel channel) { log.info("消费者:{}", new String(message.getBody())); } } src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
New file @@ -0,0 +1,47 @@ package cc.mrbird.febs.rabbit.producter; import cc.mrbird.febs.rabbit.constants.ExchangeConstants; import cc.mrbird.febs.rabbit.constants.RouteKeyConstants; 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.stereotype.Component; import java.util.UUID; /** * @author wzy * @date 2021-09-25 **/ @Slf4j @Component public class AgentProducer implements RabbitTemplate.ConfirmCallback { /** * 配置中配置的RabbitTemplate的是prototype类型,不能直接注入 */ private RabbitTemplate rabbitTemplate; /** * 在构造方法上注入RabbitTemplate * * @param */ @Autowired public AgentProducer(RabbitTemplate rabbitTemplate) { this.rabbitTemplate = rabbitTemplate; rabbitTemplate.setConfirmCallback(this); } @Override public void confirm(CorrelationData correlationData, boolean ack, String cause) { } public void sendOrderReturn(Long id) { log.info("发送消息:{}", id); CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); rabbitTemplate.convertAndSend(ExchangeConstants.EXCHANGE_DEFAULT, RouteKeyConstants.ROUTE_KEY_DEFAULT, id, correlationData); } } src/main/resources/application-dev.yml
@@ -41,3 +41,9 @@ max-wait: 10000 # 连接超时时间(毫秒) timeout: 5000 rabbitmq: host: 120.27.238.55 port: 5672 username: ct_rabbit password: 123456 publisher-confirm-type: correlated src/main/resources/application-prod.yml
@@ -47,3 +47,9 @@ max-wait: 10000 # 连接超时时间(毫秒) timeout: 5000 rabbitmq: host: 120.27.238.55 port: 5672 username: ct_rabbit password: 123456 publisher-confirm-type: correlated src/main/resources/application-test.yml
@@ -41,3 +41,9 @@ max-wait: 10000 # 连接超时时间(毫秒) timeout: 5000 rabbitmq: host: 120.27.238.55 port: 5672 username: ct_rabbit password: 123456 publisher-confirm-type: correlated src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
@@ -14,10 +14,10 @@ from mall_money_flow a inner join mall_member b on a.member_id=b.id <where> <if test="record.type == 2"> <if test="record.type == 3"> and a.amount > 0 </if> <if test="record.type == 3"> <if test="record.type == 2"> and 0 > a.amount </if> <if test="record.memberId != null"> src/test/java/cc/mrbird/febs/AgentTest.java
New file @@ -0,0 +1,24 @@ package cc.mrbird.febs; import cc.mrbird.febs.rabbit.producter.AgentProducer; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; /** * @author wzy * @date 2021-09-25 **/ @Slf4j @SpringBootTest public class AgentTest { @Autowired private AgentProducer agentProducer; @Test public void agentTest() { agentProducer.sendOrderReturn(1L); } }