diff --git a/internal/db/models/message_dao.go b/internal/db/models/message_dao.go index 6b29f689..aac76c91 100644 --- a/internal/db/models/message_dao.go +++ b/internal/db/models/message_dao.go @@ -27,6 +27,8 @@ const ( type MessageType = string const ( + MessageTypeAll MessageType = "*" + // 这里的命名问题(首字母大写)为历史遗留问题,暂不修改 MessageTypeHealthCheckFailed MessageType = "HealthCheckFailed" // 节点健康检查失败 diff --git a/internal/db/models/message_media_dao.go b/internal/db/models/message_media_dao.go index 753992ed..536c5162 100644 --- a/internal/db/models/message_media_dao.go +++ b/internal/db/models/message_media_dao.go @@ -4,8 +4,6 @@ import ( _ "github.com/go-sql-driver/mysql" "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" - "github.com/iwind/TeaGo/lists" - "github.com/iwind/TeaGo/maps" ) const ( @@ -64,7 +62,7 @@ func (this *MessageMediaDAO) FindEnabledMessageMedia(tx *dbs.Tx, id int64) (*Mes return result.(*MessageMedia), err } -// 根据主键查找名称 +// FindMessageMediaName 根据主键查找名称 func (this *MessageMediaDAO) FindMessageMediaName(tx *dbs.Tx, id int64) (string, error) { return this.Query(tx). Pk(id). @@ -72,7 +70,7 @@ func (this *MessageMediaDAO) FindMessageMediaName(tx *dbs.Tx, id int64) (string, FindStringCol("") } -// 查询所有可用媒介 +// FindAllEnabledMessageMedias 查询所有可用媒介 func (this *MessageMediaDAO) FindAllEnabledMessageMedias(tx *dbs.Tx) (result []*MessageMedia, err error) { _, err = this.Query(tx). State(MessageMediaStateEnabled). @@ -82,74 +80,3 @@ func (this *MessageMediaDAO) FindAllEnabledMessageMedias(tx *dbs.Tx) (result []* FindAll() return } - -// UpdateMessageMedias 设置当前所有可用的媒介 -func (this *MessageMediaDAO) UpdateMessageMedias(tx *dbs.Tx, mediaMaps []maps.Map) error { - // 新的媒介信息 - var mediaTypes = []string{} - for index, m := range mediaMaps { - var order = len(mediaMaps) - index - var mediaType = m.GetString("code") - mediaTypes = append(mediaTypes, mediaType) - - var name = m.GetString("name") - var description = m.GetString("description") - var userDescription = m.GetString("user") - var isOn = m.GetBool("isOn") - - mediaId, err := this.Query(tx). - ResultPk(). - Attr("type", mediaType). - FindInt64Col(0) - if err != nil { - return err - } - var op = NewMessageMediaOperator() - if mediaId > 0 { - op.Id = mediaId - } - op.Name = name - op.Type = mediaType - op.Description = description - op.UserDescription = userDescription - op.IsOn = isOn - op.Order = order - op.State = MessageMediaStateEnabled - err = this.Save(tx, op) - if err != nil { - return err - } - } - - // 老的媒介信息 - ones, err := this.Query(tx). - FindAll() - if err != nil { - return err - } - for _, one := range ones { - var mediaType = one.(*MessageMedia).Type - if !lists.ContainsString(mediaTypes, mediaType) { - err := this.Query(tx). - Pk(one.(*MessageMedia).Id). - Set("state", MessageMediaStateDisabled). - UpdateQuickly() - if err != nil { - return err - } - } - } - return nil -} - -// FindEnabledMediaWithType 根据类型查找媒介 -func (this *MessageMediaDAO) FindEnabledMediaWithType(tx *dbs.Tx, mediaType string) (*MessageMedia, error) { - one, err := this.Query(tx). - Attr("type", mediaType). - State(MessageMediaStateEnabled). - Find() - if one == nil || err != nil { - return nil, err - } - return one.(*MessageMedia), nil -} diff --git a/internal/db/models/message_receiver_dao.go b/internal/db/models/message_receiver_dao.go index ebd939fb..e604f887 100644 --- a/internal/db/models/message_receiver_dao.go +++ b/internal/db/models/message_receiver_dao.go @@ -98,24 +98,6 @@ func (this *MessageReceiverDAO) CreateReceiver(tx *dbs.Tx, role string, clusterI return this.SaveInt64(tx, op) } -// FindAllEnabledReceivers 查询接收人 -func (this *MessageReceiverDAO) FindAllEnabledReceivers(tx *dbs.Tx, role string, clusterId int64, nodeId int64, serverId int64, messageType string) (result []*MessageReceiver, err error) { - query := this.Query(tx) - if len(messageType) > 0 { - query.Attr("type", []string{"*", messageType}) // *表示所有的 - } - _, err = query. - Attr("role", role). - Attr("clusterId", clusterId). - Attr("nodeId", nodeId). - Attr("serverId", serverId). - State(MessageReceiverStateEnabled). - AscPk(). - Slice(&result). - FindAll() - return -} - // CountAllEnabledReceivers 计算接收人数量 func (this *MessageReceiverDAO) CountAllEnabledReceivers(tx *dbs.Tx, role string, clusterId int64, nodeId int64, serverId int64, messageType string) (int64, error) { query := this.Query(tx) diff --git a/internal/db/models/message_receiver_dao_test.go b/internal/db/models/message_receiver_dao_test.go deleted file mode 100644 index 52934a74..00000000 --- a/internal/db/models/message_receiver_dao_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package models - -import ( - "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" - _ "github.com/go-sql-driver/mysql" - _ "github.com/iwind/TeaGo/bootstrap" - "github.com/iwind/TeaGo/dbs" - "github.com/iwind/TeaGo/logs" - "testing" -) - -func TestMessageReceiverDAO_FindEnabledBestFitReceivers(t *testing.T) { - var tx *dbs.Tx - - { - receivers, err := NewMessageReceiverDAO().FindEnabledBestFitReceivers(tx, nodeconfigs.NodeRoleNode, 18, 1, 2, "*") - if err != nil { - t.Fatal(err) - } - logs.PrintAsJSON(receivers, t) - } - - { - receivers, err := NewMessageReceiverDAO().FindEnabledBestFitReceivers(tx, nodeconfigs.NodeRoleNode, 30, 1, 2, "*") - if err != nil { - t.Fatal(err) - } - logs.PrintAsJSON(receivers, t) - } -} diff --git a/internal/nodes/api_node_services.go b/internal/nodes/api_node_services.go index d9c8a074..ef49ea32 100644 --- a/internal/nodes/api_node_services.go +++ b/internal/nodes/api_node_services.go @@ -189,36 +189,6 @@ func (this *APINode) registerServices(server *grpc.Server) { pb.RegisterMessageServiceServer(server, instance) this.rest(instance) } - { - var instance = this.serviceInstance(&services.MessageRecipientService{}).(*services.MessageRecipientService) - pb.RegisterMessageRecipientServiceServer(server, instance) - this.rest(instance) - } - { - var instance = this.serviceInstance(&services.MessageReceiverService{}).(*services.MessageReceiverService) - pb.RegisterMessageReceiverServiceServer(server, instance) - this.rest(instance) - } - { - var instance = this.serviceInstance(&services.MessageRecipientGroupService{}).(*services.MessageRecipientGroupService) - pb.RegisterMessageRecipientGroupServiceServer(server, instance) - this.rest(instance) - } - { - var instance = this.serviceInstance(&services.MessageMediaInstanceService{}).(*services.MessageMediaInstanceService) - pb.RegisterMessageMediaInstanceServiceServer(server, instance) - this.rest(instance) - } - { - var instance = this.serviceInstance(&services.MessageTaskService{}).(*services.MessageTaskService) - pb.RegisterMessageTaskServiceServer(server, instance) - this.rest(instance) - } - { - var instance = this.serviceInstance(&services.MessageTaskLogService{}).(*services.MessageTaskLogService) - pb.RegisterMessageTaskLogServiceServer(server, instance) - this.rest(instance) - } { var instance = this.serviceInstance(&services.NodeGroupService{}).(*services.NodeGroupService) pb.RegisterNodeGroupServiceServer(server, instance) diff --git a/internal/rpc/services/service_message_media_instance.go b/internal/rpc/services/service_message_media_instance.go deleted file mode 100644 index b3178a56..00000000 --- a/internal/rpc/services/service_message_media_instance.go +++ /dev/null @@ -1,187 +0,0 @@ -package services - -import ( - "context" - "encoding/json" - "github.com/TeaOSLab/EdgeAPI/internal/db/models" - "github.com/TeaOSLab/EdgeAPI/internal/utils" - "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" - "github.com/iwind/TeaGo/maps" - "github.com/iwind/TeaGo/types" -) - -// MessageMediaInstanceService 消息媒介实例服务 -type MessageMediaInstanceService struct { - BaseService -} - -// CreateMessageMediaInstance 创建消息媒介实例 -func (this *MessageMediaInstanceService) CreateMessageMediaInstance(ctx context.Context, req *pb.CreateMessageMediaInstanceRequest) (*pb.CreateMessageMediaInstanceResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - - params := maps.Map{} - if len(req.ParamsJSON) > 0 { - err = json.Unmarshal(req.ParamsJSON, ¶ms) - if err != nil { - return nil, err - } - } - - instanceId, err := models.SharedMessageMediaInstanceDAO.CreateMediaInstance(tx, req.Name, req.MediaType, params, req.Description, req.RateJSON, req.HashLife) - if err != nil { - return nil, err - } - - return &pb.CreateMessageMediaInstanceResponse{MessageMediaInstanceId: instanceId}, nil -} - -// UpdateMessageMediaInstance 修改消息实例 -func (this *MessageMediaInstanceService) UpdateMessageMediaInstance(ctx context.Context, req *pb.UpdateMessageMediaInstanceRequest) (*pb.RPCSuccess, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - params := maps.Map{} - if len(req.ParamsJSON) > 0 { - err = json.Unmarshal(req.ParamsJSON, ¶ms) - if err != nil { - return nil, err - } - } - - var tx = this.NullTx() - err = models.SharedMessageMediaInstanceDAO.UpdateMediaInstance(tx, req.MessageMediaInstanceId, req.Name, req.MediaType, params, req.Description, req.RateJSON, req.HashLife, req.IsOn) - if err != nil { - return nil, err - } - - return this.Success() -} - -// DeleteMessageMediaInstance 删除媒介实例 -func (this *MessageMediaInstanceService) DeleteMessageMediaInstance(ctx context.Context, req *pb.DeleteMessageMediaInstanceRequest) (*pb.RPCSuccess, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - err = models.SharedMessageMediaInstanceDAO.DisableMessageMediaInstance(tx, req.MessageMediaInstanceId) - if err != nil { - return nil, err - } - return this.Success() -} - -// CountAllEnabledMessageMediaInstances 计算媒介实例数量 -func (this *MessageMediaInstanceService) CountAllEnabledMessageMediaInstances(ctx context.Context, req *pb.CountAllEnabledMessageMediaInstancesRequest) (*pb.RPCCountResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - count, err := models.SharedMessageMediaInstanceDAO.CountAllEnabledMediaInstances(tx, req.MediaType, req.Keyword) - if err != nil { - return nil, err - } - - return this.SuccessCount(count) -} - -// ListEnabledMessageMediaInstances 列出单页媒介实例 -func (this *MessageMediaInstanceService) ListEnabledMessageMediaInstances(ctx context.Context, req *pb.ListEnabledMessageMediaInstancesRequest) (*pb.ListEnabledMessageMediaInstancesResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - instances, err := models.SharedMessageMediaInstanceDAO.ListAllEnabledMediaInstances(tx, req.MediaType, req.Keyword, req.Offset, req.Size) - if err != nil { - return nil, err - } - pbInstances := []*pb.MessageMediaInstance{} - for _, instance := range instances { - // 媒介 - media, err := models.SharedMessageMediaDAO.FindEnabledMediaWithType(tx, instance.MediaType) - if err != nil { - return nil, err - } - if media == nil { - continue - } - pbMedia := &pb.MessageMedia{ - Id: int64(media.Id), - Type: media.Type, - Name: media.Name, - Description: media.Description, - UserDescription: media.UserDescription, - IsOn: media.IsOn, - } - - pbInstances = append(pbInstances, &pb.MessageMediaInstance{ - Id: int64(instance.Id), - Name: instance.Name, - IsOn: instance.IsOn, - MessageMedia: pbMedia, - ParamsJSON: instance.Params, - Description: instance.Description, - RateJSON: instance.Rate, - }) - } - - return &pb.ListEnabledMessageMediaInstancesResponse{MessageMediaInstances: pbInstances}, nil -} - -// FindEnabledMessageMediaInstance 查找单个媒介实例信息 -func (this *MessageMediaInstanceService) FindEnabledMessageMediaInstance(ctx context.Context, req *pb.FindEnabledMessageMediaInstanceRequest) (*pb.FindEnabledMessageMediaInstanceResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - var cacheMap = utils.NewCacheMap() - instance, err := models.SharedMessageMediaInstanceDAO.FindEnabledMessageMediaInstance(tx, req.MessageMediaInstanceId, cacheMap) - if err != nil { - return nil, err - } - if instance == nil { - return &pb.FindEnabledMessageMediaInstanceResponse{MessageMediaInstance: nil}, nil - } - - // 媒介 - media, err := models.SharedMessageMediaDAO.FindEnabledMediaWithType(tx, instance.MediaType) - if err != nil { - return nil, err - } - if media == nil { - return &pb.FindEnabledMessageMediaInstanceResponse{MessageMediaInstance: nil}, nil - } - pbMedia := &pb.MessageMedia{ - Id: int64(media.Id), - Type: media.Type, - Name: media.Name, - Description: media.Description, - UserDescription: media.UserDescription, - IsOn: media.IsOn, - } - - return &pb.FindEnabledMessageMediaInstanceResponse{MessageMediaInstance: &pb.MessageMediaInstance{ - Id: int64(instance.Id), - Name: instance.Name, - IsOn: instance.IsOn, - MessageMedia: pbMedia, - ParamsJSON: instance.Params, - Description: instance.Description, - RateJSON: instance.Rate, - HashLife: types.Int32(instance.HashLife), - }}, nil -} diff --git a/internal/rpc/services/service_message_receiver.go b/internal/rpc/services/service_message_receiver.go deleted file mode 100644 index a7a90812..00000000 --- a/internal/rpc/services/service_message_receiver.go +++ /dev/null @@ -1,193 +0,0 @@ -package services - -import ( - "context" - "encoding/json" - "github.com/TeaOSLab/EdgeAPI/internal/db/models" - "github.com/TeaOSLab/EdgeAPI/internal/utils" - "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" - "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" - "github.com/iwind/TeaGo/dbs" - "github.com/iwind/TeaGo/maps" -) - -// MessageReceiverService 消息对象接收人 -type MessageReceiverService struct { - BaseService -} - -// UpdateMessageReceivers 创建接收者 -func (this *MessageReceiverService) UpdateMessageReceivers(ctx context.Context, req *pb.UpdateMessageReceiversRequest) (*pb.RPCSuccess, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - if len(req.Role) == 0 { - req.Role = nodeconfigs.NodeRoleNode - } - - params := maps.Map{} - if len(req.ParamsJSON) > 0 { - err = json.Unmarshal(req.ParamsJSON, ¶ms) - if err != nil { - return nil, err - } - } - - err = this.RunTx(func(tx *dbs.Tx) error { - err = models.SharedMessageReceiverDAO.DisableReceivers(tx, req.NodeClusterId, req.NodeId, req.ServerId) - if err != nil { - return err - } - - for messageType, options := range req.RecipientOptions { - for _, option := range options.RecipientOptions { - _, err := models.SharedMessageReceiverDAO.CreateReceiver(tx, req.Role, req.NodeClusterId, req.NodeId, req.ServerId, messageType, params, option.MessageRecipientId, option.MessageRecipientGroupId) - if err != nil { - return err - } - } - } - return nil - }) - if err != nil { - return nil, err - } - - return this.Success() -} - -// FindAllEnabledMessageReceivers 查找接收者 -func (this *MessageReceiverService) FindAllEnabledMessageReceivers(ctx context.Context, req *pb.FindAllEnabledMessageReceiversRequest) (*pb.FindAllEnabledMessageReceiversResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - if len(req.Role) == 0 { - req.Role = nodeconfigs.NodeRoleNode - } - - var tx = this.NullTx() - var cacheMap = utils.NewCacheMap() - receivers, err := models.SharedMessageReceiverDAO.FindAllEnabledReceivers(tx, req.Role, req.NodeClusterId, req.NodeId, req.ServerId, "") - if err != nil { - return nil, err - } - pbReceivers := []*pb.MessageReceiver{} - for _, receiver := range receivers { - var pbRecipient *pb.MessageRecipient = nil - - // 接收人 - if receiver.RecipientId > 0 { - recipient, err := models.SharedMessageRecipientDAO.FindEnabledMessageRecipient(tx, int64(receiver.RecipientId), cacheMap) - if err != nil { - return nil, err - } - if recipient == nil { - continue - } - - // 管理员 - admin, err := models.SharedAdminDAO.FindEnabledAdmin(tx, int64(recipient.AdminId)) - if err != nil { - return nil, err - } - if admin == nil { - continue - } - - // 接收人 - instance, err := models.SharedMessageMediaInstanceDAO.FindEnabledMessageMediaInstance(tx, int64(recipient.InstanceId), cacheMap) - if err != nil { - return nil, err - } - if instance == nil { - continue - } - - pbRecipient = &pb.MessageRecipient{ - Id: int64(recipient.Id), - Admin: &pb.Admin{ - Id: int64(admin.Id), - Fullname: admin.Fullname, - Username: admin.Username, - IsOn: admin.IsOn, - }, - MessageMediaInstance: &pb.MessageMediaInstance{ - Id: int64(instance.Id), - Name: instance.Name, - IsOn: instance.IsOn, - }, - IsOn: recipient.IsOn, - MessageRecipientGroups: nil, - Description: "", - User: "", - } - } - - // 接收人分组 - var pbRecipientGroup *pb.MessageRecipientGroup = nil - if receiver.RecipientGroupId > 0 { - group, err := models.SharedMessageRecipientGroupDAO.FindEnabledMessageRecipientGroup(tx, int64(receiver.RecipientGroupId)) - if err != nil { - return nil, err - } - if group == nil { - continue - } - pbRecipientGroup = &pb.MessageRecipientGroup{ - Id: int64(group.Id), - Name: group.Name, - IsOn: group.IsOn, - } - } - - pbReceivers = append(pbReceivers, &pb.MessageReceiver{ - Id: int64(receiver.Id), - ClusterId: int64(receiver.ClusterId), - NodeId: int64(receiver.NodeId), - ServerId: int64(receiver.ServerId), - Type: receiver.Type, - ParamsJSON: receiver.Params, - MessageRecipient: pbRecipient, - MessageRecipientGroup: pbRecipientGroup, - }) - } - return &pb.FindAllEnabledMessageReceiversResponse{MessageReceivers: pbReceivers}, nil -} - -// DeleteMessageReceiver 删除接收者 -func (this *MessageReceiverService) DeleteMessageReceiver(ctx context.Context, req *pb.DeleteMessageReceiverRequest) (*pb.RPCSuccess, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - err = models.SharedMessageReceiverDAO.DisableMessageReceiver(tx, req.MessageReceiverId) - if err != nil { - return nil, err - } - return this.Success() -} - -// CountAllEnabledMessageReceivers 计算接收者数量 -func (this *MessageReceiverService) CountAllEnabledMessageReceivers(ctx context.Context, req *pb.CountAllEnabledMessageReceiversRequest) (*pb.RPCCountResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - if len(req.Role) == 0 { - req.Role = nodeconfigs.NodeRoleNode - } - - var tx = this.NullTx() - count, err := models.SharedMessageReceiverDAO.CountAllEnabledReceivers(tx, req.Role, req.NodeClusterId, req.NodeId, req.ServerId, "") - if err != nil { - return nil, err - } - return this.SuccessCount(count) -} diff --git a/internal/rpc/services/service_message_recipient.go b/internal/rpc/services/service_message_recipient.go deleted file mode 100644 index 61fdbc69..00000000 --- a/internal/rpc/services/service_message_recipient.go +++ /dev/null @@ -1,235 +0,0 @@ -package services - -import ( - "context" - "github.com/TeaOSLab/EdgeAPI/internal/db/models" - "github.com/TeaOSLab/EdgeAPI/internal/utils" - "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" -) - -// MessageRecipientService 消息接收人服务 -type MessageRecipientService struct { - BaseService -} - -// CreateMessageRecipient 创建接收人 -func (this *MessageRecipientService) CreateMessageRecipient(ctx context.Context, req *pb.CreateMessageRecipientRequest) (*pb.CreateMessageRecipientResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - recipientId, err := models.SharedMessageRecipientDAO.CreateRecipient(tx, req.AdminId, req.MessageMediaInstanceId, req.User, req.MessageRecipientGroupIds, req.Description, req.TimeFrom, req.TimeTo) - if err != nil { - return nil, err - } - - return &pb.CreateMessageRecipientResponse{MessageRecipientId: recipientId}, nil -} - -// UpdateMessageRecipient 修改接收人 -func (this *MessageRecipientService) UpdateMessageRecipient(ctx context.Context, req *pb.UpdateMessageRecipientRequest) (*pb.RPCSuccess, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - err = models.SharedMessageRecipientDAO.UpdateRecipient(tx, req.MessageRecipientId, req.AdminId, req.MessageMediaInstanceId, req.User, req.MessageRecipientGroupIds, req.Description, req.TimeFrom, req.TimeTo, req.IsOn) - if err != nil { - return nil, err - } - - return this.Success() -} - -// DeleteMessageRecipient 删除接收人 -func (this *MessageRecipientService) DeleteMessageRecipient(ctx context.Context, req *pb.DeleteMessageRecipientRequest) (*pb.RPCSuccess, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - err = models.SharedMessageRecipientDAO.DisableMessageRecipient(tx, req.MessageRecipientId) - if err != nil { - return nil, err - } - return this.Success() -} - -// CountAllEnabledMessageRecipients 计算接收人数量 -func (this *MessageRecipientService) CountAllEnabledMessageRecipients(ctx context.Context, req *pb.CountAllEnabledMessageRecipientsRequest) (*pb.RPCCountResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - count, err := models.SharedMessageRecipientDAO.CountAllEnabledRecipients(tx, req.AdminId, req.MessageRecipientGroupId, req.MediaType, req.Keyword) - if err != nil { - return nil, err - } - - return this.SuccessCount(count) -} - -// ListEnabledMessageRecipients 列出单页接收人 -func (this *MessageRecipientService) ListEnabledMessageRecipients(ctx context.Context, req *pb.ListEnabledMessageRecipientsRequest) (*pb.ListEnabledMessageRecipientsResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - var cacheMap = utils.NewCacheMap() - recipients, err := models.SharedMessageRecipientDAO.ListAllEnabledRecipients(tx, req.AdminId, req.MessageRecipientGroupId, req.MediaType, req.Keyword, req.Offset, req.Size) - if err != nil { - return nil, err - } - pbRecipients := []*pb.MessageRecipient{} - for _, recipient := range recipients { - // admin - admin, err := models.SharedAdminDAO.FindEnabledAdmin(tx, int64(recipient.AdminId)) - if err != nil { - return nil, err - } - if admin == nil { - continue - } - pbAdmin := &pb.Admin{ - Id: int64(admin.Id), - Fullname: admin.Fullname, - Username: admin.Username, - IsOn: admin.IsOn, - } - - // 媒介实例 - instance, err := models.SharedMessageMediaInstanceDAO.FindEnabledMessageMediaInstance(tx, int64(recipient.InstanceId), cacheMap) - if err != nil { - return nil, err - } - if instance == nil { - continue - } - pbInstance := &pb.MessageMediaInstance{ - Id: int64(instance.Id), - IsOn: instance.IsOn, - Name: instance.Name, - Description: instance.Description, - } - - // 分组 - pbGroups := []*pb.MessageRecipientGroup{} - groupIds := recipient.DecodeGroupIds() - if len(groupIds) > 0 { - for _, groupId := range groupIds { - group, err := models.SharedMessageRecipientGroupDAO.FindEnabledMessageRecipientGroup(tx, groupId) - if err != nil { - return nil, err - } - if group != nil { - pbGroups = append(pbGroups, &pb.MessageRecipientGroup{ - Id: int64(group.Id), - Name: group.Name, - IsOn: group.IsOn, - }) - } - } - } - - pbRecipients = append(pbRecipients, &pb.MessageRecipient{ - Id: int64(recipient.Id), - Admin: pbAdmin, - User: recipient.User, - MessageMediaInstance: pbInstance, - IsOn: recipient.IsOn, - MessageRecipientGroups: pbGroups, - Description: recipient.Description, - TimeFrom: recipient.TimeFrom, - TimeTo: recipient.TimeTo, - }) - } - - return &pb.ListEnabledMessageRecipientsResponse{MessageRecipients: pbRecipients}, nil -} - -// FindEnabledMessageRecipient 查找单个接收人信息 -func (this *MessageRecipientService) FindEnabledMessageRecipient(ctx context.Context, req *pb.FindEnabledMessageRecipientRequest) (*pb.FindEnabledMessageRecipientResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - var cacheMap = utils.NewCacheMap() - recipient, err := models.SharedMessageRecipientDAO.FindEnabledMessageRecipient(tx, req.MessageRecipientId, cacheMap) - if err != nil { - return nil, err - } - if recipient == nil { - return &pb.FindEnabledMessageRecipientResponse{MessageRecipient: nil}, nil - } - - // admin - admin, err := models.SharedAdminDAO.FindEnabledAdmin(tx, int64(recipient.AdminId)) - if err != nil { - return nil, err - } - if admin == nil { - return &pb.FindEnabledMessageRecipientResponse{MessageRecipient: nil}, nil - } - pbAdmin := &pb.Admin{ - Id: int64(admin.Id), - Fullname: admin.Fullname, - Username: admin.Username, - IsOn: admin.IsOn, - } - - // 媒介实例 - instance, err := models.SharedMessageMediaInstanceDAO.FindEnabledMessageMediaInstance(tx, int64(recipient.InstanceId), cacheMap) - if err != nil { - return nil, err - } - if instance == nil { - return &pb.FindEnabledMessageRecipientResponse{MessageRecipient: nil}, nil - } - pbInstance := &pb.MessageMediaInstance{ - Id: int64(instance.Id), - IsOn: instance.IsOn, - Name: instance.Name, - Description: instance.Description, - } - - // 分组 - pbGroups := []*pb.MessageRecipientGroup{} - groupIds := recipient.DecodeGroupIds() - if len(groupIds) > 0 { - for _, groupId := range groupIds { - group, err := models.SharedMessageRecipientGroupDAO.FindEnabledMessageRecipientGroup(tx, groupId) - if err != nil { - return nil, err - } - if group != nil { - pbGroups = append(pbGroups, &pb.MessageRecipientGroup{ - Id: int64(group.Id), - Name: group.Name, - IsOn: group.IsOn, - }) - } - } - } - - return &pb.FindEnabledMessageRecipientResponse{MessageRecipient: &pb.MessageRecipient{ - Id: int64(recipient.Id), - User: recipient.User, - Admin: pbAdmin, - MessageMediaInstance: pbInstance, - IsOn: recipient.IsOn, - MessageRecipientGroups: pbGroups, - Description: recipient.Description, - TimeFrom: recipient.TimeFrom, - TimeTo: recipient.TimeTo, - }}, nil -} diff --git a/internal/rpc/services/service_message_recipient_group.go b/internal/rpc/services/service_message_recipient_group.go deleted file mode 100644 index e90cf0de..00000000 --- a/internal/rpc/services/service_message_recipient_group.go +++ /dev/null @@ -1,106 +0,0 @@ -package services - -import ( - "context" - "github.com/TeaOSLab/EdgeAPI/internal/db/models" - "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" -) - -// 消息接收人分组 -type MessageRecipientGroupService struct { - BaseService -} - -// 创建分组 -func (this *MessageRecipientGroupService) CreateMessageRecipientGroup(ctx context.Context, req *pb.CreateMessageRecipientGroupRequest) (*pb.CreateMessageRecipientGroupResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - groupId, err := models.SharedMessageRecipientGroupDAO.CreateGroup(tx, req.Name) - if err != nil { - return nil, err - } - - return &pb.CreateMessageRecipientGroupResponse{MessageRecipientGroupId: groupId}, nil -} - -// 修改分组 -func (this *MessageRecipientGroupService) UpdateMessageRecipientGroup(ctx context.Context, req *pb.UpdateMessageRecipientGroupRequest) (*pb.RPCSuccess, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - err = models.SharedMessageRecipientGroupDAO.UpdateGroup(tx, req.MessageRecipientGroupId, req.Name, req.IsOn) - if err != nil { - return nil, err - } - - return this.Success() -} - -// 查找所有可用的分组 -func (this *MessageRecipientGroupService) FindAllEnabledMessageRecipientGroups(ctx context.Context, req *pb.FindAllEnabledMessageRecipientGroupsRequest) (*pb.FindAllEnabledMessageRecipientGroupsResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - groups, err := models.SharedMessageRecipientGroupDAO.FindAllEnabledGroups(tx) - if err != nil { - return nil, err - } - pbGroups := []*pb.MessageRecipientGroup{} - for _, group := range groups { - pbGroups = append(pbGroups, &pb.MessageRecipientGroup{ - Id: int64(group.Id), - Name: group.Name, - IsOn: group.IsOn, - }) - } - - return &pb.FindAllEnabledMessageRecipientGroupsResponse{MessageRecipientGroups: pbGroups}, nil -} - -// 删除分组 -func (this *MessageRecipientGroupService) DeleteMessageRecipientGroup(ctx context.Context, req *pb.DeleteMessageRecipientGroupRequest) (*pb.RPCSuccess, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - err = models.SharedMessageRecipientGroupDAO.DisableMessageRecipientGroup(tx, req.MessageRecipientGroupId) - if err != nil { - return nil, err - } - return this.Success() -} - -// 查找单个分组信息 -func (this *MessageRecipientGroupService) FindEnabledMessageRecipientGroup(ctx context.Context, req *pb.FindEnabledMessageRecipientGroupRequest) (*pb.FindEnabledMessageRecipientGroupResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - group, err := models.SharedMessageRecipientGroupDAO.FindEnabledMessageRecipientGroup(tx, req.MessageRecipientGroupId) - if err != nil { - return nil, err - } - if group == nil { - return &pb.FindEnabledMessageRecipientGroupResponse{MessageRecipientGroup: nil}, nil - } - pbGroup := &pb.MessageRecipientGroup{ - Id: int64(group.Id), - IsOn: group.IsOn, - Name: group.Name, - } - return &pb.FindEnabledMessageRecipientGroupResponse{MessageRecipientGroup: pbGroup}, nil -} diff --git a/internal/rpc/services/service_message_task.go b/internal/rpc/services/service_message_task.go deleted file mode 100644 index e68c334b..00000000 --- a/internal/rpc/services/service_message_task.go +++ /dev/null @@ -1,275 +0,0 @@ -package services - -import ( - "context" - "encoding/json" - "github.com/TeaOSLab/EdgeAPI/internal/db/models" - "github.com/TeaOSLab/EdgeAPI/internal/utils" - "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" - "github.com/iwind/TeaGo/types" -) - -// MessageTaskService 消息发送任务服务 -type MessageTaskService struct { - BaseService -} - -// CreateMessageTask 创建任务 -func (this *MessageTaskService) CreateMessageTask(ctx context.Context, req *pb.CreateMessageTaskRequest) (*pb.CreateMessageTaskResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - taskId, err := models.SharedMessageTaskDAO.CreateMessageTask(tx, req.MessageRecipientId, req.MessageMediaInstanceId, req.User, req.Subject, req.Body, req.IsPrimary) - if err != nil { - return nil, err - } - return &pb.CreateMessageTaskResponse{MessageTaskId: taskId}, nil -} - -// DeleteMessageTask 删除消息任务 -func (this *MessageTaskService) DeleteMessageTask(ctx context.Context, req *pb.DeleteMessageTaskRequest) (*pb.RPCSuccess, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - err = models.SharedMessageTaskDAO.DisableMessageTask(tx, req.MessageTaskId) - if err != nil { - return nil, err - } - - return this.Success() -} - -// FindEnabledMessageTask 读取消息任务状态 -func (this *MessageTaskService) FindEnabledMessageTask(ctx context.Context, req *pb.FindEnabledMessageTaskRequest) (*pb.FindEnabledMessageTaskResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - var cacheMap = utils.NewCacheMap() - task, err := models.SharedMessageTaskDAO.FindEnabledMessageTask(tx, req.MessageTaskId) - if err != nil { - return nil, err - } - if task == nil { - return &pb.FindEnabledMessageTaskResponse{MessageTask: nil}, nil - } - - var pbRecipient *pb.MessageRecipient - if task.RecipientId > 0 { - recipient, err := models.SharedMessageRecipientDAO.FindEnabledMessageRecipient(tx, int64(task.RecipientId), cacheMap) - if err != nil { - return nil, err - } - if recipient == nil || !recipient.IsOn { - // 如果发送人已经删除或者禁用,则删除此消息 - err = models.SharedMessageTaskDAO.DisableMessageTask(tx, int64(task.Id)) - if err != nil { - return nil, err - } - return &pb.FindEnabledMessageTaskResponse{MessageTask: nil}, nil - } - - // 媒介 - instance, err := models.SharedMessageMediaInstanceDAO.FindEnabledMessageMediaInstance(tx, int64(recipient.InstanceId), cacheMap) - if err != nil { - return nil, err - } - if instance == nil || !instance.IsOn { - // 如果媒介实例已经删除或者禁用,则删除此消息 - err = models.SharedMessageTaskDAO.DisableMessageTask(tx, int64(task.Id)) - if err != nil { - return nil, err - } - return &pb.FindEnabledMessageTaskResponse{MessageTask: nil}, nil - } - - pbRecipient = &pb.MessageRecipient{ - - MessageMediaInstance: &pb.MessageMediaInstance{ - Id: int64(instance.Id), - MessageMedia: &pb.MessageMedia{ - Type: instance.MediaType, - }, - ParamsJSON: instance.Params, - }, - } - } else { // 没有指定既定的接收人 - // 媒介 - instance, err := models.SharedMessageMediaInstanceDAO.FindEnabledMessageMediaInstance(tx, int64(task.InstanceId), cacheMap) - if err != nil { - return nil, err - } - if instance == nil || !instance.IsOn { - // 如果媒介实例已经删除或者禁用,则删除此消息 - err = models.SharedMessageTaskDAO.DisableMessageTask(tx, int64(task.Id)) - if err != nil { - return nil, err - } - return &pb.FindEnabledMessageTaskResponse{MessageTask: nil}, nil - } - pbRecipient = &pb.MessageRecipient{ - Id: 0, - MessageMediaInstance: &pb.MessageMediaInstance{ - Id: int64(instance.Id), - MessageMedia: &pb.MessageMedia{ - Type: instance.MediaType, - }, - ParamsJSON: instance.Params, - }, - } - } - - var result = &pb.MessageTaskResult{} - if len(task.Result) > 0 { - err = json.Unmarshal(task.Result, result) - if err != nil { - return nil, err - } - } - - return &pb.FindEnabledMessageTaskResponse{MessageTask: &pb.MessageTask{ - Id: int64(task.Id), - MessageRecipient: pbRecipient, - User: task.User, - Subject: task.Subject, - Body: task.Body, - CreatedAt: int64(task.CreatedAt), - Status: int32(task.Status), - SentAt: int64(task.SentAt), - Result: result, - }}, nil -} - -// CountMessageTasksWithStatus 计算某个状态的消息任务数量 -func (this *MessageTaskService) CountMessageTasksWithStatus(ctx context.Context, req *pb.CountMessageTasksWithStatusRequest) (*pb.RPCCountResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - count, err := models.SharedMessageTaskDAO.CountMessageTasksWithStatus(tx, types.Int(req.Status)) - if err != nil { - return nil, err - } - - return this.SuccessCount(count) -} - -// ListMessageTasksWithStatus 根据状态列出某页任务 -func (this *MessageTaskService) ListMessageTasksWithStatus(ctx context.Context, req *pb.ListMessageTasksWithStatusRequest) (*pb.ListMessageTasksWithStatusResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - - var tx = this.NullTx() - var cacheMap = utils.NewCacheMap() - tasks, err := models.SharedMessageTaskDAO.ListMessageTasksWithStatus(tx, types.Int(req.Status), req.Offset, req.Size) - if err != nil { - return nil, err - } - - var pbTasks = []*pb.MessageTask{} - for _, task := range tasks { - var pbRecipient *pb.MessageRecipient - if task.RecipientId > 0 { - recipient, err := models.SharedMessageRecipientDAO.FindEnabledMessageRecipient(tx, int64(task.RecipientId), cacheMap) - if err != nil { - return nil, err - } - if recipient == nil || !recipient.IsOn { - // 如果发送人已经删除或者禁用,则删除此消息 - err = models.SharedMessageTaskDAO.DisableMessageTask(tx, int64(task.Id)) - if err != nil { - return nil, err - } - continue - } - - // 媒介 - instance, err := models.SharedMessageMediaInstanceDAO.FindEnabledMessageMediaInstance(tx, int64(recipient.InstanceId), cacheMap) - if err != nil { - return nil, err - } - if instance == nil || !instance.IsOn { - // 如果媒介实例已经删除或者禁用,则删除此消息 - err = models.SharedMessageTaskDAO.DisableMessageTask(tx, int64(task.Id)) - if err != nil { - return nil, err - } - continue - } - - pbRecipient = &pb.MessageRecipient{ - Id: int64(recipient.Id), - User: recipient.User, - MessageMediaInstance: &pb.MessageMediaInstance{ - Id: int64(instance.Id), - Name: instance.Name, - MessageMedia: &pb.MessageMedia{ - Type: instance.MediaType, - }, - ParamsJSON: instance.Params, - RateJSON: instance.Rate, - }, - } - } else { // 没有指定既定的接收人 - // 媒介 - instance, err := models.SharedMessageMediaInstanceDAO.FindEnabledMessageMediaInstance(tx, int64(task.InstanceId), cacheMap) - if err != nil { - return nil, err - } - if instance == nil || !instance.IsOn { - // 如果媒介实例已经删除或者禁用,则删除此消息 - err = models.SharedMessageTaskDAO.DisableMessageTask(tx, int64(task.Id)) - if err != nil { - return nil, err - } - continue - } - pbRecipient = &pb.MessageRecipient{ - Id: 0, - MessageMediaInstance: &pb.MessageMediaInstance{ - Id: int64(instance.Id), - Name: instance.Name, - MessageMedia: &pb.MessageMedia{ - Type: instance.MediaType, - }, - ParamsJSON: instance.Params, - RateJSON: instance.Rate, - }, - } - } - - var result = &pb.MessageTaskResult{} - if len(task.Result) > 0 { - err = json.Unmarshal(task.Result, result) - if err != nil { - return nil, err - } - } - - pbTasks = append(pbTasks, &pb.MessageTask{ - Id: int64(task.Id), - MessageRecipient: pbRecipient, - User: task.User, - Subject: task.Subject, - Body: task.Body, - CreatedAt: int64(task.CreatedAt), - Status: types.Int32(task.Status), - SentAt: int64(task.SentAt), - Result: result, - }) - } - - return &pb.ListMessageTasksWithStatusResponse{MessageTasks: pbTasks}, nil -} diff --git a/internal/rpc/services/service_message_task_ext.go b/internal/rpc/services/service_message_task_ext.go deleted file mode 100644 index 8ba70a9d..00000000 --- a/internal/rpc/services/service_message_task_ext.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn . -//go:build !plus - -package services - -import ( - "context" - "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" -) - -// SendMessageTask 发送某个消息任务 -func (this *MessageTaskService) SendMessageTask(ctx context.Context, req *pb.SendMessageTaskRequest) (*pb.SendMessageTaskResponse, error) { - return nil, this.NotImplementedYet() -} diff --git a/internal/rpc/services/service_message_task_log.go b/internal/rpc/services/service_message_task_log.go deleted file mode 100644 index 897e4400..00000000 --- a/internal/rpc/services/service_message_task_log.go +++ /dev/null @@ -1,99 +0,0 @@ -package services - -import ( - "context" - "github.com/TeaOSLab/EdgeAPI/internal/db/models" - "github.com/TeaOSLab/EdgeAPI/internal/utils" - "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" -) - -// MessageTaskLogService 消息发送日志相关服务 -type MessageTaskLogService struct { - BaseService -} - -// CountMessageTaskLogs 计算日志数量 -func (this *MessageTaskLogService) CountMessageTaskLogs(ctx context.Context, req *pb.CountMessageTaskLogsRequest) (*pb.RPCCountResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - var tx = this.NullTx() - count, err := models.SharedMessageTaskLogDAO.CountLogs(tx) - if err != nil { - return nil, err - } - return this.SuccessCount(count) -} - -// ListMessageTaskLogs 列出当页日志 -func (this *MessageTaskLogService) ListMessageTaskLogs(ctx context.Context, req *pb.ListMessageTaskLogsRequest) (*pb.ListMessageTaskLogsResponse, error) { - _, err := this.ValidateAdmin(ctx) - if err != nil { - return nil, err - } - var tx = this.NullTx() - var cacheMap = utils.NewCacheMap() - logs, err := models.SharedMessageTaskLogDAO.ListLogs(tx, req.Offset, req.Size) - if err != nil { - return nil, err - } - - pbLogs := []*pb.MessageTaskLog{} - for _, log := range logs { - task, err := models.SharedMessageTaskDAO.FindEnabledMessageTask(tx, int64(log.TaskId)) - if err != nil { - return nil, err - } - if task == nil { - continue - } - - var pbRecipient *pb.MessageRecipient - if task.RecipientId > 0 { - recipient, err := models.SharedMessageRecipientDAO.FindEnabledMessageRecipient(tx, int64(task.RecipientId), cacheMap) - if err != nil { - return nil, err - } - if recipient != nil { - pbRecipient = &pb.MessageRecipient{ - Id: int64(recipient.Id), - User: recipient.User, - } - task.InstanceId = recipient.InstanceId - } - } - - instance, err := models.SharedMessageMediaInstanceDAO.FindEnabledMessageMediaInstance(tx, int64(task.InstanceId), cacheMap) - if err != nil { - return nil, err - } - if instance == nil { - continue - } - - pbLogs = append(pbLogs, &pb.MessageTaskLog{ - Id: int64(log.Id), - CreatedAt: int64(log.CreatedAt), - IsOk: log.IsOk, - Error: log.Error, - Response: log.Response, - MessageTask: &pb.MessageTask{ - Id: int64(task.Id), - MessageRecipient: pbRecipient, - MessageMediaInstance: &pb.MessageMediaInstance{ - Id: int64(instance.Id), - Name: instance.Name, - }, - User: task.User, - Subject: task.Subject, - Body: task.Body, - CreatedAt: int64(task.CreatedAt), - Status: int32(task.Status), - SentAt: int64(task.SentAt), - Result: nil, - }, - }) - } - return &pb.ListMessageTaskLogsResponse{MessageTaskLogs: pbLogs}, nil -} diff --git a/internal/setup/sql.json b/internal/setup/sql.json index dc35d9fc..beb1968b 100644 --- a/internal/setup/sql.json +++ b/internal/setup/sql.json @@ -104473,14 +104473,14 @@ { "id": 1, "values": { - "description": "通过邮件发送通知", + "description": "通过邮件发送通知。", "id": "1", "isOn": "1", "name": "邮件", "order": "8", "state": "1", "type": "email", - "userDescription": "接收人邮箱地址" + "userDescription": "接收人邮箱地址。" }, "uniqueFields": [ "type" @@ -104490,14 +104490,14 @@ { "id": 2, "values": { - "description": "通过HTTP请求发送通知", + "description": "通过HTTP请求发送通知。", "id": "2", "isOn": "1", "name": "WebHook", "order": "7", "state": "1", "type": "webHook", - "userDescription": "通过${MessageUser}参数传递到URL上" + "userDescription": "通过${MessageUser}参数传递到URL上。" }, "uniqueFields": [ "type" @@ -104507,14 +104507,14 @@ { "id": 3, "values": { - "description": "通过运行脚本发送通知", + "description": "通过运行脚本发送通知。", "id": "3", "isOn": "1", "name": "脚本", "order": "6", "state": "1", "type": "script", - "userDescription": "可以在脚本中使用${MessageUser}来获取这个标识" + "userDescription": "可以在脚本中使用${MessageUser}来获取这个标识。" }, "uniqueFields": [ "type" @@ -104524,14 +104524,14 @@ { "id": 4, "values": { - "description": "通过钉钉群机器人发送通知消息", + "description": "通过钉钉群机器人发送通知消息。", "id": "4", "isOn": "1", "name": "钉钉群机器人", "order": "5", "state": "1", "type": "dingTalk", - "userDescription": "要At(@)的群成员的手机号,多个手机号用英文逗号隔开,也可以为空" + "userDescription": "要At(@)的群成员的手机号,多个手机号用英文逗号隔开,也可以为空。" }, "uniqueFields": [ "type" @@ -104541,7 +104541,7 @@ { "id": 5, "values": { - "description": "通过企业微信应用发送通知消息", + "description": "通过企业微信应用发送通知消息。", "id": "5", "isOn": "1", "name": "企业微信应用", @@ -104558,14 +104558,14 @@ { "id": 6, "values": { - "description": "通过微信群机器人发送通知消息", + "description": "通过微信群机器人发送通知消息。", "id": "6", "isOn": "1", "name": "企业微信群机器人", "order": "3", "state": "1", "type": "qyWeixinRobot", - "userDescription": "要At(@)的群成员的手机号,多个手机号用英文逗号隔开,也可以为空" + "userDescription": "要At(@)的群成员的手机号,多个手机号用英文逗号隔开,也可以为空。" }, "uniqueFields": [ "type" @@ -104575,14 +104575,14 @@ { "id": 7, "values": { - "description": "通过\u003ca href=\"https://www.aliyun.com/product/sms?spm=5176.11533447.1097531.2.12055cfa6UnIix\" target=\"_blank\"\u003e阿里云短信服务\u003c/a\u003e发送短信", + "description": "通过\u003ca href=\"https://www.aliyun.com/product/sms\" target=\"_blank\"\u003e阿里云短信服务\u003c/a\u003e发送短信。", "id": "7", "isOn": "1", "name": "阿里云短信", "order": "2", "state": "1", "type": "aliyunSms", - "userDescription": "接收消息的手机号" + "userDescription": "接收消息的手机号。" }, "uniqueFields": [ "type" @@ -104592,14 +104592,14 @@ { "id": 8, "values": { - "description": "通过机器人向群或者某个用户发送消息,需要确保所在网络能够访问Telegram API服务", + "description": "通过机器人向群或者某个用户发送消息,需要确保所在网络能够访问Telegram API服务。", "id": "8", "isOn": "1", "name": "Telegram机器人", "order": "1", "state": "1", "type": "telegram", - "userDescription": "群或用户的Chat ID,通常是一个数字,可以通过和 @get_id_bot 建立对话并发送任意消息获得" + "userDescription": "群或用户的Chat ID,通常是一个数字,可以通过和 @get_id_bot 建立对话并发送任意消息获得。" }, "uniqueFields": [ "type" @@ -104612,7 +104612,7 @@ "name": "edgeMessageReceivers", "engine": "InnoDB", "charset": "utf8mb4_general_ci", - "definition": "CREATE TABLE `edgeMessageReceivers` (\n `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',\n `role` varchar(32) DEFAULT 'node' COMMENT '节点角色',\n `clusterId` int(11) unsigned DEFAULT '0' COMMENT '集群ID',\n `nodeId` int(11) unsigned DEFAULT '0' COMMENT '节点ID',\n `serverId` int(11) unsigned DEFAULT '0' COMMENT '服务ID',\n `type` varchar(255) DEFAULT NULL COMMENT '类型',\n `params` json DEFAULT NULL COMMENT '参数',\n `recipientId` int(11) unsigned DEFAULT '0' COMMENT '接收人ID',\n `recipientGroupId` int(11) unsigned DEFAULT '0' COMMENT '接收人分组ID',\n `state` tinyint(1) unsigned DEFAULT '1' COMMENT '状态',\n PRIMARY KEY (`id`),\n KEY `clusterId` (`clusterId`),\n KEY `nodeId` (`nodeId`),\n KEY `serverId` (`serverId`),\n KEY `type` (`type`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息通知接收人'", + "definition": "CREATE TABLE `edgeMessageReceivers` (\n `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',\n `role` varchar(32) DEFAULT 'node' COMMENT '节点角色',\n `clusterId` int(11) unsigned DEFAULT '0' COMMENT '集群ID',\n `nodeId` int(11) unsigned DEFAULT '0' COMMENT '节点ID',\n `serverId` int(11) unsigned DEFAULT '0' COMMENT '服务ID',\n `type` varchar(255) DEFAULT NULL COMMENT '类型',\n `params` json DEFAULT NULL COMMENT '参数',\n `recipientId` int(11) unsigned DEFAULT '0' COMMENT '接收人ID',\n `recipientGroupId` int(11) unsigned DEFAULT '0' COMMENT '接收人分组ID',\n `state` tinyint(1) unsigned DEFAULT '1' COMMENT '状态',\n PRIMARY KEY (`id`),\n KEY `clusterId` (`clusterId`),\n KEY `nodeId` (`nodeId`),\n KEY `serverId` (`serverId`),\n KEY `type` (`type`),\n KEY `recipientId` (`recipientId`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息通知接收人'", "fields": [ { "name": "id", @@ -104675,6 +104675,10 @@ { "name": "type", "definition": "KEY `type` (`type`) USING BTREE" + }, + { + "name": "recipientId", + "definition": "KEY `recipientId` (`recipientId`) USING BTREE" } ], "records": []