package managecenterMgr import ( "encoding/json" "errors" "fmt" "Framework/managecenterModel" . "Framework/managecenterModel" "goutil/logUtil" "goutil/webUtil" ) var ( partnerMap = make(map[int32]*Partner, 128) partnerHash string ) // 重新加载合作商 func reloadPartner(isInit bool) error { //logUtil.DebugLog("开始刷新合作商列表") // 连接服务器,以获取数据 url := getManageCenterUrl("/API/PartnerList.ashx") // 定义请求参数 postDict := make(map[string]string) postDict["HashValue"] = partnerHash //请求url,请求头 header := webUtil.GetFormHeader() transport := webUtil.NewTransport() transport.DisableKeepAlives = true transport = webUtil.GetTimeoutTransport(transport, 30) statusCode, returnBytes, err := webUtil.PostMapData(url, postDict, header, transport) //statusCode, returnBytes, err := webUtil.PostMapData(url, postDict, header, nil) if err != nil { logUtil.ErrorLog(fmt.Sprintf("获取合作商列表出错,url:%s,错误信息为:%s", url, err)) return err } if statusCode != 200 { logUtil.ErrorLog(fmt.Sprintf("获取合作商列表出错,url:%s,错误码为:%d", url, statusCode)) return err } // 解析返回值 returnObj := new(ReturnObject) if err = json.Unmarshal(returnBytes, &returnObj); err != nil { logUtil.ErrorLog(fmt.Sprintf("获取合作商列表出错,反序列化返回值出错,错误信息为:%s, str:%s", err, string(returnBytes))) return err } // 判断返回状态是否为成功 if returnObj.Code != 0 { // 数据没有变化,所以没有获取到新的数据,不能算错误。 if returnObj.Code == 47 || returnObj.Message == "DataNotChanged" { //如果本地集合为空,且数据又没变化时,重新初始化一下本地hash值 if len(partnerMap) == 0 { partnerHash = "" } return nil } else { msg := fmt.Sprintf("获取合作商列表出错,返回状态:%d,信息为:%s", returnObj.Code, returnObj.Message) logUtil.ErrorLog(msg) return errors.New(msg) } } // 解析Data tmpPartnerList := make([]*Partner, 0, 128) if data, ok := returnObj.Data.(string); !ok { msg := "获取合作商列表出错,返回的数据不是string类型" logUtil.ErrorLog(msg) return errors.New(msg) } else { if err = json.Unmarshal([]byte(data), &tmpPartnerList); err != nil { logUtil.ErrorLog(fmt.Sprintf("获取合作商列表出错,反序列化数据出错,错误信息为:%s", err)) return err } } //logUtil.DebugLog(fmt.Sprintf("刷新合作商信息结束,合作商数量:%d", len(tmpPartnerList))) tmpPartnerMap := make(map[int32]*Partner) for _, item := range tmpPartnerList { tmpPartnerMap[item.Id] = item } // 赋值给最终的partnerMap partnerMap = tmpPartnerMap partnerHash = returnObj.HashValue //通知变更 mcDataChangeCallBack(managecenterModel.PartnerData, isInit) return nil } // 获取合作商对象列表 // 返回值: // 合作商对象列表 func GetPartnerList() (partnerList []*Partner) { for _, item := range partnerMap { partnerList = append(partnerList, item) } return } // 根据合作商Id获取合作商对象 // id:合作商Id // 返回值: // 合作商对象 // 是否存在 func GetPartner(id int32) (partnerObj *Partner, exist bool) { partnerObj, exist = partnerMap[id] return } // 根据合作商别名获取合作商对象 // alias:合作商别名 // 返回值: // 合作商对象 // 是否存在 func GetPartnerByAlias(alias string) (partnerObj *Partner, exist bool) { for _, item := range partnerMap { if item.Alias == alias { partnerObj = item exist = true return } } return } // 获取合作商的其它配置信息 // id:合作商Id // configKey:其它配置Key // 返回值 // 配置内容 // 是否存在 // 错误对象 func GetOtherConfigInfo(id int32, configKey string) (configValue string, exist bool, err error) { partnerObj, exist := GetPartner(id) if !exist { return } var otherConfigMap map[string]string otherConfigMap, err = partnerObj.ResolveOtherConfig() if err != nil { return } configValue, exist = otherConfigMap[configKey] return }