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);
|
}
|
|
}
|
}
|