gomod引用
This commit is contained in:
@@ -2,235 +2,76 @@ package controller
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/net/ghttp"
|
||||
"order/model/dto"
|
||||
"order/service"
|
||||
)
|
||||
|
||||
type PaymentConfigController struct{}
|
||||
type paymentConfig struct{}
|
||||
|
||||
var PaymentConfig = &PaymentConfigController{}
|
||||
// PaymentConfig 支付配置控制器
|
||||
var PaymentConfig = new(paymentConfig)
|
||||
|
||||
// CreatePaymentConfig 创建支付配置
|
||||
func (c *PaymentConfigController) CreatePaymentConfig(r *ghttp.Request) {
|
||||
var req dto.CreatePaymentConfigReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 400,
|
||||
"message": err.Error(),
|
||||
"data": nil,
|
||||
})
|
||||
// Create 创建支付配置
|
||||
func (c *paymentConfig) Create(ctx context.Context, req *dto.CreatePaymentConfigReq) (res *dto.PaymentConfigResp, err error) {
|
||||
// 创建支付配置
|
||||
res, err = service.PaymentConfig.CreatePaymentConfig(ctx, req)
|
||||
return
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
resp, err := service.PaymentConfig.CreatePaymentConfig(ctx, &req)
|
||||
if err != nil {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 500,
|
||||
"message": err.Error(),
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": resp,
|
||||
})
|
||||
}
|
||||
|
||||
// UpdatePaymentConfig 更新支付配置
|
||||
func (c *PaymentConfigController) UpdatePaymentConfig(r *ghttp.Request) {
|
||||
var req dto.UpdatePaymentConfigReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 400,
|
||||
"message": err.Error(),
|
||||
"data": nil,
|
||||
})
|
||||
// Update 更新支付配置
|
||||
func (c *paymentConfig) Update(ctx context.Context, req *dto.UpdatePaymentConfigReq) (res *dto.PaymentConfigResp, err error) {
|
||||
// 更新支付配置
|
||||
res, err = service.PaymentConfig.UpdatePaymentConfig(ctx, req)
|
||||
return
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
resp, err := service.PaymentConfig.UpdatePaymentConfig(ctx, &req)
|
||||
if err != nil {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 500,
|
||||
"message": err.Error(),
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": resp,
|
||||
})
|
||||
}
|
||||
|
||||
// GetPaymentConfig 获取支付配置
|
||||
func (c *PaymentConfigController) GetPaymentConfig(r *ghttp.Request) {
|
||||
var req dto.QueryPaymentConfigReq
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 400,
|
||||
"message": err.Error(),
|
||||
"data": nil,
|
||||
})
|
||||
// Query 查询支付配置
|
||||
func (c *paymentConfig) Query(ctx context.Context, req *dto.QueryPaymentConfigReq) (res *dto.PaymentConfigResp, err error) {
|
||||
// 查询支付配置
|
||||
res, err = service.PaymentConfig.GetPaymentConfig(ctx, req)
|
||||
return
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
resp, err := service.PaymentConfig.GetPaymentConfig(ctx, &req)
|
||||
if err != nil {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 500,
|
||||
"message": err.Error(),
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": resp,
|
||||
})
|
||||
}
|
||||
|
||||
// GetPaymentConfigList 获取支付配置列表
|
||||
func (c *PaymentConfigController) GetPaymentConfigList(r *ghttp.Request) {
|
||||
tenantID := r.Get("tenant_id").String()
|
||||
if tenantID == "" {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 400,
|
||||
"message": "租户ID不能为空",
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
resp, err := service.PaymentConfig.GetPaymentConfigList(ctx, tenantID)
|
||||
// List 查询支付配置列表
|
||||
func (c *paymentConfig) List(ctx context.Context, req *dto.ListPaymentConfigReq) (res *dto.PaymentConfigListResp, err error) {
|
||||
// 查询支付配置列表
|
||||
list, err := service.PaymentConfig.GetPaymentConfigList(ctx, req.TenantID)
|
||||
if err != nil {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 500,
|
||||
"message": err.Error(),
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
return nil, err
|
||||
}
|
||||
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": resp,
|
||||
})
|
||||
return &dto.PaymentConfigListResp{
|
||||
List: list,
|
||||
Total: int64(len(list)),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// DeletePaymentConfig 删除支付配置
|
||||
func (c *PaymentConfigController) DeletePaymentConfig(r *ghttp.Request) {
|
||||
tenantID := r.Get("tenant_id").String()
|
||||
configID := r.Get("config_id").String()
|
||||
|
||||
if tenantID == "" || configID == "" {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 400,
|
||||
"message": "租户ID和配置ID不能为空",
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
err := service.PaymentConfig.DeletePaymentConfig(ctx, tenantID, configID)
|
||||
if err != nil {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 500,
|
||||
"message": err.Error(),
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": nil,
|
||||
})
|
||||
// Delete 删除支付配置
|
||||
func (c *paymentConfig) Delete(ctx context.Context, req *dto.DeletePaymentConfigReq) (res *dto.CommonResp, err error) {
|
||||
// 删除支付配置
|
||||
err = service.PaymentConfig.DeletePaymentConfig(ctx, req.TenantID, req.ConfigID)
|
||||
return &dto.CommonResp{
|
||||
Success: err == nil,
|
||||
Message: "删除成功",
|
||||
}, err
|
||||
}
|
||||
|
||||
// EnablePaymentConfig 启用支付配置
|
||||
func (c *PaymentConfigController) EnablePaymentConfig(r *ghttp.Request) {
|
||||
tenantID := r.Get("tenant_id").String()
|
||||
configID := r.Get("config_id").String()
|
||||
|
||||
if tenantID == "" || configID == "" {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 400,
|
||||
"message": "租户ID和配置ID不能为空",
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
err := service.PaymentConfig.EnablePaymentConfig(ctx, tenantID, configID)
|
||||
if err != nil {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 500,
|
||||
"message": err.Error(),
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": nil,
|
||||
})
|
||||
// Enable 启用支付配置
|
||||
func (c *paymentConfig) Enable(ctx context.Context, req *dto.EnablePaymentConfigReq) (res *dto.CommonResp, err error) {
|
||||
// 启用支付配置
|
||||
err = service.PaymentConfig.EnablePaymentConfig(ctx, req.TenantID, req.ConfigID)
|
||||
return &dto.CommonResp{
|
||||
Success: err == nil,
|
||||
Message: "启用成功",
|
||||
}, err
|
||||
}
|
||||
|
||||
// DisablePaymentConfig 禁用支付配置
|
||||
func (c *PaymentConfigController) DisablePaymentConfig(r *ghttp.Request) {
|
||||
tenantID := r.Get("tenant_id").String()
|
||||
configID := r.Get("config_id").String()
|
||||
|
||||
if tenantID == "" || configID == "" {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 400,
|
||||
"message": "租户ID和配置ID不能为空",
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
err := service.PaymentConfig.DisablePaymentConfig(ctx, tenantID, configID)
|
||||
if err != nil {
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 500,
|
||||
"message": err.Error(),
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJsonExit(g.Map{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": nil,
|
||||
})
|
||||
// Disable 禁用支付配置
|
||||
func (c *paymentConfig) Disable(ctx context.Context, req *dto.DisablePaymentConfigReq) (res *dto.CommonResp, err error) {
|
||||
// 禁用支付配置
|
||||
err = service.PaymentConfig.DisablePaymentConfig(ctx, req.TenantID, req.ConfigID)
|
||||
return &dto.CommonResp{
|
||||
Success: err == nil,
|
||||
Message: "禁用成功",
|
||||
}, err
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ func (d *order) CreatePendingOrder(ctx context.Context, order *entity.OrderPendi
|
||||
}
|
||||
|
||||
// GetOrderByNo 根据订单号查询订单(自动识别状态)
|
||||
func (d *order) GetOrderByNo(ctx context.Context, tenantID, orderNo string) (interface{}, consts.OrderStatus, error) {
|
||||
func (d *order) GetOrderByNo(ctx context.Context, orderNo string) (interface{}, consts.OrderStatus, error) {
|
||||
// 按状态优先级搜索(从最新状态开始)
|
||||
statuses := []consts.OrderStatus{
|
||||
consts.OrderStatusCompleted,
|
||||
@@ -72,22 +72,22 @@ func (d *order) GetOrderByNo(ctx context.Context, tenantID, orderNo string) (int
|
||||
switch status {
|
||||
case consts.OrderStatusPending:
|
||||
var order entity.OrderPending
|
||||
if err := d.findOrderByNo(collection, ctx, tenantID, orderNo, &order); err == nil {
|
||||
if err := d.findOrderByNo(collection, ctx, orderNo, &order); err == nil {
|
||||
return &order, status, nil
|
||||
}
|
||||
case consts.OrderStatusPaid:
|
||||
var order entity.OrderPaid
|
||||
if err := d.findOrderByNo(collection, ctx, tenantID, orderNo, &order); err == nil {
|
||||
if err := d.findOrderByNo(collection, ctx, orderNo, &order); err == nil {
|
||||
return &order, status, nil
|
||||
}
|
||||
case consts.OrderStatusShipped:
|
||||
var order entity.OrderShipped
|
||||
if err := d.findOrderByNo(collection, ctx, tenantID, orderNo, &order); err == nil {
|
||||
if err := d.findOrderByNo(collection, ctx, orderNo, &order); err == nil {
|
||||
return &order, status, nil
|
||||
}
|
||||
case consts.OrderStatusCompleted:
|
||||
var order entity.OrderCompleted
|
||||
if err := d.findOrderByNo(collection, ctx, tenantID, orderNo, &order); err == nil {
|
||||
if err := d.findOrderByNo(collection, ctx, orderNo, &order); err == nil {
|
||||
return &order, status, nil
|
||||
}
|
||||
}
|
||||
@@ -97,9 +97,8 @@ func (d *order) GetOrderByNo(ctx context.Context, tenantID, orderNo string) (int
|
||||
}
|
||||
|
||||
// findOrderByNo 通用订单查询方法
|
||||
func (d *order) findOrderByNo(collection string, ctx context.Context, tenantID, orderNo string, result interface{}) error {
|
||||
func (d *order) findOrderByNo(collection string, ctx context.Context, orderNo string, result interface{}) error {
|
||||
filter := bson.M{
|
||||
"tenant_id": tenantID,
|
||||
"order_no": orderNo,
|
||||
}
|
||||
|
||||
@@ -111,7 +110,7 @@ func (d *order) findOrderByNo(collection string, ctx context.Context, tenantID,
|
||||
}
|
||||
|
||||
// MoveOrderToStatus 将订单从一个状态移动到另一个状态
|
||||
func (d *order) MoveOrderToStatus(ctx context.Context, fromStatus, toStatus consts.OrderStatus, tenantID, orderNo string, updateData bson.M) error {
|
||||
func (d *order) MoveOrderToStatus(ctx context.Context, fromStatus, toStatus consts.OrderStatus, orderNo string, updateData bson.M) error {
|
||||
// 获取源集合
|
||||
srcCollection, err := d.getCollection(fromStatus)
|
||||
if err != nil {
|
||||
@@ -127,7 +126,6 @@ func (d *order) MoveOrderToStatus(ctx context.Context, fromStatus, toStatus cons
|
||||
// 查找源订单
|
||||
var orderData bson.M
|
||||
filter := bson.M{
|
||||
"tenant_id": tenantID,
|
||||
"order_no": orderNo,
|
||||
}
|
||||
|
||||
@@ -154,7 +152,7 @@ func (d *order) MoveOrderToStatus(ctx context.Context, fromStatus, toStatus cons
|
||||
}
|
||||
|
||||
// UpdatePendingOrder 更新待支付订单
|
||||
func (d *order) UpdatePendingOrder(ctx context.Context, tenantID, orderNo string, update bson.M) error {
|
||||
func (d *order) UpdatePendingOrder(ctx context.Context, orderNo string, update bson.M) error {
|
||||
collection, err := d.getCollection(consts.OrderStatusPending)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -163,7 +161,6 @@ func (d *order) UpdatePendingOrder(ctx context.Context, tenantID, orderNo string
|
||||
update["updated_at"] = time.Now()
|
||||
|
||||
filter := bson.M{
|
||||
"tenant_id": tenantID,
|
||||
"order_no": orderNo,
|
||||
}
|
||||
_, err = mongo.Update(ctx, filter, bson.M{"$set": update}, collection)
|
||||
@@ -172,14 +169,14 @@ func (d *order) UpdatePendingOrder(ctx context.Context, tenantID, orderNo string
|
||||
}
|
||||
|
||||
// ListOrdersByStatus 根据状态查询订单列表
|
||||
func (d *order) ListOrdersByStatus(ctx context.Context, status consts.OrderStatus, tenantID, userID string, page, pageSize int) (interface{}, int64, error) {
|
||||
func (d *order) ListOrdersByStatus(ctx context.Context, status consts.OrderStatus, userID string, page, pageSize int) (interface{}, int64, error) {
|
||||
collection, err := d.getCollection(status)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 构建查询条件
|
||||
filter := bson.M{"tenant_id": tenantID}
|
||||
filter := bson.M{}
|
||||
if userID != "" {
|
||||
filter["user_id"] = userID
|
||||
}
|
||||
@@ -225,14 +222,13 @@ func (d *order) ListOrdersByStatus(ctx context.Context, status consts.OrderStatu
|
||||
}
|
||||
|
||||
// GetExpiredPendingOrders 获取过期的待支付订单
|
||||
func (d *order) GetExpiredPendingOrders(ctx context.Context, tenantID string) ([]entity.OrderPending, error) {
|
||||
func (d *order) GetExpiredPendingOrders(ctx context.Context) ([]entity.OrderPending, error) {
|
||||
collection, err := d.getCollection(consts.OrderStatusPending)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
filter := bson.M{
|
||||
"tenant_id": tenantID,
|
||||
"expired_at": bson.M{"$lte": time.Now()},
|
||||
}
|
||||
|
||||
@@ -245,14 +241,13 @@ func (d *order) GetExpiredPendingOrders(ctx context.Context, tenantID string) ([
|
||||
}
|
||||
|
||||
// UpdatePayInfo 更新支付信息(待支付订单)
|
||||
func (d *order) UpdatePayInfo(ctx context.Context, tenantID, orderNo string, payInfo entity.PayInfo) error {
|
||||
func (d *order) UpdatePayInfo(ctx context.Context, orderNo string, payInfo entity.PayInfo) error {
|
||||
collection, err := d.getCollection(consts.OrderStatusPending)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
filter := bson.M{
|
||||
"tenant_id": tenantID,
|
||||
"order_no": orderNo,
|
||||
}
|
||||
update := bson.M{
|
||||
|
||||
10
go.mod
10
go.mod
@@ -10,6 +10,8 @@ require (
|
||||
go.mongodb.org/mongo-driver/v2 v2.4.0
|
||||
)
|
||||
|
||||
replace gitee.com/red-future---jilin-g/common v0.1.9 => ../common
|
||||
|
||||
require (
|
||||
github.com/BurntSushi/toml v1.5.0 // indirect
|
||||
github.com/armon/go-metrics v0.4.1 // indirect
|
||||
@@ -19,7 +21,7 @@ require (
|
||||
github.com/dgraph-io/badger/v4 v4.2.0 // indirect
|
||||
github.com/dgraph-io/ristretto v0.1.1 // indirect
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||
github.com/dustin/go-humanize v1.0.0 // indirect
|
||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||
github.com/emirpasic/gods/v2 v2.0.0-alpha // indirect
|
||||
github.com/fatih/color v1.18.0 // indirect
|
||||
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
||||
@@ -31,7 +33,7 @@ require (
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang-jwt/jwt/v5 v5.0.0 // indirect
|
||||
github.com/golang/glog v1.2.5 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||
github.com/golang/protobuf v1.5.4 // indirect
|
||||
github.com/golang/snappy v1.0.0 // indirect
|
||||
github.com/google/flatbuffers v1.12.1 // indirect
|
||||
@@ -48,7 +50,7 @@ require (
|
||||
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
|
||||
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
||||
github.com/hashicorp/serf v0.10.1 // indirect
|
||||
github.com/klauspost/compress v1.16.7 // indirect
|
||||
github.com/klauspost/compress v1.18.0 // indirect
|
||||
github.com/magiconair/properties v1.8.10 // indirect
|
||||
github.com/mattn/go-colorable v0.1.14 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
@@ -66,7 +68,7 @@ require (
|
||||
github.com/xdg-go/scram v1.1.2 // indirect
|
||||
github.com/xdg-go/stringprep v1.0.4 // indirect
|
||||
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
|
||||
go.opencensus.io v0.22.5 // indirect
|
||||
go.opencensus.io v0.23.0 // indirect
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||
go.opentelemetry.io/otel v1.38.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect
|
||||
|
||||
60
go.sum
60
go.sum
@@ -1,6 +1,4 @@
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
gitee.com/red-future---jilin-g/common v0.1.9 h1:gorlFdiqLExGC9Z42j2xgQd+yeoRWHfAH71Q22lUSEs=
|
||||
gitee.com/red-future---jilin-g/common v0.1.9/go.mod h1:FWIIaGd6bueA3QXSFeyaL9XesFOgGtDsMrHrPQkrJl4=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
|
||||
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||
@@ -25,6 +23,7 @@ github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
|
||||
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
|
||||
github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
|
||||
github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
@@ -33,6 +32,7 @@ github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp
|
||||
github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=
|
||||
github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||
@@ -45,10 +45,15 @@ github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczC
|
||||
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
||||
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
|
||||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||
github.com/emirpasic/gods/v2 v2.0.0-alpha h1:dwFlh8pBg1VMOXWGipNMRt8v96dKAIvBehtCt6OtunU=
|
||||
github.com/emirpasic/gods/v2 v2.0.0-alpha/go.mod h1:W0y4M2dtBB9U5z3YlghmpuUhiaZT2h6yoeE+C1sCp6A=
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
|
||||
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
||||
@@ -86,12 +91,20 @@ github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVI
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I=
|
||||
github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
|
||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I=
|
||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
||||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||
github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs=
|
||||
@@ -101,12 +114,16 @@ github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
|
||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
|
||||
github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw=
|
||||
github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
||||
@@ -164,8 +181,8 @@ github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u
|
||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
|
||||
github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
|
||||
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
|
||||
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
@@ -231,6 +248,7 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn
|
||||
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
|
||||
@@ -256,6 +274,7 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
|
||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||
@@ -275,8 +294,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
go.mongodb.org/mongo-driver/v2 v2.4.0 h1:Oq6BmUAAFTzMeh6AonuDlgZMuAuEiUxoAD1koK5MuFo=
|
||||
go.mongodb.org/mongo-driver/v2 v2.4.0/go.mod h1:jHeEDJHJq7tm6ZF45Issun9dbogjfnPySb1vXA7EeAI=
|
||||
go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0=
|
||||
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
|
||||
go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
|
||||
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
|
||||
@@ -325,6 +344,7 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
|
||||
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
@@ -334,7 +354,6 @@ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
@@ -350,7 +369,6 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
|
||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
@@ -386,6 +404,7 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
@@ -400,15 +419,28 @@ gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||
google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
|
||||
google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
|
||||
google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||
@@ -420,6 +452,8 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
|
||||
19
main.go
19
main.go
@@ -2,30 +2,27 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"order/controller"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/http"
|
||||
"gitee.com/red-future---jilin-g/common/jaeger"
|
||||
_ "gitee.com/red-future---jilin-g/common/mongo"
|
||||
_ "gitee.com/red-future---jilin-g/common/ragflow" // RAGFlow 客户端自动初始化
|
||||
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
|
||||
_ "github.com/gogf/gf/contrib/nosql/redis/v2"
|
||||
"order/controller"
|
||||
"order/scheduler"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
func main() {
|
||||
defer jaeger.ShutDown(context.Background())
|
||||
|
||||
// 启动订单统计定时任务调度器
|
||||
ctx := context.Background()
|
||||
if err := scheduler.OrderStatisticsSchedulerInstance.StartScheduler(ctx); err != nil {
|
||||
g.Log().Errorf(ctx, "启动订单统计定时任务失败: %v", err)
|
||||
}
|
||||
|
||||
http.RouteRegister([]interface{}{
|
||||
controller.Order,
|
||||
controller.OrderStatistics,
|
||||
controller.PaymentConfig,
|
||||
})
|
||||
// 启动订单统计定时任务调度器
|
||||
//ctx := context.Background()
|
||||
//if err := scheduler.OrderStatisticsSchedulerInstance.StartScheduler(ctx); err != nil {
|
||||
// g.Log().Errorf(ctx, "启动订单统计定时任务失败: %v", err)
|
||||
//}
|
||||
select {}
|
||||
}
|
||||
|
||||
@@ -2,13 +2,16 @@ package dto
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
// CreateOrderReq 创建订单请求
|
||||
|
||||
type CreateOrderReq struct {
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
UserID string `json:"user_id" binding:"required"` // 用户ID
|
||||
g.Meta `path:"/create" method:"post" tags:"订单管理" summary:"创建订单" dc:"创建新订单"`
|
||||
TenantID interface{} `json:"tenant_id" binding:"required"` // 租户ID
|
||||
UserID int64 `json:"user_id" binding:"required"` // 用户ID
|
||||
OrderType string `json:"order_type" binding:"required"` // 订单类型
|
||||
Subject string `json:"subject" binding:"required"` // 订单标题
|
||||
Description string `json:"description"` // 订单描述
|
||||
@@ -58,6 +61,7 @@ type CreateOrderResp struct {
|
||||
// PayOrderReq 支付订单请求
|
||||
|
||||
type PayOrderReq struct {
|
||||
g.Meta `path:"/pay" method:"post" tags:"订单管理" summary:"支付订单" dc:"发起订单支付"`
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
OrderNo string `json:"order_no" binding:"required"` // 订单号
|
||||
PayMethod string `json:"pay_method" binding:"required"` // 支付方式:wechat/alipay
|
||||
@@ -82,6 +86,7 @@ type PayOrderResp struct {
|
||||
// QueryOrderReq 查询订单请求
|
||||
|
||||
type QueryOrderReq struct {
|
||||
g.Meta `path:"/query" method:"get" tags:"订单管理" summary:"查询订单详情" dc:"根据订单号查询订单详情"`
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
OrderNo string `json:"order_no" binding:"required"` // 订单号
|
||||
}
|
||||
@@ -96,7 +101,7 @@ type QueryOrderResp struct {
|
||||
|
||||
type OrderDetail struct {
|
||||
ID string `json:"id"` // 订单ID
|
||||
TenantID string `json:"tenant_id"` // 租户ID
|
||||
TenantID interface{} `json:"tenant_id"` // 租户ID
|
||||
OrderNo string `json:"order_no"` // 订单号
|
||||
UserID int64 `json:"user_id"` // 用户ID
|
||||
TotalAmount int64 `json:"total_amount"` // 订单总金额
|
||||
@@ -161,6 +166,7 @@ type PayInfo struct {
|
||||
// CancelOrderReq 取消订单请求
|
||||
|
||||
type CancelOrderReq struct {
|
||||
g.Meta `path:"/cancel" method:"post" tags:"订单管理" summary:"取消订单" dc:"取消指定订单"`
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
OrderNo string `json:"order_no" binding:"required"` // 订单号
|
||||
Reason string `json:"reason"` // 取消原因
|
||||
@@ -176,6 +182,7 @@ type CancelOrderResp struct {
|
||||
// RefundOrderReq 退款请求
|
||||
|
||||
type RefundOrderReq struct {
|
||||
g.Meta `path:"/refund" method:"post" tags:"订单管理" summary:"订单退款" dc:"发起订单退款"`
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
OrderNo string `json:"order_no" binding:"required"` // 订单号
|
||||
RefundAmount int64 `json:"refund_amount" binding:"required"` // 退款金额(分)
|
||||
@@ -193,6 +200,7 @@ type RefundOrderResp struct {
|
||||
// ListOrdersReq 订单列表请求
|
||||
|
||||
type ListOrdersReq struct {
|
||||
g.Meta `path:"/orders" method:"get" tags:"订单管理" summary:"订单列表" dc:"分页查询订单列表"`
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
UserID string `json:"user_id"` // 用户ID(可选)
|
||||
Status string `json:"status"` // 订单状态(可选)
|
||||
@@ -225,6 +233,7 @@ type OrderSummary struct {
|
||||
// PaymentNotifyReq 支付回调请求
|
||||
|
||||
type PaymentNotifyReq struct {
|
||||
g.Meta `path:"/paymentNotify" method:"post" tags:"支付管理" summary:"支付回调" dc:"处理支付平台回调通知"`
|
||||
TenantID string `json:"tenant_id"` // 租户ID
|
||||
OrderNo string `json:"order_no"` // 订单号
|
||||
PayMethod string `json:"pay_method"` // 支付方式
|
||||
@@ -243,6 +252,7 @@ type PaymentNotifyResp struct {
|
||||
// RefundNotifyReq 退款回调请求
|
||||
|
||||
type RefundNotifyReq struct {
|
||||
g.Meta `path:"/refundNotify" method:"post" tags:"退款管理" summary:"退款回调" dc:"处理退款平台回调通知"`
|
||||
TenantID string `json:"tenant_id"` // 租户ID
|
||||
RefundNo string `json:"refund_no"` // 退款单号
|
||||
Status string `json:"status"` // 退款状态
|
||||
@@ -256,85 +266,9 @@ type RefundNotifyResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
}
|
||||
|
||||
// CreatePaymentConfigReq 创建支付配置请求
|
||||
// CommonResp 通用响应
|
||||
|
||||
type CreatePaymentConfigReq struct {
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
PayMethod string `json:"pay_method" binding:"required"` // 支付方式:wechat/alipay
|
||||
ConfigName string `json:"config_name" binding:"required"` // 配置名称
|
||||
Remark string `json:"remark"` // 备注
|
||||
IsEnabled bool `json:"is_enabled"` // 是否启用
|
||||
Config map[string]interface{} `json:"config" binding:"required"` // 配置参数
|
||||
}
|
||||
|
||||
// UpdatePaymentConfigReq 更新支付配置请求
|
||||
|
||||
type UpdatePaymentConfigReq struct {
|
||||
ID string `json:"id" binding:"required"` // 配置ID
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
ConfigName string `json:"config_name" binding:"required"` // 配置名称
|
||||
Remark string `json:"remark"` // 备注
|
||||
IsEnabled bool `json:"is_enabled"` // 是否启用
|
||||
Config map[string]interface{} `json:"config" binding:"required"` // 配置参数
|
||||
}
|
||||
|
||||
// QueryPaymentConfigReq 查询支付配置请求
|
||||
|
||||
type QueryPaymentConfigReq struct {
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
PayMethod string `json:"pay_method"` // 支付方式(可选)
|
||||
}
|
||||
|
||||
// PaymentConfigResp 支付配置响应
|
||||
|
||||
type PaymentConfigResp struct {
|
||||
ID string `json:"id"` // 配置ID
|
||||
TenantID string `json:"tenant_id"` // 租户ID
|
||||
PayMethod string `json:"pay_method"` // 支付方式
|
||||
ConfigName string `json:"config_name"` // 配置名称
|
||||
Remark string `json:"remark"` // 备注
|
||||
IsEnabled bool `json:"is_enabled"` // 是否启用
|
||||
Config map[string]interface{} `json:"config"` // 配置参数
|
||||
CreatedAt time.Time `json:"created_at"` // 创建时间
|
||||
UpdatedAt time.Time `json:"updated_at"` // 更新时间
|
||||
}
|
||||
|
||||
// WechatConfig 微信支付配置
|
||||
|
||||
type WechatConfig struct {
|
||||
ID string `json:"id"` // 配置ID
|
||||
TenantID string `json:"tenant_id"` // 租户ID
|
||||
ConfigName string `json:"config_name"` // 配置名称
|
||||
AppID string `json:"app_id"` // 应用ID
|
||||
MchID string `json:"mch_id"` // 商户号
|
||||
APIKey string `json:"api_key"` // API密钥
|
||||
NotifyURL string `json:"notify_url"` // 回调地址
|
||||
ReturnURL string `json:"return_url"` // 返回地址
|
||||
CertPath string `json:"cert_path"` // 证书路径
|
||||
KeyPath string `json:"key_path"` // 密钥路径
|
||||
Sandbox bool `json:"sandbox"` // 是否沙箱环境
|
||||
SupportNative bool `json:"support_native"` // 支持扫码支付
|
||||
SupportJSAPI bool `json:"support_jsapi"` // 支持JSAPI支付
|
||||
SupportAPP bool `json:"support_app"` // 支持APP支付
|
||||
SupportH5 bool `json:"support_h5"` // 支持H5支付
|
||||
GatewayURL string `json:"gateway_url"` // 网关地址
|
||||
}
|
||||
|
||||
// AlipayConfig 支付宝支付配置
|
||||
|
||||
type AlipayConfig struct {
|
||||
ID string `json:"id"` // 配置ID
|
||||
TenantID string `json:"tenant_id"` // 租户ID
|
||||
ConfigName string `json:"config_name"` // 配置名称
|
||||
AppID string `json:"app_id"` // 应用ID
|
||||
NotifyURL string `json:"notify_url"` // 回调地址
|
||||
ReturnURL string `json:"return_url"` // 返回地址
|
||||
AppPrivateKey string `json:"app_private_key"` // 应用私钥
|
||||
AlipayPublicKey string `json:"alipay_public_key"` // 支付宝公钥
|
||||
Sandbox bool `json:"sandbox"` // 是否沙箱环境
|
||||
GatewayURL string `json:"gateway_url"` // 网关地址
|
||||
SupportNative bool `json:"support_native"` // 支持扫码支付
|
||||
SupportJSAPI bool `json:"support_jsapi"` // 支持JSAPI支付
|
||||
SupportAPP bool `json:"support_app"` // 支持APP支付
|
||||
SupportH5 bool `json:"support_h5"` // 支持H5支付
|
||||
type CommonResp struct {
|
||||
Success bool `json:"success"` // 是否成功
|
||||
Message string `json:"message"` // 消息
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
|
||||
// GetOrderStatisticsReq 获取订单统计数据请求
|
||||
type GetOrderStatisticsReq struct {
|
||||
g.Meta `path:"/statistics" method:"get" tags:"订单统计" summary:"获取订单统计数据" dc:"根据报表类型和日期获取订单统计数据"`
|
||||
g.Meta `path:"/getStatistics" method:"get" tags:"订单统计" summary:"获取订单统计数据" dc:"根据报表类型和日期获取订单统计数据"`
|
||||
TenantID int64 `v:"required" json:"tenant_id" dc:"租户ID"`
|
||||
ReportType string `v:"required|in:daily,monthly,quarterly,yearly" json:"report_type" dc:"报表类型"`
|
||||
StartDate string `json:"start_date,omitempty" dc:"开始日期"`
|
||||
@@ -62,7 +62,7 @@ type OrderStatisticsDetail struct {
|
||||
|
||||
// GetOrderStatisticsListReq 获取订单统计列表请求
|
||||
type GetOrderStatisticsListReq struct {
|
||||
g.Meta `path:"/statistics/list" method:"get" tags:"订单统计" summary:"获取订单统计列表" dc:"分页获取订单统计列表"`
|
||||
g.Meta `path:"/getStatisticsList" method:"get" tags:"订单统计" summary:"获取订单统计列表" dc:"分页获取订单统计列表"`
|
||||
TenantID int64 `v:"required" json:"tenant_id" dc:"租户ID"`
|
||||
ReportType string `v:"required|in:daily,monthly,quarterly,yearly" json:"report_type" dc:"报表类型"`
|
||||
StartDate string `json:"start_date,omitempty" dc:"开始日期"`
|
||||
@@ -81,7 +81,7 @@ type GetOrderStatisticsListRes struct {
|
||||
|
||||
// GenerateOrderStatisticsReq 生成订单统计数据请求
|
||||
type GenerateOrderStatisticsReq struct {
|
||||
g.Meta `path:"/statistics/generate" method:"post" tags:"订单统计" summary:"生成订单统计数据" dc:"手动触发生成指定日期的统计数据"`
|
||||
g.Meta `path:"/generateStatistics" method:"post" tags:"订单统计" summary:"生成订单统计数据" dc:"手动触发生成指定日期的统计数据"`
|
||||
TenantID int64 `v:"required" json:"tenant_id" dc:"租户ID"`
|
||||
ReportType string `v:"required|in:daily,monthly,quarterly,yearly" json:"report_type" dc:"报表类型"`
|
||||
ReportDate string `json:"report_date,omitempty" dc:"统计日期,格式YYYY-MM-DD"`
|
||||
@@ -96,7 +96,7 @@ type GenerateOrderStatisticsRes struct {
|
||||
|
||||
// GetOrderTrendReq 获取订单趋势数据请求
|
||||
type GetOrderTrendReq struct {
|
||||
g.Meta `path:"/statistics/trend" method:"get" tags:"订单统计" summary:"获取订单趋势数据" dc:"获取指定时间范围内的订单趋势数据"`
|
||||
g.Meta `path:"/getTrend" method:"get" tags:"订单统计" summary:"获取订单趋势数据" dc:"获取指定时间范围内的订单趋势数据"`
|
||||
TenantID int64 `v:"required" json:"tenant_id" dc:"租户ID"`
|
||||
StartDate string `v:"required" json:"start_date" dc:"开始日期,格式YYYY-MM-DD"`
|
||||
EndDate string `v:"required" json:"end_date" dc:"结束日期,格式YYYY-MM-DD"`
|
||||
@@ -117,7 +117,7 @@ type TrendDataPoint struct {
|
||||
|
||||
// GetTopAssetsReq 获取热门资产请求
|
||||
type GetTopAssetsReq struct {
|
||||
g.Meta `path:"/statistics/top-assets" method:"get" tags:"订单统计" summary:"获取热门资产" dc:"获取指定时间范围内的热门资产排行"`
|
||||
g.Meta `path:"/getTopAssets" method:"get" tags:"订单统计" summary:"获取热门资产" dc:"获取指定时间范围内的热门资产排行"`
|
||||
TenantID int64 `v:"required" json:"tenant_id" dc:"租户ID"`
|
||||
StartDate string `v:"required" json:"start_date" dc:"开始日期,格式YYYY-MM-DD"`
|
||||
EndDate string `v:"required" json:"end_date" dc:"结束日期,格式YYYY-MM-DD"`
|
||||
|
||||
120
model/dto/payment_config.go
Normal file
120
model/dto/payment_config.go
Normal file
@@ -0,0 +1,120 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
// CreatePaymentConfigReq 创建支付配置请求
|
||||
type CreatePaymentConfigReq struct {
|
||||
g.Meta `path:"/create" method:"post" tags:"支付配置" summary:"创建支付配置" dc:"创建新的支付配置"`
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
PayMethod string `json:"pay_method" binding:"required"` // 支付方式:wechat/alipay
|
||||
ConfigName string `json:"config_name" binding:"required"` // 配置名称
|
||||
Remark string `json:"remark"` // 备注
|
||||
IsEnabled bool `json:"is_enabled"` // 是否启用
|
||||
Config map[string]interface{} `json:"config" binding:"required"` // 配置参数
|
||||
}
|
||||
|
||||
// UpdatePaymentConfigReq 更新支付配置请求
|
||||
type UpdatePaymentConfigReq struct {
|
||||
g.Meta `path:"/update" method:"put" tags:"支付配置" summary:"更新支付配置" dc:"更新指定支付配置"`
|
||||
ID string `json:"id" binding:"required"` // 配置ID
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
ConfigName string `json:"config_name" binding:"required"` // 配置名称
|
||||
Remark string `json:"remark"` // 备注
|
||||
IsEnabled bool `json:"is_enabled"` // 是否启用
|
||||
Config map[string]interface{} `json:"config" binding:"required"` // 配置参数
|
||||
}
|
||||
|
||||
// QueryPaymentConfigReq 查询支付配置请求
|
||||
type QueryPaymentConfigReq struct {
|
||||
g.Meta `path:"/query" method:"get" tags:"支付配置" summary:"查询支付配置" dc:"查询支付配置列表"`
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
PayMethod string `json:"pay_method"` // 支付方式(可选)
|
||||
}
|
||||
|
||||
// ListPaymentConfigReq 查询支付配置列表请求
|
||||
type ListPaymentConfigReq struct {
|
||||
g.Meta `path:"/list" method:"get" tags:"支付配置" summary:"查询支付配置列表" dc:"分页查询支付配置列表"`
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
}
|
||||
|
||||
// DeletePaymentConfigReq 删除支付配置请求
|
||||
type DeletePaymentConfigReq struct {
|
||||
g.Meta `path:"/delete" method:"delete" tags:"支付配置" summary:"删除支付配置" dc:"删除指定支付配置"`
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
ConfigID string `json:"config_id" binding:"required"` // 配置ID
|
||||
}
|
||||
|
||||
// EnablePaymentConfigReq 启用支付配置请求
|
||||
type EnablePaymentConfigReq struct {
|
||||
g.Meta `path:"/enable" method:"post" tags:"支付配置" summary:"启用支付配置" dc:"启用指定支付配置"`
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
ConfigID string `json:"config_id" binding:"required"` // 配置ID
|
||||
}
|
||||
|
||||
// DisablePaymentConfigReq 禁用支付配置请求
|
||||
type DisablePaymentConfigReq struct {
|
||||
g.Meta `path:"/disable" method:"post" tags:"支付配置" summary:"禁用支付配置" dc:"禁用指定支付配置"`
|
||||
TenantID string `json:"tenant_id" binding:"required"` // 租户ID
|
||||
ConfigID string `json:"config_id" binding:"required"` // 配置ID
|
||||
}
|
||||
|
||||
// PaymentConfigListResp 支付配置列表响应
|
||||
type PaymentConfigListResp struct {
|
||||
List []PaymentConfigResp `json:"list"` // 配置列表
|
||||
Total int64 `json:"total"` // 总数
|
||||
}
|
||||
|
||||
// PaymentConfigResp 支付配置响应
|
||||
type PaymentConfigResp struct {
|
||||
ID string `json:"id"` // 配置ID
|
||||
TenantID string `json:"tenant_id"` // 租户ID
|
||||
PayMethod string `json:"pay_method"` // 支付方式
|
||||
ConfigName string `json:"config_name"` // 配置名称
|
||||
Remark string `json:"remark"` // 备注
|
||||
IsEnabled bool `json:"is_enabled"` // 是否启用
|
||||
Config map[string]interface{} `json:"config"` // 配置参数
|
||||
CreatedAt time.Time `json:"created_at"` // 创建时间
|
||||
UpdatedAt time.Time `json:"updated_at"` // 更新时间
|
||||
}
|
||||
|
||||
// WechatConfig 微信支付配置
|
||||
type WechatConfig struct {
|
||||
ID string `json:"id"` // 配置ID
|
||||
TenantID string `json:"tenant_id"` // 租户ID
|
||||
ConfigName string `json:"config_name"` // 配置名称
|
||||
AppID string `json:"app_id"` // 应用ID
|
||||
MchID string `json:"mch_id"` // 商户号
|
||||
APIKey string `json:"api_key"` // API密钥
|
||||
NotifyURL string `json:"notify_url"` // 回调地址
|
||||
ReturnURL string `json:"return_url"` // 返回地址
|
||||
CertPath string `json:"cert_path"` // 证书路径
|
||||
KeyPath string `json:"key_path"` // 密钥路径
|
||||
Sandbox bool `json:"sandbox"` // 是否沙箱环境
|
||||
SupportNative bool `json:"support_native"` // 支持扫码支付
|
||||
SupportJSAPI bool `json:"support_jsapi"` // 支持JSAPI支付
|
||||
SupportAPP bool `json:"support_app"` // 支持APP支付
|
||||
SupportH5 bool `json:"support_h5"` // 支持H5支付
|
||||
GatewayURL string `json:"gateway_url"` // 网关地址
|
||||
}
|
||||
|
||||
// AlipayConfig 支付宝支付配置
|
||||
type AlipayConfig struct {
|
||||
ID string `json:"id"` // 配置ID
|
||||
TenantID string `json:"tenant_id"` // 租户ID
|
||||
ConfigName string `json:"config_name"` // 配置名称
|
||||
AppID string `json:"app_id"` // 应用ID
|
||||
NotifyURL string `json:"notify_url"` // 回调地址
|
||||
ReturnURL string `json:"return_url"` // 返回地址
|
||||
AppPrivateKey string `json:"app_private_key"` // 应用私钥
|
||||
AlipayPublicKey string `json:"alipay_public_key"` // 支付宝公钥
|
||||
Sandbox bool `json:"sandbox"` // 是否沙箱环境
|
||||
GatewayURL string `json:"gateway_url"` // 网关地址
|
||||
SupportNative bool `json:"support_native"` // 支持扫码支付
|
||||
SupportJSAPI bool `json:"support_jsapi"` // 支持JSAPI支付
|
||||
SupportAPP bool `json:"support_app"` // 支持APP支付
|
||||
SupportH5 bool `json:"support_h5"` // 支持H5支付
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package scheduler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@@ -60,13 +61,24 @@ func (s *OrderStatisticsScheduler) acquireDistributedLock(ctx context.Context) b
|
||||
lockKey := "order_statistics_scheduler_lock"
|
||||
|
||||
// 尝试设置锁,过期时间30秒
|
||||
result, err := g.Redis().SetNX(ctx, lockKey, "locked", time.Second*30)
|
||||
success, err := g.Redis().SetNX(ctx, lockKey, "locked")
|
||||
if err != nil {
|
||||
g.Log().Errorf(ctx, "获取分布式锁失败: %v", err)
|
||||
return false
|
||||
}
|
||||
|
||||
return result.Bool()
|
||||
// 设置过期时间
|
||||
if success {
|
||||
_, err = g.Redis().Do(ctx, "EXPIRE", lockKey, 30)
|
||||
if err != nil {
|
||||
g.Log().Errorf(ctx, "设置锁过期时间失败: %v", err)
|
||||
// 删除已设置的锁
|
||||
g.Redis().Do(ctx, "DEL", lockKey)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return success
|
||||
}
|
||||
|
||||
// renewDistributedLock 续期分布式锁
|
||||
@@ -74,7 +86,7 @@ func (s *OrderStatisticsScheduler) renewDistributedLock(ctx context.Context) boo
|
||||
lockKey := "order_statistics_scheduler_lock"
|
||||
|
||||
// 续期30秒
|
||||
_, err := g.Redis().Expire(ctx, lockKey, time.Second*30)
|
||||
_, err := g.Redis().Do(ctx, "EXPIRE", lockKey, 30)
|
||||
if err != nil {
|
||||
g.Log().Errorf(ctx, "续期分布式锁失败: %v", err)
|
||||
return false
|
||||
@@ -118,13 +130,24 @@ func (s *OrderStatisticsScheduler) releaseDistributedLock(ctx context.Context) {
|
||||
// acquireTaskLock 获取任务级分布式锁
|
||||
func (s *OrderStatisticsScheduler) acquireTaskLock(ctx context.Context, lockKey string) bool {
|
||||
// 尝试设置锁,过期时间10分钟
|
||||
result, err := g.Redis().SetNX(ctx, lockKey, "locked", time.Minute*10)
|
||||
success, err := g.Redis().SetNX(ctx, lockKey, "locked")
|
||||
if err != nil {
|
||||
g.Log().Errorf(ctx, "获取任务锁失败: %v", err)
|
||||
return false
|
||||
}
|
||||
|
||||
return result.Bool()
|
||||
// 设置过期时间
|
||||
if success {
|
||||
_, err = g.Redis().Do(ctx, "EXPIRE", lockKey, 600) // 10分钟=600秒
|
||||
if err != nil {
|
||||
g.Log().Errorf(ctx, "设置锁过期时间失败: %v", err)
|
||||
// 删除已设置的锁
|
||||
g.Redis().Do(ctx, "DEL", lockKey)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return success
|
||||
}
|
||||
|
||||
// releaseTaskLock 释放任务级分布式锁
|
||||
@@ -262,15 +285,14 @@ func (s *OrderStatisticsScheduler) generateYesterdayDailyReport(ctx context.Cont
|
||||
|
||||
// generateTenantDailyReport 生成指定租户的日报表
|
||||
func (s *OrderStatisticsScheduler) generateTenantDailyReport(ctx context.Context, tenantID int64, date time.Time) {
|
||||
lockKey := g.NewVar()
|
||||
lockKey.Setf("order_stats_daily_%d_%s", tenantID, date.Format("2006-01-02"))
|
||||
lockKey := fmt.Sprintf("order_stats_daily_%d_%s", tenantID, date.Format("2006-01-02"))
|
||||
|
||||
// 获取任务锁
|
||||
if !s.acquireTaskLock(ctx, lockKey.String()) {
|
||||
if !s.acquireTaskLock(ctx, lockKey) {
|
||||
g.Log().Infof(ctx, "租户 %d 的日统计任务正在执行,跳过", tenantID)
|
||||
return
|
||||
}
|
||||
defer s.releaseTaskLock(ctx, lockKey.String())
|
||||
defer s.releaseTaskLock(ctx, lockKey)
|
||||
|
||||
g.Log().Infof(ctx, "开始生成租户 %d 的日统计: %s", tenantID, date.Format("2006-01-02"))
|
||||
|
||||
@@ -306,15 +328,14 @@ func (s *OrderStatisticsScheduler) generateLastMonthReport(ctx context.Context)
|
||||
|
||||
// generateTenantMonthlyReport 生成指定租户的月报表
|
||||
func (s *OrderStatisticsScheduler) generateTenantMonthlyReport(ctx context.Context, tenantID int64, year int, month int) {
|
||||
lockKey := g.NewVar()
|
||||
lockKey.Setf("order_stats_monthly_%d_%d_%d", tenantID, year, month)
|
||||
lockKey := fmt.Sprintf("order_stats_monthly_%d_%d_%d", tenantID, year, month)
|
||||
|
||||
// 获取任务锁
|
||||
if !s.acquireTaskLock(ctx, lockKey.String()) {
|
||||
if !s.acquireTaskLock(ctx, lockKey) {
|
||||
g.Log().Infof(ctx, "租户 %d 的月统计任务正在执行,跳过", tenantID)
|
||||
return
|
||||
}
|
||||
defer s.releaseTaskLock(ctx, lockKey.String())
|
||||
defer s.releaseTaskLock(ctx, lockKey)
|
||||
|
||||
g.Log().Infof(ctx, "开始生成租户 %d 的月统计: %d年%d月", tenantID, year, month)
|
||||
|
||||
@@ -350,15 +371,14 @@ func (s *OrderStatisticsScheduler) generateLastQuarterReport(ctx context.Context
|
||||
|
||||
// generateTenantQuarterlyReport 生成指定租户的季度报表
|
||||
func (s *OrderStatisticsScheduler) generateTenantQuarterlyReport(ctx context.Context, tenantID int64, year int, quarter int) {
|
||||
lockKey := g.NewVar()
|
||||
lockKey.Setf("order_stats_quarterly_%d_%d_%d", tenantID, year, quarter)
|
||||
lockKey := fmt.Sprintf("order_stats_quarterly_%d_%d_%d", tenantID, year, quarter)
|
||||
|
||||
// 获取任务锁
|
||||
if !s.acquireTaskLock(ctx, lockKey.String()) {
|
||||
if !s.acquireTaskLock(ctx, lockKey) {
|
||||
g.Log().Infof(ctx, "租户 %d 的季度统计任务正在执行,跳过", tenantID)
|
||||
return
|
||||
}
|
||||
defer s.releaseTaskLock(ctx, lockKey.String())
|
||||
defer s.releaseTaskLock(ctx, lockKey)
|
||||
|
||||
g.Log().Infof(ctx, "开始生成租户 %d 的季度统计: %d年第%d季度", tenantID, year, quarter)
|
||||
|
||||
@@ -392,15 +412,14 @@ func (s *OrderStatisticsScheduler) generateLastYearReport(ctx context.Context) {
|
||||
|
||||
// generateTenantYearlyReport 生成指定租户的年报表
|
||||
func (s *OrderStatisticsScheduler) generateTenantYearlyReport(ctx context.Context, tenantID int64, year int) {
|
||||
lockKey := g.NewVar()
|
||||
lockKey.Setf("order_stats_yearly_%d_%d", tenantID, year)
|
||||
lockKey := fmt.Sprintf("order_stats_yearly_%d_%d", tenantID, year)
|
||||
|
||||
// 获取任务锁
|
||||
if !s.acquireTaskLock(ctx, lockKey.String()) {
|
||||
if !s.acquireTaskLock(ctx, lockKey) {
|
||||
g.Log().Infof(ctx, "租户 %d 的年统计任务正在执行,跳过", tenantID)
|
||||
return
|
||||
}
|
||||
defer s.releaseTaskLock(ctx, lockKey.String())
|
||||
defer s.releaseTaskLock(ctx, lockKey)
|
||||
|
||||
g.Log().Infof(ctx, "开始生成租户 %d 的年统计: %d年", tenantID, year)
|
||||
|
||||
|
||||
@@ -7,12 +7,13 @@ import (
|
||||
"math/rand"
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
"order/consts"
|
||||
"order/dao"
|
||||
"order/model/dto"
|
||||
"order/model/entity"
|
||||
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
)
|
||||
|
||||
type order struct{}
|
||||
@@ -113,7 +114,7 @@ func convertEntityOrderItemsToDTO(items []entity.OrderItem) []dto.OrderItem {
|
||||
// CreateOrder 创建订单
|
||||
func (s *order) CreateOrder(ctx context.Context, req *dto.CreateOrderReq) (*dto.CreateOrderResp, error) {
|
||||
// 1. 参数验证
|
||||
if req.TenantID == "" || req.UserID == "" || req.Subject == "" {
|
||||
if req.UserID == 0 || req.Subject == "" {
|
||||
return nil, errors.New("必填参数不能为空")
|
||||
}
|
||||
|
||||
@@ -141,7 +142,7 @@ func (s *order) CreateOrder(ctx context.Context, req *dto.CreateOrderReq) (*dto.
|
||||
}
|
||||
|
||||
// 3. 生成订单号
|
||||
orderNo := s.generateOrderNo(req.TenantID)
|
||||
orderNo := s.generateOrderNo(gconv.String(req.TenantID))
|
||||
|
||||
// 4. 设置订单过期时间(30分钟后)
|
||||
expiredAt := time.Now().Add(30 * time.Minute)
|
||||
@@ -149,7 +150,6 @@ func (s *order) CreateOrder(ctx context.Context, req *dto.CreateOrderReq) (*dto.
|
||||
// 5. 创建待支付订单
|
||||
order := &entity.OrderPending{
|
||||
OrderBase: entity.OrderBase{
|
||||
TenantID: req.TenantID,
|
||||
OrderNo: orderNo,
|
||||
UserID: req.UserID,
|
||||
TotalAmount: totalAmount,
|
||||
@@ -190,12 +190,12 @@ func (s *order) generateOrderNo(tenantID string) string {
|
||||
// QueryOrder 查询订单详情
|
||||
func (s *order) QueryOrder(ctx context.Context, req *dto.QueryOrderReq) (*dto.QueryOrderResp, error) {
|
||||
// 1. 参数验证
|
||||
if req.TenantID == "" || req.OrderNo == "" {
|
||||
if req.OrderNo == "" {
|
||||
return nil, errors.New("必填参数不能为空")
|
||||
}
|
||||
|
||||
// 2. 查询订单
|
||||
order, status, err := dao.Order.GetOrderByNo(ctx, req.TenantID, req.OrderNo)
|
||||
order, status, err := dao.Order.GetOrderByNo(ctx, req.OrderNo)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("获取订单失败: %w", err)
|
||||
}
|
||||
@@ -271,7 +271,7 @@ func (s *order) convertPendingOrderToDetail(order *entity.OrderPending) dto.Orde
|
||||
// convertPaidOrderToDetail 转换已支付订单为详情
|
||||
func (s *order) convertPaidOrderToDetail(order *entity.OrderPaid) dto.OrderDetail {
|
||||
return dto.OrderDetail{
|
||||
ID: order.ID.Hex(),
|
||||
ID: order.Id.Hex(),
|
||||
TenantID: order.TenantId,
|
||||
OrderNo: order.OrderNo,
|
||||
UserID: order.UserID,
|
||||
@@ -306,8 +306,8 @@ func (s *order) convertPaidOrderToDetail(order *entity.OrderPaid) dto.OrderDetai
|
||||
// convertShippedOrderToDetail 转换已发货订单为详情
|
||||
func (s *order) convertShippedOrderToDetail(order *entity.OrderShipped) dto.OrderDetail {
|
||||
return dto.OrderDetail{
|
||||
ID: order.ID.Hex(),
|
||||
TenantID: order.TenantID,
|
||||
ID: order.Id.Hex(),
|
||||
TenantID: order.TenantId,
|
||||
OrderNo: order.OrderNo,
|
||||
UserID: order.UserID,
|
||||
TotalAmount: order.TotalAmount,
|
||||
@@ -337,8 +337,8 @@ func (s *order) convertShippedOrderToDetail(order *entity.OrderShipped) dto.Orde
|
||||
// convertCompletedOrderToDetail 转换已完成订单为详情
|
||||
func (s *order) convertCompletedOrderToDetail(order *entity.OrderCompleted) dto.OrderDetail {
|
||||
return dto.OrderDetail{
|
||||
ID: order.ID.Hex(),
|
||||
TenantID: order.TenantID,
|
||||
ID: order.Id.Hex(),
|
||||
TenantID: order.TenantId,
|
||||
OrderNo: order.OrderNo,
|
||||
UserID: order.UserID,
|
||||
TotalAmount: order.TotalAmount,
|
||||
@@ -395,12 +395,12 @@ func (s *order) convertOrderItems(items []*entity.OrderItem) []dto.OrderItem {
|
||||
// CancelOrder 取消订单
|
||||
func (s *order) CancelOrder(ctx context.Context, req *dto.CancelOrderReq) (*dto.CancelOrderResp, error) {
|
||||
// 1. 参数验证
|
||||
if req.TenantID == "" || req.OrderNo == "" {
|
||||
if req.OrderNo == "" {
|
||||
return nil, errors.New("必填参数不能为空")
|
||||
}
|
||||
|
||||
// 2. 查询订单
|
||||
order, status, err := dao.Order.GetOrderByNo(ctx, req.TenantID, req.OrderNo)
|
||||
order, status, err := dao.Order.GetOrderByNo(ctx, req.OrderNo)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("获取订单失败: %w", err)
|
||||
}
|
||||
@@ -419,7 +419,7 @@ func (s *order) CancelOrder(ctx context.Context, req *dto.CancelOrderReq) (*dto.
|
||||
"cancel_reason": req.Reason,
|
||||
}
|
||||
|
||||
if err := dao.Order.MoveOrderToStatus(ctx, consts.OrderStatusPending, consts.OrderStatusCancelled, req.TenantID, req.OrderNo, updateData); err != nil {
|
||||
if err := dao.Order.MoveOrderToStatus(ctx, consts.OrderStatusPending, consts.OrderStatusCancelled, req.OrderNo, updateData); err != nil {
|
||||
return nil, fmt.Errorf("取消订单失败: %w", err)
|
||||
}
|
||||
|
||||
@@ -435,10 +435,6 @@ func (s *order) CancelOrder(ctx context.Context, req *dto.CancelOrderReq) (*dto.
|
||||
// ListOrders 查询订单列表
|
||||
func (s *order) ListOrders(ctx context.Context, req *dto.ListOrdersReq) (*dto.ListOrdersResp, error) {
|
||||
// 1. 参数验证
|
||||
if req.TenantID == "" {
|
||||
return nil, errors.New("租户ID不能为空")
|
||||
}
|
||||
|
||||
if req.Page <= 0 {
|
||||
req.Page = 1
|
||||
}
|
||||
@@ -455,7 +451,7 @@ func (s *order) ListOrders(ctx context.Context, req *dto.ListOrdersReq) (*dto.Li
|
||||
status = consts.OrderStatusPending
|
||||
}
|
||||
|
||||
orders, total, err := dao.Order.ListOrdersByStatus(ctx, status, req.TenantID, req.UserID, req.Page, req.PageSize)
|
||||
orders, total, err := dao.Order.ListOrdersByStatus(ctx, status, req.UserID, req.Page, req.PageSize)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询订单列表失败: %w", err)
|
||||
}
|
||||
@@ -468,7 +464,7 @@ func (s *order) ListOrders(ctx context.Context, req *dto.ListOrdersReq) (*dto.Li
|
||||
if pendingOrders, ok := orders.([]entity.OrderPending); ok {
|
||||
for _, order := range pendingOrders {
|
||||
orderSummaries = append(orderSummaries, dto.OrderSummary{
|
||||
ID: order.ID.Hex(),
|
||||
ID: order.Id.Hex(),
|
||||
OrderNo: order.OrderNo,
|
||||
TotalAmount: order.TotalAmount,
|
||||
PayAmount: order.PayAmount,
|
||||
@@ -482,7 +478,7 @@ func (s *order) ListOrders(ctx context.Context, req *dto.ListOrdersReq) (*dto.Li
|
||||
if paidOrders, ok := orders.([]entity.OrderPaid); ok {
|
||||
for _, order := range paidOrders {
|
||||
orderSummaries = append(orderSummaries, dto.OrderSummary{
|
||||
ID: order.ID.Hex(),
|
||||
ID: order.Id.Hex(),
|
||||
OrderNo: order.OrderNo,
|
||||
TotalAmount: order.TotalAmount,
|
||||
PayAmount: order.PayAmount,
|
||||
@@ -508,9 +504,9 @@ func (s *order) ListOrders(ctx context.Context, req *dto.ListOrdersReq) (*dto.Li
|
||||
}
|
||||
|
||||
// ProcessExpiredOrders 处理过期订单
|
||||
func (s *order) ProcessExpiredOrders(ctx context.Context, tenantID string) error {
|
||||
func (s *order) ProcessExpiredOrders(ctx context.Context) error {
|
||||
// 获取过期的待支付订单
|
||||
expiredOrders, err := dao.Order.GetExpiredPendingOrders(ctx, tenantID)
|
||||
expiredOrders, err := dao.Order.GetExpiredPendingOrders(ctx)
|
||||
if err != nil {
|
||||
return fmt.Errorf("获取过期订单失败: %w", err)
|
||||
}
|
||||
@@ -521,7 +517,7 @@ func (s *order) ProcessExpiredOrders(ctx context.Context, tenantID string) error
|
||||
"cancel_reason": "订单超时自动取消",
|
||||
}
|
||||
|
||||
if err := dao.Order.MoveOrderToStatus(ctx, consts.OrderStatusPending, consts.OrderStatusCancelled, tenantID, order.OrderNo, updateData); err != nil {
|
||||
if err := dao.Order.MoveOrderToStatus(ctx, consts.OrderStatusPending, consts.OrderStatusCancelled, order.OrderNo, updateData); err != nil {
|
||||
// 记录错误但继续处理其他订单
|
||||
fmt.Printf("取消过期订单失败: %s, 错误: %v\n", order.OrderNo, err)
|
||||
}
|
||||
@@ -531,6 +527,6 @@ func (s *order) ProcessExpiredOrders(ctx context.Context, tenantID string) error
|
||||
}
|
||||
|
||||
// UpdatePayInfo 更新支付信息
|
||||
func (s *order) UpdatePayInfo(ctx context.Context, tenantID, orderNo string, payInfo entity.PayInfo) error {
|
||||
return dao.Order.UpdatePayInfo(ctx, tenantID, orderNo, payInfo)
|
||||
func (s *order) UpdatePayInfo(ctx context.Context, orderNo string, payInfo entity.PayInfo) error {
|
||||
return dao.Order.UpdatePayInfo(ctx, orderNo, payInfo)
|
||||
}
|
||||
|
||||
@@ -7,11 +7,12 @@ import (
|
||||
"math/rand"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
"order/consts"
|
||||
"order/dao"
|
||||
"order/model/dto"
|
||||
"order/model/entity"
|
||||
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
)
|
||||
|
||||
type payment struct{}
|
||||
@@ -27,7 +28,7 @@ func (s *payment) PayOrder(ctx context.Context, req *dto.PayOrderReq) (*dto.PayO
|
||||
}
|
||||
|
||||
// 2. 查询订单
|
||||
order, status, err := dao.Order.GetOrderByNo(ctx, req.TenantID, req.OrderNo)
|
||||
order, status, err := dao.Order.GetOrderByNo(ctx, req.OrderNo)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("获取订单失败: %w", err)
|
||||
}
|
||||
@@ -64,7 +65,6 @@ func (s *payment) PayOrder(ctx context.Context, req *dto.PayOrderReq) (*dto.PayO
|
||||
|
||||
// 6. 创建支付记录
|
||||
paymentRecord := &entity.PaymentRecord{
|
||||
TenantId: req.TenantID,
|
||||
OrderID: pendingOrder.Id,
|
||||
OrderNo: req.OrderNo,
|
||||
PayMethod: req.PayMethod,
|
||||
@@ -88,7 +88,7 @@ func (s *payment) PayOrder(ctx context.Context, req *dto.PayOrderReq) (*dto.PayO
|
||||
APPParams: payResp.APPParams,
|
||||
}
|
||||
|
||||
if err := dao.Order.UpdatePayInfo(ctx, req.TenantID, req.OrderNo, payInfo); err != nil {
|
||||
if err := dao.Order.UpdatePayInfo(ctx, req.OrderNo, payInfo); err != nil {
|
||||
return nil, fmt.Errorf("更新订单支付信息失败: %w", err)
|
||||
}
|
||||
|
||||
@@ -197,7 +197,7 @@ func (s *payment) HandlePaymentNotify(ctx context.Context, req *dto.PaymentNotif
|
||||
"payment_channel": req.PayMethod,
|
||||
}
|
||||
|
||||
if err := dao.Order.MoveOrderToStatus(ctx, consts.OrderStatusPending, consts.OrderStatusPaid, req.TenantID, req.OrderNo, updateData); err != nil {
|
||||
if err := dao.Order.MoveOrderToStatus(ctx, consts.OrderStatusPending, consts.OrderStatusPaid, req.OrderNo, updateData); err != nil {
|
||||
return fmt.Errorf("更新订单状态失败: %w", err)
|
||||
}
|
||||
}
|
||||
@@ -220,7 +220,7 @@ func (s *payment) RefundOrder(ctx context.Context, req *dto.RefundOrderReq) (*dt
|
||||
}
|
||||
|
||||
// 2. 查询订单
|
||||
order, status, err := dao.Order.GetOrderByNo(ctx, req.TenantID, req.OrderNo)
|
||||
order, status, err := dao.Order.GetOrderByNo(ctx, req.OrderNo)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("获取订单失败: %w", err)
|
||||
}
|
||||
@@ -252,7 +252,6 @@ func (s *payment) RefundOrder(ctx context.Context, req *dto.RefundOrderReq) (*dt
|
||||
|
||||
// 6. 创建退款记录
|
||||
refundRecord := &entity.RefundRecord{
|
||||
TenantId: req.TenantID,
|
||||
OrderID: paidOrder.Id,
|
||||
OrderNo: req.OrderNo,
|
||||
RefundNo: refundResp.RefundNo,
|
||||
@@ -271,7 +270,7 @@ func (s *payment) RefundOrder(ctx context.Context, req *dto.RefundOrderReq) (*dt
|
||||
"refund_reason": req.Reason,
|
||||
}
|
||||
|
||||
if err := dao.Order.MoveOrderToStatus(ctx, consts.OrderStatusPaid, consts.OrderStatusRefunded, req.TenantID, req.OrderNo, updateData); err != nil {
|
||||
if err := dao.Order.MoveOrderToStatus(ctx, consts.OrderStatusPaid, consts.OrderStatusRefunded, req.OrderNo, updateData); err != nil {
|
||||
return nil, fmt.Errorf("更新订单状态失败: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user