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 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BD=9C=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:"作业提交次数"` } From 6046fbcba8b72585283d3c0be885ba1f062c5576 Mon Sep 17 00:00:00 2001 From: majun <3060162534@qq.com> Date: Tue, 24 Dec 2024 16:28:54 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=97=B6=E9=97=B4=E9=99=90=E5=88=B6v3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- link_homework/internal/logic/homework/homework.go | 232 +--------------------- 1 file changed, 4 insertions(+), 228 deletions(-) diff --git a/link_homework/internal/logic/homework/homework.go b/link_homework/internal/logic/homework/homework.go index 4afdfcb..278cf9a 100644 --- a/link_homework/internal/logic/homework/homework.go +++ b/link_homework/internal/logic/homework/homework.go @@ -26,83 +26,6 @@ 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)) @@ -167,10 +90,8 @@ func UpdateHomework(ctx context.Context, homeworkList []*entity.ActivityInteract func InitHomework(ctx context.Context, homeworkList []*entity.ActivityInteractiveGroup) []*entity.ActivityInteractiveGroup { for _, v := range homeworkList { if v.Status == 2 { - if v.Status != 0 { - result, _ := dao.ActivityInteractiveRecord.Ctx(ctx).Where("group_id", v.Id).Group("form_id").Limit(1).Value("COUNT(*)") - v.Count = result.Int() - } + result, _ := dao.ActivityInteractiveRecord.Ctx(ctx).Where("group_id", v.Id).Group("form_id").Limit(1).Value("COUNT(*)") + v.Count = result.Int() } } @@ -257,9 +178,9 @@ func (s *sHomework) EditHomework(ctx context.Context, req *homework.EditHomework return fmt.Errorf("作业已结束,无法修改!") } else { // 判断作业是否已开始 - flag := true + flag := true //作业未开始 if nowhomework.StartDate.Before(gtime.Now()) { - flag = false + flag = false //作业已开始 } // 判断提交修改表单状态 status := 0 @@ -335,148 +256,3 @@ 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 -// } -//}