优化日程提醒模块
This commit is contained in:
@@ -1,11 +1,19 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
import (
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
// OaSchedule OA日程(日历待办): yz_backend_oa_schedule
|
||||
// 日程按租户 tid + 用户 user_id 双重隔离,供 backend 日程管理页面的
|
||||
// 月历视图与待办列表读写。schedule_date/start_time/end_time 均以
|
||||
// "YYYY-MM-DD"、"HH:mm" 字符串存取,前端无需再做时区换算。
|
||||
//
|
||||
// 顺延相关字段(source_id/carry_over/carry_count/carry_to_date):
|
||||
// 当天做不完的日程可"顺延到下一天"——原日程标记完成并置 carry_over=1,
|
||||
// 同时在目标日期生成一条待办,source_id 指向整条顺延链的源头日程,
|
||||
// carry_count 记录累计顺延次数,便于追溯一个任务跨了多少天。
|
||||
type OaSchedule struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
Tid int `orm:"column(tid)" json:"tid"`
|
||||
@@ -21,6 +29,10 @@ type OaSchedule struct {
|
||||
Priority int8 `orm:"column(priority);default(0)" json:"priority"`
|
||||
Status int8 `orm:"column(status);default(0)" json:"status"`
|
||||
FinishTime *time.Time `orm:"column(finish_time);type(datetime);null" json:"finish_time"`
|
||||
SourceID uint64 `orm:"column(source_id);default(0)" json:"source_id"`
|
||||
CarryOver int8 `orm:"column(carry_over);default(0)" json:"carry_over"`
|
||||
CarryCount int `orm:"column(carry_count);default(0)" json:"carry_count"`
|
||||
CarryToDate string `orm:"column(carry_to_date);size(10);default()" json:"carry_to_date"`
|
||||
IsDeleted int8 `orm:"column(is_deleted);default(0)" json:"is_deleted"`
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||||
UpdateTime *time.Time `orm:"column(update_time);auto_now;type(datetime);null" json:"update_time"`
|
||||
@@ -30,3 +42,29 @@ type OaSchedule struct {
|
||||
func (m *OaSchedule) TableName() string {
|
||||
return "yz_backend_oa_schedule"
|
||||
}
|
||||
|
||||
var oaScheduleCarryColumnsOnce sync.Once
|
||||
|
||||
// EnsureOaScheduleCarryColumns 为日程表补齐"顺延到下一天"所需字段。
|
||||
// 历史库可能早于该特性建表,这里在首次访问日程接口时自动补列,
|
||||
// 字段已存在时 MySQL 会报 duplicate column,统一忽略,不阻断主流程。
|
||||
func EnsureOaScheduleCarryColumns() error {
|
||||
if Orm == nil {
|
||||
return nil
|
||||
}
|
||||
var err error
|
||||
oaScheduleCarryColumnsOnce.Do(func() {
|
||||
alters := []string{
|
||||
"ALTER TABLE yz_backend_oa_schedule ADD COLUMN source_id bigint unsigned NOT NULL DEFAULT 0 COMMENT '顺延来源日程ID 0-原始日程'",
|
||||
"ALTER TABLE yz_backend_oa_schedule ADD COLUMN carry_over tinyint NOT NULL DEFAULT 0 COMMENT '是否已顺延到下一天 0-否 1-是'",
|
||||
"ALTER TABLE yz_backend_oa_schedule ADD COLUMN carry_count int NOT NULL DEFAULT 0 COMMENT '累计顺延次数'",
|
||||
"ALTER TABLE yz_backend_oa_schedule ADD COLUMN carry_to_date varchar(10) NOT NULL DEFAULT '' COMMENT '顺延目标日期(YYYY-MM-DD)'",
|
||||
}
|
||||
for _, sql := range alters {
|
||||
if _, e := Orm.Raw(sql).Exec(); e != nil {
|
||||
err = e
|
||||
}
|
||||
}
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user