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" "time" ) // Company 公司企业入驻信息 type Company struct { *session.Enterprise local string } type CompanyHandle func(session *session.Enterprise, local string) *Company type CompanyInfo struct { ID string `json:"id"` *model2.ManageCompany Kinds []int `json:"kinds"` 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.SettingInfo.Domain) mManageCompany.License = (&model2.Image{Image: mManageCompany.License}).Analysis(config2.SettingInfo.Domain) return &CompanyInfo{ ID: mManageCompany.GetEncodeID(), ManageCompany: mManageCompany.ManageCompany, Kinds: mManageCompany.GetKindAttribute(), 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() // 查询相应的企业入驻信息 isExist, err := model2.FirstField(mManageCompany.ManageCompany, []string{"id", "examine_status"}, model2.NewWhere("code", params.Code), model2.NewWhere("local", c.local)) // 过滤用户其他公司入驻信息 mUserCompany := model.NewUserCompany() 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 { return err } } mManageCompany.ID = 0 } mManageCompany.Local.Local = c.local mManageCompany.InviterID = inviterID mManageCompany.SetKindAttribute(other.Kinds) 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.License mManageCompany.SetIndustryAttribute(params.Industrys) mManageCompany.SetKeywordAttribute(params.Keywords) 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("local", c.local)}, 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) }) } func NewCompany() CompanyHandle { return func(session *session.Enterprise, local string) *Company { return &Company{ Enterprise: session, local: local, } } }