package settled import ( "SciencesServer/app/api/enterprise/model" "SciencesServer/app/basic/config" model2 "SciencesServer/app/common/model" "SciencesServer/app/session" config2 "SciencesServer/config" "SciencesServer/serve/orm" "errors" "gorm.io/gorm" ) // Company 公司企业入驻信息 type Company struct { *session.Enterprise tenantID uint64 } type CompanyHandle func(session *session.Enterprise, tenantID uint64) *Company type CompanyInfo struct { ID string `json:"id"` *model2.ManageCompany Industry []string `json:"industrys"` Keywords []string `json:"keywords"` } // Get 获取信息 func (c *Company) Get(code string) (*CompanyInfo, error) { mManageCompany := model.NewManageCompany() isExist, err := model2.FirstWhere(mManageCompany.ManageCompany, model2.NewWhere("code", code)) if err != nil { return nil, err } else if !isExist { return nil, nil } mManageCompany.Image.Image = mManageCompany.Image.Analysis(config2.SystemConfig[config2.SysImageDomain]) mManageCompany.License = (&model2.Image{Image: mManageCompany.License}).Analysis(config2.SystemConfig[config2.SysImageDomain]) return &CompanyInfo{ ID: mManageCompany.GetEncodeID(), ManageCompany: mManageCompany.ManageCompany, Industry: mManageCompany.GetIndustryAttribute(), Keywords: mManageCompany.GetKeywordAttribute(), }, nil } // Launch 发起入驻 func (c *Company) Launch(params *BasicParams, inviterID uint64, other *config.IdentityForCompany) error { if c.Identity&config.TenantUserIdentityForCompany > 0 { return errors.New("操作错误,不可重复申请入驻") } mManageCompany := model.NewManageCompany() // 查询相应的企业入驻信息,code唯一的 isExist, err := model2.LastWhere(mManageCompany.ManageCompany, []string{"id", "examine_status", "created_at"}, model2.NewWhere("code", params.Code)) if err != nil { return err } // 用户入驻信息 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 } mManageCompany.TenantID = c.tenantID mManageCompany.InviterID = inviterID mManageCompany.Kind = model2.ManageCompanyKind(other.Kind) mManageCompany.Name = params.Name mManageCompany.Code = params.Code mManageCompany.Image = model2.Image{Image: params.Image} mManageCompany.Area = model2.Area{ Province: params.Area.Province, City: params.Area.City, District: params.Area.District, Address: params.Area.Address, } mManageCompany.Product = other.Product mManageCompany.Url = other.Url mManageCompany.License = other.FilterLicense() mManageCompany.SetIndustryAttribute(params.Industrys) mManageCompany.SetKeywordAttribute(params.Keywords) mManageCompany.SetDirectionAttribute(other.Directions) mManageCompany.Introduce = params.Introduce return orm.GetDB().Transaction(func(tx *gorm.DB) error { if err = model2.Create(mManageCompany.ManageCompany, tx); err != nil { return err } mUserCompany.UID = c.UID mUserCompany.CompanyID = mManageCompany.ID return model2.Create(mUserCompany.UserCompany, tx) }) } func NewCompany() CompanyHandle { return func(session *session.Enterprise, tenantID uint64) *Company { return &Company{ Enterprise: session, tenantID: tenantID, } } }