159 lines
4.1 KiB
Plaintext
159 lines
4.1 KiB
Plaintext
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
|
||
}
|