|
@@ -0,0 +1,280 @@
|
|
|
|
|
+# 埋点统计数据JSON格式说明
|
|
|
|
|
+
|
|
|
|
|
+## 一、概述
|
|
|
|
|
+
|
|
|
|
|
+`store_track_statistics` 表中的各个数据字段存储的是JSON格式的统计数据。本文档详细说明各个字段的JSON格式。
|
|
|
|
|
+
|
|
|
|
|
+## 二、各字段JSON格式
|
|
|
|
|
+
|
|
|
|
|
+### 2.1 traffic_data(流量数据)
|
|
|
|
|
+
|
|
|
|
|
+**字段说明**:存储流量相关的统计数据
|
|
|
|
|
+
|
|
|
|
|
+**JSON格式**:
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "searchCount": 100, // 搜索量(Long类型)
|
|
|
|
|
+ "viewCount": 500, // 浏览量(Long类型)
|
|
|
|
|
+ "visitorCount": 300, // 访客数(去重后的用户数,Long类型)
|
|
|
|
|
+ "newVisitorCount": 50, // 新增访客数(Long类型)
|
|
|
|
|
+ "totalDuration": 1500000, // 总访问时长(毫秒,Long类型)
|
|
|
|
|
+ "avgDuration": 5000 // 平均访问时长(毫秒,Long类型)
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**字段说明**:
|
|
|
|
|
+- `searchCount`: 店铺搜索次数
|
|
|
|
|
+- `viewCount`: 店铺浏览次数
|
|
|
|
|
+- `visitorCount`: 访客数(去重后的用户ID数量)
|
|
|
|
|
+- `newVisitorCount`: 新增访客数(在统计日期之前没有访问记录的用户)
|
|
|
|
|
+- `totalDuration`: 总访问时长(所有浏览事件duration字段的总和,单位:毫秒)
|
|
|
|
|
+- `avgDuration`: 平均访问时长(totalDuration / 有duration的浏览事件数,单位:毫秒)
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+### 2.2 interaction_data(互动数据)
|
|
|
|
|
+
|
|
|
|
|
+**字段说明**:存储用户互动相关的统计数据
|
|
|
|
|
+
|
|
|
|
|
+**JSON格式**:
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "collectCount": 50, // 收藏次数(Long类型)
|
|
|
|
|
+ "shareCount": 30, // 分享次数(Long类型)
|
|
|
|
|
+ "checkinCount": 20, // 打卡次数(Long类型)
|
|
|
|
|
+ "consultCount": 10, // 咨询次数(Long类型)
|
|
|
|
|
+ "friendCount": 100, // 好友数量(互相关注的用户数,Long类型)
|
|
|
|
|
+ "followCount": 200, // 关注数量(店铺用户关注的人数,Long类型)
|
|
|
|
|
+ "fansCount": 150, // 粉丝数量(关注店铺用户的人数,Long类型)
|
|
|
|
|
+ "postCount": 25, // 发布动态数量(Long类型)
|
|
|
|
|
+ "postLikeCount": 200, // 动态点赞数量(Long类型)
|
|
|
|
|
+ "postCommentCount": 80, // 动态评论数量(Long类型)
|
|
|
|
|
+ "postRepostCount": 15, // 动态转发数量(Long类型)
|
|
|
|
|
+ "reportCount": 5, // 被举报次数(Long类型)
|
|
|
|
|
+ "blockCount": 2 // 被拉黑次数(Long类型)
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**字段说明**:
|
|
|
|
|
+- `collectCount`: 店铺收藏次数(从埋点事件中统计COLLECT类型)
|
|
|
|
|
+- `shareCount`: 店铺分享次数(从埋点事件中统计SHARE类型)
|
|
|
|
|
+- `checkinCount`: 店铺打卡次数(从埋点事件中统计CHECKIN类型)
|
|
|
|
|
+- `consultCount`: 咨询商家次数(从埋点事件中统计CONSULT类型)
|
|
|
|
|
+- `friendCount`: 好友数量(通过life_fans表查询互相关注的用户数)
|
|
|
|
|
+- `followCount`: 关注数量(店铺用户关注的人数)
|
|
|
|
|
+- `fansCount`: 粉丝数量(关注店铺用户的人数)
|
|
|
|
|
+- `postCount`: 发布动态数量(从life_user_dynamics表查询,type=2商家社区)
|
|
|
|
|
+- `postLikeCount`: 动态点赞数量(从埋点事件中统计POST_LIKE类型)
|
|
|
|
|
+- `postCommentCount`: 动态评论数量(从埋点事件中统计POST_COMMENT类型)
|
|
|
|
|
+- `postRepostCount`: 动态转发数量(从埋点事件中统计POST_REPOST类型)
|
|
|
|
|
+- `reportCount`: 被举报次数(从埋点事件中统计REPORT类型)
|
|
|
|
|
+- `blockCount`: 被拉黑次数(从埋点事件中统计BLOCK类型)
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+### 2.3 coupon_data(优惠券数据)
|
|
|
|
|
+
|
|
|
|
|
+**字段说明**:存储优惠券相关的统计数据
|
|
|
|
|
+
|
|
|
|
|
+**JSON格式**:
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "giveToFriendCount": 50, // 赠送好友数量(Long类型)
|
|
|
|
|
+ "giveToFriendAmount": 5000.00, // 赠送好友金额合计(BigDecimal类型,单位:元)
|
|
|
|
|
+ "giveToFriendUseCount": 30, // 赠送好友使用数量(Long类型)
|
|
|
|
|
+ "giveToFriendUseAmount": 3000.00, // 赠送好友使用金额合计(BigDecimal类型,单位:元)
|
|
|
|
|
+ "giveToFriendUseAmountPercent": 60.00, // 赠送好友使用金额占比(Double类型,单位:%)
|
|
|
|
|
+ "friendGiveCount": 20, // 好友赠送数量(Long类型)
|
|
|
|
|
+ "friendGiveAmount": 2000.00, // 好友赠送金额合计(BigDecimal类型,单位:元)
|
|
|
|
|
+ "friendGiveUseCount": 15, // 好友赠送使用数量(Long类型)
|
|
|
|
|
+ "friendGiveUseAmount": 1500.00, // 好友赠送使用金额合计(BigDecimal类型,单位:元)
|
|
|
|
|
+ "friendGiveUseAmountPercent": 75.00 // 好友赠送使用金额占比(Double类型,单位:%)
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**字段说明**:
|
|
|
|
|
+- `giveToFriendCount`: 赠送好友数量(从life_discount_coupon_user表统计,关联店铺的优惠券)
|
|
|
|
|
+- `giveToFriendAmount`: 赠送好友金额合计(优惠券面值的总和)
|
|
|
|
|
+- `giveToFriendUseCount`: 赠送好友使用数量(status=1已使用的数量)
|
|
|
|
|
+- `giveToFriendUseAmount`: 赠送好友使用金额合计(已使用优惠券的面值总和)
|
|
|
|
|
+- `giveToFriendUseAmountPercent`: 赠送好友使用金额占比(giveToFriendUseAmount / giveToFriendAmount * 100)
|
|
|
|
|
+- `friendGiveCount`: 好友赠送数量(好友赠送给店铺用户的优惠券数量,从life_discount_coupon_store_friend表统计)
|
|
|
|
|
+- `friendGiveAmount`: 好友赠送金额合计(好友赠送的优惠券面值总和)
|
|
|
|
|
+- `friendGiveUseCount`: 好友赠送使用数量(已使用的数量)
|
|
|
|
|
+- `friendGiveUseAmount`: 好友赠送使用金额合计(已使用的优惠券面值总和)
|
|
|
|
|
+- `friendGiveUseAmountPercent`: 好友赠送使用金额占比(friendGiveUseAmount / friendGiveAmount * 100)
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+### 2.4 voucher_data(代金券数据)
|
|
|
|
|
+
|
|
|
|
|
+**字段说明**:存储代金券相关的统计数据
|
|
|
|
|
+
|
|
|
|
|
+**JSON格式**:
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "giveToFriendCount": 30, // 赠送好友数量(Long类型)
|
|
|
|
|
+ "giveToFriendAmount": 3000.00, // 赠送好友金额合计(BigDecimal类型,单位:元)
|
|
|
|
|
+ "giveToFriendUseCount": 20, // 赠送好友使用数量(Long类型)
|
|
|
|
|
+ "giveToFriendUseAmount": 2000.00, // 赠送好友使用金额合计(BigDecimal类型,单位:元)
|
|
|
|
|
+ "giveToFriendUseAmountPercent": 66.67, // 赠送好友使用金额占比(Double类型,单位:%)
|
|
|
|
|
+ "friendGiveCount": 10, // 好友赠送数量(Long类型)
|
|
|
|
|
+ "friendGiveAmount": 1000.00, // 好友赠送金额合计(BigDecimal类型,单位:元)
|
|
|
|
|
+ "friendGiveUseCount": 8, // 好友赠送使用数量(Long类型)
|
|
|
|
|
+ "friendGiveUseAmount": 800.00, // 好友赠送使用金额合计(BigDecimal类型,单位:元)
|
|
|
|
|
+ "friendGiveUseAmountPercent": 80.00 // 好友赠送使用金额占比(Double类型,单位:%)
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**字段说明**:
|
|
|
|
|
+- `giveToFriendCount`: 赠送好友数量(从埋点事件中统计VOUCHER_GIVE类型)
|
|
|
|
|
+- `giveToFriendAmount`: 赠送好友金额合计(从埋点事件的amount字段汇总)
|
|
|
|
|
+- `giveToFriendUseCount`: 赠送好友使用数量(从埋点事件中统计VOUCHER_USE类型)
|
|
|
|
|
+- `giveToFriendUseAmount`: 赠送好友使用金额合计(从埋点事件的amount字段汇总)
|
|
|
|
|
+- `giveToFriendUseAmountPercent`: 赠送好友使用金额占比(giveToFriendUseAmount / giveToFriendAmount * 100)
|
|
|
|
|
+- `friendGiveCount`: 好友赠送数量(好友赠送给店铺用户的代金券数量,从life_discount_coupon_store_friend表统计,type=1代金券)
|
|
|
|
|
+- `friendGiveAmount`: 好友赠送金额合计(好友赠送的代金券面值总和)
|
|
|
|
|
+- `friendGiveUseCount`: 好友赠送使用数量(已使用的数量)
|
|
|
|
|
+- `friendGiveUseAmount`: 好友赠送使用金额合计(已使用的代金券面值总和)
|
|
|
|
|
+- `friendGiveUseAmountPercent`: 好友赠送使用金额占比(friendGiveUseAmount / friendGiveAmount * 100)
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+### 2.5 service_data(服务质量数据)
|
|
|
|
|
+
|
|
|
|
|
+**字段说明**:存储服务质量相关的统计数据
|
|
|
|
|
+
|
|
|
|
|
+**JSON格式**:
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "storeScore": 4.5, // 店铺评分(Double类型,0-5分)
|
|
|
|
|
+ "tasteScore": 4.3, // 口味评分(Double类型,0-5分)
|
|
|
|
|
+ "environmentScore": 4.2, // 环境评分(Double类型,0-5分)
|
|
|
|
|
+ "serviceScore": 4.4, // 服务评分(Double类型,0-5分)
|
|
|
|
|
+ "ratingCount": 100, // 评价数量(Long类型)
|
|
|
|
|
+ "goodRatingCount": 60, // 好评数量(score >= 4.5,Long类型)
|
|
|
|
|
+ "midRatingCount": 30, // 中评数量(3.0 <= score <= 4.0,Long类型)
|
|
|
|
|
+ "badRatingCount": 10, // 差评数量(0.5 <= score <= 2.5,Long类型)
|
|
|
|
|
+ "badRatingPercent": 10.00, // 差评占比(Double类型,单位:%)
|
|
|
|
|
+ "appealCount": 5, // 差评申诉次数(Long类型)
|
|
|
|
|
+ "appealSuccessCount": 3, // 差评申诉成功次数(Long类型)
|
|
|
|
|
+ "appealSuccessPercent": 60.00 // 差评申诉成功占比(Double类型,单位:%)
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**字段说明**:
|
|
|
|
|
+- `storeScore`: 店铺评分(从common_rating表统计,businessType=1,计算平均分)
|
|
|
|
|
+- `tasteScore`: 口味评分(从common_rating表的otherScore字段解析"口味"评分,计算平均分)
|
|
|
|
|
+- `environmentScore`: 环境评分(从common_rating表的otherScore字段解析"环境"评分,计算平均分)
|
|
|
|
|
+- `serviceScore`: 服务评分(从common_rating表的otherScore字段解析"服务"评分,计算平均分)
|
|
|
|
|
+- `ratingCount`: 评价数量(common_rating表中该店铺的评价总数)
|
|
|
|
|
+- `goodRatingCount`: 好评数量(score >= 4.5的评价数)
|
|
|
|
|
+- `midRatingCount`: 中评数量(3.0 <= score <= 4.0的评价数)
|
|
|
|
|
+- `badRatingCount`: 差评数量(0.5 <= score <= 2.5的评价数)
|
|
|
|
|
+- `badRatingPercent`: 差评占比(badRatingCount / ratingCount * 100)
|
|
|
|
|
+- `appealCount`: 差评申诉次数(从埋点事件中统计APPEAL类型)
|
|
|
|
|
+- `appealSuccessCount`: 差评申诉成功次数(从store_comment_appeal表统计,appealStatus=2已同意)
|
|
|
|
|
+- `appealSuccessPercent`: 差评申诉成功占比(appealSuccessCount / appealCount * 100)
|
|
|
|
|
+
|
|
|
|
|
+**otherScore字段格式示例**:
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "口味": 5.0,
|
|
|
|
|
+ "环境": 4.5,
|
|
|
|
|
+ "服务": 4.0
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+### 2.6 price_ranking_data(价目表排名数据)
|
|
|
|
|
+
|
|
|
|
|
+**字段说明**:存储价目表排名相关的统计数据(数组格式)
|
|
|
|
|
+
|
|
|
|
|
+**JSON格式**:
|
|
|
|
|
+```json
|
|
|
|
|
+[
|
|
|
|
|
+ {
|
|
|
|
|
+ "priceId": 1001, // 价目表ID(Integer类型)
|
|
|
|
|
+ "viewCount": 500, // 浏览量(Integer类型)
|
|
|
|
|
+ "visitorCount": 300, // 访客数(Integer类型)
|
|
|
|
|
+ "shareCount": 50 // 分享数(Integer类型)
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "priceId": 1002,
|
|
|
|
|
+ "viewCount": 400,
|
|
|
|
|
+ "visitorCount": 250,
|
|
|
|
|
+ "shareCount": 40
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "priceId": 1003,
|
|
|
|
|
+ "viewCount": 300,
|
|
|
|
|
+ "visitorCount": 200,
|
|
|
|
|
+ "shareCount": 30
|
|
|
|
|
+ }
|
|
|
|
|
+]
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**字段说明**:
|
|
|
|
|
+- 数组按`viewCount`(浏览量)降序排列
|
|
|
|
|
+- 每个元素包含一个价目表的统计数据
|
|
|
|
|
+- `priceId`: 价目表ID(targetId字段)
|
|
|
|
|
+- `viewCount`: 浏览量(PRICE_VIEW事件数量)
|
|
|
|
|
+- `visitorCount`: 访客数(去重后的用户ID数量)
|
|
|
|
|
+- `shareCount`: 分享数(PRICE_SHARE事件数量)
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 三、数据保存说明
|
|
|
|
|
+
|
|
|
|
|
+### 3.1 统计数据如何保存
|
|
|
|
|
+
|
|
|
|
|
+统计数据通过定时任务自动计算并保存:
|
|
|
|
|
+
|
|
|
|
|
+1. **日统计任务**:每天凌晨1点执行,计算前一天的统计数据(statType=DAILY)
|
|
|
|
|
+2. **周统计任务**:每周一凌晨2点执行,计算上一周的统计数据(statType=WEEKLY)
|
|
|
|
|
+3. **月统计任务**:每月1号凌晨3点执行,计算上一个月的统计数据(statType=MONTHLY)
|
|
|
|
|
+
|
|
|
|
|
+**定时任务类**:`TrackStatisticsScheduler.java`
|
|
|
|
|
+
|
|
|
|
|
+### 3.2 手动触发统计
|
|
|
|
|
+
|
|
|
|
|
+如果需要手动触发统计数据计算,可以调用:
|
|
|
|
|
+
|
|
|
|
|
+```java
|
|
|
|
|
+trackEventService.calculateAndSaveStatistics(storeId, statDate, statType);
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**参数说明**:
|
|
|
|
|
+- `storeId`: 店铺ID
|
|
|
|
|
+- `statDate`: 统计日期
|
|
|
|
|
+- `statType`: 统计类型(DAILY/WEEKLY/MONTHLY)
|
|
|
|
|
+
|
|
|
|
|
+### 3.3 数据更新策略
|
|
|
|
|
+
|
|
|
|
|
+- 如果该店铺、该日期、该统计类型的记录已存在,则更新数据
|
|
|
|
|
+- 如果不存在,则创建新记录
|
|
|
|
|
+- 使用唯一索引 `uk_store_date_type` 保证唯一性
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 四、注意事项
|
|
|
|
|
+
|
|
|
|
|
+1. **数据类型**:
|
|
|
|
|
+ - Long类型字段在JSON中显示为数字(如:100)
|
|
|
|
|
+ - BigDecimal类型字段在JSON中显示为数字(如:5000.00)
|
|
|
|
|
+ - Double类型字段在JSON中显示为数字(如:4.5)
|
|
|
|
|
+ - 数组类型字段在JSON中显示为数组(如:[])
|
|
|
|
|
+
|
|
|
|
|
+2. **空值处理**:
|
|
|
|
|
+ - 如果某个分类没有数据,对应的字段可能为null或空对象
|
|
|
|
|
+ - 建议在查询时进行null判断
|
|
|
|
|
+
|
|
|
|
|
+3. **数据精度**:
|
|
|
|
|
+ - 金额字段使用BigDecimal保证精度
|
|
|
|
|
+ - 百分比字段保留2位小数
|
|
|
|
|
+ - 评分字段保留1位小数
|
|
|
|
|
+
|
|
|
|
|
+4. **性能优化**:
|
|
|
|
|
+ - 统计数据已预计算并存储,查询时直接读取,无需实时计算
|
|
|
|
|
+ - 建议定期清理历史统计数据,避免数据表过大
|