diff --git a/internal/biz/multi.go b/internal/biz/multi.go index c67a11e..f0b5dd3 100644 --- a/internal/biz/multi.go +++ b/internal/biz/multi.go @@ -93,7 +93,7 @@ func (biz *MultiBiz) Run(ctx context.Context, source string, req *bo.WechatVouch return fmt.Errorf("批次活动ID为空,不是多笔立减金,请检查") } - mnd, err := biz.MultiNotifyDataRepo.GetByNotifyID(ctx, req.ID) + mnd, err := biz.MultiNotifyDataRepo.GetByNotifyID(ctx, source, req.ID) if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { return fmt.Errorf("查询通知数据错误 error: %v", err) } @@ -118,6 +118,31 @@ func (biz *MultiBiz) Run(ctx context.Context, source string, req *bo.WechatVouch return biz.Request(ctx, mnd, nl) } +func (biz *MultiBiz) RetryRunByMultiNotifyDataId(ctx context.Context, multiNotifyDataId int64) error { + + mnd, err := biz.MultiNotifyDataRepo.GetByID(ctx, multiNotifyDataId) + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return fmt.Errorf("查询通知数据错误 error: %v", err) + } + + order, err := biz.OrderRepo.GetByOrderNo(ctx, mnd.OrderNo) + if err != nil { + return fmt.Errorf("订单查询错误 error: %v", err) + } + + var req *bo.WechatVoucherNotifyBo + if err = json.Unmarshal([]byte(mnd.OriginalData), &req); err != nil { + return fmt.Errorf("通知数据 json unmarshal 错误 error: %v", err) + } + + nl, err := biz.nlCreate(ctx, req, mnd, order) + if err != nil { + return fmt.Errorf("创建通知日志错误 error: %v", err) + } + + return biz.Request(ctx, mnd, nl) +} + func (biz *MultiBiz) mndCreate(ctx context.Context, source string, req *bo.WechatVoucherNotifyBo, order *bo.OrderBo) (*bo.MultiNotifyDataBo, error) { originalData, err := req.Str() @@ -185,7 +210,7 @@ func (biz *MultiBiz) bizContent(nl *bo.MultiNotifyLogBo) (string, error) { bizJsonBytes, err := json.Marshal(req) if err != nil { - return "", err + return "", fmt.Errorf("json.Marshal CmbNotifyRequest error: %v", err) } return string(bizJsonBytes), nil diff --git a/internal/biz/repo/multi_notify_data.go b/internal/biz/repo/multi_notify_data.go index b0b9cc5..b77adfe 100644 --- a/internal/biz/repo/multi_notify_data.go +++ b/internal/biz/repo/multi_notify_data.go @@ -9,6 +9,6 @@ type MultiNotifyDataRepo interface { FindNoticeNumZero(ctx context.Context, fun func(ctx context.Context, rows []*bo.MultiNotifyDataBo) error) error Create(ctx context.Context, req *bo.MultiNotifyDataBo) (*bo.MultiNotifyDataBo, error) GetByID(ctx context.Context, id int64) (*bo.MultiNotifyDataBo, error) - GetByNotifyID(ctx context.Context, notifyId string) (*bo.MultiNotifyDataBo, error) + GetByNotifyID(ctx context.Context, source, notifyId string) (*bo.MultiNotifyDataBo, error) AddNoticeNum(ctx context.Context, id int64) error } diff --git a/internal/data/repoimpl/multi_notify_data.go b/internal/data/repoimpl/multi_notify_data.go index 4cbe272..e152592 100644 --- a/internal/data/repoimpl/multi_notify_data.go +++ b/internal/data/repoimpl/multi_notify_data.go @@ -87,11 +87,11 @@ func (p *MultiNotifyDataRepoImpl) GetByID(ctx context.Context, id int64) (*bo.Mu return p.ToBo(&item), nil } -func (p *MultiNotifyDataRepoImpl) GetByNotifyID(ctx context.Context, notifyId string) (*bo.MultiNotifyDataBo, error) { +func (p *MultiNotifyDataRepoImpl) GetByNotifyID(ctx context.Context, source, notifyId string) (*bo.MultiNotifyDataBo, error) { var item model.MultiNotifyDatum - tx := p.DB(ctx).Where(model.MultiNotifyDatum{NotifyID: notifyId}).First(&item) + tx := p.DB(ctx).Where(model.MultiNotifyDatum{Source: source, NotifyID: notifyId}).First(&item) if tx.Error != nil { return nil, tx.Error diff --git a/internal/service/qixing.go b/internal/service/qixing.go index edd4c9f..a4377ea 100644 --- a/internal/service/qixing.go +++ b/internal/service/qixing.go @@ -54,7 +54,7 @@ func (srv *TripartiteService) QiXingNotify(ctx http.Context) error { sign := helper.Md5(req.Content + srv.bc.Tripartite.QiXing.AppKey) if sign != req.Ciphertext { log.Errorf("qixing notify sign err ip:%s,error:%v,body:%s", ip, err, string(bodyBytes)) - return srv.ResponseErr(ctx, "sign error") + return srv.ResponseErr(ctx, "verify sign error") } wxNotifyDataStr, err := base64.StdEncoding.DecodeString(req.Content)