130 lines
2.8 KiB
Go
130 lines
2.8 KiB
Go
package repoimpl
|
|
|
|
import (
|
|
"context"
|
|
"gorm.io/gorm"
|
|
"time"
|
|
"voucher/internal/biz/bo"
|
|
"voucher/internal/biz/repo"
|
|
"voucher/internal/data"
|
|
"voucher/internal/data/model"
|
|
)
|
|
|
|
// MultiNotifyDataRepoImpl .
|
|
type MultiNotifyDataRepoImpl struct {
|
|
Base[model.MultiNotifyDatum, bo.MultiNotifyDataBo]
|
|
db *data.Db
|
|
}
|
|
|
|
// NewMultiNotifyDataRepoImpl .
|
|
func NewMultiNotifyDataRepoImpl(db *data.Db) repo.MultiNotifyDataRepo {
|
|
return &MultiNotifyDataRepoImpl{db: db}
|
|
}
|
|
|
|
func (p *MultiNotifyDataRepoImpl) DB(ctx context.Context) *gorm.DB {
|
|
return p.db.DB(ctx).WithContext(ctx).Model(model.MultiNotifyDatum{})
|
|
}
|
|
|
|
func (p *MultiNotifyDataRepoImpl) FindNoticeNumZero(ctx context.Context, fun func(ctx context.Context, rows []*bo.MultiNotifyDataBo) error) error {
|
|
|
|
tx := p.DB(ctx).Where("notice_num = 0")
|
|
tx.Order("id asc") // 显式清除排序,移除默认的 ORDER BY
|
|
tx.Limit(200)
|
|
|
|
var results = make([]*model.MultiNotifyDatum, 0)
|
|
|
|
result := tx.FindInBatches(&results, 50, func(tx *gorm.DB, batch int) error {
|
|
return fun(ctx, p.ToBos(results))
|
|
})
|
|
|
|
if result.Error != nil {
|
|
return result.Error
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (p *MultiNotifyDataRepoImpl) Create(ctx context.Context, req *bo.MultiNotifyDataBo) (*bo.MultiNotifyDataBo, error) {
|
|
|
|
now := time.Now()
|
|
|
|
info := &model.MultiNotifyDatum{
|
|
Source: req.Source,
|
|
NotifyID: req.NotifyID,
|
|
OrderNo: req.OrderNo,
|
|
OutBizNo: req.OutBizNo,
|
|
CouponID: req.CouponID,
|
|
StockID: req.StockID,
|
|
ConsumeAmount: req.ConsumeAmount,
|
|
ConsumeTime: req.ConsumeTime,
|
|
EventType: req.EventType,
|
|
OriginalData: req.OriginalData,
|
|
NoticeNum: 0,
|
|
CreateTime: &now,
|
|
}
|
|
|
|
if err := p.DB(ctx).Create(info).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return p.ToBo(info), nil
|
|
}
|
|
|
|
func (p *MultiNotifyDataRepoImpl) GetByID(ctx context.Context, id int64) (*bo.MultiNotifyDataBo, error) {
|
|
|
|
var item model.MultiNotifyDatum
|
|
|
|
tx := p.DB(ctx).Where(model.MultiNotifyDatum{ID: id}).First(&item)
|
|
|
|
if tx.Error != nil {
|
|
return nil, tx.Error
|
|
}
|
|
|
|
if tx.RowsAffected == 0 {
|
|
return nil, gorm.ErrRecordNotFound
|
|
}
|
|
|
|
return p.ToBo(&item), nil
|
|
}
|
|
|
|
func (p *MultiNotifyDataRepoImpl) GetByNotifyID(ctx context.Context, notifyId string) (*bo.MultiNotifyDataBo, error) {
|
|
|
|
var item model.MultiNotifyDatum
|
|
|
|
tx := p.DB(ctx).Where(model.MultiNotifyDatum{NotifyID: notifyId}).First(&item)
|
|
|
|
if tx.Error != nil {
|
|
return nil, tx.Error
|
|
}
|
|
|
|
if tx.RowsAffected == 0 {
|
|
return nil, gorm.ErrRecordNotFound
|
|
}
|
|
|
|
return p.ToBo(&item), nil
|
|
}
|
|
|
|
func (p *MultiNotifyDataRepoImpl) AddNoticeNum(ctx context.Context, id int64) error {
|
|
|
|
now := time.Now()
|
|
|
|
u := map[string]interface{}{
|
|
"notice_num": gorm.Expr("notice_num + ?", 1),
|
|
"update_time": &now,
|
|
}
|
|
|
|
tx := p.DB(ctx).
|
|
Where("id = ?", id).
|
|
Updates(u)
|
|
|
|
if tx.Error != nil {
|
|
return tx.Error
|
|
}
|
|
|
|
if tx.RowsAffected == 0 {
|
|
return gorm.ErrRecordNotFound
|
|
}
|
|
|
|
return nil
|
|
}
|