diff --git a/README.md b/README.md index 81da91de..593cb724 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ ### docker deploy token -6acddd2c6f1c0df7f0f3bb848caeeced6ec6ef2a \ No newline at end of file +579f3fab0f179949b1b8a509ba4f2dff0c8dcdd5 diff --git a/api/card_info_walmart/card_info_walmart.go b/api/card_info_walmart/card_info_walmart.go index 5515b959..78d5a109 100644 --- a/api/card_info_walmart/card_info_walmart.go +++ b/api/card_info_walmart/card_info_walmart.go @@ -34,10 +34,13 @@ type ICardInfoWalmartV1 interface { GroupList(ctx context.Context, req *v1.GroupListReq) (res *v1.GroupListRes, err error) GroupDelete(ctx context.Context, req *v1.GroupDeleteReq) (res *v1.GroupDeleteRes, err error) GroupAllList(ctx context.Context, req *v1.GroupAllListReq) (res *v1.GroupAllListRes, err error) + GroupStat(ctx context.Context, req *v1.GroupStatReq) (res *v1.GroupStatRes, err error) + GroupExport(ctx context.Context, req *v1.GroupExportReq) (res *v1.GroupExportRes, err error) Submit(ctx context.Context, req *v1.SubmitReq) (res *v1.SubmitRes, err error) List(ctx context.Context, req *v1.ListReq) (res *v1.ListRes, err error) OrderHistory(ctx context.Context, req *v1.OrderHistoryReq) (res *v1.OrderHistoryRes, err error) OrderCallback(ctx context.Context, req *v1.OrderCallbackReq) (res *v1.OrderCallbackRes, err error) OrderStatusReset(ctx context.Context, req *v1.OrderStatusResetReq) (res *v1.OrderStatusResetRes, err error) + OrderExport(ctx context.Context, req *v1.OrderExportReq) (res *v1.OrderExportRes, err error) OrderSummaryList(ctx context.Context, req *v1.OrderSummaryListReq) (res *v1.OrderSummaryListRes, err error) } diff --git a/api/card_info_walmart/v1/account.go b/api/card_info_walmart/v1/account.go index 0b6817e0..3d32696f 100644 --- a/api/card_info_walmart/v1/account.go +++ b/api/card_info_walmart/v1/account.go @@ -1,13 +1,14 @@ package v1 import ( - "github.com/gogf/gf/v2/frame/g" - "github.com/gogf/gf/v2/net/ghttp" - "github.com/gogf/gf/v2/os/gtime" "kami/api/commonApi" v1 "kami/api/sysUser/v1" "kami/internal/consts" "kami/internal/model/entity" + + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/net/ghttp" + "github.com/gogf/gf/v2/os/gtime" ) type AccountDeleteReq struct { @@ -25,6 +26,7 @@ type AccountListReq struct { Cookie string `json:"cookie"` CreatedUserName string `json:"CreatedUserName" description:"创建用户昵称"` GroupId int `json:"groupId" description:"分组ID"` + UserId string `json:"userId" description:"用户ID"` } type AccountListRecord struct { @@ -154,6 +156,7 @@ type AccountCookieBatchAddRes struct { type DownloadReq struct { g.Meta `path:"/cardInfo/walmart/account/download" tags:"沃尔玛充值卡账户" method:"get" summary:"下载充值账户"` + UserId string `json:"userId" description:"用户ID"` } type DownloadRes struct { @@ -168,18 +171,24 @@ type AccountDailySummaryReq struct { } type CardRedeemAccountSummary struct { - AccountInfo AccountInfo `json:"accountInfo"` - Id int `json:"id" orm:"id" description:""` - AccountId string `json:"accountId" orm:"account_id" description:""` - AmountTotalSum float64 `json:"amountTotalSum" orm:"amount_total_sum" description:""` - AmountTodaySum float64 `json:"amountTodaySum" orm:"amount_today_sum" description:""` - AmountTotalCount int `json:"amountTotalCount" orm:"amount_total_count" description:""` - AmountTodayCount int `json:"amountTodayCount" orm:"amount_today_count" description:""` - Date *gtime.Time `json:"date" orm:"date" description:""` + GroupId int `json:"groupId" orm:"group_id" description:""` + GroupName string `json:"groupName" orm:"group_name" description:""` + AccountInfo *AccountInfo `json:"accountInfo"` + Id int `json:"id" orm:"id" description:""` + AccountId string `json:"accountId" orm:"account_id" description:""` + AmountTotalSum float64 `json:"amountTotalSum" orm:"amount_total_sum" description:""` + AmountTodaySum float64 `json:"amountTodaySum" orm:"amount_today_sum" description:""` + AmountTotalCount int `json:"amountTotalCount" orm:"amount_total_count" description:""` + AmountTodayCount int `json:"amountTodayCount" orm:"amount_today_count" description:""` + Date *gtime.Time `json:"date" orm:"date" description:""` + CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:""` + UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:""` + DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:""` } type AccountInfo struct { g.Meta `orm:"table:card_redeem_account_info"` + GroupId int `json:"groupId" orm:"group_id" description:""` UploadUser v1.SysUserRecord `json:"uploadUser" orm:"with:id=create_user_id"` CreateUserId string `json:"createUserId" orm:"create_user_id" description:"创建人"` Balance float64 `json:"balance" orm:"balance" description:"余额"` @@ -194,6 +203,9 @@ type AccountInfo struct { AmountTodaySum float64 `json:"amountTodaySum" orm:"amount_today_sum" description:"账单今日统计金额"` EffectiveBalance float64 `json:"effectiveBalance" orm:"effective_balance" description:"有效充值余额"` AmountTotalCount int `json:"amountTotalCount" orm:"amount_total_count" description:""` + CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:""` + UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:""` + DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:""` } type AccountDailySummaryRes struct { diff --git a/api/card_info_walmart/v1/group.go b/api/card_info_walmart/v1/group.go index feabd7cc..14869411 100644 --- a/api/card_info_walmart/v1/group.go +++ b/api/card_info_walmart/v1/group.go @@ -1,9 +1,11 @@ package v1 import ( - "github.com/gogf/gf/v2/frame/g" "kami/api/commonApi" "kami/internal/model/entity" + + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gtime" ) type GroupRecord struct { @@ -31,6 +33,7 @@ type GroupUpdateRes struct { type GroupListReq struct { g.Meta `path:"/cardInfo/walmart/group/list" tags:"沃尔玛充值卡账户" method:"get" summary:"获取沃尔玛账户分组"` commonApi.CommonPageReq + UserId string `json:"userId" description:"用户ID"` } type GroupListRes struct { @@ -47,9 +50,58 @@ type GroupDeleteRes struct { type GroupAllListReq struct { g.Meta `path:"/cardInfo/walmart/group/allList" tags:"沃尔玛充值卡账户" method:"get" summary:"获取所有沃尔玛账户分组"` + UserId string `json:"userId" description:"用户ID"` } // GroupAllListRes 获取所有分组 type GroupAllListRes struct { commonApi.CommonPageRes[*entity.V1CardRedeemAccountGroup] } + +// 分组统计 +type GroupStatReq struct { + g.Meta `path:"/cardInfo/walmart/group/stat" tags:"沃尔玛充值卡账户" method:"get" summary:"分组统计"` + commonApi.CommonPageReq + Username string `json:"username" description:"用户名"` + Date *gtime.Time `json:"date" description:"日期"` + UserId string `json:"userId" description:"用户ID"` +} + +type V1CardRedeemAccountGroupStatsEntity struct { + OrderDate string `orm:"order_date" json:"orderDate"` + GroupId int `orm:"group_id" json:"groupId"` + GroupName string `orm:"group_name" json:"groupName"` + Count int `orm:"count" json:"count"` + Sum float64 `orm:"sum" json:"sum"` + CreatedUserId string `orm:"group_created_user_id" json:"createdUserId"` + CreatedUserName string `orm:"username" json:"createdUserName"` +} + +type V1CardRedeemAccountGroupEntityAccount struct { + Total int `json:"total"` + Normal int `json:"normal"` + UnNormal int `json:"unNormal"` + Deleted int `json:"deleted"` +} + +type V1CardRedeemAccountGroupEntity struct { + *V1CardRedeemAccountGroupStatsEntity + Account *V1CardRedeemAccountGroupEntityAccount `json:"account"` +} + +type GroupStatRes struct { + commonApi.CommonPageRes[*V1CardRedeemAccountGroupEntity] +} + +// 导出 +type GroupExportReq struct { + g.Meta `path:"/cardInfo/walmart/group/export" tags:"沃尔玛充值卡账户" method:"get" summary:"导出账户分组" produces:"application/octet-stream"` + commonApi.CommonPageReq + Username string `json:"username" description:"用户名"` + Date *gtime.Time `json:"date" description:"日期"` + UserId string `json:"userId" description:"用户ID"` +} + +type GroupExportRes struct { + g.Meta `mime:"application/vnd.ms-excel"` +} diff --git a/api/card_info_walmart/v1/order.go b/api/card_info_walmart/v1/order.go index a42ec225..62f5365d 100644 --- a/api/card_info_walmart/v1/order.go +++ b/api/card_info_walmart/v1/order.go @@ -1,10 +1,11 @@ package v1 import ( - "github.com/gogf/gf/v2/frame/g" - "github.com/gogf/gf/v2/os/gtime" "kami/api/commonApi" "kami/internal/model/entity" + + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gtime" ) // SubmitReq 礼品卡充值 @@ -32,6 +33,7 @@ type ListReq struct { GroupId int `json:"groupId" description:"组ID"` AccountCk string `json:"accountCk" description:"账户cookie"` DateRange []*gtime.Time `json:"dateRange" description:"时间范围"` + UserId string `json:"userId" description:"用户ID"` } type ListRes struct { @@ -62,3 +64,21 @@ type OrderStatusResetReq struct { type OrderStatusResetRes struct { } + +// 导出 +type OrderExportReq struct { + g.Meta `path:"/cardInfo/walmart/order/export" tags:"沃尔玛充值卡订单" method:"get" summary:"导出订单" produces:"application/octet-stream"` + commonApi.CommonPageReq + GiftCardPwd string `json:"giftCardPwd" description:"礼品卡密码"` + MerchantId string `json:"merchantId" description:"商户ID"` + Attach string `json:"attach" description:"附加信息"` + AccountNickName string `json:"accountNickName" dc:"账户昵称"` + GroupId int `json:"groupId" description:"组ID"` + AccountCk string `json:"accountCk" description:"账户cookie"` + DateRange []*gtime.Time `json:"dateRange" description:"时间范围"` + UserId string `json:"userId" description:"用户ID"` +} + +type OrderExportRes struct { + g.Meta `mime:"application/vnd.ms-excel"` +} diff --git a/api/sysUser/v1/sysUser.go b/api/sysUser/v1/sysUser.go index 69db6022..4119413c 100644 --- a/api/sysUser/v1/sysUser.go +++ b/api/sysUser/v1/sysUser.go @@ -131,7 +131,7 @@ type UserGetByIdsRes struct { } type UserGetAllUserReq struct { - g.Meta `path:"/user/getSimpleAll" tags:"用户管理" method:"get" summary:"获取所有的商户(简单)"` + g.Meta `path:"/user/getSimpleAll" tags:"用户管理" method:"get" summary:"获取所有的用户(简单)"` } type UserGetAllSimpleUser struct { diff --git a/docker-compose.yml b/docker-compose.yml index 4505f902..cae71277 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -239,7 +239,7 @@ services: profiles: - jd_bind_card_server - all - babel_channel: + jd_babel_channel: image: git.kkknametrans.buzz/danial/jd_babel_channel_$BRANCH:$VERSION container_name: babel-channel-$BRANCH-$VERSION restart: always diff --git a/internal/boot/boot_enums.go b/internal/boot/boot_enums.go index de6d6ad7..2a658674 100644 --- a/internal/boot/boot_enums.go +++ b/internal/boot/boot_enums.go @@ -9,5 +9,5 @@ import ( ) func init() { - gtag.SetGlobalEnums(`{"github.com/bytedance/sonic/internal/decoder/consts.Options":[128,16,8,64,1,2,4,32,128,16,8,64,1,2,4,32,128,16,8,64,1,2,4,32,16,8,1,2,4,32],"github.com/bytedance/sonic/internal/encoder.Options":[4,7,256,2,128,16,8,64,1,32,4,7,256,2,128,16,8,64,1,32],"github.com/bytedance/sonic/internal/encoder/ir.Op":[16,4,21,49,50,23,27,28,19,2,3,13,14,37,6,7,8,5,20,24,30,31,52,32,33,34,35,36,25,40,38,39,42,41,45,46,47,48,1,18,17,29,26,43,44,15,22,10,11,12,9,51],"github.com/bytedance/sonic/internal/native/types.ParsingError":[1,8,5,2,3,6,4,10,9,33,7,34],"github.com/bytedance/sonic/internal/resolver.FieldOpts":[1,4,2],"github.com/bytedance/sonic/internal/resolver.OffsetType":[1,0],"github.com/casbin/casbin/v2/effector.Effect":[0,2,1],"github.com/casbin/casbin/v2/model.PolicyOp":[0,1],"github.com/casbin/govaluate.OperatorSymbol":[32,12,16,19,27,17,20,18,30,22,3,24,31,5,7,11,26,1,6,8,15,23,21,25,4,2,10,13,14,9,33,29,28,0],"github.com/casbin/govaluate.TokenKind":[10,3,14,15,11,8,12,13,2,5,1,9,4,16,6,0,7],"github.com/fatih/color.Attribute":[40,44,46,42,100,104,106,102,105,101,107,103,45,41,47,43,6,5,1,8,9,2,30,34,36,32,90,94,96,92,95,91,97,93,35,31,37,33,3,0,25,22,28,29,23,27,24,7,4],"github.com/fsnotify/fsnotify.Op":[16,1,4,8,2],"github.com/go-logr/logr/funcr.MessageClass":[1,3,2,0],"github.com/go-logr/stdr.MessageClass":[1,3,2,0],"github.com/gogf/gf/os/gctx.StrKey":["GoFrameCtxId"],"github.com/gogf/gf/os/gfsnotify.Op":[16,1,4,8,2],"github.com/gogf/gf/v2/database/gdb.InsertOption":[0,3,1,2],"github.com/gogf/gf/v2/database/gdb.LocalType":["bool","[]byte","date","datetime","float32","float64","int","int64","int64-bytes","[]int64","[]int","json","jsonb","string","[]string","time","uint","uint64","uint64-bytes","[]uint64",""],"github.com/gogf/gf/v2/database/gdb.Propagation":["MANDATORY","NESTED","NEVER","NOT_SUPPORTED","REQUIRED","REQUIRES_NEW","SUPPORTS"],"github.com/gogf/gf/v2/database/gdb.Role":["master","slave"],"github.com/gogf/gf/v2/database/gdb.SelectType":[3,1,0,2],"github.com/gogf/gf/v2/database/gdb.SoftTimeType":[0,1,2,4,3,5],"github.com/gogf/gf/v2/database/gdb.SqlType":["DB.Begin","DB.ExecContext","DB.PrepareContext","DB.QueryContext","DB.Statement.ExecContext","DB.Statement.QueryContext","DB.Statement.QueryRowContext","TX.Commit","TX.Rollback"],"github.com/gogf/gf/v2/database/gredis.FlushOp":["ASYNC","SYNC"],"github.com/gogf/gf/v2/database/gredis.LInsertOp":["AFTER","BEFORE"],"github.com/gogf/gf/v2/encoding/gjson.ContentType":["ini","js","json","properties","toml","xml","yaml","yml"],"github.com/gogf/gf/v2/internal/errors.StackMode":["brief","detail"],"github.com/gogf/gf/v2/net/ghttp.HandlerType":["handler","hook","middleware","object"],"github.com/gogf/gf/v2/net/ghttp.HookName":["HOOK_AFTER_OUTPUT","HOOK_AFTER_SERVE","HOOK_BEFORE_OUTPUT","HOOK_BEFORE_SERVE"],"github.com/gogf/gf/v2/os/gctx.StrKey":["CtxKeyArgumentsIndex","CtxKeyCommand","CtxKeyParser"],"github.com/gogf/gf/v2/os/gfsnotify.Op":[16,1,4,8,2],"github.com/gogf/gf/v2/os/gmetric.MetricType":["Counter","Histogram","ObservableCounter","ObservableGauge","ObservableUpDownCounter","UpDownCounter"],"github.com/gogf/gf/v2/os/gstructs.RecursiveOption":[1,2,0],"github.com/gogf/gf/v2/text/gstr.CaseType":["Camel","CamelLower","Kebab","KebabScreaming","Lower","Snake","SnakeFirstUpper","SnakeScreaming"],"github.com/gogf/gf/v2/util/gconv/internal/converter.RecursiveType":["auto","true"],"github.com/golang-jwt/jwt/v5.unsafeNoneMagicConstant":["none signing method allowed"],"github.com/golang/freetype/truetype.NameID":[0],"github.com/google/uuid.Domain":[1,2,0],"github.com/google/uuid.Variant":[4,0,3,1,2],"github.com/grokify/html-strip-tags-go.ErrorCode":[1,2,3,4,5,6,7,8,9,10,0],"github.com/magiconair/properties.Encoding":[2,1],"github.com/redis/go-redis/v9.Aggregator":[1,6,7,0,8,4,3,5,9,10,2,13,11,12],"github.com/redis/go-redis/v9.ClientFlags":[17592186044416,512,16,1024,1099511627776,64,2199023255552,32,4096,536870912,16384,32768,274877906944,33554432,67108864,2,8192,134217728,4,8,8796093022208,35184372088832,1073741824,2097152,65536,524288,1572864,1048576,268435456,549755813888,262144,70368744177664,131072,4398046511104,4194304,16777216,8388608,256,1,2147483648,8589934592,4294967296,68719476736,137438953472,17179869184,34359738368,128,2048],"github.com/redis/go-redis/v9.SearchAggregator":[1,5,6,7,11,0,4,3,9,12,8,2,10],"github.com/redis/go-redis/v9.SearchFieldType":[4,6,0,1,2,3,5],"github.com/redis/go-redis/v9/internal/proto.RedisError":["redis: nil","redis: transaction failed","redis: nil"],"github.com/richardlehane/msoleps/types.TypeID":[11,8,6,7,14,0,10,16,2,3,20,22,1,4,5,17,18,19,21,23,12],"github.com/rs/xid.strErr":["xid: invalid ID"],"github.com/skip2/go-qrcode.RecoveryLevel":[2,3,0,1],"github.com/xuri/excelize/v2.ArgType":[6,5,3,4,1,2,0],"github.com/xuri/excelize/v2.CellType":[1,2,3,4,5,6,7,0],"github.com/xuri/excelize/v2.ChartDataLabelPositionType":[9,2,1,3,4,5,6,7,8,0],"github.com/xuri/excelize/v2.ChartLineType":[3,2,1,0],"github.com/xuri/excelize/v2.ChartTickLabelPositionType":[1,2,0,3],"github.com/xuri/excelize/v2.ChartType":[0,3,5,4,2,1,6,9,12,14,13,18,20,19,11,15,17,16,10,46,8,7,53,54,21,24,25,28,29,31,30,36,37,39,38,27,32,33,35,34,26,23,22,51,40,41,42,43,44,45,47,48,49,52,50],"github.com/xuri/excelize/v2.ColorMappingType":[4,5,6,7,8,9,1,3,11,10,0,2],"github.com/xuri/excelize/v2.CultureName":[1,0,2],"github.com/xuri/excelize/v2.DataValidationErrorStyle":[3,1,2],"github.com/xuri/excelize/v2.DataValidationOperator":[1,2,3,4,5,6,7,8],"github.com/xuri/excelize/v2.DataValidationType":[2,3,4,5,1,6,7,8],"github.com/xuri/excelize/v2.FormControlType":[1,4,5,6,0,2,7,3],"github.com/xuri/excelize/v2.PictureInsertType":[3,2,1,0],"go.opentelemetry.io/auto/sdk/internal/telemetry.SpanFlags":[256,512,255],"go.opentelemetry.io/auto/sdk/internal/telemetry.SpanKind":[3,5,1,4,2],"go.opentelemetry.io/auto/sdk/internal/telemetry.StatusCode":[2,1,0],"go.opentelemetry.io/auto/sdk/internal/telemetry.ValueKind":[1,5,0,2,3,7,6,4],"go.opentelemetry.io/otel/attribute.Key":["aws.dynamodb.attribute_definitions","aws.dynamodb.attributes_to_get","aws.dynamodb.consistent_read","aws.dynamodb.consumed_capacity","aws.dynamodb.count","aws.dynamodb.exclusive_start_table","aws.dynamodb.global_secondary_index_updates","aws.dynamodb.global_secondary_indexes","aws.dynamodb.index_name","aws.dynamodb.item_collection_metrics","aws.dynamodb.limit","aws.dynamodb.local_secondary_indexes","aws.dynamodb.projection","aws.dynamodb.provisioned_read_capacity","aws.dynamodb.provisioned_write_capacity","aws.dynamodb.scan_forward","aws.dynamodb.scanned_count","aws.dynamodb.segment","aws.dynamodb.select","aws.dynamodb.table_count","aws.dynamodb.table_names","aws.dynamodb.total_segments","aws.ecs.cluster.arn","aws.ecs.container.arn","aws.ecs.launchtype","aws.ecs.task.arn","aws.ecs.task.family","aws.ecs.task.id","aws.ecs.task.revision","aws.eks.cluster.arn","aws.lambda.invoked_arn","aws.log.group.arns","aws.log.group.names","aws.log.stream.arns","aws.log.stream.names","aws.request_id","aws.s3.bucket","aws.s3.copy_source","aws.s3.delete","aws.s3.key","aws.s3.part_number","aws.s3.upload_id","android.os.api_level","android.state","aspnetcore.diagnostics.exception.result","aspnetcore.diagnostics.handler.type","aspnetcore.rate_limiting.policy","aspnetcore.rate_limiting.result","aspnetcore.request.is_unhandled","aspnetcore.routing.is_fallback","aspnetcore.routing.match_status","browser.brands","browser.language","browser.mobile","browser.platform","client.address","client.port","cloud.account.id","cloud.availability_zone","cloud.platform","cloud.provider","cloud.region","cloud.resource_id","cloudevents.event_id","cloudevents.event_source","cloudevents.event_spec_version","cloudevents.event_subject","cloudevents.event_type","code.column","code.filepath","code.function","code.lineno","code.namespace","code.stacktrace","container.cpu.state","container.command_args","container.command","container.command_line","container.id","container.image.id","container.image.name","container.image.repo_digests","container.image.tags","container.name","container.runtime","db.cassandra.consistency_level","db.cassandra.coordinator.dc","db.cassandra.coordinator.id","db.cassandra.idempotence","db.cassandra.page_size","db.cassandra.speculative_execution_count","db.client.connections.pool.name","db.client.connections.state","db.collection.name","db.cosmosdb.client_id","db.cosmosdb.connection_mode","db.cosmosdb.operation_type","db.cosmosdb.request_charge","db.cosmosdb.request_content_length","db.cosmosdb.status_code","db.cosmosdb.sub_status_code","db.elasticsearch.cluster.name","db.elasticsearch.node.name","db.namespace","db.operation.name","db.query.text","db.system","dns.question.name","deployment.environment","destination.address","destination.port","device.id","device.manufacturer","device.model.identifier","device.model.name","disk.io.direction","enduser.id","enduser.role","enduser.scope","error.type","event.name","exception.escaped","exception.message","exception.stacktrace","exception.type","faas.coldstart","faas.cron","faas.document.collection","faas.document.name","faas.document.operation","faas.document.time","faas.instance","faas.invocation_id","faas.invoked_name","faas.invoked_provider","faas.invoked_region","faas.max_memory","faas.name","faas.time","faas.trigger","faas.version","feature_flag.key","feature_flag.provider_name","feature_flag.variant","file.directory","file.extension","file.name","file.path","file.size","gcp.cloud_run.job.execution","gcp.cloud_run.job.task_index","gcp.gce.instance.hostname","gcp.gce.instance.name","gen_ai.completion","gen_ai.prompt","gen_ai.request.max_tokens","gen_ai.request.model","gen_ai.request.temperature","gen_ai.request.top_p","gen_ai.response.finish_reasons","gen_ai.response.id","gen_ai.response.model","gen_ai.system","gen_ai.usage.completion_tokens","gen_ai.usage.prompt_tokens","graphql.document","graphql.operation.name","graphql.operation.type","http.connection.state","http.request.body.size","http.request.method","http.request.method_original","http.request.resend_count","http.request.size","http.response.body.size","http.response.size","http.response.status_code","http.route","heroku.app.id","heroku.release.commit","heroku.release.creation_timestamp","host.arch","host.cpu.cache.l2.size","host.cpu.family","host.cpu.model.id","host.cpu.model.name","host.cpu.stepping","host.cpu.vendor.id","host.id","host.ip","host.image.id","host.image.name","host.image.version","host.mac","host.name","host.type","jvm.buffer.pool.name","jvm.gc.action","jvm.gc.name","jvm.memory.pool.name","jvm.memory.type","jvm.thread.daemon","jvm.thread.state","k8s.cluster.name","k8s.cluster.uid","k8s.container.name","k8s.container.restart_count","k8s.container.status.last_terminated_reason","k8s.cronjob.name","k8s.cronjob.uid","k8s.daemonset.name","k8s.daemonset.uid","k8s.deployment.name","k8s.deployment.uid","k8s.job.name","k8s.job.uid","k8s.namespace.name","k8s.node.name","k8s.node.uid","k8s.pod.name","k8s.pod.uid","k8s.replicaset.name","k8s.replicaset.uid","k8s.statefulset.name","k8s.statefulset.uid","log.file.name","log.file.name_resolved","log.file.path","log.file.path_resolved","log.iostream","log.record.uid","messaging.batch.message_count","messaging.client.id","messaging.destination.anonymous","messaging.destination.name","messaging.destination.partition.id","messaging.destination_publish.anonymous","messaging.destination_publish.name","messaging.destination.template","messaging.destination.temporary","messaging.eventhubs.consumer.group","messaging.eventhubs.message.enqueued_time","messaging.gcp_pubsub.message.ack_deadline","messaging.gcp_pubsub.message.ack_id","messaging.gcp_pubsub.message.delivery_attempt","messaging.gcp_pubsub.message.ordering_key","messaging.kafka.consumer.group","messaging.kafka.message.key","messaging.kafka.message.offset","messaging.kafka.message.tombstone","messaging.message.body.size","messaging.message.conversation_id","messaging.message.envelope.size","messaging.message.id","messaging.operation.name","messaging.operation.type","messaging.rabbitmq.destination.routing_key","messaging.rabbitmq.message.delivery_tag","messaging.rocketmq.client_group","messaging.rocketmq.consumption_model","messaging.rocketmq.message.delay_time_level","messaging.rocketmq.message.delivery_timestamp","messaging.rocketmq.message.group","messaging.rocketmq.message.keys","messaging.rocketmq.message.tag","messaging.rocketmq.message.type","messaging.rocketmq.namespace","messaging.servicebus.destination.subscription_name","messaging.servicebus.disposition_status","messaging.servicebus.message.delivery_count","messaging.servicebus.message.enqueued_time","messaging.system","network.carrier.icc","network.carrier.mcc","network.carrier.mnc","network.carrier.name","network.connection.subtype","network.connection.type","network.io.direction","network.local.address","network.local.port","network.peer.address","network.peer.port","network.protocol.name","network.protocol.version","network.transport","network.type","os.build_id","os.description","os.name","os.type","os.version","otel.scope.name","otel.scope.version","otel.status_code","otel.status_description","oci.manifest.digest","opentracing.ref_type","peer.service","process.cpu.state","process.command_args","process.command","process.command_line","process.context_switch_type","process.creation.time","process.executable.name","process.executable.path","process.exit.code","process.exit.time","process.group_leader.pid","process.interactive","process.owner","process.pid","process.paging.fault_type","process.parent_pid","process.real_user.id","process.real_user.name","process.runtime.description","process.runtime.name","process.runtime.version","process.saved_user.id","process.saved_user.name","process.session_leader.pid","process.user.id","process.user.name","process.vpid","rpc.connect_rpc.error_code","rpc.grpc.status_code","rpc.jsonrpc.error_code","rpc.jsonrpc.error_message","rpc.jsonrpc.request_id","rpc.jsonrpc.version","rpc.message.compressed_size","rpc.message.id","rpc.message.type","rpc.message.uncompressed_size","rpc.method","rpc.service","rpc.system","server.address","server.port","service.instance.id","service.name","service.namespace","service.version","session.id","session.previous_id","signalr.connection.status","signalr.transport","source.address","source.port","system.cpu.logical_number","system.cpu.state","system.device","system.filesystem.mode","system.filesystem.mountpoint","system.filesystem.state","system.filesystem.type","system.memory.state","system.network.state","system.paging.direction","system.paging.state","system.paging.type","system.process.status","tls.cipher","tls.client.certificate_chain","tls.client.certificate","tls.client.hash.md5","tls.client.hash.sha1","tls.client.hash.sha256","tls.client.issuer","tls.client.ja3","tls.client.not_after","tls.client.not_before","tls.client.server_name","tls.client.subject","tls.client.supported_ciphers","tls.curve","tls.established","tls.next_protocol","tls.protocol.name","tls.protocol.version","tls.resumed","tls.server.certificate_chain","tls.server.certificate","tls.server.hash.md5","tls.server.hash.sha1","tls.server.hash.sha256","tls.server.issuer","tls.server.ja3s","tls.server.not_after","tls.server.not_before","tls.server.subject","telemetry.distro.name","telemetry.distro.version","telemetry.sdk.language","telemetry.sdk.name","telemetry.sdk.version","thread.id","thread.name","url.domain","url.extension","url.fragment","url.full","url.original","url.path","url.port","url.query","url.registered_domain","url.scheme","url.subdomain","url.template","url.top_level_domain","user_agent.name","user_agent.original","user_agent.version","webengine.description","webengine.name","webengine.version","aws.dynamodb.attribute_definitions","aws.dynamodb.attributes_to_get","aws.dynamodb.consistent_read","aws.dynamodb.consumed_capacity","aws.dynamodb.count","aws.dynamodb.exclusive_start_table","aws.dynamodb.global_secondary_index_updates","aws.dynamodb.global_secondary_indexes","aws.dynamodb.index_name","aws.dynamodb.item_collection_metrics","aws.dynamodb.limit","aws.dynamodb.local_secondary_indexes","aws.dynamodb.projection","aws.dynamodb.provisioned_read_capacity","aws.dynamodb.provisioned_write_capacity","aws.dynamodb.scan_forward","aws.dynamodb.scanned_count","aws.dynamodb.segment","aws.dynamodb.select","aws.dynamodb.table_count","aws.dynamodb.table_names","aws.dynamodb.total_segments","aws.ecs.cluster.arn","aws.ecs.container.arn","aws.ecs.launchtype","aws.ecs.task.arn","aws.ecs.task.family","aws.ecs.task.revision","aws.eks.cluster.arn","aws.lambda.invoked_arn","aws.log.group.arns","aws.log.group.names","aws.log.stream.arns","aws.log.stream.names","aws.request_id","aws.s3.bucket","aws.s3.copy_source","aws.s3.delete","aws.s3.key","aws.s3.part_number","aws.s3.upload_id","android.os.api_level","android.state","aspnetcore.diagnostics.handler.type","aspnetcore.rate_limiting.policy","aspnetcore.rate_limiting.result","aspnetcore.request.is_unhandled","aspnetcore.routing.is_fallback","browser.brands","browser.language","browser.mobile","browser.platform","client.address","client.port","cloud.account.id","cloud.availability_zone","cloud.platform","cloud.provider","cloud.region","cloud.resource_id","cloudevents.event_id","cloudevents.event_source","cloudevents.event_spec_version","cloudevents.event_subject","cloudevents.event_type","code.column","code.filepath","code.function","code.lineno","code.namespace","code.stacktrace","container.command_args","container.command","container.command_line","container.id","container.image.id","container.image.name","container.image.repo_digests","container.image.tags","container.name","container.runtime","db.cassandra.consistency_level","db.cassandra.coordinator.dc","db.cassandra.coordinator.id","db.cassandra.idempotence","db.cassandra.page_size","db.cassandra.speculative_execution_count","db.cassandra.table","db.connection_string","db.cosmosdb.client_id","db.cosmosdb.connection_mode","db.cosmosdb.container","db.cosmosdb.operation_type","db.cosmosdb.request_charge","db.cosmosdb.request_content_length","db.cosmosdb.status_code","db.cosmosdb.sub_status_code","db.elasticsearch.cluster.name","db.elasticsearch.node.name","db.instance.id","db.jdbc.driver_classname","db.mssql.instance_name","db.mongodb.collection","db.name","db.operation","db.redis.database_index","db.sql.table","db.statement","db.system","db.user","deployment.environment","destination.address","destination.port","device.id","device.manufacturer","device.model.identifier","device.model.name","disk.io.direction","enduser.id","enduser.role","enduser.scope","error.type","event.name","exception.escaped","exception.message","exception.stacktrace","exception.type","faas.coldstart","faas.cron","faas.document.collection","faas.document.name","faas.document.operation","faas.document.time","faas.instance","faas.invocation_id","faas.invoked_name","faas.invoked_provider","faas.invoked_region","faas.max_memory","faas.name","faas.time","faas.trigger","faas.version","feature_flag.key","feature_flag.provider_name","feature_flag.variant","gcp.cloud_run.job.execution","gcp.cloud_run.job.task_index","gcp.gce.instance.hostname","gcp.gce.instance.name","graphql.document","graphql.operation.name","graphql.operation.type","http.flavor","http.method","http.request.body.size","http.request_content_length","http.request.method","http.request.method_original","http.request.resend_count","http.response.body.size","http.response_content_length","http.response.status_code","http.route","http.scheme","http.status_code","http.target","http.url","http.user_agent","heroku.app.id","heroku.release.commit","heroku.release.creation_timestamp","host.arch","host.cpu.cache.l2.size","host.cpu.family","host.cpu.model.id","host.cpu.model.name","host.cpu.stepping","host.cpu.vendor.id","host.id","host.ip","host.image.id","host.image.name","host.image.version","host.mac","host.name","host.type","ios.state","jvm.buffer.pool.name","jvm.memory.pool.name","jvm.memory.type","k8s.cluster.name","k8s.cluster.uid","k8s.container.name","k8s.container.restart_count","k8s.cronjob.name","k8s.cronjob.uid","k8s.daemonset.name","k8s.daemonset.uid","k8s.deployment.name","k8s.deployment.uid","k8s.job.name","k8s.job.uid","k8s.namespace.name","k8s.node.name","k8s.node.uid","k8s.pod.name","k8s.pod.uid","k8s.replicaset.name","k8s.replicaset.uid","k8s.statefulset.name","k8s.statefulset.uid","log.file.name","log.file.name_resolved","log.file.path","log.file.path_resolved","log.iostream","log.record.uid","message.compressed_size","message.id","message.type","message.uncompressed_size","messaging.batch.message_count","messaging.client_id","messaging.destination.anonymous","messaging.destination.name","messaging.destination_publish.anonymous","messaging.destination_publish.name","messaging.destination.template","messaging.destination.temporary","messaging.gcp_pubsub.message.ordering_key","messaging.kafka.consumer.group","messaging.kafka.destination.partition","messaging.kafka.message.key","messaging.kafka.message.offset","messaging.kafka.message.tombstone","messaging.message.body.size","messaging.message.conversation_id","messaging.message.envelope.size","messaging.message.id","messaging.operation","messaging.rabbitmq.destination.routing_key","messaging.rocketmq.client_group","messaging.rocketmq.consumption_model","messaging.rocketmq.message.delay_time_level","messaging.rocketmq.message.delivery_timestamp","messaging.rocketmq.message.group","messaging.rocketmq.message.keys","messaging.rocketmq.message.tag","messaging.rocketmq.message.type","messaging.rocketmq.namespace","messaging.system","net.host.name","net.host.port","net.peer.name","net.peer.port","net.protocol.name","net.protocol.version","net.sock.family","net.sock.host.addr","net.sock.host.port","net.sock.peer.addr","net.sock.peer.name","net.sock.peer.port","net.transport","network.carrier.icc","network.carrier.mcc","network.carrier.mnc","network.carrier.name","network.connection.subtype","network.connection.type","network.io.direction","network.local.address","network.local.port","network.peer.address","network.peer.port","network.protocol.name","network.protocol.version","network.transport","network.type","os.build_id","os.description","os.name","os.type","os.version","otel.library.name","otel.library.version","otel.scope.name","otel.scope.version","otel.status_code","otel.status_description","oci.manifest.digest","opentracing.ref_type","peer.service","pool.name","process.command_args","process.command","process.command_line","process.executable.name","process.executable.path","process.owner","process.pid","process.parent_pid","process.runtime.description","process.runtime.name","process.runtime.version","rpc.connect_rpc.error_code","rpc.grpc.status_code","rpc.jsonrpc.error_code","rpc.jsonrpc.error_message","rpc.jsonrpc.request_id","rpc.jsonrpc.version","rpc.method","rpc.service","rpc.system","server.address","server.port","service.instance.id","service.name","service.namespace","service.version","session.id","session.previous_id","signalr.connection.status","signalr.transport","source.address","source.port","state","system.cpu.logical_number","system.cpu.state","system.device","system.filesystem.mode","system.filesystem.mountpoint","system.filesystem.state","system.filesystem.type","system.memory.state","system.network.state","system.paging.direction","system.paging.state","system.paging.type","system.processes.status","tls.cipher","tls.client.certificate_chain","tls.client.certificate","tls.client.hash.md5","tls.client.hash.sha1","tls.client.hash.sha256","tls.client.issuer","tls.client.ja3","tls.client.not_after","tls.client.not_before","tls.client.server_name","tls.client.subject","tls.client.supported_ciphers","tls.curve","tls.established","tls.next_protocol","tls.protocol.name","tls.protocol.version","tls.resumed","tls.server.certificate_chain","tls.server.certificate","tls.server.hash.md5","tls.server.hash.sha1","tls.server.hash.sha256","tls.server.issuer","tls.server.ja3s","tls.server.not_after","tls.server.not_before","tls.server.subject","telemetry.distro.name","telemetry.distro.version","telemetry.sdk.language","telemetry.sdk.name","telemetry.sdk.version","thread.id","thread.name","url.fragment","url.full","url.path","url.query","url.scheme","user_agent.original","webengine.description","webengine.name","webengine.version","aws.dynamodb.attribute_definitions","aws.dynamodb.attributes_to_get","aws.dynamodb.consistent_read","aws.dynamodb.consumed_capacity","aws.dynamodb.count","aws.dynamodb.exclusive_start_table","aws.dynamodb.global_secondary_index_updates","aws.dynamodb.global_secondary_indexes","aws.dynamodb.index_name","aws.dynamodb.item_collection_metrics","aws.dynamodb.limit","aws.dynamodb.local_secondary_indexes","aws.dynamodb.projection","aws.dynamodb.provisioned_read_capacity","aws.dynamodb.provisioned_write_capacity","aws.dynamodb.scan_forward","aws.dynamodb.scanned_count","aws.dynamodb.segment","aws.dynamodb.select","aws.dynamodb.table_count","aws.dynamodb.table_names","aws.dynamodb.total_segments","aws.ecs.cluster.arn","aws.ecs.container.arn","aws.ecs.launchtype","aws.ecs.task.arn","aws.ecs.task.family","aws.ecs.task.revision","aws.eks.cluster.arn","aws.lambda.invoked_arn","aws.log.group.arns","aws.log.group.names","aws.log.stream.arns","aws.log.stream.names","browser.brands","browser.language","browser.mobile","browser.platform","browser.user_agent","cloud.account.id","cloud.availability_zone","cloud.platform","cloud.provider","cloud.region","cloudevents.event_id","cloudevents.event_source","cloudevents.event_spec_version","cloudevents.event_subject","cloudevents.event_type","code.column","code.filepath","code.function","code.lineno","code.namespace","container.id","container.image.name","container.image.tag","container.name","container.runtime","db.cassandra.consistency_level","db.cassandra.coordinator.dc","db.cassandra.coordinator.id","db.cassandra.idempotence","db.cassandra.page_size","db.cassandra.speculative_execution_count","db.cassandra.table","db.connection_string","db.jdbc.driver_classname","db.mssql.instance_name","db.mongodb.collection","db.name","db.operation","db.redis.database_index","db.sql.table","db.statement","db.system","db.user","deployment.environment","device.id","device.manufacturer","device.model.identifier","device.model.name","enduser.id","enduser.role","enduser.scope","event.domain","event.name","exception.escaped","exception.message","exception.stacktrace","exception.type","faas.coldstart","faas.cron","faas.document.collection","faas.document.name","faas.document.operation","faas.document.time","faas.execution","faas.id","faas.instance","faas.invoked_name","faas.invoked_provider","faas.invoked_region","faas.max_memory","faas.name","faas.time","faas.trigger","faas.version","feature_flag.key","feature_flag.provider_name","feature_flag.variant","graphql.document","graphql.operation.name","graphql.operation.type","http.client_ip","http.flavor","http.method","http.request_content_length","http.resend_count","http.response_content_length","http.route","http.scheme","http.status_code","http.target","http.url","http.user_agent","host.arch","host.id","host.image.id","host.image.name","host.image.version","host.name","host.type","k8s.cluster.name","k8s.container.name","k8s.container.restart_count","k8s.cronjob.name","k8s.cronjob.uid","k8s.daemonset.name","k8s.daemonset.uid","k8s.deployment.name","k8s.deployment.uid","k8s.job.name","k8s.job.uid","k8s.namespace.name","k8s.node.name","k8s.node.uid","k8s.pod.name","k8s.pod.uid","k8s.replicaset.name","k8s.replicaset.uid","k8s.statefulset.name","k8s.statefulset.uid","message.compressed_size","message.id","message.type","message.uncompressed_size","messaging.batch.message_count","messaging.consumer.id","messaging.destination.anonymous","messaging.destination.kind","messaging.destination.name","messaging.destination.template","messaging.destination.temporary","messaging.kafka.client_id","messaging.kafka.consumer.group","messaging.kafka.destination.partition","messaging.kafka.message.key","messaging.kafka.message.offset","messaging.kafka.message.tombstone","messaging.kafka.source.partition","messaging.message.conversation_id","messaging.message.id","messaging.message.payload_compressed_size_bytes","messaging.message.payload_size_bytes","messaging.operation","messaging.rabbitmq.destination.routing_key","messaging.rocketmq.client_group","messaging.rocketmq.client_id","messaging.rocketmq.consumption_model","messaging.rocketmq.message.delay_time_level","messaging.rocketmq.message.delivery_timestamp","messaging.rocketmq.message.group","messaging.rocketmq.message.keys","messaging.rocketmq.message.tag","messaging.rocketmq.message.type","messaging.rocketmq.namespace","messaging.source.anonymous","messaging.source.kind","messaging.source.name","messaging.source.template","messaging.source.temporary","messaging.system","net.app.protocol.name","net.app.protocol.version","net.host.carrier.icc","net.host.carrier.mcc","net.host.carrier.mnc","net.host.carrier.name","net.host.connection.subtype","net.host.connection.type","net.host.name","net.host.port","net.peer.name","net.peer.port","net.sock.family","net.sock.host.addr","net.sock.host.port","net.sock.peer.addr","net.sock.peer.name","net.sock.peer.port","net.transport","os.description","os.name","os.type","os.version","otel.library.name","otel.library.version","otel.scope.name","otel.scope.version","otel.status_code","otel.status_description","opentracing.ref_type","peer.service","process.command_args","process.command","process.command_line","process.executable.name","process.executable.path","process.owner","process.pid","process.parent_pid","process.runtime.description","process.runtime.name","process.runtime.version","rpc.grpc.status_code","rpc.jsonrpc.error_code","rpc.jsonrpc.error_message","rpc.jsonrpc.request_id","rpc.jsonrpc.version","rpc.method","rpc.service","rpc.system","service.instance.id","service.name","service.namespace","service.version","telemetry.auto.version","telemetry.sdk.language","telemetry.sdk.name","telemetry.sdk.version","thread.id","thread.name","webengine.description","webengine.name","webengine.version"],"go.opentelemetry.io/otel/attribute.Type":[1,5,3,7,2,6,0,4,8],"go.opentelemetry.io/otel/codes.Code":[1,2,0],"go.opentelemetry.io/otel/sdk/trace.SamplingDecision":[0,2,1],"go.opentelemetry.io/otel/trace.SpanKind":[3,5,1,4,2,0],"go.opentelemetry.io/otel/trace.TraceFlags":[1],"go.opentelemetry.io/otel/trace/internal/telemetry.SpanFlags":[256,512,255],"go.opentelemetry.io/otel/trace/internal/telemetry.SpanKind":[3,5,1,4,2],"go.opentelemetry.io/otel/trace/internal/telemetry.StatusCode":[2,1,0],"go.opentelemetry.io/otel/trace/internal/telemetry.ValueKind":[1,5,0,2,3,7,6,4],"golang.org/x/arch/x86/x86asm.Op":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613],"golang.org/x/arch/x86/x86asm.Prefix":[359,615,103,754,46,62,358,614,102,38,100,101,16384,32768,8192,240,302,318,243,242,64,1,4,8,2,54,197,196,498,499],"golang.org/x/arch/x86/x86asm.Reg":[5,1,21,8,4,26,10,24,6,2,115,116,125,126,127,128,129,130,117,118,119,120,121,122,123,124,105,22,7,28,12,3,131,132,141,142,143,144,145,146,133,134,135,136,137,138,139,140,107,23,37,42,40,38,44,39,70,104,43,41,72,73,74,75,76,77,78,79,108,110,109,111,69,112,80,81,82,83,84,85,86,87,113,63,15,47,31,64,16,48,32,65,17,49,33,66,18,50,34,67,19,51,35,68,20,52,36,61,13,45,29,62,14,46,30,53,58,56,54,60,55,71,59,57,27,11,25,9,106,114,147,148,149,150,151,152,153,154,88,89,98,99,100,101,102,103,90,91,92,93,94,95,96,97],"golang.org/x/image/font.Hinting":[2,0,1],"golang.org/x/image/font.Stretch":[-2,2,-3,3,0,-1,1,-4,4],"golang.org/x/image/font.Style":[1,0,2],"golang.org/x/image/font.Weight":[5,3,4,-2,-1,1,0,2,-3],"golang.org/x/net/html.NodeType":[4,5,2,3,0,6,1],"golang.org/x/net/html.TokenType":[5,6,3,0,4,2,1],"golang.org/x/net/html/atom.Atom":[1,4,6662,6670,11273,43527,160262,455431,45317,133135,49427,56590,62211,117002,117006,203014,218628,261127,15362,67333,65285,70917,161804,73993,80904,257,15108,15112,47619,84739,89607,94211,94981,100106,10244,514,102662,66310,143623,139270,170761,8455,293127,105476,353285,378116,109315,109320,114437,115716,115719,120583,363271,363279,229387,122376,125446,129803,304388,304392,178184,186114,68103,378629,283139,352516,29191,34563,47878,37635,37639,91144,92931,386562,287496,96777,263432,412418,28162,28165,167175,138756,140808,142858,149510,16132,62982,152579,152589,155917,159236,159242,166155,173066,175630,180234,35589,35592,89090,187906,199938,214274,216834,412930,209156,209158,209159,20998,182790,185606,187140,87810,188420,188424,22020,190474,1537,363012,67842,195590,197125,198403,281349,281353,132099,147209,91394,200455,202245,232198,105736,249095,422153,204552,47363,12806,54791,96004,22789,189444,98566,45570,95236,305412,305415,23812,49923,4100,45066,448264,202755,46596,206599,208388,212227,212233,58885,58890,231172,231176,309252,38917,174086,198662,214786,214787,214793,176386,41986,422914,217349,220936,222981,38404,4867,14084,27655,35080,41480,108037,136712,176650,157702,79618,103687,144908,161294,161299,401162,433677,452366,355590,71944,85257,85264,269064,193799,224263,228877,233734,235275,238085,239370,241926,241929,244235,247050,253707,256522,259083,262918,267024,264713,271111,272903,274695,277772,280839,283913,286217,289546,294919,298256,302342,302348,307216,312841,315147,317961,317966,321547,324364,327436,330507,333322,336651,339465,343052,346121,348424,350474,357130,360199,367111,369670,369673,371978,374538,379916,382994,387591,389384,393224,395289,403720,405769,408072,410630,413446,416009,418313,420616,424713,16396,427016,429076,437000,439054,442633,444935,107268,24328,446727,451334,335110,3073,3077,26119,31495,61188,78091,111113,81931,184070,290819,296455,375048,341510,361990,52993,778,14850,218888,250126,296707,150536,32776,39940,39943,146434,104962,104963,64260,9473,30724,76039,423173,423174,137222,225544,354311,408582,408584,124165,390404,390405,126724,132613,413960,210694,227334,276230,40708,291850,376835,376838,391431,456966,260613,361220,53766,449798,458501,421123,459783,461571,462339,463110,310792,365829,181254,9989,37378,463880,217608,62725,87554,208901,16900,69637,52226,113157,127497,26626,55556,167949,2817,42754,17934,368134,5381,93443,192773,359427,411909,465930,468484,77571],"golang.org/x/net/internal/socks.AuthMethod":[255,0,2],"golang.org/x/net/internal/socks.Command":[1],"golang.org/x/net/internal/socks.Reply":[0],"golang.org/x/text/encoding/internal/identifier.MIB":[3,2005,2104,1020,2106,2026,2101,1016,2260,2108,2008,101,2065,2066,2067,2068,2074,2075,2076,2069,2070,2071,2072,2073,2077,2078,19,38,18,114,2025,113,2021,2017,2019,2020,2018,2004,2085,15,2060,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2028,2029,2063,2102,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2086,2053,2054,2055,2056,2057,2058,2059,2061,2062,2064,2015,2016,29,75,96,76,27,35,77,118,21,78,79,80,83,86,41,87,88,89,90,42,91,92,94,97,98,22,43,23,44,45,104,105,39,40,37,73,24,46,47,30,49,50,51,20,52,53,54,48,55,56,57,25,58,99,28,93,26,59,60,61,62,63,109,110,111,112,81,82,84,85,95,64,65,66,67,68,69,70,71,72,74,4,5,6,7,12,13,9,8,10,11,14,16,2105,2084,2088,36,102,119,2027,10003,2023,2081,2080,33,34,31,32,116,117,115,2087,2009,2013,2011,2012,2014,2010,2103,10001,1011,17,2259,2107,1001,100,1015,1013,1014,1017,1018,1019,1012,1021,106,1000,1010,103,1002,1005,1008,1009,1006,1007,1004,1003,2079,10000,2083,2082,2007,2022,2006,2250,2251,2252,2253,2254,2255,2256,2257,2258,2000,2024,2001,2002,2003,2109,10002],"golang.org/x/text/encoding/unicode.BOMPolicy":[7,0,3],"golang.org/x/text/encoding/unicode.Endianness":[false,true],"golang.org/x/text/feature/plural.Form":[4,5,2,0,3,1],"golang.org/x/text/internal/format.Status":[5,3,2,6,4,1,0],"golang.org/x/text/internal/language.AliasType":[-1,0,2,1],"golang.org/x/text/internal/number.PatternFlag":[8,4,1,2,64,32,64,96,32,96,16],"golang.org/x/text/internal/number.RoundingMode":[6,2,0,1,4,3,5],"golang.org/x/text/internal/number.SymbolType":[12,0,6,1,9,2,5,10,8,3,4,7,11],"golang.org/x/text/language.CanonType":[63,15,64,23,7,1,4,2,16,32,0,8],"golang.org/x/text/language.Confidence":[3,2,1,0],"golang.org/x/text/unicode/norm.Form":[0,1,2,3],"golang.org/x/time/rate.Limit":[1.7976931348623157e+308],"gopkg.in/yaml.v3.Kind":[16,1,4,8,2],"gopkg.in/yaml.v3.Style":[2,32,16,8,4,1],"image/draw.Op":[0,1],"io/fs.FileMode":[493,438],"kami/internal/consts.AgisoCallbackStatus":[16,2097152,4,2048,524288,256,32768,1048576],"kami/internal/consts.AppleAccountStatus":[1,5,6,8,4,2,9,7,3],"kami/internal/consts.AppleOrderItunesStatus":[30,31,40,32,10,12,11,14,20,13,15],"kami/internal/consts.AppleOrderOperation":["回调网关失败","订单正在处理中或者等待处理~","回调网关成功","iTunes回调次数超限","创建订单","账户余额查询","创建订单(人工处理订单,需人工介入)","手动修正金额成功","手动回调成功","正在处理","iTunes充值失败(错误未知)","iTunes退回订单,等待重新调度","iTunes充值失败(卡密已兑换)","iTunes充值成功","iTunes处理成功(金额异议)","iTunes充值失败(卡密无效)","iTunes充值失败(商店匹配错误)","重复操作","重置订单状态","iTunes开始处理","iTunes充值订单处理超时","代充值账户密码错误,等待重新调度"],"kami/internal/consts.AppleRechargeOrderStatus":[13,15,6,14,5,0,16,4,2,9,12,10,11,7,8,1,3],"kami/internal/consts.CardAppleNotifyStatus":[2,1],"kami/internal/consts.CardJDNotifyStatus":[2,1],"kami/internal/consts.CardRedeemAccountCategory":["apple","cTrip","jd","originalJD","walmart"],"kami/internal/consts.CardRedeemCookieCategory":["jd"],"kami/internal/consts.CardRedeemCookieStatus":["disable","normal"],"kami/internal/consts.CardRedeemType":["apple","jd","TMall"],"kami/internal/consts.CardTMallGameNotifyStatus":[2,1],"kami/internal/consts.DeductionStatus":["fail","return","start","success"],"kami/internal/consts.EnumShopStatus":["bind_order_fail","bind_order_succeed","confirm_order","delivery_failed","delivery_succeed","evaluated_failed","evaluated_succeed","evaluation_bad","evaluation_good","paid","receive_callback"],"kami/internal/consts.JDAccountOperationStatus":["add","deduct","initialize","return"],"kami/internal/consts.JDAccountStatus":[0,5,3,6,2,4,1,7],"kami/internal/consts.JDOrderOperationStatus":[1,4,11,9,10,0,6,8,2,7,5,3],"kami/internal/consts.JDOrderStatus":[0,4,6,10,5,9,7,2,10,3,1,8],"kami/internal/consts.RechargeTMallGameAccount":["disable","enable"],"kami/internal/consts.RechargeTMallGameCallBackType":["confirm","evaluation"],"kami/internal/consts.RechargeTMallGameOrder":["bind_shop_succeed","callback_failed","callback_manual_failed_manuel","callback_succeed","callback_manual_succeed_manuel","evaluation","callback","created","delivery_failed","delivery_succeed","finished","finished_with_refund_succeed","finished_with_wrong_amount","finished_with_wrong_status","paid","refund_failed","wait_for_evaluation","without_fill_account","trade_rated_add_failed","trade_rated_add_succeed"],"kami/internal/consts.RechargeTMallGameShopSourceType":["agiso","tMall"],"kami/internal/consts.RedeemAccountOperationStatus":["add","deduct","initialize","pre_add","pre_deduct","return"],"kami/internal/consts.RedeemAccountStatus":[0,5,3,6,2,8,4,1,7],"kami/internal/consts.RedeemAccountUsedStatus":[false,true],"kami/internal/consts.RedeemCardScheduleStrategyType":["normal","random"],"kami/internal/consts.RedeemOrderCallbackStatus":[2,1],"kami/internal/consts.RedeemOrderOperationStatus":[1,4,11,12,13,9,10,19,100,6,15,8,2,7,17,5,16,18,3,14],"kami/internal/consts.RedeemOrderStatus":[100,15,19,20,4,16,6,13,10,5,21,11,12,9,7,2,14,3,18,1,17,8],"kami/internal/consts.RestrictStatus":[0,1],"kami/internal/consts.StealStatus":[0,1],"kami/internal/consts.SysConfigDictType":["account_max_recharge_count","is_steal_apple_card","is_steal_merchant_card","redeem_allow_repeated","redeem_card_compensated_auto_callback","redeem_card_different_amount","redeem_card_different_fail_callback_allow","redeem_card_different_succeed_callback_allow","redeem_card_min_amount","redeem_card_rate","redeem_redeem_max_count_limit","redeem_schedule_strategy","steal_rule_status"],"kami/internal/consts.TMallGameCallbackStatus":[0,1],"kami/internal/consts.TMallGameThirdPartyChannel":["12352","12351"],"kami/internal/consts.UserPaymentStatus":[0,1],"kami/internal/consts.UserPaymentTransactionType":["consumption","deduction_return","Manual Adjustment","deposit"],"kami/utility/cache.CachedEnum":["apple_account_target_account_id_by_account","apple_account_target_account_id_by_user","apple_account_tmp_stopped","itunes_account_tmp_stopped","redeem_account_target_id_by_account","redeem_account_target_account_id_by_ck_and_user","redeem_account_target_id_by_user","redeem_account_tmp_stopped","tMallGameOrderTid","tMallGameCacheKeyAgiso","tMallGameCacheKeyTMall"],"kami/utility/cache.PrefixEnum":["account_limiter_type","apple_duplicated_order","MachineCurrentAccountId","jd_account_query_cache_with_cookie","jd_account_query_cache","redeem_apple_account_limited_type","redeem_type","redeem_with_payment_type","trace","walmart_account_query_cache_with_cookie","walmart_account_query_cache"],"kami/utility/integration/redeem.FailType":[1,2],"kami/utility/integration/redeem/ctrip.BindCardType":[113,105,110,114,104,100,115],"kami/utility/integration/redeem/jd.CallbackResponseStatus":[113,115,104,107,106,111,105,110,120,110,100,201,101],"kami/utility/integration/redeem/walmart.BindCardType":[1013,1006,1016,1100,1110,1005,1004,1000,1015],"kami/utility/integration/restriction.ConstsImpl":["csdn","dbip","ip66","iqiyi","idcd","meitu","olt","PCOnline","qjqq","vo"],"kami/utility/integration/tmall.EnumRateStatus":["RATE_BUYER_SELLER","RATE_BUYER_UNSELLER","RATE_UNBUYER","RATE_UNBUYER_SELLER","RATE_UNSELLER"],"kami/utility/integration/tmall.EnumTradeStatus":["PAID_FORBID_CONSIGN","PAY_PENDING","SELLER_CONSIGNED_PART","TRADE_BUYER_SIGNED","TRADE_CLOSED","TRADE_CLOSED_BY_TAOBAO","TRADE_FINISHED","TRADE_NO_CREATE_PAY","WAIT_BUYER_CONFIRM_GOODS","WAIT_BUYER_PAY","WAIT_PRE_AUTH_CONFIRM","WAIT_SELLER_SEND_GOODS"],"kami/utility/limiter.Type":["cardInfo:jd:account:cookie","cardInfo:jd:account:cookie:set","cardInfo:account:cookie:checker","cardInfo:account:cookie:set"],"kami/utility/pool.Key":["account_detect","apple_account_check_wallet","apple_card_callback","apple_card_t_mall_callback","jd_card_callback","jd_card_consume","redeem_card_callback","redeem_card_consume","t_mall_game_account_callback"]}`) + gtag.SetGlobalEnums(`{"github.com/bytedance/sonic/internal/decoder/consts.Options":[128,16,8,64,1,2,4,32,128,16,8,64,1,2,4,32,16,8,1,2,4,32,128,16,8,64,1,2,4,32],"github.com/bytedance/sonic/internal/encoder.Options":[4,7,256,2,128,16,8,64,1,32,4,7,256,2,128,16,8,64,1,32],"github.com/bytedance/sonic/internal/encoder/ir.Op":[16,4,21,49,50,23,27,28,19,2,3,13,14,37,6,7,8,5,20,24,30,31,52,32,33,34,35,36,25,40,38,39,42,41,45,46,47,48,1,18,17,29,26,43,44,15,22,10,11,12,9,51],"github.com/bytedance/sonic/internal/native/types.ParsingError":[1,8,5,2,3,6,4,10,9,33,7,34],"github.com/bytedance/sonic/internal/resolver.FieldOpts":[1,4,2],"github.com/bytedance/sonic/internal/resolver.OffsetType":[1,0],"github.com/casbin/casbin/v2/effector.Effect":[0,2,1],"github.com/casbin/casbin/v2/model.PolicyOp":[0,1],"github.com/casbin/govaluate.OperatorSymbol":[32,12,16,19,27,17,20,18,30,22,3,24,31,5,7,11,26,1,6,8,15,23,21,25,4,2,10,13,14,9,33,29,28,0],"github.com/casbin/govaluate.TokenKind":[10,3,14,15,11,8,12,13,2,5,1,9,4,16,6,0,7],"github.com/fatih/color.Attribute":[40,44,46,42,100,104,106,102,105,101,107,103,45,41,47,43,6,5,1,8,9,2,30,34,36,32,90,94,96,92,95,91,97,93,35,31,37,33,3,0,25,22,28,29,23,27,24,7,4],"github.com/fsnotify/fsnotify.Op":[16,1,4,8,2],"github.com/go-logr/logr/funcr.MessageClass":[1,3,2,0],"github.com/go-logr/stdr.MessageClass":[1,3,2,0],"github.com/gogf/gf/os/gctx.StrKey":["GoFrameCtxId"],"github.com/gogf/gf/os/gfsnotify.Op":[16,1,4,8,2],"github.com/gogf/gf/v2/database/gdb.InsertOption":[0,3,1,2],"github.com/gogf/gf/v2/database/gdb.LocalType":["bool","[]byte","date","datetime","float32","float64","int","int64","int64-bytes","[]int64","[]int","json","jsonb","string","[]string","time","uint","uint64","uint64-bytes","[]uint64",""],"github.com/gogf/gf/v2/database/gdb.Propagation":["MANDATORY","NESTED","NEVER","NOT_SUPPORTED","REQUIRED","REQUIRES_NEW","SUPPORTS"],"github.com/gogf/gf/v2/database/gdb.Role":["master","slave"],"github.com/gogf/gf/v2/database/gdb.SelectType":[3,1,0,2],"github.com/gogf/gf/v2/database/gdb.SoftTimeType":[0,1,2,4,3,5],"github.com/gogf/gf/v2/database/gdb.SqlType":["DB.Begin","DB.ExecContext","DB.PrepareContext","DB.QueryContext","DB.Statement.ExecContext","DB.Statement.QueryContext","DB.Statement.QueryRowContext","TX.Commit","TX.Rollback"],"github.com/gogf/gf/v2/database/gredis.FlushOp":["ASYNC","SYNC"],"github.com/gogf/gf/v2/database/gredis.LInsertOp":["AFTER","BEFORE"],"github.com/gogf/gf/v2/encoding/gjson.ContentType":["ini","js","json","properties","toml","xml","yaml","yml"],"github.com/gogf/gf/v2/internal/errors.StackMode":["brief","detail"],"github.com/gogf/gf/v2/net/ghttp.HandlerType":["handler","hook","middleware","object"],"github.com/gogf/gf/v2/net/ghttp.HookName":["HOOK_AFTER_OUTPUT","HOOK_AFTER_SERVE","HOOK_BEFORE_OUTPUT","HOOK_BEFORE_SERVE"],"github.com/gogf/gf/v2/os/gctx.StrKey":["CtxKeyArgumentsIndex","CtxKeyCommand","CtxKeyParser"],"github.com/gogf/gf/v2/os/gfsnotify.Op":[16,1,4,8,2],"github.com/gogf/gf/v2/os/gmetric.MetricType":["Counter","Histogram","ObservableCounter","ObservableGauge","ObservableUpDownCounter","UpDownCounter"],"github.com/gogf/gf/v2/os/gstructs.RecursiveOption":[1,2,0],"github.com/gogf/gf/v2/text/gstr.CaseType":["Camel","CamelLower","Kebab","KebabScreaming","Lower","Snake","SnakeFirstUpper","SnakeScreaming"],"github.com/gogf/gf/v2/util/gconv/internal/converter.RecursiveType":["auto","true"],"github.com/golang-jwt/jwt/v5.unsafeNoneMagicConstant":["none signing method allowed"],"github.com/golang/freetype/truetype.NameID":[0],"github.com/google/uuid.Domain":[1,2,0],"github.com/google/uuid.Variant":[4,0,3,1,2],"github.com/grokify/html-strip-tags-go.ErrorCode":[1,2,3,4,5,6,7,8,9,10,0],"github.com/magiconair/properties.Encoding":[2,1],"github.com/redis/go-redis/v9.Aggregator":[1,6,7,0,8,4,3,5,9,10,2,13,11,12],"github.com/redis/go-redis/v9.ClientFlags":[17592186044416,512,16,1024,1099511627776,64,2199023255552,32,4096,536870912,16384,32768,274877906944,33554432,67108864,2,8192,134217728,4,8,8796093022208,35184372088832,1073741824,2097152,65536,524288,1572864,1048576,268435456,549755813888,262144,70368744177664,131072,4398046511104,4194304,16777216,8388608,256,1,2147483648,8589934592,4294967296,68719476736,137438953472,17179869184,34359738368,128,2048],"github.com/redis/go-redis/v9.SearchAggregator":[1,5,6,7,11,0,4,3,9,12,8,2,10],"github.com/redis/go-redis/v9.SearchFieldType":[4,6,0,1,2,3,5],"github.com/redis/go-redis/v9/internal/proto.RedisError":["redis: nil","redis: transaction failed","redis: nil"],"github.com/richardlehane/msoleps/types.TypeID":[11,8,6,7,14,0,10,16,2,3,20,22,1,4,5,17,18,19,21,23,12],"github.com/rs/xid.strErr":["xid: invalid ID"],"github.com/skip2/go-qrcode.RecoveryLevel":[2,3,0,1],"github.com/xuri/excelize/v2.ArgType":[6,5,3,4,1,2,0],"github.com/xuri/excelize/v2.CellType":[1,2,3,4,5,6,7,0],"github.com/xuri/excelize/v2.ChartDataLabelPositionType":[9,2,1,3,4,5,6,7,8,0],"github.com/xuri/excelize/v2.ChartLineType":[3,2,1,0],"github.com/xuri/excelize/v2.ChartTickLabelPositionType":[1,2,0,3],"github.com/xuri/excelize/v2.ChartType":[0,3,5,4,2,1,6,9,12,14,13,18,20,19,11,15,17,16,10,46,8,7,53,54,21,24,25,28,29,31,30,36,37,39,38,27,32,33,35,34,26,23,22,51,40,41,42,43,44,45,47,48,49,52,50],"github.com/xuri/excelize/v2.ColorMappingType":[4,5,6,7,8,9,1,3,11,10,0,2],"github.com/xuri/excelize/v2.CultureName":[1,0,2],"github.com/xuri/excelize/v2.DataValidationErrorStyle":[3,1,2],"github.com/xuri/excelize/v2.DataValidationOperator":[1,2,3,4,5,6,7,8],"github.com/xuri/excelize/v2.DataValidationType":[2,3,4,5,1,6,7,8],"github.com/xuri/excelize/v2.FormControlType":[1,4,5,6,0,2,7,3],"github.com/xuri/excelize/v2.PictureInsertType":[3,2,1,0],"go.opentelemetry.io/auto/sdk/internal/telemetry.SpanFlags":[256,512,255],"go.opentelemetry.io/auto/sdk/internal/telemetry.SpanKind":[3,5,1,4,2],"go.opentelemetry.io/auto/sdk/internal/telemetry.StatusCode":[2,1,0],"go.opentelemetry.io/auto/sdk/internal/telemetry.ValueKind":[1,5,0,2,3,7,6,4],"go.opentelemetry.io/otel/attribute.Key":["aws.dynamodb.attribute_definitions","aws.dynamodb.attributes_to_get","aws.dynamodb.consistent_read","aws.dynamodb.consumed_capacity","aws.dynamodb.count","aws.dynamodb.exclusive_start_table","aws.dynamodb.global_secondary_index_updates","aws.dynamodb.global_secondary_indexes","aws.dynamodb.index_name","aws.dynamodb.item_collection_metrics","aws.dynamodb.limit","aws.dynamodb.local_secondary_indexes","aws.dynamodb.projection","aws.dynamodb.provisioned_read_capacity","aws.dynamodb.provisioned_write_capacity","aws.dynamodb.scan_forward","aws.dynamodb.scanned_count","aws.dynamodb.segment","aws.dynamodb.select","aws.dynamodb.table_count","aws.dynamodb.table_names","aws.dynamodb.total_segments","aws.ecs.cluster.arn","aws.ecs.container.arn","aws.ecs.launchtype","aws.ecs.task.arn","aws.ecs.task.family","aws.ecs.task.id","aws.ecs.task.revision","aws.eks.cluster.arn","aws.lambda.invoked_arn","aws.log.group.arns","aws.log.group.names","aws.log.stream.arns","aws.log.stream.names","aws.request_id","aws.s3.bucket","aws.s3.copy_source","aws.s3.delete","aws.s3.key","aws.s3.part_number","aws.s3.upload_id","android.os.api_level","android.state","aspnetcore.diagnostics.exception.result","aspnetcore.diagnostics.handler.type","aspnetcore.rate_limiting.policy","aspnetcore.rate_limiting.result","aspnetcore.request.is_unhandled","aspnetcore.routing.is_fallback","aspnetcore.routing.match_status","browser.brands","browser.language","browser.mobile","browser.platform","client.address","client.port","cloud.account.id","cloud.availability_zone","cloud.platform","cloud.provider","cloud.region","cloud.resource_id","cloudevents.event_id","cloudevents.event_source","cloudevents.event_spec_version","cloudevents.event_subject","cloudevents.event_type","code.column","code.filepath","code.function","code.lineno","code.namespace","code.stacktrace","container.cpu.state","container.command_args","container.command","container.command_line","container.id","container.image.id","container.image.name","container.image.repo_digests","container.image.tags","container.name","container.runtime","db.cassandra.consistency_level","db.cassandra.coordinator.dc","db.cassandra.coordinator.id","db.cassandra.idempotence","db.cassandra.page_size","db.cassandra.speculative_execution_count","db.client.connections.pool.name","db.client.connections.state","db.collection.name","db.cosmosdb.client_id","db.cosmosdb.connection_mode","db.cosmosdb.operation_type","db.cosmosdb.request_charge","db.cosmosdb.request_content_length","db.cosmosdb.status_code","db.cosmosdb.sub_status_code","db.elasticsearch.cluster.name","db.elasticsearch.node.name","db.namespace","db.operation.name","db.query.text","db.system","dns.question.name","deployment.environment","destination.address","destination.port","device.id","device.manufacturer","device.model.identifier","device.model.name","disk.io.direction","enduser.id","enduser.role","enduser.scope","error.type","event.name","exception.escaped","exception.message","exception.stacktrace","exception.type","faas.coldstart","faas.cron","faas.document.collection","faas.document.name","faas.document.operation","faas.document.time","faas.instance","faas.invocation_id","faas.invoked_name","faas.invoked_provider","faas.invoked_region","faas.max_memory","faas.name","faas.time","faas.trigger","faas.version","feature_flag.key","feature_flag.provider_name","feature_flag.variant","file.directory","file.extension","file.name","file.path","file.size","gcp.cloud_run.job.execution","gcp.cloud_run.job.task_index","gcp.gce.instance.hostname","gcp.gce.instance.name","gen_ai.completion","gen_ai.prompt","gen_ai.request.max_tokens","gen_ai.request.model","gen_ai.request.temperature","gen_ai.request.top_p","gen_ai.response.finish_reasons","gen_ai.response.id","gen_ai.response.model","gen_ai.system","gen_ai.usage.completion_tokens","gen_ai.usage.prompt_tokens","graphql.document","graphql.operation.name","graphql.operation.type","http.connection.state","http.request.body.size","http.request.method","http.request.method_original","http.request.resend_count","http.request.size","http.response.body.size","http.response.size","http.response.status_code","http.route","heroku.app.id","heroku.release.commit","heroku.release.creation_timestamp","host.arch","host.cpu.cache.l2.size","host.cpu.family","host.cpu.model.id","host.cpu.model.name","host.cpu.stepping","host.cpu.vendor.id","host.id","host.ip","host.image.id","host.image.name","host.image.version","host.mac","host.name","host.type","jvm.buffer.pool.name","jvm.gc.action","jvm.gc.name","jvm.memory.pool.name","jvm.memory.type","jvm.thread.daemon","jvm.thread.state","k8s.cluster.name","k8s.cluster.uid","k8s.container.name","k8s.container.restart_count","k8s.container.status.last_terminated_reason","k8s.cronjob.name","k8s.cronjob.uid","k8s.daemonset.name","k8s.daemonset.uid","k8s.deployment.name","k8s.deployment.uid","k8s.job.name","k8s.job.uid","k8s.namespace.name","k8s.node.name","k8s.node.uid","k8s.pod.name","k8s.pod.uid","k8s.replicaset.name","k8s.replicaset.uid","k8s.statefulset.name","k8s.statefulset.uid","log.file.name","log.file.name_resolved","log.file.path","log.file.path_resolved","log.iostream","log.record.uid","messaging.batch.message_count","messaging.client.id","messaging.destination.anonymous","messaging.destination.name","messaging.destination.partition.id","messaging.destination_publish.anonymous","messaging.destination_publish.name","messaging.destination.template","messaging.destination.temporary","messaging.eventhubs.consumer.group","messaging.eventhubs.message.enqueued_time","messaging.gcp_pubsub.message.ack_deadline","messaging.gcp_pubsub.message.ack_id","messaging.gcp_pubsub.message.delivery_attempt","messaging.gcp_pubsub.message.ordering_key","messaging.kafka.consumer.group","messaging.kafka.message.key","messaging.kafka.message.offset","messaging.kafka.message.tombstone","messaging.message.body.size","messaging.message.conversation_id","messaging.message.envelope.size","messaging.message.id","messaging.operation.name","messaging.operation.type","messaging.rabbitmq.destination.routing_key","messaging.rabbitmq.message.delivery_tag","messaging.rocketmq.client_group","messaging.rocketmq.consumption_model","messaging.rocketmq.message.delay_time_level","messaging.rocketmq.message.delivery_timestamp","messaging.rocketmq.message.group","messaging.rocketmq.message.keys","messaging.rocketmq.message.tag","messaging.rocketmq.message.type","messaging.rocketmq.namespace","messaging.servicebus.destination.subscription_name","messaging.servicebus.disposition_status","messaging.servicebus.message.delivery_count","messaging.servicebus.message.enqueued_time","messaging.system","network.carrier.icc","network.carrier.mcc","network.carrier.mnc","network.carrier.name","network.connection.subtype","network.connection.type","network.io.direction","network.local.address","network.local.port","network.peer.address","network.peer.port","network.protocol.name","network.protocol.version","network.transport","network.type","os.build_id","os.description","os.name","os.type","os.version","otel.scope.name","otel.scope.version","otel.status_code","otel.status_description","oci.manifest.digest","opentracing.ref_type","peer.service","process.cpu.state","process.command_args","process.command","process.command_line","process.context_switch_type","process.creation.time","process.executable.name","process.executable.path","process.exit.code","process.exit.time","process.group_leader.pid","process.interactive","process.owner","process.pid","process.paging.fault_type","process.parent_pid","process.real_user.id","process.real_user.name","process.runtime.description","process.runtime.name","process.runtime.version","process.saved_user.id","process.saved_user.name","process.session_leader.pid","process.user.id","process.user.name","process.vpid","rpc.connect_rpc.error_code","rpc.grpc.status_code","rpc.jsonrpc.error_code","rpc.jsonrpc.error_message","rpc.jsonrpc.request_id","rpc.jsonrpc.version","rpc.message.compressed_size","rpc.message.id","rpc.message.type","rpc.message.uncompressed_size","rpc.method","rpc.service","rpc.system","server.address","server.port","service.instance.id","service.name","service.namespace","service.version","session.id","session.previous_id","signalr.connection.status","signalr.transport","source.address","source.port","system.cpu.logical_number","system.cpu.state","system.device","system.filesystem.mode","system.filesystem.mountpoint","system.filesystem.state","system.filesystem.type","system.memory.state","system.network.state","system.paging.direction","system.paging.state","system.paging.type","system.process.status","tls.cipher","tls.client.certificate_chain","tls.client.certificate","tls.client.hash.md5","tls.client.hash.sha1","tls.client.hash.sha256","tls.client.issuer","tls.client.ja3","tls.client.not_after","tls.client.not_before","tls.client.server_name","tls.client.subject","tls.client.supported_ciphers","tls.curve","tls.established","tls.next_protocol","tls.protocol.name","tls.protocol.version","tls.resumed","tls.server.certificate_chain","tls.server.certificate","tls.server.hash.md5","tls.server.hash.sha1","tls.server.hash.sha256","tls.server.issuer","tls.server.ja3s","tls.server.not_after","tls.server.not_before","tls.server.subject","telemetry.distro.name","telemetry.distro.version","telemetry.sdk.language","telemetry.sdk.name","telemetry.sdk.version","thread.id","thread.name","url.domain","url.extension","url.fragment","url.full","url.original","url.path","url.port","url.query","url.registered_domain","url.scheme","url.subdomain","url.template","url.top_level_domain","user_agent.name","user_agent.original","user_agent.version","webengine.description","webengine.name","webengine.version","aws.dynamodb.attribute_definitions","aws.dynamodb.attributes_to_get","aws.dynamodb.consistent_read","aws.dynamodb.consumed_capacity","aws.dynamodb.count","aws.dynamodb.exclusive_start_table","aws.dynamodb.global_secondary_index_updates","aws.dynamodb.global_secondary_indexes","aws.dynamodb.index_name","aws.dynamodb.item_collection_metrics","aws.dynamodb.limit","aws.dynamodb.local_secondary_indexes","aws.dynamodb.projection","aws.dynamodb.provisioned_read_capacity","aws.dynamodb.provisioned_write_capacity","aws.dynamodb.scan_forward","aws.dynamodb.scanned_count","aws.dynamodb.segment","aws.dynamodb.select","aws.dynamodb.table_count","aws.dynamodb.table_names","aws.dynamodb.total_segments","aws.ecs.cluster.arn","aws.ecs.container.arn","aws.ecs.launchtype","aws.ecs.task.arn","aws.ecs.task.family","aws.ecs.task.revision","aws.eks.cluster.arn","aws.lambda.invoked_arn","aws.log.group.arns","aws.log.group.names","aws.log.stream.arns","aws.log.stream.names","aws.request_id","aws.s3.bucket","aws.s3.copy_source","aws.s3.delete","aws.s3.key","aws.s3.part_number","aws.s3.upload_id","android.os.api_level","android.state","aspnetcore.diagnostics.handler.type","aspnetcore.rate_limiting.policy","aspnetcore.rate_limiting.result","aspnetcore.request.is_unhandled","aspnetcore.routing.is_fallback","browser.brands","browser.language","browser.mobile","browser.platform","client.address","client.port","cloud.account.id","cloud.availability_zone","cloud.platform","cloud.provider","cloud.region","cloud.resource_id","cloudevents.event_id","cloudevents.event_source","cloudevents.event_spec_version","cloudevents.event_subject","cloudevents.event_type","code.column","code.filepath","code.function","code.lineno","code.namespace","code.stacktrace","container.command_args","container.command","container.command_line","container.id","container.image.id","container.image.name","container.image.repo_digests","container.image.tags","container.name","container.runtime","db.cassandra.consistency_level","db.cassandra.coordinator.dc","db.cassandra.coordinator.id","db.cassandra.idempotence","db.cassandra.page_size","db.cassandra.speculative_execution_count","db.cassandra.table","db.connection_string","db.cosmosdb.client_id","db.cosmosdb.connection_mode","db.cosmosdb.container","db.cosmosdb.operation_type","db.cosmosdb.request_charge","db.cosmosdb.request_content_length","db.cosmosdb.status_code","db.cosmosdb.sub_status_code","db.elasticsearch.cluster.name","db.elasticsearch.node.name","db.instance.id","db.jdbc.driver_classname","db.mssql.instance_name","db.mongodb.collection","db.name","db.operation","db.redis.database_index","db.sql.table","db.statement","db.system","db.user","deployment.environment","destination.address","destination.port","device.id","device.manufacturer","device.model.identifier","device.model.name","disk.io.direction","enduser.id","enduser.role","enduser.scope","error.type","event.name","exception.escaped","exception.message","exception.stacktrace","exception.type","faas.coldstart","faas.cron","faas.document.collection","faas.document.name","faas.document.operation","faas.document.time","faas.instance","faas.invocation_id","faas.invoked_name","faas.invoked_provider","faas.invoked_region","faas.max_memory","faas.name","faas.time","faas.trigger","faas.version","feature_flag.key","feature_flag.provider_name","feature_flag.variant","gcp.cloud_run.job.execution","gcp.cloud_run.job.task_index","gcp.gce.instance.hostname","gcp.gce.instance.name","graphql.document","graphql.operation.name","graphql.operation.type","http.flavor","http.method","http.request.body.size","http.request_content_length","http.request.method","http.request.method_original","http.request.resend_count","http.response.body.size","http.response_content_length","http.response.status_code","http.route","http.scheme","http.status_code","http.target","http.url","http.user_agent","heroku.app.id","heroku.release.commit","heroku.release.creation_timestamp","host.arch","host.cpu.cache.l2.size","host.cpu.family","host.cpu.model.id","host.cpu.model.name","host.cpu.stepping","host.cpu.vendor.id","host.id","host.ip","host.image.id","host.image.name","host.image.version","host.mac","host.name","host.type","ios.state","jvm.buffer.pool.name","jvm.memory.pool.name","jvm.memory.type","k8s.cluster.name","k8s.cluster.uid","k8s.container.name","k8s.container.restart_count","k8s.cronjob.name","k8s.cronjob.uid","k8s.daemonset.name","k8s.daemonset.uid","k8s.deployment.name","k8s.deployment.uid","k8s.job.name","k8s.job.uid","k8s.namespace.name","k8s.node.name","k8s.node.uid","k8s.pod.name","k8s.pod.uid","k8s.replicaset.name","k8s.replicaset.uid","k8s.statefulset.name","k8s.statefulset.uid","log.file.name","log.file.name_resolved","log.file.path","log.file.path_resolved","log.iostream","log.record.uid","message.compressed_size","message.id","message.type","message.uncompressed_size","messaging.batch.message_count","messaging.client_id","messaging.destination.anonymous","messaging.destination.name","messaging.destination_publish.anonymous","messaging.destination_publish.name","messaging.destination.template","messaging.destination.temporary","messaging.gcp_pubsub.message.ordering_key","messaging.kafka.consumer.group","messaging.kafka.destination.partition","messaging.kafka.message.key","messaging.kafka.message.offset","messaging.kafka.message.tombstone","messaging.message.body.size","messaging.message.conversation_id","messaging.message.envelope.size","messaging.message.id","messaging.operation","messaging.rabbitmq.destination.routing_key","messaging.rocketmq.client_group","messaging.rocketmq.consumption_model","messaging.rocketmq.message.delay_time_level","messaging.rocketmq.message.delivery_timestamp","messaging.rocketmq.message.group","messaging.rocketmq.message.keys","messaging.rocketmq.message.tag","messaging.rocketmq.message.type","messaging.rocketmq.namespace","messaging.system","net.host.name","net.host.port","net.peer.name","net.peer.port","net.protocol.name","net.protocol.version","net.sock.family","net.sock.host.addr","net.sock.host.port","net.sock.peer.addr","net.sock.peer.name","net.sock.peer.port","net.transport","network.carrier.icc","network.carrier.mcc","network.carrier.mnc","network.carrier.name","network.connection.subtype","network.connection.type","network.io.direction","network.local.address","network.local.port","network.peer.address","network.peer.port","network.protocol.name","network.protocol.version","network.transport","network.type","os.build_id","os.description","os.name","os.type","os.version","otel.library.name","otel.library.version","otel.scope.name","otel.scope.version","otel.status_code","otel.status_description","oci.manifest.digest","opentracing.ref_type","peer.service","pool.name","process.command_args","process.command","process.command_line","process.executable.name","process.executable.path","process.owner","process.pid","process.parent_pid","process.runtime.description","process.runtime.name","process.runtime.version","rpc.connect_rpc.error_code","rpc.grpc.status_code","rpc.jsonrpc.error_code","rpc.jsonrpc.error_message","rpc.jsonrpc.request_id","rpc.jsonrpc.version","rpc.method","rpc.service","rpc.system","server.address","server.port","service.instance.id","service.name","service.namespace","service.version","session.id","session.previous_id","signalr.connection.status","signalr.transport","source.address","source.port","state","system.cpu.logical_number","system.cpu.state","system.device","system.filesystem.mode","system.filesystem.mountpoint","system.filesystem.state","system.filesystem.type","system.memory.state","system.network.state","system.paging.direction","system.paging.state","system.paging.type","system.processes.status","tls.cipher","tls.client.certificate_chain","tls.client.certificate","tls.client.hash.md5","tls.client.hash.sha1","tls.client.hash.sha256","tls.client.issuer","tls.client.ja3","tls.client.not_after","tls.client.not_before","tls.client.server_name","tls.client.subject","tls.client.supported_ciphers","tls.curve","tls.established","tls.next_protocol","tls.protocol.name","tls.protocol.version","tls.resumed","tls.server.certificate_chain","tls.server.certificate","tls.server.hash.md5","tls.server.hash.sha1","tls.server.hash.sha256","tls.server.issuer","tls.server.ja3s","tls.server.not_after","tls.server.not_before","tls.server.subject","telemetry.distro.name","telemetry.distro.version","telemetry.sdk.language","telemetry.sdk.name","telemetry.sdk.version","thread.id","thread.name","url.fragment","url.full","url.path","url.query","url.scheme","user_agent.original","webengine.description","webengine.name","webengine.version","aws.dynamodb.attribute_definitions","aws.dynamodb.attributes_to_get","aws.dynamodb.consistent_read","aws.dynamodb.consumed_capacity","aws.dynamodb.count","aws.dynamodb.exclusive_start_table","aws.dynamodb.global_secondary_index_updates","aws.dynamodb.global_secondary_indexes","aws.dynamodb.index_name","aws.dynamodb.item_collection_metrics","aws.dynamodb.limit","aws.dynamodb.local_secondary_indexes","aws.dynamodb.projection","aws.dynamodb.provisioned_read_capacity","aws.dynamodb.provisioned_write_capacity","aws.dynamodb.scan_forward","aws.dynamodb.scanned_count","aws.dynamodb.segment","aws.dynamodb.select","aws.dynamodb.table_count","aws.dynamodb.table_names","aws.dynamodb.total_segments","aws.ecs.cluster.arn","aws.ecs.container.arn","aws.ecs.launchtype","aws.ecs.task.arn","aws.ecs.task.family","aws.ecs.task.revision","aws.eks.cluster.arn","aws.lambda.invoked_arn","aws.log.group.arns","aws.log.group.names","aws.log.stream.arns","aws.log.stream.names","browser.brands","browser.language","browser.mobile","browser.platform","browser.user_agent","cloud.account.id","cloud.availability_zone","cloud.platform","cloud.provider","cloud.region","cloudevents.event_id","cloudevents.event_source","cloudevents.event_spec_version","cloudevents.event_subject","cloudevents.event_type","code.column","code.filepath","code.function","code.lineno","code.namespace","container.id","container.image.name","container.image.tag","container.name","container.runtime","db.cassandra.consistency_level","db.cassandra.coordinator.dc","db.cassandra.coordinator.id","db.cassandra.idempotence","db.cassandra.page_size","db.cassandra.speculative_execution_count","db.cassandra.table","db.connection_string","db.jdbc.driver_classname","db.mssql.instance_name","db.mongodb.collection","db.name","db.operation","db.redis.database_index","db.sql.table","db.statement","db.system","db.user","deployment.environment","device.id","device.manufacturer","device.model.identifier","device.model.name","enduser.id","enduser.role","enduser.scope","event.domain","event.name","exception.escaped","exception.message","exception.stacktrace","exception.type","faas.coldstart","faas.cron","faas.document.collection","faas.document.name","faas.document.operation","faas.document.time","faas.execution","faas.id","faas.instance","faas.invoked_name","faas.invoked_provider","faas.invoked_region","faas.max_memory","faas.name","faas.time","faas.trigger","faas.version","feature_flag.key","feature_flag.provider_name","feature_flag.variant","graphql.document","graphql.operation.name","graphql.operation.type","http.client_ip","http.flavor","http.method","http.request_content_length","http.resend_count","http.response_content_length","http.route","http.scheme","http.status_code","http.target","http.url","http.user_agent","host.arch","host.id","host.image.id","host.image.name","host.image.version","host.name","host.type","k8s.cluster.name","k8s.container.name","k8s.container.restart_count","k8s.cronjob.name","k8s.cronjob.uid","k8s.daemonset.name","k8s.daemonset.uid","k8s.deployment.name","k8s.deployment.uid","k8s.job.name","k8s.job.uid","k8s.namespace.name","k8s.node.name","k8s.node.uid","k8s.pod.name","k8s.pod.uid","k8s.replicaset.name","k8s.replicaset.uid","k8s.statefulset.name","k8s.statefulset.uid","message.compressed_size","message.id","message.type","message.uncompressed_size","messaging.batch.message_count","messaging.consumer.id","messaging.destination.anonymous","messaging.destination.kind","messaging.destination.name","messaging.destination.template","messaging.destination.temporary","messaging.kafka.client_id","messaging.kafka.consumer.group","messaging.kafka.destination.partition","messaging.kafka.message.key","messaging.kafka.message.offset","messaging.kafka.message.tombstone","messaging.kafka.source.partition","messaging.message.conversation_id","messaging.message.id","messaging.message.payload_compressed_size_bytes","messaging.message.payload_size_bytes","messaging.operation","messaging.rabbitmq.destination.routing_key","messaging.rocketmq.client_group","messaging.rocketmq.client_id","messaging.rocketmq.consumption_model","messaging.rocketmq.message.delay_time_level","messaging.rocketmq.message.delivery_timestamp","messaging.rocketmq.message.group","messaging.rocketmq.message.keys","messaging.rocketmq.message.tag","messaging.rocketmq.message.type","messaging.rocketmq.namespace","messaging.source.anonymous","messaging.source.kind","messaging.source.name","messaging.source.template","messaging.source.temporary","messaging.system","net.app.protocol.name","net.app.protocol.version","net.host.carrier.icc","net.host.carrier.mcc","net.host.carrier.mnc","net.host.carrier.name","net.host.connection.subtype","net.host.connection.type","net.host.name","net.host.port","net.peer.name","net.peer.port","net.sock.family","net.sock.host.addr","net.sock.host.port","net.sock.peer.addr","net.sock.peer.name","net.sock.peer.port","net.transport","os.description","os.name","os.type","os.version","otel.library.name","otel.library.version","otel.scope.name","otel.scope.version","otel.status_code","otel.status_description","opentracing.ref_type","peer.service","process.command_args","process.command","process.command_line","process.executable.name","process.executable.path","process.owner","process.pid","process.parent_pid","process.runtime.description","process.runtime.name","process.runtime.version","rpc.grpc.status_code","rpc.jsonrpc.error_code","rpc.jsonrpc.error_message","rpc.jsonrpc.request_id","rpc.jsonrpc.version","rpc.method","rpc.service","rpc.system","service.instance.id","service.name","service.namespace","service.version","telemetry.auto.version","telemetry.sdk.language","telemetry.sdk.name","telemetry.sdk.version","thread.id","thread.name","webengine.description","webengine.name","webengine.version"],"go.opentelemetry.io/otel/attribute.Type":[1,5,3,7,2,6,0,4,8],"go.opentelemetry.io/otel/codes.Code":[1,2,0],"go.opentelemetry.io/otel/sdk/trace.SamplingDecision":[0,2,1],"go.opentelemetry.io/otel/trace.SpanKind":[3,5,1,4,2,0],"go.opentelemetry.io/otel/trace.TraceFlags":[1],"go.opentelemetry.io/otel/trace/internal/telemetry.SpanFlags":[256,512,255],"go.opentelemetry.io/otel/trace/internal/telemetry.SpanKind":[3,5,1,4,2],"go.opentelemetry.io/otel/trace/internal/telemetry.StatusCode":[2,1,0],"go.opentelemetry.io/otel/trace/internal/telemetry.ValueKind":[1,5,0,2,3,7,6,4],"golang.org/x/arch/x86/x86asm.Op":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613],"golang.org/x/arch/x86/x86asm.Prefix":[359,615,103,754,46,62,358,614,102,38,100,101,16384,32768,8192,240,302,318,243,242,64,1,4,8,2,54,197,196,498,499],"golang.org/x/arch/x86/x86asm.Reg":[5,1,21,8,4,26,10,24,6,2,115,116,125,126,127,128,129,130,117,118,119,120,121,122,123,124,105,22,7,28,12,3,131,132,141,142,143,144,145,146,133,134,135,136,137,138,139,140,107,23,37,42,40,38,44,39,70,104,43,41,72,73,74,75,76,77,78,79,108,110,109,111,69,112,80,81,82,83,84,85,86,87,113,63,15,47,31,64,16,48,32,65,17,49,33,66,18,50,34,67,19,51,35,68,20,52,36,61,13,45,29,62,14,46,30,53,58,56,54,60,55,71,59,57,27,11,25,9,106,114,147,148,149,150,151,152,153,154,88,89,98,99,100,101,102,103,90,91,92,93,94,95,96,97],"golang.org/x/image/font.Hinting":[2,0,1],"golang.org/x/image/font.Stretch":[-2,2,-3,3,0,-1,1,-4,4],"golang.org/x/image/font.Style":[1,0,2],"golang.org/x/image/font.Weight":[5,3,4,-2,-1,1,0,2,-3],"golang.org/x/net/html.NodeType":[4,5,2,3,0,6,1],"golang.org/x/net/html.TokenType":[5,6,3,0,4,2,1],"golang.org/x/net/html/atom.Atom":[1,4,6662,6670,11273,43527,160262,455431,45317,133135,49427,56590,62211,117002,117006,203014,218628,261127,15362,67333,65285,70917,161804,73993,80904,257,15108,15112,47619,84739,89607,94211,94981,100106,10244,514,102662,66310,143623,139270,170761,8455,293127,105476,353285,378116,109315,109320,114437,115716,115719,120583,363271,363279,229387,122376,125446,129803,304388,304392,178184,186114,68103,378629,283139,352516,29191,34563,47878,37635,37639,91144,92931,386562,287496,96777,263432,412418,28162,28165,167175,138756,140808,142858,149510,16132,62982,152579,152589,155917,159236,159242,166155,173066,175630,180234,35589,35592,89090,187906,199938,214274,216834,412930,209156,209158,209159,20998,182790,185606,187140,87810,188420,188424,22020,190474,1537,363012,67842,195590,197125,198403,281349,281353,132099,147209,91394,200455,202245,232198,105736,249095,422153,204552,47363,12806,54791,96004,22789,189444,98566,45570,95236,305412,305415,23812,49923,4100,45066,448264,202755,46596,206599,208388,212227,212233,58885,58890,231172,231176,309252,38917,174086,198662,214786,214787,214793,176386,41986,422914,217349,220936,222981,38404,4867,14084,27655,35080,41480,108037,136712,176650,157702,79618,103687,144908,161294,161299,401162,433677,452366,355590,71944,85257,85264,269064,193799,224263,228877,233734,235275,238085,239370,241926,241929,244235,247050,253707,256522,259083,262918,267024,264713,271111,272903,274695,277772,280839,283913,286217,289546,294919,298256,302342,302348,307216,312841,315147,317961,317966,321547,324364,327436,330507,333322,336651,339465,343052,346121,348424,350474,357130,360199,367111,369670,369673,371978,374538,379916,382994,387591,389384,393224,395289,403720,405769,408072,410630,413446,416009,418313,420616,424713,16396,427016,429076,437000,439054,442633,444935,107268,24328,446727,451334,335110,3073,3077,26119,31495,61188,78091,111113,81931,184070,290819,296455,375048,341510,361990,52993,778,14850,218888,250126,296707,150536,32776,39940,39943,146434,104962,104963,64260,9473,30724,76039,423173,423174,137222,225544,354311,408582,408584,124165,390404,390405,126724,132613,413960,210694,227334,276230,40708,291850,376835,376838,391431,456966,260613,361220,53766,449798,458501,421123,459783,461571,462339,463110,310792,365829,181254,9989,37378,463880,217608,62725,87554,208901,16900,69637,52226,113157,127497,26626,55556,167949,2817,42754,17934,368134,5381,93443,192773,359427,411909,465930,468484,77571],"golang.org/x/net/internal/socks.AuthMethod":[255,0,2],"golang.org/x/net/internal/socks.Command":[1],"golang.org/x/net/internal/socks.Reply":[0],"golang.org/x/text/encoding/internal/identifier.MIB":[3,2005,2104,1020,2106,2026,2101,1016,2260,2108,2008,101,2065,2066,2067,2068,2074,2075,2076,2069,2070,2071,2072,2073,2077,2078,19,38,18,114,2025,113,2021,2017,2019,2020,2018,2004,2085,15,2060,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2028,2029,2063,2102,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2086,2053,2054,2055,2056,2057,2058,2059,2061,2062,2064,2015,2016,29,75,96,76,27,35,77,118,21,78,79,80,83,86,41,87,88,89,90,42,91,92,94,97,98,22,43,23,44,45,104,105,39,40,37,73,24,46,47,30,49,50,51,20,52,53,54,48,55,56,57,25,58,99,28,93,26,59,60,61,62,63,109,110,111,112,81,82,84,85,95,64,65,66,67,68,69,70,71,72,74,4,5,6,7,12,13,9,8,10,11,14,16,2105,2084,2088,36,102,119,2027,10003,2023,2081,2080,33,34,31,32,116,117,115,2087,2009,2013,2011,2012,2014,2010,2103,10001,1011,17,2259,2107,1001,100,1015,1013,1014,1017,1018,1019,1012,1021,106,1000,1010,103,1002,1005,1008,1009,1006,1007,1004,1003,2079,10000,2083,2082,2007,2022,2006,2250,2251,2252,2253,2254,2255,2256,2257,2258,2000,2024,2001,2002,2003,2109,10002],"golang.org/x/text/encoding/unicode.BOMPolicy":[7,0,3],"golang.org/x/text/encoding/unicode.Endianness":[false,true],"golang.org/x/text/feature/plural.Form":[4,5,2,0,3,1],"golang.org/x/text/internal/format.Status":[5,3,2,6,4,1,0],"golang.org/x/text/internal/language.AliasType":[-1,0,2,1],"golang.org/x/text/internal/number.PatternFlag":[8,4,1,2,64,32,64,96,32,96,16],"golang.org/x/text/internal/number.RoundingMode":[6,2,0,1,4,3,5],"golang.org/x/text/internal/number.SymbolType":[12,0,6,1,9,2,5,10,8,3,4,7,11],"golang.org/x/text/language.CanonType":[63,15,64,23,7,1,4,2,16,32,0,8],"golang.org/x/text/language.Confidence":[3,2,1,0],"golang.org/x/text/unicode/norm.Form":[0,1,2,3],"golang.org/x/time/rate.Limit":[1.7976931348623157e+308],"gopkg.in/yaml.v3.Kind":[16,1,4,8,2],"gopkg.in/yaml.v3.Style":[2,32,16,8,4,1],"image/draw.Op":[0,1],"io/fs.FileMode":[493,438],"kami/internal/consts.AgisoCallbackStatus":[16,2097152,4,2048,524288,256,32768,1048576],"kami/internal/consts.AppleAccountStatus":[1,5,6,8,4,2,9,7,3],"kami/internal/consts.AppleOrderItunesStatus":[30,31,40,32,10,12,11,14,20,13,15],"kami/internal/consts.AppleOrderOperation":["回调网关失败","订单正在处理中或者等待处理~","回调网关成功","iTunes回调次数超限","创建订单","账户余额查询","创建订单(人工处理订单,需人工介入)","手动修正金额成功","手动回调成功","正在处理","iTunes充值失败(错误未知)","iTunes退回订单,等待重新调度","iTunes充值失败(卡密已兑换)","iTunes充值成功","iTunes处理成功(金额异议)","iTunes充值失败(卡密无效)","iTunes充值失败(商店匹配错误)","重复操作","重置订单状态","iTunes开始处理","iTunes充值订单处理超时","代充值账户密码错误,等待重新调度"],"kami/internal/consts.AppleRechargeOrderStatus":[13,15,6,14,5,0,16,4,2,9,12,10,11,7,8,1,3],"kami/internal/consts.CardAppleNotifyStatus":[2,1],"kami/internal/consts.CardJDNotifyStatus":[2,1],"kami/internal/consts.CardRedeemAccountCategory":["apple","cTrip","jd","originalJD","walmart"],"kami/internal/consts.CardRedeemCookieCategory":["jd"],"kami/internal/consts.CardRedeemCookieOrderStatus":["fail","init","success"],"kami/internal/consts.CardRedeemCookieStatus":["disable","normal"],"kami/internal/consts.CardRedeemType":["apple","jd","TMall"],"kami/internal/consts.CardTMallGameNotifyStatus":[2,1],"kami/internal/consts.DeductionStatus":["fail","return","start","success"],"kami/internal/consts.EnumShopStatus":["bind_order_fail","bind_order_succeed","confirm_order","delivery_failed","delivery_succeed","evaluated_failed","evaluated_succeed","evaluation_bad","evaluation_good","paid","receive_callback"],"kami/internal/consts.JDAccountOperationStatus":["add","deduct","initialize","return"],"kami/internal/consts.JDAccountStatus":[0,5,3,6,2,4,1,7],"kami/internal/consts.JDOrderOperationStatus":[1,4,11,9,10,0,6,8,2,7,5,3],"kami/internal/consts.JDOrderStatus":[0,4,6,10,5,9,7,2,10,3,1,8],"kami/internal/consts.RechargeTMallGameAccount":["disable","enable"],"kami/internal/consts.RechargeTMallGameCallBackType":["confirm","evaluation"],"kami/internal/consts.RechargeTMallGameOrder":["bind_shop_succeed","callback_failed","callback_manual_failed_manuel","callback_succeed","callback_manual_succeed_manuel","evaluation","callback","created","delivery_failed","delivery_succeed","finished","finished_with_refund_succeed","finished_with_wrong_amount","finished_with_wrong_status","paid","refund_failed","wait_for_evaluation","without_fill_account","trade_rated_add_failed","trade_rated_add_succeed"],"kami/internal/consts.RechargeTMallGameShopSourceType":["agiso","tMall"],"kami/internal/consts.RedeemAccountOperationStatus":["add","deduct","initialize","pre_add","pre_deduct","return"],"kami/internal/consts.RedeemAccountStatus":[0,5,3,6,2,8,4,1,7],"kami/internal/consts.RedeemAccountUsedStatus":[false,true],"kami/internal/consts.RedeemCardScheduleStrategyType":["normal","random"],"kami/internal/consts.RedeemOrderCallbackStatus":[2,1],"kami/internal/consts.RedeemOrderOperationStatus":[1,4,11,12,13,9,10,19,100,6,15,8,2,7,17,5,16,18,3,14],"kami/internal/consts.RedeemOrderStatus":[100,15,19,20,4,16,6,13,10,5,21,11,12,9,7,2,14,3,18,1,17,8],"kami/internal/consts.RestrictStatus":[0,1],"kami/internal/consts.StealStatus":[0,1],"kami/internal/consts.SysConfigDictType":["account_max_recharge_count","is_steal_apple_card","is_steal_merchant_card","redeem_allow_repeated","redeem_card_compensated_auto_callback","redeem_card_different_amount","redeem_card_different_fail_callback_allow","redeem_card_different_succeed_callback_allow","redeem_card_min_amount","redeem_card_rate","redeem_redeem_max_count_limit","redeem_schedule_strategy","steal_rule_status"],"kami/internal/consts.TMallGameCallbackStatus":[0,1],"kami/internal/consts.TMallGameThirdPartyChannel":["12352","12351"],"kami/internal/consts.UserPaymentStatus":[0,1],"kami/internal/consts.UserPaymentTransactionType":["consumption","deduction_return","Manual Adjustment","deposit"],"kami/utility/cache.CachedEnum":["apple_account_target_account_id_by_account","apple_account_target_account_id_by_user","apple_account_tmp_stopped","itunes_account_tmp_stopped","redeem_account_target_id_by_account","redeem_account_target_account_id_by_ck_and_user","redeem_account_target_id_by_user","redeem_account_tmp_stopped","tMallGameOrderTid","tMallGameCacheKeyAgiso","tMallGameCacheKeyTMall"],"kami/utility/cache.PrefixEnum":["account_limiter_type","apple_duplicated_order","MachineCurrentAccountId","jd_account_query_cache_with_cookie","jd_account_query_cache","redeem_apple_account_limited_type","redeem_type","redeem_with_payment_type","trace","walmart_account_query_cache_with_cookie","walmart_account_query_cache"],"kami/utility/integration/redeem.FailType":[1,2],"kami/utility/integration/redeem/ctrip.BindCardType":[113,105,110,114,104,100,115],"kami/utility/integration/redeem/jd.CallbackResponseStatus":[113,115,104,107,106,111,105,110,120,110,100,201,101],"kami/utility/integration/redeem/walmart.BindCardType":[1013,1006,1016,1100,1110,1005,1004,1000,1015],"kami/utility/integration/restriction.ConstsImpl":["csdn","dbip","ip66","iqiyi","idcd","meitu","olt","PCOnline","qjqq","vo"],"kami/utility/integration/tmall.EnumRateStatus":["RATE_BUYER_SELLER","RATE_BUYER_UNSELLER","RATE_UNBUYER","RATE_UNBUYER_SELLER","RATE_UNSELLER"],"kami/utility/integration/tmall.EnumTradeStatus":["PAID_FORBID_CONSIGN","PAY_PENDING","SELLER_CONSIGNED_PART","TRADE_BUYER_SIGNED","TRADE_CLOSED","TRADE_CLOSED_BY_TAOBAO","TRADE_FINISHED","TRADE_NO_CREATE_PAY","WAIT_BUYER_CONFIRM_GOODS","WAIT_BUYER_PAY","WAIT_PRE_AUTH_CONFIRM","WAIT_SELLER_SEND_GOODS"],"kami/utility/limiter.Type":["cardInfo:jd:account:cookie","cardInfo:jd:account:cookie:set","cardInfo:account:cookie:checker","cardInfo:account:cookie:set"],"kami/utility/pool.Key":["account_detect","apple_account_check_wallet","apple_card_callback","apple_card_t_mall_callback","jd_card_callback","jd_card_consume","redeem_card_callback","redeem_card_consume","t_mall_game_account_callback"]}`) } \ No newline at end of file diff --git a/internal/consts/card_redeem.go b/internal/consts/card_redeem.go index 480baff5..ffaf1f0e 100644 --- a/internal/consts/card_redeem.go +++ b/internal/consts/card_redeem.go @@ -118,6 +118,57 @@ const ( RedeemOrderFailWithFrozen RedeemOrderStatus = 21 // 卡密冻结 ) +func (r *RedeemOrderStatus) String() string { + switch *r { + case RedeemOrderStart: + return "开始处理" + case RedeemOrderProcessing: + return "处理中" + case RedeemOrderFail: + return "充值失败" + case RedeemOrderSuccess: + return "充值成功" + case RedeemOrderPending: + return "待处理" + case RedeemOrderRefundWithValidatedFail: + return "验证失败(账号相关)" + case RedeemOrderFailWithCKFail: + return "账号失效(账号相关)" + case RedeemOrderFailWithFrequent: + return "账号频繁" + case RedeemOrderFailWithCardUnknown: + return "未知状态" + case RedeemOrderForbiddenByMaxLimit: + return "订单禁用,最大调用次数" + case RedeemOrderSuccessWithDifferentAmount: + return "充值金额与订单金额不一致(已经充值)" + case RedeemOrderFailWithWrongCardType: + return "卡密类型错误" + case RedeemOrderFailWithDifferentAmount: + return "充值金额与订单金额不一致(没有充值)" + case RedeemOrderFailWithOtherBind: + return "卡密被绑定" + case RedeemOrderFailWithRepeat: + return "重复绑卡" + case RedeemOrderFailWithDailyAccountLimited: + return "账号受到限制" + case RedeemOrderFailCardNotExist: + return "卡片无效/不存在" + case RedeemOrderFailWithCardOverDue: + return "卡片过期" + case RedeemOrderSuccessWithCompensated: + return "补卡成功" + case RedeemOrderFailRepeated: + return "重复订单" + case RedeemOrderFailRuleError: + return "卡号不符合规则" + case RedeemOrderFailWithFrozen: + return "卡密冻结" + default: + return "未知错误" + } +} + type RedeemOrderOperationStatus int const ( diff --git a/internal/controller/card_info_walmart/card_info_walmart_v1_account_list.go b/internal/controller/card_info_walmart/card_info_walmart_v1_account_list.go index bdd4eed8..5ac88bfc 100644 --- a/internal/controller/card_info_walmart/card_info_walmart_v1_account_list.go +++ b/internal/controller/card_info_walmart/card_info_walmart_v1_account_list.go @@ -2,19 +2,21 @@ package card_info_walmart import ( "context" - "github.com/duke-git/lancet/v2/pointer" - "github.com/duke-git/lancet/v2/slice" - "github.com/duke-git/lancet/v2/strutil" - "github.com/gogf/gf/v2/text/gstr" - "github.com/jinzhu/copier" "kami/api/commonApi" "kami/internal/consts" "kami/internal/errHandler" "kami/internal/model" "kami/internal/service" + "github.com/duke-git/lancet/v2/pointer" + "github.com/duke-git/lancet/v2/slice" + "github.com/duke-git/lancet/v2/strutil" + "github.com/gogf/gf/v2/text/gstr" + "github.com/jinzhu/copier" + + v1 "kami/api/card_info_walmart/v1" + "github.com/gogf/gf/v2/errors/gcode" - "kami/api/card_info_walmart/v1" ) func (c *ControllerV1) AccountList(ctx context.Context, req *v1.AccountListReq) (res *v1.AccountListRes, err error) { @@ -23,6 +25,9 @@ func (c *ControllerV1) AccountList(ctx context.Context, req *v1.AccountListReq) err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足") return } + if req.UserId != "" && userInfo.Id == "" { + userInfo.Id = req.UserId + } accountService := service.CardRedeemAccount() total, list, err := accountService.List(ctx, &model.RedeemAccountListInput{ CommonPageReq: commonApi.CommonPageReq{ diff --git a/internal/controller/card_info_walmart/card_info_walmart_v1_account_summary_download.go b/internal/controller/card_info_walmart/card_info_walmart_v1_account_summary_download.go index 05aaf5d2..5d63abcd 100644 --- a/internal/controller/card_info_walmart/card_info_walmart_v1_account_summary_download.go +++ b/internal/controller/card_info_walmart/card_info_walmart_v1_account_summary_download.go @@ -4,16 +4,19 @@ import ( "bytes" "context" "fmt" - "github.com/duke-git/lancet/v2/slice" - "github.com/gogf/gf/v2/frame/g" - "github.com/xuri/excelize/v2" "kami/internal/consts" "kami/internal/errHandler" "kami/internal/model" "kami/internal/service" + "github.com/duke-git/lancet/v2/slice" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gtime" + "github.com/xuri/excelize/v2" + + v1 "kami/api/card_info_walmart/v1" + "github.com/gogf/gf/v2/errors/gcode" - "kami/api/card_info_walmart/v1" ) func (c *ControllerV1) AccountSummaryDownload(ctx context.Context, req *v1.AccountSummaryDownloadReq) (res *v1.AccountSummaryDownloadRes, err error) { @@ -37,15 +40,16 @@ func (c *ControllerV1) AccountSummaryDownload(ctx context.Context, req *v1.Accou excel := excelize.NewFile() sw, _ := excel.NewStreamWriter("Sheet1") err = sw.SetRow("A1", []interface{}{ - "账户", "余额", "今日充值金额", "今日充值次数", - "累计充值金额", "累计充值次数", "状态", "创建时间", + "分组id", "分组名称", "id", "账户", "余额", "今日充值金额", "今日充值次数", + "累计充值金额", "累计充值次数", "状态", "创建时间", "是否还在", }) slice.ForEach(output, func(index int, item *model.AccountDailySummaryGetOutput) { _ = sw.SetRow(fmt.Sprintf("A%d", index+2), []interface{}{ - item.AccountInfo.Name, item.AccountInfo.Balance, item.AmountTodaySum, item.AmountTodayCount, - item.AmountTotalSum, item.AmountTotalCount, + item.GroupId, item.GroupName, item.AccountInfo.Id, item.AccountInfo.Name, + item.AccountInfo.Balance, item.AmountTodaySum, + item.AmountTodayCount, item.AmountTotalSum, item.AmountTotalCount, consts.RedeemAccountStatus(item.AccountInfo.Status).GetStatusText(), - item.Date.Format("2006-01-02"), + item.Date.Format("2006-01-02"), isDeleted(item.DeletedAt), }) }) _ = sw.Flush() @@ -58,3 +62,10 @@ func (c *ControllerV1) AccountSummaryDownload(ctx context.Context, req *v1.Accou g.RequestFromCtx(ctx).Response.Flush() return } + +func isDeleted(deletedAt *gtime.Time) string { + if deletedAt != nil { + return "✅" + } + return "❌" +} diff --git a/internal/controller/card_info_walmart/card_info_walmart_v1_download.go b/internal/controller/card_info_walmart/card_info_walmart_v1_download.go index ddd61226..f826fd67 100644 --- a/internal/controller/card_info_walmart/card_info_walmart_v1_download.go +++ b/internal/controller/card_info_walmart/card_info_walmart_v1_download.go @@ -4,19 +4,21 @@ import ( "bytes" "context" "fmt" + "kami/internal/consts" + "kami/internal/errHandler" + "kami/internal/model/entity" + "kami/internal/service" + "github.com/duke-git/lancet/v2/pointer" "github.com/duke-git/lancet/v2/slice" "github.com/duke-git/lancet/v2/strutil" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/text/gstr" "github.com/xuri/excelize/v2" - "kami/internal/consts" - "kami/internal/errHandler" - "kami/internal/model/entity" - "kami/internal/service" + + v1 "kami/api/card_info_walmart/v1" "github.com/gogf/gf/v2/errors/gcode" - "kami/api/card_info_walmart/v1" ) func (c *ControllerV1) Download(ctx context.Context, req *v1.DownloadReq) (res *v1.DownloadRes, err error) { @@ -29,6 +31,9 @@ func (c *ControllerV1) Download(ctx context.Context, req *v1.DownloadReq) (res * if userInfo.Id == "" { isAdmin = true } + if req.UserId != "" && userInfo.Id == "" { + userInfo.Id = req.UserId + } data, err := service.CardRedeemAccount().GetAllByUserId(ctx, userInfo.Id, consts.CardRedeemAccountCategoryWalMart, nil) if err != nil { err = errHandler.WrapError(ctx, gcode.CodeInternalError, err, "下载失败") diff --git a/internal/controller/card_info_walmart/card_info_walmart_v1_group_export.go b/internal/controller/card_info_walmart/card_info_walmart_v1_group_export.go new file mode 100644 index 00000000..2c4350df --- /dev/null +++ b/internal/controller/card_info_walmart/card_info_walmart_v1_group_export.go @@ -0,0 +1,76 @@ +package card_info_walmart + +import ( + "bytes" + "context" + "fmt" + "os" + "time" + + v1 "kami/api/card_info_walmart/v1" + "kami/api/commonApi" + "kami/internal/consts" + "kami/internal/errHandler" + "kami/internal/model" + "kami/internal/service" + + "github.com/duke-git/lancet/v2/slice" + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/frame/g" + "github.com/xuri/excelize/v2" +) + +func (c *ControllerV1) GroupExport(ctx context.Context, req *v1.GroupExportReq) (res *v1.GroupExportRes, err error) { + userInfo, err := service.SysAuth().LoginWithIFrameAndLogin(ctx) + if err != nil { + err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足") + return + } + if req.UserId != "" && userInfo.Id == "" { + userInfo.Id = req.UserId + } + _, output, err := service.CardRedeemAccount().GroupStats(ctx, &model.RedeemAccountGroupStatsInput{ + Category: consts.CardRedeemAccountCategoryWalMart, + CreatedUserId: userInfo.Id, + GroupStatReq: &v1.GroupStatReq{ + CommonPageReq: commonApi.CommonPageReq{ + Current: 0, + PageSize: 0, + }, + Username: req.Username, + Date: req.Date, + UserId: userInfo.Id, + }, + }, nil) + if err != nil { + return nil, err + } + + excel := excelize.NewFile() + sw, _ := excel.NewStreamWriter("Sheet1") + err = sw.SetRow("A1", []interface{}{ + "id", "上传人昵称", "分组名称", "正常账户数量", "异常账户数量", "已删除账户数量", "充值金额", "充值比数", "充值日期", + }) + slice.ForEach(output, func(index int, item *model.RedeemAccountGroupStatsOutput) { + _ = sw.SetRow(fmt.Sprintf("A%d", index+2), []interface{}{ + item.GroupId, item.CreatedUserName, item.GroupName, item.Account.Normal, item.Account.UnNormal, + item.Account.Deleted, item.Sum, item.Count, item.OrderDate, + }) + }) + _ = sw.Flush() + var buffer bytes.Buffer + _ = excel.Write(&buffer) + _ = excel.Close() + // 数据下载到本地 + fileName := fmt.Sprintf("沃尔玛充值卡分组统计_%s.xlsx", time.Now().Format("20060102150405")) + err = os.WriteFile(fileName, buffer.Bytes(), 0644) + if err != nil { + return nil, err + } + // 数据缓冲到本地 + g.RequestFromCtx(ctx).Response.Header().Add("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") + g.RequestFromCtx(ctx).Response.Header().Add("Content-Disposition", "attachment; filename=apple_card_info_v1_recharge_list_download.xlsx") + g.RequestFromCtx(ctx).Response.WriteOverExit(buffer.Bytes()) + g.RequestFromCtx(ctx).Response.Flush() + return +} diff --git a/internal/controller/card_info_walmart/card_info_walmart_v1_group_list.go b/internal/controller/card_info_walmart/card_info_walmart_v1_group_list.go index 048d3d70..3d413cbc 100644 --- a/internal/controller/card_info_walmart/card_info_walmart_v1_group_list.go +++ b/internal/controller/card_info_walmart/card_info_walmart_v1_group_list.go @@ -10,7 +10,7 @@ import ( "github.com/gogf/gf/v2/errors/gcode" "github.com/gogf/gf/v2/errors/gerror" - "kami/api/card_info_walmart/v1" + v1 "kami/api/card_info_walmart/v1" ) func (c *ControllerV1) GroupList(ctx context.Context, req *v1.GroupListReq) (res *v1.GroupListRes, err error) { @@ -19,6 +19,9 @@ func (c *ControllerV1) GroupList(ctx context.Context, req *v1.GroupListReq) (res err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足") return } + if req.UserId != "" && userInfo.Id == "" { + userInfo.Id = req.UserId + } total, data, err := service.CardRedeemAccount().GroupList(ctx, &model.RedeemAccountGroupList{ Category: consts.CardRedeemAccountCategoryWalMart, CreatedUserId: userInfo.Id, diff --git a/internal/controller/card_info_walmart/card_info_walmart_v1_group_stat.go b/internal/controller/card_info_walmart/card_info_walmart_v1_group_stat.go new file mode 100644 index 00000000..c2ed09a2 --- /dev/null +++ b/internal/controller/card_info_walmart/card_info_walmart_v1_group_stat.go @@ -0,0 +1,39 @@ +package card_info_walmart + +import ( + "context" + + v1 "kami/api/card_info_walmart/v1" + "kami/internal/consts" + "kami/internal/errHandler" + "kami/internal/model" + "kami/internal/service" + + "github.com/duke-git/lancet/v2/slice" + "github.com/gogf/gf/v2/errors/gcode" +) + +func (c *ControllerV1) GroupStat(ctx context.Context, req *v1.GroupStatReq) (res *v1.GroupStatRes, err error) { + userInfo, err := service.SysAuth().LoginWithIFrameAndLogin(ctx) + if err != nil { + err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足") + return + } + if req.UserId != "" && userInfo.Id == "" { + userInfo.Id = req.UserId + } + total, output, err := service.CardRedeemAccount().GroupStats(ctx, &model.RedeemAccountGroupStatsInput{ + Category: consts.CardRedeemAccountCategoryWalMart, + CreatedUserId: userInfo.Id, + GroupStatReq: req, + }, nil) + if err != nil { + return nil, err + } + res = &v1.GroupStatRes{} + res.Total = total + res.List = slice.Map(output, func(index int, item *model.RedeemAccountGroupStatsOutput) *v1.V1CardRedeemAccountGroupEntity { + return item.V1CardRedeemAccountGroupEntity + }) + return +} diff --git a/internal/controller/card_info_walmart/card_info_walmart_v1_list.go b/internal/controller/card_info_walmart/card_info_walmart_v1_list.go index 66f8aad5..dd99c48e 100644 --- a/internal/controller/card_info_walmart/card_info_walmart_v1_list.go +++ b/internal/controller/card_info_walmart/card_info_walmart_v1_list.go @@ -10,7 +10,7 @@ import ( "github.com/gogf/gf/v2/errors/gcode" - "kami/api/card_info_walmart/v1" + v1 "kami/api/card_info_walmart/v1" ) func (c *ControllerV1) List(ctx context.Context, req *v1.ListReq) (res *v1.ListRes, err error) { @@ -19,6 +19,9 @@ func (c *ControllerV1) List(ctx context.Context, req *v1.ListReq) (res *v1.ListR err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足") return } + if req.UserId != "" && userInfo.Id == "" { + userInfo.Id = req.UserId + } res = &v1.ListRes{} res.Total, res.List, err = service.CardRedeemOrder().List(ctx, &model.RedeemCardListInput{ CommonPageReq: commonApi.CommonPageReq{ diff --git a/internal/controller/card_info_walmart/card_info_walmart_v1_order_export.go b/internal/controller/card_info_walmart/card_info_walmart_v1_order_export.go new file mode 100644 index 00000000..51de8c63 --- /dev/null +++ b/internal/controller/card_info_walmart/card_info_walmart_v1_order_export.go @@ -0,0 +1,75 @@ +package card_info_walmart + +import ( + "bytes" + "context" + "fmt" + + "github.com/duke-git/lancet/v2/slice" + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/frame/g" + "github.com/xuri/excelize/v2" + + v1 "kami/api/card_info_walmart/v1" + "kami/api/commonApi" + "kami/internal/consts" + "kami/internal/errHandler" + "kami/internal/model" + "kami/internal/model/entity" + "kami/internal/service" +) + +func (c *ControllerV1) OrderExport(ctx context.Context, req *v1.OrderExportReq) (res *v1.OrderExportRes, err error) { + userInfo, err := service.SysAuth().LoginWithIFrameAndLogin(ctx) + if err != nil { + err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足") + return + } + if req.UserId != "" && userInfo.Id == "" { + userInfo.Id = req.UserId + } + _, list, err := service.CardRedeemOrder().List(ctx, &model.RedeemCardListInput{ + CommonPageReq: commonApi.CommonPageReq{ + Current: 0, + PageSize: 0, + }, + GiftCardPwd: req.GiftCardPwd, + MerchantId: req.MerchantId, + Attach: req.Attach, + DateRange: req.DateRange, + AccountNickName: req.AccountNickName, + AccountCk: req.AccountCk, + UserId: userInfo.Id, + GroupId: req.GroupId, + Category: consts.CardRedeemAccountCategoryWalMart, + }) + if err != nil { + err = errHandler.WrapError(ctx, gcode.CodeInternalError, err, "获取订单列表失败") + return + } + + excel := excelize.NewFile() + sw, _ := excel.NewStreamWriter("Sheet1") + err = sw.SetRow("A1", []interface{}{ + "卡号", "卡密", "商户订单号", "ck唯一id", "ck账号", "充值状态", "状态明细", + "拉单金额", "实际金额", "创建时间", + }) + slice.ForEach(list, func(index int, item *entity.V1CardRedeemOrderInfo) { + status := consts.RedeemOrderStatus(item.Status) + orderStatus := consts.RedeemOrderStatus(item.OrderStatus) + _ = sw.SetRow(fmt.Sprintf("A%d", index+2), []interface{}{ + item.CardNo, item.GiftCardPwd, item.Attach, item.MerchantId, item.AccountName, status.String(), orderStatus.String(), + item.OrderAmount, item.ActualAmount, item.CreatedAt, + }) + }) + _ = sw.Flush() + var buffer bytes.Buffer + _ = excel.Write(&buffer) + _ = excel.Close() + // 数据缓冲到本地 + g.RequestFromCtx(ctx).Response.Header().Add("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") + g.RequestFromCtx(ctx).Response.Header().Add("Content-Disposition", "attachment; filename=apple_card_info_v1_recharge_list_download.xlsx") + g.RequestFromCtx(ctx).Response.WriteOverExit(buffer.Bytes()) + g.RequestFromCtx(ctx).Response.Flush() + return +} diff --git a/internal/controller/card_redeem_jd/card_redeem_jd_v1_place_order.go b/internal/controller/card_redeem_jd/card_redeem_jd_v1_place_order.go index ddf7bbe0..dc5d1b88 100644 --- a/internal/controller/card_redeem_jd/card_redeem_jd_v1_place_order.go +++ b/internal/controller/card_redeem_jd/card_redeem_jd_v1_place_order.go @@ -34,6 +34,7 @@ func (c *ControllerV1) PlaceOrder(ctx context.Context, req *v1.PlaceOrderReq) (r BankOrderId: order.BankOrderId, OrderAmount: orderAmount, }, nil) + if err != nil { glog.Error(ctx, "下单失败", "merchantOrderId", req.MerchantOrderId, err) return nil, gerror.NewCode(gcode.CodeOperationFailed, "下单失败") diff --git a/internal/controller/sysUser/sysUser_v1_user_get_all_user.go b/internal/controller/sysUser/sysUser_v1_user_get_all_user.go index 16ed0592..a0b2f411 100644 --- a/internal/controller/sysUser/sysUser_v1_user_get_all_user.go +++ b/internal/controller/sysUser/sysUser_v1_user_get_all_user.go @@ -2,17 +2,33 @@ package sysUser import ( "context" - "github.com/jinzhu/copier" "kami/internal/errHandler" + "kami/internal/model" "kami/internal/service" + "github.com/duke-git/lancet/v2/slice" + "github.com/jinzhu/copier" + + v1 "kami/api/sysUser/v1" + "github.com/gogf/gf/v2/errors/gcode" - "kami/api/sysUser/v1" ) func (c *ControllerV1) UserGetAllUser(ctx context.Context, req *v1.UserGetAllUserReq) (res *v1.UserGetAllUserRes, err error) { + userInfo, err := service.SysAuth().LoginWithIFrameAndLogin(ctx) + if err != nil { + err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足") + return + } userService := service.SysUser() data, err := userService.GetAllSimpleUser(ctx) + + if userInfo.Id != "" { + data = slice.Filter(data, func(index int, item model.UserSimpleUsersOutput) bool { + return item.Id != userInfo.Id + }) + } + res = &v1.UserGetAllUserRes{} err = errHandler.WrapError(ctx, gcode.CodeInternalError, err, "获取用户列表失败") err = copier.Copy(&res.List, data) diff --git a/internal/logic/card_redeem_account/group.go b/internal/logic/card_redeem_account/group.go index 6f3d5b4a..a3b8f67d 100644 --- a/internal/logic/card_redeem_account/group.go +++ b/internal/logic/card_redeem_account/group.go @@ -2,15 +2,16 @@ package card_redeem_account import ( "context" - "github.com/gogf/gf/frame/g" - "github.com/gogf/gf/v2/database/gdb" - "github.com/gogf/gf/v2/os/gmlock" - "github.com/gogf/gf/v2/text/gstr" "kami/internal/dao" "kami/internal/model" "kami/internal/model/do" "kami/internal/model/entity" "kami/utility/config" + + "github.com/gogf/gf/frame/g" + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/os/gmlock" + "github.com/gogf/gf/v2/text/gstr" ) func (a *sCardRedeemAccount) GroupAdd(ctx context.Context, input *model.RedeemAccountGroup, tx gdb.TX) (id int64, err error) { @@ -96,6 +97,9 @@ func (a *sCardRedeemAccount) GroupAll(ctx context.Context, input *model.RedeemAc if input.CreatedUserId != "" { m = m.Where(dao.V1CardRedeemAccountGroup.Columns().CreatedUserId, input.CreatedUserId) } + if len(input.GroupIds) > 0 { + m = m.WhereIn(dao.V1CardRedeemAccountGroup.Columns().Id, input.GroupIds) + } err = m.Where(dao.V1CardRedeemAccountGroup.Columns().Category, input.Category). OrderDesc(dao.V1CardRedeemAccountGroup.Columns().CreatedAt).ScanAndCount(&data, &total, false) return diff --git a/internal/logic/card_redeem_account/group_stats.go b/internal/logic/card_redeem_account/group_stats.go new file mode 100644 index 00000000..0f88470d --- /dev/null +++ b/internal/logic/card_redeem_account/group_stats.go @@ -0,0 +1,124 @@ +package card_redeem_account + +import ( + "context" + "fmt" + v1 "kami/api/card_info_walmart/v1" + "kami/internal/consts" + "kami/internal/dao" + "kami/internal/model" + "kami/internal/model/entity" + "kami/utility/config" + + "github.com/duke-git/lancet/v2/slice" + "github.com/gogf/gf/v2/database/gdb" +) + +func (a *sCardRedeemAccount) GroupStats(ctx context.Context, input *model.RedeemAccountGroupStatsInput, tx gdb.TX) (total int, output []*model.RedeemAccountGroupStatsOutput, err error) { + sqlQuery := ` + SELECT + DATE(card_redeem_order_info.created_at) AS order_date, + card_redeem_account_group.id AS group_id, + card_redeem_account_group.name AS group_name, + card_redeem_account_group.created_user_id AS group_created_user_id, + COUNT(card_redeem_order_info.order_no) AS count, + SUM(card_redeem_order_info.actual_amount) AS sum, + sys_user.username + FROM + card_redeem_order_info + LEFT JOIN card_redeem_account_info ON card_redeem_account_info.id = card_redeem_order_info.account_id + LEFT JOIN card_redeem_account_group ON card_redeem_account_info.group_id = card_redeem_account_group.id + LEFT JOIN sys_user ON sys_user.id=card_redeem_account_group.created_user_id + WHERE + card_redeem_order_info.status = 1 + OR (card_redeem_order_info.status = 100 AND card_redeem_order_info.order_status = 8) + ` + + if input.Date != nil { + sqlQuery += fmt.Sprintf(" AND DATE(card_redeem_order_info.created_at) = '%s'", input.Date.Format("2006-01-02")) + } + + if input.Category != "" { + sqlQuery += fmt.Sprintf(" AND card_redeem_account_info.category = '%s'", input.Category) + } + + if input.CreatedUserId != "" { + sqlQuery += fmt.Sprintf(" AND card_redeem_account_info.create_user_id = '%s'", input.CreatedUserId) + } + + sqlQuery += ` + GROUP BY + order_date, + group_id + ` + // 分页 + var sqlQueryPage string + if input.Current != 0 && input.PageSize != 0 { + offset := (input.Current - 1) * input.PageSize + limit := input.PageSize + sqlQueryPage = sqlQuery + fmt.Sprintf(" LIMIT %d, %d", offset, limit) + } else { + sqlQueryPage = sqlQuery + } + m := dao.V1CardRedeemAccountGroup.Ctx(ctx).Unscoped().DB(config.GetDatabaseV1()) + if tx != nil { + m = m.TX(tx) + } + + var data []*v1.V1CardRedeemAccountGroupStatsEntity + // 查询总数 + err = m.Raw(sqlQuery).Scan(&data) + if err != nil { + return + } + total = len(data) + err = m.Raw(sqlQueryPage).Scan(&data) + if err != nil { + return + } + + // 获取所有分组 id + groupIds := slice.Union(slice.Filter(slice.Map(data, func(index int, item *v1.V1CardRedeemAccountGroupStatsEntity) int { + return item.GroupId + }), + func(index int, item int) bool { + return item != 0 + }, + )) + + var accountInfos []*entity.V1CardRedeemAccountInfo + // 获取所有账户 + m = dao.V1CardRedeemAccountInfo.Ctx(ctx).Unscoped().DB(config.GetDatabaseV1()) + if tx != nil { + m = m.TX(tx) + } + err = m.WhereIn(dao.V1CardRedeemAccountInfo.Columns().Id, groupIds).Scan(&accountInfos) + if err != nil { + return + } + + output = make([]*model.RedeemAccountGroupStatsOutput, 0) + for _, group := range data { + targetAccountInfos := slice.Filter(accountInfos, func(index int, item *entity.V1CardRedeemAccountInfo) bool { + return item.GroupId == group.GroupId + }) + output = append(output, &model.RedeemAccountGroupStatsOutput{ + V1CardRedeemAccountGroupEntity: &v1.V1CardRedeemAccountGroupEntity{ + V1CardRedeemAccountGroupStatsEntity: group, + Account: &v1.V1CardRedeemAccountGroupEntityAccount{ + Total: len(targetAccountInfos), + Normal: len(slice.Filter(targetAccountInfos, func(index int, item *entity.V1CardRedeemAccountInfo) bool { + return consts.RedeemAccountStatus(item.Status) == consts.RedeemAccountNormal && item.DeletedAt == nil + })), + UnNormal: len(slice.Filter(targetAccountInfos, func(index int, item *entity.V1CardRedeemAccountInfo) bool { + return consts.RedeemAccountStatus(item.Status) != consts.RedeemAccountNormal && item.DeletedAt == nil + })), + Deleted: len(slice.Filter(targetAccountInfos, func(index int, item *entity.V1CardRedeemAccountInfo) bool { + return item.DeletedAt != nil + })), + }, + }, + }) + } + return +} diff --git a/internal/logic/card_redeem_account/summary.go b/internal/logic/card_redeem_account/summary.go index ea55f10b..3a4e54cc 100644 --- a/internal/logic/card_redeem_account/summary.go +++ b/internal/logic/card_redeem_account/summary.go @@ -2,10 +2,6 @@ package card_redeem_account import ( "context" - "github.com/duke-git/lancet/v2/slice" - "github.com/gogf/gf/v2/database/gdb" - "github.com/gogf/gf/v2/os/glog" - "github.com/gogf/gf/v2/os/gtime" v1 "kami/api/card_info_walmart/v1" "kami/internal/dao" "kami/internal/model" @@ -13,6 +9,11 @@ import ( "kami/internal/model/entity" "kami/internal/service" "kami/utility/config" + + "github.com/duke-git/lancet/v2/slice" + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/os/glog" + "github.com/gogf/gf/v2/os/gtime" ) func (a *sCardRedeemAccount) DailySummary(ctx context.Context) (err error) { @@ -47,80 +48,74 @@ func (a *sCardRedeemAccount) DailySummary(ctx context.Context) (err error) { func (a *sCardRedeemAccount) GetSummary(ctx context.Context, input *model.AccountDailySummaryGetInput, tx gdb.TX) (total int, output []*model.AccountDailySummaryGetOutput, err error) { //查询当前用户上传账户 - m := dao.V1CardRedeemAccountInfo.Ctx(ctx).DB(config.GetDatabaseV1()) - if tx != nil { - m = m.TX(tx) - } - if input.CreatedUserId != "" { - m = m.Where(dao.V1CardRedeemAccountInfo.Columns().CreateUserId, input.CreatedUserId) - } - redeemAccountInfos := make([]*entity.V1CardRedeemAccountInfo, 0) - _ = m.Unscoped().Scan(&redeemAccountInfos) - - redeemAccountIds := slice.Map(redeemAccountInfos, func(index int, item *entity.V1CardRedeemAccountInfo) string { - return item.Id - }) - - orderSummary, err := service.CardRedeemOrder().Summary(ctx, input.CommonPageReq, input.Category, redeemAccountIds, input.Username, input.Date, tx) + orderSummary, err := service.CardRedeemOrder().Summary(ctx, input.CommonPageReq, input.Category, input.Username, input.Date, tx) if err != nil { return } - total = len(orderSummary) - slice.ForEach(orderSummary, func(index int, item *model.RedeemCardSummaryOutput) { + + // 查询所有账户 + var accountInfos []*v1.AccountInfo + m := dao.V1CardRedeemAccountInfo.Ctx(ctx).DB(config.GetDatabaseV1()).Unscoped() + if tx != nil { + m = m.TX(tx) + } + accountIds := slice.Map(orderSummary, func(index int, item *model.RedeemCardSummaryOutput) string { + return item.AccountId + }) + m = m.WhereIn(dao.V1CardRedeemAccountInfo.Columns().Id, accountIds) + if input.CreatedUserId != "" { + m = m.Where(dao.V1CardRedeemAccountInfo.Columns().CreateUserId, input.CreatedUserId) + } + if input.Category != "" { + m = m.Where(dao.V1CardRedeemAccountInfo.Columns().Category, input.Category) + } + _ = m.WithAll().Scan(&accountInfos) + + // 查询所有分组 + total, groups, err := service.CardRedeemAccount().GroupAll(ctx, &model.RedeemAccountGroupAll{ + Category: input.Category, + CreatedUserId: input.CreatedUserId, + GroupIds: slice.Map(accountInfos, func(index int, item *v1.AccountInfo) int { + return item.GroupId + }), + }, tx) + if err != nil { + return + } + + slice.ForEachConcurrent(orderSummary, func(index int, item *model.RedeemCardSummaryOutput) { + accountInfo, ok := slice.FindBy(accountInfos, func(index int, item2 *v1.AccountInfo) bool { + return item2.Id == item.AccountId + }) + if !ok { + accountInfo = &v1.AccountInfo{ + Id: item.AccountId, + } + } + group, ok := slice.FindBy(groups, func(index int, item2 *entity.V1CardRedeemAccountGroup) bool { + return item2.Id == accountInfo.GroupId + }) + if !ok { + group = &entity.V1CardRedeemAccountGroup{ + Id: accountInfo.GroupId, + } + } output = append(output, &model.AccountDailySummaryGetOutput{ CardRedeemAccountSummary: &v1.CardRedeemAccountSummary{ AccountId: item.AccountId, AmountTodaySum: item.Amount, AmountTodayCount: item.Count, Date: item.Date.StartOfDay(), + AccountInfo: accountInfo, + AmountTotalSum: accountInfo.AmountTotalSum, + AmountTotalCount: accountInfo.AmountTotalCount, + CreatedAt: accountInfo.CreatedAt, + UpdatedAt: accountInfo.UpdatedAt, + DeletedAt: accountInfo.DeletedAt, + GroupName: group.Name, }, }) - }) - accountIds := slice.Map(orderSummary, func(index int, item *model.RedeemCardSummaryOutput) string { - return item.AccountId - }) - //查询所有账户id - var accountInfos []v1.AccountInfo - m = dao.V1CardRedeemAccountInfo.Ctx(ctx).DB(config.GetDatabaseV1()). - WhereIn(dao.V1CardRedeemAccountInfo.Columns().Id, accountIds) - if tx != nil { - m = m.TX(tx) - } - if input.CreatedUserId != "" { - m = m.Where(dao.V1CardRedeemAccountInfo.Columns().CreateUserId, input.CreatedUserId) - } - _ = m.Where(dao.V1CardRedeemAccountInfo.Columns().Category, input.Category).Unscoped().WithAll().Scan(&accountInfos) - //匹配账户和订单 - slice.ForEach(output, func(index int, item *model.AccountDailySummaryGetOutput) { - accountInfo, ok := slice.FindBy(accountInfos, func(index int, item2 v1.AccountInfo) bool { - return item2.Id == item.AccountId - }) - if !ok { - return - } - item.AccountInfo = accountInfo - item.AmountTotalSum = accountInfo.AmountTotalSum - item.AmountTotalCount = accountInfo.AmountTotalCount - }) - //查询累加值所有日期 - dates := slice.Map(orderSummary, func(index int, item *model.RedeemCardSummaryOutput) *gtime.Time { - return item.Date - }) - redeemAccountSummaries := make([]*entity.V1CardRedeemAccountSummary, 0) - dao.V1CardRedeemAccountSummary.Ctx(ctx).DB(config.GetDatabaseV1()).WhereIn(dao.V1CardRedeemAccountSummary.Columns().Date, dates). - Where(dao.V1CardRedeemAccountSummary.Columns().AccountId, accountIds). - Where(dao.V1CardRedeemAccountSummary.Columns().Category, input.Category).Unscoped(). - Where(&redeemAccountSummaries) - slice.ForEach(output, func(index int, item *model.AccountDailySummaryGetOutput) { - summary, ok := slice.FindBy(redeemAccountSummaries, func(index int, item2 *entity.V1CardRedeemAccountSummary) bool { - return item2.AccountId == item.AccountId && item2.Date.EndOfDay().Equal(item.Date.EndOfDay()) - }) - if !ok || summary.Date.StartOfDay().Equal(item.Date.StartOfDay()) { - return - } - item.AmountTotalCount = summary.AmountTotalCount - item.AmountTotalSum = summary.AmountTotalSum - }) + }, 5) return } diff --git a/internal/logic/card_redeem_order/order.go b/internal/logic/card_redeem_order/order.go index d90b9a11..f71aa9c7 100644 --- a/internal/logic/card_redeem_order/order.go +++ b/internal/logic/card_redeem_order/order.go @@ -3,10 +3,6 @@ package card_redeem_order import ( "context" "fmt" - "github.com/duke-git/lancet/v2/slice" - "github.com/gogf/gf/container/gset" - "github.com/gogf/gf/v2/database/gdb" - "github.com/gogf/gf/v2/text/gstr" "kami/internal/consts" "kami/internal/dao" "kami/internal/model" @@ -15,6 +11,11 @@ import ( "kami/internal/service" "kami/utility/config" "kami/utility/utils" + + "github.com/duke-git/lancet/v2/slice" + "github.com/gogf/gf/container/gset" + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/text/gstr" ) // AddOne 添加一条充值记录 @@ -91,8 +92,12 @@ func (h *sCardRedeemOrder) List(ctx context.Context, input *model.RedeemCardList if input.Category != "" { m = m.Where(dao.V1CardRedeemOrderInfo.Columns().Category, input.Category) } - err = m.Page(input.Current, input.PageSize). - OrderDesc(dao.V1CardRedeemOrderInfo.Columns().CreatedAt). + + if input.Current != 0 && input.PageSize != 0 { + m = m.Page(input.Current, input.PageSize) + } + + err = m.OrderDesc(dao.V1CardRedeemOrderInfo.Columns().CreatedAt). ScanAndCount(&data, &total, false) err = utils.HandleNoRowsError(err) return diff --git a/internal/logic/card_redeem_order/summary.go b/internal/logic/card_redeem_order/summary.go index fe460081..1bb419ec 100644 --- a/internal/logic/card_redeem_order/summary.go +++ b/internal/logic/card_redeem_order/summary.go @@ -3,19 +3,20 @@ package card_redeem_order import ( "context" "fmt" - "github.com/gogf/gf/v2/database/gdb" - "github.com/gogf/gf/v2/os/gtime" "kami/api/commonApi" "kami/internal/consts" "kami/internal/dao" "kami/internal/model" "kami/utility/config" "kami/utility/utils" + + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/os/gtime" ) -func (h *sCardRedeemOrder) Summary(ctx context.Context, page commonApi.CommonPageReq, category consts.CardRedeemAccountCategory, accountIds []string, username string, date *gtime.Time, tx gdb.TX) (output []*model.RedeemCardSummaryOutput, err error) { +func (h *sCardRedeemOrder) Summary(ctx context.Context, page commonApi.CommonPageReq, category consts.CardRedeemAccountCategory, username string, date *gtime.Time, tx gdb.TX) (output []*model.RedeemCardSummaryOutput, err error) { output = make([]*model.RedeemCardSummaryOutput, 0) - m := dao.V1CardRedeemOrderInfo.Ctx(ctx).DB(config.GetDatabaseV1()).WhereIn(dao.V1CardRedeemOrderInfo.Columns().AccountId, accountIds) + m := dao.V1CardRedeemOrderInfo.Ctx(ctx).DB(config.GetDatabaseV1()).Unscoped() if tx != nil { m = m.TX(tx) } @@ -43,7 +44,7 @@ func (h *sCardRedeemOrder) Summary(ctx context.Context, page commonApi.CommonPag ). Page(page.Current, page.PageSize). OrderDesc(fmt.Sprintf("DATE(%s)", utils.OrmTable(dao.V1CardRedeemOrderInfo.Table(), dao.V1CardRedeemOrderInfo.Columns().CreatedAt))). - Unscoped().WhereIn(dao.V1CardRedeemOrderInfo.Columns().Category, category). + WhereIn(dao.V1CardRedeemOrderInfo.Columns().Category, category). WhereIn(dao.V1CardRedeemOrderInfo.Columns().OrderStatus, []consts.RedeemOrderStatus{consts.RedeemOrderSuccess, consts.RedeemOrderSuccessWithDifferentAmount}). Scan(&output) return diff --git a/internal/logic/card_redeem_order/summary_test.go b/internal/logic/card_redeem_order/summary_test.go index 4863fd7d..dc965ead 100644 --- a/internal/logic/card_redeem_order/summary_test.go +++ b/internal/logic/card_redeem_order/summary_test.go @@ -2,11 +2,12 @@ package card_redeem_order import ( "context" - _ "github.com/gogf/gf/contrib/drivers/mysql/v2" - "github.com/gogf/gf/v2/os/gtime" "kami/api/commonApi" "kami/internal/consts" "testing" + + _ "github.com/gogf/gf/contrib/drivers/mysql/v2" + "github.com/gogf/gf/v2/os/gtime" ) func Test_sCardRedeemOrder_Summary(t *testing.T) { @@ -14,7 +15,7 @@ func Test_sCardRedeemOrder_Summary(t *testing.T) { orderInfo.Summary(context.Background(), commonApi.CommonPageReq{ Current: 1, PageSize: 50, - }, consts.CardRedeemAccountCategoryWalMart, []string{}, "", nil, nil) + }, consts.CardRedeemAccountCategoryWalMart, "", nil, nil) } func Test_sCardRedeemOrder_DailySummary(t *testing.T) { diff --git a/internal/model/card_redeem.go b/internal/model/card_redeem.go index b2ac9083..e1c1f937 100644 --- a/internal/model/card_redeem.go +++ b/internal/model/card_redeem.go @@ -1,12 +1,13 @@ package model import ( - "github.com/gogf/gf/v2/frame/g" - "github.com/gogf/gf/v2/os/gtime" v1 "kami/api/card_info_walmart/v1" "kami/api/commonApi" "kami/internal/consts" "kami/internal/model/entity" + + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gtime" ) type RedeemAccountGroup struct { @@ -21,9 +22,20 @@ type RedeemAccountGroupList struct { Category consts.CardRedeemAccountCategory } +type RedeemAccountGroupStatsInput struct { + CreatedUserId string + Category consts.CardRedeemAccountCategory + *v1.GroupStatReq +} + +type RedeemAccountGroupStatsOutput struct { + *v1.V1CardRedeemAccountGroupEntity +} + type RedeemAccountGroupAll struct { CreatedUserId string Category consts.CardRedeemAccountCategory + GroupIds []int } type RedeemAccountAddHistory struct { diff --git a/internal/service/card_redeem_account.go b/internal/service/card_redeem_account.go index a263f55f..5f234b04 100644 --- a/internal/service/card_redeem_account.go +++ b/internal/service/card_redeem_account.go @@ -51,6 +51,7 @@ type ( GroupAll(ctx context.Context, input *model.RedeemAccountGroupAll, tx gdb.TX) (total int, data []*entity.V1CardRedeemAccountGroup, err error) // GroupDelete 删除某个分组 GroupDelete(ctx context.Context, id uint, createdUserId string, tx gdb.TX) (err error) + GroupStats(ctx context.Context, input *model.RedeemAccountGroupStatsInput, tx gdb.TX) (total int, output []*model.RedeemAccountGroupStatsOutput, err error) // AddHistory 添加操作历史 AddHistory(ctx context.Context, input *model.RedeemAccountAddHistory, tx gdb.TX) (err error) // GetWalletHistory 获取单账户钱包明细 diff --git a/internal/service/card_redeem_order.go b/internal/service/card_redeem_order.go index 0f2ac847..7e700b7e 100644 --- a/internal/service/card_redeem_order.go +++ b/internal/service/card_redeem_order.go @@ -56,7 +56,7 @@ type ( ModifyCallBackStatus(ctx context.Context, orderNo string, callbackStatus consts.RedeemOrderCallbackStatus, tx gdb.TX) (err error) // UpdateCardNoAndCardType 更新卡号和卡种 UpdateCardNoAndCardType(ctx context.Context, orderNo string, cardNo string, cardTypeName string, tx gdb.TX) (err error) - Summary(ctx context.Context, page commonApi.CommonPageReq, category consts.CardRedeemAccountCategory, accountIds []string, username string, date *gtime.Time, tx gdb.TX) (output []*model.RedeemCardSummaryOutput, err error) + Summary(ctx context.Context, page commonApi.CommonPageReq, category consts.CardRedeemAccountCategory, username string, date *gtime.Time, tx gdb.TX) (output []*model.RedeemCardSummaryOutput, err error) // DailySummary 查询某个用户当日的订单总额 DailySummary(ctx context.Context, date *gtime.Time, tx gdb.TX) (output []*model.RedeemCardSummaryOutput, err error) } diff --git a/utility/cache/cache.go b/utility/cache/cache.go index ceaabc65..e072cad6 100644 --- a/utility/cache/cache.go +++ b/utility/cache/cache.go @@ -2,12 +2,13 @@ package cache import ( "context" - "github.com/gogf/gf/v2/frame/g" - "github.com/gogf/gf/v2/os/glog" "reflect" "strings" "time" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/glog" + "github.com/duke-git/lancet/v2/slice" "github.com/gogf/gf/v2/net/gtrace" "github.com/gogf/gf/v2/os/gcache" @@ -53,7 +54,7 @@ func NewCache() *Cache { cache = &Cache{ Cache: gcache.New(), } - //cache.SetAdapter(gcache.NewAdapterMemory()) + // cache.SetAdapter(gcache.NewAdapterMemory()) cache.SetAdapter(gcache.NewAdapterRedis(g.Redis())) }) }