Initial commit: web_hghl_server
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
package srv_questionnaire
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"videoweb/pub/common/srvdef"
|
||||
"videoweb/pub/models/questionnairemod"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
// List 查询问卷列表(分页 + 条件筛选)
|
||||
func List(ctx context.Context, req *ListReq) (*ListResp, *srvdef.SrvErr) {
|
||||
if req.PageNum < 1 {
|
||||
req.PageNum = 1
|
||||
}
|
||||
if req.PageSize < 1 {
|
||||
req.PageSize = 20
|
||||
}
|
||||
|
||||
filter := bson.M{}
|
||||
if req.QuestionType != nil && *req.QuestionType != "" {
|
||||
filter[questionnairemod.FN.Questionnaire.QuestionType] = bson.M{
|
||||
"$regex": *req.QuestionType,
|
||||
}
|
||||
}
|
||||
if req.Status != nil && *req.Status != "" {
|
||||
filter[questionnairemod.FN.Questionnaire.Status] = *req.Status
|
||||
}
|
||||
if req.StartTime != nil || req.EndTime != nil {
|
||||
timeRange := bson.M{}
|
||||
if req.StartTime != nil {
|
||||
timeRange["$gte"] = time.Unix(*req.StartTime, 0)
|
||||
}
|
||||
if req.EndTime != nil {
|
||||
timeRange["$lte"] = time.Unix(*req.EndTime, 0)
|
||||
}
|
||||
filter[questionnairemod.FN.Questionnaire.CreatedAt] = timeRange
|
||||
}
|
||||
|
||||
total, serr := questionnairemod.Count(ctx, filter)
|
||||
if serr != nil {
|
||||
return nil, serr
|
||||
}
|
||||
if total == 0 {
|
||||
return &ListResp{Total: 0, List: make([]*questionnairemod.QuestionnaireModel, 0)}, nil
|
||||
}
|
||||
|
||||
opt := options.Find().
|
||||
SetSort(bson.D{{Key: questionnairemod.FN.Questionnaire.CreatedAt, Value: -1}}).
|
||||
SetSkip((req.PageNum - 1) * req.PageSize).
|
||||
SetLimit(req.PageSize)
|
||||
|
||||
list, serr := questionnairemod.FindMany(ctx, filter, opt)
|
||||
if serr != nil {
|
||||
return nil, serr
|
||||
}
|
||||
|
||||
return &ListResp{Total: total, List: list}, nil
|
||||
}
|
||||
|
||||
// Handle 处理问卷(仅允许"待处理"状态的问卷被更新)
|
||||
func Handle(ctx context.Context, req *HandleReq) *srvdef.SrvErr {
|
||||
objId, err := primitive.ObjectIDFromHex(req.Id)
|
||||
if err != nil {
|
||||
return srvdef.New(srvdef.ErrParamError, "问卷ID格式错误", "")
|
||||
}
|
||||
|
||||
filter := bson.M{
|
||||
questionnairemod.FN.Questionnaire.Id: objId,
|
||||
questionnairemod.FN.Questionnaire.Status: questionnairemod.StatusPending,
|
||||
}
|
||||
update := bson.M{
|
||||
"$set": bson.M{
|
||||
questionnairemod.FN.Questionnaire.Status: req.Status,
|
||||
questionnairemod.FN.Questionnaire.Remark: req.Remark,
|
||||
questionnairemod.FN.Questionnaire.UpdatedAt: time.Now(),
|
||||
},
|
||||
}
|
||||
|
||||
matched, serr := questionnairemod.UpdateOne(ctx, filter, update)
|
||||
if serr != nil {
|
||||
return serr
|
||||
}
|
||||
if matched == 0 {
|
||||
// 区分"不存在"与"状态不是待处理"
|
||||
_, serr2 := questionnairemod.FindOne(ctx, bson.M{questionnairemod.FN.Questionnaire.Id: objId})
|
||||
if serr2 != nil {
|
||||
return srvdef.New(srvdef.ErrNoData, "问卷不存在", "")
|
||||
}
|
||||
return srvdef.New(srvdef.Err, "该问卷已处理,不可重复操作", "该问卷已处理,不可重复操作")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user