优化交易创建流程,客户管理新增折扣与来源字段及功能
This commit is contained in:
@@ -32,8 +32,12 @@ type tradeService struct {
|
||||
}
|
||||
|
||||
// 创建交易
|
||||
func (s *tradeService) Create(uid int32, tradeData *CreateTradeData, productData *CreateResourceData) (*CreateTradeResult, error) {
|
||||
detail, err := productData.TradeDetail()
|
||||
func (s *tradeService) Create(user *m.User, tradeData *CreateTradeData, productData *CreateResourceData) (*CreateTradeResult, error) {
|
||||
if user == nil {
|
||||
return nil, core.NewBizErr("用户未登录")
|
||||
}
|
||||
|
||||
detail, err := productData.TradeDetail(user)
|
||||
if err != nil {
|
||||
return nil, core.NewServErr("获取产品支付信息失败", err)
|
||||
}
|
||||
@@ -178,7 +182,7 @@ func (s *tradeService) Create(uid int32, tradeData *CreateTradeData, productData
|
||||
|
||||
// 保存订单
|
||||
err = q.Trade.Create(&m.Trade{
|
||||
UserID: uid,
|
||||
UserID: user.ID,
|
||||
InnerNo: tradeNo,
|
||||
Type: detail.Type,
|
||||
Subject: detail.Subject,
|
||||
@@ -208,7 +212,7 @@ func (s *tradeService) Create(uid int32, tradeData *CreateTradeData, productData
|
||||
}
|
||||
|
||||
// 提交异步关闭事件
|
||||
_, err = g.Asynq.Enqueue(e.NewCloseTradeTask(uid, tradeNo, method), asynq.ProcessAt(expireAt))
|
||||
_, err = g.Asynq.Enqueue(e.NewCloseTradeTask(user.ID, tradeNo, method), asynq.ProcessAt(expireAt))
|
||||
if err != nil {
|
||||
return nil, core.NewServErr("提交异步关闭事件失败", err)
|
||||
}
|
||||
@@ -318,7 +322,7 @@ func (s *tradeService) OnCompleteTrade(user *m.User, interNo string, outerNo str
|
||||
}
|
||||
|
||||
// 生成账单
|
||||
err = Bill.CreateForResourceByTrade(q, user.ID, resource.ID, trade.ID, &detail)
|
||||
err = Bill.CreateForResource(q, user.ID, resource.ID, &trade.ID, &detail)
|
||||
if err != nil {
|
||||
return core.NewServErr("生成账单失败", err)
|
||||
}
|
||||
@@ -602,16 +606,19 @@ type OnTradeCompletedData struct {
|
||||
}
|
||||
|
||||
type ProductInfo interface {
|
||||
TradeDetail() (*TradeDetail, error)
|
||||
TradeDetail(user *m.User) (*TradeDetail, error)
|
||||
}
|
||||
|
||||
type TradeDetail struct {
|
||||
Type m.TradeType `json:"type"`
|
||||
Subject string `json:"subject"`
|
||||
Amount decimal.Decimal `json:"amount"`
|
||||
Actual decimal.Decimal `json:"actual"`
|
||||
CouponId *int32 `json:"coupon_id,omitempty"`
|
||||
Product ProductInfo `json:"product"`
|
||||
Product ProductInfo `json:"product"`
|
||||
Type m.TradeType `json:"type"`
|
||||
Subject string `json:"subject"`
|
||||
Amount decimal.Decimal `json:"amount"`
|
||||
Actual decimal.Decimal `json:"actual"`
|
||||
DiscountId *int32 `json:"discount_id,omitempty"`
|
||||
Discount *m.ProductDiscount `json:"-"` // 不应缓存
|
||||
CouponId *int32 `json:"coupon_id,omitempty"`
|
||||
Coupon *m.Coupon `json:"-"` // 不应缓存
|
||||
}
|
||||
|
||||
type CompleteEvent interface {
|
||||
|
||||
Reference in New Issue
Block a user