Browse Source

优化数据刷新

longyu 2 years ago
parent
commit
b83f51fbab

+ 4 - 2
models/edb_data_calculate_hbz.go

@@ -348,7 +348,9 @@ func RefreshAllCalculateHbz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 							addSql += GetAddSql(edbInfoIdStr, edbCode, currentItem.DataTime, timestampStr, val)
 							isAdd = true
 						} else {
-							if existVal != val {
+							existValDecimal, err := decimal.NewFromString(existVal)
+							existStr := existValDecimal.String()
+							if existStr != val {
 								sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 								sql = fmt.Sprintf(sql, dataTableName)
 								_, err = o.Raw(sql, val, edbInfoId, currentItem.DataTime).Exec()
@@ -381,6 +383,6 @@ func HbzDiv(current, pre float64) string {
 	currentVal := decimal.NewFromFloat(current)
 	preVal := decimal.NewFromFloat(pre)
 	val, _ := currentVal.Sub(preVal).Div(preVal).Float64()
-	valStr := utils.SubFloatToString(val, 4)
+	valStr := decimal.NewFromFloat(val).RoundCeil(4).String() //utils.SubFloatToString(val, 4)
 	return valStr
 }

+ 4 - 2
models/edb_data_calculate_hcz.go

@@ -364,7 +364,9 @@ func RefreshAllCalculateHcz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 							addSql += GetAddSql(edbInfoIdStr, edbCode, currentItem.DataTime, timestampStr, val)
 							isAdd = true
 						} else {
-							if existVal != val {
+							existValDecimal, err := decimal.NewFromString(existVal)
+							existStr := existValDecimal.String()
+							if existStr != val {
 								sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 								sql = fmt.Sprintf(sql, dataTableName)
 								_, err = o.Raw(sql, val, edbInfoId, currentItem.DataTime).Exec()
@@ -397,6 +399,6 @@ func HczDiv(current, pre float64) string {
 	currentVal := decimal.NewFromFloat(current)
 	preVal := decimal.NewFromFloat(pre)
 	val, _ := currentVal.Sub(preVal).Float64()
-	valStr := utils.SubFloatToString(val, 4)
+	valStr := decimal.NewFromFloat(val).RoundCeil(4).String()//utils.SubFloatToString(val, 4)
 	return valStr
 }

+ 12 - 10
models/edb_data_calculate_nszydbpjjs.go

@@ -338,13 +338,13 @@ func RefreshAllCalculateNszydpjjs(edbInfoId, source, formulaInt int, fromEdbInfo
 	condition += " AND edb_info_id=? "
 	pars = append(pars, edbInfoId)
 
-	existDataList, err := GetEdbDataListAll(condition, pars, source, 0)
+	existDataList, err := GetEdbDataListAllV1(condition, pars, source, 0)
 	if err != nil {
 		fmt.Println("existDataList GetEdbDataListAll Err:" + err.Error())
 		return err
 	}
 
-	existDataMap := make(map[string]*EdbInfoSearchData)
+	existDataMap := make(map[string]*EdbInfoSearchDataV1)
 	for _, v := range existDataList {
 		existDataMap[v.DataTime] = v
 	}
@@ -358,14 +358,14 @@ func RefreshAllCalculateNszydpjjs(edbInfoId, source, formulaInt int, fromEdbInfo
 	fromPars = append(fromPars, startDate)
 
 	fmt.Println("fromPars:", fromPars)
-	fromDataList, err := GetEdbDataListAll(fromCondition, fromPars, fromEdbInfo.Source, 0)
+	fromDataList, err := GetEdbDataListAllV1(fromCondition, fromPars, fromEdbInfo.Source, 0)
 	if err != nil {
 		fmt.Println("from GetEdbDataListAll Err:" + err.Error())
 		return err
 	}
 
 	var fromDateArr []string
-	fromDataMap := make(map[string]*EdbInfoSearchData)
+	fromDataMap := make(map[string]*EdbInfoSearchDataV1)
 	for _, v := range fromDataList {
 		fromDateArr = append(fromDateArr, v.DataTime)
 		fromDataMap[v.DataTime] = v
@@ -378,7 +378,7 @@ func RefreshAllCalculateNszydpjjs(edbInfoId, source, formulaInt int, fromEdbInfo
 	existAddDataMap := make(map[string]string)
 	for ak, av := range fromDateArr {
 		//处理第一个值
-		var valArr []float64
+		var valArr []string
 		if findItem, ok := fromDataMap[av]; ok {
 			valArr = append(valArr, findItem.Value)
 		} else {
@@ -403,13 +403,13 @@ func RefreshAllCalculateNszydpjjs(edbInfoId, source, formulaInt int, fromEdbInfo
 		//var totalVal float64
 		totalVal := decimal.NewFromFloat(0.00)
 		for _, v := range valArr {
-			newDecimal := decimal.NewFromFloat(v)
+			newDecimal, _ := decimal.NewFromString(v)
 			totalVal = totalVal.Add(newDecimal)
 		}
 		af := totalVal //decimal.NewFromFloat(totalVal)
 		bf := decimal.NewFromFloat(float64(valArrLen))
 		val, _ := af.Div(bf).Float64()
-		valStr := utils.SubFloatToString(val, 4)
+		valStr := decimal.NewFromFloat(val).RoundCeil(4).String()
 
 		if existVal, existOk := existDataMap[av]; !existOk {
 			currentDate, err := time.Parse(utils.FormatDate, av)
@@ -424,11 +424,13 @@ func RefreshAllCalculateNszydpjjs(edbInfoId, source, formulaInt int, fromEdbInfo
 			}
 			existAddDataMap[av] = av
 		} else {
-			saveValue := utils.SubFloatToString(existVal.Value, 30)
-			if saveValue != valStr {
+			existValDecimal, err := decimal.NewFromString(existVal.Value)
+			existStr := existValDecimal.String()
+			fmt.Println(existStr, valStr, av)
+			if existStr != valStr {
 				sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 				sql = fmt.Sprintf(sql, dataTableName)
-				_, err = o.Raw(sql, val, edbInfoId, av).Exec()
+				_, err = o.Raw(sql, valStr, edbInfoId, av).Exec()
 				if err != nil {
 					return err
 				}

+ 20 - 7
models/edb_data_calculate_tbz.go

@@ -552,6 +552,7 @@ func RefreshAllCalculateTbz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 				timestamp := currentDate.UnixNano() / 1e6
 				timestampStr := fmt.Sprintf("%d", timestamp)
 				val := TbzDiv(currentItem.Value, findItem.Value)
+
 				if existVal, ok := existDataMap[av]; !ok {
 					if _, existOk := existAddDataMap[av]; !existOk {
 						addSql += GetAddSql(edbInfoIdStr, edbCode, av, timestampStr, val)
@@ -559,7 +560,9 @@ func RefreshAllCalculateTbz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 					}
 					existAddDataMap[av] = av
 				} else {
-					if existVal != val {
+					existValDecimal, err := decimal.NewFromString(existVal)
+					existStr := existValDecimal.String()
+					if existStr != val {
 						sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 						sql = fmt.Sprintf(sql, dataTableName)
 						_, err = o.Raw(sql, val, edbInfoId, av).Exec()
@@ -586,7 +589,9 @@ func RefreshAllCalculateTbz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 								}
 								existAddDataMap[av] = av
 							} else {
-								if existVal != val {
+								existValDecimal, err := decimal.NewFromString(existVal)
+								existStr := existValDecimal.String()
+								if existStr != val {
 									sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 									sql = fmt.Sprintf(sql, dataTableName)
 									_, err = o.Raw(sql, val, edbInfoId, av).Exec()
@@ -611,7 +616,9 @@ func RefreshAllCalculateTbz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 									}
 									existAddDataMap[av] = av
 								} else {
-									if existVal != val {
+									existValDecimal, err := decimal.NewFromString(existVal)
+									existStr := existValDecimal.String()
+									if existStr != val {
 										sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 										sql = fmt.Sprintf(sql, dataTableName)
 										_, err = o.Raw(sql, val, edbInfoId, av).Exec()
@@ -637,7 +644,9 @@ func RefreshAllCalculateTbz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 							}
 							existAddDataMap[av] = av
 						} else {
-							if existVal != val {
+							existValDecimal, err := decimal.NewFromString(existVal)
+							existStr := existValDecimal.String()
+							if existStr != val {
 								sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 								sql = fmt.Sprintf(sql, dataTableName)
 								_, err = o.Raw(sql, val, edbInfoId, av).Exec()
@@ -672,7 +681,9 @@ func RefreshAllCalculateTbz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 								}
 								existAddDataMap[av] = av
 							} else {
-								if existVal != val {
+								existValDecimal, err := decimal.NewFromString(existVal)
+								existStr := existValDecimal.String()
+								if existStr != val {
 									sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 									sql = fmt.Sprintf(sql, dataTableName)
 									_, err = o.Raw(sql, val, edbInfoId, av).Exec()
@@ -699,7 +710,9 @@ func RefreshAllCalculateTbz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 									}
 									existAddDataMap[av] = av
 								} else {
-									if existVal != val {
+									existValDecimal, err := decimal.NewFromString(existVal)
+									existStr := existValDecimal.String()
+									if existStr != val {
 										sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 										sql = fmt.Sprintf(sql, dataTableName)
 										_, err = o.Raw(sql, val, edbInfoId, av).Exec()
@@ -733,7 +746,7 @@ func TbzDiv(a, b float64) string {
 		bf := decimal.NewFromFloat(b)
 		val, _ := af.Div(bf).Float64()
 		val = val - 1
-		valStr = utils.SubFloatToString(val, 4)
+		valStr = decimal.NewFromFloat(val).RoundCeil(4).String()
 	} else {
 		valStr = "0"
 	}

+ 20 - 7
models/edb_data_calculate_tcz.go

@@ -566,7 +566,9 @@ func RefreshAllCalculateTcz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 					}
 					existAddDataMap[av] = av
 				} else {
-					if existVal != val {
+					existValDecimal, err := decimal.NewFromString(existVal)
+					existStr := existValDecimal.String()
+					if existStr != val {
 						sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 						sql = fmt.Sprintf(sql, dataTableName)
 						_, err = o.Raw(sql, val, edbInfoId, av).Exec()
@@ -594,7 +596,9 @@ func RefreshAllCalculateTcz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 								}
 								existAddDataMap[av] = av
 							} else {
-								if existVal != val {
+								existValDecimal, err := decimal.NewFromString(existVal)
+								existStr := existValDecimal.String()
+								if existStr != val {
 									sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 									sql = fmt.Sprintf(sql, dataTableName)
 									_, err = o.Raw(sql, val, edbInfoId, av).Exec()
@@ -619,7 +623,9 @@ func RefreshAllCalculateTcz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 									}
 									existAddDataMap[av] = av
 								} else {
-									if existVal != val {
+									existValDecimal, err := decimal.NewFromString(existVal)
+									existStr := existValDecimal.String()
+									if existStr != val {
 										sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 										sql = fmt.Sprintf(sql, dataTableName)
 										_, err = o.Raw(sql, val, edbInfoId, av).Exec()
@@ -645,7 +651,9 @@ func RefreshAllCalculateTcz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 							}
 							existAddDataMap[av] = av
 						} else {
-							if existVal != val {
+							existValDecimal, err := decimal.NewFromString(existVal)
+							existStr := existValDecimal.String()
+							if existStr != val {
 								sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 								sql = fmt.Sprintf(sql, dataTableName)
 								_, err = o.Raw(sql, val, edbInfoId, av).Exec()
@@ -672,7 +680,9 @@ func RefreshAllCalculateTcz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 								}
 								existAddDataMap[av] = av
 							} else {
-								if existVal != val {
+								existValDecimal, err := decimal.NewFromString(existVal)
+								existStr := existValDecimal.String()
+								if existStr != val {
 									sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 									sql = fmt.Sprintf(sql, dataTableName)
 									_, err = o.Raw(sql, val, edbInfoId, av).Exec()
@@ -697,7 +707,9 @@ func RefreshAllCalculateTcz(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode
 									}
 									existAddDataMap[av] = av
 								} else {
-									if existVal != val {
+									existValDecimal, err := decimal.NewFromString(existVal)
+									existStr := existValDecimal.String()
+									if existStr != val {
 										sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 										sql = fmt.Sprintf(sql, dataTableName)
 										_, err = o.Raw(sql, val, edbInfoId, av).Exec()
@@ -730,6 +742,7 @@ func TczSub(a, b float64) string {
 	fmt.Println(af)
 	bf := decimal.NewFromFloat(b)
 	val, _ := af.Sub(bf).Float64()
-	valStr := utils.SubFloatToString(val, 4)
+	//valStr := utils.SubFloatToString(val, 4)
+	valStr := decimal.NewFromFloat(val).RoundCeil(4).String()
 	return valStr
 }

+ 4 - 2
models/edb_data_calculate_time_shift.go

@@ -398,12 +398,14 @@ func RefreshAllCalculateTimeShift(edbInfoId, source, formulaInt, moveType int, f
 
 			timestamp := newDate.UnixNano() / 1e6
 			timestampStr := fmt.Sprintf("%d", timestamp)
-			valStr := decimal.NewFromFloat(currentItem.Value).String()
+			valStr := decimal.NewFromFloat(currentItem.Value).RoundCeil(4).String()
 			if existVal, ok := existDataMap[newDate.Format(utils.FormatDate)]; !ok {
 				isAdd = true
 				addSql += GetAddSql(edbInfoIdStr, edbCode, newDate.Format(utils.FormatDate), timestampStr, valStr)
 			} else {
-				if existVal != valStr {
+				existValDecimal, err := decimal.NewFromString(existVal)
+				existStr := existValDecimal.String()
+				if existStr != valStr {
 					sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
 					sql = fmt.Sprintf(sql, dataTableName)
 					_, err = o.Raw(sql, valStr, edbInfoId, newDate.Format(utils.FormatDate)).Exec()

+ 27 - 0
models/edb_info.go

@@ -207,3 +207,30 @@ func GetEdbInfoCalculateCountByCondition(condition string, pars []interface{}) (
 	err = o.Raw(sql, pars).QueryRow(&count)
 	return
 }
+
+//优化版本-处理数据精度问题
+type EdbInfoSearchDataV1 struct {
+	EdbDataId int    `description:"数据ID"`
+	DataTime  string `description:"数据日期"`
+	Value     string `description:"数据"`
+}
+
+//优化版本-处理数据精度问题
+func GetEdbDataListAllV1(condition string, pars []interface{}, source, order int) (item []*EdbInfoSearchDataV1, err error) {
+	o := orm.NewOrm()
+	sql := ``
+	tableName := GetEdbDataTableName(source)
+	sql = ` SELECT * FROM %s WHERE 1=1 `
+	sql = fmt.Sprintf(sql, tableName)
+
+	if condition != "" {
+		sql += condition
+	}
+	if order == 1 {
+		sql += ` ORDER BY data_time ASC `
+	} else {
+		sql += ` ORDER BY data_time DESC `
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&item)
+	return
+}

+ 6 - 0
utils/common.go

@@ -21,6 +21,7 @@ import (
 	"os/exec"
 	"path"
 	"regexp"
+	"runtime"
 	"strconv"
 	"strings"
 	"time"
@@ -1058,3 +1059,8 @@ func GetLocalIP() (ip string, err error) {
 	}
 	return
 }
+
+func PrintLog(params ...string) {
+	_, file, line, ok := runtime.Caller(1)
+	fmt.Println(file, line, ok, params)
+}