提交修改
This commit is contained in:
parent
640ef6ab5e
commit
bba1fde867
@ -31,6 +31,12 @@ import java.util.Date;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* App用户登录控制器
|
||||
* 提供用户登录、匿名登录、用户信息更新等功能
|
||||
*
|
||||
* @author heyu
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/app/user")
|
||||
@ -58,59 +64,107 @@ public class AppUserLoginController {
|
||||
private VvActivityDao vvActivityDao;
|
||||
|
||||
|
||||
/**
|
||||
* 微信用户登录
|
||||
* 通过微信授权码进行登录,如果用户不存在则自动注册
|
||||
*
|
||||
* @param request 登录请求参数,包含微信授权code和token
|
||||
* @return 登录结果,包含买家信息和token
|
||||
*/
|
||||
// http://localhost:8888/app/user/login
|
||||
@RequestMapping("/login")
|
||||
@Describe("微信用户登录")
|
||||
public R login(@RequestBody AppUserLoginRequest request) {
|
||||
log.info("[微信用户登录] 开始处理登录请求, code={}", request.getCode());
|
||||
|
||||
// 通过微信授权码获取openId和sessionKey
|
||||
WeiChatLoginDTO weiChatLoginDTO = weChatUtils.getOpenId(request.getCode());
|
||||
if (weiChatLoginDTO == null) {
|
||||
log.warn("[微信用户登录] 微信授权码失效, code={}", request.getCode());
|
||||
return R.error("code 失效");
|
||||
}
|
||||
|
||||
log.info("[微信用户登录] 获取微信用户信息成功, openid={}", weiChatLoginDTO.getOpenid());
|
||||
|
||||
// 根据openId查询用户信息
|
||||
VvBuyerEntity target = vvBuyerDao.selectVvBuyerOpenId(weiChatLoginDTO.getOpenid());
|
||||
if (target == null) {
|
||||
log.info("[微信用户登录] 新用户注册, openid={}", weiChatLoginDTO.getOpenid());
|
||||
target = new VvBuyerEntity();
|
||||
target.setOpenid(weiChatLoginDTO.getOpenid());
|
||||
target.setIsTest(0);
|
||||
target.setCreateTimestamp(System.currentTimeMillis());
|
||||
} else {
|
||||
log.info("[微信用户登录] 老用户登录, buyerId={}, openid={}", target.getId(), weiChatLoginDTO.getOpenid());
|
||||
}
|
||||
|
||||
// 更新sessionKey
|
||||
target.setSessionKey(weiChatLoginDTO.getSessionKey());
|
||||
vvBuyerDao.insertOrUpdateVvBuyer(target);
|
||||
// 默认24 小时
|
||||
BuyerDTO buyerDTO = buildBuyerLoginInfoCacheRedisDB(target, RedisUtils.DEFAULT_EXPIRE, null,1);
|
||||
insertPromoter(request.getToken(),buyerDTO);
|
||||
|
||||
// 构建买家信息并缓存到Redis,默认24小时
|
||||
BuyerDTO buyerDTO = buildBuyerLoginInfoCacheRedisDB(target, RedisUtils.DEFAULT_EXPIRE, null, 1);
|
||||
log.info("[微信用户登录] 用户登录成功, buyerId={}, token={}", buyerDTO.getBuyerId(), buyerDTO.getToken());
|
||||
|
||||
// 处理推广关系
|
||||
insertPromoter(request.getToken(), buyerDTO);
|
||||
|
||||
return R.ok().put("buyer", buyerDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 匿名用户登录
|
||||
* 允许用户在不进行微信授权的情况下使用部分功能
|
||||
* 使用设备ID进行身份识别,token有效期较短(30分钟)
|
||||
*
|
||||
* @param request 匿名登录请求参数,包含设备ID和token
|
||||
* @return 登录结果,包含买家信息和token
|
||||
*/
|
||||
// http://localhost:8888/app/user/anonymous/login
|
||||
@RequestMapping("/anonymous/login")
|
||||
@Describe("匿名用户登录")
|
||||
public R anonymousLogin(@RequestBody VvAnonymousUserLoginRequest request) {
|
||||
log.info("[匿名用户登录] 开始处理匿名登录请求, deviceId={}, token={}", request.getDeviceId(), request.getToken());
|
||||
|
||||
// 解密并验证设备ID
|
||||
String deviceId = request.getDeviceId();
|
||||
String value = AesUtil.decrypt(deviceId, ApiConstants.AnonymousUserLogin_aes_password);
|
||||
if (StringUtils.isBlank(value) || !value.startsWith(ApiConstants.AnonymousUserLogin_pre)) {
|
||||
log.info("AnonymousUserLoginAesPassword anonymous value:{}", JSON.toJSONString(request));
|
||||
log.warn("[匿名用户登录] 设备号验证失败, deviceId={}, decryptValue={}", deviceId, value);
|
||||
return R.error("设备号不对");
|
||||
}
|
||||
|
||||
log.info("[匿名用户登录] 设备号验证通过, decryptValue={}", value);
|
||||
|
||||
BuyerDTO buyerDTO = null;
|
||||
// 尝试从Redis获取已登录的用户信息
|
||||
String activityInfoStr = redisUtils.get(request.getToken());
|
||||
if (StringUtils.isNotEmpty(activityInfoStr)) {
|
||||
buyerDTO = JSONObject.parseObject(activityInfoStr, BuyerDTO.class);
|
||||
// 真实用户登录
|
||||
if(buyerDTO.getBuyerId() > 0 ){
|
||||
log.info("[匿名用户登录] 从token中获取到用户信息, buyerId={}", buyerDTO.getBuyerId());
|
||||
|
||||
// 如果是真实用户(buyerId > 0),重新构建登录信息
|
||||
if (buyerDTO.getBuyerId() > 0) {
|
||||
VvBuyerEntity target = vvBuyerDao.selectVvBuyerById(buyerDTO.getBuyerId());
|
||||
buyerDTO = buildBuyerLoginInfoCacheRedisDB(target, RedisUtils.DEFAULT_EXPIRE, null,1);
|
||||
buyerDTO = buildBuyerLoginInfoCacheRedisDB(target, RedisUtils.DEFAULT_EXPIRE, null, 1);
|
||||
log.info("[匿名用户登录] 真实用户登录, buyerId={}", buyerDTO.getBuyerId());
|
||||
}
|
||||
}
|
||||
|
||||
// 假登陆
|
||||
if(buyerDTO == null){
|
||||
// 如果没有用户信息,创建匿名用户(buyerId=0)
|
||||
if (buyerDTO == null) {
|
||||
log.info("[匿名用户登录] 创建匿名用户, deviceId={}", deviceId);
|
||||
VvBuyerEntity target = new VvBuyerEntity();
|
||||
target.setId(0L);
|
||||
target.setIsTest(0);
|
||||
buyerDTO = buildBuyerLoginInfoCacheRedisDB(target, RedisUtils.thirty_minute, request.getDeviceId(), 0);
|
||||
}
|
||||
|
||||
insertPromoter(request.getToken(),buyerDTO);
|
||||
log.info("[匿名用户登录] 登录成功, buyerId={}, loginType={}, token={}",
|
||||
buyerDTO.getBuyerId(), buyerDTO.getLoginType(), buyerDTO.getToken());
|
||||
|
||||
// 处理推广关系
|
||||
insertPromoter(request.getToken(), buyerDTO);
|
||||
|
||||
return R.ok().put("buyer", buyerDTO);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user