diff --git a/server/internal/dao/engine.go b/server/internal/dao/engine.go index ef77ae7..6c1660d 100644 --- a/server/internal/dao/engine.go +++ b/server/internal/dao/engine.go @@ -1,7 +1,6 @@ package dao import ( - "errors" "kenaito-conf/server/internal/config" "kenaito-conf/server/internal/model" "kenaito-conf/server/internal/util" @@ -99,25 +98,3 @@ func initSeedData() error { return nil } - -// Now 返回数据库当前时间(毫秒精度),用于增量同步游标和 updated_at 写入。 -// 统一使用数据库时间可以避免多实例应用服务器之间的时钟偏差。 -func Now() (time.Time, error) { - rows, err := Engine.DB().Query("SELECT NOW(3)") - if err != nil { - return time.Time{}, err - } - defer rows.Close() - - var now time.Time - if !rows.Next() { - if err := rows.Err(); err != nil { - return time.Time{}, err - } - return time.Time{}, errors.New("no database time result") - } - if err := rows.Scan(&now); err != nil { - return time.Time{}, err - } - return now, nil -} diff --git a/server/internal/handler/app.go b/server/internal/handler/app.go index c05e55e..5f06113 100644 --- a/server/internal/handler/app.go +++ b/server/internal/handler/app.go @@ -4,7 +4,6 @@ import ( "crypto/rand" "encoding/hex" "kenaito-conf/server/internal/dao" - "kenaito-conf/server/internal/logger" "kenaito-conf/server/internal/middleware" "kenaito-conf/server/internal/model" "net/http" @@ -259,12 +258,7 @@ func (h *AppHandler) Delete(c *gin.Context) { return } - now, err := dao.Now() - if err != nil { - logger.SugaredLogger.Errorf("[AppHandler.Delete] get database time error: %v", err) - c.JSON(http.StatusInternalServerError, model.WrapperResponse{Code: 500, Msg: "删除失败"}) - return - } + now := time.Now() app.Enabled = false app.UpdatedBy = userInfo.Name diff --git a/server/internal/handler/config.go b/server/internal/handler/config.go index 85373c4..8a97bf9 100644 --- a/server/internal/handler/config.go +++ b/server/internal/handler/config.go @@ -202,12 +202,7 @@ func (h *ConfigHandler) Add(c *gin.Context) { } } - now, err := dao.Now() - if err != nil { - logger.SugaredLogger.Errorf("[ConfigHandler.Add] get database time error: %v", err) - c.JSON(http.StatusInternalServerError, model.WrapperResponse{Code: 500, Msg: "保存失败"}) - return - } + now := time.Now() config := model.AppConfig{ GroupId: req.GroupId, @@ -278,12 +273,7 @@ func (h *ConfigHandler) Update(c *gin.Context) { return } - now, err := dao.Now() - if err != nil { - logger.SugaredLogger.Errorf("[ConfigHandler.Update] get database time error: %v", err) - c.JSON(http.StatusInternalServerError, model.WrapperResponse{Code: 500, Msg: "保存失败"}) - return - } + now := time.Now() // save history h.saveHistory(&config, userInfo.Name, "update", now) @@ -317,12 +307,7 @@ func (h *ConfigHandler) Delete(c *gin.Context) { return } - now, err := dao.Now() - if err != nil { - logger.SugaredLogger.Errorf("[ConfigHandler.Delete] get database time error: %v", err) - c.JSON(http.StatusInternalServerError, model.WrapperResponse{Code: 500, Msg: "删除失败"}) - return - } + now := time.Now() // 记录删除前的配置内容 h.saveHistory(&config, userInfo.Name, "delete", now) @@ -433,12 +418,7 @@ func (h *ConfigHandler) Rollback(c *gin.Context) { return } - now, err := dao.Now() - if err != nil { - logger.SugaredLogger.Errorf("[ConfigHandler.Rollback] get database time error: %v", err) - c.JSON(http.StatusInternalServerError, model.WrapperResponse{Code: 500, Msg: "回滚失败"}) - return - } + now := time.Now() // 记录回滚前的配置内容 h.saveHistory(&config, userInfo.Name, "rollback", now) diff --git a/server/internal/handler/config_api.go b/server/internal/handler/config_api.go index 63d7b68..3762e31 100644 --- a/server/internal/handler/config_api.go +++ b/server/internal/handler/config_api.go @@ -96,13 +96,8 @@ func (h *ConfigApiHandler) FetchAllConfigs(c *gin.Context) { return } - // 游标上界取查询前的数据库时间,保证查询期间发生的更新会在下次增量中返回 - upperBound, err := dao.Now() - if err != nil { - logger.SugaredLogger.Errorf("[FetchAllConfigs] get database time error: %v", err) - c.JSON(http.StatusInternalServerError, model.WrapperResponse{Code: 500, Msg: "服务暂时不可用"}) - return - } + // 游标上界取查询前的当前时间,保证查询期间发生的更新会在下次增量中返回 + upperBound := time.Now() result := make(map[string]interface{}) var configIds []int @@ -195,14 +190,8 @@ func (h *ConfigApiHandler) FetchChangedConfigs(c *gin.Context) { lastUpdateTime := time.UnixMilli(req.LastTime) - // 以数据库时间为本次查询的固定上界,避免查询与游标生成之间的竞态, - // 同时避免多实例应用服务器的时钟偏差。 - upperBound, err := dao.Now() - if err != nil { - logger.SugaredLogger.Errorf("[FetchChangedConfigs] get database time error: %v", err) - c.JSON(http.StatusInternalServerError, model.WrapperResponse{Code: 500, Msg: "服务暂时不可用"}) - return - } + // 以当前时间为本次查询的固定上界,避免查询与游标生成之间的竞态 + upperBound := time.Now() result := make(map[string]string) var configIds []int