Browse Source

Merge branch 'refs/heads/eta_2.0.8_ly_0804@guomengyuan' into debug

gmy 8 months ago
parent
commit
d12878b0ab

+ 1 - 1
controllers/data_manage/base_from_ly_index_controller.go

@@ -139,7 +139,7 @@ func (this *BaseFromLyIndexController) LyIndexDataList() {
 // @Title 新增加入到指标库校验
 // @Description 新增加入到指标库校验
 // @Param   req    body   data_manage.BaseFromLyIndexBatchAddCheckReq     true        "请求参数"
-// @Success 200 string "操作成功"
+// @Success 200 {object} []data_manage.IndexCheckData
 // @router /ly/index/add/validate [post]
 func (this *BaseFromLyIndexController) LyIndexAddValidate() {
 	br := new(models.BaseResponse).Init()

+ 20 - 11
models/data_manage/base_from_ly_data.go

@@ -3,9 +3,9 @@
 package data_manage
 
 import (
-	"errors"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
+	"strings"
 )
 
 type BaseFromLyData struct {
@@ -52,20 +52,29 @@ func GetBaseFromLyDataByIndexCode(indexCode string) (items []*BaseFromLyData, er
 }
 
 // GetLyDataLastByIndexCode 根据指标编码查询 返回ModifyTime最后一条数据
-func GetLyDataLastByIndexCode(indexCodes []string) (item []*BaseFromLyData, err error) {
+func GetLyDataLastByIndexCode(indexCodes []string) (items []*BaseFromLyData, err error) {
 	o := orm.NewOrmUsingDB("data")
-	qs := o.QueryTable("base_from_ly_data")
 
-	// 使用 Filter 来构造 IN 查询
-	qs = qs.Filter("index_code__in", indexCodes)
+	// 将 indexCodes 切片转换为逗号分隔的字符串
+	placeholders := strings.Repeat("?,", len(indexCodes)-1) + "?"
 
-	// 使用 OrderBy 和 Limit 来获取最新的一条数据
-	err = qs.OrderBy("-modify_time").Limit(1).One(&item)
+	// 构造 SQL 查询
+	sql := `
+        SELECT t1.*
+        FROM base_from_ly_data t1
+        INNER JOIN (
+            SELECT index_code, MAX(modify_time) AS max_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
+    `
+
+	// 执行 SQL 查询
+	_, err = o.Raw(sql, indexCodes).QueryRows(&items)
 	if err != nil {
-		if errors.Is(err, orm.ErrNoRows) {
-			return nil, nil // 返回 nil 表示没有找到数据
-		}
 		return nil, err
 	}
-	return
+	return items, nil
 }

+ 17 - 4
models/data_manage/base_from_ly_index.go

@@ -58,6 +58,16 @@ type BaseFromLyIndexAndData struct {
 	Value                float64 `orm:"column(value)" description:"数据值"`
 }
 
+type IndexCheckData struct {
+	IndexCode  string `orm:"column(index_code)" description:"指标编码"`
+	IndexName  string `orm:"column(index_name)" description:"指标名称"`
+	Frequency  string `orm:"column(frequency)" description:"频度"`
+	Unit       string `orm:"column(unit)" description:"单位"`
+	EdbInfoId  int    `json:"edb_info_id" description:"指标库主键id"`
+	UniqueCode string `json:"unique_code" description:"指标库唯一编码"`
+	ClassifyId int    `json:"classify_id" description:"分类id"`
+}
+
 // GetLyIndexByClassifyIds 通过分类ids查询指标列表
 func GetLyIndexByClassifyIds(classifyIds []int) (items []*BaseFromLyIndex, err error) {
 	o := orm.NewOrmUsingDB("data")
@@ -136,13 +146,16 @@ func GetLyIndexPage(classifyId string, searchParam string, currentIndex, pageSiz
 // UpdateLyIndexEdbExist 指标库标记已添加
 func UpdateLyIndexEdbExist(indexCode string) (err error) {
 	o := orm.NewOrmUsingDB("data")
-	lyIndex := BaseFromLyIndex{IndexCode: indexCode}
-	lyIndex.EdbExist = 1
-	_, err = o.Update(&lyIndex, "edb_exist")
+
+	// 构建 SQL 语句
+	sql := `UPDATE base_from_ly_index SET edb_exist = 1 WHERE index_code = ?`
+
+	// 执行 SQL 语句
+	_, err = o.Raw(sql, indexCode).Exec()
 	if err != nil {
 		return err
 	}
-	return
+	return nil
 }
 
 // GetLyIndexList 根据传入条件查询指标列表

+ 20 - 14
services/data/base_from_ly_index_service.go

@@ -39,17 +39,19 @@ func GetIndexPage(classifyId string, searchParam string, currentIndex, pageSize
 	if err != nil {
 		return nil, err
 	}
+	// 将lyIndexData转换为map
+	lyIndexDataMap := make(map[string]*data_manage.BaseFromLyData)
+	for _, v := range lyIndexData {
+		lyIndexDataMap[v.IndexCode] = v
+	}
 	if len(lyIndexData) > 0 {
 		for _, v := range lyIndexList {
-			for _, data := range lyIndexData {
-				if v.IndexCode == data.IndexCode {
-					v.Value = data.Value
-					v.ModifyTimeMax = data.ModifyTime
-					break
-				}
+			if lyIndexDataMap[v.IndexCode] != nil {
+				v.Value = lyIndexDataMap[v.IndexCode].Value
+				toYmd := utils.TimeFormatToYmd(lyIndexDataMap[v.IndexCode].ModifyTime)
+				v.ModifyTimeMax = toYmd
 			}
 		}
-
 	}
 
 	lyIndexPage.List = lyIndexList
@@ -83,19 +85,23 @@ func GetIndexDataPage(indexId, startSize, pageSize int) (*data_manage.BaseFromLy
 }
 
 // LyIndexAddValidate 指标添加校验
-func LyIndexAddValidate(indexCodes []string) (*[]data_manage.BaseFromLyIndex, error) {
+func LyIndexAddValidate(indexCodes []string) (*[]data_manage.IndexCheckData, error) {
+	// 根据指标编码获取指标库 指标信息
 	edbInfos, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_LY, indexCodes)
 	if err != nil {
 		return nil, err
 	}
-	var respList []data_manage.BaseFromLyIndex
+	var respList []data_manage.IndexCheckData
 	if len(edbInfos) > 0 {
 		for _, ebdInfo := range edbInfos {
-			respList = append(respList, data_manage.BaseFromLyIndex{
-				IndexCode: ebdInfo.EdbCode,
-				IndexName: ebdInfo.EdbName,
-				Unit:      ebdInfo.Unit,
-				Frequency: ebdInfo.Frequency,
+			respList = append(respList, data_manage.IndexCheckData{
+				IndexCode:  ebdInfo.EdbCode,
+				IndexName:  ebdInfo.EdbName,
+				Unit:       ebdInfo.Unit,
+				Frequency:  ebdInfo.Frequency,
+				EdbInfoId:  ebdInfo.EdbInfoId,
+				ClassifyId: ebdInfo.ClassifyId,
+				UniqueCode: ebdInfo.UniqueCode,
 			})
 		}
 	}

+ 11 - 0
utils/common.go

@@ -865,6 +865,17 @@ func ConvertNumToCny(num float64) (str string, err error) {
 	return
 }
 
+// TimeFormatToYmd 时间格式转化 yyyy-MM-dd HH:mm:ss --> yyyy-MM-dd
+func TimeFormatToYmd(strTime string) string {
+	var Ymd string
+	var resultTime = StrTimeToTime(strTime)
+	year := resultTime.Year()
+	month := resultTime.Format("01")
+	day1 := resultTime.Day()
+	Ymd = strconv.Itoa(year) + "-" + month + "-" + strconv.Itoa(day1)
+	return Ymd
+}
+
 // GetNowWeekMonday 获取本周周一的时间
 func GetNowWeekMonday() time.Time {
 	offset := int(time.Monday - time.Now().Weekday())