فهرست منبع

fix:累计值转月,刷新数据时,如果1月份没有数据,那么采用2月份的数据去计算

Roc 3 سال پیش
والد
کامیت
f7a6f26ecb
1فایلهای تغییر یافته به همراه69 افزوده شده و 20 حذف شده
  1. 69 20
      models/edb_data_calculate_ljzzy.go

+ 69 - 20
models/edb_data_calculate_ljzzy.go

@@ -526,6 +526,24 @@ func RefreshAllCalculateLjzzy(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCo
 							val, _ = a.Div(b).Float64()
 						}
 						if i == 2 {
+							//1月无值:1月=2月/2
+							{
+								date = strconv.Itoa(yk) + "-01-31"
+								a := decimal.NewFromFloat(dataTwoItem.Value)
+								b := decimal.NewFromFloat(2.0)
+								val, _ = a.Div(b).Float64()
+
+								tmpSql, newAdd, tmpErr := calculateLjzzy(edbInfoId, date, edbInfoIdStr, edbCode, dataTableName, addSql, val, dataMap, existDataMap, o)
+								if !isAdd {
+									isAdd = newAdd
+								}
+								addSql = tmpSql
+								if tmpErr != nil {
+									return tmpErr
+								}
+							}
+							//end 1月无值
+
 							date = dataCurrentItem.DataTime
 							a := decimal.NewFromFloat(dataTwoItem.Value)
 							b := decimal.NewFromFloat(2.0)
@@ -544,26 +562,34 @@ func RefreshAllCalculateLjzzy(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCo
 				}
 			}
 			if date != "" {
-				saveValue := utils.SubFloatToString(val, 4)
-				//判断数据是否存在
-				if existVal, ok := dataMap[date]; !ok {
-					dataTime, _ := time.Parse(utils.FormatDate, date)
-					timestamp := dataTime.UnixNano() / 1e6
-					timeStr := fmt.Sprintf("%d", timestamp)
-					if _, existOk := existDataMap[date]; !existOk {
-						addSql += GetAddSql(edbInfoIdStr, edbCode, date, timeStr, saveValue)
-						isAdd = true
-					}
-					existDataMap[date] = date
-				} else {
-					if existVal != saveValue {
-						sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
-						sql = fmt.Sprintf(sql, dataTableName)
-						_, err = o.Raw(sql, saveValue, edbInfoId, date).Exec()
-						if err != nil {
-							return err
-						}
-					}
+				//saveValue := utils.SubFloatToString(val, 4)
+				////判断数据是否存在
+				//if existVal, ok := dataMap[date]; !ok {
+				//	dataTime, _ := time.Parse(utils.FormatDate, date)
+				//	timestamp := dataTime.UnixNano() / 1e6
+				//	timeStr := fmt.Sprintf("%d", timestamp)
+				//	if _, existOk := existDataMap[date]; !existOk {
+				//		addSql += GetAddSql(edbInfoIdStr, edbCode, date, timeStr, saveValue)
+				//		isAdd = true
+				//	}
+				//	existDataMap[date] = date
+				//} else {
+				//	if existVal != saveValue {
+				//		sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+				//		sql = fmt.Sprintf(sql, dataTableName)
+				//		_, err = o.Raw(sql, saveValue, edbInfoId, date).Exec()
+				//		if err != nil {
+				//			return err
+				//		}
+				//	}
+				//}
+				tmpSql, newAdd, tmpErr := calculateLjzzy(edbInfoId, date, edbInfoIdStr, edbCode, dataTableName, addSql, val, dataMap, existDataMap, o)
+				if !isAdd {
+					isAdd = newAdd
+				}
+				addSql = tmpSql
+				if tmpErr != nil {
+					return tmpErr
 				}
 			}
 		}
@@ -578,3 +604,26 @@ func RefreshAllCalculateLjzzy(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCo
 	}
 	return
 }
+
+func calculateLjzzy(edbInfoId int, date, edbInfoIdStr, edbCode, dataTableName, addSql string, val float64, dataMap, existDataMap map[string]string, o orm.Ormer) (newSql string, isAdd bool, err error) {
+	newSql = addSql
+	saveValue := utils.SubFloatToString(val, 4)
+	//判断数据是否存在
+	if existVal, ok := dataMap[date]; !ok {
+		dataTime, _ := time.Parse(utils.FormatDate, date)
+		timestamp := dataTime.UnixNano() / 1e6
+		timeStr := fmt.Sprintf("%d", timestamp)
+		if _, existOk := existDataMap[date]; !existOk {
+			newSql += GetAddSql(edbInfoIdStr, edbCode, date, timeStr, saveValue)
+			isAdd = true
+		}
+		existDataMap[date] = date
+	} else {
+		if existVal != saveValue {
+			sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+			sql = fmt.Sprintf(sql, dataTableName)
+			_, err = o.Raw(sql, saveValue, edbInfoId, date).Exec()
+		}
+	}
+	return
+}