Commit c1430d93 authored by xiaoguang.xu's avatar xiaoguang.xu

增加修改手机号接口.

parent 01111283
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.service.user.IUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class CacheEvictPhoneNoUpdateEventListener implements ApplicationListener<PhoneNoUpdateEvent> {
@Autowired
private IUserService userService;
@Override
public void onApplicationEvent(PhoneNoUpdateEvent event) {
String oldPhoneNo = event.getOldPhoneNo();
User user = event.getUser();
userService.userCacheEvict(user.getUuid(), oldPhoneNo);
//todo session 处理
}
}
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.User;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;
/**
* @author 徐小光
*/
@Getter
public class PhoneNoUpdateEvent extends ApplicationEvent {
private User user;
private String oldPhoneNo;
/**
* Create a new ApplicationEvent.
*
* @param source the object on which the event initially occurred (never {@code null})
*/
public PhoneNoUpdateEvent(Object source) {
super(source);
}
public PhoneNoUpdateEvent(Object source, User user, String oldPhoneNo) {
super(source);
this.user = user;
this.oldPhoneNo = oldPhoneNo;
}
}
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* 记录手机号变更情况
*
* @author 徐小光
*/
@Slf4j
@Component
public class RecordPhoneNoUpdateEventListener implements ApplicationListener<PhoneNoUpdateEvent> {
@Override
public void onApplicationEvent(PhoneNoUpdateEvent event) {
String oldPhoneNo = event.getOldPhoneNo();
User user = event.getUser();
//todo 表纪录
log.info("userId:{},¬旧手机号:{},新手机号:{}", user.getId(), oldPhoneNo, user.getPhoneNo());
}
}
......@@ -16,14 +16,13 @@ import javax.persistence.PersistenceException;
/**
* userDetail 更新时, 保存 hashMapping 数据
*/
@Component
@Slf4j
@Component
public class UserDetailHashEventListener implements ApplicationListener<UserDetailUpdateEvent> {
@Autowired
private IUserHashMappingRepository userHashMappingRepository;
@Override
public void onApplicationEvent(UserDetailUpdateEvent event) {
UserDetail userDetail = event.getUserDetail();
......@@ -33,27 +32,19 @@ public class UserDetailHashEventListener implements ApplicationListener<UserDeta
//如果不存在, 我先保存一下
if (userHashMapping == null) {
userHashMapping = new UserHashMapping(userDetail.getUserId());
String phoneNo = userDetail.getPhoneNo();
userHashMapping.setPhoneNoMd5(MD5Util.build(phoneNo));
}
String idNoMd5 = userHashMapping.getIdNoMd5();
//可能存在手机号修改. 搞一下.
String phoneNo = userDetail.getPhoneNo();
userHashMapping.setPhoneNoMd5(MD5Util.build(phoneNo));
//可能存在身份证号修改. 搞一下.
String idNo = userDetail.getIdNo().toUpperCase();
String idNoMd5New = MD5Util.build(idNo);
//新旧相同, 直接跳过
if (StringUtils.equals(idNoMd5, idNoMd5New)) {
return;
}
userHashMapping.setIdNoMd5(idNoMd5New);
userHashMapping.setIdNoMd5(MD5Util.build(idNo));
try {
userHashMappingRepository.save(userHashMapping);
} catch (PersistenceException e){
} catch (PersistenceException e) {
log.error("保存userHashMapping重复, 无需再保存, userId:{}", userDetail.getUserId());
}
}
}
......@@ -52,4 +52,19 @@ public interface IUserService {
List<UserInfo> findUserInfosByPhones(List<String> phones);
User findByMd5(Integer type, String md5Value);
/**
* 修改手机号码.
* @param oldPhoneNo 旧手机号
* @param newPhoneNo 新手机号
* @return 返回用户信息
*/
User modifyPhoneNo(String oldPhoneNo, String newPhoneNo);
/**
* 删除这个用户相关缓存
* @param uuid 根据 uuid
* @param phoneNo 根据手机号
*/
void userCacheEvict(String uuid, String phoneNo);
}
......@@ -4,6 +4,7 @@ import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.entity.UserHashMapping;
import cn.quantgroup.xyqb.event.PhoneNoUpdateEvent;
import cn.quantgroup.xyqb.model.UserInfo;
import cn.quantgroup.xyqb.repository.IUserHashMappingRepository;
import cn.quantgroup.xyqb.repository.IUserRepository;
......@@ -19,14 +20,18 @@ import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.sql.Timestamp;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
......@@ -47,6 +52,9 @@ public class UserServiceImpl implements IUserService {
@Autowired
private IUserDetailService userDetailService;
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
@Override
@Cacheable(value = "usercache", key = "'xyqbuser' + #phone", unless = "#result == null", cacheManager = "cacheManager")
......@@ -139,7 +147,6 @@ public class UserServiceImpl implements IUserService {
user = userRepository.save(user);
stringRedisTemplate.expire("usercache:xyqbuser" + phoneNo, 1L, TimeUnit.MILLISECONDS);
return PasswordUtil.validatePassword(password, user.getPassword());
}
@Override
......@@ -200,4 +207,43 @@ public class UserServiceImpl implements IUserService {
return userRepository.findById(userId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public User modifyPhoneNo(String oldPhoneNo, String newPhoneNo) {
//1. 判断新手机号是否存在
User newPhoneUser = userRepository.findByPhoneNo(newPhoneNo);
if (Objects.isNull(newPhoneUser)) {
//新手机号已存在
return null;
}
User oldPhoneUser = userRepository.findByPhoneNo(oldPhoneNo);
if (Objects.isNull(oldPhoneUser)) {
//这不是扯了.旧手机号也不存在.
return null;
}
//2. 执行修改
//2.1 修改 user 表
oldPhoneUser.setPhoneNo(newPhoneNo);
User user = userRepository.saveAndFlush(oldPhoneUser);
//2.2 修改 user_detail 表
UserDetail oldPhoneUserDetail = userDetailService.findByPhoneNo(oldPhoneNo);
oldPhoneUserDetail.setPhoneNo(newPhoneNo);
userDetailService.saveUserDetail(oldPhoneUserDetail);
//3. 发送事件
PhoneNoUpdateEvent phoneNoUpdateEvent = new PhoneNoUpdateEvent(this, user, oldPhoneNo);
applicationEventPublisher.publishEvent(phoneNoUpdateEvent);
return oldPhoneUser;
}
@Override
@Caching(evict = {
@CacheEvict(value = "usercache", key = "'xyqbuser' + #phoneNo", cacheManager = "cacheManager"),
@CacheEvict(value = "usercache", key = "'xyqbuser' + #uuid", cacheManager = "cacheManager")
})
public void userCacheEvict(String uuid, String phoneNo) {
log.info("清理用户缓存成功,uuid:{},phoneNo:{}", uuid, phoneNo);
}
}
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