|
@@ -72,7 +72,9 @@ type UsdaFasIndex struct {
|
|
|
func DownloadUsdaPsdDataTask(cont context.Context) (err error) {
|
|
|
//月度供需,年度和月度
|
|
|
//todo 设置下载频率
|
|
|
- err = DownloadUsdaPsdData()
|
|
|
+ // 获取最近两年的年份
|
|
|
+ years := []int{time.Now().Year() + 1, time.Now().Year()}
|
|
|
+ err = DownloadUsdaPsdData(years)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -107,7 +109,7 @@ func DownloadUsdaFmsDataTask(cont context.Context) (err error) {
|
|
|
// Oilseed, Soybean:2222000
|
|
|
// Oilseed, Sunflowerseed:2224000
|
|
|
// 美国农业部月度供需平衡表数据
|
|
|
-func DownloadUsdaPsdData() (err error) {
|
|
|
+func DownloadUsdaPsdData(years []int) (err error) {
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
msg := "失败提醒" + "downloadUsdaPsdData ErrMsg:" + err.Error()
|
|
@@ -151,7 +153,8 @@ func DownloadUsdaPsdData() (err error) {
|
|
|
var countries []string
|
|
|
countries = append(countries, "R00", "ALL")
|
|
|
var marketYears []int
|
|
|
- marketYears = append(marketYears, 2025, 2024, 2023, 2022, 2021, 2020, 2019, 2018, 2017, 2016, 2015, 2014)
|
|
|
+ //marketYears = append(marketYears, 2025, 2024, 2023, 2022, 2021, 2020, 2019, 2018, 2017, 2016, 2015, 2014)
|
|
|
+ marketYears = append(marketYears, years...)
|
|
|
// {"queryId":0,"commodityGroupCode":null,"commodities":["0430000"],"attributes":[4,20,28,57,81,84,86,88,113,130,192,125,176,178,184],"countries":["R00","ALL"],"marketYears":[2024,2023,2022,2021,2020,2019,2018,2017,2016,2015,2014],"chkCommoditySummary":false,"chkAttribSummary":false,"chkCountrySummary":false,"commoditySummaryText":"","attribSummaryText":"","countrySummaryText":"","optionColumn":"year","chkTopCountry":false,"topCountryCount":"","chkfileFormat":false,"chkPrevMonth":true,"chkMonthChange":false,"chkCodes":false,"chkYearChange":false,"queryName":"","sortOrder":"Commodity/Attribute/Country","topCountryState":false}
|
|
|
var req UsdaPsdDataQueryParams
|
|
|
req.Commodities = commodities
|
|
@@ -194,9 +197,9 @@ func DownloadUsdaPsdData() (err error) {
|
|
|
err = fmt.Errorf("handleUsdaFasPsd, Err:%w", err)
|
|
|
return
|
|
|
}
|
|
|
- case <-time.After(20 * time.Minute): // 假设20分钟超时
|
|
|
+ /*case <-time.After(20 * time.Minute): // 假设20分钟超时
|
|
|
err = fmt.Errorf("parse excel timed out")
|
|
|
- return
|
|
|
+ return*/
|
|
|
}
|
|
|
|
|
|
return
|
|
@@ -213,7 +216,7 @@ func DownloadUsdaFmsData(startDate, endDate string) (err error) {
|
|
|
go alarm_msg.SendAlarmMsg(msg, 3)
|
|
|
}
|
|
|
}()
|
|
|
- downloadFile := fmt.Sprintf("./static/usda_fms_excel_%s.xls", time.Now().Format(utils.FormatDateTime))
|
|
|
+ downloadFile := fmt.Sprintf("./static/usda_fms_excel_%s.xls", time.Now().Format(utils.FormatDateTimeUnSpace))
|
|
|
//请求首页,获取入参
|
|
|
dataUrl := "https://apps.fas.usda.gov/esrquery/esrq.aspx"
|
|
|
body1, err := utils.HttpGetNoCookie(dataUrl)
|
|
@@ -362,9 +365,9 @@ func DownloadUsdaFmsData(startDate, endDate string) (err error) {
|
|
|
err = fmt.Errorf("parse excel, Err:%w", err)
|
|
|
return
|
|
|
}
|
|
|
- case <-time.After(20 * time.Minute): // 假设20分钟超时
|
|
|
+ /*case <-time.After(20 * time.Minute): // 假设20分钟超时
|
|
|
err = fmt.Errorf("parse excel timed out")
|
|
|
- return
|
|
|
+ return*/
|
|
|
}
|
|
|
|
|
|
fmt.Println("Excel file downloaded successfully")
|
|
@@ -424,7 +427,7 @@ func ParseUsdaFmsExcel(path string) (err error) {
|
|
|
dataVal := ""
|
|
|
unit := "Metric Tons"
|
|
|
for k, text := range row {
|
|
|
- fmt.Println("第", i, "行,第", k, "列,内容:", text)
|
|
|
+ //fmt.Println("第", i, "行,第", k, "列,内容:", text)
|
|
|
kind := ""
|
|
|
indexName := ""
|
|
|
if k == 1 { // 品种名称Commodity
|
|
@@ -499,10 +502,10 @@ func ParseUsdaFmsExcel(path string) (err error) {
|
|
|
//}
|
|
|
|
|
|
for _, v := range indexMap {
|
|
|
- fmt.Printf("IndexName: %s \n", v.IndexName)
|
|
|
- fmt.Printf("IndexCode: %s \n", v.IndexCode)
|
|
|
+ //fmt.Printf("IndexName: %s \n", v.IndexName)
|
|
|
+ //fmt.Printf("IndexCode: %s \n", v.IndexCode)
|
|
|
indexList = append(indexList, v)
|
|
|
- if len(indexList) > 500 {
|
|
|
+ if len(indexList) > 100 {
|
|
|
err = addUsdaFasPsdData(indexList, "出口销售")
|
|
|
if err != nil {
|
|
|
return
|
|
@@ -519,9 +522,13 @@ func ParseUsdaFmsExcel(path string) (err error) {
|
|
|
|
|
|
func handleUsdaFasPsd(item *UsdaPsdData) (err error) {
|
|
|
//设置缓存key,防止重复处理
|
|
|
+ errMsg := ""
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
- msg := "失败提醒" + "downloadUsdaPsdData_handleUsdaFasPsd ErrMsg:" + err.Error()
|
|
|
+ errMsg += err.Error()
|
|
|
+ }
|
|
|
+ if errMsg != "" {
|
|
|
+ msg := "失败提醒" + "downloadUsdaPsdData_handleUsdaFasPsd ErrMsg:" + errMsg
|
|
|
fmt.Println("msg:", msg)
|
|
|
utils.FileLog.Info(msg)
|
|
|
go alarm_msg.SendAlarmMsg(msg, 3)
|
|
@@ -548,7 +555,7 @@ func handleUsdaFasPsd(item *UsdaPsdData) (err error) {
|
|
|
commodityRow := ""
|
|
|
countriesRow := ""
|
|
|
attributesRow := ""
|
|
|
- errMsg := ""
|
|
|
+
|
|
|
for _, row := range item.QueryResult {
|
|
|
unitK := headerSlice[len(headerSlice)-1]
|
|
|
unit := row[unitK].(string)
|
|
@@ -558,6 +565,7 @@ func handleUsdaFasPsd(item *UsdaPsdData) (err error) {
|
|
|
for _, k := range headerSlice {
|
|
|
col, ok := row[k]
|
|
|
if !ok || col == nil {
|
|
|
+ utils.FileLog.Info("col is nil")
|
|
|
continue
|
|
|
}
|
|
|
if k == "commodity" {
|
|
@@ -641,7 +649,7 @@ func handleUsdaFasPsd(item *UsdaPsdData) (err error) {
|
|
|
fmt.Printf("IndexName: %s \n", v.IndexName)
|
|
|
fmt.Printf("IndexCode: %s \n", v.IndexCode)
|
|
|
indexList = append(indexList, v)
|
|
|
- if len(indexList) > 500 {
|
|
|
+ if len(indexList) > 100 {
|
|
|
err = addUsdaFasPsdData(indexList, "月度供需")
|
|
|
if err != nil {
|
|
|
return
|