sino-bc-cli 1.8.8 → 1.8.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@
2
2
  {
3
3
  "name": "biz-line-list",
4
4
  "displayName": "查询业务线分页列表",
5
- "description": "result 为公司分页对象:total=总条数,result=当前页的 BizLineListVO 列表。\n\n核心指标字段有两个,含义不同不要混用:coreIndex = 业务线核心指标(业务线维度的 KPI 口径说明,来源业务线配置,与策略周期无关);coreEffectIndex = 当期策略回顾里的核心效果指标(随策略周期变化,另有 prevCoreEffectIndex 为上期值)。\n\n需要查看某条业务线下挂了哪些项目及其广告账号时,用 result.result[].id 调 POST /sino-opti-hive/biz-line/project-list。",
5
+ "description": "查询业务线分页列表。需要查询业务线关联项目和广告账号,使用业务线ID查询【业务线关联项目列表】。",
6
6
  "group": "业务线策略",
7
7
  "method": "POST",
8
8
  "path": "/sino-opti-hive/biz-line/list",
@@ -136,13 +136,17 @@
136
136
  "description": "周消耗环比筛选,DOWN_20 = 周消耗下降20%及以上",
137
137
  "title": "周消耗环比"
138
138
  }
139
- }
139
+ },
140
+ "required": [
141
+ "pageNum",
142
+ "pageSize"
143
+ ]
140
144
  }
141
145
  },
142
146
  {
143
147
  "name": "biz-line-detail",
144
148
  "displayName": "业务线详情",
145
- "description": "result 为 BizLineDetailVO。",
149
+ "description": "业务线详情",
146
150
  "group": "业务线策略",
147
151
  "method": "POST",
148
152
  "path": "/sino-opti-hive/biz-line/detail",
@@ -154,7 +158,18 @@
154
158
  "summary": "业务线详情",
155
159
  "docFile": "biz-line-strategy.md",
156
160
  "requestSchema": {
157
- "$ref": "#/components/schemas/BizLineDetailReqVO"
161
+ "type": "object",
162
+ "properties": {
163
+ "id": {
164
+ "type": "integer",
165
+ "format": "int64",
166
+ "title": "业务线ID",
167
+ "example": 1251
168
+ }
169
+ },
170
+ "required": [
171
+ "id"
172
+ ]
158
173
  }
159
174
  },
160
175
  {
@@ -172,13 +187,169 @@
172
187
  "summary": "新建业务线",
173
188
  "docFile": "biz-line-strategy.md",
174
189
  "requestSchema": {
175
- "$ref": "#/components/schemas/BizLineSaveReqVO"
190
+ "type": "object",
191
+ "properties": {
192
+ "name": {
193
+ "type": "string",
194
+ "description": "业务线名称,业务/产品线名称不可重复",
195
+ "title": "业务线名称",
196
+ "example": "示例业务线"
197
+ },
198
+ "mediaChannels": {
199
+ "type": "array",
200
+ "items": {
201
+ "type": "integer",
202
+ "format": "int32"
203
+ },
204
+ "description": "投放渠道 code。通过 GET /sino-opti-hive/biz-line-open/channels 取 code;名称见同接口 name",
205
+ "title": "投放渠道"
206
+ },
207
+ "strategyControlDegree": {
208
+ "type": "integer",
209
+ "format": "int32",
210
+ "description": "策略掌控程度:1弱(以客户策略为主) 2强(以我方提供策略) 3中(与客户共创)",
211
+ "title": "策略掌控程度",
212
+ "example": 3
213
+ },
214
+ "adCategoryIndustryIds": {
215
+ "type": "array",
216
+ "items": {
217
+ "type": "integer",
218
+ "format": "int64"
219
+ },
220
+ "description": "投放行业 ID。通过 GET /sino-opti-hive/biz-line-open/placement-categories 取一级节点 id",
221
+ "title": "投放行业ID"
222
+ },
223
+ "adCategoryProjectIds": {
224
+ "type": "array",
225
+ "items": {
226
+ "type": "integer",
227
+ "format": "int64"
228
+ },
229
+ "description": "投放品类 ID。通过 GET /sino-opti-hive/biz-line-open/placement-categories 取二级 children.id;选其他时可为空,改填 adCategoryOther",
230
+ "title": "投放品类ID"
231
+ },
232
+ "adCategoryOther": {
233
+ "type": "string",
234
+ "description": "投放品类-其他说明",
235
+ "title": "投放品类-其他"
236
+ },
237
+ "customerTypeIds": {
238
+ "type": "array",
239
+ "items": {
240
+ "type": "integer",
241
+ "format": "int64"
242
+ },
243
+ "description": "客户类型 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=CUSTOMER_TYPE 取 id",
244
+ "title": "客户类型ID"
245
+ },
246
+ "customerTypeOther": {
247
+ "type": "string",
248
+ "description": "客户类型-其他说明",
249
+ "title": "客户类型-其他"
250
+ },
251
+ "amUserIds": {
252
+ "type": "array",
253
+ "items": {
254
+ "type": "integer",
255
+ "format": "int32"
256
+ },
257
+ "description": "AM 用户 ID。通过 POST /sino-opti-hive/sso-team/getMemberList 取 userId;也可 POST /sino-opti-hive/user/getSsoUserList 按姓名搜",
258
+ "title": "AM用户ID"
259
+ },
260
+ "pmUserIds": {
261
+ "type": "array",
262
+ "items": {
263
+ "type": "integer",
264
+ "format": "int32"
265
+ },
266
+ "description": "PM 用户 ID。通过 POST /sino-opti-hive/sso-team/getMemberList 取 userId;也可 POST /sino-opti-hive/user/getSsoUserList 按姓名搜",
267
+ "title": "PM用户ID"
268
+ },
269
+ "customerInfrastructure": {
270
+ "type": "array",
271
+ "items": {
272
+ "type": "integer",
273
+ "format": "int32"
274
+ },
275
+ "description": "1=数据追踪方式:AdJust,2=数据追踪方式:AF,3=数据追踪方式:其他MMP,4=数据追踪方式:客户BI,5=数据追踪方式:媒体后台,6=素材产出方式:CB,7=素材产出方式:客户提供,8=素材产出方式:内部设计师制作,9=素材产出方式:无需素材(ASA、推流等),10=基建情况:基建完善,11=基建情况:三方回传数据异常,12=基建情况:APP埋点异常",
276
+ "title": "客户基建情况"
277
+ },
278
+ "coreIndex": {
279
+ "type": "string",
280
+ "description": "核心指标",
281
+ "title": "核心指标",
282
+ "example": "ROAS"
283
+ },
284
+ "monthlyMaterialCount": {
285
+ "type": "string",
286
+ "description": "月度上新素材量",
287
+ "title": "月度上新素材量",
288
+ "example": "20"
289
+ },
290
+ "projectInitStatus": {
291
+ "type": "string",
292
+ "description": "项目初始化状态",
293
+ "title": "项目初始化状态"
294
+ },
295
+ "projectBrief": {
296
+ "type": "string",
297
+ "description": "项目 Brief",
298
+ "title": "项目Brief"
299
+ },
300
+ "corporationIds": {
301
+ "type": "array",
302
+ "items": {
303
+ "type": "string"
304
+ },
305
+ "description": "关联签约主体 ID(字符串)。通过 POST /sino-opti-hive/corporation/page 获取签约主体 ID",
306
+ "title": "关联签约主体ID"
307
+ },
308
+ "projectIds": {
309
+ "type": "array",
310
+ "items": {
311
+ "type": "integer",
312
+ "format": "int64"
313
+ },
314
+ "description": "关联项目 ID",
315
+ "title": "关联项目ID"
316
+ },
317
+ "ssoTeamCode": {
318
+ "type": "string",
319
+ "description": "组别 code,单选,必填。通过 GET /sino-opti-hive/sso-team/group-list 取 code",
320
+ "title": "组别code",
321
+ "example": "TEAM_DEMO"
322
+ },
323
+ "businessRegion": {
324
+ "type": "string",
325
+ "description": "EAST_CHINA=华东,SOUTH_CHINA=华南,NORTH_CHINA=华北。必填",
326
+ "title": "商务地区",
327
+ "example": "CN"
328
+ },
329
+ "projectRating": {
330
+ "type": "string",
331
+ "description": "S、A、B、C。非新客必填",
332
+ "title": "项目评级",
333
+ "example": "A"
334
+ },
335
+ "newCustomerTag": {
336
+ "type": "string",
337
+ "description": "NEW_TAG=是(新客),NONE_NEW_TAG=否(非新客)",
338
+ "title": "新客标签",
339
+ "example": "OLD"
340
+ }
341
+ },
342
+ "required": [
343
+ "name",
344
+ "ssoTeamCode",
345
+ "businessRegion"
346
+ ]
176
347
  }
177
348
  },
178
349
  {
179
350
  "name": "biz-line-update",
180
- "displayName": "编辑业务线",
181
- "description": "⚠️ 写操作。成功时 result 为 Boolean,表示是否更新成功。",
351
+ "displayName": "更新业务线",
352
+ "description": "更新业务线信息",
182
353
  "group": "业务线策略",
183
354
  "method": "POST",
184
355
  "path": "/sino-opti-hive/biz-line/update",
@@ -187,15 +358,187 @@
187
358
  "domain": "biz-line",
188
359
  "shortcut": "+update",
189
360
  "risk": "write",
190
- "summary": "编辑业务线",
361
+ "summary": "更新业务线",
191
362
  "docFile": "biz-line-strategy.md",
192
363
  "requestSchema": {
193
- "$ref": "#/components/schemas/BizLineUpdateReqVO"
364
+ "type": "object",
365
+ "properties": {
366
+ "id": {
367
+ "type": "integer",
368
+ "format": "int64",
369
+ "description": "通过 POST /sino-opti-hive/biz-line/list 取 result.id",
370
+ "title": "业务线ID",
371
+ "example": 1251
372
+ },
373
+ "status": {
374
+ "type": "integer",
375
+ "format": "int32",
376
+ "description": "状态:1进行中 2已完成 3已暂停",
377
+ "title": "状态",
378
+ "example": 1
379
+ },
380
+ "name": {
381
+ "type": "string",
382
+ "description": "业务线名称,业务/产品线名称不可重复",
383
+ "title": "业务线名称",
384
+ "example": "示例业务线"
385
+ },
386
+ "mediaChannels": {
387
+ "type": "array",
388
+ "items": {
389
+ "type": "integer",
390
+ "format": "int32"
391
+ },
392
+ "description": "投放渠道 code。通过 GET /sino-opti-hive/biz-line-open/channels 取 code;名称见同接口 name",
393
+ "title": "投放渠道"
394
+ },
395
+ "strategyControlDegree": {
396
+ "type": "integer",
397
+ "format": "int32",
398
+ "description": "策略掌控程度:1弱(以客户策略为主) 2强(以我方提供策略) 3中(与客户共创)",
399
+ "title": "策略掌控程度",
400
+ "example": 3
401
+ },
402
+ "adCategoryIndustryIds": {
403
+ "type": "array",
404
+ "items": {
405
+ "type": "integer",
406
+ "format": "int64"
407
+ },
408
+ "description": "投放行业 ID。通过 GET /sino-opti-hive/biz-line-open/placement-categories 取一级节点 id",
409
+ "title": "投放行业ID"
410
+ },
411
+ "adCategoryProjectIds": {
412
+ "type": "array",
413
+ "items": {
414
+ "type": "integer",
415
+ "format": "int64"
416
+ },
417
+ "description": "投放品类 ID。通过 GET /sino-opti-hive/biz-line-open/placement-categories 取二级 children.id;选其他时可为空,改填 adCategoryOther",
418
+ "title": "投放品类ID"
419
+ },
420
+ "adCategoryOther": {
421
+ "type": "string",
422
+ "description": "投放品类-其他说明",
423
+ "title": "投放品类-其他"
424
+ },
425
+ "customerTypeIds": {
426
+ "type": "array",
427
+ "items": {
428
+ "type": "integer",
429
+ "format": "int64"
430
+ },
431
+ "description": "客户类型 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=CUSTOMER_TYPE 取 id",
432
+ "title": "客户类型ID"
433
+ },
434
+ "customerTypeOther": {
435
+ "type": "string",
436
+ "description": "客户类型-其他说明",
437
+ "title": "客户类型-其他"
438
+ },
439
+ "amUserIds": {
440
+ "type": "array",
441
+ "items": {
442
+ "type": "integer",
443
+ "format": "int32"
444
+ },
445
+ "description": "AM 用户 ID。通过 POST /sino-opti-hive/sso-team/getMemberList 取 userId;也可 POST /sino-opti-hive/user/getSsoUserList 按姓名搜",
446
+ "title": "AM用户ID"
447
+ },
448
+ "pmUserIds": {
449
+ "type": "array",
450
+ "items": {
451
+ "type": "integer",
452
+ "format": "int32"
453
+ },
454
+ "description": "PM 用户 ID。通过 POST /sino-opti-hive/sso-team/getMemberList 取 userId;也可 POST /sino-opti-hive/user/getSsoUserList 按姓名搜",
455
+ "title": "PM用户ID"
456
+ },
457
+ "customerInfrastructure": {
458
+ "type": "array",
459
+ "items": {
460
+ "type": "integer",
461
+ "format": "int32"
462
+ },
463
+ "description": "1=数据追踪方式:AdJust,2=数据追踪方式:AF,3=数据追踪方式:其他MMP,4=数据追踪方式:客户BI,5=数据追踪方式:媒体后台,6=素材产出方式:CB,7=素材产出方式:客户提供,8=素材产出方式:内部设计师制作,9=素材产出方式:无需素材(ASA、推流等),10=基建情况:基建完善,11=基建情况:三方回传数据异常,12=基建情况:APP埋点异常",
464
+ "title": "客户基建情况"
465
+ },
466
+ "coreIndex": {
467
+ "type": "string",
468
+ "description": "核心指标",
469
+ "title": "核心指标",
470
+ "example": "ROAS"
471
+ },
472
+ "monthlyMaterialCount": {
473
+ "type": "string",
474
+ "description": "月度上新素材量",
475
+ "title": "月度上新素材量",
476
+ "example": "20"
477
+ },
478
+ "projectInitStatus": {
479
+ "type": "string",
480
+ "description": "项目初始化状态",
481
+ "title": "项目初始化状态"
482
+ },
483
+ "projectBrief": {
484
+ "type": "string",
485
+ "description": "项目 Brief",
486
+ "title": "项目Brief"
487
+ },
488
+ "corporationIds": {
489
+ "type": "array",
490
+ "items": {
491
+ "type": "string"
492
+ },
493
+ "description": "关联签约主体 ID(字符串)。通过 POST /sino-opti-hive/corporation/page 获取签约主体 ID",
494
+ "title": "关联签约主体ID"
495
+ },
496
+ "projectIds": {
497
+ "type": "array",
498
+ "items": {
499
+ "type": "integer",
500
+ "format": "int64"
501
+ },
502
+ "description": "关联项目 ID。通过 POST /sino-opti-hive/optimize/project/queryByPage 获取;按 ID 反查名称用 POST /sino-opti-hive/optimize/project/listByIds",
503
+ "title": "关联项目ID"
504
+ },
505
+ "ssoTeamCode": {
506
+ "type": "string",
507
+ "description": "组别 code,单选,必填。通过 GET /sino-opti-hive/sso-team/group-list 取 code",
508
+ "title": "组别code",
509
+ "example": "TEAM_DEMO"
510
+ },
511
+ "businessRegion": {
512
+ "type": "string",
513
+ "description": "EAST_CHINA=华东,SOUTH_CHINA=华南,NORTH_CHINA=华北。必填",
514
+ "title": "商务地区",
515
+ "example": "CN"
516
+ },
517
+ "projectRating": {
518
+ "type": "string",
519
+ "description": "S、A、B、C。非新客必填",
520
+ "title": "项目评级",
521
+ "example": "A"
522
+ },
523
+ "newCustomerTag": {
524
+ "type": "string",
525
+ "description": "NEW_TAG=是(新客),NONE_NEW_TAG=否(非新客)",
526
+ "title": "新客标签",
527
+ "example": "OLD"
528
+ }
529
+ },
530
+ "required": [
531
+ "id",
532
+ "status",
533
+ "name",
534
+ "ssoTeamCode",
535
+ "businessRegion"
536
+ ]
194
537
  }
195
538
  },
196
539
  {
197
540
  "name": "biz-line-status-update",
198
- "displayName": "切换业务线状态",
541
+ "displayName": "更新业务线状态",
199
542
  "description": "⚠️ 写操作。仅更新状态与操作人;成功时 result 为 Boolean。status:1进行中 2已完成 3已暂停。",
200
543
  "group": "业务线策略",
201
544
  "method": "POST",
@@ -205,10 +548,29 @@
205
548
  "domain": "biz-line",
206
549
  "shortcut": "+status",
207
550
  "risk": "write",
208
- "summary": "切换业务线状态",
551
+ "summary": "更新业务线状态",
209
552
  "docFile": "biz-line-strategy.md",
210
553
  "requestSchema": {
211
- "$ref": "#/components/schemas/BizLineStatusUpdateReqVO"
554
+ "type": "object",
555
+ "properties": {
556
+ "id": {
557
+ "type": "integer",
558
+ "format": "int64",
559
+ "title": "业务线ID",
560
+ "example": 1251
561
+ },
562
+ "status": {
563
+ "type": "integer",
564
+ "format": "int32",
565
+ "description": "状态:1进行中 2已完成 3已暂停;对应 BizLineStatusEnum",
566
+ "title": "状态",
567
+ "example": 1
568
+ }
569
+ },
570
+ "required": [
571
+ "id",
572
+ "status"
573
+ ]
212
574
  }
213
575
  },
214
576
  {
@@ -226,141 +588,625 @@
226
588
  "summary": "删除业务线",
227
589
  "docFile": "biz-line-strategy.md",
228
590
  "requestSchema": {
229
- "$ref": "#/components/schemas/BizLineDelReqVO"
591
+ "type": "object",
592
+ "properties": {
593
+ "id": {
594
+ "type": "integer",
595
+ "format": "int64",
596
+ "title": "业务线ID",
597
+ "example": 1251
598
+ }
599
+ },
600
+ "required": [
601
+ "id"
602
+ ]
230
603
  }
231
604
  },
232
605
  {
233
- "name": "biz-line-strategy-period-list",
234
- "displayName": "策略周期列表",
235
- "description": "result 为 BizLineStrategyPeriodListVO,含 items 与 total。",
606
+ "name": "biz-line-strategy-list",
607
+ "displayName": "查询投放策略分页列表",
608
+ "description": "查询投放策略分页列表",
236
609
  "group": "业务线策略",
237
610
  "method": "POST",
238
- "path": "/sino-opti-hive/biz-line/strategy/period-list",
611
+ "path": "/sino-opti-hive/biz-line/strategy/list",
239
612
  "timeout": 20000,
240
613
  "tag": "业务线策略",
241
614
  "domain": "biz-line",
242
- "shortcut": "+period-list",
615
+ "shortcut": "+strategies",
243
616
  "risk": "read",
244
- "summary": "策略周期列表",
617
+ "summary": "查询投放策略分页列表",
245
618
  "docFile": "biz-line-strategy.md",
246
619
  "requestSchema": {
247
- "$ref": "#/components/schemas/BizLineStrategyPeriodListReqVO"
620
+ "type": "object",
621
+ "properties": {
622
+ "pageNum": {
623
+ "type": "integer",
624
+ "format": "int32",
625
+ "description": "页码,从 1 开始",
626
+ "title": "页码",
627
+ "example": 1
628
+ },
629
+ "pageSize": {
630
+ "type": "integer",
631
+ "format": "int32",
632
+ "description": "每页条数",
633
+ "title": "每页条数",
634
+ "example": 20
635
+ },
636
+ "sortDirection": {
637
+ "type": "string",
638
+ "description": "创建日期排序 DESC 或 ASC,默认 DESC",
639
+ "title": "排序方向",
640
+ "example": "DESC"
641
+ },
642
+ "bizLineId": {
643
+ "type": "integer",
644
+ "format": "int64",
645
+ "description": "可选,不传则按权限查全部可见业务线。",
646
+ "title": "业务线ID",
647
+ "example": 1251
648
+ },
649
+ "trafficLight": {
650
+ "type": "integer",
651
+ "format": "int32",
652
+ "description": "红绿灯筛选(策略表现):1=绿灯KPI达标,2=黄灯距KPIGAP20%内,3=红灯距KPIGAP20%以上,4=红灯已暂停,5=黄灯存在风险,6=绿灯KPI达标且项目顺利。",
653
+ "title": "红绿灯"
654
+ }
655
+ },
656
+ "required": [
657
+ "pageNum",
658
+ "pageSize"
659
+ ]
248
660
  }
249
661
  },
250
662
  {
251
- "name": "biz-line-strategy-list",
252
- "displayName": "查询策略分页列表",
253
- "description": "result 为公司分页对象:total=总条数,result=当前页的 BizLineStrategyDetailVO 列表。",
663
+ "name": "biz-line-strategy-spend",
664
+ "displayName": "查询投放策略消耗信息",
665
+ "description": "查询投放策略消耗信息",
254
666
  "group": "业务线策略",
255
667
  "method": "POST",
256
- "path": "/sino-opti-hive/biz-line/strategy/list",
668
+ "path": "/sino-opti-hive/biz-line/strategy/spend",
257
669
  "timeout": 20000,
258
670
  "tag": "业务线策略",
259
671
  "domain": "biz-line",
260
- "shortcut": "+strategies",
672
+ "shortcut": "+spend",
261
673
  "risk": "read",
262
- "summary": "查询策略分页列表",
674
+ "summary": "查询投放策略消耗信息",
263
675
  "docFile": "biz-line-strategy.md",
264
676
  "requestSchema": {
265
677
  "type": "object",
266
678
  "properties": {
267
- "pageNum": {
679
+ "strategyId": {
680
+ "type": "integer",
681
+ "format": "int64",
682
+ "description": "通过 POST /sino-opti-hive/biz-line/strategy/list 取 result.id,或 POST /sino-opti-hive/biz-line/strategy/period-list 取 items.id",
683
+ "title": "投放策略ID",
684
+ "example": 1
685
+ }
686
+ },
687
+ "required": [
688
+ "strategyId"
689
+ ]
690
+ }
691
+ },
692
+ {
693
+ "name": "biz-line-strategy-save",
694
+ "displayName": "新建投放策略",
695
+ "description": "新建投放策略,投放策略按周填写",
696
+ "group": "业务线策略",
697
+ "method": "POST",
698
+ "path": "/sino-opti-hive/biz-line/strategy/save",
699
+ "timeout": 20000,
700
+ "tag": "业务线策略",
701
+ "domain": "biz-line",
702
+ "shortcut": "+strategy-save",
703
+ "risk": "write",
704
+ "summary": "新建投放策略",
705
+ "docFile": "biz-line-strategy.md",
706
+ "requestSchema": {
707
+ "type": "object",
708
+ "properties": {
709
+ "bizLineId": {
710
+ "type": "integer",
711
+ "format": "int64",
712
+ "description": "通过 POST /sino-opti-hive/biz-line/list 取 result.id",
713
+ "title": "业务线ID",
714
+ "example": 1251
715
+ },
716
+ "periodStart": {
717
+ "type": "string",
718
+ "format": "date",
719
+ "description": "策略周期起(日期)",
720
+ "title": "策略周期起",
721
+ "example": "2026-09-01"
722
+ },
723
+ "periodEnd": {
724
+ "type": "string",
725
+ "format": "date",
726
+ "description": "策略周期止(日期)",
727
+ "title": "策略周期止",
728
+ "example": "2026-09-01"
729
+ },
730
+ "budgetStrategyTags": {
731
+ "type": "array",
732
+ "items": {
733
+ "type": "integer",
734
+ "format": "int64"
735
+ },
736
+ "description": "预算策略标签 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=BUDGET_STRATEGY 取 id",
737
+ "title": "预算策略标签ID"
738
+ },
739
+ "budgetStrategySupplement": {
740
+ "type": "string",
741
+ "description": "预算策略补充说明",
742
+ "title": "预算策略补充说明"
743
+ },
744
+ "mediaStrategyTags": {
745
+ "type": "array",
746
+ "items": {
747
+ "type": "integer",
748
+ "format": "int64"
749
+ },
750
+ "description": "媒介策略标签 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=MEDIA_STRATEGY 取 id",
751
+ "title": "媒介策略标签ID"
752
+ },
753
+ "mediaStrategySupplement": {
754
+ "type": "string",
755
+ "description": "媒介策略补充说明",
756
+ "title": "媒介策略补充说明"
757
+ },
758
+ "audienceStrategyTags": {
759
+ "type": "array",
760
+ "items": {
761
+ "type": "integer",
762
+ "format": "int64"
763
+ },
764
+ "description": "受众策略标签 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=AUDIENCE_STRATEGY 取 id",
765
+ "title": "受众策略标签ID"
766
+ },
767
+ "audienceStrategySupplement": {
768
+ "type": "string",
769
+ "description": "受众策略补充说明",
770
+ "title": "受众策略补充说明"
771
+ },
772
+ "creativeStrategy": {
773
+ "type": "string",
774
+ "description": "素材创意策略说明,最大 5000 字",
775
+ "title": "素材创意策略说明"
776
+ },
777
+ "previewPeriodStart": {
778
+ "type": "string",
779
+ "format": "date",
780
+ "description": "上期(preview)策略周期起;缺省为本期 periodStart 的上一自然周周一",
781
+ "title": "上期策略周期起",
782
+ "example": "2026-09-01"
783
+ },
784
+ "previewPeriodEnd": {
785
+ "type": "string",
786
+ "format": "date",
787
+ "description": "上期(preview)策略周期止;缺省为 previewPeriodStart+6(周日)",
788
+ "title": "上期策略周期止",
789
+ "example": "2026-09-01"
790
+ },
791
+ "previewBudgetStrategyTags": {
792
+ "type": "array",
793
+ "items": {
794
+ "type": "integer",
795
+ "format": "int64"
796
+ },
797
+ "description": "上期预算策略标签 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=BUDGET_STRATEGY 取 id",
798
+ "title": "上期预算策略标签ID"
799
+ },
800
+ "previewBudgetStrategySupplement": {
801
+ "type": "string",
802
+ "description": "上期预算策略补充说明",
803
+ "title": "上期预算策略补充说明"
804
+ },
805
+ "previewMediaStrategyTags": {
806
+ "type": "array",
807
+ "items": {
808
+ "type": "integer",
809
+ "format": "int64"
810
+ },
811
+ "description": "上期媒介策略标签 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=MEDIA_STRATEGY 取 id",
812
+ "title": "上期媒介策略标签ID"
813
+ },
814
+ "previewMediaStrategySupplement": {
815
+ "type": "string",
816
+ "description": "上期媒介策略补充说明",
817
+ "title": "上期媒介策略补充说明"
818
+ },
819
+ "previewAudienceStrategyTags": {
820
+ "type": "array",
821
+ "items": {
822
+ "type": "integer",
823
+ "format": "int64"
824
+ },
825
+ "description": "上期受众策略标签 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=AUDIENCE_STRATEGY 取 id",
826
+ "title": "上期受众策略标签ID"
827
+ },
828
+ "previewAudienceStrategySupplement": {
829
+ "type": "string",
830
+ "description": "上期受众策略补充说明",
831
+ "title": "上期受众策略补充说明"
832
+ },
833
+ "previewCreativeStrategy": {
834
+ "type": "string",
835
+ "description": "上期素材创意策略说明,最大 5000 字",
836
+ "title": "上期素材创意策略说明"
837
+ },
838
+ "trafficLight": {
839
+ "type": "integer",
840
+ "format": "int32",
841
+ "description": "红绿灯:1 KPI达标、2 距GAP 20%内、3 距GAP 20%以上、4 已暂停、5 存在风险、6 KPI达标且项目顺利",
842
+ "title": "红绿灯"
843
+ },
844
+ "coreIssueCategories": {
845
+ "type": "array",
846
+ "items": {
847
+ "type": "integer",
848
+ "format": "int32"
849
+ },
850
+ "description": "1=受众策略问题,2=跨媒介策略问题,3=媒介广告产品使用策略问题,4=出价策略问题,5=素材策略问题,6=素材执行问题,7=素材管理问题,8=投放规划问题,9=媒体素材政策/尺度/风控问题,10=媒体适配/潜力问题,11=市场选择/竞争问题,12=客户对接不顺畅,13=客户侧:数据对接问题,14=客户侧:产品问题/投放生命周期问题,15=客户侧:运营/基建问题,16=客户侧:存在投放限制,17=客户侧:转自投,18=客户侧:需求临时无规划,19=客户侧:KPI不合理,20=投放生命周期问题/素材疲劳问题,21=内部团队人员调配问题,22=其他",
851
+ "title": "核心问题分类"
852
+ },
853
+ "issuesAndOpportunities": {
854
+ "type": "string",
855
+ "description": "项目问题&机会,最大 5000 字",
856
+ "title": "项目问题&机会"
857
+ },
858
+ "spend": {
859
+ "type": "string",
860
+ "description": "周期投放消耗(回顾,展示用字符串),最大 50 字",
861
+ "title": "周期投放消耗"
862
+ },
863
+ "customerSatisfaction": {
864
+ "type": "integer",
865
+ "format": "int32",
866
+ "description": "客户满意度:1满意 2不满意",
867
+ "title": "客户满意度"
868
+ },
869
+ "satisfactionReason": {
870
+ "type": "string",
871
+ "description": "满意度原因说明,最大 5000 字",
872
+ "title": "满意度原因说明"
873
+ },
874
+ "coreEffectIndex": {
875
+ "type": "string",
876
+ "description": "核心效果指标,最大 5000 字",
877
+ "title": "核心效果指标"
878
+ },
879
+ "budgetStrategyEffect": {
880
+ "type": "integer",
881
+ "format": "int32",
882
+ "description": "预算策略效果:1有效 2无效 3待观察",
883
+ "title": "预算策略效果"
884
+ },
885
+ "budgetStrategyLearning": {
886
+ "type": "string",
887
+ "description": "预算策略 learning",
888
+ "title": "预算策略learning"
889
+ },
890
+ "mediaStrategyEffect": {
891
+ "type": "integer",
892
+ "format": "int32",
893
+ "description": "媒介策略效果:1有效 2无效 3待观察",
894
+ "title": "媒介策略效果"
895
+ },
896
+ "mediaStrategyLearning": {
897
+ "type": "string",
898
+ "description": "媒介策略 learning",
899
+ "title": "媒介策略learning"
900
+ },
901
+ "audienceStrategyEffect": {
902
+ "type": "integer",
903
+ "format": "int32",
904
+ "description": "受众策略效果:1有效 2无效 3待观察",
905
+ "title": "受众策略效果"
906
+ },
907
+ "audienceStrategyLearning": {
908
+ "type": "string",
909
+ "description": "受众策略 learning",
910
+ "title": "受众策略learning"
911
+ },
912
+ "creativeStrategyEffect": {
913
+ "type": "integer",
914
+ "format": "int32",
915
+ "description": "素材策略效果:1有效 2无效 3待观察",
916
+ "title": "素材策略效果"
917
+ },
918
+ "creativeStrategyLearning": {
919
+ "type": "string",
920
+ "description": "素材策略 learning",
921
+ "title": "素材策略learning"
922
+ }
923
+ },
924
+ "required": [
925
+ "bizLineId",
926
+ "periodStart",
927
+ "periodEnd",
928
+ "budgetStrategyTags",
929
+ "budgetStrategySupplement",
930
+ "mediaStrategyTags",
931
+ "mediaStrategySupplement",
932
+ "audienceStrategyTags",
933
+ "audienceStrategySupplement",
934
+ "creativeStrategy"
935
+ ]
936
+ }
937
+ },
938
+ {
939
+ "name": "biz-line-strategy-update",
940
+ "displayName": "更新投放策略",
941
+ "description": "更新投放策略",
942
+ "group": "业务线策略",
943
+ "method": "POST",
944
+ "path": "/sino-opti-hive/biz-line/strategy/update",
945
+ "timeout": 20000,
946
+ "tag": "业务线策略",
947
+ "domain": "biz-line",
948
+ "shortcut": "+strategy-update",
949
+ "risk": "write",
950
+ "summary": "更新投放策略",
951
+ "docFile": "biz-line-strategy.md",
952
+ "requestSchema": {
953
+ "type": "object",
954
+ "properties": {
955
+ "id": {
956
+ "type": "integer",
957
+ "format": "int64",
958
+ "description": "通过 POST /sino-opti-hive/biz-line/strategy/list 取 result.id,或 POST /sino-opti-hive/biz-line/strategy/period-list 取 items.id",
959
+ "title": "投放策略ID",
960
+ "example": 1
961
+ },
962
+ "version": {
963
+ "type": "integer",
964
+ "format": "int32",
965
+ "description": "乐观锁版本号",
966
+ "title": "乐观锁版本号",
967
+ "example": 1
968
+ },
969
+ "overwrite": {
970
+ "type": "boolean",
971
+ "description": "默认 false:版本冲突则报错;true 强制覆盖",
972
+ "title": "强制覆盖",
973
+ "example": false
974
+ },
975
+ "bizLineId": {
976
+ "type": "integer",
977
+ "format": "int64",
978
+ "description": "通过 POST /sino-opti-hive/biz-line/list 取 result.id",
979
+ "title": "业务线ID",
980
+ "example": 1251
981
+ },
982
+ "periodStart": {
983
+ "type": "string",
984
+ "format": "date",
985
+ "description": "策略周期起(日期)",
986
+ "title": "策略周期起",
987
+ "example": "2026-09-01"
988
+ },
989
+ "periodEnd": {
990
+ "type": "string",
991
+ "format": "date",
992
+ "description": "策略周期止(日期)",
993
+ "title": "策略周期止",
994
+ "example": "2026-09-01"
995
+ },
996
+ "budgetStrategyTags": {
997
+ "type": "array",
998
+ "items": {
999
+ "type": "integer",
1000
+ "format": "int64"
1001
+ },
1002
+ "description": "预算策略标签 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=BUDGET_STRATEGY 取 id",
1003
+ "title": "预算策略标签ID"
1004
+ },
1005
+ "budgetStrategySupplement": {
1006
+ "type": "string",
1007
+ "description": "预算策略补充说明",
1008
+ "title": "预算策略补充说明"
1009
+ },
1010
+ "mediaStrategyTags": {
1011
+ "type": "array",
1012
+ "items": {
1013
+ "type": "integer",
1014
+ "format": "int64"
1015
+ },
1016
+ "description": "媒介策略标签 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=MEDIA_STRATEGY 取 id",
1017
+ "title": "媒介策略标签ID"
1018
+ },
1019
+ "mediaStrategySupplement": {
1020
+ "type": "string",
1021
+ "description": "媒介策略补充说明",
1022
+ "title": "媒介策略补充说明"
1023
+ },
1024
+ "audienceStrategyTags": {
1025
+ "type": "array",
1026
+ "items": {
1027
+ "type": "integer",
1028
+ "format": "int64"
1029
+ },
1030
+ "description": "受众策略标签 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=AUDIENCE_STRATEGY 取 id",
1031
+ "title": "受众策略标签ID"
1032
+ },
1033
+ "audienceStrategySupplement": {
1034
+ "type": "string",
1035
+ "description": "受众策略补充说明",
1036
+ "title": "受众策略补充说明"
1037
+ },
1038
+ "creativeStrategy": {
1039
+ "type": "string",
1040
+ "description": "素材创意策略说明,最大 5000 字",
1041
+ "title": "素材创意策略说明"
1042
+ },
1043
+ "previewPeriodStart": {
1044
+ "type": "string",
1045
+ "format": "date",
1046
+ "description": "上期(preview)策略周期起;缺省为本期 periodStart 的上一自然周周一",
1047
+ "title": "上期策略周期起",
1048
+ "example": "2026-09-01"
1049
+ },
1050
+ "previewPeriodEnd": {
1051
+ "type": "string",
1052
+ "format": "date",
1053
+ "description": "上期(preview)策略周期止;缺省为 previewPeriodStart+6(周日)",
1054
+ "title": "上期策略周期止",
1055
+ "example": "2026-09-01"
1056
+ },
1057
+ "previewBudgetStrategyTags": {
1058
+ "type": "array",
1059
+ "items": {
1060
+ "type": "integer",
1061
+ "format": "int64"
1062
+ },
1063
+ "description": "上期预算策略标签 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=BUDGET_STRATEGY 取 id",
1064
+ "title": "上期预算策略标签ID"
1065
+ },
1066
+ "previewBudgetStrategySupplement": {
1067
+ "type": "string",
1068
+ "description": "上期预算策略补充说明",
1069
+ "title": "上期预算策略补充说明"
1070
+ },
1071
+ "previewMediaStrategyTags": {
1072
+ "type": "array",
1073
+ "items": {
1074
+ "type": "integer",
1075
+ "format": "int64"
1076
+ },
1077
+ "description": "上期媒介策略标签 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=MEDIA_STRATEGY 取 id",
1078
+ "title": "上期媒介策略标签ID"
1079
+ },
1080
+ "previewMediaStrategySupplement": {
1081
+ "type": "string",
1082
+ "description": "上期媒介策略补充说明",
1083
+ "title": "上期媒介策略补充说明"
1084
+ },
1085
+ "previewAudienceStrategyTags": {
1086
+ "type": "array",
1087
+ "items": {
1088
+ "type": "integer",
1089
+ "format": "int64"
1090
+ },
1091
+ "description": "上期受众策略标签 ID。通过 GET /sino-opti-hive/dict/items?sceneCode=AUDIENCE_STRATEGY 取 id",
1092
+ "title": "上期受众策略标签ID"
1093
+ },
1094
+ "previewAudienceStrategySupplement": {
1095
+ "type": "string",
1096
+ "description": "上期受众策略补充说明",
1097
+ "title": "上期受众策略补充说明"
1098
+ },
1099
+ "previewCreativeStrategy": {
1100
+ "type": "string",
1101
+ "description": "上期素材创意策略说明,最大 5000 字",
1102
+ "title": "上期素材创意策略说明"
1103
+ },
1104
+ "trafficLight": {
268
1105
  "type": "integer",
269
1106
  "format": "int32",
270
- "description": "页码,从 1 开始",
271
- "title": "页码",
272
- "example": 1
1107
+ "description": "红绿灯:1 KPI达标、2 距GAP 20%内、3 距GAP 20%以上、4 已暂停、5 存在风险、6 KPI达标且项目顺利",
1108
+ "title": "红绿灯"
273
1109
  },
274
- "pageSize": {
1110
+ "coreIssueCategories": {
1111
+ "type": "array",
1112
+ "items": {
1113
+ "type": "integer",
1114
+ "format": "int32"
1115
+ },
1116
+ "description": "1=受众策略问题,2=跨媒介策略问题,3=媒介广告产品使用策略问题,4=出价策略问题,5=素材策略问题,6=素材执行问题,7=素材管理问题,8=投放规划问题,9=媒体素材政策/尺度/风控问题,10=媒体适配/潜力问题,11=市场选择/竞争问题,12=客户对接不顺畅,13=客户侧:数据对接问题,14=客户侧:产品问题/投放生命周期问题,15=客户侧:运营/基建问题,16=客户侧:存在投放限制,17=客户侧:转自投,18=客户侧:需求临时无规划,19=客户侧:KPI不合理,20=投放生命周期问题/素材疲劳问题,21=内部团队人员调配问题,22=其他",
1117
+ "title": "核心问题分类"
1118
+ },
1119
+ "issuesAndOpportunities": {
1120
+ "type": "string",
1121
+ "description": "项目问题&机会,最大 5000 字",
1122
+ "title": "项目问题&机会"
1123
+ },
1124
+ "spend": {
1125
+ "type": "string",
1126
+ "description": "周期消耗(回顾,展示用字符串),最大 50 字",
1127
+ "title": "周期消耗"
1128
+ },
1129
+ "customerSatisfaction": {
275
1130
  "type": "integer",
276
1131
  "format": "int32",
277
- "description": "每页条数",
278
- "title": "每页条数",
279
- "example": 20
1132
+ "description": "客户满意度:1满意 2不满意",
1133
+ "title": "客户满意度"
280
1134
  },
281
- "sortDirection": {
1135
+ "satisfactionReason": {
282
1136
  "type": "string",
283
- "description": "DESC 或 ASC,默认 DESC",
284
- "title": "排序方向",
285
- "example": "DESC"
1137
+ "description": "满意度原因说明,最大 5000 字",
1138
+ "title": "满意度原因说明"
286
1139
  },
287
- "bizLineId": {
1140
+ "coreEffectIndex": {
1141
+ "type": "string",
1142
+ "description": "核心效果指标,最大 5000 字",
1143
+ "title": "核心效果指标"
1144
+ },
1145
+ "budgetStrategyEffect": {
288
1146
  "type": "integer",
289
- "format": "int64",
290
- "description": "可选。不传则按权限查全部可见业务线。通过 POST /sino-opti-hive/biz-line/list 取 result.id",
291
- "title": "业务线ID",
292
- "example": 1251
1147
+ "format": "int32",
1148
+ "description": "预算策略效果:1有效 2无效 3待观察",
1149
+ "title": "预算策略效果"
293
1150
  },
294
- "trafficLight": {
1151
+ "budgetStrategyLearning": {
1152
+ "type": "string",
1153
+ "description": "预算策略 learning",
1154
+ "title": "预算策略learning"
1155
+ },
1156
+ "mediaStrategyEffect": {
295
1157
  "type": "integer",
296
1158
  "format": "int32",
297
- "description": "红绿灯筛选(策略表现):1=绿灯KPI达标,2=黄灯距KPIGAP20%内,3=红灯距KPIGAP20%以上,4=红灯已暂停,5=黄灯存在风险,6=绿灯KPI达标且项目顺利。",
298
- "title": "红绿灯"
1159
+ "description": "媒介策略效果:1有效 2无效 3待观察",
1160
+ "title": "媒介策略效果"
1161
+ },
1162
+ "mediaStrategyLearning": {
1163
+ "type": "string",
1164
+ "description": "媒介策略 learning",
1165
+ "title": "媒介策略learning"
1166
+ },
1167
+ "audienceStrategyEffect": {
1168
+ "type": "integer",
1169
+ "format": "int32",
1170
+ "description": "受众策略效果:1有效 2无效 3待观察",
1171
+ "title": "受众策略效果"
1172
+ },
1173
+ "audienceStrategyLearning": {
1174
+ "type": "string",
1175
+ "description": "受众策略 learning",
1176
+ "title": "受众策略learning"
1177
+ },
1178
+ "creativeStrategyEffect": {
1179
+ "type": "integer",
1180
+ "format": "int32",
1181
+ "description": "素材策略效果:1有效 2无效 3待观察",
1182
+ "title": "素材策略效果"
1183
+ },
1184
+ "creativeStrategyLearning": {
1185
+ "type": "string",
1186
+ "description": "素材策略 learning",
1187
+ "title": "素材策略learning"
299
1188
  }
300
1189
  },
301
1190
  "required": [
302
- "bizLineId"
1191
+ "id",
1192
+ "version",
1193
+ "bizLineId",
1194
+ "periodStart",
1195
+ "periodEnd",
1196
+ "budgetStrategyTags",
1197
+ "budgetStrategySupplement",
1198
+ "mediaStrategyTags",
1199
+ "mediaStrategySupplement",
1200
+ "audienceStrategyTags",
1201
+ "audienceStrategySupplement",
1202
+ "creativeStrategy"
303
1203
  ]
304
1204
  }
305
1205
  },
306
- {
307
- "name": "biz-line-strategy-spend",
308
- "displayName": "策略周期内关联项目周表消耗汇总",
309
- "description": "result 为 BizLineStrategySpendVO,含 totalSpend。",
310
- "group": "业务线策略",
311
- "method": "POST",
312
- "path": "/sino-opti-hive/biz-line/strategy/spend",
313
- "timeout": 20000,
314
- "tag": "业务线策略",
315
- "domain": "biz-line",
316
- "shortcut": "+spend",
317
- "risk": "read",
318
- "summary": "策略周期内关联项目周表消耗汇总",
319
- "docFile": "biz-line-strategy.md",
320
- "requestSchema": {
321
- "$ref": "#/components/schemas/BizLineStrategySpendReqVO"
322
- }
323
- },
324
- {
325
- "name": "biz-line-strategy-save",
326
- "displayName": "新建策略",
327
- "description": "⚠️ 写操作。成功时 result 为 Boolean,表示是否保存成功。",
328
- "group": "业务线策略",
329
- "method": "POST",
330
- "path": "/sino-opti-hive/biz-line/strategy/save",
331
- "timeout": 20000,
332
- "tag": "业务线策略",
333
- "domain": "biz-line",
334
- "shortcut": "+strategy-save",
335
- "risk": "write",
336
- "summary": "新建策略",
337
- "docFile": "biz-line-strategy.md",
338
- "requestSchema": {
339
- "$ref": "#/components/schemas/BizLineStrategySaveReqVO"
340
- }
341
- },
342
- {
343
- "name": "biz-line-strategy-update",
344
- "displayName": "编辑策略",
345
- "description": "⚠️ 写操作。成功时 result 为 Boolean。version 为乐观锁;overwrite=true 强制覆盖。",
346
- "group": "业务线策略",
347
- "method": "POST",
348
- "path": "/sino-opti-hive/biz-line/strategy/update",
349
- "timeout": 20000,
350
- "tag": "业务线策略",
351
- "domain": "biz-line",
352
- "shortcut": "+strategy-update",
353
- "risk": "write",
354
- "summary": "编辑策略",
355
- "docFile": "biz-line-strategy.md",
356
- "requestSchema": {
357
- "$ref": "#/components/schemas/BizLineStrategyUpdateReqVO"
358
- }
359
- },
360
1206
  {
361
1207
  "name": "biz-line-strategy-del",
362
- "displayName": "删除策略",
363
- "description": "⚠️ 写操作。成功时 result 为 Boolean,表示是否删除成功。",
1208
+ "displayName": "删除投放策略",
1209
+ "description": "删除投放策略",
364
1210
  "group": "业务线策略",
365
1211
  "method": "POST",
366
1212
  "path": "/sino-opti-hive/biz-line/strategy/del",
@@ -369,16 +1215,28 @@
369
1215
  "domain": "biz-line",
370
1216
  "shortcut": "+strategy-delete",
371
1217
  "risk": "high-risk-write",
372
- "summary": "删除策略",
1218
+ "summary": "删除投放策略",
373
1219
  "docFile": "biz-line-strategy.md",
374
1220
  "requestSchema": {
375
- "$ref": "#/components/schemas/BizLineStrategyDelReqVO"
1221
+ "type": "object",
1222
+ "properties": {
1223
+ "id": {
1224
+ "type": "integer",
1225
+ "format": "int64",
1226
+ "description": "通过 POST /sino-opti-hive/biz-line/strategy/list 取 result.id,或 POST /sino-opti-hive/biz-line/strategy/period-list 取 items.id",
1227
+ "title": "投放策略ID",
1228
+ "example": 1
1229
+ }
1230
+ },
1231
+ "required": [
1232
+ "id"
1233
+ ]
376
1234
  }
377
1235
  },
378
1236
  {
379
1237
  "name": "biz-line-open-channels",
380
1238
  "displayName": "查询投放渠道列表",
381
- "description": "无入参,返回 ChannelEnum 全量:code = 枚举 id(即 list 的 mediaChannelId),name = 渠道名称。",
1239
+ "description": "查询投放渠道列表",
382
1240
  "group": "业务线查询",
383
1241
  "method": "GET",
384
1242
  "path": "/sino-opti-hive/biz-line-open/channels",
@@ -392,8 +1250,8 @@
392
1250
  },
393
1251
  {
394
1252
  "name": "biz-line-open-placement-categories",
395
- "displayName": "查询投放品类字典树",
396
- "description": "无入参,sceneCode 固定 PLACEMENT_CATEGORY。一级节点 = 投放行业,二级节点(children)= 投放品类,分别对应筛选参数 adCategoryIndustryId / adCategoryProjectId。已过滤 isOther=1 的「其他」。叶子节点 children 为 null。",
1253
+ "displayName": "查询投放品类字典",
1254
+ "description": "查询投放品类字典,sceneCode 固定 PLACEMENT_CATEGORY。一级节点 = 投放行业,二级节点(children)= 投放品类,分别对应筛选参数 adCategoryIndustryId / adCategoryProjectId。已过滤 isOther=1 的「其他」。叶子节点 children 为 null。",
397
1255
  "group": "业务线查询",
398
1256
  "method": "GET",
399
1257
  "path": "/sino-opti-hive/biz-line-open/placement-categories",
@@ -402,13 +1260,13 @@
402
1260
  "domain": "biz-line",
403
1261
  "shortcut": "+categories",
404
1262
  "risk": "read",
405
- "summary": "查询投放品类字典树",
1263
+ "summary": "查询投放品类字典",
406
1264
  "docFile": "biz-line-query.md"
407
1265
  },
408
1266
  {
409
1267
  "name": "sso-team-group-list",
410
1268
  "displayName": "查询组别列表",
411
- "description": "无入参。返回 SSO 组别全量:code = teamCode(业务线 ssoTeamCode / ssoTeamCodeList),name = 组别名称。AccessContext 由网关注入,不出现在协议里。",
1269
+ "description": "查询组别列表",
412
1270
  "group": "业务线策略",
413
1271
  "method": "GET",
414
1272
  "path": "/sino-opti-hive/sso-team/group-list",
@@ -422,8 +1280,8 @@
422
1280
  },
423
1281
  {
424
1282
  "name": "biz-line-project-list",
425
- "displayName": "业务线关联项目列表",
426
- "description": "按业务线 ID 查询该业务线绑定的项目列表,每个项目附带其绑定的广告账号。\n\n用途:已知业务线时,查看它下面挂了哪些项目、每个项目在投哪些渠道的哪些广告账号。常用于业务线消耗/成效数据的下钻,或校对业务线与项目的关联关系。\n\n入参:bizLineId(必填,业务线 ID)。业务线 ID 从 POST /sino-opti-hive/biz-line/list 的 result.result[].id 获得。\n\n返回:result 为项目数组,不分页、返回全量,元素含 projectId、projectName、adAccounts(广告账号列表,元素含 adAccountId、channelId、channelName)。\n\n注意事项:\n1. 只返回未删除的关联关系,且项目本身已删除的会被过滤,因此返回的项目数可能少于业务线实际配置过的项目数。\n2. adAccounts 只含分配状态为「已绑定」且未删除的广告账号;项目没有绑定账号时 adAccounts 为空数组,不是 null。\n3. channelName 由服务端按 channelId 从渠道缓存解析,缓存未命中时为 null,此时以 channelId 为准(取值同 GET /sino-opti-hive/biz-line-open/channels 的 code)。\n4. 业务线不存在、或没有任何有效关联项目时,返回空数组而不是报错。",
1283
+ "displayName": "查询业务线关联项目和广告账号",
1284
+ "description": "根据业务线 ID 查询业务线关联项目和广告账号\n",
427
1285
  "group": "业务线策略",
428
1286
  "method": "POST",
429
1287
  "path": "/sino-opti-hive/biz-line/project-list",
@@ -432,16 +1290,28 @@
432
1290
  "domain": "biz-line",
433
1291
  "shortcut": "+project-list",
434
1292
  "risk": "read",
435
- "summary": "业务线关联项目列表",
1293
+ "summary": "查询业务线关联项目和广告账号",
436
1294
  "docFile": "biz-line-strategy.md",
437
1295
  "requestSchema": {
438
- "$ref": "#/components/schemas/BizLineProjectListReqVO"
1296
+ "type": "object",
1297
+ "properties": {
1298
+ "bizLineId": {
1299
+ "type": "integer",
1300
+ "format": "int64",
1301
+ "description": "业务线 ID,必填",
1302
+ "title": "业务线ID",
1303
+ "example": 1251
1304
+ }
1305
+ },
1306
+ "required": [
1307
+ "bizLineId"
1308
+ ]
439
1309
  }
440
1310
  },
441
1311
  {
442
1312
  "name": "optimize-project-query-by-page",
443
- "displayName": "查询优化项目分页列表",
444
- "description": "分页查询优化工作台项目列表。常用于给业务线挑选关联项目:出参 projectId 填入 POST /sino-opti-hive/biz-line/save(或 /update)的 projectIds。\n\nresult 为公司分页对象:total=总条数,result=当前页 OptimizeProjectVO。\n\n注意事项:\n1. userId 由网关注入,不要传。\n2. 不传 serviceCodeList 时,服务端默认只查代投类项目(code=1、85)。\n3. 排序用 sortType(lastWeekSpend / lastWeekSpendQoq / createTime)和 sortDirection(ASC/DESC),默认创建时间倒序。\n4. PageRequest 里 pagination、count、startIndex 等本接口未使用,不要传。",
1313
+ "displayName": "查询项目分页列表",
1314
+ "description": "查询项目分页列表",
445
1315
  "group": "业务线策略",
446
1316
  "method": "POST",
447
1317
  "path": "/sino-opti-hive/optimize/project/queryByPage",
@@ -450,10 +1320,178 @@
450
1320
  "domain": "biz-line",
451
1321
  "shortcut": "+queryByPage",
452
1322
  "risk": "read",
453
- "summary": "查询优化项目分页列表",
1323
+ "summary": "查询项目分页列表",
454
1324
  "docFile": "biz-line-strategy.md",
455
1325
  "requestSchema": {
456
- "$ref": "#/components/schemas/OptimizeProjectQueryPageReqVO"
1326
+ "type": "object",
1327
+ "properties": {
1328
+ "pageNum": {
1329
+ "type": "integer",
1330
+ "title": "页码",
1331
+ "description": "页码,从 1 开始",
1332
+ "format": "int32",
1333
+ "example": 1
1334
+ },
1335
+ "pageSize": {
1336
+ "type": "integer",
1337
+ "title": "每页条数",
1338
+ "description": "每页条数",
1339
+ "format": "int32",
1340
+ "example": 20
1341
+ },
1342
+ "sortType": {
1343
+ "type": "string",
1344
+ "title": "排序字段",
1345
+ "description": "lastWeekSpend=上周消耗;lastWeekSpendQoq=上周消耗环比;createTime=创建时间。不传默认 createTime",
1346
+ "enum": [
1347
+ "lastWeekSpend",
1348
+ "lastWeekSpendQoq",
1349
+ "createTime"
1350
+ ],
1351
+ "example": "createTime"
1352
+ },
1353
+ "sortDirection": {
1354
+ "type": "string",
1355
+ "title": "排序方向",
1356
+ "description": "ASC 升序,DESC 降序;默认 DESC",
1357
+ "enum": [
1358
+ "ASC",
1359
+ "DESC"
1360
+ ],
1361
+ "example": "DESC"
1362
+ },
1363
+ "corporationId": {
1364
+ "type": "integer",
1365
+ "title": "签约主体ID",
1366
+ "description": "签约主体 ID",
1367
+ "format": "int32"
1368
+ },
1369
+ "corporationIdList": {
1370
+ "type": "array",
1371
+ "title": "签约主体ID列表",
1372
+ "description": "签约主体 ID 多选",
1373
+ "items": {
1374
+ "type": "integer",
1375
+ "format": "int32"
1376
+ }
1377
+ },
1378
+ "projectId": {
1379
+ "type": "integer",
1380
+ "title": "项目ID",
1381
+ "description": "项目 ID,精确匹配",
1382
+ "format": "int64"
1383
+ },
1384
+ "projectIdList": {
1385
+ "type": "array",
1386
+ "title": "项目ID列表",
1387
+ "description": "项目 ID 多选。已知 ID 时直接传入;本接口出参 projectId 也可回填",
1388
+ "items": {
1389
+ "type": "integer",
1390
+ "format": "int64"
1391
+ }
1392
+ },
1393
+ "projectName": {
1394
+ "type": "string",
1395
+ "title": "项目名称",
1396
+ "description": "项目名称,模糊查询"
1397
+ },
1398
+ "projectKeyword": {
1399
+ "type": "string",
1400
+ "title": "项目ID或名称",
1401
+ "description": "项目 ID 精确,或项目名称分词模糊(空格分词,词之间 AND)"
1402
+ },
1403
+ "startDate": {
1404
+ "type": "string",
1405
+ "title": "项目周期起",
1406
+ "description": "项目周期开始日期 yyyy-MM-dd",
1407
+ "format": "date"
1408
+ },
1409
+ "endDate": {
1410
+ "type": "string",
1411
+ "title": "项目周期止",
1412
+ "description": "项目周期结束日期 yyyy-MM-dd",
1413
+ "format": "date"
1414
+ },
1415
+ "projectUserIdList": {
1416
+ "type": "array",
1417
+ "title": "项目成员ID",
1418
+ "description": "项目成员用户 ID 多选。通过 POST /sino-opti-hive/sso-team/getMemberList 取 userId,也可 POST /sino-opti-hive/user/getSsoUserList 按姓名搜",
1419
+ "items": {
1420
+ "type": "integer",
1421
+ "format": "int32"
1422
+ }
1423
+ },
1424
+ "ssoTeamCodeList": {
1425
+ "type": "array",
1426
+ "title": "组别code",
1427
+ "description": "组别 code 多选,按该组别下 PM 成员筛项目。通过 GET /sino-opti-hive/sso-team/group-list 取 code",
1428
+ "items": {
1429
+ "type": "string"
1430
+ }
1431
+ },
1432
+ "adAccountId": {
1433
+ "type": "string",
1434
+ "title": "广告账号",
1435
+ "description": "广告账号 ID 模糊查询,至少 2 个字符"
1436
+ },
1437
+ "demandOrderKeyword": {
1438
+ "type": "string",
1439
+ "title": "需求单编号或名称",
1440
+ "description": "需求单编号精确,或需求单名称分词模糊(空格分词)"
1441
+ },
1442
+ "signalLightList": {
1443
+ "type": "array",
1444
+ "title": "红绿灯",
1445
+ "description": "项目红绿灯多选,与出参 signalLight 同值(字符串,不是业务线策略 trafficLight 的整数枚举)",
1446
+ "items": {
1447
+ "type": "string"
1448
+ }
1449
+ },
1450
+ "projectStatusList": {
1451
+ "type": "array",
1452
+ "title": "项目状态",
1453
+ "description": "项目执行状态多选。本接口查的是项目(非需求):4=待分配,5=执行中,6=已暂停,7=已完成,8=终止。出参 projectStatusName 为对应中文名",
1454
+ "items": {
1455
+ "type": "integer",
1456
+ "format": "int32"
1457
+ }
1458
+ },
1459
+ "isLast7DSpend": {
1460
+ "type": "array",
1461
+ "title": "近7天是否有消耗",
1462
+ "description": "0=否,1=是。仅传一个值时生效;同时传 0 和 1 等于不筛",
1463
+ "items": {
1464
+ "type": "integer",
1465
+ "format": "int32"
1466
+ }
1467
+ },
1468
+ "uploadInfoTypeList": {
1469
+ "type": "array",
1470
+ "title": "已上传项目信息类型",
1471
+ "description": "0=无上传,1=仅上传brief,2=仅上传mediaPlan,3=上传brief和mediaPlan。多选",
1472
+ "items": {
1473
+ "type": "integer",
1474
+ "format": "int32"
1475
+ }
1476
+ },
1477
+ "serviceCodeList": {
1478
+ "type": "array",
1479
+ "title": "产品code",
1480
+ "description": "服务/产品 code 多选。不传时服务端默认 1、85(代投类项目)",
1481
+ "items": {
1482
+ "type": "string"
1483
+ }
1484
+ },
1485
+ "bizLineIdList": {
1486
+ "type": "array",
1487
+ "title": "业务线ID",
1488
+ "description": "按已关联业务线过滤项目。通过 POST /sino-opti-hive/biz-line/list 取 result.id",
1489
+ "items": {
1490
+ "type": "integer",
1491
+ "format": "int64"
1492
+ }
1493
+ }
1494
+ }
457
1495
  }
458
1496
  },
459
1497
  {
@@ -475,11 +1513,13 @@
475
1513
  "properties": {
476
1514
  "startDate": {
477
1515
  "type": "string",
478
- "description": "统计开始日期,字符串,格式 yyyy-MM-dd,例如 \"2026-08-01\"。必填。"
1516
+ "description": "统计开始日期,字符串,格式 yyyy-MM-dd,例如 \"2026-08-01\"。必填。",
1517
+ "title": "开始日期"
479
1518
  },
480
1519
  "endDate": {
481
1520
  "type": "string",
482
- "description": "统计结束日期,字符串,格式 yyyy-MM-dd,例如 \"2026-08-31\"。必填,需大于等于 startDate。"
1521
+ "description": "统计结束日期,字符串,格式 yyyy-MM-dd,例如 \"2026-08-31\"。必填,需大于等于 startDate。",
1522
+ "title": "结束日期"
483
1523
  },
484
1524
  "dimensionValues": {
485
1525
  "type": "object",
@@ -490,12 +1530,14 @@
490
1530
  "items": {
491
1531
  "type": "string"
492
1532
  },
493
- "description": "广告账户ID列表,字符串数组,必填且不能为空数组。取值形如 \"act_1036928420879324\"(带 act_ 前缀)。多个账户之间是「或」关系,返回这些账户的合并数据。"
1533
+ "description": "广告账户ID列表,字符串数组,必填且不能为空数组。取值形如 \"act_1036928420879324\"(带 act_ 前缀)。多个账户之间是「或」关系,返回这些账户的合并数据。",
1534
+ "title": "广告账户ID"
494
1535
  }
495
1536
  },
496
1537
  "required": [
497
1538
  "account_id"
498
- ]
1539
+ ],
1540
+ "title": "过滤条件"
499
1541
  },
500
1542
  "dimensions": {
501
1543
  "type": "array",
@@ -525,11 +1567,13 @@
525
1567
  "country_code"
526
1568
  ]
527
1569
  },
528
- "description": "分组维度,字符串数组,必传且不能为空数组(传空数组返回结果为空)。传多个维度时按多字段组合分组,等同 SQL 的 GROUP BY 多列,维度越多粒度越细、返回行数越多。各维度含义:calendar_date(投放日期)、account_id(广告账户ID)、account_name(广告账户名称)、campaign_id(广告系列ID)、campaign_name(广告系列名称)、adgroup_id(广告组ID)、adgroup_name(广告组名称)、ad_id(广告ID)、ad_name(广告名称)、bid_amount(调整出价)、objective(广告目标)、optimization_goal(成效目标)、ad_format(创意类型)、bid_strategy(出价方式)、audience_type(受众类型)、targeting_interests(兴趣词包)、targeting_flexible_interests(弹性兴趣词包)、targeting_exclusion_interests(排除兴趣词包)、targeting_age(年龄)、targeting_genders(性别)、country_code(国家,必须单独传,不能和其他维度同时传)"
1570
+ "description": "分组维度,字符串数组,必传且不能为空数组(传空数组返回结果为空)。传多个维度时按多字段组合分组,等同 SQL 的 GROUP BY 多列,维度越多粒度越细、返回行数越多。各维度含义:calendar_date(投放日期)、account_id(广告账户ID)、account_name(广告账户名称)、campaign_id(广告系列ID)、campaign_name(广告系列名称)、adgroup_id(广告组ID)、adgroup_name(广告组名称)、ad_id(广告ID)、ad_name(广告名称)、bid_amount(调整出价)、objective(广告目标)、optimization_goal(成效目标)、ad_format(创意类型)、bid_strategy(出价方式)、audience_type(受众类型)、targeting_interests(兴趣词包)、targeting_flexible_interests(弹性兴趣词包)、targeting_exclusion_interests(排除兴趣词包)、targeting_age(年龄)、targeting_genders(性别)、country_code(国家,必须单独传,不能和其他维度同时传)",
1571
+ "title": "分组维度"
529
1572
  },
530
1573
  "order": {
531
1574
  "type": "string",
532
- "description": "单字段排序的字段名,填单个 code,取值范围为 dimensions 的可选值。不必包含在已传的字段中,服务端会自动补入参与排序,但该字段不会作为列返回。与 orders 可同时使用,order 指定的字段会追加到 orders 之后。"
1575
+ "description": "单字段排序的字段名,填单个 code,取值范围为 dimensions 的可选值。不必包含在已传的字段中,服务端会自动补入参与排序,但该字段不会作为列返回。与 orders 可同时使用,order 指定的字段会追加到 orders 之后。",
1576
+ "title": "排序字段"
533
1577
  },
534
1578
  "orderType": {
535
1579
  "type": "string",
@@ -537,20 +1581,24 @@
537
1581
  "desc",
538
1582
  "asc"
539
1583
  ],
540
- "description": "排序方向,配合 order 使用。desc 降序,asc 升序,默认 asc。"
1584
+ "description": "排序方向,配合 order 使用。desc 降序,asc 升序,默认 asc。",
1585
+ "title": "排序方向"
541
1586
  },
542
1587
  "orders": {
543
1588
  "type": "object",
544
1589
  "description": "多字段排序,结构为「字段名 → 排序方向」的有序键值对(Java 类型 LinkedHashMap<String, String>),按 key 的书写顺序依次排序,方向取值 desc 或 asc。示例:{\"calendar_date\":\"desc\",\"account_id\":\"asc\"}。只需单字段排序时用 order + orderType 即可,不必传本字段。",
545
- "properties": {}
1590
+ "properties": {},
1591
+ "title": "多字段排序"
546
1592
  },
547
1593
  "page": {
548
1594
  "type": "integer",
549
- "description": "页码,从 1 开始,默认 1。"
1595
+ "description": "页码,从 1 开始,默认 1。",
1596
+ "title": "页码"
550
1597
  },
551
1598
  "size": {
552
1599
  "type": "integer",
553
- "description": "每页条数,默认 10,建议显式指定。返回的 result.total 为总条数,据此判断是否还有下一页。"
1600
+ "description": "每页条数,默认 10,建议显式指定。返回的 result.total 为总条数,据此判断是否还有下一页。",
1601
+ "title": "每页条数"
554
1602
  }
555
1603
  },
556
1604
  "required": [
@@ -580,11 +1628,13 @@
580
1628
  "properties": {
581
1629
  "startDate": {
582
1630
  "type": "string",
583
- "description": "开始日期,格式 yyyy-MM-dd,例如 2026-08-01"
1631
+ "description": "开始日期,格式 yyyy-MM-dd,例如 2026-08-01",
1632
+ "title": "开始日期"
584
1633
  },
585
1634
  "endDate": {
586
1635
  "type": "string",
587
- "description": "结束日期,格式 yyyy-MM-dd,例如 2026-08-31"
1636
+ "description": "结束日期,格式 yyyy-MM-dd,例如 2026-08-31",
1637
+ "title": "结束日期"
588
1638
  },
589
1639
  "dimensionValues": {
590
1640
  "type": "object",
@@ -595,12 +1645,14 @@
595
1645
  "items": {
596
1646
  "type": "string"
597
1647
  },
598
- "description": "广告账户ID(带格式),必须带前缀,例如 act_1036928420879324。最多传500个"
1648
+ "description": "广告账户ID(带格式),必须带前缀,例如 act_1036928420879324。最多传500个",
1649
+ "title": "广告账户ID"
599
1650
  }
600
1651
  },
601
1652
  "required": [
602
1653
  "account_id"
603
- ]
1654
+ ],
1655
+ "title": "过滤条件"
604
1656
  },
605
1657
  "dimensions": {
606
1658
  "type": "array",
@@ -630,11 +1682,13 @@
630
1682
  "country_code"
631
1683
  ]
632
1684
  },
633
- "description": "分组维度,必传且不能为空数组,否则返回结果为空。各维度含义:calendar_date(投放日期)、account_id(广告账户ID)、account_name(广告账户名称)、campaign_id(广告系列ID)、campaign_name(广告系列名称)、adgroup_id(广告组ID)、adgroup_name(广告组名称)、ad_id(广告ID)、ad_name(广告名称)、optimization_goal(成效目标)、ad_format(创意类型)、bid_strategy(出价方式)、audience_type(受众类型)、targeting_age(年龄)、targeting_genders(性别)、cpc_bid_amount(CPC出价)、cpm_bid_amount(CPM出价)、cpv_bid_amount(CPV出价)、advertising_channel_type(广告系列类型)、keywords(关键字)、country_code(国家,必须单独传,不能和其他维度同时传)"
1685
+ "description": "分组维度,必传且不能为空数组,否则返回结果为空。各维度含义:calendar_date(投放日期)、account_id(广告账户ID)、account_name(广告账户名称)、campaign_id(广告系列ID)、campaign_name(广告系列名称)、adgroup_id(广告组ID)、adgroup_name(广告组名称)、ad_id(广告ID)、ad_name(广告名称)、optimization_goal(成效目标)、ad_format(创意类型)、bid_strategy(出价方式)、audience_type(受众类型)、targeting_age(年龄)、targeting_genders(性别)、cpc_bid_amount(CPC出价)、cpm_bid_amount(CPM出价)、cpv_bid_amount(CPV出价)、advertising_channel_type(广告系列类型)、keywords(关键字)、country_code(国家,必须单独传,不能和其他维度同时传)",
1686
+ "title": "分组维度"
634
1687
  },
635
1688
  "order": {
636
1689
  "type": "string",
637
- "description": "排序字段,填单个 code,取值范围为 dimensions 的可选值。不必包含在已传的字段中,服务端会自动补入参与排序,但该字段不会作为列返回"
1690
+ "description": "排序字段,填单个 code,取值范围为 dimensions 的可选值。不必包含在已传的字段中,服务端会自动补入参与排序,但该字段不会作为列返回",
1691
+ "title": "排序字段"
638
1692
  },
639
1693
  "orderType": {
640
1694
  "type": "string",
@@ -642,15 +1696,24 @@
642
1696
  "desc",
643
1697
  "asc"
644
1698
  ],
645
- "description": "排序方向,默认 asc"
1699
+ "description": "排序方向,默认 asc",
1700
+ "title": "排序方向"
1701
+ },
1702
+ "orders": {
1703
+ "type": "object",
1704
+ "title": "多字段排序",
1705
+ "description": "多字段排序,结构为「字段名 → 排序方向」的有序键值对(Java 类型 LinkedHashMap<String, String>),按 key 的书写顺序依次排序,方向取值 desc 或 asc。示例:{\"calendar_date\":\"desc\",\"account_id\":\"asc\"}。只需单字段排序时用 order + orderType 即可,不必传本字段。",
1706
+ "properties": {}
646
1707
  },
647
1708
  "page": {
648
1709
  "type": "integer",
649
- "description": "页码,从1开始,默认1"
1710
+ "description": "页码,从1开始,默认1",
1711
+ "title": "页码"
650
1712
  },
651
1713
  "size": {
652
1714
  "type": "integer",
653
- "description": "每页条数,默认10,建议显式传且不超过1000"
1715
+ "description": "每页条数,默认10,建议显式传且不超过1000",
1716
+ "title": "每页条数"
654
1717
  }
655
1718
  },
656
1719
  "required": [
@@ -680,11 +1743,13 @@
680
1743
  "properties": {
681
1744
  "startDate": {
682
1745
  "type": "string",
683
- "description": "统计开始日期,字符串,格式 yyyy-MM-dd,例如 \"2026-08-01\"。必填。"
1746
+ "description": "统计开始日期,字符串,格式 yyyy-MM-dd,例如 \"2026-08-01\"。必填。",
1747
+ "title": "开始日期"
684
1748
  },
685
1749
  "endDate": {
686
1750
  "type": "string",
687
- "description": "统计结束日期,字符串,格式 yyyy-MM-dd,例如 \"2026-08-31\"。必填,需大于等于 startDate。"
1751
+ "description": "统计结束日期,字符串,格式 yyyy-MM-dd,例如 \"2026-08-31\"。必填,需大于等于 startDate。",
1752
+ "title": "结束日期"
688
1753
  },
689
1754
  "dimensionValues": {
690
1755
  "type": "object",
@@ -695,12 +1760,14 @@
695
1760
  "items": {
696
1761
  "type": "string"
697
1762
  },
698
- "description": "广告账户ID列表,字符串数组,必填且不能为空数组。取值格式需与本接口 account_id 维度返回的值完全一致;若不确定,可先只传 account_id 维度查询一次,确认格式后再用作过滤条件。多个账户之间是「或」关系,返回这些账户的合并数据。"
1763
+ "description": "广告账户ID列表,字符串数组,必填且不能为空数组。取值格式需与本接口 account_id 维度返回的值完全一致;若不确定,可先只传 account_id 维度查询一次,确认格式后再用作过滤条件。多个账户之间是「或」关系,返回这些账户的合并数据。",
1764
+ "title": "广告账户ID"
699
1765
  }
700
1766
  },
701
1767
  "required": [
702
1768
  "account_id"
703
- ]
1769
+ ],
1770
+ "title": "过滤条件"
704
1771
  },
705
1772
  "dimensions": {
706
1773
  "type": "array",
@@ -730,11 +1797,13 @@
730
1797
  "country_code"
731
1798
  ]
732
1799
  },
733
- "description": "分组维度,字符串数组,必传且不能为空数组(传空数组返回结果为空)。传多个维度时按多字段组合分组,等同 SQL 的 GROUP BY 多列,维度越多粒度越细、返回行数越多。各维度含义:calendar_date(投放日期)、account_id(广告账户ID)、account_name(广告账户名称)、campaign_id(广告系列ID)、campaign_name(广告系列名称)、adgroup_id(广告组ID)、adgroup_name(广告组名称)、ad_id(广告ID)、ad_name(广告名称)、bid_amount(调整出价)、objective(广告目标)、optimization_goal(成效目标)、ad_format(创意类型)、bid_strategy(出价方式)、audience_type(受众类型)、targeting_interests(兴趣词包)、targeting_age(年龄)、targeting_genders(性别)、conversion_bid(转化出价)、deep_cpabid(深度转化出价)、country_code(国家,必须单独传,不能和其他维度同时传)"
1800
+ "description": "分组维度,字符串数组,必传且不能为空数组(传空数组返回结果为空)。传多个维度时按多字段组合分组,等同 SQL 的 GROUP BY 多列,维度越多粒度越细、返回行数越多。各维度含义:calendar_date(投放日期)、account_id(广告账户ID)、account_name(广告账户名称)、campaign_id(广告系列ID)、campaign_name(广告系列名称)、adgroup_id(广告组ID)、adgroup_name(广告组名称)、ad_id(广告ID)、ad_name(广告名称)、bid_amount(调整出价)、objective(广告目标)、optimization_goal(成效目标)、ad_format(创意类型)、bid_strategy(出价方式)、audience_type(受众类型)、targeting_interests(兴趣词包)、targeting_age(年龄)、targeting_genders(性别)、conversion_bid(转化出价)、deep_cpabid(深度转化出价)、country_code(国家,必须单独传,不能和其他维度同时传)",
1801
+ "title": "分组维度"
734
1802
  },
735
1803
  "order": {
736
1804
  "type": "string",
737
- "description": "单字段排序的字段名,填单个 code,取值范围为 dimensions 的可选值。不必包含在已传的字段中,服务端会自动补入参与排序,但该字段不会作为列返回。与 orders 可同时使用,order 指定的字段会追加到 orders 之后。"
1805
+ "description": "单字段排序的字段名,填单个 code,取值范围为 dimensions 的可选值。不必包含在已传的字段中,服务端会自动补入参与排序,但该字段不会作为列返回。与 orders 可同时使用,order 指定的字段会追加到 orders 之后。",
1806
+ "title": "排序字段"
738
1807
  },
739
1808
  "orderType": {
740
1809
  "type": "string",
@@ -742,20 +1811,24 @@
742
1811
  "desc",
743
1812
  "asc"
744
1813
  ],
745
- "description": "排序方向,配合 order 使用。desc 降序,asc 升序,默认 asc。"
1814
+ "description": "排序方向,配合 order 使用。desc 降序,asc 升序,默认 asc。",
1815
+ "title": "排序方向"
746
1816
  },
747
1817
  "orders": {
748
1818
  "type": "object",
749
1819
  "description": "多字段排序,结构为「字段名 → 排序方向」的有序键值对(Java 类型 LinkedHashMap<String, String>),按 key 的书写顺序依次排序,方向取值 desc 或 asc。示例:{\"calendar_date\":\"desc\",\"account_id\":\"asc\"}。只需单字段排序时用 order + orderType 即可,不必传本字段。",
750
- "properties": {}
1820
+ "properties": {},
1821
+ "title": "多字段排序"
751
1822
  },
752
1823
  "page": {
753
1824
  "type": "integer",
754
- "description": "页码,从 1 开始,默认 1。"
1825
+ "description": "页码,从 1 开始,默认 1。",
1826
+ "title": "页码"
755
1827
  },
756
1828
  "size": {
757
1829
  "type": "integer",
758
- "description": "每页条数,默认 10,建议显式指定。返回的 result.total 为总条数,据此判断是否还有下一页。"
1830
+ "description": "每页条数,默认 10,建议显式指定。返回的 result.total 为总条数,据此判断是否还有下一页。",
1831
+ "title": "每页条数"
759
1832
  }
760
1833
  },
761
1834
  "required": [
@@ -785,11 +1858,13 @@
785
1858
  "properties": {
786
1859
  "startDate": {
787
1860
  "type": "string",
788
- "description": "统计开始日期,字符串,格式 yyyy-MM-dd,例如 \"2026-08-01\"。必填。"
1861
+ "description": "统计开始日期,字符串,格式 yyyy-MM-dd,例如 \"2026-08-01\"。必填。",
1862
+ "title": "开始日期"
789
1863
  },
790
1864
  "endDate": {
791
1865
  "type": "string",
792
- "description": "统计结束日期,字符串,格式 yyyy-MM-dd,例如 \"2026-08-31\"。必填,需大于等于 startDate。成效数据最多支持查询近21天,超出范围可能返回空数据。"
1866
+ "description": "统计结束日期,字符串,格式 yyyy-MM-dd,例如 \"2026-08-31\"。必填,需大于等于 startDate。成效数据最多支持查询近21天,超出范围可能返回空数据。",
1867
+ "title": "结束日期"
793
1868
  },
794
1869
  "dimensionValues": {
795
1870
  "type": "object",
@@ -800,12 +1875,14 @@
800
1875
  "items": {
801
1876
  "type": "string"
802
1877
  },
803
- "description": "广告账户ID列表,字符串数组,必填且不能为空数组。取值形如 \"act_1036928420879324\"(带 act_ 前缀)。多个账户之间是「或」关系,返回这些账户的合并数据。"
1878
+ "description": "广告账户ID列表,字符串数组,必填且不能为空数组。取值形如 \"act_1036928420879324\"(带 act_ 前缀)。多个账户之间是「或」关系,返回这些账户的合并数据。",
1879
+ "title": "广告账户ID"
804
1880
  }
805
1881
  },
806
1882
  "required": [
807
1883
  "account_id"
808
- ]
1884
+ ],
1885
+ "title": "过滤条件"
809
1886
  },
810
1887
  "dimensions": {
811
1888
  "type": "array",
@@ -833,7 +1910,8 @@
833
1910
  "targeting_genders"
834
1911
  ]
835
1912
  },
836
- "description": "分组维度,字符串数组,必传且不能为空数组(传空数组返回结果为空)。传多个维度时按多字段组合分组,等同 SQL 的 GROUP BY 多列,维度越多粒度越细、返回行数越多。各维度含义:calendar_date(投放日期)、account_id(广告账户ID)、account_name(广告账户名称)、campaign_id(广告系列ID)、campaign_name(广告系列名称)、adgroup_id(广告组ID)、adgroup_name(广告组名称)、ad_id(广告ID)、ad_name(广告名称)、objective(广告目标)、optimization_goal(成效目标)、ad_format(创意类型)、bid_strategy(出价方式)、audience_type(受众类型)、targeting_interests(兴趣词包)、targeting_flexible_interests(弹性兴趣词包)、targeting_exclusion_interests(排除兴趣词包)、targeting_age(年龄)、targeting_genders(性别)"
1913
+ "description": "分组维度,字符串数组,必传且不能为空数组(传空数组返回结果为空)。传多个维度时按多字段组合分组,等同 SQL 的 GROUP BY 多列,维度越多粒度越细、返回行数越多。各维度含义:calendar_date(投放日期)、account_id(广告账户ID)、account_name(广告账户名称)、campaign_id(广告系列ID)、campaign_name(广告系列名称)、adgroup_id(广告组ID)、adgroup_name(广告组名称)、ad_id(广告ID)、ad_name(广告名称)、objective(广告目标)、optimization_goal(成效目标)、ad_format(创意类型)、bid_strategy(出价方式)、audience_type(受众类型)、targeting_interests(兴趣词包)、targeting_flexible_interests(弹性兴趣词包)、targeting_exclusion_interests(排除兴趣词包)、targeting_age(年龄)、targeting_genders(性别)",
1914
+ "title": "分组维度"
837
1915
  },
838
1916
  "indicators": {
839
1917
  "type": "array",
@@ -854,11 +1932,13 @@
854
1932
  "engagement"
855
1933
  ]
856
1934
  },
857
- "description": "成效指标,字符串数组,必传且不能为空数组。指标会在 dimensions 指定的分组粒度上做求和聚合。各指标含义:spend_usd(消耗金额,美元)、impressions(曝光量)、clicks(点击量)、video_views(视频观看次数)、add_to_cart(添加购物车次数)、checkouts(发起结账次数)、purchase(购买次数)、purchase_value(购买金额,美元)、installs(应用安装量)、complete_registration(完成注册量)、leads(留下潜客信息次数)、engagement(互动次数)"
1935
+ "description": "成效指标,字符串数组,必传且不能为空数组。指标会在 dimensions 指定的分组粒度上做求和聚合。各指标含义:spend_usd(消耗金额,美元)、impressions(曝光量)、clicks(点击量)、video_views(视频观看次数)、add_to_cart(添加购物车次数)、checkouts(发起结账次数)、purchase(购买次数)、purchase_value(购买金额,美元)、installs(应用安装量)、complete_registration(完成注册量)、leads(留下潜客信息次数)、engagement(互动次数)",
1936
+ "title": "成效指标"
858
1937
  },
859
1938
  "order": {
860
1939
  "type": "string",
861
- "description": "单字段排序的字段名,填单个 code,取值范围为 dimensions 或 indicators 的可选值。不必包含在已传的字段中,服务端会自动补入参与排序,但该字段不会作为列返回。与 orders 可同时使用,order 指定的字段会追加到 orders 之后。"
1940
+ "description": "单字段排序的字段名,填单个 code,取值范围为 dimensions 或 indicators 的可选值。不必包含在已传的字段中,服务端会自动补入参与排序,但该字段不会作为列返回。与 orders 可同时使用,order 指定的字段会追加到 orders 之后。",
1941
+ "title": "排序字段"
862
1942
  },
863
1943
  "orderType": {
864
1944
  "type": "string",
@@ -866,20 +1946,24 @@
866
1946
  "desc",
867
1947
  "asc"
868
1948
  ],
869
- "description": "排序方向,配合 order 使用。desc 降序,asc 升序,默认 asc。"
1949
+ "description": "排序方向,配合 order 使用。desc 降序,asc 升序,默认 asc。",
1950
+ "title": "排序方向"
870
1951
  },
871
1952
  "orders": {
872
1953
  "type": "object",
873
1954
  "description": "多字段排序,结构为「字段名 → 排序方向」的有序键值对(Java 类型 LinkedHashMap<String, String>),按 key 的书写顺序依次排序,方向取值 desc 或 asc。示例:{\"spend_usd\":\"desc\",\"clicks\":\"asc\"}。只需单字段排序时用 order + orderType 即可,不必传本字段。",
874
- "properties": {}
1955
+ "properties": {},
1956
+ "title": "多字段排序"
875
1957
  },
876
1958
  "page": {
877
1959
  "type": "integer",
878
- "description": "页码,从 1 开始,默认 1。"
1960
+ "description": "页码,从 1 开始,默认 1。",
1961
+ "title": "页码"
879
1962
  },
880
1963
  "size": {
881
1964
  "type": "integer",
882
- "description": "每页条数,默认 10,建议显式指定。返回的 result.total 为总条数,据此判断是否还有下一页。"
1965
+ "description": "每页条数,默认 10,建议显式指定。返回的 result.total 为总条数,据此判断是否还有下一页。",
1966
+ "title": "每页条数"
883
1967
  }
884
1968
  },
885
1969
  "required": [
@@ -910,11 +1994,13 @@
910
1994
  "properties": {
911
1995
  "startDate": {
912
1996
  "type": "string",
913
- "description": "开始日期,格式 yyyy-MM-dd,例如 2026-08-01"
1997
+ "description": "开始日期,格式 yyyy-MM-dd,例如 2026-08-01",
1998
+ "title": "开始日期"
914
1999
  },
915
2000
  "endDate": {
916
2001
  "type": "string",
917
- "description": "结束日期,格式 yyyy-MM-dd,例如 2026-08-31。最多支持查询近21天"
2002
+ "description": "结束日期,格式 yyyy-MM-dd,例如 2026-08-31。最多支持查询近21天",
2003
+ "title": "结束日期"
918
2004
  },
919
2005
  "dimensionValues": {
920
2006
  "type": "object",
@@ -925,12 +2011,14 @@
925
2011
  "items": {
926
2012
  "type": "string"
927
2013
  },
928
- "description": "广告账户ID(带格式),必须带前缀,例如 act_1036928420879324。最多传500个"
2014
+ "description": "广告账户ID(带格式),必须带前缀,例如 act_1036928420879324。最多传500个",
2015
+ "title": "广告账户ID"
929
2016
  }
930
2017
  },
931
2018
  "required": [
932
2019
  "account_id"
933
- ]
2020
+ ],
2021
+ "title": "过滤条件"
934
2022
  },
935
2023
  "dimensions": {
936
2024
  "type": "array",
@@ -959,7 +2047,8 @@
959
2047
  "keywords"
960
2048
  ]
961
2049
  },
962
- "description": "分组维度,必传且不能为空数组,否则返回结果为空。各维度含义:calendar_date(投放日期)、account_id(广告账户ID)、account_name(广告账户名称)、campaign_id(广告系列ID)、campaign_name(广告系列名称)、adgroup_id(广告组ID)、adgroup_name(广告组名称)、ad_id(广告ID)、ad_name(广告名称)、optimization_goal(成效目标)、ad_format(创意类型)、bid_strategy(出价方式)、audience_type(受众类型)、targeting_age(年龄)、targeting_genders(性别)、cpc_bid_amount(CPC出价)、cpm_bid_amount(CPM出价)、cpv_bid_amount(CPV出价)、advertising_channel_type(广告系列类型)、keywords(关键字)"
2050
+ "description": "分组维度,必传且不能为空数组,否则返回结果为空。各维度含义:calendar_date(投放日期)、account_id(广告账户ID)、account_name(广告账户名称)、campaign_id(广告系列ID)、campaign_name(广告系列名称)、adgroup_id(广告组ID)、adgroup_name(广告组名称)、ad_id(广告ID)、ad_name(广告名称)、optimization_goal(成效目标)、ad_format(创意类型)、bid_strategy(出价方式)、audience_type(受众类型)、targeting_age(年龄)、targeting_genders(性别)、cpc_bid_amount(CPC出价)、cpm_bid_amount(CPM出价)、cpv_bid_amount(CPV出价)、advertising_channel_type(广告系列类型)、keywords(关键字)",
2051
+ "title": "分组维度"
963
2052
  },
964
2053
  "indicators": {
965
2054
  "type": "array",
@@ -980,11 +2069,13 @@
980
2069
  "engagement"
981
2070
  ]
982
2071
  },
983
- "description": "成效指标,必传且不能为空数组。各指标含义:spend_usd(消耗金额,美元)、impressions(曝光量)、clicks(点击量)、video_views(视频观看次数)、add_to_cart(添加购物车次数)、checkouts(发起结账次数)、purchase(购买次数)、purchase_value(购买金额,美元)、installs(应用安装量)、complete_registration(完成注册量)、leads(留下潜客信息次数)、engagement(互动次数)"
2072
+ "description": "成效指标,必传且不能为空数组。各指标含义:spend_usd(消耗金额,美元)、impressions(曝光量)、clicks(点击量)、video_views(视频观看次数)、add_to_cart(添加购物车次数)、checkouts(发起结账次数)、purchase(购买次数)、purchase_value(购买金额,美元)、installs(应用安装量)、complete_registration(完成注册量)、leads(留下潜客信息次数)、engagement(互动次数)",
2073
+ "title": "成效指标"
984
2074
  },
985
2075
  "order": {
986
2076
  "type": "string",
987
- "description": "排序字段,填单个 code,取值范围为 dimensions 或 indicators 的可选值。不必包含在已传的字段中,服务端会自动补入参与排序,但该字段不会作为列返回"
2077
+ "description": "排序字段,填单个 code,取值范围为 dimensions 或 indicators 的可选值。不必包含在已传的字段中,服务端会自动补入参与排序,但该字段不会作为列返回",
2078
+ "title": "排序字段"
988
2079
  },
989
2080
  "orderType": {
990
2081
  "type": "string",
@@ -992,15 +2083,24 @@
992
2083
  "desc",
993
2084
  "asc"
994
2085
  ],
995
- "description": "排序方向,默认 asc"
2086
+ "description": "排序方向,默认 asc",
2087
+ "title": "排序方向"
2088
+ },
2089
+ "orders": {
2090
+ "type": "object",
2091
+ "title": "多字段排序",
2092
+ "description": "多字段排序,结构为「字段名 → 排序方向」的有序键值对(Java 类型 LinkedHashMap<String, String>),按 key 的书写顺序依次排序,方向取值 desc 或 asc。示例:{\"spend_usd\":\"desc\",\"clicks\":\"asc\"}。只需单字段排序时用 order + orderType 即可,不必传本字段。",
2093
+ "properties": {}
996
2094
  },
997
2095
  "page": {
998
2096
  "type": "integer",
999
- "description": "页码,从1开始,默认1"
2097
+ "description": "页码,从1开始,默认1",
2098
+ "title": "页码"
1000
2099
  },
1001
2100
  "size": {
1002
2101
  "type": "integer",
1003
- "description": "每页条数,默认10,建议显式传且不超过1000"
2102
+ "description": "每页条数,默认10,建议显式传且不超过1000",
2103
+ "title": "每页条数"
1004
2104
  }
1005
2105
  },
1006
2106
  "required": [
@@ -1031,11 +2131,13 @@
1031
2131
  "properties": {
1032
2132
  "startDate": {
1033
2133
  "type": "string",
1034
- "description": "开始日期,格式 yyyy-MM-dd,例如 2026-08-01"
2134
+ "description": "开始日期,格式 yyyy-MM-dd,例如 2026-08-01",
2135
+ "title": "开始日期"
1035
2136
  },
1036
2137
  "endDate": {
1037
2138
  "type": "string",
1038
- "description": "结束日期,格式 yyyy-MM-dd,例如 2026-08-31。最多支持查询近21天"
2139
+ "description": "结束日期,格式 yyyy-MM-dd,例如 2026-08-31。最多支持查询近21天",
2140
+ "title": "结束日期"
1039
2141
  },
1040
2142
  "dimensionValues": {
1041
2143
  "type": "object",
@@ -1046,12 +2148,14 @@
1046
2148
  "items": {
1047
2149
  "type": "string"
1048
2150
  },
1049
- "description": "广告账户ID(带格式),必须带前缀,例如 act_1036928420879324。最多传500个"
2151
+ "description": "广告账户ID(带格式),必须带前缀,例如 act_1036928420879324。最多传500个",
2152
+ "title": "广告账户ID"
1050
2153
  }
1051
2154
  },
1052
2155
  "required": [
1053
2156
  "account_id"
1054
- ]
2157
+ ],
2158
+ "title": "过滤条件"
1055
2159
  },
1056
2160
  "dimensions": {
1057
2161
  "type": "array",
@@ -1079,7 +2183,8 @@
1079
2183
  "deep_cpabid"
1080
2184
  ]
1081
2185
  },
1082
- "description": "分组维度,必传且不能为空数组,否则返回结果为空。各维度含义:calendar_date(投放日期)、account_id(广告账户ID)、account_name(广告账户名称)、campaign_id(广告系列ID)、campaign_name(广告系列名称)、adgroup_id(广告组ID)、adgroup_name(广告组名称)、ad_id(广告ID)、ad_name(广告名称)、optimization_goal(成效目标)、ad_format(创意类型)、bid_strategy(出价方式)、audience_type(受众类型)、targeting_age(年龄)、targeting_genders(性别)、objective(广告目标)、targeting_interests(兴趣词包)、conversion_bid(转化出价)、deep_cpabid(深度转化出价)"
2186
+ "description": "分组维度,必传且不能为空数组,否则返回结果为空。各维度含义:calendar_date(投放日期)、account_id(广告账户ID)、account_name(广告账户名称)、campaign_id(广告系列ID)、campaign_name(广告系列名称)、adgroup_id(广告组ID)、adgroup_name(广告组名称)、ad_id(广告ID)、ad_name(广告名称)、optimization_goal(成效目标)、ad_format(创意类型)、bid_strategy(出价方式)、audience_type(受众类型)、targeting_age(年龄)、targeting_genders(性别)、objective(广告目标)、targeting_interests(兴趣词包)、conversion_bid(转化出价)、deep_cpabid(深度转化出价)",
2187
+ "title": "分组维度"
1083
2188
  },
1084
2189
  "indicators": {
1085
2190
  "type": "array",
@@ -1100,11 +2205,13 @@
1100
2205
  "engagement"
1101
2206
  ]
1102
2207
  },
1103
- "description": "成效指标,必传且不能为空数组。各指标含义:spend_usd(消耗金额,美元)、impressions(曝光量)、clicks(点击量)、video_views(视频观看次数)、add_to_cart(添加购物车次数)、checkouts(发起结账次数)、purchase(购买次数)、purchase_value(购买金额,美元)、installs(应用安装量)、complete_registration(完成注册量)、leads(留下潜客信息次数)、engagement(互动次数)"
2208
+ "description": "成效指标,必传且不能为空数组。各指标含义:spend_usd(消耗金额,美元)、impressions(曝光量)、clicks(点击量)、video_views(视频观看次数)、add_to_cart(添加购物车次数)、checkouts(发起结账次数)、purchase(购买次数)、purchase_value(购买金额,美元)、installs(应用安装量)、complete_registration(完成注册量)、leads(留下潜客信息次数)、engagement(互动次数)",
2209
+ "title": "成效指标"
1104
2210
  },
1105
2211
  "order": {
1106
2212
  "type": "string",
1107
- "description": "排序字段,填单个 code,取值范围为 dimensions 或 indicators 的可选值。不必包含在已传的字段中,服务端会自动补入参与排序,但该字段不会作为列返回"
2213
+ "description": "排序字段,填单个 code,取值范围为 dimensions 或 indicators 的可选值。不必包含在已传的字段中,服务端会自动补入参与排序,但该字段不会作为列返回",
2214
+ "title": "排序字段"
1108
2215
  },
1109
2216
  "orderType": {
1110
2217
  "type": "string",
@@ -1112,15 +2219,24 @@
1112
2219
  "desc",
1113
2220
  "asc"
1114
2221
  ],
1115
- "description": "排序方向,默认 asc"
2222
+ "description": "排序方向,默认 asc",
2223
+ "title": "排序方向"
2224
+ },
2225
+ "orders": {
2226
+ "type": "object",
2227
+ "title": "多字段排序",
2228
+ "description": "多字段排序,结构为「字段名 → 排序方向」的有序键值对(Java 类型 LinkedHashMap<String, String>),按 key 的书写顺序依次排序,方向取值 desc 或 asc。示例:{\"spend_usd\":\"desc\",\"clicks\":\"asc\"}。只需单字段排序时用 order + orderType 即可,不必传本字段。",
2229
+ "properties": {}
1116
2230
  },
1117
2231
  "page": {
1118
2232
  "type": "integer",
1119
- "description": "页码,从1开始,默认1"
2233
+ "description": "页码,从1开始,默认1",
2234
+ "title": "页码"
1120
2235
  },
1121
2236
  "size": {
1122
2237
  "type": "integer",
1123
- "description": "每页条数,默认10,建议显式传且不超过1000"
2238
+ "description": "每页条数,默认10,建议显式传且不超过1000",
2239
+ "title": "每页条数"
1124
2240
  }
1125
2241
  },
1126
2242
  "required": [