feat(pickup): support platform managed offline settlement

This commit is contained in:
yml2213
2026-08-09 20:20:39 +08:00
parent 14bc91b007
commit 8fb7d3bac0
12 changed files with 499 additions and 128 deletions
+51 -36
View File
@@ -17,48 +17,59 @@ const (
AccountSourceExternalPlatformManaged = "external_platform_managed"
ListingSourceExternal = "external"
ListingSourceInternal = "internal"
SettlementModeOwnerWallet = "owner_wallet"
SettlementModePlatformManaged = "platform_managed"
OfflineSettlementStatusNone = "none"
OfflineSettlementStatusPending = "pending"
OfflineSettlementStatusSettled = "settled"
)
var (
ErrDependencyUnavailable = errors.New("dependency unavailable")
ErrListingUnavailable = errors.New("listing unavailable")
ErrPickupNotFound = errors.New("pickup not found")
ErrPickupNotPickingUp = errors.New("pickup not in picking_up status")
ErrInvalidAmount = errors.New("invalid amount")
ErrInvalidProfit = errors.New("invalid profit amount")
ErrDuplicatePickup = errors.New("duplicate pickup in progress")
ErrDependencyUnavailable = errors.New("dependency unavailable")
ErrListingUnavailable = errors.New("listing unavailable")
ErrPickupNotFound = errors.New("pickup not found")
ErrPickupNotPickingUp = errors.New("pickup not in picking_up status")
ErrInvalidAmount = errors.New("invalid amount")
ErrInvalidProfit = errors.New("invalid profit amount")
ErrDuplicatePickup = errors.New("duplicate pickup in progress")
ErrOfflineSettlementCannotMark = errors.New("pickup offline settlement cannot be marked")
)
type PickupDTO struct {
ID uint64 `json:"id"`
PickupNo string `json:"pickup_no"`
ListingID uint64 `json:"listing_id"`
ListingNo string `json:"listing_no"`
AccountID uint64 `json:"account_id"`
AccountTitle string `json:"account_title"`
ServerRegion string `json:"server_region"`
LoginPlatform string `json:"login_platform"`
OwnerID uint64 `json:"owner_id"`
OwnerPhone string `json:"owner_phone"`
AdminID uint64 `json:"admin_id"`
Platform string `json:"platform"`
ShopName string `json:"shop_name"`
AccountSource string `json:"account_source"`
SourceChannel string `json:"source_channel"`
ListingPriceCent int64 `json:"listing_price_cent"`
OwnerPriceCent int64 `json:"owner_price_cent"`
WebsiteProfitCent int64 `json:"website_profit_cent"`
ProfitAmountCent int64 `json:"profit_amount_cent"`
SellerRatio float64 `json:"seller_ratio"`
BuyerRatio float64 `json:"buyer_ratio"`
AccountSnapshot datatypes.JSON `json:"account_snapshot,omitempty"`
SettleAmountCent int64 `json:"settle_amount_cent"`
Status string `json:"status"`
Remark string `json:"remark"`
CompleteRemark string `json:"complete_remark"`
CreatedAt time.Time `json:"created_at"`
CompletedAt *time.Time `json:"completed_at,omitempty"`
CancelledAt *time.Time `json:"cancelled_at,omitempty"`
ID uint64 `json:"id"`
PickupNo string `json:"pickup_no"`
ListingID uint64 `json:"listing_id"`
ListingNo string `json:"listing_no"`
AccountID uint64 `json:"account_id"`
AccountTitle string `json:"account_title"`
ServerRegion string `json:"server_region"`
LoginPlatform string `json:"login_platform"`
OwnerID uint64 `json:"owner_id"`
OwnerPhone string `json:"owner_phone"`
AdminID uint64 `json:"admin_id"`
Platform string `json:"platform"`
ShopName string `json:"shop_name"`
AccountSource string `json:"account_source"`
SourceChannel string `json:"source_channel"`
SettlementMode string `json:"settlement_mode"`
ListingPriceCent int64 `json:"listing_price_cent"`
OwnerPriceCent int64 `json:"owner_price_cent"`
WebsiteProfitCent int64 `json:"website_profit_cent"`
ProfitAmountCent int64 `json:"profit_amount_cent"`
SellerRatio float64 `json:"seller_ratio"`
BuyerRatio float64 `json:"buyer_ratio"`
AccountSnapshot datatypes.JSON `json:"account_snapshot,omitempty"`
SettleAmountCent int64 `json:"settle_amount_cent"`
Status string `json:"status"`
OfflineSettlementStatus string `json:"offline_settlement_status"`
OfflineSettlementRemark string `json:"offline_settlement_remark"`
OfflineSettledBy *uint64 `json:"offline_settled_by,omitempty"`
OfflineSettledAt *time.Time `json:"offline_settled_at,omitempty"`
Remark string `json:"remark"`
CompleteRemark string `json:"complete_remark"`
CreatedAt time.Time `json:"created_at"`
CompletedAt *time.Time `json:"completed_at,omitempty"`
CancelledAt *time.Time `json:"cancelled_at,omitempty"`
}
type CreateRequest struct {
@@ -75,6 +86,10 @@ type CompleteRequest struct {
CompleteRemark string `json:"complete_remark"`
}
type OfflineSettlementRequest struct {
Remark string `json:"remark" binding:"max=255"`
}
type UpdateProfitRequest struct {
ProfitAmountCent int64 `json:"profit_amount_cent" binding:"min=0"`
Reason string `json:"reason"`