mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-03 15:00:27 +08:00
优化消息通知相关代码
This commit is contained in:
@@ -27,6 +27,8 @@ const (
|
|||||||
type MessageType = string
|
type MessageType = string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
MessageTypeAll MessageType = "*"
|
||||||
|
|
||||||
// 这里的命名问题(首字母大写)为历史遗留问题,暂不修改
|
// 这里的命名问题(首字母大写)为历史遗留问题,暂不修改
|
||||||
|
|
||||||
MessageTypeHealthCheckFailed MessageType = "HealthCheckFailed" // 节点健康检查失败
|
MessageTypeHealthCheckFailed MessageType = "HealthCheckFailed" // 节点健康检查失败
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ import (
|
|||||||
_ "github.com/go-sql-driver/mysql"
|
_ "github.com/go-sql-driver/mysql"
|
||||||
"github.com/iwind/TeaGo/Tea"
|
"github.com/iwind/TeaGo/Tea"
|
||||||
"github.com/iwind/TeaGo/dbs"
|
"github.com/iwind/TeaGo/dbs"
|
||||||
"github.com/iwind/TeaGo/lists"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -64,7 +62,7 @@ func (this *MessageMediaDAO) FindEnabledMessageMedia(tx *dbs.Tx, id int64) (*Mes
|
|||||||
return result.(*MessageMedia), err
|
return result.(*MessageMedia), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据主键查找名称
|
// FindMessageMediaName 根据主键查找名称
|
||||||
func (this *MessageMediaDAO) FindMessageMediaName(tx *dbs.Tx, id int64) (string, error) {
|
func (this *MessageMediaDAO) FindMessageMediaName(tx *dbs.Tx, id int64) (string, error) {
|
||||||
return this.Query(tx).
|
return this.Query(tx).
|
||||||
Pk(id).
|
Pk(id).
|
||||||
@@ -72,7 +70,7 @@ func (this *MessageMediaDAO) FindMessageMediaName(tx *dbs.Tx, id int64) (string,
|
|||||||
FindStringCol("")
|
FindStringCol("")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询所有可用媒介
|
// FindAllEnabledMessageMedias 查询所有可用媒介
|
||||||
func (this *MessageMediaDAO) FindAllEnabledMessageMedias(tx *dbs.Tx) (result []*MessageMedia, err error) {
|
func (this *MessageMediaDAO) FindAllEnabledMessageMedias(tx *dbs.Tx) (result []*MessageMedia, err error) {
|
||||||
_, err = this.Query(tx).
|
_, err = this.Query(tx).
|
||||||
State(MessageMediaStateEnabled).
|
State(MessageMediaStateEnabled).
|
||||||
@@ -82,74 +80,3 @@ func (this *MessageMediaDAO) FindAllEnabledMessageMedias(tx *dbs.Tx) (result []*
|
|||||||
FindAll()
|
FindAll()
|
||||||
return
|
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
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -98,24 +98,6 @@ func (this *MessageReceiverDAO) CreateReceiver(tx *dbs.Tx, role string, clusterI
|
|||||||
return this.SaveInt64(tx, op)
|
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 计算接收人数量
|
// CountAllEnabledReceivers 计算接收人数量
|
||||||
func (this *MessageReceiverDAO) CountAllEnabledReceivers(tx *dbs.Tx, role string, clusterId int64, nodeId int64, serverId int64, messageType string) (int64, error) {
|
func (this *MessageReceiverDAO) CountAllEnabledReceivers(tx *dbs.Tx, role string, clusterId int64, nodeId int64, serverId int64, messageType string) (int64, error) {
|
||||||
query := this.Query(tx)
|
query := this.Query(tx)
|
||||||
|
|||||||
@@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -189,36 +189,6 @@ func (this *APINode) registerServices(server *grpc.Server) {
|
|||||||
pb.RegisterMessageServiceServer(server, instance)
|
pb.RegisterMessageServiceServer(server, instance)
|
||||||
this.rest(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)
|
var instance = this.serviceInstance(&services.NodeGroupService{}).(*services.NodeGroupService)
|
||||||
pb.RegisterNodeGroupServiceServer(server, instance)
|
pb.RegisterNodeGroupServiceServer(server, instance)
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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()
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -104473,14 +104473,14 @@
|
|||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"values": {
|
"values": {
|
||||||
"description": "通过邮件发送通知",
|
"description": "通过邮件发送通知。",
|
||||||
"id": "1",
|
"id": "1",
|
||||||
"isOn": "1",
|
"isOn": "1",
|
||||||
"name": "邮件",
|
"name": "邮件",
|
||||||
"order": "8",
|
"order": "8",
|
||||||
"state": "1",
|
"state": "1",
|
||||||
"type": "email",
|
"type": "email",
|
||||||
"userDescription": "接收人邮箱地址"
|
"userDescription": "接收人邮箱地址。"
|
||||||
},
|
},
|
||||||
"uniqueFields": [
|
"uniqueFields": [
|
||||||
"type"
|
"type"
|
||||||
@@ -104490,14 +104490,14 @@
|
|||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"values": {
|
"values": {
|
||||||
"description": "通过HTTP请求发送通知",
|
"description": "通过HTTP请求发送通知。",
|
||||||
"id": "2",
|
"id": "2",
|
||||||
"isOn": "1",
|
"isOn": "1",
|
||||||
"name": "WebHook",
|
"name": "WebHook",
|
||||||
"order": "7",
|
"order": "7",
|
||||||
"state": "1",
|
"state": "1",
|
||||||
"type": "webHook",
|
"type": "webHook",
|
||||||
"userDescription": "通过${MessageUser}参数传递到URL上"
|
"userDescription": "通过${MessageUser}参数传递到URL上。"
|
||||||
},
|
},
|
||||||
"uniqueFields": [
|
"uniqueFields": [
|
||||||
"type"
|
"type"
|
||||||
@@ -104507,14 +104507,14 @@
|
|||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"values": {
|
"values": {
|
||||||
"description": "通过运行脚本发送通知",
|
"description": "通过运行脚本发送通知。",
|
||||||
"id": "3",
|
"id": "3",
|
||||||
"isOn": "1",
|
"isOn": "1",
|
||||||
"name": "脚本",
|
"name": "脚本",
|
||||||
"order": "6",
|
"order": "6",
|
||||||
"state": "1",
|
"state": "1",
|
||||||
"type": "script",
|
"type": "script",
|
||||||
"userDescription": "可以在脚本中使用${MessageUser}来获取这个标识"
|
"userDescription": "可以在脚本中使用${MessageUser}来获取这个标识。"
|
||||||
},
|
},
|
||||||
"uniqueFields": [
|
"uniqueFields": [
|
||||||
"type"
|
"type"
|
||||||
@@ -104524,14 +104524,14 @@
|
|||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"values": {
|
"values": {
|
||||||
"description": "通过钉钉群机器人发送通知消息",
|
"description": "通过钉钉群机器人发送通知消息。",
|
||||||
"id": "4",
|
"id": "4",
|
||||||
"isOn": "1",
|
"isOn": "1",
|
||||||
"name": "钉钉群机器人",
|
"name": "钉钉群机器人",
|
||||||
"order": "5",
|
"order": "5",
|
||||||
"state": "1",
|
"state": "1",
|
||||||
"type": "dingTalk",
|
"type": "dingTalk",
|
||||||
"userDescription": "要At(@)的群成员的手机号,多个手机号用英文逗号隔开,也可以为空"
|
"userDescription": "要At(@)的群成员的手机号,多个手机号用英文逗号隔开,也可以为空。"
|
||||||
},
|
},
|
||||||
"uniqueFields": [
|
"uniqueFields": [
|
||||||
"type"
|
"type"
|
||||||
@@ -104541,7 +104541,7 @@
|
|||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"values": {
|
"values": {
|
||||||
"description": "通过企业微信应用发送通知消息",
|
"description": "通过企业微信应用发送通知消息。",
|
||||||
"id": "5",
|
"id": "5",
|
||||||
"isOn": "1",
|
"isOn": "1",
|
||||||
"name": "企业微信应用",
|
"name": "企业微信应用",
|
||||||
@@ -104558,14 +104558,14 @@
|
|||||||
{
|
{
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"values": {
|
"values": {
|
||||||
"description": "通过微信群机器人发送通知消息",
|
"description": "通过微信群机器人发送通知消息。",
|
||||||
"id": "6",
|
"id": "6",
|
||||||
"isOn": "1",
|
"isOn": "1",
|
||||||
"name": "企业微信群机器人",
|
"name": "企业微信群机器人",
|
||||||
"order": "3",
|
"order": "3",
|
||||||
"state": "1",
|
"state": "1",
|
||||||
"type": "qyWeixinRobot",
|
"type": "qyWeixinRobot",
|
||||||
"userDescription": "要At(@)的群成员的手机号,多个手机号用英文逗号隔开,也可以为空"
|
"userDescription": "要At(@)的群成员的手机号,多个手机号用英文逗号隔开,也可以为空。"
|
||||||
},
|
},
|
||||||
"uniqueFields": [
|
"uniqueFields": [
|
||||||
"type"
|
"type"
|
||||||
@@ -104575,14 +104575,14 @@
|
|||||||
{
|
{
|
||||||
"id": 7,
|
"id": 7,
|
||||||
"values": {
|
"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",
|
"id": "7",
|
||||||
"isOn": "1",
|
"isOn": "1",
|
||||||
"name": "阿里云短信",
|
"name": "阿里云短信",
|
||||||
"order": "2",
|
"order": "2",
|
||||||
"state": "1",
|
"state": "1",
|
||||||
"type": "aliyunSms",
|
"type": "aliyunSms",
|
||||||
"userDescription": "接收消息的手机号"
|
"userDescription": "接收消息的手机号。"
|
||||||
},
|
},
|
||||||
"uniqueFields": [
|
"uniqueFields": [
|
||||||
"type"
|
"type"
|
||||||
@@ -104592,14 +104592,14 @@
|
|||||||
{
|
{
|
||||||
"id": 8,
|
"id": 8,
|
||||||
"values": {
|
"values": {
|
||||||
"description": "通过机器人向群或者某个用户发送消息,需要确保所在网络能够访问Telegram API服务",
|
"description": "通过机器人向群或者某个用户发送消息,需要确保所在网络能够访问Telegram API服务。",
|
||||||
"id": "8",
|
"id": "8",
|
||||||
"isOn": "1",
|
"isOn": "1",
|
||||||
"name": "Telegram机器人",
|
"name": "Telegram机器人",
|
||||||
"order": "1",
|
"order": "1",
|
||||||
"state": "1",
|
"state": "1",
|
||||||
"type": "telegram",
|
"type": "telegram",
|
||||||
"userDescription": "群或用户的Chat ID,通常是一个数字,可以通过和 @get_id_bot 建立对话并发送任意消息获得"
|
"userDescription": "群或用户的Chat ID,通常是一个数字,可以通过和 @get_id_bot 建立对话并发送任意消息获得。"
|
||||||
},
|
},
|
||||||
"uniqueFields": [
|
"uniqueFields": [
|
||||||
"type"
|
"type"
|
||||||
@@ -104612,7 +104612,7 @@
|
|||||||
"name": "edgeMessageReceivers",
|
"name": "edgeMessageReceivers",
|
||||||
"engine": "InnoDB",
|
"engine": "InnoDB",
|
||||||
"charset": "utf8mb4_general_ci",
|
"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": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"name": "id",
|
"name": "id",
|
||||||
@@ -104675,6 +104675,10 @@
|
|||||||
{
|
{
|
||||||
"name": "type",
|
"name": "type",
|
||||||
"definition": "KEY `type` (`type`) USING BTREE"
|
"definition": "KEY `type` (`type`) USING BTREE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "recipientId",
|
||||||
|
"definition": "KEY `recipientId` (`recipientId`) USING BTREE"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"records": []
|
"records": []
|
||||||
|
|||||||
Reference in New Issue
Block a user