|
@@ -97,7 +97,7 @@ func AddCalculateBp(req *EdbInfoCalculateBatchSaveReq, fromEdbInfo *EdbInfo, edb
|
|
|
return edbInfoId, err
|
|
|
}
|
|
|
|
|
|
- addSql := ` INSERT INTO edb_data_calculate_bp(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
|
|
|
+ addSql := ` INSERT INTO edb_data_calculate_bp(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
|
|
|
var isAdd bool
|
|
|
existMap := make(map[string]string)
|
|
|
dataLen := len(dataList)
|
|
@@ -273,7 +273,7 @@ func EditCalculateBp(req *EdbInfoCalculateBatchEditReq, fromEdbInfo *EdbInfo, ed
|
|
|
if err != nil {
|
|
|
return edbInfoId, err
|
|
|
}
|
|
|
- addSql := ` INSERT INTO edb_data_calculate_bp(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
|
|
|
+ addSql := ` INSERT INTO edb_data_calculate_bp(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
|
|
|
var isAdd bool
|
|
|
existMap := make(map[string]string)
|
|
|
dataLen := len(dataList)
|
|
@@ -328,8 +328,8 @@ func EditCalculateBp(req *EdbInfoCalculateBatchEditReq, fromEdbInfo *EdbInfo, ed
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// RefreshAllCalculateBp 刷新所有变频数据
|
|
|
-func RefreshAllCalculateBp(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
|
|
|
+// RefreshAllCalculateBpBak 刷新所有变频数据
|
|
|
+func RefreshAllCalculateBpBak(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
|
|
|
o := orm.NewOrm()
|
|
|
to, err := o.Begin()
|
|
|
if err != nil {
|
|
@@ -391,7 +391,7 @@ func RefreshAllCalculateBp(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode,
|
|
|
existDataMap[v.DataTime] = v.Value
|
|
|
}
|
|
|
fmt.Println("existDataMap:", existDataMap)
|
|
|
- addSql := ` INSERT INTO edb_data_calculate_bp(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
|
|
|
+ addSql := ` INSERT INTO edb_data_calculate_bp(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
|
|
|
var isAdd bool
|
|
|
|
|
|
existMap := make(map[string]string)
|
|
@@ -468,3 +468,185 @@ func RefreshAllCalculateBp(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode,
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+func RefreshAllCalculateBp(edbInfoId, source int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate string) (err error) {
|
|
|
+ o := orm.NewOrm()
|
|
|
+ to, err := o.Begin()
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("RefreshAllCalculateBp,Err:" + err.Error())
|
|
|
+ _ = to.Rollback()
|
|
|
+ } else {
|
|
|
+ _ = to.Commit()
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ edbInfoIdStr := strconv.Itoa(edbInfoId)
|
|
|
+ //计算数据
|
|
|
+
|
|
|
+ //计算数据
|
|
|
+ var condition string
|
|
|
+ var pars []interface{}
|
|
|
+ condition += " AND edb_info_id=? "
|
|
|
+ pars = append(pars, fromEdbInfo.EdbInfoId)
|
|
|
+
|
|
|
+ //if startDate != "" {
|
|
|
+ // condition += " AND data_time>=? "
|
|
|
+ // pars = append(pars, startDate)
|
|
|
+ //}
|
|
|
+ //if endDate != "" {
|
|
|
+ // condition += " AND data_time<=? "
|
|
|
+ // pars = append(pars, endDate)
|
|
|
+ //}
|
|
|
+ //获取来源指标的数据
|
|
|
+ dataList, err := GetEdbDataListAll(condition, pars, fromEdbInfo.Source, 1)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ var dateArr []string
|
|
|
+ dataMap := make(map[string]*EdbInfoSearchData)
|
|
|
+ fromDataMap := make(map[string]float64)
|
|
|
+ //来源指指标数据
|
|
|
+ for _, v := range dataList {
|
|
|
+ dateArr = append(dateArr, v.DataTime)
|
|
|
+ dataMap[v.DataTime] = v
|
|
|
+ fromDataMap[v.DataTime] = v.Value
|
|
|
+ }
|
|
|
+ fmt.Println("source:", source)
|
|
|
+
|
|
|
+ //获取变频指标所有数据
|
|
|
+ existDataList, err := GetAllEdbDataList(edbInfoId, source)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //计算指标的map
|
|
|
+ existDataMap := make(map[string]*EdbData, 0)
|
|
|
+
|
|
|
+ addSql := ` INSERT INTO edb_data_calculate_bp(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
|
|
|
+ var isAdd bool
|
|
|
+
|
|
|
+ var lastValue float64 //最后数据的值(float64)
|
|
|
+ var lastValueStr string //最后数据的值(string)
|
|
|
+ //待删除的日期
|
|
|
+ removeDateList := make([]string, 0)
|
|
|
+ if len(existDataList) > 0 {
|
|
|
+ //第一个已经入库的日期
|
|
|
+ firstExistDataTimeStr := existDataList[0].DataTime //计算指标数据第一条的日期字符串
|
|
|
+ if len(dateArr) > 0 {
|
|
|
+ firstFromDataTimeStr := dateArr[0] //来源数据第一条的日期字符串
|
|
|
+ firstExistDataTime, _ := time.Parse(utils.FormatDate, firstExistDataTimeStr) //计算指标数据第一条的日期(time类型)
|
|
|
+ firstFromDataTime, _ := time.Parse(utils.FormatDate, firstFromDataTimeStr) //来源数据第一条的日期(time类型)
|
|
|
+ nowDateStr := time.Now().Format(utils.FormatDate) //当天日期字符串
|
|
|
+ nowDate, _ := time.ParseInLocation(utils.FormatDate, nowDateStr, firstFromDataTime.Location()) //当天日期(time类型)
|
|
|
+
|
|
|
+ lastValue = fromDataMap[firstFromDataTimeStr]
|
|
|
+ lastValueStr = decimal.NewFromFloat(lastValue).String()
|
|
|
+ //第一步: 判断来源指标的开始时间与计算指标的开始时间是否相等,相等的话,那么就不需要对两个时间之间的数据做处理
|
|
|
+ if firstExistDataTimeStr != firstFromDataTimeStr {
|
|
|
+ if firstExistDataTime.Before(firstFromDataTime) { //如果计算指标第一条数据的开始时间 早于 来源指标的第一条开始时间,那么需要对两个时间之间的计算指标数据做 删除处理
|
|
|
+ for _, v := range existDataList {
|
|
|
+ if v.DataTime == firstFromDataTimeStr {
|
|
|
+ if tmpLastValue, ok := fromDataMap[firstFromDataTimeStr]; ok { //来源指标当天的数据
|
|
|
+ lastValue = tmpLastValue
|
|
|
+ lastValueStr = decimal.NewFromFloat(lastValue).String()
|
|
|
+ }
|
|
|
+ break
|
|
|
+ }
|
|
|
+ removeDateList = append(removeDateList, v.DataTime)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for _, v := range dateArr { //如果计算指标第一条数据的开始时间 晚于 来源指标的第一条开始时间,那么需要对两个时间之间的计算指标数据做 新增处理
|
|
|
+ if v == firstExistDataTimeStr {
|
|
|
+ if tmpLastValue, ok := fromDataMap[v]; ok { //来源指标当天的数据
|
|
|
+ lastValue = tmpLastValue
|
|
|
+ lastValueStr = decimal.NewFromFloat(lastValue).String()
|
|
|
+ }
|
|
|
+ break
|
|
|
+ }
|
|
|
+
|
|
|
+ currentDate, _ := time.Parse(utils.FormatDate, v)
|
|
|
+ timestamp := currentDate.UnixNano() / 1e6
|
|
|
+ timestampStr := fmt.Sprintf("%d", timestamp)
|
|
|
+ addSql += GetAddSql(edbInfoIdStr, edbCode, v, timestampStr, lastValueStr)
|
|
|
+
|
|
|
+ isAdd = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //第二步 剩余数据每天修改
|
|
|
+
|
|
|
+ day := int(nowDate.Sub(firstExistDataTime).Hours() / float64(24))
|
|
|
+
|
|
|
+ //第二步: 已经入库的数据处理
|
|
|
+ for _, v := range existDataList {
|
|
|
+ existDataMap[v.DataTime] = v
|
|
|
+ }
|
|
|
+
|
|
|
+ for k := day; k >= 0; k-- {
|
|
|
+ needDay := nowDate.AddDate(0, 0, -k)
|
|
|
+ needDayStr := needDay.Format(utils.FormatDate)
|
|
|
+ tmpExistData, ok := existDataMap[needDayStr]
|
|
|
+ if ok {
|
|
|
+ if tmpLastValue, ok := fromDataMap[tmpExistData.DataTime]; ok { //来源指标当天的数据
|
|
|
+ lastValue = tmpLastValue
|
|
|
+ lastValueStr = decimal.NewFromFloat(lastValue).String()
|
|
|
+ }
|
|
|
+ //如果对应的值不匹配
|
|
|
+ if tmpExistData.Value != lastValueStr {
|
|
|
+ err = ModifyEdbDataById(source, tmpExistData.EdbDataId, lastValueStr)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ timestamp := needDay.UnixNano() / 1e6
|
|
|
+ timestampStr := fmt.Sprintf("%d", timestamp)
|
|
|
+ addSql += GetAddSql(edbInfoIdStr, edbCode, needDayStr, timestampStr, lastValueStr)
|
|
|
+
|
|
|
+ isAdd = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //如果没有来源指标数据,那么已经入库的计算指标数据需要全部删除
|
|
|
+ tableName := GetEdbDataTableName(source)
|
|
|
+ sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ?`, tableName)
|
|
|
+ _, err = o.Raw(sql, edbInfoId).Exec()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("删除所有的变频指标数据失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //for _, v := range existDataList {
|
|
|
+ // removeDateList = append(removeDateList, v.DataTime)
|
|
|
+ //}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除不需要的指标数据
|
|
|
+ if len(removeDateList) > 0 {
|
|
|
+ removeDateStr := strings.Join(removeDateList, `","`)
|
|
|
+ removeDateStr = `"` + removeDateStr + `"`
|
|
|
+ //如果拼接指标变更了,那么需要删除所有的指标数据
|
|
|
+ tableName := GetEdbDataTableName(source)
|
|
|
+ sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
|
|
|
+
|
|
|
+ _, err = o.Raw(sql, edbInfoId).Exec()
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("删除不存在的变频指标数据失败,Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if isAdd {
|
|
|
+ addSql = strings.TrimRight(addSql, ",")
|
|
|
+ _, err = o.Raw(addSql).Exec()
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|