DocumentSearchResult.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package models
  2. import (
  3. "time"
  4. "github.com/astaxie/beego/orm"
  5. )
  6. type DocumentSearchResult struct {
  7. DocumentId int `json:"doc_id"`
  8. DocumentName string `json:"doc_name"`
  9. // Identify 文档唯一标识
  10. Identify string `json:"identify"`
  11. Description string `json:"description"`
  12. Author string `json:"author"`
  13. ModifyTime time.Time `json:"modify_time"`
  14. CreateTime time.Time `json:"create_time"`
  15. BookId int `json:"book_id"`
  16. BookName string `json:"book_name"`
  17. BookIdentify string `json:"book_identify"`
  18. }
  19. func NewDocumentSearchResult() *DocumentSearchResult {
  20. return &DocumentSearchResult{}
  21. }
  22. //分页全局搜索.
  23. func (m *DocumentSearchResult) FindToPager(keyword string, pageIndex, pageSize, memberId int) (searchResult []*DocumentSearchResult, totalCount int, err error) {
  24. o := orm.NewOrm()
  25. offset := (pageIndex - 1) * pageSize
  26. keyword = "%" + keyword + "%"
  27. if memberId <= 0 {
  28. sql1 := `SELECT count(doc.document_id) as total_count FROM md_documents AS doc
  29. LEFT JOIN md_books as book ON doc.book_id = book.book_id
  30. WHERE book.privately_owned = 0 AND (doc.document_name LIKE ? OR doc.release LIKE ?) `
  31. sql2 := `SELECT doc.document_id,doc.modify_time,doc.create_time,doc.document_name,doc.identify,doc.release as description,doc.modify_time,book.identify as book_identify,book.book_name,rel.member_id,member.account AS author FROM md_documents AS doc
  32. LEFT JOIN md_books as book ON doc.book_id = book.book_id
  33. LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND rel.role_id = 0
  34. LEFT JOIN md_members as member ON rel.member_id = member.member_id
  35. WHERE book.privately_owned = 0 AND (doc.document_name LIKE ? OR doc.release LIKE ?)
  36. ORDER BY doc.document_id DESC LIMIT ?,? `
  37. err = o.Raw(sql1, keyword, keyword).QueryRow(&totalCount)
  38. if err != nil {
  39. return
  40. }
  41. _, err = o.Raw(sql2, keyword, keyword, offset, pageSize).QueryRows(&searchResult)
  42. if err != nil {
  43. return
  44. }
  45. } else {
  46. sql1 := `SELECT count(doc.document_id) as total_count FROM md_documents AS doc
  47. LEFT JOIN md_books as book ON doc.book_id = book.book_id
  48. LEFT JOIN md_relationship AS rel ON doc.book_id = rel.book_id AND rel.role_id = 0
  49. LEFT JOIN md_relationship AS rel1 ON doc.book_id = rel1.book_id AND rel1.member_id = ?
  50. left join (select * from (select book_id,team_member_id,role_id
  51. from md_team_relationship as mtr
  52. left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.role_id,t.team_member_id,t.book_id) as team
  53. on team.book_id = book.book_id
  54. WHERE (book.privately_owned = 0 OR rel1.relationship_id > 0 or team.team_member_id > 0) AND (doc.document_name LIKE ? OR doc.release LIKE ?) `
  55. sql2 := `SELECT doc.document_id,doc.modify_time,doc.create_time,doc.document_name,doc.identify,doc.release as description,doc.modify_time,book.identify as book_identify,book.book_name,rel.member_id,member.account AS author FROM md_documents AS doc
  56. LEFT JOIN md_books as book ON doc.book_id = book.book_id
  57. LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND rel.role_id = 0
  58. LEFT JOIN md_members as member ON rel.member_id = member.member_id
  59. LEFT JOIN md_relationship AS rel1 ON doc.book_id = rel1.book_id AND rel1.member_id = ?
  60. left join (select * from (select book_id,team_member_id,role_id
  61. from md_team_relationship as mtr
  62. left join md_team_member as mtm on mtm.team_id=mtr.team_id and mtm.member_id=? order by role_id desc )as t group by t.role_id,t.team_member_id,t.book_id) as team
  63. on team.book_id = book.book_id
  64. WHERE (book.privately_owned = 0 OR rel1.relationship_id > 0 or team.team_member_id > 0) AND (doc.document_name LIKE ? OR doc.release LIKE ?)
  65. ORDER BY doc.document_id DESC LIMIT ?,? `
  66. err = o.Raw(sql1, memberId, memberId, keyword, keyword).QueryRow(&totalCount)
  67. if err != nil {
  68. return
  69. }
  70. _, err = o.Raw(sql2, memberId, memberId, keyword, keyword, offset, pageSize).QueryRows(&searchResult)
  71. if err != nil {
  72. return
  73. }
  74. }
  75. return
  76. }
  77. //项目内搜索.
  78. func (m *DocumentSearchResult) SearchDocument(keyword string, book_id int) (docs []*DocumentSearchResult, err error) {
  79. o := orm.NewOrm()
  80. sql := "SELECT * FROM md_documents WHERE book_id = ? AND (document_name LIKE ? OR `release` LIKE ?) "
  81. keyword = "%" + keyword + "%"
  82. _, err = o.Raw(sql, book_id, keyword, keyword).QueryRows(&docs)
  83. return
  84. }