|
@ -2,6 +2,7 @@ package homework |
|
|
|
|
|
|
|
|
import ( |
|
|
import ( |
|
|
"context" |
|
|
"context" |
|
|
|
|
|
"encoding/json" |
|
|
"fmt" |
|
|
"fmt" |
|
|
"github.com/gogf/gf/v2/database/gdb" |
|
|
"github.com/gogf/gf/v2/database/gdb" |
|
|
"github.com/gogf/gf/v2/frame/g" |
|
|
"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) { |
|
|
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 = 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") |
|
|
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 { |
|
|
for _, v := range homeworkList { |
|
|
if v.StartDate.After(gtime.Now()) { |
|
|
if v.StartDate.After(gtime.Now()) { |
|
|
v.Status = 0 |
|
|
v.Status = 0 |
|
@ -36,7 +63,15 @@ func (s *sHomework) GetHomeworkList(ctx context.Context, pageNo int, pageSize in |
|
|
} else { |
|
|
} else { |
|
|
v.Status = 1 |
|
|
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 |
|
|
return |
|
|
} |
|
|
} |
|
@ -84,6 +119,11 @@ func (s *sHomework) AddHomework(ctx context.Context, req *homework.AddHomeworkRe |
|
|
GroupId: Id, |
|
|
GroupId: Id, |
|
|
}).Insert() |
|
|
}).Insert() |
|
|
} |
|
|
} |
|
|
|
|
|
// 添加数据后,删除所有缓存
|
|
|
|
|
|
keys, err := g.Redis().Keys(ctx, "*-* homeworklist") |
|
|
|
|
|
if len(keys) > 0 { |
|
|
|
|
|
_, err = g.Redis().Del(ctx, keys...) |
|
|
|
|
|
} |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -154,6 +194,11 @@ func (s *sHomework) EditHomework(ctx context.Context, req *homework.EditHomework |
|
|
}).WherePri(v.Id).Update() |
|
|
}).WherePri(v.Id).Update() |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
// 修改数据后,删除所有缓存
|
|
|
|
|
|
keys, _ := g.Redis().Keys(ctx, "*-* homeworklist") |
|
|
|
|
|
if len(keys) > 0 { |
|
|
|
|
|
_, _ = g.Redis().Del(ctx, keys...) |
|
|
|
|
|
} |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
} |
|
|
} |