kobe6258 1 week ago
parent
commit
db8dfee4e1

+ 3 - 2
models/base_from_rzd_index.go

@@ -3,6 +3,7 @@
 package models
 
 import (
+	"github.com/shopspring/decimal"
 	"time"
 )
 
@@ -20,7 +21,7 @@ type BaseFromRzdIndex struct {
 type IndexInfo struct {
 	StartDate   time.Time
 	EndDate     time.Time
-	LatestValue float64
+	LatestValue decimal.Decimal
 	IndexName   string
 	IndexCode   string
 	Frequency   string
@@ -31,5 +32,5 @@ type IndexInfo struct {
 
 type IndexData struct {
 	DataTime time.Time
-	Value    float64
+	Value    decimal.Decimal
 }

+ 1 - 2
services/ruizide/data_processor.go

@@ -459,12 +459,11 @@ func FileResolverV2() error {
 	RzdClassifyMap = make(map[string]*models.BaseFromRzdClassify)
 	//更新睿咨得分类Map
 	for _, classify := range rzdClassifyList {
-		RzdClassifyMap[classify.ClassifyName] = &classify
+		RzdClassifyMap[classify.ClassifyName] = classify
 	}
 	for _, tableName := range tableNameList {
 		rzdProcessor, processorErr := GetRZDProcessor(tableName)
 		if processorErr != nil {
-			//fmt.Printf("获取睿咨得数据处理器: %v", processorErr)
 			utils.FileLog.Error("获取睿咨得数据处理器:", processorErr.Error())
 			continue
 		}

+ 13 - 10
services/ruizide/oil_demand_signals_weekly_report_processor.go

@@ -5,11 +5,11 @@ import (
 	"eta/eta_data_analysis/models"
 	"eta/eta_data_analysis/utils"
 	"fmt"
+	"github.com/shopspring/decimal"
 	"github.com/xuri/excelize/v2"
 	"os"
 	"path/filepath"
 	"regexp"
-	"strconv"
 	"strings"
 )
 
@@ -185,10 +185,7 @@ func (p *OilDemandSignalsWeeklyReportProcessor) Process(tableName string) (err e
 			}
 			// 匹配非数字字符
 			re := regexp.MustCompile(`^\d*\.?\d*\s*$`)
-			if !re.MatchString(strings.TrimSpace(rowData[sheetConfig.DataOneRow])) || !re.MatchString(strings.TrimSpace(rowData[sheetConfig.DataTwoRow])) {
-				utils.FileLog.Error("数据格式错误:", fmt.Sprintf("%v", rowData))
-				continue
-			}
+
 			classifyId := classifyIds[sheetName]
 			// step_2: 指标
 			// 指标名称
@@ -203,10 +200,11 @@ func (p *OilDemandSignalsWeeklyReportProcessor) Process(tableName string) (err e
 				utils.FileLog.Error(fmt.Sprintf("转换时间数据失败,index_code:%s,time_value:%s err:%v", indexCodeOne, dataTime, convertErr))
 				continue
 			}
-			if rowData[sheetConfig.DataOneRow] != "" {
-				valueOne, parseErr := strconv.ParseFloat(strings.ReplaceAll(rowData[sheetConfig.DataOneRow], ",", ""), 64)
+			if rowData[sheetConfig.DataOneRow] != "" && re.MatchString(strings.TrimSpace(rowData[sheetConfig.DataOneRow])) {
+				valueOne, parseErr := decimal.NewFromString(strings.ReplaceAll(rowData[sheetConfig.DataOneRow], ",", ""))
 				if parseErr != nil {
 					utils.FileLog.Error(fmt.Sprintf("转换data数据失败,index_code:%s,data_value:%s err:%v", indexCodeOne, rowData[sheetConfig.DataOneRow], err))
+					continue
 				} else {
 					if index, ok := indexMap[indexCodeOne]; ok {
 						if index.StartDate.After(date) {
@@ -240,10 +238,11 @@ func (p *OilDemandSignalsWeeklyReportProcessor) Process(tableName string) (err e
 					}
 				}
 			}
-			if rowData[sheetConfig.DataTwoRow] != "" {
-				valueTwo, parseErr := strconv.ParseFloat(strings.ReplaceAll(rowData[sheetConfig.DataTwoRow], ",", ""), 64)
+			if rowData[sheetConfig.DataTwoRow] != "" && re.MatchString(strings.TrimSpace(rowData[sheetConfig.DataTwoRow])) {
+				valueTwo, parseErr := decimal.NewFromString(strings.ReplaceAll(rowData[sheetConfig.DataTwoRow], ",", ""))
 				if parseErr != nil {
 					utils.FileLog.Error(fmt.Sprintf("转换data数据失败,index_code:%s,data_value:%s err:%v", indexCodeTwo, rowData[sheetConfig.DataTwoRow], err))
+					continue
 				} else {
 					if index, ok := indexMap[indexCodeTwo]; ok {
 						if index.StartDate.After(date) {
@@ -302,7 +301,11 @@ func (p *OilDemandSignalsWeeklyReportProcessor) Process(tableName string) (err e
 	}
 	return
 }
-
+func isValidNumber(s string) bool {
+	// 匹配整数或浮点数(支持正负号)
+	re := regexp.MustCompile(`^[-+]?\d*\.?\d+$`)
+	return re.MatchString(s)
+}
 func chunkIndexData(index *models.IndexInfo, rzdBatchSize int) (pars []models.IndexInfo) {
 	var chunks int
 	total := len(index.DataList)

+ 2 - 2
services/ruizide/processor_business_logic.go

@@ -3472,14 +3472,14 @@ func dealClassify(tableName string, sheetNames []string) (classifyList map[strin
 }
 
 // 处理分类
-func getRzdClassifyList() (list []models.BaseFromRzdClassify, err error) {
+func getRzdClassifyList() (list []*models.BaseFromRzdClassify, err error) {
 	//查询睿咨得分类
 	postEdbLib, httpErr := httpRequestFill(nil, utils.GET_RZD_CLASSIFY)
 	if httpErr != nil {
 		err = fmt.Errorf("获取睿咨得分类数据失败: %v", httpErr)
 		return
 	}
-	var requestResponse models.RequestResponse[[]models.BaseFromRzdClassify]
+	var requestResponse models.RequestResponse[[]*models.BaseFromRzdClassify]
 	jsonErr := json.Unmarshal(postEdbLib, &requestResponse)
 	if jsonErr != nil {
 		err = fmt.Errorf("获取睿咨得分类数据失败,解析JSON数据失败: %v", jsonErr)

+ 3 - 3
utils/constants.go

@@ -268,13 +268,13 @@ const (
 	GET_EDB_INFO_BY_INDEX_CODE                        = "/ly/get/edb/info/by/index/code"                        // 根据指标code获取指标信息
 	ADD_BATCH_LY_EDB_DATA                             = "/ly/add/batch/ly/edb/data"                             // 批量增加粮油指标库数据
 	ADD_RZD_INDEX                                     = "/rzd/add/rzd/index"                                    // 新增睿咨得指标
-	ADD_BATCH_RZD_DATA                                = "/rzd/add/batch/rzd/data"                               // 新增数据源指标数据列表
+	ADD_BATCH_RZD_DATA                                = "rzd/add/batch/rzd/data"                                // 新增数据源指标数据列表
 	GET_RZD_INDEX_DATA_BY_CODE_AND_TIME               = "/rzd/get/rzd/index/data/by/code/and/time"              // 根据指标编码和日期获取指标数据
 	GET_EDB_RZD_DATA_BY_CODE_AND_TIME                 = "/rzd/get/edb/rzd/data/by/code/and/time"                // 根据指标编码和日期获取指标数据
 	GET_RZD_INDEX_BY_CODE                             = "/rzd/get/rzd/index/by/code"                            // 根据指标编码获取指标
 	GET_RZD_CLASSIFY_BY_NAME                          = "/rzd/get/rzd/classify/by/name"                         // 根据分类名称查询分类
-	GET_RZD_CLASSIFY                                  = "/rzd/get/rzd/classify"                                 // 睿咨得查询分类
-	BATCH_ADD_RZD_CLASSYFY                            = "/rzd/add/rzd/batch_add_classify"                       //批量增加睿咨得分类
+	GET_RZD_CLASSIFY                                  = "rzd/get/rzd/classify"                                  // 睿咨得查询分类
+	BATCH_ADD_RZD_CLASSYFY                            = "rzd/add/rzd/batch_add_classify"                        //批量增加睿咨得分类
 	ADD_RZD_CLASSIFY                                  = "/rzd/add/rzd/classify"                                 // 新增睿咨得分类
 	ADD_BATCH_RZD_EDB_DATA                            = "/rzd/add/batch/rzd/edb/data"                           // 批量增加指标库指标数据
 	GET_RZD_EDB_INFO_BY_INDEX_CODE                    = "/rzd/get/rzd/edb/info/by/code"                         // 根据指标code获取指标信息