package handler import ( "context" "net/http" "time" "bj_power_mes/common/httpx" "bj_power_mes/internal/logic" "bj_power_mes/internal/svc" "github.com/zeromicro/go-zero/core/logx" ) // SettingsHandler GET /api/v1/settings 基础设置 + 本机基础信息(只读) func SettingsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { data, err := logic.New(svcCtx).GetSettings(r.Context()) if err != nil { httpx.Fail(w, 2501, err.Error()) return } httpx.Ok(w, data) } } // SaveSettingsHandler PUT /api/v1/settings 保存基础设置(WMS 地址热切换;sys.settings:edit 权限) func SaveSettingsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var req logic.SettingsReq if err := httpx.ParseJSON(r, &req); err != nil { httpx.BadRequest(w, "请求体解析失败") return } if err := logic.New(svcCtx).SaveSettings(r.Context(), req, operator(r, "")); err != nil { httpx.Fail(w, 2502, err.Error()) return } httpx.OkMessage(w, "已保存并生效", nil) } } // WmsTestHandler GET /api/v1/settings/wms-test?url= 测试 WMS 连通性(url 为空测当前生效地址) func WmsTestHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { msg, err := logic.New(svcCtx).TestWms(r.Context(), r.URL.Query().Get("url")) if err != nil { httpx.Fail(w, 2503, err.Error()) return } httpx.OkMessage(w, msg, nil) } } // StartEventLogRetention 事件日志保留期清理:每小时检查一次(保留天数在「基础设置」页 // 配置 eventlog.retention.days,0=不清理),删除超过保留期的操作日志。 func StartEventLogRetention(ctx *svc.ServiceContext) { go func() { ticker := time.NewTicker(time.Hour) defer ticker.Stop() for range ticker.C { days := logic.New(ctx).CfgInt(context.Background(), logic.CfgLogRetention, 0) if days <= 0 { continue } n, err := ctx.EventLog.CleanupBefore(context.Background(), time.Now().AddDate(0, 0, -days)) if err != nil { logx.Errorf("事件日志清理失败: %v", err) continue } if n > 0 { logx.Infof("事件日志保留 %d 天:已清理 %d 条过期记录", days, n) } } }() }