Files
notes/excalidraw/工作相关/需求-7.15.0 跨客户订购迁移流程自动化.md
T
2026-03-01 01:43:46 +08:00

273 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
excalidraw-plugin: parsed
tags: [excalidraw]
---
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
# Excalidraw Data
## Text Elements
客户下发预热刷新任务时(接口、页面) ^FywxkhYv
4 内容管理接口 ^VYtvnfdS
8.1 解封禁接口 ^SXpDKnIl
8.2 URL 封禁/解封任务查询接口 ^n30ZY5us
URL 预热 ^ocLdL6Qv
常用 URL/content/commonsource/list
涉及表:common_used_source ^OB3xeR69
页面:/content/manage ^RHUYKd5R
角色识别: RoleEnum.CP_SUB (企业子客户)
从 enterprise_subuser_domains 表查询该子账号被授权的域名ID列表
数据库表: enterprise_subuser_domains、self_service_domain_config、extensive_domains、enterprise_info
^X4kLCvbp
运营经理 (OM_GRP / OM_PRV)
A. ESOP企业域名:
从 domain_approve_relation 表查询该运营经理配置的域名
查询条件: config_user_id = 当前用户ID
Cache+企业域名:
从 enterprise_info 表查询该运营经理关联的企业信息
查询条件: 运营经理ID (一个运营经理可能关联多个企业)
对于来源为 WEB 的企业:
查询该企业下所有精确域名 (从 self_service_domain_config 表)
查询该企业下所有泛化域名 (从 extensive_domains 表)
^yO1XaDLm
RoleEnum.IT_PRV (省运维工程师)
从 self_service_domain_config 表查询该运维工程师可操作的域名 ^zNQBkBwM
企业用户 (CP)
处理逻辑: 优先从 Redis 缓存获取,缓存失效时从数据库查询
1、从 Redis 缓存获取 (优先)
Redis Key:
- ALL_CP_PRECISE_DOMAINS: 所有企业的精确域名 Map<企业ID, List<域名>>
- ALL_CP_EXTENSIVE_DOMAINS: 所有企业的泛化域名 Map<企业ID, List<域名>>
- ALL_CPID_CPNAME: 所有企业ID和企业名称 Map<企业ID, 企业名称>
处理流程:
1. 从 Redis 获取当前企业ID的精确域名列表
2. 从 Redis 获取当前企业ID的泛化域名列表
3. 合并两个列表
4. 从 Redis 获取企业名称
5. 构建 Map<域名, 企业名称> 并返回
2、 从数据库查询 (Redis 为空时)
触发条件: Redis 中的 ALL_CP_PRECISE_DOMAINS 和 ALL_CP_EXTENSIVE_DOMAINS 都为空
处理流程:
1. 精确域名: 从 self_service_domain_config 表查询
- tenant_id = 当前企业ID
- deleted = false
- is_extensive_domain = false (精确域名)
- state IN (部署中、已生效、部署失败、启用中) - 通过 DomainTicketStateEnum.getContentRefreshState() 获取
1. 泛化域名: 从 extensive_domains 表查询
- 查询条件: 企业ID + 有效子域名
1. 合并精确域名和泛化域名
2. 从 enterprise_info 表获取企业名称
3. 构建 Map<域名, 企业名称> 并返回 ^F6sPwExw
其他角色 (超管、集团运维工程师等)
优先缓存 ^X0pnA11n
| ALL_CP_PRECISE_DOMAINS | Map<企业ID, List<域名>> | 所有企业的精确域名 |
| ALL_CP_EXTENSIVE_DOMAINS | Map<企业ID, List<域名>> | 所有企业的泛化域名 |
| ALL_CPID_CPNAME | Map<企业ID, 企业名称> | 所有企业ID和名称映射 |
| ALL_PRECISE_DOMAIN_CPINFO | Map<域名, List<企业ID, 企业名称>> | 所有精确域名及企业信息 |
| ALL_EXTENSIVE_DOMAIN_CPINFO | Map<域名, List<企业ID, 企业名称>> | 所有泛化域名及企业信息 | ^03UQlzOW
域名状态过滤: 只返回特定状态的域名 (部署中、已生效、部署失败、启用中) ^JwTJVIqu
- 企业用户只能看到自己企业的域名
- 企业子账号只能看到被授权的域名
- 运营经理可以看到关联企业的域名
- 超管等其他角色可以看到所有域名 ^52B5pGMu
URL 预热:/content/submitContentTask
{
"operationType": "URL预热",
"taskType": "0",
"startTime": "",
"url": [
"http%3A%2F%2Ftianzhuo686285089.komect.com%2Fv1"
],
"pageSubmit": true
}
{
"operationType": "内容刷新",
"taskType": "0",
"startTime": "",
"url": [
"http%3A%2F%2Ftianzhuo686285089.komect.com%2Ftest"
],
"pageSubmit": true
}
{
"operationType": "目录刷新",
"taskType": "0",
"startTime": "",
"url": [
"http%3A%2F%2Ftianzhuo686285089.komect.com%2Ftest%2F"
],
"pageSubmit": true
}
{
"operationType": "目录刷新",
"taskType": "1",
"startTime": "2025-11-12 17:04:42",
"url": [
"http%3A%2F%2Ftianzhuo686285089.komect.com%2Ftest%2F"
],
"pageSubmit": true
} ^LtMABAeL
API-WEB ^NGCUogWo
URL预热 ^ro31K2ds
内容刷新 ^RgbGU8KB
目录刷新 ^C26fjp2b
%%
## Drawing
```compressed-json
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
yWRwAduYkKSHCDe2LIIACyEAA===
```
%%