forked from mindoc-org/mindoc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAttachmentModel.go
155 lines (121 loc) · 4.26 KB
/
AttachmentModel.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
//数据库模型.
package models
import (
"time"
"os"
"strings"
"github.com/beego/beego/v2/client/orm"
"github.com/beego/beego/v2/core/logs"
"github.com/mindoc-org/mindoc/conf"
"github.com/mindoc-org/mindoc/utils/filetil"
)
// Attachment struct .
type Attachment struct {
AttachmentId int `orm:"column(attachment_id);pk;auto;unique" json:"attachment_id"`
BookId int `orm:"column(book_id);type(int);description(所属book id)" json:"book_id"`
DocumentId int `orm:"column(document_id);type(int);null;description(所属文档id)" json:"doc_id"`
FileName string `orm:"column(file_name);size(255);description(文件名称)" json:"file_name"`
FilePath string `orm:"column(file_path);size(2000);description(文件路径)" json:"file_path"`
FileSize float64 `orm:"column(file_size);type(float);description(文件大小 字节)" json:"file_size"`
HttpPath string `orm:"column(http_path);size(2000);description(文件路径)" json:"http_path"`
FileExt string `orm:"column(file_ext);size(50);description(文件后缀)" json:"file_ext"`
CreateTime time.Time `orm:"type(datetime);column(create_time);auto_now_add;description(创建时间)" json:"create_time"`
CreateAt int `orm:"column(create_at);type(int);description(创建人id)" json:"create_at"`
}
// TableName 获取对应上传附件数据库表名.
func (m *Attachment) TableName() string {
return "attachment"
}
// TableEngine 获取数据使用的引擎.
func (m *Attachment) TableEngine() string {
return "INNODB"
}
func (m *Attachment) TableNameWithPrefix() string {
return conf.GetDatabasePrefix() + m.TableName()
}
func NewAttachment() *Attachment {
return &Attachment{}
}
func (m *Attachment) Insert() error {
o := orm.NewOrm()
_, err := o.Insert(m)
return err
}
func (m *Attachment) Update() error {
o := orm.NewOrm()
_, err := o.Update(m)
return err
}
func (m *Attachment) Delete() error {
o := orm.NewOrm()
_, err := o.Delete(m)
if err == nil {
if err1 := os.Remove(m.FilePath); err1 != nil {
logs.Error(err1)
}
}
return err
}
func (m *Attachment) Find(id int) (*Attachment, error) {
if id <= 0 {
return m, ErrInvalidParameter
}
o := orm.NewOrm()
err := o.QueryTable(m.TableNameWithPrefix()).Filter("attachment_id", id).One(m)
return m, err
}
//查询指定文档的附件列表
func (m *Attachment) FindListByDocumentId(docId int) (attaches []*Attachment, err error) {
o := orm.NewOrm()
_, err = o.QueryTable(m.TableNameWithPrefix()).Filter("document_id", docId).Filter("book_id__gt", 0).OrderBy("-attachment_id").All(&attaches)
return
}
//分页查询附件
func (m *Attachment) FindToPager(pageIndex, pageSize int) (attachList []*AttachmentResult, totalCount int, err error) {
o := orm.NewOrm()
total, err := o.QueryTable(m.TableNameWithPrefix()).Count()
if err != nil {
return nil, 0, err
}
totalCount = int(total)
offset := (pageIndex - 1) * pageSize
var list []*Attachment
_, err = o.QueryTable(m.TableNameWithPrefix()).OrderBy("-attachment_id").Offset(offset).Limit(pageSize).All(&list)
if err != nil {
if err == orm.ErrNoRows {
logs.Info("没有查到附件 ->", err)
err = nil
}
return
}
for _, item := range list {
attach := &AttachmentResult{}
attach.Attachment = *item
attach.FileShortSize = filetil.FormatBytes(int64(attach.FileSize))
//当项目ID为0标识是文章的附件
if item.BookId == 0 && item.DocumentId > 0 {
blog := NewBlog()
if err := o.QueryTable(blog.TableNameWithPrefix()).Filter("blog_id", item.DocumentId).One(blog, "blog_title"); err == nil {
attach.BookName = blog.BlogTitle
} else {
attach.BookName = "[文章不存在]"
}
} else {
book := NewBook()
if e := o.QueryTable(book.TableNameWithPrefix()).Filter("book_id", item.BookId).One(book, "book_name"); e == nil {
attach.BookName = book.BookName
doc := NewDocument()
if e := o.QueryTable(doc.TableNameWithPrefix()).Filter("document_id", item.DocumentId).One(doc, "document_name"); e == nil {
attach.DocumentName = doc.DocumentName
} else {
attach.DocumentName = "[文档不存在]"
}
} else {
attach.BookName = "[项目不存在]"
}
}
attach.LocalHttpPath = strings.Replace(item.FilePath, "\\", "/", -1)
attachList = append(attachList, attach)
}
return
}