数据统计与分析-Cordova 与 OpenHarmony 混合开发实战
摘要 本文介绍了开源鸿蒙跨平台应用中Web层的数据统计与分析实现方案。核心组件AnalyticsEngine提供日统计、周统计、月统计、分类统计和优先级统计功能,通过计算任务完成率、分布等指标帮助用户分析工作效率。系统采用三层架构:统计分析引擎实现统计算法,任务管理器提供数据,数据库模块负责查询。此外还设计了与原生层的统计事件同步机制,通过Cordova插件将Web层统计结果同步到HarmonyO
欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。
本文对应模块:Web 层的数据统计与分析实现,包括日周月统计、分类统计、优先级统计、与原生层的统计事件同步机制。
📌 概述
数据统计与分析是应用的重要功能,帮助用户了解任务完成情况和工作趋势。数据统计包括日统计、周统计、月统计、分类统计、优先级统计等功能。AnalyticsEngine 类是统计分析的核心,负责计算各类统计指标。通过数据统计与分析,用户可以更好地了解自己的工作效率和任务分布。
🔗 数据统计与分析的完整流程
数据统计与分析分为三层:Web 层的 AnalyticsEngine(统计分析引擎)负责统计算法的实现,TaskManager(任务管理器)提供任务数据,DatabaseModule(数据库模块)负责数据的查询。当用户查看日统计时,AnalyticsEngine 计算指定日期的任务完成情况。当用户查看周统计时,AnalyticsEngine 计算过去7天的任务统计。当用户查看月统计时,AnalyticsEngine 计算当前月份的任务统计。当用户查看分类统计时,AnalyticsEngine 按分类汇总任务数据。
数据统计与分析与任务管理不同,它关注的是数据的聚合和展示。用户可以通过不同的时间维度查看统计数据,例如按日、周、月查看任务完成情况。用户也可以按分类或优先级查看任务分布。统计数据可以帮助用户识别工作模式和改进空间。
数据统计与分析的实现需要考虑以下几个方面:首先是统计算法的准确性,需要正确计算各类统计指标。其次是统计性能的优化,需要支持快速的数据聚合。第三是统计数据的展示,需要用图表或表格清晰地展示统计结果。第四是统计数据的导出,需要支持将统计数据导出为报表。最后是与原生层的集成,需要通过 Cordova 插件将统计事件通知给原生层。
数据统计与分析在实际应用中非常有用。用户可以通过统计数据了解自己的工作效率。例如,用户可以查看周统计来了解过去一周的任务完成情况。用户也可以查看分类统计来了解不同类型任务的分布。通过长期的统计数据积累,用户可以识别自己的工作模式和改进方向。
🔧 统计分析引擎实现
统计分析引擎的核心实现包括日统计、周统计、月统计、分类统计、优先级统计等功能。日统计时需要计算指定日期的任务总数、完成数、待完成数和完成率。周统计时需要计算过去7天的统计数据。月统计时需要计算当前月份的统计数据。
// 统计分析引擎的关键方法
class AnalyticsEngine {
static getDailyStats(date) {
const dateStr = date.toISOString().split('T')[0];
const tasks = taskManager.getAllTasks().filter(t => t.dueDate === dateStr);
return {
date: dateStr,
total: tasks.length,
completed: tasks.filter(t => t.status === 'completed').length,
pending: tasks.filter(t => t.status === 'pending').length,
completionRate: tasks.length > 0
? Math.round((tasks.filter(t => t.status === 'completed').length / tasks.length) * 100)
: 0
};
}
static getWeeklyStats() {
const stats = [];
const today = new Date();
for (let i = 6; i >= 0; i--) {
const date = new Date(today);
date.setDate(date.getDate() - i);
stats.push(this.getDailyStats(date));
}
return stats;
}
static getMonthlyStats() {
const stats = [];
const today = new Date();
const currentMonth = today.getMonth();
const currentYear = today.getFullYear();
for (let day = 1; day <= 31; day++) {
const date = new Date(currentYear, currentMonth, day);
if (date.getMonth() !== currentMonth) break;
stats.push(this.getDailyStats(date));
}
return stats;
}
static getCategoryStats() {
const stats = {};
const categories = categoryManager.getAllCategories();
categories.forEach(cat => {
const tasks = taskManager.getTasksByCategory(cat.id);
stats[cat.name] = {
total: tasks.length,
completed: tasks.filter(t => t.status === 'completed').length,
pending: tasks.filter(t => t.status === 'pending').length
};
});
return stats;
}
static getPriorityStats() {
const tasks = taskManager.getAllTasks();
return {
high: tasks.filter(t => t.priority === 'high').length,
medium: tasks.filter(t => t.priority === 'medium').length,
low: tasks.filter(t => t.priority === 'low').length
};
}
}
代码解释:
AnalyticsEngine 类提供了数据统计和分析的核心功能。getDailyStats() 方法计算指定日期的任务统计,包括总数、完成数、待完成数和完成率。getWeeklyStats() 方法计算过去7天的统计数据,返回一个数组,每个元素是一天的统计数据。getMonthlyStats() 方法计算当前月份的统计数据,返回一个数组,每个元素是一天的统计数据。getCategoryStats() 方法按分类汇总任务数据,返回一个对象,键是分类名称,值是该分类的统计数据。getPriorityStats() 方法统计不同优先级的任务数量。
🔌 原生层的统计事件同步
HarmonyOS 原生层也需要与 Web 层的统计功能进行集成。原生层可以通过 Cordova 插件来接收来自 Web 层的统计事件。
// ArkTS 代码示例 - 统计同步插件
import { CordovaPlugin, CallbackContext } from '@magongshou/harmony-cordova/Index';
import { PluginResult, MessageStatus } from '@magongshou/harmony-cordova/Index';
export class AnalyticsSyncPlugin extends CordovaPlugin {
// 监听 Web 层的统计查询事件
async onStatsQueried(callbackContext: CallbackContext, args: string[]): Promise<void> {
try {
const statsData = JSON.parse(args[0]);
console.log('[AnalyticsSyncPlugin] 统计已查询:', statsData.statsType);
console.log('[AnalyticsSyncPlugin] 完成率:', statsData.completionRate, '%');
const result = PluginResult.createByString(MessageStatus.OK, '统计已同步');
callbackContext.sendPluginResult(result);
} catch (error) {
const result = PluginResult.createByString(MessageStatus.ERROR, (error as Error).message);
callbackContext.sendPluginResult(result);
}
}
// 监听 Web 层的统计导出事件
async onStatsExported(callbackContext: CallbackContext, args: string[]): Promise<void> {
try {
const exportData = JSON.parse(args[0]);
console.log('[AnalyticsSyncPlugin] 统计已导出:', exportData.format);
const result = PluginResult.createByString(MessageStatus.OK, '导出已同步');
callbackContext.sendPluginResult(result);
} catch (error) {
const result = PluginResult.createByString(MessageStatus.ERROR, (error as Error).message);
callbackContext.sendPluginResult(result);
}
}
}
原生代码解释:
AnalyticsSyncPlugin 是一个 Cordova 插件,提供了原生层与 Web 层统计功能的交互接口。onStatsQueried 方法监听 Web 层的统计查询事件,接收统计类型和完成率等数据。原生层可以根据这个事件更新原生层的统计显示或保存统计历史。onStatsExported 方法监听 Web 层的统计导出事件,接收导出格式。原生层可以根据这个事件在原生层也导出相应的统计数据。
Web 层通知原生统计事件
Web 层可以调用原生插件来通知原生层统计相关的事件:
// JavaScript 代码 - 通知原生统计事件
function notifyStatsQueried(statsType, completionRate) {
cordova.exec(
function() { console.log('原生层已收到统计查询通知'); },
function(error) { console.error('通知失败:', error); },
'AnalyticsSyncPlugin',
'onStatsQueried',
[JSON.stringify({ statsType, completionRate })]
);
}
function notifyStatsExported(format, fileName) {
cordova.exec(
function() { console.log('原生层已收到统计导出通知'); },
function(error) { console.error('通知失败:', error); },
'AnalyticsSyncPlugin',
'onStatsExported',
[JSON.stringify({ format, fileName })]
);
}
Web 层代码解释:
notifyStatsQueried 函数使用 cordova.exec() 调用原生插件的 onStatsQueried 方法,传递统计类型和完成率。这样可以从 Web 层通知原生层统计已查询。notifyStatsExported 函数调用原生插件的 onStatsExported 方法,传递导出格式和文件名。这样可以从 Web 层通知原生层统计已导出。通过这些函数,Web 层可以将统计事件同步给原生层,使原生层能够保持与 Web 层的统计数据一致。
总结
数据统计与分析是应用的重要功能,通过日周月统计和分类统计,用户可以全面了解任务完成情况和工作趋势。通过与原生层的集成,可以实现统计事件的完整同步,使用户在不同层级都能看到最新的统计数据。
更多推荐




所有评论(0)