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
2022-01-26 16:14:16 +08:00
ResearchName string ` json:"research_name" `
VisitCount int ` json:"visit_count" `
CollectCount int ` json:"collect_count" `
2021-12-22 17:16:13 +08:00
}
2022-01-18 16:29:29 +08:00
// Achievements 成果信息
func ( m * TechnologyAchievement ) Achievements ( page , pageSize int , count * int64 , where ... * model . ModelWhere ) ( [ ] * TechnologyAchievementInfo , error ) {
2021-12-22 17:16:13 +08:00
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS a" ) .
2022-01-25 16:37:12 +08:00
Select ( "a.id" , "a.title" , "a.mode" , "a.image" , "a.config" , "a.industry" , "a.customer" , "a.maturity" ,
2022-01-26 16:14:16 +08:00
"a.cooperation_mode" , "a.keyword" , "r.name AS research_name" , "v.count AS visit_count" , "c.count AS collect_count" ) .
2021-12-27 11:48:44 +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 a.id = v.object_id" ,
model . NewUserVisit ( ) . TableName ( ) , model . UserCollectKindForTechnologyAchievement , 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 a.id = c.object_id" ,
model . NewUserCollect ( ) . TableName ( ) , model . UserCollectKindForTechnologyAchievement , model . DeleteStatusForNot ) ) .
2022-01-26 16:14:16 +08:00
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS u_e ON a.uid = u_e.uid AND u_e.is_deleted = %d AND u_e.invalid_status = %d" ,
model . NewUserExpert ( ) . TableName ( ) , model . DeleteStatusForNot , model . InvalidStatusForNot ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS e ON u_e.expert_id = e.id" , model . NewManageExpert ( ) . TableName ( ) ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS r ON e.research_id = r.id" , model . NewManageResearch ( ) . TableName ( ) ) ) .
2022-01-21 11:42:58 +08:00
Where ( "a.status = ?" , model . TechnologyStatusKindForAgree ) .
2021-12-22 17:16:13 +08:00
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
}
2022-01-18 16:29:29 +08:00
// Achievement 成果信息
func ( m * TechnologyAchievement ) Achievement ( where ... * model . ModelWhere ) ( [ ] * TechnologyAchievementInfo , error ) {
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS a" ) .
2022-02-08 11:05:47 +08:00
Select ( "a.id" , "a.title" , "a.mode" , "a.image" , "a.config" , "a.industry" , "a.customer" , "a.maturity" ,
2022-01-18 16:29:29 +08:00
"a.cooperation_mode" , "a.keyword" , "v.count AS visit_count" , "c.count AS collect_count" ) .
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 a.id = v.object_id" ,
model . NewUserVisit ( ) . TableName ( ) , model . UserCollectKindForTechnologyAchievement , 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 a.id = c.object_id" ,
model . NewUserCollect ( ) . TableName ( ) , model . UserCollectKindForTechnologyAchievement , model . DeleteStatusForNot ) ) .
2022-01-21 11:42:58 +08:00
Where ( "a.status = ?" , model . TechnologyStatusKindForAgree ) .
2022-01-18 16:29:29 +08:00
Where ( "a.is_deleted = ?" , model . DeleteStatusForNot )
out := make ( [ ] * TechnologyAchievementInfo , 0 )
if len ( where ) > 0 {
for _ , v := range where {
db = db . Where ( v . Condition , v . Value )
}
}
if err := db . Order ( "a.id " + model . OrderModeToDesc ) . Scan ( & out ) . Error ; err != nil {
return nil , err
}
return out , nil
}
2021-12-22 17:16:13 +08:00
// 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" ) .
2021-12-27 11:48:44 +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 a.id = v.object_id" ,
model . NewUserVisit ( ) . TableName ( ) , model . UserCollectKindForTechnologyAchievement , 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 a.id = c.object_id" ,
model . NewUserCollect ( ) . TableName ( ) , model . UserCollectKindForTechnologyAchievement , model . DeleteStatusForNot ) ) .
2021-12-22 17:16:13 +08:00
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" ) .
2022-01-06 10:43:27 +08:00
Select ( "e.province" , "e.city" , "e.district" , "GROUP_CONCAT(a.industry SEPARATOR '&') AS industry" ) .
2021-12-15 14:31:14 +08:00
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 ( ) ) ) .
2022-01-06 10:43:27 +08:00
Group ( "e.province" ) . Group ( "e.city" ) . Group ( "e.district" ) .
Order ( "e.province " + model . OrderModeToAsc ) . Order ( "e.city " + model . OrderModeToAsc ) . Order ( "e.district " + model . OrderModeToAsc ) .
2022-01-21 11:42:58 +08:00
Where ( "a.status = ?" , model . TechnologyStatusKindForAgree ) .
2021-12-15 14:31:14 +08:00
Where ( "a.shelf_status = ?" , model . ShelfStatusForUp ) .
Scan ( & out ) . Error
return out , err
}
func NewTechnologyAchievement ( ) * TechnologyAchievement {
return & TechnologyAchievement { model . NewTechnologyAchievement ( ) }
}