ソースを参照

获取收藏图表列表

kobe6258 4 ヶ月 前
コミット
48f22c2a19

+ 57 - 0
controllers/user/bookmark_controller.go

@@ -407,6 +407,29 @@ func (bk *BookMarkController) BookMarkList(sourceType string) {
 	})
 }
 
+// ChartList 获取收藏列表
+// @Description 获取收藏列表
+// @Success 200 {object}
+// @router /chartList [get]
+func (bk *BookMarkController) ChartList() {
+	controllers.Wrap(&bk.BaseController, func() (result *controllers.WrapData, err error) {
+		result = bk.InitWrapData("分页查询收藏列表失败")
+		userInfo := bk.Data["user"].(user.User)
+		var list []userService.BookMarkChart
+		list, err = getAllChartList(userInfo.Id)
+		if err != nil {
+			err = exception.NewWithException(exception.GetBookMarkListFailed, err.Error())
+			bk.FailedResult("分页查询收藏列表失败", result)
+			return
+		}
+		bookMarks := new(page.PageResult)
+		bookMarks.Data = list
+		bk.SuccessResult("分页查询收藏列表成功", bookMarks, result)
+		return
+
+	})
+}
+
 func getReportList(info page.PageInfo, templateUserId int, sourceIds []int) (list []userService.BookMarkReport, err error) {
 	sourceIds, err = userService.GetBookMarkPageRangeBySourceType(templateUserId, info, Report, sourceIds)
 	if err != nil {
@@ -483,3 +506,37 @@ func getChartList(info page.PageInfo, templateUserId int) (list []userService.Bo
 	wg.Wait()
 	return
 }
+
+func getAllChartList(templateUserId int) (list []userService.BookMarkChart, err error) {
+	sourceIds, err := userService.GetBookMarkListBySourceType(templateUserId, Chart)
+	if err != nil {
+		return
+	}
+	// 创建一个切片来存储结果,长度与 sourceIds 相同
+	list = make([]userService.BookMarkChart, len(sourceIds))
+	// 使用 WaitGroup 来等待所有 goroutine 完成
+	var wg sync.WaitGroup
+	wg.Add(len(sourceIds))
+	// 使用 Mutex 来保护对 list 的写操作
+	var mu sync.Mutex
+	// 并发获取数据
+	for index, sourceId := range sourceIds {
+		go func(index int, id int) {
+			defer wg.Done()
+			var data chartService.ChartInfo
+			data, err = chartService.GetChartById(id)
+			chartInfo := ConvertToBookMarkChart(data)
+			if err != nil {
+				logger.Error("获取数据失败: %v", err)
+			}
+			// 使用 Mutex 保护对 list 的写操作
+			mu.Lock()
+			list[index] = chartInfo
+			mu.Unlock()
+		}(index, sourceId)
+
+	}
+	// 等待所有 goroutine 完成
+	wg.Wait()
+	return
+}

+ 9 - 1
domian/user/bookmark_service.go

@@ -85,7 +85,15 @@ func GetBookMarkPageBySourceType(templateUserId int, sourceType string, info pag
 	offset := page.StartIndex(info.Current, info.PageSize)
 	return userDao.GetBookMarkPageBySourceType(templateUserId, sourceTypeItem, offset, info.PageSize)
 }
-
+func GetBookMarkListBySourceType(templateUserId int, sourceType string) (sourceIds []int, err error) {
+	sourceTypeItem := sourceTransMap[sourceType]
+	if sourceTypeItem == "" {
+		logger.Error("非法的资源类型")
+		err = errors.New("非法的资源类型")
+		return
+	}
+	return userDao.GetBookMarkListBySourceType(templateUserId, sourceTypeItem)
+}
 func GetBookMarkPageRangeBySourceType(templateUserId int, sourceType string, info page.PageInfo, sourceIds []int) (filterSourceIds []int, err error) {
 	sourceTypeItem := sourceTransMap[sourceType]
 	if sourceTypeItem == "" {

+ 5 - 1
models/user/user_bookmark.go

@@ -72,7 +72,11 @@ func GetBookMarkPageBySourceType(templateUserId int, sourceType SourceType, offs
 	err = db.Model(&UserBookmark{}).Select("source_id").Where("user_id = ?  AND source_type = ? and status =?", templateUserId, sourceType, Marked).Order("marked_time DESC").Offset(offset).Limit(limit).Scan(&sourceIds).Error
 	return
 }
-
+func GetBookMarkListBySourceType(templateUserId int, sourceType SourceType) (sourceIds []int, err error) {
+	db := models.Main()
+	err = db.Model(&UserBookmark{}).Select("source_id").Where("user_id = ?  AND source_type = ? and status =?", templateUserId, sourceType, Marked).Order("marked_time DESC").Scan(&sourceIds).Error
+	return
+}
 func GetBookMarkPageRangeBySourceType(templateUserId int, sourceType SourceType, offset int, limit int, sourceIds []int) (filterSourceIds []int, err error) {
 	db := models.Main()
 	err = db.Model(&UserBookmark{}).Select("source_id").Where("user_id = ?  AND source_type = ? and source_id in ? and status =? ", templateUserId, sourceType, sourceIds, Marked).Order("marked_time DESC").Offset(offset).Limit(limit).Scan(&filterSourceIds).Error

+ 9 - 0
routers/commentsRouter.go

@@ -453,6 +453,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/user:BookMarkController"] = append(beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/user:BookMarkController"],
+        beego.ControllerComments{
+            Method: "ChartList",
+            Router: `/chartList`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/user:BookMarkController"] = append(beego.GlobalControllerRouter["eta/eta_mini_ht_api/controllers/user:BookMarkController"],
         beego.ControllerComments{
             Method: "CheckBookMark",

+ 3 - 0
service/user/user_service.go

@@ -520,6 +520,9 @@ func GetTotalBookMarkPageBySourceType(userId int, sourceType string) (total int6
 func GetBookMarkPageBySourceType(userId int, pageInfo page.PageInfo, sourceType string) (sourceIds []int, err error) {
 	return userService.GetBookMarkPageBySourceType(userId, sourceType, pageInfo)
 }
+func GetBookMarkListBySourceType(userId int, sourceType string) (sourceIds []int, err error) {
+	return userService.GetBookMarkListBySourceType(userId, sourceType)
+}
 
 func GetBookMarkPageRangeBySourceType(userId int, pageInfo page.PageInfo, sourceType string, sourceIds []int) (filterSourceIds []int, err error) {
 	return userService.GetBookMarkPageRangeBySourceType(userId, sourceType, pageInfo, sourceIds)