Files
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

74 lines
1.8 KiB
Go

package common
import (
"91porn-server/common/timeutil"
"91porn-server/models/commod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo/options"
)
// StandQuery 客户端传过来的时间条件信息
type StandQuery struct {
StartTime *string `form:"startTime" json:"startTime,omitempty" ` // 开始时间
EndTime *string `form:"endTime" json:"endTime,omitempty"` // 结束时间
TimeString *string `form:"timeString" json:"timeString,omitempty"` // 时间
DistrictCode *string `form:"districtCode" json:"districtCode" bson:"districtCode"` // 商区码
commod.Page
}
// StandQueryMap 通用条件查询管道pipe组装
func StandQueryMap(s StandQuery, obj interface{}) (cond bson.M, opts *options.FindOptions) {
stdq := commod.StdQuery{
Page: &commod.PageBy{Num: s.PageNumber, Size: s.PageSize},
}
opts = commod.ConvertToListQuery(stdq)
opts.SetSort(bson.D{{Key: "_id", Value: -1}})
m, _ := JSONStruct2Map(obj)
date := make(map[string]interface{})
if s.EndTime != nil {
date["$lte"] = timeutil.StrTimeToTime(*s.EndTime)
}
if s.StartTime != nil {
date["$gte"] = timeutil.StrTimeToTime(*s.StartTime)
}
if len(date) > 0 {
if s.TimeString != nil {
m[*s.TimeString] = date
} else {
m["createdAt"] = date
}
}
if v, ok := m["_id"]; ok {
str, ok := v.(string)
if !ok {
return
}
m["_id"], _ = primitive.ObjectIDFromHex(str)
}
if s.DistrictCode != nil {
m["districtCode"] = s.DistrictCode
}
cond = m
return
}
// Deduplication 切片去重
func Deduplication(src []primitive.ObjectID) []primitive.ObjectID {
if len(src) == 0 {
return src
}
dst := []primitive.ObjectID{}
m := make(map[primitive.ObjectID]int)
for _, s := range src {
m[s] = 1
}
for k := range m {
dst = append(dst, k)
}
return dst
}