From 4149dfff7264a87bb45455137f1bd02b0e716890 Mon Sep 17 00:00:00 2001 From: majun <3060162534@qq.com> Date: Sat, 21 Dec 2024 15:07:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BD=9C=E4=B8=9A=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E6=AC=A1=E6=95=B0=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- link_homework/internal/logic/homework/homework.go | 39 +++++++++++++++++++---- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/link_homework/internal/logic/homework/homework.go b/link_homework/internal/logic/homework/homework.go index 2491b42..3edac53 100644 --- a/link_homework/internal/logic/homework/homework.go +++ b/link_homework/internal/logic/homework/homework.go @@ -32,17 +32,25 @@ func (s *sHomework) GetHomeworkList(ctx context.Context, pageNo int, pageSize in if value.String() != "" { // 如果Redis中有数据,尝试解析为ActivityInteractiveGroup列表 err = json.Unmarshal(value.Bytes(), &homeworkList) //反序列化 - homeworkList = UpdateHomework(ctx, homeworkList) + homeworklist, cnt := UpdateHomework(ctx, homeworkList) + + if cnt > 0 { + // 将修改后的作业列表序列化并存储到Redis,更新频繁变更的数据 + homeworkListJson, _ := json.Marshal(homeworklist) + _, err = g.Redis().Set(ctx, fmt.Sprintf("%d-%d homeworklist", pageNo, pageSize), homeworkListJson) + } + if err != nil { return nil, err } - return + return homeworklist, err } // 如果Redis中没有数据,查询数据库 err = dao.ActivityInteractiveGroup.Ctx(ctx).With(entity.Live{}).OrderDesc("created_at").Page(pageNo, pageSize).Scan(&homeworkList) err = g.DB("cms").Model("fx_article").Where("id", gdb.ListItemValuesUnique(homeworkList, "ArticleId")).ScanList(&homeworkList, "Article", "id:ArticleId") - homeworkList = UpdateHomework(ctx, homeworkList) + homeworkList = InitHomework(ctx, homeworkList) + homeworkList, _ = UpdateHomework(ctx, homeworkList) if err != nil { return nil, err } @@ -54,22 +62,41 @@ func (s *sHomework) GetHomeworkList(ctx context.Context, pageNo int, pageSize in return } -func UpdateHomework(ctx context.Context, homeworkList []*entity.ActivityInteractiveGroup) []*entity.ActivityInteractiveGroup { +func UpdateHomework(ctx context.Context, homeworkList []*entity.ActivityInteractiveGroup) ([]*entity.ActivityInteractiveGroup, int) { + cnt := 0 for _, v := range homeworkList { if v.Status != 2 { if v.StartDate.After(gtime.Now()) { v.Status = 0 } else if v.EndDate.Before(gtime.Now()) { v.Status = 2 + cnt++ + _, _ = dao.ActivityInteractiveGroup.Ctx(ctx).Data(do.ActivityInteractiveGroup{ + Status: 2, + }).WherePri(v.Id).Update() } else { v.Status = 1 } - if v.Status == 1 { - v.Count, _ = dao.ActivityInteractiveRecord.Ctx(ctx).Where("group_id", v.Id).Group("form_id").Limit(1).Count() + if v.Status != 0 { + rCount, _ := dao.ActivityInteractiveRecord.Ctx(ctx).Where("group_id", v.Id).Count() + tCount, _ := dao.ActivityInteractiveForm.Ctx(ctx).Where("group_id", v.Id).Count() + v.Count = rCount / tCount } } } + return homeworkList, cnt +} + +func InitHomework(ctx context.Context, homeworkList []*entity.ActivityInteractiveGroup) []*entity.ActivityInteractiveGroup { + for _, v := range homeworkList { + if v.Status == 2 { + rCount, _ := dao.ActivityInteractiveRecord.Ctx(ctx).Where("group_id", v.Id).Count() + tCount, _ := dao.ActivityInteractiveForm.Ctx(ctx).Where("group_id", v.Id).Count() + v.Count = rCount / tCount + } + } + return homeworkList }