wfansh 1 hete
szülő
commit
a9dc6b1c7a

+ 38 - 26
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/common/util/DateUtil.java

@@ -1,10 +1,12 @@
 package org.jeecg.modules.adweb.common.util;
 
 import lombok.extern.slf4j.Slf4j;
+
 import org.apache.commons.lang3.tuple.Pair;
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.Duration;
 import java.time.LocalDate;
 import java.time.ZoneId;
 import java.time.temporal.ChronoUnit;
@@ -23,41 +25,27 @@ import java.util.stream.IntStream;
 @Slf4j
 public class DateUtil {
 
-    /**
-     * 标准日期格式(yyyy-MM-dd)
-     */
+    /** 标准日期格式(yyyy-MM-dd) */
     public static final String DATE_FORMAT = "yyyy-MM-dd";
 
-    /**
-     * 标准时间格式(yyyy-MM-dd HH:mm:ss)
-     */
+    /** 标准时间格式(yyyy-MM-dd HH:mm:ss) */
     public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
 
-    /**
-     * 带时区的时间格式(yyyy-MM-dd HH:mm:ss +00:00)
-     */
+    /** 带时区的时间格式(yyyy-MM-dd HH:mm:ss +00:00) */
     public static final String ZONED_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss X";
 
-    /**
-     * 时间格式(yyyy/MM/dd)
-     */
+    /** 时间格式(yyyy/MM/dd) */
     public static final String SUBJECT_DATE_FORMAT = "yyyy/MM/dd";
 
-    /**
-     * 时间格式(yyyyMMdd)
-     */
+    /** 时间格式(yyyyMMdd) */
     public static final String COMPACT_DATE_FORMAT = "yyyyMMdd";
 
-    /**
-     * 时间格式(yyyyMMddHHmmss)
-     */
+    /** 时间格式(yyyyMMddHHmmss) */
     public static final String COMPACT_DATE_TIME_FORMAT = "yyyyMMddHHmmss";
 
     public static final ZoneId DEFAULT_ZONE_ID = ZoneId.of("Asia/Shanghai");
 
-    /**
-     * 取得系统当前日期
-     */
+    /** 取得系统当前日期 */
     public static Date getDate() {
         return new Date();
     }
@@ -130,7 +118,7 @@ public class DateUtil {
     /**
      * 在当前日期上追加N天
      *
-     * @param date      当前日期
+     * @param date 当前日期
      * @param daysToAdd 添加天数
      * @return 日期字符串形式
      */
@@ -145,7 +133,7 @@ public class DateUtil {
      * 在当前日期上追加N年
      *
      * @param date 当前日期
-     * @param num  添加年数
+     * @param num 添加年数
      * @return 日期字符串形式
      */
     public static Date addYear(Date date, int num) {
@@ -169,9 +157,7 @@ public class DateUtil {
                         LocalDate.ofInstant(end.toInstant(), DEFAULT_ZONE_ID));
     }
 
-    /**
-     * 获取start和end之间所有的日期,包含起止两端
-     */
+    /** 获取start和end之间所有的日期,包含起止两端 */
     public static List<Date> getAllDaysBetween(Date start, Date end) {
         return IntStream.rangeClosed(0, diffDays(start, end))
                 .mapToObj(diff -> addDays(start, diff))
@@ -209,4 +195,30 @@ public class DateUtil {
             return null;
         }
     }
+
+    /**
+     * 秒单位转换为duration字符串,如2小时36分18秒
+     *
+     * @param durationSeconds
+     * @return
+     */
+    public static String formatDuration(double durationSeconds) {
+        if (durationSeconds <= 60d) {
+            // 小于60秒时,保留两位小数
+            return NumberUtil.formatDecimal(durationSeconds, 2) + "秒";
+        }
+
+        Duration duration = Duration.ofSeconds((long) durationSeconds);
+        int hours = duration.toHoursPart();
+        StringBuilder result = new StringBuilder();
+        if (hours > 0) {
+            result.append(hours).append("小时");
+        }
+
+        return result.append(duration.toMinutesPart())
+                .append("分")
+                .append(duration.toSecondsPart())
+                .append("秒")
+                .toString();
+    }
 }

+ 3 - 3
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/vo/report/SiteOverviewStatsVO.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Data;
 
 import org.apache.commons.collections4.CollectionUtils;
+import org.jeecg.modules.adweb.common.util.DateUtil;
 import org.jeecg.modules.adweb.common.util.NumberUtil;
 
 import java.util.List;
@@ -29,7 +30,7 @@ public class SiteOverviewStatsVO {
     // 计算数据
     private double dailyTotalUsers; // 日均访问量
 
-    private double avgTimeOnPage; // 平均访问时长
+    private String avgTimeOnPage; // 平均访问时长 - 如35.2秒,1分36秒
 
     private double pageViewsPerSession; // 平均访问页面数
 
@@ -93,8 +94,7 @@ public class SiteOverviewStatsVO {
                                                 * dailyStatsVO.getSessions())
                         .sum();
         siteOverviewStatsVO.setAvgTimeOnPage(
-                NumberUtil.formatDecimal(NumberUtil.safeDivide(sessionDurationSum, sessions), 2)
-                        .doubleValue());
+                DateUtil.formatDuration(NumberUtil.safeDivide(sessionDurationSum, sessions)));
 
         // 2.3 平均访问页面数
         siteOverviewStatsVO.setPageViewsPerSession(