Browse Source

Merge branch 'pool/788'

Roc 1 year ago
parent
commit
3ba6682af9

+ 8 - 0
controllers/data_manage/edb_info.go

@@ -2052,6 +2052,9 @@ func (this *EdbInfoController) EdbInfoEdit() {
 	//添加es
 	data.AddOrEditEdbInfoToEs(req.EdbInfoId)
 
+	// 修改关联的预测指标基础信息
+	go data.ModifyPredictEdbBaseInfoBySourceEdb(edbInfo)
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "保存成功"
@@ -2158,6 +2161,11 @@ func (this *EdbInfoController) EdbEnInfoEdit() {
 	//添加es
 	data.AddOrEditEdbInfoToEs(req.EdbInfoId)
 
+	// 修改关联的预测指标基础信息
+	if edbInfo.EdbInfoType == 0 {
+		go data.ModifyPredictEdbEnBaseInfoBySourceEdb(edbInfo)
+	}
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "保存成功"

+ 6 - 0
controllers/data_manage/edb_info_calculate.go

@@ -393,6 +393,9 @@ func (this *ChartInfoController) CalculateEdit() {
 	//添加es
 	data.AddOrEditEdbInfoToEs(req.EdbInfoId)
 
+	// 修改关联的预测指标基础信息
+	go data.ModifyPredictEdbBaseInfoBySourceEdb(edbInfoDetail)
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "保存成功"
@@ -756,6 +759,9 @@ func (this *ChartInfoController) CalculateBatchEdit() {
 	//添加es
 	data.AddOrEditEdbInfoToEs(resp.EdbInfoId)
 
+	// 修改关联的预测指标基础信息
+	go data.ModifyPredictEdbBaseInfoBySourceEdb(edbInfo)
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "保存成功"

+ 42 - 1
controllers/data_manage/predict_edb_info.go

@@ -2,7 +2,6 @@ package data_manage
 
 import (
 	"encoding/json"
-	"github.com/rdlucklib/rdluck_tools/paging"
 	"eta/eta_api/controllers"
 	"eta/eta_api/models"
 	"eta/eta_api/models/data_manage"
@@ -11,6 +10,8 @@ import (
 	"eta/eta_api/services/data"
 	"eta/eta_api/services/elastic"
 	"eta/eta_api/utils"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"github.com/shopspring/decimal"
 	"sort"
 	"strconv"
 	"strings"
@@ -931,6 +932,46 @@ func (this *PredictEdbInfoController) Detail() {
 		fixedValue = predictEdbConf.FixedValue
 	}
 
+	findEdbInfoIdList := make([]int, 0)
+	for k, v := range calculateList {
+		if v.LatestDate != v.EndDate && v.LatestDate != `` && v.EndDate != `` {
+			tmpLatestDate, _ := time.ParseInLocation(utils.FormatDate, v.LatestDate, time.Local)
+			tmpEndDate, _ := time.ParseInLocation(utils.FormatDate, v.EndDate, time.Local)
+			if tmpEndDate.After(tmpLatestDate) {
+				findEdbInfoIdList = append(findEdbInfoIdList, v.FromEdbInfoId)
+			}
+		}
+		v.EndValue = v.LatestValue
+		calculateList[k] = v
+	}
+	if len(findEdbInfoIdList) > 0 {
+		edbDataInsertConfigList, err := data_manage.GetEdbDataInsertConfigByEdbIdList(findEdbInfoIdList)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败插入值失败,Err:" + err.Error()
+			return
+		}
+		edbDataInsertConfigMap := make(map[int]*data_manage.EdbDataInsertConfig)
+		for _, v := range edbDataInsertConfigList {
+			edbDataInsertConfigMap[v.EdbInfoId] = v
+		}
+
+		for k, v := range calculateList {
+			edbDataInsertConfig, ok := edbDataInsertConfigMap[v.FromEdbInfoId]
+			if !ok {
+				continue
+			}
+			if v.EndDate != `` && v.EndDate == edbDataInsertConfig.Date.Format(utils.FormatDate) {
+				t, tmpErr := decimal.NewFromString(edbDataInsertConfig.Value)
+				if tmpErr != nil {
+					continue
+				}
+				v.EndValue, _ = t.Float64()
+			}
+			calculateList[k] = v
+		}
+	}
+
 	resp := response.PredictEdbInfo{
 		EdbInfo:       *edbInfo,
 		RuleType:      ruleType,

+ 13 - 0
models/data_manage/edb_data_insert_config.go

@@ -26,6 +26,19 @@ func GetEdbDataInsertConfigByEdbId(edbInfoId int) (item *EdbDataInsertConfig, er
 	return
 }
 
+// GetEdbDataInsertConfigByEdbIdList 根据指标id列表 获取数据插入配置详情
+func GetEdbDataInsertConfigByEdbIdList(edbInfoIdList []int) (items []*EdbDataInsertConfig, err error) {
+	num := len(edbInfoIdList)
+	if num <= 0 {
+		return
+	}
+
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM edb_data_insert_config WHERE edb_info_id in (` + utils.GetOrmInReplace(num) + `) `
+	_, err = o.Raw(sql, edbInfoIdList).QueryRows(&items)
+	return
+}
+
 // CreateEdbDataInsertConfigAndData 创建数据插入配置规则,及插入数据
 func CreateEdbDataInsertConfigAndData(edbInfo *EdbInfo, date time.Time, value float64) (err error, errMsg string, isSendEmail bool) {
 	isSendEmail = true

+ 5 - 168
models/data_manage/edb_info_calculate.go

@@ -2,10 +2,10 @@ package data_manage
 
 import (
 	"errors"
+	"eta/eta_api/utils"
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/yidane/formula"
-	"eta/eta_api/utils"
 	"strconv"
 	"strings"
 	"time"
@@ -71,6 +71,9 @@ type EdbInfoCalculateDetail struct {
 	ModifyTime         time.Time `description:"修改时间"`
 	StartDate          string    `description:"开始日期"`
 	EndDate            string    `description:"结束日期"`
+	LatestDate         string    `description:"实际的结束日期"`
+	LatestValue        float64   `description:"最近实际数据的值"`
+	EndValue           float64   `description:"结束日期的值(可能是插入值)"`
 	EdbType            int       `description:"指标类型:1:基础指标,2:计算指标"`
 }
 
@@ -84,7 +87,7 @@ func GetEdbInfoCalculateDetail(edbInfoId, source int) (list []*EdbInfoCalculateD
 	//
 	//sql = fmt.Sprintf(sql, calculateTableName)
 
-	sql := ` SELECT a.edb_info_calculate_mapping_id,a.edb_info_id,a.source,a.source_name,a.edb_code,a.from_edb_info_id,a.from_edb_code,a.from_source,a.from_source_name,a.sort,a.create_time,a.modify_time,a.from_tag,a.move_value,b.edb_name_source as from_edb_name,b.start_date,b.end_date,b.edb_type FROM edb_info_calculate_mapping AS a
+	sql := ` SELECT a.edb_info_calculate_mapping_id,a.edb_info_id,a.source,a.source_name,a.edb_code,a.from_edb_info_id,a.from_edb_code,a.from_source,a.from_source_name,a.sort,a.create_time,a.modify_time,a.from_tag,a.move_value,b.edb_name_source as from_edb_name,b.start_date,b.end_date,b.latest_date,b.latest_value,b.edb_type FROM edb_info_calculate_mapping AS a
 			INNER JOIN edb_info AS b ON a.from_edb_info_id=b.edb_info_id
 			WHERE a.edb_info_id=? ORDER BY sort ASC `
 
@@ -232,172 +235,6 @@ func GetEdbInfoCalculateMap(edbInfoId, source int) (list []*EdbInfo, err error)
 	return
 }
 
-// 指标运算
-func AddCalculate(req *EdbInfoCalculateBatchSaveReq, fromEdbInfo []*EdbInfoCalculateDetail, edbCode, uniqueCode, formulaStr string, sysUserId int, sysUserRealName string) (edbInfoId int, err error) {
-	o := orm.NewOrmUsingDB("data")
-	to, err := o.Begin()
-	if err != nil {
-		return
-	}
-	defer func() {
-		if err != nil {
-			_ = to.Rollback()
-		} else {
-			_ = to.Commit()
-		}
-	}()
-	if req.EdbInfoId <= 0 {
-		edbInfo := new(EdbInfo)
-		edbInfo.Source = utils.DATA_SOURCE_CALCULATE
-		edbInfo.SourceName = "指标运算"
-		edbInfo.EdbCode = edbCode
-		edbInfo.EdbName = req.EdbName
-		edbInfo.EdbNameSource = req.EdbName
-		edbInfo.Frequency = req.Frequency
-		edbInfo.Unit = req.Unit
-		edbInfo.ClassifyId = req.ClassifyId
-		edbInfo.SysUserId = sysUserId
-		edbInfo.SysUserRealName = sysUserRealName
-		edbInfo.CreateTime = time.Now()
-		edbInfo.ModifyTime = time.Now()
-		edbInfo.UniqueCode = uniqueCode
-		edbInfo.CalculateFormula = req.CalculateFormula
-		edbInfo.EdbType = 2
-		newEdbInfoId, err := to.Insert(edbInfo)
-		if err != nil {
-			return int(newEdbInfoId), err
-		}
-		edbInfoId = int(newEdbInfoId)
-		//处理同名指标
-		{
-			edbNameList, err := GetEdbInfoByName(req.EdbName)
-			if err != nil {
-				return edbInfoId, err
-			}
-			if len(edbNameList) >= 2 {
-				for _, v := range edbNameList {
-					edbName := v.EdbName + "(" + v.SourceName + ")"
-					err = ModifyEdbInfoNameSource(edbName, v.EdbInfoId)
-					if err != nil {
-						return edbInfoId, err
-					}
-				}
-			}
-		}
-
-		//calculateList := make([]*EdbInfoCalculate, 0)
-		edbInfoList := make([]*EdbInfo, 0)
-
-		for _, v := range req.EdbInfoIdArr {
-			edbInfo, err := GetEdbInfoById(v.EdbInfoId)
-			if err != nil {
-				return edbInfoId, err
-			}
-			//calculateItem := new(EdbInfoCalculate)
-			//calculateItem.CreateTime = time.Now()
-			//calculateItem.ModifyTime = time.Now()
-			//calculateItem.Sort = k + 1
-			//calculateItem.EdbCode = edbCode
-			//calculateItem.EdbInfoId = int(edbInfoId)
-			//calculateItem.FromEdbInfoId = edbInfo.EdbInfoId
-			//calculateItem.FromEdbCode = edbInfo.EdbCode
-			//calculateItem.FromEdbName = edbInfo.EdbName
-			//calculateItem.FromSource = edbInfo.Source
-			//calculateItem.FromSourceName = edbInfo.SourceName
-			//calculateItem.FromTag = v.FromTag
-			//calculateList = append(calculateList, calculateItem)
-			edbInfoList = append(edbInfoList, edbInfo)
-		}
-		//if len(calculateList) > 0 {
-		//	_, err = to.InsertMulti(1, calculateList)
-		//	if err != nil {
-		//		return edbInfoId, err
-		//	}
-		//}
-	} else {
-		edbInfoId = req.EdbInfoId
-		dataTableName := GetEdbDataTableName(utils.DATA_SOURCE_CALCULATE)
-		deleteSql := ` DELETE FROM %s WHERE edb_info_id=? `
-		deleteSql = fmt.Sprintf(deleteSql, dataTableName)
-		_, err = to.Raw(deleteSql, req.EdbInfoId).Exec()
-	}
-	//计算数据
-	saveDataMap := make(map[string]map[int]float64)
-	for _, v := range fromEdbInfo {
-		var condition string
-		var pars []interface{}
-		condition += " AND edb_info_id=? "
-		pars = append(pars, v.FromEdbInfoId)
-		dataList, err := GetEdbDataListAll(condition, pars, v.FromSource, 1)
-		if err != nil {
-			return edbInfoId, err
-		}
-		dataMap := make(map[string]float64)
-		for _, dv := range dataList {
-			if val, ok := saveDataMap[dv.DataTime]; ok {
-				if _, ok := val[v.EdbInfoId]; !ok {
-					val[v.EdbInfoId] = dv.Value
-				}
-			} else {
-				temp := make(map[int]float64)
-				temp[v.EdbInfoId] = dv.Value
-				saveDataMap[dv.DataTime] = temp
-			}
-		}
-		item := new(CalculateItems)
-		item.EdbInfoId = v.EdbInfoId
-		item.DataMap = dataMap
-	}
-
-	//formulaMap := CheckFormula(formulaStr)
-	//addSql := ` INSERT INTO edb_data_calculate(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
-	//nowStr := time.Now().Format(utils.FormatDateTime)
-	//var isAdd bool
-	//
-	//for sk, sv := range saveDataMap {
-	//	formulaStr = strings.ToUpper(formulaStr)
-	//	formulaFormStr := ReplaceFormula(edbInfoIdArr, sv, formulaMap, formulaStr, edbInfoIdBytes)
-	//	if formulaFormStr != "" {
-	//		utils.FileLog.Info("formulaFormStr:%s", formulaFormStr)
-	//		expression := formula.NewExpression(formulaFormStr)
-	//		calResult, err := expression.Evaluate()
-	//		if err != nil {
-	//			err = errors.New("计算失败:Err:" + err.Error() + ";formulaStr:" + formulaFormStr)
-	//			fmt.Println(err)
-	//			return err
-	//		}
-	//		calVal, err := calResult.Float64()
-	//		if err != nil {
-	//			err = errors.New("计算失败:获取计算值失败 Err:" + err.Error() + ";formulaStr:" + formulaFormStr)
-	//			fmt.Println(err)
-	//			return err
-	//		}
-	//
-	//		//需要存入的数据
-	//		{
-	//			dataTime, _ := time.Parse(utils.FormatDate, sk)
-	//			timestamp := dataTime.UnixNano() / 1e6
-	//			timeStr := fmt.Sprintf("%d", timestamp)
-	//			addSql += "("
-	//			addSql += strconv.Itoa(edbInfoId) + "," + "'" + edbCode + "'" + "," + "'" + sk + "'" + "," + utils.SubFloatToString(calVal, 4) + "," + "'" + nowStr + "'" +
-	//				"," + "'" + nowStr + "'" + "," + "1"
-	//			addSql += "," + "'" + timeStr + "'"
-	//			addSql += "),"
-	//			isAdd = true
-	//		}
-	//	}
-	//}
-	//if isAdd {
-	//	addSql = strings.TrimRight(addSql, ",")
-	//	AddEdbDataCalculateBySql(addSql)
-	//	if err != nil {
-	//		fmt.Println("AddEdbDataCalculate Err:" + err.Error())
-	//		return
-	//	}
-	//}
-	return
-}
-
 type CalculateItems struct {
 	EdbInfoId int
 	DataMap   map[string]float64

+ 10 - 0
models/data_manage/predict_edb_conf.go

@@ -187,3 +187,13 @@ func GetPredictEdbConfListById(edbInfoId int) (items []*PredictEdbConf, err erro
 	_, err = o.Raw(sql, edbInfoId).QueryRows(&items)
 	return
 }
+
+// GetGroupPredictEdbBySourceEdbInfoId 根据来源指标id获取配置
+func GetGroupPredictEdbBySourceEdbInfoId(sourceEdbInfoId int) (items []*EdbInfo, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT a.* FROM edb_info AS a 
+     JOIN predict_edb_conf AS b  on a.edb_info_id = b.predict_edb_info_id
+          WHERE b.source_edb_info_id=? group by a.edb_info_id`
+	_, err = o.Raw(sql, sourceEdbInfoId).QueryRows(&items)
+	return
+}

+ 28 - 0
services/data/predict_edb_info.go

@@ -1281,3 +1281,31 @@ func CalculateByRuleByNine(formulaStr string, edbInfoList []*data_manage.EdbInfo
 	}
 	return
 }
+
+// ModifyPredictEdbBaseInfoBySourceEdb  根据来源ETA指标修改预测指标的基础信息
+func ModifyPredictEdbBaseInfoBySourceEdb(sourceEDdbInfo *data_manage.EdbInfo) {
+	list, err := data_manage.GetGroupPredictEdbBySourceEdbInfoId(sourceEDdbInfo.EdbInfoId)
+	if err != nil {
+		return
+	}
+	for _, v := range list {
+		v.Frequency = sourceEDdbInfo.Frequency
+		v.Unit = sourceEDdbInfo.Unit
+		v.Update([]string{"Frequency", "Unit"})
+		AddOrEditEdbInfoToEs(v.EdbInfoId)
+	}
+}
+
+// ModifyPredictEdbEnBaseInfoBySourceEdb  根据来源ETA指标修改预测指标的英文基础信息
+func ModifyPredictEdbEnBaseInfoBySourceEdb(sourceEDdbInfo *data_manage.EdbInfo) {
+	list, err := data_manage.GetGroupPredictEdbBySourceEdbInfoId(sourceEDdbInfo.EdbInfoId)
+	if err != nil {
+		return
+	}
+	for _, v := range list {
+		v.Frequency = sourceEDdbInfo.Frequency
+		v.UnitEn = sourceEDdbInfo.UnitEn
+		v.Update([]string{"Frequency", "UnitEn"})
+		AddOrEditEdbInfoToEs(v.EdbInfoId)
+	}
+}