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 findLatestByOpenid(String wxOpenid) { List records = wxLoginRecordRepository.findByWxOpenidOrderByLoginTimeDesc(wxOpenid); return records.isEmpty() ? Optional.empty() : Optional.of(records.get(0)); } /** * 根据unionid查找最近的登录记录 */ public Optional findLatestByUnionid(String wxUnionid) { return wxLoginRecordRepository.findFirstByWxUnionidOrderByLoginTimeDesc(wxUnionid); } /** * 根据用户ID查找登录记录 */ public List findByUserId(Long userId) { return wxLoginRecordRepository.findByUserIdOrderByLoginTimeDesc(userId); } /** * 更新手机号授权状态 */ @Transactional public void updatePhoneAuthorization(Long recordId, Boolean phoneAuthorized) { Optional 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 findPhoneAuthorizedRecords() { return wxLoginRecordRepository.findByPhoneAuthorizedTrueOrderByPhoneAuthTimeDesc(); } }