文件阅览详情界面浏览时长监控代码

This commit is contained in:
zhaolei 2025-09-23 11:26:54 +08:00
parent 34bb69598d
commit dcc65b6ad4
5 changed files with 112 additions and 15 deletions

View File

@ -7,23 +7,14 @@ import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.Map.Entry;
import java.util.Set;
import javax.imageio.ImageIO;
import com.actionsoft.apps.coe.pal.pal.repository.cache.*;
import com.actionsoft.bpms.util.*;
import com.actionsoft.bpms.util.Base64;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
@ -3448,7 +3439,8 @@ public class CoeDesignerWeb extends ActionWeb {
PALRepositoryQueryAPIManager.getInstance().UpDatePublishCount(plModel);
}
/********************描述************************/
//增加浏览器唯一id
macroLibraries.put("browserId", generateRandom());
if (plModel.getMethodId().equals("process.evc")) {
return HtmlPageTemplate.merge(CoEConstant.APP_ID, "pal.pl.repository.designer.view.portal.framework.html", macroLibraries);
} else {
@ -3458,6 +3450,14 @@ public class CoeDesignerWeb extends ActionWeb {
}
public static String generateRandom() {
// 使用UUID生成唯一随机数然后转换为16进制
UUID uuid = UUID.randomUUID();
return Long.toHexString(uuid.getMostSignificantBits()) +
Long.toHexString(uuid.getLeastSignificantBits());
}

View File

@ -252,7 +252,6 @@
<script type="text/javascript">
var sid = "<#sid>";
var appId = '<#appId>';
var userId = "<#userId>";
var userName = "<#userName>";
var userNameAlias = "<#userNameAlias>";
var siteId = "<#siteId>";
@ -313,6 +312,7 @@
var showReplyNum = "<#showReplyNum>";
var boId = "";
var portalUrl = "<#portalUrl>";
var browserId = "<#browserId>";
// 国际化
@ -758,6 +758,98 @@
});
}
// 页面停留时间统计
class PageStayTimeTracker {
constructor() {
this.startTime = null;
this.lastReportTime = null;
this.reportInterval = 10000; // 60秒报告一次
this.isPageVisible = true; // 默认页面是可见的
this.visibilityBound = false; // 是否已绑定可见性事件
}
// 开始跟踪
startTracking() {
if (this.isActive) return;
this.startTime = new Date();
this.lastReportTime = this.startTime;
this.isActive = true;
// 设置定时器
this.intervalId = setInterval(() => {
if (this.isPageVisible) {
this.reportStayTime();
}
}, this.reportInterval);
// 页面卸载前发送剩余时间
window.addEventListener('beforeunload', this.finalReport.bind(this));
}
// 报告停留时间
reportStayTime() {
this.sendStayTimeToServer(true);
}
// 最终报告
finalReport() {
if (!this.isActive) return;
if (this.isPageVisible) {
const now = new Date();
const elapsed = now - this.lastReportTime;
}
this.sendStayTimeToServer(false);
this.cleanUp();
}
// 发送数据到服务器
sendStayTimeToServer(isActive) {
$.ajax({
type : "POST",
url : "./w?sid=" + encodeURIComponent($('#sid').val()) + "&cmd=com.awspaas.user.apps.browsing_data.service.insertReadingLog",
data : "userId="+user+"&userName="+userName+"&ruuid="+ruuid+"&fileName="+fileName+"&startTime="+new Date(this.startTime).getTime()+"&currentTime="+new Date().getTime()+"&browserId="+browserId+"&isActive="+isActive,
success : function(msg) {
if (msg.result == "error") {
$.simpleAlert("新增失败", "error");
}
}
});
}
// 清理资源
cleanUp() {
clearInterval(this.intervalId);
window.removeEventListener('beforeunload', this.finalReport);
}
}
// 使用示例
const tracker = new PageStayTimeTracker();
tracker.startTracking();
//渲染评论内容
function initPl() {
$(".message-detial-reply").empty();

View File

@ -45,6 +45,10 @@ public class InsertReadingLogService extends ActionWeb
Long begintime=Long.valueOf(params.get("startTime"));
Long endtime=Long.valueOf(params.get("currentTime"));
String isActive=params.get("isActive");
long time =endtime - begintime;
long diffSeconds = time / 1000 % 60;
long diffMinutes = time / (60 * 1000) % 60;
@ -66,7 +70,6 @@ public class InsertReadingLogService extends ActionWeb
String beginDate = sdf.format(begintime);
String endDate = sdf.format(endtime);
BO insertReadingLog=SDK.getBOAPI().query("BO_EU_READING_DURATION").addQuery("BROWSERID=",params.get("browserId")).addQuery("ISACTIVE=","true").detail();
if(insertReadingLog==null){
BO bo=new BO();
@ -83,6 +86,7 @@ public class InsertReadingLogService extends ActionWeb
.createBOProcessInstance("obj_9af2004d87b3472da210b43dc1ca32ab", uc.getUID(), "浏览数据监听");
SDK.getBOAPI().create("BO_EU_READING_DURATION",bo,processInstance.getId(),uc.getUID());
}else{
insertReadingLog.set("USERID",params.get("userId"));
insertReadingLog.set("USERNAME",params.get("userName"));
@ -90,6 +94,7 @@ public class InsertReadingLogService extends ActionWeb
insertReadingLog.set("READING_END_TIME",endDate);
insertReadingLog.set("CUMULATIVE_DURATION_STAY",remainTime);
insertReadingLog.set("BROWSERID",params.get("browserId"));
insertReadingLog.set("ISACTIVE",isActive);
SDK.getBOAPI().update("BO_EU_READING_DURATION",insertReadingLog);
}
ro.put("result", "ok");