zwxi пре 10 месеци
родитељ
комит
12add84410
5 измењених фајлова са 604 додато и 0 уклоњено
  1. 65 0
      models/base_from_sci99.go
  2. 3 0
      models/db.go
  3. 140 0
      services/sci99/detail_struct.go
  4. 140 0
      services/sci99/list_struct.go
  5. 256 0
      services/sci99/sci99.go

+ 65 - 0
models/base_from_sci99.go

@@ -0,0 +1,65 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// BaseFromSci99Index 代表卓创资讯-原始指标表的结构
+type BaseFromSci99Index struct {
+	BaseFromSciIndexId int       `orm:"column(base_from_sci_index_id);pk"` // 主键,自动递增
+	IndexCode          string    // 指标编码
+	IndexName          string    // 指标名称
+	ClassifyId         int       // 分类Id
+	Unit               string    // 单位
+	Frequency          string    // 频度
+	Describe           string    // 指标描述
+	CreateTime         time.Time // 创建时间
+	ModifyTime         time.Time // 修改时间
+}
+
+// BaseFromSci99Data 代表卓创资讯-原始指标数据表的结构
+type BaseFromSci99Data struct {
+	BaseFromSciDataId  int       `orm:"column(base_from_sci_data_id);pk"` // 主键,自动递增
+	BaseFromSciIndexId int       // 指标id
+	IndexCode          string    // 指标编码
+	DataTime           string    // 数据日期
+	Value              float64   // 数据值
+	CreateTime         time.Time // 创建时间
+	ModifyTime         time.Time // 修改时间
+}
+
+// BaseFromSci99Classify 代表卓创资讯-原始指标分类表的结构
+type BaseFromSci99Classify struct {
+	BaseFromSciClassifyId int       `orm:"column(base_from_sci_classify_id);pk"` // 主键,自动递增
+	ClassifyName          string    // 分类名称
+	Sort                  int       // 排序
+	CreateTime            time.Time // 创建时间
+	ModifyTime            time.Time // 修改时间
+}
+
+// 添加数据
+func AddBaseFromSci99Index(item *BaseFromSci99Index) (lastId int64, err error) {
+	o := orm.NewOrmUsingDB("data")
+	lastId, err = o.Insert(item)
+	return
+}
+
+func AddBaseFromSci99Classify(item *BaseFromSci99Classify) (lastId int64, err error) {
+	o := orm.NewOrmUsingDB("data")
+	lastId, err = o.Insert(item)
+	return
+}
+
+func AddBaseFromSci99DataMulti(item []*BaseFromSci99Data) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.InsertMulti(1000, item)
+	return
+}
+
+func GetBaseFromSci99Index() (list []*BaseFromSci99Index, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM base_from_sci99_index `
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}

+ 3 - 0
models/db.go

@@ -66,5 +66,8 @@ func init() {
 		new(BaseFromTradeGuangzhouContract),
 
 		new(BaseFromIcpiClassify),
+		new(BaseFromSci99Index),
+		new(BaseFromSci99Data),
+		new(BaseFromSci99Classify),
 	)
 }

+ 140 - 0
services/sci99/detail_struct.go

@@ -0,0 +1,140 @@
+package sci99
+
+// DataItem 定义了数据项的结构
+type DataItem struct {
+	DataTemplate        string          `json:"DataTemplate"`
+	ProductName         string          `json:"ProductName"`
+	ProductID           int             `json:"ProductID"`
+	Region              string          `json:"Region"`
+	Area                string          `json:"Area"`
+	MarketSampleName    string          `json:"MarketSampleName"`
+	Model               string          `json:"Model"`
+	FactorySampleName   string          `json:"FactorySampleName"`
+	DataTypeName        string          `json:"DataTypeName"`
+	DataTypeID          int             `json:"DataTypeID"`
+	Order               int             `json:"Order"`
+	Unit                string          `json:"Unit"`
+	DataName            string          `json:"DataName"`
+	DIID                int             `json:"DIID"`
+	Gid                 string          `json:"Gid"`
+	PriceProduct        *string         `json:"PriceProduct"` // 使用指针以处理null值
+	PriceProductID      int             `json:"PriceProductID"`
+	PriceType           string          `json:"PriceType"`
+	PriceTypeID         int             `json:"PriceTypeID"`
+	PriceCondition      string          `json:"PriceCondition"`
+	TradeTerms          string          `json:"TradeTerms"`
+	DataStatus          int             `json:"DataStatus"`
+	Cycle               string          `json:"Cycle"`
+	DataModelName       string          `json:"DataModelName"`
+	TimeMarkID          int             `json:"TimeMarkID"`
+	Digits              int             `json:"Digits"`
+	Model_zh            string          `json:"Model_zh"`
+	Province            string          `json:"Province"`
+	Payment             string          `json:"Payment"`
+	PickModel           string          `json:"PickModel"`
+	Tax                 string          `json:"Tax"`
+	PackModel           string          `json:"PackModel"`
+	TransModel          string          `json:"TransModel"`
+	BalanceModel        string          `json:"BalanceModel"`
+	EName               string          `json:"EName"`
+	GasRate             string          `json:"GasRate"`
+	FromArea            string          `json:"FromArea"`
+	DIHistory           []DIHistoryItem `json:"DIHistory"`
+	Purpose             string          `json:"Purpose"`
+	FuturesMark         string          `json:"FuturesMark"`
+	City                string          `json:"City"`
+	MainShippers        string          `json:"MainShippers"`
+	PriceClassification string          `json:"PriceClassification"`
+	FactoryID           int             `json:"FactoryID"`
+	Stand               string          `json:"Stand"`
+	Type                string          `json:"Type"`
+	DItemDTypeID        int             `json:"DItemDTypeID"`
+	Classify            string          `json:"Classify"`
+	LockDateName        string          `json:"LockDateName"`
+	DataItemName        string          `json:"DataItemName"`
+}
+
+// DIHistoryItem 定义了DIHistory中的每个项目的结构
+type DIHistoryItem struct {
+	TransModel          map[string]string `json:"TransModel"`
+	SpecialData         map[string]string `json:"SpecialData"`
+	LockTimeMarkID      int               `json:"LockTimeMarkID"`
+	DataModelName       string            `json:"DataModelName"`
+	Factory             map[string]string `json:"Factory"`
+	Tax                 map[string]string `json:"Tax"`
+	LockTimeMarkName    map[string]string `json:"LockTimeMarkName"`
+	StartDate           string            `json:"StartDate"`
+	NumeratorUnitID     int               `json:"NumeratorUnitID"`
+	DenominatorUnitID   int               `json:"DenominatorUnitID"`
+	FromArea            map[string]string `json:"FromArea"`
+	PushTimeMarkID      int               `json:"PushTimeMarkID"`
+	TradeTerms          map[string]string `json:"TradeTerms"`
+	TimeMarkName        map[string]string `json:"TimeMarkName"`
+	NumeratorUnitName   map[string]string `json:"NumeratorUnitName"`
+	PushTimeMarkName    map[string]string `json:"PushTimeMarkName"`
+	TimeMarkID          int               `json:"TimeMarkID"`
+	PickModel           map[string]string `json:"PickModel"`
+	EndDate             string            `json:"EndDate"`
+	Market              map[string]string `json:"Market"`
+	DenominatorUnitName map[string]string `json::"DenominatorUnitName"`
+	Area                map[string]string `json:"Area"`
+	Payment             map[string]string `json:"Payment"`
+	FactorySampleName   map[string]string `json:"FactorySampleName"`
+	PackModel           map[string]string `json:"PackModel"`
+	DataModel           int               `json:"DataModel"`
+	Model               map[string]string `json:"Model"`
+	DecimalPoint        int               `json:"DecimalPoint"`
+	BalanceModel        map[string]string `json:"BalanceModel"`
+}
+
+// List 定义了Data数组中的每个项目的结构
+type List struct {
+	DIID              int     `json:"DIID"`
+	DataTypeID        int     `json:"DataTypeID"`
+	InitialValue      float64 `json:"InitialValue"`
+	EndingValue       float64 `json:"EndingValue"`
+	LDataValue        float64 `json:"LDataValue"`
+	HDataValue        float64 `json:"HDataValue"`
+	MDataValue        float64 `json:"MDataValue"`
+	Change            float64 `json:"Change"`
+	ChangeRate        float64 `json:"ChangeRate"`
+	AmplitudeValue    float64 `json:"AmplitudeValue"`
+	Remark            *string `json:"Remark"` // 使用指针以处理null值
+	DataDate          string  `json:"DataDate"`
+	RealDate          string  `json:"realDate"`
+	MarketSampleName  string  `json:"MarketSampleName"`
+	FactorySampleName *string `json:"FactorySampleName"` // 使用指针以处理null值
+	Model             string  `json:"Model"`
+	Unit              string  `json:"Unit"`
+	PriceCondition    string  `json:"PriceCondition"`
+	Area              string  `json:"Area"`
+	Province          string  `json:"Province"`
+	City              string  `json:"City"`
+	Region            string  `json:"Region"`
+	LockState         string  `json:"LockState"`
+}
+
+// DetailResponse
+type DetailResponse struct {
+	Status int    `json:"status"`
+	Msg    string `json:"msg"`
+	Data   struct {
+		DataItem   DataItem  `json:"DataItem"`
+		UserPower  UserPower `json:"UserPower"`
+		List       []List    `json:"List"`
+		Privileged bool      `json:"Privileged"`
+		Choice     string    `json:"choice"`
+		LastDate   string    `json:"LastDate"`
+		IsCollect  bool      `json:"IsCollect"`
+		CollectId  string    `json:"collectId"`
+	} `json:"data"`
+}
+
+// UserPower 定义了用户权限的结构
+type UserPower struct {
+	Start     string `json:"Start"`
+	End       string `json:"End"`
+	PowerType int    `json:"PowerType"`
+	ProductID int    `json:"ProductID"`
+	Ppid      int    `json:"Ppid"`
+}

+ 140 - 0
services/sci99/list_struct.go

@@ -0,0 +1,140 @@
+package sci99
+
+const Cookie = "route=258ceb4bb660681c2cb2768af9756936; " +
+	"ASP.NET_SessionId=nzh5zm5aluxkryc11cg3s03x; " +
+	"guid=5975a35c-af63-8629-fad0-61b5278f8e97; " +
+	"Hm_lvt_78a951b1e2ee23efdc6af2ce70d6b9be=1715844009; " +
+	"href=https%3A%2F%2Fprices.sci99.com%2Fcn%2Fproduct.aspx%3Fppid%3D12947%26ppname%3D%25u5929%25u7136%25u4E73%25u80F6%26navid%3D595; " +
+	"sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2218f8045cbaeeb4-0bc04c69e962898-1b525637-3686400-18f8045cbaf181a%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24" +
+	"latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24" +
+	"latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24" +
+	"latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2218f8045cbaeeb4-0bc04c69e962898-1b525637-3686400-18f8045cbaf181a%22%7D; " +
+	"Hm_lvt_44c27e8e603ca3b625b6b1e9c35d712d=1715844560; " +
+	"Hm_lpvt_44c27e8e603ca3b625b6b1e9c35d712d=1715844560; " +
+	"openChat30dbced0-f5cb-11eb-893a-df95eeb4af27=true; " +
+	"accessId=30dbced0-f5cb-11eb-893a-df95eeb4af27; " +
+	"head_search_notes=%E7%8E%89%E7%B1%B3; " +
+	"Hm_lpvt_78a951b1e2ee23efdc6af2ce70d6b9be=1716609966; " +
+	"AUTH_COOKIE=7e198da57104c68c|2024-6-1 12:06:04; " +
+	"STATReferrerIndexId=2; " +
+	"qimo_seosource_30dbced0-f5cb-11eb-893a-df95eeb4af27=%E7%AB%99%E5%86%85; " +
+	"qimo_seokeywords_30dbced0-f5cb-11eb-893a-df95eeb4af27=; pageViewNum=20"
+
+// Header 代表表头信息
+type Header struct {
+	Code        string  `json:"Code"`
+	DisplayName string  `json:"DisplayName"`
+	OrderNO     float64 `json:"OrderNO"`
+	DataType    int     `json:"DataType"`
+	DisplayType int     `json:"DisplayType"`
+}
+
+// Item 代表数据项
+type Item struct {
+	Area                string `json:"Area"`
+	DataModelName       string `json:"DataModelName"`
+	DataTypeID          int    `json:"DataTypeID"`
+	Digits              int    `json:"Digits"`
+	DIID                int    `json:"DIID"`
+	FactorySampleName   string `json:"FactorySampleName"`
+	MarketSampleName    string `json:"MarketSampleName"`
+	Model               string `json:"Model"`
+	TradeTerms          string `json:"TradeTerms"`
+	PriceType           string `json:"PriceType"`
+	PriceTypeID         int    `json:"PriceTypeID"`
+	ProductName         string `json:"ProductName"`
+	ProductID           int    `json:"ProductID"`
+	Province            string `json:"Province"`
+	Region              string `json:"Region"`
+	TimeMarkID          int    `json:"TimeMarkID"`
+	Unit                string `json:"Unit"`
+	Order               int    `json:"Order"`
+	DataName            string `json:"DataName"`
+	DataItemName        string `json:"DataItemName"`
+	DataTypeName        string `json:"DataTypeName"`
+	IsWarn              bool   `json:"IsWarn"`
+	EName               string `json:"EName"`
+	GasRate             string `json:"GasRate"`
+	FromArea            string `json:"FromArea"`
+	DataStatus          int    `json:"DataStatus"`
+	Purpose             string `json:"Purpose"`
+	FuturesMark         string `json:"FuturesMark"`
+	MainShippers        string `json:"MainShippers"`
+	PriceClassification string `json:"PriceClassification"`
+	Stand               string `json:"Stand"`
+	Type                string `json:"Type"`
+	DItemDTypeID        int    `json:"DItemDTypeID"`
+	Classification      string `json:"Classification"`
+	LockDateName        string `json:"LockDateName"`
+	PriceCondition      string `json:"PriceCondition"`
+	// 动态日期字段,需要特殊处理
+	//DateFields        map[string]string `json:"date_fields,inline"`
+	Change      string `json:"Change"`
+	ChangeRate  string `json:"ChangeRate"`
+	Remark      string `json:"Remark"`
+	LockState   string `json:"LockState"`
+	PowerStatus int    `json:"PowerStatus"`
+}
+
+// Data 代表数据部分
+type FirstData struct {
+	Headers    []Header   `json:"Headers"`
+	SecondData SecondData `json:"data"`
+}
+
+type SecondData struct {
+	LockTimeRange string  `json:"LockTimeRange"`
+	PageNO        int     `json:"PageNO"`
+	PageSize      int     `json:"PageSize"`
+	TotalItems    int     `json:"TotalItems"`
+	TotalPages    int     `json:"TotalPages"`
+	Items         []Item  `json:"Items"`
+	DiidDtypeids  *string `json:"DiidDtypeids"` // 使用指针以处理null值
+	TableHeader   *string `json:"TableHeader"`  // 使用指针以处理null值
+}
+
+// ListResponse 代表整个API响应
+type ListResponse struct {
+	Status    int       `json:"status"`
+	Msg       string    `json:"msg"`
+	FirstData FirstData `json:"data"`
+}
+
+// 创建请求体的数据结构
+type ListRequestBody struct {
+	Region           string `json:"region"`
+	Market           string `json:"market"`
+	Factory          string `json:"factory"`
+	Model            string `json:"model"`
+	Pname            string `json:"pname"`
+	CycleType        string `json:"cycletype"`
+	PriceCycle       string `json:"pricecycle"`
+	SpecialPriceType string `json:"specialpricetype"`
+	Groupname        string `json:"groupname"`
+	Ppname           string `json:"ppname"`
+	Province         string `json:"province"`
+	PriceTypeID      int    `json:"pricetypeid"`
+	PPIDs            string `json:"ppids"`
+	Navid            string `json:"navid"`
+	SiteType         int    `json:"sitetype"`
+	PageNo           int    `json:"pageno"`
+	PageSize         string `json:"pagesize"`
+	Purpose          string `json:"purpose"`
+	Stand            string `json:"stand"`
+	Type             string `json:"type"`
+	FromArea         string `json:"fromarea"`
+	Classification   string `json:"classification"`
+}
+
+// DetailRequest
+type DetailRequest struct {
+	Start        string `json:"start"`
+	End          string `json:"end"`
+	APIStart     string `json:"apiStart"`
+	APIEnd       string `json:"apiEnd"`
+	DIIDD        string `json:"diid"`
+	DataTypeID   string `json:"datatypeid"`
+	PPID         string `json:"ppid"`
+	CycleType    string `json:"cycletype"`
+	SelectConfig int    `json:"selectconfig"`
+}

+ 256 - 0
services/sci99/sci99.go

@@ -0,0 +1,256 @@
+package sci99
+
+import (
+	"bytes"
+	"encoding/json"
+	"eta/eta_crawler/models"
+	"eta/eta_crawler/utils"
+	"fmt"
+	"github.com/mozillazg/go-pinyin"
+	"io/ioutil"
+	"net/http"
+	"strconv"
+	"strings"
+	"time"
+)
+
+var IndexCodeMap = make(map[string]string)
+var IndexMap = make(map[string]*models.BaseFromSci99Index)
+
+func Scii99() {
+	// 定义请求的URL
+	listUrl := "https://prices.sci99.com/api/zh-cn/product/datavalue"
+	detailUrl := "https://prices.sci99.com/api/zh-cn/dataitem/datavalue"
+
+	// 创建请求体实例并填充数据
+	requestData := ListRequestBody{
+		Ppname:      "天然橡胶原料",
+		PriceTypeID: 34320,
+		PPIDs:       "13676",
+		Navid:       "593",
+		SiteType:    1,
+		PageNo:      1,
+		PageSize:    "1000",
+	}
+
+	// 将请求体序列化为JSON
+	jsonData, err := json.Marshal(requestData)
+	if err != nil {
+		fmt.Println("Error marshalling JSON:", err)
+		return
+	}
+
+	// 创建一个HTTP POST请求
+	req, err := http.NewRequest("POST", listUrl, bytes.NewBuffer(jsonData))
+	if err != nil {
+		fmt.Println("Error creating request:", err)
+		return
+	}
+
+	// 设置请求头信息
+	req.Header.Set("Content-Type", "application/json")
+	req.Header.Set("Accept", "application/json")
+	req.Header.Set("Cookie", Cookie)
+
+	// 发送请求
+	client := &http.Client{}
+	resp, err := client.Do(req)
+	if err != nil {
+		fmt.Println("Error sending request:", err)
+		utils.FileLog.Info("Error sending request:", err)
+		return
+	}
+	defer resp.Body.Close()
+
+	// 检查响应状态码
+	if resp.StatusCode != http.StatusOK {
+		fmt.Printf("Server returned non-200 status: %d\n", resp.StatusCode)
+		utils.FileLog.Info("Server returned non-200 status: %d", resp.StatusCode)
+		return
+	}
+	// 打印响应体
+	body, _ := ioutil.ReadAll(resp.Body)
+	fmt.Println("Response body:", string(body))
+
+	var listResponse ListResponse
+
+	err = json.Unmarshal(body, &listResponse)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info("Error unmarshalling JSON:", err)
+		return
+	}
+	allCode, err := models.GetBaseFromSci99Index()
+	if err != nil {
+		fmt.Println("select Code err:", err)
+	}
+	for _, item := range allCode {
+		IndexCodeMap[item.IndexName] = item.IndexCode
+		IndexMap[item.IndexName] = item
+	}
+
+	for _, v := range listResponse.FirstData.SecondData.Items {
+		// 组成指标
+		indexName := v.ProductName + v.PriceType + v.MarketSampleName + v.Model
+		indexCodeStr := "卓创资讯" + indexName
+		indexCode, needAdd := Sci99IndexCodeGenerator(indexName, indexCodeStr, v.MarketSampleName)
+		if needAdd {
+			index := models.BaseFromSci99Index{
+				IndexCode:  indexCode,
+				IndexName:  indexName,
+				ClassifyId: 0,
+				Unit:       v.Unit,
+				Frequency:  "day",
+				Describe:   v.DataItemName,
+				CreateTime: time.Now(),
+				ModifyTime: time.Now(),
+			}
+			id, err := models.AddBaseFromSci99Index(&index)
+			if err != nil {
+				fmt.Println("Error inserting into database:", err)
+				utils.FileLog.Info("Error inserting into database:", err)
+				return
+			}
+			index.BaseFromSciIndexId = int(id)
+			IndexMap[indexName] = &index
+		}
+
+		ppid := strconv.Itoa(v.ProductID)
+		dataTypeID := strconv.Itoa(v.DataTypeID)
+		diidd := strconv.Itoa(v.DIID)
+		deailReq := DetailRequest{
+			PPID:       ppid,
+			DataTypeID: dataTypeID,
+			DIIDD:      diidd,
+			APIStart:   "2021/01/01",
+			APIEnd:     "2024/09/11",
+			CycleType:  "day",
+		}
+
+		// 将请求体序列化为JSON
+		reqJson, e := json.Marshal(deailReq)
+		if e != nil {
+			err = e
+			fmt.Println("Error marshalling JSON:", err)
+			return
+		}
+
+		// 创建一个HTTP POST请求
+		req, err = http.NewRequest("POST", detailUrl, bytes.NewBuffer(reqJson))
+		if err != nil {
+			fmt.Println("Error creating request:", err)
+			return
+		}
+
+		// 设置请求头信息
+		req.Header.Set("Content-Type", "application/json")
+		req.Header.Set("Accept", "application/json")
+		req.Header.Set("Cookie", Cookie)
+
+		// 发送请求
+		resp, err = client.Do(req)
+		if err != nil {
+			fmt.Println("Error sending request:", err)
+			utils.FileLog.Info("Error sending request:", err)
+			return
+		}
+		defer resp.Body.Close()
+		// 检查响应状态码
+		if resp.StatusCode != http.StatusOK {
+			fmt.Printf("Server returned non-200 status: %d\n", resp.StatusCode)
+			utils.FileLog.Info("Server returned non-200 status: %d", resp.StatusCode)
+			return
+		}
+		// 打印响应体
+		body, _ = ioutil.ReadAll(resp.Body)
+		fmt.Println("Response Detail body:", string(body))
+
+		var detailResponse DetailResponse
+
+		err = json.Unmarshal(body, &detailResponse)
+		if err != nil {
+			fmt.Println(err)
+			utils.FileLog.Info("Error unmarshalling JSON:", err)
+			return
+		}
+
+		// 新增data数据
+		addList := make([]*models.BaseFromSci99Data, 0)
+		for _, v := range detailResponse.Data.List {
+			dataItem := models.BaseFromSci99Data{
+				BaseFromSciIndexId: IndexMap[indexName].BaseFromSciIndexId,
+				IndexCode:          indexCode,
+				DataTime:           v.RealDate,
+				Value:              v.MDataValue,
+				CreateTime:         time.Now(),
+				ModifyTime:         time.Now(),
+			}
+			addList = append(addList, &dataItem)
+		}
+		if len(addList) > 0 {
+			err = models.AddBaseFromSci99DataMulti(addList)
+			if err != nil {
+				fmt.Println("Error inserting into database:", err)
+				utils.FileLog.Info("Error inserting into database:", err)
+				return
+			}
+		}
+	}
+}
+
+func Sci99IndexCodeGenerator(indexName, indexCodeStr, marketSampleName string) (indexCode string, needAdd bool) {
+	strResult := ""
+	indexCode, _ = IndexCodeMap[indexName]
+	if indexCode == "" {
+		//首字母
+		a := pinyin.NewArgs()
+		a.Style = pinyin.FirstLetter
+		rows := pinyin.LazyPinyin(indexCodeStr, a)
+		for i := 0; i < len(rows); i++ {
+			strResult += rows[i]
+		}
+		strResult += ProvinceMap[marketSampleName]
+
+		needAdd = true
+		indexCode = strings.Replace(strResult, " ", "", -1)
+		IndexCodeMap[indexName] = indexCode
+	}
+	return
+}
+
+var ProvinceMap = map[string]string{
+	"上海":  "shanghai",
+	"云南":  "yunnan",
+	"内蒙古": "innermongolia",
+	"北京":  "beijing",
+	"台湾":  "taiwan",
+	"吉林":  "jilin",
+	"四川":  "sichuan",
+	"天津":  "tianjin",
+	"宁夏":  "ningxia",
+	"安徽":  "anhui",
+	"山东":  "shandong",
+	"山西":  "shanxi",
+	"广东":  "guangdong",
+	"广西":  "guangxi",
+	"新疆":  "xinjiang",
+	"江苏":  "jiangsu",
+	"江西":  "jiangxi",
+	"河北":  "hebei",
+	"河南":  "henan",
+	"浙江":  "zhejiang",
+	"海南":  "hainan",
+	"湖北":  "hubei",
+	"湖南":  "hunan",
+	"澳门":  "macao",
+	"甘肃":  "gansu",
+	"福建":  "fujian",
+	"西藏":  "tibet",
+	"贵州":  "guizhou",
+	"辽宁":  "liaoning",
+	"重庆":  "chongqing",
+	"陕西":  "shaanxi",
+	"青海":  "qinhai",
+	"香港":  "hongkong",
+	"黑龙江": "heilongjiang",
+}