From 96697e11fd848334f206ba72872172252b4179bc Mon Sep 17 00:00:00 2001 From: paulGao Date: Wed, 22 Jun 2022 17:31:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=9B=91=E5=90=AC=E4=BA=8B?= =?UTF-8?q?=E5=8A=A1=E6=8F=90=E4=BA=A4=E5=8F=91=E9=80=81mq=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E4=B8=BA=E8=AE=A2=E5=8D=95=E5=8F=98=E6=9B=B4?= =?UTF-8?q?=E5=8F=91=E9=80=81mq=E5=A2=9E=E5=8A=A0=E4=BA=8B=E5=8A=A1?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=9B=91=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/TransactionCommitSendMQEvent.java | 32 +++++++++++++++ .../TransactionCommitSendMQListener.java | 38 +++++++++++++++++ .../event/GeneratorEsGoodsIndexEvent.java | 24 ----------- .../GeneratorEsGoodsIndexListener.java | 37 ----------------- .../serviceimpl/GoodsSkuServiceImpl.java | 8 ++-- .../order/serviceimpl/OrderServiceImpl.java | 17 +++++--- .../UpdateEsGoodsIndexPromotionsEvent.java | 19 --------- .../UpdateEsGoodsIndexPromotionsListener.java | 41 ------------------- .../AbstractPromotionsServiceImpl.java | 17 ++------ 9 files changed, 90 insertions(+), 143 deletions(-) create mode 100644 framework/src/main/java/cn/lili/common/event/TransactionCommitSendMQEvent.java create mode 100644 framework/src/main/java/cn/lili/common/listener/TransactionCommitSendMQListener.java delete mode 100644 framework/src/main/java/cn/lili/modules/goods/event/GeneratorEsGoodsIndexEvent.java delete mode 100644 framework/src/main/java/cn/lili/modules/goods/listener/GeneratorEsGoodsIndexListener.java delete mode 100644 framework/src/main/java/cn/lili/modules/promotion/event/UpdateEsGoodsIndexPromotionsEvent.java delete mode 100644 framework/src/main/java/cn/lili/modules/promotion/listener/UpdateEsGoodsIndexPromotionsListener.java diff --git a/framework/src/main/java/cn/lili/common/event/TransactionCommitSendMQEvent.java b/framework/src/main/java/cn/lili/common/event/TransactionCommitSendMQEvent.java new file mode 100644 index 00000000..9f16c1e4 --- /dev/null +++ b/framework/src/main/java/cn/lili/common/event/TransactionCommitSendMQEvent.java @@ -0,0 +1,32 @@ +package cn.lili.common.event; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +/** + * 事务提交后发生mq事件 + * + * @author paulG + * @since 2022/1/19 + **/ +public class TransactionCommitSendMQEvent extends ApplicationEvent { + + private static final long serialVersionUID = 5885956821347953071L; + + + @Getter + private final String topic; + + @Getter + private final String tag; + + @Getter + private final String message; + + public TransactionCommitSendMQEvent(Object source, String topic, String tag, String message) { + super(source); + this.topic = topic; + this.tag = tag; + this.message = message; + } +} diff --git a/framework/src/main/java/cn/lili/common/listener/TransactionCommitSendMQListener.java b/framework/src/main/java/cn/lili/common/listener/TransactionCommitSendMQListener.java new file mode 100644 index 00000000..c709df75 --- /dev/null +++ b/framework/src/main/java/cn/lili/common/listener/TransactionCommitSendMQListener.java @@ -0,0 +1,38 @@ +package cn.lili.common.listener; + +import cn.lili.common.event.TransactionCommitSendMQEvent; +import cn.lili.rocketmq.RocketmqSendCallbackBuilder; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + +/** + * 事务提交监听器 + * + * @author paulG + * @since 2022/1/19 + **/ +@Component +@Slf4j +public class TransactionCommitSendMQListener { + + /** + * rocketMq + */ + @Autowired + private RocketMQTemplate rocketMQTemplate; + + + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + public void send(TransactionCommitSendMQEvent event) { + log.info("事务提交,发送mq信息!{}", event); + String destination = event.getTopic() + ":" + event.getTag(); + //发送订单变更mq消息 + rocketMQTemplate.asyncSend(destination, event.getMessage(), RocketmqSendCallbackBuilder.commonCallback()); + } + + +} diff --git a/framework/src/main/java/cn/lili/modules/goods/event/GeneratorEsGoodsIndexEvent.java b/framework/src/main/java/cn/lili/modules/goods/event/GeneratorEsGoodsIndexEvent.java deleted file mode 100644 index 4088b5aa..00000000 --- a/framework/src/main/java/cn/lili/modules/goods/event/GeneratorEsGoodsIndexEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.lili.modules.goods.event; - -import lombok.Data; -import org.springframework.context.ApplicationEvent; - -/** - * @author paulG - * @since 2022/1/19 - **/ -@Data -public class GeneratorEsGoodsIndexEvent extends ApplicationEvent { - - private static final long serialVersionUID = -6206752641309458207L; - - private String id; - - private String tag; - - public GeneratorEsGoodsIndexEvent(Object source, String tag, String id) { - super(source); - this.tag = tag; - this.id = id; - } -} diff --git a/framework/src/main/java/cn/lili/modules/goods/listener/GeneratorEsGoodsIndexListener.java b/framework/src/main/java/cn/lili/modules/goods/listener/GeneratorEsGoodsIndexListener.java deleted file mode 100644 index 175e0b13..00000000 --- a/framework/src/main/java/cn/lili/modules/goods/listener/GeneratorEsGoodsIndexListener.java +++ /dev/null @@ -1,37 +0,0 @@ -package cn.lili.modules.goods.listener; - -import cn.lili.common.properties.RocketmqCustomProperties; -import cn.lili.modules.goods.event.GeneratorEsGoodsIndexEvent; -import cn.lili.rocketmq.RocketmqSendCallbackBuilder; -import org.apache.rocketmq.spring.core.RocketMQTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.transaction.event.TransactionPhase; -import org.springframework.transaction.event.TransactionalEventListener; - -/** - * @author paulG - * @since 2022/1/19 - **/ -@Component -public class GeneratorEsGoodsIndexListener { - - /** - * rocketMq - */ - @Autowired - private RocketMQTemplate rocketMQTemplate; - /** - * rocketMq配置 - */ - @Autowired - private RocketmqCustomProperties rocketmqCustomProperties; - - @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) - public void generatorEsGoodsIndex(GeneratorEsGoodsIndexEvent esGoodsIndexEvent) { - String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + esGoodsIndexEvent.getTag(); - //发送mq消息 - rocketMQTemplate.asyncSend(destination, esGoodsIndexEvent.getId(), RocketmqSendCallbackBuilder.commonCallback()); - } - -} diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java index c4d89278..94bec3dc 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java @@ -9,6 +9,7 @@ import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; +import cn.lili.common.event.TransactionCommitSendMQEvent; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.security.context.UserContext; @@ -26,7 +27,6 @@ import cn.lili.modules.goods.entity.vos.GoodsSkuSpecVO; import cn.lili.modules.goods.entity.vos.GoodsSkuVO; import cn.lili.modules.goods.entity.vos.GoodsVO; import cn.lili.modules.goods.entity.vos.SpecValueVO; -import cn.lili.modules.goods.event.GeneratorEsGoodsIndexEvent; import cn.lili.modules.goods.mapper.GoodsSkuMapper; import cn.lili.modules.goods.service.*; import cn.lili.modules.goods.sku.GoodsSkuBuilder; @@ -362,10 +362,10 @@ public class GoodsSkuServiceImpl extends ServiceImpl i boolean update = this.update(updateWrapper); if (Boolean.TRUE.equals(update)) { if (GoodsStatusEnum.UPPER.name().equals(marketEnable)) { - applicationEventPublisher.publishEvent(new GeneratorEsGoodsIndexEvent("生成店铺商品", GoodsTagsEnum.GENERATOR_STORE_GOODS_INDEX.name(), storeId)); + applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("生成店铺商品", rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.GENERATOR_STORE_GOODS_INDEX.name(), storeId)); } else if (GoodsStatusEnum.DOWN.name().equals(marketEnable)) { cache.vagueDel(CachePrefix.GOODS_SKU.getPrefix()); - applicationEventPublisher.publishEvent(new GeneratorEsGoodsIndexEvent("删除店铺商品", GoodsTagsEnum.STORE_GOODS_DELETE.name(), storeId)); + applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("删除店铺商品", rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.STORE_GOODS_DELETE.name(), storeId)); } } } @@ -589,7 +589,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i if (!GoodsStatusEnum.UPPER.name().equals(goods.getMarketEnable()) || !GoodsAuthEnum.PASS.name().equals(goods.getAuthFlag())) { return; } - applicationEventPublisher.publishEvent(new GeneratorEsGoodsIndexEvent("生成商品", GoodsTagsEnum.GENERATOR_GOODS_INDEX.name(), goods.getId())); + applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("生成商品", rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.GENERATOR_GOODS_INDEX.name(), goods.getId())); } @Override diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index ca00f595..fab02420 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -10,6 +10,7 @@ import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; +import cn.lili.common.event.TransactionCommitSendMQEvent; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.security.OperationalJudgment; @@ -66,6 +67,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -144,6 +146,10 @@ public class OrderServiceImpl extends ServiceImpl implements @Autowired private TradeService tradeService; + + @Autowired + private ApplicationEventPublisher applicationEventPublisher; + @Override @Transactional(rollbackFor = Exception.class) public void intoDB(TradeDTO tradeDTO) { @@ -445,12 +451,13 @@ public class OrderServiceImpl extends ServiceImpl implements //获取订单信息 Order order = this.getBySn(orderSn); //获取踪迹信息 - String str=order.getConsigneeMobile(); - return logisticsService.getLogistic(order.getLogisticsCode(), order.getLogisticsNo(), str.substring(str.length()-4)); + String str = order.getConsigneeMobile(); + return logisticsService.getLogistic(order.getLogisticsCode(), order.getLogisticsNo(), str.substring(str.length() - 4)); } @Override @OrderLogPoint(description = "'订单['+#orderSn+']核销,核销码['+#verificationCode+']'", orderSn = "#orderSn") + @Transactional(rollbackFor = Exception.class) public Order take(String orderSn, String verificationCode) { //获取订单信息 @@ -534,10 +541,9 @@ public class OrderServiceImpl extends ServiceImpl implements } @Override + @Transactional(rollbackFor = Exception.class) public void sendUpdateStatusMessage(OrderMessage orderMessage) { - String destination = rocketmqCustomProperties.getOrderTopic() + ":" + OrderTagsEnum.STATUS_CHANGE.name(); - //发送订单变更mq消息 - rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(orderMessage), RocketmqSendCallbackBuilder.commonCallback()); + applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("发送订单变更mq消息", rocketmqCustomProperties.getOrderTopic(), OrderTagsEnum.STATUS_CHANGE.name(), JSONUtil.toJsonStr(orderMessage))); } @Override @@ -621,6 +627,7 @@ public class OrderServiceImpl extends ServiceImpl implements } @Override + @Transactional(rollbackFor = Exception.class) public void batchDeliver(MultipartFile files) { InputStream inputStream; diff --git a/framework/src/main/java/cn/lili/modules/promotion/event/UpdateEsGoodsIndexPromotionsEvent.java b/framework/src/main/java/cn/lili/modules/promotion/event/UpdateEsGoodsIndexPromotionsEvent.java deleted file mode 100644 index 94442bf7..00000000 --- a/framework/src/main/java/cn/lili/modules/promotion/event/UpdateEsGoodsIndexPromotionsEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.lili.modules.promotion.event; - -import lombok.Data; -import org.springframework.context.ApplicationEvent; - -/** - * @author paulG - * @since 2022/1/19 - **/ -@Data -public class UpdateEsGoodsIndexPromotionsEvent extends ApplicationEvent { - - private String promotionsJsonStr; - - public UpdateEsGoodsIndexPromotionsEvent(Object source, String promotionsJsonStr) { - super(source); - this.promotionsJsonStr = promotionsJsonStr; - } -} diff --git a/framework/src/main/java/cn/lili/modules/promotion/listener/UpdateEsGoodsIndexPromotionsListener.java b/framework/src/main/java/cn/lili/modules/promotion/listener/UpdateEsGoodsIndexPromotionsListener.java deleted file mode 100644 index 00417c5f..00000000 --- a/framework/src/main/java/cn/lili/modules/promotion/listener/UpdateEsGoodsIndexPromotionsListener.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.lili.modules.promotion.listener; - -import cn.lili.common.properties.RocketmqCustomProperties; -import cn.lili.modules.promotion.event.UpdateEsGoodsIndexPromotionsEvent; -import cn.lili.rocketmq.RocketmqSendCallbackBuilder; -import cn.lili.rocketmq.tags.GoodsTagsEnum; -import org.apache.rocketmq.spring.core.RocketMQTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.transaction.event.TransactionPhase; -import org.springframework.transaction.event.TransactionalEventListener; - -/** - * @author paulG - * @since 2022/1/19 - **/ -@Component -public class UpdateEsGoodsIndexPromotionsListener { - - /** - * rocketMq - */ - @Autowired - private RocketMQTemplate rocketMQTemplate; - /** - * rocketMq配置 - */ - @Autowired - private RocketmqCustomProperties rocketmqCustomProperties; - - - @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT, fallbackExecution = true) - public void updateEsGoodsIndexPromotions(UpdateEsGoodsIndexPromotionsEvent event) { - //更新商品促销消息 - String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.UPDATE_GOODS_INDEX_PROMOTIONS.name(); - //发送mq消息 - rocketMQTemplate.asyncSend(destination, event.getPromotionsJsonStr(), RocketmqSendCallbackBuilder.commonCallback()); - } - - -} diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/AbstractPromotionsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/AbstractPromotionsServiceImpl.java index c46eb258..05682167 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/AbstractPromotionsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/AbstractPromotionsServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.map.MapBuilder; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; +import cn.lili.common.event.TransactionCommitSendMQEvent; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.vo.PageVO; @@ -11,19 +12,16 @@ import cn.lili.modules.promotion.entity.dos.BasePromotions; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dto.search.BasePromotionsSearchParams; import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; -import cn.lili.modules.promotion.event.UpdateEsGoodsIndexPromotionsEvent; import cn.lili.modules.promotion.service.AbstractPromotionsService; import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.promotion.tools.PromotionTools; import cn.lili.mybatis.util.PageUtil; -import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.GoodsTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.transaction.annotation.Transactional; @@ -48,12 +46,6 @@ public abstract class AbstractPromotionsServiceImpl, T e @Autowired private RocketmqCustomProperties rocketmqCustomProperties; - /** - * rocketMq - */ - @Autowired - private RocketMQTemplate rocketMQTemplate; - @Autowired private ApplicationEventPublisher applicationEventPublisher; @@ -253,13 +245,12 @@ public abstract class AbstractPromotionsServiceImpl, T e * @param promotions 促销实体 */ @Override + @Transactional(rollbackFor = {Exception.class}) public void updateEsGoodsIndex(T promotions) { if (promotions.getStartTime() == null && promotions.getEndTime() == null) { Map build = MapBuilder.create().put("promotionKey", this.getPromotionType() + "-" + promotions.getId()).put("scopeId", promotions.getScopeId()).build(); //删除商品促销消息 - String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.DELETE_GOODS_INDEX_PROMOTIONS.name(); - //发送mq消息 - rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(build), RocketmqSendCallbackBuilder.commonCallback()); + applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("删除商品促销事件", rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.DELETE_GOODS_INDEX_PROMOTIONS.name(), JSONUtil.toJsonStr(build))); } else { String esPromotionKey = this.getPromotionType().name() + "-" + promotions.getId(); @@ -270,7 +261,7 @@ public abstract class AbstractPromotionsServiceImpl, T e map.put("promotionsType", promotions.getClass().getName()); // 促销实体 map.put("promotions", promotions); - applicationEventPublisher.publishEvent(new UpdateEsGoodsIndexPromotionsEvent("更新商品索引促销事件", JSONUtil.toJsonStr(map))); + applicationEventPublisher.publishEvent(new TransactionCommitSendMQEvent("更新商品索引促销事件", rocketmqCustomProperties.getGoodsTopic(), GoodsTagsEnum.UPDATE_GOODS_INDEX_PROMOTIONS.name(), JSONUtil.toJsonStr(map))); } }