From 290e9ceb93e808591350a6954dd81e91cbb9d4f1 Mon Sep 17 00:00:00 2001 From: zhx Date: Tue, 21 Jul 2026 19:53:29 +0800 Subject: [PATCH] =?UTF-8?q?h5=20=E9=92=BB=E7=9F=B3=E5=8E=86=E5=8F=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/proto/wallet/v1/wallet.pb.go | 378 +++++++++--------- api/proto/wallet/v1/wallet.proto | 5 + api/proto/wallet/v1/wallet_grpc.pb.go | 40 ++ .../internal/client/wallet_client.go | 5 + .../transport/http/httproutes/router.go | 2 + .../internal/transport/http/response_test.go | 341 +++++++++------- .../http/walletapi/app_wallet_handler.go | 66 ++- .../transport/http/walletapi/handler.go | 1 + .../mysql/initdb/001_wallet_service.sql | 1 + ..._host_period_diamond_entries_user_time.sql | 21 + .../internal/domain/ledger/wallet_query.go | 2 + .../internal/service/wallet/balance.go | 28 +- .../service/wallet/ports/repository.go | 1 + .../storage/mysql/wallet_query_repository.go | 59 +++ .../internal/transport/grpc/balance.go | 25 +- 15 files changed, 648 insertions(+), 327 deletions(-) create mode 100644 services/wallet-service/deploy/mysql/migrations/014_host_period_diamond_entries_user_time.sql diff --git a/api/proto/wallet/v1/wallet.pb.go b/api/proto/wallet/v1/wallet.pb.go index f2fe0172..31b8123b 100644 --- a/api/proto/wallet/v1/wallet.pb.go +++ b/api/proto/wallet/v1/wallet.pb.go @@ -17269,13 +17269,16 @@ func (x *WalletTransaction) GetTransferCurrencyCode() string { } type ListWalletTransactionsRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` - UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - AssetType string `protobuf:"bytes,4,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` - Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` - PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` + AppCode string `protobuf:"bytes,2,opt,name=app_code,json=appCode,proto3" json:"app_code,omitempty"` + UserId int64 `protobuf:"varint,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + AssetType string `protobuf:"bytes,4,opt,name=asset_type,json=assetType,proto3" json:"asset_type,omitempty"` + Page int32 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // 时间范围统一使用 UTC epoch milliseconds 半开区间 [start_at_ms, end_at_ms)。 + StartAtMs int64 `protobuf:"varint,7,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"` + EndAtMs int64 `protobuf:"varint,8,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -17352,6 +17355,20 @@ func (x *ListWalletTransactionsRequest) GetPageSize() int32 { return 0 } +func (x *ListWalletTransactionsRequest) GetStartAtMs() int64 { + if x != nil { + return x.StartAtMs + } + return 0 +} + +func (x *ListWalletTransactionsRequest) GetEndAtMs() int64 { + if x != nil { + return x.EndAtMs + } + return 0 +} + type ListWalletTransactionsResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Transactions []*WalletTransaction `protobuf:"bytes,1,rep,name=transactions,proto3" json:"transactions,omitempty"` @@ -28322,7 +28339,7 @@ const file_proto_wallet_v1_wallet_proto_rawDesc = "" + " \x01(\tR\x06roomId\x12\"\n" + "\rcreated_at_ms\x18\v \x01(\x03R\vcreatedAtMs\x12,\n" + "\x12transfer_usd_minor\x18\f \x01(\x03R\x10transferUsdMinor\x124\n" + - "\x16transfer_currency_code\x18\r \x01(\tR\x14transferCurrencyCode\"\xc2\x01\n" + + "\x16transfer_currency_code\x18\r \x01(\tR\x14transferCurrencyCode\"\xfe\x01\n" + "\x1dListWalletTransactionsRequest\x12\x1d\n" + "\n" + "request_id\x18\x01 \x01(\tR\trequestId\x12\x19\n" + @@ -28331,7 +28348,9 @@ const file_proto_wallet_v1_wallet_proto_rawDesc = "" + "\n" + "asset_type\x18\x04 \x01(\tR\tassetType\x12\x12\n" + "\x04page\x18\x05 \x01(\x05R\x04page\x12\x1b\n" + - "\tpage_size\x18\x06 \x01(\x05R\bpageSize\"~\n" + + "\tpage_size\x18\x06 \x01(\x05R\bpageSize\x12\x1e\n" + + "\vstart_at_ms\x18\a \x01(\x03R\tstartAtMs\x12\x1a\n" + + "\tend_at_ms\x18\b \x01(\x03R\aendAtMs\"~\n" + "\x1eListWalletTransactionsResponse\x12F\n" + "\ftransactions\x18\x01 \x03(\v2\".hyapp.wallet.v1.WalletTransactionR\ftransactions\x12\x14\n" + "\x05total\x18\x02 \x01(\x03R\x05total\"\xb1\x02\n" + @@ -29218,7 +29237,7 @@ const file_proto_wallet_v1_wallet_proto_rawDesc = "" + "%ProcessHostSalaryDailySettlementBatch\x12!.hyapp.wallet.v1.CronBatchRequest\x1a\".hyapp.wallet.v1.CronBatchResponse\x12r\n" + ")ProcessHostSalaryHalfMonthSettlementBatch\x12!.hyapp.wallet.v1.CronBatchRequest\x1a\".hyapp.wallet.v1.CronBatchResponse\x12g\n" + "\x1eProcessHostSalaryMonthEndBatch\x12!.hyapp.wallet.v1.CronBatchRequest\x1a\".hyapp.wallet.v1.CronBatchResponse\x12\x91\x01\n" + - "\x1eProcessVipDailyCoinRebateBatch\x126.hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchRequest\x1a7.hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchResponse2\xc1t\n" + + "\x1eProcessVipDailyCoinRebateBatch\x126.hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchRequest\x1a7.hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchResponse2\xc8u\n" + "\rWalletService\x12R\n" + "\tDebitGift\x12!.hyapp.wallet.v1.DebitGiftRequest\x1a\".hyapp.wallet.v1.DebitGiftResponse\x12^\n" + "\x0fDebitDirectGift\x12'.hyapp.wallet.v1.DebitDirectGiftRequest\x1a\".hyapp.wallet.v1.DebitGiftResponse\x12a\n" + @@ -29314,7 +29333,8 @@ const file_proto_wallet_v1_wallet_proto_rawDesc = "" + "\x11HandleV5PayNotify\x12).hyapp.wallet.v1.HandleV5PayNotifyRequest\x1a*.hyapp.wallet.v1.HandleV5PayNotifyResponse\x12\x7f\n" + "\x18GetDiamondExchangeConfig\x120.hyapp.wallet.v1.GetDiamondExchangeConfigRequest\x1a1.hyapp.wallet.v1.GetDiamondExchangeConfigResponse\x12p\n" + "\x13ExchangePointToCoin\x12+.hyapp.wallet.v1.ExchangePointToCoinRequest\x1a,.hyapp.wallet.v1.ExchangePointToCoinResponse\x12y\n" + - "\x16ListWalletTransactions\x12..hyapp.wallet.v1.ListWalletTransactionsRequest\x1a/.hyapp.wallet.v1.ListWalletTransactionsResponse\x12d\n" + + "\x16ListWalletTransactions\x12..hyapp.wallet.v1.ListWalletTransactionsRequest\x1a/.hyapp.wallet.v1.ListWalletTransactionsResponse\x12\x84\x01\n" + + "!ListHostPeriodDiamondTransactions\x12..hyapp.wallet.v1.ListWalletTransactionsRequest\x1a/.hyapp.wallet.v1.ListWalletTransactionsResponse\x12d\n" + "\x0fListVipPackages\x12'.hyapp.wallet.v1.ListVipPackagesRequest\x1a(.hyapp.wallet.v1.ListVipPackagesResponse\x12p\n" + "\x13GetVipProgramConfig\x12+.hyapp.wallet.v1.GetVipProgramConfigRequest\x1a,.hyapp.wallet.v1.GetVipProgramConfigResponse\x12O\n" + "\bGetMyVip\x12 .hyapp.wallet.v1.GetMyVipRequest\x1a!.hyapp.wallet.v1.GetMyVipResponse\x12d\n" + @@ -29924,173 +29944,175 @@ var file_proto_wallet_v1_wallet_proto_depIdxs = []int32{ 185, // 253: hyapp.wallet.v1.WalletService.GetDiamondExchangeConfig:input_type -> hyapp.wallet.v1.GetDiamondExchangeConfigRequest 187, // 254: hyapp.wallet.v1.WalletService.ExchangePointToCoin:input_type -> hyapp.wallet.v1.ExchangePointToCoinRequest 190, // 255: hyapp.wallet.v1.WalletService.ListWalletTransactions:input_type -> hyapp.wallet.v1.ListWalletTransactionsRequest - 200, // 256: hyapp.wallet.v1.WalletService.ListVipPackages:input_type -> hyapp.wallet.v1.ListVipPackagesRequest - 212, // 257: hyapp.wallet.v1.WalletService.GetVipProgramConfig:input_type -> hyapp.wallet.v1.GetVipProgramConfigRequest - 202, // 258: hyapp.wallet.v1.WalletService.GetMyVip:input_type -> hyapp.wallet.v1.GetMyVipRequest - 234, // 259: hyapp.wallet.v1.WalletService.CheckVipBenefit:input_type -> hyapp.wallet.v1.CheckVipBenefitRequest - 204, // 260: hyapp.wallet.v1.WalletService.PurchaseVip:input_type -> hyapp.wallet.v1.PurchaseVipRequest - 206, // 261: hyapp.wallet.v1.WalletService.DebitCPBreakupFee:input_type -> hyapp.wallet.v1.DebitCPBreakupFeeRequest - 208, // 262: hyapp.wallet.v1.WalletService.DebitWheelDraw:input_type -> hyapp.wallet.v1.DebitWheelDrawRequest - 210, // 263: hyapp.wallet.v1.WalletService.GrantVip:input_type -> hyapp.wallet.v1.GrantVipRequest - 228, // 264: hyapp.wallet.v1.WalletService.GrantVipTrialCard:input_type -> hyapp.wallet.v1.GrantVipTrialCardRequest - 230, // 265: hyapp.wallet.v1.WalletService.EquipVipTrialCard:input_type -> hyapp.wallet.v1.EquipVipTrialCardRequest - 232, // 266: hyapp.wallet.v1.WalletService.UnequipVipTrialCard:input_type -> hyapp.wallet.v1.UnequipVipTrialCardRequest - 237, // 267: hyapp.wallet.v1.WalletService.ListAdminVipLevels:input_type -> hyapp.wallet.v1.ListAdminVipLevelsRequest - 239, // 268: hyapp.wallet.v1.WalletService.UpdateAdminVipLevels:input_type -> hyapp.wallet.v1.UpdateAdminVipLevelsRequest - 214, // 269: hyapp.wallet.v1.WalletService.UpdateAdminVipProgramConfig:input_type -> hyapp.wallet.v1.UpdateAdminVipProgramConfigRequest - 216, // 270: hyapp.wallet.v1.WalletService.UpdateMyVipSettings:input_type -> hyapp.wallet.v1.UpdateMyVipSettingsRequest - 222, // 271: hyapp.wallet.v1.WalletService.GetMyCurrentVipDailyCoinRebate:input_type -> hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateRequest - 224, // 272: hyapp.wallet.v1.WalletService.ListMyVipDailyCoinRebateStatuses:input_type -> hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesRequest - 226, // 273: hyapp.wallet.v1.WalletService.ClaimVipDailyCoinRebate:input_type -> hyapp.wallet.v1.ClaimVipDailyCoinRebateRequest - 241, // 274: hyapp.wallet.v1.WalletService.CreditTaskReward:input_type -> hyapp.wallet.v1.CreditTaskRewardRequest - 243, // 275: hyapp.wallet.v1.WalletService.CreditLuckyGiftReward:input_type -> hyapp.wallet.v1.CreditLuckyGiftRewardRequest - 245, // 276: hyapp.wallet.v1.WalletService.CreditWheelReward:input_type -> hyapp.wallet.v1.CreditWheelRewardRequest - 247, // 277: hyapp.wallet.v1.WalletService.CreditRoomTurnoverReward:input_type -> hyapp.wallet.v1.CreditRoomTurnoverRewardRequest - 249, // 278: hyapp.wallet.v1.WalletService.CreditInviteActivityReward:input_type -> hyapp.wallet.v1.CreditInviteActivityRewardRequest - 251, // 279: hyapp.wallet.v1.WalletService.CreditAgencyOpeningReward:input_type -> hyapp.wallet.v1.CreditAgencyOpeningRewardRequest - 253, // 280: hyapp.wallet.v1.WalletService.ApplyGameCoinChange:input_type -> hyapp.wallet.v1.ApplyGameCoinChangeRequest - 258, // 281: hyapp.wallet.v1.WalletService.GetRedPacketConfig:input_type -> hyapp.wallet.v1.GetRedPacketConfigRequest - 260, // 282: hyapp.wallet.v1.WalletService.UpdateRedPacketConfig:input_type -> hyapp.wallet.v1.UpdateRedPacketConfigRequest - 262, // 283: hyapp.wallet.v1.WalletService.CreateRedPacket:input_type -> hyapp.wallet.v1.CreateRedPacketRequest - 264, // 284: hyapp.wallet.v1.WalletService.ClaimRedPacket:input_type -> hyapp.wallet.v1.ClaimRedPacketRequest - 266, // 285: hyapp.wallet.v1.WalletService.ListRedPackets:input_type -> hyapp.wallet.v1.ListRedPacketsRequest - 268, // 286: hyapp.wallet.v1.WalletService.GetRedPacket:input_type -> hyapp.wallet.v1.GetRedPacketRequest - 270, // 287: hyapp.wallet.v1.WalletService.ExpireRedPackets:input_type -> hyapp.wallet.v1.ExpireRedPacketsRequest - 272, // 288: hyapp.wallet.v1.WalletService.RetryRedPacketRefund:input_type -> hyapp.wallet.v1.RetryRedPacketRefundRequest - 275, // 289: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryDailySettlementBatch:output_type -> hyapp.wallet.v1.CronBatchResponse - 275, // 290: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryHalfMonthSettlementBatch:output_type -> hyapp.wallet.v1.CronBatchResponse - 275, // 291: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryMonthEndBatch:output_type -> hyapp.wallet.v1.CronBatchResponse - 221, // 292: hyapp.wallet.v1.WalletCronService.ProcessVipDailyCoinRebateBatch:output_type -> hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchResponse - 2, // 293: hyapp.wallet.v1.WalletService.DebitGift:output_type -> hyapp.wallet.v1.DebitGiftResponse - 2, // 294: hyapp.wallet.v1.WalletService.DebitDirectGift:output_type -> hyapp.wallet.v1.DebitGiftResponse - 6, // 295: hyapp.wallet.v1.WalletService.BatchDebitGift:output_type -> hyapp.wallet.v1.BatchDebitGiftResponse - 2, // 296: hyapp.wallet.v1.WalletService.DebitRobotGift:output_type -> hyapp.wallet.v1.DebitGiftResponse - 10, // 297: hyapp.wallet.v1.WalletService.GetBalances:output_type -> hyapp.wallet.v1.GetBalancesResponse - 14, // 298: hyapp.wallet.v1.WalletService.GetActiveHostSalaryPolicy:output_type -> hyapp.wallet.v1.GetActiveHostSalaryPolicyResponse - 17, // 299: hyapp.wallet.v1.WalletService.GetHostSalaryProgress:output_type -> hyapp.wallet.v1.GetHostSalaryProgressResponse - 283, // 300: hyapp.wallet.v1.WalletService.GetHostRevenueStats:output_type -> hyapp.wallet.v1.GetHostRevenueStatsResponse - 286, // 301: hyapp.wallet.v1.WalletService.GetAgencyPointShareStats:output_type -> hyapp.wallet.v1.GetAgencyPointShareStatsResponse - 289, // 302: hyapp.wallet.v1.WalletService.GetAgencyHostGiftStats:output_type -> hyapp.wallet.v1.GetAgencyHostGiftStatsResponse - 20, // 303: hyapp.wallet.v1.WalletService.GetTeamHostSalaryStats:output_type -> hyapp.wallet.v1.GetTeamHostSalaryStatsResponse - 22, // 304: hyapp.wallet.v1.WalletService.AdminCreditAsset:output_type -> hyapp.wallet.v1.AdminCreditAssetResponse - 24, // 305: hyapp.wallet.v1.WalletService.AdminCreditCoinSellerStock:output_type -> hyapp.wallet.v1.AdminCreditCoinSellerStockResponse - 26, // 306: hyapp.wallet.v1.WalletService.TransferCoinFromSeller:output_type -> hyapp.wallet.v1.TransferCoinFromSellerResponse - 28, // 307: hyapp.wallet.v1.WalletService.TransferCoinSellerStockToChild:output_type -> hyapp.wallet.v1.TransferCoinSellerStockToChildResponse - 31, // 308: hyapp.wallet.v1.WalletService.ListCoinSellerSalaryExchangeRateTiers:output_type -> hyapp.wallet.v1.ListCoinSellerSalaryExchangeRateTiersResponse - 33, // 309: hyapp.wallet.v1.WalletService.ExchangeSalaryToCoin:output_type -> hyapp.wallet.v1.ExchangeSalaryToCoinResponse - 35, // 310: hyapp.wallet.v1.WalletService.TransferSalaryToCoinSeller:output_type -> hyapp.wallet.v1.TransferSalaryToCoinSellerResponse - 292, // 311: hyapp.wallet.v1.WalletService.ListPointWithdrawalCoinSellers:output_type -> hyapp.wallet.v1.ListPointWithdrawalCoinSellersResponse - 294, // 312: hyapp.wallet.v1.WalletService.TransferPointToCoinSeller:output_type -> hyapp.wallet.v1.TransferPointToCoinSellerResponse - 296, // 313: hyapp.wallet.v1.WalletService.GetPointWithdrawalConfig:output_type -> hyapp.wallet.v1.GetPointWithdrawalConfigResponse - 37, // 314: hyapp.wallet.v1.WalletService.FreezeSalaryWithdrawal:output_type -> hyapp.wallet.v1.FreezeSalaryWithdrawalResponse - 39, // 315: hyapp.wallet.v1.WalletService.SettleSalaryWithdrawal:output_type -> hyapp.wallet.v1.SettleSalaryWithdrawalResponse - 41, // 316: hyapp.wallet.v1.WalletService.ReleaseSalaryWithdrawal:output_type -> hyapp.wallet.v1.ReleaseSalaryWithdrawalResponse - 43, // 317: hyapp.wallet.v1.WalletService.FreezePointWithdrawal:output_type -> hyapp.wallet.v1.FreezePointWithdrawalResponse - 45, // 318: hyapp.wallet.v1.WalletService.SettlePointWithdrawal:output_type -> hyapp.wallet.v1.SettlePointWithdrawalResponse - 47, // 319: hyapp.wallet.v1.WalletService.ReleasePointWithdrawal:output_type -> hyapp.wallet.v1.ReleasePointWithdrawalResponse - 62, // 320: hyapp.wallet.v1.WalletService.ListResources:output_type -> hyapp.wallet.v1.ListResourcesResponse - 64, // 321: hyapp.wallet.v1.WalletService.GetResource:output_type -> hyapp.wallet.v1.GetResourceResponse - 71, // 322: hyapp.wallet.v1.WalletService.CreateResource:output_type -> hyapp.wallet.v1.ResourceResponse - 71, // 323: hyapp.wallet.v1.WalletService.UpdateResource:output_type -> hyapp.wallet.v1.ResourceResponse - 71, // 324: hyapp.wallet.v1.WalletService.SetResourceStatus:output_type -> hyapp.wallet.v1.ResourceResponse - 71, // 325: hyapp.wallet.v1.WalletService.DeleteResource:output_type -> hyapp.wallet.v1.ResourceResponse - 70, // 326: hyapp.wallet.v1.WalletService.BatchDeleteResources:output_type -> hyapp.wallet.v1.BatchDeleteResourcesResponse - 73, // 327: hyapp.wallet.v1.WalletService.ListResourceGroups:output_type -> hyapp.wallet.v1.ListResourceGroupsResponse - 75, // 328: hyapp.wallet.v1.WalletService.GetResourceGroup:output_type -> hyapp.wallet.v1.GetResourceGroupResponse - 79, // 329: hyapp.wallet.v1.WalletService.CreateResourceGroup:output_type -> hyapp.wallet.v1.ResourceGroupResponse - 79, // 330: hyapp.wallet.v1.WalletService.UpdateResourceGroup:output_type -> hyapp.wallet.v1.ResourceGroupResponse - 79, // 331: hyapp.wallet.v1.WalletService.SetResourceGroupStatus:output_type -> hyapp.wallet.v1.ResourceGroupResponse - 53, // 332: hyapp.wallet.v1.WalletService.PinResourceGroupSnapshot:output_type -> hyapp.wallet.v1.PinResourceGroupSnapshotResponse - 81, // 333: hyapp.wallet.v1.WalletService.ListGiftConfigs:output_type -> hyapp.wallet.v1.ListGiftConfigsResponse - 83, // 334: hyapp.wallet.v1.WalletService.ListGiftTypeConfigs:output_type -> hyapp.wallet.v1.ListGiftTypeConfigsResponse - 280, // 335: hyapp.wallet.v1.WalletService.GetGiftCatalogVersion:output_type -> hyapp.wallet.v1.GetGiftCatalogVersionResponse - 92, // 336: hyapp.wallet.v1.WalletService.CreateGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse - 88, // 337: hyapp.wallet.v1.WalletService.BatchCreateGiftConfigs:output_type -> hyapp.wallet.v1.BatchCreateGiftConfigsResponse - 92, // 338: hyapp.wallet.v1.WalletService.UpdateGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse - 92, // 339: hyapp.wallet.v1.WalletService.SetGiftConfigStatus:output_type -> hyapp.wallet.v1.GiftConfigResponse - 92, // 340: hyapp.wallet.v1.WalletService.DeleteGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse - 85, // 341: hyapp.wallet.v1.WalletService.UpsertGiftTypeConfig:output_type -> hyapp.wallet.v1.GiftTypeConfigResponse - 97, // 342: hyapp.wallet.v1.WalletService.GrantResource:output_type -> hyapp.wallet.v1.ResourceGrantResponse - 97, // 343: hyapp.wallet.v1.WalletService.GrantResourceGroup:output_type -> hyapp.wallet.v1.ResourceGrantResponse - 97, // 344: hyapp.wallet.v1.WalletService.GrantPinnedResourceGroup:output_type -> hyapp.wallet.v1.ResourceGrantResponse - 97, // 345: hyapp.wallet.v1.WalletService.RevokeResourceGrant:output_type -> hyapp.wallet.v1.ResourceGrantResponse - 301, // 346: hyapp.wallet.v1.WalletService.RevokeUserResource:output_type -> hyapp.wallet.v1.RevokeUserResourceResponse - 99, // 347: hyapp.wallet.v1.WalletService.ListUserResources:output_type -> hyapp.wallet.v1.ListUserResourcesResponse - 101, // 348: hyapp.wallet.v1.WalletService.EquipUserResource:output_type -> hyapp.wallet.v1.EquipUserResourceResponse - 103, // 349: hyapp.wallet.v1.WalletService.UnequipUserResource:output_type -> hyapp.wallet.v1.UnequipUserResourceResponse - 106, // 350: hyapp.wallet.v1.WalletService.BatchGetUserEquippedResources:output_type -> hyapp.wallet.v1.BatchGetUserEquippedResourcesResponse - 108, // 351: hyapp.wallet.v1.WalletService.ListResourceGrants:output_type -> hyapp.wallet.v1.ListResourceGrantsResponse - 111, // 352: hyapp.wallet.v1.WalletService.ListResourceShopItems:output_type -> hyapp.wallet.v1.ListResourceShopItemsResponse - 113, // 353: hyapp.wallet.v1.WalletService.UpsertResourceShopItems:output_type -> hyapp.wallet.v1.UpsertResourceShopItemsResponse - 115, // 354: hyapp.wallet.v1.WalletService.SetResourceShopItemStatus:output_type -> hyapp.wallet.v1.ResourceShopItemResponse - 278, // 355: hyapp.wallet.v1.WalletService.ListResourceShopPurchaseOrders:output_type -> hyapp.wallet.v1.ListResourceShopPurchaseOrdersResponse - 117, // 356: hyapp.wallet.v1.WalletService.PurchaseResourceShopItem:output_type -> hyapp.wallet.v1.PurchaseResourceShopItemResponse - 120, // 357: hyapp.wallet.v1.WalletService.ListRechargeBills:output_type -> hyapp.wallet.v1.ListRechargeBillsResponse - 123, // 358: hyapp.wallet.v1.WalletService.GetRechargeBillSummary:output_type -> hyapp.wallet.v1.GetRechargeBillSummaryResponse - 126, // 359: hyapp.wallet.v1.WalletService.BatchGetUserRechargeStats:output_type -> hyapp.wallet.v1.BatchGetUserRechargeStatsResponse - 132, // 360: hyapp.wallet.v1.WalletService.GetRechargeBillOverview:output_type -> hyapp.wallet.v1.GetRechargeBillOverviewResponse - 135, // 361: hyapp.wallet.v1.WalletService.RefreshGooglePaymentPrices:output_type -> hyapp.wallet.v1.RefreshGooglePaymentPricesResponse - 138, // 362: hyapp.wallet.v1.WalletService.GetWalletOverview:output_type -> hyapp.wallet.v1.GetWalletOverviewResponse - 141, // 363: hyapp.wallet.v1.WalletService.GetWalletValueSummary:output_type -> hyapp.wallet.v1.GetWalletValueSummaryResponse - 144, // 364: hyapp.wallet.v1.WalletService.GetUserGiftWall:output_type -> hyapp.wallet.v1.GetUserGiftWallResponse - 147, // 365: hyapp.wallet.v1.WalletService.ListRechargeProducts:output_type -> hyapp.wallet.v1.ListRechargeProductsResponse - 149, // 366: hyapp.wallet.v1.WalletService.ConfirmGooglePayment:output_type -> hyapp.wallet.v1.ConfirmGooglePaymentResponse - 151, // 367: hyapp.wallet.v1.WalletService.ListAdminRechargeProducts:output_type -> hyapp.wallet.v1.ListAdminRechargeProductsResponse - 155, // 368: hyapp.wallet.v1.WalletService.CreateRechargeProduct:output_type -> hyapp.wallet.v1.RechargeProductResponse - 155, // 369: hyapp.wallet.v1.WalletService.UpdateRechargeProduct:output_type -> hyapp.wallet.v1.RechargeProductResponse - 156, // 370: hyapp.wallet.v1.WalletService.DeleteRechargeProduct:output_type -> hyapp.wallet.v1.DeleteRechargeProductResponse - 160, // 371: hyapp.wallet.v1.WalletService.ListThirdPartyPaymentChannels:output_type -> hyapp.wallet.v1.ListThirdPartyPaymentChannelsResponse - 162, // 372: hyapp.wallet.v1.WalletService.SetThirdPartyPaymentMethodStatus:output_type -> hyapp.wallet.v1.ThirdPartyPaymentMethodResponse - 162, // 373: hyapp.wallet.v1.WalletService.UpdateThirdPartyPaymentRate:output_type -> hyapp.wallet.v1.ThirdPartyPaymentMethodResponse - 166, // 374: hyapp.wallet.v1.WalletService.SyncThirdPartyPaymentMethods:output_type -> hyapp.wallet.v1.SyncThirdPartyPaymentMethodsResponse - 168, // 375: hyapp.wallet.v1.WalletService.ListH5RechargeOptions:output_type -> hyapp.wallet.v1.H5RechargeOptionsResponse - 177, // 376: hyapp.wallet.v1.WalletService.CreateH5RechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse - 177, // 377: hyapp.wallet.v1.WalletService.CreateTemporaryRechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse - 177, // 378: hyapp.wallet.v1.WalletService.GetTemporaryRechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse - 174, // 379: hyapp.wallet.v1.WalletService.ListTemporaryRechargeOrders:output_type -> hyapp.wallet.v1.ListTemporaryRechargeOrdersResponse - 177, // 380: hyapp.wallet.v1.WalletService.SubmitH5RechargeTx:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse - 177, // 381: hyapp.wallet.v1.WalletService.GetH5RechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse - 179, // 382: hyapp.wallet.v1.WalletService.VerifyCoinSellerRechargeReceipt:output_type -> hyapp.wallet.v1.VerifyCoinSellerRechargeReceiptResponse - 181, // 383: hyapp.wallet.v1.WalletService.HandleMifapayNotify:output_type -> hyapp.wallet.v1.HandleMifapayNotifyResponse - 183, // 384: hyapp.wallet.v1.WalletService.HandleV5PayNotify:output_type -> hyapp.wallet.v1.HandleV5PayNotifyResponse - 186, // 385: hyapp.wallet.v1.WalletService.GetDiamondExchangeConfig:output_type -> hyapp.wallet.v1.GetDiamondExchangeConfigResponse - 188, // 386: hyapp.wallet.v1.WalletService.ExchangePointToCoin:output_type -> hyapp.wallet.v1.ExchangePointToCoinResponse - 191, // 387: hyapp.wallet.v1.WalletService.ListWalletTransactions:output_type -> hyapp.wallet.v1.ListWalletTransactionsResponse - 201, // 388: hyapp.wallet.v1.WalletService.ListVipPackages:output_type -> hyapp.wallet.v1.ListVipPackagesResponse - 213, // 389: hyapp.wallet.v1.WalletService.GetVipProgramConfig:output_type -> hyapp.wallet.v1.GetVipProgramConfigResponse - 203, // 390: hyapp.wallet.v1.WalletService.GetMyVip:output_type -> hyapp.wallet.v1.GetMyVipResponse - 235, // 391: hyapp.wallet.v1.WalletService.CheckVipBenefit:output_type -> hyapp.wallet.v1.CheckVipBenefitResponse - 205, // 392: hyapp.wallet.v1.WalletService.PurchaseVip:output_type -> hyapp.wallet.v1.PurchaseVipResponse - 207, // 393: hyapp.wallet.v1.WalletService.DebitCPBreakupFee:output_type -> hyapp.wallet.v1.DebitCPBreakupFeeResponse - 209, // 394: hyapp.wallet.v1.WalletService.DebitWheelDraw:output_type -> hyapp.wallet.v1.DebitWheelDrawResponse - 211, // 395: hyapp.wallet.v1.WalletService.GrantVip:output_type -> hyapp.wallet.v1.GrantVipResponse - 229, // 396: hyapp.wallet.v1.WalletService.GrantVipTrialCard:output_type -> hyapp.wallet.v1.GrantVipTrialCardResponse - 231, // 397: hyapp.wallet.v1.WalletService.EquipVipTrialCard:output_type -> hyapp.wallet.v1.EquipVipTrialCardResponse - 233, // 398: hyapp.wallet.v1.WalletService.UnequipVipTrialCard:output_type -> hyapp.wallet.v1.UnequipVipTrialCardResponse - 238, // 399: hyapp.wallet.v1.WalletService.ListAdminVipLevels:output_type -> hyapp.wallet.v1.ListAdminVipLevelsResponse - 240, // 400: hyapp.wallet.v1.WalletService.UpdateAdminVipLevels:output_type -> hyapp.wallet.v1.UpdateAdminVipLevelsResponse - 215, // 401: hyapp.wallet.v1.WalletService.UpdateAdminVipProgramConfig:output_type -> hyapp.wallet.v1.UpdateAdminVipProgramConfigResponse - 217, // 402: hyapp.wallet.v1.WalletService.UpdateMyVipSettings:output_type -> hyapp.wallet.v1.UpdateMyVipSettingsResponse - 223, // 403: hyapp.wallet.v1.WalletService.GetMyCurrentVipDailyCoinRebate:output_type -> hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateResponse - 225, // 404: hyapp.wallet.v1.WalletService.ListMyVipDailyCoinRebateStatuses:output_type -> hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesResponse - 227, // 405: hyapp.wallet.v1.WalletService.ClaimVipDailyCoinRebate:output_type -> hyapp.wallet.v1.ClaimVipDailyCoinRebateResponse - 242, // 406: hyapp.wallet.v1.WalletService.CreditTaskReward:output_type -> hyapp.wallet.v1.CreditTaskRewardResponse - 244, // 407: hyapp.wallet.v1.WalletService.CreditLuckyGiftReward:output_type -> hyapp.wallet.v1.CreditLuckyGiftRewardResponse - 246, // 408: hyapp.wallet.v1.WalletService.CreditWheelReward:output_type -> hyapp.wallet.v1.CreditWheelRewardResponse - 248, // 409: hyapp.wallet.v1.WalletService.CreditRoomTurnoverReward:output_type -> hyapp.wallet.v1.CreditRoomTurnoverRewardResponse - 250, // 410: hyapp.wallet.v1.WalletService.CreditInviteActivityReward:output_type -> hyapp.wallet.v1.CreditInviteActivityRewardResponse - 252, // 411: hyapp.wallet.v1.WalletService.CreditAgencyOpeningReward:output_type -> hyapp.wallet.v1.CreditAgencyOpeningRewardResponse - 254, // 412: hyapp.wallet.v1.WalletService.ApplyGameCoinChange:output_type -> hyapp.wallet.v1.ApplyGameCoinChangeResponse - 259, // 413: hyapp.wallet.v1.WalletService.GetRedPacketConfig:output_type -> hyapp.wallet.v1.GetRedPacketConfigResponse - 261, // 414: hyapp.wallet.v1.WalletService.UpdateRedPacketConfig:output_type -> hyapp.wallet.v1.UpdateRedPacketConfigResponse - 263, // 415: hyapp.wallet.v1.WalletService.CreateRedPacket:output_type -> hyapp.wallet.v1.CreateRedPacketResponse - 265, // 416: hyapp.wallet.v1.WalletService.ClaimRedPacket:output_type -> hyapp.wallet.v1.ClaimRedPacketResponse - 267, // 417: hyapp.wallet.v1.WalletService.ListRedPackets:output_type -> hyapp.wallet.v1.ListRedPacketsResponse - 269, // 418: hyapp.wallet.v1.WalletService.GetRedPacket:output_type -> hyapp.wallet.v1.GetRedPacketResponse - 271, // 419: hyapp.wallet.v1.WalletService.ExpireRedPackets:output_type -> hyapp.wallet.v1.ExpireRedPacketsResponse - 273, // 420: hyapp.wallet.v1.WalletService.RetryRedPacketRefund:output_type -> hyapp.wallet.v1.RetryRedPacketRefundResponse - 289, // [289:421] is the sub-list for method output_type - 157, // [157:289] is the sub-list for method input_type + 190, // 256: hyapp.wallet.v1.WalletService.ListHostPeriodDiamondTransactions:input_type -> hyapp.wallet.v1.ListWalletTransactionsRequest + 200, // 257: hyapp.wallet.v1.WalletService.ListVipPackages:input_type -> hyapp.wallet.v1.ListVipPackagesRequest + 212, // 258: hyapp.wallet.v1.WalletService.GetVipProgramConfig:input_type -> hyapp.wallet.v1.GetVipProgramConfigRequest + 202, // 259: hyapp.wallet.v1.WalletService.GetMyVip:input_type -> hyapp.wallet.v1.GetMyVipRequest + 234, // 260: hyapp.wallet.v1.WalletService.CheckVipBenefit:input_type -> hyapp.wallet.v1.CheckVipBenefitRequest + 204, // 261: hyapp.wallet.v1.WalletService.PurchaseVip:input_type -> hyapp.wallet.v1.PurchaseVipRequest + 206, // 262: hyapp.wallet.v1.WalletService.DebitCPBreakupFee:input_type -> hyapp.wallet.v1.DebitCPBreakupFeeRequest + 208, // 263: hyapp.wallet.v1.WalletService.DebitWheelDraw:input_type -> hyapp.wallet.v1.DebitWheelDrawRequest + 210, // 264: hyapp.wallet.v1.WalletService.GrantVip:input_type -> hyapp.wallet.v1.GrantVipRequest + 228, // 265: hyapp.wallet.v1.WalletService.GrantVipTrialCard:input_type -> hyapp.wallet.v1.GrantVipTrialCardRequest + 230, // 266: hyapp.wallet.v1.WalletService.EquipVipTrialCard:input_type -> hyapp.wallet.v1.EquipVipTrialCardRequest + 232, // 267: hyapp.wallet.v1.WalletService.UnequipVipTrialCard:input_type -> hyapp.wallet.v1.UnequipVipTrialCardRequest + 237, // 268: hyapp.wallet.v1.WalletService.ListAdminVipLevels:input_type -> hyapp.wallet.v1.ListAdminVipLevelsRequest + 239, // 269: hyapp.wallet.v1.WalletService.UpdateAdminVipLevels:input_type -> hyapp.wallet.v1.UpdateAdminVipLevelsRequest + 214, // 270: hyapp.wallet.v1.WalletService.UpdateAdminVipProgramConfig:input_type -> hyapp.wallet.v1.UpdateAdminVipProgramConfigRequest + 216, // 271: hyapp.wallet.v1.WalletService.UpdateMyVipSettings:input_type -> hyapp.wallet.v1.UpdateMyVipSettingsRequest + 222, // 272: hyapp.wallet.v1.WalletService.GetMyCurrentVipDailyCoinRebate:input_type -> hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateRequest + 224, // 273: hyapp.wallet.v1.WalletService.ListMyVipDailyCoinRebateStatuses:input_type -> hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesRequest + 226, // 274: hyapp.wallet.v1.WalletService.ClaimVipDailyCoinRebate:input_type -> hyapp.wallet.v1.ClaimVipDailyCoinRebateRequest + 241, // 275: hyapp.wallet.v1.WalletService.CreditTaskReward:input_type -> hyapp.wallet.v1.CreditTaskRewardRequest + 243, // 276: hyapp.wallet.v1.WalletService.CreditLuckyGiftReward:input_type -> hyapp.wallet.v1.CreditLuckyGiftRewardRequest + 245, // 277: hyapp.wallet.v1.WalletService.CreditWheelReward:input_type -> hyapp.wallet.v1.CreditWheelRewardRequest + 247, // 278: hyapp.wallet.v1.WalletService.CreditRoomTurnoverReward:input_type -> hyapp.wallet.v1.CreditRoomTurnoverRewardRequest + 249, // 279: hyapp.wallet.v1.WalletService.CreditInviteActivityReward:input_type -> hyapp.wallet.v1.CreditInviteActivityRewardRequest + 251, // 280: hyapp.wallet.v1.WalletService.CreditAgencyOpeningReward:input_type -> hyapp.wallet.v1.CreditAgencyOpeningRewardRequest + 253, // 281: hyapp.wallet.v1.WalletService.ApplyGameCoinChange:input_type -> hyapp.wallet.v1.ApplyGameCoinChangeRequest + 258, // 282: hyapp.wallet.v1.WalletService.GetRedPacketConfig:input_type -> hyapp.wallet.v1.GetRedPacketConfigRequest + 260, // 283: hyapp.wallet.v1.WalletService.UpdateRedPacketConfig:input_type -> hyapp.wallet.v1.UpdateRedPacketConfigRequest + 262, // 284: hyapp.wallet.v1.WalletService.CreateRedPacket:input_type -> hyapp.wallet.v1.CreateRedPacketRequest + 264, // 285: hyapp.wallet.v1.WalletService.ClaimRedPacket:input_type -> hyapp.wallet.v1.ClaimRedPacketRequest + 266, // 286: hyapp.wallet.v1.WalletService.ListRedPackets:input_type -> hyapp.wallet.v1.ListRedPacketsRequest + 268, // 287: hyapp.wallet.v1.WalletService.GetRedPacket:input_type -> hyapp.wallet.v1.GetRedPacketRequest + 270, // 288: hyapp.wallet.v1.WalletService.ExpireRedPackets:input_type -> hyapp.wallet.v1.ExpireRedPacketsRequest + 272, // 289: hyapp.wallet.v1.WalletService.RetryRedPacketRefund:input_type -> hyapp.wallet.v1.RetryRedPacketRefundRequest + 275, // 290: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryDailySettlementBatch:output_type -> hyapp.wallet.v1.CronBatchResponse + 275, // 291: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryHalfMonthSettlementBatch:output_type -> hyapp.wallet.v1.CronBatchResponse + 275, // 292: hyapp.wallet.v1.WalletCronService.ProcessHostSalaryMonthEndBatch:output_type -> hyapp.wallet.v1.CronBatchResponse + 221, // 293: hyapp.wallet.v1.WalletCronService.ProcessVipDailyCoinRebateBatch:output_type -> hyapp.wallet.v1.ProcessVipDailyCoinRebateBatchResponse + 2, // 294: hyapp.wallet.v1.WalletService.DebitGift:output_type -> hyapp.wallet.v1.DebitGiftResponse + 2, // 295: hyapp.wallet.v1.WalletService.DebitDirectGift:output_type -> hyapp.wallet.v1.DebitGiftResponse + 6, // 296: hyapp.wallet.v1.WalletService.BatchDebitGift:output_type -> hyapp.wallet.v1.BatchDebitGiftResponse + 2, // 297: hyapp.wallet.v1.WalletService.DebitRobotGift:output_type -> hyapp.wallet.v1.DebitGiftResponse + 10, // 298: hyapp.wallet.v1.WalletService.GetBalances:output_type -> hyapp.wallet.v1.GetBalancesResponse + 14, // 299: hyapp.wallet.v1.WalletService.GetActiveHostSalaryPolicy:output_type -> hyapp.wallet.v1.GetActiveHostSalaryPolicyResponse + 17, // 300: hyapp.wallet.v1.WalletService.GetHostSalaryProgress:output_type -> hyapp.wallet.v1.GetHostSalaryProgressResponse + 283, // 301: hyapp.wallet.v1.WalletService.GetHostRevenueStats:output_type -> hyapp.wallet.v1.GetHostRevenueStatsResponse + 286, // 302: hyapp.wallet.v1.WalletService.GetAgencyPointShareStats:output_type -> hyapp.wallet.v1.GetAgencyPointShareStatsResponse + 289, // 303: hyapp.wallet.v1.WalletService.GetAgencyHostGiftStats:output_type -> hyapp.wallet.v1.GetAgencyHostGiftStatsResponse + 20, // 304: hyapp.wallet.v1.WalletService.GetTeamHostSalaryStats:output_type -> hyapp.wallet.v1.GetTeamHostSalaryStatsResponse + 22, // 305: hyapp.wallet.v1.WalletService.AdminCreditAsset:output_type -> hyapp.wallet.v1.AdminCreditAssetResponse + 24, // 306: hyapp.wallet.v1.WalletService.AdminCreditCoinSellerStock:output_type -> hyapp.wallet.v1.AdminCreditCoinSellerStockResponse + 26, // 307: hyapp.wallet.v1.WalletService.TransferCoinFromSeller:output_type -> hyapp.wallet.v1.TransferCoinFromSellerResponse + 28, // 308: hyapp.wallet.v1.WalletService.TransferCoinSellerStockToChild:output_type -> hyapp.wallet.v1.TransferCoinSellerStockToChildResponse + 31, // 309: hyapp.wallet.v1.WalletService.ListCoinSellerSalaryExchangeRateTiers:output_type -> hyapp.wallet.v1.ListCoinSellerSalaryExchangeRateTiersResponse + 33, // 310: hyapp.wallet.v1.WalletService.ExchangeSalaryToCoin:output_type -> hyapp.wallet.v1.ExchangeSalaryToCoinResponse + 35, // 311: hyapp.wallet.v1.WalletService.TransferSalaryToCoinSeller:output_type -> hyapp.wallet.v1.TransferSalaryToCoinSellerResponse + 292, // 312: hyapp.wallet.v1.WalletService.ListPointWithdrawalCoinSellers:output_type -> hyapp.wallet.v1.ListPointWithdrawalCoinSellersResponse + 294, // 313: hyapp.wallet.v1.WalletService.TransferPointToCoinSeller:output_type -> hyapp.wallet.v1.TransferPointToCoinSellerResponse + 296, // 314: hyapp.wallet.v1.WalletService.GetPointWithdrawalConfig:output_type -> hyapp.wallet.v1.GetPointWithdrawalConfigResponse + 37, // 315: hyapp.wallet.v1.WalletService.FreezeSalaryWithdrawal:output_type -> hyapp.wallet.v1.FreezeSalaryWithdrawalResponse + 39, // 316: hyapp.wallet.v1.WalletService.SettleSalaryWithdrawal:output_type -> hyapp.wallet.v1.SettleSalaryWithdrawalResponse + 41, // 317: hyapp.wallet.v1.WalletService.ReleaseSalaryWithdrawal:output_type -> hyapp.wallet.v1.ReleaseSalaryWithdrawalResponse + 43, // 318: hyapp.wallet.v1.WalletService.FreezePointWithdrawal:output_type -> hyapp.wallet.v1.FreezePointWithdrawalResponse + 45, // 319: hyapp.wallet.v1.WalletService.SettlePointWithdrawal:output_type -> hyapp.wallet.v1.SettlePointWithdrawalResponse + 47, // 320: hyapp.wallet.v1.WalletService.ReleasePointWithdrawal:output_type -> hyapp.wallet.v1.ReleasePointWithdrawalResponse + 62, // 321: hyapp.wallet.v1.WalletService.ListResources:output_type -> hyapp.wallet.v1.ListResourcesResponse + 64, // 322: hyapp.wallet.v1.WalletService.GetResource:output_type -> hyapp.wallet.v1.GetResourceResponse + 71, // 323: hyapp.wallet.v1.WalletService.CreateResource:output_type -> hyapp.wallet.v1.ResourceResponse + 71, // 324: hyapp.wallet.v1.WalletService.UpdateResource:output_type -> hyapp.wallet.v1.ResourceResponse + 71, // 325: hyapp.wallet.v1.WalletService.SetResourceStatus:output_type -> hyapp.wallet.v1.ResourceResponse + 71, // 326: hyapp.wallet.v1.WalletService.DeleteResource:output_type -> hyapp.wallet.v1.ResourceResponse + 70, // 327: hyapp.wallet.v1.WalletService.BatchDeleteResources:output_type -> hyapp.wallet.v1.BatchDeleteResourcesResponse + 73, // 328: hyapp.wallet.v1.WalletService.ListResourceGroups:output_type -> hyapp.wallet.v1.ListResourceGroupsResponse + 75, // 329: hyapp.wallet.v1.WalletService.GetResourceGroup:output_type -> hyapp.wallet.v1.GetResourceGroupResponse + 79, // 330: hyapp.wallet.v1.WalletService.CreateResourceGroup:output_type -> hyapp.wallet.v1.ResourceGroupResponse + 79, // 331: hyapp.wallet.v1.WalletService.UpdateResourceGroup:output_type -> hyapp.wallet.v1.ResourceGroupResponse + 79, // 332: hyapp.wallet.v1.WalletService.SetResourceGroupStatus:output_type -> hyapp.wallet.v1.ResourceGroupResponse + 53, // 333: hyapp.wallet.v1.WalletService.PinResourceGroupSnapshot:output_type -> hyapp.wallet.v1.PinResourceGroupSnapshotResponse + 81, // 334: hyapp.wallet.v1.WalletService.ListGiftConfigs:output_type -> hyapp.wallet.v1.ListGiftConfigsResponse + 83, // 335: hyapp.wallet.v1.WalletService.ListGiftTypeConfigs:output_type -> hyapp.wallet.v1.ListGiftTypeConfigsResponse + 280, // 336: hyapp.wallet.v1.WalletService.GetGiftCatalogVersion:output_type -> hyapp.wallet.v1.GetGiftCatalogVersionResponse + 92, // 337: hyapp.wallet.v1.WalletService.CreateGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse + 88, // 338: hyapp.wallet.v1.WalletService.BatchCreateGiftConfigs:output_type -> hyapp.wallet.v1.BatchCreateGiftConfigsResponse + 92, // 339: hyapp.wallet.v1.WalletService.UpdateGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse + 92, // 340: hyapp.wallet.v1.WalletService.SetGiftConfigStatus:output_type -> hyapp.wallet.v1.GiftConfigResponse + 92, // 341: hyapp.wallet.v1.WalletService.DeleteGiftConfig:output_type -> hyapp.wallet.v1.GiftConfigResponse + 85, // 342: hyapp.wallet.v1.WalletService.UpsertGiftTypeConfig:output_type -> hyapp.wallet.v1.GiftTypeConfigResponse + 97, // 343: hyapp.wallet.v1.WalletService.GrantResource:output_type -> hyapp.wallet.v1.ResourceGrantResponse + 97, // 344: hyapp.wallet.v1.WalletService.GrantResourceGroup:output_type -> hyapp.wallet.v1.ResourceGrantResponse + 97, // 345: hyapp.wallet.v1.WalletService.GrantPinnedResourceGroup:output_type -> hyapp.wallet.v1.ResourceGrantResponse + 97, // 346: hyapp.wallet.v1.WalletService.RevokeResourceGrant:output_type -> hyapp.wallet.v1.ResourceGrantResponse + 301, // 347: hyapp.wallet.v1.WalletService.RevokeUserResource:output_type -> hyapp.wallet.v1.RevokeUserResourceResponse + 99, // 348: hyapp.wallet.v1.WalletService.ListUserResources:output_type -> hyapp.wallet.v1.ListUserResourcesResponse + 101, // 349: hyapp.wallet.v1.WalletService.EquipUserResource:output_type -> hyapp.wallet.v1.EquipUserResourceResponse + 103, // 350: hyapp.wallet.v1.WalletService.UnequipUserResource:output_type -> hyapp.wallet.v1.UnequipUserResourceResponse + 106, // 351: hyapp.wallet.v1.WalletService.BatchGetUserEquippedResources:output_type -> hyapp.wallet.v1.BatchGetUserEquippedResourcesResponse + 108, // 352: hyapp.wallet.v1.WalletService.ListResourceGrants:output_type -> hyapp.wallet.v1.ListResourceGrantsResponse + 111, // 353: hyapp.wallet.v1.WalletService.ListResourceShopItems:output_type -> hyapp.wallet.v1.ListResourceShopItemsResponse + 113, // 354: hyapp.wallet.v1.WalletService.UpsertResourceShopItems:output_type -> hyapp.wallet.v1.UpsertResourceShopItemsResponse + 115, // 355: hyapp.wallet.v1.WalletService.SetResourceShopItemStatus:output_type -> hyapp.wallet.v1.ResourceShopItemResponse + 278, // 356: hyapp.wallet.v1.WalletService.ListResourceShopPurchaseOrders:output_type -> hyapp.wallet.v1.ListResourceShopPurchaseOrdersResponse + 117, // 357: hyapp.wallet.v1.WalletService.PurchaseResourceShopItem:output_type -> hyapp.wallet.v1.PurchaseResourceShopItemResponse + 120, // 358: hyapp.wallet.v1.WalletService.ListRechargeBills:output_type -> hyapp.wallet.v1.ListRechargeBillsResponse + 123, // 359: hyapp.wallet.v1.WalletService.GetRechargeBillSummary:output_type -> hyapp.wallet.v1.GetRechargeBillSummaryResponse + 126, // 360: hyapp.wallet.v1.WalletService.BatchGetUserRechargeStats:output_type -> hyapp.wallet.v1.BatchGetUserRechargeStatsResponse + 132, // 361: hyapp.wallet.v1.WalletService.GetRechargeBillOverview:output_type -> hyapp.wallet.v1.GetRechargeBillOverviewResponse + 135, // 362: hyapp.wallet.v1.WalletService.RefreshGooglePaymentPrices:output_type -> hyapp.wallet.v1.RefreshGooglePaymentPricesResponse + 138, // 363: hyapp.wallet.v1.WalletService.GetWalletOverview:output_type -> hyapp.wallet.v1.GetWalletOverviewResponse + 141, // 364: hyapp.wallet.v1.WalletService.GetWalletValueSummary:output_type -> hyapp.wallet.v1.GetWalletValueSummaryResponse + 144, // 365: hyapp.wallet.v1.WalletService.GetUserGiftWall:output_type -> hyapp.wallet.v1.GetUserGiftWallResponse + 147, // 366: hyapp.wallet.v1.WalletService.ListRechargeProducts:output_type -> hyapp.wallet.v1.ListRechargeProductsResponse + 149, // 367: hyapp.wallet.v1.WalletService.ConfirmGooglePayment:output_type -> hyapp.wallet.v1.ConfirmGooglePaymentResponse + 151, // 368: hyapp.wallet.v1.WalletService.ListAdminRechargeProducts:output_type -> hyapp.wallet.v1.ListAdminRechargeProductsResponse + 155, // 369: hyapp.wallet.v1.WalletService.CreateRechargeProduct:output_type -> hyapp.wallet.v1.RechargeProductResponse + 155, // 370: hyapp.wallet.v1.WalletService.UpdateRechargeProduct:output_type -> hyapp.wallet.v1.RechargeProductResponse + 156, // 371: hyapp.wallet.v1.WalletService.DeleteRechargeProduct:output_type -> hyapp.wallet.v1.DeleteRechargeProductResponse + 160, // 372: hyapp.wallet.v1.WalletService.ListThirdPartyPaymentChannels:output_type -> hyapp.wallet.v1.ListThirdPartyPaymentChannelsResponse + 162, // 373: hyapp.wallet.v1.WalletService.SetThirdPartyPaymentMethodStatus:output_type -> hyapp.wallet.v1.ThirdPartyPaymentMethodResponse + 162, // 374: hyapp.wallet.v1.WalletService.UpdateThirdPartyPaymentRate:output_type -> hyapp.wallet.v1.ThirdPartyPaymentMethodResponse + 166, // 375: hyapp.wallet.v1.WalletService.SyncThirdPartyPaymentMethods:output_type -> hyapp.wallet.v1.SyncThirdPartyPaymentMethodsResponse + 168, // 376: hyapp.wallet.v1.WalletService.ListH5RechargeOptions:output_type -> hyapp.wallet.v1.H5RechargeOptionsResponse + 177, // 377: hyapp.wallet.v1.WalletService.CreateH5RechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse + 177, // 378: hyapp.wallet.v1.WalletService.CreateTemporaryRechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse + 177, // 379: hyapp.wallet.v1.WalletService.GetTemporaryRechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse + 174, // 380: hyapp.wallet.v1.WalletService.ListTemporaryRechargeOrders:output_type -> hyapp.wallet.v1.ListTemporaryRechargeOrdersResponse + 177, // 381: hyapp.wallet.v1.WalletService.SubmitH5RechargeTx:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse + 177, // 382: hyapp.wallet.v1.WalletService.GetH5RechargeOrder:output_type -> hyapp.wallet.v1.H5RechargeOrderResponse + 179, // 383: hyapp.wallet.v1.WalletService.VerifyCoinSellerRechargeReceipt:output_type -> hyapp.wallet.v1.VerifyCoinSellerRechargeReceiptResponse + 181, // 384: hyapp.wallet.v1.WalletService.HandleMifapayNotify:output_type -> hyapp.wallet.v1.HandleMifapayNotifyResponse + 183, // 385: hyapp.wallet.v1.WalletService.HandleV5PayNotify:output_type -> hyapp.wallet.v1.HandleV5PayNotifyResponse + 186, // 386: hyapp.wallet.v1.WalletService.GetDiamondExchangeConfig:output_type -> hyapp.wallet.v1.GetDiamondExchangeConfigResponse + 188, // 387: hyapp.wallet.v1.WalletService.ExchangePointToCoin:output_type -> hyapp.wallet.v1.ExchangePointToCoinResponse + 191, // 388: hyapp.wallet.v1.WalletService.ListWalletTransactions:output_type -> hyapp.wallet.v1.ListWalletTransactionsResponse + 191, // 389: hyapp.wallet.v1.WalletService.ListHostPeriodDiamondTransactions:output_type -> hyapp.wallet.v1.ListWalletTransactionsResponse + 201, // 390: hyapp.wallet.v1.WalletService.ListVipPackages:output_type -> hyapp.wallet.v1.ListVipPackagesResponse + 213, // 391: hyapp.wallet.v1.WalletService.GetVipProgramConfig:output_type -> hyapp.wallet.v1.GetVipProgramConfigResponse + 203, // 392: hyapp.wallet.v1.WalletService.GetMyVip:output_type -> hyapp.wallet.v1.GetMyVipResponse + 235, // 393: hyapp.wallet.v1.WalletService.CheckVipBenefit:output_type -> hyapp.wallet.v1.CheckVipBenefitResponse + 205, // 394: hyapp.wallet.v1.WalletService.PurchaseVip:output_type -> hyapp.wallet.v1.PurchaseVipResponse + 207, // 395: hyapp.wallet.v1.WalletService.DebitCPBreakupFee:output_type -> hyapp.wallet.v1.DebitCPBreakupFeeResponse + 209, // 396: hyapp.wallet.v1.WalletService.DebitWheelDraw:output_type -> hyapp.wallet.v1.DebitWheelDrawResponse + 211, // 397: hyapp.wallet.v1.WalletService.GrantVip:output_type -> hyapp.wallet.v1.GrantVipResponse + 229, // 398: hyapp.wallet.v1.WalletService.GrantVipTrialCard:output_type -> hyapp.wallet.v1.GrantVipTrialCardResponse + 231, // 399: hyapp.wallet.v1.WalletService.EquipVipTrialCard:output_type -> hyapp.wallet.v1.EquipVipTrialCardResponse + 233, // 400: hyapp.wallet.v1.WalletService.UnequipVipTrialCard:output_type -> hyapp.wallet.v1.UnequipVipTrialCardResponse + 238, // 401: hyapp.wallet.v1.WalletService.ListAdminVipLevels:output_type -> hyapp.wallet.v1.ListAdminVipLevelsResponse + 240, // 402: hyapp.wallet.v1.WalletService.UpdateAdminVipLevels:output_type -> hyapp.wallet.v1.UpdateAdminVipLevelsResponse + 215, // 403: hyapp.wallet.v1.WalletService.UpdateAdminVipProgramConfig:output_type -> hyapp.wallet.v1.UpdateAdminVipProgramConfigResponse + 217, // 404: hyapp.wallet.v1.WalletService.UpdateMyVipSettings:output_type -> hyapp.wallet.v1.UpdateMyVipSettingsResponse + 223, // 405: hyapp.wallet.v1.WalletService.GetMyCurrentVipDailyCoinRebate:output_type -> hyapp.wallet.v1.GetMyCurrentVipDailyCoinRebateResponse + 225, // 406: hyapp.wallet.v1.WalletService.ListMyVipDailyCoinRebateStatuses:output_type -> hyapp.wallet.v1.ListMyVipDailyCoinRebateStatusesResponse + 227, // 407: hyapp.wallet.v1.WalletService.ClaimVipDailyCoinRebate:output_type -> hyapp.wallet.v1.ClaimVipDailyCoinRebateResponse + 242, // 408: hyapp.wallet.v1.WalletService.CreditTaskReward:output_type -> hyapp.wallet.v1.CreditTaskRewardResponse + 244, // 409: hyapp.wallet.v1.WalletService.CreditLuckyGiftReward:output_type -> hyapp.wallet.v1.CreditLuckyGiftRewardResponse + 246, // 410: hyapp.wallet.v1.WalletService.CreditWheelReward:output_type -> hyapp.wallet.v1.CreditWheelRewardResponse + 248, // 411: hyapp.wallet.v1.WalletService.CreditRoomTurnoverReward:output_type -> hyapp.wallet.v1.CreditRoomTurnoverRewardResponse + 250, // 412: hyapp.wallet.v1.WalletService.CreditInviteActivityReward:output_type -> hyapp.wallet.v1.CreditInviteActivityRewardResponse + 252, // 413: hyapp.wallet.v1.WalletService.CreditAgencyOpeningReward:output_type -> hyapp.wallet.v1.CreditAgencyOpeningRewardResponse + 254, // 414: hyapp.wallet.v1.WalletService.ApplyGameCoinChange:output_type -> hyapp.wallet.v1.ApplyGameCoinChangeResponse + 259, // 415: hyapp.wallet.v1.WalletService.GetRedPacketConfig:output_type -> hyapp.wallet.v1.GetRedPacketConfigResponse + 261, // 416: hyapp.wallet.v1.WalletService.UpdateRedPacketConfig:output_type -> hyapp.wallet.v1.UpdateRedPacketConfigResponse + 263, // 417: hyapp.wallet.v1.WalletService.CreateRedPacket:output_type -> hyapp.wallet.v1.CreateRedPacketResponse + 265, // 418: hyapp.wallet.v1.WalletService.ClaimRedPacket:output_type -> hyapp.wallet.v1.ClaimRedPacketResponse + 267, // 419: hyapp.wallet.v1.WalletService.ListRedPackets:output_type -> hyapp.wallet.v1.ListRedPacketsResponse + 269, // 420: hyapp.wallet.v1.WalletService.GetRedPacket:output_type -> hyapp.wallet.v1.GetRedPacketResponse + 271, // 421: hyapp.wallet.v1.WalletService.ExpireRedPackets:output_type -> hyapp.wallet.v1.ExpireRedPacketsResponse + 273, // 422: hyapp.wallet.v1.WalletService.RetryRedPacketRefund:output_type -> hyapp.wallet.v1.RetryRedPacketRefundResponse + 290, // [290:423] is the sub-list for method output_type + 157, // [157:290] is the sub-list for method input_type 157, // [157:157] is the sub-list for extension type_name 157, // [157:157] is the sub-list for extension extendee 0, // [0:157] is the sub-list for field type_name diff --git a/api/proto/wallet/v1/wallet.proto b/api/proto/wallet/v1/wallet.proto index 77f574e4..05ecbb11 100644 --- a/api/proto/wallet/v1/wallet.proto +++ b/api/proto/wallet/v1/wallet.proto @@ -1993,6 +1993,9 @@ message ListWalletTransactionsRequest { string asset_type = 4; int32 page = 5; int32 page_size = 6; + // 时间范围统一使用 UTC epoch milliseconds 半开区间 [start_at_ms, end_at_ms)。 + int64 start_at_ms = 7; + int64 end_at_ms = 8; } message ListWalletTransactionsResponse { @@ -3156,6 +3159,8 @@ service WalletService { rpc GetDiamondExchangeConfig(GetDiamondExchangeConfigRequest) returns (GetDiamondExchangeConfigResponse); rpc ExchangePointToCoin(ExchangePointToCoinRequest) returns (ExchangePointToCoinResponse); rpc ListWalletTransactions(ListWalletTransactionsRequest) returns (ListWalletTransactionsResponse); + // 主播周期钻石是礼物收入投影,不属于通用可消费钱包资产,因此单独暴露查询语义。 + rpc ListHostPeriodDiamondTransactions(ListWalletTransactionsRequest) returns (ListWalletTransactionsResponse); rpc ListVipPackages(ListVipPackagesRequest) returns (ListVipPackagesResponse); rpc GetVipProgramConfig(GetVipProgramConfigRequest) returns (GetVipProgramConfigResponse); rpc GetMyVip(GetMyVipRequest) returns (GetMyVipResponse); diff --git a/api/proto/wallet/v1/wallet_grpc.pb.go b/api/proto/wallet/v1/wallet_grpc.pb.go index 14cb90b8..6cdf19c9 100644 --- a/api/proto/wallet/v1/wallet_grpc.pb.go +++ b/api/proto/wallet/v1/wallet_grpc.pb.go @@ -334,6 +334,7 @@ const ( WalletService_GetDiamondExchangeConfig_FullMethodName = "/hyapp.wallet.v1.WalletService/GetDiamondExchangeConfig" WalletService_ExchangePointToCoin_FullMethodName = "/hyapp.wallet.v1.WalletService/ExchangePointToCoin" WalletService_ListWalletTransactions_FullMethodName = "/hyapp.wallet.v1.WalletService/ListWalletTransactions" + WalletService_ListHostPeriodDiamondTransactions_FullMethodName = "/hyapp.wallet.v1.WalletService/ListHostPeriodDiamondTransactions" WalletService_ListVipPackages_FullMethodName = "/hyapp.wallet.v1.WalletService/ListVipPackages" WalletService_GetVipProgramConfig_FullMethodName = "/hyapp.wallet.v1.WalletService/GetVipProgramConfig" WalletService_GetMyVip_FullMethodName = "/hyapp.wallet.v1.WalletService/GetMyVip" @@ -471,6 +472,8 @@ type WalletServiceClient interface { GetDiamondExchangeConfig(ctx context.Context, in *GetDiamondExchangeConfigRequest, opts ...grpc.CallOption) (*GetDiamondExchangeConfigResponse, error) ExchangePointToCoin(ctx context.Context, in *ExchangePointToCoinRequest, opts ...grpc.CallOption) (*ExchangePointToCoinResponse, error) ListWalletTransactions(ctx context.Context, in *ListWalletTransactionsRequest, opts ...grpc.CallOption) (*ListWalletTransactionsResponse, error) + // 主播周期钻石是礼物收入投影,不属于通用可消费钱包资产,因此单独暴露查询语义。 + ListHostPeriodDiamondTransactions(ctx context.Context, in *ListWalletTransactionsRequest, opts ...grpc.CallOption) (*ListWalletTransactionsResponse, error) ListVipPackages(ctx context.Context, in *ListVipPackagesRequest, opts ...grpc.CallOption) (*ListVipPackagesResponse, error) GetVipProgramConfig(ctx context.Context, in *GetVipProgramConfigRequest, opts ...grpc.CallOption) (*GetVipProgramConfigResponse, error) GetMyVip(ctx context.Context, in *GetMyVipRequest, opts ...grpc.CallOption) (*GetMyVipResponse, error) @@ -1464,6 +1467,16 @@ func (c *walletServiceClient) ListWalletTransactions(ctx context.Context, in *Li return out, nil } +func (c *walletServiceClient) ListHostPeriodDiamondTransactions(ctx context.Context, in *ListWalletTransactionsRequest, opts ...grpc.CallOption) (*ListWalletTransactionsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ListWalletTransactionsResponse) + err := c.cc.Invoke(ctx, WalletService_ListHostPeriodDiamondTransactions_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *walletServiceClient) ListVipPackages(ctx context.Context, in *ListVipPackagesRequest, opts ...grpc.CallOption) (*ListVipPackagesResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ListVipPackagesResponse) @@ -1896,6 +1909,8 @@ type WalletServiceServer interface { GetDiamondExchangeConfig(context.Context, *GetDiamondExchangeConfigRequest) (*GetDiamondExchangeConfigResponse, error) ExchangePointToCoin(context.Context, *ExchangePointToCoinRequest) (*ExchangePointToCoinResponse, error) ListWalletTransactions(context.Context, *ListWalletTransactionsRequest) (*ListWalletTransactionsResponse, error) + // 主播周期钻石是礼物收入投影,不属于通用可消费钱包资产,因此单独暴露查询语义。 + ListHostPeriodDiamondTransactions(context.Context, *ListWalletTransactionsRequest) (*ListWalletTransactionsResponse, error) ListVipPackages(context.Context, *ListVipPackagesRequest) (*ListVipPackagesResponse, error) GetVipProgramConfig(context.Context, *GetVipProgramConfigRequest) (*GetVipProgramConfigResponse, error) GetMyVip(context.Context, *GetMyVipRequest) (*GetMyVipResponse, error) @@ -2224,6 +2239,9 @@ func (UnimplementedWalletServiceServer) ExchangePointToCoin(context.Context, *Ex func (UnimplementedWalletServiceServer) ListWalletTransactions(context.Context, *ListWalletTransactionsRequest) (*ListWalletTransactionsResponse, error) { return nil, status.Error(codes.Unimplemented, "method ListWalletTransactions not implemented") } +func (UnimplementedWalletServiceServer) ListHostPeriodDiamondTransactions(context.Context, *ListWalletTransactionsRequest) (*ListWalletTransactionsResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ListHostPeriodDiamondTransactions not implemented") +} func (UnimplementedWalletServiceServer) ListVipPackages(context.Context, *ListVipPackagesRequest) (*ListVipPackagesResponse, error) { return nil, status.Error(codes.Unimplemented, "method ListVipPackages not implemented") } @@ -4054,6 +4072,24 @@ func _WalletService_ListWalletTransactions_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } +func _WalletService_ListHostPeriodDiamondTransactions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListWalletTransactionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WalletServiceServer).ListHostPeriodDiamondTransactions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WalletService_ListHostPeriodDiamondTransactions_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WalletServiceServer).ListHostPeriodDiamondTransactions(ctx, req.(*ListWalletTransactionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _WalletService_ListVipPackages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListVipPackagesRequest) if err := dec(in); err != nil { @@ -5035,6 +5071,10 @@ var WalletService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListWalletTransactions", Handler: _WalletService_ListWalletTransactions_Handler, }, + { + MethodName: "ListHostPeriodDiamondTransactions", + Handler: _WalletService_ListHostPeriodDiamondTransactions_Handler, + }, { MethodName: "ListVipPackages", Handler: _WalletService_ListVipPackages_Handler, diff --git a/services/gateway-service/internal/client/wallet_client.go b/services/gateway-service/internal/client/wallet_client.go index 3041f8fa..d12a5a32 100644 --- a/services/gateway-service/internal/client/wallet_client.go +++ b/services/gateway-service/internal/client/wallet_client.go @@ -33,6 +33,7 @@ type WalletClient interface { GetDiamondExchangeConfig(ctx context.Context, req *walletv1.GetDiamondExchangeConfigRequest) (*walletv1.GetDiamondExchangeConfigResponse, error) ExchangePointToCoin(ctx context.Context, req *walletv1.ExchangePointToCoinRequest) (*walletv1.ExchangePointToCoinResponse, error) ListWalletTransactions(ctx context.Context, req *walletv1.ListWalletTransactionsRequest) (*walletv1.ListWalletTransactionsResponse, error) + ListHostPeriodDiamondTransactions(ctx context.Context, req *walletv1.ListWalletTransactionsRequest) (*walletv1.ListWalletTransactionsResponse, error) ListVipPackages(ctx context.Context, req *walletv1.ListVipPackagesRequest) (*walletv1.ListVipPackagesResponse, error) GetMyVip(ctx context.Context, req *walletv1.GetMyVipRequest) (*walletv1.GetMyVipResponse, error) GetVipProgramConfig(ctx context.Context, req *walletv1.GetVipProgramConfigRequest) (*walletv1.GetVipProgramConfigResponse, error) @@ -188,6 +189,10 @@ func (c *grpcWalletClient) ListWalletTransactions(ctx context.Context, req *wall return c.client.ListWalletTransactions(ctx, req) } +func (c *grpcWalletClient) ListHostPeriodDiamondTransactions(ctx context.Context, req *walletv1.ListWalletTransactionsRequest) (*walletv1.ListWalletTransactionsResponse, error) { + return c.client.ListHostPeriodDiamondTransactions(ctx, req) +} + func (c *grpcWalletClient) ListVipPackages(ctx context.Context, req *walletv1.ListVipPackagesRequest) (*walletv1.ListVipPackagesResponse, error) { return c.client.ListVipPackages(ctx, req) } diff --git a/services/gateway-service/internal/transport/http/httproutes/router.go b/services/gateway-service/internal/transport/http/httproutes/router.go index d59b9196..8abb2e17 100644 --- a/services/gateway-service/internal/transport/http/httproutes/router.go +++ b/services/gateway-service/internal/transport/http/httproutes/router.go @@ -286,6 +286,7 @@ type WalletHandlers struct { GetDiamondExchangeConfig http.HandlerFunc ListCoinTransactions http.HandlerFunc ListWalletTransactions http.HandlerFunc + ListDiamondTransactions http.HandlerFunc ListCoinSellers http.HandlerFunc TransferCoinFromSeller http.HandlerFunc GetCoinSellerSubSellerPermission http.HandlerFunc @@ -699,6 +700,7 @@ func (r routes) registerWalletRoutes() { r.profile("/wallet/diamond-exchange/config", http.MethodGet, h.GetDiamondExchangeConfig) r.profile("/wallet/coin-transactions", http.MethodGet, h.ListCoinTransactions) r.profile("/wallet/transactions", http.MethodGet, h.ListWalletTransactions) + r.profile("/wallet/diamond-transactions", http.MethodGet, h.ListDiamondTransactions) r.profile("/wallet/coin-sellers", http.MethodGet, h.ListCoinSellers) r.profile("/wallet/coin-seller/transfer", "", h.TransferCoinFromSeller) r.profile("/wallet/coin-seller/sub-sellers/permission", http.MethodGet, h.GetCoinSellerSubSellerPermission) diff --git a/services/gateway-service/internal/transport/http/response_test.go b/services/gateway-service/internal/transport/http/response_test.go index d832b458..a4939188 100644 --- a/services/gateway-service/internal/transport/http/response_test.go +++ b/services/gateway-service/internal/transport/http/response_test.go @@ -600,146 +600,148 @@ type fakeUserHostAdminClient struct { } type fakeWalletClient struct { - last *walletv1.GetBalancesRequest - balanceRequests []*walletv1.GetBalancesRequest - resp *walletv1.GetBalancesResponse - balancesByUserID map[int64]*walletv1.GetBalancesResponse - err error - lastDirectGift *walletv1.DebitDirectGiftRequest - directGiftResp *walletv1.DebitGiftResponse - directGiftErr error - lastHostSalaryPolicy *walletv1.GetActiveHostSalaryPolicyRequest - hostSalaryPolicyResp *walletv1.GetActiveHostSalaryPolicyResponse - hostSalaryPolicyErr error - lastHostSalaryProgress *walletv1.GetHostSalaryProgressRequest - hostSalaryProgressResp *walletv1.GetHostSalaryProgressResponse - hostSalaryProgressErr error - lastTeamSalaryStats *walletv1.GetTeamHostSalaryStatsRequest - teamSalaryStatsResp *walletv1.GetTeamHostSalaryStatsResponse - teamSalaryStatsErr error - lastOverview *walletv1.GetWalletOverviewRequest - overviewResp *walletv1.GetWalletOverviewResponse - overviewErr error - lastValueSummary *walletv1.GetWalletValueSummaryRequest - valueSummaryResp *walletv1.GetWalletValueSummaryResponse - valueSummaryErr error - lastGiftWall *walletv1.GetUserGiftWallRequest - giftWallResp *walletv1.GetUserGiftWallResponse - lastRechargeProducts *walletv1.ListRechargeProductsRequest - rechargeProductsResp *walletv1.ListRechargeProductsResponse - lastThirdPartyChannels *walletv1.ListThirdPartyPaymentChannelsRequest - thirdPartyChannelsResp *walletv1.ListThirdPartyPaymentChannelsResponse - lastH5Options *walletv1.H5RechargeOptionsRequest - h5OptionsResp *walletv1.H5RechargeOptionsResponse - lastH5CreateOrder *walletv1.CreateH5RechargeOrderRequest - h5CreateOrderResp *walletv1.H5RechargeOrderResponse - lastTemporaryCreate *walletv1.CreateTemporaryRechargeOrderRequest - temporaryCreateResp *walletv1.H5RechargeOrderResponse - lastTemporaryGet *walletv1.GetTemporaryRechargeOrderRequest - temporaryGetResp *walletv1.H5RechargeOrderResponse - lastTemporaryList *walletv1.ListTemporaryRechargeOrdersRequest - temporaryListResp *walletv1.ListTemporaryRechargeOrdersResponse - lastH5SubmitTx *walletv1.SubmitH5RechargeTxRequest - h5SubmitTxResp *walletv1.H5RechargeOrderResponse - lastH5GetOrder *walletv1.GetH5RechargeOrderRequest - h5GetOrderResp *walletv1.H5RechargeOrderResponse - lastMifaPayNotify *walletv1.HandleMifapayNotifyRequest - mifaPayNotifyResp *walletv1.HandleMifapayNotifyResponse - lastV5PayNotify *walletv1.HandleV5PayNotifyRequest - v5PayNotifyResp *walletv1.HandleV5PayNotifyResponse - lastGoogleConfirm *walletv1.ConfirmGooglePaymentRequest - googleConfirmResp *walletv1.ConfirmGooglePaymentResponse - lastDiamondExchange *walletv1.GetDiamondExchangeConfigRequest - diamondExchangeResp *walletv1.GetDiamondExchangeConfigResponse - lastPointExchange *walletv1.ExchangePointToCoinRequest - pointExchangeResp *walletv1.ExchangePointToCoinResponse - lastTransactions *walletv1.ListWalletTransactionsRequest - transactionsResp *walletv1.ListWalletTransactionsResponse - lastVipPackages *walletv1.ListVipPackagesRequest - vipPackagesResp *walletv1.ListVipPackagesResponse - lastMyVip *walletv1.GetMyVipRequest - myVipResp *walletv1.GetMyVipResponse - lastUpdateVIPSettings *walletv1.UpdateMyVipSettingsRequest - updateVIPSettingsResp *walletv1.UpdateMyVipSettingsResponse - vipErr error - lastVipProgram *walletv1.GetVipProgramConfigRequest - vipProgramResp *walletv1.GetVipProgramConfigResponse - lastBenefitCheck *walletv1.CheckVipBenefitRequest - benefitCheckResp *walletv1.CheckVipBenefitResponse - lastPurchaseVip *walletv1.PurchaseVipRequest - purchaseVipResp *walletv1.PurchaseVipResponse - lastGrantVip *walletv1.GrantVipRequest - grantVipResp *walletv1.GrantVipResponse - lastTrialGrant *walletv1.GrantVipTrialCardRequest - trialGrantResp *walletv1.GrantVipTrialCardResponse - lastTrialEquip *walletv1.EquipVipTrialCardRequest - trialEquipResp *walletv1.EquipVipTrialCardResponse - lastTrialUnequip *walletv1.UnequipVipTrialCardRequest - trialUnequipResp *walletv1.UnequipVipTrialCardResponse - lastCurrentVIPRebate *walletv1.GetMyCurrentVipDailyCoinRebateRequest - currentVIPRebateResp *walletv1.GetMyCurrentVipDailyCoinRebateResponse - lastVIPRebateStatuses *walletv1.ListMyVipDailyCoinRebateStatusesRequest - vipRebateStatusesResp *walletv1.ListMyVipDailyCoinRebateStatusesResponse - lastClaimVIPRebate *walletv1.ClaimVipDailyCoinRebateRequest - claimVIPRebateResp *walletv1.ClaimVipDailyCoinRebateResponse - lastTransfer *walletv1.TransferCoinFromSellerRequest - transferResp *walletv1.TransferCoinFromSellerResponse - transferErr error - lastSubTransfer *walletv1.TransferCoinSellerStockToChildRequest - subTransferResp *walletv1.TransferCoinSellerStockToChildResponse - subTransferErr error - lastListExchangeTiers *walletv1.ListCoinSellerSalaryExchangeRateTiersRequest - listExchangeTiersResp *walletv1.ListCoinSellerSalaryExchangeRateTiersResponse - lastExchangeSalary *walletv1.ExchangeSalaryToCoinRequest - exchangeSalaryResp *walletv1.ExchangeSalaryToCoinResponse - exchangeSalaryErr error - lastTransferSalary *walletv1.TransferSalaryToCoinSellerRequest - transferSalaryResp *walletv1.TransferSalaryToCoinSellerResponse - transferSalaryErr error - lastFreezeSalary *walletv1.FreezeSalaryWithdrawalRequest - freezeSalaryResp *walletv1.FreezeSalaryWithdrawalResponse - freezeSalaryErr error - lastReleaseSalary *walletv1.ReleaseSalaryWithdrawalRequest - releaseSalaryResp *walletv1.ReleaseSalaryWithdrawalResponse - releaseSalaryErr error - lastListResources *walletv1.ListResourcesRequest - listResourcesResp *walletv1.ListResourcesResponse - lastGetResource *walletv1.GetResourceRequest - resourcesByID map[int64]*walletv1.Resource - lastGetResourceGroup *walletv1.GetResourceGroupRequest - resourceGroupsByID map[int64]*walletv1.ResourceGroup - lastResourceShop *walletv1.ListResourceShopItemsRequest - resourceShopResp *walletv1.ListResourceShopItemsResponse - lastPurchaseShop *walletv1.PurchaseResourceShopItemRequest - purchaseShopResp *walletv1.PurchaseResourceShopItemResponse - lastGetGiftCatalog *walletv1.GetGiftCatalogVersionRequest - getGiftCatalogCalls int - giftCatalogVersion int64 - giftCatalogVersionResp *walletv1.GetGiftCatalogVersionResponse - giftCatalogVersionErr error - lastListGiftConfigs *walletv1.ListGiftConfigsRequest - listGiftConfigsCalls int - listGiftConfigsResp *walletv1.ListGiftConfigsResponse - lastListGiftTypes *walletv1.ListGiftTypeConfigsRequest - listGiftTypesCalls int - listGiftTypesResp *walletv1.ListGiftTypeConfigsResponse - lastListUserResources *walletv1.ListUserResourcesRequest - listUserResourcesCalls int - listUserResourcesResp *walletv1.ListUserResourcesResponse - lastGrantResource *walletv1.GrantResourceRequest - grantResourceRequests []*walletv1.GrantResourceRequest - grantResourceResp *walletv1.ResourceGrantResponse - grantResourceErr error - lastBatchEquipped *walletv1.BatchGetUserEquippedResourcesRequest - batchEquippedRequests []*walletv1.BatchGetUserEquippedResourcesRequest - batchEquippedResp *walletv1.BatchGetUserEquippedResourcesResponse - batchEquippedBudget time.Duration - lastListRedPackets *walletv1.ListRedPacketsRequest - listRedPacketsResp *walletv1.ListRedPacketsResponse - lastGetRedPacket *walletv1.GetRedPacketRequest - getRedPacketResp *walletv1.GetRedPacketResponse - lastClaimRedPacket *walletv1.ClaimRedPacketRequest - claimRedPacketResp *walletv1.ClaimRedPacketResponse + last *walletv1.GetBalancesRequest + balanceRequests []*walletv1.GetBalancesRequest + resp *walletv1.GetBalancesResponse + balancesByUserID map[int64]*walletv1.GetBalancesResponse + err error + lastDirectGift *walletv1.DebitDirectGiftRequest + directGiftResp *walletv1.DebitGiftResponse + directGiftErr error + lastHostSalaryPolicy *walletv1.GetActiveHostSalaryPolicyRequest + hostSalaryPolicyResp *walletv1.GetActiveHostSalaryPolicyResponse + hostSalaryPolicyErr error + lastHostSalaryProgress *walletv1.GetHostSalaryProgressRequest + hostSalaryProgressResp *walletv1.GetHostSalaryProgressResponse + hostSalaryProgressErr error + lastTeamSalaryStats *walletv1.GetTeamHostSalaryStatsRequest + teamSalaryStatsResp *walletv1.GetTeamHostSalaryStatsResponse + teamSalaryStatsErr error + lastOverview *walletv1.GetWalletOverviewRequest + overviewResp *walletv1.GetWalletOverviewResponse + overviewErr error + lastValueSummary *walletv1.GetWalletValueSummaryRequest + valueSummaryResp *walletv1.GetWalletValueSummaryResponse + valueSummaryErr error + lastGiftWall *walletv1.GetUserGiftWallRequest + giftWallResp *walletv1.GetUserGiftWallResponse + lastRechargeProducts *walletv1.ListRechargeProductsRequest + rechargeProductsResp *walletv1.ListRechargeProductsResponse + lastThirdPartyChannels *walletv1.ListThirdPartyPaymentChannelsRequest + thirdPartyChannelsResp *walletv1.ListThirdPartyPaymentChannelsResponse + lastH5Options *walletv1.H5RechargeOptionsRequest + h5OptionsResp *walletv1.H5RechargeOptionsResponse + lastH5CreateOrder *walletv1.CreateH5RechargeOrderRequest + h5CreateOrderResp *walletv1.H5RechargeOrderResponse + lastTemporaryCreate *walletv1.CreateTemporaryRechargeOrderRequest + temporaryCreateResp *walletv1.H5RechargeOrderResponse + lastTemporaryGet *walletv1.GetTemporaryRechargeOrderRequest + temporaryGetResp *walletv1.H5RechargeOrderResponse + lastTemporaryList *walletv1.ListTemporaryRechargeOrdersRequest + temporaryListResp *walletv1.ListTemporaryRechargeOrdersResponse + lastH5SubmitTx *walletv1.SubmitH5RechargeTxRequest + h5SubmitTxResp *walletv1.H5RechargeOrderResponse + lastH5GetOrder *walletv1.GetH5RechargeOrderRequest + h5GetOrderResp *walletv1.H5RechargeOrderResponse + lastMifaPayNotify *walletv1.HandleMifapayNotifyRequest + mifaPayNotifyResp *walletv1.HandleMifapayNotifyResponse + lastV5PayNotify *walletv1.HandleV5PayNotifyRequest + v5PayNotifyResp *walletv1.HandleV5PayNotifyResponse + lastGoogleConfirm *walletv1.ConfirmGooglePaymentRequest + googleConfirmResp *walletv1.ConfirmGooglePaymentResponse + lastDiamondExchange *walletv1.GetDiamondExchangeConfigRequest + diamondExchangeResp *walletv1.GetDiamondExchangeConfigResponse + lastPointExchange *walletv1.ExchangePointToCoinRequest + pointExchangeResp *walletv1.ExchangePointToCoinResponse + lastTransactions *walletv1.ListWalletTransactionsRequest + transactionsResp *walletv1.ListWalletTransactionsResponse + lastDiamondTransactions *walletv1.ListWalletTransactionsRequest + diamondTransactionsResp *walletv1.ListWalletTransactionsResponse + lastVipPackages *walletv1.ListVipPackagesRequest + vipPackagesResp *walletv1.ListVipPackagesResponse + lastMyVip *walletv1.GetMyVipRequest + myVipResp *walletv1.GetMyVipResponse + lastUpdateVIPSettings *walletv1.UpdateMyVipSettingsRequest + updateVIPSettingsResp *walletv1.UpdateMyVipSettingsResponse + vipErr error + lastVipProgram *walletv1.GetVipProgramConfigRequest + vipProgramResp *walletv1.GetVipProgramConfigResponse + lastBenefitCheck *walletv1.CheckVipBenefitRequest + benefitCheckResp *walletv1.CheckVipBenefitResponse + lastPurchaseVip *walletv1.PurchaseVipRequest + purchaseVipResp *walletv1.PurchaseVipResponse + lastGrantVip *walletv1.GrantVipRequest + grantVipResp *walletv1.GrantVipResponse + lastTrialGrant *walletv1.GrantVipTrialCardRequest + trialGrantResp *walletv1.GrantVipTrialCardResponse + lastTrialEquip *walletv1.EquipVipTrialCardRequest + trialEquipResp *walletv1.EquipVipTrialCardResponse + lastTrialUnequip *walletv1.UnequipVipTrialCardRequest + trialUnequipResp *walletv1.UnequipVipTrialCardResponse + lastCurrentVIPRebate *walletv1.GetMyCurrentVipDailyCoinRebateRequest + currentVIPRebateResp *walletv1.GetMyCurrentVipDailyCoinRebateResponse + lastVIPRebateStatuses *walletv1.ListMyVipDailyCoinRebateStatusesRequest + vipRebateStatusesResp *walletv1.ListMyVipDailyCoinRebateStatusesResponse + lastClaimVIPRebate *walletv1.ClaimVipDailyCoinRebateRequest + claimVIPRebateResp *walletv1.ClaimVipDailyCoinRebateResponse + lastTransfer *walletv1.TransferCoinFromSellerRequest + transferResp *walletv1.TransferCoinFromSellerResponse + transferErr error + lastSubTransfer *walletv1.TransferCoinSellerStockToChildRequest + subTransferResp *walletv1.TransferCoinSellerStockToChildResponse + subTransferErr error + lastListExchangeTiers *walletv1.ListCoinSellerSalaryExchangeRateTiersRequest + listExchangeTiersResp *walletv1.ListCoinSellerSalaryExchangeRateTiersResponse + lastExchangeSalary *walletv1.ExchangeSalaryToCoinRequest + exchangeSalaryResp *walletv1.ExchangeSalaryToCoinResponse + exchangeSalaryErr error + lastTransferSalary *walletv1.TransferSalaryToCoinSellerRequest + transferSalaryResp *walletv1.TransferSalaryToCoinSellerResponse + transferSalaryErr error + lastFreezeSalary *walletv1.FreezeSalaryWithdrawalRequest + freezeSalaryResp *walletv1.FreezeSalaryWithdrawalResponse + freezeSalaryErr error + lastReleaseSalary *walletv1.ReleaseSalaryWithdrawalRequest + releaseSalaryResp *walletv1.ReleaseSalaryWithdrawalResponse + releaseSalaryErr error + lastListResources *walletv1.ListResourcesRequest + listResourcesResp *walletv1.ListResourcesResponse + lastGetResource *walletv1.GetResourceRequest + resourcesByID map[int64]*walletv1.Resource + lastGetResourceGroup *walletv1.GetResourceGroupRequest + resourceGroupsByID map[int64]*walletv1.ResourceGroup + lastResourceShop *walletv1.ListResourceShopItemsRequest + resourceShopResp *walletv1.ListResourceShopItemsResponse + lastPurchaseShop *walletv1.PurchaseResourceShopItemRequest + purchaseShopResp *walletv1.PurchaseResourceShopItemResponse + lastGetGiftCatalog *walletv1.GetGiftCatalogVersionRequest + getGiftCatalogCalls int + giftCatalogVersion int64 + giftCatalogVersionResp *walletv1.GetGiftCatalogVersionResponse + giftCatalogVersionErr error + lastListGiftConfigs *walletv1.ListGiftConfigsRequest + listGiftConfigsCalls int + listGiftConfigsResp *walletv1.ListGiftConfigsResponse + lastListGiftTypes *walletv1.ListGiftTypeConfigsRequest + listGiftTypesCalls int + listGiftTypesResp *walletv1.ListGiftTypeConfigsResponse + lastListUserResources *walletv1.ListUserResourcesRequest + listUserResourcesCalls int + listUserResourcesResp *walletv1.ListUserResourcesResponse + lastGrantResource *walletv1.GrantResourceRequest + grantResourceRequests []*walletv1.GrantResourceRequest + grantResourceResp *walletv1.ResourceGrantResponse + grantResourceErr error + lastBatchEquipped *walletv1.BatchGetUserEquippedResourcesRequest + batchEquippedRequests []*walletv1.BatchGetUserEquippedResourcesRequest + batchEquippedResp *walletv1.BatchGetUserEquippedResourcesResponse + batchEquippedBudget time.Duration + lastListRedPackets *walletv1.ListRedPacketsRequest + listRedPacketsResp *walletv1.ListRedPacketsResponse + lastGetRedPacket *walletv1.GetRedPacketRequest + getRedPacketResp *walletv1.GetRedPacketResponse + lastClaimRedPacket *walletv1.ClaimRedPacketRequest + claimRedPacketResp *walletv1.ClaimRedPacketResponse } type fakeWithdrawalApplicationWriter struct { @@ -2418,6 +2420,17 @@ func (f *fakeWalletClient) ListWalletTransactions(_ context.Context, req *wallet return &walletv1.ListWalletTransactionsResponse{}, nil } +func (f *fakeWalletClient) ListHostPeriodDiamondTransactions(_ context.Context, req *walletv1.ListWalletTransactionsRequest) (*walletv1.ListWalletTransactionsResponse, error) { + f.lastDiamondTransactions = req + if f.err != nil { + return nil, f.err + } + if f.diamondTransactionsResp != nil { + return f.diamondTransactionsResp, nil + } + return &walletv1.ListWalletTransactionsResponse{}, nil +} + func (f *fakeWalletClient) ListVipPackages(_ context.Context, req *walletv1.ListVipPackagesRequest) (*walletv1.ListVipPackagesResponse, error) { f.lastVipPackages = req if f.vipErr != nil { @@ -10096,6 +10109,54 @@ func TestListCoinTransactionsForcesCoinAndDefaultsPageSize30(t *testing.T) { } } +func TestListDiamondTransactionsPassesAuthenticatedUserAndTimeRange(t *testing.T) { + walletClient := &fakeWalletClient{diamondTransactionsResp: &walletv1.ListWalletTransactionsResponse{ + Total: 1, + Transactions: []*walletv1.WalletTransaction{{ + EntryId: 17, + TransactionId: "wtx-diamond-1", + BizType: "host_period_diamond_income", + AssetType: "HOST_PERIOD_DIAMOND", + AvailableDelta: 8000, + AvailableAfter: 28000, + CounterpartyUserId: 99, + CreatedAtMs: 1_785_600_000_000, + }}, + }} + handler := NewHandlerWithClients(&fakeRoomClient{}, nil, nil, &fakeUserProfileClient{}) + handler.SetWalletClient(walletClient) + router := handler.Routes(auth.NewVerifier("secret")) + request := httptest.NewRequest(http.MethodGet, "/api/v1/wallet/diamond-transactions?page=2&page_size=30&start_at_ms=1785600000000&end_at_ms=1785686400000", nil) + request.Header.Set("Authorization", "Bearer "+signGatewayToken(t, "secret", 42)) + recorder := httptest.NewRecorder() + + router.ServeHTTP(recorder, request) + + if recorder.Code != http.StatusOK { + t.Fatalf("status mismatch: got %d body=%s", recorder.Code, recorder.Body.String()) + } + got := walletClient.lastDiamondTransactions + if got == nil || got.GetUserId() != 42 || got.GetPage() != 2 || got.GetPageSize() != 30 || got.GetStartAtMs() != 1_785_600_000_000 || got.GetEndAtMs() != 1_785_686_400_000 { + t.Fatalf("diamond transaction request mismatch: %+v", got) + } +} + +func TestListWalletTransactionsRejectsIncompleteTimeRange(t *testing.T) { + walletClient := &fakeWalletClient{} + handler := NewHandlerWithClients(&fakeRoomClient{}, nil, nil, &fakeUserProfileClient{}) + handler.SetWalletClient(walletClient) + router := handler.Routes(auth.NewVerifier("secret")) + request := httptest.NewRequest(http.MethodGet, "/api/v1/wallet/transactions?start_at_ms=1785600000000", nil) + request.Header.Set("Authorization", "Bearer "+signGatewayToken(t, "secret", 42)) + recorder := httptest.NewRecorder() + + router.ServeHTTP(recorder, request) + + if recorder.Code != http.StatusBadRequest || walletClient.lastTransactions != nil { + t.Fatalf("incomplete time range must be rejected before RPC: status=%d request=%+v", recorder.Code, walletClient.lastTransactions) + } +} + func TestListWalletTransactionsIncludesCounterpartyProfile(t *testing.T) { walletClient := &fakeWalletClient{transactionsResp: &walletv1.ListWalletTransactionsResponse{ Total: 1, diff --git a/services/gateway-service/internal/transport/http/walletapi/app_wallet_handler.go b/services/gateway-service/internal/transport/http/walletapi/app_wallet_handler.go index c0d10fad..a5b5a16e 100644 --- a/services/gateway-service/internal/transport/http/walletapi/app_wallet_handler.go +++ b/services/gateway-service/internal/transport/http/walletapi/app_wallet_handler.go @@ -4,6 +4,7 @@ import ( "encoding/json" "hyapp/services/gateway-service/internal/transport/http/httpkit" "net/http" + "strconv" "strings" userv1 "hyapp.local/api/proto/user/v1" @@ -508,17 +509,39 @@ func (h *Handler) listCoinTransactions(writer http.ResponseWriter, request *http h.listWalletTransactionsByAsset(writer, request, "COIN", 30) } +// listDiamondTransactions 查询主播周期钻石收入;钻石不是通用钱包资产,必须走 wallet-service 独立读模型。 +func (h *Handler) listDiamondTransactions(writer http.ResponseWriter, request *http.Request) { + if h.walletClient == nil { + httpkit.WriteError(writer, request, http.StatusBadGateway, httpkit.CodeUpstreamError, "upstream service error") + return + } + page, pageSize, startAtMS, endAtMS, ok := walletTransactionQuery(request, 30) + if !ok { + httpkit.WriteError(writer, request, http.StatusBadRequest, httpkit.CodeInvalidArgument, "invalid argument") + return + } + resp, err := h.walletClient.ListHostPeriodDiamondTransactions(request.Context(), &walletv1.ListWalletTransactionsRequest{ + RequestId: httpkit.RequestIDFromContext(request.Context()), + AppCode: appcode.FromContext(request.Context()), + UserId: auth.UserIDFromContext(request.Context()), + Page: page, + PageSize: pageSize, + StartAtMs: startAtMS, + EndAtMs: endAtMS, + }) + if err != nil { + httpkit.WriteRPCError(writer, request, err) + return + } + h.writeWalletTransactions(writer, request, resp, page, pageSize) +} + func (h *Handler) listWalletTransactionsByAsset(writer http.ResponseWriter, request *http.Request, assetType string, defaultPageSize int32) { if h.walletClient == nil { httpkit.WriteError(writer, request, http.StatusBadGateway, httpkit.CodeUpstreamError, "upstream service error") return } - page, ok := httpkit.PositiveInt32Query(request, "page", 1) - if !ok { - httpkit.WriteError(writer, request, http.StatusBadRequest, httpkit.CodeInvalidArgument, "invalid argument") - return - } - pageSize, ok := httpkit.PositiveInt32Query(request, "page_size", defaultPageSize) + page, pageSize, startAtMS, endAtMS, ok := walletTransactionQuery(request, defaultPageSize) if !ok { httpkit.WriteError(writer, request, http.StatusBadRequest, httpkit.CodeInvalidArgument, "invalid argument") return @@ -530,11 +553,42 @@ func (h *Handler) listWalletTransactionsByAsset(writer http.ResponseWriter, requ AssetType: assetType, Page: page, PageSize: pageSize, + StartAtMs: startAtMS, + EndAtMs: endAtMS, }) if err != nil { httpkit.WriteRPCError(writer, request, err) return } + h.writeWalletTransactions(writer, request, resp, page, pageSize) +} + +func walletTransactionQuery(request *http.Request, defaultPageSize int32) (int32, int32, int64, int64, bool) { + page, ok := httpkit.PositiveInt32Query(request, "page", 1) + if !ok { + return 0, 0, 0, 0, false + } + pageSize, ok := httpkit.PositiveInt32Query(request, "page_size", defaultPageSize) + if !ok { + return 0, 0, 0, 0, false + } + startRaw := strings.TrimSpace(request.URL.Query().Get("start_at_ms")) + endRaw := strings.TrimSpace(request.URL.Query().Get("end_at_ms")) + if startRaw == "" && endRaw == "" { + return page, pageSize, 0, 0, true + } + if startRaw == "" || endRaw == "" { + return 0, 0, 0, 0, false + } + startAtMS, startErr := strconv.ParseInt(startRaw, 10, 64) + endAtMS, endErr := strconv.ParseInt(endRaw, 10, 64) + if startErr != nil || endErr != nil || startAtMS <= 0 || endAtMS <= startAtMS { + return 0, 0, 0, 0, false + } + return page, pageSize, startAtMS, endAtMS, true +} + +func (h *Handler) writeWalletTransactions(writer http.ResponseWriter, request *http.Request, resp *walletv1.ListWalletTransactionsResponse, page int32, pageSize int32) { profiles, err := h.walletTransactionCounterpartyProfiles(request, resp.GetTransactions()) if err != nil { httpkit.WriteRPCError(writer, request, err) diff --git a/services/gateway-service/internal/transport/http/walletapi/handler.go b/services/gateway-service/internal/transport/http/walletapi/handler.go index 5f9b031d..b764aa99 100644 --- a/services/gateway-service/internal/transport/http/walletapi/handler.go +++ b/services/gateway-service/internal/transport/http/walletapi/handler.go @@ -98,6 +98,7 @@ func (h *Handler) WalletHandlers() httproutes.WalletHandlers { GetDiamondExchangeConfig: h.getDiamondExchangeConfig, ListCoinTransactions: h.listCoinTransactions, ListWalletTransactions: h.listWalletTransactions, + ListDiamondTransactions: h.listDiamondTransactions, ListCoinSellers: h.listCoinSellers, TransferCoinFromSeller: h.transferCoinFromSeller, GetCoinSellerSubSellerPermission: h.getCoinSellerSubSellerPermission, diff --git a/services/wallet-service/deploy/mysql/initdb/001_wallet_service.sql b/services/wallet-service/deploy/mysql/initdb/001_wallet_service.sql index 212da4cc..d528a41a 100644 --- a/services/wallet-service/deploy/mysql/initdb/001_wallet_service.sql +++ b/services/wallet-service/deploy/mysql/initdb/001_wallet_service.sql @@ -371,6 +371,7 @@ CREATE TABLE IF NOT EXISTS host_period_diamond_entries ( created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', UNIQUE KEY uk_host_period_diamond_tx (app_code, transaction_id, user_id, cycle_key), KEY idx_host_period_diamond_entries_user_cycle (app_code, user_id, cycle_key, created_at_ms), + KEY idx_host_period_diamond_entries_user_time (app_code, user_id, created_at_ms, entry_id), KEY idx_host_period_diamond_entries_region_cycle (app_code, region_id, cycle_key, created_at_ms) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='主播工资周期钻石流水表'; diff --git a/services/wallet-service/deploy/mysql/migrations/014_host_period_diamond_entries_user_time.sql b/services/wallet-service/deploy/mysql/migrations/014_host_period_diamond_entries_user_time.sql new file mode 100644 index 00000000..f9457d8a --- /dev/null +++ b/services/wallet-service/deploy/mysql/migrations/014_host_period_diamond_entries_user_time.sql @@ -0,0 +1,21 @@ +SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci; + +USE hyapp_wallet; + +-- 用户钻石历史按 app/user/date 倒序分页;原 user_cycle 索引会因 cycle_key 位于时间前导致跨周期查询额外排序。 +-- 在线新增窄复合索引,查询的 COUNT 和列表都可使用同一左前缀,并由 entry_id 稳定同毫秒顺序。 +SET @has_host_period_diamond_user_time = ( + SELECT COUNT(*) + FROM information_schema.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'host_period_diamond_entries' + AND INDEX_NAME = 'idx_host_period_diamond_entries_user_time' +); +SET @ddl = IF( + @has_host_period_diamond_user_time = 0, + 'ALTER TABLE host_period_diamond_entries ADD INDEX idx_host_period_diamond_entries_user_time (app_code, user_id, created_at_ms, entry_id), ALGORITHM=INPLACE, LOCK=NONE', + 'SELECT 1' +); +PREPARE stmt FROM @ddl; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; diff --git a/services/wallet-service/internal/domain/ledger/wallet_query.go b/services/wallet-service/internal/domain/ledger/wallet_query.go index e037011a..341a82f5 100644 --- a/services/wallet-service/internal/domain/ledger/wallet_query.go +++ b/services/wallet-service/internal/domain/ledger/wallet_query.go @@ -233,6 +233,8 @@ type ListWalletTransactionsQuery struct { AssetType string Page int32 PageSize int32 + StartAtMS int64 + EndAtMS int64 } // AssetBalance 是账户当前可用/冻结余额投影。 diff --git a/services/wallet-service/internal/service/wallet/balance.go b/services/wallet-service/internal/service/wallet/balance.go index dcd7468f..252a3c6d 100644 --- a/services/wallet-service/internal/service/wallet/balance.go +++ b/services/wallet-service/internal/service/wallet/balance.go @@ -82,8 +82,8 @@ func (s *Service) GetDiamondExchangeConfig(ctx context.Context, userID int64) ([ // ListWalletTransactions 返回当前用户钱包流水,避免我的页首屏扫描流水表。 func (s *Service) ListWalletTransactions(ctx context.Context, query ledger.ListWalletTransactionsQuery) ([]ledger.WalletTransaction, int64, error) { - if query.UserID <= 0 { - return nil, 0, xerr.New(xerr.InvalidArgument, "user_id is required") + if err := validateTransactionQuery(query); err != nil { + return nil, 0, err } query.AssetType = strings.ToUpper(strings.TrimSpace(query.AssetType)) if query.AssetType != "" && !ledger.ValidAssetType(query.AssetType) { @@ -96,3 +96,27 @@ func (s *Service) ListWalletTransactions(ctx context.Context, query ledger.ListW ctx = appcode.WithContext(ctx, query.AppCode) return s.repository.ListWalletTransactions(ctx, query) } + +// ListHostPeriodDiamondTransactions 返回主播收到礼物形成的周期钻石明细;它与可消费钱包分录分开,避免恢复已废弃的 DIAMOND 钱包资产。 +func (s *Service) ListHostPeriodDiamondTransactions(ctx context.Context, query ledger.ListWalletTransactionsQuery) ([]ledger.WalletTransaction, int64, error) { + if err := validateTransactionQuery(query); err != nil { + return nil, 0, err + } + if s.repository == nil { + return nil, 0, xerr.New(xerr.Unavailable, "wallet repository is not configured") + } + query.AppCode = appcode.Normalize(query.AppCode) + ctx = appcode.WithContext(ctx, query.AppCode) + return s.repository.ListHostPeriodDiamondTransactions(ctx, query) +} + +func validateTransactionQuery(query ledger.ListWalletTransactionsQuery) error { + if query.UserID <= 0 { + return xerr.New(xerr.InvalidArgument, "user_id is required") + } + // 只接受完整半开区间;单边范围会让调用方以为按日过滤成功,实际返回跨日流水。 + if query.StartAtMS < 0 || query.EndAtMS < 0 || (query.StartAtMS == 0) != (query.EndAtMS == 0) || (query.StartAtMS > 0 && query.EndAtMS <= query.StartAtMS) { + return xerr.New(xerr.InvalidArgument, "transaction time range is invalid") + } + return nil +} diff --git a/services/wallet-service/internal/service/wallet/ports/repository.go b/services/wallet-service/internal/service/wallet/ports/repository.go index 6785e610..ce34a24b 100644 --- a/services/wallet-service/internal/service/wallet/ports/repository.go +++ b/services/wallet-service/internal/service/wallet/ports/repository.go @@ -48,6 +48,7 @@ type BalanceStore interface { GetUserGiftWall(ctx context.Context, userID int64) (ledger.UserGiftWall, error) GetDiamondExchangeConfig(ctx context.Context, userID int64) ([]ledger.DiamondExchangeRule, error) ListWalletTransactions(ctx context.Context, query ledger.ListWalletTransactionsQuery) ([]ledger.WalletTransaction, int64, error) + ListHostPeriodDiamondTransactions(ctx context.Context, query ledger.ListWalletTransactionsQuery) ([]ledger.WalletTransaction, int64, error) } // HostSalaryStore 管理主播/公会工资政策、进度和批量结算。 diff --git a/services/wallet-service/internal/storage/mysql/wallet_query_repository.go b/services/wallet-service/internal/storage/mysql/wallet_query_repository.go index eba4333e..e73b7987 100644 --- a/services/wallet-service/internal/storage/mysql/wallet_query_repository.go +++ b/services/wallet-service/internal/storage/mysql/wallet_query_repository.go @@ -142,6 +142,10 @@ func (r *Repository) ListWalletTransactions(ctx context.Context, query ledger.Li where += ` AND e.asset_type = ?` args = append(args, query.AssetType) } + if query.StartAtMS > 0 { + where += ` AND e.created_at_ms >= ? AND e.created_at_ms < ?` + args = append(args, query.StartAtMS, query.EndAtMS) + } var total int64 if err := r.db.QueryRowContext(ctx, ` @@ -197,6 +201,61 @@ func (r *Repository) ListWalletTransactions(ctx context.Context, query ledger.Li return items, total, rows.Err() } +// ListHostPeriodDiamondTransactions 从主播周期收入明细分页读取钻石历史;按 app/user/time 的复合索引完成筛选和倒序,避免日期查询退化为全表扫描。 +func (r *Repository) ListHostPeriodDiamondTransactions(ctx context.Context, query ledger.ListWalletTransactionsQuery) ([]ledger.WalletTransaction, int64, error) { + if r == nil || r.db == nil { + return nil, 0, xerr.New(xerr.Unavailable, "mysql repository is not configured") + } + ctx = contextWithCommandApp(ctx, query.AppCode) + query.AppCode = appcode.FromContext(ctx) + query.Page, query.PageSize = normalizePage(query.Page, query.PageSize) + where := `WHERE app_code = ? AND user_id = ?` + args := []any{query.AppCode, query.UserID} + if query.StartAtMS > 0 { + where += ` AND created_at_ms >= ? AND created_at_ms < ?` + args = append(args, query.StartAtMS, query.EndAtMS) + } + + var total int64 + if err := r.db.QueryRowContext(ctx, `SELECT COUNT(*) FROM host_period_diamond_entries `+where, args...).Scan(&total); err != nil { + return nil, 0, err + } + + rows, err := r.db.QueryContext(ctx, ` + SELECT entry_id, transaction_id, diamond_delta, diamond_after, + sender_user_id, room_id, created_at_ms + FROM host_period_diamond_entries + `+where+` + ORDER BY created_at_ms DESC, entry_id DESC + LIMIT ? OFFSET ?`, + append(args, query.PageSize, resourceOffset(query.Page, query.PageSize))..., + ) + if err != nil { + return nil, 0, err + } + defer rows.Close() + + items := make([]ledger.WalletTransaction, 0, query.PageSize) + for rows.Next() { + var item ledger.WalletTransaction + if err := rows.Scan( + &item.EntryID, + &item.TransactionID, + &item.AvailableDelta, + &item.AvailableAfter, + &item.CounterpartyUserID, + &item.RoomID, + &item.CreatedAtMS, + ); err != nil { + return nil, 0, err + } + item.BizType = "host_period_diamond_income" + item.AssetType = ledger.AssetHostPeriodDiamond + items = append(items, item) + } + return items, total, rows.Err() +} + // walletTransactionTransferAmount 把工资转币商、H5 币商进货和后台进货的不同 metadata 统一成展示金额;解析失败时返回空值,避免流水页展示错误金额。 func walletTransactionTransferAmount(bizType string, metadataJSON string) (int64, string) { var metadata struct { diff --git a/services/wallet-service/internal/transport/grpc/balance.go b/services/wallet-service/internal/transport/grpc/balance.go index b2871a17..3e42061a 100644 --- a/services/wallet-service/internal/transport/grpc/balance.go +++ b/services/wallet-service/internal/transport/grpc/balance.go @@ -110,10 +110,33 @@ func (s *Server) ListWalletTransactions(ctx context.Context, req *walletv1.ListW AssetType: req.GetAssetType(), Page: req.GetPage(), PageSize: req.GetPageSize(), + StartAtMS: req.GetStartAtMs(), + EndAtMS: req.GetEndAtMs(), }) if err != nil { return nil, xerr.ToGRPCError(err) } + return walletTransactionsToProto(items, total), nil +} + +// ListHostPeriodDiamondTransactions 返回主播周期钻石收入明细,协议形状与钱包流水一致但数据源保持独立。 +func (s *Server) ListHostPeriodDiamondTransactions(ctx context.Context, req *walletv1.ListWalletTransactionsRequest) (*walletv1.ListWalletTransactionsResponse, error) { + ctx = appcode.WithContext(ctx, req.GetAppCode()) + items, total, err := s.svc.ListHostPeriodDiamondTransactions(ctx, ledger.ListWalletTransactionsQuery{ + AppCode: req.GetAppCode(), + UserID: req.GetUserId(), + Page: req.GetPage(), + PageSize: req.GetPageSize(), + StartAtMS: req.GetStartAtMs(), + EndAtMS: req.GetEndAtMs(), + }) + if err != nil { + return nil, xerr.ToGRPCError(err) + } + return walletTransactionsToProto(items, total), nil +} + +func walletTransactionsToProto(items []ledger.WalletTransaction, total int64) *walletv1.ListWalletTransactionsResponse { resp := &walletv1.ListWalletTransactionsResponse{Transactions: make([]*walletv1.WalletTransaction, 0, len(items)), Total: total} for _, item := range items { resp.Transactions = append(resp.Transactions, &walletv1.WalletTransaction{ @@ -132,7 +155,7 @@ func (s *Server) ListWalletTransactions(ctx context.Context, req *walletv1.ListW TransferCurrencyCode: item.TransferCurrencyCode, }) } - return resp, nil + return resp } func balancesToProto(balances []ledger.AssetBalance) []*walletv1.AssetBalance {