Files
2022-01-27 17:12:41 +08:00

140 lines
4.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
}
}
}