mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-08 11:20:26 +08:00
实现发送消息到媒介
This commit is contained in:
171
internal/rpc/services/service_message_receiver.go
Normal file
171
internal/rpc/services/service_message_receiver.go
Normal file
@@ -0,0 +1,171 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
|
||||
"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, 0)
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
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, models.MessageTaskTarget{
|
||||
ClusterId: req.NodeClusterId,
|
||||
NodeId: req.NodeId,
|
||||
ServerId: req.ServerId,
|
||||
}, messageType, params, option.MessageRecipientId, option.MessageRecipientGroupId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return this.Success()
|
||||
}
|
||||
|
||||
// FindAllMessageReceivers 查找接收者
|
||||
func (this *MessageReceiverService) FindAllMessageReceivers(ctx context.Context, req *pb.FindAllMessageReceiversRequest) (*pb.FindAllMessageReceiversResponse, error) {
|
||||
_, err := this.ValidateAdmin(ctx, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var tx = this.NullTx()
|
||||
receivers, err := models.SharedMessageReceiverDAO.FindAllReceivers(tx, models.MessageTaskTarget{
|
||||
ClusterId: req.NodeClusterId,
|
||||
NodeId: req.NodeId,
|
||||
ServerId: 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))
|
||||
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))
|
||||
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 == 1,
|
||||
},
|
||||
MessageMediaInstance: &pb.MessageMediaInstance{
|
||||
Id: int64(instance.Id),
|
||||
Name: instance.Name,
|
||||
IsOn: instance.IsOn == 1,
|
||||
},
|
||||
IsOn: recipient.IsOn == 1,
|
||||
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 == 1,
|
||||
}
|
||||
}
|
||||
|
||||
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: []byte(receiver.Params),
|
||||
MessageRecipient: pbRecipient,
|
||||
MessageRecipientGroup: pbRecipientGroup,
|
||||
})
|
||||
}
|
||||
return &pb.FindAllMessageReceiversResponse{MessageReceivers: pbReceivers}, nil
|
||||
}
|
||||
|
||||
// DeleteMessageReceiver 删除接收者
|
||||
func (this *MessageReceiverService) DeleteMessageReceiver(ctx context.Context, req *pb.DeleteMessageReceiverRequest) (*pb.RPCSuccess, error) {
|
||||
_, err := this.ValidateAdmin(ctx, 0)
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user