Files

141 lines
4.4 KiB
Go
Raw Normal View History

2021-12-02 09:06:15 +08:00
package settled
import (
"SciencesServer/app/api/enterprise/model"
"SciencesServer/app/basic/config"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/session"
2021-12-07 16:10:12 +08:00
config2 "SciencesServer/config"
2021-12-02 09:06:15 +08:00
"SciencesServer/serve/orm"
2021-12-02 15:23:48 +08:00
"errors"
2021-12-02 09:06:15 +08:00
"gorm.io/gorm"
)
2021-12-02 15:23:48 +08:00
// Company 公司企业入驻信息
2021-12-02 09:06:15 +08:00
type Company struct {
*session.Enterprise
2022-01-13 18:07:40 +08:00
tenantID uint64
2021-12-02 09:06:15 +08:00
}
2022-01-13 18:07:40 +08:00
type CompanyHandle func(session *session.Enterprise, tenantID uint64) *Company
2021-12-02 09:06:15 +08:00
2021-12-07 16:10:12 +08:00
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
}
2022-01-17 09:57:57 +08:00
mManageCompany.Image.Image = mManageCompany.Image.Analysis(config2.SystemConfig[config2.SysImageDomain])
mManageCompany.License = (&model2.Image{Image: mManageCompany.License}).Analysis(config2.SystemConfig[config2.SysImageDomain])
2021-12-07 16:10:12 +08:00
return &CompanyInfo{
ID: mManageCompany.GetEncodeID(),
ManageCompany: mManageCompany.ManageCompany,
Industry: mManageCompany.GetIndustryAttribute(),
Keywords: mManageCompany.GetKeywordAttribute(),
}, nil
}
2021-12-02 15:23:48 +08:00
// Launch 发起入驻
func (c *Company) Launch(params *BasicParams, inviterID uint64, other *config.IdentityForCompany) error {
if c.Identity&config.TenantUserIdentityForCompany > 0 {
return errors.New("操作错误,不可重复申请入驻")
}
2021-12-02 09:06:15 +08:00
mManageCompany := model.NewManageCompany()
2022-01-27 17:12:41 +08:00
// 查询相应的企业入驻信息code唯一的
isExist, err := model2.LastWhere(mManageCompany.ManageCompany, []string{"id", "examine_status", "created_at"},
model2.NewWhere("code", params.Code))
2021-12-02 09:06:15 +08:00
if err != nil {
return err
2022-01-27 17:12:41 +08:00
}
// 用户入驻信息
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 {
2021-12-02 15:23:48 +08:00
return err
}
2022-01-27 17:12:41 +08:00
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
})
2021-12-02 09:06:15 +08:00
}
2021-12-02 18:05:53 +08:00
mManageCompany.ID = 0
2021-12-02 09:06:15 +08:00
}
2022-01-13 18:07:40 +08:00
mManageCompany.TenantID = c.tenantID
2021-12-02 09:06:15 +08:00
mManageCompany.InviterID = inviterID
2022-01-27 14:50:52 +08:00
mManageCompany.Kind = model2.ManageCompanyKind(other.Kind)
2021-12-02 09:06:15 +08:00
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,
}
2021-12-07 16:10:12 +08:00
mManageCompany.Product = other.Product
2021-12-02 18:05:53 +08:00
mManageCompany.Url = other.Url
2022-01-19 16:21:22 +08:00
mManageCompany.License = other.FilterLicense()
2021-12-02 09:06:15 +08:00
mManageCompany.SetIndustryAttribute(params.Industrys)
mManageCompany.SetKeywordAttribute(params.Keywords)
2021-12-08 17:46:47 +08:00
mManageCompany.SetDirectionAttribute(other.Directions)
2021-12-02 09:06:15 +08:00
mManageCompany.Introduce = params.Introduce
mManageCompany.ExamineStatus = model2.ExamineStatusForOngoing
2021-12-02 09:06:15 +08:00
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
2021-12-02 18:05:53 +08:00
if err = model2.Create(mManageCompany.ManageCompany, tx); err != nil {
return err
2021-12-02 09:06:15 +08:00
}
mUserCompany.UID = c.UID
mUserCompany.CompanyID = mManageCompany.ID
return model2.Create(mUserCompany.UserCompany, tx)
})
}
func NewCompany() CompanyHandle {
2022-01-13 18:07:40 +08:00
return func(session *session.Enterprise, tenantID uint64) *Company {
2021-12-02 09:06:15 +08:00
return &Company{
Enterprise: session,
2022-01-13 18:07:40 +08:00
tenantID: tenantID,
2021-12-02 09:06:15 +08:00
}
}
}