package model import ( "SciencesServer/app/common/model" "SciencesServer/serve/orm" "fmt" ) type ManageExpert struct { *model.ManageExpert } type ManageExpertInfo struct { *model.ManageExpert PatentTitle string `json:"-"` Research string `json:"-"` Introduce string `json:"introduce"` } // Expert 专家信息 func (m *ManageExpert) Expert(limit int, where ...*model.ModelWhere) ([]*ManageExpertInfo, error) { // 专利信息 mSysPatent := model.NewSysPatent() // 用户专利信息 mUserPatent := model.NewUserPatent() 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 = e_u.expert_id AND e_u.invalid_status = %d AND e_u.is_deleted = %d", model.NewUserExpert().TableName(), model.InvalidStatusForNot, model.DeleteStatusForNot)). Joins(fmt.Sprintf(`LEFT JOIN (SELECT u.uid, SUBSTRING_INDEX(GROUP_CONCAT(p.title ORDER BY p.id DESC SEPARATOR '&&'), '&&', %d) AS title FROM %s AS u LEFT JOIN %s AS p ON u.patent_id = p.id WHERE u.is_deleted = %d AND p.shelf_status = %d GROUP BY u.uid) AS p ON e_u.uid = p.uid`, limit, mUserPatent.TableName(), mSysPatent.TableName(), model.DeleteStatusForNot, model.ShelfStatusForUp)). 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([]*ManageExpertInfo, 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) (*ManageExpertInfo, error) { // 专利信息 mSysPatent := model.NewSysPatent() // 用户专利信息 mUserPatent := model.NewUserPatent() 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 = e_u.expert_id AND e_u.invalid_status = %d AND e_u.is_deleted = %d", model.NewUserExpert().TableName(), model.InvalidStatusForNot, model.DeleteStatusForNot)). Joins(fmt.Sprintf(`LEFT JOIN (SELECT u.uid, SUBSTRING_INDEX(GROUP_CONCAT(p.title ORDER BY p.id DESC SEPARATOR '&&'), '&&', %d) AS title FROM %s AS u LEFT JOIN %s AS p ON u.patent_id = p.id WHERE u.is_deleted = %d AND p.shelf_status = %d GROUP BY u.uid) AS p ON e_u.uid = p.uid`, limit, mUserPatent.TableName(), mSysPatent.TableName(), model.DeleteStatusForNot, model.ShelfStatusForUp)). Where("e.id = ?", id) out := new(ManageExpertInfo) if err := db.Scan(&out).Error; err != nil { return nil, err } return out, nil } // Distribution 分布信息 func (m *ManageExpert) Distribution(province, city string) ([]*DataAreaDistributionInfo, error) { out := make([]*DataAreaDistributionInfo, 0) db := orm.GetDB().Table(m.TableName()). Select("province", "city", "district", "GROUP_CONCAT(industry SEPARATOR '&') AS industry"). Group("province").Group("city").Group("district") err := db.Order("province "+model.OrderModeToAsc).Order("city "+model.OrderModeToAsc).Order("district "+model.OrderModeToAsc). Where("examine_status = ?", model.ExamineStatusForAgree). Scan(&out).Error return out, err } func NewManageExpert() *ManageExpert { return &ManageExpert{model.NewManageExpert()} }