lrj
2 天以前 9f8395fab13ca4b230a0f7d62636e209745c91d4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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();
    }
}