浏览代码

删除多余日期的数据

xyxie 10 月之前
父节点
当前提交
0f5c59c372
共有 3 个文件被更改,包括 65 次插入0 次删除
  1. 8 0
      models/mgodb/edb_data_base.go
  2. 7 0
      models/mgodb/edb_data_calculate.go
  3. 50 0
      services/edb_data.go

+ 8 - 0
models/mgodb/edb_data_base.go

@@ -111,6 +111,14 @@ func DeleteEdbInfoDataByEdbInfoId(edbInfoId int) (err error) {
 	return
 }
 
+// 删除
+func DeleteEdbInfoDataByEdbInfoIdAndDate(edbCode string, dataTime []time.Time) (err error) {
+	filter := bson.D{{"edb_code", edbCode}, {"data_time", bson.D{{"$in", dataTime}}}}
+	db := NewMgo(utils.MgoDataDbName, "edb_data_base", utils.MgoDataCli)
+	_, err = db.DeleteMany(filter)
+	return
+}
+
 // 更新指标的值
 func ModifyValueEdbDataValue(edbDataId primitive.ObjectID, value float64) (err error) {
 	filter := bson.D{{"_id", edbDataId}}

+ 7 - 0
models/mgodb/edb_data_calculate.go

@@ -101,3 +101,10 @@ func ModifyValueEdbCalculateDataValue(edbDataId primitive.ObjectID, value float6
 	_, err = db.UpdateOne(filter, update)
 	return
 }
+
+func DeleteEdbCalculateDataByEdbInfoIdAndDate(edbCode string, dataTime []time.Time) (err error) {
+	filter := bson.D{{"edb_code", edbCode}, {"data_time", bson.D{{"$in", dataTime}}}}
+	db := NewMgo(utils.MgoDataDbName, "edb_data_calculate", utils.MgoDataCli)
+	_, err = db.DeleteMany(filter)
+	return
+}

+ 50 - 0
services/edb_data.go

@@ -34,9 +34,11 @@ func AddOrUpdateEdbData(edbCode string, dataList []*models.EdbDataBase) (err err
 		return
 	}
 	existMap := make(map[string]*mgodb.EdbDataBase, len(existList))
+	deleteMap := make(map[string]struct{}, len(existList))
 	for _, exist := range existList {
 		tmp := exist.DataTime.In(time.Local).Format(utils.FormatDate)
 		existMap[tmp] = exist
+		deleteMap[tmp] = struct{}{}
 	}
 	for _, v := range dataList {
 		dataTime, e := time.ParseInLocation(utils.FormatDate, v.DataTime, time.Local)
@@ -70,6 +72,7 @@ func AddOrUpdateEdbData(edbCode string, dataList []*models.EdbDataBase) (err err
 				addList = make([]interface{}, 0)
 			}
 		} else {
+			delete(deleteMap, v.DataTime)
 			if val != oldObj.Value {
 				err = mgodb.ModifyValueEdbDataValue(oldObj.EdbDataId, val)
 				if err != nil {
@@ -79,9 +82,32 @@ func AddOrUpdateEdbData(edbCode string, dataList []*models.EdbDataBase) (err err
 			}
 		}
 	}
+
+	//遍历deletemap,找出需要删除的日期
+	{
+		removeDateList := make([]time.Time, 0)
+		for dateTime := range deleteMap {
+			dateT, e := time.ParseInLocation(utils.FormatDate, dateTime, time.Local)
+			if e != nil {
+				err = fmt.Errorf("日期格式错误 error, %v", e)
+				return
+			}
+			removeDateList = append(removeDateList, dateT)
+		}
+		removeNum := len(removeDateList)
+		if removeNum > 0 {
+			err = mgodb.DeleteEdbInfoDataByEdbInfoIdAndDate(edbCode, removeDateList)
+			if err != nil {
+				err = fmt.Errorf("删除多余日期失败,error, %v", err)
+				return
+			}
+		}
+	}
+
 	if len(addList) > 0 {
 		err = mgodb.InsertEdbDataBatch(addList)
 	}
+
 	return
 }
 
@@ -93,9 +119,11 @@ func AddOrUpdateEdbDataCalculate(edbCode string, dataList []*models.EdbDataBase)
 		return
 	}
 	existMap := make(map[string]*mgodb.EdbDataBase, len(existList))
+	deleteMap := make(map[string]struct{}, len(existList))
 	for _, exist := range existList {
 		tmp := exist.DataTime.In(time.Local).Format(utils.FormatDate)
 		existMap[tmp] = exist
+		deleteMap[tmp] = struct{}{}
 	}
 	for _, v := range dataList {
 		dataTime, e := time.ParseInLocation(utils.FormatDate, v.DataTime, time.Local)
@@ -129,6 +157,7 @@ func AddOrUpdateEdbDataCalculate(edbCode string, dataList []*models.EdbDataBase)
 				addList = make([]interface{}, 0)
 			}
 		} else {
+			delete(deleteMap, v.DataTime)
 			if val != oldObj.Value {
 				err = mgodb.ModifyValueEdbCalculateDataValue(oldObj.EdbDataId, val)
 				if err != nil {
@@ -138,6 +167,27 @@ func AddOrUpdateEdbDataCalculate(edbCode string, dataList []*models.EdbDataBase)
 			}
 		}
 	}
+
+	//遍历deleteMap,找出需要删除的日期
+	{
+		removeDateList := make([]time.Time, 0)
+		for dateTime := range deleteMap {
+			dateT, e := time.ParseInLocation(utils.FormatDate, dateTime, time.Local)
+			if e != nil {
+				err = fmt.Errorf("日期格式错误 error, %v", e)
+				return
+			}
+			removeDateList = append(removeDateList, dateT)
+		}
+		removeNum := len(removeDateList)
+		if removeNum > 0 {
+			err = mgodb.DeleteEdbCalculateDataByEdbInfoIdAndDate(edbCode, removeDateList)
+			if err != nil {
+				err = fmt.Errorf("删除多余日期失败,error, %v", err)
+				return
+			}
+		}
+	}
 	if len(addList) > 0 {
 		err = mgodb.InsertEdbCalculateDataBatch(addList)
 	}