diff --git a/app/api/admin/controller/manage/examine.go b/app/api/admin/controller/manage/examine.go index 74128cf..2666741 100644 --- a/app/api/admin/controller/manage/examine.go +++ b/app/api/admin/controller/manage/examine.go @@ -19,6 +19,7 @@ type ExamineHandle func(session *session.Admin) *Examine type ExamineManageInfo struct { IModel model2.IModel + IUserModel model2.IModel UIDs []uint64 // 用户表UUID Name string Keywords, Industrys, Researchs []string @@ -62,8 +63,8 @@ func examineCompany(id, tenantID uint64) (*ExamineManageInfo, error) { model2.NewWhere("invalid_status", model2.InvalidStatusForNot)); err != nil { return nil, err } - return &ExamineManageInfo{IModel: mManageCompany.ManageCompany, UIDs: uids, - Name: mManageCompany.Name, Industrys: mManageCompany.GetIndustryAttribute(), + return &ExamineManageInfo{IModel: mManageCompany.ManageCompany, IUserModel: mUserCompany.UserCompany, + UIDs: uids, Name: mManageCompany.Name, Industrys: mManageCompany.GetIndustryAttribute(), Keywords: mManageCompany.GetKeywordAttribute()}, nil } @@ -200,6 +201,15 @@ func (c *Examine) Launch(id uint64, identity, status int, remark string, params } // 拒绝后,不执行以下数据 if _status == model2.ExamineStatusForRefuse { + // 清除所有的入驻信息变为失效 + if len(data.UIDs) > 0 { + if err = model2.UpdatesWhere(data.IUserModel, map[string]interface{}{ + "invalid_status": model2.InvalidStatusForYes, "updated_at": time.Now(), + }, []*model2.ModelWhere{model2.NewWhere("uid", data.UIDs), + model2.NewWhere("invalid_status", model2.InvalidStatusForNot)}, tx); err != nil { + return err + } + } return nil } mUserInstance := model.NewUserInstance() @@ -227,6 +237,7 @@ func (c *Examine) Launch(id uint64, identity, status int, remark string, params }, tx); err != nil { return err } + // TODO:需要同步redis } if len(userIdentitys) > 0 { if err = model2.Creates(model.NewUserIdentity().UserIdentity, userIdentitys, tx); err != nil { diff --git a/app/api/enterprise/controller/settled/basic.go b/app/api/enterprise/controller/settled/basic.go index c2d4fe9..497428d 100644 --- a/app/api/enterprise/controller/settled/basic.go +++ b/app/api/enterprise/controller/settled/basic.go @@ -4,7 +4,9 @@ import ( "SciencesServer/app/api/enterprise/model" "SciencesServer/app/basic/config" model2 "SciencesServer/app/common/model" + "SciencesServer/app/service" "SciencesServer/app/session" + config2 "SciencesServer/config" "errors" "gorm.io/gorm" "time" @@ -16,6 +18,7 @@ import ( // BasicParams 基本信息 type BasicParams struct { + ID uint64 Name, Image, Code, Mobile, Introduce string config.Area Industrys, Keywords []string @@ -56,25 +59,39 @@ func (c *BasicParams) filter(identity int, where ...*model2.ModelWhere) error { } // fillIdentity 填充身份信息 -func (c *BasicParams) fillIdentity(tx *gorm.DB, session *session.Enterprise, identity int) error { - if session.SelectIdentity <= 0 { - session.SelectIdentity = identity +func (c *BasicParams) fillIdentity(tx *gorm.DB, _session *session.Enterprise, identity int) error { + if _session.SelectIdentity <= 0 { + _session.SelectIdentity = identity } - session.Identity = session.Identity | identity + _session.Identity = _session.Identity | identity mUserInstance := model.NewUserInstance() err := model2.UpdatesWhere(mUserInstance.UserInstance, map[string]interface{}{ - "identity": session.Identity, "updated_at": time.Now(), - }, []*model2.ModelWhere{model2.NewWhere("uuid", session.UID)}, tx) + "identity": _session.Identity, "updated_at": time.Now(), + }, []*model2.ModelWhere{model2.NewWhere("uuid", _session.UID)}, tx) if err != nil { return err } mUserIdentity := model.NewUserIdentity() - mUserIdentity.UID = session.UID - mUserIdentity.Name = session.Name + + var count int64 + + if err = model2.Count(mUserIdentity.UserIdentity, &count, model2.NewWhere("uid", _session.UID)); err != nil { + return err + } + if count <= 0 { + mUserIdentity.IsSelected = model2.UserIdentitySelectedForYes + } + mUserIdentity.UID = _session.UID + mUserIdentity.Name = _session.Name mUserIdentity.Identity = identity - return model2.Create(mUserIdentity.UserIdentity) + if err = model2.Create(mUserIdentity.UserIdentity, tx); err != nil { + return err + } + service.Publish(config2.EventForRedisHashProduce, config2.RedisKeyForAccountEnterprise, _session.GetStringUID(), _session) + + return nil } diff --git a/app/api/enterprise/controller/settled/company.go b/app/api/enterprise/controller/settled/company.go index 545d85a..0f71207 100644 --- a/app/api/enterprise/controller/settled/company.go +++ b/app/api/enterprise/controller/settled/company.go @@ -9,7 +9,6 @@ import ( "SciencesServer/serve/orm" "errors" "gorm.io/gorm" - "time" ) // Company 公司企业入驻信息 @@ -56,27 +55,50 @@ func (c *Company) Launch(params *BasicParams, inviterID uint64, other *config.Id return errors.New("操作错误,不可重复申请入驻") } mManageCompany := model.NewManageCompany() - // 查询相应的企业入驻信息 - isExist, err := model2.FirstField(mManageCompany.ManageCompany, []string{"id", "examine_status"}, - model2.NewWhere("code", params.Code), model2.NewWhere("tenant_id", c.tenantID)) - // 过滤用户其他公司入驻信息 - mUserCompany := model.NewUserCompany() + // 查询相应的企业入驻信息,code唯一的 + isExist, err := model2.LastWhere(mManageCompany.ManageCompany, []string{"id", "examine_status", "created_at"}, + model2.NewWhere("code", params.Code)) if err != nil { return err - } else if isExist { - // 审核中 - if mManageCompany.Examine.ExamineStatus == model2.ExamineStatusForOngoing { - return errors.New("操作错误,当前该企业信息审核中,不可入驻") - } - // 审核通过 - if mManageCompany.Examine.ExamineStatus == model2.ExamineStatusForAgree { - // 筛选企业条件 - if err = params.filter(config.TenantUserIdentityForCompany, - model2.NewWhere("company_id", mManageCompany.ID)); err != nil { + } + // 用户入驻信息 + mUserCompany := model.NewUserCompany() + + // 存在 + if isExist { + if mManageCompany.Examine.ExamineStatus == model2.ExamineStatusForOngoing || + mManageCompany.Examine.ExamineStatus == model2.ExamineStatusForAgree { + // 筛选判断是否满足入驻条件 + if err = params.filter(config.TenantUserIdentityForCompany, model2.NewWhere("company_id", mManageCompany.ID)); err != nil { return err } + // 判断当前用户是否入驻 + var count int64 + + if err = model2.Count(mUserCompany.UserCompany, &count, model2.NewWhere("company_id", mManageCompany.ID), + model2.NewWhere("uid", c.UID), model2.NewWhere("invalid_status", model2.InvalidStatusForNot)); err != nil { + return err + } + if count > 0 { + return errors.New("操作错误,已申请入驻,不可重复申请") + } + return orm.GetDB().Transaction(func(tx *gorm.DB) error { + mUserCompany.UID = c.UID + mUserCompany.CompanyID = mManageCompany.ID + + if err = model2.Create(mUserCompany.UserCompany, tx); err != nil { + return err + } + // 直接同步身份信息 + if mManageCompany.Examine.ExamineStatus == model2.ExamineStatusForAgree { + if err = params.fillIdentity(tx, c.Enterprise, config.TenantUserIdentityForCompany); err != nil { + return err + } + } + return nil + }) } mManageCompany.ID = 0 } @@ -98,19 +120,9 @@ func (c *Company) Launch(params *BasicParams, inviterID uint64, other *config.Id mManageCompany.Introduce = params.Introduce return orm.GetDB().Transaction(func(tx *gorm.DB) error { - // 删除区域相同编码公司信息 - if err = model2.DeleteWhere(mManageCompany.ManageCompany, []*model2.ModelWhere{ - model2.NewWhere("code", params.Code), model2.NewWhere("tenant_id", c.tenantID)}, tx); err != nil { - return err - } if err = model2.Create(mManageCompany.ManageCompany, tx); err != nil { return err } - if err := model2.UpdatesWhere(mUserCompany.UserCompany, map[string]interface{}{ - "invalid_status": model2.InvalidStatusForYes, "updated_at": time.Now(), - }, []*model2.ModelWhere{model2.NewWhere("uid", c.UID)}, tx); err != nil { - return err - } mUserCompany.UID = c.UID mUserCompany.CompanyID = mManageCompany.ID return model2.Create(mUserCompany.UserCompany, tx) diff --git a/app/common/model/model.go b/app/common/model/model.go index 4fe6e3a..0045a04 100644 --- a/app/common/model/model.go +++ b/app/common/model/model.go @@ -277,9 +277,12 @@ func Last(model IModel) (bool, error) { return true, nil } -func LastWhere(model IModel, where ...*ModelWhere) (bool, error) { +func LastWhere(model IModel, fields []string, where ...*ModelWhere) (bool, error) { db := orm.GetDB().Table(model.TableName()) + if len(fields) > 0 { + db = db.Select(fields) + } if len(where) > 0 { for _, wo := range where { db = db.Where(wo.Condition, wo.Value) @@ -290,7 +293,7 @@ func LastWhere(model IModel, where ...*ModelWhere) (bool, error) { if db.Migrator().HasColumn(model, FieldsForDeleted) { db = db.Where(FieldsForDeleted, DeleteStatusForNot) } - if err := db.Order("id " + OrderModeToDesc).First(model).Error; err != nil { + if err := db.Order(FieldsForID + " " + OrderModeToDesc).First(model).Error; err != nil { if err == gorm.ErrRecordNotFound { return false, nil }