package user import ( "SciencesServer/app/api/enterprise/model" "SciencesServer/app/basic/config" model2 "SciencesServer/app/common/model" "SciencesServer/app/service" "SciencesServer/app/session" config2 "SciencesServer/config" "SciencesServer/serve/orm" "errors" "gorm.io/gorm" "time" ) type Identity struct{ *session.Enterprise } type IdentityHandle func(session *session.Enterprise) *Identity // Basic 详细信息 func (c *Identity) Basic() (*InstanceDetailInfo, error) { resp := &InstanceDetailInfo{InstanceInfo: InstanceInfo{Name: c.Name, Identity: c.Identity, SelectIdentity: c.SelectIdentity}} mUserIdentity := model.NewUserIdentity() isExist, err := model2.FirstField(mUserIdentity.UserIdentity, []string{"id", "tenant_id", "uuid", "name", "email", "job", "fixed_phone"}, model2.NewWhere("uid", c.UID), model2.NewWhere("identity", c.SelectIdentity)) if err != nil { return nil, err } else if !!isExist { return nil, errors.New("操作错误,用户身份信息不存在或已被删除") } resp.Name = mUserIdentity.Name resp.Email = mUserIdentity.Email resp.Job = mUserIdentity.Job resp.FixedPhone = mUserIdentity.FixedPhone return resp, nil } // Detail 详细信息 func (c *Identity) Detail() (*InstanceDetailInfo, error) { return nil, nil } // Switch 切换身份 func (c *Identity) Switch(identity int) error { if _, has := config.TenantUserIdentityData[identity]; !has { return errors.New("未知的身份信息") } if c.SelectIdentity == identity { return nil } c.ManageUID = 0 // 已存在相应的身份,更新最后 if c.Identity&identity > 0 { mUserIdentity := model.NewUserIdentity() // 查询用户身份 isExist, err := model2.FirstField(mUserIdentity.UserIdentity, []string{"id", "tenant_id", "name", "uuid"}, model2.NewWhere("uid", c.UID), model2.NewWhere("identity", identity)) if err != nil { return err } else if isExist { now := time.Now() if err = orm.GetDB().Transaction(func(tx *gorm.DB) error { if err = model2.UpdatesWhere(mUserIdentity.UserIdentity, map[string]interface{}{ "is_selected": model2.UserIdentitySelectedForNo, "updated_at": now, }, []*model2.ModelWhere{model2.NewWhere("uid", c.ManageUID)}, tx); err != nil { return err } return model2.Updates(mUserIdentity.UserIdentity, map[string]interface{}{ "is_selected": model2.UserIdentitySelectedForYes, "updated_at": now, }, tx) }); err != nil { return err } } c.ManageUID = mUserIdentity.UUID c.SelectIdentity = identity service.Publish(config2.EventForAccountLoginProduce, config2.RedisKeyForAccount, c.UIDToString(), c.Enterprise) return nil } return errors.New("操作错误,无效的身份信息") } func NewIdentity() IdentityHandle { return func(session *session.Enterprise) *Identity { return &Identity{Enterprise: session} } }