|
@@ -39,92 +39,6 @@ type CalculateItems struct {
|
|
|
DataMap map[string]float64
|
|
|
}
|
|
|
|
|
|
-//// AddCalculate 新增计算(运算)指标
|
|
|
-//func AddCalculate(edbInfoIdArr []*EdbInfo, edbInfoId int, edbCode, formulaStr string, edbInfoIdBytes []string) (err error) {
|
|
|
-// o := orm.NewOrm()
|
|
|
-// defer func() {
|
|
|
-// if err != nil {
|
|
|
-// utils.FileLog.Info(fmt.Sprintf("Calculate Err:%s" + err.Error()))
|
|
|
-// }
|
|
|
-// }()
|
|
|
-// saveDataMap := make(map[string]map[int]float64)
|
|
|
-// for _, v := range edbInfoIdArr {
|
|
|
-// var condition string
|
|
|
-// var pars []interface{}
|
|
|
-// condition += " AND edb_info_id=? "
|
|
|
-// pars = append(pars, v.EdbInfoId)
|
|
|
-// dataList, err := GetEdbDataListAll(condition, pars, v.Source, v.SubSource, 1)
|
|
|
-// if err != nil {
|
|
|
-// return 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 := utils.CheckFormula(formulaStr)
|
|
|
-// addSql := ` INSERT INTO edb_data_calculate(edb_info_id,edb_code,data_time,value,create_time,modify_time,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 formulaStr == "" {
|
|
|
-// return
|
|
|
-// }
|
|
|
-// if 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.ParseInLocation(utils.FormatDate, sk, time.Local)
|
|
|
-// timestamp := dataTime.UnixNano() / 1e6
|
|
|
-// timeStr := fmt.Sprintf("%d", timestamp)
|
|
|
-// addSql += "("
|
|
|
-// addSql += strconv.Itoa(edbInfoId) + "," + "'" + edbCode + "'" + "," + "'" + sk + "'" + "," + utils.SubFloatToString(calVal, 4) + "," + "'" + nowStr + "'" +
|
|
|
-// "," + "'" + nowStr + "'" + "," + "'" + timeStr + "'"
|
|
|
-// addSql += "),"
|
|
|
-// isAdd = true
|
|
|
-// }
|
|
|
-// } else {
|
|
|
-// fmt.Println("formulaFormStr is empty")
|
|
|
-// }
|
|
|
-// }
|
|
|
-// if isAdd {
|
|
|
-// addSql = strings.TrimRight(addSql, ",")
|
|
|
-// _, err = o.Raw(addSql).Exec()
|
|
|
-// if err != nil {
|
|
|
-// fmt.Println("AddEdbDataCalculate Err:" + err.Error())
|
|
|
-// //errMsg = " tx.Exec Err :" + err.Error()
|
|
|
-// return
|
|
|
-// }
|
|
|
-// }
|
|
|
-// return
|
|
|
-//}
|
|
|
-
|
|
|
// AddCalculateInfo 新增计算(运算)指标
|
|
|
func AddCalculateInfo(req EdbInfoCalculateSaveReq, calculateMappingList []*EdbInfoCalculateMapping, edbInfoList []*EdbInfo, edbCode, uniqueCode string, edbInfoIdBytes []string) (edbInfo *EdbInfo, err error) {
|
|
|
|
|
@@ -392,8 +306,6 @@ func refreshAllCalculate(to orm.TxOrmer, edbInfoIdArr []*EdbInfo, edbInfoId, sou
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- lenData := len(dataList)
|
|
|
-
|
|
|
for _, dv := range dataList {
|
|
|
if val, ok := realSaveDataMap[dv.DataTime]; ok {
|
|
|
if _, ok := val[v.EdbInfoId]; !ok {
|
|
@@ -419,18 +331,13 @@ func refreshAllCalculate(to orm.TxOrmer, edbInfoIdArr []*EdbInfo, edbInfoId, sou
|
|
|
// 以第一个指标的日期作为基准日期
|
|
|
if edbInfoIndex == 0 {
|
|
|
dateList = append(dateList, dv.DataTime)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if lenData > 0 {
|
|
|
- tmpLatestDate, _ := time.ParseInLocation(utils.FormatDate, dataList[lenData-1].DataTime, time.Local)
|
|
|
- if minLatestDate.IsZero() || minLatestDate.After(tmpLatestDate) {
|
|
|
- minLatestDate = tmpLatestDate
|
|
|
- }
|
|
|
-
|
|
|
- tmpStartDate, _ := time.ParseInLocation(utils.FormatDate, dataList[0].DataTime, time.Local)
|
|
|
- if maxStartDate.IsZero() || maxStartDate.Before(tmpStartDate) {
|
|
|
- maxStartDate = tmpStartDate
|
|
|
+ tmpDate, _ := time.ParseInLocation(utils.FormatDate, dv.DataTime, time.Local)
|
|
|
+ if minLatestDate.IsZero() || tmpDate.After(minLatestDate) {
|
|
|
+ minLatestDate = tmpDate
|
|
|
+ }
|
|
|
+ if maxStartDate.IsZero() || tmpDate.Before(maxStartDate) {
|
|
|
+ maxStartDate = tmpDate
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -438,7 +345,7 @@ func refreshAllCalculate(to orm.TxOrmer, edbInfoIdArr []*EdbInfo, edbInfoId, sou
|
|
|
//数据处理,将日期内不全的数据做补全
|
|
|
HandleDateSaveDataMap(dateList, maxStartDate, minLatestDate, realSaveDataMap, saveDataMap, edbInfoIdArr, emptyType)
|
|
|
|
|
|
- formulaDateSlice, formulaDateMap, err := utils.HandleFormulaJson(formulaStr, maxStartDate.Format(utils.FormatDate))
|
|
|
+ formulaDateSlice, formulaDateMap, err := utils.HandleFormulaJson(formulaStr, minLatestDate)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -481,7 +388,7 @@ func refreshAllCalculate(to orm.TxOrmer, edbInfoIdArr []*EdbInfo, edbInfoId, sou
|
|
|
formulaMap := make(map[string]string)
|
|
|
formulaStr = ""
|
|
|
for _, fv := range formulaDateSlice {
|
|
|
- if sk >= fv {
|
|
|
+ if sk < fv {
|
|
|
if f, ok := formulaDateMap[fv]; ok {
|
|
|
formulaStr = f
|
|
|
formulaMap = utils.CheckFormula(formulaStr)
|