Files
assets/dao/stock/stock_batch_dao.go
2026-03-18 10:18:03 +08:00

79 lines
2.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 批次库存DAO层(逻辑库存)
// 职责批次CRUD、使用$inc原子操作更新数量
// 紧密耦合service.StockBatch、service.StockManage(入库出库)
// 注意Update使用$inc原子操作GetOne使用NoCache()跳过缓存
package dao
import (
"assets/consts/public"
dto "assets/model/dto/stock"
entity "assets/model/entity/stock"
"context"
"gitea.com/red-future/common/db/mongo"
"gitea.com/red-future/common/utils"
"go.mongodb.org/mongo-driver/v2/bson"
)
var StockBatch = new(stockBatch)
type stockBatch struct {
}
// Insert 插入
func (d *stockBatch) Insert(ctx context.Context, req *dto.CreateBatchReq) (ids []interface{}, err error) {
var result *entity.StockBatch
if err = utils.Struct(req, &result); err != nil {
return
}
ids, err = mongo.DB().Insert(ctx, []interface{}{&result}, public.StockBatchCollection)
return
}
// Update 更新批次数量(使用$inc原子操作并发安全
func (d *stockBatch) Update(ctx context.Context, req *dto.UpdateBatchReq) (err error) {
filter := bson.M{"_id": req.Id}
update := bson.M{
"$inc": bson.M{
"batchQty": req.BatchQty,
"availableQty": req.AvailableQty,
},
}
_, err = mongo.DB().Update(ctx, filter, update, public.StockBatchCollection)
return
}
// GetOne 根据批次号查询使用NoCache跳过缓存确保获取最新数据
func (d *stockBatch) GetOne(ctx context.Context, batchNo string) (res *entity.StockBatch, err error) {
filter := bson.M{"batchNo": batchNo}
err = mongo.DB().NoCache().FindOne(ctx, filter, &res, public.StockBatchCollection)
return
}
// GetOneById 根据ID查询批次
func (d *stockBatch) GetOneById(ctx context.Context, req *dto.GetBatchReq) (res *entity.StockBatch, err error) {
filter := bson.M{"_id": req.Id}
err = mongo.DB().FindOne(ctx, filter, &res, public.StockBatchCollection)
return
}
// DeleteFake 软删除批次
func (d *stockBatch) DeleteFake(ctx context.Context, req *dto.DeleteBatchReq) error {
filter := bson.M{"_id": req.Id}
_, err := mongo.DB().DeleteSoft(ctx, filter, public.StockBatchCollection)
return err
}
// List 查询批次列表
func (d *stockBatch) List(ctx context.Context, req *dto.ListBatchReq) (res []entity.StockBatch, total int64, err error) {
filter := bson.M{}
if req.AssetId != nil {
filter["assetId"] = req.AssetId
}
if req.AssetSkuId != nil {
filter["assetSkuId"] = req.AssetSkuId
}
total, err = mongo.DB().Find(ctx, filter, &res, public.StockBatchCollection, req.Page, req.OrderBy)
return
}