2021-11-01 11:19:49 +08:00
package model
2021-11-24 09:59:29 +08:00
import (
"SciencesServer/app/common/model"
"SciencesServer/serve/orm"
"fmt"
)
2021-11-01 11:19:49 +08:00
type ManageExpert struct {
* model . ManageExpert
}
2022-01-19 10:59:43 +08:00
type (
// ManageExpertInfo 专家信息
ManageExpertInfo struct {
* model . ManageExpert
2022-01-20 11:09:29 +08:00
Name string ` json:"name" `
ResearchName string ` json:"research_name" `
LaboratoryName string ` json:"laboratory_name" `
AchievementCount int ` json:"achievement_count" `
PatentCount int ` json:"patent_count" `
TenantProvince string ` json:"-" `
TenantCity string ` json:"-" `
2022-01-19 16:03:47 +08:00
}
// ManageExpertDetail 专家信息
ManageExpertDetail struct {
* model . ManageExpert
2022-01-20 09:43:26 +08:00
TenantProvince string ` json:"-" `
TenantCity string ` json:"-" `
2022-01-19 10:59:43 +08:00
}
2022-02-09 17:35:31 +08:00
// ManageExpertUser 专家用户信息
ManageExpertUser struct {
model . Model
Name string ` json:"name" `
ResearchName string ` json:"research_name" `
}
// ManageExpertPatent 专家专利信息
ManageExpertPatent struct {
model . Model
Title string ` json:"title" `
ApplyName string ` json:"apply_name" `
ApplyCode string ` json:"apply_code" `
ApplyAt string ` json:"apply_at" `
Inventor string ` json:"inventor" `
UserPatentCount int64 ` json:"-" `
}
2022-01-19 10:59:43 +08:00
)
2022-02-09 17:35:31 +08:00
// User 用户专家信息
func ( m * ManageExpert ) User ( uid uint64 ) ( * ManageExpertUser , error ) {
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS e" ) .
Select ( "e.id" , "e.name" , "r.name AS research_name" ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS r ON e.research_id = r.id" , model . NewManageResearch ( ) . TableName ( ) ) ) .
Where ( "e.uid = ?" , uid ) .
Where ( "e.examine_status = ?" , model . ExamineStatusForAgree ) .
Where ( "e.is_deleted = ?" , model . DeleteStatusForNot )
out := new ( ManageExpertUser )
err := db . Scan ( out ) . Error
return out , err
}
// User 用户专家信息
func ( m * ManageExpert ) Basic ( id uint64 ) ( * ManageExpertUser , error ) {
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS e" ) .
Select ( "e.id" , "e.name" , "r.name AS research_name" ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS r ON e.research_id = r.id" , model . NewManageResearch ( ) . TableName ( ) ) ) .
Where ( "e.id = ?" , id )
out := new ( ManageExpertUser )
err := db . Scan ( out ) . Error
return out , err
}
2022-01-19 10:59:43 +08:00
// Expert 专家信息
2022-01-19 16:03:47 +08:00
func ( m * ManageExpert ) Expert ( id uint64 ) ( * ManageExpertDetail , error ) {
2022-01-19 10:59:43 +08:00
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS e" ) .
2022-01-20 09:43:26 +08:00
Select ( "e.*" ) .
2022-01-19 10:59:43 +08:00
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS t ON e.tenant_id = t.id" , model . NewSysTenant ( ) . TableName ( ) ) ) .
Where ( "e.id = ?" , id )
2022-01-19 16:03:47 +08:00
out := new ( ManageExpertDetail )
2022-01-19 10:59:43 +08:00
err := db . Scan ( out ) . Error
return out , err
2021-11-24 09:59:29 +08:00
}
// Experts 专家信息
func ( m * ManageExpert ) Experts ( page , pageSize int , count * int64 , where ... * model . ModelWhere ) ( [ ] * ManageExpertInfo , error ) {
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS e" ) .
2022-01-19 10:59:43 +08:00
Select ( "e.id" , "e.name" , "e.industry" , "r.name AS research_name" , "l.name AS laboratory_name" ,
2022-01-20 10:03:38 +08:00
"e.province" , "e.city" , "e.created_at" , "e.examine_status" , "e.examine_at" ,
2022-01-19 16:03:47 +08:00
"t.province AS tenant_province" , "t.city AS tenant_city" ) .
2022-01-19 10:59:43 +08:00
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS r ON e.research_id = r.id" , model . NewManageResearch ( ) . TableName ( ) ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS l ON e.laboratory_id = l.id" , model . NewManageLaboratory ( ) . TableName ( ) ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS t ON e.tenant_id = t.id" , model . NewSysTenant ( ) . TableName ( ) ) ) .
Where ( "e.is_deleted = ?" , model . DeleteStatusForNot )
2021-11-24 09:59:29 +08:00
if len ( where ) > 0 {
for _ , v := range where {
db = db . Where ( v . Condition , v . Value )
}
}
out := make ( [ ] * ManageExpertInfo , 0 )
if err := db . Count ( count ) . Error ; err != nil {
return nil , err
}
2022-01-19 10:59:43 +08:00
2021-11-24 09:59:29 +08:00
if err := db . Order ( "e.id " + model . OrderModeToDesc ) . Offset ( ( page - 1 ) * pageSize ) . Limit ( pageSize ) . Scan ( & out ) . Error ; err != nil {
return nil , err
}
return out , nil
}
2022-02-09 17:35:31 +08:00
// Patents 专利信息
func ( m * ManageExpert ) Patents ( where ... * model . ModelWhere ) ( [ ] * ManageExpertPatent , error ) {
db := orm . GetDB ( ) . Table ( model . NewTechnologyPatent ( ) . TableName ( ) + " AS p" ) .
Select ( "p.id" , "p.title" , "p.apply_name" , "p.apply_code" , "p.apply_at" , "p.inventor" , "u.count AS user_patent_count" ) .
Joins ( fmt . Sprintf ( "LEFT JOIN (SELECT patent_id, COUNT(patent_id) AS count FROM %s WHERE is_deleted = %d GROUP BY patent_id) AS u ON p.id = u.patent_id" ,
2022-02-09 18:38:32 +08:00
model . NewTechnologyPatentExpert ( ) . TableName ( ) , model . DeleteStatusForNot ) ) .
2022-02-09 17:35:31 +08:00
Where ( "p.is_deleted = ?" , model . DeleteStatusForNot )
if len ( where ) > 0 {
for _ , v := range where {
db = db . Where ( v . Condition , v . Value )
}
}
out := make ( [ ] * ManageExpertPatent , 0 )
if err := db . Order ( "p.id " + model . OrderModeToDesc ) . Scan ( & out ) . Error ; err != nil {
return nil , err
}
return out , nil
}
2021-11-01 11:19:49 +08:00
func NewManageExpert ( ) * ManageExpert {
return & ManageExpert { model . NewManageExpert ( ) }
}