Files
bdrp-server/app/main/api/internal/logic/notification/getnotificationslogic.go
2026-04-18 12:05:21 +08:00

79 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package notification
import (
"context"
"time"
"bdrp-server/common/xerr"
"github.com/pkg/errors"
"bdrp-server/app/main/api/internal/svc"
"bdrp-server/app/main/api/internal/types"
"bdrp-server/app/main/model"
"github.com/zeromicro/go-zero/core/logx"
)
type GetNotificationsLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetNotificationsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetNotificationsLogic {
return &GetNotificationsLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetNotificationsLogic) GetNotifications() (resp *types.GetNotificationsResp, err error) {
// 获取今天的日期
now := time.Now()
// 获取开始和结束日期的时间戳
todayStart := now.Format("2006-01-02") + " 00:00:00"
todayEnd := now.Format("2006-01-02") + " 23:59:59"
// 构建查询条件与后台管理一致status 1=启用 0=禁用;库中为整型,不能用字符串 "active"
builder := l.svcCtx.GlobalNotificationsModel.SelectBuilder().
Where("status = ?", 1).
Where("(start_date IS NULL OR start_date <= ?)", todayEnd). // start_date 是 NULL 或者小于等于今天结束时间
Where("(end_date IS NULL OR end_date >= ?)", todayStart) // end_date 是 NULL 或者大于等于今天开始时间
notificationsModelList, findErr := l.svcCtx.GlobalNotificationsModel.FindAll(l.ctx, builder, "")
if findErr != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "全局通知, 查找通知失败, err:%+v", findErr)
}
notifications := toPublicNotifications(notificationsModelList)
return &types.GetNotificationsResp{
Notifications: notifications,
Total: int64(len(notifications)),
}, nil
}
func toPublicNotifications(list []*model.GlobalNotifications) []types.Notification {
out := make([]types.Notification, 0, len(list))
for _, m := range list {
n := types.Notification{
Title: m.Title,
Content: m.Content,
NotificationPage: m.NotificationPage,
StartTime: m.StartTime,
EndTime: m.EndTime,
}
if m.StartDate.Valid {
n.StartDate = m.StartDate.Time.Format("2006-01-02")
}
if m.EndDate.Valid {
n.EndDate = m.EndDate.Time.Format("2006-01-02")
}
out = append(out, n)
}
return out
}