|
@@ -1,12 +1,14 @@
|
|
|
package yb
|
|
|
|
|
|
import (
|
|
|
+ "fmt"
|
|
|
"github.com/rdlucklib/rdluck_tools/paging"
|
|
|
"hongze/hz_crm_api/controllers"
|
|
|
"hongze/hz_crm_api/models"
|
|
|
"hongze/hz_crm_api/models/yb"
|
|
|
"hongze/hz_crm_api/models/yb/response"
|
|
|
"hongze/hz_crm_api/utils"
|
|
|
+ "sync"
|
|
|
)
|
|
|
|
|
|
type ProductCensusController struct {
|
|
@@ -83,7 +85,7 @@ func (this *ProductCensusController) UserVisitCount() {
|
|
|
// @Title 用户阅读统计详情
|
|
|
// @Description 用户阅读统计详情
|
|
|
// @Param UserId query int true "用户ID"
|
|
|
-// @Param ProductType query int true "产品类型:1-语音播报 2-视频社区 3-问答社区"
|
|
|
+// @Param ProductType query int true "产品类型:1-语音播报 2-视频社区 3-问答社区 99-全部"
|
|
|
// @Param ProductId query int false "产品ID:仅语音播报传该参数"
|
|
|
// @Param ClickSort query int false "点击量排序:1-升序 2-降序"
|
|
|
// @Param PageSize query int false "页码"
|
|
@@ -205,6 +207,7 @@ func (this *ProductCensusController) UserVisitCountDetail() {
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
// 问答社区
|
|
|
if productType == 3 {
|
|
|
t, list, e := yb.GetCommunityQuestionVisitCountByUserId(userId, startSize, pageSize, orderRule)
|
|
@@ -240,6 +243,152 @@ func (this *ProductCensusController) UserVisitCountDetail() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 全部
|
|
|
+ if productType == 99 {
|
|
|
+ listTotal, list, e := yb.GetUserAllYbProductVisitCountPageList(userId, startSize, pageSize, orderRule)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取用户所有产品点击量失败, Err: " + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ total = listTotal
|
|
|
+
|
|
|
+ sectionIds := make([]int, 0)
|
|
|
+ videoIds := make([]int, 0)
|
|
|
+ rsVideoIds := make([]int, 0)
|
|
|
+ questionIds := make([]int, 0)
|
|
|
+
|
|
|
+ for _, v := range list {
|
|
|
+ // 语音播报-取出板块ID
|
|
|
+ if v.ProductType == 1 && v.SectionId > 0 && !utils.InArrayByInt(sectionIds, v.SectionId) {
|
|
|
+ sectionIds = append(sectionIds, v.SectionId)
|
|
|
+ }
|
|
|
+ // 视频社区-取出视频ID
|
|
|
+ if v.ProductType == 2 && v.TitleId > 0 {
|
|
|
+ if v.VideoType == 1 && !utils.InArrayByInt(videoIds, v.TitleId) {
|
|
|
+ videoIds = append(videoIds, v.TitleId)
|
|
|
+ }
|
|
|
+ if v.VideoType == 2 && !utils.InArrayByInt(rsVideoIds, v.TitleId) {
|
|
|
+ rsVideoIds = append(rsVideoIds, v.TitleId)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 问答社区-取出问题ID
|
|
|
+ if v.ProductType == 3 && v.TitleId > 0 && !utils.InArrayByInt(questionIds, v.TitleId) {
|
|
|
+ questionIds = append(questionIds, v.TitleId)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var sectionErr, videoErr, questionErr error
|
|
|
+ wg := sync.WaitGroup{}
|
|
|
+ wg.Add(3)
|
|
|
+
|
|
|
+ // 板块名称map
|
|
|
+ sectionNameMap := make(map[int]string, 0)
|
|
|
+ go func() {
|
|
|
+ defer func() {
|
|
|
+ wg.Done()
|
|
|
+ }()
|
|
|
+
|
|
|
+ sectionList, e := yb.GetVoiceSectionByIds(sectionIds)
|
|
|
+ if e != nil {
|
|
|
+ sectionErr = fmt.Errorf("获取语音播报板块列表失败, Err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range sectionList {
|
|
|
+ sectionNameMap[v.SectionId] = v.SectionName
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ // 视频社区标题map
|
|
|
+ videoTitleMap := make(map[int]string, 0)
|
|
|
+ rsVideoTitleMap := make(map[int]string, 0)
|
|
|
+ go func() {
|
|
|
+ defer func() {
|
|
|
+ wg.Done()
|
|
|
+ }()
|
|
|
+
|
|
|
+ videoList, e := yb.GetCommunityVideoListByIds(videoIds)
|
|
|
+ if e != nil {
|
|
|
+ videoErr = fmt.Errorf("获取视频社区列表失败, Err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range videoList {
|
|
|
+ videoTitleMap[v.CommunityVideoId] = v.Title
|
|
|
+ }
|
|
|
+
|
|
|
+ rsVideoList, e := yb.GetRoadVideoListByIds(rsVideoIds)
|
|
|
+ if e != nil {
|
|
|
+ videoErr = fmt.Errorf("获取路演视频列表失败, Err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range rsVideoList {
|
|
|
+ rsVideoTitleMap[v.RoadVideoId] = v.Title
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ // 问答社区标题map
|
|
|
+ questionTitleMap := make(map[int]string, 0)
|
|
|
+ go func() {
|
|
|
+ defer func() {
|
|
|
+ wg.Done()
|
|
|
+ }()
|
|
|
+
|
|
|
+ questionList, e := yb.GetQuestionListByIds(questionIds)
|
|
|
+ if e != nil {
|
|
|
+ questionErr = fmt.Errorf("获取问答列表失败, Err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range questionList {
|
|
|
+ questionTitleMap[v.CommunityQuestionId] = v.QuestionContent
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ wg.Wait()
|
|
|
+ if sectionErr != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = sectionErr.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if videoErr != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = videoErr.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if questionErr != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = questionErr.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 填充产品名/标题
|
|
|
+ for _, v := range list {
|
|
|
+ d := new(response.ProductCensusUserVisitCountDetail)
|
|
|
+ d.VisitCount = v.VisitCount
|
|
|
+ d.Source = v.NewSource
|
|
|
+ d.RecentTime = v.RecentTime
|
|
|
+ if v.ProductType == 1 {
|
|
|
+ d.ProductName = sectionNameMap[v.SectionId]
|
|
|
+ d.Title = v.Title
|
|
|
+ }
|
|
|
+ if v.ProductType == 2 {
|
|
|
+ if v.VideoType == 1 {
|
|
|
+ d.ProductName = "5分钟小视频"
|
|
|
+ d.Title = videoTitleMap[v.TitleId]
|
|
|
+ }
|
|
|
+ if v.VideoType == 2 {
|
|
|
+ d.ProductName = "线上路演"
|
|
|
+ d.Title = rsVideoTitleMap[v.TitleId]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if v.ProductType == 3 {
|
|
|
+ d.ProductName = "问答社区"
|
|
|
+ d.Title = questionTitleMap[v.TitleId]
|
|
|
+ }
|
|
|
+
|
|
|
+ respList = append(respList, d)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
page := paging.GetPaging(currentIndex, pageSize, total)
|
|
|
resp := response.ProductCensusUserVisitCountDetailResp{
|
|
|
List: respList,
|