Browse Source

粮油商务网-最新数据展示调整

gmy 6 months ago
parent
commit
617bd6d364
2 changed files with 48 additions and 13 deletions
  1. 32 11
      models/data_manage/base_from_ly_data.go
  2. 16 2
      services/data/base_from_ly_index_service.go

+ 32 - 11
models/data_manage/base_from_ly_data.go

@@ -58,25 +58,46 @@ func GetLyDataListByIndexCodes(IndexCodes string) (items []string, err error) {
 	return
 }
 
-// GetLyDataLastByIndexCode 根据指标编码查询 返回ModifyTime最后一条数据
-func GetLyDataLastByIndexCode(indexCodes []string) (items []*BaseFromLyData, err error) {
+// GetLyLastUpdateTimeLastByIndexCode 根据指标编码查询 返回ModifyTime最后一条数据
+func GetLyLastUpdateTimeLastByIndexCode(indexCodes []string) (items []*BaseFromLyData, err error) {
 	o := orm.NewOrmUsingDB("data")
 
 	// 将 indexCodes 切片转换为逗号分隔的字符串
 	placeholders := strings.Repeat("?,", len(indexCodes)-1) + "?"
 
 	// 构造 SQL 查询
-	sql := `
-        SELECT t1.*
-        FROM base_from_ly_data t1
-        INNER JOIN (
-            SELECT index_code, MAX(modify_time) AS max_modify_time
+	sql := `SELECT index_code, MAX(modify_time) AS modify_time
             FROM base_from_ly_data
             WHERE index_code IN (` + placeholders + `)
-            GROUP BY index_code
-        ) t2 
-        ON t1.index_code = t2.index_code AND t1.modify_time = t2.max_modify_time
-    `
+            GROUP BY index_code`
+
+	// 执行 SQL 查询
+	_, err = o.Raw(sql, indexCodes).QueryRows(&items)
+	if err != nil {
+		return nil, err
+	}
+	return items, nil
+}
+
+// GetLyLastDataTimeByIndexCode 根据指标编码查询 返回data_time最后一条数据的value
+func GetLyLastDataTimeByIndexCode(indexCodes []string) (items []*BaseFromLyData, err error) {
+	o := orm.NewOrmUsingDB("data")
+
+	// 将 indexCodes 切片转换为逗号分隔的字符串
+	placeholders := strings.Repeat("?,", len(indexCodes)-1) + "?"
+
+	// 构造 SQL 查询
+	sql := `
+       SELECT t1.*
+       FROM base_from_ly_data t1
+       INNER JOIN (
+           SELECT index_code, MAX(data_time) AS data_time
+			FROM base_from_ly_data
+			WHERE index_code IN (` + placeholders + `)
+			GROUP BY index_code
+       ) t2 
+       ON t1.index_code = t2.index_code AND t1.data_time = t2.data_time
+   `
 
 	// 执行 SQL 查询
 	_, err = o.Raw(sql, indexCodes).QueryRows(&items)

+ 16 - 2
services/data/base_from_ly_index_service.go

@@ -34,8 +34,9 @@ func GetIndexPage(classifyId string, searchParam string, currentIndex, pageSize
 	for _, v := range lyIndexList {
 		indexCodes = append(indexCodes, v.IndexCode)
 	}
+
 	// 获取指标数据
-	lyIndexData, err := data_manage.GetLyDataLastByIndexCode(indexCodes)
+	lyIndexData, err := data_manage.GetLyLastUpdateTimeLastByIndexCode(indexCodes)
 	if err != nil {
 		return nil, err
 	}
@@ -44,13 +45,26 @@ func GetIndexPage(classifyId string, searchParam string, currentIndex, pageSize
 	for _, v := range lyIndexData {
 		lyIndexDataMap[v.IndexCode] = v
 	}
+
+	lyData, err := data_manage.GetLyLastDataTimeByIndexCode(indexCodes)
+	if err != nil {
+		return nil, err
+	}
+	// 将lyData转换为map
+	lyDataMap := make(map[string]*data_manage.BaseFromLyData)
+	for _, v := range lyData {
+		lyDataMap[v.IndexCode] = v
+	}
+
 	if len(lyIndexData) > 0 {
 		for _, v := range lyIndexList {
 			if lyIndexDataMap[v.IndexCode] != nil {
-				v.Value = lyIndexDataMap[v.IndexCode].Value
 				toYmd := utils.TimeFormatToYmd(lyIndexDataMap[v.IndexCode].ModifyTime)
 				v.ModifyTimeMax = toYmd
 			}
+			if lyDataMap[v.IndexCode] != nil {
+				v.Value = lyDataMap[v.IndexCode].Value
+			}
 		}
 	}