Files
2022-01-12 15:05:14 +08:00

128 lines
3.5 KiB
Go

package service
import (
"SciencesServer/app/api/admin/model"
"SciencesServer/app/basic/controller"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/session"
"SciencesServer/serve/orm"
"errors"
"gorm.io/gorm"
"time"
)
type Message struct {
*session.Admin
}
type MessageHandle func(session *session.Admin) *Message
type MessageInfo struct {
ID string `json:"id"`
*model.ServiceMessageInfo
Area string `json:"area"`
AreaDomain string `json:"area_domain"`
}
// Instance 列表信息
func (c *Message) Instance(tenantID uint64, name string, status int, content string, page, pageSize int) (*controller.ReturnPages, error) {
mServiceMessage := model.NewServiceMessage()
where := make([]*model2.ModelWhere, 0)
if c.TenantID > 0 {
where = append(where, model2.NewWhere("m.tenant_id", c.TenantID))
}
if tenantID > 0 {
where = append(where, model2.NewWhere("m.tenant_id", tenantID))
}
if name != "" {
where = append(where, model2.NewWhereLike("m.name", name))
}
if status > 0 {
where = append(where, model2.NewWhere("m.status", status))
}
if content != "" {
where = append(where, model2.NewWhereLike("m.content", content))
}
var count int64
out, err := mServiceMessage.Message(page, pageSize, &count, where...)
if err != nil {
return nil, err
}
list := make([]*MessageInfo, 0)
for _, v := range out {
list = append(list, &MessageInfo{
ID: v.GetEncodeID(),
ServiceMessageInfo: v,
Area: v.FormatBasic(),
AreaDomain: v.Domain,
})
}
return &controller.ReturnPages{Data: list, Count: count}, err
}
// Handle 处理操作
func (c *Message) Handle(id uint64, content string) error {
mServiceMessage := model.NewServiceMessage()
mServiceMessage.ID = id
isExist, err := model2.FirstField(mServiceMessage.ServiceMessage, []string{"id", "tenant_id", "status"})
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,留言信息不存在或已被删除")
} else if c.TenantID > 0 && mServiceMessage.TenantID != c.TenantID {
return errors.New("操作错误,无权限操作")
}
if mServiceMessage.Status != model2.ServiceMessageStatusForProcessing {
return errors.New("操作错误,当前留言信息已处理")
}
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
if err = model2.Updates(mServiceMessage.ServiceMessage, map[string]interface{}{
"status": model2.ServiceMessageStatusForProcessed, "updated_at": time.Now(),
}, tx); err != nil {
return err
}
mServiceMessageLog := model.NewServiceMessageLog()
mServiceMessageLog.UID = c.UID
mServiceMessageLog.MessageID = id
mServiceMessageLog.Content = content
if err = model2.Create(mServiceMessageLog.ServiceMessageLog, tx); err != nil {
return err
}
return nil
})
}
// Delete 删除操作
func (c *Message) Delete(id uint64) error {
mServiceMessage := model.NewServiceMessage()
mServiceMessage.ID = id
isExist, err := model2.FirstField(mServiceMessage.ServiceMessage, []string{"id", "tenant_id", "status"})
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,留言信息不存在或已被删除")
} else if c.TenantID > 0 && mServiceMessage.TenantID != c.TenantID {
return errors.New("操作错误,无权限操作")
}
if mServiceMessage.Status != model2.ServiceMessageStatusForProcessing {
return errors.New("操作错误,当前留言信息已处理")
}
return model2.Delete(mServiceMessage.ServiceMessage)
}
func NewMessage() MessageHandle {
return func(session *session.Admin) *Message {
return &Message{session}
}
}