package usecase import ( "app-cloudep-trade-service/internal/domain" "context" "github.com/shopspring/decimal" ) type OrderUseCase interface { // CreateOrder 建立訂單,不另外做 struct 直接用 model.Order // 考量底層已經寫完,如有額外需求需要在這邊用轉的 CreateOrder(ctx context.Context, param CreateOrderReq) error // CancelOrder 取消訂單 CancelOrder(ctx context.Context, param CancelOrderQuery) error // DeleteOrder 刪除訂單(軟刪除) DeleteOrder(ctx context.Context, param DeleteOrderQuery) error // GetOrder 取得訂單資料 GetOrder(ctx context.Context, param GetOrderQuery) (*GetOrderResp, error) // ListOrder 取得資料列表 ListOrder(ctx context.Context, param GetOrderListReq) (*ListOrderResp, error) // ModifyOrderStatus 更新資料 ModifyOrderStatus(ctx context.Context, param *ModifyOrderQuery) error // OrderStatusTimeout 訂單超時任務/cron/order-status/timeout OrderStatusTimeout(ctx context.Context) error } // ModifyOrderQuery // 0.建立訂單 1.建單失敗 2.審核中 3.付款中 4.已付款 // 5.已付款待轉帳 6.申訴中 7.交易完成 // 8.交易失敗 9.交易取消 10.交易異常 11.交易超時 type ModifyOrderQuery struct { BusinessID string `json:"business_id" validate:"required"` Status int64 `json:"status" validate:"required,oneof=2 3 4 5 6 7 8 11"` } // CancelOrderQuery 1.建單失敗 9.交易取消 10.交易異常 type CancelOrderQuery struct { BusinessID string Status domain.OrderStatus } // DeleteOrderQuery 刪除訂單(軟刪除) type DeleteOrderQuery struct { BusinessID string } // GetOrderQuery 取得訂單 type GetOrderQuery struct { BusinessID string } type GetOrderResp struct { BusinessId string // 訂單業務流水號 OrderType domain.OrderType `json:"order_type"` // 訂單類型 OrderStatus domain.OrderStatus `json:"order_status"` // 訂單狀態 Brand string `json:"brand"` // 下單平台 OrderUid string `json:"order_uid"` // 下單用戶 UID ReferenceId string `json:"reference_id"` // 訂單來源 Count string `json:"count"` // 訂單數量 (decimal to string) OrderFee string `json:"order_fee"` // 訂單手續費 (decimal to string) Amount string `json:"amount"` // 單價 (decimal to string) ReferenceBrand *string `json:"reference_brand,omitempty"` // 訂單來源平台 ReferenceUid *string `json:"reference_uid,omitempty"` // 訂單來源用戶 UID WalletStatus *int64 `json:"wallet_status,omitempty"` // 交易金額狀態 ThreePartyStatus *int64 `json:"three_party_status,omitempty"` // 三方請求狀態 DirectionType *int64 `json:"direction_type,omitempty"` // 交易方向 CryptoType *string `json:"crypto_type,omitempty"` // 交易幣種 ThirdPartyFee *string `json:"third_party_fee,omitempty"` // 第三方手續費 (decimal to string) CryptoToUsdtRate *string `json:"crypto_to_usdt_rate,omitempty"` // 交易幣種對 USDT 匯率 (decimal to string) FiatToUsdRate *string `json:"fiat_to_usd_rate,omitempty"` // 法幣對 USD 匯率 (decimal to string) FeeCryptoToUsdtRate *string `json:"fee_crypto_to_usdt_rate,omitempty"` // 手續費幣種對 USDT 匯率 (decimal to string) UsdtToCryptoTypeRate *string `json:"usdt_to_crypto_type_rate,omitempty"` // USDT 對交易幣種匯率 (decimal to string) PaymentFiat *string `json:"payment_fiat,omitempty"` // 支付法幣 PaymentUnitPrice *string `json:"payment_unit_price,omitempty"` // crypto 單價 (decimal to string) PaymentTemplateId *string `json:"payment_template_id,omitempty"` // 支付方式配置 ID OrderArrivalTime *int64 `json:"order_arrival_time,omitempty"` // 訂單到帳時間 OrderPaymentTime *int64 `json:"order_payment_time,omitempty"` // 訂單付款時間 UnpaidTimeoutSecond *int64 `json:"unpaid_timeout_second,omitempty"` // 支付期限秒數 ChainType *string `json:"chain_type,omitempty"` // 主網類型 TxHash *string `json:"tx_hash,omitempty,omitempty"` // 交易哈希 FromAddress *string `json:"from_address,omitempty,omitempty"` // 來源地址 ToAddress *string `json:"to_address,omitempty,omitempty"` // 目標地址 ChainFee *string `json:"chain_fee,omitempty"` // 鏈上交易手續費 (decimal to string) ChainFeeCrypto *string `json:"chain_fee_crypto,omitempty"` // 鏈上手續費使用幣別 Memo *string `json:"memo,omitempty"` // 鏈上備註 OrderNote *string `json:"order_note,omitempty"` // 訂單交易備註 CreateTime int64 `json:"create_time,omitempty"` // 建立時間 UpdateTime int64 `json:"update_time,omitempty"` // 更新時間 } type GetOrderListReq struct { PageIndex int64 PageSize int64 ReferenceID string ReferenceUID string BusinessID string UID string OrderType domain.OrderType DirectionType []int64 OrderStatus []int64 StartCreateTime int64 EndCreateTime int64 StartUpdateTime int64 EndUpdateTime int64 StartOrderArrivalTime int64 EndOrderArrivalTime int64 StartOrderPaymentTime int64 EndOrderPaymentTime int64 CryptoType string TxHash string } type Pager struct { Index int64 Size int64 Total int64 } type ListOrderResp struct { Data []*GetOrderResp `json:"data"` // 訂單列表 Page *Pager `json:"page"` } type CreateOrderReq struct { BusinessID string OrderType domain.OrderType // 訂單類型 OrderStatus domain.OrderStatus // 訂單狀態 Brand string // 下單平台 OrderUID string // 下單用戶 UID ReferenceID string // 訂單來源 Count decimal.Decimal // 訂單數量 OrderFee decimal.Decimal // 訂單手續費 Amount decimal.Decimal // 單價 WalletStatus int64 // 交易金額狀態 DirectionType int64 // 交易方向 // 以上為必要欄位,下面是區塊鏈時才需要 ReferenceBrand *string // 訂單來源平台 ReferenceUID *string // 訂單來源用戶 UID ThreePartyStatus *int64 // 三方請求狀態 CryptoType *string // 交易幣種 ThirdPartyFee *decimal.Decimal // 第三方手續費 CryptoToUSDTRate *decimal.Decimal // 加密貨幣對 USDT 匯率 FiatToUSDRate *decimal.Decimal // 法幣對 USD 匯率 FeeCryptoToUSDTRate *decimal.Decimal // 手續費加密貨幣對 USDT 匯率 USDTToCryptoTypeRate *decimal.Decimal // USDT 對加密貨幣匯率 PaymentFiat *string // 支付法幣 PaymentUnitPrice *decimal.Decimal // 加密貨幣單價 PaymentTemplateID *string // 支付方式配置 ID OrderArrivalTime *int64 // 訂單到帳時間 OrderPaymentTime *int64 // 訂單付款時間 UnpaidTimeoutSecond *int64 // 支付期限秒數 ChainType *string // 主網類型 TxHash *string // 交易哈希 FromAddress *string // 來源地址 ToAddress *string // 目標地址 ChainFee *decimal.Decimal // 鏈上交易手續費 ChainFeeCrypto *string // 鏈上手續費使用幣別 Memo *string // 鏈上備註 OrderNote *string // 訂單交易備註 }