feat:1、实现自定义模板功能

2、实现项目附件和图片按照项目组织
3、优化自动发布功能解决大项目发布时的性能问题
4、修复删除项目没有删除附件的问题
5、增加项目封面大小
6、增加部分项目操作日志
This commit is contained in:
lifei6671
2018-08-14 15:57:52 +08:00
parent 790b2aa611
commit aa2842cdf8
13 changed files with 519 additions and 230 deletions

View File

@@ -72,8 +72,8 @@ type Book struct {
IsUseFirstDocument int `orm:"column(is_use_first_document);type(int);default(0)" json:"is_use_first_document"`
}
func (b *Book) String() string {
ret, err := json.Marshal(*b)
func (book *Book) String() string {
ret, err := json.Marshal(*book)
if err != nil {
return ""
@@ -136,13 +136,13 @@ func (book *Book) Insert() error {
return err
}
func (book *Book) Find(id int) (*Book, error) {
func (book *Book) Find(id int,cols ...string) (*Book, error) {
if id <= 0 {
return book, ErrInvalidParameter
}
o := orm.NewOrm()
err := o.QueryTable(book.TableNameWithPrefix()).Filter("book_id", id).One(book)
err := o.QueryTable(book.TableNameWithPrefix()).Filter("book_id", id).One(book,cols...)
return book, err
}
@@ -221,7 +221,7 @@ func (book *Book) Copy(identify string) error {
return err
}
if len(docs) > 0 {
if err := recursiveInsertDocument(docs,o,book.BookId,0);err != nil {
if err := recursiveInsertDocument(docs,o, book.BookId,0);err != nil {
beego.Error("复制项目时出错 -> ",err)
o.Rollback()
return err
@@ -371,31 +371,41 @@ func (book *Book) ThoroughDeleteBook(id int) error {
}
o.Begin()
sql2 := "DELETE FROM " + NewDocument().TableNameWithPrefix() + " WHERE book_id = ?"
//删除附件,这里没有删除实际物理文件
_,err = o.Raw("DELETE FROM " + NewAttachment().TableNameWithPrefix() + " WHERE book_id=?").Exec()
if err != nil {
o.Rollback()
return err
}
_, err = o.Raw(sql2, book.BookId).Exec()
//删除文档
_, err = o.Raw( "DELETE FROM " + NewDocument().TableNameWithPrefix() + " WHERE book_id = ?", book.BookId).Exec()
if err != nil {
o.Rollback()
return err
}
sql3 := "DELETE FROM " + book.TableNameWithPrefix() + " WHERE book_id = ?"
_, err = o.Raw(sql3, book.BookId).Exec()
//删除项目
_, err = o.Raw("DELETE FROM " + book.TableNameWithPrefix() + " WHERE book_id = ?", book.BookId).Exec()
if err != nil {
o.Rollback()
return err
}
sql4 := "DELETE FROM " + NewRelationship().TableNameWithPrefix() + " WHERE book_id = ?"
_, err = o.Raw(sql4, book.BookId).Exec()
//删除关系
_, err = o.Raw("DELETE FROM " + NewRelationship().TableNameWithPrefix() + " WHERE book_id = ?", book.BookId).Exec()
if err != nil {
o.Rollback()
return err
}
//删除模板
_,err = o.Raw("DELETE FROM " + NewTemplate().TableNameWithPrefix() + " WHERE book_id = ?",book.BookId).Exec()
if err != nil {
o.Rollback()
return err
}
if book.Label != "" {
NewLabel().InsertOrUpdateMulti(book.Label)
@@ -821,7 +831,7 @@ func (book *Book) ImportBook(zipPath string) error {
beego.Error("导入项目异常 => ", err)
book.Description = "【项目导入存在错误:" + err.Error() + "】"
}
beego.Info("项目导入完毕 => ",book.BookName)
beego.Info("项目导入完毕 => ", book.BookName)
book.ReleaseContent(book.BookId)
return err
}

View File

@@ -204,11 +204,10 @@ func (m *Member) Update(cols ...string) error {
return nil
}
func (m *Member) Find(id int) (*Member, error) {
func (m *Member) Find(id int,cols ...string) (*Member, error) {
o := orm.NewOrm()
m.MemberId = id
if err := o.Read(m); err != nil {
if err := o.QueryTable(m.TableNameWithPrefix()).Filter("member_id",id).One(m,cols...); err != nil {
return m, err
}
m.ResolveRoleName()
@@ -408,6 +407,18 @@ func (m *Member) Delete(oldId int, newId int) error {
o.Rollback()
return err
}
_, err = o.Raw("UPDATE md_templates SET modify_at = ? WHERE modify_at = ?", newId, oldId).Exec()
if err != nil {
o.Rollback()
return err
}
_, err = o.Raw("UPDATE md_templates SET member_id = ? WHERE member_id = ?", newId, oldId).Exec()
if err != nil {
o.Rollback()
return err
}
//_,err = o.Raw("UPDATE md_relationship SET member_id = ? WHERE member_id = ?",newId,oldId).Exec()
//if err != nil {
//

View File

@@ -14,12 +14,15 @@ type Template struct {
TemplateName string `orm:"column(template_name);size(500);" json:"template_name"`
MemberId int `orm:"column(member_id);index" json:"member_id"`
BookId int `orm:"column(book_id);index" json:"book_id"`
BookName string `orm:"-" json:"book_name"`
//是否是全局模板0 否/1 是; 全局模板在所有项目中都可以使用;否则只能在创建模板的项目中使用
IsGlobal int `orm:"column(is_global);default(0)" json:"is_global"`
TemplateContent string `orm:"column(template_content);type(text);null" json:"template_content"`
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
CreateName string `orm:"-" json:"create_name"`
ModifyTime time.Time `orm:"column(modify_time);type(datetime);auto_now" json:"modify_time"`
ModifyAt int `orm:"column(modify_at);type(int)" json:"-"`
ModifyName string `orm:"-" json:"modify_name"`
Version int64 `orm:"type(bigint);column(version)" json:"version"`
}
@@ -125,14 +128,15 @@ func (t *Template) Save(cols ...string) (err error) {
}
o := orm.NewOrm()
if !o.QueryTable(NewBook()).Filter("book_id",t.BookId).Exist() {
if !o.QueryTable(NewBook().TableNameWithPrefix()).Filter("book_id",t.BookId).Exist() {
return errors.New("项目不存在")
}
if !o.QueryTable(NewMember()).Filter("member_id",t.MemberId).Filter("status",0).Exist() {
if !o.QueryTable(NewMember().TableNameWithPrefix()).Filter("member_id",t.MemberId).Filter("status",0).Exist() {
return errors.New("用户已被禁用")
}
t.Version = time.Now().Unix()
if t.TemplateId > 0 {
t.Version = time.Now().Unix()
t.ModifyTime = time.Now()
_,err = o.Update(t,cols...)
}else{
@@ -143,8 +147,38 @@ func (t *Template) Save(cols ...string) (err error) {
return
}
//预加载一些数据
func (t *Template) Preload() *Template {
if t != nil {
if t.MemberId > 0 {
m,err := NewMember().Find(t.MemberId,"account","real_name");
if err == nil {
if m.RealName != "" {
t.CreateName = m.RealName
}else{
t.CreateName = m.Account
}
}else{
beego.Error("加载模板所有者失败 ->",err)
}
}
if t.ModifyAt > 0 {
if m,err := NewMember().Find(t.ModifyAt,"account","real_name"); err == nil {
if m.RealName != "" {
t.ModifyName = m.RealName
}else{
t.ModifyName = m.Account
}
}
}
if t.BookId > 0 {
if b,err := NewBook().Find(t.BookId,"book_name");err == nil {
t.BookName = b.BookName
}
}
}
return t
}