From f62a48f51040f8048d23756828e8b91739d7ca3c Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 29 Jul 2025 10:28:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E9=A2=98=E5=BA=93?= =?UTF-8?q?=E4=B8=8D=E5=85=81=E8=AE=B8=E9=87=8D=E5=A4=8D=E7=9A=84=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E9=80=BB=E8=BE=912?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/questionQa.go | 32 +++++++++++ api/dao/QuestionQa.go | 107 +++++++++++++++++++++++++++++++++++ api/requests/QuestionQa.go | 14 +++++ api/router/router.go | 3 + 4 files changed, 156 insertions(+) diff --git a/api/controller/questionQa.go b/api/controller/questionQa.go index 4d51f6c..fab07c8 100644 --- a/api/controller/questionQa.go +++ b/api/controller/questionQa.go @@ -59,6 +59,38 @@ func (r *QuestionQa) GetQuestionQaPage(c *gin.Context) { responses.OkWithData(result, c) } +// GetQuestionQaList 获取问答题库列表 +func (r *QuestionQa) GetQuestionQaList(c *gin.Context) { + questionQaRequest := requests.QuestionQaRequest{} + req := questionQaRequest.GetQuestionQaList + if err := c.ShouldBind(&req); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(req); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + questionQaDao := dao.QuestionQaDao{} + questionQa, err := questionQaDao.GetQuestionQaListSearch(req) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 处理返回值 + g := dto.GetQuestionQaListDto(questionQa) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + responses.OkWithData(g, c) +} + // AddQuestionQa 新增问答题库 func (r *QuestionQa) AddQuestionQa(c *gin.Context) { questionQaRequest := requests.QuestionQaRequest{} diff --git a/api/dao/QuestionQa.go b/api/dao/QuestionQa.go index 8846207..d2c5a91 100644 --- a/api/dao/QuestionQa.go +++ b/api/dao/QuestionQa.go @@ -211,6 +211,113 @@ func (r *QuestionQaDao) GetQuestionQaPageSearch(req requests.GetQuestionQaPage, return m, totalRecords, nil } +// GetQuestionQaListSearch 获取列表 +func (r *QuestionQaDao) GetQuestionQaListSearch(req requests.GetQuestionQaList) (m []*model.QuestionQa, err error) { + // 构建查询条件 + query := global.Db.Model(&model.Label{}) + + // 名称 + if req.QaName != "" { + query = query.Where("qa_name LIKE ?", "%"+req.QaName+"%") + } + + // 类型 + query = query.Where("qa_type = ?", req.QaType) + + // 状态 + if req.QaStatus != nil { + query = query.Where("qa_status = ?", req.QaStatus) + } + + // 规则解释 + if req.QaRuleContent != "" { + query = query.Where("qa_rule_content LIKE ?", "%"+req.QaRuleContent+"%") + } + + // 展示类型 + if req.QaDisplayType != nil { + query = query.Where("qa_display_type = ?", req.QaDisplayType) + } + + // 过期时间 + if req.QaExpireTime != "" { + qaExpireTime := strings.Split(req.QaExpireTime, "&") + if len(qaExpireTime) == 2 { + startTime, _ := time.Parse("2006-01-02", qaExpireTime[0]) + endTime, _ := time.Parse("2006-01-02", qaExpireTime[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("qa_expire_time BETWEEN ? AND ?", startTime, endTime) + } + } + + // 创建时间 + if req.CreatedAt != "" { + createdAt := strings.Split(req.CreatedAt, "&") + if len(createdAt) == 2 { + startTime, _ := time.Parse("2006-01-02", createdAt[0]) + endTime, _ := time.Parse("2006-01-02", createdAt[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("created_at BETWEEN ? AND ?", startTime, endTime) + } + } + + // 修改时间 + if req.UpdatedAt != "" { + updatedAt := strings.Split(req.UpdatedAt, "&") + if len(updatedAt) == 2 { + startTime, _ := time.Parse("2006-01-02", updatedAt[0]) + endTime, _ := time.Parse("2006-01-02", updatedAt[1]) + + endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) + + query = query.Where("updated_at BETWEEN ? AND ?", startTime, endTime) + } + } + + // 排序 + if req.Order != nil { + // 有效期 + if req.Order.QaExpireTime != "" { + if req.Order.QaExpireTime != "desc" && req.Order.QaExpireTime != "asc" { + return nil, errors.New("排序字段错误") + } + + query = query.Order("qa_expire_time " + req.Order.QaExpireTime) + } + + // 题目数量 + if req.Order.QaQuantity != "" { + if req.Order.QaQuantity != "desc" && req.Order.QaQuantity != "asc" { + return nil, errors.New("排序字段错误") + } + + query = query.Order("qa_quantity " + req.Order.QaQuantity) + } + + // 修改时间 + if req.Order.UpdatedAt != "" { + if req.Order.UpdatedAt != "desc" && req.Order.UpdatedAt != "asc" { + return nil, errors.New("排序字段错误") + } + + query = query.Order("updated_at " + req.Order.UpdatedAt) + } + } + + // 排序 + query = query.Order("created_at desc") + + err = query.Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + // Inc 自增 func (r *QuestionQaDao) Inc(tx *gorm.DB, qaId int64, field string, numeral int) error { err := tx.Model(&model.QuestionQa{}).Where("qa_id = ?", qaId).UpdateColumn(field, gorm.Expr(field+" + ?", numeral)).Error diff --git a/api/requests/QuestionQa.go b/api/requests/QuestionQa.go index 5cd63e6..e06ded8 100644 --- a/api/requests/QuestionQa.go +++ b/api/requests/QuestionQa.go @@ -2,6 +2,7 @@ package requests type QuestionQaRequest struct { GetQuestionQaPage // 获取问答题库列表-分页 + GetQuestionQaList // 获取问答题库列表 AddQuestionQa // 新增问答题库 PutQuestionQa // 修改问答题库 PutQuestionQaPassword // 修改问答题库密码 @@ -25,6 +26,19 @@ type GetQuestionQaPage struct { Order *GetQuestionQaPageOrder `json:"order" form:"order" label:"排序"` } +// GetQuestionQaList 获取问答题库列表 +type GetQuestionQaList struct { + QaName string `json:"qa_name" form:"qa_name" label:"名称"` + QaType int `json:"qa_type" form:"qa_type" label:"题库类型" validate:"required,oneof=1 2 3"` // (1:常规模式 2:固定套题模式 3:多轮固定题型模式) + QaStatus *int `json:"qa_status" form:"qa_status" label:"状态"` // (1:正常 2:过期) + QaRuleContent string `json:"qa_rule_content" form:"qa_rule_content" label:"规则解释"` + QaDisplayType *int `json:"qa_display_type" form:"qa_display_type" label:"展示类型"` // (1:常规 2:飞花令) + QaExpireTime string `json:"qa_expire_time" form:"qa_expire_time" label:"过期时间"` // 注意:这里假设LocalTime转换为字符串格式处理 + CreatedAt string `json:"created_at" form:"created_at" label:"创建时间"` // 注意:这里假设LocalTime转换为字符串格式处理 + UpdatedAt string `json:"updated_at" form:"updated_at" label:"修改时间"` // 注意:这里假设LocalTime转换为字符串格式处理 + Order *GetQuestionQaPageOrder `json:"order" form:"order" label:"排序"` +} + // GetQuestionQaPageOrder 获取题目列表-分页-排序条件 type GetQuestionQaPageOrder struct { UpdatedAt string `json:"updated_at" form:"updated_at" label:"排序"` diff --git a/api/router/router.go b/api/router/router.go index 04ca44d..20e6ef3 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -162,6 +162,9 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 获取问答题库列表-分页 qaGroup.POST("/page", api.QuestionQa.GetQuestionQaPage) + // 获取问答题库列表 + qaGroup.POST("/list", api.QuestionQa.GetQuestionQaList) + // 新增问答题库 qaGroup.POST("", api.QuestionQa.AddQuestionQa)