From 54e04be768b1b7d8f114e871e8a873bb0f328e1f Mon Sep 17 00:00:00 2001 From: chc <1501738723@qq.com> Date: Thu, 24 Nov 2022 18:13:30 +0800 Subject: [PATCH] im --- buyer-api/src/main/resources/application.yml | 2 + .../cn/lili/event/MemberInfoChangeEvent.java | 17 ++++++ .../lili/event/StoreSettingChangeEvent.java | 18 ++++++ .../cn/lili/event/impl/ImTalkExecute.java | 60 +++++++++++++++++++ .../lili/listener/MemberMessageListener.java | 23 +++++-- .../lili/listener/StoreMessageListener.java | 51 ++++++++++++++++ consumer/src/main/resources/application.yml | 2 + .../member/serviceimpl/MemberServiceImpl.java | 8 +++ .../serviceimpl/StoreDetailServiceImpl.java | 5 ++ .../store/serviceimpl/StoreServiceImpl.java | 14 +++++ .../cn/lili/rocketmq/tags/MemberTagsEnum.java | 4 ++ .../cn/lili/rocketmq/tags/StoreTagsEnum.java | 20 +++++++ .../lili/controller/im/WebSocketServer.java | 19 +++++- im-api/src/main/resources/application.yml | 2 + .../src/main/resources/application.yml | 2 + seller-api/src/main/resources/application.yml | 2 + 16 files changed, 242 insertions(+), 7 deletions(-) create mode 100644 consumer/src/main/java/cn/lili/event/MemberInfoChangeEvent.java create mode 100644 consumer/src/main/java/cn/lili/event/StoreSettingChangeEvent.java create mode 100644 consumer/src/main/java/cn/lili/event/impl/ImTalkExecute.java create mode 100644 consumer/src/main/java/cn/lili/listener/StoreMessageListener.java create mode 100644 framework/src/main/java/cn/lili/rocketmq/tags/StoreTagsEnum.java diff --git a/buyer-api/src/main/resources/application.yml b/buyer-api/src/main/resources/application.yml index f3a7a5a6e..04c87cf48 100644 --- a/buyer-api/src/main/resources/application.yml +++ b/buyer-api/src/main/resources/application.yml @@ -265,6 +265,8 @@ lili: order-group: lili_order_group member-topic: lili_member_topic member-group: lili_member_group + store-topic: lili_store_topic + store-group: lili_store_group other-topic: lili_other_topic other-group: lili_other_group notice-topic: lili_notice_topic diff --git a/consumer/src/main/java/cn/lili/event/MemberInfoChangeEvent.java b/consumer/src/main/java/cn/lili/event/MemberInfoChangeEvent.java new file mode 100644 index 000000000..51dbd3910 --- /dev/null +++ b/consumer/src/main/java/cn/lili/event/MemberInfoChangeEvent.java @@ -0,0 +1,17 @@ +package cn.lili.event; + +import cn.lili.modules.member.entity.dos.Member; + +/** + * @author chc + * @since 2022/6/2114:46 + */ +public interface MemberInfoChangeEvent { + + /** + * 会员信息更改消息 + * + * @param member 会员信息 + */ + void memberInfoChange(Member member); +} diff --git a/consumer/src/main/java/cn/lili/event/StoreSettingChangeEvent.java b/consumer/src/main/java/cn/lili/event/StoreSettingChangeEvent.java new file mode 100644 index 000000000..eea973853 --- /dev/null +++ b/consumer/src/main/java/cn/lili/event/StoreSettingChangeEvent.java @@ -0,0 +1,18 @@ +package cn.lili.event; + + +import cn.lili.modules.store.entity.dos.Store; + +/** + * @author chc + * @since 2022/6/2114:46 + */ +public interface StoreSettingChangeEvent { + + /** + * 店铺信息更改消息 + * + * @param store 店铺信息 + */ + void StoreSettingChange(Store store); +} diff --git a/consumer/src/main/java/cn/lili/event/impl/ImTalkExecute.java b/consumer/src/main/java/cn/lili/event/impl/ImTalkExecute.java new file mode 100644 index 000000000..cc9d2c6ef --- /dev/null +++ b/consumer/src/main/java/cn/lili/event/impl/ImTalkExecute.java @@ -0,0 +1,60 @@ +package cn.lili.event.impl; + +import cn.lili.event.MemberInfoChangeEvent; +import cn.lili.event.StoreSettingChangeEvent; +import cn.lili.modules.im.entity.dos.ImTalk; +import cn.lili.modules.im.service.ImTalkService; +import cn.lili.modules.member.entity.dos.Member; +import cn.lili.modules.store.entity.dos.Store; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * Im对话消息 + * + * @author chc + * @since 2022/6/2114:46 + */ +@Service +public class ImTalkExecute implements MemberInfoChangeEvent, StoreSettingChangeEvent { + + @Autowired + private ImTalkService imTalkService; + + @Override + public void memberInfoChange(Member member) { + //当与UserId1相等时 + List imTalkList1 = imTalkService.list(new LambdaQueryWrapper().eq(ImTalk::getUserId1, member.getId())); + for (ImTalk imTalk : imTalkList1) { + imTalk.setName1(member.getNickName()); + imTalk.setFace1(member.getFace()); + } + imTalkService.updateBatchById(imTalkList1); + List imTalkList2 = imTalkService.list(new LambdaQueryWrapper().eq(ImTalk::getUserId2, member.getId())); + for (ImTalk imTalk : imTalkList2) { + imTalk.setName2(member.getNickName()); + imTalk.setFace2(member.getFace()); + } + imTalkService.updateBatchById(imTalkList2); + } + + @Override + public void StoreSettingChange(Store store) { + //当与UserId1相等时 + List imTalkList1 = imTalkService.list(new LambdaQueryWrapper().eq(ImTalk::getUserId1, store.getId())); + for (ImTalk imTalk : imTalkList1) { + imTalk.setName1(store.getStoreName()); + imTalk.setFace1(store.getStoreLogo()); + } + imTalkService.updateBatchById(imTalkList1); + List imTalkList2 = imTalkService.list(new LambdaQueryWrapper().eq(ImTalk::getUserId2, store.getId())); + for (ImTalk imTalk : imTalkList2) { + imTalk.setName2(store.getStoreName()); + imTalk.setFace2(store.getStoreLogo()); + } + imTalkService.updateBatchById(imTalkList2); + } +} diff --git a/consumer/src/main/java/cn/lili/listener/MemberMessageListener.java b/consumer/src/main/java/cn/lili/listener/MemberMessageListener.java index ab767f10c..2e384744d 100644 --- a/consumer/src/main/java/cn/lili/listener/MemberMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/MemberMessageListener.java @@ -1,10 +1,8 @@ package cn.lili.listener; import cn.hutool.json.JSONUtil; -import cn.lili.event.MemberLoginEvent; -import cn.lili.event.MemberPointChangeEvent; -import cn.lili.event.MemberRegisterEvent; -import cn.lili.event.MemberWithdrawalEvent; +import cn.lili.event.*; +import cn.lili.event.impl.ImTalkExecute; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.MemberSign; import cn.lili.modules.member.entity.dto.MemberPointMessage; @@ -58,6 +56,9 @@ public class MemberMessageListener implements RocketMQListener { @Autowired private List memberLoginEvents; + @Autowired + private List memberInfoChangeEvents; + @Override public void onMessage(MessageExt messageExt) { @@ -110,6 +111,20 @@ public class MemberMessageListener implements RocketMQListener { } } break; + //会员信息更改 + case MEMBER_INFO_EDIT: + for (MemberInfoChangeEvent memberInfoChangeEvent : memberInfoChangeEvents) { + try { + Member member = JSONUtil.toBean(new String(messageExt.getBody()), Member.class); + memberInfoChangeEvent.memberInfoChange(member); + } catch (Exception e) { + log.error("会员{},在{}业务中,提现事件执行异常", + new String(messageExt.getBody()), + memberInfoChangeEvent.getClass().getName(), + e); + } + } + break; //会员提现 case MEMBER_WITHDRAWAL: for (MemberWithdrawalEvent memberWithdrawalEvent : memberWithdrawalEvents) { diff --git a/consumer/src/main/java/cn/lili/listener/StoreMessageListener.java b/consumer/src/main/java/cn/lili/listener/StoreMessageListener.java new file mode 100644 index 000000000..1982c88e4 --- /dev/null +++ b/consumer/src/main/java/cn/lili/listener/StoreMessageListener.java @@ -0,0 +1,51 @@ +package cn.lili.listener; + +import cn.hutool.json.JSONUtil; +import cn.lili.event.MemberRegisterEvent; +import cn.lili.event.StoreSettingChangeEvent; +import cn.lili.modules.member.entity.dos.Member; +import cn.lili.modules.store.entity.dos.Store; +import cn.lili.rocketmq.tags.StoreTagsEnum; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.common.message.MessageExt; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 店铺消息 + * @author chc + * @since 2022/6/2114:46 + */ +@Component +@Slf4j +@RocketMQMessageListener(topic = "${lili.data.rocketmq.store-topic}", consumerGroup = "${lili.data.rocketmq.store-group}") +public class StoreMessageListener implements RocketMQListener { + @Autowired + private List storeSettingChangeEventList; + + @Override + public void onMessage(MessageExt messageExt) { + switch (StoreTagsEnum.valueOf(messageExt.getTags())){ + //修改店铺 + case EDIT_STORE_SETTING: + for (StoreSettingChangeEvent storeSettingChangeEvent : storeSettingChangeEventList) { + try { + Store store = JSONUtil.toBean(new String(messageExt.getBody()), Store.class); + storeSettingChangeEvent.StoreSettingChange(store); + } catch (Exception e) { + log.error("会员{},在{}业务中,状态修改事件执行异常", + new String(messageExt.getBody()), + storeSettingChangeEvent.getClass().getName(), + e); + } + } + break; + default: + break; + } + } +} diff --git a/consumer/src/main/resources/application.yml b/consumer/src/main/resources/application.yml index ae49a9b87..f3c3ed20f 100644 --- a/consumer/src/main/resources/application.yml +++ b/consumer/src/main/resources/application.yml @@ -260,6 +260,8 @@ lili: order-group: lili_order_group member-topic: lili_member_topic member-group: lili_member_group + store-topic: lili_store_topic + store-group: lili_store_group other-topic: lili_other_topic other-group: lili_other_group notice-topic: lili_notice_topic diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java index ec9f1ad39..9b6fa3fef 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java @@ -40,6 +40,7 @@ import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.entity.enums.StoreStatusEnum; import cn.lili.modules.store.service.StoreService; import cn.lili.mybatis.util.PageUtil; +import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.MemberTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -48,6 +49,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; 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.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -95,6 +97,9 @@ public class MemberServiceImpl extends ServiceImpl impleme @Autowired private RocketmqCustomProperties rocketmqCustomProperties; + @Autowired + private RocketMQTemplate rocketMQTemplate; + @Autowired private ApplicationEventPublisher applicationEventPublisher; /** @@ -301,6 +306,9 @@ public class MemberServiceImpl extends ServiceImpl impleme BeanUtil.copyProperties(memberEditDTO, member); //修改会员 this.updateById(member); + String destination = rocketmqCustomProperties.getMemberTopic() + ":" + MemberTagsEnum.MEMBER_INFO_EDIT.name(); + //发送订单变更mq消息 + rocketMQTemplate.asyncSend(destination, member, RocketmqSendCallbackBuilder.commonCallback()); return member; } diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java index 7c64f6862..efb479ad2 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java @@ -25,6 +25,8 @@ import cn.lili.modules.store.service.StoreDetailService; import cn.lili.modules.store.service.StoreService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.GoodsTagsEnum; +import cn.lili.rocketmq.tags.MemberTagsEnum; +import cn.lili.rocketmq.tags.StoreTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -99,6 +101,9 @@ public class StoreDetailServiceImpl extends ServiceImpl implements @Autowired private StoreDetailService storeDetailService; + @Autowired + private RocketmqCustomProperties rocketmqCustomProperties; + + @Autowired + private RocketMQTemplate rocketMQTemplate; + @Autowired private Cache cache; @@ -159,7 +169,11 @@ public class StoreServiceImpl extends ServiceImpl implements if (result) { storeDetailService.updateStoreGoodsInfo(store); } + String destination = rocketmqCustomProperties.getStoreTopic() + ":" + StoreTagsEnum.EDIT_STORE_SETTING.name(); + //发送订单变更mq消息 + rocketMQTemplate.asyncSend(destination, store, RocketmqSendCallbackBuilder.commonCallback()); } + cache.remove(CachePrefix.STORE.getPrefix() + storeEditDTO.getStoreId()); return store; } diff --git a/framework/src/main/java/cn/lili/rocketmq/tags/MemberTagsEnum.java b/framework/src/main/java/cn/lili/rocketmq/tags/MemberTagsEnum.java index a179f5a88..bda332b7e 100644 --- a/framework/src/main/java/cn/lili/rocketmq/tags/MemberTagsEnum.java +++ b/framework/src/main/java/cn/lili/rocketmq/tags/MemberTagsEnum.java @@ -23,6 +23,10 @@ public enum MemberTagsEnum { * 会员提现 */ MEMBER_WITHDRAWAL("会员提现"), + /** + * 会员信息更改 + */ + MEMBER_INFO_EDIT("会员信息更改"), /** * 会员积分变动 */ diff --git a/framework/src/main/java/cn/lili/rocketmq/tags/StoreTagsEnum.java b/framework/src/main/java/cn/lili/rocketmq/tags/StoreTagsEnum.java new file mode 100644 index 000000000..f18a74280 --- /dev/null +++ b/framework/src/main/java/cn/lili/rocketmq/tags/StoreTagsEnum.java @@ -0,0 +1,20 @@ +package cn.lili.rocketmq.tags; + +/** + * @author chc + * @since 2022/6/2114:46 + */ +public enum StoreTagsEnum { + + EDIT_STORE_SETTING("修改商家设置"); + + private final String description; + + StoreTagsEnum(String description) { + this.description = description; + } + + public String description() { + return description; + } +} diff --git a/im-api/src/main/java/cn/lili/controller/im/WebSocketServer.java b/im-api/src/main/java/cn/lili/controller/im/WebSocketServer.java index 48638619b..085d03d19 100644 --- a/im-api/src/main/java/cn/lili/controller/im/WebSocketServer.java +++ b/im-api/src/main/java/cn/lili/controller/im/WebSocketServer.java @@ -3,6 +3,7 @@ package cn.lili.controller.im; import cn.lili.cache.Cache; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; +import cn.lili.common.security.enums.UserEnums; import cn.lili.common.utils.SnowFlake; import cn.lili.modules.im.config.CustomSpringConfigurator; import cn.lili.modules.im.entity.dos.ImMessage; @@ -12,6 +13,8 @@ import cn.lili.modules.im.entity.vo.MessageVO; import cn.lili.modules.im.service.ImMessageService; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.service.MemberService; +import cn.lili.modules.store.entity.dos.Store; +import cn.lili.modules.store.service.StoreService; import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; @@ -44,6 +47,9 @@ public class WebSocketServer { @Autowired private MemberService memberService; + @Autowired + private StoreService storeService; + @Autowired private Cache cache; @@ -61,9 +67,16 @@ public class WebSocketServer { @OnOpen public void onOpen(@PathParam("accessToken") String accessToken, Session session) throws IOException { AuthUser authUser = UserContext.getAuthUser(accessToken); - Member member = memberService.getById(authUser.getId()); - sessionPools.put(authUser.getId(), session); - MessageVO messageVO = new MessageVO(MessageResultType.FRIENDS, member); + Object message = null; + if (UserEnums.STORE.equals(authUser.getRole())) { + message = storeService.getById(authUser.getStoreId()); + sessionPools.put(authUser.getStoreId(), session); + + } else if (UserEnums.MEMBER.equals(authUser.getRole())) { + message = memberService.getById(authUser.getId()); + sessionPools.put(authUser.getId(), session); + } + MessageVO messageVO = new MessageVO(MessageResultType.FRIENDS, message); sendMessage(authUser.getId(), messageVO); } diff --git a/im-api/src/main/resources/application.yml b/im-api/src/main/resources/application.yml index 09e554765..da5cd1a21 100644 --- a/im-api/src/main/resources/application.yml +++ b/im-api/src/main/resources/application.yml @@ -248,6 +248,8 @@ lili: order-group: lili_order_group member-topic: lili_member_topic member-group: lili_member_group + store-topic: lili_store_topic + store-group: lili_store_group other-topic: lili_other_topic other-group: lili_other_group notice-topic: lili_notice_topic diff --git a/manager-api/src/main/resources/application.yml b/manager-api/src/main/resources/application.yml index 397323ae0..fcb39e68c 100644 --- a/manager-api/src/main/resources/application.yml +++ b/manager-api/src/main/resources/application.yml @@ -248,6 +248,8 @@ lili: order-group: lili_order_group member-topic: lili_member_topic member-group: lili_member_group + store-topic: lili_store_topic + store-group: lili_store_group other-topic: lili_other_topic other-group: lili_other_group notice-topic: lili_notice_topic diff --git a/seller-api/src/main/resources/application.yml b/seller-api/src/main/resources/application.yml index 7ba48b0db..eb93aaa3e 100644 --- a/seller-api/src/main/resources/application.yml +++ b/seller-api/src/main/resources/application.yml @@ -241,6 +241,8 @@ lili: order-group: lili_order_group member-topic: lili_member_topic member-group: lili_member_group + store-topic: lili_store_topic + store-group: lili_store_group other-topic: lili_other_topic other-group: lili_other_group notice-topic: lili_notice_topic