48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
package util
|
|
|
|
import (
|
|
"ZhenTuLocalPassiveAdapter/dto"
|
|
"context"
|
|
"go.opentelemetry.io/otel/attribute"
|
|
"sort"
|
|
"time"
|
|
)
|
|
|
|
func FilterAndSortFiles(ctx context.Context, fileList []dto.File, beginDt, endDt time.Time) []dto.File {
|
|
_, span := tracer.Start(ctx, "FilterAndSortFiles")
|
|
defer span.End()
|
|
span.SetAttributes(attribute.Int("files.count", len(fileList)))
|
|
var filteredFiles []dto.File
|
|
|
|
for _, file := range fileList {
|
|
fileStartTime := file.StartTime
|
|
nextFileStartTime := file.EndTime
|
|
|
|
file.DiffMs = beginDt.Sub(fileStartTime).Milliseconds()
|
|
// 如果当前文件还没有开始
|
|
if beginDt.After(fileStartTime) {
|
|
// 没有下一个文件的情况下,就是最后一个文件
|
|
if nextFileStartTime.IsZero() {
|
|
continue
|
|
}
|
|
// 但是下一个文件已经开始
|
|
if beginDt.Before(nextFileStartTime) {
|
|
filteredFiles = append(filteredFiles, file)
|
|
}
|
|
// 已经开始,但是也已经结束了
|
|
} else if fileStartTime.After(endDt) {
|
|
continue
|
|
// 已经开始,但未结束
|
|
} else {
|
|
filteredFiles = append(filteredFiles, file)
|
|
}
|
|
}
|
|
|
|
// 按照 Create 的值升序排序
|
|
sort.Slice(filteredFiles, func(i, j int) bool {
|
|
return filteredFiles[i].StartTime.Unix() <= filteredFiles[j].StartTime.Unix()
|
|
})
|
|
span.SetAttributes(attribute.String("files.filtered", ToJson(filteredFiles)))
|
|
return filteredFiles
|
|
}
|