Compare commits
10 Commits
30158f3fa5
...
6ec5cd803c
| Author | SHA1 | Date | |
|---|---|---|---|
| 6ec5cd803c | |||
| b8f5a8eb4e | |||
| 8bbbc7c17e | |||
| 09ca3d3dc6 | |||
| 6f908e2e8f | |||
| c1ed49fa5f | |||
| 2efc76b973 | |||
| 3ca7c898c2 | |||
| 30eb8bcf89 | |||
| 1ce24a84cd |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1 +1 @@
|
||||
/.idea/*
|
||||
/.idea/*
|
||||
|
||||
@@ -8,11 +8,11 @@ mongo:
|
||||
logger:
|
||||
level: "all"
|
||||
stdout: true
|
||||
address: "mongodb://192.168.3.200:27017/order?retryWrites=true"
|
||||
address: "mongodb://116.204.74.41:27017/order?retryWrites=true"
|
||||
redis:
|
||||
# 集群模式配置方法
|
||||
default:
|
||||
address: 192.168.3.200:6379
|
||||
address: 116.204.74.41:6379
|
||||
db: 0
|
||||
idleTimeout: "60s" #连接最大空闲时间,使用时间字符串例如30s/1m/1d
|
||||
maxConnLifetime: "90s" #连接最长存活时间,使用时间字符串例如30s/1m/1d
|
||||
@@ -22,7 +22,7 @@ redis:
|
||||
writeTimeout: "30s" #TCP的Write操作超时时间,使用时间字符串例如30s/1m/1d
|
||||
maxActive: 100
|
||||
consul:
|
||||
address: 192.168.3.200:8500
|
||||
address: 116.204.74.41:8500
|
||||
# pass: jiahui8888
|
||||
jaeger: #链路追踪
|
||||
addr: 192.168.3.200:4318
|
||||
addr: 116.204.74.41:4318
|
||||
@@ -8,8 +8,8 @@ import (
|
||||
"order/consts"
|
||||
"order/model/entity"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/do"
|
||||
"gitee.com/red-future---jilin-g/common/mongo"
|
||||
"gitea.com/red-future/common/beans"
|
||||
"gitea.com/red-future/common/db/mongo"
|
||||
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
"go.mongodb.org/mongo-driver/v2/mongo/options"
|
||||
@@ -45,7 +45,7 @@ func (dao *OrderDailyStatisticsDAO) GenerateStatistics(ctx context.Context, tena
|
||||
// 如果没有数据,创建空统计
|
||||
if len(orders) == 0 {
|
||||
statistics := &entity.OrderDailyStatistics{
|
||||
MongoBaseDO: do.MongoBaseDO{
|
||||
MongoBaseDO: beans.MongoBaseDO{
|
||||
TenantId: tenantID,
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
@@ -110,7 +110,7 @@ func (dao *OrderDailyStatisticsDAO) GenerateStatistics(ctx context.Context, tena
|
||||
topAssetID, topAssetName, topAssetCount := dao.findTopAsset(assetCounts, orders)
|
||||
|
||||
statistics := &entity.OrderDailyStatistics{
|
||||
MongoBaseDO: do.MongoBaseDO{
|
||||
MongoBaseDO: beans.MongoBaseDO{
|
||||
TenantId: tenantID,
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
"order/consts"
|
||||
"order/model/entity"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/mongo"
|
||||
"gitea.com/red-future/common/db/mongo"
|
||||
)
|
||||
|
||||
type order struct {
|
||||
|
||||
@@ -8,8 +8,8 @@ import (
|
||||
"order/consts"
|
||||
"order/model/entity"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/do"
|
||||
"gitee.com/red-future---jilin-g/common/mongo"
|
||||
"gitea.com/red-future/common/beans"
|
||||
"gitea.com/red-future/common/db/mongo"
|
||||
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
)
|
||||
@@ -128,7 +128,7 @@ func (dao *OrderMonthlyStatisticsDAO) GenerateStatistics(ctx context.Context, te
|
||||
// 如果没有数据,创建空统计
|
||||
if len(orders) == 0 {
|
||||
statistics := &entity.OrderMonthlyStatistics{
|
||||
MongoBaseDO: do.MongoBaseDO{
|
||||
MongoBaseDO: beans.MongoBaseDO{
|
||||
TenantId: tenantID,
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
@@ -197,7 +197,7 @@ func (dao *OrderMonthlyStatisticsDAO) GenerateStatistics(ctx context.Context, te
|
||||
topAssetID, topAssetName, topAssetCount := dao.findTopAsset(assetCounts, orders)
|
||||
|
||||
statistics := &entity.OrderMonthlyStatistics{
|
||||
MongoBaseDO: do.MongoBaseDO{
|
||||
MongoBaseDO: beans.MongoBaseDO{
|
||||
TenantId: tenantID,
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
|
||||
@@ -8,8 +8,8 @@ import (
|
||||
"order/consts"
|
||||
"order/model/entity"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/do"
|
||||
"gitee.com/red-future---jilin-g/common/mongo"
|
||||
"gitea.com/red-future/common/beans"
|
||||
"gitea.com/red-future/common/db/mongo"
|
||||
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
)
|
||||
@@ -56,7 +56,7 @@ func (dao *OrderQuarterlyStatisticsDAO) GenerateStatistics(ctx context.Context,
|
||||
// 如果没有数据,创建空统计
|
||||
if len(orders) == 0 {
|
||||
statistics := &entity.OrderQuarterlyStatistics{
|
||||
MongoBaseDO: do.MongoBaseDO{
|
||||
MongoBaseDO: beans.MongoBaseDO{
|
||||
TenantId: tenantID,
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
@@ -128,7 +128,7 @@ func (dao *OrderQuarterlyStatisticsDAO) GenerateStatistics(ctx context.Context,
|
||||
topAssetID, topAssetName, topAssetCount := dao.findTopAsset(assetCounts, orders)
|
||||
|
||||
statistics := &entity.OrderQuarterlyStatistics{
|
||||
MongoBaseDO: do.MongoBaseDO{
|
||||
MongoBaseDO: beans.MongoBaseDO{
|
||||
TenantId: tenantID,
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"order/consts"
|
||||
"order/model/entity"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/mongo"
|
||||
"gitea.com/red-future/common/db/mongo"
|
||||
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
)
|
||||
|
||||
@@ -8,8 +8,8 @@ import (
|
||||
"order/consts"
|
||||
"order/model/entity"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/do"
|
||||
"gitee.com/red-future---jilin-g/common/mongo"
|
||||
"gitea.com/red-future/common/beans"
|
||||
"gitea.com/red-future/common/db/mongo"
|
||||
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
)
|
||||
@@ -44,7 +44,7 @@ func (dao *OrderYearlyStatisticsDAO) GenerateStatistics(ctx context.Context, ten
|
||||
// 如果没有数据,创建空统计
|
||||
if len(orders) == 0 {
|
||||
statistics := &entity.OrderYearlyStatistics{
|
||||
MongoBaseDO: do.MongoBaseDO{
|
||||
MongoBaseDO: beans.MongoBaseDO{
|
||||
TenantId: tenantID,
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
@@ -121,7 +121,7 @@ func (dao *OrderYearlyStatisticsDAO) GenerateStatistics(ctx context.Context, ten
|
||||
topAssetID, topAssetName, topAssetCount := dao.findTopAsset(assetCounts, orders)
|
||||
|
||||
statistics := &entity.OrderYearlyStatistics{
|
||||
MongoBaseDO: do.MongoBaseDO{
|
||||
MongoBaseDO: beans.MongoBaseDO{
|
||||
TenantId: tenantID,
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"order/consts"
|
||||
"order/model/entity"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/mongo"
|
||||
"gitea.com/red-future/common/db/mongo"
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
)
|
||||
|
||||
|
||||
12
go.mod
12
go.mod
@@ -1,9 +1,9 @@
|
||||
module order
|
||||
|
||||
go 1.25.3
|
||||
go 1.25.5
|
||||
|
||||
require (
|
||||
gitee.com/red-future---jilin-g/common v0.2.9
|
||||
gitea.com/red-future/common v0.0.4
|
||||
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.9.6
|
||||
github.com/gogf/gf/contrib/nosql/redis/v2 v2.9.6
|
||||
github.com/gogf/gf/v2 v2.9.6
|
||||
@@ -11,7 +11,7 @@ require (
|
||||
go.mongodb.org/mongo-driver/v2 v2.4.0
|
||||
)
|
||||
|
||||
//replace gitee.com/red-future---jilin-g/common v0.2.9 => ../common
|
||||
//replace gitea.com/red-future/common => ../common
|
||||
|
||||
require (
|
||||
github.com/BurntSushi/toml v1.5.0 // indirect
|
||||
@@ -32,7 +32,7 @@ require (
|
||||
github.com/gogf/gf/contrib/registry/consul/v2 v2.9.5 // indirect
|
||||
github.com/gogf/gf/contrib/trace/otlphttp/v2 v2.9.5 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang-jwt/jwt/v5 v5.0.0 // indirect
|
||||
github.com/golang-jwt/jwt/v5 v5.3.1 // indirect
|
||||
github.com/golang/glog v1.2.5 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||
github.com/golang/protobuf v1.5.4 // indirect
|
||||
@@ -49,7 +49,7 @@ require (
|
||||
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
|
||||
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
||||
github.com/hashicorp/golang-lru v1.0.2 // indirect
|
||||
github.com/hashicorp/serf v0.10.1 // indirect
|
||||
github.com/klauspost/compress v1.18.0 // indirect
|
||||
github.com/magiconair/properties v1.8.10 // indirect
|
||||
@@ -79,7 +79,7 @@ require (
|
||||
go.opentelemetry.io/otel/trace v1.38.0 // indirect
|
||||
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
|
||||
golang.org/x/crypto v0.46.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect
|
||||
golang.org/x/exp v0.0.0-20250128144449-3edf0e91c1ae // indirect
|
||||
golang.org/x/net v0.48.0 // indirect
|
||||
golang.org/x/sync v0.19.0 // indirect
|
||||
golang.org/x/sys v0.39.0 // indirect
|
||||
|
||||
16
go.sum
16
go.sum
@@ -1,10 +1,8 @@
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
gitee.com/red-future---jilin-g/common v0.2.5 h1:0T4chOMw9aXbA9RvP8d0814xLbisjzrMPhgqbCTa12M=
|
||||
gitee.com/red-future---jilin-g/common v0.2.5/go.mod h1:TFCNnI7801DamWd0m/M2CT5T090jFXXGLNDY4iZ2WY8=
|
||||
gitee.com/red-future---jilin-g/common v0.2.6/go.mod h1:TFCNnI7801DamWd0m/M2CT5T090jFXXGLNDY4iZ2WY8=
|
||||
gitee.com/red-future---jilin-g/common v0.2.7/go.mod h1:TFCNnI7801DamWd0m/M2CT5T090jFXXGLNDY4iZ2WY8=
|
||||
gitee.com/red-future---jilin-g/common v0.2.9 h1:lqYUnqTQLEcvxfFBqRMpetMudQze5cQlM4fKDouu2CU=
|
||||
gitee.com/red-future---jilin-g/common v0.2.9/go.mod h1:TFCNnI7801DamWd0m/M2CT5T090jFXXGLNDY4iZ2WY8=
|
||||
gitea.com/red-future/common v0.0.2 h1:KjiIyZo0JeSN9ldXofuGkFifJ/H66kTybOU34Yew7R0=
|
||||
gitea.com/red-future/common v0.0.2/go.mod h1:CUurYN0elToJTwB2pX9wSnjQqZv9D/Vxbo5ueb7i9BI=
|
||||
gitea.com/red-future/common v0.0.3/go.mod h1:mq4smQZFI5nYul6gvLH7ScnC/26bAOcTvR3hP625NYY=
|
||||
gitea.com/red-future/common v0.0.4/go.mod h1:UI9N5UUjilbMPF7+/lypZSnqDVHigt14300oSRrAyZg=
|
||||
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=
|
||||
@@ -92,8 +90,8 @@ github.com/gogf/gf/v2 v2.9.6/go.mod h1:Svl1N+E8G/QshU2DUbh/3J/AJauqCgUnxHurXWR4Q
|
||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE=
|
||||
github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
|
||||
github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY=
|
||||
github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
|
||||
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=
|
||||
@@ -176,6 +174,7 @@ github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09
|
||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
|
||||
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
||||
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
||||
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
|
||||
github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc=
|
||||
github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM=
|
||||
@@ -335,6 +334,7 @@ golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ=
|
||||
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8=
|
||||
golang.org/x/exp v0.0.0-20250128144449-3edf0e91c1ae/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
|
||||
8
main.go
8
main.go
@@ -5,10 +5,10 @@ import (
|
||||
"order/controller"
|
||||
"order/service"
|
||||
|
||||
"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 客户端自动初始化
|
||||
_ "gitea.com/red-future/common/db/mongo"
|
||||
"gitea.com/red-future/common/http"
|
||||
"gitea.com/red-future/common/jaeger"
|
||||
_ "gitea.com/red-future/common/ragflow" // RAGFlow 客户端自动初始化
|
||||
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
|
||||
_ "github.com/gogf/gf/contrib/nosql/redis/v2"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
|
||||
@@ -32,9 +32,19 @@ type OrderItemReq struct {
|
||||
// OrderItemStockReq 创建订单商品项库存明细请求
|
||||
|
||||
type OrderItemStockReq struct {
|
||||
StockID string `json:"stock_id" binding:"required"` // 库存ID
|
||||
Price int64 `json:"price" binding:"required,min=1"` // 单价(分)
|
||||
StockAttrs map[string]interface{} `json:"stock_attrs"` // 库存项属性(动态字段)
|
||||
// 库存ID(明细模式必填,批次模式为空)
|
||||
StockID string `json:"stock_id,omitempty"` // 库存ID
|
||||
// 批次信息(批次模式必填,明细模式为空)
|
||||
BatchID string `json:"batch_id,omitempty"` // 批次ID
|
||||
BatchNo string `json:"batch_no,omitempty"` // 批次号
|
||||
// 数量
|
||||
Quantity int `json:"quantity" binding:"required,min=1"` // 使用数量
|
||||
// 价格信息
|
||||
Price int64 `json:"price" binding:"required,min=1"` // 单价(分)
|
||||
// 库存管理模式
|
||||
StockMode int `json:"stock_mode" binding:"required"` // 库存管理模式:1-明细模式,2-批次模式
|
||||
// 库存项属性
|
||||
StockAttrs map[string]interface{} `json:"stock_attrs"` // 库存项属性(动态字段)
|
||||
}
|
||||
|
||||
// ShippingInfoReq 收货信息请求
|
||||
@@ -136,8 +146,18 @@ type OrderItem struct {
|
||||
// OrderItemStock 订单商品项库存明细(响应)
|
||||
|
||||
type OrderItemStock struct {
|
||||
StockID string `json:"stock_id"` // 库存ID
|
||||
Price int64 `json:"price"` // 单价(分)
|
||||
// 库存ID(明细模式)
|
||||
StockID string `json:"stock_id,omitempty"` // 库存ID
|
||||
// 批次信息(批次模式)
|
||||
BatchID string `json:"batch_id,omitempty"` // 批次ID
|
||||
BatchNo string `json:"batch_no,omitempty"` // 批次号
|
||||
// 数量
|
||||
Quantity int `json:"quantity"` // 使用数量
|
||||
// 价格信息
|
||||
Price int64 `json:"price"` // 单价(分)
|
||||
// 库存管理模式
|
||||
StockMode int `json:"stock_mode"` // 库存管理模式:1-明细模式,2-批次模式
|
||||
// 库存项属性
|
||||
StockAttrs map[string]interface{} `json:"stock_attrs"` // 库存项属性(动态字段)
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ package entity
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/do"
|
||||
"gitea.com/red-future/common/beans"
|
||||
)
|
||||
|
||||
// OrderBase 订单基础信息
|
||||
@@ -13,16 +13,16 @@ import (
|
||||
// 例如:orders_pending, orders_paid, orders_shipped, orders_completed, orders_cancelled
|
||||
|
||||
type OrderBase struct {
|
||||
do.MongoBaseDO `bson:",inline"`
|
||||
OrderNo string `bson:"order_no" json:"order_no"` // 订单号
|
||||
UserID int64 `bson:"user_id" json:"user_id"` // 用户ID
|
||||
TotalAmount int64 `bson:"total_amount" json:"total_amount"` // 订单总金额(分)
|
||||
PayAmount int64 `bson:"pay_amount" json:"pay_amount"` // 实付金额(分)
|
||||
OrderType string `bson:"order_type" json:"order_type"` // 订单类型:normal-普通订单
|
||||
Subject string `bson:"subject" json:"subject"` // 订单标题
|
||||
Description string `bson:"description" json:"description"` // 订单描述
|
||||
OrderItems []OrderItem `bson:"order_items" json:"order_items"` // 订单商品项
|
||||
ExpiredAt *time.Time `bson:"expired_at,omitempty" json:"expired_at"` // 过期时间
|
||||
beans.MongoBaseDO `bson:",inline"`
|
||||
OrderNo string `bson:"order_no" json:"order_no"` // 订单号
|
||||
UserID int64 `bson:"user_id" json:"user_id"` // 用户ID
|
||||
TotalAmount int64 `bson:"total_amount" json:"total_amount"` // 订单总金额(分)
|
||||
PayAmount int64 `bson:"pay_amount" json:"pay_amount"` // 实付金额(分)
|
||||
OrderType string `bson:"order_type" json:"order_type"` // 订单类型:normal-普通订单
|
||||
Subject string `bson:"subject" json:"subject"` // 订单标题
|
||||
Description string `bson:"description" json:"description"` // 订单描述
|
||||
OrderItems []OrderItem `bson:"order_items" json:"order_items"` // 订单商品项
|
||||
ExpiredAt *time.Time `bson:"expired_at,omitempty" json:"expired_at"` // 过期时间
|
||||
}
|
||||
|
||||
// OrderItem 订单商品项
|
||||
@@ -40,11 +40,28 @@ type OrderItem struct {
|
||||
}
|
||||
|
||||
// OrderItemStock 订单商品项库存明细
|
||||
// 用于追溯具体使用了哪些库存项,一个库存项只会有一个实例
|
||||
// 用于追溯具体使用了哪些库存项,支持明细模式和批次模式
|
||||
// 明细模式:一个库存项对应一条记录,数量固定为1
|
||||
// 批次模式:一个批次记录可以包含多个数量
|
||||
type OrderItemStock struct {
|
||||
StockID string `bson:"stock_id" json:"stock_id"` // 库存ID
|
||||
Price int64 `bson:"price" json:"price"` // 该库存项的单价(分)
|
||||
StockAttrs map[string]interface{} `bson:"stock_attrs,omitempty" json:"stock_attrs"` // 库存项属性(动态字段,存储该库存项的具体规格属性)
|
||||
// 库存ID(明细模式必填,批次模式为空)
|
||||
StockID string `bson:"stock_id,omitempty" json:"stock_id,omitempty"`
|
||||
|
||||
// 批次信息(批次模式必填,明细模式为空)
|
||||
BatchID string `bson:"batch_id,omitempty" json:"batch_id,omitempty"` // 批次ID
|
||||
BatchNo string `bson:"batch_no,omitempty" json:"batch_no,omitempty"` // 批次号
|
||||
|
||||
// 数量(明细模式固定为1,批次模式可以>1)
|
||||
Quantity int `bson:"quantity" json:"quantity"` // 使用数量
|
||||
|
||||
// 价格信息
|
||||
Price int64 `bson:"price" json:"price"` // 该库存项的单价(分)
|
||||
|
||||
// 库存管理模式
|
||||
StockMode int `bson:"stock_mode" json:"stock_mode"` // 库存管理模式:1-明细模式,2-批次模式
|
||||
|
||||
// 库存项属性(动态字段,存储该库存项的具体规格属性)
|
||||
StockAttrs map[string]interface{} `bson:"stock_attrs,omitempty" json:"stock_attrs,omitempty"`
|
||||
}
|
||||
|
||||
// ShippingInfo 收货信息
|
||||
|
||||
@@ -3,14 +3,14 @@ package entity
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/do"
|
||||
"gitea.com/red-future/common/beans"
|
||||
)
|
||||
|
||||
// OrderDailyStatistics 订单日统计数据实体
|
||||
type OrderDailyStatistics struct {
|
||||
do.MongoBaseDO `bson:",inline"`
|
||||
ReportDate time.Time `bson:"report_date" json:"report_date"` // 统计日期
|
||||
Period string `bson:"period" json:"period"` // 统计周期描述: 2024-01-01
|
||||
beans.MongoBaseDO `bson:",inline"`
|
||||
ReportDate time.Time `bson:"report_date" json:"report_date"` // 统计日期
|
||||
Period string `bson:"period" json:"period"` // 统计周期描述: 2024-01-01
|
||||
|
||||
// 订单基础统计
|
||||
TotalOrders int64 `bson:"total_orders" json:"total_orders"` // 总订单数
|
||||
|
||||
@@ -3,14 +3,14 @@ package entity
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/do"
|
||||
"gitea.com/red-future/common/beans"
|
||||
)
|
||||
|
||||
// OrderMonthlyStatistics 订单月统计数据实体
|
||||
type OrderMonthlyStatistics struct {
|
||||
do.MongoBaseDO `bson:",inline"`
|
||||
ReportDate time.Time `bson:"report_date" json:"report_date"` // 统计日期(月份第一天)
|
||||
Period string `bson:"period" json:"period"` // 统计周期描述: 2024-01
|
||||
beans.MongoBaseDO `bson:",inline"`
|
||||
ReportDate time.Time `bson:"report_date" json:"report_date"` // 统计日期(月份第一天)
|
||||
Period string `bson:"period" json:"period"` // 统计周期描述: 2024-01
|
||||
|
||||
// 订单基础统计
|
||||
TotalOrders int64 `bson:"total_orders" json:"total_orders"` // 总订单数
|
||||
|
||||
@@ -3,15 +3,15 @@ package entity
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/do"
|
||||
"gitea.com/red-future/common/beans"
|
||||
)
|
||||
|
||||
// OrderQuarterlyStatistics 订单季度统计数据实体
|
||||
type OrderQuarterlyStatistics struct {
|
||||
do.MongoBaseDO `bson:",inline"`
|
||||
ReportDate time.Time `bson:"report_date" json:"report_date"` // 统计日期(季度第一天)
|
||||
Period string `bson:"period" json:"period"` // 统计周期描述: 2024-Q1
|
||||
Quarter int `bson:"quarter" json:"quarter"` // 季度: 1,2,3,4
|
||||
beans.MongoBaseDO `bson:",inline"`
|
||||
ReportDate time.Time `bson:"report_date" json:"report_date"` // 统计日期(季度第一天)
|
||||
Period string `bson:"period" json:"period"` // 统计周期描述: 2024-Q1
|
||||
Quarter int `bson:"quarter" json:"quarter"` // 季度: 1,2,3,4
|
||||
|
||||
// 订单基础统计
|
||||
TotalOrders int64 `bson:"total_orders" json:"total_orders"` // 总订单数
|
||||
|
||||
@@ -3,15 +3,15 @@ package entity
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/do"
|
||||
"gitea.com/red-future/common/beans"
|
||||
)
|
||||
|
||||
// OrderStatistics 订单统计数据实体
|
||||
type OrderStatistics struct {
|
||||
do.MongoBaseDO `bson:",inline"`
|
||||
ReportType string `bson:"report_type" json:"report_type"` // 报表类型: daily, monthly, quarterly, yearly
|
||||
ReportDate time.Time `bson:"report_date" json:"report_date"` // 统计日期
|
||||
Period string `bson:"period" json:"period"` // 统计周期描述: 2024-01-01, 2024-01, 2024-Q1, 2024
|
||||
beans.MongoBaseDO `bson:",inline"`
|
||||
ReportType string `bson:"report_type" json:"report_type"` // 报表类型: daily, monthly, quarterly, yearly
|
||||
ReportDate time.Time `bson:"report_date" json:"report_date"` // 统计日期
|
||||
Period string `bson:"period" json:"period"` // 统计周期描述: 2024-01-01, 2024-01, 2024-Q1, 2024
|
||||
|
||||
// 订单基础统计
|
||||
TotalOrders int64 `bson:"total_orders" json:"total_orders"` // 总订单数
|
||||
|
||||
@@ -3,15 +3,15 @@ package entity
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/do"
|
||||
"gitea.com/red-future/common/beans"
|
||||
)
|
||||
|
||||
// OrderYearlyStatistics 订单年度统计数据实体
|
||||
type OrderYearlyStatistics struct {
|
||||
do.MongoBaseDO `bson:",inline"`
|
||||
ReportDate time.Time `bson:"report_date" json:"report_date"` // 统计日期(年度第一天)
|
||||
Period string `bson:"period" json:"period"` // 统计周期描述: 2024
|
||||
Year int `bson:"year" json:"year"` // 年份
|
||||
beans.MongoBaseDO `bson:",inline"`
|
||||
ReportDate time.Time `bson:"report_date" json:"report_date"` // 统计日期(年度第一天)
|
||||
Period string `bson:"period" json:"period"` // 统计周期描述: 2024
|
||||
Year int `bson:"year" json:"year"` // 年份
|
||||
|
||||
// 订单基础统计
|
||||
TotalOrders int64 `bson:"total_orders" json:"total_orders"` // 总订单数
|
||||
|
||||
@@ -3,7 +3,7 @@ package entity
|
||||
import (
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/do"
|
||||
"gitea.com/red-future/common/beans"
|
||||
)
|
||||
|
||||
// PaymentConfig 支付配置
|
||||
@@ -11,11 +11,11 @@ import (
|
||||
// 支持微信支付和支付宝支付
|
||||
|
||||
type PaymentConfig struct {
|
||||
do.MongoBaseDO `bson:",inline"`
|
||||
PayMethod string `bson:"pay_method" json:"pay_method"` // 支付方式:wechat/alipay
|
||||
ConfigName string `bson:"config_name" json:"config_name"` // 配置名称
|
||||
Description string `bson:"description" json:"description"` // 配置描述
|
||||
Enabled bool `bson:"enabled" json:"enabled"` // 是否启用
|
||||
beans.MongoBaseDO `bson:",inline"`
|
||||
PayMethod string `bson:"pay_method" json:"pay_method"` // 支付方式:wechat/alipay
|
||||
ConfigName string `bson:"config_name" json:"config_name"` // 配置名称
|
||||
Description string `bson:"description" json:"description"` // 配置描述
|
||||
Enabled bool `bson:"enabled" json:"enabled"` // 是否启用
|
||||
|
||||
// 通用配置
|
||||
AppID string `bson:"app_id" json:"app_id"` // 应用ID
|
||||
@@ -47,31 +47,31 @@ type PaymentConfig struct {
|
||||
// 记录每次支付操作的结果
|
||||
|
||||
type PaymentRecord struct {
|
||||
do.MongoBaseDO `bson:",inline"`
|
||||
OrderID bson.ObjectID `bson:"order_id" json:"order_id"` // 订单ID
|
||||
OrderNo string `bson:"order_no" json:"order_no"` // 订单号
|
||||
PayMethod string `bson:"pay_method" json:"pay_method"` // 支付方式
|
||||
PayType string `bson:"pay_type" json:"pay_type"` // 支付类型
|
||||
Amount int64 `bson:"amount" json:"amount"` // 支付金额(分)
|
||||
TransactionID string `bson:"transaction_id" json:"transaction_id"` // 支付平台交易号
|
||||
OutTradeNo string `bson:"out_trade_no" json:"out_trade_no"` // 商户订单号
|
||||
TradeNo string `bson:"trade_no" json:"trade_no"` // 交易号
|
||||
PrepayID string `bson:"prepay_id,omitempty" json:"prepay_id"` // 预支付ID
|
||||
Status string `bson:"status" json:"status"` // 支付状态:success/failed
|
||||
ErrorMsg string `bson:"error_msg,omitempty" json:"error_msg"` // 错误信息
|
||||
beans.MongoBaseDO `bson:",inline"`
|
||||
OrderID bson.ObjectID `bson:"order_id" json:"order_id"` // 订单ID
|
||||
OrderNo string `bson:"order_no" json:"order_no"` // 订单号
|
||||
PayMethod string `bson:"pay_method" json:"pay_method"` // 支付方式
|
||||
PayType string `bson:"pay_type" json:"pay_type"` // 支付类型
|
||||
Amount int64 `bson:"amount" json:"amount"` // 支付金额(分)
|
||||
TransactionID string `bson:"transaction_id" json:"transaction_id"` // 支付平台交易号
|
||||
OutTradeNo string `bson:"out_trade_no" json:"out_trade_no"` // 商户订单号
|
||||
TradeNo string `bson:"trade_no" json:"trade_no"` // 交易号
|
||||
PrepayID string `bson:"prepay_id,omitempty" json:"prepay_id"` // 预支付ID
|
||||
Status string `bson:"status" json:"status"` // 支付状态:success/failed
|
||||
ErrorMsg string `bson:"error_msg,omitempty" json:"error_msg"` // 错误信息
|
||||
}
|
||||
|
||||
// RefundRecord 退款记录
|
||||
// 记录每次退款操作的结果
|
||||
|
||||
type RefundRecord struct {
|
||||
do.MongoBaseDO `bson:",inline"`
|
||||
OrderID bson.ObjectID `bson:"order_id" json:"order_id"` // 订单ID
|
||||
OrderNo string `bson:"order_no" json:"order_no"` // 订单号
|
||||
RefundNo string `bson:"refund_no" json:"refund_no"` // 退款单号
|
||||
RefundID string `bson:"refund_id" json:"refund_id"` // 退款ID
|
||||
RefundAmount int64 `bson:"refund_amount" json:"refund_amount"` // 退款金额(分)
|
||||
Reason string `bson:"reason" json:"reason"` // 退款原因
|
||||
Status string `bson:"status" json:"status"` // 退款状态:success/failed
|
||||
ErrorMsg string `bson:"error_msg,omitempty" json:"error_msg"` // 错误信息
|
||||
beans.MongoBaseDO `bson:",inline"`
|
||||
OrderID bson.ObjectID `bson:"order_id" json:"order_id"` // 订单ID
|
||||
OrderNo string `bson:"order_no" json:"order_no"` // 订单号
|
||||
RefundNo string `bson:"refund_no" json:"refund_no"` // 退款单号
|
||||
RefundID string `bson:"refund_id" json:"refund_id"` // 退款ID
|
||||
RefundAmount int64 `bson:"refund_amount" json:"refund_amount"` // 退款金额(分)
|
||||
Reason string `bson:"reason" json:"reason"` // 退款原因
|
||||
Status string `bson:"status" json:"status"` // 退款状态:success/failed
|
||||
ErrorMsg string `bson:"error_msg,omitempty" json:"error_msg"` // 错误信息
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
"order/model/dto"
|
||||
"order/model/entity"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/http"
|
||||
"gitea.com/red-future/common/http"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"github.com/robfig/cron/v3"
|
||||
@@ -39,18 +39,23 @@ var Order = new(order)
|
||||
func convertOrderItemsFromDTO(items []dto.OrderItemReq) []entity.OrderItem {
|
||||
var result []entity.OrderItem
|
||||
for _, item := range items {
|
||||
// 转换库存明细,每个库存项只会有一个实例
|
||||
// 转换库存明细,支持明细模式和批次模式
|
||||
var stocks []entity.OrderItemStock
|
||||
totalQuantity := len(item.Stocks) // 每个库存项数量为1
|
||||
totalQuantity := 0
|
||||
totalAmount := int64(0)
|
||||
|
||||
for _, stock := range item.Stocks {
|
||||
stocks = append(stocks, entity.OrderItemStock{
|
||||
StockID: stock.StockID,
|
||||
BatchID: stock.BatchID,
|
||||
BatchNo: stock.BatchNo,
|
||||
Quantity: stock.Quantity,
|
||||
Price: stock.Price,
|
||||
StockMode: stock.StockMode,
|
||||
StockAttrs: stock.StockAttrs,
|
||||
})
|
||||
totalAmount += stock.Price // 每个库存项数量为1
|
||||
totalQuantity += stock.Quantity
|
||||
totalAmount += int64(stock.Quantity) * stock.Price
|
||||
}
|
||||
|
||||
result = append(result, entity.OrderItem{
|
||||
@@ -70,12 +75,16 @@ func convertOrderItemsFromDTO(items []dto.OrderItemReq) []entity.OrderItem {
|
||||
func convertOrderItems(items []entity.OrderItem) []dto.OrderItem {
|
||||
var result []dto.OrderItem
|
||||
for _, item := range items {
|
||||
// 转换库存明细
|
||||
// 转换库存明细,支持明细模式和批次模式
|
||||
var stocks []dto.OrderItemStock
|
||||
for _, stock := range item.Stocks {
|
||||
stocks = append(stocks, dto.OrderItemStock{
|
||||
StockID: stock.StockID,
|
||||
BatchID: stock.BatchID,
|
||||
BatchNo: stock.BatchNo,
|
||||
Quantity: stock.Quantity,
|
||||
Price: stock.Price,
|
||||
StockMode: stock.StockMode,
|
||||
StockAttrs: stock.StockAttrs,
|
||||
})
|
||||
}
|
||||
@@ -97,12 +106,16 @@ func convertOrderItems(items []entity.OrderItem) []dto.OrderItem {
|
||||
func convertEntityOrderItemsToDTO(items []entity.OrderItem) []dto.OrderItem {
|
||||
var result []dto.OrderItem
|
||||
for _, item := range items {
|
||||
// 转换库存明细
|
||||
// 转换库存明细,支持明细模式和批次模式
|
||||
var stocks []dto.OrderItemStock
|
||||
for _, stock := range item.Stocks {
|
||||
stocks = append(stocks, dto.OrderItemStock{
|
||||
StockID: stock.StockID,
|
||||
BatchID: stock.BatchID,
|
||||
BatchNo: stock.BatchNo,
|
||||
Quantity: stock.Quantity,
|
||||
Price: stock.Price,
|
||||
StockMode: stock.StockMode,
|
||||
StockAttrs: stock.StockAttrs,
|
||||
})
|
||||
}
|
||||
@@ -412,12 +425,16 @@ func (s *order) convertCompletedOrderToDetail(order *entity.OrderCompleted) dto.
|
||||
func (s *order) convertOrderItems(items []*entity.OrderItem) []dto.OrderItem {
|
||||
var result []dto.OrderItem
|
||||
for _, item := range items {
|
||||
// 转换库存明细
|
||||
// 转换库存明细,支持明细模式和批次模式
|
||||
var stocks []dto.OrderItemStock
|
||||
for _, stock := range item.Stocks {
|
||||
stocks = append(stocks, dto.OrderItemStock{
|
||||
StockID: stock.StockID,
|
||||
BatchID: stock.BatchID,
|
||||
BatchNo: stock.BatchNo,
|
||||
Quantity: stock.Quantity,
|
||||
Price: stock.Price,
|
||||
StockMode: stock.StockMode,
|
||||
StockAttrs: stock.StockAttrs,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
"order/model/dto"
|
||||
"order/model/entity"
|
||||
|
||||
"gitee.com/red-future---jilin-g/common/http"
|
||||
"gitea.com/red-future/common/http"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user