store_track_statistics 表中的各个数据字段存储的是JSON格式的统计数据。本文档详细说明各个字段的JSON格式。
```sql
-- 埋点事件表
CREATE TABLEstore_track_event(
idbigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
event_typevarchar(50) NOT NULL COMMENT '事件类型(VIEW-浏览,SEARCH-搜索,COLLECT-收藏,SHARE-分享,CHECKIN-打卡,CONSULT-咨询,FOLLOW-关注,UNFOLLOW-取消关注,FRIEND_ADD-添加好友,POST_PUBLISH-发布动态,POST_LIKE-动态点赞,POST_COMMENT-动态评论,POST_REPOST-动态转发,REPORT-举报,BLOCK-拉黑,COUPON_GIVE-赠送优惠券,COUPON_USE-使用优惠券,VOUCHER_GIVE-赠送代金券,VOUCHER_USE-使用代金券,PRICE_VIEW-价目表浏览,PRICE_SHARE-价目表分享,RATING-评价,APPEAL-申诉)',
event_categoryvarchar(50) NOT NULL COMMENT '事件分类(TRAFFIC-流量数据,INTERACTION-互动数据,COUPON-优惠券,VOUCHER-代金券,SERVICE-服务质量,PRICE-价目表)',
user_idint(11) DEFAULT NULL COMMENT '用户ID',
store_idint(11) DEFAULT NULL COMMENT '店铺ID',
target_idint(11) DEFAULT NULL COMMENT '目标对象ID(如价目表ID、动态ID等)',
target_typevarchar(50) DEFAULT NULL COMMENT '目标对象类型(PRICE-价目表,POST-动态,STORE-店铺等)',
event_datatext COMMENT '事件附加数据(JSON格式)',
amountdecimal(10,2) DEFAULT NULL COMMENT '金额(用于优惠券、代金券等)',
durationbigint(20) DEFAULT NULL COMMENT '时长(毫秒,用于访问时长等)',
ip_addressvarchar(50) DEFAULT NULL COMMENT 'IP地址',
user_agentvarchar(500) DEFAULT NULL COMMENT '用户代理',
device_typevarchar(20) DEFAULT NULL COMMENT '设备类型(IOS,ANDROID,WEB)',
app_versionvarchar(20) DEFAULT NULL COMMENT 'APP版本号',
event_timedatetime NOT NULL COMMENT '事件发生时间',
created_timedatetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
delete_flagint(1) NOT NULL DEFAULT '0' COMMENT '删除标记(0:未删除,1:已删除)',
PRIMARY KEY (id),
KEYidx_store_id(store_id),
KEYidx_user_id(user_id),
KEYidx_event_type(event_type),
KEYidx_event_category(event_category),
KEYidx_event_time(event_time),
KEYidx_store_event_time(store_id,event_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='埋点事件表';
-- 埋点统计表
CREATE TABLE store_track_statistics (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
store_id int(11) NOT NULL COMMENT '店铺ID',
stat_date date NOT NULL COMMENT '统计日期',
stat_type varchar(50) NOT NULL COMMENT '统计类型(DAILY-日统计,WEEKLY-周统计,MONTHLY-月统计)',
traffic_data text COMMENT '流量数据(JSON格式)',
interaction_data text COMMENT '互动数据(JSON格式)',
coupon_data text COMMENT '优惠券数据(JSON格式)',
voucher_data text COMMENT '代金券数据(JSON格式)',
service_data text COMMENT '服务质量数据(JSON格式)',
price_ranking_data text COMMENT '价目表排名数据(JSON格式)',
created_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
UNIQUE KEY uk_store_date_type (store_id,stat_date,stat_type),
KEY idx_store_id (store_id),
KEY idx_stat_date (stat_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='埋点统计表';
## 二、各字段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`: 店铺搜索次数(埋点时间SEARCH该店铺的次数)
- `viewCount`: 店铺浏览次数(埋点时间VIEW该店铺的次数)
- `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分) "scoreOne": 4.3, // 评分1(Double类型,0-5分) "scoreTwo": 4.2, // 评分2(Double类型,0-5分) "scoreThree": 4.4, // 评分3(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表查询score字段,businessType=1,计算平均分)
- `scoreOne`: 评分1(从common_rating表的score_one字段,计算平均分)
- `scoreTwo`: 评分2(从common_rating表的score_two字段,计算平均分)
- `scoreThree`: 评分3(从common_rating表的score_three字段,计算平均分)
- `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)
**注意**:评价数据为累计数据,统计截止到统计日期的所有评价。
---
### 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: 店铺IDstatDate: 统计日期statType: 统计类型(DAILY/WEEKLY/MONTHLY)uk_store_date_type 保证唯一性数据类型:
空值处理:
数据精度:
性能优化: