goProject/trunk/framework/managecenterMgr/area.go
皮蛋13361098506 1b77f62820 初始化项目
2025-01-06 16:01:02 +08:00

175 lines
4.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}