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