From 97c416cd7ed1a5c3257c50210dabba759e741510 Mon Sep 17 00:00:00 2001 From: yeungchihang <842328916@qq.com> Date: Mon, 17 Oct 2022 11:23:43 +0800 Subject: [PATCH] =?UTF-8?q?v1.1=20=E9=A6=96=E6=AC=A1=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E5=8F=91=E5=B0=8F=E7=A7=98=E4=B9=A6=20=E6=8F=90=E9=86=92?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sharding/config/ShardingJdbcConfig.java | 1 + .../accompany/business/config/JmsConfig.java | 20 ++-- ...oginVersionUpdateMsgUserLoginListener.java | 59 +++++++++++ ...oginVersionUpdateMsgUserLoginListener.java | 100 ------------------ .../service/MyUserDetailsServiceImpl.java | 44 ++++---- .../accompany/oauth2/config/JmsConfig.java | 12 +-- 6 files changed, 95 insertions(+), 141 deletions(-) create mode 100644 accompany-business/accompany-business-web/src/main/java/com/accompany/business/mq/FirstLoginVersionUpdateMsgUserLoginListener.java delete mode 100644 accompany-business/accompany-business-web/src/main/java/com/accompany/business/mq/PasswordLoginVersionUpdateMsgUserLoginListener.java diff --git a/accompany-business/accompany-business-sharding/src/main/java/com/accompany/sharding/config/ShardingJdbcConfig.java b/accompany-business/accompany-business-sharding/src/main/java/com/accompany/sharding/config/ShardingJdbcConfig.java index d3ec8d81c..e20a5c5d0 100644 --- a/accompany-business/accompany-business-sharding/src/main/java/com/accompany/sharding/config/ShardingJdbcConfig.java +++ b/accompany-business/accompany-business-sharding/src/main/java/com/accompany/sharding/config/ShardingJdbcConfig.java @@ -95,6 +95,7 @@ public class ShardingJdbcConfig { private Map createDataSourceMap() { Map result = new HashMap<>(4); result.put("ds", dataSource); + result.put("ds-1", dataSource); return result; } diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/config/JmsConfig.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/config/JmsConfig.java index 9e0b51f02..140a1b599 100644 --- a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/config/JmsConfig.java +++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/config/JmsConfig.java @@ -68,7 +68,7 @@ public class JmsConfig { // 活动用户登录队列 public final static String ACTIVITY_USER_LOGIN_QUEUE = "activity_user_login_queue"; // 密码登入新版本小秘书消息队列 - public final static String PASSWORD_LOGIN_VERSION_MSG_QUEUE = "password_login_version_msg_queue"; + public final static String FIRST_LOGIN_VERSION_MSG_QUEUE = "first_login_version_msg_queue"; // 用户首登消息队列 public final static String USER_FIRST_LOGIN_MSG_QUEUE = "user_first_login_msg_queue"; @@ -121,7 +121,7 @@ public class JmsConfig { public Queue activityUserLoginQueue() { return new ActiveMQQueue(ACTIVITY_USER_LOGIN_QUEUE); } @Bean - public Queue passwordLoginVersionMsgQueue() { return new ActiveMQQueue(PASSWORD_LOGIN_VERSION_MSG_QUEUE); } + public Queue firstLoginVersionMsgQueue() { return new ActiveMQQueue(FIRST_LOGIN_VERSION_MSG_QUEUE); } @Bean public Queue userFirstLoginMsgQueue() { return new ActiveMQQueue(USER_FIRST_LOGIN_MSG_QUEUE); } @@ -242,10 +242,10 @@ public class JmsConfig { return template; } - @Bean("passwordLoginVersionMsgJmsTemplate") - public JmsTemplate passwordLoginVersionMsgJmsTemplate(@Qualifier("myConnectionFactory")ConnectionFactory activeMQConnectionFactory) { + @Bean("firstLoginVersionMsgJmsTemplate") + public JmsTemplate firstLoginVersionMsgJmsTemplate(@Qualifier("myConnectionFactory")ConnectionFactory activeMQConnectionFactory) { JmsTemplate template = new JmsTemplate(activeMQConnectionFactory); - template.setDefaultDestination(passwordLoginVersionMsgQueue()); + template.setDefaultDestination(firstLoginVersionMsgQueue()); return template; } @@ -373,7 +373,6 @@ public class JmsConfig { return factory; } - @Bean("newyearJmsContainer") public DefaultJmsListenerContainerFactory newyearJmsContainer() { DefaultJmsListenerContainerFactory factory @@ -387,11 +386,6 @@ public class JmsConfig { return factory; } - - - - - @Bean("cleanMusicContainer") public DefaultJmsListenerContainerFactory cleanMusicContainer() { DefaultJmsListenerContainerFactory factory @@ -469,8 +463,8 @@ public class JmsConfig { return factory; } - @Bean("passwordLoginVersionMsgContainer") - public DefaultJmsListenerContainerFactory passwordLoginVersionMsgContainer() { + @Bean("firstLoginVersionMsgContainer") + public DefaultJmsListenerContainerFactory firstLoginVersionMsgContainer() { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory()); diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/mq/FirstLoginVersionUpdateMsgUserLoginListener.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/mq/FirstLoginVersionUpdateMsgUserLoginListener.java new file mode 100644 index 000000000..4c7fa49c7 --- /dev/null +++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/mq/FirstLoginVersionUpdateMsgUserLoginListener.java @@ -0,0 +1,59 @@ +package com.accompany.business.mq; + + +import com.accompany.business.param.neteasepush.NeteaseSendMsgParam; +import com.accompany.business.service.SendSysMsgService; +import com.accompany.common.config.SystemConfig; +import com.accompany.common.constant.Attach; +import com.accompany.common.constant.Constant; +import com.accompany.core.vo.UserLoginMessageVo; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jms.annotation.JmsListener; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class FirstLoginVersionUpdateMsgUserLoginListener { + + @Autowired + private SendSysMsgService sendSysMsgService; + + @JmsListener(destination = "first_login_version_msg_queue",containerFactory = "firstLoginVersionMsgContainer") + public void onMessage(UserLoginMessageVo userLogin) { + log.info("首次登录版本小秘书登录消息, msg: {} ", JSON.toJSONString(userLogin)); + try { + sendFirstLoginVersionUpdateMsgToUser(userLogin.getUid(), userLogin.getAppVersion()); + } catch (Exception e) { + log.error("首次登录版本小秘书登录消息失败", e); + } + } + + /** + * 发送小秘书通知给用户 + */ + private void sendFirstLoginVersionUpdateMsgToUser(Long uid, String currLoginVersion) { + Attach attach = new Attach(); + attach.setFirst(Constant.DefineProtocol.CUSTOM_MESS_HEAD_SECRETARY); + attach.setSecond(Constant.DefineProtocol.CUSTOM_MESS_SUB_SECRETARY_INTRACTION); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("title", "歡迎來到Peko邂逅你的專屬聲音!為了方便您的使用,可前往【我的】-【設置】去設置登錄密碼喔>>"); + jsonObject.put("msg", "歡迎來到Peko邂逅你的專屬聲音!為了方便您的使用,可前往【我的】-【設置】去設置登錄密碼喔>>"); + jsonObject.put("routerType", Constant.SecretarySkipType.SET_PASSWORD); + attach.setData(jsonObject); + + NeteaseSendMsgParam neteaseSendMsgParam = new NeteaseSendMsgParam(); + neteaseSendMsgParam.setType(Constant.DefineProtocol.CUSTOM_MESS_DEFINE); + neteaseSendMsgParam.setFrom(SystemConfig.secretaryUid); + + neteaseSendMsgParam.setOpe(0); + neteaseSendMsgParam.setTo(uid.toString()); + neteaseSendMsgParam.setAttach(attach); + sendSysMsgService.sendMsg(neteaseSendMsgParam); + } + +} + diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/mq/PasswordLoginVersionUpdateMsgUserLoginListener.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/mq/PasswordLoginVersionUpdateMsgUserLoginListener.java deleted file mode 100644 index 1fe59aca9..000000000 --- a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/mq/PasswordLoginVersionUpdateMsgUserLoginListener.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.accompany.business.mq; - - -import com.accompany.business.param.neteasepush.NeteaseSendMsgParam; -import com.accompany.business.service.SendSysMsgService; -import com.accompany.common.config.SystemConfig; -import com.accompany.common.constant.Attach; -import com.accompany.common.constant.Constant; -import com.accompany.common.redis.RedisKey; -import com.accompany.common.utils.AppVersionUtil; -import com.accompany.common.utils.StringUtils; -import com.accompany.core.service.common.JedisService; -import com.accompany.core.vo.UserLoginMessageVo; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.jms.annotation.JmsListener; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class PasswordLoginVersionUpdateMsgUserLoginListener { - - @Autowired - private JedisService jedisService; - @Autowired - private SendSysMsgService sendSysMsgService; - - private final static String PASSWORD_LOGIN_VERSION = "1.0.0"; - - @JmsListener(destination = "password_login_version_msg_queue",containerFactory = "passwordLoginVersionMsgContainer") - public void onMessage(UserLoginMessageVo userLogin) { - log.info("密码登录版本小秘书登录消息, msg: {} ", JSON.toJSONString(userLogin)); - try { - sendPasswordLoginVersionUpdateMsgToUser(userLogin.getUid(), userLogin.getLastLoginVersion(), userLogin.getAppVersion()); - } catch (Exception e) { - log.error("密码登录版本小秘书登录消息失败", e); - } - } - - /** - * 发送小秘书通知给用户 - */ - private void sendPasswordLoginVersionUpdateMsgToUser(Long uid, String lastAppVersion, String currLoginVersion) { - // 判断用户是否已经发送了消息 - String flag = jedisService.hget(RedisKey.password_login_version_update_msg.getKey(), uid.toString()); - log.info("密码登录版本小秘书登录消息, uid {} flag {}", uid, flag); - if (StringUtils.isNotBlank(flag)) { - return; - } - boolean userNeedSendMsgFlag = getUserNeedSendMsgFlag(uid, lastAppVersion, currLoginVersion); - log.info("密码登录版本小秘书登录消息, uid {} userNeedSendMsgFlag {}", uid, userNeedSendMsgFlag); - if (!userNeedSendMsgFlag) { - return; - } - // 发送小秘书 - sendSysMsg(uid); - // 将标识存入缓存 - jedisService.hset(RedisKey.password_login_version_update_msg.getKey(), uid.toString(), Boolean.TRUE.toString()); - } - - private boolean getUserNeedSendMsgFlag(Long uid, String lastAppVersion, String currLoginVersion) { - log.info("密码登录版本小秘书登录消息, uid {} lastAppVersion {} currLoginVersion {}", uid, lastAppVersion, currLoginVersion); - if (null == currLoginVersion || AppVersionUtil.compareVersion(currLoginVersion, PASSWORD_LOGIN_VERSION) < 0) { - return false; - } else { - if (null == lastAppVersion) { - return true; - } - // 仅当最后一次登入的版本小与特定版本时需要发送 - if (AppVersionUtil.compareVersion(lastAppVersion, PASSWORD_LOGIN_VERSION) < 0) { - return true; - } - } - return false; - } - - private void sendSysMsg(Long uid) { - Attach attach = new Attach(); - attach.setFirst(Constant.DefineProtocol.CUSTOM_MESS_HEAD_SECRETARY); - attach.setSecond(Constant.DefineProtocol.CUSTOM_MESS_SUB_SECRETARY_INTRACTION); - - JSONObject jsonObject = new JSONObject(); - jsonObject.put("title", "支持密碼登錄啦~現在可以立即前往設置密碼啦 立即前往>>"); - jsonObject.put("msg", "支持密碼登錄啦~現在可以立即前往設置密碼啦 立即前往>>"); - jsonObject.put("routerType", Constant.SecretarySkipType.SET_PASSWORD); - attach.setData(jsonObject); - - NeteaseSendMsgParam neteaseSendMsgParam = new NeteaseSendMsgParam(); - neteaseSendMsgParam.setType(Constant.DefineProtocol.CUSTOM_MESS_DEFINE); - neteaseSendMsgParam.setFrom(SystemConfig.secretaryUid); - - neteaseSendMsgParam.setOpe(0); - neteaseSendMsgParam.setTo(uid.toString()); - neteaseSendMsgParam.setAttach(attach); - sendSysMsgService.sendMsg(neteaseSendMsgParam); - } -} - diff --git a/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsServiceImpl.java b/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsServiceImpl.java index 19522fc36..e784707a7 100644 --- a/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsServiceImpl.java +++ b/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsServiceImpl.java @@ -5,7 +5,6 @@ import com.accompany.common.constant.Constant; import com.accompany.common.device.DeviceInfo; import com.accompany.common.redis.RedisKey; import com.accompany.common.status.BusiStatus; -import com.accompany.common.utils.AppVersionUtil; import com.accompany.common.utils.CommonUtil; import com.accompany.core.dto.ShuMeiDto; import com.accompany.core.dto.YiDunDto; @@ -79,10 +78,8 @@ public class MyUserDetailsServiceImpl implements MyUserDetailsService { @Autowired private PhoneBlackService phoneBlackService; @Autowired - @Qualifier( value = "passwordLoginVersionMsgJmsTemplate") - private JmsTemplate passwordLoginVersionMsgJmsTemplate; - - private final static String PASSWORD_LOGIN_VERSION = "1.0.0"; + @Qualifier( value = "firstLoginVersionMsgJmsTemplate") + private JmsTemplate firstLoginVersionMsgJmsTemplate; /** * 不允许登录的用户账号类型 @@ -131,7 +128,6 @@ public class MyUserDetailsServiceImpl implements MyUserDetailsService { if(account == null) { throw new CustomOAuth2Exception(CustomOAuth2Exception.USER_NOT_EXISTED, OAuthStatus.USER_NOT_EXISTED.getReasonPhrase()); - } return new AccountDetails(account); } @@ -175,8 +171,10 @@ public class MyUserDetailsServiceImpl implements MyUserDetailsService { accountManageService.checkAccountCancel(uid); - //AccountLoginRecord latestLoginRecord = loginRecordService.getLatestLoginRecord(uid); - //sendPasswordVersionMsgToUser(uid, latestLoginRecord == null ? null : latestLoginRecord.getAppVersion(), deviceInfo.getAppVersion()); + AccountLoginRecord latestLoginRecord = loginRecordService.getLatestLoginRecord(uid); + if (latestLoginRecord == null){ + sendFirstLoginEvent(uid, deviceInfo.getAppVersion()); + } //更新account信息 String newToken = accountService.refreshAndGetNetEaseToken(account); @@ -196,11 +194,11 @@ public class MyUserDetailsServiceImpl implements MyUserDetailsService { account.setLastLoginTime(date); accountService.updateById(account); //更新用户正在使用的app字段 - this.userAppService.updateCurrentApp(uid, deviceInfo.getApp()); + userAppService.updateCurrentApp(uid, deviceInfo.getApp()); //将用户信息登记 - AccountLoginRecord accountLoginRecord = this.buildAccountLoginRecord(ip, account, loginType.getValue(), deviceInfo, openId); - this.loginRecordService.addAccountLoginRecordAsync(accountLoginRecord); + AccountLoginRecord accountLoginRecord = buildAccountLoginRecord(ip, account, loginType.getValue(), deviceInfo, openId); + loginRecordService.addAccountLoginRecordAsync(accountLoginRecord); jedisService.hset(RedisKey.acc_latest_login.getKey(), uid.toString(), gson.toJson(accountLoginRecord)); } @@ -269,8 +267,12 @@ public class MyUserDetailsServiceImpl implements MyUserDetailsService { //YiDunDto yiDunDto = accountManageService.buildYiDunDto(oAuthConfig, ipAddress, yiDunToken, null,null, deviceInfo); //ShuMeiDto shuMeiDto = accountManageService.buildShuMeiDto(oAuthConfig, deviceInfo, phone, ipAddress, phone, shuMeiDeviceId,"register"); account = accountManageService.register(ipAddress, deviceInfo, Constant.AccountType.phone_account, null, null, phone); - //AccountLoginRecord latestLoginRecord = loginRecordService.getLatestLoginRecord(account.getUid()); - //sendPasswordVersionMsgToUser(account.getUid(), latestLoginRecord == null ? null : latestLoginRecord.getAppVersion(), deviceInfo.getAppVersion()); + + AccountLoginRecord latestLoginRecord = loginRecordService.getLatestLoginRecord(account.getUid()); + if (latestLoginRecord == null){ + sendFirstLoginEvent(account.getUid(), deviceInfo.getAppVersion()); + } + return new AccountDetails(account); } } @@ -307,15 +309,13 @@ public class MyUserDetailsServiceImpl implements MyUserDetailsService { } @Async - public void sendPasswordVersionMsgToUser(Long uid, String lastLoginVersion, String currLoginVersion) { - if (lastLoginVersion == null || AppVersionUtil.compareVersion(lastLoginVersion, PASSWORD_LOGIN_VERSION) < 0) { - UserLoginMessageVo userLogin = new UserLoginMessageVo(); - userLogin.setUid(uid); - userLogin.setLastLoginVersion(lastLoginVersion); - userLogin.setAppVersion(currLoginVersion); - log.info("登录时发送用户队列 userLogin {}", JSON.toJSONString(userLogin)); - passwordLoginVersionMsgJmsTemplate.convertAndSend("password_login_version_msg_queue", userLogin); - } + public void sendFirstLoginEvent(Long uid, String currLoginVersion) { + UserLoginMessageVo userLogin = new UserLoginMessageVo(); + userLogin.setUid(uid); + userLogin.setLastLoginVersion(null); + userLogin.setAppVersion(currLoginVersion); + log.info("首次登录时发送用户队列 userLogin {}", JSON.toJSONString(userLogin)); + firstLoginVersionMsgJmsTemplate.convertAndSend("first_login_version_msg_queue", userLogin); } } diff --git a/accompany-oauth2/accompany-oauth2-web/src/main/java/com/accompany/oauth2/config/JmsConfig.java b/accompany-oauth2/accompany-oauth2-web/src/main/java/com/accompany/oauth2/config/JmsConfig.java index a690d7c88..86bde47e1 100644 --- a/accompany-oauth2/accompany-oauth2-web/src/main/java/com/accompany/oauth2/config/JmsConfig.java +++ b/accompany-oauth2/accompany-oauth2-web/src/main/java/com/accompany/oauth2/config/JmsConfig.java @@ -49,7 +49,7 @@ public class JmsConfig { // 活动用户登录队列 public final static String ACTIVITY_USER_LOGIN_QUEUE = "activity_user_login_queue"; // 密码登入新版本小秘书消息队列 - public final static String PASSWORD_LOGIN_VERSION_MSG_QUEUE = "password_login_version_msg_queue"; + public final static String FIRST_LOGIN_VERSION_MSG_QUEUE = "first_login_version_msg_queue"; // 用户首登消息队列 public final static String USER_FIRST_LOGIN_MSG_QUEUE = "user_first_login_msg_queue"; public final static String AD_PLATFORM_USER_LOGIN_MSG_QUEUE = "ad_platform_user_login_msg_queue"; @@ -138,15 +138,15 @@ public class JmsConfig { /** - * 密码登入版本小秘书通知队列 + * 首次登录版本小秘书通知队列 */ @Bean - public Queue passwordLoginVersionMsgQueue() { return new ActiveMQQueue(PASSWORD_LOGIN_VERSION_MSG_QUEUE); } + public Queue firstLoginVersionMsgQueue() { return new ActiveMQQueue(FIRST_LOGIN_VERSION_MSG_QUEUE); } - @Bean("passwordLoginVersionMsgJmsTemplate") - public JmsTemplate passwordLoginVersionMsgJmsTemplate(@Qualifier("myConnectionFactory")ConnectionFactory activeMQConnectionFactory) { + @Bean("firstLoginVersionMsgJmsTemplate") + public JmsTemplate firstLoginVersionMsgJmsTemplate(@Qualifier("myConnectionFactory")ConnectionFactory activeMQConnectionFactory) { JmsTemplate template = new JmsTemplate(activeMQConnectionFactory); - template.setDefaultDestination(passwordLoginVersionMsgQueue()); + template.setDefaultDestination(firstLoginVersionMsgQueue()); return template; }