|
@@ -1,11 +1,47 @@
|
|
|
package ruizide
|
|
|
|
|
|
import (
|
|
|
+ "encoding/json"
|
|
|
"eta/eta_data_analysis/models"
|
|
|
+ "eta/eta_data_analysis/utils"
|
|
|
"fmt"
|
|
|
+ "strings"
|
|
|
+ "unicode"
|
|
|
)
|
|
|
|
|
|
+
|
|
|
var (
|
|
|
+ tableNameList = []string{
|
|
|
+ "Oil_Demand_Signals_Weekly_Report",
|
|
|
+ "Oil_Supply_Analysis",
|
|
|
+ "Supply_Revision_Analysis",
|
|
|
+ "Oil_Demand_Analysis_Product_Detail",
|
|
|
+ "Oil_Demand_Analysis_Region",
|
|
|
+ "Oil_Demand_Analysis_Scenario",
|
|
|
+ "Oil_Demand_Analysis_Continent",
|
|
|
+ "Oil_Demand_Analysis_Country",
|
|
|
+ "Oil_Demand_Analysis_Product_Category",
|
|
|
+ "Oil_Demand_Analysis_Sector_Category",
|
|
|
+ "Oil_Demand_Analysis_Sector_Detail",
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_Oil_Quality_API",
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_Oil_Quality_Sulphur",
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_Capacity_Capacity",
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_Production",
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_Production_Wo_Seasonality",
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_OPEC_Policy_Reference_Production",
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_OPEC_Policy_Target_Production",
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_OPEC_Policy_Target_Cut",
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_OPEC_Policy_Actual_Cut",
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_OPEC_Policy_Compliance",
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_OPEC_Policy_Production_Subject_To_Cut",
|
|
|
+ "Oil_Market_Cube_Products_Demand_Products_Demand_Mean",
|
|
|
+ "Oil_Market_Cube_Products_Demand_Products_Demand+Sigma",
|
|
|
+ "Oil_Market_Cube_Products_Demand_Products_Demand-Sigma",
|
|
|
+ "Oil_Market_Cube_Balances_Total_Liquids_Balances",
|
|
|
+ "Oil_Market_Cube_Geography_Latitude",
|
|
|
+ "Oil_Market_Cube_Geography_Longitude",
|
|
|
+ }
|
|
|
+
|
|
|
RzdClassifyMap = make(map[string]*models.BaseFromRzdClassify)
|
|
|
classifyMap = map[string]models.RzdClassifyMapStruct{
|
|
|
"Road Index": {
|
|
@@ -62,8 +98,24 @@ var (
|
|
|
},
|
|
|
"Oil Demand Analysis": {
|
|
|
ClassifyName: "Oil Demand Analysis",
|
|
|
+ Sort: 3,
|
|
|
+ },
|
|
|
+ "Upstream Supply": {
|
|
|
+ ClassifyName: "Upstream Supply",
|
|
|
+ Sort: 1,
|
|
|
+ },
|
|
|
+ "Products Demand": {
|
|
|
+ ClassifyName: "Products Demand",
|
|
|
Sort: 2,
|
|
|
},
|
|
|
+ "Balances": {
|
|
|
+ ClassifyName: "Balances",
|
|
|
+ Sort: 3,
|
|
|
+ },
|
|
|
+ "Geography": {
|
|
|
+ ClassifyName: "Geography",
|
|
|
+ Sort: 4,
|
|
|
+ },
|
|
|
}
|
|
|
)
|
|
|
|
|
@@ -75,144 +127,35 @@ type RzdDataProcessor interface {
|
|
|
Process(tableName string) error
|
|
|
}
|
|
|
|
|
|
-func GetProcessor(tableName string, sheetName string) (ReportProcessor, error) {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- return nil, fmt.Errorf("no processor found for tableName %s and sheetName %s", tableName, sheetName)
|
|
|
-}
|
|
|
-
|
|
|
var RzdProcessorMap = map[string]RzdDataProcessor{
|
|
|
- "Oil_Demand_Signals_Weekly_Report": &OilDemandSignalsWeeklyReportProcessor{},
|
|
|
- "Supply_Revision_Analysis": &SupplyRevisionAnalysisProcessor{},
|
|
|
- "Oil_Supply_Analysis": &OilSupplyAnalysisProcessor{},
|
|
|
- "Oil_Demand_Analysis_Product_Detail": &OilDemandAnalysisProcessor{},
|
|
|
- "Oil_Demand_Analysis_Region": &OilDemandAnalysisProcessor{},
|
|
|
- "Oil_Demand_Analysis_Scenario": &OilDemandAnalysisProcessor{},
|
|
|
- "Oil_Demand_Analysis_Continent": &OilDemandAnalysisProcessor{},
|
|
|
- "Oil_Demand_Analysis_Country": &OilDemandAnalysisProcessor{},
|
|
|
- "Oil_Demand_Analysis_Product_Category": &OilDemandAnalysisProcessor{},
|
|
|
- "Oil_Demand_Analysis_Sector_Category": &OilDemandAnalysisProcessor{},
|
|
|
- "Oil_Demand_Analysis_Sector_Detail": &OilDemandAnalysisProcessor{},
|
|
|
+ "Oil_Demand_Signals_Weekly_Report": &OilDemandSignalsWeeklyReportProcessor{},
|
|
|
+ "Supply_Revision_Analysis": &SupplyRevisionAnalysisProcessor{},
|
|
|
+ "Oil_Supply_Analysis": &OilSupplyAnalysisProcessor{},
|
|
|
+ "Oil_Demand_Analysis_Product_Detail": &OilDemandAnalysisProcessor{},
|
|
|
+ "Oil_Demand_Analysis_Region": &OilDemandAnalysisProcessor{},
|
|
|
+ "Oil_Demand_Analysis_Scenario": &OilDemandAnalysisProcessor{},
|
|
|
+ "Oil_Demand_Analysis_Continent": &OilDemandAnalysisProcessor{},
|
|
|
+ "Oil_Demand_Analysis_Country": &OilDemandAnalysisProcessor{},
|
|
|
+ "Oil_Demand_Analysis_Product_Category": &OilDemandAnalysisProcessor{},
|
|
|
+ "Oil_Demand_Analysis_Sector_Category": &OilDemandAnalysisProcessor{},
|
|
|
+ "Oil_Demand_Analysis_Sector_Detail": &OilDemandAnalysisProcessor{},
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_Oil_Quality_API": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_Oil_Quality_Sulphur": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_Capacity_Capacity": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_Production": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_Production_Wo_Seasonality": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_OPEC_Policy_Reference_Production": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_OPEC_Policy_Target_Production": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_OPEC_Policy_Target_Cut": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_OPEC_Policy_Actual_Cut": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_OPEC_Policy_Compliance": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Upstream_Supply_OPEC_Policy_Production_Subject_To_Cut": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Products_Demand_Products_Demand_Mean": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Products_Demand_Products_Demand+Sigma": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Products_Demand_Products_Demand-Sigma": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Balances_Total_Liquids_Balances": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Geography_Latitude": &OilMarketCubeProcessor{},
|
|
|
+ "Oil_Market_Cube_Geography_Longitude": &OilMarketCubeProcessor{},
|
|
|
}
|
|
|
|
|
|
func GetRZDProcessor(tableName string) (RzdDataProcessor, error) {
|
|
@@ -222,3 +165,126 @@ func GetRZDProcessor(tableName string) (RzdDataProcessor, error) {
|
|
|
return processor, nil
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func getIndexId(prefix string, area string, suffix string) (indexCode string) {
|
|
|
+ prefixWords := strings.Fields(prefix)
|
|
|
+ firstLetters := ""
|
|
|
+ for _, word := range prefixWords {
|
|
|
+ if len(word) > 0 {
|
|
|
+ firstLetters += string(unicode.ToLower(rune(word[0])))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ suffixWords := strings.Fields(suffix)
|
|
|
+ SecondLetters := ""
|
|
|
+
|
|
|
+ for _, word := range suffixWords {
|
|
|
+ if len(word) > 0 {
|
|
|
+ SecondLetters += string(unicode.ToLower(rune(word[0])))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ indexCode = "rzd" + firstLetters + area + SecondLetters
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+type BatchAddClassifyType struct {
|
|
|
+ List []models.AddRzdClassify
|
|
|
+}
|
|
|
+
|
|
|
+func dealClassify(tableName string, sheetNames []string) (classifyList map[string]int, err error) {
|
|
|
+ var rzdClassifyList []models.AddRzdClassify
|
|
|
+ var parentId int
|
|
|
+ classifyList = make(map[string]int)
|
|
|
+ rzdMapStruct := classifyMap[tableName]
|
|
|
+
|
|
|
+ if classify, ok := RzdClassifyMap[rzdMapStruct.ClassifyName]; !ok {
|
|
|
+ parentClassify := models.AddRzdClassify{
|
|
|
+ ClassifyName: rzdMapStruct.ClassifyName,
|
|
|
+ Sort: rzdMapStruct.Sort,
|
|
|
+ ParentId: 0,
|
|
|
+ }
|
|
|
+ rzdClassifyList = append(rzdClassifyList, parentClassify)
|
|
|
+ resp, httpErr := httpRequestFill(BatchAddClassifyType{
|
|
|
+ List: rzdClassifyList,
|
|
|
+ }, utils.BATCH_ADD_RZD_CLASSYFY)
|
|
|
+ if httpErr != nil {
|
|
|
+ err = fmt.Errorf("添加睿咨得分类失败: %v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var rzdResp models.RequestResponse[[]models.BaseFromRzdClassify]
|
|
|
+ jsonErr := json.Unmarshal(resp, &rzdResp)
|
|
|
+ if jsonErr != nil {
|
|
|
+ err = fmt.Errorf("解析添加睿咨得分类失败: %v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if rzdResp.Ret != 200 {
|
|
|
+ err = fmt.Errorf("添加睿咨得分类失败: %v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ parentId = rzdResp.Data[0].BaseFromRzdClassifyId
|
|
|
+ classifyList[tableName] = rzdResp.Data[0].BaseFromRzdClassifyId
|
|
|
+ } else {
|
|
|
+ parentId = classify.BaseFromRzdClassifyId
|
|
|
+ classifyList[tableName] = classify.BaseFromRzdClassifyId
|
|
|
+ }
|
|
|
+ rzdClassifyList = []models.AddRzdClassify{}
|
|
|
+
|
|
|
+ for _, sheetName := range sheetNames {
|
|
|
+ if sheetName == "Content" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ rzdMapStruct = classifyMap[sheetName]
|
|
|
+ if classify, ok := RzdClassifyMap[rzdMapStruct.ClassifyName]; !ok {
|
|
|
+ rzdClassifyList = append(rzdClassifyList, models.AddRzdClassify{
|
|
|
+ ClassifyName: rzdMapStruct.ClassifyName,
|
|
|
+ Sort: rzdMapStruct.Sort,
|
|
|
+ ParentId: parentId,
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ classifyList[sheetName] = classify.BaseFromRzdClassifyId
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(rzdClassifyList) > 0 {
|
|
|
+ resp, httpErr := httpRequestFill(BatchAddClassifyType{
|
|
|
+ List: rzdClassifyList}, utils.BATCH_ADD_RZD_CLASSYFY)
|
|
|
+ if httpErr != nil {
|
|
|
+ err = fmt.Errorf("添加睿咨得分类失败: %v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var rzdResp models.RequestResponse[[]models.BaseFromRzdClassify]
|
|
|
+ jsonErr := json.Unmarshal(resp, &rzdResp)
|
|
|
+ if jsonErr != nil {
|
|
|
+ err = fmt.Errorf("解析添加睿咨得分类失败: %v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if rzdResp.Ret != 200 {
|
|
|
+ err = fmt.Errorf("添加睿咨得分类失败: %v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, classify := range rzdResp.Data {
|
|
|
+ classifyList[classify.ClassifyName] = classify.BaseFromRzdClassifyId
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func getRzdClassifyList() (list []*models.BaseFromRzdClassify, err error) {
|
|
|
+
|
|
|
+ postEdbLib, httpErr := httpRequestFill(nil, utils.GET_RZD_CLASSIFY)
|
|
|
+ if httpErr != nil {
|
|
|
+ err = fmt.Errorf("获取睿咨得分类数据失败: %v", httpErr)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var requestResponse models.RequestResponse[[]*models.BaseFromRzdClassify]
|
|
|
+ jsonErr := json.Unmarshal(postEdbLib, &requestResponse)
|
|
|
+ if jsonErr != nil {
|
|
|
+ err = fmt.Errorf("获取睿咨得分类数据失败,解析JSON数据失败: %v", jsonErr)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if requestResponse.Ret != 200 {
|
|
|
+ err = fmt.Errorf("获取睿咨得分类数据失败,请求应答异常: %v", requestResponse.ErrMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return requestResponse.Data, nil
|
|
|
+}
|