|
@@ -0,0 +1,1378 @@
|
|
|
+// Package fenwei
|
|
|
+// @Author gmy 2024/8/20 14:47:00
|
|
|
+package fenwei
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "eta/eta_data_analysis/models"
|
|
|
+ "eta/eta_data_analysis/utils"
|
|
|
+ "fmt"
|
|
|
+ "strings"
|
|
|
+)
|
|
|
+
|
|
|
+// ThermalCoalSupplyProcessor 动力煤供应量
|
|
|
+type ThermalCoalSupplyProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *ThermalCoalSupplyProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: nil,
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "province": {"20", "16", "21", "6", "19", "23", "8", "1", "7", "17", "9", "15", "11", "22", "24", "4", "25", "12", "14", "13", "18", "3", "10", "5", "2", "37"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW4002D",
|
|
|
+ QuotaName: "monthly_value,monthly_accumulation",
|
|
|
+ SplitTypeKey: "province",
|
|
|
+ IsTotal: 0,
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *ThermalCoalSupplyProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseData := fillFenWeiNetResponseData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "动力煤供应量"
|
|
|
+ for _, data := range responseData {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = "日度"
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + data.ProvinceName + "/汾渭",
|
|
|
+ Unit: data.MonthlyValueChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.MonthlyValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// CokingCleanCoalSupplyProcessor 炼焦精煤供应量
|
|
|
+type CokingCleanCoalSupplyProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokingCleanCoalSupplyProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: nil,
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "province": {"20", "16", "21", "6", "19", "23", "8", "1", "7", "17", "9", "15", "11", "22", "24", "4", "25", "12", "14", "13", "18", "3", "10", "5", "2", "37"},
|
|
|
+ "coal_type": {"13", "10", "9", "8", "7", "5", "3"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW4001D",
|
|
|
+ QuotaName: "monthly_value,monthly_accumulation",
|
|
|
+ SplitTypeKey: "coal_type",
|
|
|
+ IsTotal: 0,
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokingCleanCoalSupplyProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseData := fillFenWeiNetResponseData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "炼焦精煤供应量"
|
|
|
+ for _, data := range responseData {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = data.MonthlyValueChnName
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + data.CoalTypeName + "/汾渭",
|
|
|
+ Unit: data.MonthlyValueChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.MonthlyValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// RawCoalProvinceProductionProcessor 原煤分省分煤种产量
|
|
|
+type RawCoalProvinceProductionProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *RawCoalProvinceProductionProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: nil,
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "province": {"20", "16", "21", "6", "19", "23", "8", "1", "7", "17", "9", "15", "11", "22", "24", "4", "25", "12", "14", "13", "18", "3", "10", "5", "2", "37"},
|
|
|
+ "coal_type": {"14", "6", "40", "21"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW3050D",
|
|
|
+ QuotaName: "monthly_value,monthly_accumulation",
|
|
|
+ SplitTypeKey: "coal_type",
|
|
|
+ IsTotal: 0,
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *RawCoalProvinceProductionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseData := fillFenWeiNetResponseData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "原煤分省分煤种产量"
|
|
|
+ for _, data := range responseData {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = data.MonthlyValueChnName
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + data.CoalTypeName + "/汾渭",
|
|
|
+ Unit: data.MonthlyValueChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.MonthlyValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// StateOwnedKeyCoalMineRawCoalProductionProcessor 国有重点煤矿原煤产量
|
|
|
+type StateOwnedKeyCoalMineRawCoalProductionProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *StateOwnedKeyCoalMineRawCoalProductionProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: nil,
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "province": {"20", "16", "21", "6", "19", "23", "8", "1", "7", "17", "9", "15", "11", "22", "24", "4", "25", "12", "14", "13", "2", "27", "28"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW3007D",
|
|
|
+ QuotaName: "monthly_value,monthly_accumulation",
|
|
|
+ SplitTypeKey: "province",
|
|
|
+ IsTotal: 0,
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *StateOwnedKeyCoalMineRawCoalProductionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseData := fillFenWeiNetResponseData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "国有重点煤矿原煤产量"
|
|
|
+ for _, data := range responseData {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = data.MonthlyValueChnName
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + data.ProvinceName + "/汾渭",
|
|
|
+ Unit: data.MonthlyValueChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.MonthlyValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// CokingBituminousCoalProductionProcessor 炼焦烟煤分煤种产量
|
|
|
+type CokingBituminousCoalProductionProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokingBituminousCoalProductionProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: nil,
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "province": {"20", "16", "21", "6", "19", "23", "8", "1", "7", "17", "9", "15", "11", "22", "24", "4", "25", "12", "14", "13", "18", "3", "10", "5", "2", "37"},
|
|
|
+ "coal_type": {"13", "10", "9", "8", "7", "5", "3"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW3001D",
|
|
|
+ QuotaName: "monthly_value,monthly_accumulation",
|
|
|
+ SplitTypeKey: "coal_type",
|
|
|
+ IsTotal: 0,
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokingBituminousCoalProductionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseData := fillFenWeiNetResponseData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "炼焦烟煤分煤种产量"
|
|
|
+ for _, data := range responseData {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = data.MonthlyValueChnName
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + data.CoalTypeName + "/汾渭",
|
|
|
+ Unit: data.MonthlyValueChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.MonthlyValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// ThermalCoalInventorySocietyProcessor 动力煤库存-全社会
|
|
|
+type ThermalCoalInventorySocietyProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *ThermalCoalInventorySocietyProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: "79",
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "product_item_code": {"FW8004D-1"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW8004D",
|
|
|
+ QuotaName: "stock,avaliable_days,daily_consumption,monthly_value,inventory_index,week_value",
|
|
|
+ SplitTypeKey: "",
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *ThermalCoalInventorySocietyProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseDataMap := fillFenWeiNetResponseMapData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "动力煤库存-全社会"
|
|
|
+
|
|
|
+ for productCategoryName, responseDataList := range responseDataMap {
|
|
|
+ if productCategoryName != productName {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, data := range responseDataList {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = data.MonthlyValueChnName
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + "/汾渭",
|
|
|
+ Unit: data.MonthlyValueChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.MonthlyValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// ThermalCoalInventoryProductionProcessor 动力煤库存-生产企业
|
|
|
+type ThermalCoalInventoryProductionProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *ThermalCoalInventoryProductionProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: "116",
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "product_item_code": {"FW8004D-2"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW8004D",
|
|
|
+ QuotaName: "stock,avaliable_days,daily_consumption,monthly_value,inventory_index,week_value",
|
|
|
+ SplitTypeKey: "",
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *ThermalCoalInventoryProductionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseDataMap := fillFenWeiNetResponseMapData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "动力煤库存-生产企业"
|
|
|
+
|
|
|
+ for productCategoryName, responseDataList := range responseDataMap {
|
|
|
+ if productCategoryName != productName {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, data := range responseDataList {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = data.MonthlyValueChnName
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + "/汾渭",
|
|
|
+ Unit: data.WeekValueChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.MonthlyValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// ThermalCoalInventorySixPowerPlantProcessor 动力煤库存-六大电厂
|
|
|
+type ThermalCoalInventorySixPowerPlantProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *ThermalCoalInventorySixPowerPlantProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: "118",
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "product_item_code": {"FW8004D-125500", "FW8004D-112534", "FW8004D-112548", "FW8004D-112549", "FW8004D-1129", "FW8004D-125", "FW8004D-125382", "FW8004D-125383"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW8004D",
|
|
|
+ QuotaName: "stock,avaliable_days,daily_consumption,monthly_value,inventory_index,week_value",
|
|
|
+ SplitTypeKey: "",
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *ThermalCoalInventorySixPowerPlantProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseDataMap := fillFenWeiNetResponseMapData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "动力煤库存"
|
|
|
+
|
|
|
+ for productCategoryName, responseDataList := range responseDataMap {
|
|
|
+
|
|
|
+ for _, data := range responseDataList {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = "日度"
|
|
|
+ }
|
|
|
+
|
|
|
+ classifyName := "动力煤库存-六大电厂"
|
|
|
+
|
|
|
+ // 库存
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + productCategoryName + data.StockChnName + "/汾渭",
|
|
|
+ Unit: data.StockChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: classifyName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.Stock,
|
|
|
+ })
|
|
|
+ // 可用天数
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + productCategoryName + data.AvaliableDaysChnName + "/汾渭",
|
|
|
+ Unit: data.AvaliableDaysChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: classifyName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.AvaliableDays,
|
|
|
+ })
|
|
|
+ // 日耗
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + productCategoryName + data.DailyConsumptionChnName + "/汾渭",
|
|
|
+ Unit: data.DailyConsumptionChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: classifyName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.DailyConsumption,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// CokingCoalInventorySocietyProcessor 炼焦煤库存-全社会
|
|
|
+type CokingCoalInventorySocietyProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokingCoalInventorySocietyProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: "79",
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "product_item_code": {"FW8005D-1"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW8005D",
|
|
|
+ QuotaName: "stock,monthly_value,inventory_index,week_value",
|
|
|
+ SplitTypeKey: "",
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokingCoalInventorySocietyProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseDataMap := fillFenWeiNetResponseMapData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "炼焦煤库存-全社会"
|
|
|
+
|
|
|
+ for productCategoryName, responseDataList := range responseDataMap {
|
|
|
+ if productCategoryName == "合计" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ for _, data := range responseDataList {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = data.MonthlyValueChnName
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productCategoryName + "/汾渭",
|
|
|
+ Unit: data.MonthlyValueChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.MonthlyValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// CokingCoalInventoryProductionProcessor 炼焦煤库存-生产企业
|
|
|
+type CokingCoalInventoryProductionProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokingCoalInventoryProductionProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: "116",
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "product_item_code": {"FW8005D-2"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW8005D",
|
|
|
+ QuotaName: "stock,monthly_value,inventory_index,week_value",
|
|
|
+ SplitTypeKey: "",
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokingCoalInventoryProductionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseDataMap := fillFenWeiNetResponseMapData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "炼焦煤库存-生产企业"
|
|
|
+
|
|
|
+ for productCategoryName, responseDataList := range responseDataMap {
|
|
|
+ if productCategoryName == "合计" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ for _, data := range responseDataList {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = data.MonthlyValueChnName
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productCategoryName + "/汾渭",
|
|
|
+ Unit: data.WeekValueChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.WeekValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// CokingCoalInventoryDownstreamProcessor 炼焦煤库存-下游企业
|
|
|
+type CokingCoalInventoryDownstreamProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokingCoalInventoryDownstreamProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: "117",
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "product_item_code": {"FW8005D-3", "FW8005D-5"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW8005D",
|
|
|
+ QuotaName: "stock,monthly_value,inventory_index,week_value",
|
|
|
+ SplitTypeKey: "",
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokingCoalInventoryDownstreamProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseDataMap := fillFenWeiNetResponseMapData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "炼焦煤库存-下游企业"
|
|
|
+
|
|
|
+ for productCategoryName, responseDataList := range responseDataMap {
|
|
|
+ if productCategoryName == "合计" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ for _, data := range responseDataList {
|
|
|
+ frequency := "周度"
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productCategoryName + "/汾渭",
|
|
|
+ Unit: data.StockChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.Stock,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// NationalCoalMineInventoryProcessor 全国煤矿库存
|
|
|
+type NationalCoalMineInventoryProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *NationalCoalMineInventoryProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: nil,
|
|
|
+ CheckedDims: map[string][]string{},
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW8001D",
|
|
|
+ QuotaName: "monthly_value",
|
|
|
+ SplitTypeKey: "",
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *NationalCoalMineInventoryProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseData := fillFenWeiNetResponseData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "全国煤矿库存"
|
|
|
+
|
|
|
+ for _, data := range responseData {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = "日度"
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + "/汾渭",
|
|
|
+ Unit: data.MonthlyValueChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.MonthlyValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// StateOwnedKeyCoalMineInventoryProcessor 国有重点煤矿库存
|
|
|
+type StateOwnedKeyCoalMineInventoryProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *StateOwnedKeyCoalMineInventoryProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: nil,
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "province": {"20", "16", "21", "6", "19", "23", "8", "1", "7", "17", "9", "15", "11", "22", "24", "4", "25", "12", "14", "13", "2", "27", "28"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW8003D",
|
|
|
+ QuotaName: "monthly_value",
|
|
|
+ SplitTypeKey: "province",
|
|
|
+ IsTotal: "",
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *StateOwnedKeyCoalMineInventoryProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseData := fillFenWeiNetResponseData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "国有重点煤矿库存"
|
|
|
+
|
|
|
+ for _, data := range responseData {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = "日度"
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + data.ProvinceName + "/汾渭",
|
|
|
+ Unit: data.MonthlyValueChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.MonthlyValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// CokeInventoryProcessor 焦炭库存
|
|
|
+type CokeInventoryProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokeInventoryProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: nil,
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "product_item_code": {"FW1405D-1", "FW1405D-2", "FW1405D-3", "FW1405D-4", "FW1405D-5", "FW1405D-6", "FW1405D-7"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW1405D",
|
|
|
+ QuotaName: "stock,inventory_index",
|
|
|
+ SplitTypeKey: "",
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokeInventoryProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseDataMap := fillFenWeiNetResponseMapData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "焦炭库存"
|
|
|
+ for productCategoryName, responseDataList := range responseDataMap {
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("productName: %s, responseDataList:size: %v", productName, len(responseDataList)))
|
|
|
+ for _, data := range responseDataList {
|
|
|
+ var frequency string
|
|
|
+ productCodeMap := map[string]struct{}{
|
|
|
+ "FW1405D-1": {},
|
|
|
+ "FW1405D-2": {},
|
|
|
+ "FW1405D-3": {},
|
|
|
+ "FW1405D-6": {},
|
|
|
+ "FW1405D-7": {},
|
|
|
+ }
|
|
|
+ if _, ok := productCodeMap[data.ProductItemCode]; ok {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = "日度"
|
|
|
+ }
|
|
|
+
|
|
|
+ var unit string
|
|
|
+ if data.InventoryIndexChnUnit != "" {
|
|
|
+ unit = data.InventoryIndexChnUnit
|
|
|
+ } else {
|
|
|
+ unit = data.StockChnUnit
|
|
|
+ }
|
|
|
+
|
|
|
+ var value float64
|
|
|
+ if data.InventoryIndex != 0 {
|
|
|
+ value = data.InventoryIndex
|
|
|
+ } else {
|
|
|
+ value = data.Stock
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + productCategoryName + "/汾渭",
|
|
|
+ Unit: unit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: value,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// PortDataInventoryNorthernPortProcessor 港口数据-库存-北方港口
|
|
|
+type PortDataInventoryNorthernPortProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *PortDataInventoryNorthernPortProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: "79",
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "code": {"2332", "2333", "2335", "2334", "2337", "2339", "2340", "2341", "2342"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW1203D",
|
|
|
+ QuotaName: "stock",
|
|
|
+ SplitTypeKey: "product_item_code",
|
|
|
+ IsTotal: 0,
|
|
|
+ DataType: nil,
|
|
|
+ Type: 2,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *PortDataInventoryNorthernPortProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseData := fillFenWeiNetResponseData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "港口数据-库存-北方港口"
|
|
|
+
|
|
|
+ for _, data := range responseData {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = "日度"
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + data.ProductItemName + "/汾渭",
|
|
|
+ Unit: data.StockChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.Stock,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// PortDataInventoryInlandPortProcessor 港口数据-库存-江内港口
|
|
|
+type PortDataInventoryInlandPortProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *PortDataInventoryInlandPortProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: "79",
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "code": {"2321", "2320", "2324", "2323", "2322", "2325"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW1203D",
|
|
|
+ QuotaName: "stock",
|
|
|
+ SplitTypeKey: "product_item_code",
|
|
|
+ IsTotal: 0,
|
|
|
+ DataType: nil,
|
|
|
+ Type: 2,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *PortDataInventoryInlandPortProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseData := fillFenWeiNetResponseData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "港口数据-库存-江内港口"
|
|
|
+
|
|
|
+ for _, data := range responseData {
|
|
|
+ var frequency = "周度"
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + data.ProductItemName + "/汾渭",
|
|
|
+ Unit: data.StockChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.Stock,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// PortDataDispatchNorthernPortProcessor 港口数据-调度-北方港口
|
|
|
+type PortDataDispatchNorthernPortProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *PortDataDispatchNorthernPortProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: "120",
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "code": {"2364", "2365", "2366", "2363", "2367", "2368"},
|
|
|
+ "port": {"2", "4", "7", "9", "11", "326", "327", "329", "330"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW1203D",
|
|
|
+ QuotaName: "vehicle,ship,tons",
|
|
|
+ SplitTypeKey: "product_item_code,port",
|
|
|
+ IsTotal: 1,
|
|
|
+ DataType: nil,
|
|
|
+ Type: 2,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *PortDataDispatchNorthernPortProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseData := fillFenWeiNetResponseData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "港口数据-调度-北方港口"
|
|
|
+
|
|
|
+ for _, data := range responseData {
|
|
|
+ var frequency = "日度"
|
|
|
+ var unit string
|
|
|
+ if data.VehicleChnUnit != "" {
|
|
|
+ unit = data.VehicleChnUnit
|
|
|
+ } else if data.TonsChnUnit != "" {
|
|
|
+ unit = data.TonsChnUnit
|
|
|
+ } else {
|
|
|
+ unit = data.ShipChnUnit
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + "-" + data.PortName + data.ProductItemName + "/汾渭",
|
|
|
+ Unit: unit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.Tons,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// PortDataThroughputProcessor 港口数据-运量
|
|
|
+type PortDataThroughputProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *PortDataThroughputProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: "30",
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "code": {"2362"},
|
|
|
+ "port_son": {"44", "43", "42", "41", "40", "39"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW1203D",
|
|
|
+ QuotaName: "transport_volume",
|
|
|
+ SplitTypeKey: "port_son",
|
|
|
+ IsTotal: 0,
|
|
|
+ DataType: nil,
|
|
|
+ Type: 2,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *PortDataThroughputProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseData := fillFenWeiNetResponseData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "港口数据-运量"
|
|
|
+
|
|
|
+ for _, data := range responseData {
|
|
|
+ var frequency = "日度"
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + data.PortSonName + "/汾渭",
|
|
|
+ Unit: data.TransportVolumeChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.TransportVolume,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// DaqinLineDailyThroughputProcessor 大秦线日运量
|
|
|
+type DaqinLineDailyThroughputProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *DaqinLineDailyThroughputProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: nil,
|
|
|
+ CheckedDims: map[string][]string{},
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW1107D",
|
|
|
+ QuotaName: "stock",
|
|
|
+ SplitTypeKey: "",
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *DaqinLineDailyThroughputProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseData := fillFenWeiNetResponseData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "大秦线日运量"
|
|
|
+
|
|
|
+ for _, data := range responseData {
|
|
|
+ var frequency = "日度"
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + data.StockChnName + "/汾渭",
|
|
|
+ Unit: data.StockChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.Stock,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// ThermalCoalPortPriceProcessor 动力煤港口价格
|
|
|
+type ThermalCoalPortPriceProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *ThermalCoalPortPriceProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: nil,
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "product_item_code": {"FW2001P-1001", "FW2001P-1002", "FW2001P-1004", "FW2001P-1005", "FW2001P-1003", "FW2001P-1171"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW2310R",
|
|
|
+ QuotaName: "price_rmb,price_index_mom",
|
|
|
+ SplitTypeKey: "",
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *ThermalCoalPortPriceProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseDataMap := fillFenWeiNetResponseAStratumMapData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "动力煤港口价格"
|
|
|
+ for productCategoryName, responseDataList := range responseDataMap {
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("productName: %s, responseDataList:size: %v", productName, len(responseDataList)))
|
|
|
+ for _, data := range responseDataList {
|
|
|
+ var frequency = "日度"
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + productCategoryName + "-" + data.PriceRmbChnName + "/汾渭",
|
|
|
+ Unit: data.PriceRmbChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.PriceRmb,
|
|
|
+ })
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + productCategoryName + "-" + data.PriceIndexMomChnName + "/汾渭",
|
|
|
+ Unit: data.PriceIndexMomChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.PriceIndexMom,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// ThermalCoalConsumptionProcessor 动力煤消费量
|
|
|
+type ThermalCoalConsumptionProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *ThermalCoalConsumptionProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: nil,
|
|
|
+ CheckedDims: map[string][]string{
|
|
|
+ "product_item_code": {"FW5002D-1", "FW5002D-2", "FW5002D-3", "FW5002D-4", "FW5002D-5", "FW5002D-6", "FW5002D-7"},
|
|
|
+ },
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW5002D",
|
|
|
+ QuotaName: "monthly_value,monthly_accumulation",
|
|
|
+ SplitTypeKey: "",
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *ThermalCoalConsumptionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseDataMap := fillFenWeiNetResponseMapData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "动力煤消费量"
|
|
|
+ for productCategoryName, responseDataList := range responseDataMap {
|
|
|
+ utils.FileLog.Info(fmt.Sprintf("productName: %s, responseDataList:size: %v", productName, len(responseDataList)))
|
|
|
+ for _, data := range responseDataList {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = "日度"
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + productCategoryName + "/汾渭",
|
|
|
+ Unit: data.MonthlyValueChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.MonthlyValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+// CokingCleanCoalConsumptionProcessor 炼焦精煤消费量
|
|
|
+type CokingCleanCoalConsumptionProcessor struct {
|
|
|
+ BaseProcessor
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokingCleanCoalConsumptionProcessor) GenerateRequestParams(currentTime string) map[string]string {
|
|
|
+ params := models.RequestParams{
|
|
|
+ Category: nil,
|
|
|
+ CheckedDims: map[string][]string{},
|
|
|
+ DateRange: "20190820-" + currentTime,
|
|
|
+ ProductCode: "FW5001D",
|
|
|
+ QuotaName: "monthly_value,monthly_accumulation",
|
|
|
+ SplitTypeKey: "",
|
|
|
+ DataType: nil,
|
|
|
+ IsSeason: 1,
|
|
|
+ }
|
|
|
+
|
|
|
+ // 将结构体转换为 JSON 字符串
|
|
|
+ paramsJSON, _ := json.Marshal(params)
|
|
|
+
|
|
|
+ // 返回为 map[string]string 类型
|
|
|
+ return map[string]string{
|
|
|
+ "params": string(paramsJSON),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (p *CokingCleanCoalConsumptionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
|
|
|
+ responseData := fillFenWeiNetResponseData(data)
|
|
|
+
|
|
|
+ var indexInfoList []models.FenWeiNetIndexInfo
|
|
|
+ productName := "炼焦精煤消费量"
|
|
|
+
|
|
|
+ for _, data := range responseData {
|
|
|
+ var frequency string
|
|
|
+ if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
|
|
|
+ frequency = "月度"
|
|
|
+ } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
|
|
|
+ frequency = "周度"
|
|
|
+ } else {
|
|
|
+ frequency = "日度"
|
|
|
+ }
|
|
|
+
|
|
|
+ indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
|
|
|
+ IndexName: productName + "/汾渭",
|
|
|
+ Unit: data.MonthlyValueChnUnit,
|
|
|
+ Frequency: frequency,
|
|
|
+ TerminalCode: utils.TerminalCode,
|
|
|
+ ClassifyName: productName,
|
|
|
+ DataTime: data.DataDate,
|
|
|
+ Value: data.MonthlyValue,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return indexInfoList, nil
|
|
|
+}
|
|
|
+
|
|
|
+func fillFenWeiNetResponseData(data string) []models.FenWeiNetResponse {
|
|
|
+ var result models.FenWeiNetResponseWrapper
|
|
|
+ err := json.Unmarshal([]byte(data), &result)
|
|
|
+ if err != nil {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ responseData := result.Data.Data
|
|
|
+ return responseData
|
|
|
+}
|
|
|
+
|
|
|
+func fillFenWeiNetResponseMapData(data string) map[string][]models.FenWeiNetResponse {
|
|
|
+ var result models.FenWeiNetResponseMapWrapper
|
|
|
+ err := json.Unmarshal([]byte(data), &result)
|
|
|
+ if err != nil {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ responseData := result.Data.Data
|
|
|
+ return responseData
|
|
|
+}
|
|
|
+
|
|
|
+func fillFenWeiNetResponseAStratumMapData(data string) map[string][]models.FenWeiNetResponse {
|
|
|
+ var result models.FenWeiNetResponseAStratumMapWrapper
|
|
|
+ err := json.Unmarshal([]byte(data), &result)
|
|
|
+ if err != nil {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ responseData := result.Data
|
|
|
+ return responseData
|
|
|
+}
|