179 lines
5.7 KiB
Go
179 lines
5.7 KiB
Go
package model
|
|
|
|
import (
|
|
"backend/client"
|
|
"backend/util"
|
|
"fmt"
|
|
"log"
|
|
)
|
|
|
|
type ActivityMod struct {
|
|
AppId int `json:"AppId" db:"AppId"`
|
|
ActivityType int `json:"activityType" db:"activityType"`
|
|
Cfg *Activity `json:"Cfg" db:"-"`
|
|
Page int `json:"CurrentPage" db:"-"`
|
|
PageSize int `json:"PageSize" db:"-"`
|
|
}
|
|
|
|
type Activity struct {
|
|
Id int `json:"id" db:"id"`
|
|
Type int `json:"type" db:"type"`
|
|
StartTime int64 `json:"start_time" db:"start_time"`
|
|
EndTime int64 `json:"end_time" db:"end_time"`
|
|
Level int `json:"level" db:"level_limit"`
|
|
Title string `json:"title" db:"title"`
|
|
MailTitle string `json:"mail_title" db:"mail_title"`
|
|
MailContent string `json:"mail_content" db:"mail_content"`
|
|
Cfg string `json:"cfg" db:"cfg"`
|
|
CfgBuf []byte `json:"-" db:"cfg_buf"`
|
|
Extra string `json:"extra" db:"extra"`
|
|
Interval int `json:"interval" db:"interval"`
|
|
}
|
|
|
|
func (a *ActivityMod) ActivityList() (int, []Activity, error) {
|
|
var activityList []Activity
|
|
// do something
|
|
AppCfg, err := util.GetAppConfig(a.AppId)
|
|
if err != nil {
|
|
return 0, nil, err
|
|
}
|
|
Db := util.MPool.GetMysqlDB(AppCfg, 1)
|
|
if Db == nil {
|
|
return 0, nil, fmt.Errorf("failed to get mysql db")
|
|
}
|
|
defer Db.Close()
|
|
where := ""
|
|
if a.ActivityType != 0 {
|
|
where = fmt.Sprintf("WHERE `type`=%d", a.ActivityType)
|
|
}
|
|
var total int
|
|
err = Db.Get(&total, fmt.Sprintf("SELECT COUNT(*) FROM t_activity_mod %s", where))
|
|
if err != nil {
|
|
return 0, nil, fmt.Errorf("failed to get total count: %v", err)
|
|
}
|
|
err = Db.Select(&activityList, fmt.Sprintf("SELECT id, `type`, `start_time`, `end_time`, `level_limit`, `title`, `mail_title`, `mail_content`, `cfg`, `extra`, `interval` FROM t_activity_mod %s order by id desc limit %d, %d", where, (a.Page-1)*a.PageSize, a.PageSize))
|
|
if err != nil {
|
|
return 0, nil, fmt.Errorf("failed to scan rows: %v", err)
|
|
}
|
|
return total, activityList, nil
|
|
}
|
|
|
|
func (a *ActivityMod) Edit() error {
|
|
err := a.Cfg.Mashal()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
AppCfg, err := util.GetAppConfig(a.AppId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
Db := util.MPool.GetMysqlDB(AppCfg, 1)
|
|
if Db == nil {
|
|
return fmt.Errorf("failed to get mysql db")
|
|
}
|
|
defer Db.Close()
|
|
_, err = Db.Exec("UPDATE t_activity_mod SET type=?, start_time=?, end_time=?, level_limit=?, title=?, mail_title=?, mail_content=?, cfg=?, cfg_buf=?, extra=?, `interval`=? WHERE id=?",
|
|
a.Cfg.Type, a.Cfg.StartTime, a.Cfg.EndTime, a.Cfg.Level, a.Cfg.Title, a.Cfg.MailTitle, a.Cfg.MailContent, a.Cfg.Cfg, a.Cfg.CfgBuf, a.Cfg.Extra, a.Cfg.Interval, a.Cfg.Id)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to update activity: %v", err)
|
|
}
|
|
// reload cfg
|
|
err = a.reloadCfg()
|
|
if err != nil {
|
|
log.Printf("failed to reload activity cfg: %v", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (a *ActivityMod) Add() error {
|
|
err := a.Cfg.Mashal()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
AppCfg, err := util.GetAppConfig(a.AppId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
Db := util.MPool.GetMysqlDB(AppCfg, 1)
|
|
if Db == nil {
|
|
return fmt.Errorf("failed to get mysql db")
|
|
}
|
|
defer Db.Close()
|
|
_, err = Db.Exec("INSERT INTO t_activity_mod (type, start_time, end_time, level_limit, title, mail_title, mail_content, cfg, cfg_buf, extra, `interval`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
|
a.Cfg.Type, a.Cfg.StartTime, a.Cfg.EndTime, a.Cfg.Level, a.Cfg.Title, a.Cfg.MailTitle, a.Cfg.MailContent, a.Cfg.Cfg, a.Cfg.CfgBuf, a.Cfg.Extra, a.Cfg.Interval)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to insert activity: %v", err)
|
|
}
|
|
// reload cfg
|
|
err = a.reloadCfg()
|
|
if err != nil {
|
|
log.Printf("failed to reload activity cfg: %v", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (a *ActivityMod) Delete() error {
|
|
AppCfg, err := util.GetAppConfig(a.AppId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
Db := util.MPool.GetMysqlDB(AppCfg, 1)
|
|
if Db == nil {
|
|
return fmt.Errorf("failed to get mysql db")
|
|
}
|
|
defer Db.Close()
|
|
_, err = Db.Exec("DELETE FROM t_activity_mod WHERE id=?", a.Cfg.Id)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to delete activity: %v", err)
|
|
}
|
|
// reload cfg
|
|
err = a.reloadCfg()
|
|
if err != nil {
|
|
log.Printf("failed to reload activity cfg: %v", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (a *Activity) Mashal() error {
|
|
return nil
|
|
}
|
|
|
|
func (a *ActivityMod) reloadCfg() error {
|
|
ServerList := util.GetServerInfo(a.AppId, 0)
|
|
for _, server := range ServerList {
|
|
go func(serverInfo util.ServerConfig) {
|
|
err := client.ActivityCfgReload(serverInfo.AppId, serverInfo.ServerId, nil)
|
|
if err != nil {
|
|
log.Printf("failed to sync activity cfg: %v", err)
|
|
}
|
|
log.Printf("sent reload activity cfg message to server %d", server.ServerId)
|
|
}(server)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (a *ActivityMod) Sync(dest int) error {
|
|
_, list, err := a.ActivityList()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
AppCfg, err := util.GetAppConfig(dest)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
Db := util.MPool.GetMysqlDB(AppCfg, 1)
|
|
if Db == nil {
|
|
return fmt.Errorf("failed to get mysql db")
|
|
}
|
|
defer Db.Close()
|
|
for _, activity := range list {
|
|
_, err = Db.Exec("INSERT INTO t_activity_mod (id, type, start_time, end_time, level_limit, title, mail_title, mail_content, cfg, cfg_buf, extra, `interval`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE type=?, start_time=?, end_time=?, level_limit=?, title=?, mail_title=?, mail_content=?, cfg=?, cfg_buf=?, extra=?, `interval`=?",
|
|
activity.Id, activity.Type, activity.StartTime, activity.EndTime, activity.Level, activity.Title, activity.MailTitle, activity.MailContent, activity.Cfg, activity.CfgBuf, activity.Extra, activity.Interval,
|
|
activity.Type, activity.StartTime, activity.EndTime, activity.Level, activity.Title, activity.MailTitle, activity.MailContent, activity.Cfg, activity.CfgBuf, activity.Extra, activity.Interval)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to sync activity: %v", err)
|
|
}
|
|
}
|
|
return nil
|
|
}
|