package main import ( "bytes" "encoding/json" "fmt" "io/ioutil" qu "jygit.jydev.jianyu360.cn/data_processing/common_utils" "net/http" "reflect" "time" ) const HREF = "http://127.0.0.1:8091/%s" type UserInfo struct { ID string `json:"_id"` Username string `json:"s_name"` Fullname string `json:"s_fullname"` Email string `json:"s_email"` Auth int `json:"i_auth"` Scope int `json:"i_scope"` Identity int `json:"i_identity"` Ids []string `json:"ids"` } type Result struct { Msg string `json:"msg"` Err int `json:"err"` Data Data `json:"data"` } type Data struct { List []map[string]interface{} `json:"list"` Total int `json:"total"` } var ( //User map[string]interface{} //user对象 User *UserInfo //user对象 ) // ServerActionUserLogin 登录 func (a *App) ServerActionUserLogin(param map[string]interface{}) map[string]interface{} { qu.Debug("param---", param) User = &UserInfo{} //User = map[string]interface{}{} getResult(User, param, "login") qu.Debug("user:", *User) if User.ID == "" { return map[string]interface{}{ "msg": "登录失败", "err": 1, "data": nil, } } return map[string]interface{}{ "msg": "", "err": 0, "data": User, } } // ServerActionCheckLogin 检查是否登录 func (a *App) ServerActionCheckLogin() map[string]interface{} { if User != nil && User.ID != "" { return map[string]interface{}{ "msg": "", "err": 0, "data": User, } } return map[string]interface{}{ "msg": "", "err": 1, "data": nil, } } // ServerActionUserLogout 退出登录 func (a *App) ServerActionUserLogout() map[string]interface{} { User = &UserInfo{} return map[string]interface{}{ "msg": "退出成功", "err": 0, "data": nil, } } // ServerActionCodeList 获取爬虫列表 func (a *App) ServerActionCodeList(param map[string]interface{}) Result { qu.Debug("param---", param) data := &Result{} if User != nil { formatUser(param) qu.Debug("param---", param) getResult(data, param, "getcodes") } else { data.Msg = "用户登录异常,请重新登录!" data.Err = 1 qu.Debug(data.Msg) } return *data //return map[string]interface{}{ // "msg": msg, // "err": err, // "data": data, //} } // ServerActionGetModifyUsers 获取爬虫开发人员列表 func (a *App) ServerActionGetModifyUsers() Result { data := &Result{} if User != nil && User.Auth > 1 { //禁止开发查询 getResult(data, nil, "getmodifyusers") if len(User.Ids) > 0 && User.Identity == 0 { //外包审核员或管理员只能查看外包开发人员信息 resultUsers := []map[string]interface{}{} for _, user := range data.Data.List { userid := qu.ObjToString(user["_id"]) for _, id := range User.Ids { if userid == id { resultUsers = append(resultUsers, user) break } } } data.Data.List = resultUsers data.Data.Total = len(resultUsers) } } else { data.Msg = "查询开发列表失败" data.Err = 1 } return *data } // ServerActionClaimCodes 爬虫认领 func (a *App) ServerActionClaimCodes() Result { data := &Result{} if User.Auth == 1 { param := map[string]interface{}{} formatUser(param) getResult(data, param, "claimcode") } else { data.Msg = "认领失败!" data.Err = 1 } return *data } // ServerActionUpdateCode 爬虫更新 func (a *App) ServerActionUpdateCode(param []map[string]interface{}) map[string]interface{} { qu.Debug("param---", param) ////[ //// [ //// { //// "query":{}, //// "set":{} //// }, //// ], //// [ //// { //// "query":{}, //// "set":{} //// }, //// ], ////] //data := &Result{} //var msg string //var err int //arr := [][]map[string]interface{}{} //for _, tmp := range param { // query, _ := tmp["query"].(map[string]interface{}) // set, _ := tmp["set"].(map[string]interface{}) // if query == nil || set == nil { // msg = "更新条件错误!" // err = 1 // break // } // update := []map[string]interface{}{ // query, // set, // } // arr = append(arr, update) //} // //getResult(data, arr, "updatecode") // //return map[string]interface{}{ // "msg": "", // "err": 0, // "data": data, //} return map[string]interface{}{} } // 格式化User对象 func formatUser(tmp map[string]interface{}) { v := reflect.ValueOf(User) if v.Kind() == reflect.Ptr { v = v.Elem() } t := v.Type() for i := 0; i < v.NumField(); i++ { field := t.Field(i).Tag.Get("json") value := v.Field(i).Interface() tmp[field] = value } } // 获取接口结果 func getResult(result, param interface{}, route string) { jsonData, err := json.Marshal(param) if err != nil { qu.Debug("Error marshaling request:", err) return } req, err := http.NewRequest("POST", fmt.Sprintf(HREF, route), bytes.NewBuffer(jsonData)) if err != nil { qu.Debug("Error creating request:", err) return } // 设置请求头 req.Header.Set("Content-Type", "application/json") // 发送请求 client := &http.Client{ Timeout: 10 * time.Second, } resp, err := client.Do(req) if err != nil { qu.Debug("Error sending request:", err) return } defer resp.Body.Close() // 读取响应体 body, err := ioutil.ReadAll(resp.Body) if err != nil { qu.Debug("Error reading response body:", err) return } if err := json.Unmarshal(body, &result); err != nil { qu.Debug("Error unmarshaling response:", err) return } qu.Debug(result) }