2021-10-11 16:30:53 +08:00
package model
2021-12-10 18:16:41 +08:00
import (
"SciencesServer/app/common/model"
"SciencesServer/serve/orm"
"fmt"
"time"
)
2021-10-11 16:30:53 +08:00
type ManageExpert struct {
* model . ManageExpert
}
2021-12-10 18:16:41 +08:00
// ManageExpertInfo 专家信息
type ManageExpertInfo struct {
model . Model
2021-12-13 11:22:19 +08:00
Name string ` json:"name" `
Mobile string ` json:"mobile" `
Industry string ` json:"-" `
VisitCount int ` json:"visit_count" `
CollectCount int ` json:"collect_count" `
SettledAt time . Time ` json:"settled_at" `
2021-12-10 18:16:41 +08:00
}
2021-12-13 14:05:11 +08:00
type ManageExpertCompanyVisitInfo struct {
ManageExpertInfo
CompanyName string ` json:"company_name" `
VisitAt time . Time ` json:"visit_at" `
}
2022-01-04 15:04:37 +08:00
type ManageExpertInstanceInfo struct {
* model . ManageExpert
PatentTitle string ` json:"-" `
Research string ` json:"-" `
Introduce string ` json:"introduce" `
}
2022-02-06 18:01:32 +08:00
// Instance 专家信息
2022-01-04 15:04:37 +08:00
func ( m * ManageExpert ) Instance ( limit int , where ... * model . ModelWhere ) ( [ ] * ManageExpertInstanceInfo , error ) {
// 专利信息
2022-02-06 18:01:32 +08:00
mTechnologyPatent := model . NewTechnologyPatent ( )
2022-01-04 15:04:37 +08:00
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS e" ) .
Select ( "e.id" , "e.name" , "e.industry" , "e.school" , "e.major" , "e.keyword" ,
"p.title AS patent_title" ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS e_u ON e.id = p.patent_id AND e_u.invalid_status = %d AND e_u.is_deleted = %d" ,
model . NewUserExpert ( ) . TableName ( ) , model . InvalidStatusForNot , model . DeleteStatusForNot ) ) .
2022-02-06 18:01:32 +08:00
Joins ( fmt . Sprintf ( ` LEFT JOIN ( SELECT uid , SUBSTRING_INDEX ( GROUP_CONCAT ( title ORDER BY id DESC SEPARATOR ' && ' ) , ' && ' , % d ) AS title
FROM % s WHERE is_deleted = % d AND shelf_status = % d ) AS p ON e_u . uid = p . uid ` ,
limit , mTechnologyPatent . TableName ( ) , model . DeleteStatusForNot , model . ShelfStatusForUp ) ) .
2022-01-04 15:04:37 +08:00
Where ( "e.examine_status = ?" , model . ExamineStatusForAgree ) .
Where ( "e.is_deleted = ?" , model . DeleteStatusForNot )
if len ( where ) > 0 {
for _ , v := range where {
db = db . Where ( v . Condition , v . Value )
}
}
out := make ( [ ] * ManageExpertInstanceInfo , 0 )
if err := db . Order ( "e.id " + model . OrderModeToDesc ) . Scan ( & out ) . Error ; err != nil {
return nil , err
}
return out , nil
}
// Detail 专家信息
func ( m * ManageExpert ) Detail ( limit int , id uint64 ) ( * ManageExpertInstanceInfo , error ) {
// 专利信息
2022-02-06 18:01:32 +08:00
mTechnologyPatent := model . NewTechnologyPatent ( )
2022-01-04 15:04:37 +08:00
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS e" ) .
Select ( "e.id" , "e.name" , "e.industry" , "e.school" , "e.major" , "e.keyword" , "e.research" , "e.introduce" ,
"p.title AS patent_title" ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS e_u ON e.id = p.patent_id AND e_u.invalid_status = %d AND e_u.is_deleted = %d" ,
model . NewUserExpert ( ) . TableName ( ) , model . InvalidStatusForNot , model . DeleteStatusForNot ) ) .
2022-02-06 18:01:32 +08:00
Joins ( fmt . Sprintf ( ` LEFT JOIN ( SELECT uid , SUBSTRING_INDEX ( GROUP_CONCAT ( title ORDER BY id DESC SEPARATOR ' && ' ) , ' && ' , % d ) AS title
FROM % s WHERE is_deleted = % d AND shelf_status = % d ) AS p ON e_u . uid = p . uid ` ,
limit , mTechnologyPatent . TableName ( ) , model . DeleteStatusForNot , model . ShelfStatusForUp ) ) .
2022-01-04 15:04:37 +08:00
Where ( "e.id = ?" , id )
out := new ( ManageExpertInstanceInfo )
if err := db . Scan ( & out ) . Error ; err != nil {
return nil , err
}
return out , nil
}
2021-12-10 18:16:41 +08:00
// Experts 专家信息
func ( m * ManageExpert ) Experts ( page , pageSize int , count * int64 , where ... * model . ModelWhere ) ( [ ] * ManageExpertInfo , error ) {
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " e" ) .
2021-12-13 14:05:11 +08:00
Select ( "e.id" , "e.name" , "e.mobile" , "e.industry" , "v.count AS visit_count" , "c.count AS collect_count" ,
"e.examine_at AS settled_at" ) .
2021-12-27 11:12:37 +08:00
Joins ( fmt . Sprintf ( "LEFT JOIN (SELECT object_id, SUM(count) AS count FROM %s WHERE kind = %d AND is_deleted = %d GROUP BY object_id) AS v ON e.id = v.object_id" ,
model . NewUserVisit ( ) . TableName ( ) , model . UserVisitKindForExpert , model . DeleteStatusForNot ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN (SELECT object_id, COUNT(id) AS count FROM %s WHERE kind = %d AND is_deleted = %d GROUP BY object_id) AS c ON e.id = c.object_id" ,
model . NewUserCollect ( ) . TableName ( ) , model . UserCollectKindForExpert , model . DeleteStatusForNot ) ) .
2021-12-13 14:05:11 +08:00
Where ( "e.examine_status = ? AND e.is_deleted = ?" , model . ExamineStatusForAgree , model . DeleteStatusForNot )
2021-12-10 18:16:41 +08:00
if len ( where ) > 0 {
for _ , v := range where {
if v . Condition == "" {
db . Where ( v . Value )
continue
}
db = db . Where ( v . Condition , v . Value )
}
}
out := make ( [ ] * ManageExpertInfo , 0 )
if err := db . Count ( count ) . Error ; err != nil {
return nil , err
}
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
}
2021-12-13 14:05:11 +08:00
// CompanyVisit 公司浏览记录
func ( m * ManageExpert ) CompanyVisit ( page , pageSize int , count * int64 , where ... * model . ModelWhere ) ( [ ] * ManageExpertCompanyVisitInfo , error ) {
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " e" ) .
Select ( "e.id" , "e.name" , "e.mobile" , "e.industry" , "v.count AS visit_count" , "v.date AS visit_at" ,
"c.name AS company_name" ) .
2021-12-27 11:48:44 +08:00
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS v ON e.id = v.object_id AND v.kind = %d AND v.is_deleted = %d" ,
model . NewUserVisit ( ) . TableName ( ) , model . UserVisitKindForCompany , model . DeleteStatusForNot ) ) .
2021-12-13 14:05:11 +08:00
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS u_c ON v.uid = u_c.uid AND u_c.invalid_status = %d" ,
model . NewUserCompany ( ) . TableName ( ) , model . InvalidStatusForNot ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS c ON u_c.company_id = c.id" , model . NewManageCompany ( ) . TableName ( ) ) ) .
Where ( "e.examine_status = ? AND e.is_deleted = ?" , model . ExamineStatusForAgree , model . DeleteStatusForNot )
if len ( where ) > 0 {
for _ , v := range where {
if v . Condition == "" {
db . Where ( v . Value )
continue
}
db = db . Where ( v . Condition , v . Value )
}
}
out := make ( [ ] * ManageExpertCompanyVisitInfo , 0 )
if err := db . Count ( count ) . Error ; err != nil {
return nil , err
}
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
}
2021-10-11 16:30:53 +08:00
func NewManageExpert ( ) * ManageExpert {
return & ManageExpert { model . NewManageExpert ( ) }
}