Browse Source

Merge branch 'bug/8391' into debug

Roc 4 days ago
parent
commit
4d486b036f
3 changed files with 49 additions and 40 deletions
  1. 0 1
      models/predict_edb_data_base.go
  2. 46 38
      models/predict_edb_info_rule.go
  3. 3 1
      services/base_from_python.go

+ 0 - 1
models/predict_edb_data_base.go

@@ -350,7 +350,6 @@ func (obj PredictStandardBase) GetSourceName() string {
 }
 
 func (obj PredictStandardBase) refresh(to *gorm.DB, edbInfo *EdbInfo, predictEdbConfAndDataList []*PredictEdbConfAndData, edbCode, startDate string) (latestDateStr string, latestValue float64, err error, errMsg string) {
-	fmt.Println(predictEdbConfAndDataList)
 	by, _ := json.Marshal(predictEdbConfAndDataList)
 	utils.FileLog.Info(string(by))
 	edbInfoId := edbInfo.EdbInfoId

+ 46 - 38
models/predict_edb_info_rule.go

@@ -747,56 +747,64 @@ func GetChartPredictEdbInfoDataListByRuleSeason(edbInfoId int, yearsList []int,
 		tmpHistoryVal := decimal.NewFromFloat(0) //往期的差值总和
 		tmpHistoryValNum := 0                    // 往期差值计算的数量
 
+		//fmt.Println(`填充后的数据长度:`, len(handleDataMap))
+
 		tmpLenAllDataList := len(allDataList)
 		tmpK := tmpLenAllDataList - 1    //上1期数据的下标
 		lastDayData := allDataList[tmpK] // 上1期的数据
-		//lastDayStr := lastDayData.DataTime
+		lastDayStr := lastDayData.DataTime
 		lastDayVal := lastDayData.Value
-		//lastDay, tmpErr := time.ParseInLocation(utils.FormatDate, lastDayStr, time.Local)
-		//if tmpErr != nil {
-		//	err = errors.New("获取上期日期转换失败:" + tmpErr.Error())
-		//}
-		//lastDay := currentDate
+		lastDay, tmpErr := time.ParseInLocation(utils.FormatDate, lastDayStr, time.Local)
+		if tmpErr != nil {
+			err = errors.New("获取上期日期转换失败:" + tmpErr.Error())
+			return
+		}
+
+		//fmt.Println("当前需要计算的日期:", currentDate.Format(utils.FormatDate))
 		for _, year := range yearsList {
 			moveDay := moveDayMap[year] //需要移动的天数
 			var tmpHistoryCurrentVal, tmpHistoryLastVal float64
 			var isFindHistoryCurrent, isFindHistoryLast bool //是否找到前几年的数据
 
 			//前几年当日的日期
-			tmpHistoryCurrentDate := currentDate.AddDate(year-currentDate.Year(), 0, -(moveDay + 1))
-			for i := 0; i <= 35; i++ { // 前后35天找数据,找到最近的值,先向后面找,再往前面找
-				tmpDate := tmpHistoryCurrentDate.AddDate(0, 0, i)
-				if val, ok := handleDataMap[tmpDate.Format(utils.FormatDate)]; ok {
-					tmpHistoryCurrentVal = val
-					isFindHistoryCurrent = true
-					break
-				} else {
-					tmpDate := tmpHistoryCurrentDate.AddDate(0, 0, -i)
-					if val, ok := handleDataMap[tmpDate.Format(utils.FormatDate)]; ok {
-						tmpHistoryCurrentVal = val
-						isFindHistoryCurrent = true
-						break
-					}
-				}
-			}
+			tmpHistoryCurrentDate := currentDate.AddDate(year-currentDate.Year(), 0, -moveDay)
+			tmpHistoryCurrentVal, isFindHistoryCurrent = handleDataMap[tmpHistoryCurrentDate.Format(utils.FormatDate)]
+			//for i := 0; i <= 35; i++ { // 前后35天找数据,找到最近的值,先向后面找,再往前面找(但是这个其实没有意义,因为这整个数据都通过插值法进行数据填充了, 2025-5-30 14:10:22)
+			//	tmpDate := tmpHistoryCurrentDate.AddDate(0, 0, i)
+			//	if val, ok := handleDataMap[tmpDate.Format(utils.FormatDate)]; ok {
+			//		tmpHistoryCurrentVal = val
+			//		isFindHistoryCurrent = true
+			//		break
+			//	} else {
+			//		tmpDate := tmpHistoryCurrentDate.AddDate(0, 0, -i)
+			//		if val, ok := handleDataMap[tmpDate.Format(utils.FormatDate)]; ok {
+			//			tmpHistoryCurrentVal = val
+			//			isFindHistoryCurrent = true
+			//			break
+			//		}
+			//	}
+			//}
 
 			//前几年上一期的日期
-			tmpHistoryLastDate := tmpHistoryCurrentDate.AddDate(0, 0, -1)
-			for i := 0; i <= 35; i++ { // 前后35天找数据,找到最近的值,先向后面找,再往前面找
-				tmpDate := tmpHistoryLastDate.AddDate(0, 0, i)
-				if val, ok := handleDataMap[tmpDate.Format(utils.FormatDate)]; ok {
-					tmpHistoryLastVal = val
-					isFindHistoryLast = true
-					break
-				} else {
-					tmpDate := tmpHistoryLastDate.AddDate(0, 0, -i)
-					if val, ok := handleDataMap[tmpDate.Format(utils.FormatDate)]; ok {
-						tmpHistoryLastVal = val
-						isFindHistoryLast = true
-						break
-					}
-				}
-			}
+			tmpHistoryLastDate := lastDay.AddDate(year-lastDay.Year(), 0, -moveDay)
+			tmpHistoryLastVal, isFindHistoryLast = handleDataMap[tmpHistoryLastDate.Format(utils.FormatDate)]
+			//for i := 0; i <= 35; i++ { // 前后35天找数据,找到最近的值,先向后面找,再往前面找(但是这个其实没有意义,因为这整个数据都通过插值法进行数据填充了, 2025-5-30 14:10:22)
+			//	tmpDate := tmpHistoryLastDate.AddDate(0, 0, i)
+			//	if val, ok := handleDataMap[tmpDate.Format(utils.FormatDate)]; ok {
+			//		tmpHistoryLastVal = val
+			//		isFindHistoryLast = true
+			//		break
+			//	} else {
+			//		tmpDate := tmpHistoryLastDate.AddDate(0, 0, -i)
+			//		if val, ok := handleDataMap[tmpDate.Format(utils.FormatDate)]; ok {
+			//			tmpHistoryLastVal = val
+			//			isFindHistoryLast = true
+			//			break
+			//		}
+			//	}
+			//}
+
+			//fmt.Println("第一期日期:", tmpHistoryCurrentDate.Format(utils.FormatDate), ";第二期的日期:", tmpHistoryLastDate.Format(utils.FormatDate))
 
 			// 如果两个日期对应的数据都找到了,那么计算两期的差值
 			if isFindHistoryCurrent && isFindHistoryLast {

+ 3 - 1
services/base_from_python.go

@@ -177,7 +177,9 @@ func getPythonFrontStr() string {
 	case `dm`:
 		codeStr = fmt.Sprintf("#!/usr/bin/python\n# -*- coding: UTF-8 -*-\nimport json\n\nimport dmPython\nimport pandas as pd\nfrom pymongo import MongoClient\nimport pytz\n\nproperties = %s\n\ndb = dmPython.connect(**properties)\ncursor = db.cursor()\npandas_fetch_all = pd.read_sql\n\n", utils.PYTHON_DM_CONNECT_PARAM)
 	default:
-		codeStr = fmt.Sprintf("#!/usr/bin/python\n# -*- coding: UTF-8 -*-\nimport json\n\nimport pymysql\nimport pandas as pd\nfrom pymongo import MongoClient\nimport pytz\n\nsql_config = {\n    'host': '%s',\n    'port': 3306,#主机号\n    'user': '%s',#账户名\n    'passwd': '%s',#密码\n    'db': '%s',\n    'charset': 'utf8mb4',\n    'cursorclass': pymysql.cursors.DictCursor\n}\n\ndb = pymysql.connect(**sql_config)\ndb.autocommit(1)\ncursor = db.cursor()\npandas_fetch_all = pd.read_sql\n\n", utils.PYTHON_MYSQL_HOST, utils.PYTHON_MYSQL_USER, utils.PYTHON_MYSQL_PASSWD, utils.PYTHON_MYSQL_DB)
+		//codeStr = fmt.Sprintf("#!/usr/bin/python\n# -*- coding: UTF-8 -*-\nimport json\n\nimport pymysql\nimport pandas as pd\nfrom pymongo import MongoClient\nimport pytz\n\nsql_config = {\n    'host': '%s',\n    'port': 3306,#主机号\n    'user': '%s',#账户名\n    'passwd': '%s',#密码\n    'db': '%s',\n    'charset': 'utf8mb4',\n    'cursorclass': pymysql.cursors.DictCursor\n}\n\ndb = pymysql.connect(**sql_config)\ndb.autocommit(1)\ncursor = db.cursor()\npandas_fetch_all = pd.read_sql\n\n", utils.PYTHON_MYSQL_HOST, utils.PYTHON_MYSQL_USER, utils.PYTHON_MYSQL_PASSWD, utils.PYTHON_MYSQL_DB)
+		//str := fmt.Sprintf("#!/usr/bin/python\n# -*- coding: UTF-8 -*-\nimport json\n\nimport pymysql\nimport pandas as pd\nfrom pymongo import MongoClient\nimport pytz\n\nsql_config = {\n    'host': '%s',\n    'port': 3306,#主机号\n    'user': '%s',#账户名\n    'passwd': '%s',#密码\n    'db': '%s',\n    'charset': 'utf8mb4',\n    'cursorclass': pymysql.cursors.DictCursor\n}\n\ndb = pymysql.connect(**sql_config)\ndb.autocommit(1)\ncursor = db.cursor()\npandas_fetch_all = pd.read_sql\n\n", utils.PYTHON_MYSQL_HOST, utils.PYTHON_MYSQL_USER, utils.PYTHON_MYSQL_PASSWD, utils.PYTHON_MYSQL_DB)
+		codeStr = fmt.Sprintf("#!/usr/bin/python\n# -*- coding: UTF-8 -*-\nimport json\n\nimport pandas as pd\nfrom sqlalchemy import create_engine\nfrom urllib.parse import quote_plus\nimport pytz\n\nencoded_host = quote_plus(\"%s\")\nencoded_user = quote_plus(\"%s\")\nencoded_password = quote_plus(\"%s\")\nencoded_database = quote_plus(\"%s\")\n\ndb = create_engine(f'mysql+mysqlconnector://{encoded_user}:{encoded_password}@{encoded_host}:3306/{encoded_database}')\npandas_fetch_all = pd.read_sql_query\n\n", utils.PYTHON_MYSQL_HOST, utils.PYTHON_MYSQL_USER, utils.PYTHON_MYSQL_PASSWD, utils.PYTHON_MYSQL_DB)
 
 	}