package handler import ( "encoding/json" "log" "net/http" "kfz-goods-pricing/internal/repository" "kfz-goods-pricing/internal/service" ) // KfzHandler Kfz处理器 type KfzHandler struct { tokenRepo *repository.TokenRepository } // NewKfzHandler 创建Kfz处理器实例 func NewKfzHandler(tokenRepo *repository.TokenRepository) *KfzHandler { return &KfzHandler{ tokenRepo: tokenRepo, } } // KfzLogin 登录孔网并返回用户信息 func (h *KfzHandler) KfzLogin(w http.ResponseWriter, r *http.Request) { clientIP := r.RemoteAddr if forwarded := r.Header.Get("X-Forwarded-For"); forwarded != "" { clientIP = forwarded } log.Printf("[KfzLogin] 收到登录请求, 来源IP: %s", clientIP) r.ParseMultipartForm(32 << 20) username := r.PostForm.Get("username") password := r.PostForm.Get("password") if username == "" || password == "" { log.Printf("[KfzLogin] username或password为空, 来源IP: %s", clientIP) w.Header().Set("Content-Type", "application/json") w.Write([]byte(`{"code":500,"message":"username和password不能为空"}`)) return } log.Printf("[KfzLogin] 开始登录孔网, username=%s, 来源IP: %s", username, clientIP) token, err := service.OutKfzLogin(username, password) if err != nil { log.Printf("[KfzLogin] 孔网登录失败: username=%s, 错误=%v, 来源IP: %s", username, err, clientIP) w.Header().Set("Content-Type", "application/json") w.Write([]byte(`{"code":500,"message":"` + err.Error() + `"}`)) return } log.Printf("[KfzLogin] 孔网登录成功: username=%s, token=%.10s..., 来源IP: %s", username, token, clientIP) userInfo, err := service.OutKfzGetUserInfo(token) if err != nil { log.Printf("[KfzLogin] 获取用户信息失败: username=%s, 错误=%v, 来源IP: %s", username, err, clientIP) w.Header().Set("Content-Type", "application/json") w.Write([]byte(`{"code":500,"message":"` + err.Error() + `"}`)) return } userInfo.Token = token // 保存账号密码和token到数据库 if err := h.tokenRepo.UpsertByLoginName(username, userInfo.Nickname, password, token); err != nil { log.Printf("[KfzLogin] 保存Token记录失败: %v, 来源IP: %s", err, clientIP) } else { log.Printf("[KfzLogin] 账号密码已保存到数据库: login_name=%s, nickname=%s", username, userInfo.Nickname) } log.Printf("[KfzLogin] 登录成功: username=%s, userId=%d, nickname=%s, 来源IP: %s", username, userInfo.UserID, userInfo.Nickname, clientIP) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(map[string]interface{}{ "code": 200, "message": "success", "data": userInfo, }) }