package controller import ( "SciencesServer/app/api/website/model" "SciencesServer/app/basic/controller" model2 "SciencesServer/app/common/model" "SciencesServer/app/service" "SciencesServer/app/session" "SciencesServer/config" "errors" ) type Activity struct { *session.Enterprise tenantID uint64 } type ActivityHandle func(session *session.Enterprise, tenantID uint64) *Activity type ( // ActivityInfo 活动信息 ActivityInfo struct { ID string `json:"id"` *model.ActivityInstanceInfo JoinStatus bool `json:"join_status"` } // ActivityDetail 详细信息 ActivityDetail struct { ID string `json:"id"` *model.ActivityInstanceDetail JoinStatus bool `json:"join_status"` } ) // Instance 活动信息 func (c *Activity) Instance(title string, page, pageSize int) (*controller.ReturnPages, error) { mActivityInstance := model.NewActivityInstance() var count int64 where := []*model2.ModelWhere{model2.NewWhere("a.tenant_id", c.tenantID)} if title != "" { where = append(where, model2.NewWhereLike("a.title", title)) } out, err := mActivityInstance.Activity(c.UID, c.SelectIdentity, page, pageSize, &count, where...) if err != nil { return nil, err } list := make([]*ActivityInfo, 0) for _, v := range out { list = append(list, &ActivityInfo{ ID: v.GetEncodeID(), ActivityInstanceInfo: v, JoinStatus: v.JoinID > 0, }) } return &controller.ReturnPages{Data: list, Count: count}, nil } // Detail 详细信息 func (c *Activity) Detail(id uint64) (*ActivityDetail, error) { mActivityInstance := model.NewActivityInstance() out, err := mActivityInstance.Detail(id, c.UID, c.SelectIdentity) if err != nil { return nil, err } mActivityInstance.Image.Image = mActivityInstance.Image.Analysis(config.SettingInfo.Domain) return &ActivityDetail{ ID: out.GetEncodeID(), ActivityInstanceDetail: out, JoinStatus: out.JoinID > 0., }, nil } // Join 加入活动 func (c *Activity) Join(id uint64) error { mActivityInstance := model.NewActivityInstance() isExist, err := model2.FirstField(mActivityInstance.ActivityInstance, []string{"id", "amount", "join_deadline"}, model2.NewWhere("id", id), model2.NewWhere("tenant_id", c.tenantID), model2.NewWhere("status", model2.ActivityInstanceStatusForShow)) if err != nil { return err } else if !isExist { return errors.New("操作错误,活动信息不存在或已被删除") } if !mActivityInstance.IsCanJoin() { return errors.New("操作错误,当前活动信息不可报名") } if c.SelectIdentity <= 0 { return errors.New("操作错误,当前未选择任何身份信息") } // 查看当前活动是否报名 var count int64 if err = model2.Count(model.NewActivityJoin().ActivityJoin, &count, model2.NewWhere("id", c.UID), model2.NewWhere("identity", c.SelectIdentity), model2.NewWhere("activity_id", id), model2.NewWhere("status", model2.ActivityJoinStatusForSuccess)); err != nil { return err } if count > 0 { return errors.New("操作错误,不可重复报名") } if mActivityInstance.Amount <= 0 { service.Publish(config.EventForActivityJoinProduce, id, c.UID, c.SelectIdentity) } return nil } func NewActivity() ActivityHandle { return func(session *session.Enterprise, tenantID uint64) *Activity { return &Activity{Enterprise: session, tenantID: tenantID} } }