Переглянути джерело

停留时长计算之前取整

pengyg 1 рік тому
батько
коміт
a7e8cb153b

+ 40 - 25
suishenbang-system/src/main/java/com/dgtly/system/service/impl/SysMagnetLogServiceImpl.java

@@ -1,6 +1,8 @@
 package com.dgtly.system.service.impl;
 
+import java.text.SimpleDateFormat;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 import com.dgtly.common.utils.DateUtils;
 import com.dgtly.system.domain.SysUser;
@@ -60,33 +62,46 @@ public class SysMagnetLogServiceImpl implements ISysMagnetLogService
     @Override
     public int insertSysMagnetLog(SysMagnetLog sysMagnetLog)
     {
-        SysUser user =userMapper.selectUserById(sysMagnetLog.getUserId());
-        sysMagnetLog.setLoginName(user.getLoginName());
-        sysMagnetLog.setSapEmployeeId(user.getSysUserExt().getSapEmployeeId());
-        sysMagnetLog.setCreateTime(DateUtils.getNowDate());
-        //计算渠道看板、产品看板、会员看板的停留时长
-        //本次是主页、渠道看板、产品看板、会员看板、关闭数据看板
-        if("主页".equals(sysMagnetLog.getMagnetName()) || "渠道看板".equals(sysMagnetLog.getMagnetName()) || "产品看板".equals(sysMagnetLog.getMagnetName()) || "会员看板".equals(sysMagnetLog.getMagnetName()) || "关闭数据看板".equals(sysMagnetLog.getMagnetName())){
-            //查询最近的上次埋点
-            SysMagnetLog sysMagnetLogLast = sysMagnetLogMapper.selectOneByCondition(sysMagnetLog);
-            if(sysMagnetLogLast!=null && sysMagnetLogLast.getUpdateTime()==null && ("渠道看板".equals(sysMagnetLogLast.getMagnetName()) || "产品看板".equals(sysMagnetLogLast.getMagnetName()) || "会员看板".equals(sysMagnetLogLast.getMagnetName()))){
-                //记录结束访问时间(仅渠道看板、产品看板、会员看板)
-                sysMagnetLogLast.setUpdateTime(sysMagnetLog.getCreateTime());
-                //记录上次的停留时间
-                Calendar startCal = Calendar.getInstance();
-                startCal.setTime(sysMagnetLogLast.getCreateTime());
-                Calendar endCal = Calendar.getInstance();
-                endCal.setTime(sysMagnetLogLast.getUpdateTime());
-                long milliseconds = endCal.getTimeInMillis() - startCal.getTimeInMillis();
-                //因为当前时间是毫秒级别的,存在小数点,所以,向上取整
-                long seconds =(long) Math.ceil((double) milliseconds / 1000);
-                //停留时间超过24小时,就不再存停留时间了,只保存离开时间
-                if(seconds<86400){
-                    sysMagnetLogLast.setStayDuration(seconds);
+        try{
+            SysUser user =userMapper.selectUserById(sysMagnetLog.getUserId());
+            sysMagnetLog.setLoginName(user.getLoginName());
+            sysMagnetLog.setSapEmployeeId(user.getSysUserExt().getSapEmployeeId());
+            sysMagnetLog.setCreateTime(DateUtils.getNowDate());
+            //计算渠道看板、产品看板、会员看板的停留时长
+            //本次是主页、渠道看板、产品看板、会员看板、关闭数据看板
+            if("主页".equals(sysMagnetLog.getMagnetName()) || "渠道看板".equals(sysMagnetLog.getMagnetName()) || "产品看板".equals(sysMagnetLog.getMagnetName()) || "会员看板".equals(sysMagnetLog.getMagnetName()) || "关闭数据看板".equals(sysMagnetLog.getMagnetName())){
+                //查询最近的上次埋点
+                SysMagnetLog sysMagnetLogLast = sysMagnetLogMapper.selectOneByCondition(sysMagnetLog);
+                if(sysMagnetLogLast!=null && sysMagnetLogLast.getUpdateTime()==null && ("渠道看板".equals(sysMagnetLogLast.getMagnetName()) || "产品看板".equals(sysMagnetLogLast.getMagnetName()) || "会员看板".equals(sysMagnetLogLast.getMagnetName()))){
+                    //记录结束访问时间(仅渠道看板、产品看板、会员看板)
+                    sysMagnetLogLast.setUpdateTime(sysMagnetLog.getCreateTime());
+                    //记录上次的停留时间
+                    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                    //处理开始时间
+                    String startStr = sf.format(sysMagnetLogLast.getCreateTime());
+                    Date startDate=sf.parse(startStr);
+                    //处理结束时间
+                    String endStr = sf.format(sysMagnetLogLast.getUpdateTime());
+                    Date endDate=sf.parse(endStr);
+
+                    Calendar startCal = Calendar.getInstance();
+                    startCal.setTime(startDate);
+                    Calendar endCal = Calendar.getInstance();
+                    endCal.setTime(endDate);
+                    long milliseconds = endCal.getTimeInMillis() - startCal.getTimeInMillis();
+                    //因为当前时间是毫秒级别的,存在小数点,所以,向上取整
+                    long seconds = milliseconds / 1000;
+                    //停留时间超过24小时,就不再存停留时间了,只保存离开时间
+                    if(seconds<86400){
+                        sysMagnetLogLast.setStayDuration(seconds);
+                    }
+                    //保存上次记录
+                    sysMagnetLogMapper.updateSysMagnetLog(sysMagnetLogLast);
                 }
-                //保存上次记录
-                sysMagnetLogMapper.updateSysMagnetLog(sysMagnetLogLast);
+
             }
+        }catch(Exception e){
+            e.printStackTrace();
 
         }
         return sysMagnetLogMapper.insertSysMagnetLog(sysMagnetLog);