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" `
}
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 ( ) }
}