package settled import ( "SciencesServer/app/api/enterprise/model" "SciencesServer/app/basic/config" model2 "SciencesServer/app/common/model" "SciencesServer/app/session" "SciencesServer/serve/orm" "errors" "gorm.io/gorm" ) // Research 研究机构入驻信息 type Research struct { *session.Enterprise tenantID uint64 } type ResearchHandle func(session *session.Enterprise, tenantID uint64) *Research // Launch 研究机构入驻 func (c *Research) Launch(params *BasicParams, other *config.IdentityForResearch) error { if c.Identity&config.TenantUserIdentityForResearch > 0 { return errors.New("操作错误,不可重复申请入驻") } mManageResearch := model.NewManageResearch() // 查询相应专家入驻信息 isExist, err := model2.FirstField(mManageResearch.ManageResearch, []string{"id", "examine_status"}, model2.NewWhere("code", params.Code)) mUserResearch := model.NewUserResearch() if err != nil { return err } else if isExist { if mManageResearch.Examine.ExamineStatus == model2.ExamineStatusForOngoing || mManageResearch.Examine.ExamineStatus == model2.ExamineStatusForAgree { // 筛选判断是否满足入驻条件 if err = params.filter(config.TenantUserIdentityForResearch, model2.NewWhere("research_id", mManageResearch.ID)); err != nil { return err } // 判断当前用户是否入驻 var count int64 if err = model2.Count(mUserResearch.UserResearch, &count, model2.NewWhere("research_id", mManageResearch.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 { mUserResearch.UID = c.UID mUserResearch.ResearchID = mManageResearch.ID if err = model2.Create(mUserResearch.UserResearch, tx); err != nil { return err } // 直接同步身份信息 if mManageResearch.Examine.ExamineStatus == model2.ExamineStatusForAgree { if err = params.fillIdentity(tx, c.Enterprise, config.TenantUserIdentityForResearch); err != nil { return err } } return nil }) } mManageResearch.ID = 0 } mManageResearch.TenantID = c.tenantID mManageResearch.Image.Image = params.Image mManageResearch.Name = params.Name mManageResearch.Code = params.Code mManageResearch.Area = model2.Area{ Province: params.Area.Province, City: params.Area.City, District: params.Area.District, Address: params.Area.Address, } //mManageExpert.Position = params.Mobile mManageResearch.SetIndustryAttribute(params.Industrys) mManageResearch.SetKeywordAttribute(params.Keywords) mManageResearch.SetResearchAttribute(other.Researchs) mManageResearch.License = other.FilterLicense() mManageResearch.Introduce = params.Introduce mManageResearch.ExamineStatus = model2.ExamineStatusForOngoing return orm.GetDB().Transaction(func(tx *gorm.DB) error { // 删除区域相同编码公司信息 if err = model2.Create(mManageResearch.ManageResearch, tx); err != nil { return err } mUserResearch.UID = c.UID mUserResearch.ResearchID = mManageResearch.ID return model2.Create(mUserResearch.UserResearch, tx) }) } func NewResearch() ResearchHandle { return func(session *session.Enterprise, tenantID uint64) *Research { return &Research{ Enterprise: session, tenantID: tenantID, } } }