package managecenterMgr import ( "encoding/json" "errors" "fmt" "Framework/managecenterModel" . "Framework/managecenterModel" "goutil/logUtil" "goutil/webUtil" ) var ( areaMap = make(map[int32]*Area, 128) areaHash string ) // 重新加载大区数据 func reloadArea(isInit bool) error { //logUtil.DebugLog("开始刷新大区列表") // 连接服务器,以获取数据 url := getManageCenterUrl("/API/AreaList.ashx") // 定义请求参数 postDict := make(map[string]string) postDict["HashValue"] = areaHash //请求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(areaMap) == 0 { areaHash = "" } return nil } else { msg := fmt.Sprintf("获取大区列表出错,返回状态:%d,信息为:%s", returnObj.Code, returnObj.Message) logUtil.ErrorLog(msg) return errors.New(msg) } } // 解析Data tmpAreaList := make([]*Area, 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), &tmpAreaList); err != nil { logUtil.ErrorLog(fmt.Sprintf("获取大区列表出错,反序列化数据出错,错误信息为:%s", err)) return err } } //logUtil.DebugLog(fmt.Sprintf("刷新大区信息结束,大区数量:%d", len(tmpAreaList))) tmpAreaMap := make(map[int32]*Area) for _, item := range tmpAreaList { tmpAreaMap[item.AreaId] = item } // 赋值给最终的areaMap areaMap = tmpAreaMap areaHash = returnObj.HashValue // 通知变更 mcDataChangeCallBack(managecenterModel.AreaData, isInit) return nil } // 根据区服ID获取所属大区ID func GetAreaIdByServerId(serverId int32) (areaId int32, exist bool) { for _, item := range areaMap { if item.CheckServerIdIsInRange(serverId) { areaId = item.AreaId exist = true return } } return } // 根据服务器组id获取大区对象数据 func GetAreaDBByGroupId(groupId int32) (areaDB *Area, exist bool) { //如果没有大区数据,返回空 exist = false if areaMap == nil || len(areaMap) < 1 { return } for _, item := range areaMap { if item.CheckServerIdIsInRange(groupId) { areaDB = item exist = true break } } return } // 获取所有大区信息 func GetAllAreaDB() []*Area { tempList := make([]*Area, 8) for _, item := range areaMap { tempList = append(tempList, item) } return tempList } // 根据大区ID获取大区信息 func GetAreaDBbyAreaID(areaId int32) (areaDB *Area, exist bool) { //如果没有大区数据,返回空 exist = false if areaMap == nil || len(areaMap) < 1 { return } if item, ok := areaMap[areaId]; ok { areaDB = item exist = true } return } // 根据服务器ID获取大区页签信息 func GetAreaLabelDBByGroupId(groupId int32) (areaLabelDB *AreaLabel, exist bool) { areaDB, exist := GetAreaDBByGroupId(groupId) if !exist { return nil, false } if areaDB.AreaLabelList == nil || len(areaDB.AreaLabelList) < 1 { return nil, false } //校服务器ID是否在大区页签服务器范围内 for _, item := range areaDB.AreaLabelList { if exist := item.CheckServerIdIsInLabelRange(groupId); exist { return item, true } } //如果没找到,则返回空 return nil, false }