123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- package models
- import (
- "time"
- "strings"
- "github.com/beego/beego/v2/client/orm"
- "github.com/beego/beego/v2/core/logs"
- )
- type DocumentSearchResult struct {
- DocumentId int `json:"doc_id"`
- DocumentName string `json:"doc_name"`
- // Identify 文档唯一标识
- Identify string `json:"identify"`
- Description string `json:"description"`
- Author string `json:"author"`
- ModifyTime time.Time `json:"modify_time"`
- CreateTime time.Time `json:"create_time"`
- BookId int `json:"book_id"`
- BookName string `json:"book_name"`
- BookIdentify string `json:"book_identify"`
- SearchType string `json:"search_type"`
- }
- func NewDocumentSearchResult() *DocumentSearchResult {
- return &DocumentSearchResult{}
- }
- //分页全局搜索.
- func (m *DocumentSearchResult) FindToPager(keyword string, pageIndex, pageSize, memberId int) (searchResult []*DocumentSearchResult, totalCount int, err error) {
- o := orm.NewOrm()
- offset := (pageIndex - 1) * pageSize
- keyword = "%" + strings.Replace(keyword, " ", "%", -1) + "%"
- if memberId <= 0 {
- sql1 := `SELECT count(doc.document_id) as total_count FROM md_documents AS doc
- LEFT JOIN md_books as book ON doc.book_id = book.book_id
- WHERE book.privately_owned = 0 AND (doc.document_name LIKE ? OR doc.release LIKE ?) `
- sql2 := `SELECT *
- FROM (
- SELECT
- doc.document_id,
- doc.modify_time,
- doc.create_time,
- doc.document_name,
- doc.identify,
- doc.release AS description,
- book.identify AS book_identify,
- book.book_name,
- rel.member_id,
- member.account AS author,
- 'document' AS search_type
- FROM md_documents AS doc
- LEFT JOIN md_books AS book ON doc.book_id = book.book_id
- LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND rel.role_id = 0
- LEFT JOIN md_members AS member ON rel.member_id = member.member_id
- WHERE book.privately_owned = 0 AND (doc.document_name LIKE ? OR doc.release LIKE ?)
- UNION ALL
- SELECT
- book.book_id AS document_id,
- book.modify_time,
- book.create_time,
- book.book_name AS document_name,
- book.identify,
- book.description,
- book.identify AS book_identify,
- book.book_name,
- rel.member_id,
- member.account AS author,
- 'book' AS search_type
- FROM md_books AS book
- LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND rel.role_id = 0
- LEFT JOIN md_members AS member ON rel.member_id = member.member_id
- WHERE book.privately_owned = 0 AND (book.book_name LIKE ? OR book.description LIKE ?)
- UNION ALL
- SELECT
- blog.blog_id AS document_id,
- blog.modify_time,
- blog.create_time,
- blog.blog_title as document_name,
- blog.blog_identify,
- blog.blog_release,
- blog.blog_identify,
- blog.blog_title as book_name,
- blog.member_id,
- member.account,
- 'blog' AS search_type
- FROM md_blogs AS blog
- LEFT JOIN md_members AS member ON blog.member_id = member.member_id
- WHERE blog.blog_status = 'public' AND (blog.blog_release LIKE ? OR blog.blog_title LIKE ?)
- ) AS union_table
- ORDER BY create_time DESC
- LIMIT ?, ?;`
- err = o.Raw(sql1, keyword, keyword).QueryRow(&totalCount)
- if err != nil {
- logs.Error("查询搜索结果失败 -> ", err)
- return
- }
- sql3 := ` SELECT
- count(*)
- FROM md_blogs AS blog
- WHERE blog.blog_status = 'public' AND (blog.blog_release LIKE ? OR blog.blog_title LIKE ?);`
- c := 0
- err = o.Raw(sql3, keyword, keyword).QueryRow(&c)
- if err != nil {
- logs.Error("查询搜索结果失败 -> ", err)
- return
- }
- totalCount += c
- //查询项目的数量
- sql4 := `SELECT count(*) as total_count FROM md_books as book
- WHERE book.privately_owned = 0 AND (book.book_name LIKE ? OR book.description LIKE ?);`
- err = o.Raw(sql4, keyword, keyword).QueryRow(&c)
- if err != nil {
- logs.Error("查询搜索结果失败 -> ", err)
- return
- }
- totalCount += c
- _, err = o.Raw(sql2, keyword, keyword, keyword, keyword, keyword, keyword, offset, pageSize).QueryRows(&searchResult)
- if err != nil {
- logs.Error("查询搜索结果失败 -> ", err)
- return
- }
- } else {
- sql1 := `SELECT count(doc.document_id) as total_count FROM md_documents AS doc
- LEFT JOIN md_books as book ON doc.book_id = book.book_id
- LEFT JOIN md_relationship AS rel ON doc.book_id = rel.book_id AND rel.role_id = 0
- LEFT JOIN md_relationship AS rel1 ON doc.book_id = rel1.book_id AND rel1.member_id = ?
- left join (select * from (select book_id,team_member_id,role_id
- from md_team_relationship as mtr
- 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
- on team.book_id = book.book_id
- 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 ?);`
- sql2 := `SELECT *
- FROM (
- SELECT
- doc.document_id,
- doc.modify_time,
- doc.create_time,
- doc.document_name,
- doc.identify,
- doc.release AS description,
- book.identify AS book_identify,
- book.book_name,
- rel.member_id,
- member.account AS author,
- 'document' AS search_type
- FROM md_documents AS doc
- LEFT JOIN md_books AS book ON doc.book_id = book.book_id
- LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND rel.role_id = 0
- LEFT JOIN md_members AS member ON rel.member_id = member.member_id
- LEFT JOIN md_relationship AS rel1 ON doc.book_id = rel1.book_id AND rel1.member_id = ?
- LEFT JOIN (SELECT *
- FROM (SELECT
- book_id,
- team_member_id,
- role_id
- FROM md_team_relationship AS mtr
- 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
- ON team.book_id = book.book_id
- 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 ?)
- UNION ALL
- SELECT
- book.book_id AS document_id,
- book.modify_time,
- book.create_time,
- book.book_name AS document_name,
- book.identify,
- book.description AS description,
- book.identify AS book_identify,
- book.book_name,
- rel.member_id,
- member.account AS author,
- 'book' AS search_type
- FROM md_books AS book
- LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND rel.role_id = 0
- LEFT JOIN md_members AS member ON rel.member_id = member.member_id
- LEFT JOIN md_relationship AS rel1 ON book.book_id = rel1.book_id AND rel1.member_id = ?
- LEFT JOIN (SELECT *
- FROM (SELECT
- book_id,
- team_member_id,
- role_id
- FROM md_team_relationship AS mtr
- 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
- ON team.book_id = book.book_id
- WHERE (book.privately_owned = 0 OR rel1.relationship_id > 0 OR team.team_member_id > 0) AND
- (book.book_name LIKE ? OR book.description LIKE ?)
- UNION ALL
- SELECT
- blog.blog_id AS document_id,
- blog.modify_time,
- blog.create_time,
- blog.blog_title as document_name,
- blog.blog_identify as identify,
- blog.blog_release as description,
- blog.blog_identify AS book_identify,
- blog.blog_title as book_name,
- blog.member_id,
- member.account,
- 'blog' AS search_type
- FROM md_blogs AS blog
- LEFT JOIN md_members AS member ON blog.member_id = member.member_id
- WHERE (blog.blog_status = 'public' OR blog.member_id = ?) AND blog.blog_type = 0 AND
- (blog.blog_release LIKE ? OR blog.blog_title LIKE ?)
- ) AS union_table
- ORDER BY create_time DESC
- LIMIT ?, ?;`
- err = o.Raw(sql1, memberId, memberId, keyword, keyword).QueryRow(&totalCount)
- if err != nil {
- return
- }
- sql3 := ` SELECT
- count(*)
- FROM md_blogs AS blog
- WHERE (blog.blog_status = 'public' OR blog.member_id = ?) AND blog.blog_type = 0 AND
- (blog.blog_release LIKE ? OR blog.blog_title LIKE ?);`
- c := 0
- err = o.Raw(sql3, memberId, keyword, keyword).QueryRow(&c)
- if err != nil {
- logs.Error("查询搜索结果失败 -> ", err)
- return
- }
- totalCount += c
- sql4 := `SELECT count(*) as total_count FROM md_books as book
- LEFT JOIN md_relationship AS rel ON book.book_id = rel.book_id AND rel.role_id = 0
- LEFT JOIN md_relationship AS rel1 ON book.book_id = rel1.book_id AND rel1.member_id = ?
- left join (select * from (select book_id,team_member_id,role_id
- from md_team_relationship as mtr
- 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
- on team.book_id = book.book_id
- WHERE (book.privately_owned = 0 OR rel1.relationship_id > 0 or team.team_member_id > 0) AND (book.book_name LIKE ? OR book.description LIKE ?);`
- err = o.Raw(sql4, memberId, memberId, keyword, keyword).QueryRow(&c)
- if err != nil {
- logs.Error("查询搜索结果失败 -> ", err)
- return
- }
- totalCount += c
- _, err = o.Raw(sql2, memberId, memberId, keyword, keyword, memberId, memberId, keyword, keyword, memberId, keyword, keyword, offset, pageSize).QueryRows(&searchResult)
- if err != nil {
- return
- }
- }
- return
- }
- //项目内搜索.
- func (m *DocumentSearchResult) SearchDocument(keyword string, bookId int) (docs []*DocumentSearchResult, err error) {
- o := orm.NewOrm()
- sql := "SELECT * FROM md_documents WHERE book_id = ? AND (document_name LIKE ? OR `release` LIKE ?) "
- keyword = "%" + keyword + "%"
- _, err = o.Raw(sql, bookId, keyword, keyword).QueryRows(&docs)
- return
- }
|