修复日程提醒功能

This commit is contained in:
2026-07-20 11:41:39 +08:00
parent 7ab6958538
commit f00ba9f9cc
19 changed files with 1735 additions and 1725 deletions
+51 -39
View File
@@ -13,6 +13,7 @@ import (
"server/models"
"server/pkg/jwtutil"
"github.com/beego/beego/v2/client/orm"
beego "github.com/beego/beego/v2/server/web"
)
@@ -23,18 +24,18 @@ type AppReminderController struct {
func (c *AppReminderController) appClaims() (*jwtutil.Claims, error) {
auth := c.Ctx.Request.Header.Get("Authorization")
if auth == "" {
return nil, fmt.Errorf("未登录")
return nil, orm.ErrNoRows
}
parts := strings.SplitN(auth, " ", 2)
if len(parts) != 2 || parts[0] != "Bearer" {
return nil, fmt.Errorf("认证信息格式错误")
return nil, orm.ErrNoRows
}
claims, err := jwtutil.ParseToken(parts[1])
if err != nil {
return nil, fmt.Errorf("无效的token")
return nil, err
}
if claims.UserType != "backend" && claims.UserType != "app" && claims.UserType != "platform" {
return nil, fmt.Errorf("无权访问")
return nil, orm.ErrNoRows
}
return claims, nil
}
@@ -71,7 +72,7 @@ type appSchedulePayload struct {
func (c *AppReminderController) GetList() {
claims, err := c.appClaims()
if err != nil {
c.jsonErr(401, 401, err.Error())
c.jsonErr(401, 401, "未登录或无权限")
return
}
@@ -87,8 +88,9 @@ func (c *AppReminderController) GetList() {
pageSize = 20
}
qs := models.Orm.QueryTable(new(models.PlatformSchedule)).
Filter("user_id", claims.UserID)
qs := models.Orm.QueryTable(new(models.BackendSchedule)).
Filter("user_id", claims.UserID).
Filter("tid", claims.TenantId)
if keyword != "" {
qs = qs.Filter("content__contains", keyword)
@@ -96,17 +98,20 @@ func (c *AppReminderController) GetList() {
total, _ := qs.Count()
var schedules []models.PlatformSchedule
var schedules []models.BackendSchedule
_, err = qs.OrderBy("-id").Limit(pageSize, (page-1)*pageSize).All(&schedules)
if err != nil {
if err != nil && err != orm.ErrNoRows {
c.jsonErr(500, 500, "查询失败: "+err.Error())
return
}
if schedules == nil {
schedules = []models.BackendSchedule{}
}
list := make([]map[string]interface{}, 0, len(schedules))
for _, s := range schedules {
var reminders []models.PlatformScheduleReminder
_, _ = models.Orm.QueryTable(new(models.PlatformScheduleReminder)).
var reminders []models.BackendScheduleReminder
_, _ = models.Orm.QueryTable(new(models.BackendScheduleReminder)).
Filter("schedule_id", s.ID).
Filter("is_deleted", 0).
All(&reminders)
@@ -166,7 +171,7 @@ func (c *AppReminderController) GetList() {
func (c *AppReminderController) GetDetail() {
claims, err := c.appClaims()
if err != nil {
c.jsonErr(401, 401, err.Error())
c.jsonErr(401, 401, "未登录或无权限")
return
}
@@ -177,24 +182,25 @@ func (c *AppReminderController) GetDetail() {
return
}
var schedule models.PlatformSchedule
err = models.Orm.QueryTable(new(models.PlatformSchedule)).
var schedule models.BackendSchedule
err = models.Orm.QueryTable(new(models.BackendSchedule)).
Filter("id", id).
Filter("user_id", claims.UserID).
Filter("tid", claims.TenantId).
One(&schedule)
if err != nil {
c.jsonErr(404, 404, "日程未找到")
return
}
var reminders []models.PlatformScheduleReminder
_, _ = models.Orm.QueryTable(new(models.PlatformScheduleReminder)).
var reminders []models.BackendScheduleReminder
_, _ = models.Orm.QueryTable(new(models.BackendScheduleReminder)).
Filter("schedule_id", schedule.ID).
Filter("is_deleted", 0).
All(&reminders)
channels := make([]string, 0, len(reminders))
var first models.PlatformScheduleReminder
var first models.BackendScheduleReminder
for _, r := range reminders {
channels = append(channels, r.RemindChannel)
first = r
@@ -236,7 +242,7 @@ func (c *AppReminderController) GetDetail() {
func (c *AppReminderController) Create() {
claims, err := c.appClaims()
if err != nil {
c.jsonErr(401, 401, err.Error())
c.jsonErr(401, 401, "未登录或无权限")
return
}
@@ -275,7 +281,8 @@ func (c *AppReminderController) Create() {
title = "日程提醒"
}
schedule := models.PlatformSchedule{
schedule := models.BackendSchedule{
Tid: claims.TenantId,
Title: title,
Content: content,
ScheduleTime: schedTime,
@@ -298,7 +305,8 @@ func (c *AppReminderController) Create() {
firstSendTime := schedTime.Add(-time.Duration(p.AdvanceMinutes) * time.Minute)
reminder := models.PlatformScheduleReminder{
reminder := models.BackendScheduleReminder{
Tid: claims.TenantId,
ScheduleID: uint64(schedID),
RemindChannel: ch,
AdvanceMinutes: p.AdvanceMinutes,
@@ -336,7 +344,7 @@ func (c *AppReminderController) Create() {
func (c *AppReminderController) Update() {
claims, err := c.appClaims()
if err != nil {
c.jsonErr(401, 401, err.Error())
c.jsonErr(401, 401, "未登录或无权限")
return
}
@@ -364,18 +372,19 @@ func (c *AppReminderController) Update() {
return
}
var schedule models.PlatformSchedule
err = models.Orm.QueryTable(new(models.PlatformSchedule)).
var schedule models.BackendSchedule
err = models.Orm.QueryTable(new(models.BackendSchedule)).
Filter("id", id).
Filter("user_id", claims.UserID).
Filter("tid", claims.TenantId).
One(&schedule)
if err != nil {
c.jsonErr(404, 404, "日程未找到")
return
}
var reminders []models.PlatformScheduleReminder
_, _ = models.Orm.QueryTable(new(models.PlatformScheduleReminder)).
var reminders []models.BackendScheduleReminder
_, _ = models.Orm.QueryTable(new(models.BackendScheduleReminder)).
Filter("schedule_id", id).
Filter("is_deleted", 0).
All(&reminders)
@@ -414,7 +423,7 @@ func (c *AppReminderController) Update() {
}
// 软删除旧提醒,重建
_, _ = models.Orm.QueryTable(new(models.PlatformScheduleReminder)).
_, _ = models.Orm.QueryTable(new(models.BackendScheduleReminder)).
Filter("schedule_id", id).
Update(map[string]interface{}{
"IsDeleted": 1,
@@ -432,7 +441,8 @@ func (c *AppReminderController) Update() {
firstSendTime := schedTime.Add(-time.Duration(p.AdvanceMinutes) * time.Minute)
reminder := models.PlatformScheduleReminder{
reminder := models.BackendScheduleReminder{
Tid: claims.TenantId,
ScheduleID: id,
RemindChannel: ch,
AdvanceMinutes: p.AdvanceMinutes,
@@ -470,7 +480,7 @@ func (c *AppReminderController) Update() {
func (c *AppReminderController) Delete() {
claims, err := c.appClaims()
if err != nil {
c.jsonErr(401, 401, err.Error())
c.jsonErr(401, 401, "未登录或无权限")
return
}
@@ -481,18 +491,19 @@ func (c *AppReminderController) Delete() {
return
}
var schedule models.PlatformSchedule
err = models.Orm.QueryTable(new(models.PlatformSchedule)).
var schedule models.BackendSchedule
err = models.Orm.QueryTable(new(models.BackendSchedule)).
Filter("id", id).
Filter("user_id", claims.UserID).
Filter("tid", claims.TenantId).
One(&schedule)
if err != nil {
c.jsonErr(404, 404, "日程未找到")
return
}
var reminders []models.PlatformScheduleReminder
_, _ = models.Orm.QueryTable(new(models.PlatformScheduleReminder)).
var reminders []models.BackendScheduleReminder
_, _ = models.Orm.QueryTable(new(models.BackendScheduleReminder)).
Filter("schedule_id", id).
Filter("is_deleted", 0).
All(&reminders)
@@ -512,9 +523,9 @@ func (c *AppReminderController) Delete() {
return
}
_, err = models.Orm.QueryTable(new(models.PlatformSchedule)).Filter("id", id).Delete()
_, err = models.Orm.QueryTable(new(models.BackendSchedule)).Filter("id", id).Delete()
if err == nil {
_, _ = models.Orm.QueryTable(new(models.PlatformScheduleReminder)).
_, _ = models.Orm.QueryTable(new(models.BackendScheduleReminder)).
Filter("schedule_id", id).
Update(map[string]interface{}{
"IsDeleted": 1,
@@ -530,7 +541,7 @@ func (c *AppReminderController) Delete() {
func (c *AppReminderController) ToggleComplete() {
claims, err := c.appClaims()
if err != nil {
c.jsonErr(401, 401, err.Error())
c.jsonErr(401, 401, "未登录或无权限")
return
}
@@ -541,18 +552,19 @@ func (c *AppReminderController) ToggleComplete() {
return
}
var schedule models.PlatformSchedule
err = models.Orm.QueryTable(new(models.PlatformSchedule)).
var schedule models.BackendSchedule
err = models.Orm.QueryTable(new(models.BackendSchedule)).
Filter("id", id).
Filter("user_id", claims.UserID).
Filter("tid", claims.TenantId).
One(&schedule)
if err != nil {
c.jsonErr(404, 404, "日程未找到")
return
}
var reminders []models.PlatformScheduleReminder
_, _ = models.Orm.QueryTable(new(models.PlatformScheduleReminder)).
var reminders []models.BackendScheduleReminder
_, _ = models.Orm.QueryTable(new(models.BackendScheduleReminder)).
Filter("schedule_id", id).
Filter("is_deleted", 0).
All(&reminders)