refactor: 重构资产模型与DAO层实现
This commit is contained in:
@@ -39,7 +39,7 @@ var StockManage = new(stockManage)
|
||||
// GetStockFormFields 获取库存操作表单字段
|
||||
func (s *stockManage) GetStockFormFields(ctx context.Context, req *stockDto.GetStockFormFieldsReq) (*stockDto.GetStockFormFieldsRes, error) {
|
||||
// 获取资产SKU信息
|
||||
assetSku, err := assetDao.AssetSku.GetOne(ctx, &assetDto.GetAssetSkuReq{Id: req.AssetSkuId}, false)
|
||||
assetSku, err := assetDao.AssetSku.GetOne(ctx, &assetDto.GetAssetSkuReq{Id: req.AssetSkuId})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -89,7 +89,7 @@ func (s *stockManage) GetStockFormFields(ctx context.Context, req *stockDto.GetS
|
||||
// StockOperation 库存操作入口(入库/出库)
|
||||
// 根据SKU的StockMode区分明细模式和批次模式,计算差值后发布消息到NATS
|
||||
func (s *stockManage) StockOperation(ctx context.Context, req *stockDto.StockOperationReq) (err error) {
|
||||
assetSku, err := assetDao.AssetSku.GetOne(ctx, &assetDto.GetAssetSkuReq{Id: req.AssetSkuId}, false)
|
||||
assetSku, err := assetDao.AssetSku.GetOne(ctx, &assetDto.GetAssetSkuReq{Id: req.AssetSkuId})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -145,13 +145,13 @@ func (s *stockManage) stockPublishMessage(ctx context.Context, assetSku *assetEn
|
||||
return
|
||||
}
|
||||
publishMessage := stockDto.StockPublishMessage{
|
||||
AssetId: assetSku.AssetId.Hex(),
|
||||
AssetSkuId: assetSku.Id.Hex(),
|
||||
AssetId: assetSku.AssetId,
|
||||
AssetSkuId: assetSku.Id,
|
||||
TenantId: user.TenantId,
|
||||
UserName: user.UserName,
|
||||
StockCount: stockCount,
|
||||
OperationType: operationType,
|
||||
Metadata: assetSku.SpecValues,
|
||||
Metadata: gconv.Maps(assetSku.SpecValues),
|
||||
StockMode: int(assetSku.StockMode),
|
||||
BatchNo: req.BatchNo,
|
||||
ProductionDate: req.ProductionDate,
|
||||
@@ -186,21 +186,9 @@ func (s *stockManage) stockPublishMessage(ctx context.Context, assetSku *assetEn
|
||||
// AddStock NATS消费者调用,执行实际的入库/出库操作
|
||||
// 使用Redis分布式锁防止并发冲突,支持明细模式和批次模式
|
||||
func (s *stockManage) AddStock(ctx context.Context, msg map[string]interface{}) error {
|
||||
assetId, err := bson.ObjectIDFromHex(gconv.String(msg["assetId"]))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
assetSkuId, err := bson.ObjectIDFromHex(gconv.String(msg["assetSkuId"]))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
stockId := bson.ObjectID{}
|
||||
if !g.IsEmpty(msg["stockId"]) {
|
||||
stockId, err = bson.ObjectIDFromHex(gconv.String(msg["stockId"]))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
assetId := gconv.Int64(msg["assetId"])
|
||||
assetSkuId := gconv.Int64(msg["assetSkuId"])
|
||||
stockId := gconv.Int64(msg["stockId"])
|
||||
userName := gconv.String(msg["userName"])
|
||||
tenantId := gconv.Float64(msg["tenantId"])
|
||||
stockCount := gconv.Int(msg["stockCount"])
|
||||
@@ -219,9 +207,9 @@ func (s *stockManage) AddStock(ctx context.Context, msg map[string]interface{})
|
||||
success, err := redis.Lock(ctx, fileLockKey, int64(60), func(ctx context.Context) error {
|
||||
if operationType == "add" {
|
||||
if stockMode == stock.StockModeBatch {
|
||||
if !stockId.IsZero() {
|
||||
if !g.IsEmpty(stockId) {
|
||||
batch := stockDto.UpdateBatchReq{
|
||||
Id: &stockId,
|
||||
Id: stockId,
|
||||
BatchQty: stockCount,
|
||||
AvailableQty: stockCount,
|
||||
}
|
||||
@@ -230,8 +218,8 @@ func (s *stockManage) AddStock(ctx context.Context, msg map[string]interface{})
|
||||
}
|
||||
} else {
|
||||
batch := stockDto.CreateBatchReq{
|
||||
AssetId: &assetId,
|
||||
AssetSkuId: &assetSkuId,
|
||||
AssetId: assetId,
|
||||
AssetSkuId: assetSkuId,
|
||||
Status: stock.BatchStatusActive,
|
||||
Metadata: metadata,
|
||||
BatchNo: batchNo,
|
||||
@@ -251,14 +239,14 @@ func (s *stockManage) AddStock(ctx context.Context, msg map[string]interface{})
|
||||
var stockInterfaces []interface{}
|
||||
for i := 0; i < stockCount; i++ {
|
||||
stockInterfaces = append(stockInterfaces, entity.StockDetails{
|
||||
AssetId: &assetId,
|
||||
AssetSkuId: &assetSkuId,
|
||||
AssetId: assetId,
|
||||
AssetSkuId: assetSkuId,
|
||||
Status: stock.StockStatusAvailable,
|
||||
Metadata: metadata,
|
||||
})
|
||||
}
|
||||
// 批量插入数据库
|
||||
if _, err = dao.StockDetails.BatchInsert(ctx, stockInterfaces); err != nil {
|
||||
if _, err := dao.StockDetails.BatchInsert(ctx, stockInterfaces); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -268,7 +256,7 @@ func (s *stockManage) AddStock(ctx context.Context, msg map[string]interface{})
|
||||
stockCount = 0 - stockCount
|
||||
// 更新批次
|
||||
batch := stockDto.UpdateBatchReq{
|
||||
Id: &stockId,
|
||||
Id: stockId,
|
||||
BatchQty: stockCount,
|
||||
AvailableQty: stockCount,
|
||||
}
|
||||
@@ -283,7 +271,7 @@ func (s *stockManage) AddStock(ctx context.Context, msg map[string]interface{})
|
||||
for pageNum := int64(1); ; pageNum++ {
|
||||
details, total, err := dao.StockDetails.List(ctx,
|
||||
&stockDto.ListStockDetailsReq{
|
||||
AssetSkuId: &assetSkuId,
|
||||
AssetSkuId: assetSkuId,
|
||||
Status: stock.StockStatusAvailable,
|
||||
Page: &beans.Page{PageNum: pageNum, PageSize: pageSize},
|
||||
})
|
||||
@@ -317,7 +305,8 @@ func (s *stockManage) AddStock(ctx context.Context, msg map[string]interface{})
|
||||
stockCount = 0 - stockCount
|
||||
}
|
||||
}
|
||||
return assetDao.AssetSku.Update(ctx, &assetDto.UpdateAssetSkuReq{Id: &assetSkuId, Stock: stockCount})
|
||||
_, err := assetDao.AssetSku.Update(ctx, &assetDto.UpdateAssetSkuReq{Id: assetSkuId, Stock: stockCount})
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user