package repositoryimpl import ( "context" "gorm.io/gorm" "time" "voucher/internal/biz/bo" "voucher/internal/biz/repository" "voucher/internal/data" "voucher/internal/data/model" ) type OrderRepoImpl struct { Base[model.Order, bo.OrderBo] db *data.Db } func NewOrderRepoImpl(db *data.Db) repository.OrderRepo { return &OrderRepoImpl{db: db} } func (p *OrderRepoImpl) DB(ctx context.Context) *gorm.DB { return p.db.DB(ctx).Model(model.Order{}) } func (p *OrderRepoImpl) Create(ctx context.Context, req *bo.OrderBo) (*bo.OrderBo, error) { now := time.Now() info := &model.Order{ CreateTime: &now, UpdateTime: &now, } tx := p.db.DB(ctx).Create(info) if tx.Error != nil { return nil, tx.Error } return p.ToBo(info), nil } func (p *OrderRepoImpl) GetByOrderNo(ctx context.Context, orderNo string) (*bo.OrderBo, error) { info := &model.Order{} tx := p.DB(ctx).Where(model.Order{OrderNo: orderNo}).Find(&info) if tx.Error != nil { return nil, tx.Error } if tx.RowsAffected == 0 { return nil, gorm.ErrRecordNotFound } return p.ToBo(info), nil } func (p *OrderRepoImpl) Success(ctx context.Context, id uint32, product string) error { now := time.Now() res := p.db.DB(ctx). Where(model.Order{ Id: id, //Status: trans3.JdOrderStatusGenerating.GetValue(), }). Updates(model.Order{ UpdateTime: &now, }) if res.Error != nil { return res.Error } return nil } func (p *OrderRepoImpl) Fail(ctx context.Context, id uint32) error { now := time.Now() res := p.db.DB(ctx). Where(model.Order{ Id: id, //Status: trans3.JdOrderStatusGenerating.GetValue(), }). Updates(model.Order{ UpdateTime: &now, }) if res.Error != nil { return res.Error } return nil }