From 7f9f0ab9f9518f8036e12d3a813e0485f2ad7dcf Mon Sep 17 00:00:00 2001 From: majun <3060162534@qq.com> Date: Tue, 24 Dec 2024 15:37:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B7=BB=E5=8A=A0=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E6=97=B6=E9=97=B4=E9=99=90=E5=88=B6v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- link_homework/internal/logic/homework/homework.go | 228 ++++++++++++++++++++- .../model/entity/activity_interactive_group.go | 2 +- 2 files changed, 226 insertions(+), 4 deletions(-) diff --git a/link_homework/internal/logic/homework/homework.go b/link_homework/internal/logic/homework/homework.go index a1c185f..4afdfcb 100644 --- a/link_homework/internal/logic/homework/homework.go +++ b/link_homework/internal/logic/homework/homework.go @@ -26,6 +26,83 @@ func New() service.IHomework { return &sHomework{} } +//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, cnt := UpdateHomework(ctx, homeworkList) +// +// if cnt > 0 { +// // 将修改后的作业列表排序后序列化并存储到Redis,更新频繁变更的数据 +// sort.Slice(homeworklist, func(i, j int) bool { +// return homeworklist[i].Status < homeworklist[j].Status +// }) +// homeworkListJson, _ := json.Marshal(homeworklist) +// _, err = g.Redis().Set(ctx, fmt.Sprintf("%d-%d homeworklist", pageNo, pageSize), homeworkListJson) +// } +// +// if err != nil { +// return nil, err +// } +// return homeworklist, err +// } +// +// // 如果Redis中没有数据,查询数据库 +// err = dao.ActivityInteractiveGroup.Ctx(ctx).With(entity.Live{}).Order("status asc, created_at desc").Page(pageNo, pageSize).Scan(&homeworkList) +// err = g.DB("cms").Model("fx_article").Where("id", gdb.ListItemValuesUnique(homeworkList, "ArticleId")).ScanList(&homeworkList, "Article", "id:ArticleId") +// homeworkList = InitHomework(ctx, homeworkList) +// homeworkList, _ = UpdateHomework(ctx, homeworkList) +// if err != nil { +// return nil, err +// } +// +// // 将查询到的作业列表序列化并存储到Redis,更新频繁变更的数据 +// homeworkListJson, _ := json.Marshal(homeworkList) +// _, err = g.Redis().Set(ctx, fmt.Sprintf("%d-%d homeworklist", pageNo, pageSize), homeworkListJson) +// +// return +//} +// +//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 = 1 +// } else if v.EndDate.Before(gtime.Now().AddDate(0, 0, -1)) { +// v.Status = 2 +// cnt++ +// _, _ = dao.ActivityInteractiveGroup.Ctx(ctx).Data(do.ActivityInteractiveGroup{ +// Status: 2, +// }).WherePri(v.Id).Update() +// } else { +// v.Status = 0 +// } +// if v.Status != 1 { +// result, _ := dao.ActivityInteractiveRecord.Ctx(ctx).Where("group_id", v.Id).Group("form_id").Limit(1).Value("COUNT(*)") +// v.Count = result.Int() +// } +// } +// } +// +// return homeworkList, cnt +//} +// +//func InitHomework(ctx context.Context, homeworkList []*entity.ActivityInteractiveGroup) []*entity.ActivityInteractiveGroup { +// for _, v := range homeworkList { +// if v.Status == 2 { +// if v.Status != 1 { +// result, _ := dao.ActivityInteractiveRecord.Ctx(ctx).Where("group_id", v.Id).Group("form_id").Limit(1).Value("COUNT(*)") +// v.Count = result.Int() +// } +// } +// } +// +// return homeworkList +//} + 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)) @@ -68,7 +145,7 @@ func UpdateHomework(ctx context.Context, homeworkList []*entity.ActivityInteract if v.Status != 2 { if v.StartDate.After(gtime.Now()) { v.Status = 0 - } else if v.EndDate.Before(gtime.Now()) { + } else if v.EndDate.Before(gtime.Now().AddDate(0, 0, -1)) { v.Status = 2 cnt++ _, _ = dao.ActivityInteractiveGroup.Ctx(ctx).Data(do.ActivityInteractiveGroup{ @@ -176,7 +253,7 @@ func (s *sHomework) EditHomework(ctx context.Context, req *homework.EditHomework // 判断作业是否已结束 var nowhomework *entity.ActivityInteractiveGroup err = dao.ActivityInteractiveGroup.Ctx(ctx).WherePri(req.Id).Scan(&nowhomework) - if nowhomework.EndDate.Before(gtime.Now()) { + if nowhomework.EndDate.Before(gtime.Now().AddDate(0, 0, -1)) { return fmt.Errorf("作业已结束,无法修改!") } else { // 判断作业是否已开始 @@ -187,7 +264,7 @@ func (s *sHomework) EditHomework(ctx context.Context, req *homework.EditHomework // 判断提交修改表单状态 status := 0 if req.StartDate.Before(gtime.Now()) { - if req.EndDate.Before(gtime.Now()) { + if req.EndDate.Before(gtime.Now().AddDate(0, 0, -1)) { status = 2 } else { status = 1 @@ -258,3 +335,148 @@ func (s *sHomework) EditHomework(ctx context.Context, req *homework.EditHomework return } } + +//func (s *sHomework) AddHomework(ctx context.Context, req *homework.AddHomeworkReq) (err error) { +// // 判断作业是否已结束 +// status := 1 +// if req.StartDate.Before(gtime.Now()) { +// if req.EndDate.Before(gtime.Now().AddDate(0, 0, -1)) { +// return fmt.Errorf("作业时间已过期,无法添加!") +// } else { +// status = 0 +// } +// } +// var Id int64 +// if req.ArticleId == 0 { // 关联文章 +// Id, err = dao.ActivityInteractiveGroup.Ctx(ctx).Data(do.ActivityInteractiveGroup{ +// Name: req.Name, +// Status: status, +// ClubType: req.ClubType, +// LiveId: req.LiveId, +// StartDate: req.StartDate, +// EndDate: req.EndDate, +// }).InsertAndGetId() +// } else if req.LiveId == 0 { // 关联直播 +// Id, err = dao.ActivityInteractiveGroup.Ctx(ctx).Data(do.ActivityInteractiveGroup{ +// Name: req.Name, +// Status: status, +// ClubType: req.ClubType, +// ArticleId: req.ArticleId, +// StartDate: req.StartDate, +// EndDate: req.EndDate, +// }).InsertAndGetId() +// } else { +// return fmt.Errorf("不能同时关联文章和直播!") +// } +// // 添加所有题目 +// for _, v := range req.Questions { +// _, err = dao.ActivityInteractiveForm.Ctx(ctx).Data(do.ActivityInteractiveForm{ +// Name: req.Name, +// Description: v.Description, +// Content: v.Content, +// Status: status, +// Type: v.Type, +// GroupId: Id, +// }).Insert() +// } +// // 添加数据后,删除所有缓存 +// keys, err := g.Redis().Keys(ctx, "*-* homeworklist") +// if len(keys) > 0 { +// _, err = g.Redis().Del(ctx, keys...) +// } +// +// //删除客户端缓存 +// keys, err = g.Redis().Keys(ctx, "* ClientHomeworkList") +// if len(keys) > 0 { +// _, err = g.Redis().Del(ctx, keys...) +// } +// +// return +//} +// +//func (s *sHomework) EditHomework(ctx context.Context, req *homework.EditHomeworkReq) (err error) { +// // 判断作业是否已结束 +// var nowhomework *entity.ActivityInteractiveGroup +// err = dao.ActivityInteractiveGroup.Ctx(ctx).WherePri(req.Id).Scan(&nowhomework) +// if nowhomework.EndDate.Before(gtime.Now().AddDate(0, 0, -1)) { +// return fmt.Errorf("作业已结束,无法修改!") +// } else { +// // 判断作业是否已开始 +// flag := true // 作业未开始 +// if nowhomework.StartDate.Before(gtime.Now()) { //作业已开始 +// flag = false +// } +// // 判断提交修改表单状态 +// status := 1 +// if req.StartDate.Before(gtime.Now()) { +// if req.EndDate.Before(gtime.Now().AddDate(0, 0, -1)) { +// status = 2 +// } else { +// status = 0 +// } +// } +// // 判断是否关联文章或直播 +// if req.ArticleId == 0 { +// _, err = g.Model("activity_interactive_group").Data(g.Map{ +// "name": req.Name, +// "status": status, +// "club_type": req.ClubType, +// "article_id": nil, +// "live_id": req.LiveId, +// "start_date": req.StartDate, +// "end_date": req.EndDate, +// }).WherePri(req.Id).Update() +// } else if req.LiveId == 0 { +// _, err = g.Model("activity_interactive_group").Data(g.Map{ +// "name": req.Name, +// "status": status, +// "club_type": req.ClubType, +// "article_id": req.ArticleId, +// "live_id": nil, +// "start_date": req.StartDate, +// "end_date": req.EndDate, +// }).WherePri(req.Id).Update() +// } else { +// return fmt.Errorf("不能同时关联文章和直播!") +// } +// if flag { // 未开始 +// _, err = dao.ActivityInteractiveForm.Ctx(ctx).Where("group_id", req.Id).Delete() +// for _, v := range req.Questions { +// _, err = dao.ActivityInteractiveForm.Ctx(ctx).Data(do.ActivityInteractiveForm{ +// Name: req.Name, +// Description: v.Description, +// Content: v.Content, +// Status: status, +// Type: v.Type, +// GroupId: req.Id, +// }).Insert() +// } +// } else { // 已开始 +// for _, v := range req.Questions { +// _, err = dao.ActivityInteractiveForm.Ctx(ctx).Data(do.ActivityInteractiveForm{ +// Name: req.Name, +// Description: v.Description, +// Content: v.Content, +// Status: status, +// }).WherePri(v.Id).Update() +// } +// } +// // 修改数据后,删除所有缓存 +// keys, _ := g.Redis().Keys(ctx, "*-* homeworklist") +// if len(keys) > 0 { +// _, _ = g.Redis().Del(ctx, keys...) +// } +// +// //删除客户端缓存 +// keys, err = g.Redis().Keys(ctx, "* ClientHomeworkList") +// if len(keys) > 0 { +// _, err = g.Redis().Del(ctx, keys...) +// } +// keys, err = g.Redis().Keys(ctx, "* HomeworkQuestions") +// if len(keys) > 0 { +// _, err = 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 d71670a..869816a 100644 --- a/link_homework/internal/model/entity/activity_interactive_group.go +++ b/link_homework/internal/model/entity/activity_interactive_group.go @@ -22,6 +22,6 @@ 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:"关联直播"` // 关联直播 - Form []*ActivityInteractiveForm `json:"form" orm:"with:group_id=id" description:"关联题目"` + Form []*ActivityInteractiveForm `json:"form" orm:"with:group_id=id" description:"关联题目"` Count int `json:"count" description:"作业提交次数"` }