voucher/internal/data/repoimpl/order_bak.go

65 lines
1.4 KiB
Go

package repoimpl
import (
"context"
"gorm.io/gorm"
"voucher/internal/biz/bo"
"voucher/internal/biz/repo"
"voucher/internal/biz/vo"
"voucher/internal/data"
"voucher/internal/data/model"
)
// OrderBakRepoImpl .
type OrderBakRepoImpl struct {
Base[model.OrderBak, bo.OrderBo]
db *data.Db
}
// NewOrderBakRepoImpl .
func NewOrderBakRepoImpl(db *data.Db) repo.OrderBakRepo {
return &OrderBakRepoImpl{db: db}
}
func (p *OrderBakRepoImpl) DB(ctx context.Context) *gorm.DB {
return p.db.DB(ctx).Model(model.OrderBak{})
}
func (p *OrderBakRepoImpl) SpecifyFindInBatches(ctx context.Context, req *bo.FindInBatchesBo, fun func(ctx context.Context, rows []*bo.OrderBo) error) error {
tx := p.DB(ctx).Where("status = ?", vo.OrderStatusSuccess.GetValue())
if req.ProductNo != "" {
tx = tx.Where("product_no = ?", req.ProductNo)
}
if req.StartTime != "" && req.EndTime != "" {
tx = tx.Where("receive_success_time BETWEEN ? AND ?", req.StartTime, req.EndTime)
}
if req.OrderNos != nil {
tx = tx.Where("order_no IN (?)", req.OrderNos)
}
if req.OutBizNos != nil {
tx = tx.Where("out_biz_no IN (?)", req.OutBizNos)
}
if req.VoucherNos != nil {
tx = tx.Where("voucher_no IN (?)", req.VoucherNos)
}
var results = make([]*model.OrderBak, 0)
result := tx.FindInBatches(&results, 100, func(tx *gorm.DB, batch int) error {
return fun(ctx, p.ToBos(results))
})
if result.Error != nil {
return result.Error
}
return nil
}