Commit d272bb74 authored by killer's avatar killer

销户

parent 58dbc884
...@@ -12,7 +12,6 @@ import static org.springframework.transaction.annotation.Propagation.MANDATORY; ...@@ -12,7 +12,6 @@ import static org.springframework.transaction.annotation.Propagation.MANDATORY;
/** /**
* Created by 11 on 2017/1/18. * Created by 11 on 2017/1/18.
* modify by djh 20200527 http://confluence.quantgroup.cn/pages/viewpage.action?pageId=30657427 * modify by djh 20200527 http://confluence.quantgroup.cn/pages/viewpage.action?pageId=30657427
*
*/ */
public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Long> { public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Long> {
WechatUserInfo findByOpenIdAndAppName(String openId, String appName); WechatUserInfo findByOpenIdAndAppName(String openId, String appName);
...@@ -37,6 +36,17 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon ...@@ -37,6 +36,17 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon
@Query(value = "update wechat_userinfo set user_id=null,phone_no='*' where user_id=?1 and app_name=?2", nativeQuery = true) @Query(value = "update wechat_userinfo set user_id=null,phone_no='*' where user_id=?1 and app_name=?2", nativeQuery = true)
int dissociateByUserIdAndAppName(Long userId, String appName); int dissociateByUserIdAndAppName(Long userId, String appName);
/**
* 解除商城用户与小程序和公众号关联关系
*
* @param userId 用户id
* @return 结果
*/
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update wechat_userinfo set user_id=null,phone_no='*' where user_id=?1 and app_name in ('xyqb', 'wuxi')", nativeQuery = true)
int forbiddenXyqbAndWuxiUserByUserId(Long userId);
/** /**
* 关联用户 * 关联用户
* *
......
...@@ -549,6 +549,6 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -549,6 +549,6 @@ public class UserServiceImpl implements IUserService, IBaseController {
/* 清空缓存 */ /* 清空缓存 */
sessionService.deleteUserCatch(user); sessionService.deleteUserCatch(user);
/* 禁用微信 */ /* 禁用微信 */
wechatService.forbiddenUserWeChat(user.getId()); wechatService.forbiddenXyqbAndWuxiUserByUserId(user.getId());
} }
} }
...@@ -35,7 +35,16 @@ public interface IWechatService { ...@@ -35,7 +35,16 @@ public interface IWechatService {
* @return * @return
*/ */
WechatUserInfo queryByUserId(Long userId); WechatUserInfo queryByUserId(Long userId);
WechatUserInfo queryByUserId(Long userId,String appName);
WechatUserInfo queryByUserId(Long userId, String appName);
int forbiddenUserWeChat(Long userId); int forbiddenUserWeChat(Long userId);
/**
* 通过userId解除商城用户与小程序和公众号关联关系
*
* @param userId 用户id
* @return 禁用结果
*/
int forbiddenXyqbAndWuxiUserByUserId(Long userId);
} }
...@@ -117,20 +117,20 @@ public class WechatServiceImpl implements IWechatService { ...@@ -117,20 +117,20 @@ public class WechatServiceImpl implements IWechatService {
@Override @Override
public WechatUserInfo findWechatUserInfoFromDb(String openId) { public WechatUserInfo findWechatUserInfoFromDb(String openId) {
return weChatUserRepository.findByOpenIdAndAppName(openId,"xyqb"); return weChatUserRepository.findByOpenIdAndAppName(openId, "xyqb");
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public WechatUserInfo saveWechatUserInfo(WechatUserInfo userInfo) { public WechatUserInfo saveWechatUserInfo(WechatUserInfo userInfo) {
log.info("微信信息保存开始:{}",JSON.toJSONString(userInfo)); log.info("微信信息保存开始:{}", JSON.toJSONString(userInfo));
if (Objects.isNull(userInfo) || Objects.isNull(userInfo.getOpenId())) { if (Objects.isNull(userInfo) || Objects.isNull(userInfo.getOpenId())) {
return null; return null;
} }
long count = weChatUserRepository.countByOpenIdAndAppName(userInfo.getOpenId(),"xyqb"); long count = weChatUserRepository.countByOpenIdAndAppName(userInfo.getOpenId(), "xyqb");
if (count > 0) { if (count > 0) {
//注意,这里会抛异常(5000/total),WeChatController中已捕获处理 //注意,这里会抛异常(5000/total),WeChatController中已捕获处理
return weChatUserRepository.findByOpenIdAndAppName(userInfo.getOpenId(),"xyqb"); return weChatUserRepository.findByOpenIdAndAppName(userInfo.getOpenId(), "xyqb");
} }
if (null == userInfo.getPhoneNo()) { if (null == userInfo.getPhoneNo()) {
userInfo.setPhoneNo(""); userInfo.setPhoneNo("");
...@@ -151,9 +151,9 @@ public class WechatServiceImpl implements IWechatService { ...@@ -151,9 +151,9 @@ public class WechatServiceImpl implements IWechatService {
userInfo = userInfo.convertEmoji(); userInfo = userInfo.convertEmoji();
WechatUserInfo wechatUserInfo = weChatUserRepository.save(userInfo); WechatUserInfo wechatUserInfo = weChatUserRepository.save(userInfo);
WechatEventMsg wechatEventMsg = WechatEventMsg.builder() WechatEventMsg wechatEventMsg = WechatEventMsg.builder()
.userId(wechatUserInfo.getUserId()) .userId(wechatUserInfo.getUserId())
.openId(wechatUserInfo.getOpenId()) .openId(wechatUserInfo.getOpenId())
.build(); .build();
applicationEventPublisher.publishEvent(new WechatBindEvent(this, wechatEventMsg)); applicationEventPublisher.publishEvent(new WechatBindEvent(this, wechatEventMsg));
return wechatUserInfo; return wechatUserInfo;
} }
...@@ -166,27 +166,27 @@ public class WechatServiceImpl implements IWechatService { ...@@ -166,27 +166,27 @@ public class WechatServiceImpl implements IWechatService {
return 0; return 0;
} }
// Old - 当前openId的WechatUserInfo // Old - 当前openId的WechatUserInfo
WechatUserInfo wechatUserInfo = weChatUserRepository.findByOpenIdAndAppName(openId,"xyqb"); WechatUserInfo wechatUserInfo = weChatUserRepository.findByOpenIdAndAppName(openId, "xyqb");
if (Objects.nonNull(wechatUserInfo) && Objects.equals(userId, wechatUserInfo.getUserId()) && Objects.equals(openId, wechatUserInfo.getOpenId())) { if (Objects.nonNull(wechatUserInfo) && Objects.equals(userId, wechatUserInfo.getUserId()) && Objects.equals(openId, wechatUserInfo.getOpenId())) {
log.info("微信关联成功:重复关联:跳过:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId); log.info("微信关联成功:重复关联:跳过:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId);
return 1; return 1;
} }
// 强制解除关联 // 强制解除关联
int dissociate = weChatUserRepository.dissociateUser(openId, userId,"xyqb"); int dissociate = weChatUserRepository.dissociateUser(openId, userId, "xyqb");
if (dissociate < 1) { if (dissociate < 1) {
log.error("微信关联失败:解绑条数<1:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId); log.error("微信关联失败:解绑条数<1:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId);
throw new WechatRelateUserException("微信关联失败"); throw new WechatRelateUserException("微信关联失败");
} }
int relate = weChatUserRepository.relateUser(userId, Optional.ofNullable(phoneNo).orElse(""), openId,"xyqb"); int relate = weChatUserRepository.relateUser(userId, Optional.ofNullable(phoneNo).orElse(""), openId, "xyqb");
if (relate < 1) { if (relate < 1) {
log.error("微信关联失败:绑定条数<1:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId); log.error("微信关联失败:绑定条数<1:[service]:userId:{},phoneNo:{},openId:{}", userId, phoneNo, openId);
throw new WechatRelateUserException("微信关联失败"); throw new WechatRelateUserException("微信关联失败");
} }
WechatEventMsg wechatEventMsg = WechatEventMsg.builder() WechatEventMsg wechatEventMsg = WechatEventMsg.builder()
.userId(userId) .userId(userId)
.openId(openId) .openId(openId)
.build(); .build();
applicationEventPublisher.publishEvent(new WechatBindEvent(this,wechatEventMsg)); applicationEventPublisher.publishEvent(new WechatBindEvent(this, wechatEventMsg));
// Todo : 如果当前openId已关联其他用户,则解绑成功后要注销其登录session -- 考虑后暂时不执行,影响太大 // Todo : 如果当前openId已关联其他用户,则解绑成功后要注销其登录session -- 考虑后暂时不执行,影响太大
log.info("微信关联成功:[service]:userId:{},phoneNo:{},openId:{},dissociate:{},relate:{},Old-WechatUserInfo:{}", userId, phoneNo, openId, dissociate, relate, wechatUserInfo); log.info("微信关联成功:[service]:userId:{},phoneNo:{},openId:{},dissociate:{},relate:{},Old-WechatUserInfo:{}", userId, phoneNo, openId, dissociate, relate, wechatUserInfo);
return relate; return relate;
...@@ -197,7 +197,7 @@ public class WechatServiceImpl implements IWechatService { ...@@ -197,7 +197,7 @@ public class WechatServiceImpl implements IWechatService {
if (!ValidationUtil.validatePhoneNo(phoneNo)) { if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return null; return null;
} }
return weChatUserRepository.findByPhoneNoAndAppName(phoneNo,"xyqb"); return weChatUserRepository.findByPhoneNoAndAppName(phoneNo, "xyqb");
} }
private String getTokenFromWechatServer(String code) { private String getTokenFromWechatServer(String code) {
...@@ -222,30 +222,33 @@ public class WechatServiceImpl implements IWechatService { ...@@ -222,30 +222,33 @@ public class WechatServiceImpl implements IWechatService {
* @param userId - 用户标识 * @param userId - 用户标识
* @return * @return
* @TODO 2021-10-14 修改 findByUserIdAndAppName 为 findFirstByUserIdAndAppNameOrderByCreatedAtDesc, 原因是存在有多个数据情况 * @TODO 2021-10-14 修改 findByUserIdAndAppName 为 findFirstByUserIdAndAppNameOrderByCreatedAtDesc, 原因是存在有多个数据情况
*
*/ */
@Override @Override
public WechatUserInfo queryByUserId(Long userId) { public WechatUserInfo queryByUserId(Long userId) {
return weChatUserRepository.findFirstByUserIdAndAppNameOrderByCreatedAtDesc(userId,"xyqb"); return weChatUserRepository.findFirstByUserIdAndAppNameOrderByCreatedAtDesc(userId, "xyqb");
} }
/** /**
*
* @param userId * @param userId
* @param appName * @param appName
* @return * @return
* @TODO 2021-10-14 修改 findByUserIdAndAppName 为 findFirstByUserIdAndAppNameOrderByCreatedAtDesc, 原因是存在有多个数据情况 * @TODO 2021-10-14 修改 findByUserIdAndAppName 为 findFirstByUserIdAndAppNameOrderByCreatedAtDesc, 原因是存在有多个数据情况
*/ */
public WechatUserInfo queryByUserId(Long userId,String appName){ public WechatUserInfo queryByUserId(Long userId, String appName) {
if(appName==null||"".equals(appName.trim())){ if (appName == null || "".equals(appName.trim())) {
appName = "xyqb"; appName = "xyqb";
} }
return weChatUserRepository.findFirstByUserIdAndAppNameOrderByCreatedAtDesc(userId,appName); return weChatUserRepository.findFirstByUserIdAndAppNameOrderByCreatedAtDesc(userId, appName);
} }
@Override @Override
public int forbiddenUserWeChat(Long userId) { public int forbiddenUserWeChat(Long userId) {
return weChatUserRepository.dissociateByUserIdAndAppName(userId,"xyqb"); return weChatUserRepository.dissociateByUserIdAndAppName(userId, "xyqb");
}
@Override
public int forbiddenXyqbAndWuxiUserByUserId(Long userId) {
return weChatUserRepository.forbiddenXyqbAndWuxiUserByUserId(userId);
} }
} }
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment