96 lines
2.3 KiB
Go
96 lines
2.3 KiB
Go
package cmb
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"voucher/internal/biz/bo"
|
|
"voucher/internal/biz/vo"
|
|
"voucher/internal/pkg/uid"
|
|
)
|
|
|
|
func (v *Cmb) OrderConsume(ctx context.Context, order *bo.OrderBo) (outRequestNo string, err error) {
|
|
|
|
if order.Status.IsWait() {
|
|
return "", fmt.Errorf("订单状态错误,%s", order.Status.GetText())
|
|
}
|
|
|
|
if err = v.ing(ctx, order.ID); err != nil {
|
|
return
|
|
}
|
|
|
|
orderWechat, err := v.create(ctx, order)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
couponId, err := v.WechatCpnRepo.Order(ctx, orderWechat)
|
|
if err != nil {
|
|
return "", v.fail(ctx, order, orderWechat, err.Error())
|
|
}
|
|
|
|
err = v.success(ctx, order, orderWechat, couponId)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return orderWechat.OutRequestNo, nil
|
|
}
|
|
|
|
func (v *Cmb) create(ctx context.Context, order *bo.OrderBo) (*bo.OrderWechatBo, error) {
|
|
outRequestNo, err := v.GenerateMixRepo.GeneratorString(ctx, uid.OrderWechat)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
req := &bo.OrderWechatBo{
|
|
OrderNo: order.OrderNo,
|
|
OutRequestNo: outRequestNo,
|
|
AppID: order.AppID,
|
|
StockCreatorMchid: order.MerchantNo,
|
|
OpenID: order.Account,
|
|
StockID: order.ProductNo,
|
|
Status: vo.OrderWechatStatusWait,
|
|
}
|
|
|
|
orderWechat, err := v.OrderWechatRepo.Create(ctx, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return orderWechat, nil
|
|
}
|
|
|
|
func (v *Cmb) ing(ctx context.Context, id uint64) error {
|
|
return v.OrderRepo.Ing(ctx, id)
|
|
}
|
|
|
|
func (v *Cmb) success(ctx context.Context, order *bo.OrderBo, orderWechat *bo.OrderWechatBo, couponId string) error {
|
|
if err := v.OrderWechatRepo.Success(ctx, orderWechat.ID, couponId); err != nil {
|
|
return err
|
|
}
|
|
return v.OrderRepo.Success(ctx, order.ID)
|
|
}
|
|
|
|
func (v *Cmb) fail(ctx context.Context, order *bo.OrderBo, orderWechat *bo.OrderWechatBo, remarks string) error {
|
|
if err := v.OrderWechatRepo.Fail(ctx, orderWechat.ID, remarks); err != nil {
|
|
return err
|
|
}
|
|
return v.OrderRepo.Fail(ctx, order.ID)
|
|
}
|
|
|
|
func (v *Cmb) QueryConsume(ctx context.Context, order *bo.OrderBo) (err error) {
|
|
return
|
|
}
|
|
|
|
func (v *Cmb) NotifyConsume(ctx context.Context, order *bo.OrderBo, orderOutRequestNo string) error {
|
|
|
|
orderWechat, err := v.OrderWechatRepo.GetByOutRequestNo(ctx, orderOutRequestNo)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Printf("orderWechat:%+v", orderWechat)
|
|
|
|
return nil
|
|
}
|