refactor: 重构资产实体和DTO结构类型

将gjson.Json类型替换为具体的结构体和map类型,修正DAO层链式调用,启用SKU元数据校验逻辑
This commit is contained in:
2026-03-22 20:08:32 +08:00
parent 34a1ba79b6
commit 829dc07747
36 changed files with 932 additions and 793 deletions

View File

@@ -1,48 +1,80 @@
package entity
import (
"assets/consts/public"
"assets/consts/stock"
"gitea.com/red-future/common/beans"
"github.com/gogf/gf/v2/os/gtime"
"go.mongodb.org/mongo-driver/v2/bson"
)
type stockBatchCol struct {
beans.SQLBaseCol
AssetId string
AssetSkuId string
BatchNo string
BatchQty string
AvailableQty string
Metadata string
Status string
OrderId string
AssignedChannel string
ChannelSKU string
ChannelMetadata string
AllocatedAt string
ProductionDate string
ExpiryDate string
ExpiryWarningDate string
CategoryPath string
}
var StockBatchCol = stockBatchCol{
SQLBaseCol: beans.DefSQLBaseCol,
AssetId: "asset_id",
AssetSkuId: "asset_sku_id",
BatchNo: "batch_no",
BatchQty: "batch_qty",
AvailableQty: "available_qty",
Metadata: "metadata",
Status: "status",
OrderId: "order_id",
AssignedChannel: "assigned_channel",
ChannelSKU: "channel_sku",
ChannelMetadata: "channel_metadata",
AllocatedAt: "allocated_at",
ProductionDate: "production_date",
ExpiryDate: "expiry_date",
ExpiryWarningDate: "expiry_warning_date",
CategoryPath: "category_path",
}
// StockBatch 库存批次实体(用于批次管理模式)
type StockBatch struct {
beans.MongoBaseDO `bson:",inline"` // 嵌入基础字段Id, Creator, CreatedAt, Updater, UpdatedAt, TenantId, IsDeleted
AssetID *bson.ObjectID `bson:"assetId" json:"assetId"` // 关联资产ID
AssetSkuID *bson.ObjectID `bson:"assetSkuId" json:"assetSkuId"` // 关联资产SKU ID
BatchNo string `bson:"batchNo" json:"batchNo"` // 批次
BatchQty int `bson:"batchQty" json:"batchQty"` // 批次总数量(入库后不可变
AvailableQty int `bson:"availableQty" json:"availableQty"` // 可用数量(实时变化)
beans.SQLBaseDO `orm:",inherit"`
AssetId int64 `orm:"asset_id" json:"assetId"` // 关联资产ID
AssetSkuId int64 `orm:"asset_sku_id" json:"assetSkuId"` // 关联资产SKU ID
BatchNo string `orm:"batch_no" json:"batchNo"` // 批次号
BatchQty int `orm:"batch_qty" json:"batchQty"` // 批次总数量(入库后不可变)
AvailableQty int `orm:"available_qty" json:"availableQty"` // 可用数量(实时变化
// 批次元数据
Metadata []map[string]interface{} `bson:"metadata" json:"metadata"` // 其他元数据
Metadata []map[string]interface{} `orm:"metadata" json:"metadata"` // 其他元数据
// 状态
Status *stock.BatchStatus `bson:"status" json:"status"` // 批次状态
Status stock.BatchStatus `orm:"status" json:"status"` // 批次状态
// 锁定数量 = BatchQty - AvailableQty
// 订单关联
OrderID *bson.ObjectID `bson:"orderId" json:"orderId"` // 关联订单ID如果有
OrderID int64 `orm:"order_id" json:"orderId"` // 关联订单ID如果有
// 渠道分配信息
AssignedChannel string `bson:"assignedChannel" json:"assignedChannel"` // 分配的销售渠道
ChannelSKU string `bson:"channelSku" json:"channelSku"` // 渠道商品SKU
ChannelMetadata map[string]interface{} `bson:"channelMetadata" json:"channelMetadata"` // 渠道专属数据
AllocatedAt *gtime.Time `bson:"allocatedAt" json:"allocatedAt"` // 分配时间
AssignedChannel string `orm:"assigned_channel" json:"assignedChannel"` // 分配的销售渠道
ChannelSKU string `orm:"channel_sku" json:"channelSku"` // 渠道商品SKU
ChannelMetadata map[string]interface{} `orm:"channel_metadata" json:"channelMetadata"` // 渠道专属数据
AllocatedAt *gtime.Time `orm:"allocated_at" json:"allocatedAt"` // 分配时间
// 临期管理
ProductionDate *gtime.Time `bson:"productionDate" json:"productionDate"` // 生产日期
ExpiryDate *gtime.Time `bson:"expiryDate" json:"expiryDate"` // 过期日期
ExpiryWarningDate *gtime.Time `bson:"expiryWarningDate" json:"expiryWarningDate"` // 临期预警时间(有过期日期时建议填写)
CategoryPath string `bson:"categoryPath" json:"categoryPath"` // 分类路径
}
// CollectionName 获取集合名称
func (StockBatch) CollectionName() string {
return public.StockBatchCollection
ProductionDate *gtime.Time `orm:"production_date" json:"productionDate"` // 生产日期
ExpiryDate *gtime.Time `orm:"expiry_date" json:"expiryDate"` // 过期日期
ExpiryWarningDate *gtime.Time `orm:"expiry_warning_date" json:"expiryWarningDate"` // 临期预警时间(有过期日期时建议填写)
CategoryPath string `orm:"category_path" json:"categoryPath"` // 分类路径
}

View File

@@ -1,35 +1,59 @@
package entity
import (
"assets/consts/public"
"assets/consts/stock"
"gitea.com/red-future/common/beans"
"github.com/gogf/gf/v2/os/gtime"
"go.mongodb.org/mongo-driver/v2/bson"
)
type stockDetailsCol struct {
beans.SQLBaseCol
AssetId string
AssetSkuId string
Status string
OrderId string
LockExpire string
Metadata string
TokenId string
AssignedChannel string
ChannelSKU string
ChannelMetadata string
AllocatedAt string
CategoryPath string
}
var StockDetailsCol = stockDetailsCol{
SQLBaseCol: beans.DefSQLBaseCol,
AssetId: "asset_id",
AssetSkuId: "asset_sku_id",
Status: "status",
OrderId: "order_id",
LockExpire: "lock_expire",
Metadata: "metadata",
TokenId: "token_id",
AssignedChannel: "assigned_channel",
ChannelSKU: "channel_sku",
ChannelMetadata: "channel_metadata",
AllocatedAt: "allocated_at",
CategoryPath: "category_path",
}
// StockDetails 库存实体每一件商品都有独立ID用于后期做区块链虚拟资产
type StockDetails struct {
beans.MongoBaseDO `bson:",inline"` // 嵌入基础字段Id, Creator, CreatedAt, Updater, UpdatedAt, TenantId, IsDeleted
AssetId int64 `bson:"assetId" json:"assetId"` // 关联资产ID
AssetSkuId int64 `bson:"assetSkuId" json:"assetSkuId"` // 关联资产SKU ID
Status stock.StockStatus `bson:"status" json:"status"` // 库存状态
OrderId *bson.ObjectID `bson:"orderId" json:"orderId"` // 关联订单ID如果有
LockExpire *gtime.Time `bson:"lockExpire" json:"lockExpire"` // 锁定过期时间
Metadata []map[string]interface{} `bson:"metadata" json:"metadata"` // 其他元数据
TokenId string `bson:"tokenId" json:"tokenId"` // 区块链TokenID如果有
beans.SQLBaseDO `orm:",inherit"`
AssetId int64 `orm:"asset_id" json:"assetId"` // 关联资产ID
AssetSkuId int64 `orm:"asset_sku_id" json:"assetSkuId"` // 关联资产SKU ID
Status stock.StockStatus `orm:"status" json:"status"` // 库存状态
OrderId int64 `orm:"order_id" json:"orderId"` // 关联订单ID如果有
LockExpire *gtime.Time `orm:"lock_expire" json:"lockExpire"` // 锁定过期时间
Metadata []map[string]interface{} `orm:"metadata" json:"metadata"` // 其他元数据
TokenId string `orm:"token_id" json:"tokenId"` // 区块链TokenID如果有
// 渠道分配信息
AssignedChannel string `bson:"assignedChannel" json:"assignedChannel"` // 分配的销售渠道
ChannelSKU string `bson:"channelSku" json:"channelSku"` // 渠道商品SKU
ChannelMetadata map[string]interface{} `bson:"channelMetadata" json:"channelMetadata"` // 渠道专属数据
AllocatedAt *gtime.Time `bson:"allocatedAt" json:"allocatedAt"` // 分配时间
CategoryPath string `bson:"categoryPath" json:"categoryPath"` // 分类路径
}
// CollectionName 库存集合名称
func (StockDetails) CollectionName() string {
return public.StockDetailsCollection
AssignedChannel string `orm:"assigned_channel" json:"assignedChannel"` // 分配的销售渠道
ChannelSKU string `orm:"channel_sku" json:"channelSku"` // 渠道商品SKU
ChannelMetadata map[string]interface{} `orm:"channel_metadata" json:"channelMetadata"` // 渠道专属数据
AllocatedAt *gtime.Time `orm:"allocated_at" json:"allocatedAt"` // 分配时间
CategoryPath string `orm:"category_path" json:"categoryPath"` // 分类路径
}