mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 16:00:24 +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