派生自 projectDept/qhighschool

EricsHu
2023-11-26 1da190e7f267bcd3501884f3aeaac7476850fec7
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package com.qxueyou.scc.user.service.impl;
 
import java.util.Date;
 
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
 
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qxueyou.scc.base.service.impl.CommonAppService;
import com.qxueyou.scc.base.util.CollectionUtils;
import com.qxueyou.scc.base.util.TraceUtils;
import com.qxueyou.scc.user.model.UserOperate;
import com.qxueyou.scc.user.service.IUserOperateService;
 
/**
 * 用户操作服务
 * @author ody.yuan
 *
 */
@Service
public class UserOperateService extends CommonAppService implements IUserOperateService {
    
    ObjectMapper mapper = new ObjectMapper();
    
    
    /**
     * 插入或者更新user_operate,更新用户登录状态
     * 
     * @param userId
     * @param userName
     * @param account
     * @param ip
     * @param userAgent
     * @return
     */
    public boolean saveUserOperate(String userId,String userName,String account, String ip,String version,String platform) {
        
        boolean firstFlag = false;
        String hql = "from UserOperate where deleteFlag is false and userId = ? ";
        // 查询用户信息
        UserOperate objOperate = this.findUnique(hql, CollectionUtils.newList(userId), UserOperate.class);
 
        if (null == objOperate) {
            
            objOperate =initNewUserOperate(userName, userId, ip, account, version, platform);
            firstFlag = true;
            
        } else {
            
            initUpdateUserOperate(objOperate, version, platform);
        }
 
        // 修改信息
        Date now = new Date(System.currentTimeMillis());
        objOperate.setUpdateTime(now);
        objOperate.setLastLoginTime(now);
        objOperate.setLastLoginTIp(ip);
        
        // 执行update
        this.save(objOperate);
 
        return firstFlag;
    }
    
    private UserOperate initNewUserOperate(String userName,String userId,String ip, String account, String version, String platform ){
        
        UserOperate objOperate = new UserOperate();
        Date now = new Date(System.currentTimeMillis());
        
        TraceUtils.setCreateActiveTrace(objOperate);
        objOperate.setFirstLoginTime(now);
        objOperate.setFirstLoginIp(ip);
        objOperate.setUserId(userId);
        objOperate.setUserName(userName);
        objOperate.setAccount(account);
        
        // 次数
        objOperate.setLoginDays(1);
        objOperate.setLoginTimes(1);
        objOperate.setSumLoginDays(1);
        objOperate.setSumLoginTimes(1);
        
        //新增平台版本
        objOperate.setAppVersion(StringUtils.isNotBlank(version) ? version : null );
        if(StringUtils.isNotBlank(platform)){
            objOperate.setPlatform(platform);
            objOperate.setAndroidLoginTimes( "Android".equalsIgnoreCase(platform) ? 1 : 0 );
            objOperate.setIosLoginTimes("iOS".equalsIgnoreCase(platform) ? 1 : 0);
        }
        
        return objOperate ;
    }
    
    private void initUpdateUserOperate(UserOperate objOperate, String version, String platform){
        
        Date now = new Date(System.currentTimeMillis());
        
        objOperate.setSumLoginTimes(objOperate.getSumLoginTimes() + 1);
        initUserOperateLoinInfo(objOperate, now);
        
        //修改最后一次平台版本
        objOperate.setAppVersion(StringUtils.isNotBlank(version) ? version : objOperate.getAppVersion() );
        if(StringUtils.isNotBlank(platform)){
            objOperate.setPlatform(platform);
            objOperate.setAndroidLoginTimes( "Android".equalsIgnoreCase(platform) ? ( 1 + objOperate.getAndroidLoginTimes()) : objOperate.getAndroidLoginTimes() );
            objOperate.setIosLoginTimes("iOS".equalsIgnoreCase(platform) ? ( 1 + objOperate.getIosLoginTimes()): objOperate.getIosLoginTimes());
        }
        
    }
    
    private void initUserOperateLoinInfo(UserOperate objOperate,Date now){
        
        Date firstLoginTime = objOperate.getFirstLoginTime();
        Date lastLoginTime = objOperate.getLastLoginTime();
        boolean flag = (now.getTime() - firstLoginTime.getTime()) / 86400000 <= 30;
        
        if (null != firstLoginTime && flag) {
            // 新增30天登录次数
            objOperate.setLoginTimes(objOperate.getLoginTimes() + 1);
            flag = (now.getTime() - lastLoginTime.getTime()) / 86400000 > 0;
            if (null != lastLoginTime && flag) {
                // 新增30天登录天数
                objOperate.setLoginDays(objOperate.getLoginDays() + 1);
            }
        }
        // 总登录天数
        flag = (now.getTime() - lastLoginTime.getTime()) / 86400000 > 0;
        if (null != lastLoginTime && flag) {
            objOperate.setSumLoginDays(objOperate.getSumLoginDays() + 1);
        }
        
    }
}