feat(widget): 优化访客在线轨迹、GeoIP与多站点渠道
This commit is contained in:
@@ -392,18 +392,27 @@ func (h *StatisticsHandler) ChannelDistribution(c *gin.Context) {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"code": 500, "message": "查询渠道分布失败"})
|
||||
return
|
||||
}
|
||||
channelTypes := make(map[uint]string)
|
||||
channelByID := make(map[uint]model.Channel)
|
||||
for _, channel := range channels {
|
||||
channelTypes[channel.ID] = channel.Type
|
||||
channelByID[channel.ID] = channel
|
||||
}
|
||||
labels := map[string]string{"web": "网页", "wechat": "微信", "app": "APP", "phone": "电话工单", "email": "邮件"}
|
||||
counts := make(map[string]int)
|
||||
for _, session := range sessions {
|
||||
channelType := channelTypes[session.ChannelID]
|
||||
if channelType == "" {
|
||||
channelType = "unknown"
|
||||
label := "未知渠道"
|
||||
if channel, ok := channelByID[session.ChannelID]; ok {
|
||||
label = strings.TrimSpace(channel.Name)
|
||||
if label == "" {
|
||||
label = labels[channel.Type]
|
||||
}
|
||||
if label == "" {
|
||||
label = channel.Type
|
||||
}
|
||||
}
|
||||
counts[channelType]++
|
||||
if siteHost := strings.TrimSpace(session.SiteHost); siteHost != "" {
|
||||
label += " · " + siteHost
|
||||
}
|
||||
counts[label]++
|
||||
}
|
||||
keys := make([]string, 0, len(counts))
|
||||
for key := range counts {
|
||||
@@ -412,11 +421,7 @@ func (h *StatisticsHandler) ChannelDistribution(c *gin.Context) {
|
||||
sort.Strings(keys)
|
||||
data := make([]gin.H, 0, len(keys))
|
||||
for _, key := range keys {
|
||||
label := labels[key]
|
||||
if label == "" {
|
||||
label = key
|
||||
}
|
||||
data = append(data, gin.H{"type": label, "value": counts[key]})
|
||||
data = append(data, gin.H{"type": key, "value": counts[key]})
|
||||
}
|
||||
middleware.JSON(c, data)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user