package user import ( "SciencesServer/app/api/enterprise/model" "SciencesServer/app/basic/controller" model2 "SciencesServer/app/common/model" "SciencesServer/app/session" "SciencesServer/lib" "errors" "time" ) type Vip struct { *session.Enterprise } type VipHandle func(session *session.Enterprise) *Vip // Open 开通会员 func (c *Vip) Open(id uint64) (*controller.ReturnPayment, error) { mSysVip := model.NewSysVip() mSysVip.ID = id isExist, err := model2.FirstField(mSysVip.SysVip, []string{"id", "level", "effect_time", "price", "is_disabled"}) if err != nil { return nil, err } else if !isExist { return nil, errors.New("操作错误,会员信息不存在或已删除") } else if mSysVip.IsDeleted > 0 { return nil, errors.New("操作错误,当前会员不允许开通") } // 查询用户会员信息 mUserInstance := model.NewUserInstance() if _, err = model2.FirstField(mUserInstance.UserInstance, []string{"id", "vip", "vip_deadline"}, model2.NewWhere("uuid", c.UID)); err != nil { return nil, err } // 会员状态有效期内,不可降级 if mUserInstance.VipStatus() { mSysVip2 := model.NewSysVip() mSysVip2.ID = mUserInstance.Vip if isExist, err = model2.FirstField(mSysVip2.SysVip, []string{"id", "level"}); err != nil { return nil, err } else if isExist && mSysVip2.Level > mSysVip.Level { return nil, errors.New("操作错误,会员有效期间内不可以降级") } } mOrderInstance := model.NewOrderInstance() mOrderInstance.UID = c.UID mOrderInstance.OrderNo = lib.OrderNo() mOrderInstance.Amount = mSysVip.Price mOrderInstance.SetParamsAttribute(model2.OrderInstanceParamsKindForVIP, &model2.OrderInstanceParamsForVip{ ID: mSysVip.ID, EffectTime: mSysVip.EffectTime, }) return &controller.ReturnPayment{ Auth: mOrderInstance.GetEncodeID(), Timestamp: time.Now().Unix(), }, nil } func NewVip() VipHandle { return func(session *session.Enterprise) *Vip { return &Vip{session} } }