diff --git a/link_homework/internal/controller/homework/homework.go b/link_homework/internal/controller/homework/homework.go index fb13e64..ac70043 100644 --- a/link_homework/internal/controller/homework/homework.go +++ b/link_homework/internal/controller/homework/homework.go @@ -1,6 +1,7 @@ package homework import ( + "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "link_homework/api/v1/homework" "link_homework/internal/model/dto" @@ -22,6 +23,7 @@ func (c cHomework) GetHomeworkList(r *ghttp.Request) { }) } res, err := service.Homework().GetHomeworkList(r.Context(), req.PageNo, req.PageSize) + total, err := service.Homework().GetHomeworkListTotal(r.Context()) if err != nil { r.Response.WriteJsonExit(dto.Result{ Code: 400, @@ -31,7 +33,10 @@ func (c cHomework) GetHomeworkList(r *ghttp.Request) { r.Response.WriteJsonExit(dto.Result{ Code: 200, Message: "success", - Data: res, + Data: g.Map{ + "list": res, + "total": total, + }, }) } diff --git a/link_homework/internal/logic/homework/homework.go b/link_homework/internal/logic/homework/homework.go index cefe07f..a944f79 100644 --- a/link_homework/internal/logic/homework/homework.go +++ b/link_homework/internal/logic/homework/homework.go @@ -2,6 +2,7 @@ package homework import ( "context" + "encoding/json" "fmt" "github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/frame/g" @@ -26,8 +27,34 @@ func New() service.IHomework { } func (s *sHomework) GetHomeworkList(ctx context.Context, pageNo int, pageSize int) (homeworkList []*entity.ActivityInteractiveGroup, err error) { + // 从Redis中获取数据 + value, _ := g.Redis().Get(ctx, fmt.Sprintf("%d-%d homeworklist", pageNo, pageSize)) + if value.String() != "" { + // 如果Redis中有数据,尝试解析为ActivityInteractiveGroup列表 + err = json.Unmarshal(value.Bytes(), &homeworkList) //反序列化 + homeworkList = UpdateHomework(ctx, homeworkList) + if err != nil { + return nil, err + } + return + } + + // 如果Redis中没有数据,查询数据库 err = dao.ActivityInteractiveGroup.Ctx(ctx).With(entity.Live{}).Order("start_date desc, end_date desc").Page(pageNo, pageSize).Scan(&homeworkList) err = g.DB("cms").Model("fx_article").Where("id", gdb.ListItemValuesUnique(homeworkList, "ArticleId")).ScanList(&homeworkList, "Article", "id:ArticleId") + if err != nil { + return nil, err + } + + // 将查询到的作业列表序列化并存储到Redis,更新频繁变更的数据 + homeworkListJson, _ := json.Marshal(homeworkList) + _, _ = g.Redis().Set(ctx, fmt.Sprintf("%d-%d homeworklist", pageNo, pageSize), homeworkListJson) + homeworkList = UpdateHomework(ctx, homeworkList) + + return +} + +func UpdateHomework(ctx context.Context, homeworkList []*entity.ActivityInteractiveGroup) []*entity.ActivityInteractiveGroup { for _, v := range homeworkList { if v.StartDate.After(gtime.Now()) { v.Status = 0 @@ -36,7 +63,15 @@ func (s *sHomework) GetHomeworkList(ctx context.Context, pageNo int, pageSize in } else { v.Status = 1 } - v.Count, err = dao.ActivityInteractiveRecord.Ctx(ctx).Where("group_id", v.Id).Count() + v.Count, _ = dao.ActivityInteractiveRecord.Ctx(ctx).Where("group_id", v.Id).Group("form_id").Limit(1).Count() + } + return homeworkList +} + +func (s *sHomework) GetHomeworkListTotal(ctx context.Context) (total int, err error) { + total, err = dao.ActivityInteractiveGroup.Ctx(ctx).Count() + if err != nil { + return 0, err } return } @@ -84,6 +119,11 @@ func (s *sHomework) AddHomework(ctx context.Context, req *homework.AddHomeworkRe GroupId: Id, }).Insert() } + // 添加数据后,删除所有缓存 + keys, err := g.Redis().Keys(ctx, "*-* homeworklist") + if len(keys) > 0 { + _, err = g.Redis().Del(ctx, keys...) + } return } @@ -154,6 +194,11 @@ func (s *sHomework) EditHomework(ctx context.Context, req *homework.EditHomework }).WherePri(v.Id).Update() } } + // 修改数据后,删除所有缓存 + keys, _ := g.Redis().Keys(ctx, "*-* homeworklist") + if len(keys) > 0 { + _, _ = g.Redis().Del(ctx, keys...) + } return } } diff --git a/link_homework/internal/model/entity/activity_interactive_group.go b/link_homework/internal/model/entity/activity_interactive_group.go index 7be5d24..11d989d 100644 --- a/link_homework/internal/model/entity/activity_interactive_group.go +++ b/link_homework/internal/model/entity/activity_interactive_group.go @@ -22,5 +22,5 @@ type ActivityInteractiveGroup struct { EndDate *gtime.Time `json:"endDate" orm:"end_date" description:"作业结束时间"` // 作业结束时间 Article *FxArticle `json:"article" description:"关联文章"` // 关联文章 Live *Live `json:"live" orm:"with:id=live_id" description:"关联直播"` // 关联直播 - Count int `json:"count" description:"作业提交次数"` // 作业结束时间 + Count int `json:"count" description:"作业提交次数"` } diff --git a/link_homework/internal/service/homework.go b/link_homework/internal/service/homework.go index 668dd1c..24f864c 100644 --- a/link_homework/internal/service/homework.go +++ b/link_homework/internal/service/homework.go @@ -16,6 +16,7 @@ type ( GetHomeworkList(ctx context.Context, pageNo int, pageSize int) (homeworkList []*entity.ActivityInteractiveGroup, err error) AddHomework(ctx context.Context, req *homework.AddHomeworkReq) (err error) EditHomework(ctx context.Context, req *homework.EditHomeworkReq) (err error) + GetHomeworkListTotal(ctx context.Context) (total int, err error) } )