117 lines
3.8 KiB
Go
117 lines
3.8 KiB
Go
package model
|
|
|
|
import (
|
|
"backend/msg"
|
|
util "backend/util"
|
|
"fmt"
|
|
"log"
|
|
)
|
|
|
|
type Mail struct {
|
|
AppId int `json:"AppId"`
|
|
ServerId int `json:"ServerId"`
|
|
PageSize int `json:"PageSize"`
|
|
CurrentPage int `json:"CurrentPage"`
|
|
|
|
MailId int `json:"mail_id" db:"mail_id"`
|
|
Title string `json:"title" db:"title"`
|
|
SubTitle string `json:"subtitle" db:"subTitle"`
|
|
Content string `json:"content" db:"content"`
|
|
|
|
TitleEn string `json:"title_en" db:"title_en"`
|
|
SubTitleEn string `json:"subtitle_en" db:"subTitle_en"`
|
|
ContentEn string `json:"content_en" db:"content_en"`
|
|
|
|
TitlePtBr string `json:"title_ptbr" db:"title_ptbr"`
|
|
SubTitlePtBr string `json:"subtitle_ptbr" db:"subTitle_ptbr"`
|
|
ContentPtBr string `json:"content_ptbr" db:"content_ptbr"`
|
|
|
|
StartTime int64 `json:"start_time" db:"start_time"`
|
|
EndTime int64 `json:"end_time" db:"end_time"`
|
|
Items string `json:"items" db:"items"`
|
|
RegisterTime int64 `json:"register_time" db:"register_time"`
|
|
MailType int `json:"mail_type" db:"mail_type"`
|
|
SendType int `json:"send_type" db:"send_type"`
|
|
ToUids string `json:"to_uids" db:"to_uids"`
|
|
CreateTime int64 `json:"create_time" db:"create_time"`
|
|
}
|
|
|
|
type Result struct {
|
|
Data interface{} `json:"data"`
|
|
Total int `json:"total"`
|
|
OperationList []string `json:"operationList,omitempty"`
|
|
}
|
|
|
|
func (m *Mail) MailList() (*Result, error) {
|
|
// do something
|
|
AppCfg, err := util.GetAppConfig(m.AppId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
Db := util.MPool.GetMysqlDB(AppCfg, m.ServerId)
|
|
defer Db.Close()
|
|
var mail []*Mail
|
|
err = Db.Select(&mail, "SELECT `mail_id`, `title`, `content`, `start_time`, `end_time`, `items`, `register_time`, `mail_type`,`send_type`, `to_uids`, `create_time`, `subTitle`, `subTitle_en`, `content_en`, `title_en`, `title_ptbr`,`subTitle_ptbr`, `content_ptbr` FROM system_mail_info")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to scan rows: %v", err)
|
|
}
|
|
var total int
|
|
err = Db.Get(&total, "SELECT COUNT(*) FROM system_mail_info")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get total count: %v", err)
|
|
}
|
|
for _, v := range mail {
|
|
v.AppId = m.AppId
|
|
v.ServerId = m.ServerId
|
|
}
|
|
return &Result{
|
|
Data: mail,
|
|
Total: total,
|
|
}, nil
|
|
}
|
|
|
|
func (m *Mail) SendMail() error {
|
|
AppCfg, err := util.GetAppConfig(m.AppId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
Db := util.MPool.GetMysqlDB(AppCfg, m.ServerId)
|
|
defer Db.Close()
|
|
_, err = Db.Exec("INSERT INTO system_mail_info (`title`, `content`, `title_en`, `content_en`, `start_time`, `end_time`, `items`, `register_time`, `mail_type`, `send_type`, `to_uids`, `create_time`, `subTitle`, `subTitle_en`, `title_ptbr`,`content_ptbr`,`subTitle_ptbr`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.Title, m.Content, m.TitleEn, m.ContentEn, m.StartTime, m.EndTime, m.Items, m.RegisterTime, m.MailType, m.SendType, m.ToUids, m.CreateTime, m.SubTitle, m.SubTitleEn, m.TitlePtBr, m.ContentPtBr, m.SubTitlePtBr)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to insert mail: %v", err)
|
|
}
|
|
ServerList := util.GetServerInfo(m.AppId, 0)
|
|
for _, server := range ServerList {
|
|
go func() {
|
|
ws, err := util.GetWebsocket(m.AppId, server.ServerId)
|
|
if err != nil {
|
|
log.Printf("failed to get websocket: %v", err)
|
|
}
|
|
defer ws.Close()
|
|
|
|
req := &msg.ReqReloadServerMail{}
|
|
_, err = util.SendAdminMsg(ws, req)
|
|
if err != nil {
|
|
log.Printf("failed to send admin message: %v", err)
|
|
}
|
|
}()
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (m *Mail) DeleteMail() error {
|
|
AppCfg, err := util.GetAppConfig(m.AppId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
Db := util.MPool.GetMysqlDB(AppCfg, m.ServerId)
|
|
defer Db.Close()
|
|
_, err = Db.Exec("DELETE FROM system_mail_info WHERE `mail_id` = ?", m.MailId)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to delete mail: %v", err)
|
|
}
|
|
return nil
|
|
}
|