package activity import ( "SciencesServer/app/api/admin/model" "SciencesServer/app/basic/config" "SciencesServer/app/basic/controller" model2 "SciencesServer/app/common/model" "SciencesServer/app/session" "SciencesServer/serve/orm" "SciencesServer/utils" "errors" "gorm.io/gorm" "strings" "time" ) type Instance struct { *session.Admin } type InstanceHandle func(session *session.Admin) *Instance type ( // InstanceInfo 活动信息 InstanceInfo struct { ID string `json:"id"` *model.ActivityInstanceInfo Area string `json:"area"` Industry string `json:"industry"` } // InstanceDetailInfo 活动详细信息 InstanceDetailInfo struct { ID string `json:"id"` TenantID string `json:"tenant_id"` *model2.ActivityInstance Industrys []string `json:"industrys"` } // InstanceParams 活动参数信息 InstanceParams struct { ID, ApplyID, TenantID uint64 Title, Contact, ContactMobile, Image, Description, Content string BeginAt, FinishAt, JoinDeadline string config.Area Industrys []string Amount float64 MaxNumber, NotifyCrowd, IsHome, Sort, Status int } // InstanceJoinInfo 活动报名信息 InstanceJoinInfo struct { ID string `json:"id"` *model.ActivityJoinInfo } ) // notify 执行通知 func (c *Instance) notify() { } // Index 活动信息 func (c *Instance) Index(tenantID uint64, title, contact, contactMobile string, page, pageSize int) (*controller.ReturnPages, error) { mActivityInstance := model.NewActivityInstance() where := make([]*model2.ModelWhere, 0) if c.TenantID > 0 { where = append(where, model2.NewWhere("a.tenant_id", c.TenantID)) } if tenantID > 0 { where = append(where, model2.NewWhere("a.tenant_id", tenantID)) } if title != "" { where = append(where, model2.NewWhereLike("a.title", title)) } if contact != "" { where = append(where, model2.NewWhereLike("a.contact", title)) } if contactMobile != "" { where = append(where, model2.NewWhereLike("a.contact_mobile", title)) } var count int64 out, err := mActivityInstance.Activity(page, pageSize, &count, where...) if err != nil { return nil, err } list := make([]*InstanceInfo, 0) for _, v := range out { _industry := make([]string, 0) for _, v := range v.GetIndustryAttribute() { _industry = append(_industry, config.GetIndustryInfo(v, "-", "/").Value) } list = append(list, &InstanceInfo{ ID: v.GetEncodeID(), ActivityInstanceInfo: v, Area: v.FormatBasic(), Industry: strings.Join(_industry, ";"), }) } return &controller.ReturnPages{Data: list, Count: count}, nil } // Detail 详细信息 func (c *Instance) Detail(id uint64) (*InstanceDetailInfo, error) { mActivityInstance := model.NewActivityInstance() mActivityInstance.ID = id isExist, err := model2.First(mActivityInstance.ActivityInstance) if err != nil { return nil, err } else if !isExist { return nil, errors.New("操作错误,活动信息不存在或已被删除") } return &InstanceDetailInfo{ ID: mActivityInstance.GetEncodeID(), TenantID: mActivityInstance.GetEncodeTenantID(), ActivityInstance: mActivityInstance.ActivityInstance, Industrys: mActivityInstance.GetIndustryAttribute(), }, nil } // Form 数据操作 func (c *Instance) Form(params *InstanceParams) error { mActivityInstance := model.NewActivityInstance() if params.ID > 0 { mActivityInstance.ID = params.ID isExist, err := model2.FirstField(mActivityInstance.ActivityInstance, []string{"id", "tenant_id", "created_at"}) if err != nil { return err } else if !isExist { return errors.New("操作错误,活动信息不存在或已被删除") } if c.TenantID > 0 && mActivityInstance.TenantID != c.TenantID { return errors.New("操作错误,无权限操作") } } mActivityInstance.Title = params.Title mActivityInstance.Contact = params.Contact mActivityInstance.ContactMobile = params.ContactMobile mActivityInstance.BeginAt = utils.DateTimeToTime(params.BeginAt) mActivityInstance.FinishAt = utils.DateTimeToTime(params.FinishAt) mActivityInstance.JoinDeadline = utils.DateTimeToTime(params.JoinDeadline) mActivityInstance.Area = model2.Area{ Province: params.Province, City: params.City, District: params.District, Address: params.Address, } mActivityInstance.Image.Image = params.Image mActivityInstance.SetIndustryAttribute(params.Industrys) mActivityInstance.Amount = params.Amount mActivityInstance.MaxNumber = params.MaxNumber mActivityInstance.NotifyCrowd = params.NotifyCrowd mActivityInstance.IsHome = params.IsHome mActivityInstance.Sort = params.Sort mActivityInstance.Description = params.Description mActivityInstance.Content = params.Content mActivityInstance.Status = model2.ActivityInstanceStatus(params.Status) if mActivityInstance.ID > 0 { if c.TenantID <= 0 { mActivityInstance.TenantID = params.TenantID } return model2.Updates(mActivityInstance.ActivityInstance, mActivityInstance.ActivityInstance) } return orm.GetDB().Transaction(func(tx *gorm.DB) error { mActivityInstance.TenantID = params.TenantID if c.TenantID > 0 { mActivityInstance.TenantID = c.TenantID } err := model2.Create(mActivityInstance.ActivityInstance) if err != nil { return err } if params.ApplyID > 0 { mActivityApply := model.NewActivityApply() mActivityApply.ID = params.ApplyID isExist := false if isExist, err = model2.FirstField(mActivityApply.ActivityApply, []string{"id", "tenant_id", "status"}); err != nil { return err } else if !isExist { return errors.New("操作错误,活动申请信息不存在或已被删除") } if c.TenantID > 0 && mActivityApply.TenantID != c.TenantID { return errors.New("操作错误,无权限操作") } if mActivityApply.Status != model2.ActivityApplyStatusForProcessing { return errors.New("操作错误,活动申请信息状态发生变化,不可处理") } if err = model2.Updates(mActivityApply.ActivityApply, map[string]interface{}{ "status": model2.ActivityApplyStatusForProcessed, "updated_at": time.Now(), }, tx); err != nil { return err } mActivityApplyLog := model.NewActivityApplyLog() mActivityApplyLog.ApplyID = mActivityApply.ID mActivityApplyLog.Remark = "创建活动" return model2.Create(mActivityApplyLog.ActivityApplyLog, tx) } return nil }) } // Delete 删除操作 func (c *Instance) Delete(id uint64) error { mActivityInstance := model.NewActivityInstance() mActivityInstance.ID = id isExist, err := model2.FirstField(mActivityInstance.ActivityInstance, []string{"id", "tenant_id"}) if err != nil { return err } else if !isExist { return errors.New("操作错误,活动信息不存在或已被删除") } if c.TenantID > 0 && c.TenantID != mActivityInstance.TenantID { return errors.New("操作错误,无权限操作") } return model2.Delete(mActivityInstance.ActivityInstance) } func (c *Instance) Joins(activityID uint64, name string, page, pageSize int) (*controller.ReturnPages, error) { mActivityJoin := model.NewActivityJoin() where := []*model2.ModelWhere{model2.NewWhere("j.activity_id", activityID)} if name != "" { where = append(where, model2.NewWhereLike("u_i.name", name)) } var count int64 out, err := mActivityJoin.Join(page, pageSize, &count, where...) if err != nil { return nil, err } list := make([]*InstanceJoinInfo, 0) for _, v := range out { list = append(list, &InstanceJoinInfo{ ID: v.GetEncodeID(), ActivityJoinInfo: v, }) } return &controller.ReturnPages{Data: list, Count: count}, nil } func NewInstance() InstanceHandle { return func(session *session.Admin) *Instance { return &Instance{session} } }