2021-12-15 14:31:14 +08:00
package model
import (
"SciencesServer/app/common/model"
"SciencesServer/serve/orm"
"fmt"
)
type TechnologyAchievement struct {
* model . TechnologyAchievement
}
2021-12-22 17:16:13 +08:00
// TechnologyAchievementInfo 技术成果信息
type TechnologyAchievementInfo struct {
* model . TechnologyAchievement
VisitCount int ` json:"visit_count" `
CollectCount int ` json:"collect_count" `
}
// Achievement 成果信息
func ( m * TechnologyAchievement ) Achievement ( page , pageSize int , count * int64 , where ... * model . ModelWhere ) ( [ ] * TechnologyAchievementInfo , error ) {
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS a" ) .
Select ( "a.id" , "a.title" , "a.mode" , "a.image" , "a.industry" , "a.customer" , "a.maturity" ,
"a.cooperation_mode" , "a.keyword" , "v.count AS visit_count" , "c.count AS collect_count" ) .
Joins ( fmt . Sprintf ( "LEFT JOIN (SELECT achievement_id, SUM(count) AS count FROM %s WHERE is_deleted = %d GROUP BY achievement_id) AS v ON a.id = v.achievement_id" ,
model . NewTechnologyAchievementVisit ( ) . TableName ( ) , model . DeleteStatusForNot ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN (SELECT achievement_id, SUM(count) AS count FROM %s WHERE is_deleted = %d GROUP BY achievement_id) AS c ON a.id = c.achievement_id" ,
model . NewTechnologyAchievementCollect ( ) . TableName ( ) , model . DeleteStatusForNot ) ) .
Where ( "a.status = ?" , model . TechnologyAchievementStatusForAgree ) .
Where ( "a.is_deleted = ?" , model . DeleteStatusForNot )
if len ( where ) > 0 {
for _ , v := range where {
db = db . Where ( v . Condition , v . Value )
}
}
out := make ( [ ] * TechnologyAchievementInfo , 0 )
if err := db . Count ( count ) . Error ; err != nil {
return nil , err
}
if err := db . Order ( "a.id " + model . OrderModeToDesc ) . Offset ( ( page - 1 ) * pageSize ) . Limit ( pageSize ) . Scan ( & out ) . Error ; err != nil {
return nil , err
}
return out , nil
}
// Detail 成果详细信息
func ( m * TechnologyAchievement ) Detail ( id uint64 ) ( * TechnologyAchievementInfo , error ) {
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS a" ) .
Select ( "a.*" , "v.count AS visit_count" , "c.count AS collect_count" ) .
Joins ( fmt . Sprintf ( "LEFT JOIN (SELECT achievement_id, SUM(count) AS count FROM %s WHERE is_deleted = %d GROUP BY achievement_id) AS v ON a.id = v.achievement_id" ,
model . NewTechnologyAchievementVisit ( ) . TableName ( ) , model . DeleteStatusForNot ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN (SELECT achievement_id, SUM(count) AS count FROM %s WHERE is_deleted = %d GROUP BY achievement_id) AS c ON a.id = c.achievement_id" ,
model . NewTechnologyAchievementCollect ( ) . TableName ( ) , model . DeleteStatusForNot ) ) .
Where ( "a.id = ?" , id )
out := new ( TechnologyAchievementInfo )
if err := db . Scan ( & out ) . Error ; err != nil {
return nil , err
}
return out , nil
}
2021-12-15 14:31:14 +08:00
// Distribution 分布信息
func ( m * TechnologyAchievement ) Distribution ( ) ( [ ] * DataAreaDistributionInfo , error ) {
out := make ( [ ] * DataAreaDistributionInfo , 0 )
err := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS a" ) .
Select ( "e.province" , "e.city" , "GROUP_CONCAT(a.industry SEPARATOR '&') AS industry" ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS u_e ON a.uid = u_e.uid" , model . NewUserExpert ( ) . TableName ( ) ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS e ON u_e.expert_id = e.id" , model . NewManageExpert ( ) . TableName ( ) ) ) .
Group ( "e.province" ) . Group ( "e.city" ) .
Order ( "e.province " + model . OrderModeToAsc ) . Order ( "e.city " + model . OrderModeToAsc ) .
Where ( "a.status = ?" , model . TechnologyAchievementStatusForAgree ) .
Where ( "a.shelf_status = ?" , model . ShelfStatusForUp ) .
Scan ( & out ) . Error
return out , err
}
func NewTechnologyAchievement ( ) * TechnologyAchievement {
return & TechnologyAchievement { model . NewTechnologyAchievement ( ) }
}