package com.rongyichuang.auth.service;
|
|
import com.rongyichuang.auth.entity.WxLoginRecord;
|
import com.rongyichuang.auth.repository.WxLoginRecordRepository;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.time.LocalDateTime;
|
import java.util.List;
|
import java.util.Optional;
|
|
/**
|
* 微信登录记录服务
|
*/
|
@Service
|
public class WxLoginRecordService {
|
|
@Autowired
|
private WxLoginRecordRepository wxLoginRecordRepository;
|
|
/**
|
* 创建微信登录记录
|
*/
|
@Transactional
|
public WxLoginRecord createLoginRecord(String wxOpenid, String wxUnionid, Long userId,
|
String loginIp, String deviceInfo, String sessionKey,
|
Boolean phoneAuthorized) {
|
WxLoginRecord record = new WxLoginRecord();
|
record.setWxOpenid(wxOpenid);
|
record.setWxUnionid(wxUnionid);
|
record.setUserId(userId);
|
record.setLoginTime(LocalDateTime.now());
|
record.setLoginIp(loginIp);
|
record.setDeviceInfo(deviceInfo);
|
record.setSessionKey(sessionKey);
|
record.setPhoneAuthorized(phoneAuthorized != null ? phoneAuthorized : false);
|
|
if (phoneAuthorized != null && phoneAuthorized) {
|
record.setPhoneAuthTime(LocalDateTime.now());
|
}
|
|
return wxLoginRecordRepository.save(record);
|
}
|
|
/**
|
* 根据openid查找最近的登录记录
|
*/
|
public Optional<WxLoginRecord> findLatestByOpenid(String wxOpenid) {
|
List<WxLoginRecord> records = wxLoginRecordRepository.findByWxOpenidOrderByLoginTimeDesc(wxOpenid);
|
return records.isEmpty() ? Optional.empty() : Optional.of(records.get(0));
|
}
|
|
/**
|
* 根据unionid查找最近的登录记录
|
*/
|
public Optional<WxLoginRecord> findLatestByUnionid(String wxUnionid) {
|
return wxLoginRecordRepository.findFirstByWxUnionidOrderByLoginTimeDesc(wxUnionid);
|
}
|
|
/**
|
* 根据用户ID查找登录记录
|
*/
|
public List<WxLoginRecord> findByUserId(Long userId) {
|
return wxLoginRecordRepository.findByUserIdOrderByLoginTimeDesc(userId);
|
}
|
|
/**
|
* 更新手机号授权状态
|
*/
|
@Transactional
|
public void updatePhoneAuthorization(Long recordId, Boolean phoneAuthorized) {
|
Optional<WxLoginRecord> recordOpt = wxLoginRecordRepository.findById(recordId);
|
if (recordOpt.isPresent()) {
|
WxLoginRecord record = recordOpt.get();
|
record.setPhoneAuthorized(phoneAuthorized);
|
if (phoneAuthorized) {
|
record.setPhoneAuthTime(LocalDateTime.now());
|
}
|
wxLoginRecordRepository.save(record);
|
}
|
}
|
|
/**
|
* 查找已授权手机号的登录记录
|
*/
|
public List<WxLoginRecord> findPhoneAuthorizedRecords() {
|
return wxLoginRecordRepository.findByPhoneAuthorizedTrueOrderByPhoneAuthTimeDesc();
|
}
|
}
|