daShangDao_psiWebApp/verifyTool/internal/handler/config_handler.go
97694731 44ba8a631c
Some checks failed
CI / build (20.x) (push) Waiting to run
CI / lint (push) Waiting to run
CI / test (push) Waiting to run
CI / deploy-preview (push) Blocked by required conditions
CI / security (push) Waiting to run
CI / build (18.x) (push) Has been cancelled
1
2026-06-15 18:09:39 +08:00

98 lines
2.4 KiB
Go

package handler
import (
"encoding/json"
"fmt"
"log"
"net/http"
"strconv"
"sync"
"kfz-goods-pricing/internal/config"
)
// ConfigHandler 配置处理器
type ConfigHandler struct {
configPath string
mu sync.Mutex
}
// NewConfigHandler 创建配置处理器实例
func NewConfigHandler(configPath string) *ConfigHandler {
return &ConfigHandler{
configPath: configPath,
}
}
// GetConfigPrice 获取配置(价格相关)
func (h *ConfigHandler) GetConfigPrice(w http.ResponseWriter, r *http.Request) {
h.mu.Lock()
defer h.mu.Unlock()
cfg, err := config.Load(h.configPath)
if err != nil {
log.Printf("[GetConfigPrice] 读取配置失败: %s", err.Error())
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(fmt.Sprintf(`{"code":500,"message":"读取配置失败: %s"}`, err.Error())))
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]interface{}{
"code": 200,
"message": "success",
"data": cfg,
})
}
// SetConfigPrice 修改价格配置
func (h *ConfigHandler) SetConfigPrice(w http.ResponseWriter, r *http.Request) {
r.ParseMultipartForm(32 << 20)
newPrice := r.PostForm.Get("new_price")
if newPrice == "" {
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"code":400,"message":"new_price不能为空"}`))
return
}
val := 0.0
val, _ = strconv.ParseFloat(newPrice, 64)
if val < 0 {
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"code":400,"message":"new_price必须大于0"}`))
return
}
h.mu.Lock()
defer h.mu.Unlock()
cfg, err := config.Load(h.configPath)
if err != nil {
log.Printf("[SetConfigPrice] 读取配置失败: %s", err.Error())
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(fmt.Sprintf(`{"code":500,"message":"读取配置失败: %s"}`, err.Error())))
return
}
cfg.NewPrice = val
if err := config.Save(h.configPath, cfg); err != nil {
log.Printf("[SetConfigPrice] 保存配置失败: %s", err.Error())
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(fmt.Sprintf(`{"code":500,"message":"保存配置失败: %s"}`, err.Error())))
return
}
// 同步全局配置
config.SetGlobal(cfg)
log.Printf("[SetConfigPrice] 配置更新成功: new_price=%.2f", cfg.NewPrice)
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]interface{}{
"code": 200,
"message": "success",
"data": cfg,
})
}