175 lines
4.4 KiB
Go
175 lines
4.4 KiB
Go
|
|
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
|
|||
|
|
}
|