Files
assets/dao/stock/stock_batch_dao.go

70 lines
2.0 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/gfdb"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gconv"
)
var StockBatch = new(stockBatch)
type stockBatch struct {
}
// Insert 插入
func (d *stockBatch) Insert(ctx context.Context, req *dto.CreateSockBatchReq) (id int64, err error) {
var res *entity.StockBatch
if err = gconv.Struct(req, &res); err != nil {
return
}
r, err := gfdb.DB(ctx).Model(ctx, public.TableNameStockBatch).Data(&res).Insert()
if err != nil {
return
}
return r.LastInsertId()
}
func (d *stockBatch) Update(ctx context.Context, req *dto.UpdateSockBatchReq) (rows int64, err error) {
model := gfdb.DB(ctx).Model(ctx, public.TableNameStockBatch).Where(entity.StockBatchCol.Id, req.Id)
model.Data(entity.StockBatchCol.BatchQty, &gdb.Counter{
Field: entity.StockBatchCol.BatchQty,
Value: gconv.Float64(req.BatchQty),
})
model.Data(entity.StockBatchCol.AvailableQty, &gdb.Counter{
Field: entity.StockBatchCol.AvailableQty,
Value: gconv.Float64(req.AvailableQty),
})
r, err := model.Update()
if err != nil {
return
}
return r.RowsAffected()
}
// One 根据批次号查询使用NoCache跳过缓存确保获取最新数据
func (d *stockBatch) One(ctx context.Context, req *dto.GetSockBatchReq, fields ...string) (res *entity.StockBatch, err error) {
model := gfdb.DB(ctx).Model(ctx, public.TableNameStockBatch)
if !g.IsEmpty(req.Id) {
model.Where(entity.StockBatchCol.Id, req.Id)
}
if !g.IsEmpty(req.BatchNo) {
model.Where(entity.StockBatchCol.BatchNo, req.BatchNo)
}
r, err := model.Fields(fields).One()
if err != nil {
return
}
err = r.Struct(&res)
return
}