Commit a7bbd26c authored by 王亮's avatar 王亮

log user tag(create session and save user)

parent 6cfd9390
...@@ -50,8 +50,11 @@ CREATE TABLE `xyqb_user`.`user_tag` ( ...@@ -50,8 +50,11 @@ CREATE TABLE `xyqb_user`.`user_tag` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT, `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`user_id` BIGINT(20) NOT NULL COMMENT '用户表id', `user_id` BIGINT(20) NOT NULL COMMENT '用户表id',
`registered_from` BIGINT(20) NULL COMMENT '来源(之前字段)', `registered_from` BIGINT(20) NULL COMMENT '来源(之前字段)',
`tenant_id` INT NOT NULL COMMENT '租户id',
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE `udx_user_id` (`user_id` ASC),
INDEX `idx_user_phone` (`registered_from` ASC),
PRIMARY KEY (`id`)); PRIMARY KEY (`id`));
......
...@@ -3,13 +3,19 @@ package cn.quantgroup.xyqb.config; ...@@ -3,13 +3,19 @@ package cn.quantgroup.xyqb.config;
import cn.quantgroup.xyqb.util.DefaultSequencer; import cn.quantgroup.xyqb.util.DefaultSequencer;
import cn.quantgroup.xyqb.util.IdentitySequencer; import cn.quantgroup.xyqb.util.IdentitySequencer;
import cn.quantgroup.xyqb.util.ServerUtils; import cn.quantgroup.xyqb.util.ServerUtils;
import com.sensorsdata.analytics.javasdk.ISensorsAnalytics;
import com.sensorsdata.analytics.javasdk.SensorsAnalytics;
import com.sensorsdata.analytics.javasdk.consumer.BatchConsumer;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import java.io.IOException;
/** /**
* Created by hechao on 2020/1/22. * Created by hechao on 2020/1/22.
*/ */
...@@ -38,4 +44,16 @@ public class AutoConfiguration { ...@@ -38,4 +44,16 @@ public class AutoConfiguration {
return new DefaultSequencer(workId, sequencerProperties); return new DefaultSequencer(workId, sequencerProperties);
} }
} }
@Value("${sc.url}")
private String dataUrl;
@Bean(destroyMethod = "shutdown")
public ISensorsAnalytics init() throws IOException {
// //本地日志模式(此模式会在指定路径生成相应的日志文件)
// return new SensorsAnalytics(new ConcurrentLoggingConsumer("/Users/hongzhi/scEvent/"));
//网络批量发送模式(此模式在容器关闭的时候,如果存在数据还没有发送完毕,就会丢失未发送的数据!!!)
return new SensorsAnalytics(new BatchConsumer(dataUrl));
}
} }
\ No newline at end of file
...@@ -800,6 +800,7 @@ public class UserController implements IBaseController { ...@@ -800,6 +800,7 @@ public class UserController implements IBaseController {
if (geetestLogId != null) { if (geetestLogId != null) {
geetestLogService.updateByUidGeetestLog(geetestLogId, user.getId()); geetestLogService.updateByUidGeetestLog(geetestLogId, user.getId());
} }
//更新session //更新session
return new JsonResult(sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal(),tenantId)); return new JsonResult(sessionService.createSession(user, loginProperties, LoginType.ACCOUNTPASSWORD.ordinal(),tenantId));
} }
......
package cn.quantgroup.xyqb.entity;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@EqualsAndHashCode(callSuper = true)
@Data
@Entity
@Table(name = "user_tag")
@Builder
public class UserTag extends BaseEntity implements Serializable {
@Column(name = "user_id")
private Long userId;
//第一次用户来源 channel_id
@Column(name = "registered_from")
private Long registeredFrom;
@Column(name = "tenant_id")
private Integer tenantId;
}
package cn.quantgroup.xyqb.event; package cn.quantgroup.xyqb.event;
import com.sensorsdata.analytics.javasdk.ISensorsAnalytics; import cn.quantgroup.xyqb.entity.UserTag;
import com.sensorsdata.analytics.javasdk.SensorsAnalytics; import lombok.Builder;
import com.sensorsdata.analytics.javasdk.consumer.BatchConsumer; import lombok.Data;
import org.springframework.beans.factory.annotation.Value; import lombok.Getter;
import org.springframework.context.annotation.Bean; import lombok.Setter;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import java.io.IOException;
/** /**
* @author :hongzhi * @author :hongzhi
*/ */
@Configuration
public class UserLoginEvent {
@Value("${sc.url}")
private String dataUrl;
@Bean(destroyMethod = "shutdown") @Getter
public ISensorsAnalytics init() throws IOException { @Setter
// //本地日志模式(此模式会在指定路径生成相应的日志文件) public class UserLoginEvent extends ApplicationEvent {
// return new SensorsAnalytics(new ConcurrentLoggingConsumer("/Users/hongzhi/scEvent/"));
//网络批量发送模式(此模式在容器关闭的时候,如果存在数据还没有发送完毕,就会丢失未发送的数据!!!) private UserTag userTag;
return new SensorsAnalytics(new BatchConsumer(dataUrl));
public UserLoginEvent(Object source) {
super(source);
} }
public UserLoginEvent(Object source, UserTag userTag) {
super(source);
this.userTag = userTag;
}
} }
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.repository.IUserTagRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* user_tag表,用来监听
*/
@Component
public class UserTagLoginEventListener implements ApplicationListener<UserLoginEvent> {
@Autowired
private IUserTagRepository userTagRepository;
/**
* 逻辑 每次登录发送UserLoginEvent,落user_tag表
* 如果没有就新增,如果有就更新
* @param userLoginEvent UserLoginEvent
*/
@Override
public void onApplicationEvent(UserLoginEvent userLoginEvent) {
if (userLoginEvent.getUserTag() != null) {
UserTag userTag = userLoginEvent.getUserTag();
UserTag preTag = userTagRepository.findByUserIdAndTenantId(userTag.getUserId(), userTag.getTenantId());
if (preTag == null) {
preTag = userTag;
}
preTag.setCreatedAt(LocalDateTime.now());
preTag.setUpdatedAt(LocalDateTime.now());
userTagRepository.save(preTag);
}
}
}
package cn.quantgroup.xyqb.repository;
import cn.quantgroup.xyqb.entity.UserTag;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface IUserTagRepository extends JpaRepository<UserTag, Long>, JpaSpecificationExecutor<UserTag> {
UserTag findByUserIdAndTenantId(Long userId,Integer tenantId);
void deleteByUserIdAndTenantId(Long userId,Integer tenantId);
}
...@@ -3,6 +3,8 @@ package cn.quantgroup.xyqb.service.session.impl; ...@@ -3,6 +3,8 @@ package cn.quantgroup.xyqb.service.session.impl;
import cn.quantgroup.xyqb.constant.enums.RecordType; import cn.quantgroup.xyqb.constant.enums.RecordType;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.event.UserLoginEvent;
import cn.quantgroup.xyqb.model.AuthBean; import cn.quantgroup.xyqb.model.AuthBean;
import cn.quantgroup.xyqb.model.LoginProperties; import cn.quantgroup.xyqb.model.LoginProperties;
import cn.quantgroup.xyqb.model.UserStatistics; import cn.quantgroup.xyqb.model.UserStatistics;
...@@ -17,9 +19,11 @@ import com.alibaba.fastjson.JSON; ...@@ -17,9 +19,11 @@ import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Caching; import org.springframework.cache.annotation.Caching;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -47,6 +51,9 @@ public class SessionServiceImpl implements ISessionService { ...@@ -47,6 +51,9 @@ public class SessionServiceImpl implements ISessionService {
@Value("${token.prefix}") @Value("${token.prefix}")
private String prefix; private String prefix;
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
/** /**
* 更新session * 更新session
...@@ -85,6 +92,10 @@ public class SessionServiceImpl implements ISessionService { ...@@ -85,6 +92,10 @@ public class SessionServiceImpl implements ISessionService {
// 添加登陆日志 // 添加登陆日志
loginRecordService.saveLoginRecord(user.getId(), RecordType.LOGINRECORD.getName(), loginType); loginRecordService.saveLoginRecord(user.getId(), RecordType.LOGINRECORD.getName(), loginType);
//更新user_tag记录
applicationEventPublisher.publishEvent(new UserLoginEvent(this, UserTag.builder()
.userId(user.getId()).registeredFrom(user.getRegisteredFrom()).tenantId(user.getTenantId()).build()));
return authBean; return authBean;
} }
......
...@@ -8,7 +8,9 @@ import cn.quantgroup.xyqb.controller.internal.user.resp.UserFullResp; ...@@ -8,7 +8,9 @@ import cn.quantgroup.xyqb.controller.internal.user.resp.UserFullResp;
import cn.quantgroup.xyqb.entity.Merchant; import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserInfoEntity; import cn.quantgroup.xyqb.entity.UserInfoEntity;
import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.event.PhoneNoUpdateEvent; import cn.quantgroup.xyqb.event.PhoneNoUpdateEvent;
import cn.quantgroup.xyqb.event.UserLoginEvent;
import cn.quantgroup.xyqb.exception.DataException; import cn.quantgroup.xyqb.exception.DataException;
import cn.quantgroup.xyqb.exception.UserNotExistException; import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.exception.UserRegisterLoginException; import cn.quantgroup.xyqb.exception.UserRegisterLoginException;
...@@ -86,6 +88,7 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -86,6 +88,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Autowired @Autowired
private ISessionService sessionService; private ISessionService sessionService;
@Resource @Resource
private ILockIpv4Service lockIpv4Service; private ILockIpv4Service lockIpv4Service;
...@@ -95,6 +98,9 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -95,6 +98,9 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Autowired @Autowired
private IUserAttachedRepository userAttachedRepository; private IUserAttachedRepository userAttachedRepository;
@Autowired
private IUserTagRepository userTagRepository;
@Autowired @Autowired
private IUserBtRegisterRepository userBtRegisterRepository; private IUserBtRegisterRepository userBtRegisterRepository;
...@@ -165,7 +171,11 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -165,7 +171,11 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Override @Override
@CacheEvict(value = "usercache", key = "'xyqbuser' + #user.phoneNo", cacheManager = "cacheManager") @CacheEvict(value = "usercache", key = "'xyqbuser' + #user.phoneNo", cacheManager = "cacheManager")
public User saveUser(User user) { public User saveUser(User user) {
return userRepository.saveAndFlush(user); user = userRepository.saveAndFlush(user);
//每次新增用户的时候,需要同步增长user_tag表
applicationEventPublisher.publishEvent(new UserLoginEvent(this, UserTag.builder()
.userId(user.getId()).registeredFrom(user.getRegisteredFrom()).tenantId(user.getTenantId()).build()));
return user;
} }
@Override @Override
...@@ -197,9 +207,9 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -197,9 +207,9 @@ public class UserServiceImpl implements IUserService, IBaseController {
if (StringUtils.isBlank(phone)) { if (StringUtils.isBlank(phone)) {
return null; return null;
} }
User user = userRepository.findByEncryptedPhoneNoAndTenantId(phone,tenantId); User user = userRepository.findByEncryptedPhoneNoAndTenantId(phone, tenantId);
if (user == null) { if (user == null) {
user = userRepository.findByPhoneNoAndTenantId(phone,tenantId); user = userRepository.findByPhoneNoAndTenantId(phone, tenantId);
} }
return user; return user;
} }
...@@ -207,12 +217,12 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -207,12 +217,12 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Override @Override
// @Cacheable(value = "usercache", key = "'xyqbuser' + #uuid", unless = "#result == null", cacheManager = "cacheManager") // @Cacheable(value = "usercache", key = "'xyqbuser' + #uuid", unless = "#result == null", cacheManager = "cacheManager")
public User findByUuidWithCache(String uuid, Integer tenantId) { public User findByUuidWithCache(String uuid, Integer tenantId) {
return userRepository.findByUuidAndTenantId(uuid,tenantId); return userRepository.findByUuidAndTenantId(uuid, tenantId);
} }
@Override @Override
public boolean exist(String phoneNo, Integer tenantId) { public boolean exist(String phoneNo, Integer tenantId) {
return userRepository.findByPhoneNoAndTenantId(phoneNo,tenantId) != null; return userRepository.findByPhoneNoAndTenantId(phoneNo, tenantId) != null;
} }
/** /**
...@@ -235,26 +245,26 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -235,26 +245,26 @@ public class UserServiceImpl implements IUserService, IBaseController {
user.setCipherPassword(BctyptPasswordUtil.BCryptWithSalt(password)); user.setCipherPassword(BctyptPasswordUtil.BCryptWithSalt(password));
user = userRepository.save(user); user = userRepository.save(user);
stringRedisTemplate.expire("usercache:xyqbuser" + phoneNo, 1L, TimeUnit.MILLISECONDS); stringRedisTemplate.expire("usercache:xyqbuser" + phoneNo, 1L, TimeUnit.MILLISECONDS);
sessionService.deleteByUserId(user.getId(),tenantId); sessionService.deleteByUserId(user.getId(), tenantId);
return BctyptPasswordUtil.BCryptCheckPw(password, user.getCipherPassword()); return BctyptPasswordUtil.BCryptCheckPw(password, user.getCipherPassword());
} }
@Override @Override
public List<User> findRegisterUserByTime(String beginTime, String endTime, Integer tenantId) { public List<User> findRegisterUserByTime(String beginTime, String endTime, Integer tenantId) {
return userRepository.findRegisterUserByTimeAndTenantId(beginTime, endTime,tenantId); return userRepository.findRegisterUserByTimeAndTenantId(beginTime, endTime, tenantId);
} }
@Override @Override
@CacheEvict(value = "usercache", key = "'xyqbuser' + #phoneNo", cacheManager = "cacheManager") @CacheEvict(value = "usercache", key = "'xyqbuser' + #phoneNo", cacheManager = "cacheManager")
public int forbiddenUser(Boolean enable, String phoneNo, Integer tenantId) { public int forbiddenUser(Boolean enable, String phoneNo, Integer tenantId) {
return userRepository.forbiddenUserAndTenantId(enable, phoneNo,tenantId); return userRepository.forbiddenUserAndTenantId(enable, phoneNo, tenantId);
} }
@Override @Override
public List<UserInfo> findUserInfosByPhones(List<String> phones, Integer tenantId) { public List<UserInfo> findUserInfosByPhones(List<String> phones, Integer tenantId) {
List<User> users = findByPhones(phones,tenantId); List<User> users = findByPhones(phones, tenantId);
if (CollectionUtils.isEmpty(phones)) { if (CollectionUtils.isEmpty(phones)) {
return Collections.emptyList(); return Collections.emptyList();
} }
...@@ -284,13 +294,13 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -284,13 +294,13 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public User modifyPhoneNo(String oldPhoneNo, String newPhoneNo, Integer tenantId) { public User modifyPhoneNo(String oldPhoneNo, String newPhoneNo, Integer tenantId) {
//1. 判断新手机号是否存在 //1. 判断新手机号是否存在
User newPhoneUser = userRepository.findByPhoneNoAndTenantId(newPhoneNo,tenantId); User newPhoneUser = userRepository.findByPhoneNoAndTenantId(newPhoneNo, tenantId);
UserInfoEntity newPhoneUserDetail = userInfoRepository.findByPhoneNoAndTenantId(newPhoneNo, tenantId); UserInfoEntity newPhoneUserDetail = userInfoRepository.findByPhoneNoAndTenantId(newPhoneNo, tenantId);
if (Objects.nonNull(newPhoneUser) || Objects.nonNull(newPhoneUserDetail)) { if (Objects.nonNull(newPhoneUser) || Objects.nonNull(newPhoneUserDetail)) {
//新手机号已存在 //新手机号已存在
throw new DataException("新手机号存在, 用户修改手机号后新手机号注册了。"); throw new DataException("新手机号存在, 用户修改手机号后新手机号注册了。");
} }
User oldPhoneUser = userRepository.findByPhoneNoAndTenantId(oldPhoneNo,tenantId); User oldPhoneUser = userRepository.findByPhoneNoAndTenantId(oldPhoneNo, tenantId);
if (Objects.isNull(oldPhoneUser)) { if (Objects.isNull(oldPhoneUser)) {
//这不是扯了.旧手机号不存在. //这不是扯了.旧手机号不存在.
throw new DataException("旧手机号不存在, 可能已经修改成功了。"); throw new DataException("旧手机号不存在, 可能已经修改成功了。");
...@@ -327,9 +337,9 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -327,9 +337,9 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Override @Override
@RedisLock(prefix = "lock:login:fast:", key = "#this[8]") @RedisLock(prefix = "lock:login:fast:", key = "#this[8]")
public JsonResult loginFast(Long channelId, String appChannel, Long createdFrom, Long btRegisterChannelId, public JsonResult loginFast(Long channelId, String appChannel, Long createdFrom, Long btRegisterChannelId,
String dimension, String clickId, HttpServletRequest request, Merchant merchant, String phoneNo, Integer tenantId, Long geetestLogId,String appId) { String dimension, String clickId, HttpServletRequest request, Merchant merchant, String phoneNo, Integer tenantId, Long geetestLogId, String appId) {
Boolean register = false; Boolean register = false;
User user = findByPhoneWithCache(phoneNo,tenantId); User user = findByPhoneWithCache(phoneNo, tenantId);
if (user != null && !user.getEnable()) { if (user != null && !user.getEnable()) {
log.info("用户不存在,或者已经注销,phoneNo:{}", phoneNo); log.info("用户不存在,或者已经注销,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult(USER_ERROR_OR_ENABLE_ERROR, null); return JsonResult.buildErrorStateResult(USER_ERROR_OR_ENABLE_ERROR, null);
...@@ -344,7 +354,7 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -344,7 +354,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
MqUtils.sendRegisterMessageForGdt(phoneNo, clickId); MqUtils.sendRegisterMessageForGdt(phoneNo, clickId);
register = true; register = true;
} }
if (!wechatRelateUserIfNecessary(user, request,appId,tenantId)) { if (!wechatRelateUserIfNecessary(user, request, appId, tenantId)) {
return JsonResult.buildErrorStateResult("登录时微信关联失败", null); return JsonResult.buildErrorStateResult("登录时微信关联失败", null);
} }
...@@ -391,7 +401,7 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -391,7 +401,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
geetestLogService.updateByUidGeetestLog(geetestLogId, user.getId()); geetestLogService.updateByUidGeetestLog(geetestLogId, user.getId());
} }
LoginProperties loginProperties = new LoginProperties("", 3, channelId, createdFrom, appChannel, merchant.getId(), merchant.getName(), tenantId); LoginProperties loginProperties = new LoginProperties("", 3, channelId, createdFrom, appChannel, merchant.getId(), merchant.getName(), tenantId);
AuthBean session = sessionService.createSession(user, loginProperties, LoginType.VERIFICATIONCODE.ordinal(),tenantId); AuthBean session = sessionService.createSession(user, loginProperties, LoginType.VERIFICATIONCODE.ordinal(), tenantId);
session.setRegister(register); session.setRegister(register);
lockIpv4Service.unLockPhone(phoneNo); lockIpv4Service.unLockPhone(phoneNo);
return new JsonResult(session); return new JsonResult(session);
...@@ -404,7 +414,7 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -404,7 +414,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
* @param request - 当前请求 * @param request - 当前请求
* @return true - 继续登录,false - 微信关联失败,重新登录 * @return true - 继续登录,false - 微信关联失败,重新登录
*/ */
private boolean wechatRelateUserIfNecessary(User user, HttpServletRequest request,String appId ,Integer tenantId) { private boolean wechatRelateUserIfNecessary(User user, HttpServletRequest request, String appId, Integer tenantId) {
Objects.requireNonNull(request, "无效请求"); Objects.requireNonNull(request, "无效请求");
String clientIp = IpUtil.getRemoteIP(request); String clientIp = IpUtil.getRemoteIP(request);
Set<String> paramKeys = request.getParameterMap().keySet(); Set<String> paramKeys = request.getParameterMap().keySet();
...@@ -418,7 +428,7 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -418,7 +428,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
Long userId = user.getId(); Long userId = user.getId();
String phoneNo = user.getPhoneNo(); String phoneNo = user.getPhoneNo();
try { try {
int rows = wechatService.relateUser(userId, phoneNo, request.getParameter(Constants.WECHAT_OPEN_ID),appId,tenantId); int rows = wechatService.relateUser(userId, phoneNo, request.getParameter(Constants.WECHAT_OPEN_ID), appId, tenantId);
return rows > 0; return rows > 0;
} catch (Exception e) { } catch (Exception e) {
log.error("微信关联失败,user:{}, request-Header:{}", user, JSON.toJSONString(getRequestHeaderMap(request)), e); log.error("微信关联失败,user:{}, request-Header:{}", user, JSON.toJSONString(getRequestHeaderMap(request)), e);
...@@ -434,7 +444,7 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -434,7 +444,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
*/ */
@Override @Override
public UserFullResp findUserFullSearchByUserId(Long userId, Integer tenantId) { public UserFullResp findUserFullSearchByUserId(Long userId, Integer tenantId) {
User user = userRepository.findByIdAndTenantId(userId,tenantId); User user = userRepository.findByIdAndTenantId(userId, tenantId);
UserInfoEntity userDetail = userInfoRepository.findByUserIdAndTenantId(userId, tenantId); UserInfoEntity userDetail = userInfoRepository.findByUserIdAndTenantId(userId, tenantId);
UserFullResp userFullResp = UserFullResp.builder().userId(userId).build(); UserFullResp userFullResp = UserFullResp.builder().userId(userId).build();
...@@ -462,22 +472,22 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -462,22 +472,22 @@ public class UserServiceImpl implements IUserService, IBaseController {
List<Long> collect = vals.stream() List<Long> collect = vals.stream()
.map(Long::valueOf) .map(Long::valueOf)
.collect(Collectors.toList()); .collect(Collectors.toList());
users = userRepository.findByIdInAndTenantId(collect,tenantId); users = userRepository.findByIdInAndTenantId(collect, tenantId);
} else { //不是1 就是 uuids } else { //不是1 就是 uuids
users = userRepository.findByUuidInAndTenantId(vals,tenantId); users = userRepository.findByUuidInAndTenantId(vals, tenantId);
} }
return users; return users;
} }
@Override @Override
public void logout(String token,Integer tenantId) { public void logout(String token, Integer tenantId) {
sessionService.deleteSession(token,tenantId); sessionService.deleteSession(token, tenantId);
} }
@Override @Override
public void kdspLogout(Long userId, LoginProperties loginProperties, Integer tenantId) { public void kdspLogout(Long userId, LoginProperties loginProperties, Integer tenantId) {
sessionService.kdspDeleteSession(userId, loginProperties,tenantId); sessionService.kdspDeleteSession(userId, loginProperties, tenantId);
} }
...@@ -485,7 +495,7 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -485,7 +495,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Override @Override
public void deregister(Long userId, Integer tenantId) { public void deregister(Long userId, Integer tenantId) {
User user = userRepository.findByIdAndTenantId(userId,tenantId); User user = userRepository.findByIdAndTenantId(userId, tenantId);
if (Objects.isNull(user)) { if (Objects.isNull(user)) {
throw new UserRegisterLoginException("用户不存在"); throw new UserRegisterLoginException("用户不存在");
...@@ -494,7 +504,9 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -494,7 +504,9 @@ public class UserServiceImpl implements IUserService, IBaseController {
/* 保存用户销户记录 */ /* 保存用户销户记录 */
userDeregisterService.save(user); userDeregisterService.save(user);
/* 删除用户 */ /* 删除用户 */
userRepository.deleteByIdAndTenantId(userId,tenantId); userRepository.deleteByIdAndTenantId(userId, tenantId);
/* 删除用户tag*/
userTagRepository.deleteByUserIdAndTenantId(userId, tenantId);
/* 删除用户附加信息 */ /* 删除用户附加信息 */
userAttachedRepository.deleteByUserId(userId); userAttachedRepository.deleteByUserId(userId);
...@@ -502,24 +514,24 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -502,24 +514,24 @@ public class UserServiceImpl implements IUserService, IBaseController {
userBtRegisterRepository.deleteByUserId(userId); userBtRegisterRepository.deleteByUserId(userId);
/* 清空session */ /* 清空session */
sessionService.deleteByUserId(user.getId(),tenantId); sessionService.deleteByUserId(user.getId(), tenantId);
/* 清空缓存 */ /* 清空缓存 */
sessionService.deleteUserCatch(user,tenantId); sessionService.deleteUserCatch(user, tenantId);
/* 禁用微信 Or 删除?*/ /* 禁用微信 Or 删除?*/
// wechatService.forbiddenXyqbAndWuxiUserByUserId(user.getId()); // wechatService.forbiddenXyqbAndWuxiUserByUserId(user.getId());
weChatUserRepository.deleteByUserIdAndTenantId(userId,tenantId); weChatUserRepository.deleteByUserIdAndTenantId(userId, tenantId);
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public User submitModifyPhone(String prevPhoneNo, String curPhoneNo, Integer tenantId) { public User submitModifyPhone(String prevPhoneNo, String curPhoneNo, Integer tenantId) {
//1. 判断新手机号是否存在 //1. 判断新手机号是否存在
User newPhoneUser = findByPhoneInDb(curPhoneNo,tenantId); User newPhoneUser = findByPhoneInDb(curPhoneNo, tenantId);
if (Objects.nonNull(newPhoneUser)) { if (Objects.nonNull(newPhoneUser)) {
//新手机号已存在 //新手机号已存在
throw new DataException("新手机号存在, 用户修改手机号后新手机号注册了。"); throw new DataException("新手机号存在, 用户修改手机号后新手机号注册了。");
} }
User oldPhoneUser = findByPhoneInDb(prevPhoneNo,tenantId); User oldPhoneUser = findByPhoneInDb(prevPhoneNo, tenantId);
if (Objects.isNull(oldPhoneUser)) { if (Objects.isNull(oldPhoneUser)) {
throw new DataException("旧手机号不存在, 可能已经修改成功了。"); throw new DataException("旧手机号不存在, 可能已经修改成功了。");
} }
...@@ -541,7 +553,7 @@ public class UserServiceImpl implements IUserService, IBaseController { ...@@ -541,7 +553,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
* @param user * @param user
* @param loginFrom * @param loginFrom
*/ */
public void channelUserSignContract(User user, Long loginFrom,Integer tenantId) { public void channelUserSignContract(User user, Long loginFrom, Integer tenantId) {
if (Objects.isNull(user) || StringUtils.isBlank(channelTemplate)) { if (Objects.isNull(user) || StringUtils.isBlank(channelTemplate)) {
return; return;
} }
......
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