Files
bj_power/bj_power_mes/internal/handler/settings.go
T
SunYF f274da044c feat: 重构BOM架构,新增基础设置与虚拟工位管理功能
本次重构删除原有BOM物料清单表,改用工单工艺组合×工艺物料清单作为唯一用料来源;新增系统基础设置表支持WMS地址、日志保留天数等配置,新增虚拟工位作业管理后台接口与前端页签控制功能,同时优化工位号校验逻辑、事件日志自动清理与工单用料查询能力。
2026-09-23 11:41:28 +08:00

77 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 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.days0=不清理),删除超过保留期的操作日志。
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)
}
}
}()
}