Files
2022-02-15 17:19:23 +08:00

213 lines
6.5 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 manage
import (
"SciencesServer/app/api/admin/model"
"SciencesServer/app/basic/config"
"SciencesServer/app/basic/controller"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/service"
"SciencesServer/app/session"
config2 "SciencesServer/config"
"errors"
"strings"
)
type Company struct {
*session.Admin
}
type CompanyHandle func(session *session.Admin) *Company
type (
// CompanyInstance 公司企业信息
CompanyInstance struct {
ID string `json:"id"`
*model.ManageCompanyInfo
Industrys []string `json:"industrys"`
Address string `json:"address"`
Area string `json:"area"`
}
// CompanyDetail 公司企业详细信息
CompanyDetail struct {
ID string `json:"id"`
TenantID string `json:"tenant_id"`
InvitedCode string `json:"invited_code"`
*model2.ManageCompany
Industrys []*config.Industry `json:"industrys"`
Keywords []string `json:"keywords"`
Directions []string `json:"directions"`
Area string `json:"area"`
}
// CompanyParams 公司企业参数信息
CompanyParams struct {
}
)
// Instance 首页信息
func (c *Company) Instance(tenantID uint64, name string, status int, page, pageSize int) (*controller.ReturnPages, error) {
mManageCompany := model.NewManageCompany()
where := make([]*model2.ModelWhere, 0)
if c.TenantID > 0 {
where = append(where, model2.NewWhere("c.tenant_id", c.TenantID))
}
if tenantID > 0 {
where = append(where, model2.NewWhere("c.tenant_id", tenantID))
}
if name != "" {
where = append(where, model2.NewWhereLike("c.name", name))
}
if status > 0 {
where = append(where, model2.NewWhere("c.examine_status", status))
}
var count int64
out, err := mManageCompany.Companys(page, pageSize, &count, where...)
if err != nil {
return nil, err
}
list := make([]*CompanyInstance, 0)
for _, v := range out {
mManageCompany.Industry = v.Industry
_industrys := make([]string, 0)
for _, v := range mManageCompany.GetIndustryAttribute() {
_industrys = append(_industrys, config.GetIndustryInfo(v, "-", "/").Value)
}
list = append(list, &CompanyInstance{
ID: v.GetEncodeID(), ManageCompanyInfo: v, Industrys: _industrys,
Address: v.FormatBasic(), Area: (&model2.Area{
Province: v.TenantProvince,
City: v.TenantCity,
}).FormatBasic(),
})
}
return &controller.ReturnPages{Data: list, Count: count}, nil
}
// Form 数据操作
func (c *Company) Form(params *BasicParams, other *config.IdentityForCompany) error {
mManageCompany := model.NewManageCompany()
// 查询相应的企业入驻信息
if params.ID > 0 {
mManageCompany.ID = params.ID
isExist, err := model2.FirstField(mManageCompany.ManageCompany, []string{"id", "name", "code", "tenant_id", "examine_status", "created_at"})
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,公司企业信息不存在或已被删除")
}
if c.TenantID > 0 {
if mManageCompany.TenantID != c.TenantID {
return errors.New("操作错误,无权限操作")
}
} else {
if params.Code != mManageCompany.Code {
if isExist, err = params.isExist(mManageCompany.ManageCompany, model2.NewWhere("code", params.Code)); err != nil {
return err
} else if isExist {
return errors.New("操作错误,当前站点下已存在同一公司组织机构代码")
}
}
}
}
mManageCompany.TenantID = c.TenantID
mManageCompany.Kind = model2.ManageCompanyKind(other.Kind)
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.SetIndustryAttribute(params.Industrys)
mManageCompany.SetKeywordAttribute(params.Keywords)
mManageCompany.SetDirectionAttribute(other.Directions)
mManageCompany.Introduce = params.Introduce
if c.TenantID <= 0 {
mManageCompany.TenantID = params.TenantID
}
_industrys := make([]string, 0)
for _, v := range params.Industrys {
_industrys = append(_industrys, config.GetIndustryInfo(v, "-", "-").Value)
}
manage := service.NewESManage(
service.WithManageIdentity(config.TenantUserIdentityForCompany),
service.WithManageIndustry(strings.Join(_industrys, "")),
service.WithManageKeyword(strings.Join(params.Keywords, "")),
)
if mManageCompany.ID > 0 {
if err := model2.Updates(mManageCompany.ManageCompany, mManageCompany.ManageCompany); err != nil {
return nil
}
if mManageCompany.ExamineStatus == model2.ExamineStatusForAgree {
_ = manage.Update()
}
}
// 查询手机号码是否在当前租户下是否已经注册了
mManageCompany.Name = params.Name
mManageCompany.Code = params.Code
mManageCompany.License = other.FilterLicense()
mManageCompany.ExamineStatus = model2.ExamineStatusForAgree
mManageCompany.ExamineRemark = "主动创建,无需审核"
if isExist, err := params.isExist(mManageCompany.ManageCompany,
model2.NewWhere("code", params.Code)); err != nil {
return err
} else if isExist {
return errors.New("操作错误,已存在同一公司组织机构代码")
}
if err := model2.Create(mManageCompany.ManageCompany); err != nil {
return err
}
service.WithManageID(mManageCompany.ID)(manage)
service.WithManageTitle(params.Name)(manage)
return manage.Create()
}
// Detail 详细信息
func (c *Company) Detail(id uint64) (*CompanyDetail, error) {
mManageCompany := model.NewManageCompany()
out, err := mManageCompany.Company(id)
if err != nil {
return nil, err
} else if out.ManageCompany == nil {
return nil, errors.New("操作错误,公司企业信息不存在或已被删除")
}
_industrys := make([]*config.Industry, 0)
for _, v := range out.GetIndustryAttribute() {
_industrys = append(_industrys, config.GetIndustryInfo(v, "-", ">"))
}
out.Image.Image = out.Image.Analysis(config2.SystemConfig[config2.SysImageDomain])
out.License = (&model2.Image{Image: out.License}).Analysis(config2.SystemConfig[config2.SysImageDomain])
return &CompanyDetail{
ID: out.GetEncodeID(),
TenantID: out.GetEncodeTenantID(),
InvitedCode: (&model2.Model{ID: out.InviterID}).GetEncodeID(),
ManageCompany: out.ManageCompany,
Industrys: _industrys,
Keywords: out.GetKeywordAttribute(),
Directions: out.GetDirectionAttribute(),
//Area: out.FormatBasic(),
}, nil
}
func NewCompany() CompanyHandle {
return func(session *session.Admin) *Company {
return &Company{session}
}
}