Files
web_huakui_server/web/service/srv_cointrans/trans.go
T
rootandClaude Opus 4.7 85c0071fd8 feat: 从黄果 NET hgdjnet-server 9bfbafe 导入 HKDJ 官网后端
来源:hgdjnet-server 9bfbafe10d417deea959bd53117bc88a10e60a83
项目身份 HKDJ / JHA-216,独立官网仓库,Jenkins 守卫键 hkdjnet
测试目录 /server/hkdj_net,App/Web API 30331/30332

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-10-16 11:20:04 +08:00

63 lines
1.5 KiB
Go

package srv_cointrans
import (
"context"
"hkdj-web-server/pub/common/srvdef"
"hkdj-web-server/pub/models/cointransmod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
)
// GetCoinTrans 分页查询金币交易流水
func GetCoinTrans(ctx context.Context, req *CoinTransReq) (*CoinTransResp, *srvdef.SrvErr) {
filter := bson.M{}
if req.UserId != nil && *req.UserId > 0 {
filter[cointransmod.FN.CoinTrans.UserId] = *req.UserId
}
if req.FlowDir != nil {
filter[cointransmod.FN.CoinTrans.FlowDir] = *req.FlowDir
}
if req.TranType != nil {
filter[cointransmod.FN.CoinTrans.TranType] = *req.TranType
}
timeFilter := bson.M{}
if req.StartTime != nil && *req.StartTime != "" {
if t, ok := parseTime(*req.StartTime); ok {
timeFilter["$gte"] = t
}
}
if req.EndTime != nil && *req.EndTime != "" {
if t, ok := parseTime(*req.EndTime); ok {
timeFilter["$lte"] = t
}
}
if len(timeFilter) > 0 {
filter[cointransmod.FN.CoinTrans.CreatedAt] = timeFilter
}
total, serr := cointransmod.CountCoinTrans(ctx, filter)
if serr != nil {
return nil, serr
}
resp := &CoinTransResp{Total: total}
if total == 0 {
resp.List = cointransmod.CoinTransList{}
return resp, nil
}
opt := options.Find().
SetSort(bson.D{{Key: cointransmod.FN.CoinTrans.CreatedAt, Value: -1}}).
SetSkip((req.PageNum - 1) * req.PageSize).
SetLimit(req.PageSize)
list, serr := cointransmod.FindManyCoinTrans(ctx, filter, opt)
if serr != nil {
return nil, serr
}
resp.List = list
return resp, nil
}