mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	优化消息通知相关代码
This commit is contained in:
		@@ -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
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user