Browse Source

区分基础指标和计算指标

xyxie 11 months ago
parent
commit
bfb52b2442
5 changed files with 180 additions and 22 deletions
  1. 1 0
      models/chart_info.go
  2. 3 3
      models/mgodb/edb_data_base.go
  3. 102 0
      models/mgodb/edb_data_calculate.go
  4. 43 5
      services/edb_data.go
  5. 31 14
      services/edb_info.go

+ 1 - 0
models/chart_info.go

@@ -1073,6 +1073,7 @@ type AddChartReq struct {
 
 type AddEdbDataReq struct {
 	EdbCode  string
+	EdbType  int
 	DataList []*mgodb.EdbDataBase
 }
 

+ 3 - 3
models/mgodb/edb_data_base.go

@@ -81,7 +81,7 @@ func GetEdbDataBaseByEdbCode(edbCode string) (items []*EdbDataBase, err error) {
 	return
 }
 
-func InsertBatch(items []interface{}) (err error) {
+func InsertEdbDataBatch(items []interface{}) (err error) {
 	db := NewMgo(utils.MONGODB_COMMUNITY, "edb_data_base", MgoClient)
 	_, err = db.InsertMany(items)
 	if err != nil {
@@ -90,7 +90,7 @@ func InsertBatch(items []interface{}) (err error) {
 	return
 }
 
-func ModifyEdbInfoDataStatus(edbInfoId int64, edbCode string) (err error) {
+func ModifyEdbDataEdbInfoId(edbInfoId int64, edbCode string) (err error) {
 	filter := bson.D{{"edb_code", edbCode}}
 	update := bson.D{{"$set", bson.D{{"edb_info_id", edbInfoId}, {"modify_time", time.Now().Format("2006-01-02 15:04:05")}}}}
 	db := NewMgo(utils.MONGODB_COMMUNITY, "edb_data_base", MgoClient)
@@ -110,7 +110,7 @@ func DeleteEdbInfoDataByEdbInfoId(edbInfoId int) (err error) {
 }
 
 // 更新指标的值
-func ModifyValueEdbInfoDataStatus(edbCode string, dataTime string, value string) (err error) {
+func ModifyValueEdbDataValue(edbCode string, dataTime string, value string) (err error) {
 	filter := bson.D{{"edb_code", edbCode}, {"data_time", dataTime}}
 	update := bson.D{{"$set", bson.D{{"value", value}, {"modify_time", time.Now().Format("2006-01-02 15:04:05")}}}}
 	db := NewMgo(utils.MONGODB_COMMUNITY, "edb_data_base", MgoClient)

+ 102 - 0
models/mgodb/edb_data_calculate.go

@@ -0,0 +1,102 @@
+package mgodb
+
+import (
+	"context"
+	"eta/eta_forum_hub/utils"
+	"go.mongodb.org/mongo-driver/bson"
+	"go.mongodb.org/mongo-driver/mongo/options"
+	"time"
+)
+
+func GetEdbDataCalculateByEdbInfoId(edbInfoId int) (items []*EdbDataBase, err error) {
+	findOptions := options.Find()
+	db := NewMgo(utils.MONGODB_COMMUNITY, "edb_data_calculate", MgoClient)
+	filter := bson.D{{"edb_info_id", edbInfoId}}
+	ctx := context.TODO()
+	cur, err := db.Find(filter, findOptions)
+	if err != nil {
+		return
+	}
+	// Close the cursor once finished
+	defer cur.Close(ctx)
+	for cur.Next(ctx) {
+		// create a value into which the single document can be decoded
+		var elem EdbDataBase
+		err = cur.Decode(&elem)
+		if err != nil {
+			return
+		}
+
+		items = append(items, &elem)
+	}
+
+	if err = cur.Err(); err != nil {
+		return
+	}
+	return
+}
+
+func GetEdbDataCalculateByEdbCode(edbCode string) (items []*EdbDataBase, err error) {
+	findOptions := options.Find()
+	db := NewMgo(utils.MONGODB_COMMUNITY, "edb_data_calculate", MgoClient)
+	filter := bson.D{{"edb_code", edbCode}}
+	ctx := context.TODO()
+	cur, err := db.Find(filter, findOptions)
+	if err != nil {
+		return
+	}
+	// Close the cursor once finished
+	defer cur.Close(ctx)
+	for cur.Next(ctx) {
+		// create a value into which the single document can be decoded
+		var elem EdbDataBase
+		err = cur.Decode(&elem)
+		if err != nil {
+			return
+		}
+
+		items = append(items, &elem)
+	}
+
+	if err = cur.Err(); err != nil {
+		return
+	}
+	return
+}
+
+func InsertEdbCalculateDataBatch(items []interface{}) (err error) {
+	db := NewMgo(utils.MONGODB_COMMUNITY, "edb_data_calculate", MgoClient)
+	_, err = db.InsertMany(items)
+	if err != nil {
+		return
+	}
+	return
+}
+
+func ModifyEdbCalculateDataEdbInfoId(edbInfoId int64, edbCode string) (err error) {
+	filter := bson.D{{"edb_code", edbCode}}
+	update := bson.D{{"$set", bson.D{{"edb_info_id", edbInfoId}, {"modify_time", time.Now().Format("2006-01-02 15:04:05")}}}}
+	db := NewMgo(utils.MONGODB_COMMUNITY, "edb_data_calculate", MgoClient)
+	_, err = db.UpdateMany(filter, update)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// 删除
+func DeleteEdbInfoCalculateDataByEdbInfoId(edbInfoId int) (err error) {
+	filter := bson.D{{"edb_info_id", edbInfoId}}
+	db := NewMgo(utils.MONGODB_COMMUNITY, "edb_data_calculate", MgoClient)
+	_, err = db.DeleteMany(filter)
+	return
+}
+
+// 更新指标的值
+func ModifyValueEdbCalculateDataValue(edbCode string, dataTime string, value string) (err error) {
+	filter := bson.D{{"edb_code", edbCode}, {"data_time", dataTime}}
+	update := bson.D{{"$set", bson.D{{"value", value}, {"modify_time", time.Now().Format("2006-01-02 15:04:05")}}}}
+	db := NewMgo(utils.MONGODB_COMMUNITY, "edb_data_calculate", MgoClient)
+	_, err = db.UpdateOne(filter, update)
+	return
+}

+ 43 - 5
services/edb_data.go

@@ -8,9 +8,16 @@ import (
 
 func BatchAddOrUpdateEdbData(req []*models.AddEdbDataReq) (err error) {
 	for _, reqData := range req {
-		err = AddOrUpdateEdbData(reqData.EdbCode, reqData.DataList)
-		if err != nil {
-			return
+		if reqData.EdbType == 1 {
+			err = AddOrUpdateEdbData(reqData.EdbCode, reqData.DataList)
+			if err != nil {
+				return
+			}
+		} else {
+			err = AddOrUpdateEdbDataCalculate(reqData.EdbCode, reqData.DataList)
+			if err != nil {
+				return
+			}
 		}
 	}
 	return
@@ -33,7 +40,38 @@ func AddOrUpdateEdbData(edbCode string, dataList []*mgodb.EdbDataBase) (err erro
 			addList = append(addList, v)
 		} else {
 			if v.Value != oldVal {
-				err = mgodb.ModifyValueEdbInfoDataStatus(v.EdbCode, v.DataTime, v.Value)
+				err = mgodb.ModifyValueEdbDataValue(v.EdbCode, v.DataTime, v.Value)
+				if err != nil {
+					err = fmt.Errorf("更新指标数据出错 error, %v", err)
+					return
+				}
+			}
+		}
+	}
+	if len(addList) > 0 {
+		err = mgodb.InsertEdbDataBatch(addList)
+	}
+	return
+}
+
+func AddOrUpdateEdbDataCalculate(edbCode string, dataList []*mgodb.EdbDataBase) (err error) {
+	addList := make([]interface{}, 0)
+	existList, err := mgodb.GetEdbDataCalculateByEdbCode(edbCode)
+	if err != nil {
+		err = fmt.Errorf("查询指标数据出错 error, %v", err)
+		return
+	}
+	existMap := make(map[string]string, len(existList))
+	for _, exist := range existList {
+		existMap[exist.DataTime] = exist.Value
+	}
+	for _, v := range dataList {
+		if oldVal, ok := existMap[v.DataTime]; !ok {
+			v.EdbInfoId = 0
+			addList = append(addList, v)
+		} else {
+			if v.Value != oldVal {
+				err = mgodb.ModifyValueEdbCalculateDataValue(v.EdbCode, v.DataTime, v.Value)
 				if err != nil {
 					err = fmt.Errorf("更新指标数据出错 error, %v", err)
 					return
@@ -42,7 +80,7 @@ func AddOrUpdateEdbData(edbCode string, dataList []*mgodb.EdbDataBase) (err erro
 		}
 	}
 	if len(addList) > 0 {
-		err = mgodb.InsertBatch(addList)
+		err = mgodb.InsertEdbCalculateDataBatch(addList)
 	}
 	return
 }

+ 31 - 14
services/edb_info.go

@@ -161,14 +161,22 @@ func AddOrUpdateEdbInfo(edbItem *models.EdbInfo, sysUserId int, sysUserRealName
 		}
 		edbInfo.EdbInfoId = int(edbInfoId)
 	}
-
-	err = mgodb.ModifyEdbInfoDataStatus(edbInfoId, edbInfo.EdbCode)
-	if err != nil {
-		errMsg = "保存失败"
-		err = errors.New("更新指标数据失败,Err:" + err.Error())
-		return
+	if edbInfo.EdbType == 1 {
+		err = mgodb.ModifyEdbDataEdbInfoId(edbInfoId, edbInfo.EdbCode)
+		if err != nil {
+			errMsg = "保存失败"
+			err = errors.New("更新指标数据失败,Err:" + err.Error())
+			return
+		}
+	} else {
+		err = mgodb.ModifyEdbCalculateDataEdbInfoId(edbInfoId, edbInfo.EdbCode)
+		if err != nil {
+			errMsg = "保存失败"
+			err = errors.New("更新指标数据失败,Err:" + err.Error())
+			return
+		}
 	}
-
+	
 	// 更新es
 	go AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
 
@@ -191,7 +199,7 @@ func BatchDeleteEdbInfo(edbInfoIds []int) (err error, errMsg string) {
 // 删除单个指标
 func DeleteEdbInfo(edbInfoId int) (err error, errMsg string) {
 	//判断指标是否存在
-	_, err = models.GetEdbInfoById(edbInfoId)
+	info, err := models.GetEdbInfoById(edbInfoId)
 	if err != nil {
 		if err.Error() == utils.ErrNoRow() {
 			err = nil
@@ -233,13 +241,22 @@ func DeleteEdbInfo(edbInfoId int) (err error, errMsg string) {
 		err = errors.New("删除指标失败,Err:" + err.Error())
 		return
 	}
-
-	err = mgodb.DeleteEdbInfoDataByEdbInfoId(edbInfoId)
-	if err != nil {
-		errMsg = "删除失败"
-		err = errors.New("删除指标数据失败,Err:" + err.Error())
-		return
+	if info.EdbType == 1 {
+		err = mgodb.DeleteEdbInfoDataByEdbInfoId(edbInfoId)
+		if err != nil {
+			errMsg = "删除失败"
+			err = errors.New("删除指标数据失败,Err:" + err.Error())
+			return
+		}
+	} else {
+		err = mgodb.DeleteEdbInfoCalculateDataByEdbInfoId(edbInfoId)
+		if err != nil {
+			errMsg = "删除失败"
+			err = errors.New("删除指标数据失败,Err:" + err.Error())
+			return
+		}
 	}
+
 	// 删除es中的数据
 	go DeleteEdbInfoToEs(edbInfoId)
 	return