processor_business_logic.go 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389
  1. // Package fenwei
  2. // @Author gmy 2024/8/20 14:47:00
  3. package fenwei
  4. import (
  5. "encoding/json"
  6. "eta/eta_data_analysis/models"
  7. "eta/eta_data_analysis/utils"
  8. "fmt"
  9. "strconv"
  10. "strings"
  11. )
  12. // ThermalCoalSupplyProcessor 动力煤供应量
  13. type ThermalCoalSupplyProcessor struct {
  14. BaseProcessor
  15. }
  16. func (p *ThermalCoalSupplyProcessor) GenerateRequestParams(currentTime string) map[string]string {
  17. params := models.RequestParams{
  18. Category: nil,
  19. CheckedDims: map[string][]string{
  20. "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"},
  21. },
  22. DateRange: "20190820-" + currentTime,
  23. ProductCode: "FW4002D",
  24. QuotaName: "monthly_value,monthly_accumulation",
  25. SplitTypeKey: "province",
  26. IsTotal: 0,
  27. DataType: nil,
  28. IsSeason: 1,
  29. }
  30. // 将结构体转换为 JSON 字符串
  31. paramsJSON, _ := json.Marshal(params)
  32. // 返回为 map[string]string 类型
  33. return map[string]string{
  34. "params": string(paramsJSON),
  35. }
  36. }
  37. func (p *ThermalCoalSupplyProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  38. responseData := fillFenWeiNetResponseData(data)
  39. var indexInfoList []models.FenWeiNetIndexInfo
  40. productName := "动力煤供应量"
  41. for _, data := range responseData {
  42. var frequency string
  43. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  44. frequency = "月度"
  45. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  46. frequency = "周度"
  47. } else {
  48. frequency = "日度"
  49. }
  50. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  51. IndexName: productName + data.ProvinceName + "/汾渭",
  52. Unit: data.MonthlyValueChnUnit,
  53. Frequency: frequency,
  54. TerminalCode: utils.TerminalCode,
  55. ClassifyName: productName,
  56. DataTime: data.DataDate,
  57. Value: data.MonthlyValue,
  58. })
  59. }
  60. return indexInfoList, nil
  61. }
  62. // CokingCleanCoalSupplyProcessor 炼焦精煤供应量
  63. type CokingCleanCoalSupplyProcessor struct {
  64. BaseProcessor
  65. }
  66. func (p *CokingCleanCoalSupplyProcessor) GenerateRequestParams(currentTime string) map[string]string {
  67. params := models.RequestParams{
  68. Category: nil,
  69. CheckedDims: map[string][]string{
  70. "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"},
  71. "coal_type": {"13", "10", "9", "8", "7", "5", "3"},
  72. },
  73. DateRange: "20190820-" + currentTime,
  74. ProductCode: "FW4001D",
  75. QuotaName: "monthly_value,monthly_accumulation",
  76. SplitTypeKey: "coal_type",
  77. IsTotal: 0,
  78. DataType: nil,
  79. IsSeason: 1,
  80. }
  81. // 将结构体转换为 JSON 字符串
  82. paramsJSON, _ := json.Marshal(params)
  83. // 返回为 map[string]string 类型
  84. return map[string]string{
  85. "params": string(paramsJSON),
  86. }
  87. }
  88. func (p *CokingCleanCoalSupplyProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  89. responseData := fillFenWeiNetResponseData(data)
  90. var indexInfoList []models.FenWeiNetIndexInfo
  91. productName := "炼焦精煤供应量"
  92. for _, data := range responseData {
  93. var frequency string
  94. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  95. frequency = "月度"
  96. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  97. frequency = "周度"
  98. } else {
  99. frequency = data.MonthlyValueChnName
  100. }
  101. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  102. IndexName: productName + data.CoalTypeName + "/汾渭",
  103. Unit: data.MonthlyValueChnUnit,
  104. Frequency: frequency,
  105. TerminalCode: utils.TerminalCode,
  106. ClassifyName: productName,
  107. DataTime: data.DataDate,
  108. Value: data.MonthlyValue,
  109. })
  110. }
  111. return indexInfoList, nil
  112. }
  113. // RawCoalProvinceProductionProcessor 原煤分省分煤种产量
  114. type RawCoalProvinceProductionProcessor struct {
  115. BaseProcessor
  116. }
  117. func (p *RawCoalProvinceProductionProcessor) GenerateRequestParams(currentTime string) map[string]string {
  118. params := models.RequestParams{
  119. Category: nil,
  120. CheckedDims: map[string][]string{
  121. "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"},
  122. "coal_type": {"14", "6", "40", "21"},
  123. },
  124. DateRange: "20190820-" + currentTime,
  125. ProductCode: "FW3050D",
  126. QuotaName: "monthly_value,monthly_accumulation",
  127. SplitTypeKey: "coal_type",
  128. IsTotal: 0,
  129. DataType: nil,
  130. IsSeason: 1,
  131. }
  132. // 将结构体转换为 JSON 字符串
  133. paramsJSON, _ := json.Marshal(params)
  134. // 返回为 map[string]string 类型
  135. return map[string]string{
  136. "params": string(paramsJSON),
  137. }
  138. }
  139. func (p *RawCoalProvinceProductionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  140. responseData := fillFenWeiNetResponseData(data)
  141. var indexInfoList []models.FenWeiNetIndexInfo
  142. productName := "原煤分省分煤种产量"
  143. for _, data := range responseData {
  144. var frequency string
  145. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  146. frequency = "月度"
  147. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  148. frequency = "周度"
  149. } else {
  150. frequency = data.MonthlyValueChnName
  151. }
  152. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  153. IndexName: productName + data.CoalTypeName + "/汾渭",
  154. Unit: data.MonthlyValueChnUnit,
  155. Frequency: frequency,
  156. TerminalCode: utils.TerminalCode,
  157. ClassifyName: productName,
  158. DataTime: data.DataDate,
  159. Value: data.MonthlyValue,
  160. })
  161. }
  162. return indexInfoList, nil
  163. }
  164. // StateOwnedKeyCoalMineRawCoalProductionProcessor 国有重点煤矿原煤产量
  165. type StateOwnedKeyCoalMineRawCoalProductionProcessor struct {
  166. BaseProcessor
  167. }
  168. func (p *StateOwnedKeyCoalMineRawCoalProductionProcessor) GenerateRequestParams(currentTime string) map[string]string {
  169. params := models.RequestParams{
  170. Category: nil,
  171. CheckedDims: map[string][]string{
  172. "province": {"20", "16", "21", "6", "19", "23", "8", "1", "7", "17", "9", "15", "11", "22", "24", "4", "25", "12", "14", "13", "2", "27", "28"},
  173. },
  174. DateRange: "20190820-" + currentTime,
  175. ProductCode: "FW3007D",
  176. QuotaName: "monthly_value,monthly_accumulation",
  177. SplitTypeKey: "province",
  178. IsTotal: 0,
  179. DataType: nil,
  180. IsSeason: 1,
  181. }
  182. // 将结构体转换为 JSON 字符串
  183. paramsJSON, _ := json.Marshal(params)
  184. // 返回为 map[string]string 类型
  185. return map[string]string{
  186. "params": string(paramsJSON),
  187. }
  188. }
  189. func (p *StateOwnedKeyCoalMineRawCoalProductionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  190. responseData := fillFenWeiNetResponseData(data)
  191. var indexInfoList []models.FenWeiNetIndexInfo
  192. productName := "国有重点煤矿原煤产量"
  193. for _, data := range responseData {
  194. var frequency string
  195. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  196. frequency = "月度"
  197. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  198. frequency = "周度"
  199. } else {
  200. frequency = data.MonthlyValueChnName
  201. }
  202. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  203. IndexName: productName + data.ProvinceName + "/汾渭",
  204. Unit: data.MonthlyValueChnUnit,
  205. Frequency: frequency,
  206. TerminalCode: utils.TerminalCode,
  207. ClassifyName: productName,
  208. DataTime: data.DataDate,
  209. Value: data.MonthlyValue,
  210. })
  211. }
  212. return indexInfoList, nil
  213. }
  214. // CokingBituminousCoalProductionProcessor 炼焦烟煤分煤种产量
  215. type CokingBituminousCoalProductionProcessor struct {
  216. BaseProcessor
  217. }
  218. func (p *CokingBituminousCoalProductionProcessor) GenerateRequestParams(currentTime string) map[string]string {
  219. params := models.RequestParams{
  220. Category: nil,
  221. CheckedDims: map[string][]string{
  222. "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"},
  223. "coal_type": {"13", "10", "9", "8", "7", "5", "3"},
  224. },
  225. DateRange: "20190820-" + currentTime,
  226. ProductCode: "FW3001D",
  227. QuotaName: "monthly_value,monthly_accumulation",
  228. SplitTypeKey: "coal_type",
  229. IsTotal: 0,
  230. DataType: nil,
  231. IsSeason: 1,
  232. }
  233. // 将结构体转换为 JSON 字符串
  234. paramsJSON, _ := json.Marshal(params)
  235. // 返回为 map[string]string 类型
  236. return map[string]string{
  237. "params": string(paramsJSON),
  238. }
  239. }
  240. func (p *CokingBituminousCoalProductionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  241. responseData := fillFenWeiNetResponseData(data)
  242. var indexInfoList []models.FenWeiNetIndexInfo
  243. productName := "炼焦烟煤分煤种产量"
  244. for _, data := range responseData {
  245. var frequency string
  246. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  247. frequency = "月度"
  248. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  249. frequency = "周度"
  250. } else {
  251. frequency = data.MonthlyValueChnName
  252. }
  253. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  254. IndexName: productName + data.CoalTypeName + "/汾渭",
  255. Unit: data.MonthlyValueChnUnit,
  256. Frequency: frequency,
  257. TerminalCode: utils.TerminalCode,
  258. ClassifyName: productName,
  259. DataTime: data.DataDate,
  260. Value: data.MonthlyValue,
  261. })
  262. }
  263. return indexInfoList, nil
  264. }
  265. // ThermalCoalInventorySocietyProcessor 动力煤库存-全社会
  266. type ThermalCoalInventorySocietyProcessor struct {
  267. BaseProcessor
  268. }
  269. func (p *ThermalCoalInventorySocietyProcessor) GenerateRequestParams(currentTime string) map[string]string {
  270. params := models.RequestParams{
  271. Category: "79",
  272. CheckedDims: map[string][]string{
  273. "product_item_code": {"FW8004D-1"},
  274. },
  275. DateRange: "20190820-" + currentTime,
  276. ProductCode: "FW8004D",
  277. QuotaName: "stock,avaliable_days,daily_consumption,monthly_value,inventory_index,week_value",
  278. SplitTypeKey: "",
  279. DataType: nil,
  280. IsSeason: 1,
  281. }
  282. // 将结构体转换为 JSON 字符串
  283. paramsJSON, _ := json.Marshal(params)
  284. // 返回为 map[string]string 类型
  285. return map[string]string{
  286. "params": string(paramsJSON),
  287. }
  288. }
  289. func (p *ThermalCoalInventorySocietyProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  290. responseDataMap := fillFenWeiNetResponseMapData(data)
  291. var indexInfoList []models.FenWeiNetIndexInfo
  292. productName := "动力煤库存-全社会"
  293. for productCategoryName, responseDataList := range responseDataMap {
  294. if productCategoryName != productName {
  295. continue
  296. }
  297. for _, data := range responseDataList {
  298. var frequency string
  299. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  300. frequency = "月度"
  301. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  302. frequency = "周度"
  303. } else {
  304. frequency = data.MonthlyValueChnName
  305. }
  306. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  307. IndexName: productName + "/汾渭",
  308. Unit: data.MonthlyValueChnUnit,
  309. Frequency: frequency,
  310. TerminalCode: utils.TerminalCode,
  311. ClassifyName: productName,
  312. DataTime: data.DataDate,
  313. Value: data.MonthlyValue,
  314. })
  315. }
  316. }
  317. return indexInfoList, nil
  318. }
  319. // ThermalCoalInventoryProductionProcessor 动力煤库存-生产企业
  320. type ThermalCoalInventoryProductionProcessor struct {
  321. BaseProcessor
  322. }
  323. func (p *ThermalCoalInventoryProductionProcessor) GenerateRequestParams(currentTime string) map[string]string {
  324. params := models.RequestParams{
  325. Category: "116",
  326. CheckedDims: map[string][]string{
  327. "product_item_code": {"FW8004D-2"},
  328. },
  329. DateRange: "20190820-" + currentTime,
  330. ProductCode: "FW8004D",
  331. QuotaName: "stock,avaliable_days,daily_consumption,monthly_value,inventory_index,week_value",
  332. SplitTypeKey: "",
  333. DataType: nil,
  334. IsSeason: 1,
  335. }
  336. // 将结构体转换为 JSON 字符串
  337. paramsJSON, _ := json.Marshal(params)
  338. // 返回为 map[string]string 类型
  339. return map[string]string{
  340. "params": string(paramsJSON),
  341. }
  342. }
  343. func (p *ThermalCoalInventoryProductionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  344. responseDataMap := fillFenWeiNetResponseMapData(data)
  345. var indexInfoList []models.FenWeiNetIndexInfo
  346. productName := "动力煤库存-生产企业"
  347. for productCategoryName, responseDataList := range responseDataMap {
  348. if productCategoryName != productName {
  349. continue
  350. }
  351. for _, data := range responseDataList {
  352. var frequency string
  353. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  354. frequency = "月度"
  355. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  356. frequency = "周度"
  357. } else {
  358. frequency = data.MonthlyValueChnName
  359. }
  360. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  361. IndexName: productName + "/汾渭",
  362. Unit: data.WeekValueChnUnit,
  363. Frequency: frequency,
  364. TerminalCode: utils.TerminalCode,
  365. ClassifyName: productName,
  366. DataTime: data.DataDate,
  367. Value: data.WeekValue,
  368. })
  369. }
  370. }
  371. return indexInfoList, nil
  372. }
  373. // ThermalCoalInventorySixPowerPlantProcessor 动力煤库存-六大电厂
  374. type ThermalCoalInventorySixPowerPlantProcessor struct {
  375. BaseProcessor
  376. }
  377. func (p *ThermalCoalInventorySixPowerPlantProcessor) GenerateRequestParams(currentTime string) map[string]string {
  378. params := models.RequestParams{
  379. Category: "118",
  380. CheckedDims: map[string][]string{
  381. "product_item_code": {"FW8004D-125500", "FW8004D-112534", "FW8004D-112548", "FW8004D-112549", "FW8004D-1129", "FW8004D-125", "FW8004D-125382", "FW8004D-125383"},
  382. },
  383. DateRange: "20190820-" + currentTime,
  384. ProductCode: "FW8004D",
  385. QuotaName: "stock,avaliable_days,daily_consumption,monthly_value,inventory_index,week_value",
  386. SplitTypeKey: "",
  387. DataType: nil,
  388. IsSeason: 1,
  389. }
  390. // 将结构体转换为 JSON 字符串
  391. paramsJSON, _ := json.Marshal(params)
  392. // 返回为 map[string]string 类型
  393. return map[string]string{
  394. "params": string(paramsJSON),
  395. }
  396. }
  397. func (p *ThermalCoalInventorySixPowerPlantProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  398. responseDataMap := fillFenWeiNetResponseMapData(data)
  399. var indexInfoList []models.FenWeiNetIndexInfo
  400. productName := "动力煤库存"
  401. for productCategoryName, responseDataList := range responseDataMap {
  402. for _, data := range responseDataList {
  403. var frequency string
  404. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  405. frequency = "月度"
  406. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  407. frequency = "周度"
  408. } else {
  409. frequency = "日度"
  410. }
  411. classifyName := "动力煤库存-六大电厂"
  412. // 库存
  413. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  414. IndexName: productName + productCategoryName + data.StockChnName + "/汾渭",
  415. Unit: data.StockChnUnit,
  416. Frequency: frequency,
  417. TerminalCode: utils.TerminalCode,
  418. ClassifyName: classifyName,
  419. DataTime: data.DataDate,
  420. Value: data.Stock,
  421. })
  422. // 可用天数
  423. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  424. IndexName: productName + productCategoryName + data.AvaliableDaysChnName + "/汾渭",
  425. Unit: data.AvaliableDaysChnUnit,
  426. Frequency: frequency,
  427. TerminalCode: utils.TerminalCode,
  428. ClassifyName: classifyName,
  429. DataTime: data.DataDate,
  430. Value: data.AvaliableDays,
  431. })
  432. // 日耗
  433. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  434. IndexName: productName + productCategoryName + data.DailyConsumptionChnName + "/汾渭",
  435. Unit: data.DailyConsumptionChnUnit,
  436. Frequency: frequency,
  437. TerminalCode: utils.TerminalCode,
  438. ClassifyName: classifyName,
  439. DataTime: data.DataDate,
  440. Value: data.DailyConsumption,
  441. })
  442. }
  443. }
  444. return indexInfoList, nil
  445. }
  446. // CokingCoalInventorySocietyProcessor 炼焦煤库存-全社会
  447. type CokingCoalInventorySocietyProcessor struct {
  448. BaseProcessor
  449. }
  450. func (p *CokingCoalInventorySocietyProcessor) GenerateRequestParams(currentTime string) map[string]string {
  451. params := models.RequestParams{
  452. Category: "79",
  453. CheckedDims: map[string][]string{
  454. "product_item_code": {"FW8005D-1"},
  455. },
  456. DateRange: "20190820-" + currentTime,
  457. ProductCode: "FW8005D",
  458. QuotaName: "stock,monthly_value,inventory_index,week_value",
  459. SplitTypeKey: "",
  460. DataType: nil,
  461. IsSeason: 1,
  462. }
  463. // 将结构体转换为 JSON 字符串
  464. paramsJSON, _ := json.Marshal(params)
  465. // 返回为 map[string]string 类型
  466. return map[string]string{
  467. "params": string(paramsJSON),
  468. }
  469. }
  470. func (p *CokingCoalInventorySocietyProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  471. responseDataMap := fillFenWeiNetResponseMapData(data)
  472. var indexInfoList []models.FenWeiNetIndexInfo
  473. productName := "炼焦煤库存-全社会"
  474. for productCategoryName, responseDataList := range responseDataMap {
  475. if productCategoryName == "合计" {
  476. continue
  477. }
  478. for _, data := range responseDataList {
  479. var frequency string
  480. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  481. frequency = "月度"
  482. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  483. frequency = "周度"
  484. } else {
  485. frequency = data.MonthlyValueChnName
  486. }
  487. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  488. IndexName: productCategoryName + "/汾渭",
  489. Unit: data.MonthlyValueChnUnit,
  490. Frequency: frequency,
  491. TerminalCode: utils.TerminalCode,
  492. ClassifyName: productName,
  493. DataTime: data.DataDate,
  494. Value: data.MonthlyValue,
  495. })
  496. }
  497. }
  498. return indexInfoList, nil
  499. }
  500. // CokingCoalInventoryProductionProcessor 炼焦煤库存-生产企业
  501. type CokingCoalInventoryProductionProcessor struct {
  502. BaseProcessor
  503. }
  504. func (p *CokingCoalInventoryProductionProcessor) GenerateRequestParams(currentTime string) map[string]string {
  505. params := models.RequestParams{
  506. Category: "116",
  507. CheckedDims: map[string][]string{
  508. "product_item_code": {"FW8005D-2"},
  509. },
  510. DateRange: "20190820-" + currentTime,
  511. ProductCode: "FW8005D",
  512. QuotaName: "stock,monthly_value,inventory_index,week_value",
  513. SplitTypeKey: "",
  514. DataType: nil,
  515. IsSeason: 1,
  516. }
  517. // 将结构体转换为 JSON 字符串
  518. paramsJSON, _ := json.Marshal(params)
  519. // 返回为 map[string]string 类型
  520. return map[string]string{
  521. "params": string(paramsJSON),
  522. }
  523. }
  524. func (p *CokingCoalInventoryProductionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  525. responseDataMap := fillFenWeiNetResponseMapData(data)
  526. var indexInfoList []models.FenWeiNetIndexInfo
  527. productName := "炼焦煤库存-生产企业"
  528. for productCategoryName, responseDataList := range responseDataMap {
  529. if productCategoryName == "合计" {
  530. continue
  531. }
  532. for _, data := range responseDataList {
  533. var frequency string
  534. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  535. frequency = "月度"
  536. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  537. frequency = "周度"
  538. } else {
  539. frequency = data.MonthlyValueChnName
  540. }
  541. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  542. IndexName: productCategoryName + "/汾渭",
  543. Unit: data.WeekValueChnUnit,
  544. Frequency: frequency,
  545. TerminalCode: utils.TerminalCode,
  546. ClassifyName: productName,
  547. DataTime: data.DataDate,
  548. Value: data.WeekValue,
  549. })
  550. }
  551. }
  552. return indexInfoList, nil
  553. }
  554. // CokingCoalInventoryDownstreamProcessor 炼焦煤库存-下游企业
  555. type CokingCoalInventoryDownstreamProcessor struct {
  556. BaseProcessor
  557. }
  558. func (p *CokingCoalInventoryDownstreamProcessor) GenerateRequestParams(currentTime string) map[string]string {
  559. params := models.RequestParams{
  560. Category: "117",
  561. CheckedDims: map[string][]string{
  562. "product_item_code": {"FW8005D-3", "FW8005D-5"},
  563. },
  564. DateRange: "20190820-" + currentTime,
  565. ProductCode: "FW8005D",
  566. QuotaName: "stock,monthly_value,inventory_index,week_value",
  567. SplitTypeKey: "",
  568. DataType: nil,
  569. IsSeason: 1,
  570. }
  571. // 将结构体转换为 JSON 字符串
  572. paramsJSON, _ := json.Marshal(params)
  573. // 返回为 map[string]string 类型
  574. return map[string]string{
  575. "params": string(paramsJSON),
  576. }
  577. }
  578. func (p *CokingCoalInventoryDownstreamProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  579. responseDataMap := fillFenWeiNetResponseMapData(data)
  580. var indexInfoList []models.FenWeiNetIndexInfo
  581. productName := "炼焦煤库存-下游企业"
  582. for productCategoryName, responseDataList := range responseDataMap {
  583. if productCategoryName == "合计" {
  584. continue
  585. }
  586. for _, data := range responseDataList {
  587. frequency := "周度"
  588. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  589. IndexName: productCategoryName + "/汾渭",
  590. Unit: data.StockChnUnit,
  591. Frequency: frequency,
  592. TerminalCode: utils.TerminalCode,
  593. ClassifyName: productName,
  594. DataTime: data.DataDate,
  595. Value: data.Stock,
  596. })
  597. }
  598. }
  599. return indexInfoList, nil
  600. }
  601. // NationalCoalMineInventoryProcessor 全国煤矿库存
  602. type NationalCoalMineInventoryProcessor struct {
  603. BaseProcessor
  604. }
  605. func (p *NationalCoalMineInventoryProcessor) GenerateRequestParams(currentTime string) map[string]string {
  606. params := models.RequestParams{
  607. Category: nil,
  608. CheckedDims: map[string][]string{},
  609. DateRange: "20190820-" + currentTime,
  610. ProductCode: "FW8001D",
  611. QuotaName: "monthly_value",
  612. SplitTypeKey: "",
  613. DataType: nil,
  614. IsSeason: 1,
  615. }
  616. // 将结构体转换为 JSON 字符串
  617. paramsJSON, _ := json.Marshal(params)
  618. // 返回为 map[string]string 类型
  619. return map[string]string{
  620. "params": string(paramsJSON),
  621. }
  622. }
  623. func (p *NationalCoalMineInventoryProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  624. responseData := fillFenWeiNetResponseData(data)
  625. var indexInfoList []models.FenWeiNetIndexInfo
  626. productName := "全国煤矿库存"
  627. for _, data := range responseData {
  628. var frequency string
  629. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  630. frequency = "月度"
  631. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  632. frequency = "周度"
  633. } else {
  634. frequency = "日度"
  635. }
  636. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  637. IndexName: productName + "/汾渭",
  638. Unit: data.MonthlyValueChnUnit,
  639. Frequency: frequency,
  640. TerminalCode: utils.TerminalCode,
  641. ClassifyName: productName,
  642. DataTime: data.DataDate,
  643. Value: data.MonthlyValue,
  644. })
  645. }
  646. return indexInfoList, nil
  647. }
  648. // StateOwnedKeyCoalMineInventoryProcessor 国有重点煤矿库存
  649. type StateOwnedKeyCoalMineInventoryProcessor struct {
  650. BaseProcessor
  651. }
  652. func (p *StateOwnedKeyCoalMineInventoryProcessor) GenerateRequestParams(currentTime string) map[string]string {
  653. params := models.RequestParams{
  654. Category: nil,
  655. CheckedDims: map[string][]string{
  656. "province": {"20", "16", "21", "6", "19", "23", "8", "1", "7", "17", "9", "15", "11", "22", "24", "4", "25", "12", "14", "13", "2", "27", "28"},
  657. },
  658. DateRange: "20190820-" + currentTime,
  659. ProductCode: "FW8003D",
  660. QuotaName: "monthly_value",
  661. SplitTypeKey: "province",
  662. IsTotal: "",
  663. DataType: nil,
  664. IsSeason: 1,
  665. }
  666. // 将结构体转换为 JSON 字符串
  667. paramsJSON, _ := json.Marshal(params)
  668. // 返回为 map[string]string 类型
  669. return map[string]string{
  670. "params": string(paramsJSON),
  671. }
  672. }
  673. func (p *StateOwnedKeyCoalMineInventoryProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  674. responseData := fillFenWeiNetResponseData(data)
  675. var indexInfoList []models.FenWeiNetIndexInfo
  676. productName := "国有重点煤矿库存"
  677. for _, data := range responseData {
  678. var frequency string
  679. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  680. frequency = "月度"
  681. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  682. frequency = "周度"
  683. } else {
  684. frequency = "日度"
  685. }
  686. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  687. IndexName: productName + data.ProvinceName + "/汾渭",
  688. Unit: data.MonthlyValueChnUnit,
  689. Frequency: frequency,
  690. TerminalCode: utils.TerminalCode,
  691. ClassifyName: productName,
  692. DataTime: data.DataDate,
  693. Value: data.MonthlyValue,
  694. })
  695. }
  696. return indexInfoList, nil
  697. }
  698. // CokeInventoryProcessor 焦炭库存
  699. type CokeInventoryProcessor struct {
  700. BaseProcessor
  701. }
  702. func (p *CokeInventoryProcessor) GenerateRequestParams(currentTime string) map[string]string {
  703. params := models.RequestParams{
  704. Category: nil,
  705. CheckedDims: map[string][]string{
  706. "product_item_code": {"FW1405D-1", "FW1405D-2", "FW1405D-3", "FW1405D-4", "FW1405D-5", "FW1405D-6", "FW1405D-7"},
  707. },
  708. DateRange: "20190820-" + currentTime,
  709. ProductCode: "FW1405D",
  710. QuotaName: "stock,inventory_index",
  711. SplitTypeKey: "",
  712. DataType: nil,
  713. IsSeason: 1,
  714. }
  715. // 将结构体转换为 JSON 字符串
  716. paramsJSON, _ := json.Marshal(params)
  717. // 返回为 map[string]string 类型
  718. return map[string]string{
  719. "params": string(paramsJSON),
  720. }
  721. }
  722. func (p *CokeInventoryProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  723. responseDataMap := fillFenWeiNetResponseMapData(data)
  724. var indexInfoList []models.FenWeiNetIndexInfo
  725. productName := "焦炭库存"
  726. for productCategoryName, responseDataList := range responseDataMap {
  727. utils.FileLog.Info(fmt.Sprintf("productName: %s, responseDataList:size: %v", productName, len(responseDataList)))
  728. for _, data := range responseDataList {
  729. var frequency string
  730. productCodeMap := map[string]struct{}{
  731. "FW1405D-1": {},
  732. "FW1405D-2": {},
  733. "FW1405D-3": {},
  734. "FW1405D-6": {},
  735. "FW1405D-7": {},
  736. }
  737. if _, ok := productCodeMap[data.ProductItemCode]; ok {
  738. frequency = "周度"
  739. } else {
  740. frequency = "日度"
  741. }
  742. var unit string
  743. if data.InventoryIndexChnUnit != "" {
  744. unit = data.InventoryIndexChnUnit
  745. } else {
  746. unit = data.StockChnUnit
  747. }
  748. var value float64
  749. if data.InventoryIndex != nil && data.InventoryIndex != "" {
  750. switch v := data.InventoryIndex.(type) {
  751. case string:
  752. value, _ = strconv.ParseFloat(v, 64)
  753. case float64:
  754. value = v
  755. }
  756. } else if data.Stock != nil && data.Stock != "" {
  757. switch v := data.Stock.(type) {
  758. case string:
  759. value, _ = strconv.ParseFloat(v, 64)
  760. case float64:
  761. value = v
  762. }
  763. }
  764. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  765. IndexName: productName + productCategoryName + "/汾渭",
  766. Unit: unit,
  767. Frequency: frequency,
  768. TerminalCode: utils.TerminalCode,
  769. ClassifyName: productName,
  770. DataTime: data.DataDate,
  771. Value: value,
  772. })
  773. }
  774. }
  775. return indexInfoList, nil
  776. }
  777. // PortDataInventoryNorthernPortProcessor 港口数据-库存-北方港口
  778. type PortDataInventoryNorthernPortProcessor struct {
  779. BaseProcessor
  780. }
  781. func (p *PortDataInventoryNorthernPortProcessor) GenerateRequestParams(currentTime string) map[string]string {
  782. params := models.RequestParams{
  783. Category: "79",
  784. CheckedDims: map[string][]string{
  785. "code": {"2332", "2333", "2335", "2334", "2337", "2339", "2340", "2341", "2342"},
  786. },
  787. DateRange: "20190820-" + currentTime,
  788. ProductCode: "FW1203D",
  789. QuotaName: "stock",
  790. SplitTypeKey: "product_item_code",
  791. IsTotal: 0,
  792. DataType: nil,
  793. Type: 2,
  794. IsSeason: 1,
  795. }
  796. // 将结构体转换为 JSON 字符串
  797. paramsJSON, _ := json.Marshal(params)
  798. // 返回为 map[string]string 类型
  799. return map[string]string{
  800. "params": string(paramsJSON),
  801. }
  802. }
  803. func (p *PortDataInventoryNorthernPortProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  804. responseData := fillFenWeiNetResponseData(data)
  805. var indexInfoList []models.FenWeiNetIndexInfo
  806. productName := "港口数据-库存-北方港口"
  807. for _, data := range responseData {
  808. var frequency string
  809. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  810. frequency = "月度"
  811. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  812. frequency = "周度"
  813. } else {
  814. frequency = "日度"
  815. }
  816. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  817. IndexName: productName + data.ProductItemName + "/汾渭",
  818. Unit: data.StockChnUnit,
  819. Frequency: frequency,
  820. TerminalCode: utils.TerminalCode,
  821. ClassifyName: productName,
  822. DataTime: data.DataDate,
  823. Value: data.Stock,
  824. })
  825. }
  826. return indexInfoList, nil
  827. }
  828. // PortDataInventoryInlandPortProcessor 港口数据-库存-江内港口
  829. type PortDataInventoryInlandPortProcessor struct {
  830. BaseProcessor
  831. }
  832. func (p *PortDataInventoryInlandPortProcessor) GenerateRequestParams(currentTime string) map[string]string {
  833. params := models.RequestParams{
  834. Category: "79",
  835. CheckedDims: map[string][]string{
  836. "code": {"2321", "2320", "2324", "2323", "2322", "2325"},
  837. },
  838. DateRange: "20190820-" + currentTime,
  839. ProductCode: "FW1203D",
  840. QuotaName: "stock",
  841. SplitTypeKey: "product_item_code",
  842. IsTotal: 0,
  843. DataType: nil,
  844. Type: 2,
  845. IsSeason: 1,
  846. }
  847. // 将结构体转换为 JSON 字符串
  848. paramsJSON, _ := json.Marshal(params)
  849. // 返回为 map[string]string 类型
  850. return map[string]string{
  851. "params": string(paramsJSON),
  852. }
  853. }
  854. func (p *PortDataInventoryInlandPortProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  855. responseData := fillFenWeiNetResponseData(data)
  856. var indexInfoList []models.FenWeiNetIndexInfo
  857. productName := "港口数据-库存-江内港口"
  858. for _, data := range responseData {
  859. var frequency = "周度"
  860. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  861. IndexName: productName + data.ProductItemName + "/汾渭",
  862. Unit: data.StockChnUnit,
  863. Frequency: frequency,
  864. TerminalCode: utils.TerminalCode,
  865. ClassifyName: productName,
  866. DataTime: data.DataDate,
  867. Value: data.Stock,
  868. })
  869. }
  870. return indexInfoList, nil
  871. }
  872. // PortDataDispatchNorthernPortProcessor 港口数据-调度-北方港口
  873. type PortDataDispatchNorthernPortProcessor struct {
  874. BaseProcessor
  875. }
  876. func (p *PortDataDispatchNorthernPortProcessor) GenerateRequestParams(currentTime string) map[string]string {
  877. params := models.RequestParams{
  878. Category: "120",
  879. CheckedDims: map[string][]string{
  880. "code": {"2364", "2365", "2366", "2363", "2367", "2368"},
  881. "port": {"2", "4", "7", "9", "11", "326", "327", "329", "330"},
  882. },
  883. DateRange: "20190820-" + currentTime,
  884. ProductCode: "FW1203D",
  885. QuotaName: "vehicle,ship,tons",
  886. SplitTypeKey: "product_item_code,port",
  887. IsTotal: 1,
  888. DataType: nil,
  889. Type: 2,
  890. IsSeason: 1,
  891. }
  892. // 将结构体转换为 JSON 字符串
  893. paramsJSON, _ := json.Marshal(params)
  894. // 返回为 map[string]string 类型
  895. return map[string]string{
  896. "params": string(paramsJSON),
  897. }
  898. }
  899. func (p *PortDataDispatchNorthernPortProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  900. responseData := fillFenWeiNetResponseData(data)
  901. var indexInfoList []models.FenWeiNetIndexInfo
  902. productName := "港口数据-调度-北方港口"
  903. for _, data := range responseData {
  904. var frequency = "日度"
  905. var unit string
  906. if data.VehicleChnUnit != "" {
  907. unit = data.VehicleChnUnit
  908. } else if data.TonsChnUnit != "" {
  909. unit = data.TonsChnUnit
  910. } else {
  911. unit = data.ShipChnUnit
  912. }
  913. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  914. IndexName: productName + "-" + data.PortName + data.ProductItemName + "/汾渭",
  915. Unit: unit,
  916. Frequency: frequency,
  917. TerminalCode: utils.TerminalCode,
  918. ClassifyName: productName,
  919. DataTime: data.DataDate,
  920. Value: data.Tons,
  921. })
  922. }
  923. return indexInfoList, nil
  924. }
  925. // PortDataThroughputProcessor 港口数据-运量
  926. type PortDataThroughputProcessor struct {
  927. BaseProcessor
  928. }
  929. func (p *PortDataThroughputProcessor) GenerateRequestParams(currentTime string) map[string]string {
  930. params := models.RequestParams{
  931. Category: "30",
  932. CheckedDims: map[string][]string{
  933. "code": {"2362"},
  934. "port_son": {"44", "43", "42", "41", "40", "39"},
  935. },
  936. DateRange: "20190820-" + currentTime,
  937. ProductCode: "FW1203D",
  938. QuotaName: "transport_volume",
  939. SplitTypeKey: "port_son",
  940. IsTotal: 0,
  941. DataType: nil,
  942. Type: 2,
  943. IsSeason: 1,
  944. }
  945. // 将结构体转换为 JSON 字符串
  946. paramsJSON, _ := json.Marshal(params)
  947. // 返回为 map[string]string 类型
  948. return map[string]string{
  949. "params": string(paramsJSON),
  950. }
  951. }
  952. func (p *PortDataThroughputProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  953. responseData := fillFenWeiNetResponseData(data)
  954. var indexInfoList []models.FenWeiNetIndexInfo
  955. productName := "港口数据-运量"
  956. for _, data := range responseData {
  957. var frequency = "日度"
  958. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  959. IndexName: productName + data.PortSonName + "/汾渭",
  960. Unit: data.TransportVolumeChnUnit,
  961. Frequency: frequency,
  962. TerminalCode: utils.TerminalCode,
  963. ClassifyName: productName,
  964. DataTime: data.DataDate,
  965. Value: data.TransportVolume,
  966. })
  967. }
  968. return indexInfoList, nil
  969. }
  970. // DaqinLineDailyThroughputProcessor 大秦线日运量
  971. type DaqinLineDailyThroughputProcessor struct {
  972. BaseProcessor
  973. }
  974. func (p *DaqinLineDailyThroughputProcessor) GenerateRequestParams(currentTime string) map[string]string {
  975. params := models.RequestParams{
  976. Category: nil,
  977. CheckedDims: map[string][]string{},
  978. DateRange: "20190820-" + currentTime,
  979. ProductCode: "FW1107D",
  980. QuotaName: "stock",
  981. SplitTypeKey: "",
  982. DataType: nil,
  983. IsSeason: 1,
  984. }
  985. // 将结构体转换为 JSON 字符串
  986. paramsJSON, _ := json.Marshal(params)
  987. // 返回为 map[string]string 类型
  988. return map[string]string{
  989. "params": string(paramsJSON),
  990. }
  991. }
  992. func (p *DaqinLineDailyThroughputProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  993. responseData := fillFenWeiNetResponseData(data)
  994. var indexInfoList []models.FenWeiNetIndexInfo
  995. productName := "大秦线日运量"
  996. for _, data := range responseData {
  997. var frequency = "日度"
  998. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  999. IndexName: productName + data.StockChnName + "/汾渭",
  1000. Unit: data.StockChnUnit,
  1001. Frequency: frequency,
  1002. TerminalCode: utils.TerminalCode,
  1003. ClassifyName: productName,
  1004. DataTime: data.DataDate,
  1005. Value: data.Stock,
  1006. })
  1007. }
  1008. return indexInfoList, nil
  1009. }
  1010. // ThermalCoalPortPriceProcessor 动力煤港口价格
  1011. type ThermalCoalPortPriceProcessor struct {
  1012. BaseProcessor
  1013. }
  1014. func (p *ThermalCoalPortPriceProcessor) GenerateRequestParams(currentTime string) map[string]string {
  1015. params := models.RequestParams{
  1016. Category: nil,
  1017. CheckedDims: map[string][]string{
  1018. "product_item_code": {"FW2001P-1001", "FW2001P-1002", "FW2001P-1004", "FW2001P-1005", "FW2001P-1003", "FW2001P-1171"},
  1019. },
  1020. DateRange: "20190820-" + currentTime,
  1021. ProductCode: "FW2310R",
  1022. QuotaName: "price_rmb,price_index_mom",
  1023. SplitTypeKey: "",
  1024. DataType: nil,
  1025. IsSeason: 1,
  1026. }
  1027. // 将结构体转换为 JSON 字符串
  1028. paramsJSON, _ := json.Marshal(params)
  1029. // 返回为 map[string]string 类型
  1030. return map[string]string{
  1031. "params": string(paramsJSON),
  1032. }
  1033. }
  1034. func (p *ThermalCoalPortPriceProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  1035. responseDataMap := fillFenWeiNetResponseAStratumMapData(data)
  1036. var indexInfoList []models.FenWeiNetIndexInfo
  1037. productName := "动力煤港口价格"
  1038. for productCategoryName, responseDataList := range responseDataMap {
  1039. utils.FileLog.Info(fmt.Sprintf("productName: %s, responseDataList:size: %v", productName, len(responseDataList)))
  1040. for _, data := range responseDataList {
  1041. var frequency = "日度"
  1042. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  1043. IndexName: productName + productCategoryName + "-" + data.PriceRmbChnName + "/汾渭",
  1044. Unit: data.PriceRmbChnUnit,
  1045. Frequency: frequency,
  1046. TerminalCode: utils.TerminalCode,
  1047. ClassifyName: productName,
  1048. DataTime: data.DataDate,
  1049. Value: data.PriceRmb,
  1050. })
  1051. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  1052. IndexName: productName + productCategoryName + "-" + data.PriceIndexMomChnName + "/汾渭",
  1053. Unit: data.PriceIndexMomChnUnit,
  1054. Frequency: frequency,
  1055. TerminalCode: utils.TerminalCode,
  1056. ClassifyName: productName,
  1057. DataTime: data.DataDate,
  1058. Value: data.PriceIndexMom,
  1059. })
  1060. }
  1061. }
  1062. return indexInfoList, nil
  1063. }
  1064. // ThermalCoalConsumptionProcessor 动力煤消费量
  1065. type ThermalCoalConsumptionProcessor struct {
  1066. BaseProcessor
  1067. }
  1068. func (p *ThermalCoalConsumptionProcessor) GenerateRequestParams(currentTime string) map[string]string {
  1069. params := models.RequestParams{
  1070. Category: nil,
  1071. CheckedDims: map[string][]string{
  1072. "product_item_code": {"FW5002D-1", "FW5002D-2", "FW5002D-3", "FW5002D-4", "FW5002D-5", "FW5002D-6", "FW5002D-7"},
  1073. },
  1074. DateRange: "20190820-" + currentTime,
  1075. ProductCode: "FW5002D",
  1076. QuotaName: "monthly_value,monthly_accumulation",
  1077. SplitTypeKey: "",
  1078. DataType: nil,
  1079. IsSeason: 1,
  1080. }
  1081. // 将结构体转换为 JSON 字符串
  1082. paramsJSON, _ := json.Marshal(params)
  1083. // 返回为 map[string]string 类型
  1084. return map[string]string{
  1085. "params": string(paramsJSON),
  1086. }
  1087. }
  1088. func (p *ThermalCoalConsumptionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  1089. responseDataMap := fillFenWeiNetResponseMapData(data)
  1090. var indexInfoList []models.FenWeiNetIndexInfo
  1091. productName := "动力煤消费量"
  1092. for productCategoryName, responseDataList := range responseDataMap {
  1093. utils.FileLog.Info(fmt.Sprintf("productName: %s, responseDataList:size: %v", productName, len(responseDataList)))
  1094. for _, data := range responseDataList {
  1095. var frequency string
  1096. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  1097. frequency = "月度"
  1098. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  1099. frequency = "周度"
  1100. } else {
  1101. frequency = "日度"
  1102. }
  1103. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  1104. IndexName: productName + productCategoryName + "/汾渭",
  1105. Unit: data.MonthlyValueChnUnit,
  1106. Frequency: frequency,
  1107. TerminalCode: utils.TerminalCode,
  1108. ClassifyName: productName,
  1109. DataTime: data.DataDate,
  1110. Value: data.MonthlyValue,
  1111. })
  1112. }
  1113. }
  1114. return indexInfoList, nil
  1115. }
  1116. // CokingCleanCoalConsumptionProcessor 炼焦精煤消费量
  1117. type CokingCleanCoalConsumptionProcessor struct {
  1118. BaseProcessor
  1119. }
  1120. func (p *CokingCleanCoalConsumptionProcessor) GenerateRequestParams(currentTime string) map[string]string {
  1121. params := models.RequestParams{
  1122. Category: nil,
  1123. CheckedDims: map[string][]string{},
  1124. DateRange: "20190820-" + currentTime,
  1125. ProductCode: "FW5001D",
  1126. QuotaName: "monthly_value,monthly_accumulation",
  1127. SplitTypeKey: "",
  1128. DataType: nil,
  1129. IsSeason: 1,
  1130. }
  1131. // 将结构体转换为 JSON 字符串
  1132. paramsJSON, _ := json.Marshal(params)
  1133. // 返回为 map[string]string 类型
  1134. return map[string]string{
  1135. "params": string(paramsJSON),
  1136. }
  1137. }
  1138. func (p *CokingCleanCoalConsumptionProcessor) ProcessResponse(data string) ([]models.FenWeiNetIndexInfo, error) {
  1139. responseData := fillFenWeiNetResponseData(data)
  1140. var indexInfoList []models.FenWeiNetIndexInfo
  1141. productName := "炼焦精煤消费量"
  1142. for _, data := range responseData {
  1143. var frequency string
  1144. if data.MonthlyValueChnName != "" && strings.Contains(data.MonthlyValueChnName, "月度") {
  1145. frequency = "月度"
  1146. } else if data.WeekValueChnName != "" && strings.Contains(data.WeekValueChnName, "周度") {
  1147. frequency = "周度"
  1148. } else {
  1149. frequency = "日度"
  1150. }
  1151. indexInfoList = append(indexInfoList, models.FenWeiNetIndexInfo{
  1152. IndexName: productName + "/汾渭",
  1153. Unit: data.MonthlyValueChnUnit,
  1154. Frequency: frequency,
  1155. TerminalCode: utils.TerminalCode,
  1156. ClassifyName: productName,
  1157. DataTime: data.DataDate,
  1158. Value: data.MonthlyValue,
  1159. })
  1160. }
  1161. return indexInfoList, nil
  1162. }
  1163. func fillFenWeiNetResponseData(data string) []models.FenWeiNetResponse {
  1164. var result models.FenWeiNetResponseWrapper
  1165. err := json.Unmarshal([]byte(data), &result)
  1166. if err != nil {
  1167. return nil
  1168. }
  1169. responseData := result.Data.Data
  1170. return responseData
  1171. }
  1172. func fillFenWeiNetResponseMapData(data string) map[string][]models.FenWeiNetResponse {
  1173. var result models.FenWeiNetResponseMapWrapper
  1174. err := json.Unmarshal([]byte(data), &result)
  1175. if err != nil {
  1176. return nil
  1177. }
  1178. responseData := result.Data.Data
  1179. return responseData
  1180. }
  1181. func fillFenWeiNetResponseAStratumMapData(data string) map[string][]models.FenWeiNetResponse {
  1182. var result models.FenWeiNetResponseAStratumMapWrapper
  1183. err := json.Unmarshal([]byte(data), &result)
  1184. if err != nil {
  1185. return nil
  1186. }
  1187. responseData := result.Data
  1188. return responseData
  1189. }