document_search_result.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. func (m *DocumentSearchResult) FindToPager(keyword string,page_index,page_size,member_id int) (search_result []*DocumentSearchResult,total_count int,err error) {
  23. o := orm.NewOrm()
  24. offset := (page_index - 1) * page_size
  25. keyword = "%"+keyword+"%"
  26. if member_id <= 0 {
  27. sql1 := `SELECT count(doc.document_id) as total_count FROM md_documents AS doc
  28. LEFT JOIN md_books as book ON doc.book_id = book.book_id
  29. WHERE book.privately_owned = 0 AND (doc.document_name LIKE ? OR doc.release LIKE ?) `
  30. 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
  31. LEFT JOIN md_books as book ON doc.book_id = book.book_id
  32. LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND role_id = 0
  33. LEFT JOIN md_members as member ON rel.member_id = member.member_id
  34. WHERE book.privately_owned = 0 AND (doc.document_name LIKE ? OR doc.release LIKE ?)
  35. ORDER BY doc.document_id DESC LIMIT ?,? `
  36. err = o.Raw(sql1,keyword,keyword).QueryRow(&total_count)
  37. if err != nil{
  38. return
  39. }
  40. _,err = o.Raw(sql2,keyword,keyword,offset,page_size).QueryRows(&search_result)
  41. if err != nil {
  42. return
  43. }
  44. }else{
  45. sql1 := `SELECT count(doc.document_id) as total_count FROM md_documents AS doc
  46. LEFT JOIN md_books as book ON doc.book_id = book.book_id
  47. LEFT JOIN md_relationship AS rel ON doc.book_id = rel.book_id AND role_id = 0
  48. LEFT JOIN md_relationship AS rel1 ON doc.book_id = rel1.book_id AND rel1.member_id = ?
  49. WHERE (book.privately_owned = 0 OR rel1.relationship_id > 0) AND (doc.document_name LIKE ? OR doc.release LIKE ?) `
  50. 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
  51. LEFT JOIN md_books as book ON doc.book_id = book.book_id
  52. LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND role_id = 0
  53. LEFT JOIN md_members as member ON rel.member_id = member.member_id
  54. LEFT JOIN md_relationship AS rel1 ON doc.book_id = rel1.book_id AND rel1.member_id = ?
  55. WHERE (book.privately_owned = 0 OR rel1.relationship_id > 0) AND (doc.document_name LIKE ? OR doc.release LIKE ?)
  56. ORDER BY doc.document_id DESC LIMIT ?,? `
  57. err = o.Raw(sql1,member_id,keyword,keyword).QueryRow(&total_count)
  58. if err != nil{
  59. return
  60. }
  61. _,err = o.Raw(sql2,member_id,keyword,keyword,offset,page_size).QueryRows(&search_result)
  62. if err != nil {
  63. return
  64. }
  65. }
  66. return
  67. }