feat: add cron msg
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
package cron_msg_service
|
||||
|
||||
import (
|
||||
"message-nest/models"
|
||||
)
|
||||
|
||||
type CronMsgService struct {
|
||||
ID string
|
||||
|
||||
Name string
|
||||
TaskID string
|
||||
Cron string
|
||||
Title string
|
||||
Content string
|
||||
Url string
|
||||
|
||||
CreatedBy string
|
||||
ModifiedBy string
|
||||
CreatedOn string
|
||||
|
||||
PageNum int
|
||||
PageSize int
|
||||
}
|
||||
|
||||
func (st *CronMsgService) Add() (string, error) {
|
||||
return models.AddSendCronMsg(st.Name, st.TaskID, st.Cron, st.Title, st.Content, st.Url, st.CreatedBy)
|
||||
}
|
||||
|
||||
func (st *CronMsgService) Edit(data map[string]interface{}) error {
|
||||
return models.EditCronMsg(st.ID, data)
|
||||
}
|
||||
|
||||
func (st *CronMsgService) GetByID() (models.CronMessages, error) {
|
||||
return models.GetCronMsgByID(st.ID)
|
||||
}
|
||||
|
||||
func (st *CronMsgService) Count() (int, error) {
|
||||
return models.GetCronMessagesTotal(st.Name, st.getMaps())
|
||||
}
|
||||
|
||||
func (st *CronMsgService) GetAll() ([]models.CronMessages, error) {
|
||||
msgs, err := models.GetCronMessages(st.PageNum, st.PageSize, st.Name, st.getMaps())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return msgs, nil
|
||||
}
|
||||
|
||||
func (st *CronMsgService) getMaps() map[string]interface{} {
|
||||
maps := make(map[string]interface{})
|
||||
return maps
|
||||
}
|
||||
|
||||
func (st *CronMsgService) Delete() error {
|
||||
return models.DeleteCronMsg(st.ID)
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
package cron_msg_service
|
||||
|
||||
import (
|
||||
"github.com/sirupsen/logrus"
|
||||
"message-nest/models"
|
||||
"message-nest/pkg/constant"
|
||||
"message-nest/service/cron_service"
|
||||
"message-nest/service/send_message_service"
|
||||
)
|
||||
|
||||
type MsgCronTask struct {
|
||||
}
|
||||
|
||||
func (s MsgCronTask) Register() {
|
||||
// 获取所有的定时消息任务
|
||||
limit := 10000
|
||||
filter := make(map[string]interface{})
|
||||
filter["enable"] = 1
|
||||
data, err := models.GetCronMessages(0, limit, "", filter)
|
||||
if err != nil {
|
||||
logrus.Errorf("获取定时消息任务失败!原因:%s", err.Error())
|
||||
return
|
||||
}
|
||||
if len(data) == 0 {
|
||||
logrus.Infof("没有定时消息任务需要注册")
|
||||
return
|
||||
}
|
||||
//注册定时任务
|
||||
for _, msg := range data {
|
||||
AddCronMsgToCronServer(msg)
|
||||
}
|
||||
length := len(data)
|
||||
if length > 0 {
|
||||
logrus.Infof("完成用户自定义的定时消息注册,个数:%d", length)
|
||||
}
|
||||
}
|
||||
|
||||
// AddCronMsgToCronServer 注册定时任务到定时服务
|
||||
func AddCronMsgToCronServer(msg models.CronMessages) {
|
||||
if msg.Enable != 1 {
|
||||
return
|
||||
}
|
||||
taskId := cron_service.AddTask(cron_service.ScheduledTask{
|
||||
Schedule: msg.Cron,
|
||||
Job: func() {
|
||||
CronMsgSendF(msg)
|
||||
},
|
||||
})
|
||||
constant.CronMsgIdMapMemoryCache[msg.ID] = taskId
|
||||
}
|
||||
|
||||
// 执行任务的构造函数
|
||||
func CronMsgSendF(msg models.CronMessages) {
|
||||
logrus.Infof("开始只能执行定时消息发送任务: %s , 消息名: %s", msg.ID, msg.Name)
|
||||
task, err := models.GetTaskByID(msg.TaskID)
|
||||
if err != nil {
|
||||
logrus.Infof("消息任务不存在: %s ", msg.TaskID)
|
||||
return
|
||||
}
|
||||
sender := send_message_service.SendMessageService{
|
||||
TaskID: task.ID,
|
||||
Title: msg.Title,
|
||||
Text: msg.Content,
|
||||
URL: msg.Url,
|
||||
CallerIp: "corn",
|
||||
DefaultLogger: logrus.WithFields(logrus.Fields{
|
||||
"prefix": "[Cron Message]",
|
||||
}),
|
||||
}
|
||||
taskData, _ := sender.SendPreCheck()
|
||||
sender.Send(taskData)
|
||||
}
|
||||
|
||||
// UpdateCronMsgToCronServer 更新定时服务的任务
|
||||
func UpdateCronMsgToCronServer(msg models.CronMessages) {
|
||||
if entryId, ok := constant.CronMsgIdMapMemoryCache[msg.ID]; ok {
|
||||
// 先删除之前的定时任务
|
||||
delete(constant.CronMsgIdMapMemoryCache, msg.ID)
|
||||
cron_service.RemoveTask(entryId)
|
||||
// 再注册新的定时任务
|
||||
AddCronMsgToCronServer(msg)
|
||||
} else {
|
||||
// 注册新的定时任务
|
||||
AddCronMsgToCronServer(msg)
|
||||
}
|
||||
logrus.Infof("完成定时消息的定时更新,消息id: %s, 总数:%d", msg.ID, len(constant.CronMsgIdMapMemoryCache))
|
||||
}
|
||||
|
||||
// RemoveCronMsgToCronServer 删除定时任务中心的任务
|
||||
func RemoveCronMsgToCronServer(msg models.CronMessages) {
|
||||
if entryId, ok := constant.CronMsgIdMapMemoryCache[msg.ID]; ok {
|
||||
// 先删除之前的定时任务
|
||||
delete(constant.CronMsgIdMapMemoryCache, msg.ID)
|
||||
cron_service.RemoveTask(entryId)
|
||||
}
|
||||
logrus.Infof("完成定时消息的定时删除,消息id: %s, 总数:%d", msg.ID, len(constant.CronMsgIdMapMemoryCache))
|
||||
}
|
||||
|
||||
// StartUpMsgCronTask 启动注册定时任务
|
||||
func StartUpMsgCronTask() {
|
||||
MsgCronTask{}.Register()
|
||||
}
|
||||
@@ -46,7 +46,7 @@ func AddTask(task ScheduledTask) cron.EntryID {
|
||||
logrus.Errorf("注册定时任务失败, job: %s, 原因:%s", jobName, err)
|
||||
} else {
|
||||
TaskList[taskId] = &task
|
||||
logrus.Infof("注册定时任务成功, job: %s, entryID: %d, cron: %s", jobName, taskId, task.Schedule)
|
||||
//logrus.Infof("注册定时任务成功, job: %s, entryID: %d, cron: %s", jobName, taskId, task.Schedule)
|
||||
}
|
||||
return taskId
|
||||
}
|
||||
|
||||
@@ -51,3 +51,7 @@ func (st *SendTaskService) getMaps() map[string]interface{} {
|
||||
maps := make(map[string]interface{})
|
||||
return maps
|
||||
}
|
||||
|
||||
func (st *SendTaskService) GetByID() (interface{}, error) {
|
||||
return models.GetTaskByID(st.ID)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user