Initial commit

This commit is contained in:
Docker7530
2026-03-01 01:43:46 +08:00
commit c6125c117b
3840 changed files with 415340 additions and 0 deletions
@@ -0,0 +1,50 @@
信安附件中“回源类型、回源 IP”字段校验,需要区分点播必填、直播非必填
运营操作工单、业务管理工单、域名管理
信安附件模板中,“回源类型、回源 IP”字段,业务类型若为点播则必填,业务类型若为直播则非必填,目前 ibs 系统校验未区分直播、点播业务类型,需要优化
1、“回源类型、回源 IP”校验
1)若业务类型为“直播”,回源类型、回源 IP 校验为非必填,下发信安系统时,若未填写,则将域名作为回源域名下发给信安;
若业务类型为“网页加速”、“下载加速”、“视音频点播加速”,回源类型、回源 IP 校验为必填;
2)涉及校验入口
涉及校验入口运营操作工单 信安信息补录工单 提单时校验
cache+ 域名配置工单 上传附件时校验
域名配置需求 - 新增工单 上传附件时校验
业务管理工单 试用单、试用变更单 BPM 回调可承接之后,上传信安附件时校验
域名管理 业务运维 - 配置管理 - 查看详情 - 信安信息附件修改
直播控制台 - 域名管理 - 域名详情 上传附件时校验
Cache+ 创建工单时上传信安附件,先校验工单业务类型与信安附件业务类型是否一致,再进行字段必填/非必填校验
直播
```mermaid
Title: 业务流程时序图
页面/cdni API->IBS后端: 内容预热(请求)
IBS后端->IBS后端: ①URL校验
IBS后端->IBS后端: ②企业操作超限判断
IBS后端->IBS后端: ③域名合法性校验
IBS后端-->页面/cdni API: 校验失败(响应)
IBS后端->配管: ④下发配管开发开关
配管-->IBS后端: 响应
IBS后端->CMS: ⑤任务默认下发
CMS-->IBS后端: 响应
IBS后端-->页面/cdni API: 响应
IBS后端->央教管: 联通、电信运营商请求
```
```mermaid
sequenceDiagram
Client->>Gateway : 发送JSON RPC请求
Gateway-->>Client : 把JSON RPC响应发送给客户端
```
sequenceDiagram
Client->>Gateway : 发送 JSON RPC 请求
Gateway-->>Client : 把 JSON RPC 响应发送给客户端
@@ -0,0 +1,114 @@
## 4.1 业务开通单前置校验增加业务类型判断
需求挂起
接口位置
com.cmcc.cdn.platform.selfservice.service.impl.TestOrderServiceImpl#businessOrderPrecheck
## 4.9 不同类型工单的工单 ID 重复优化
下发附件时,增加工单类型的判断,避免工单 ID 重复导致附件下发错误
### log_file_resource 表目前数量
WorkOrderEnums
CACHE_ENTERPRISE (cache+ 新建企业工单)1189
configure (域名配置补录)1510
DOMAIN (域名配置记录)3402
log (日志定制)142
schedule (调度策略定制)6
OrderTypeEnum
TEST (试用工单)283
CANCELORDER (业务注销工单)4
ORDERINFOUPDATE (业务变更工单)2
PREORDER (WorkOrderEnums 中商机与试用工单、取的 OrderTypeEnum 中的商机评估工单)987(试用单和适用变更单)
ORDER (业务受理工单)77 开通单(首次开通携带试用单、非首次开通 )
### 需求变更工单
/workorder/custom/upload
提单
/workorder/adapt/configchange
### 域名配置工单
提单入口
com.cmcc.cdn.platform.selfservice.controller.NewWorkOrderController#save
下发 BPM
com.cmcc.cdn.platform.selfservice.controller.NewWorkOrderController#approvedecision
修改位置
com.cmcc.cdn.platform.selfservice.order.DomainOrderService#bpmDomainAdaptChange
```java
List<LogFileResource> fileResources = logFileResourceRepository.findByConfigureId(one.getId(), WorkOrderEnums.Type.configure.name());
@Query(value = "SELECT resource.* FROM log_file_resource as resource " +
"LEFT JOIN configure_list as configure on resource.order_id = configure.id " +
"WHERE configure.id = ?1 AND resource.type = ?2", nativeQuery = true)
List<LogFileResource> findByConfigureId(Long configureId, String type);
```
### 商机试用单
已修改
### 试用变更单
已修改,同试用单类型
### 开通单
已修改,首次开通用的试用单的类型
已修改,非首次开通用的类型为 ORDER
### 域名配置需求工单
已修改,优化
### 需求变更工单
不涉及此问题单,此工单下发文件取值为 file_info 表
### cache+ 域名配置工单
不涉及此问题单,此工单下发文件取值为 file_info 表
### cache+ 需求变更工单
不涉及此问题单,此工单下发文件取值为 file_info 表
### 直播域名工单
未下发,此种工单目前应该时已经不存在了。
## 自测截图
![](../../../../attachment/images-uuid/65c7bab0ce3141869678511a3b33c991.png)
![](../../../../attachment/images-uuid/681fc3743d7549288ede3ad12854510c.png)
![](../../../../attachment/images-uuid/7f2c03751dd542f7ac1550f4e4ed522a.png)
![](../../../../attachment/images-uuid/1eceaee99289451d85180fbfaa198daf.png)
![](../../../../attachment/images-uuid/57b9288007144686a451b4e1257c300d.png)
@@ -0,0 +1,161 @@
33 项高级配置,域名删除需求
## 沟通记录
1、接口暂不支持直播域名删除。(接口已做校验)
2、接口产品测希望支持 Esop 和 Cache+ 源域名。技术中台和移动云不考虑。
## Esop 源
点播
定制化
已按照 esop 运营单删除回调处理域名
自助
Esop 源是否不存在自助域名
## Cache+ 源
点播
定制化
自助
管道化下发,蓝鲸配管回调
## 开发临时记录
cache+、Esop 工单删除入口
/configManage/domainOperate
cache+ 自服务流程
com.cmcc.cdn.platform.selfservice.service.impl.DeleteDomainServiceImpl#createDomainDeleteOrder
如果是未下发的同以上操作。
生成工单
```java
@CachePut(value = "all_presice_domain_cpInfo",key = "'all_presiceDomain_cpInfo'",cacheManager = "30MinutesCacheManager")
public Map<String,List<String>> updateAllPresiceDomainAndCpIdName(Map<String,List<String>> map){
return map;
}
@CachePut(value = "all_extensive_domain_cpInfo",key = "'all_extensiveDomain_cpInfo'",cacheManager = "30MinutesCacheManager")
public Map<String,List<String>> updateAllExtensiveDomainAndCpIdName(Map<String,List<String>> map){
return map;
}
@CachePut(value = "all_cp_precise_domains",key = "'all_cp_precieDomains'",cacheManager = "30MinutesCacheManager")
public Map<String,List<String>> updateAllCpPreciseDomain(Map<String,List<String>> map){
return map;
}
@CachePut(value = "all_cp_extrensive_domains",key = "'all_cp_extensiveDomains'",cacheManager = "30MinutesCacheManager")
public Map<String,List<String>> updateAllCpExtensiveDomain(Map<String,List<String>> map){
return map;
}
@CachePut(value = "all_cpid_cpname",key = "'all_cpid_cpname'",cacheManager = "30MinutesCacheManager")
public Map<String,String> updateCpIdAndCpName(Map<String,String> map){
return map;
}
@CacheEvict(value = {"domains", "cps", "cpByUser", "allCpByUser"}, allEntries = true, cacheManager = "deleteCachaManager")
@CacheRemove(value="all_cpid_flush_*")
public void clearDomainCacheAndEpCache() {
}
```
com.cmcc.cdn.platform.selfservice.domainobject.domainconfig.DomainTicketDeleteCallbackState#delete
管道化下方的回调
com.cmcc.cdn.platform.selfservice.controller.pm.PmPipeCallbackController#addBpmContents
## 参考记录
移动云
com.cmcc.cdn.platform.selfservice.service.impl.DomainDeleteTrancServiceImpl#deleteDomainFromYdy
配管和 bpm 回调均以此方法为主
大哥大哥,需要帮助。
我在做 33 项配置需求的企业删除接口。要兼容从这个接口删除 cache+ 和 esop 的域名。我先把现在运营单的删除逻辑过了一遍。
主要是 bpm 回调后和比较特殊的 cache+ 自助配管回调后在 mq 中执行删除动作。
我感觉主要就是
1、删除信安信息
2、解绑证书
3、删除订阅日志
4、注销话单(如果是 ESOP 或者三方的会执行这步)
5、把平台的一些表删除一下(这里直接用了一个公用的 deleteDomainFromIbs 方法)
还有什么需要注意的吗?
1、解除域名与运营经理绑定关系(存在)
2、域名下不能有未完成的工单(已处理)
3、域名不能是中间状态
4、域名删除后需要在 domain_delete_record 表记录(存在)
```sql
-- 域名查找
select ssdc.domain, ssdc.state, ssdc.product, ssdc.tenant_id, ta.salt, ta.tenant_key
from self_service_domain_config ssdc
join enterprise_info ei on ssdc.tenant_id = ei.enterprise_id
join domain_approve_relation dar on ssdc.domain = dar.domain
join tenant_authentication ta on ta.tenant_id = ssdc.tenant_id
where ssdc.state = 6
and ssdc.product != 5
and ei.source = 'BSS'
and ssdc.config_crt_id IS NOT NULL
order by ssdc.id desc;
```
```sql
-- 查看cpid
select ssdc.state,ei.enterprise_cp_id
from self_service_domain_config ssdc
join enterprise_info ei on ssdc.tenant_id = ei.enterprise_id
where domain = 'www.test145825.com';
```
## 测试用例:
### 删除 esop 的域名
停用中(状态值 6
单个:删除成功
测试一个有工单的
关注主任务表:
关注子任务表:
回调后的域名表:
单个:删除失败
# 测试用例
删除
@@ -0,0 +1,375 @@
# 问题记录
set_req_header 查询没有响应 option(已增加)
关于 option 字段,应理解为字段,不应进行配置管理
# 沟通记录
1、调用接口异常传给配管的是全量包含 null,修改为只下发此次任务的相关配置。
通过将参数透传,追加参数处理。
![](../../../../attachment/images-uuid/9dd468451a484a1fb0bed640f91fc881.png)
2、调用接口失败的任务将不再被回调
![](../../../../attachment/images-uuid/4e56422931ec4392814ac6d045add590.png)
3、自定义页面,中兴平面异常。
# 高级
## back_source_host(回源 host 配置)
请求参数
```json
"domain": "douyinvodtest.jingpintest.xyz",
// 回源host配置
"back_source_host": {
"enable": true,
"host": "douyinvodtest.back.com"
}
```
![](../../../../attachment/images-uuid/4bcd16ca50d2423dbc703b1626d36d2b.png)
数据库结果
![](../../../../attachment/images-uuid/da51ce55ffa94be386f8de53b2e53efa.png)
查询接口结果
![](../../../../attachment/images-uuid/2fa4af18e4f843e7af65bd6dba0a07ff.png)
关闭
## block_loop(分片回源信息)
下发参数
{"block_loop":true,"domain":"douyinvodtest.jingpintest.xyz","plain":[0,1,2,4],"task_id":"5141cb96546d4034a07565b170e86e50"}
![](../../../../attachment/images-uuid/6f93d088c9f646dca5ebad3389d02807.png)
![](../../../../attachment/images-uuid/581cd3bbf38d408ba3413992b5d33ef4.png)
回调后数据库结果
![](../../../../attachment/images-uuid/0b9d9da0bc9e4858a1c256fd14ffdb06.png)
![](../../../../attachment/images-uuid/7f61dbeaa5904f7c96478fc57cf808a5.png)
![](../../../../attachment/images-uuid/6bb0dc568683462dbc82da0a221570ff.png)
## 有歧义 -set_req_header(自定义回源 HTTP 请求头)
下发报文
![](../../../../attachment/images-uuid/42f62d248a8841229eae0e4b9a1a112b.png)
数据库体现
![](../../../../attachment/images-uuid/3bc4de50449f45ea9e556a863de66cef.png)
查询状况(需要补充 option
![](../../../../attachment/images-uuid/672d4120241d4ebcb43aa6e0e77062ef.png)
option 为 1
![](../../../../attachment/images-uuid/276f858eab2646e5949dd68d5e5b876c.png)
查询
![](../../../../attachment/images-uuid/d22dc249e77846978b11ee3225a27739.png)
## backsource_redirection_status(回源重定向跟随)
下发参数
![](../../../../attachment/images-uuid/f8e8b109f6d549cebd0981edfc532763.png)
查询接口
![](../../../../attachment/images-uuid/449be9c0dca94cf9b1ae5bf745846a80.png)
![](../../../../attachment/images-uuid/13d8b40090354b05a68e9a3ba35f8692.png)
## cache(缓存类型与过期时间信息)
下发报文
![](../../../../attachment/images-uuid/7613d24af85d4c4d8343b347e9fd9d68.png)
查询结果
![](../../../../attachment/images-uuid/74492f48a9af49deb9ab4c9a3ae86f2a.png)
![](../../../../attachment/images-uuid/82cd81c1fa3840338027b38d2b843174.png)
修改场景
![](../../../../attachment/images-uuid/729ccd849186438a8d46c14a24f104eb.png)
![](../../../../attachment/images-uuid/1b8969fb53e24fa0b3ca5fd4a4efa6cc.png)
数据库
![](../../../../attachment/images-uuid/008cc4253dbf43b3a2f3a8344fabb3d0.png)
特殊场景
![](../../../../attachment/images-uuid/9141ef4e1fd047deaf0db29b4e324bf5.png)
配管侧查询 cache 直接消失(正常)
ibs 库正常
![](../../../../attachment/images-uuid/46a6db34251c47548c7c84bf2fe983e0.png)
# 基础
# 删除
# 查询
# 联调记录转存 excle
1、url_parameter 子开关是否删除配置问题
2、ip_black_list 涉及 ibs 查询接口 ipList 不回显问题
3、referrer_anti_stealing_link 配管字段调整周一再测
4、custom_error_page 中兴失败
![](../../../../attachment/images-uuid/66f3fe695e2640aabfc8bba12dc9a41c.png)
![](../../../../attachment/images-uuid/87cfc0178bd543efa2a9207a0081043c.png)
![](../../../../attachment/images-uuid/8f6e4b5ff38945829c26d4b8f71f9a61.png)
![](../../../../attachment/images-uuid/8bb13ce5ecf349a3a14d69fdda88e835.png)
![](../../../../attachment/images-uuid/889aaaee0860421e851c0bc5b8cacfff.png)
![](../../../../attachment/images-uuid/a29266a7797840f2b7a22758499c4a26.png)
![](../../../../attachment/images-uuid/7b946bfb932245e8be8975e6c15272aa.png)
均开启
![](../../../../attachment/images-uuid/d7b94176b2c8448a9532f3787d071afc.png)
查询
```json
{
"back_rewrite_uri": {
"detail": [
{
"rewrite_path": "/aa",
"target_path": "/aa/$1/$2.jpg"
},
{
"rewrite_path": "bb",
"target_path": "/bb/$1/$2.jpg"
}
],
"enable": true
},
"back_source_host": {
"enable": true,
"host": "douyinvodtest.back.com"
},
"backsource_redirection_status": false,
"base": {
"cdn_type": "web",
"cname": "douyinvodtest.jingpintest.xyz.c8c10c27.d.cdn.10086.cn",
"created_time": "2023-07-28T17:17:20+08:00",
"crt_name": "",
"customerRemarks": {
"portParam": {
"http": 80,
"https": 443
}
},
"domain": "douyinvodtest.jingpintest.xyz",
"ip_priority": "ipv6",
"ipv6_on_off": false,
"protocol": 2,
"provinces": [],
"service_provider": "0",
"sources": [
{
"back_addr": "192.23.34.88:443",
"back_protocol": 2,
"primary": true,
"type": "ip"
}
],
"state": "online",
"unique_id": "20230808171383--662a-49f8-aa8d-7c6fa093f548"
},
"block_loop": false,
"brotli_status": false,
"cache": {
"detail": [
{
"content": "",
"followsource": 1,
"ttl": 5,
"type": 2,
"unit": "day",
"weight": 3
},
{
"content": "abc/file01/2.png",
"followsource": 0,
"ttl": 2,
"type": 3,
"unit": "week",
"weight": 3
},
{
"content": "/test/index.html",
"followsource": 0,
"ttl": 0,
"type": 4,
"unit": "minute",
"weight": 4
},
{
"content": "401,404",
"followsource": 0,
"ttl": 0,
"type": 5,
"unit": "second",
"weight": 96
}
],
"enable": true
},
"custom_error_page": {
"detail": [
{
"link": "https://abc.aa/error.html",
"mode": 0,
"type": 0
},
{
"link": "https://abc.bb/error.html",
"mode": 1,
"type": 1
},
{
"link": "https://abc.cc/error.html",
"type": 2
}
],
"enable": true
},
"gzip_status": false,
"http2_status": false,
"https_status": {
"detail": {
"https_force": false,
"https_tls_version": [
"tls1.0",
"tls1.1",
"tls1.2",
"tls1.3"
]
},
"enable": true
},
"ip_black_list": {
"enable": true,
"ip_list": [
"2.1.1.1",
"2:1::1:2/24"
]
},
"referrer_anti_stealing_link": {
"detail": {
"domain_list": [
"*.10086.com",
"www.10011186.co",
"www.10011187.co"
],
"list_type": 1,
"referrer_null": false
},
"enable": true
},
"set_req_header": {
"detail": [
{
"option": 1,
"type": "Sec-Fetch-Mode",
"value": "CNTWO"
}
],
"enable": true
},
"ua_anti_stealing_link": {
"detail": {
"list_type": 2,
"ua_list": [
"Android",
"IE"
],
"ua_null": false
},
"enable": true
},
"url_anti_stealing_link": {
"detail": {
"auth_encrypt": "SHA1",
"auth_key": "abc1234",
"auth_key_back": "xyz4321",
"auth_param": "x_signature",
"auth_timeout": 8640,
"auth_type": 6
},
"enable": true
},
"url_parameter": {
"enable": false
},
"video_drag_status": false
}
```
域名删除参数下发
![](../../../../attachment/images-uuid/794fec69ee424288a54decc21496b474.png)
![](../../../../attachment/images-uuid/5777d888f9934fa69a1af01f79c696d8.png)
话单模块儿
```log
2023-08-11 10:30:49 [,,,,] [http-nio-8080-exec-2] INFO com.cmcc.cdn.platform.selfservice.service.aspire.impl.callback.DomainDeleteServiceImpl 184 onSuccessCallBack - 【删除加速域名,配管回调成功】———>开始注销话单,域名为:tianzhuo339300559.komect.com
2023-08-11 10:30:49 [,,,,] [Thread-31] INFO com.cmcc.cdn.platform.selfservice.service.impl.BBossAndDssInteractiveServiceImpl$1 727 run - 下发话单请求参数, url:http://10.24.88.175:8030/api/ibs/dss/statement/configure/response, param:{"productInfos":[{"billingMethod":"1","businessType":"1","cancelStatus":"2","cancelTime":"20230811183049","createTime":"20230523093330","domain":"tianzhuo339300559.komect.com","enterpriseId":"ECID1684803255","enterpriseName":"测试企业-1684803255","infoType":"1","jobId":"20230523085310","productId":"1","province":"250"}]}
2023-08-11 10:30:49 [,,,,] [Thread-31] INFO com.cmcc.cdn.platform.selfservice.service.impl.BBossAndDssInteractiveServiceImpl 1227 sendRequest - {"productInfos":[{"billingMethod":"1","businessType":"1","cancelStatus":"2","cancelTime":"20230811183049","createTime":"20230523093330","domain":"tianzhuo339300559.komect.com","enterpriseId":"ECID1684803255","enterpriseName":"测试企业-1684803255","infoType":"1","jobId":"20230523085310","productId":"1","province":"250"}]}
2023-08-11 10:30:49 [,,,,] [Thread-31] INFO com.cmcc.cdn.platform.selfservice.service.impl.BBossAndDssInteractiveServiceImpl 1230 sendRequest - 计费话单-带宽数据获取 operateurl:http://10.24.88.175:8030/api/ibs/dss/statement/configure/response
2023-08-11 10:30:49 [,,,,] [Thread-31] INFO com.cmcc.cdn.platform.common.util.HttpUtil 340 doHttpRequest2 - url:http://10.24.88.175:8030/api/ibs/dss/statement/configure/response, method:post, 返回的状态码为:200
2023-08-11 10:30:49 [,,,,] [Thread-31] INFO com.cmcc.cdn.platform.common.util.HttpUtil 344 doHttpRequest2 - url:http://10.24.88.175:8030/api/ibs/dss/statement/configure/response, method:post, 返回的请求体:{"result":null,"code":200,"message":"成功"}
2023-08-11 10:30:49 [,,,,] [Thread-31] INFO com.cmcc.cdn.platform.selfservice.service.impl.BBossAndDssInteractiveServiceImpl 1233 sendRequest - 计费话单-带宽数据获取 响应信息, status: 200, response:{"resp":"{\"result\":null,\"code\":200,\"message\":\"成功\"}","status":"200"}
2023-08-11 10:30:49 [,,,,] [Thread-31] INFO com.cmcc.cdn.platform.selfservice.service.impl.BBossAndDssInteractiveServiceImpl$1 771 run - 更新试用域名计费信息, [],[tianzhuo339300559.komect.com],[tianzhuo339300559.komect.com]
2023-08-11 10:30:49 [,,,,] [http-nio-8080-exec-2] INFO com.cmcc.cdn.platform.selfservice.dao.RedisCacheRepository 221 clearDomainsApi - clearDomainsApi
```
![](../../../../attachment/images-uuid/52de1c72cf964928930b598d7bbf47c6.png)
![](../../../../attachment/images-uuid/0d8ad062758845a7b5d065166bf7eab2.png)
![](../../../../attachment/images-uuid/40b6b4cd8c544c09ac8e3b655be5bcab.png)
![](../../../../attachment/images-uuid/aca1ca25f2904367b872075f551aab70.png)
![](../../../../attachment/images-uuid/3d093f720542415cbfcc13bd0e9ff7a0.png)
@@ -0,0 +1,304 @@
| 请求参数 | selfserviceDomainConfig 对应的属性 | 名称 |
| ----------------------------- | --------------------------------------------- | ----------------- |
| back_source_host | self_service_domain_configback_host | 回源 host 配置 |
| block_loop | self_service_domain_configblock_loop | 分片回源信息 |
| set_req_header | oms_customer_remark loop_http_header | 自定义回源 HTTP 请求头 |
| set_resp_header | httpHeaderConfigs | 自定义 HTTP 响应头 |
| backsource_redirection_status | isFollowed | 回源重定向跟随 |
| cache | cacheType | 缓存类型与过期时间信息 |
| custom_error_page | customPages | 自定义页面信息 |
| http2_status | omsCustomerRemark.http2 | 支持 HTTP/2 的协议配置 |
| video_drag_status | videoDrag | 拖拽播放信息 |
| gzip_staus | Encryption EncryptionGrade | 开启智能压缩功能 |
| brotli_status | omsCustomerRemarkPO.brotliSwitch | 开启 Brotli 压缩功能 |
| referrer_anti_stealing_link | refererAntiStealingLink | Referer 黑白名单 |
| ip_black_list | domainConfigBlackList | IP 黑名单; 指定 IP、IP 段来设置 |
| url_parameter | 新 | URL 参数缓存策略 |
| https_status | 新,但是要与 protocol 有关,只有 1、2 时才可以 | HTTPS 高级选项 |
| url_anti_stealing_link | 新 | URL 防盗链参数 |
| ua_anti_stealing_link | omsCustomerRemark.uaBlackAndWhite uaBlackList | UA 防盗链参数 |
| back_rewrite_uri | 新 | 回源 URL 改写 |
SelfServiceDomainAdvancedConfigDao
SelfServiceDomainAdvancedConfigPO
AdvancedConfigEnum
```sql
-- set_req_header
select http_header_config.* from http_header_config
inner join domain_config_http_header_config on http_header_config.id = domain_config_http_header_config.http_header_config_id
inner join self_service_domain_config ssdc on domain_config_http_header_config.domain_config_id = ssdc.id
where domain='www.zphtest202307102002.com';
# backsource_redirection_status
select is_followed from self_service_domain_config where domain='www.zphtest202307102002.com';
-- set_resp_header
select loop_http_header from oms_customer_remark left join self_service_domain_config ssdc on oms_customer_remark.id = ssdc.oms_customer_remark_id
where ssdc.domain='www.zphtest202307102002.com';
-- cache
select cache_type.* from cache_type
inner join domain_config_cache_type dcct on cache_type.id = dcct.cache_type_id
inner join self_service_domain_config ssdc on dcct.self_service_domain_config_id = ssdc.id
where domain='www.zphtest202307102002.com';
-- custom_error_page
select custom_page.* from custom_page
inner join domain_config_custom_page dccp on custom_page.id = dccp.custom_page_id
inner join self_service_domain_config ssdc on dccp.domain_config_id = ssdc.id
where domain='www.zphtest202307102002.com';
-- https2
select http2 from oms_customer_remark
join self_service_domain_config ssdc on oms_customer_remark.id = ssdc.oms_customer_remark_id
where domain='www.zphtest202307102002.com';
-- video_drag_status 拖拽播放信息
select video_drag
from self_service_domain_config
where domain = 'www.zphtest202307102002.com';
-- gzip_status 智能压缩
select encryption, encryption_grade from self_service_domain_config
inner join oms_customer_remark ocr on self_service_domain_config.oms_customer_remark_id = ocr.id
where domain='www.zphtest202307102002.com';
-- brotli_status 开启broli压缩功能
select brotli_switch from oms_customer_remark
inner join self_service_domain_config ssdc on oms_customer_remark.id = ssdc.oms_customer_remark_id
where domain='www.zphtest202307102002.com';
-- Referer黑白名单
select referer_anti_stealing_link.*, rbwl.* from referer_anti_stealing_link
inner join referer_anti_stealing_black_white_list on anti_stealing_link_id = referer_anti_stealing_link.id
inner join referer_black_white_list rbwl on referer_anti_stealing_black_white_list.black_white_id = rbwl.id
inner join self_service_domain_config ssdc on referer_anti_stealing_link.id = ssdc.referer_anti_stealing_link_id
where ssdc.domain='www.zphtest202307102002.com';
-- ip和白名单
select domain_ip_black_list.* from domain_ip_black_list
inner join domain_config_black_list dcbl on domain_ip_black_list.id = dcbl.black_id
inner join self_service_domain_config ssdc on dcbl.domain_config_id = ssdc.id
where domain='www.zphtest202307102002.com';
-- url_parameter\https_status\url_anti_stealing_link\ua_anti_stealing_link
select * from self_service_domain_advanced_config where domain='www.zphtest202307102002.com';
-- ua防盗链
select ua_black_list, ua_black_and_white, ua_null from oms_customer_remark
join self_service_domain_config ssdc on oms_customer_remark.id = ssdc.oms_customer_remark_id
where domain='www.zphtest202307102002.com';
```
### 新增/修改高级配置接口路径和参数
/api/config/action?commandType=manageDomainAdvancedConfig&version=1
```json
{
"domain": "www.zphtest202307102002.com",
// "referrer_anti_stealing_link": {
// "enable": true,
// "detail": {
// "list_type": 2,
// "referrer_null": true,
// "domain_list": [
// "*.10086.com",
// "www.10011186.co"
// ]
// }
// },
//分片回源信息
// "block_loop": true
//回源host
// "back_source_host": {
// "enable": false,
// "host": "www.baidu.com"
// }
//请求头设置
// "set_req_header": {
// "enable": true,
// "detail": [
// {
// "type": "Content-Language2",
// "value": "CN",
// "option": 1 //0 设置 1 删除
// },
// {
// "type": "Sec-Fetch-Mode",
// "value": "CN",
// "option": 0 //0 设置 1 删除
// }
// ]
// },
// 响应头
// "set_resp_header": {
// "enable": true,
// "detail": [
// {
// "type": "Sec-Fetch-Dest",
// "value": "text/xml",
// "option": 0 //0 设置 1 删除
// },
// {
// "type": "Sec-Fetch-Mode",
// "value": "text/xml",
// "option": 0 //0 设置 1 删除
// }
// ]
// },
//回源重定向跟随
// "backsource_redirection_status": "aaa",
//缓存类型与过期时间信息
// "cache": {
// "enable": true,
// "detail": [
// {
// "type": 0,
// "content": "/abc/def/",
// "ttl": 10,
// "unit": "day",
// "weight": 1,
// "followsource": 1
// },
// {
// "type": 0,
// "content": "jpg,txt",
// "ttl": 1,
// "unit": "hour",
// "weight": 1
// }
// ]
// },
// 自定义页面
// "custom_error_page": {
// "enable": false,
// "detail": [
// {
// "type": 1,
// // "mode": ,
// "link": "https://xxxx.xx/error.html"
// }
// ]
// },
//http2_status 支持http2协议
// "http2_status": true,
//video_drag_status 拖拽播放信息
// "video_drag_status": true
//gzip_status 要锁参数
// "gzip_status":false
// refer防盗链
// "referrer_anti_stealing_link": {
// "enable": true,
// "detail": {
// "list_type": 1,
// "referrer_null": true,
// "domain_list": [
// "*.10086.com",
// "www.10086.co"
// ]
// }
// }
//ip黑白名单
// "ip_black_list": {
// "enable": true,
// "ip_list": [
// "1:1::1:0/21",
// "1.1.1.0/24",
// "10.1.1.20-10.1.1.25"
// ]
// },
// url参数+缓存
// "url_parameter": {
// "enable": true,
// "shared_cache": {
// "enable": true,
// "target_domain": "video.baidu.com"
// },
// "detail": {
// "enable":true,
// "type": 2,
// "content": "param1;param2;param3;param4"
// }
// },
// https 高级配置
// "https_status": {
// "enable": true,
// "detail": {
// "https_force": true,
// "https_tls_version": [
// "tls1.0",
// "tls1.1",
// "tls1.2",
// "tls1.3"
// ]
// }
// }
// // url 防盗链
// "url_anti_stealing_link": {
// "enable": false,
// "detail": {
// "auth_type": 1,
// "auth_key": "abc1234",
// "auth_key_back": "xyz4321",
// "auth_param": "x-signature",
// "auth_encrypt": "HAMC_SHA1",
// "auth_timeout": 86400
// }
// },
// ua 防盗链
// "ua_anti_stealing_link": {
// "enable": true,
// "detail": {
// "list_type": 1,
// "ua_list": [
// "iphone",
// "android"
// ],
// "ua_null":true
// }
// },
// ua 防盗链
"back_rewrite_uri": {
"enable": true,
"detail": [
{
"rewrite_path": "",
"target_path": "abcdefghabcdefh"
},
{
"rewrite_path": "bb",
"target_path": "cc"
}
]
}
}
```
### 高级配置回调接口路径和参数
回调 url/action?commandType=manageDomainCallBack&version=1
```json
{
"domains": [
{
"domain": "www.zphtest202307102002.com",
"result": 0,
"cp_id": "83564834"
}
],
"callback_type": "create",
"task_id": "487bfb92a3414856b9a3e93003781d37",
"plain": [
1
]
}
```
@@ -0,0 +1,7 @@
![](../../../../attachment/images-uuid/5662c7c2711b4bbf87990c1fada16583.png)
![](../../../../attachment/images-uuid/43f14992529d45368358f5c7e6705925.png)
![](../../../../attachment/images-uuid/40a089b98ed044f0adf67b1eefa2c462.png)
![](../../../../attachment/images-uuid/643c2ece9ffb4f54ab76af072e1cb6f5.png)
@@ -0,0 +1,496 @@
## 阶段代办
1、前置校验问题:暂时不做,产品改文档。
2、话单异常删除兜底
3、下发 BPM 重试机制(已完初版)
4、工单审批记录
5、信安异常捕捉
6、bpm 联调注意时间格式
7、bboss 联调工作
8、测试问题
![](../../../../attachment/images-uuid/5f2daf41af2a42b5b7bcddc8ab800bed.png)
9、重复入库问题:存储后是否会自动映射 id(验证后会自动映射)
10、事务自测,最外层事务是否保持关闭(目前为关闭)
11、工单详情页(自测已确认待最后验证用例确认)
12、邮件发送人员最终确认(待确认 sa 概念目前任务国际和集团都是政企 sa)
13、增加上线 patch 项,一个联系人配置项
14、省侧流程(已经跑过一次)
15、归属问题 拿过来了。
```json
{
"accessSystem":"IBS",
"account":"CDN-IBS",
"data":{
"tyywrwlcdx":{
"businessStartTime ":"2023-09-08 13:35:03",
"cdn_type":"web",
"code":"kt-0908133453",
"createDate":"2023-09-08 13:35:01",
"create_time":"2023-09-08 13:35:14",
"domains":[
"tianzhuo276482281.komect.com"
],
"nameOfClient":"测试企业-1694151073",
"operMail":"remaxob441@kamismail.comabc",
"operTel":"15700197926",
"operUser":"15700197926cmcc",
"plains":[
"0"
],
"pro_content":"业务开通(处理业务开通工单), web, 域名列表: tianzhuo276482281.komect.com",
"pro_title":"业务开通(处理业务开通工单)",
"prodType":"1",
"province":"JT",
"task_first_class":"3",
"task_second_class":"5",
"triggerMode":"manualTrigger",
"user_id":"921"
}
},
"flowKey":"tyywrwlc"
}
```
# 联调工作
> 2023 年 9 月 20 日晚上 6 点灰度开始联调,开始遇到 tocken 问题
## 测试用例 1- 试用单直接首次开通
**试用单**
100A230920170122001
**开通单**
100A230920170126001
**BBOSS 请求参数**
```json
{
"accessToken":"20231015100000202050f60a9b406191ec5c4aac005de9-0019-1694743200",
"busType":"BBSS",
"content":{
"BackFlag":"0",
"BillingMethod":"1",
"BizRequest":"100A230920170122001",
"BizStart":"20230920",
"BusiInfo":"",
"BusinessType":"1",
"DataFlow":"1",
"InfoSecurity":"",
"InfoSecurityTable":"",
"OrderNum":"100A230920170126001",
"ProdType":"1",
"ProductID":"61000616304"
},
"cutOffDay":"20230920",
"domain":"CDNP",
"envFlag":"0",
"routeType":"00",
"routeValue":"995",
"sessionID":"675cf2df623c47e69e523c0fd2b6f7b9",
"sign":"DE132BD55A30C04864CFA3D445BD0209",
"signMethod":"md5",
"timeStamp":"20230920185339",
"transIDO":"675cf2df623c47e69e523c0fd2b6f7b9",
"userPartyID":"BBSS9980",
"version":"1.0.0"
}
```
**下发话单参数**
注销试用单
```json
{
"productInfos":[
{
"billingMethod":"1", // 计费方式
"businessType":"1", // 试用单目前为产品类型 1234
"cancelStatus":"2", // 注销状态:注销
"cancelTime":"20230920185436", // 注销时间:当前时间
"createTime":"20230920183230", // 创建时间:试用单时间
"domain":"pull.api-eas-3.li.com", // 域名
"enterpriseId":"100A23100079275183", // 企业Id
"enterpriseName":"北京泽天伟业商贸有限公司", // 企业名称
"infoType":"1", // 订购类型,1为试商用,2为商用
"jobId":"100A230920170122001", // 试用工单工单号
"productId":"1", // 试用单目前为产品类型 1234
"province":"100" // 省份信息
}
]
}
```
下发商用单
```json
{
"productInfos":[
{
"billingMethod":"1",
"businessType":"1", // 试用单目前为产品类型 1234
"cancelStatus":"1", // 注销状态:未注销
"cancelTime":"20330920185436",
"createTime":"20230920185435",
"domain":"pull.api-eas-3.li.com",
"enterpriseId":"100A23100079275183",
"enterpriseName":"北京泽天伟业商贸有限公司",
"infoType":"2", // 订购类型,1为试商用,2为商用
"jobId":"100A230920170126001", // 工单号
"productId":"61000616304", // 商用为订购关系ID
"province":"100"
}
]
}
```
**大数据侧库信息**
![](../../../../attachment/images-uuid/03d55efcb68748b89b78a1946169a4dd.png)
**下发 bpm 参数**
```json
{
"accessSystem":"IBS",
"account":"CDN-IBS",
"data":{
"tyywrwlcdx":{
"businessStartTime":"2023-09-20 18:54:36",
"cdn_type":"web",
"code":"100A230920170126001",
"createDate":"2023-09-20 18:54:36", // 时间已处理
"create_time":"2023-09-20 18:54:36",
"domains":[
"pull.api-eas-3.li.com"
],
"nameOfClient":"北京泽天伟业商贸有限公司",
"operMail":"43",
"operTel":"18867110000",
"operUser":"beijingyunying",
"plains":[
"0"
],
"pro_content":"业务开通(处理业务开通工单), web, 域名列表: pull.api-eas-3.li.com",
"pro_title":"业务开通(处理业务开通工单)",
"prodType":"1",
"province":"BJ",
"task_first_class":"3",
"task_second_class":"5",
"triggerMode":"manualTrigger",
"user_id":"1458"
}
},
"flowKey":"tyywrwlc"
}
```
**邮件是否正常**
灰度环境无法验证邮件,开发环境已验证
**工单详情页**
![](../../../../attachment/images-uuid/63eecc8efb484e31a563236d36c28682.png)
**获取试用流量**
```json
{"result":"{\"code\":200,\"message\":\"成功\",\"result\":[{\"enterpriseId\":\"100A23100079275183\",\"productId\":\"1\",\"dataflow\":0.0,\"jobId\":\"100A230920170122001\"}]}"}
{
"code":200,
"message":"成功",
"result":[
{
"enterpriseId":"100A23100079275183",
"productId":"1",
"dataflow":0,
"jobId":"100A230920170122001"
}
]
}
```
## 测试用例 2- 非首次开通
**非首次开通**
100A230920170127001
**BBOSS 请求参数**
```json
{
"accessToken":"20231015100000202050f60a9b406191ec5c4aac005de9-0019-1694743200",
"busType":"BBSS",
"content":{
"BackFlag":"0",
"BillingMethod":"1",
"BizRequest":"100A230920170122001",
"BizStart":"20230920",
"BusiInfo":"100A230920170127001_50004020030_20230920191212.xlsx",
"BusinessType":"1",
"DataFlow":"1",
"InfoSecurity":"100A230920170127001_50004020027_20230920191212.xlsx",
"InfoSecurityTable":"100A230920170127001_50004020028_20230920191212.xlsx",
"OrderNum":"100A230920170127001",
"ProdType":"1",
"ProductID":"61000616305",
"ProvContent":[
{
"ProvReq":"pull.api-easss-3.li.com"
}
]
},
"cutOffDay":"20230920",
"domain":"CDNP",
"envFlag":"0",
"routeType":"00",
"routeValue":"995",
"sessionID":"f08ae70d9d694996aafb1314839c8b7e",
"sign":"F993E7C03523A3161BA84E856D9D0ABE",
"signMethod":"md5",
"timeStamp":"20230920191215",
"transIDO":"f08ae70d9d694996aafb1314839c8b7e",
"userPartyID":"BBSS9980",
"version":"1.0.0"
}
```
**下发话单参数**
```json
{
"productInfos":[
{
"billingMethod":"1",
"businessType":"1",
"cancelStatus":"1",
"cancelTime":"20330920191917",
"createTime":"20230920191917",
"domain":"pull.api-easss-3.li.com",
"enterpriseId":"100A23100079275183",
"enterpriseName":"北京泽天伟业商贸有限公司",
"infoType":"2",
"jobId":"100A230920170127001",
"productId":"61000616305",
"province":"100"
}
]
}
```
**下发 bpm 参数**
```json
{
"accessSystem":"IBS",
"account":"CDN-IBS",
"code":"100A230920170127001",
"createDate":"2023-09-20 19:13:12",
"data":{
"cdn_type":"web",
"cpId":"80171614",
"domains":[
"pull.api-easss-3.li.com"
],
"filelist":[
{
"name":"100A230920170127001_50004020027_20230920191212.xlsx"
},
{
"name":"100A230920170127001_50004020030_20230920191212.xlsx"
}
],
"nameOfClient":"北京泽天伟业商贸有限公司",
"numberOfDoamin":1,
"operMail":"43",
"operTel":"18867110000",
"operUser":"beijingyunying",
"sourceBasis":"100A230920170127001",
"sourceOfDemand":"IBS平台",
"titleOfDemand":"北京泽天伟业商贸有限公司业务开通工单"
},
"processType":"2",
"prodType":"1",
"province":"BJ",
"userList":[
{
"userMail":"yuhuazheng@aspirecn.com",
"userName":"15512341234cmcc",
"userTel":"15512341234"
}
]
}
```
**邮件是否正常**
灰度环境无法验证邮件,开发环境已验证
**工单详情页**
![](../../../../attachment/images-uuid/e5e2476678244d54a7ca378bcb4d7486.png)
## 测试用例 3- 存在试用变更的开通
**试用单**
100A230920170128001
**试用变更单**
100A230920170129001
**首次开通单**
100A230920170130001
**BBOSS 请求参数**
```json
{
"accessToken":"20231015100000202050f60a9b406191ec5c4aac005de9-0019-1694743200",
"busType":"BBSS",
"content":{
"BackFlag":"0",
"BillingMethod":"1",
"BizRequest":"100A230920170128001",
"BizStart":"20230930",
"BusiInfo":"",
"BusinessType":"4",
"DataFlow":"12121",
"InfoSecurity":"",
"InfoSecurityTable":"",
"OrderNum":"100A230920170130001",
"ProdType":"1",
"ProductID":"61000616307"
},
"cutOffDay":"20230920",
"domain":"CDNP",
"envFlag":"0",
"routeType":"00",
"routeValue":"995",
"sessionID":"4ed55605c6c3464fb064bb2b4d2864b4",
"sign":"F8854E7485C6BA6C0B3BC4752AE2FB54",
"signMethod":"md5",
"timeStamp":"20230920193956",
"transIDO":"4ed55605c6c3464fb064bb2b4d2864b4",
"userPartyID":"BBSS9980",
"version":"1.0.0"
}
```
**下发话单参数**
```json
{
"productInfos":[
{
"billingMethod":"1",
"businessType":"4",
"cancelStatus":"1",
"cancelTime":"20330920194051",
"createTime":"20230930000000",
"domain":"pull.api-eassss-3.li.com",
"enterpriseId":"100A23100079275183",
"enterpriseName":"北京泽天伟业商贸有限公司",
"infoType":"2",
"jobId":"100A230920170130001",
"productId":"61000616307",
"province":"100"
},
{
"billingMethod":"1",
"businessType":"4",
"cancelStatus":"1",
"cancelTime":"20330920194051",
"createTime":"20230930000000",
"domain":"pull.api-aeassss-3.li.com",
"enterpriseId":"100A23100079275183",
"enterpriseName":"北京泽天伟业商贸有限公司",
"infoType":"2",
"jobId":"100A230920170130001",
"productId":"61000616307",
"province":"100"
}
]
}
```
**下发 bpm 参数**
```json
{
"accessSystem":"IBS",
"account":"CDN-IBS",
"data":{
"tyywrwlcdx":{
"businessStartTime":"2023-09-30 00:00:00",
"cdn_type":"liveStream",
"code":"100A230920170130001",
"createDate":"2023-09-20 19:40:52",
"create_time":"2023-09-20 19:40:52",
"domains":[
"pull.api-eassss-3.li.com",
"pull.api-aeassss-3.li.com"
],
"nameOfClient":"北京泽天伟业商贸有限公司",
"operMail":"43",
"operTel":"18867110000",
"operUser":"beijingyunying",
"plains":[
"-1"
],
"pro_content":"业务开通(处理业务开通工单), liveStream, 域名列表: pull.api-eassss-3.li.com,pull.api-aeassss-3.li.com",
"pro_title":"业务开通(处理业务开通工单)",
"prodType":"1",
"province":"BJ",
"task_first_class":"3",
"task_second_class":"5",
"triggerMode":"manualTrigger",
"user_id":"1458"
}
},
"flowKey":"tyywrwlc"
}
```
**邮件是否正常**
灰度环境无法验证邮件,开发环境已验证
**工单详情页**
![](../../../../attachment/images-uuid/788aa12154da471eb5de959a7d93b516.png)
**定时任务情况**
```java
2023-09-20 11:40:52 [,,,,] [http-nio-8080-exec-9] INFO com.cmcc.cdn.platform.common.quartz.service.impl.ScheduleServiceImpl 143 createScheduleJob - 创建任务调度器并注册任务成功,taskName=BBossOrderJob$$EnhancerBySpringCGLIB$$dfc3d364_100A230920170130001_20230929160000
```
![](../../../../attachment/images-uuid/578e3af09da248bea38ef5767608a0d1.png)
![](../../../../attachment/images-uuid/83a0b43fe5a341048d5ee9a3a85e9cdc.png)
@@ -0,0 +1,144 @@
## 获取权限
第一步
```java
DigestUtils.sha256Hex(tenantId + datetime + tenantKey);
gjrp2pwi-umdpywpuhjtilueh2023-10-24T12:00:00+08:00pQkC06I81Z5qTFJ7
2ddjkw6c-xjfa4bbzfquoferd2023-10-24T12:00:00+08:00k4p5CpmvqFllnZLI
2ddjkw6c-xjfa4bbzfquoferd2023-10-24T12:00:00+08:00k4p5CpmvqFllnZLI
```
或者直接用这个网站:https://coding.tools/cn/sha256
第二部
通过接口 `/api/authentication`​获取 tocken
实际请求头中要存在:
```json
CMCDN-Auth-Token:tocken
accept:application/vnd.cmcdn.v1+json
```
gjrp2pwi-umdpywpuhjtilueh
pQkC06I81Z5qTFJ7
## 通用客户统计分析接口 - 田卓
1、校验逻辑:两种方式查询,只要能查到就放行。
2、转换为假域名:
A、如果不是冲突域名不处理
B、如果是冲突域名获取 对应关系的 Map key为domain value 为cpdomain
C、把请求参数种的域名根据cpdomain替换为domain去大数据查询
3、转换为真域名:
A、如果不是冲突域名不处理
**企业 B**查询统计分析类 API,入参为**域名 A**,鉴权**token 使用企业 B**信息获取
校验 cpid 与域名关系时,需兼容
统计接口
进接口后,两个方向
默认不从 crs 查询
是配置项中的企业直接从 crs 查询
ipprotocol 分协议查询,isps 分运营商查询 不从 crs 查询
如果收拾泛域名不从 crs 查询
从 crs 查询数据
从大数据查询数据
# 开发自测
| domain | cp_domain | tenant_id | user_id |
| --- | --- | --- | --- |
| tianzhuo1025194847.komect.com | | z1ns9tmh-i5misrruoirz4bij | 2693 |
| tianzhuo1025194847.komect.com.01.cdnhwcqir15.com | tianzhuo1025194847.komect.com | gbhgixgx-9xpbl5othmqnjz29 | 2692 |
造数据
01 北京、02 天津
2023-10-25 12:00:00 1698206400000
2023-10-25 12:05:00 1698206700000
2023-10-25 12:10:00 1698207000000 (只有冲突域名有数据)
A
z1ns9tmh-i5misrruoirz4bij2023-10-25T12:00:00+08:00tbIieA96Vuwzth24
AD234C87B9F569798A9D12DC1A42D66F956878C67EB95956FAB6ECC1A8C0F17F
B
gbhgixgx-9xpbl5othmqnjz292023-10-25T12:00:00+08:00PxRosFO2PWGf9nQO
F6521D1FD2C22CD331F0659A3F4CFC344AE42C0C06A3AAC9F15AB6F018A59BF1
ssh publicuser@10.13.0.111
GCwF7L6\^dJRh\$3O017v%K
# 灰度自测
| domain | cp_domain | tenant_id | user_id |
| --- | --- | --- | --- |
| tianzhuo1026152343.komect.com | | cwstsoxj-wu7lkr47zd9nr1az | 2555 |
| tianzhuo1026152343.komect.com.01.cdnhwcqir15.com | tianzhuo1026152343.komect.com | 9xmmobpm-dcii2ba7uk8khn86 | 2556 |
A
cwstsoxj-wu7lkr47zd9nr1az2023-10-26T12:00:00+08:00cxZZ4H4dqtF3ghge
AAB26B560CDB52FD14F77B0F6603117D627B3B9010D610FFE87F4A58DEAF85C4
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJjd3N0c294ai13dTdsa3I0N3pkOW5yMWF6IiwiZXhwIjoxNjk4MzQ5NzE2LCJpYXQiOjE2OTgzMDY1MTYsImlzcyI6ImNtY2RuIn0=.MR0uQ4CYOnDLJYBLxqSHY52KxuG44428WrvJofGtfbA=
B
9xmmobpm-dcii2ba7uk8khn862023-10-26T12:00:00+08:00hLo6VpAlPdRQuEDE
CC862C3B63151AE69079F6CB272199C683FCA4ABE6A2C92AAB72267F17826EC8
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiI5eG1tb2JwbS1kY2lpMmJhN3VrOGtobjg2IiwiZXhwIjoxNjk4MzQ5NzQxLCJpYXQiOjE2OTgzMDY1NDEsImlzcyI6ImNtY2RuIn0=.2rAkm7ZIBhq7Yze5kny7X9oq15siII8dfvv7TwDhta0=
参数校验
seconds 必须时 60 或者 300
如果穿了平面和地区会把平面地区保存到线程中
ipProtocol 必须时 0 或者 1
暂不支持 all 汇总数据与域名同时查询
detail 必须时 0 全国或者 1 所有省份
不支持超过 30 个域名查询
仅支持一个泛域名
结束时间不能超过当天 00 点后如 24 好不能为 25:00 后
如果结束时间为当前以前十分钟后的时间修正 为十分钟前
只能查询截止到十分钟前的数据,只能查询近 7 天的数据,跨度顶多 2 天
最小时间间隔不能小于 4 分钟
@@ -0,0 +1 @@
![](../../../../attachment/images-uuid/0942ebc691ab41fb831b7189a914c9d0.png)
@@ -0,0 +1,15 @@
163.177.221.3 广东、东莞、联通
![](../../../../attachment/images-uuid/162a1b58231841e3ac80a9b8d9407764.png)
36.7.99.198 安徽、合肥、电信
![](../../../../attachment/images-uuid/2cf3814f04494659b8f420cd4974d53e.png)
124.71.124.92 广东、佛山、其他运营商
![](../../../../attachment/images-uuid/0a044fcfd783407b8de3f7a74a58e222.png)
39.134.3.81 重庆、移动
![](../../../../attachment/images-uuid/293fd856789d42edafe5bbf06742cf18.png)
@@ -0,0 +1,125 @@
## 产品相关问题
1、关于 service\_provide isp\_code 运营商 的映射方案,主要是配管多余枚举参数如何映射。
2、省份、城市信息配管是否可以直接返回中文。周末我已录入相应枚举。可对 code 解析也可以直接读取中文。看配管最终返回什么均可。
3、接口文档维护:
仅支持一个 IP 查询,历史接口入参是 String 类型
![](../../../../attachment/images-uuid/59d32aad1c8a41479906e7a7afe61b3c.png)
![](../../../../attachment/images-uuid/4b6d814084cc491fb2ca9095280024be.png)
响应体不符合
历史请求响应
![](../../../../attachment/images-uuid/2f9e64c336d44f28b5c93421f0ca8a4c.png)
接口文档
![](../../../../attachment/images-uuid/47b0d92200b246e5af6f20a4dee33d45.png)
按照需求文档响应体报文:
![](../../../../attachment/images-uuid/aaf2704699f54c8897de0e5fc2858a1d.png)
**确认是否和接口文档保持一致**
4、配管是否支持 ipv6 查询
![](../../../../attachment/images-uuid/4c10f9ef2af44fa6a2e3c13b94eae4fa.png)
## 开户
repeatInfo0 不展示修改按钮
repeatInfo:其他值 展示修改按钮
epConfig0 未配置
epConfig1 已配置
epConfig:其他值 配置失败
![](../../../../attachment/images-uuid/3ee306cf2c1d4d9aaaf83882850a0118.png)
![](../../../../attachment/images-uuid/a960caac7a584edab9049501b63ca69d.png)
![](../../../../attachment/images-uuid/9b1323a79dbb431bae9d2863e59fa19d.png)
![](../../../../attachment/images-uuid/b3e74b59cacb4933aadfc60bd118c8e6.png)
![](../../../../attachment/images-uuid/c2919a39c962410197f4ff0f80c98fa4.png)
![](../../../../attachment/images-uuid/1acf858c36aa4a77b9446d993e3fa833.png)
![](../../../../attachment/images-uuid/21622cd386234069b44b2b61d00abe35.png)
## IP 归属查询
2001:0db8:85a3:0000:0000:8a2e:0370:7334
2001:db8:85a3:0:0:8a2e:370:7334
2001:db8:85a3::8a2e:370:7334
::ffff:192.0.2.128
01txwvqu-ujqjh1apgpmnh9uq2023-10-25T12:00:00+08:00QJE7k7UlnWXpSCi2
0AD26DC97C5B76C2B7B6DC34E4C90C72436C9933DBA1C5FC16C3A54476B1C7D3
![](../../../../attachment/images-uuid/80caccc120cb4ef2a7c7f7071c9ed16f.png)
# 上线
## 权限
lfp207cp-7789n86jmngqqkvl2023-11-28T12:00:00+08:00J4qfIbvMupBHrXIh
A5D7DF05FD3F5EC0CD166F6F80ECA718C9320017EB938E558DA8FF731FF95E43
2023-11-28T12:00:00+08:00
## 线上接口邮件
测试:https://paas.uops.cdn.10086.cn/t/cdn-config/api/v3/nodeinfo
现网:https://paas.uops.cdn.10086.cn/o/cdn-config/api/v3/nodeinfo
### IBS 配置
![](../../../../attachment/images-uuid/6a1723573c2647729902b1389a5dd10e.png)
## 各个平面配置
163.177.221.3 广东、东莞、联通
![](../../../../attachment/images-uuid/61707a7c1af84dcdb5a764614ad67d17.png)
36.7.99.198 安徽、合肥、电信
![](../../../../attachment/images-uuid/071e90953cdc448aa45ba74abd392bd7.png)
124.71.124.92 广东、佛山、其他运营商
![](../../../../attachment/images-uuid/4b3d4d6bc0304fb198922c4997bd0fa2.png)
39.134.3.81 重庆、移动
![](../../../../attachment/images-uuid/5a1b9ed199c84e23b1abe8d2aa000777.png)
## 杭研平面配置
39.134.41.22 甘肃、兰州、移动
39.134.3.81 重庆、重庆、移动
## 现状
![](../../../../attachment/images-uuid/6aec1a8f86ba4d5abc4d714b3c733122.png)
# 现网情况
2023-11-28 at 22:20:50 CST [http-nio-8080-exec-11] INFO com.cmcc.cdn.platform.selfservice.pipeline.service.impl.GetInformationFromAspireServiceImpl 68 ipQueryFromAspire - 【IP 归属查询】———>请求配管, 请求: {"host":[{"host_ip":"123.123.123.123"}],"task_id":"77458d2a888b4e959b377aa51c7f39bc"}
2023-11-28 at 22:20:50 CST [http-nio-8080-exec-11] INFO com.cmcc.cdn.platform.selfservice.pipeline.service.impl.GetInformationFromAspireServiceImpl 70 ipQueryFromAspire - 【IP 归属查询】———>配管响应, ip: 123.123.123.123, 响应: {"error_code":9,"error_msg":" 其他错误,包括超过规格限制 ","host":[]}
@@ -0,0 +1,17 @@
1、集团运营经创建集团企业
![](../../../../attachment/images-uuid/9ec5c547af514a1c8d058c7f5873beaa.png)
![](../../../../attachment/images-uuid/15a48cc802ec483f97a16fee86837acb.png)
2、登录企业客户
2440
![](../../../../attachment/images-uuid/4f990323b0a9445fbc47a7b5c4b78953.png)
3、登录集团运维工程师
![](../../../../attachment/images-uuid/41798665956f4725a682da4af89dba0a.png)
![](../../../../attachment/images-uuid/2f9c80d7918148cea6fb44bc221dd7eb.png)
@@ -0,0 +1,29 @@
# 代码记录
![](../../../../attachment/images-uuid/437796f9e5f74787bc2197917165acf5.png)
## 关键词
// todo tianzhuo 验收不通过需求回退点
## 截图记录
![](../../../../attachment/images-uuid/6920168ff65a48e1a42533c70f1b0532.png)
![](../../../../attachment/images-uuid/fe03c4e6d9c04685bfbe060cabbba80f.png)
![](../../../../attachment/images-uuid/27bff4f8a7c9449783c799a0b8918a6b.png)
![](../../../../attachment/images-uuid/b13993259845467da6e89d2ff58767d6.png)
![](../../../../attachment/images-uuid/49a846be8cff476ca48c6b7490b58b47.png)
![](../../../../attachment/images-uuid/58bc72a098d9436d9d7a139166338948.png)
![](../../../../attachment/images-uuid/66c3ae413a5c45f2be5b8f57a70926e8.png)
![](../../../../attachment/images-uuid/8df4146793cf406fbd5d64cc0fa5a4e0.png)
![](../../../../attachment/images-uuid/29be5979eb1e4547b768399ff6ce6f8b.png)
![](../../../../attachment/images-uuid/019b9d836afb47e8a31409f57656a5a9.png)
@@ -0,0 +1,235 @@
# 试用单
## 集团
### 驳回接口
![](../../../../attachment/images-uuid/cc3be2b61dba4975b18d7a05f801e044.png)
![](../../../../attachment/images-uuid/0dd4644a5f8348e7b67e24ec200099c9.png)
![](../../../../attachment/images-uuid/74ef249993754d3eb83e31591d9b44a3.png)
![](../../../../attachment/images-uuid/b8d426a42f994e38825b5ceed6594bc4.png)
### 验收反馈接口
#### 失败
![](../../../../attachment/images-uuid/54e74e31927e40a1bed8dae2cde48fe2.png)
![](../../../../attachment/images-uuid/3f6ccf49b59d452ab553657a2a774555.png)
![](../../../../attachment/images-uuid/358c75548c65450e8856fc5ac6c23014.png)
![](../../../../attachment/images-uuid/94bd24d742784ff8ba57d560b7010b46.png)
#### 成功
![](../../../../attachment/images-uuid/0c185b92028e4422aa9ecabe1fd93c63.png)
![](../../../../attachment/images-uuid/15c8f11fa0c24bd4a693656e29191766.png)
![](../../../../attachment/images-uuid/094265651ce54987b6f7d73e672990e2.png)
## 省侧
### 驳回接口
![](../../../../attachment/images-uuid/84ecf2a337864a4b94efbca0fdae4020.png)
![](../../../../attachment/images-uuid/28c82db05b54412c977e77be40d9d614.png)
![](../../../../attachment/images-uuid/4bb79cc946be4f0c9293e7a466bec2e1.png)
![](../../../../attachment/images-uuid/ff9fff53a0ac40319dd44a2da66cf893.png)
### 验收反馈接口
#### 失败
![](../../../../attachment/images-uuid/9e5957ac0d0b4860b1fe18afb69c641b.png)
![](../../../../attachment/images-uuid/d386dba683a04bc2a91cbd895d9f12ae.png)
![](../../../../attachment/images-uuid/7f474ed888984fe6a71a1ba0f95a84a4.png)
![](../../../../attachment/images-uuid/2d40bd2a4efe4313b436f27d98fa3c01.png)
#### 成功
![](../../../../attachment/images-uuid/5a5dc86a8c384c8db705c96fb3d114be.png)
![](../../../../attachment/images-uuid/21ef292c4b54490fa9a66d76a9417d22.png)
![](../../../../attachment/images-uuid/ce85b03aecd84c3fa6db1ed61c4bb05c.png)
# 试用变更单(新增域名)发现不需要归档就是已完成
## 集团
### 驳回接口
![](../../../../attachment/images-uuid/6c1a868c07314f06b736771ee5000022.png)
![](../../../../attachment/images-uuid/1c49e9d1c2d14e3ab7919e5db7c2aba1.png)
![](../../../../attachment/images-uuid/145ab5baaf0c4ad59616f99fe6aa8cde.png)
![](../../../../attachment/images-uuid/4c3110c7b0784ca3b45443409461a4b5.png)
### 验收反馈接口
#### 失败
![](../../../../attachment/images-uuid/298cfa68a2b445c18d05e8ba80bc8e29.png)
![](../../../../attachment/images-uuid/10bf2d2a7a5049cc9fe31c28e48882fa.png)
![](../../../../attachment/images-uuid/47bad43945d349b28b8fb922cad6077f.png)
![](../../../../attachment/images-uuid/818cce5011624045a738099b25b87846.png)
#### 成功
![](../../../../attachment/images-uuid/b93dbdacaff54c5986b94fb9b6edd824.png)
![](../../../../attachment/images-uuid/414aca2731944ee59f75ab18254da614.png)
![](../../../../attachment/images-uuid/1eb6fed82572488088261b41757315af.png)
## 省侧
### 驳回接口
![](../../../../attachment/images-uuid/71b0ba0fcc344548bd260eb54ba0048d.png)
![](../../../../attachment/images-uuid/f22c5c5fbb944d2f950bbf5e40c06bc9.png)
![](../../../../attachment/images-uuid/4b89aae4504842209007eb8280732f65.png)
![](../../../../attachment/images-uuid/9aeaaaf3bf5b4cd4acbb28d67e3f2deb.png)
### 验收反馈接口
#### 失败
![](../../../../attachment/images-uuid/774d1d458e134a14b08dc277a66bff87.png)
![](../../../../attachment/images-uuid/a86cb0fba647498e9db6f6b9482ba86d.png)
![](../../../../attachment/images-uuid/b26ffc46636145eb9565c962e60910cd.png)
![](../../../../attachment/images-uuid/539e151a255e4a0b917368213f51aa4d.png)
#### 成功
![](../../../../attachment/images-uuid/4ac4016667e744d3bd704cf0632c19b3.png)
![](../../../../attachment/images-uuid/86e3a328f5054f249648b669286af47f.png)
![](../../../../attachment/images-uuid/39c449cdbed24a129395656dbfa5c7af.png)
# 非首次开通
## 集团
### 驳回接口
![](../../../../attachment/images-uuid/050fce4651304d178f0d10ad9c9e6150.png)
![](../../../../attachment/images-uuid/7d51ed37fca64685b29f6a95a1c406c7.png)
![](../../../../attachment/images-uuid/73d22b0b77394215bd2524eb3f71e467.png)
![](../../../../attachment/images-uuid/99f714ba39a448229182246479b7e054.png)
### 验收反馈接口
#### 失败
![](../../../../attachment/images-uuid/64bedd2d8689472dbb6196707d99d9cd.png)
![](../../../../attachment/images-uuid/291cfdd8d72c4ee6a8e55e5f77792152.png)
![](../../../../attachment/images-uuid/6e4e7c0d1ef54227b4718b192414caf3.png)
![](../../../../attachment/images-uuid/328c77eece854a8dab5b7da78aaa81b6.png)
#### 成功
![](../../../../attachment/images-uuid/2c66bda85ca04e8db0cd1d0e47649c40.png)
![](../../../../attachment/images-uuid/285fa7e653f447119657f3602dd9ffd3.png)
![](../../../../attachment/images-uuid/0b1b54380b03478c8ee840dfca5df84b.png)
**归档后**
![](../../../../attachment/images-uuid/7e7eed63bf4e43abbfc110b7c01b395f.png)
## 省侧
### 驳回接口
![](../../../../attachment/images-uuid/991819daa1554c4eaab1e9cdad7639a4.png)
![](../../../../attachment/images-uuid/d957589a00a1432ba82eb5c2f777830d.png)
![](../../../../attachment/images-uuid/085ebeb42d584d308422136e444350b3.png)
![](../../../../attachment/images-uuid/79235bd54a9a4a538e8df9f2e7362a0a.png)
### 验收反馈接口
#### 失败
![](../../../../attachment/images-uuid/6a8289599d2449b493871c23cd05f4f8.png)
![](../../../../attachment/images-uuid/3f0b5b7a12c341408eec8f9143932b89.png)
![](../../../../attachment/images-uuid/c50b00f98e11476eb8616db01c4fdfb3.png)
![](../../../../attachment/images-uuid/9c5464b117a949f4915b57bd225e58fd.png)
#### 成功
![](../../../../attachment/images-uuid/d4fcfce7333e49ccab05126d2daeee2b.png)
![](../../../../attachment/images-uuid/15a3b09b9e404ab1b8e342799bba7f6f.png)
![](../../../../attachment/images-uuid/1d68d58bf58c4e908f72083e51aaf538.png)
归档
![](../../../../attachment/images-uuid/252bd8969e1348ee8c35c4cbe71acd20.png)
![](../../../../attachment/images-uuid/9a79402fe6a1474db03302c91f819dbb.png)
# 域名配置需求工单
## 政企客户经理
### 退回
![](../../../../attachment/images-uuid/937b4fd6303d43ebadb15bd388f70f93.png)
![](../../../../attachment/images-uuid/c13213cd88d04653982363c6567bdd92.png)
![](../../../../attachment/images-uuid/93354035f60a4d2da5e22fd7754af437.png)
**进行修改重提**
![](../../../../attachment/images-uuid/114c5247e651463cbb334fee2ddb7ef6.png)
![](../../../../attachment/images-uuid/8c494e3d8d0a44d5bf9dc1c371316b50.png)
### 验收反馈接口
![](../../../../attachment/images-uuid/b1aee77725894537b0ed5ac84377c487.png)
![](../../../../attachment/images-uuid/7352dd57ff6d46429ae24c8d32b429bb.png)
![](../../../../attachment/images-uuid/0e890da41d5b46b0bc5ea6ce79985742.png)
![](../../../../attachment/images-uuid/6fcb73880d2e43f9bd3c7e3af96804a4.png)
@@ -0,0 +1,50 @@
## Sql 标准
```sql
select ssdc.domain
from self_service_domain_config ssdc
join enterprise_info ei on ssdc.tenant_id = ei.enterprise_id
join live_stream_domain_config lsdc on ssdc.id = lsdc.self_domain_id
where ei.source = 'WEB'
and lsdc.deleted = false
and lsdc.type = 1;
```
flvlive.a208.ottcn.com
testavs3tsgpush1.miguvideo.com
testavs3tsgpush2.miguvideo.com
testflvavs3delivtsgpull.miguvideo.com
testrtmpavs3delivtsgpull.miguvideo.com
lighttsgflv.miguvideo.com
flvpugcdelivtsgpullmgsplive.miguvideo.com
flvpugctsgpull.miguvideo.com
flvtsgpullmgsplive.miguvideo.com
flvtsgpullmgvrlive.miguvideo.com
pugcdelivtsgpush1.miguvideo.com
pugcdelivtsgpush2.miguvideo.com
pugctsgpush.miguvideo.com
rtctsgpush1.miguvideo.com
rtctsgpush2.miguvideo.com
rtmppugcdelivtsgpull.miguvideo.com
rtmppugctsgpull.miguvideo.com
testflvpugcdelivtsgpull.miguvideo.com
testflvpugctsgpull.miguvideo.com
testpugcdelivtsgpush1.miguvideo.com
testpugcdelivtsgpush2.miguvideo.com
testpugctsgpush.miguvideo.com
testrtmppugcdelivtsgpull.miguvideo.com
testrtmppugctsgpull.miguvideo.com
avs3tsgpush1.miguvideo.com
avs3tsgpush2.miguvideo.com
flvavs3delivtsgpullmgsplive.miguvideo.com
rtmpavs3delivtsgpull.miguvideo.com
flvavs3tsgpull.aikan.miguvideo.com
apitest-pull1.10086.cn
apitest-pull2.10086.cn
apitest-pull3.10086.cn
apitest-push1.10086.cn
apitest-push2.10086.cn
apitest-push3.10086.cn
20231208test.cmgame.com
共 36 个
@@ -0,0 +1,223 @@
# 3.2 esop 来源现网验收去掉只能选择验收通过的限制(P0)- 涉及 BBOSS、BPM
> 后端开发 4 个工时,联调 3 个工时,产品:程思雨
## 评审会
**1、说明下原直播产品类型(直播和超低时延直播)的工单不支持驳回,如果阶段反馈失败也要保持同样的校验吧?底层问题限制。**
**2、试用单、变更新增、开通新增、域名配置需求工单(覆盖范围)。新工单怎么处理?**
**3、第四点以退回工单进行相当于我要保持验收反馈失败保持和 10.4 退回接口一样的逻辑是吧?保持一致。**
**4、测试问题:最后一张图无法显示。(仅显示)**
**5、业务适配单。**
## 开发
> 1、Constants.NEW_BPM_REJECT.equals(source) 注意处理历史这个问题
>
> 2、工单列表中工单处理结果是否均显示为【驳回工单】,目前现状:【驳回工单】【验收不通过】
>
> 3、工单详情最后一行去掉:工单反馈:驳回工单 保持一致
>
> 4、域名配置需求工单验收失败场景下工单详情页显示【验收反馈失败,工单结束】
>
> 5、域名配置需求工单回退历史存在一个校验信安的动作,是否还保留。
>
> 6、多域名自测
>
> 7、非首次试用自测
### 状态表
| 表名 | result | remark | orderState | handleAction |
| --- | --- | --- | --- | --- |
| testorder_info | TestOrderResultEnum-FINAL_REJECTION(9, " 验收不通过 ") | BpmApproveEnum-APPROVE_NO(1," 验收不通过 ") | BBossOrderStateEnum-COMPLETE(5, " 已完成 ") | |
| order_info | TestOrderResultEnum-FINAL_REJECTION(9, " 验收不通过 ") | | BBossOrderStateEnum-COMPLETE(5, " 已完成 ") | |
| order_info_history_record | BpmApproveEnum-APPROVE_NO(1," 验收不通过 ") | BpmApproveEnum-APPROVE_NO(1," 验收不通过 ") | | BBossOrderHandleActionEnum-REJECT(15, " 工单驳回 ") |
| | | | | |
| test_change_order_info | TestChangeOrderResultEnum-FINAL_REJECTION(6, " 验收不通过 ") | BpmApproveEnum-APPROVE_NO(1," 验收不通过 ") | BBossOrderStateEnum-COMPLETE(5, " 已完成 ") ||
| order_info | TestChangeOrderResultEnum-FINAL_REJECTION(6, " 验收不通过 ") | | BBossOrderStateEnum-COMPLETE(5, " 已完成 ") | |
| order_info_history_record | BpmApproveEnum-APPROVE_NO(1," 验收不通过 ") | BpmApproveEnum-APPROVE_NO(1," 验收不通过 ") | | BBossOrderHandleActionEnum-REJECT(15, " 工单驳回 ") |
| | | | | |
| order_info_history_record | BpmApproveEnum-APPROVE_NO(1," 验收不通过 ") | BpmApproveEnum-APPROVE_NO(1," 验收不通过 ") | | BBossOrderHandleActionEnum-REJECT(15, " 工单驳回 ") |
### 试用单
>
**问题 1 工单列表显示问题**
![](../../../../attachment/images-uuid/216ec4ec21324fec925239f6f61d0c14.png)
![](../../../../attachment/images-uuid/6d2351e8b84f4c7d8a51f3b3072ba8a5.png)
**问题 2 详情页流程字体显示是 BPM 返回的**
![](../../../../attachment/images-uuid/10ece024d4a9493f9eb0ba505e1788b2.png)
**问题 3 关于工单限制性(目前只有点播)**
![](../../../../attachment/images-uuid/066e9ad8eac04cafa2d4ff1d1abb0d7b.png)
#### 自测验证
**驳回接口**
![](../../../../attachment/images-uuid/75e95bced9674faea638d928b795dc21.png)
![](../../../../attachment/images-uuid/cec60eb703ee4f99a3c9197a3fc36726.png)
**验收反馈失败**
![](../../../../attachment/images-uuid/16ca73dd2c85487384a23e74886e2c60.png)
![](../../../../attachment/images-uuid/1a75ed9ba3a044db92d3f20f93aee5cc.png)
### 试用变更单
> 1、信安信息提示框
>
> ![](../../../../attachment/images-uuid/849c140ac8fb4554b2a26b7716b104c6.png)
#### 自测验证
**驳回接口**
![](../../../../attachment/images-uuid/4794de9241ae4bcf9b31946ffc1b6a6a.png)
![](../../../../attachment/images-uuid/484d0e4b938c4a0d95f965cb295b7a26.png)
**验收反馈失败**
![](../../../../attachment/images-uuid/5f4da6a11c894586a43f87cad94f98a4.png)
![](../../../../attachment/images-uuid/2a0245fd4cd94826b02a788a1200005d.png)
### 业务单
> 1、bbossorder_info 未最终设置为 BBossOrderStateEnum.COMPLETE.getCode()
>
> 2、缺少一条记录(与产品协商后进行统一)
#### 自测验证
**驳回接口**
![](../../../../attachment/images-uuid/bd23dcc334204a638c36453ef185e7d6.png)
![](../../../../attachment/images-uuid/eb7e24dfd3e44ae0b01718efde7d91c5.png)
**验收反馈失败**
![](../../../../attachment/images-uuid/d23204e6ef9b475c9cf4dc55d23636a6.png)
![](../../../../attachment/images-uuid/feefb936299941c6bc0252b79e53f676.png)
### 域名配置需求
> 1、最后验收反馈失败页面是不是可以改为【验收反馈失败,工单结束】
#### 自测验证
**驳回工单**
![](../../../../attachment/images-uuid/89a2aa3bfaf9421f87bcbba18ebb12e0.png)
![](../../../../attachment/images-uuid/16ea229684a54e2a81a6bfe3400a6932.png)
**验收反馈失败**
![](../../../../attachment/images-uuid/d84a5659de2d4631a6b018f55ba05a6c.png)
![](../../../../attachment/images-uuid/5dc6956f92234b19a25206d5b158baa3.png)
# 3.4 cache+ 工单新增域名绑定运营经理(P1)
后端开发 3 个工时,前端 1 个工时,产品:赵潇洒
1 个问题部署失败如果赋予权限则无查看按钮,相关代码位置
![](../../../../attachment/images-paste/image-20240107104603974.png)
![](../../../../attachment/images-uuid/c49b3bf3ba024506954dfb54e8209c42.png)
![](../../../../attachment/images-uuid/d79bc63a3eb047ac87bf39957da65ba8.png)
> 1、cache+、直播(只有集团运营经理可以提)、定制化、验收反馈成功
>
> 2、domain_approve_relation 中 `approve_user_ids` 决定绑定对应运营经理
>
> 3、点播页面按钮的展示是根据域名的企业的 governmentManager 属性也就是 enterprise\_manager\_table 来进行赋予权限的。也就是企业的运营经理。企业对应的运营经理是可以操作域名的。
## 关键表
域名运营经理关系:domain_approve_relation
企业运营经理关系:enterprise_manager_table
## 省侧
### 新建企业
浙江 - 龙的后花园
923- 省运营经理(提单)
911- 浙江省业务管理员
1323- 集团运营经理
2744- 企业客户
### 新建域名
923- 省运营经理(提单)
911- 浙江省业务管理员
921- 集团运营经理
下发 BPM
BPM 验收
## 集团
### 新建企业流程
921- 集团运营经理
802- 集团业务管理员 -20
### 新建域名
2745- 企业客户(可以提单)
下发 BPM
24- 集团运维工程师(需要集团运维工程师进行配置)
BPM 验收
### 优化更新
1、BPM 的直播 验收反馈 响应体
~~2、验收不能从 BPM 响应体中取请求域名,有风险改为从工单中获取。~~
~~3、accounts 字段的验证~~
4、历史数据处理增加开关可以控制是否保存
~~5、删除时是否会删除 domain_approve_relation~~
6、会有验收反馈失败的场景吗(不会)
7、历史 cache+ 未绑定运营经理的定制化、直播域名(已生效、已停用、停用中、启用中)需绑定企业运营经理。针对定制化、直播、部署中的域名需后台人工判别是否为 cache+ 需求变更工单引起,如果不是则不处理。(若企业没有运营经理则不用处理)
# 3.7 试用变更流量校验优化(P1)- 涉及政企,需与政企沟通、确认后调整(转张平处理)
后端开发 1 个工时,产品:赵潇洒
@@ -0,0 +1,100 @@
试用单:12281716_02
开通单:12281718_03
域名:DevReq125926691.komect.com
企业:ECName-1703754967
### 1、(已修正)试用单新增全站四层加速业务
![](../../../../attachment/images-uuid/d3a52d79d33c4fc79c6f4eb3fa3c9644.png)
### 2、(已修正)试用变更单新增全站七层加速域名
华为平面
![](../../../../attachment/images-uuid/96c2960ac89d45bcad232ee102f19bb5.png)
![](../../../../attachment/images-uuid/9af43860a9db40ec94fe11036d2b7086.png)
![](../../../../attachment/images-uuid/29b2187fe6c54f7c9b74b3a8d2c5058b.png)
### 3、新增全站四层加速域名 - 省内
#### (已修正)问题 1
这儿需要选订购
![](../../../../attachment/images-uuid/083c425e0d3e4336a8fb97360387f48d.png)
![](../../../../attachment/images-uuid/b8c0f34ea4654b46a8dac78fc8e4a9a4.png)
#### (已修正)问题 2
![](../../../../attachment/images-paste/image-20231228191554412.png)
回调参数的 sources 不会生效
代码中取的是
domain_config_loop_domain
![](../../../../attachment/images-paste/image-20231228191714907.png)
```sql
select source,id
from self_service_domain_config where domain = 'mytesttz.komect.com';
select *
from domain_config_loop_domain where self_service_domain_config_id = 33880;
select *
from loop_domain where id = '49218';
```
入库位置
com.cmcc.cdn.platform.selfservice.order.DomainOrderService#checkAndSaveConfigDomain
回源是取的信安入库的回源
### 4、变更多个全站七层试用域名为 http+https 协议
#### (已修正)问题 1
![](../../../../attachment/images-paste/image-20231228195656033.png)
#### (已修正)问题 2
![](../../../../attachment/images-uuid/bc806c4882274ee98fc92e87c8aa5828.png)
你怎么没有备案号
# 点用例
试用单号:12291223_25
PRODUCTID239620969
ECName-1703823823
域名:DevReq239620969.komect.com
域名:DevReq2396209692.komect.com
![](../../../../attachment/images-paste/image-20231229122916981.png)
开通单:12291230_01
![](../../../../attachment/images-paste/image-20231229123112610.png)
全站七层
12291244_27
ECName-1703825081
DevReq565326643.komect.com
DevReq5653266432.komect.com
@@ -0,0 +1,17 @@
# 新增全站加速业务受理流程(P0+)- 涉及 BBOSS、BPM
> 负责产品:占小虹
## 需求变更工单——田卓(域名需求配置工单看情况,本版可能不包含)
![](../../../../attachment/images-uuid/7d04c23fe7b34a80ba0bc2605f2d361a.png)
cdn_type 字段
wholeSiteFour: 全站加速四层
wholeSiteseven: 全站加速七层
IBS 后端向大数据下发话单时,产品类型字段,增加 2 个枚举值【6- 全站四层加速】【7- 全站七层加速】
![](../../../../attachment/images-uuid/204b96b9c43645a9974640e32572cd55.png)
@@ -0,0 +1,241 @@
# 联调准备
## 数据准备
ECName-1703470751
ECID1703470751
13756427136
## 全站四层加速
### 试用单
12251018_28
DevReq919158230.komect.com
### 域名配置需求 - 新增
001-20231225001
#### 政企客户经理
![](../../../../attachment/images-paste/image-20231225122004192.png)
#### 集团客户经理管理员
![](../../../../attachment/images-paste/image-20231225122104769.png)
#### 下发 BPM
![](../../../../attachment/images-paste/image-20231225122148827.png)
#### 下发日志
![](../../../../attachment/images-paste/image-20231225122205690.png)
#### 下发话单
![](../../../../attachment/images-paste/image-20231225122225774.png)
![](../../../../attachment/images-paste/image-20231225123629793.png)
#### 域名状态
![](../../../../attachment/images-paste/image-20231225122256917.png)
#### BPM 回调
![](../../../../attachment/images-paste/image-20231225122858318.png)
#### 域名状态
![](../../../../attachment/images-paste/image-20231225122933657.png)
### 域名停用
20231225121733.komect.com
![](../../../../attachment/images-paste/image-20231225123749368.png)
![](../../../../attachment/images-paste/image-20231225124110809.png)
![](../../../../attachment/images-paste/image-20231225142129581.png)
### 域名启用
![](../../../../attachment/images-paste/image-20231225142251967.png)
![](../../../../attachment/images-paste/image-20231225142239016.png)
![](../../../../attachment/images-paste/image-20231225143126616.png)
### 删除域名
下发 BPM
![](../../../../attachment/images-paste/image-20231225143535716.png)
话单
![](../../../../attachment/images-paste/image-20231225143837019.png)
### 需求变更工单
#### 政企客户经理
![](../../../../attachment/images-paste/image-20231225144601016.png)
#### 下发 BPM
![](../../../../attachment/images-paste/image-20231225144800266.png)
#### 域名状态
![](../../../../attachment/images-paste/image-20231225145037826.png)
#### BPM 回调
![](../../../../attachment/images-paste/image-20231225145754239.png)
![](../../../../attachment/images-paste/image-20231225145900519.png)
### 域名配置需求 - 删除
#### 政企客户经理
![](../../../../attachment/images-paste/image-20231225150135308.png)
#### 集团运营经理
![](../../../../attachment/images-paste/image-20231225150415245.png)
#### 下发 BPM
![](../../../../attachment/images-paste/image-20231225150823539.png)
![](../../../../attachment/images-paste/image-20231225150915593.png)
#### 域名状态
![](../../../../attachment/images-paste/image-20231225151122718.png)
#### BPM 回调
![](../../../../attachment/images-paste/image-20231225151719964.png)
![](../../../../attachment/images-paste/image-20231225151810181.png)
#### 下发话单
![](../../../../attachment/images-paste/image-20231225151914525.png)
## 全站七层加速
### 试用单
12251029_40
DevReq769877181.komect.com
### 域名配置需求 - 新增
#### 政企客户经理
![](../../../../attachment/images-paste/image-20231226094037103.png)
#### 集团客户经理管理员
![](../../../../attachment/images-paste/image-20231226094124032.png)
#### 下发 BPM
![](../../../../attachment/images-paste/image-20231226094344549.png)
#### 下发日志
![](../../../../attachment/images-paste/image-20231226094403376.png)
#### 下发话单
![](../../../../attachment/images-paste/image-20231226094422014.png)
#### 域名状态
![](../../../../attachment/images-paste/image-20231226094500492.png)
#### BPM 回调
![](../../../../attachment/images-paste/image-20231226095647203.png)
#### 域名状态
![](../../../../attachment/images-paste/image-20231226095702018.png)
### 域名停用
![](../../../../attachment/images-paste/image-20231226095800375.png)
![](../../../../attachment/images-paste/image-20231226095814246.png)
![](../../../../attachment/images-paste/image-20231226095825935.png)
![](../../../../attachment/images-paste/image-20231226100648822.png)
### 域名启用
![](../../../../attachment/images-paste/image-20231226100737590.png)
![](../../../../attachment/images-paste/image-20231226100750113.png)
![](../../../../attachment/images-paste/image-20231226100803537.png)
![](../../../../attachment/images-paste/image-20231226104720218.png)
### 需求变更工单
#### 政企客户经理
![](../../../../attachment/images-paste/image-20231226104905622.png)
#### 下发 BPM
![](../../../../attachment/images-paste/image-20231226105005157.png)
#### 域名状态
![](../../../../attachment/images-paste/image-20231226105018035.png)
#### BPM 回调
![](../../../../attachment/images-paste/image-20231226110241773.png)
![](../../../../attachment/images-paste/image-20231226110251466.png)
### 域名配置需求 - 删除
#### 政企客户经理
![](../../../../attachment/images-paste/image-20231226110358392.png)
#### 集团运营经理
![](../../../../attachment/images-paste/image-20231226110611954.png)
![](../../../../attachment/images-paste/image-20231226110620493.png)
#### 下发 BPM
![](../../../../attachment/images-paste/image-20231226110552740.png)
![](../../../../attachment/images-paste/image-20231226111038119.png)
#### 下发话单
![](../../../../attachment/images-paste/image-20231226111158802.png)
#### 运营经理结单
![](../../../../attachment/images-paste/image-20231226111226986.png)
@@ -0,0 +1,5 @@
## 试用单
![](../../../../attachment/images-paste/image-20231225155214869.png)
![](../../../../attachment/images-paste/image-20231225160502330.png)
@@ -0,0 +1,236 @@
# 试用工单
## 问题汇总
~~1、辛苦走用例的时候阶段反馈和验收反馈请求中工单号改为发单工单号。~~
~~2、需要上传 excle 到附件服务器,再次自测。~~
~~3、目前退回工单回调 BBOSS 参数中,无接口文档中的 试用结果原因(Reason) 字段,这个你知道是什么背景吗?~~
![](../../../../attachment/images-paste/image-20240114105801612.png)
![](../../../../attachment/images-paste/image-20240114104200513.png)
![](../../../../attachment/images-paste/image-20240114103523703.png)
~~4、第二点,验收失败后,就是直接显示:验收不通过。没有后边括号的中的那些说明的东西。~~
![](../../../../attachment/images-uuid/ddf53f13ea5c4c2b936190960d2f6b8d.png)
![](../../../../attachment/images-uuid/fa960a4290514455a2a0e40ac60daf0b.png)
## 前置条件
![](../../../../attachment/images-paste/image-20240115110453869.png)
![](../../../../attachment/images-paste/image-20240115110435445.png)
## 请求报文
```
http://172.21.16.40:8030/api/v2/sync/BBOSS/OpportunityTrialServ
{
    "content": {
        "OrderNum": "01151102_33",
        "ProvID": "250",
        "ECID": "20240115110236",
        "ProductID": "20240115110236",
        "ECName": "ECName0115",
        "IndustryID": "03",
        "Sales": "Sales0115",
        "SalesNumber": "13166076445",
        "CustManager": "CustManager",
        "CustManagerNumber": "13166076445",
        "ECContact": "ECContact0115",
        "ECNumber": "13166076445",
        "ECMail": "13166076445@qq.com",
        "Summit": "200",
        "TimeLength": "3",
        "Income": "20",
        "TestStart": "20230516",
        "TestDuration": "10",
        "BusinessLimit": "1",
        "TestContent": [
            {
                "TestType": "1",
                "DevReq": "20240115105915.komect.com"
            }
        ],
        "ProdType": "1",
        "InfoSecurity": "test12.xlsx",
        "InfoSecurityTable": "信安导入模板.xls",
        "BusiInfo": "test32.xlsx"
    }
}
```
## 响应报文
```
{
    "transIDO": null,
    "cutOffDay": null,
    "transIDH": "abc",
    "transIDHTime": "20240115110624",
    "response": {
        "rspCode": "00000",
        "rspDesc": "成功"
    }
}
```
工单流转到集团业务管理员
![](../../../../attachment/images-paste/image-20240115110940789.png)
流转到江苏省业务管理员
工单流转至江苏省运营经理
![](../../../../attachment/images-paste/image-20240115111250226.png)
## 下发 BPM
![](../../../../attachment/images-paste/image-20240115111451750.png)
```
{
"accessSystem":"IBS",
"account":"CDN-IBS",
"code":"01151102_33",
"createDate":"2024-01-15 11:06:24",
"data":{
"cdn_type":"web",
"domains":[
"20240115105915.komect.com"
],
"filelist":[
{
"name":"test12.xlsx"
},
{
"name":"test32.xlsx"
}
],
"nameOfClient":"ECName0115",
"numberOfDoamin":1,
"operMail":"1966533429@qq.comabc",
"operTel":"18827304728",
"operUser":"江苏运营经理",
"sourceBasis":"01151102_33",
"sourceOfDemand":"ESOPIBS平台)",
"summaryOfDemand":"",
"titleOfDemand":"商机与试用工单"
},
"processType":"0",
"prodType":"1",
"province":"JS",
"userList":[
{
"userMail":"13356567878@163.com",
"userName":"13356567878sa01",
"userTel":"13356567878"
},
{
"userMail":"13378789090@163.com",
"userName":"13378789090sa02",
"userTel":"13378789090"
}
]
}
```
## 阶段反馈
![](../../../../attachment/images-paste/image-20240115111620547.png)
## 注销话单
![](../../../../attachment/images-paste/image-20240115140853734.png)
![](../../../../attachment/images-paste/image-20240114105743716.png)
## 1.响应成功,验收结果反馈 IBS,工单列表中“工单处理结果”展示“验收不通过”;
![](../../../../attachment/images-paste/image-20240115112320151.png)
## 2.工单审批流处理动作:验收不通过,详情根据 BPM 实际反馈结果进行展示;
![](../../../../attachment/images-paste/image-20240115143636014.png)
![](../../../../attachment/images-paste/image-20240115112344114.png)
## 3.下发删除话单记录,删除域名
```
2024-01-15 03:22:39 [,,,,] [Thread-17] INFO com.cmcc.cdn.platform.selfservice.service.impl.BBossAndDssInteractiveServiceImpl$1 795 run - 下发话单请求参数, url:http://172.21.45.140:8030/api/ibs/dss/statement/configure/response, param:{"productInfos":[{"billingMethod":"1","businessType":"1","cancelStatus":"2","cancelTime":"20240115112239","domain":"20240115105915.komect.com","enterpriseId":"20240115110236","enterpriseName":"ECName0115","infoType":"1","jobId":"01151102_33","productId":"1","province":"250"}]}
2024-01-15 03:22:39 [,,,,] [Thread-17] INFO com.cmcc.cdn.platform.selfservice.service.impl.BBossAndDssInteractiveServiceImpl 1399 sendRequest - 计费话单-带宽数据获取 请求信息 method:post, url:http://172.21.45.140:8030/api/ibs/dss/statement/configure/response, reqString:{"productInfos":[{"billingMethod":"1","businessType":"1","cancelStatus":"2","cancelTime":"20240115112239","domain":"20240115105915.komect.com","enterpriseId":"20240115110236","enterpriseName":"ECName0115","infoType":"1","jobId":"01151102_33","productId":"1","province":"250"}]}
2024-01-15 03:22:39 [,,,,] [Thread-17] INFO com.cmcc.cdn.platform.common.util.HttpUtil 342 doHttpRequest2 - url:http://172.21.45.140:8030/api/ibs/dss/statement/configure/response, method:post, 返回的状态码为:200
2024-01-15 03:22:39 [,,,,] [Thread-17] INFO com.cmcc.cdn.platform.common.util.HttpUtil 348 doHttpRequest2 - url:http://172.21.45.140:8030/api/ibs/dss/statement/configure/response, method:post, 返回的请求体:{"result":null,"code":200,"message":"成功"}
2024-01-15 03:22:39 [,,,,] [Thread-17] INFO com.cmcc.cdn.platform.selfservice.service.impl.BBossAndDssInteractiveServiceImpl 1402 sendRequest - 计费话单-带宽数据获取 响应信息, status: 200, response:{"resp":"{\"result\":null,\"code\":200,\"message\":\"成功\"}","status":"200"}
2024-01-15 03:22:40 [,,,,] [Thread-17] INFO com.cmcc.cdn.platform.selfservice.service.impl.BBossAndDssInteractiveServiceImpl$1 843 run - 更新试用域名计费信息, 试用话单全量域名:[20240115105915.komect.com], 已开通计费的域名:[], 无需计费的域名:[20240115105915.komect.com]
```
## 4.验收结果反馈集客大厅为回退
```
2024-01-15 03:22:39 [ibs-portal:chiqingguo94.cmp11428.openpf:8080,,,,] [http-nio-8080-exec-3] INFO com.cmcc.cdn.platform.selfservice.service.impl.BBossAndDssInteractiveServiceImpl 360 feedBackPreAndTestOrder - feedback test order handle resquest {"content":{"BackFlag":"1","BackReason":"验收不通过","CDNContact":"江苏运营经理","CDNNumber":"18827304728","OrderNum":"01151102_33"}}
```
![](../../../../attachment/images-paste/image-20240115112607574.png)
![](../../../../attachment/images-uuid/3de0b83a687b4843a64031a799fcdbe2.png)
![](../../../../attachment/images-paste/image-20240115181409575.png)
![](../../../../attachment/images-paste/image-20240115181353084.png)
工单不会立刻就是试用流量耗尽。
@@ -0,0 +1,217 @@
# 3.1 试用未到期转商场景:补充试用单详情页试用记录
> 产品:赵潇洒
> 开发:转文龙帮忙处理
## 问题汇总
~~1、试用结束时间怎么定义?是以收到开通单的时间为准吗?~~
产品回复:以接收开通单的时间为准。
~~2、需求文档中“补充试用未到期转商场景的使用记录数据”,那么如果是先试用流量耗尽或者先使用时长耗尽还能开通吗?~~
早会:无需关注
~~3、关于历史数据的清理是否可以根据工单表和历史记录表进行过滤。历史记录表进行过滤。~~
目前的方案是首先根据试用单子表的 tem 时间,然后根据 orderinfo 的 update 时间,如果还是为空以开通单子表的
## 开发过程
### 第一版效果
![](../../../../attachment/images-paste/image-20240108223732284.png)
### 历史数据
~~方案一(已弃用)~~
```sql
select *
from order_info oi
join order_info_history_record oihr on oi.id = oihr.order_id
where oi.order_type = 2
and oi.order_state = 5
and oihr.handle_action = 7
order by oi.id desc;
```
# 3.6 esop 来源现网验收去掉只能选择验收通过的限制
> 产品:程思雨
## 问题汇总
~~1、最近新增加的两个全站加速算是点播产品吧?~~
![](../../../../attachment/images-uuid/5f9e7fcb9b44495fa4840b4c6ea1a395.png)
~~2、两个接口均以都以退回工单进行有什么区别吗?BPM 侧有可能只能全部放开~~
4、bss 接口文档中这个字段,退回不需要吗?
![](../../../../attachment/images-paste/image-20240107131201134.png)
5、代码中代办 completed_task 这个表是干什么用的。涉及这个接口/workorder/get/done/task
~~6、审批流程中,单个域名显示信安信息,多个不显示。注意用例~~
![](../../../../attachment/images-uuid/a3ab2b1f613c46b780c6f3de00950773.png)
![](../../../../attachment/images-uuid/5b3ece34a5784ddcb382a29979b65fde.png)
~~7、域名配置需求验收反馈失败结束工单,域名状态部署失败;~~
~~8、优化开通单退回子表状态;~~
~~9、域名配置需求工单阶段反馈和验收失败场景去除下发删除话单动作;~~
~~10、域名配置需求退回接口补信安信息删除动作。~~
~~11、给产品回复~~
域名配置需求(新增)工单
业务结束回滚 调用原回退接口,原回退接口逻辑:删除域名,注销话单。
验收不通过 结束工单,域名状态置为部署失败,不注销话单。
12、域名配置需求单可以验收失败吗?
~~13、验收反馈失败流转记录如下 文案~~
14、接口限制现状:
退回接口:历史所有工单均不支持直播产品
验收不通过:
试用工单 因和退回逻辑一致不支持直播产品
试用变更工单 因和退回逻辑一致不支持直播产品
业务受理工单 因和退回逻辑一致不支持直播产品
增值业务工单
域名配置需求
需求变更工单
## 开发过程
### 代码位置记录
1、业务适配单退回不受理接口
com.cmcc.cdn.platform.selfservice.service.bpm.impl.BpmManageServiceImpl#bpmOrderReject
2、业务适配工单验收反馈接口
com.cmcc.cdn.platform.selfservice.service.bpm.impl.BpmManageServiceImpl#orderCallback
### 试用单
> 是否涉及信安信息?
#### 业务结束回滚 -10.4 接口
详细了解下这个动作是否如此。
![](../../../../attachment/images-paste/image-20240107115412904.png)
流转截图
![](../../../../attachment/images-paste/image-20240107115850411.png)
![](../../../../attachment/images-paste/image-20240107115908986.png)
#### 验收不通过 -10.2 接口
流转截图
![](../../../../attachment/images-paste/image-20240107133115884.png)
![](../../../../attachment/images-paste/image-20240107133157487.png)
### 试用变更单
> 是否涉及信安信息?
#### 业务结束回滚 -10.4 接口
流转截图
![](../../../../attachment/images-paste/image-20240107154221194.png)
![](../../../../attachment/images-paste/image-20240107154252698.png)
#### 验收不通过 -10.2 接口
流转截图
![](../../../../attachment/images-paste/image-20240107155942212.png)
![](../../../../attachment/images-paste/image-20240107160012468.png)
### 业务开通单(新增域名场景)
> 是否涉及信安信息?
> 子表的 orderState 状态问题,这个和 mock 的响应值也有关系
#### 业务结束回滚 -10.4 接口
流转截图
![](../../../../attachment/images-paste/image-20240107162755601.png)
![](../../../../attachment/images-paste/image-20240107162827886.png)
#### 验收不通过 -10.2 接口
流转截图
![](../../../../attachment/images-paste/image-20240108090821836.png)
![](../../../../attachment/images-paste/image-20240108090838380.png)
### 域名配置(新增)需求单
> 是否涉及信安信息?
#### 业务结束回滚 -10.4 接口
![](../../../../attachment/images-paste/image-20240108095942413.png)
![](../../../../attachment/images-paste/image-20240108100018553.png)
#### 验收不通过 -10.2 接口
第一种方案:退回逻辑
![](../../../../attachment/images-paste/image-20240108103047271.png)
![](../../../../attachment/images-paste/image-20240108103019294.png)
第二种方案:结束工单,域名部署失败
![](../../../../attachment/images-paste/image-20240108185804244.png)
![](../../../../attachment/images-paste/image-20240108185823050.png)
### 域名配置需求变更
试用单
01101040_11
DevReq650617701.komect.com
DevReq6506177012.komect.com
ECName-1704854417
PRODUCTID650617701
2508
@@ -0,0 +1,39 @@
if(Constants.BPM_PROCESS_SUCCESS.equals(data.getResult()) ||
Constants.BPM_PROCESS_FINISHED.equals(data.getResult())){
log.info("res of bpm call back: process success");
return true;
}
处理任务表
反馈 BBoss 成功信息, 成功后才进行后面的数据库操作
BbossCancelOrderHandleVO handleVO = new BbossCancelOrderHandleVO ();
BbossCancelOrderHandleContentVO contentVO = new BbossCancelOrderHandleContentVO();
contentVO.setOrderNum(orderNum);
contentVO.setProductId(productId);
contentVO.setCancelStage(cancelStage);
contentVO.setCancelTime(org.springframework.util.StringUtils.isEmpty(cancelStage) ?
cancelDate : LocalDateTime.parse(cancelDate,
DateTimeFormatter.ofPattern(Constants.YYYY_MM_DD_HH_MM_SS)).format(DateTimeFormatter.ofPattern(Constants.YYYYMMDDHHMMSS)));
handleVO.setContent(contentVO);
BbossCancelOrderFeedbackVO response = bBossAndDssInteractiveService.syncBbossCancelOrder(handleVO);
if (feedbackVO == null) {
throw new PlatformException(" 网络错误 ");
}
if (!BBossInteractiveCodeEnum.RESPONSE_SIGN_1.getCode().equals(feedbackVO.getResponse().getRspCode())) {
log.info(" 增值业务工单请求失败, 应答错误代码:{}, 应答错误描述:{}", feedbackVO.getResponse().getRspCode(),
BBossInteractiveCodeEnum.findDetailByCode(feedbackVO.getResponse().getRspCode()));
throw new PlatformException(feedbackVO.getResponse().getRspDesc());
}
if (!VasOrderResultRspStatusEnum.SUCCESS.getStatus().equals(feedbackVO.getResult().getStatus())) {
log.error(" 增值业务工单请求失败, 工单号:{}, 处理结果状态码:{}, 错误描述:{}", content.getOrderNum(), feedbackVO.getResult().getStatus(),
feedbackVO.getResult().getErrDesc());
String errMessage = StringUtils.isEmpty(feedbackVO.getResult().getErrDesc())
? VasOrderResultRspStatusEnum.getDescByStatus(feedbackVO.getResult().getStatus())
: feedbackVO.getResult().getErrDesc();
throw new PlatformException(errMessage);
}
saveOrderInfoHistoryRecord
@@ -0,0 +1,15 @@
# 试用单
![](../../../../attachment/images-paste/image-20240124174131362.png)
![](../../../../attachment/images-paste/image-20240124174236253.png)
# 试用变更
![](../../../../attachment/images-paste/image-20240125154145036.png)
![](../../../../attachment/images-paste/image-20240125152259299.png)
![](../../../../attachment/images-paste/image-20240125152313342.png)
![](../../../../attachment/images-paste/image-20240125152324932.png)
@@ -0,0 +1,571 @@
# 10.4 业务适配单退回不受理接口
## 试用工单
### 多域名(点播)
网页加速
01241607_59
ECName-1706083686
PRODUCTID851722313
DevReq851722313A.komect.com
DevReq851722313B.komect.com
#### 下发 BPM
```
{"accessSystem":"IBS","account":"CDN-IBS","code":"01241607_59","createDate":"2024-01-24 16:09:19","data":{"cdn_type":"web","domains":["DevReq851722313A.komect.com","DevReq851722313B.komect.com"],"filelist":[{"name":"InfoSecurity.xls"},{"name":"BusiInfo.xls"}],"nameOfClient":"ECName-1706083686","numberOfDoamin":2,"operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","sourceBasis":"01241607_59","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":"","titleOfDemand":"商机与试用工单"},"processType":"0","prodType":"1","province":"JT","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
![](../../../../attachment/images-paste/image-20240124160943150.png)
#### BPM 阶段反馈
![](../../../../attachment/images-paste/image-20240124150444553.png)
```
2024-01-24 06:53:51 [,,,,] [http-nio-8080-exec-8] INFO com.cmcc.cdn.platform.selfservice.service.bpm.impl.BpmManageServiceImpl 4015 adaptOrderCallback - callback from bpm:{"code":"01241449_57","plains":["&quot;华为平面&quot;"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1706079163000,"plainName":"华为平面","resultOfEstimate":"可支持"}],"resultOfPolicy":"1","userId":"24"}
```
#### BPM 回调参数
```
{"ibs_code":"01241607_59","message":"回滚审批意见:同意","result":"退回不受理"}
```
![](../../../../attachment/images-paste/image-20240124162530679.png)
#### 注销话单
![](../../../../attachment/images-paste/image-20240124162647823.png)
![](../../../../attachment/images-paste/image-20240124162437788.png)
#### 回调 BBOSS
![](../../../../attachment/images-paste/image-20240124162625146.png)
#### 删除域名
![](../../../../attachment/images-paste/image-20240124162851075.png)
#### 工单列表
![](../../../../attachment/images-paste/image-20240124162909636.png)
#### 工单详情页流转记录
![](../../../../attachment/images-paste/image-20240124162931902.png)
![](../../../../attachment/images-uuid/82ca088f78b8472a9a24b9703f576c41.png)
### 多域名(直播)
01241743_34
![](../../../../attachment/images-paste/image-20240124174653253.png)
![](../../../../attachment/images-uuid/067b27d94c824f6b8b086c98ce8b454c.png)
## 试用变更工单
### 单域名(点播)
01241804_28
PRODUCTID851722313
ECName-1706083686
ECID1706083686
20240124180622.komect.com
#### 下发 BPM
![](../../../../attachment/images-paste/image-20240124181728822.png)
#### BPM 回调参数
![](../../../../attachment/images-paste/image-20240124181810561.png)
```
{"ibs_code":"01241804_28","message":"回滚审批意见:同意","result":"退回不受理"}
```
#### 注销话单
![](../../../../attachment/images-paste/image-20240124182012191.png)
![](../../../../attachment/images-paste/image-20240124182029916.png)
#### 回调 BBOSS
![](../../../../attachment/images-paste/image-20240125090352981.png)
#### 删除域名
![](../../../../attachment/images-paste/image-20240124182122543.png)
#### 工单列表
![](../../../../attachment/images-paste/image-20240124182139626.png)
#### 工单详情页流转记录
![](../../../../attachment/images-paste/image-20240124182153710.png)
![](../../../../attachment/images-paste/image-20240124182203838.png)
### 单域名(直播)
01251533_37
![](../../../../attachment/images-uuid/7f93a77ccca344e681021954573f22b2.png)
## 业务受理工单
01261400_19
20240126140023
01261453_05
20240126145307
### 单域名(点播)
#### 下发 BPM
![](../../../../attachment/images-paste/image-20240126145352061.png)
```
{"accessSystem":"IBS","account":"CDN-IBS","code":"01261453_05","createDate":"2024-01-26 14:54:27","data":{"cdn_type":"video","cpId":"83564281","domains":["20240126145310.komect.com"],"filelist":[{"name":"InfoSecurity.xls"},{"name":"BusiInfo.xls"}],"nameOfClient":"ECName-1706083686","numberOfDoamin":1,"operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","sourceBasis":"01261453_05","sourceOfDemand":"IBS平台","summaryOfDemand":"","titleOfDemand":"ECName-1706083686业务开通工单"},"processType":"2","prodType":"1","province":"JT","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
#### BPM 回调参数
```
{"ibs_code":"01261453_05","message":"回滚审批意见:同意","result":"退回不受理"}
```
#### 注销话单
![](../../../../attachment/images-uuid/0fe53a1c12c14e2c831cac74274fed99.png)
![](../../../../attachment/images-uuid/37e6a1359da7467d8c3698b5a913568c.png)
#### 回调 BBOSS
![](../../../../attachment/images-paste/image-20240126150626268.png)
#### 删除域名
![](../../../../attachment/images-paste/image-20240126150649897.png)
#### 工单列表
![](../../../../attachment/images-paste/image-20240126150707434.png)
#### 工单详情页流转记录
![](../../../../attachment/images-paste/image-20240126150720132.png)
![](../../../../attachment/images-paste/image-20240126150734749.png)
### 单域名(直播)
01261534_04
![](../../../../attachment/images-uuid/f94be8a0458d4552be5615a304754dfd.png)
## 域名配置需求工单
### 单域名(点播)
政企客户经理提单
集团客户经理管理员
#### 下发 BPM
![](../../../../attachment/images-paste/image-20240126161838615.png)
```
{"accessSystem":"IBS","account":"CDN-IBS","code":"001-20240126002","data":{"cdn_type":"web","cpId":"83557919","domains":["20240126161739.komect.com"],"filelist":[],"nameOfClient":"ECName-1706256155","sourceBasis":"001-20240126002","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":""},"processType":"3","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
#### BPM 回调参数
![](../../../../attachment/images-paste/image-20240126162334941.png)
```
{"ibs_code":"001-20240126002","message":"回滚审批意见:同意","result":"退回不受理"}
```
#### 注销话单
![](../../../../attachment/images-paste/image-20240126162411930.png)
![](../../../../attachment/images-paste/image-20240126162420673.png)
#### 删除域名
![](../../../../attachment/images-paste/image-20240126162545657.png)
#### 工单列表
![](../../../../attachment/images-paste/image-20240126162451586.png)
#### 工单详情页流转记录
![](../../../../attachment/images-paste/image-20240126162610572.png)
![](../../../../attachment/images-paste/image-20240126162637156.png)
### 单域名(直播)
![](../../../../attachment/images-paste/image-20240126182254696.png)
```
{"accessSystem":"IBS","account":"CDN-IBS","code":"001-20240126005","data":{"cdn_type":"liveStream","cpId":"83566089","domains":["20240126182139.komect.com"],"filelist":[],"nameOfClient":"ECName-1706264333","sourceBasis":"001-20240126005","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":""},"processType":"3","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
![](../../../../attachment/images-uuid/b46b96468efc41a8a095b1c23b0a8eb2.png)
## 需求变更工单
BPM 不支持
![](../../../../attachment/images-paste/image-20240127202041293.png)
![](../../../../attachment/images-paste/image-20240127202057261.png)
![](../../../../attachment/images-paste/image-20240127202119938.png)
![](../../../../attachment/images-paste/image-20240127202136231.png)
# 10.2 业务适配工单验收反馈接口
## 试用工单
### 多域名(点播)
网页加速
01241607_59_001
ECName-1706083686
PRODUCTID851722313
DevReq851722313A.komect.com
DevReq851722313B.komect.com
#### 下发 BPM
![](../../../../attachment/images-paste/image-20240124164044120.png)
```
{"accessSystem":"IBS","account":"CDN-IBS","code":"01241607_59_001","createDate":"2024-01-24 16:39:59","data":{"cdn_type":"web","domains":["DevReq851722313A.komect.com","DevReq851722313B.komect.com"],"filelist":[{"name":"InfoSecurity.xls"},{"name":"BusiInfo.xls"}],"nameOfClient":"ECName-1706083686","numberOfDoamin":2,"operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","sourceBasis":"01241607_59_001","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":"","titleOfDemand":"商机与试用工单"},"processType":"0","prodType":"1","province":"JT","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
#### BPM 回调参数
![](../../../../attachment/images-paste/image-20240124164733334.png)
```
{"approve":1,"code":"01241607_59_001","plain_info":[{"approve":1,"domain_pre_info":[],"plain_name":"华为平面"}],"try_time":1706085841000,"user_id":"24"}
```
#### 注销话单
![](../../../../attachment/images-paste/image-20240124165444364.png)
```
{
"productInfos":[
{
"billingMethod":"1",
"businessType":"1",
"cancelStatus":"2",
"cancelTime":"20240124164511",
"domain":"DevReq851722313A.komect.com",
"enterpriseId":"ECID1706083686",
"enterpriseName":"ECName-1706083686",
"infoType":"1",
"jobId":"01241607_59_001",
"productId":"1",
"province":"000"
},
{
"billingMethod":"1",
"businessType":"1",
"cancelStatus":"2",
"cancelTime":"20240124164511",
"domain":"DevReq851722313B.komect.com",
"enterpriseId":"ECID1706083686",
"enterpriseName":"ECName-1706083686",
"infoType":"1",
"jobId":"01241607_59_001",
"productId":"1",
"province":"000"
}
]
}
```
#### 回调 BBOSS
![](../../../../attachment/images-paste/image-20240124165939288.png)
#### 删除域名
![](../../../../attachment/images-paste/image-20240124165715375.png)
#### 工单列表
![](../../../../attachment/images-paste/image-20240124165733980.png)
#### 工单详情页流转记录
![](../../../../attachment/images-paste/image-20240124165752941.png)
![](../../../../attachment/images-uuid/a95875423e874237b92716d50ea97dac.png)
### 多域名(直播)
![](../../../../attachment/images-uuid/7f4727b2cb844d6da0590c90fdd0957f.png)
## 试用变更工单
### 单域名(点播)
#### 下发 BPM
![](../../../../attachment/images-paste/image-20240125090222402.png)
```
{"accessSystem":"IBS","account":"CDN-IBS","code":"01241804_28_001","createDate":"2024-01-25 09:01:29","data":{"cdn_type":"web","cpId":"83564281","domains":["20240124180622.komect.com"],"filelist":[{"name":"InfoSecurity.xlsx"},{"name":"BusiInfo.xlsx"}],"nameOfClient":"ECName-1706083686","numberOfDoamin":1,"operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","sourceBasis":"01241804_28_001","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":"","titleOfDemand":"试用变更工单"},"processType":"1","prodType":"1","province":"JT","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
#### BPM 回调参数
![](../../../../attachment/images-paste/image-20240125112206040.png)
```
{"approve":1,"code":"01241804_28_001","plain_info":[{"approve":1,"domain_pre_info":[],"plain_name":"华为平面"}],"user_id":"24"}
```
#### 注销话单
![](../../../../attachment/images-paste/image-20240125112227604.png)
```
{"productInfos":[{"billingMethod":"1","businessType":"1","cancelStatus":"2","cancelTime":"20240125104435","createTime":"20240124173304","domain":"20240124180622.komect.com","enterpriseId":"ECID1706083686","enterpriseName":"ECName-1706083686","infoType":"1","jobId":"01241607_59_002","productId":"1","province":"000"}]}
```
![](../../../../attachment/images-paste/image-20240125112401022.png)
#### 回调 BBOSS
![](../../../../attachment/images-paste/image-20240125112417448.png)
#### 删除域名
![](../../../../attachment/images-paste/image-20240125112446691.png)
#### 工单列表
![](../../../../attachment/images-paste/image-20240125112502185.png)
#### 工单详情页流转记录
![](../../../../attachment/images-paste/image-20240125112518271.png)
![](../../../../attachment/images-paste/image-20240125112533413.png)
### 单域名(直播)
01251533_37
![](../../../../attachment/images-uuid/5d5e8db496fb498b89a1e0ce0ab6b7d0.png)
## 业务受理工单
### 单域名(点播)
#### 下发 BPM
![](../../../../attachment/images-paste/image-20240126151022436.png)
```
{"accessSystem":"IBS","account":"CDN-IBS","code":"01261508_41","createDate":"2024-01-26 15:10:19","data":{"cdn_type":"download","cpId":"83564281","domains":["20240126150847.komect.com"],"filelist":[{"name":"InfoSecurity.xls"},{"name":"BusiInfo.xls"}],"nameOfClient":"ECName-1706083686","numberOfDoamin":1,"operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","sourceBasis":"01261508_41","sourceOfDemand":"IBS平台","summaryOfDemand":"","titleOfDemand":"ECName-1706083686业务开通工单"},"processType":"2","prodType":"1","province":"JT","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
#### BPM 回调参数
![](../../../../attachment/images-paste/image-20240126153135809.png)
```
{"approve":1,"code":"01261508_41","open_time":1706254174000,"plain_info":[{"approve":1,"domain_pre_info":[],"plain_name":"华为平面"}],"user_id":"24"}
```
#### 注销话单
![](../../../../attachment/images-paste/image-20240129085705439.png)
![](../../../../attachment/images-paste/image-20240129085729952.png)
#### 回调 BBOSS
![](../../../../attachment/images-paste/image-20240126153221092.png)
#### 删除域名
![](../../../../attachment/images-paste/image-20240126153306729.png)
#### 工单列表
![](../../../../attachment/images-paste/image-20240126153321438.png)
#### 工单详情页流转记录
![](../../../../attachment/images-paste/image-20240126153339622.png)
![](../../../../attachment/images-paste/image-20240127205302083.png)
### 单域名(直播)
01261534_04
![](../../../../attachment/images-uuid/44ec057c049b4b21852942c1ec040c27.png)
## 域名配置需求工单
### 单域名(点播)
001-20240126003
#### 下发 BPM
![](../../../../attachment/images-paste/image-20240126174844897.png)
```
{"accessSystem":"IBS","account":"CDN-IBS","code":"001-20240126004","data":{"cdn_type":"web","cpId":"83557919","domains":["20240126174134.komect.com"],"filelist":[],"nameOfClient":"ECName-1706256155","sourceBasis":"001-20240126004","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":""},"processType":"3","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
#### BPM 回调参数
![](../../../../attachment/images-paste/image-20240126175033374.png)
```
{"approve":1,"code":"001-20240126004","plain_info":[{"approve":1,"domain_pre_info":[],"plain_name":"华为平面"}],"user_id":"24"}
```
#### 注销话单
不注销
#### 删除域名
![](../../../../attachment/images-paste/image-20240126175435389.png)
#### 工单列表
![](../../../../attachment/images-paste/image-20240126175449916.png)
#### 工单详情页流转记录
![](../../../../attachment/images-paste/image-20240126175504898.png)
### 单域名(直播)
001-20240126005
![](../../../../attachment/images-uuid/7e3aaadbe4d047f6b1de58646d69a5ce.png)
## 需求变更工单
### 单域名(点播)
#### 下发 BPM
![](../../../../attachment/images-paste/image-20240126175745115.png)
```
{"accessSystem":"IBS","account":"CDN-IBS","code":"002-20240126001","data":{"cdn_type":"web","cpId":"83557919","domains":["20240126174134.komect.com"],"nameOfClient":"ECName-1706256155","operMail":"18777777777@139.com","operTel":"18777777777","operUser":"18777777777cmcc","sourceBasis":"002-20240126001","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":"需求变更。"},"processType":"4","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
#### BPM 回调参数
![](../../../../attachment/images-paste/image-20240126181121693.png)
```
{"approve":1,"code":"002-20240126001","plain_info":[{"approve":1,"domain_pre_info":[],"plain_name":"华为平面"}],"user_id":"24"}
```
#### 注销话单
#### 删除域名
![](../../../../attachment/images-paste/image-20240126181207704.png)
#### 工单列表
![](../../../../attachment/images-paste/image-20240126181215446.png)
#### 工单详情页流转记录
![](../../../../attachment/images-paste/image-20240126181222733.png)
### 单域名(直播)
![](../../../../attachment/images-paste/image-20240126183210531.png)
```
{"accessSystem":"IBS","account":"CDN-IBS","code":"002-20240126002","data":{"cdn_type":"liveStream","cpId":"83566089","domains":["20240126182139.komect.com"],"nameOfClient":"ECName-1706264333","operMail":"18777777777@139.com","operTel":"18777777777","operUser":"18777777777cmcc","sourceBasis":"002-20240126002","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":"直播变更校验"},"processType":"4","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
![](../../../../attachment/images-uuid/d36f1d17ec864ae8bd07876da3717f18.png)
# 遗留问题
## 需求背景
esop 来源现网验收去掉只能选择验收通过的限制
工单种类:域名配置需求工单
## 触发场景
客户经历提交工单——>客户经理管理员审批下发 BPM——>BPM 调用 10.4 退回接口——>IBS 工单退回至提交人
客户经理对工单修改以原工单号重提(10.4 接口要求此种工单需原工单号)——>客户经理管理员审批下发 BPM 报错
下图为 BPM 答复报错原因
![](../../../../attachment/images-paste/image-20240129213800499.png)
## 临时解决方案
![](../../../../attachment/images-paste/image-20240129213840705.png)
![](../../../../attachment/images-uuid/237bc22f16db44f7933be4f272dd0082.png)
![](../../../../attachment/images-uuid/18ba70f3a8034a5680fe619b8bbf3416.png)
![](../../../../attachment/images-paste/image-20240130125253121.png)
![](../../../../attachment/images-paste/image-20240130152941596.png)
![](../../../../attachment/images-paste/image-20240130152948841.png)
@@ -0,0 +1,21 @@
1、IBS 测试环境:https://test.p.cdn.10086.cn/
2、IBS 系统存在
esop 试用企业 A,企业域名分发至华为平面
```
iv0lfdym-ht3r42scxbthrbwiECName-1707206483
```
![](../../../../attachment/images-paste/image-20240218094103911.png)
esop 商用企业 B,企业域名分发至自研 1.0 和华为平面
```
bbdraiwl-mzp8a4wfrtvcvrawECName-1707206823
```
![](../../../../attachment/images-paste/image-20240218095331177.png)
3、已构造 A、B 企业昨天峰值带宽数据
@@ -0,0 +1,178 @@
# 试商用客户峰值带宽增加平面筛选
> 产品:赵潇洒
## 需求背景
1、【试商用客户峰值带宽】页面增加【分发平面】筛选项
2、【试商用客户峰值带宽】列表、导出增加【分发平面】字段
运营管理 - 月统计报表 - 试商用客户峰值带宽
![](../../../../attachment/images-paste/image-20240129212955091.png)
运营管理 - 月统计报表 - 试商用客户峰值带宽 模块,增加【分发平面】字段,筛选项枚举值为:全部、自研(杭研)、自研(卓望)、华为平面、中兴平面,单选
若企业存在多个分发平面,用“,”隔开
导出数据增加【分发平面】字段、【CDN 运营数据周报】导出增加【分发平面】字段
## 需求评审
1. 隔开的是中文还是英文【英文】
2. 单选,是否是模糊查询【平面是模糊匹配】
3. 导出的文件中“平面”位置是在哪一列【已增加】
![](../../../../attachment/images-paste/image-20240131083457845.png)
4. 平面的规则是否是企业下所有域名归属的平面【是的】
5. 字段显示和文件导出统一试用枚举值是否【统一新的】
6. 有没有咪咕平面【因业务背景无此平面】
## 开发过程
### 代码位置记录
```
# 接口
/statistics/report/enterprisePeekBW
# 参数
?pageNum=1
&pageSize=10
&enterpriseId=
&type=
&tag=
&startTime=2023-12-30
&endTime=2024-01-28
&_=1706536222014
# 代码位置
com.cmcc.cdn.platform.selfservice.controller.vodstatistic.ReportController#getEnterprisePeekBW
# 平面枚举值
com.cmcc.cdn.platform.selfservice.enums.DomainPlainEnum
# 运营数据周报同步定时任务
com.cmcc.cdn.platform.selfservice.quartz.RegisterJobs#registerOperationalDataWeekReportJob
# 试商用客户峰值带宽
com.cmcc.cdn.platform.selfservice.controller.vodstatistic.ReportController#getEnterprisePeekBW
```
### 平面转换
自研(杭研)-->自研 1.0
自研(卓望)-->自研 2.0
自研(咪咕)-->自研 RTMP
### 大数据峰值带宽接口响应
```json
# 68ng
# http://mock.p.cdn.10086.cn/mock/analyzer/bandwidth/enterprisePeak
# 172.21.16.30:8511
{
"data":[
{
"bandwidth":1216318998.768013,
"time":"2024-02-01 20:15:00",
"enterpriseId":"dgzhqmwv-hibp5fxasv429y2q",
"checkDate":"2024-02-01"
},
{
"bandwidth":123868050.30859375,
"time":"2024-01-26 09:55:00",
"enterpriseId":"bjyuwe3x-ureauy40kcxhoh7f",
"checkDate":"2024-01-26"
}
],
"code":0,
"message":"OK"
}
```
## 需求评审会
1. 说明现有数据个别企业存在自研 RTMP(已反馈)
2. 数据是谁造,怎么造,造哪天的数据。(kafa)
3. 定时任务是改定时任务时间触发的测试方式吗?(是的)
## 自测用例
1、IBS 测试环境:https://test.p.cdn.10086.cn/
2、
IBS 系统存在 esop 试用企业 A,企业域名分发至华为平面
ECName-1707206483iv0lfdym-ht3r42scxbthrbwi
DevReq397589985A.komect.com
[1]
13359101855
ECID1707206483
esop 商用企业 B,企业域名分发至自研 1.0 和华为平面
ECName-1707206823bbdraiwl-mzp8a4wfrtvcvraw
DevReq772066554A.komect.com
[1,0]
13508492476
ECID1707206823
3、已构造 A、B 企业昨天峰值带宽数据
### 数据构造
构造昨天(2 月 5 日)数据
```
iv0lfdym-ht3r42scxbthrbwiECName-1707206483
bbdraiwl-mzp8a4wfrtvcvrawECName-1707206823
```
构造上周(2 月 19-3 月 4 日)数据
```
0788ucov-z05gxh8v2wpsk8sf
0kqfkjlb-6h25mnlk8ew5vrrg
02m6ruuq-e4oturlbhtyh00db
2ec44wl4-sd1dod402eoyjv0y
c5ojbmjc-cphj2zk551sm2ue2
qq5gc9zw-rfjwukx7adkqnmdn
2ddjkw6c-xjfa4bbzfquoferd
xdtpkzk2-j8elufty1rujkowm
30e1dzc3-aoeu1sif6i1ecwaq
5fgmck0o-vf1vujk2oywsfkyc
```
# (需求挂起)2.1 新增开通单和试用变更单 prodType 字段变更或为空的逻辑
> P0
>
> 涉及集客大厅、BPM,需约定联调时间
>
> 产品:姬高峰
## 需求评审
1. 具体是哪几个工单,“新增开通单”是非首次开通吗?
2. 具体描述可以增加下非首次开通的描述。
3. 试用变更是不是也只是和新增域名有关?
# (需求挂起)2.5 业务工单增加退回机制 - 试用单、试用变更单
> P0
>
> 产品:赵潇洒
@@ -0,0 +1,483 @@
# 问题汇总
1. ~~【需求 1】什么哪个时机同步信安信息。(配管回调)~~
2. ~~【需求 2】删除域名同步删除信安信息。(原逻辑)~~
# 开发记录
## 1 试用中延长试用时长逻辑优化
### 核心问题
可试用时长=变更申请的时长 - 历史已试用时长
“历史已试用时长”为试用单详情页中试用时长变更记录“已试用时长”总计(可能是多条)
### 问题复现
场景 1
试用变更单提交按钮:/order/trialOrder
携带参数:
![](../../../../attachment/images-paste/image-20240307141225987.png)
## 2 新增域名接口需求
主要任务:信安、备案号校验、BPM、邮件、证书
### 信安信息
~~信安信息存在性校验~~
~~信安同步~~
```
IPv6 地址有几种不同的表示方法:
1. 完整形式:完整的 IPv6 地址由 8 组 4 个十六进制数字组成,每组之间用冒号(:)分隔。例如:`2001:0db8:85a3:0000:0000:8a2e:0370:7334`。
2. 零压缩形式:如果一个 IPv6 地址中有连续的一组或多组是 0000,可以用双冒号(::)来代替。这种压缩只能用一次。例如:`2001:0db8:85a3::8a2e:0370:7334`。
3. 零省略形式:在每组内部,前导的零可以省略。例如:`2001:db8:85a3:0:0:8a2e:370:7334`。
4. 混合形式:在 IPv6 和 IPv4 共存的环境中,可以使用一种混合的表示方法,后面的 2 组以 IPv4 的形式表示。例如:`2001:0db8:85a3:0000:0000:8a2e:192.0.2.1`。
```
### 备案号
~~合法性~~
~~存在性~~
### BPM
~~下发 BPM~~
### 邮件
BPM
配管
一个订购下域名存在平面不一致情况
```
因自身问题(如配置错误)或者网络调用失败导致的接口调用错误,或者多平面情况(一个订购下域名存在平面不一致情况),即未与配管、BPM侧联通,则触发邮件告警同步一线并由IBS运维人员处理
1、调用第三方接口(BPM、配管)失败后,系统触发邮件告警通知,IBS运维、研发人员,内容如下
收件人:IBS运维、研发人员
运维刘汉春,研发石正,张鹏豪
抄送人:无
邮件主题:创建域名接口调用**接口(具体接口名称)失败通知
邮件内容1
您好:
XXXX(企业名称)企业在YYYY-MM-DD(接口调用日期)发起了编号为XXXXXX(工单号)的新增域名工单,调用**接口失败,请及时处理。
邮件主题:一个订购下平面信息不一致
邮件内容2
您好:
XXXX(企业名称)企业在YYYY-MM-DD(接口调用日期)发起了编号为XXXXXX(工单号)的新增域名工单,一个订购下平面信息不一致导致客户添加域名失败,请及时联系相应SA处理。
```
### 证书
~~证书绑定~~
### 域名配置变更工单
验证需求变更工单虚名筛选和回调域名类型修改
## 3 配置管理
1、基本配置 :包含基本信息和**源站信息**(多项)两部分
2、访问控制 :包含 referer 黑白名单、IP 黑名单、UA 黑白名单、URL 鉴权配置、频次控制配置。
3、缓存控制包含:**缓存配置**(cache)、URL 缓存改写、**节点 HTTP 响应头**set_resp_header)、**自定义页面**custom_error_page
4、回源配置包含:回源 HOST、**URL 缓存改写**url_parameter)、**回源 HTTP 请求头**set_req_header
5、HTTPS 配置包含:HTTP/2HTTPS 项
6、高级配置包含:拖拽播放信息、gzip 智能压缩、brotli 智能压缩
json.schema
**回源 HTTP 请求头**set_req_header)接口文档 2
```json
//请求头设置 自定义回源HTTP请求头
"set_req_header": {
"enable": true,
"detail": [
{
"type": "Content-Language3",
"value": "CN",
"option": 1 //0 设置 1 删除
},
{
"type": "Sec-Fetch-Mode3",
"value": "CN",
"option": 0 //0 设置 1 删除
}
]
}
```
**节点 HTTP 响应头**set_resp_header)接口文档 3
```json
// 自定义HTTP响应头
"set_resp_header": {
"enable": true,
"detail": [
{
"type": "Sec-Fetch-Dest",
"value": "text/xml",
"option": 1 //0 设置 1 删除
},
{
"type": "Sec-Fetch-Mode",
"value": "text/xml",
"option": 0 //0 设置 1 删除
}
]
}
```
**缓存配置**cache)接口文档 4
```json
//缓存类型与过期时间信息
"cache": {
"enable": true,
"detail": [
{
"type": 0,
"content": "/test/content/",
"ttl": 1,
"unit": "week",
"weight": 1,
"followsource": 0//是否遵循源站
},
{
"type": 1,
"content": "txt,jpg",
"ttl": 1,
"unit": "week",
"weight": 1,
"followsource": 0//是否遵循源站
}
]
}
```
**自定义页面**custom_error_page)接口文档 5
```json
// 自定义页面
"custom_error_page": {
"enable": true,
"detail": [
{
"type": 1,
"mode": 0,
"link": "https://xxxx.xx/error.html"
}
]
}
```
**URL 缓存改写**url_parameter)接口文档 8
```json
// url参数+缓存
"url_parameter": {
"enable": true,
"shared_cache": {
"enable": true,
"target_domain": "video.baidu.com"
},
"detail": {
"enable": true,
"type": 2,
"content": "param1;param2;param3;param4"
},
"http_header": [
"headerparam1",
"headerparam2",
"headerparam3",
"headerparam4"
]
}
```
domain_config_task_status
enterprise_domain_config_task_domain
enterprise_domain_config_task
domain_config_task_status
# 自测记录
## 1 试用中延长试用时长逻辑优化(已完成)
存在 A 企业,申请试用时长为 5 天
**场景 1** A 企业试用中途申请延长 5 天,发起试用变更申请时长为 10 天,可试用时长 10 天=10-0
灰度环境:03111105_23
![](../../../../attachment/images-paste/image-20240311112347291.png)
![](../../../../attachment/images-paste/image-20240311132229223.png)
**场景 2** A 企业试用 10 天已结束,当前试用结果为“试用时长耗尽”:
此时需再试用 6 天,发起试用变更申请时长为 16 天,可试用时长 6 天=16-10
试用两天后申请延长 3 天,发起试用变更申请时长为 19 天,可试用时长 9 天=19-10
灰度环境:ZPH000A202301221448_002
![](../../../../attachment/images-paste/image-20240311133129445.png)
![](../../../../attachment/images-paste/image-20240311133519235.png)
**场景 3** A 企业试用 9 天已结束,当前试用结果为“试用流量耗尽”:
此时增加流量同时需再试用 6 天,发起试用变更申请时长为 15 天,可试用时长 6 天=15-9;
试用两天后申请延长 3 天,发起试用变更申请时长为 18 天,可试用时长 9 天=18-9
## 2 新增域名接口需求
04071513_55
ECID1712474043
ECName-1712474043
PRODUCTID1712476527
83577861
### 2.1 配管回调信安同步(已完成)
![](../../../../attachment/images-paste/image-20240407163337649.png)
### 2.2 ESOP 自助域名创建备案号合法性校验(已完成)
![](../../../../attachment/images-paste/image-20240407163730160.png)
### 2.3 信安信息存在性校验(已完成)
![](../../../../attachment/images-paste/image-20240407163811342.png)
![](../../../../attachment/images-paste/image-20240407163926662.png)
### 2.4 下发 BPM(已完成)
![](../../../../attachment/images-paste/image-20240407164946295.png)
### 2.5 新增域名证书存在性校验(已完成)
20240407165904--f31c-4ee0-86dc-7067a625a553
![](../../../../attachment/images-paste/image-20240407170708912.png)
### 2.6 配管回调绑定证书功能(已完成)
![](../../../../attachment/images-paste/image-20240407171101983.png)
### 2.7 IBS 告警联动设计(3 个邮件功能)(已完成)
### 2.8 需求变更工单配前台域名筛选框(已完成)
20240407170644.komect.com
![](../../../../attachment/images-paste/image-20240407172433960.png)
### 2.9 验收反馈绑定证书(已完成)
### 2.10 验收反馈刷新证书配置信息(已完成)
### 2.11 新增高级配置项页面展示:一个配置项可以设置多个的情况,右上角添加下发按钮功能(已自测,前端未开发)
## 3 开通试用过程中删除过域名的订购(已完成)
![](../../../../attachment/images-paste/image-20240327165820186.png)
# 冒烟自测
## 1 订购迁移工单下发 BPM 同步平面信息
> [!WARNING]
> ~~和李润月确认好下发报文(我写的是验证字段内容 你自测的时候还是看下格式吧 )~~
### 第一次测试
```
1、IBS测试环境:https://test.p.cdn.10086.cn
2、IBS存在esop企业A、已业务开通:网页加速的订购ID:20230000810、业务开通的产品类型-移动网内CDN 分发平面:华为平面
esop企业B、已业务开通超低时延直播加速订购ID:20240000001,订购下域名test1.com、test2.com、test3.com,域名状态:已生效、业务开通的产品类型-三网CDN
```
ECName-1712056074
PRODUCTID235520173
ECName-1712056443
PRODUCTID106526101
DevReq106526101A.komect.com
DevReq106526101B.komect.com
DevReq106526101C.komect.com
![](../../../../attachment/images-paste/image-20240402193847782.png)
### 第二次自测
```
前提:
1、IBS测试环境:https://test.p.cdn.10086.cn
2、IBS存在esop企业A、已业务开通:网页加速的订购ID:20230000810、业务开通的产品类型-移动网内CDN 分发平面:华为平面
esop企业B、已业务开通超低时延直播加速订购ID:20240000001,订购下域名test1.com、test2.com、test3.com,域名状态:已生效、业务开通的产品类型-三网CDN
```
网页加速、移动网内 CDN、华为平面
ECName-1712107705
PRODUCTID221866083
超低时延直播加速、三网 CDN、test1.com、test2.com、test3.com
ECName-1712108635
PRODUCTID988720686
![](../../../../attachment/images-paste/image-20240403100026638.png)
## 2 试用时长到期 - 多次变更时长 - 新增域名
### 第一次自测
```
前提:
1、IBS测试环境:https://test.p.cdn.10086.cn
2、构造试用单数据:esop24032701企业下试用单:20240322100001已时长到期试用结束
试用结束原因:试用时长耗尽、 试用开始日期:2024-03-22 10:00:00、试用结束时间:2024-04-01 23:59:00、可试用时长:10天、已试用时长:10天
引入省公司:浙江、对应运营经理:浙江省运营经理001
```
![](../../../../attachment/images-paste/image-20240403102152443.png)
> [!WARNING]
> ~~前提和第五步和第七步:3 月 22 日试用 10 天应该是 4 月 2 日结束吧?~~
> ~~第四步:try_time(这个用例上下文应该是在 4 月 10 日进行反馈,这里也写成 10 号的时间吧)~~
> ~~第六步:是否是非新增域名变更,运营经理直接审批那种(去除 DevReq)~~
![](../../../../attachment/images-paste/image-20240403103803826.png)
测试企业 -1699583154
test1110102523
2023-11-10 10:44:24
2023-11-12 23:59:00
---
2024-04-03
试用 20 天
2024-04-21(试用开始时间 +(试用变更时间 - 已试用时间))
试用 30 天
2024-05-01(试用开始时间 +(试用变更时间 - 已试用时间))
---
test1009101532
测试企业 -1696817748
13758965349
ECID1696817748
PRODUCTID960492953
---
PRODUCTID580066134
ECName-1710126409
ECID1710126409
13568470182
test1026152403
### 关于页面修改实际开始时间后引发的问题
![](../../../../attachment/images-paste/image-20240403142201182.png)
### 第二次自测
> 前提:
>
> 1、IBS 测试环境:https://test.p.cdn.10086.cn
>
> 2、构造试用单数据:
>
> esop24032701 企业下试用单:20240322100001 已时长到期试用结束
>
> 试用结束原因:试用时长耗尽、 试用开始日期:2024-03-22 10:00:00、试用结束时间:2024-04-01 23:59:00、可试用时长:10 天、已试用时长:10 天
>
> 引入省公司:浙江、对应运营经理:浙江省运营经理 001
> [!NOTE]
> ~~试用变更新增域名会直接有集团业务管理员到运营经理吗?(是的)~~
test1020111939
ECID1697772109
测试企业 -1697772109
## 3 客户新增域名 - 下发配管失败告警
```
前提:
1、IBS测试环境:https://test.p.cdn.10086.cn/
2、IBS系统已存在esop企业A,已开通网页加速业务,域名均分发至自研1.0平面;业务单已反馈
3、企业A网页加速订购202403131521属于top55业务,在企业白名单-TOP55企业页面显示
4、IBS下发配管接口不通
```
ECName-1712126430
PRODUCTID878475345
> [!WARNING]
> 1. 前提:第二点开通走完业务单都是已完成
> 2. 前提:第二点域名分发至自研 1.0 平面核实下页面
配管配置项
/uomp-core/task/action/
/tianzhuo/fail/
@@ -0,0 +1,521 @@
# 4.6 客户统计新增 esop 统计项(已完成)
页面:
com.cmcc.cdn.platform.selfservice.enums.DomainTypeEnterpriseEnums#getDomainTypeList
```java
CUSTOMBSS(1,"BSS",6,"定制化客户(esop"),
```
查询逻辑:
com.cmcc.cdn.platform.selfservice.service.impl.CustomerStatisticsServiceImpl#collect
# 5.1 业务暂停/恢复时间展示增加时分秒(已完成)
```java
代码位置
OrderServiceImpl 1519行
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
```
# 6.1 直播域名增加信安信息下载/修改及信安附件校验优化(挂起)
1、更新信安附件模板:单位名称增加填写提示及示例(已完成)
2、ibs 系统增加对信安附件单位名称的校验
若校验企业名称存在,则弹框提醒
“企业名称“XX 省 XX 市 XX 区 XX 公司”已存在,继续上传将覆盖原企业信息,请确认是否继续。”
选择确认,正常上传信安附件,否则上传新的信安附件
选择取消,弹框收回,返回详情页面
问题 1:和前端对接弹窗方式以及取消要做的操作。
# 3.6 智慧中台对接
## 需求背景
智慧中台历史通过 OMC 下发配置
为支撑统一配管需求,需将智慧中台与配管对接,后续配置由配管统一下发
1、对接域名范围:所有自助域名
2、对接后配置下发流程:智慧中台 -IBS- 配管 - 杭研平面
3、对接接口范围:含 CP 操作、域名操作、域名高级配置、内容管理、统计数据、日志管理、证书接口等 7 大类共 26 个接口,接口文档如下
## 对接兼容事项
浙江能开接口关闭,避免多下发入口冲突
## 开发关注
1、域名
2、信安
3、证书
4、话单
5、日志
## 开发待办
~~1、指定下发的平面为自研平面(已完成)~~
增加配置项 JSZT_DOMAIN_PLIAN
JSZT_DOMAIN_PLIAN
自研(杭研)
2、关于日志处理
~~3、不下发调度~~
## 过程记录
### 创建
```json
{
//内容提供商唯一标识,必须全局唯一。
"cp_id": "80010208",
//任务唯一的标识。
"task_id": "taskid{{myRandomNum}}",
// 配置方式0:自服务配置(控制台直接配置下发)1:定制配置(需要适配的需求)
"add_type": 0,
//要创建的加速域名列表, 必须全局唯一。
"domains": [
{
"domain": "domain{{myRandomNum}}.com",
//是否为泛域名
"ex_domain": false,
"reg_id": "京ICP备0500_mytestcdner.xyz_12号",
"ex_domain_list": [],
"product_id": "776620211656hhh"
}
],
//加速域名的业务类型。web:图片及小文件分发。download:大文件下载加速。video:视音频点播加速。liveStream:直播流媒体加速。
"cdn_type": "web",
//单选,0:移动。1:三线说明:‘三线’表示移动、联通、电信
"service_provider": "1",
//回源地址列表。最大支持10个回源地址。
"sources": [
{
"back_addr": "23.23.23.23",
"back_protocol": 0,
"type": "ip",
"primary": true
}
],
//协议类型0:只开启http1:只开启https2:同时开启http和https
"protocol": 1,
//证书对应唯一id
"unique_id": "20221227195782--f52c-4676-ba55-f591f801020f",
//IPV6开关,开关,默认为false未开启状态
"ipv6OnOff": true
}
```
#### changeToConfigVO
domain 加速域名(请求参数)
httpSelection 服务类型(请求参数 protocol 转换 SelfHttpTypeEnum
tenantId (请求参数中 cp_id 查的)
icp 备案号(请求参数)
legal 是否合法(请求参数的备案号和去工信部查询后进行比较)
loopDomain 源站地址 LoopDomainVO 对象(back_addr 回源域名/ip: 端口 type 回源地址类型 primary 主站)
loopProctolType 回源协议类型(转换为了 BackProtocolEnum)传 0 是 2,传 1 是 0,传 2 是 1。
provinceCodes 分发省份列表 (选择)(如果是空就是全国)
domainType 配置方式(请求中的)
selectPlane 域名选择下发平面(JSZT 是 cmcc 控制项控制和默认值)
scheduleType 调度机制(默认 CNAME
serviceProvider 运营商 ServiceProviderEnum(空)
ipv6Switch (请求中)
ipv6NewSwitch (请求中)
productName 产品类型(ProductsEnums 转换而来)
crtSwitch = false 自助配置端 https 证书开关(HTTP 不开启,请求中 protocol 判断)
如果是 true ,并且没有 configCrt
自助配置端 https 的公钥私钥,则把证书 id 和名字放 ConfigCrtVO 对象。
#### 域名表持久化
icp 工信部备案号
legal 与填写的是否一致
tenantId 企业信息
product 是个 ProductsEnums 枚举值
domain 域名
isExtensiveDomain
loopDomain Listloopdomainpo 集合)**loop_domain**验证一下。49331
encryption 默认 FALSE
blockLoop 默认 FALSE
state
domainShare 多域名缓存共享默认 false
videoDrag 视频拖拽默认 false
filterParameter 过滤参数默认 false
provinces provinces 表 domain_config_province
followed 回源重定向跟随开关默认 false
crtSwitch http 证书开关前边做出来的
configCrt http 证书设置**config_crt**
httpSelection 服务协议选择
httpsPort
scheduleType 调度机制 0
wafOpen 默认 false
domainType
diffFlag 异网开关 false
distributeArea 分发区域
Integer domainType 类型
OmsCustomerRemarkDO **oms_customer_remark**
domainNodes 节点
domainPlain
Listselfservicedomainoperaterecorddo records
domainPlain CMCC 外部
records operate_record
cName (拼凑.cmcdn.cdn.10086.cn
存共享缓存关系
source
#### OmsApiDomainTicketPO
DomainString
OperateType
StateStr(这个要处理)
TaskId
EnterpriseId
historyLog
omsTenantAuthenticationId 租户信息
#### WorkOrder
setStatus(这个要处理)
#### bpm_live_task
多对多:bpm_live_task_domain_state_record
process(这个要处理)BpmTypeEnum.OrderProcessEnum
taskid
type
operate
cpid
域名
关联表:
ydy_bpm_domain_state_record 域名、平面信息(关联表)、备案号、订购关系
ydy_bpm_plain_result_record 记录 taskid、平面信息
~~关于回调:处理 records 记录是否成功~~
~~com.cmcc.cdn.platform.selfservice.quartz.jobs.PipeTaskOverTimeJob#doJob~~
~~pipe_config_entity~~
下发失败:
1、接口调用失败,
### 修改 80% 同删除
### 删除 80%
### 启用/停用加速域名 80%
### 增加/修改域名高级配置 80%
回源 host 配置★域名表 back_host 字段
"back_source_host": {
"enable": true,
"host": "host.baidu.com"
}
分片回源信息★域名表 block_loop 字段
"block_loop": true,
自定义回源 HTTP 请求头★http_header_config
"set_resp_header": {
"enable": true,
"detail": [
{
"type": 0,
"value": "xxxxxx"
}
]
}
回源重定向跟随★域名表 is_followed 字段
"backsource_redirection_status": true
缓存类型与过期时间信息★cache_type
"cache": {
"enable": true,
"detail": [
{
"type": 0,
"content": "/abc/def/",
"ttl": 10,
"unit": "day",
"weight": "1"
}
]
}
自定义页面信息★custom_page
"custom_error_page": {
"enable": true,
"detail": [
{
"type": 0,
"link": "https://xxxx.xx/error.html"
}
]
}
支持 HTTP/2 的协议配置★未入库
&quot;http2_status&quot;: false
拖拽播放信息★域名表 video_drag
"video_drag_status": false,
开启智能压缩功能★域名表 encryption
"gzip_status": true
encryptiongradle
开启 Brotli 压缩功能★未入库
&quot;brotli_status&quot;: true
Referer 黑白名单★referer_anti_stealing_link
"referrer_anti_stealing_link": {
"enable": true,
"detail": {
"list_type": 1,
"referrer_null": false,
"domain_list": [★有子表
"*.10086.com",
"www.10086.co"
]
}
}
IP 黑白名单; 可以指定 IP、IP 段来设置★domain_ip_black_list
"ip_black_list": {
"enable": true,
"ip_list": [
"2.2.2.4/22",
"1.1.1.2"
]
}
### 域名配置回调接口 - 配管回调
#### 新增回调 80%
#### 停用启用回调 80%
#### 高级配置回调
同 create
#### 修改回调
#### 删除回调 80%
commandType=manageDomainCallBack
### 内容刷新
com.cmcc.cdn.platform.selfservice.service.impl.ContentManageServiceImpl#submitContentTasks
com.cmcc.cdn.platform.selfservice.controller.ContentController#submitContentTask
5.3 查询内容预热/刷新任务状态未修改。
## 测试用例
共——19
已完成——11
### 需要更改用例——5
新增自助域名:请求体不完整
删除域名:验证点应为删除中
停用域名:请求体应为 domains,验证点应为停用中
修改证书 - 证书名称:触发 " 响应失败,提示证书名称不支持修改 " 请求体需携带 "crt\_name": "*****" 参数
日志订阅 -5min 标准日志——确认日志订阅成功(如何让日志生效),响应参数
日志停用:响应参数,——日志停用成功是变成已结束吗,响应参数
![](../../../../attachment/images-uuid/75ad47cb52654575bdd25078b563ce90.png)
日志订阅流水号查询 - 标准:响应参数 "error\_msg": "success"
### 未完成——3
带宽统计
状态码统计
日志订阅修改接口 - 增加域名 需要加 cpid
ng,mock 数据
String body\="{"cp\_id":"80010208","start":"2023-05-26T11:00:00+08:00","task\_id":"vhjlokrl-irr4bd4nf3gwhfflThu May 25 11:34:26 CST 20230","increase\_domains":["\*.a.test681202695.com"]}";
String url \= "/action?commandType\=subscribeUpdate&version\=1";
String secretKey \= "5c0a1078aac62ecaccd5c79cc874af96f10aaf4061c41eee9f7ae969cc888d5c";
1、新增自助域名
2、删除域名
3、停用域名
4、查询加速域名 - 某个企业
5、增加域名高级选项 - 回源 host 配置
6、内容刷新
7、创建 cp 接口——和产品确认是否显示在第三方企业中
8、删除企业 cp
9、上传证书
10、修改证书 - 证书名称
11、查询企业证书
12、删除企业证书
13、日志停用
14、日志订阅 -5min 标准日志——
# 四个开关可以控制是否进行权限校验
# 问题单
[NRWLXT-26157](http://jira.komect.net/browse/NRWLXT-26157) 已处理 【创建企业接口,无鉴权能新增成功】放开对技术中台的鉴权,代码上修改了过滤固定企业的地方去除 JSZT。
[NRWLXT-26159](http://jira.komect.net/browse/NRWLXT-26159) 已处理 【智慧中台接口创建 cp,未在 ibs 展示】技术中台企业管理页面增加显示
[NRWLXT-26160](http://jira.komect.net/browse/NRWLXT-26160) 已处理 ★【新增两个不同类型域名使用同一个订购 id 未做校验】代码逻辑无误,后续完善接口文档并邮件同步
[NRWLXT-26162](http://jira.komect.net/browse/NRWLXT-26162) 已处理 ★【日志订阅流水号接口,仅支持查询已生效的日志】代码逻辑无误,后续完善接口文档并邮件同步
[NRWLXT-26163](http://jira.komect.net/browse/NRWLXT-26163) 已处理 ★【查询企业域名列表仅过滤已生效域名】代码逻辑无误,后续完善接口文档并邮件同步
[NRWLXT-26173](http://jira.komect.net/browse/NRWLXT-26173) 已处理 【获取证书内容接口,未带证书 id 或者证书 id 错误请求,也返回成功】1、添加证书 id 非空校验;2 关于 id 错误的校验无法处理
[NRWLXT-26180](http://jira.komect.net/browse/NRWLXT-26180) 已处理 【日志订阅修改接口,增加不存在的域名,接口反馈成功】日志订阅修改接口,增加不存在的域名,接口反馈成功,校验增加日志是否
[NRWLXT-26189](http://jira.komect.net/browse/NRWLXT-26189) 已处理 ★【修改企业的 product\_info 信息,提示修改成功,实际未修改】修改接口文档
[NRWLXT-26190](http://jira.komect.net/browse/NRWLXT-26190) 已处理 【修改企业接口用户名信息,可上传特殊字符,不符合文档规范】增加校验
[NRWLXT-26191](http://jira.komect.net/browse/NRWLXT-26191) 已处理 【查询 cp 接口,入参不符规范,能查询成功】增加分页参数校验
[NRWLXT-26193](http://jira.komect.net/browse/NRWLXT-26193) 已处理 ★【企业查询接口,任何企业查询到的 state 都 为 1】修改接口文档
[NRWLXT-26194](http://jira.komect.net/browse/NRWLXT-26194) 已处理 【内容刷新/内容预热接口,填写错误的 cpid,下发成功】内容刷新预热
[NRWLXT-26195](http://jira.komect.net/browse/NRWLXT-26195) 已处理 ★【内容刷新接口,taskid 未做唯一校验】内容刷新/预热收到任务后直接下发配管,查询任务是从配管接口直接查询,ibs 未记录任务,不可校验重复性
[NRWLXT-26196](http://jira.komect.net/browse/NRWLXT-26196) 已处理 【下发类型为目录刷新,实际 url 为资源,下发成功】只校验文件
[NRWLXT-26197](http://jira.komect.net/browse/NRWLXT-26197) 已处理 【内容刷新,type 填写其他,能下发成功】
[NRWLXT-26198](http://jira.komect.net/browse/NRWLXT-26198) 已处理 【内容刷新/预热接口,index 重复未校验】
[NRWLXT-26199](http://jira.komect.net/browse/NRWLXT-26199) 已处理 【内容刷新/预热接口,提交不存在的域名,下发成功】
[NRWLXT-26203](http://jira.komect.net/browse/NRWLXT-26203) 已处理 【新增域名,service\_provider 未传,可新增域名成功】只校验新增
[NRWLXT-26204](http://jira.komect.net/browse/NRWLXT-26204) 已处理 【新增域名,回源地址多个,未限制主站个数为 1 个】新增主站必须存在,修改未加
[NRWLXT-26205](http://jira.komect.net/browse/NRWLXT-26205) 已处理 【新增域名,运营商字段未展示】字段未展示 set 值问题,导致页面未显示
[NRWLXT-26224](http://jira.komect.net/browse/NRWLXT-26224) 已处理 【新增域名,回源地址类型未校验】回源地址校验
[NRWLXT-26227](http://jira.komect.net/browse/NRWLXT-26227) 已处理 【域名回调接口鉴权不通过】
[NRWLXT-26230](http://jira.komect.net/browse/NRWLXT-26230) 未处理 ★【域名附件下载接口,必填参数未校验】
[NRWLXT-26235](http://jira.komect.net/browse/NRWLXT-26235) 已处理 ★【定制日志订阅失败】无法复现
@@ -0,0 +1,131 @@
> [!TIP]
> 本版本不涉及功能开发为全用例回归测试
# 67 新建企业子账号 - 已完成
```
前提:
1、IBS测试环境:https://test.p.cdn.10086.cn/
2、esop企业A账号下已存在直播加速域名:www.test1.com、www.test2.com、www.test3.com、www.test4.com
```
企业:ECName1713336738
企业客户 id2658 手机号:13028944508
直播加速域名:
```
DevReq1713336738A.komect.com
DevReq1713336738B.komect.com
DevReq1713336738C.komect.com
DevReq1713336738D.komect.com
```
新建的企业子账号手机号:13301230123
第一步:
![](../../../../attachment/images-paste/image-20240417150311508.png)
第一步验证点:
![](../../../../attachment/images-paste/image-20240417150557081.png)
第三步骤:
![](../../../../attachment/images-paste/image-20240417150727025.png)
登录需要去 iam 库的 user 表更换 password 字段和 salt 字段
# 42 新建企业工单 (cache+ 企业)- 已完成 - 已完成
![](../../../../attachment/images-paste/image-20240418103840840.png)
# 46 esop 域名配置需求工单 - 新增点播 - 已完成 - 已完成
第一步
![](../../../../attachment/images-uuid/603ca1b487ae479394a7a87e844cd664.jpg)
第六步校验位置域名已生效,配置信息正确;
其中验收报文中分发省份、回源信息是创单时的信息。这个我好像很久之前有在一个群里给你聊过。
可以把 "provinces": ["250","571"] 中的 250 去掉这样和第一步就保持一致了。
# 47 esop 域名配置需求工单 - 删除直播 - 已完成 - 已完成
```
前提:
1、IBS测试环境:https://test.p.cdn.10086.cn/
2、IBS已存在esop企业A,直播业务已开通,订购ID:202306090939,引入省公司为江苏
3、IBS已存在集团SA人员-江苏集团SA01
```
![](../../../../attachment/images-paste/image-20240418154829453.png)
![](../../../../attachment/images-paste/image-20240418154944192.png)
直播需要先停用再删除
# 48 删除 esop 自助域名 - 已完成
![](../../../../attachment/images-paste/image-20240418160424906.png)
回调接口,为什么会有鉴权问题。
# 49 esop 客户新增客响工单 - 已完成 - 已完成
```
前提:
1、IBS测试环境:https://test.p.cdn.10086.cn/
2、IBS系统已存在esop企业A,存在已生效域名test.com,绑定运营经理为江苏省运营经理001,集团SA为江苏集团SA01
```
ECName1713512655
13596872139
DevReq1713512655A.komect.com
浙江省运营经理 B
18867114444
xj 集团运营经理 B
![](../../../../attachment/images-paste/image-20240419155828480.png)
# 44 运营操作工单 -cache+ 域名配置工单 - 定制化
## 第二步
![](../../../../attachment/images-paste/image-20240419164346545.png)
1、适配开发、服务协议没有、精确域名没有、原站地址没有
![](../../../../attachment/images-paste/image-20240422150105772.png)
## 第三步
![](../../../../attachment/images-paste/image-20240422151203145.png)
这是运营经历吗?
## 第四步
![](../../../../attachment/images-paste/image-20240422151325705.png)
## 第五步
这个验证点是这个意思吗?
![](../../../../attachment/images-paste/image-20240422151800867.png)
![](../../../../attachment/images-paste/image-20240422151749965.png)
# 45 cache+ 需求变更工单 - 已完成
# 42 运营操作工单 -cache+ 域名配置工单 - 自服务 - 直播
@@ -0,0 +1,63 @@
# 验收反馈接口增加 cname 填充
![](../../../../attachment/images-paste/image-20240528100007380.png)
![](../../../../attachment/images-paste/image-20240528100022812.png)
![](../../../../attachment/images-paste/image-20240528100031641.png)
业务受理工单、商机与试用工单、试用变更工单一个处理方法。
域名配置需求工单
需求变更工单
cache+ 域名配置
cache+ 需求变更工单
问题一:cname 字段不统一
于 10.2 验收反馈接口,cname 现在你们呢返回是不是存在字段不一样的情况呀。目前看移动云是 cName,昨天你发的 001-20240515001 报文是 cname。
自己 postman 报文问题,修正后接口可识别全小写和驼峰。
# 自测
## 试用单
![](../../../../attachment/images-paste/image-20240528141519115.png)
![](../../../../attachment/images-paste/image-20240528141842840.png)
## 试用变更
![](../../../../attachment/images-paste/image-20240528142906793.png)
## 非首次
![](../../../../attachment/images-paste/image-20240528143728635.png)
## 域名配置需求
![](../../../../attachment/images-paste/image-20240528144419923.png)
![](../../../../attachment/images-paste/image-20240528150922547.png)
## 需求变更工单
![](../../../../attachment/images-paste/image-20240528151253201.png)
## cache+ 域名配置
![](../../../../attachment/images-paste/image-20240528151922437.png)
![](../../../../attachment/images-paste/image-20240528152908186.png)
## cache+ 需求变更工单
![](../../../../attachment/images-paste/image-20240528152327963.png)
## ydy
![](../../../../attachment/images-paste/image-20240528153258131.png)
@@ -0,0 +1,298 @@
# 首次开通增加业务类型限制(已冒烟自测)
## 评审问题
1. 是否涉及前置校验?(涉及)
2. BackReason 这个是怎么个字段?现在开通是直接开通的流程。(普通校验)
## 开发过程
### 第一个问题
> 1 只和 1 匹配就行,他们不会传 2,但是我们也不限制死
前置校验 因与 BBOSS 接口文档 定义的业务类型目前是:
1、点播下载网页类
4、直播类
5、超低时延直播
6、全站四层加速
7、全站七层加速
那么首次开通的前置校验只能进行 1 对应试用单 1、2、3 的匹配。
### 第二个问题
> 前置校验里做就行,创单是捎带做的
前置校验响应报文字段是:ResDetail
创单响应报文字段是:rspDesc
### 第三个问题
> 与之前保持一致就行 该加分号就加分号
前置校验的响应报文最后会有一个分号,因为这个前置校验会涉及多个可能,就都有分号。
"ResDetail": " 首次开通选择的业务类型需与试用单中的业务类型保持一致;"
创单接口是不是可以和前置校验接口报文一致一下都加分号
"rspDesc": " 首次开通选择的业务类型需与试用单中的业务类型保持一致 "
### 第四个问题
历史存在多业务类型的 50 个。
> 暂不考虑
### 提问产品
早。是这样的,我看最新的 26 的文档,关于(2.1 首次开通增加业务类型限制),没有变化,您和豪哥有沟通吗?
1. 这个需求会涉及两个接口
1. BBOSS 接口文档的(3.11.提单前置校验),这个接口可以理解为 BBOSS 在调用创单接口前会调用一下这个接口进行参数校验提高创单成功率;关于前置校验接口的 `BusiType` 只有 1、4、5、6、7,我请教鹏豪说是现在 BBOSS 点播产品只会试用 1。您可以确认知晓一下。我这边校验只会 1 对 1 进行校验。
2. BBOSS 接口文档的(3.3.业务受理信息同步),这个是创单接口。
2. 两个接口的响应描述字段不同
1. 前置校验响应报文字段是:ResDetail
2. 创单响应报文字段是:rspDesc
3. 前置校验的响应报文最后会有一个分号(因为历史前置校验会涉及多个异常拼接),创单接口无分号。
1. 前置校验:"ResDetail": " 首次开通选择的业务类型需与试用单中的业务类型保持一致;"
2. 创单接口:"rspDesc": " 首次开通选择的业务类型需与试用单中的业务类型保持一致 "
4. 接口文档描述的(退回原因(BackReason))会有一些歧义,这个其实是校验异常异常抛出拒收。也没有 BackReason 这个字段。我们和 BBOSS 交互是真的存在退回的,只不过场景是比如创单成功,BPM 驳回,我们退回 BBOSS。
## 自测流程
### 试用 1 开通其他
前置校验
```json
"ResDetail": "业务类型有误,只支持1、4、5、6、7;首次开通选择的业务类型需与试用单中的业务类型保持一致;"
"ResDetail": "首次开通选择的业务类型需与试用单中的业务类型保持一致;"
```
开通接口
```json
"rspDesc": "首次开通选择的业务类型需与试用单中的业务类型保持一致;"
```
## 冒烟评审
1. 前置校验侧类型;
2. 响应报文字段不一样;
3. 响应报文内容有 ; 号。
# IBS 与 BPM 平面名称及平面字段交互方式调整
## 开发问题
## 开发过程
### 4.2(域名操作反馈)
逻辑看目前就是 code 值,请产品二次确认。
### 9.1(通用运维任务单创建)
逻辑看目前就是 code 值,请产品二次确认。
### 9.2(通用任务状态回传)
问题 1:这个地方存在值不对应的问题
com.cmcc.cdn.platform.selfservice.service.bpm.impl.BpmDnsTaskServiceImpl#ydyDomainDeleteCallBack
### 10.3(业务适配单阶段反馈)- 已完成
问题 1PlaneEvaluationInfo 中的 plainName 是否还是保持汉字名称
> 高峰:传的是平面编码
问题 2:然后咋们字段类型还是保持原来的 String 吧。
> 高峰:是的
1. 商机与试用工单(已完成)
2. 试用变更工单(已完成)
3. 业务受理工单(已完成)
4. 域名配置工单(已完成)
5. 需求变更工单(已完成)
6. cache+ 域名配置(已完成)
7. 移动云定制化域名工单(无修改)
8. cache+ 需求变更工单(已完成)
9. 增值业务工单(无修改)
#### 自测
### 10.2(业务适配单验收反馈)- 已完成
问题 1:补充接口文档说明
已改完,通过字段反向查找
![](../../../../attachment/images-paste/image-20240522164745524.png)
# 企业信息与域名信息打通
## 开发问题
## 开发过程
点播控制台
```
http://dev.p.cdn.10086.cn:8080/configManage/list/getDomainData
字段:cpId
```
直播控制台
```
http://dev.p.cdn.10086.cn:8080/live/order/liveDomainList
字段:cpId
```
企业管理
```
http://dev.p.cdn.10086.cn:8080/selfService/enterprise/info/list?pageNum=1&pageSize=10&enterName=&enterProvince=&contactName=&operatorManage=&source=BSS&bizStatus=&support=
字段:enterpriseCpid(历史就有直接延续试用)
```
## 自测流程
## 冒烟评审
1. 注意测试数据,是否存在 cpid 不是 8 位的。
# cache+ 域名入口优化
问题 1 如果出现正在流转中的工单被退回怎么办。
问题 2 是否只处理 cache+ 工单种类。
省运营经理:有
集团企业客户:有
conflict
# 国际 CDN 业务承接
prodType
1. 现有工单流程保持不变,平面新增一个**国际 CDN 平面**,做业务区分,产品类型新增**国际 CDN**,仅做工单流程对接。
2. 跟 bpm 对接
- bpm 返回的平面字段信息(plains),新增国际平面枚举,参数增加“5:国际平面”。涉及 4.2(域名操作反馈)、9.1(通用运维任务单创建)、9.2(通用任务状态回传)、10.3(业务适配单阶段反馈)10.2(业务适配单验收反馈)章节
- prodType 字段新增枚举: 4 国际 CDN。涉及 9.1(通用运维任务单创建) 、10.1(业务适配变更流程接口)章节
3. 跟集客大厅对接
- 试用产品类型 prodType 字段, 新增枚举**4:国际 CDN**。
4. 页面展示,IBS 涉及 22 个页面平面信息展示,本次修改点播业务运维 - 配置管理、直播控制台 - 域名管理修改,其他页面的平面信息暂不变。
风险点:
1、由于本次需求仅涉及工单流程适配,不涉及运营数据、话单数据、域名配置等业务对接,业务相关服务将不可用,包含运营数据、话单数据、日志数据查询及下载,配置管理、停启用等域名操作,内容管理(预热、刷新)。
2、由于 IBS 当前已实现与配管自助对接,在配管对接国际平面前,若客户做域名停启用、内容管理等相关的操作,将会导致工单告警。
3、试用、商用单涉及的域名停启用联动将不可用(试用暂停/恢复工单、业务暂停/恢复工单)。
4、加产品类型,无法同时试用国内业务跟海外业务
```
# API接口
相关注释:操作域名 recieve livestream domain operation from PSVN
/action?commandType=manageLiveStream&version=1
相关注释:psvn的流程,下发到omc,接口参数同原大云,增加备案号和证书id
/action?commandType=manageDomain&version=1
相关注释:证书接口:上传 saveCrt from third party
POST和PUT
/action?commandType=saveCrt&version=1
# 页面接口
/configManage/livestream/domain/remove
```
页面接口位置:
![](../../../../attachment/images-uuid/ba5b5040d5d24c25ada7834da6dfb4d0.png)
@姬高峰 评估了一下国际平面的直播模块,针对 直播控制台 配置 按钮对应页面工作量比较大,7.1.0 版本无法实现,因为历史直播对应相应的子功能均是定制化设计的,无法通用。引入新的平面需要重新评估需求。
影响流程:国际平面需求变更工单无法使用、国际平面自助域名无法使用(建议前端针对国际平面域名隐藏自助选项)
# 冒烟自测
## 首次开通类型与试用不一致(已完成)
## esop 域名停用 - 自研 1.0
## cache+ 域名删除 - 自研 1.0
## esop 企业触发部署证书 - 自研 1.0
## 试用单 - 自研 1.0(需晓宇处理)
需要晓宇看下平面名称转换问题。
## 新增域名 - 自研 2.0
前提,第二点 我看下边 "TestType": "2" ,那么这个试用单也要是 "TestType": "2" 的。
第五步,步骤 你看你还要加个请求体吗?(嗯嘛, 成。)
第五步,验证点 平面展示为自研 2.0 晓宇处理。
## 非首次开通 - 自研 1.0
## 集团超管子账号点击网页开通订购跳转域名管理页面(已完成)
1、IBS 测试环境:https://test.p.cdn.10086.cn/
2、IBS 系统已存在 esop 企业 A,企业标识:83561954;已开通网页加速产品,订购:202405081608
3、集团超管子账号:18889000000cmcc
## 省运营经理账号查看 cache+ 域名入口(已完成)
已完成
## 省运营经理账号删除点播业务运维域名(域名管理)
## 省运营经理账号删除点播业务运维域名(批量域名管理)
## 集团企业账号查看 cache+ 域名入口(已完成)
差工单两个字(已完成)
![](../../../../attachment/images-uuid/2da4a5faf3d9479aa88dfa92a2642cfc.png)
## 试用单 - 国际 CDN- 点播 - 集团
第四步,验证点 工单详情展示适配平面为【国际平面】需晓宇确认。
第四步,验证点 时间状态正确(查看数据库)看哪个数据库,教我下呗。(t_cdn_product_info
第六步,步骤 调用部署验收反馈接口试用开始时间不能为空 try_time(已处理)
## 首次开通国际 CDN 业务
第一步,步骤 调用业务开通接口 ProdType 应该是 4 (已处理)
第三部,步骤 是不是登录企业账号看首页?(是的)
![](../../../../attachment/images-paste/image-20240612090800863.png)
@@ -0,0 +1,814 @@
# 3.5 IBS 与 BPM 平面名称及平面字段交互方式调整
网宿平面不再使用。
直播:华为平面、自研 RTMP、国际平面
点播:自研 1.0、华为平面、中兴平面、自研 2.0、国际平面
## 试用单(适配接口:点播:自研 1.0、华为平面、中兴平面)
### 集团业务管理员接单并分配集团运营经理
### 集团运营经理受理下发 BPM
### 下发报文
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"06131036_03","createDate":"2024-06-13 10:36:21","data":{"cdn_type":"web","domains":["DevReq1718246167A.komect.com"],"filelist":[{"name":"InfoSecurity.xls"},{"name":"BusiInfo.xls"}],"nameOfClient":"ECName1718246167","numberOfDoamin":1,"operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","sourceBasis":"06131036_03","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":"","titleOfDemand":"商机与试用工单"},"processType":"0","prodType":"4","province":"JT","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
![](../../../../attachment/images-paste/image-20240613103709298.png)
### BPM 阶段反馈
```json
{"code":"06131036_03","plains":["1","2","0"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1718246639000,"plainName":"2","resultOfEstimate":"可支持"},{"capacity":"可满足","estimatedCompletionDate":1718246639000,"plainName":"0","resultOfEstimate":"可支持"},{"capacity":"可满足","estimatedCompletionDate":1718246639000,"plainName":"1","resultOfEstimate":"可支持"}],"resultOfPolicy":"1","userId":"24"}
```
![](../../../../attachment/images-paste/image-20240613104639094.png)
### 工单详情页
![](../../../../attachment/images-paste/image-20240613104726670.png)
### BPM 验收反馈
```json
{"approve":0,"code":"06131036_03","plain_info":[{"approve":0,"domain_pre_info":[{"cname":"123","domain":"DevReq1718246167A.komect.com","httpSelection":{},"plain_name":"2","provinces":[],"schedule_type":"CNAME","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"2"},{"approve":0,"domain_pre_info":[{"cname":"123","domain":"DevReq1718246167A.komect.com","httpSelection":{},"plain_name":"1","provinces":[],"schedule_type":"CNAME","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"1"},{"approve":0,"domain_pre_info":[{"cname":"123","domain":"DevReq1718246167A.komect.com","httpSelection":{},"plain_name":"0","provinces":[],"schedule_type":"CNAME","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"0"}],"try_time":1718247347000,"user_id":"24"}
```
![](../../../../attachment/images-paste/image-20240613105647905.png)
### 域名列表
![](../../../../attachment/images-paste/image-20240613105801243.png)
### 域名详情
![](../../../../attachment/images-paste/image-20240613105818586.png)
## 试用变更单(适配接口:点播:自研 2.0、国际平面)
### 集团业务管理员接单并分配集团运营经理
### 集团运营经理受理下发 BPM
### 下发报文
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"06131105_00","createDate":"2024-06-13 11:06:01","data":{"cdn_type":"web","cpId":"83540185","domains":["DevReq1718247947A.komect.com"],"filelist":[{"name":"InfoSecurity.xlsx"},{"name":"BusiInfo.xlsx"}],"nameOfClient":"ECName1718246167","numberOfDoamin":1,"operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","sourceBasis":"06131105_00","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":"","titleOfDemand":"试用变更工单"},"processType":"1","prodType":"4","province":"JT","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
![](../../../../attachment/images-paste/image-20240613110808407.png)
### BPM 阶段反馈
```json
{"code":"06131105_00","plains":["4","5"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1718248544000,"plainName":"4","resultOfEstimate":"可支持"},{"capacity":"可满足","estimatedCompletionDate":1718248544000,"plainName":"5","resultOfEstimate":"可支持"}],"resultOfPolicy":"1","userId":"24"}
```
![](../../../../attachment/images-paste/image-20240613112336954.png)
### 工单详情页
![](../../../../attachment/images-paste/image-20240613112414841.png)
### BPM 验收反馈
```json
{"approve":0,"code":"06131105_00","plain_info":[{"approve":0,"domain_pre_info":[{"cname":"1234","domain":"DevReq1718247947A.komect.com","httpSelection":{},"plain_name":"5","provinces":[],"schedule_type":"CNAME","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"5"},{"approve":0,"domain_pre_info":[{"cname":"1234556","domain":"DevReq1718247947A.komect.com","httpSelection":{},"plain_name":"4","provinces":[],"schedule_type":"CNAME","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"4"}],"user_id":"24"}
```
![](../../../../attachment/images-paste/image-20240613142511144.png)
### 域名列表
![](../../../../attachment/images-paste/image-20240613142647093.png)
### 域名详情
![](../../../../attachment/images-paste/image-20240613142702913.png)
## 业务开通单(通用运维接口:自研 1.0、华为平面、中兴平面、自研 2.0、国际平面)
### ibs 接收工单直接下发 BPM
```json
{"accessSystem":"IBS","account":"CDN-IBS","data":{"tyywrwlcdx":{"businessStartTime":"2024-06-13 16:26:41","cdn_type":"web","code":"06131430_52","createDate":"2024-06-13 16:26:43","create_time":"2024-06-13 16:26:43","domains":["DevReq1718246167A.komect.com","DevReq1718247947A.komect.com"],"nameOfClient":"ECName1718246167","operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","plains":["2","1","0","5","4"],"pro_content":"业务开通(处理业务开通工单), web, 域名列表: DevReq1718246167A.komect.com,DevReq1718247947A.komect.com","pro_title":"业务开通(处理业务开通工单)","prodType":"4","province":"JT","task_first_class":"3","task_second_class":"5","triggerMode":"manualTrigger","user_id":"921"}},"flowKey":"tyywrwlc"}
```
![](../../../../attachment/images-paste/image-20240613162735662.png)
### BPM 页面
![](../../../../attachment/images-uuid/22eb118216a041858f4e32868ee5f4f4.png)
## 非首次开通(适配接口:直播:自研 RTMP)
### 集团业务管理员接单并分配集团运营经理
### 集团运营经理受理下发 BPM
### 下发报文
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"06131725_31","createDate":"2024-06-13 17:26:30","data":{"cdn_type":"liveStream","cpId":"83540185","domains":["DevReq1718270775A.komect.com"],"filelist":[{"name":"InfoSecurity.xlsx"},{"name":"BusiInfo.xlsx"}],"nameOfClient":"ECName1718246167","numberOfDoamin":1,"operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","sourceBasis":"06131725_31","sourceOfDemand":"IBS平台","summaryOfDemand":"","titleOfDemand":"ECName1718246167业务开通工单"},"processType":"2","prodType":"1","province":"JT","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
![](../../../../attachment/images-paste/image-20240613172927625.png)
### BPM 阶段反馈
```json
{"code":"06131725_31","plains":["-1"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1718271352000,"plainName":"-1","resultOfEstimate":"可支持"}],"resultOfPolicy":"1","userId":"24"}
```
![](../../../../attachment/images-paste/image-20240614093905101.png)
### BPM 验收反馈
直播响应体
```json
{"approve":0,"code":"06131725_31","open_time":1718273159000,"plain_info":[{"approve":0,"domain_pre_info":[{"domain":"DevReq1718270775A.komect.com"}],"plain_name":"-1"}],"user_id":"24"}
```
### 域名列表
![](../../../../attachment/images-paste/image-20240614094205287.png)
### 域名详情
![](../../../../attachment/images-paste/image-20240614094216844.png)
## 域名配置需求(适配接口:直播:华为平面:多域名)
### 政企客户经理提单
![](../../../../attachment/images-paste/image-20240614094643149.png)
### 集团客户经理管理员收单下发 BPM
### 下发报文
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"001-20240614001","data":{"cdn_type":"liveStream","cpId":"83540185","domains":["20240614094519.komect.com","20240614094546.komect.com"],"filelist":[{"fileId":"ghahzrbms1v5d0ew8zfw2grmm","name":"信安导入模板.xls"}],"nameOfClient":"ECName1718246167","sourceBasis":"001-20240614001","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":""},"processType":"3","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
![](../../../../attachment/images-paste/image-20240614095005891.png)
### BPM 阶段反馈
```json
{"code":"001-20240614001","plains":["1"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1718330764000,"plainName":"1","resultOfEstimate":"可支持"}],"resultOfPolicy":"1","userId":"24"}
```
![](../../../../attachment/images-paste/image-20240614101647937.png)
### BPM 验收反馈
```json
{"approve":0,"code":"001-20240614001","plain_info":[{"approve":0,"domain_pre_info":[{"domain":"20240614094519.komect.com"},{"domain":"20240614094546.komect.com"}],"plain_name":"1"}],"user_id":"24"}
```
![](../../../../attachment/images-paste/image-20240614101717978.png)
### 域名列表
![](../../../../attachment/images-paste/image-20240614101828135.png)
### 域名详情
![](../../../../attachment/images-paste/image-20240614101841785.png)
## 需求变更(适配接口:点播:中兴平面,华为平面,自研 1.0)
### 政企客户经理提单下发 BPM
### 下发报文
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"002-20240614001","data":{"cdn_type":"web","cpId":"83540185","domains":["DevReq1718246167A.komect.com"],"nameOfClient":"ECName1718246167","operMail":"18777777777@139.com","operTel":"18777777777","operUser":"18777777777cmcc","sourceBasis":"002-20240614001","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":""},"processType":"4","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
![](../../../../attachment/images-paste/image-20240614143050017.png)
### 阶段反馈
```json
{"code":"002-20240614001","plains":["0","1","2"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1718346064000,"plainName":"0","resultOfEstimate":"可支持"},{"capacity":"可满足","estimatedCompletionDate":1718346064000,"plainName":"2","resultOfEstimate":"可支持"},{"capacity":"可满足","estimatedCompletionDate":1718346064000,"plainName":"1","resultOfEstimate":"可支持"}],"resultOfPolicy":"1","userId":"24"}
```
![](../../../../attachment/images-paste/image-20240614142903117.png)
### 验收反馈
```json
{"approve":0,"code":"002-20240614001","plain_info":[{"approve":0,"domain_pre_info":[{"cname":"123","domain":"DevReq1718246167A.komect.com","httpSelection":{},"plain_name":"2","provinces":[],"schedule_type":"CNAME","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"2"},{"approve":0,"domain_pre_info":[{"domain":"DevReq1718246167A.komect.com","httpSelection":{},"plain_name":"1","provinces":[],"schedule_type":"Forward","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"1"},{"approve":0,"domain_pre_info":[{"cname":"123","domain":"DevReq1718246167A.komect.com","httpSelection":{},"plain_name":"0","provinces":[],"schedule_type":"CNAME","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"0"}],"user_id":"24"}
```
![](../../../../attachment/images-paste/image-20240614143004580.png)
### 域名列表
![](../../../../attachment/images-paste/image-20240614143114253.png)
### 域名详情
![](../../../../attachment/images-paste/image-20240614143129816.png)
## 域名删除(通用运维:点播:中兴平面,华为平面,自研 1.0)
### 集团运营经理点击删除
### 下发报文
```json
{"accessSystem":"IBS","account":"CDN-IBS","data":{"tyywrwlcdx":{"cdn_type":"web","code":"hA76ngilngb9R8iv","create_time":"2024-06-14 14:35:34","domains":["DevReq1718246167A.komect.com"],"nameOfClient":"ECName1718246167","operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","plains":["2","1","0"],"pro_content":"域名操作(域名删除), web, 域名列表: DevReq1718246167A.komect.com","pro_title":"域名操作(域名删除)","task_first_class":"2","task_second_class":"2","triggerMode":"manualTrigger","user_id":"24"}},"flowKey":"tyywrwlc"}
```
![](../../../../attachment/images-paste/image-20240614143544335.png)
### BPM 反馈
```json
{"account":"CDN-IBS","code":"hA76ngilngb9R8iv","feedback_time":"2024-06-14 14:54:54","plain_info":[{"message":"1","plain_name":"2","result":"处理成功"},{"message":"1","plain_name":"1","result":"处理成功"},{"message":"1","plain_name":"0","result":"处理成功"}],"result":"处理成功"}
```
![](../../../../attachment/images-paste/image-20240614145141678.png)
### 域名已删除
![](../../../../attachment/images-paste/image-20240614145337494.png)
![](../../../../attachment/images-paste/image-20240614145230701.png)
## 域名删除(通用运维:点播:国际平面,自研 2.0)
### 集团运营经理点击删除
### 下发报文
```json
{"accessSystem":"IBS","account":"CDN-IBS","data":{"tyywrwlcdx":{"cdn_type":"web","code":"ns6TQpfEBHRybuDx","create_time":"2024-06-14 15:50:05","domains":["DevReq1718351147A.komect.com"],"nameOfClient":"ECName1718351147","operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","plains":["4","5"],"pro_content":"域名操作(域名删除), web, 域名列表: DevReq1718351147A.komect.com","pro_title":"域名操作(域名删除)","task_first_class":"2","task_second_class":"2","triggerMode":"manualTrigger","user_id":"1458"}},"flowKey":"tyywrwlc"}
```
![](../../../../attachment/images-paste/image-20240614155017098.png)
### BPM 反馈
```json
{"account":"CDN-IBS","code":"ns6TQpfEBHRybuDx","feedback_time":"2024-06-14 16:02:32","plain_info":[{"message":"1","plain_name":"4","result":"处理成功"},{"message":"1","plain_name":"5","result":"处理成功"}],"result":"处理成功"}
```
![](../../../../attachment/images-paste/image-20240614155815339.png)
### 域名已删除
![](../../../../attachment/images-paste/image-20240614155847628.png)
![](../../../../attachment/images-paste/image-20240614155833396.png)
## 域名停用(直播:自研 RTMP)
```json
{"accessSystem":"IBS","account":"CDN-IBS","data":{"tyywrwlcdx":{"cdn_type":"liveStream","code":"Cqqu5sKfpPF1Z3Xm","create_time":"2024-06-14 16:02:16","domains":["DevReq1718270775A.komect.com"],"nameOfClient":"ECName1718246167","operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","plains":["-1"],"pro_content":"域名操作(域名停用), liveStream, 域名列表: DevReq1718270775A.komect.com","pro_title":"域名操作(域名停用)","task_first_class":"2","task_second_class":"3","triggerMode":"manualTrigger","user_id":"24"}},"flowKey":"tyywrwlc"}
```
![](../../../../attachment/images-paste/image-20240614160230544.png)
```json
{"account":"admin","code":"Cqqu5sKfpPF1Z3Xm","feedback_time":"2024-06-14 16:11:31","plain_info":[{"plain_name":"-1","result":"处理成功"}],"result":"处理成功"}
```
![](../../../../attachment/images-paste/image-20240614160700525.png)
![](../../../../attachment/images-paste/image-20240614160621276.png)
![](../../../../attachment/images-paste/image-20240614160631979.png)
## 域名停用(直播:华为)
```json
{"accessSystem":"IBS","account":"CDN-IBS","data":{"tyywrwlcdx":{"cdn_type":"liveStream","code":"PknylThRnkULk6fB","create_time":"2024-06-14 16:07:50","domains":["20240614094519.komect.com"],"nameOfClient":"ECName1718246167","operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","plains":["1"],"pro_content":"域名操作(域名停用), liveStream, 域名列表: 20240614094519.komect.com","pro_title":"域名操作(域名停用)","task_first_class":"2","task_second_class":"3","triggerMode":"manualTrigger","user_id":"921"}},"flowKey":"tyywrwlc"}
```
![](../../../../attachment/images-paste/image-20240614160800022.png)
```json
{"account":"admin","code":"PknylThRnkULk6fB","feedback_time":"2024-06-14 16:14:11","plain_info":[{"plain_name":"1","result":"处理成功"}],"result":"处理成功"}
```
![](../../../../attachment/images-paste/image-20240614162139992.png)
![](../../../../attachment/images-paste/image-20240614162201287.png)
![](../../../../attachment/images-paste/image-20240614162210901.png)
## 域名删除(直播:华为)
```json
{"accessSystem":"IBS","account":"CDN-IBS","data":{"tyywrwlcdx":{"cdn_type":"liveStream","code":"1aCpFclymVbjcccv","create_time":"2024-06-14 16:22:59","domains":["20240614094519.komect.com"],"nameOfClient":"ECName1718246167","operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","plains":["1"],"pro_content":"域名操作(域名删除), liveStream, 域名列表: 20240614094519.komect.com","pro_title":"域名操作(域名删除)","task_first_class":"2","task_second_class":"2","triggerMode":"manualTrigger","user_id":"921"}},"flowKey":"tyywrwlc"}
```
![](../../../../attachment/images-paste/image-20240614162305507.png)
```json
{"account":"admin","code":"1aCpFclymVbjcccv","feedback_time":"2024-06-14 16:29:26","plain_info":[{"plain_name":"1","result":"处理成功"}],"result":"处理成功"}
```
![](../../../../attachment/images-paste/image-20240614162529023.png)
![](../../../../attachment/images-paste/image-20240614162450803.png)
![](../../../../attachment/images-paste/image-20240614162501318.png)
## 删除域名(直播:自研 RTMP)
```json
{"accessSystem":"IBS","account":"CDN-IBS","data":{"tyywrwlcdx":{"cdn_type":"liveStream","code":"IJ24vGeiqIQ8cbWY","create_time":"2024-06-14 16:25:55","domains":["DevReq1718270775A.komect.com"],"nameOfClient":"ECName1718246167","operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","plains":["-1"],"pro_content":"域名操作(域名删除), liveStream, 域名列表: DevReq1718270775A.komect.com","pro_title":"域名操作(域名删除)","task_first_class":"2","task_second_class":"2","triggerMode":"manualTrigger","user_id":"24"}},"flowKey":"tyywrwlc"}
```
![](../../../../attachment/images-paste/image-20240614162616384.png)
```json
{"account":"admin","code":"IJ24vGeiqIQ8cbWY","feedback_time":"2024-06-14 16:32:50","plain_info":[{"plain_name":"-1","result":"处理成功"}],"result":"处理成功"}
```
![](../../../../attachment/images-paste/image-20240614164855966.png)
![](../../../../attachment/images-paste/image-20240614164834143.png)
![](../../../../attachment/images-paste/image-20240614164909060.png)
## cache+ 集团企业客户 定制化 点播
### 集团企业客户发单
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"004-20240617001","createDate":"2024-06-17 09:46:46","data":{"cacheOrderSource":"1","cdn_type":"download","cpId":"80004385","domains":["20240617094513.komect.com","20240617094518.komect.com"],"filelist":[],"nameOfClient":"龙哥的王婆和大虾(信息港店)","operMail":"13145972144@139.com","operTel":"13145972144","operUser":"13145972144cmcc","sourceBasis":"004-20240617001","sourceOfDemand":"Cache+IBS平台)","summaryOfDemand":""},"processType":"6","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"}]}
```
![](../../../../attachment/images-paste/image-20240617094714328.png)
```json
{"approve":0,"code":"004-20240617001","plain_info":[{"approve":0,"domain_pre_info":[{"domain":"20240617094513.komect.com","httpSelection":{},"plain_name":"2","provinces":[],"schedule_type":"Forward","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]},{"domain":"20240617094518.komect.com","httpSelection":{},"plain_name":"2","provinces":[],"schedule_type":"Forward","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"2"},{"approve":0,"domain_pre_info":[{"domain":"20240617094513.komect.com","httpSelection":{},"plain_name":"5","provinces":[],"schedule_type":"Forward","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]},{"domain":"20240617094518.komect.com","httpSelection":{},"plain_name":"5","provinces":[],"schedule_type":"Forward","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"5"},{"approve":0,"domain_pre_info":[{"domain":"20240617094513.komect.com","httpSelection":{},"plain_name":"1","provinces":[],"schedule_type":"Forward","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]},{"domain":"20240617094518.komect.com","httpSelection":{},"plain_name":"1","provinces":[],"schedule_type":"Forward","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"1"},{"approve":0,"domain_pre_info":[{"cname":"123","domain":"20240617094513.komect.com","httpSelection":{},"plain_name":"4","provinces":[],"schedule_type":"CNAME","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]},{"cname":"123","domain":"20240617094518.komect.com","httpSelection":{},"plain_name":"4","provinces":[],"schedule_type":"CNAME","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"4"},{"approve":0,"domain_pre_info":[{"domain":"20240617094513.komect.com","httpSelection":{},"plain_name":"0","provinces":[],"schedule_type":"Forward","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]},{"domain":"20240617094518.komect.com","httpSelection":{},"plain_name":"0","provinces":[],"schedule_type":"Forward","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"0"}],"user_id":"24"}
```
![](../../../../attachment/images-paste/image-20240617101623567.png)
![](../../../../attachment/images-paste/image-20240617101708204.png)
![](../../../../attachment/images-paste/image-20240617101726817.png)
![](../../../../attachment/images-paste/image-20240617101735416.png)
![](../../../../attachment/images-paste/image-20240617101804587.png)
## cache+ 集团企业客户 定制化 直播
### 集团企业客户发单
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"004-20240617002","createDate":"2024-06-17 10:26:35","data":{"cacheOrderSource":"1","cdn_type":"liveStream","cpId":"80004385","domains":["20240617102558.komect.com"],"filelist":[{"fileId":"s1qxtx8pofa67kmgqu88htqke","name":"测试备用附件.docx"}],"nameOfClient":"龙哥的王婆和大虾(信息港店)","operMail":"13145972144@139.com","operTel":"13145972144","operUser":"13145972144cmcc","sourceBasis":"004-20240617002","sourceOfDemand":"Cache+IBS平台)","summaryOfDemand":""},"processType":"6","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"}]}
```
![](../../../../attachment/images-paste/image-20240617102835879.png)
```json
{"code":"004-20240617002","plains":["-1"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1718591651000,"plainName":"-1","resultOfEstimate":"可支持"}],"resultOfPolicy":"1","userId":"24"}
```
![](../../../../attachment/images-paste/image-20240617104331619.png)
```json
{"approve":0,"code":"004-20240617002","plain_info":[{"approve":0,"domain_pre_info":[{"domain":"20240617102558.komect.com"}],"plain_name":"-1"}],"user_id":"24"}
```
![](../../../../attachment/images-paste/image-20240617104355511.png)
![](../../../../attachment/images-paste/image-20240617104409233.png)
![](../../../../attachment/images-paste/image-20240617104420203.png)
![](../../../../attachment/images-paste/image-20240617104439121.png)
## cache+ 集团企业客户 定制化 直播
### 集团企业客户发单
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"004-20240617003","createDate":"2024-06-17 10:46:18","data":{"cacheOrderSource":"1","cdn_type":"liveStream","cpId":"80004385","domains":["20240617104532.komect.com"],"filelist":[{"fileId":"xcvbfk3psbdmaxg2fpkjrnsrk","name":"测试备用附件.docx"}],"nameOfClient":"龙哥的王婆和大虾(信息港店)","operMail":"13145972144@139.com","operTel":"13145972144","operUser":"13145972144cmcc","sourceBasis":"004-20240617003","sourceOfDemand":"Cache+IBS平台)","summaryOfDemand":""},"processType":"6","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"}]}
```
![](../../../../attachment/images-paste/image-20240617104659988.png)
```json
{"code":"004-20240617003","plains":["1"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1718592581000,"plainName":"1","resultOfEstimate":"可支持"}],"resultOfPolicy":"1","userId":"24"}
```
![](../../../../attachment/images-paste/image-20240617105139838.png)
```json
{"approve":0,"code":"004-20240617003","plain_info":[{"approve":0,"domain_pre_info":[{"domain":"20240617104532.komect.com"}],"plain_name":"1"}],"user_id":"24"}
```
![](../../../../attachment/images-paste/image-20240617105158796.png)
![](../../../../attachment/images-paste/image-20240617105213698.png)
![](../../../../attachment/images-paste/image-20240617105222601.png)
![](../../../../attachment/images-paste/image-20240617105244788.png)
## cache+ 需求变更(直播)
### 直接下发 BPM
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"005-20240617001","data":{"cacheOrderSource":"1","cdn_type":"liveStream","cpId":"80004385","domains":["20240617104532.komect.com"],"nameOfClient":"龙哥的王婆和大虾(信息港店)","operMail":"13145972144@139.com","operTel":"13145972144","operUser":"13145972144cmcc","sourceBasis":"005-20240617001","sourceOfDemand":"Cache+IBS平台)","summaryOfDemand":""},"processType":"7","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"}]}
```
![](../../../../attachment/images-paste/image-20240617105406235.png)
### BPM 跳转 IBS 进行域名配置触发通用运维下发
```json
{"accessSystem":"IBS","account":"CDN-IBS","data":{"tyywrwlcdx":{"cdn_type":"liveStream","code":"WMJZ7TQlsytYbiCC","create_time":"2024-06-17 11:12:33","domains":["20240617104532.komect.com"],"nameOfClient":"龙哥的王婆和大虾(信息港店)","operMail":"18867103572@139.com","operTel":"18867103572","operUser":"18867103572cmcc","plains":["1"],"pro_content":"域名操作(直播域名修改), liveStream, 域名列表: 20240617104532.komect.com","pro_title":"域名操作(直播域名修改)","task_first_class":"2","task_second_class":"6","triggerMode":"manualTrigger","user_id":"24"}},"flowKey":"tyywrwlc"}
```
![](../../../../attachment/images-paste/image-20240617111609578.png)
### 通用运维回传
```json
{"account":"admin","code":"WMJZ7TQlsytYbiCC","feedback_time":"2024-06-17 11:23:59","plain_info":[{"plain_name":"1","result":"处理成功"}],"result":"处理成功"}
```
![](../../../../attachment/images-paste/image-20240617140710694.png)
### 适配回传
```json
{"approve":0,"code":"005-20240617001","plain_info":[{"approve":0,"domain_pre_info":[{"domain":"20240617104532.komect.com"}],"plain_name":"1"}],"user_id":"24"}
```
![](../../../../attachment/images-paste/image-20240617140729425.png)
### 工单列表
![](../../../../attachment/images-paste/image-20240617141115178.png)
![](../../../../attachment/images-paste/image-20240617141126554.png)
### 域名详情
![](../../../../attachment/images-paste/image-20240617141207311.png)
![](../../../../attachment/images-paste/image-20240617141227258.png)
## cache+ 需求变更(点播)
### 直接下发 BPM
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"005-20240617002","data":{"cacheOrderSource":"1","cdn_type":"download","cpId":"80004385","domains":["20240617094513.komect.com","20240617094518.komect.com"],"nameOfClient":"龙哥的王婆和大虾(信息港店)","operMail":"13145972144@139.com","operTel":"13145972144","operUser":"13145972144cmcc","sourceBasis":"005-20240617002","sourceOfDemand":"Cache+IBS平台)","summaryOfDemand":"变更为自研1.0。"},"processType":"7","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"}]}
```
![](../../../../attachment/images-paste/image-20240617141551965.png)
```json
{"approve":0,"code":"005-20240617002","plain_info":[{"approve":0,"domain_pre_info":[{"cname":"1.1.1.1","domain":"20240617094513.komect.com","httpSelection":{},"plain_name":"0","provinces":[],"schedule_type":"CNAME","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]},{"cname":"123","domain":"20240617094518.komect.com","httpSelection":{},"plain_name":"0","provinces":[],"schedule_type":"CNAME","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"0"}],"user_id":"24"}
```
![](../../../../attachment/images-paste/image-20240617142817131.png)
![](../../../../attachment/images-paste/image-20240617142830851.png)
![](../../../../attachment/images-paste/image-20240617142842157.png)
![](../../../../attachment/images-paste/image-20240617142857066.png)
![](../../../../attachment/images-paste/image-20240617142913601.png)
![](../../../../attachment/images-paste/image-20240617142925826.png)
## 移动云
### 接口下发 BPM
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"20240617151441","data":{"cdn_type":"web","cpId":"81113332","domain_base":"{\"订购关系\":\"16667120010000\",\"IPV6开关\":\"关闭\",\"服务协议\":\"HTTP\",\"运营商\":\"移动\"}","domains":["dzh20240617151441.com"],"nameOfClient":"myltes移动云企业","numberOfDoamin":1,"sourceBasis":"20240617151441","sourceOfDemand":"移动云(IBS平台)","sources":[{"back_addr":"23.23.23.23","back_protocol":0,"primary":true,"type":"ip"}],"titleOfDemand":"myltes移动云企业域名配置需求工单"},"processType":"4","userList":[{"userName":"DYUN_page_1598933032577","userTel":"13245678966"}]}
```
![](../../../../attachment/images-paste/image-20240617151530843.png)
```json
{"approve":0,"code":"20240617151441","plain_info":[{"approve":0,"domain_pre_info":[{"domain":"dzh20240617151441.com","httpSelection":{},"plain_name":"1","provinces":[],"schedule_type":"Forward","server_domain":["23.23.23.23"],"sources":[{"back_addr":"23.23.23.23","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"1"}],"user_id":"24"}
```
![](../../../../attachment/images-paste/image-20240617154005408.png)
![](../../../../attachment/images-paste/image-20240617154053468.png)
![](../../../../attachment/images-paste/image-20240617154103657.png)
## 移动云删除
```json
{"accessSystem":"IBS","account":"CDN-IBS","data":{"tyywrwlcdx":{"cdn_type":"web","code":"20240617154025","create_time":"2024-06-17 15:40:53","domains":["dzh20240617151441.com"],"nameOfClient":"myltes移动云企业","operMail":"13245678966@virtual.com","operTel":"13245678966","operUser":"IBS平台","plains":["1"],"pro_content":"域名操作(域名删除), web, 域名列表: dzh20240617151441.com","pro_title":"域名操作(域名删除)","task_first_class":"2","task_second_class":"2","triggerMode":"autoTrigger","user_id":"1784"}},"flowKey":"tyywrwlc"}
```
![](../../../../attachment/images-paste/image-20240617154142874.png)
![](../../../../attachment/images-paste/image-20240617154121288.png)
```json
{"account":"admin","code":"20240617154025","feedback_time":"2024-06-17 15:50:00","plain_info":[{"plain_name":"1","result":"处理成功"}],"result":"处理成功"}
```
![](../../../../attachment/images-paste/image-20240617154501261.png)
![](../../../../attachment/images-paste/image-20240617154520136.png)
## 非首次开通国际 CDN
### 集团业务管理员接单并分配集团运营经理
### 集团运营经理受理下发 BPM
### 下发报文
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"06191618_21","createDate":"2024-06-19 16:19:10","data":{"cdn_type":"video","cpId":"83594612","domains":["DevReq1718785133A.komect.com"],"filelist":[{"name":"InfoSecurity.xlsx"},{"name":"BusiInfo.xlsx"}],"nameOfClient":"ECName1718696132","numberOfDoamin":1,"operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","sourceBasis":"06191618_21","sourceOfDemand":"IBS平台","summaryOfDemand":"","titleOfDemand":"ECName1718696132业务开通工单"},"processType":"2","prodType":"4","province":"JT","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
![](../../../../attachment/images-paste/image-20240619162015926.png)
### BPM 回调
```json
{"code":"06191618_21","plains":["1"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1718785618000,"plainName":"1","resultOfEstimate":"可支持"}],"resultOfPolicy":"1","userId":"24"}
```
![](../../../../attachment/images-paste/image-20240619163024282.png)
```json
{"approve":0,"code":"06191618_21","open_time":1718785701000,"plain_info":[{"approve":0,"domain_pre_info":[{"cname":"1","domain":"DevReq1718785133A.komect.com","httpSelection":{},"plain_name":"1","provinces":[],"schedule_type":"CNAME","server_domain":["1.1.1.1"],"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"1"}],"user_id":"24"}
```
![](../../../../attachment/images-paste/image-20240619163045576.png)
![](../../../../attachment/images-paste/image-20240619163204177.png)
![](../../../../attachment/images-paste/image-20240619163245784.png)
# 国际 CDN 业务承接
## 试用单
过滤日志:receive bboss test order, param
BBOSS 请求参数:
100A240621190454
```json
{"accessToken":"202407011000004e3b9ef3063c4f6285fc2772377a9922-0019-1717207200","busType":"BBSS","content":{"BackFlag":"0","BusiInfo":"100A240621190454001_50004010084_20240621114051.xls","BusinessLimit":"1","CustManager":"阿斯顿","CustManagerNumber":"15089898989","ECContact":"测试","ECID":"100A23100079275323","ECMail":"664543@qq.com","ECName":"北京中冶朴诚工程技术有限公司","ECNumber":"13666666666","Income":"6","InfoSecurity":"100A240621190454001_50004010081_20240621114050.txt","InfoSecurityTable":"100A240621190454001_50004010083_20240621114051.xls","OrderNum":"100A240621190454001","ProdType":"4","ProductID":"61000625163","ProvID":"100","Summit":"1","TestContent":[{"DevReq":"pull23711130.zzzkaazx.com","TestType":"1"}],"TestDuration":"1","TimeLength":"1"},"cutOffDay":"20240621","domain":"CDNP","envFlag":"0","routeType":"00","routeValue":"995","sessionID":"a5a3c5f9e9dd43bdaaa82fce94c9150a","sign":"C32542FBAC51820CAB3AA3EA828C4F31","signMethod":"md5","timeStamp":"20240621114114","transIDO":"a5a3c5f9e9dd43bdaaa82fce94c9150a","userPartyID":"BBSS9980","version":"1.0.0"}
```
工单页面:
![](../../../../attachment/images-paste/image-20240621120626531.png)
集团业务管理员受理流转北京省业务管理员
15124604452913
![](../../../../attachment/images-paste/image-20240621121356022.png)
省业务管理员分配运营经理
![](../../../../attachment/images-paste/image-20240621121614741.png)
省运营经理下发 BPM
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"100A240621190454001","createDate":"2024-06-21 11:41:30","data":{"cdn_type":"web","domains":["pull23711130.zzzkaazx.com"],"filelist":[{"name":"100A240621190454001_50004010081_20240621114050.txt"},{"name":"100A240621190454001_50004010084_20240621114051.xls"}],"nameOfClient":"北京中冶朴诚工程技术有限公司","numberOfDoamin":1,"operMail":"43","operTel":"18867110000","operUser":"beijingyunying","sourceBasis":"100A240621190454001","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":"","titleOfDemand":"商机与试用工单"},"processType":"0","prodType":"4","province":"BJ","userList":[{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"},{"userMail":"1878888@163.com","userName":"18788886666","userTel":"18788886666"}]}
```
BPM 阶段反馈
```json
{"code":"100A240621190454001","plains":["5"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1718943551000,"plainName":"5","resultOfEstimate":"可支持"}],"resultOfPolicy":"1"}
```
```json
{"approve":0,"code":"100A240621190454001","open_time":1718943676000,"plain_info":[{"approve":0,"domain_pre_info":[{"domain":"pull23711130.zzzkaazx.com","httpSelection":{"protocol":0,"unique_id":""},"plain_name":"5","provinces":["571","250"],"schedule_type":"CNAME","server_domain":["127.0.0.1"],"sources":[{"back_addr":"172.21.16.72:80","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"5"}],"try_time":1718943676000,"user_id":"1458"}
```
![](../../../../attachment/images-paste/image-20240621122155742.png)
![](../../../../attachment/images-paste/image-20240621122210161.png)
![](../../../../attachment/images-paste/image-20240621122222050.png)
## 试用变更单(无新增域名)
100A240621190464
```json
{"accessToken":"202407011000004e3b9ef3063c4f6285fc2772377a9922-0019-1717207200","busType":"BBSS","content":{"BackFlag":"0","BusiInfo":"100A240621190464001_50004010084_20240621132548.xls","BusinessLimit":"11","CustManager":"阿斯顿","CustManagerNumber":"15089898989","ECID":"100A23100079275323","InfoSecurity":"100A240621190464001_50004010081_20240621132547.txt","InfoSecurityTable":"100A240621190464001_50004010083_20240621132547.xls","OrderNum":"100A240621190464001","ProductID":"61000625163","TestContent":[{"TestType":"1"}],"TestDuration":"2"},"cutOffDay":"20240621","domain":"CDNP","envFlag":"0","routeType":"00","routeValue":"995","sessionID":"4f510b4b43004580acdc491528edf6d3","sign":"4256AF29FFC9604784C6B7FBE1DAA845","signMethod":"md5","timeStamp":"20240621132610","transIDO":"4f510b4b43004580acdc491528edf6d3","userPartyID":"BBSS9980","version":"1.0.0"}
```
省运营经理处理提交直接反馈 BBOSS
![](../../../../attachment/images-paste/image-20240621140448057.png)
![](../../../../attachment/images-paste/image-20240621140458267.png)
## 试用变更单(新增)
接收 BBOSS 请求
```json
{"accessToken":"202407011000004e3b9ef3063c4f6285fc2772377a9922-0019-1717207200","busType":"BBSS","content":{"BackFlag":"0","BusiInfo":"100A240621190479001_50004010084_20240621145318.xls","CustManager":"阿斯顿","CustManagerNumber":"15089898989","ECID":"100A23100079275323","InfoSecurity":"100A240621190479001_50004010081_20240621145317.txt","InfoSecurityTable":"100A240621190479001_50004010083_20240621145317.xls","OrderNum":"100A240621190479001","ProductID":"61000625163","TestContent":[{"DevReq":"pull23711130.azzzkaazx.com;","TestType":"1"}]},"cutOffDay":"20240621","domain":"CDNP","envFlag":"0","routeType":"00","routeValue":"995","sessionID":"b4f84f95e2944fd0979fc66cc7c1c2bb","sign":"1F69B5F0F508B6059A211E375F6F4DB5","signMethod":"md5","timeStamp":"20240621145341","transIDO":"b4f84f95e2944fd0979fc66cc7c1c2bb","userPartyID":"BBSS9980","version":"1.0.0"}
```
集团业务管理员受理工单流转省运营经理
![](../../../../attachment/images-paste/image-20240621150001086.png)
省运营经理审理下发 BPM
![](../../../../attachment/images-paste/image-20240621150232316.png)
下发 BPM
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"100A240621190479001","createDate":"2024-06-21 14:53:57","data":{"cdn_type":"web","cpId":"80185814","domains":["pull23711130.azzzkaazx.com"],"filelist":[{"name":"100A240621190479001_50004010081_20240621145317.txt"},{"name":"100A240621190479001_50004010084_20240621145318.xls"}],"nameOfClient":"北京中冶朴诚工程技术有限公司","numberOfDoamin":1,"operMail":"43","operTel":"18867110000","operUser":"beijingyunying","sourceBasis":"100A240621190479001","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":"","titleOfDemand":"试用变更工单"},"processType":"1","province":"BJ","userList":[{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"},{"userMail":"1878888@163.com","userName":"18788886666","userTel":"18788886666"}]}
```
BPM 回调
```json
{"code":"100A240621190479001","plains":["5"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1718954157000,"plainName":"5","resultOfEstimate":"可支持"}],"resultOfPolicy":"1"}
```
```json
{"approve":0,"code":"100A240621190479001","open_time":1718954219000,"plain_info":[{"approve":0,"domain_pre_info":[{"domain":"pull23711130.azzzkaazx.com","httpSelection":{"protocol":0,"unique_id":""},"plain_name":"5","provinces":["571","250"],"schedule_type":"CNAME","server_domain":["127.0.0.1"],"sources":[{"back_addr":"172.21.16.72:80","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"5"}],"try_time":1718954219000,"user_id":"1458"}
```
域名
![](../../../../attachment/images-paste/image-20240621151726662.png)
![](../../../../attachment/images-paste/image-20240621151735221.png)
![](../../../../attachment/images-paste/image-20240621151743519.png)
## 业务开通单 - 首次
receive bboss business process order, param
```json
{"accessToken":"202407011000004e3b9ef3063c4f6285fc2772377a9922-0019-1717207200","busType":"BBSS","content":{"BackFlag":"0","BizRequest":"100A240621190454001","BizStart":"20240630","BusiInfo":"","BusinessType":"1","InfoSecurity":"","InfoSecurityTable":"","OrderNum":"100A240621190493001","ProdType":"4","ProductID":"61000625208"},"cutOffDay":"20240621","domain":"CDNP","envFlag":"0","routeType":"00","routeValue":"995","sessionID":"06b29aa638ea4f63a1153a8219041c9e","sign":"9614B4F55145DE190614A2CC0E16ECB1","signMethod":"md5","timeStamp":"20240621153319","transIDO":"06b29aa638ea4f63a1153a8219041c9e","userPartyID":"BBSS9980","version":"1.0.0"}
```
task to bpm----request
```json
{"accessSystem":"IBS","account":"CDN-IBS","data":{"tyywrwlcdx":{"businessStartTime":"2024-06-30 00:00:00","cdn_type":"web","code":"100A240621190493001","createDate":"2024-06-21 15:33:36","create_time":"2024-06-21 15:33:37","domains":["pull23711130.azzzkaazx.com","pull23711130.zzzkaazx.com"],"nameOfClient":"北京中冶朴诚工程技术有限公司","operMail":"43","operTel":"18867110000","operUser":"beijingyunying","plains":["5"],"pro_content":"业务开通(处理业务开通工单), web, 域名列表: pull23711130.azzzkaazx.com,pull23711130.zzzkaazx.com","pro_title":"业务开通(处理业务开通工单)","prodType":"4","province":"BJ","task_first_class":"3","task_second_class":"5","triggerMode":"manualTrigger","user_id":"1458"}},"flowKey":"tyywrwlc"}
```
收单直接下发 BPM,BBOSS 自动归档
![](../../../../attachment/images-paste/image-20240621153635344.png)
![](../../../../attachment/images-paste/image-20240621153652201.png)
## 业务开通单 - 非首次
100A240621190500
```json
{"accessToken":"202407011000004e3b9ef3063c4f6285fc2772377a9922-0019-1717207200","busType":"BBSS","content":{"BackFlag":"0","BizRequest":"100A240621190454001","BizStart":"20240628","BusiInfo":"100A240621190500001_50004060013_20240621154621.xls","BusinessType":"1","InfoSecurity":"100A240621190500001_50004060011_20240621154620.xls","InfoSecurityTable":"100A240621190500001_50004060012_20240621154620.xls","OrderNum":"100A240621190500001","ProdType":"4","ProductID":"61000625215","ProvContent":[{"ProvReq":"pull23711130.bazzzkaazx.com"}]},"cutOffDay":"20240621","domain":"CDNP","envFlag":"0","routeType":"00","routeValue":"995","sessionID":"6d95e87517c5421e87f67378d30f91d1","sign":"1AC4CB9C38623F8AB7CEBBB685152861","signMethod":"md5","timeStamp":"20240621154624","transIDO":"6d95e87517c5421e87f67378d30f91d1","userPartyID":"BBSS9980","version":"1.0.0"}
```
集团业务管理员受理
![](../../../../attachment/images-paste/image-20240621155114629.png)
北京运营经理
![](../../../../attachment/images-paste/image-20240621155202344.png)
受理下发 BPM
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"100A240621190500001","createDate":"2024-06-21 15:46:40","data":{"cdn_type":"web","cpId":"80185814","domains":["pull23711130.bazzzkaazx.com"],"filelist":[{"name":"100A240621190500001_50004060011_20240621154620.xls"},{"name":"100A240621190500001_50004060013_20240621154621.xls"}],"nameOfClient":"北京中冶朴诚工程技术有限公司","numberOfDoamin":1,"operMail":"43","operTel":"18867110000","operUser":"beijingyunying","sourceBasis":"100A240621190500001","sourceOfDemand":"IBS平台","summaryOfDemand":"","titleOfDemand":"北京中冶朴诚工程技术有限公司业务开通工单"},"processType":"2","prodType":"4","province":"BJ","userList":[{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"},{"userMail":"1878888@163.com","userName":"18788886666","userTel":"18788886666"}]}
```
验收
```json
{"code":"100A240621190500001","plains":["5"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1718956374000,"plainName":"5","resultOfEstimate":"可支持"}],"resultOfPolicy":"1"}
```
```json
{"approve":0,"code":"100A240621190500001","open_time":1718956395000,"plain_info":[{"approve":0,"domain_pre_info":[{"domain":"pull23711130.bazzzkaazx.com","httpSelection":{"protocol":0,"unique_id":""},"plain_name":"5","provinces":["571","250"],"schedule_type":"CNAME","server_domain":["127.0.0.1"],"sources":[{"back_addr":"172.21.16.72:80","back_protocol":0,"primary":true,"type":"ip"}]}],"plain_name":"5"}],"try_time":1718956395000,"user_id":"1458"}
```
![](../../../../attachment/images-paste/image-20240621155411348.png)
![](../../../../attachment/images-paste/image-20240621155420810.png)
![](../../../../attachment/images-paste/image-20240621155447365.png)
## 试用变更(国际 CDN 覆盖)
不会变更。
## 业务注销
运营经理接收业务注销单
![](../../../../attachment/images-paste/image-20240624094258407.png)
运营经理受理
![](../../../../attachment/images-paste/image-20240624094350727.png)
运营经理删除域名
```json
{"accessSystem":"IBS","account":"CDN-IBS","data":{"tyywrwlcdx":{"cdn_type":"web","code":"oxfpbKWSCjwbNOqX","create_time":"2024-06-24 09:44:50","domains":["pull23711130.bazzzkaazx.com"],"nameOfClient":"北京中冶朴诚工程技术有限公司","operMail":"43","operTel":"18867110000","operUser":"beijingyunying","plains":["5"],"pro_content":"域名操作(域名删除), web, 域名列表: pull23711130.bazzzkaazx.com","pro_title":"域名操作(域名删除)","task_first_class":"2","task_second_class":"2","triggerMode":"manualTrigger","user_id":"1458"}},"flowKey":"tyywrwlc"}
```
通用运维回传域名删除
![](../../../../attachment/images-paste/image-20240624094920056.png)
运营经理提交
![](../../../../attachment/images-paste/image-20240624094950157.png)
# 首次开通增加业务类型限制
1. 试用一个点播业务类型
2. 针对这个试用业务类型进行 首次 CDN 开通 直播业务类型,触发前置校验。
100A240624190833001
![](../../../../attachment/images-paste/image-20240624133946604.png)
请求日志
![](../../../../attachment/images-paste/image-20240624142705765.png)
直播
```json
{"cutOffDay":"20240624","providePartyID":"CDNP9950","response":{"rspCode":"00000","rspDesc":"成功"},"result":"{\"ResCode\":\"99\",\"ResDetail\":\"首次开通选择的业务类型需与试用单中的业务类型保持一致;\",\"TransIdo\":\"20240624140438000028\"}","transIDH":"1054","transIDHTime":"20240624140514","transIDO":"b0ffd321cd1f4eefa3829bdd3ac6748e"}
```
超低时延直播
```json
{"cutOffDay":"20240624","providePartyID":"CDNP9950","response":{"rspCode":"00000","rspDesc":"成功"},"result":"{\"ResCode\":\"99\",\"ResDetail\":\"首次开通选择的业务类型需与试用单中的业务类型保持一致;\",\"TransIdo\":\"20240624140545000029\"}","transIDH":"1054","transIDHTime":"20240624140621","transIDO":"528b1daa2bae4f6c91699b1179f84a34"}
```
点播
```json
{"cutOffDay":"20240624","providePartyID":"CDNP9950","response":{"rspCode":"00000","rspDesc":"成功"},"result":"{\"ResCode\":\"00\",\"ResDetail\":\"成功\",\"TransIdo\":\"20240624141350000030\"}","transIDH":"1054","transIDHTime":"20240624141426","transIDO":"0f4814ce3ce0478b893e39bfd1864473"}
```
开通流程
![](../../../../attachment/images-paste/image-20240624144453625.png)
# 业务类型一致性,创单接口
试用单 TestType:点播;ProdType4 国际 CDN
针对这个试用单进行首次开通:BusinessType:直播;ProdType4 国际 CDN
存在 点播 产品类型:国际 CDN 100A240624190852001
```json
{"accessToken":"202407011000004e3b9ef3063c4f6285fc2772377a9922-0019-1717207200","busType":"BBSS","content":{"BackFlag":"0","BizRequest":"100A240624190852001","BizStart":"20240630","BusiInfo":"","BusinessType":"4","InfoSecurity":"","InfoSecurityTable":"","OrderNum":"100A240624190858001","ProdType":"4","ProductID":"61000625296"},"cutOffDay":"20240624","domain":"CDNP","envFlag":"0","routeType":"00","routeValue":"995","sessionID":"7968ce70a3d548b1b6dfd3ae65090b49","sign":"C5D78A9AB87B55FB46760A285C772F71","signMethod":"md5","timeStamp":"20240624152848","transIDO":"7968ce70a3d548b1b6dfd3ae65090b49","userPartyID":"BBSS9980","version":"1.0.0"}
```
异常响应
```json
{"cutOffDay":"20240624","providePartyID":"CDNP9950","response":{"rspCode":"30000","rspDesc":"首次开通选择的业务类型需与试用单中的业务类型保持一致"},"transIDH":"abc","transIDHTime":"20240624152904","transIDO":"7968ce70a3d548b1b6dfd3ae65090b49"}
```
![](../../../../attachment/images-paste/image-20240624153251563.png)
![](../../../../attachment/images-paste/image-20240624154804934.png)
湖南省交通科学研究院有限公司
@@ -0,0 +1,542 @@
# 2.5 域名新增加速范围字段
NRWLXT-29594
## 需求评审
8 人天。
功能说明:
当前域名无法查看分发的范围,新增加速范围字段显示
具体描述:
1、点播业务运维-配置管理、直播控制台-域名管理、域名详情页展示列展示加速范围字段(原为运营商字段修改为加速范围),字段放在创建时间前。企业管理-产品详情、域名配置需求工单、企业客户新增域名页面做同步修改。
2、esop加速范围字段取自该域名所属的订购下的加速范围字段(数据以集客大厅同步过来的ProdType数据为准),移动云的不变。
3、点播业务运维-配置管理、直播控制台-域名管理筛选框,新增加速范围字段筛选,放在筛选框的最后新增。可筛选内容从后端动态获取。
4、IBS 平台加速范围字段回显统一为移动、三网、海外、国际。
![](../../../../attachment/images-paste/image-20250509094035013.png)
![](../../../../attachment/images-paste/image-20250509094047901.png)
## 需求备注
域名引入位置
ESOP(域名配置需求工单、试用、试用变更、非首次开通)
ESOP 企业客户(自助域名、企业域名管理按钮)
Cache+(集团企业客户)
移动云
中国移动CDN运营平台接口规范-字节版(针对 K-V 接口)
中国移动CDN运营平台接口规范-客户版
### 域名配置需求-订购下增加加速范围(新建工单-衍君)
接口:`/workorder/filter/product`
字段:待定
## 需求开发
1. ~~ESOP 域名入库存储加速范围(注意需要转换)。~~
2. ~~两个控制台加筛选框和查询。~~
3. ~~域名表割接:Cache+ 域名取消字段。ESOP是否处理。~~
4. ~~所有页面的回显改名字(前端维护)。~~
5. ~~验收反馈不要默认值。~~
6. ~~企业管理订购加速范围和域名列表不一致。(全都一致)~~
7. ~~企业客户新增域名页面描述也不一致。~~
8. 割接数据问题。
9. 是否涉及自助域名。(esop 已处理、移动云入库一致、cache+ 无关。)
### 域名配置需求-订购下增加加速范围(新建工单-衍君)
接口:`/workorder/filter/product`
字段:待定
### 域名配置需求-订购下增加加速范围(详情页回显-衍君)
接口:`/workorder/detail`
接口参数:`domain_request`
字段:待定
## 需求开发
1. ESOP 域名入库存储加速范围(注意需要转换)。
2. 两个控制台加筛选框和查询。
3. 域名表割接:Cache+ 域名取消字段。ESOP是否处理。
4. 所有页面的回显改名字(前端维护)。
5. 验收反馈不要默认值。
### ESOP 分发范文文档:
```
BBOSS
1:移动网内CDN 业务类型是1,4,5,6,7
2:三网CDN 业务类型是1,4,5,6,7
3:海外服务 业务类型是1,4,6,7
4:国际CDN 业务类型是1
移动云
ServiceProviderEnum
CMCC (0, "移动")
TRIPLE (1, "三网")
OVERSEAS (2, "海外")
GLOBAL (3, "全球")
IBS
ProdTypeEnum
MOBILE_NETWORK_CDN ("1", "移动网内CDN", "网内", "移动")
THREE_NETWORK_CDN ("2", "三网CDN", "三网", "三网")
OVERSEAS_CDN ("3", "海外服务", "海外", "海外")
INTERNATIONAL_CDN ("4", "国际CDN", "海外", "国际CDN")
BPM
self_service_domain_config
serviceProvider (移动云)
验收反馈有 ServiceProviderEnum 默认移动。
```
### 点播业务运维-配置管理(列表,修改)
接口:`/configManage/list/getDomainData`
字段:`serviceProvider`
取值:`ServiceProviderEnum.getValueByIndex(域名表 serviceProvider)`
### 直播控制台-域名管理(列表,新增)
接口:`/live/order/liveDomainList`
字段:`serviceProvider`(新增)
### 企业域名列表(列表)
### 点播业务运维-配置管理(筛选框,动态)
接口:`/configManage/index`
### 直播控制台-域名管理(筛选框,动态)
接口:`/live/order/list/index`
### 企业管理-产品详情-分发范围
接口:`/selfService/enterprise/list/product`
字段:`prodType`(修改)
取值:`ep_product_info``prodType` 取值为创单
### 企业客户新增域名页面
配置项:`ADD_DOMAIN_ENTERPRISE_ID`
接口:`/enterprise_domain/config/queryEnterpriseProductInfo`
字段:`"prodTypeDesc":"海外"`
取值:`ep_product_info``prodType` 取值为创单
### 域名详情页
前端逻辑:1 是三网,否则都是移动。
点播
`/configManage/update/domain`
`serviceProvider`
取值:域名表
直播
企业
`/selfService/domain/ticket/getDomain`
`serviceProvider`
取值:域名表# 当前枚举详情
**域名列表、详情页、域名列表筛选框**
移动、三网、海外、国际
**企业管理-产品详情**
网内、三网、海外、海外
**企业客户新增域名页面**
移动、三网、海外、国际CDN
```
BBOSS
1:移动网内CDN 业务类型是1,4,5,6,7
2:三网CDN 业务类型是1,4,5,6,7
3:海外服务 业务类型是1,4,6,7
4:国际CDN 业务类型是1
IBS(对应 BBOSS
ProdTypeEnum
MOBILE_NETWORK_CDN ("1", "移动网内CDN", "网内", "移动")
THREE_NETWORK_CDN ("2", "三网CDN", "三网", "三网")
OVERSEAS_CDN ("3", "海外服务", "海外", "海外")
INTERNATIONAL_CDN ("4", "国际CDN", "海外", "国际CDN")
IBS
ServiceProviderEnum
CMCC (0, "移动")
TRIPLE (1, "三网")
OVERSEAS (2, "海外")
INTERNATIONAL (3, "国际")
```
### 点播业务运维-配置管理(列表✔)
接口:`/configManage/list/getDomainData`
字段:`serviceProvider`
取值:`ServiceProviderEnum.getValueByIndex(域名表 serviceProvider)`
### 直播控制台-域名管理(列表✔)
接口:`/live/order/liveDomainList`
字段:`serviceProvider`**新增**
### 企业域名列表(列表✔)
接口:`/selfService/domain/list`
字段:`serviceProvider`**新增**
### 点播业务运维-配置管理(筛选框✔)
接口:`/configManage/index`
字段:`serviceProvider`**新增**
### 直播控制台-域名管理(筛选框✔)
接口:`/live/order/list/index`
字段:`serviceProvider`**新增**
### 点播业务运维-配置管理(查询✔)
接口:`/configManage/list/getDomainData`
字段:`serviceProvider`**新增**
### 直播控制台-域名管理(查询✔)
接口:`/live/order/liveDomainList`
字段:`serviceProvider`**新增**
### 企业管理-产品详情-分发范围(✔)
接口:`/selfService/enterprise/list/product`
字段:`prodType`(修改)
取值:`ep_product_info``prodType` 取值为创单
### 企业客户新增域名页面(✔)
配置项:`ADD_DOMAIN_ENTERPRISE_ID`
接口:`/enterprise_domain/config/queryEnterpriseProductInfo`
字段:`"prodTypeDesc":"海外"`(统一名称)
取值:`ep_product_info``prodType` 取值为创单
### 域名详情页
前端逻辑:1 是三网,否则都是移动。
#### 点播✔
接口:`/configManage/update/domain`
字段:`serviceProvider`
取值:域名表
#### 直播✔
接口:`/live/order/config/display?id=34882&plain=`
字段:`serviceProvider`(新增)
#### 企业✔
接口:`/selfService/domain/ticket/getDomain`
字段:`serviceProvider`
### 域名配置需求-订购下增加加速范围(详情页回显✔)
接口:`/workorder/detail`
接口参数:`domain_request`
字段:`serviceProvider`
### 割接开发
演练环境以下订购没有 `prod_type`
```
9005085409
9005213778
99531198652
99371078325
99371078320
99100026056
9005281664
9005265417
62500289655 对应的开通单有产品类型:三网CDN。但是 `ep_product_info` 中不存在。
【映射失败】prod_type 为空, 域名: rs.jshrss.jiangsu.gov.cn, 订购ID: 62500289655
【映射失败】prod_type 为空, 域名: www.jssrcfwypt.org.cn, 订购ID: 62500289655
```
```sql
-- 注意库中存在两个产品类型 3、4 没有域名。
select *
from ep_product_info
where pre_order_num in (
'100A240716892678001',
'250A240913242356001'
);
```
获取要操作的订购
```sql
SELECT ssdc.id, ssdc.domain, ssdc.service_provider, product_id, trial_product_id
FROM self_service_domain_config ssdc
JOIN enterprise_info ei ON ssdc.tenant_id = ei.enterprise_id
WHERE ei.source = 'BSS'
AND (ssdc.product_id IS NOT NULL OR ssdc.trial_product_id IS NOT NULL);
```
### 备注
```java
ServiceProviderEnum serviceProviderEnum = ServiceProviderEnum.fromProdTypeCode(testOrderInfo.getProdType());
po.setServiceProvider(serviceProviderEnum.getIndex());
```
# 2.11 信安信息的每日邮件增加一个字段
NRWLXT-29591
## 需求评审
1 人天。
## 需求备注
功能说明
1、信安信息更新通知每日邮件增加字段【域名所在订购号】。
需求背景
政企客户经理对未备案域名整改时,需要订购号信息,现在每次都需要人工补充,操作不太方便。
具体描述:
1、信安信息更新通知每日邮件增加字段【域名所在订购号】
![](../../../../attachment/images-uuid/ea321eebac1e4bc2b160c23075f112a7.jpg)
在域名后都增加订购字段。
注意可能有的域名没有订购。
## 需求开发
可能存在试用和商用订购同时存在的场景。开通时间为未来时间。优先试用订购,因为此时还未商用。
![](../../../../attachment/images-uuid/c7a3519c99ce42668d4f97d6746c05a0.png)
# 5.1 话单自动化补数
NRWLXT-29604
## 需求评审
4 人天。
## 需求备注
- 使用 `spring-boot-starter-mail` + Thymeleaf 实现邮件发送和模板渲染。
- 将模板存储在 `resources/templates` 或数据库中,支持动态加载。
## 需求开发
IBS 目前发短信是如何发的。
```
MT_APP_ID_URL,EUCP-EMY-SMS1-2RNEO
MT_SECRET_KEY_URL,C291217CC832DD45
MT_URL,http://www.btom.cn:8080/simpleinter/sendSMS
MT_SIGN_NATURE_URL,【CDN管理平台】
UM_FINTECH
http://ap.lxt.umfintech.com:8099/umpp/mt
umf123
zyhy44
```
```
我们项目使用 thymeleaf 进行邮件模板渲染后发送。请帮我做两个模板。用户姓名和两个时间、工单号等预留好展位。补传成功和补传失败 也可以设计为动态,这样成功失败可以用一个模板。要求设计符合邮件标准样式,兼容大小屏幕。
中国移动CDN话单补数发起通知
您好:
(用户姓名)于yyyy-mm-dd hh:mm:ss发起话单补数工单,期望完成时间为yyyy-mm-dd hh:mm:ss,请您登录系统进行审批处理。
【中国移动内容分发网络统一运营支撑系统】
---
中国移动CDN话单补传工单完成通知
您好:
(用户姓名)的话单补传工单已执行完毕,话单补传成功,工单号xxxxxxxx,请知悉
【中国移动内容分发网络统一运营支撑系统】
中国移动CDN话单补传工单完成通知
您好:
(用户姓名)的话单补传工单已执行完毕,话单补传失败,工单号xxxxxxxx,请知悉。
【中国移动内容分发网络统一运营支撑系统】
```
```json
{
"processType": "话单补数",
"title": "【标题】华为-话单补数-001",
"cdrType": "点播/直播",
"desc": "【补数原因】测试流程",
"expectedTime": "2025-05-22 00:00:00",
"patchFiles": [
"/download-hw/vcs/complete/20250404/CN_BBOSS_VCS_20250404023000_2.log"
],
"fileIds": null
}
```
![](../../../../attachment/images-paste/image-20250522145025248.png)
![](../../../../attachment/images-paste/image-20250522145105506.png)
![](../../../../attachment/images-paste/image-20250522145323704.png)
```
insert into ACT_RE_MODEL(ID_, REV_, NAME_, KEY_, CATEGORY_, CREATE_TIME_, LAST_UPDATE_TIME_, VERSION_, META_INFO_, DEPLOYMENT_ID_, EDITOR_SOURCE_VALUE_ID_, EDITOR_SOURCE_EXTRA_VALUE_ID_, TENANT_ID_) values('8a0cc52f-3a07-11f0-8986-2016b9c5e2b2', 1, '话单补数流程', 'Process_1745993369746', '005', '2025-05-26 16:00:50', '2025-05-26 16:00:50', 2, '{"createUser":null,"description":null,"formType":null,"formId":null}', NULL, NULL, NULL, '')
insert into ACT_GE_BYTEARRAY(ID_, REV_, NAME_, BYTES_, DEPLOYMENT_ID_) values ( '8a1db520-3a07-11f0-8986-2016b9c5e2b2', 1, 'source', 'java.io.ByteArrayInputStream@c655', NULL )
```
```
INSERT INTO sys_config ( config_name, config_key, config_value, config_type, remark, create_by, create_time, update_by, update_time ) VALUES ( '话单补数流程短信通知人员列表', 'wf.cdrPatch.notice.phone', '15033848944', 'N', '多个手机号请用英文逗号(,)分隔', '18867103286cmcc', '2025-05-26 16:35:58', '18867103286cmcc', '2025-05-26 16:35:58' )
```
# 用例评审
# 冒烟自测
## 2.5 域名新增加速范围字段
### 点播业务运维-配置管理✔✔
#### 列表✔✔✔
#### 筛选框✔✔
#### 查询✔✔
### 直播控制台-域名管理✔✔
#### 列表✔✔✔
#### 筛选框✔✔
#### 查询✔✔
### 企业账号-域名管理✔✔
### 域名详情页✔✔
#### 点播✔✔✔
#### 直播✔✔✔
#### 企业✔✔✔
#### 配置管理✔✔✔
### 企业管理-产品详情-分发范围✔✔✔
注意目前仅支持 ESOP,待说明。移动云产品无加速范围概念。
### 企业客户新增域名页面✔✔
### 域名配置需求-订购下增加加速范围(详情页回显)✔✔
### 割接测试✔
### 试用单✔✔
### 试用变更✔✔
#### 不加域名✔✔
#### 加域名✔✔
### 首次开通✔✔
页面
### 非首次开通✔✔
### 域名配置需求✔✔
### K-V 接口✔✔
### Cache+ 工单✔✔
### 移动云✔✔
## 2.11 信安信息的每日邮件增加一个字段
![](../../../../attachment/images-paste/image-20250519145123085.png)
```
https://p.cdn.10086.cn/devops_tools-api/patch/7.10.0/sendMailWithTemplateAsync
```
@@ -0,0 +1,250 @@
```
数据看板
curl --location 'http://localhost:8080/customer-operation/analytics/homepage/dashboard' \
--header 'Content-Type: application/json' \
--data '{
"startTime": "",
"endTime": "2025-05-31"
}
'
响应
{
"data": {
"cdnChurnedCustomers": 79,
"cdnExistingCommercialCustomers": 260
},
"message": "ok",
"retriable": false,
"statusCode": "200",
"success": true
}
商用列表
curl --location 'http://localhost:8080/customer-operation/analytics/commercial/list' \
--header 'Content-Type: application/json' \
--data '{
"startTime": "2025-05-01",
"endTime": "2025-05-31",
"pageNum": 1,
"pageSize": 10
}'
响应
{
"list": [
{
"commercialStartTime": "2018-08-13T09:16:15",
"cpid": "80984882",
"enterpriseName": "上海公共交通卡股份有限公司",
"productType": "点播",
"province": "上海",
"status": "已开通"
},
{
"commercialStartTime": "2019-09-27T16:31:10",
"cpid": "80997938",
"enterpriseName": "上海市青浦区政务服务办公室",
"productType": "点播",
"province": "上海",
"status": "已开通"
},
{
"commercialStartTime": "2018-12-01T00:21:52",
"cpid": "83543303",
"enterpriseName": "湖南快乐阳光互动娱乐传媒有限公司",
"productType": "点播",
"province": "政企分公司",
"status": "已开通"
},
{
"commercialStartTime": "2020-02-12T00:00:00",
"cpid": "81062033",
"enterpriseName": "太仓市教育信息化中心",
"productType": "点播",
"province": "江苏",
"status": "已开通"
},
{
"commercialStartTime": "2024-08-02T17:58:54",
"cpid": "83526164",
"enterpriseName": "北京百度网讯科技有限公司",
"productType": "点播",
"province": "政企分公司",
"status": "已开通"
},
{
"commercialStartTime": "2020-03-12T15:24:15",
"cpid": "81040133",
"enterpriseName": "南京市秦淮区教师发展中心",
"productType": "点播",
"province": "江苏",
"status": "已开通"
},
{
"commercialStartTime": "2020-05-22T18:00:00",
"cpid": "83587521",
"enterpriseName": "深圳市腾讯计算机系统有限公司",
"productType": "点播",
"province": "政企分公司",
"status": "已开通"
},
{
"commercialStartTime": "2020-05-22T18:05:00",
"cpid": "83538433",
"enterpriseName": "北京金山云网络技术有限公司",
"productType": "点播",
"province": "政企分公司",
"status": "已开通"
},
{
"commercialStartTime": "2020-10-22T14:40:08",
"cpid": "81115066",
"enterpriseName": "金华日报社",
"productType": "点播",
"province": "浙江",
"status": "已开通"
},
{
"commercialStartTime": "2020-07-01T21:00:00",
"cpid": "83546349",
"enterpriseName": "阿里云计算有限公司",
"productType": "点播",
"province": "政企分公司",
"status": "已开通"
}
],
"pageNum": 1,
"pageSize": 10,
"total": 260
}
商用列表导出
curl --location 'http://localhost:8080/customer-operation/analytics/commercial/export' \
--data '{
"startTime": "2025-05-01",
"endTime": "2025-05-31",
"pageNum": 1,
"pageSize": 1000
}'
注销列表
curl --location 'http://localhost:8080/customer-operation/analytics/churned/list' \
--header 'Content-Type: application/json' \
--data '{
"startTime": "2025-05-01",
"endTime": "2025-05-31",
"pageNum": 1,
"pageSize": 10
}'
响应
{
"list": [
{
"cancelTime": "2022-01-30T16:30:32",
"cpid": "80941354",
"enterpriseName": "上海海思技术有限公司",
"productType": "点播",
"province": "上海",
"status": "已注销"
},
{
"cancelTime": "2021-06-29T23:21:07",
"cpid": "83532582",
"enterpriseName": "贵州白山云科技股份有限公司",
"productType": "点播",
"province": "政企分公司",
"status": "已注销"
},
{
"cancelTime": "2021-05-19T16:09:59",
"cpid": "81594819",
"enterpriseName": "中协通通信技术有限公司",
"productType": "点播",
"province": "山东",
"status": "已注销"
},
{
"cancelTime": "2023-10-12T10:00:33",
"cpid": "81262264",
"enterpriseName": "杭州点智连科技有限公司",
"productType": "点播",
"province": "安徽",
"status": "已注销"
},
{
"cancelTime": "2021-04-12T16:47:53",
"cpid": "81186736",
"enterpriseName": "深圳市云帆加速科技有限公司",
"productType": "点播",
"province": "浙江",
"status": "已注销"
},
{
"cancelTime": "2024-05-29T11:08:38",
"cpid": "81090226",
"enterpriseName": "江苏常熟农村商业银行股份有限公司",
"productType": "点播",
"province": "江苏",
"status": "已注销"
},
{
"cancelTime": "2023-02-01T15:23:48",
"cpid": "81013775",
"enterpriseName": "苏州市吴江区勤工俭学与装备管理办公室",
"productType": "点播",
"province": "江苏",
"status": "已注销"
},
{
"cancelTime": "2025-02-12T23:59:00",
"cpid": "83587521",
"enterpriseName": "深圳市腾讯计算机系统有限公司",
"productType": "直播",
"province": "政企分公司",
"status": "已注销"
},
{
"cancelTime": "2021-05-24T14:49:04",
"cpid": "80172777",
"enterpriseName": "北京品云科技有限公司",
"productType": "点播",
"province": "北京",
"status": "已注销"
},
{
"cancelTime": "2022-02-16T14:28:35",
"cpid": "81647613",
"enterpriseName": "河南省腾奈电子科技有限公司",
"productType": "点播",
"province": "河南",
"status": "已注销"
}
],
"pageNum": 1,
"pageSize": 10,
"total": 79
}
注销列表导出
curl --location 'http://localhost:8080/customer-operation/analytics/churned/list' \
--header 'Content-Type: application/json' \
--data '{
"startTime": "2025-05-01",
"endTime": "2025-05-31",
"pageNum": 1,
"pageSize": 1000
}'
```
@@ -0,0 +1,45 @@
# 信安域名信息获取规则变更
工时:3
## 需求评审
1. 目前来看备案号查询接口是我们传什么信安校验什么。
2. 以 a.b.c.gov.cn 举例。全域名查不到,我们就会拆分为所有子域名,b.c.gov.cn 和 c.gov.cn,最终以 c.gov.cn 为准,因为 b.c.gov.cn 会被覆盖。
3. 但是 .gov.cn 的域名可能每一级别都可能备案,此时客户传的是 b.c.gov.cn 的备案号,但是我们程序会获得 c.gov.cn 的备案号进行比对。认为不合法。
背景:cdn.jiangsu.chinatax.gov.cn
## 需求备注
针对合法性字段。
cache+域名配置和域名配置需求工单,创单域名入库就有。
试用单、试用变更、开通单,域名会先入库,验收刷新此值。
## 需求开发
# ESOP分发范围及新增域名规则变更
工时:1
## 需求评审
## 需求备注
## 需求开发
# 订购迁移工单加审批超时的监控
工时:2
## 需求评审
是否和订购迁移工单有关系?无。
24 小时内也要发。
## 需求备注
## 需求开发
@@ -0,0 +1,279 @@
# cache+新增全站加速产品类型
工时:1
NRWLXT-29760
## 需求评审
## 需求备注
## 需求开发
```
新建工单
/workorder/custom/add
新建企业
/cache/enterprise/order/submit
审批企业
/workorder/approvedecision
CACHE_ENTERPRISE
com.cmcc.cdn.platform.selfservice.service.CacheWorkOrderServiceImpl#decision
```
省测运营经理:存在变更单,三个产品。
省测企业客户:无法新建工单
集团运营经理:没有相关工单单。
集团企业客户:存在新增单,变更单,四个产品。
![](../../../../attachment/images-paste/image-20250612104836867.png)
集团:
![](../../../../attachment/images-paste/image-20250612105017434.png)
# 自动化统计展示各类客户数据
工时:8
## 需求评审
> 如果相同 CpId 同时开通了点播跟直播则算两个,这个地方是点播直播还是具体到产品?
点播包含三个产品。
> 这次做的**正在商用的企业数**和**已注销的企业数**。这种可以具体到某一天,但是时间段内的是不是没有意义。
取时间段的 endTime。
> 前三个针对时间段的统计无意义。
需求会标注哪些是时间节点,哪些是时间段。
---
![](../../../../attachment/images-uuid/de18b4f3470044159a804824293962ba.jpg)
1)首页默认展示从记录以来截止到**昨天**的数据,用户可选择时间查询相关数据,最长查询时间为:**2025年01月01日**
2)**CDN存量商用客户数**,产品状态为已开通、已停用,如果相同cpid同时开通了点播跟直播则算两个。统计截止到选择的结束时间当天的累计数据。页面、视频、下载均算为点播。如果产品下有多个订购已开通,开通时间为最早的开通时间。
3)**CDN注销客户数**,业务订购均已注销,则定义为已注销。如果cpid+产品类型相同,但订购不同,都注销了才算注销。如果cpid+直播注销了,点播未注销,则统计直播的数据。统计截止到选择的结束时间当天的累计数据。
4)**CDN累计商用客户数**,产品状态为已开通、已停用、已注销,开通过相关产品的客户总数。统计截止到选择的结束时间当天的累计数据。
5)**CDN存量试用客户数**,产品状态为:试用暂停、试用中,统计截止到选择的结束时间当天的累计数据。去除历史脏数据。
6)**CDN累计客户总数**,产品状态为:试用暂停、试用中、已开通、已停用、已注销、试用结束、试用删除,统计截止到选择的结束时间当天的累计数据。既有试用又有商用需做合并。
7)**新增客户数**,开始跟结束时间段内,新增新产品(改产品类型未正在试用或者商用)且未驳回的试用单。需按照产品类型去重。
8)**新增商用客户数**,开始跟结束时间段内,产品转商的客户数(订购开始时间算)。需按照产品类型去重。
9)**新增试用转商客户数**,开始跟结束时间段内,产品转商的客户数(试用开始时间在这个时间段内,并首次开通该产品业务订购的)。需按照产品类型去重。
10)客户分省数据展示(本期不做)
11)本期做正在商用的企业数和已注销的企业数据统计及详细页面
12)点击方块框则跳转到相关页面
## 需求备注
【金山文档 | WPS云文档】 自动化统计展示各类客户数据
https://kdocs.cn/l/cnBESlz2y5yh
---
割接动作
1. 订购时间割接,存在为空的订购时间,以期望开通时间割接。(无需割接。)
2. 工单状态割接,和主表保持一致。然后测试开通驳回是否未改。(已处理)
3. 有历史企业没有 ECID(order_info有)(已处理)
---
权限关键字
CUSTOMER_OPERATIONS_DATA_STATISTICS
## 需求开发
工单数量统计
```
试用时长耗尽 353 TestOrderResultEnum 试用工单
试用流量耗尽 19 TestOrderResultEnum 试用工单
试用可以承接 338 TestOrderResultEnum 试用工单
试用不可承接 21 TestOrderResultEnum 试用工单(可能是页面退回。)
不可承接,驳回工单 21 TestOrderResultEnum 试用工单
驳回工单 100 TestOrderResultEnum 试用工单
试用暂停 2 TestOrderResultEnum 试用工单
esop关闭工单 100 TestOrderResultEnum 试用工单
试用删除 8 TestOrderResultEnum 试用工单
---------------------------------------------------------------------------------
试用删除 8 TrialStatusUpdateOrderResultEnum 试用删除工单
---------------------------------------------------------------------------------
开通成功 411 DevelopStageEnum 业务受理工单
不可承接,驳回工单 3 DevelopStageEnum 业务受理工单
---------------------------------------------------------------------------------
注销完成 130 CancelStageEnum 业务注销工单
---------------------------------------------------------------------------------
待处理 39 试用工单、试用删除工单、业务受理工单、业务注销工单均存在
```
---
前后端接口定义
运营分析首页 html
GET /customer-operation/analytics/homepage
运营分析数据
POST /customer-operation/analytics/homepage/dashboard
运营分析列表页 html
GET /customer-operation/analytics/list
列表 接口:
POST /customer-operation/analytics/commercial/existing/list
POST /customer-operation/analytics/canceled/existing/list
导出
GET /customer-operation/analytics/commercial/existing/export
GET /customer-operation/analytics/canceled/existing/export
前端文件夹:statisticalAnalysis
dashboard.html 和 list.html
---
--- 我比她多的内容 ---
贵州白山云科技股份有限公司(库中有两个,这个是 83532582)
--- 她比我多的内容 ---
金华日报社(存在 网页加速 开通)
深圳市云帆加速科技有限公司(她写了两个,客户是网页加速和下载加速应该算一个。)
云之端网络(江苏)股份有限公司(修正业务但状态后统计正常。)
---
--- 我比她多的内容 (考虑重复) ---
(无)
--- 她比我多的内容 (考虑重复) ---
北京金山云网络技术有限公司【政企一个开通,广东所有开通都是点播应该算两个,她有四个。多两个。】
北京金山云网络技术有限公司【政企一个开通,广东所有开通都是点播应该算两个,她有四个。多两个。】
北京海山信息技术有限公司
深圳华为云计算技术有限公司
北京字跳网络技术有限公司
黄山搜搜商业运营管理有限公司
江苏运怡物联网有限公司
江苏运怡物联网有限公司
北京爱奇艺科技有限公司
教育部教育技术与资源发展中心(中央电化教育馆)
# 域名自服务能力拓展至自有业务
工时:1
NRWLXT-29766
## 需求评审
## 需求备注
## 需求开发
主要是创单时可以筛选到对应的域名,验收反馈证书处理正常。
这里修复一个 BUG,Cache+ 证书验收反馈无法生效。
# 用例评审
1. 注销时间。
2. 子雯的未来开通时间
3. 权限问题。
cache+企业
登陆用户名:中国移动集团自有公司
手机号码:15771095179
邮箱: 15771095179@qq.com
rbemko4o-nhhhketi9w2xhgsy
中国移动集团自有公司
# 冒烟自测
前提:
存在集团 cache+ 企业
企业割接补充全站四层加速和全站七层加速
填写内容
产品类型:全站四层加速
OA申请号:123
分发区域:浙江
配置方式:定制化
上传信安信息附件(内容为域名test.com的信安信息)和需求附件
点击确定按钮
1)提交成功,工单状态为配置中
(2)域名管理列表新增域名test.com,状态为部署中,产品类型为全站四层加速
1)工单状态审批完成
2)域名状态:已生效
---
前提:
1. 集团 cache+ 企业存在“全站四层加速”域名:test.com,状态为已生效,分发平面:自研2.0
@@ -0,0 +1,97 @@
# cache+新增全站加速产品类型
## 全站四层加速
### 新增域名
![](../../../../attachment/images-paste/image-20250708143253218.png)
下发 BPM
```log
2025-07-08 06:34:24 [abcdefcde1234567] [abcdefcde1234567] [] [ibs-portal] [http-nio-8080-exec-6] INFO com.cmcc.cdn.platform.selfservice.service.CacheWorkOrderServiceImpl 2414 bpmDomainAdapt - cache+定制化域名下发bpm, request:{"accessSystem":"IBS","account":"CDN-IBS","code":"004-20250708002","createDate":"2025-07-08 14:34:23","data":{"cacheOrderSource":"1","cdn_type":"wholeSiteFour","cpId":"80003254","domains":["20250708141239.komect.com"],"filelist":[{"fileId":"byuuvfmimbt3vpkt0iiplnkhm","name":"信安导入模板.xls"}],"nameOfClient":"龙的麦当劳","operMail":"18944180260@gmail.com","operTel":"18944180260","operUser":"18944180260cmcc","sourceBasis":"004-20250708002","sourceOfDemand":"Cache+IBS平台)","summaryOfDemand":""},"processType":"6","userList":[{"userMail":"remaxob441@kamismail.comabc","userName":"15700197926cmcc","userTel":"15700197926"}]}
2025-07-08 06:34:29 [abcdefcde1234567] [abcdefcde1234567] [] [ibs-portal] [http-nio-8080-exec-6] INFO com.cmcc.cdn.platform.selfservice.service.CacheWorkOrderServiceImpl 2416 bpmDomainAdapt - cache+定制化域名下发bpm, response:{"error_code":0,"error_msg":"success","instId":"046-20250708-0001"}
```
BPM 反馈:
```log
2025-07-08 06:43:16 [ce909a7b91ba2048] [ce909a7b91ba2048] [] [ibs-portal] [http-nio-8080-exec-5] INFO com.cmcc.cdn.platform.selfservice.service.bpm.impl.BpmManageServiceImpl 946 orderCallback - callback from bpm:{"approve":0,"code":"004-20250708002","plain_info":[{"approve":0,"domain_pre_info":[{"domain":"20250708141239.komect.com","httpSelection":{"protocol":0},"plain_name":"1","provinces":["000"],"schedule_type":"Forward","server_domain":["1.1.1.1"],"source_protocol":{"protocol_port":{"http":1},"protocol_type":1},"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip","weight":1}]}],"plain_name":"1"}],"user_id":"921"}
```
![](../../../../attachment/images-paste/image-20250708144036089.png)
![](../../../../attachment/images-paste/image-20250708144050885.png)
![](../../../../attachment/images-paste/image-20250708144116315.png)
### 需求变更
![](../../../../attachment/images-paste/image-20250708144321980.png)
```log
2025-07-08 06:46:39 [56789abcde456789] [56789abcde456789] [] [ibs-portal] [http-nio-8080-exec-7] INFO com.cmcc.cdn.platform.selfservice.service.impl.AdaptWorkOrderServiceImpl 567 bpmDomainAdapt - send adaptation order to bpm:{"accessSystem":"IBS","account":"CDN-IBS","code":"005-20250708001","data":{"cacheOrderSource":"1","cdn_type":"wholeSiteFour","cpId":"80003254","domains":["20250708141239.komect.com"],"nameOfClient":"龙的麦当劳","operMail":"18944180260@gmail.com","operTel":"18944180260","operUser":"18944180260cmcc","sourceBasis":"005-20250708001","sourceOfDemand":"Cache+IBS平台)","summaryOfDemand":""},"processType":"7","userList":[{"userMail":"remaxob441@kamismail.comabc","userName":"15700197926cmcc","userTel":"15700197926"}]}
2025-07-08 06:46:41 [56789abcde456789] [56789abcde456789] [] [ibs-portal] [http-nio-8080-exec-7] INFO com.cmcc.cdn.platform.selfservice.service.impl.AdaptWorkOrderServiceImpl 569 bpmDomainAdapt - send adaptation order to bpm response:{"error_code":0,"error_msg":"success","instId":"046-20250708-0002"}
```
BPM 反馈:
```
2025-07-08 06:52:19 [6fdfe74d5defddf7] [6fdfe74d5defddf7] [] [ibs-portal] [http-nio-8080-exec-5] INFO com.cmcc.cdn.platform.selfservice.service.bpm.impl.BpmManageServiceImpl 4046 adaptOrderCallback - callback from bpm:{"code":"005-20250708001","plains":["1"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1751957272000,"plainName":"1","resultOfEstimate":"可支持"}],"resultOfPolicy":"1","userId":"921"}
2025-07-08 06:53:32 [83055e42ffd58171] [83055e42ffd58171] [] [ibs-portal] [http-nio-8080-exec-9] INFO com.cmcc.cdn.platform.selfservice.service.bpm.impl.BpmManageServiceImpl 946 orderCallback - callback from bpm:{"approve":0,"code":"005-20250708001","plain_info":[{"approve":0,"domain_pre_info":[{"domain":"20250708141239.komect.com","httpSelection":{"protocol":0},"plain_name":"1","provinces":["000"],"schedule_type":"Forward","server_domain":["1.1.1.1"],"source_protocol":{"protocol_port":{"http":2},"protocol_type":1},"sources":[{"back_addr":"2.2.2.2","back_protocol":0,"primary":true,"type":"ip","weight":1}]}],"plain_name":"1"}],"user_id":"921"}
```
![](../../../../attachment/images-paste/image-20250708144952423.png)
![](../../../../attachment/images-paste/image-20250708145005072.png)
![](../../../../attachment/images-paste/image-20250708145018207.png)
## 全站七层加速
### 新增域名
![](../../../../attachment/images-paste/image-20250708145208537.png)
```log
2025-07-08 06:55:23 [456789abcde12345] [456789abcde12345] [] [ibs-portal] [http-nio-8080-exec-6] INFO com.cmcc.cdn.platform.selfservice.service.CacheWorkOrderServiceImpl 2414 bpmDomainAdapt - cache+定制化域名下发bpm, request:{"accessSystem":"IBS","account":"CDN-IBS","code":"004-20250708003","createDate":"2025-07-08 14:55:22","data":{"cacheOrderSource":"1","cdn_type":"wholeSiteseven","cpId":"80003254","domains":["20250708145040.komect.com"],"filelist":[{"fileId":"cya2snzcsqalqqveijapsig79","name":"信安导入模板.xls"}],"nameOfClient":"龙的麦当劳","operMail":"18944180260@gmail.com","operTel":"18944180260","operUser":"18944180260cmcc","sourceBasis":"004-20250708003","sourceOfDemand":"Cache+IBS平台)","summaryOfDemand":""},"processType":"6","userList":[{"userMail":"remaxob441@kamismail.comabc","userName":"15700197926cmcc","userTel":"15700197926"}]}
2025-07-08 06:55:25 [456789abcde12345] [456789abcde12345] [] [ibs-portal] [http-nio-8080-exec-6] INFO com.cmcc.cdn.platform.selfservice.service.CacheWorkOrderServiceImpl 2416 bpmDomainAdapt - cache+定制化域名下发bpm, response:{"error_code":0,"error_msg":"success","instId":"046-20250708-0003"}
```
```
2025-07-08 07:00:31 [12935fd93320357e] [12935fd93320357e] [] [ibs-portal] [http-nio-8080-exec-7] INFO com.cmcc.cdn.platform.selfservice.service.bpm.impl.BpmManageServiceImpl 4046 adaptOrderCallback - callback from bpm:{"code":"004-20250708003","plains":["1"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1751957763000,"plainName":"1","resultOfEstimate":"可支持"}],"resultOfPolicy":"1","userId":"921"}
2025-07-08 07:05:36 [2274202ac706a7da] [2274202ac706a7da] [] [ibs-portal] [http-nio-8080-exec-8] INFO com.cmcc.cdn.platform.selfservice.service.bpm.impl.BpmManageServiceImpl 946 orderCallback - callback from bpm:{"approve":0,"code":"004-20250708003","plain_info":[{"approve":0,"domain_pre_info":[{"domain":"20250708145040.komect.com","httpSelection":{"protocol":0},"plain_name":"1","provinces":["000"],"schedule_type":"Forward","server_domain":["1.1.1.1"],"source_protocol":{"protocol_port":{"http":1},"protocol_type":1},"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip","weight":1}]}],"plain_name":"1"}],"user_id":"921"}
```
![](../../../../attachment/images-paste/image-20250708150518830.png)
### 需求变更
```
20250708145417--8cf6-4dde-ae4b-f62e7a8e9dfc
```
![](../../../../attachment/images-paste/image-20250708150548525.png)
```
2025-07-08 07:08:49 [0123456789230123] [0123456789230123] [] [ibs-portal] [http-nio-8080-exec-4] INFO com.cmcc.cdn.platform.selfservice.service.impl.AdaptWorkOrderServiceImpl 567 bpmDomainAdapt - send adaptation order to bpm:{"accessSystem":"IBS","account":"CDN-IBS","code":"005-20250708002","data":{"cacheOrderSource":"1","cdn_type":"wholeSiteseven","cpId":"80003254","domains":["20250708145040.komect.com"],"nameOfClient":"龙的麦当劳","operMail":"18944180260@gmail.com","operTel":"18944180260","operUser":"18944180260cmcc","sourceBasis":"005-20250708002","sourceOfDemand":"Cache+IBS平台)","summaryOfDemand":""},"processType":"7","userList":[{"userMail":"remaxob441@kamismail.comabc","userName":"15700197926cmcc","userTel":"15700197926"}]}
2025-07-08 07:08:51 [0123456789230123] [0123456789230123] [] [ibs-portal] [http-nio-8080-exec-4] INFO com.cmcc.cdn.platform.selfservice.service.impl.AdaptWorkOrderServiceImpl 569 bpmDomainAdapt - send adaptation order to bpm response:{"error_code":0,"error_msg":"success","instId":"046-20250708-0004"}
```
```log
2025-07-08 07:14:20 [4903a708ee137e89] [4903a708ee137e89] [] [ibs-portal] [http-nio-8080-exec-7] INFO com.cmcc.cdn.platform.selfservice.service.bpm.impl.BpmManageServiceImpl 946 orderCallback - callback from bpm:{"approve":0,"code":"005-20250708002","plain_info":[{"approve":0,"domain_pre_info":[{"domain":"20250708145040.komect.com","httpSelection":{"protocol":1,"unique_id":"20250708145417--8cf6-4dde-ae4b-f62e7a8e9dfc"},"plain_name":"1","provinces":["000"],"schedule_type":"Forward","server_domain":["1.1.1.1"],"source_protocol":{"protocol_port":{"http":1},"protocol_type":1},"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip","weight":1}]}],"plain_name":"1"}],"user_id":"921"}
```
![](../../../../attachment/images-paste/image-20250708151028126.png)
![](../../../../attachment/images-paste/image-20250708151036713.png)
![](../../../../attachment/images-paste/image-20250708151055199.png)
![](../../../../attachment/images-paste/image-20250708151142570.png)
@@ -0,0 +1,322 @@
# 提示词 1
开发语言:JDK8
产品:页面、视频、下载、直播、超低时延直播、全站四层加速、全站七层加速
工单:试用单(试用开始时间、试用结束时间)、试用删除工单、开通单(开通时间)、非首次开通单(开通时间)、注销单(注销时间)。
对应两个概念:
试用:试用单、试用删除工单。
商用:开通单、非首次开通单、注销单。
一个企业必须要经过首次开通后才能进行非首次开通。
试用的时候会创建企业。
企业可以试用或商用多个产品,每个产品,也可以多个,用订购ID来进行区分。
工单也可能被驳回。
现在有一个需求,要统计客户数。
客户数定义:esop企业(cpid)+产品类型(点播(页面、下载、视频)、直播、超低时延直播、全站四层加速、全站七层加速)
也就是,cpid+点播 算一个数,点播包含了页面、下载、视频。cpid+直播算一个。cpid+超低时延直播算一个。cpid+全站四层加速算一个。cpid+全站七层加速算一个。
比如客户有两个订购是页面和1个订购是下载算一个企业数。
比如客户有两个订购是页面和1个订购是下载和1个订购是直播算两个企业数。
指标1)**CDN存量商用客户数**,如果产品下有多个订购已开通,开通时间为最早的开通时间。
指标2)**CDN注销客户数**业务订购均已注销,则定义为已注销。如果cpid+产品类型相同,但订购不同,都注销了才算注销。如果cpid+直播注销了,点播未注销,则统计直播的数据。
页面会传一个开始时间,一个结束时间,针对这两个指标只需要取结束时间进行计算。
有什么好的算法思维。
---
# 提示词 2
你是一位资深的算法工程师,精通数据统计和业务逻辑分析。我有一个需求,需要设计一种算法思维或逻辑来统计CDN服务的客户数,具体包括两个指标:**CDN存量商用客户数** 和 **CDN注销客户数**。以下是相关的业务背景和定义,请根据这些信息提供详细的算法思路或伪代码,使用JDK8相关的数据结构和逻辑。
### 业务背景
- **开发语言**JDK8
- **产品类型**:页面、视频、下载、直播、超低时延直播、全站四层加速、全站七层加速
- **工单类型**
- 试用:试用单(可获取试用开始时间、试用结束时间)
- 商用:开通单(包含开通时间)、非首次开通单(包含开通时间)、注销单(包含注销时间)
- **概念**
- 试用:试用单
- 商用:开通单、非首次开通单、注销单
- 注:企业必须首次开通后才能进行非首次开通;试用时会创建企业
- **企业与产品**:一个企业可以试用或商用多个产品,每个产品的订购用订购ID区分
- **工单状态**:工单可能被驳回
- **客户数定义**:以企业ID(cpid)+产品类型组合为单位计数,其中:
- 点播(包含页面、下载、视频)算一个类型
- 直播、超低时延直播、全站四层加速、全站七层加速各自算一个类型
- 示例:cpid+点播(无论有几个订购)算1个客户数;cpid+点播+直播算2个客户数
### 指标定义
1. **CDN存量商用客户数**:对于某一企业(cpid)+产品类型组合,如果该组合下有多个订购已开通,则以最早的开通时间为准,判定为存量商用客户。
2. **CDN注销客户数**:对于某一企业(cpid)+产品类型组合,如果该组合下的所有订购均已注销,则判定为已注销客户。如果同一cpid下,某产品类型(如直播)已注销,但另一类型(如点播)未注销,则只统计直播的注销数据。
- **时间范围**:页面会传入一个开始时间和结束时间,但这两个指标仅基于结束时间进行计算。
### 任务
请提供一种算法思维或逻辑,用于计算上述两个指标。输出应包含:
- 数据处理步骤(如何分组、筛选、计算)
- 如何处理产品类型分组(如点播包含页面、下载、视频)
- 如何判定存量商用客户和注销客户
- 可能用到的数据结构(如Map、List等,基于JDK8
- 对工单驳回等特殊情况的处理建议
- 最终输出结果的格式建议(例如,按cpid和产品类型组合的统计结果)
### 输出格式
- 使用结构化的文本或伪代码,清晰展示每一步逻辑。
- 如果可能,提供一个简单的示例,说明如何根据输入数据计算两个指标。
- 语言:中文
请按上述要求,提供详细的算法设计思路。
```
for (EnterpriseInfoDTO enterpriseInfo : enterpriseInfos) 的逻辑实现了获取每个企业下有多少产品,每个产品有多少订购,每个订购的,试用开始时间、试用结束时间、商用开始时间、商用结束时间、业务暂停时间、业务恢复时间。请用 List<EnterpriseProduct> enterpriseProducts 帮我收集。
enterpriseProducts结构为:
public class EnterpriseProduct {
private String enterpriseId;
private List<ProductDTO> products;
}
public class ProductDTO {
private String product;
private List<ProductDetailsDTO> details;
}
public class ProductDetailsDTO {
private String productId;
private String productType;
@Builder.Default
private List<TrialPeriodDTO> trialPeriods = new ArrayList<>(); // 试用周期
private LocalDateTime businessStartTime; // 商用开始时间。
private LocalDateTime businessCancelTime; // 商用注销时间。
@Builder.Default
private List<BusinessPeriodDTO> businessPeriods = new ArrayList<>(); // 商用暂停恢复周期
}
public class TrialPeriodDTO {
private LocalDateTime startTime;
private LocalDateTime endTime;
}
public class BusinessPeriodDTO {
private LocalDateTime pauseTime; // 商用暂停时间
private LocalDateTime restoreTime; // 商用恢复时间
}
```
---
# 提示词 3
你是一位资深的算法工程师,精通数据统计和业务逻辑分析。我有一个需求,需要设计一种算法思维或逻辑来统计CDN服务的客户数,具体包括两个指标:**CDN存量商用客户数** 和 **CDN注销客户数**。以下是相关的业务背景和定义,请根据这些信息提供详细的算法思路或伪代码,使用JDK8相关的数据结构和逻辑。
### 业务背景
- **开发语言**JDK8
- **产品类型**:点播、直播、超低时延直播、全站四层加速、全站七层加速
- **企业与产品**:一个企业可以试用或商用多个产品,每个产品的订购用订购ID区分
- **客户数定义**:以企业ID(cpid)+产品类型组合为单位计数,其中:
- 示例:cpid+点播(无论有几个订购)算1个客户数;
- 有cpid+点播(无论有几个订购),cpid+直播(无论有几个订购)算2个客户数
### 指标定义
1. **CDN存量商用客户数**:对于某一企业(cpid)+产品类型组合,改查询时间是否在商用订购时间段内。
2. **CDN注销客户数**:对于某一企业(cpid)+产品类型组合,如果该组合下的所有订购均已注销(也就是查询时间前所有订购均有商用开始时间和结束时间),则判定为已注销客户,但是如果该查询时间存在试用也不算注销。
- **时间取值**:页面会传入一个开始时间和结束时间,但这两个指标仅基于结束时间进行计算(LocalDateTime requestEndTime = request.getEndTime();)。
### 任务
请提供一种算法思维逻辑,用于计算上述两个指标。输出应包含:
- 数据处理步骤(如何分组、筛选、计算)
- 如何处理产品类型分组(如点播包含页面、下载、视频)
- 如何判定存量商用客户和注销客户
- 可能用到的数据结构(如Map、List等,基于JDK8
### 输出格式
- 清晰展示每一步逻辑代码。
- 语言:中文
请按上述要求,提供详细的算法设计思路。
---
# 提示词 4
你是一位资深的算法工程师,精通数据统计和业务逻辑分析。我有一个需求,需要设计一种算法思维或逻辑来统计CDN服务的客户数,具体包括两个指标:**CDN存量商用客户数** 和 **CDN注销客户数**。以下是相关的业务背景和定义,请根据这些信息提供详细的算法思路或伪代码,使用JDK8相关的数据结构和逻辑。
我现在有一个结构体 EnterpriseProduct
```java
@Data
@NoArgsConstructor
@AllArgsConstructor
public class EnterpriseProduct {
private String enterpriseId;
private List<ProductDTO> products;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductDTO {
private String product;
private List<ProductDetailsDTO> details;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductDetailsDTO {
private String productId;
private String productType;
@Builder.Default
private List<TrialPeriodDTO> trialPeriods = new ArrayList<>(); // 试用周期
private LocalDateTime businessStartTime; // 商用开始时间。
private LocalDateTime businessCancelTime; // 商用注销时间。
@Builder.Default
private List<BusinessPeriodDTO> businessPeriods = new ArrayList<>(); // 商用暂停恢复周期
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TrialPeriodDTO {
private LocalDateTime startTime;
private LocalDateTime endTime;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BusinessPeriodDTO {
/**
* 商用暂停时间.
*/ private LocalDateTime pauseTime;
/**
* 商用恢复时间
*/
private LocalDateTime restoreTime;
}
```
相当于一个企业下有多个产品,每个产品有多个订购。每个订购又有商用开始时间和结束时间(商用中的结束时间可能为空)和多段的试用开始结束周期(试用中的结束时间可能为空)。和商用暂停恢复周期(暂停中的恢复时间可能为空)。
### 业务背景
- **开发语言**JDK8
- **产品类型**:点播、直播、超低时延直播、全站四层加速、全站七层加速
- **企业与产品**:一个企业可以试用或商用多个产品,每个产品的订购用订购ID区分
- **客户数定义**:以企业ID(cpid)+产品类型组合为单位计数,其中:
- 示例:cpid+点播(无论有几个订购)算1个客户数;
- 有cpid+点播(无论有几个订购),cpid+直播(无论有几个订购)算2个客户数
### 指标定义
1. **CDN存量商用客户数**:对于某一企业(cpid)+产品类型组合,改查询时间是否在商用订购时间段内。
2. **CDN注销客户数**:对于某一企业(cpid)+产品类型组合,如果该组合下的所有订购均已注销(也就是查询时间前所有订购均有商用开始时间和结束时间),则判定为已注销客户,但是如果该查询时间存在试用也不算注销。
- **时间取值**:页面会传入一个开始时间和结束时间,但这两个指标仅基于结束时间进行计算(LocalDateTime requestEndTime = request.getEndTime();)。
### 任务
请提供一种算法思维逻辑,用于计算上述两个指标。输出应包含:
- 数据处理步骤(如何分组、筛选、计算)
- 如何处理产品类型分组(如点播包含页面、下载、视频)
- 如何判定存量商用客户和注销客户
- 可能用到的数据结构(如Map、List等,基于JDK8
### 输出格式
- 清晰展示每一步逻辑代码。
- 语言:中文
请按上述要求,提供详细的算法设计思路。
---
# 提示词 5
你是一位资深的算法工程师,精通数据统计和业务逻辑分析。我有一个需求,需要设计一种算法思维或逻辑来统计CDN服务的客户数对应详情列表,具体包括两个指标:**CDN存量商用客户数** 和 **CDN注销客户数**。以下是相关的业务背景和定义,请根据这些信息提供详细的算法思路和代码,使用 JDK8 相关的数据结构、逻辑和语法。
### 业务背景
- **开发语言**JDK8
- **产品类型**:点播、直播、超低时延直播、全站四层加速、全站七层加速
- **企业与产品**:一个企业可以试用或商用多个产品,每个产品可以订购多个,用订购用订购ID区分
- **客户数定义**:以企业ID(cpid)+产品类型组合为单位计数,其中:
- cpid+点播(无论有几个订购)算1个客户数;
- 有cpid+点播(无论有几个订购),cpid+直播(无论有几个订购)算2个客户数,相当于企业产品维度。
### 指标定义
1. **CDN存量商用客户数**:对于某一企业(cpid)+产品类型组合,改查询时间是否在商用订购时间段内。
2. **CDN注销客户数**:对于某一企业(cpid)+产品类型组合,如果该组合下的所有订购均已注销(也就是查询时间前所有订购均有商用开始时间和结束时间),则判定为已注销客户,但是如果该查询时间存在试用也不算注销。
- **时间取值**:页面会传入一个开始时间和结束时间,但这两个指标仅基于结束时间进行计算(LocalDateTime requestEndTime = request.getEndTime();)。
### 任务
请提供一种算法思维逻辑,用于根据现有计算路基,提供方案实现为前端提供上述两个指标详情列表(分页)。输出应包含:
CDN存量商用客户数:序号、CPID、企业名称、引入省份、状态、商用开通时间、类型
CDN注销客户数:序号、CPID、企业名称、引入省份、状态、注销时间、类型
关于状态:只要有开通就是已开通;全都注销是已注销;有已开通,对应的开通订购都处于暂停时间,算已暂停。
当前已有的逻辑时计算CDN存量商用客户数、CDN注销客户数的逻辑。是否可以抽出来一些公共方法。
### 输出格式
- 清晰展示每一步逻辑代码。
- 语言:中文
请按上述要求,提供详细的算法设计和实现。
@@ -0,0 +1,100 @@
# 网关转发记录曲线图接口说明
## 接口概述
新增了一个高效的曲线图数据查询接口,用于展示网关转发记录的统计数据。该接口支持多种时间粒度的聚合查询,并提供丰富的过滤条件。
## 接口信息
- **接口路径**: `POST /gateway/record/chart`
- **请求方式**: POST
- **Content-Type**: application/json
## 请求参数
### 必填参数
| 参数名 | 类型 | 说明 | 示例 |
|--------|------|------|------|
| startTime | LocalDateTime | 查询开始时间 | "2024-01-01 00:00:00" |
| endTime | LocalDateTime | 查询结束时间 | "2024-01-01 23:59:59" |
| timeGranularity | String | 时间粒度 | "5MIN" |
### 时间粒度选项
| 值 | 说明 | 聚合方式 |
|----|------|----------|
| 5MIN | 5分钟 | 按5分钟间隔聚合(00:00-00:04, 00:05-00:09…) |
| 1HOUR | 1小时 | 按小时聚合 |
| 1DAY | 1天 | 按天聚合 |
| 1WEEK | 1周 | 按周聚合(周一为起始) |
| 1MONTH | 1月 | 按月聚合 |
### 可选过滤参数
| 参数名 | 类型 | 说明 | 是否支持模糊查询 |
|--------|------|------|------------------|
| requestUrl | String | 接口路径 | ✅ |
| method | String | 请求方法 | ❌ |
| targetEndpoint | String | 目的地址 | ✅ |
| httpCode | Integer | HTTP状态码 | ❌ |
| gatewayEndpoint | String | 网关地址 | ✅ |
| minCostTime | Integer | 最小耗时(ms) | ❌ |
| maxCostTime | Integer | 最大耗时(ms) | ❌ |
| routeId | Long | 路由ID | ❌ |
| routeName | String | 路由名称 | ✅ |
## 请求示例
```json
{
"startTime": "2024-01-01 00:00:00", "endTime": "2024-01-01 23:59:59", "timeGranularity": "1HOUR", "requestUrl": "/api/user", "method": "GET", "minCostTime": 100, "maxCostTime": 5000}
```
## 响应数据结构
```json
{
"code": 200, "msg": "操作成功",
"data": { "dataPoints": [ { "timePoint": "2024-01-01 00:00:00", "count2xx": 150, "count4xx": 10, "count5xx": 2, "countOther": 1, "avgCostTime": 245.67 }, { "timePoint": "2024-01-01 01:00:00", "count2xx": 200, "count4xx": 15, "count5xx": 3, "countOther": 0, "avgCostTime": 198.34 } ] }}
```
## 响应字段说明
### dataPoints 数组中每个元素的字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| timePoint | LocalDateTime | 时间点(X轴) |
| count2xx | Long | 2xx状态码请求次数(左Y轴) |
| count4xx | Long | 4xx状态码请求次数(左Y轴) |
| count5xx | Long | 5xx状态码请求次数(左Y轴) |
| countOther | Long | 其他状态码请求次数(左Y轴) |
| avgCostTime | BigDecimal | 平均耗时ms,保留2位小数(右Y轴) |
## 性能优化说明
1. **索引优化**: 建议在 `request_time` 字段上创建索引以提高查询效率
2. **模糊查询**: 仅在 `requestUrl`、`targetEndpoint`、`gatewayEndpoint`、`routeName` 字段支持模糊查询
3. **时间范围**: 建议查询时间范围不要过大,以保证响应速度
4. **聚合查询**: 使用数据库层面的聚合查询,减少内存占用
## 前端图表建议
- **左Y轴**: 显示请求次数(count2xx, count4xx, count5xx, countOther
- **右Y轴**: 显示平均耗时(avgCostTime
- **X轴**: 显示时间(timePoint
- **图表类型**: 建议使用折线图或柱状图
- **颜色建议**:
- 2xx: 绿色(成功)
- 4xx: 橙色(客户端错误)
- 5xx: 红色(服务器错误)
- 其他: 灰色
- 平均耗时: 蓝色
## 注意事项
1. 时间粒度为左闭右开区间
2. 大数据量查询时建议适当限制时间范围
3. 模糊查询会影响性能,请谨慎使用
4. 平均耗时为0表示该时间段内没有有效的耗时数据
@@ -0,0 +1,96 @@
这是我的请求记录表:
对应的 mapper 等文件在:
`D:\MyCode\Work\yd-hy\ibs-plus\plus-service\src\main\java\com\cmcc\plus\gateway`
`D:\MyCode\Work\yd-hy\ibs-plus\plus-service\src\main\resources\mapper\gateway`
表结构:
```java
@TableName(value = "gw_forward_record")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class GwForwardRecord implements Serializable {
/**
* 记录ID
*/
@TableId(type = IdType.AUTO)
private Long recordId;
/**
* 请求UUID
*/
private String uuid;
/**
* 请求时间
*/
private LocalDateTime requestTime;
/**
* 接口路径
*/
private String requestUrl;
/**
* 请求方法
*/
private String method;
/**
* 目的地址
*/
private String targetEndpoint;
/**
* 请求响应码
*/
private Integer httpCode;
/**
* 链路追踪ID
*/
private String traceId;
/**
* 网关地址
*/
private String gatewayEndpoint;
/**
* 请求匹配的路由ID
*/
private Long routeId;
/**
* 请求耗时(ms)
*/
private Integer costTime;
@Serial
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
```
我现在有一个需求,需要给前端提供一个曲线图数据查询接口:
接口创建在 com.cmcc.plus.web.controller.gateway.GwForwardRecordController 下。
注意一定要保证代码执行效率。因为这是网关请求记录表,是一个量级非常大的表。
图中包含 5 条线:2xx、4xx、5xx、其他状态码(请求次数,对应表httpCode字段)、平均耗时(ms,对应表 costTime 字段)
我的图标左侧 Y 轴为 请求次数,右侧 Y 轴 平均耗时。下方 X 轴为时间坐标轴。
我想给我前端一个通用方法,查询某个时间段的这五个指标(也就是针对 requestTime 的过滤)。costTime(比如前端传 200ms-300ms 的查询)同时支持通过 requestUrl、method、targetEndpoint、httpCode、gatewayEndpoint 的过滤。
请仔细设计返回前端的结构体,做到最标准和效率。
仔细设计 requestUrl、targetEndpoint、gatewayEndpoint 是否可以使用模糊查询,前提是保证效率,因为这个表是一个非常大的表。
针对时间粒度。帮我提供时间区间内 5 分钟(例如 00:00:00 的数据就是 00:00:00-00:04:59),1小时,1天,一周,一月。时间粒度均为左闭右开。这个粒度根据前端选择进行聚合。不用一次全聚合出来。
@@ -0,0 +1,81 @@
# 客户运营数据统计-新增累计商用客户数试用客户数等6项统计及页面展示
NRWLXT-29935
## 需求评审
## 需求备注
## 需求开发
# 集客大厅前置校验新增信安校验多sheet提示
NRWLXT-29939
## 需求评审
## 需求备注
## 需求开发
# 用例评审
# 冒烟自测
## 订购迁移工单
1、IBS测试环境:https://test.p.cdn.10086.cn
2、IBS存在esop企业A、已业务开通:网页加速的订购ID:20230000810、企业CP_ID:83000001
esop企业B、已业务开通超低时延直播加速订购ID:20240000001,订购下域名test1.com、test2.com、test3.com,域名状态:已生效、企业CP_ID:83000002
---
网页加速
ECName1753237067、ECID1753237067、DevReq1753237067A.komect.com、PRODUCTID1753237241、83569731
超低时延直播
ECName1753237499、ECID1753237499、DevReq1753237499A.komect.com、PRODUCTID1753237683、83559505
## 订购迁移工单下发BPM同步平面信息
1、IBS测试环境:https://test.p.cdn.10086.cn
2、IBS存在esop企业A、已业务开通:网页加速的订购ID:20230000810、业务开通的产品类型-移动网内CDN 分发平面:华为平面
esop企业B、已业务开通超低时延直播加速订购ID:20240000001,订购下域名test1.com、test2.com、test3.com,域名状态:已生效、业务开通的产品类型-三网CDN
---
ECName1753239995
页面
PRODUCTID1753240145
域名状态已生效
---
1、IBS测试环境:https://test.p.cdn.10086.cn
2、IBS存在esop企业A、已业务开通:网页加速的订购ID:20230000810、业务开通的产品类型-移动网内CDN 分发平面:华为平面
esop企业B、已业务开通超低时延直播加速订购ID:20240000001,订购下域名test1.com、test2.com、test3.com,域名状态:已生效、业务开通的产品类型-三网CDN
## 企业客户域名列表展示
1、IBS测试环境:https://test.p.cdn.10086.cn
2、IBS已存在esop企业Test、企业下域名www.test.com
3、esop企业A账号下已新增冲突域名:www.test.com.01.cdnhwcqir15.com,产品类型:网页加速
## 通用客户域名列表查询接口-域名列表查询
1、IBS已存在归属A企业下域名testa.com,状态为已生效
2、IBS已存在归属B企业下真实域名:testa.com,虚拟域名:testa.com.01.cdnhwcqir15.com,下发平面为华为平面,状态为已生效
@@ -0,0 +1,224 @@
```
FOR 循环
"batchSize": 1000
2025-07-29 14:50:35 [XNIO-1 task-2] INFO c.c.p.g.s.GwForwardRecordService:364 - 测试数据生成完成,总计: 100 条
2025-07-29 14:50:35 [XNIO-1 task-2] INFO c.c.p.c.w.i.PlusWebInvokeTimeInterceptor:81 - [PLUS]结束请求 => URL[POST /gateway/record/generate-test-data],耗时:[12,736]毫秒
2025-07-29 14:53:15 [XNIO-1 task-2] INFO c.c.p.g.s.GwForwardRecordService:364 - 测试数据生成完成,总计: 1000 条
2025-07-29 14:53:15 [XNIO-1 task-2] INFO c.c.p.c.w.i.PlusWebInvokeTimeInterceptor:81 - [PLUS]结束请求 => URL[POST /gateway/record/generate-test-data],耗时:[65,119]毫秒
2025-07-29 15:05:18 [XNIO-1 task-2] INFO c.c.p.g.s.GwForwardRecordService:364 - 测试数据生成完成,总计: 2000 条
2025-07-29 15:05:18 [XNIO-1 task-2] INFO c.c.p.c.w.i.PlusWebInvokeTimeInterceptor:81 - [PLUS]结束请求 => URL[POST /gateway/record/generate-test-data],耗时:[131919]毫秒
批量插入
"batchSize": 1000
2025-07-29 15:13:02 [XNIO-1 task-2] INFO c.c.p.g.s.GwForwardRecordService:357 - 测试数据生成完成,总计: 1000 条
2025-07-29 15:13:02 [XNIO-1 task-2] INFO c.c.p.c.w.i.PlusWebInvokeTimeInterceptor:81 - [PLUS]结束请求 => URL[POST /gateway/record/generate-test-data],耗时:[1153]毫秒
2025-07-29 15:13:40 [XNIO-1 task-2] INFO c.c.p.g.s.GwForwardRecordService:357 - 测试数据生成完成,总计: 10000 条
2025-07-29 15:13:40 [XNIO-1 task-2] INFO c.c.p.c.w.i.PlusWebInvokeTimeInterceptor:81 - [PLUS]结束请求 => URL[POST /gateway/record/generate-test-data],耗时:[6060]毫秒
"batchSize": 2000
2025-07-29 15:14:32 [XNIO-1 task-2] INFO c.c.p.g.s.GwForwardRecordService:357 - 测试数据生成完成,总计: 10000 条
2025-07-29 15:14:32 [XNIO-1 task-2] INFO c.c.p.c.w.i.PlusWebInvokeTimeInterceptor:81 - [PLUS]结束请求 => URL[POST /gateway/record/generate-test-data],耗时:[8088]毫秒
"batchSize": 3000
2025-07-29 15:15:02 [XNIO-1 task-2] INFO c.c.p.g.s.GwForwardRecordService:357 - 测试数据生成完成,总计: 10000 条
2025-07-29 15:15:02 [XNIO-1 task-2] INFO c.c.p.c.w.i.PlusWebInvokeTimeInterceptor:81 - [PLUS]结束请求 => URL[POST /gateway/record/generate-test-data],耗时:[9107]毫秒
"batchSize": 1000
2025-07-29 15:16:40 [XNIO-1 task-2] INFO c.c.p.g.s.GwForwardRecordService:357 - 测试数据生成完成,总计: 50000 条
2025-07-29 15:16:40 [XNIO-1 task-2] INFO c.c.p.c.w.i.PlusWebInvokeTimeInterceptor:81 - [PLUS]结束请求 => URL[POST /gateway/record/generate-test-data],耗时:[39666]毫秒【数据犯了5倍,但时间6倍】
"batchSize": 5000
2025-07-29 15:18:37 [XNIO-1 task-2] INFO c.c.p.g.s.GwForwardRecordService:357 - 测试数据生成完成,总计: 50000 条
2025-07-29 15:18:37 [XNIO-1 task-2] INFO c.c.p.c.w.i.PlusWebInvokeTimeInterceptor:81 - [PLUS]结束请求 => URL[POST /gateway/record/generate-test-data],耗时:[45076]毫秒【多了十五秒】
```
### 最左前缀原则
```
/**
* 生成测试数据
*/
@PostMapping("/generate-test-data")
public R<String> generateTestData(@Valid @RequestBody GwForwardRecordTestDataReq request) {
long startTime = System.currentTimeMillis();
gwForwardRecordService.generateTestData(request);
long endTime = System.currentTimeMillis();
String message = String.format("成功生成 %d 条测试数据,耗时 %d 毫秒",
request.getCount(), endTime - startTime);
return R.ok(message);
}
/**
* 生成测试数据
*/
public void generateTestData(GwForwardRecordTestDataReq request) {
log.info("开始生成测试数据,数量: {}", request.getCount());
// 设置默认时间范围
LocalDateTime endTime = request.getEndTime() != null ? request.getEndTime() : LocalDateTime.now();
LocalDateTime startTime = request.getStartTime() != null ? request.getStartTime() : endTime.minusDays(7);
// 获取路由配置
Map<String, Long> routeNameToIdMap = gwRouteConfigService.selectRouteNameToIdMap();
if (routeNameToIdMap.isEmpty()) {
throw new RuntimeException("没有找到路由配置,请先配置路由");
}
List<String> routeNames = new ArrayList<>(routeNameToIdMap.keySet());
int batchSize = request.getBatchSize();
int totalCount = request.getCount();
int processedCount = 0;
try {
while (processedCount < totalCount) {
int currentBatchSize = Math.min(batchSize, totalCount - processedCount);
List<GwForwardRecord> records = generateBatchTestData(currentBatchSize, startTime, endTime,
routeNames, routeNameToIdMap);
// 批量插入主表数据
recordMapper.insertBatch(records, currentBatchSize);
processedCount += currentBatchSize;
if (processedCount % (batchSize * 10) == 0) {
log.info("已生成测试数据: {}/{}", processedCount, totalCount);
}
}
log.info("测试数据生成完成,总计: {} 条", totalCount);
} catch (Exception e) {
log.error("生成测试数据失败", e);
throw new RuntimeException("生成测试数据失败: " + e.getMessage());
}
}
/**
* 生成批量测试数据
*/
private List<GwForwardRecord> generateBatchTestData(int count, LocalDateTime startTime, LocalDateTime endTime,
List<String> routeNames, Map<String, Long> routeNameToIdMap) {
List<GwForwardRecord> records = new ArrayList<>(count);
ThreadLocalRandom random = ThreadLocalRandom.current();
// 预定义的API路径模板
String[] apiPaths = {
"/api/v1/user/login", "/api/v1/user/logout", "/api/v1/user/profile",
"/api/v2/sync/BBOSS/PreCheckServ", "/api/v2/sync/BBOSS/QueryServ", "/api/v2/sync/BBOSS/UpdateServ",
"/api/v1/order/create", "/api/v1/order/query", "/api/v1/order/update", "/api/v1/order/cancel",
"/api/v1/payment/create", "/api/v1/payment/query", "/api/v1/payment/callback",
"/api/v1/product/list", "/api/v1/product/detail", "/api/v1/product/search",
"/api/v1/system/health", "/api/v1/system/config", "/api/v1/system/monitor"
};
// HTTP方法
String[] methods = {"GET", "POST", "PUT", "DELETE"};
// 目标服务地址
String[] targetEndpoints = {
"127.0.0.1:8080", "127.0.0.1:8081", "127.0.0.1:8082",
"192.168.1.100:8080", "192.168.1.101:8080", "192.168.1.102:8080"
};
// 网关地址
String[] gatewayEndpoints = {
"192.168.208.16:8087", "192.168.208.17:8087", "192.168.208.18:8087"
};
// HTTP状态码权重分布(模拟真实场景)
int[] httpCodes = {200, 200, 200, 200, 200, 200, 200, 200, 200, 201, 400, 401, 403, 404, 500, 502, 503};
long startTimestamp = startTime.atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli();
long endTimestamp = endTime.atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli();
for (int i = 0; i < count; i++) {
// 随机生成时间
long randomTimestamp = random.nextLong(startTimestamp, endTimestamp);
LocalDateTime requestTime = LocalDateTime.ofInstant(
java.time.Instant.ofEpochMilli(randomTimestamp), java.time.ZoneId.systemDefault());
// 随机选择路由
String routeName = routeNames.get(random.nextInt(routeNames.size()));
// 生成UUID和TraceId
String uuid = java.util.UUID.randomUUID().toString();
String traceId = uuid.replace("-", "").substring(0, 16);
// 随机选择API路径
String requestUrl = apiPaths[random.nextInt(apiPaths.length)];
// 随机选择HTTP方法
String method = methods[random.nextInt(methods.length)];
// 随机选择目标地址
String targetEndpoint = targetEndpoints[random.nextInt(targetEndpoints.length)];
// 随机选择网关地址
String gatewayEndpoint = gatewayEndpoints[random.nextInt(gatewayEndpoints.length)];
// 随机选择HTTP状态码
Integer httpCode = httpCodes[random.nextInt(httpCodes.length)];
// 生成响应时间(模拟真实分布)
Integer costTime = generateRealisticCostTime(random, httpCode);
GwForwardRecord record = GwForwardRecord.builder()
.uuid(uuid)
.requestTime(requestTime)
.requestUrl(requestUrl)
.method(method)
.targetEndpoint(targetEndpoint)
.httpCode(httpCode)
.traceId(traceId)
.gatewayEndpoint(gatewayEndpoint)
.routeId(routeNameToIdMap.get(routeName))
.costTime(costTime)
.build();
records.add(record);
}
return records;
}
/**
* 生成真实的响应时间分布
*/
private Integer generateRealisticCostTime(ThreadLocalRandom random, Integer httpCode) {
// 根据HTTP状态码生成不同的响应时间分布
if (httpCode >= 200 && httpCode < 300) {
// 成功请求:大部分在100-2000ms之间,少数较慢
if (random.nextDouble() < 0.8) {
return random.nextInt(100, 2000); // 80%的请求在100-2000ms
} else if (random.nextDouble() < 0.95) {
return random.nextInt(2000, 5000); // 15%的请求在2-5秒
} else {
return random.nextInt(5000, 15000); // 5%的请求在5-15秒
}
} else if (httpCode >= 400 && httpCode < 500) {
// 客户端错误:通常较快
return random.nextInt(50, 1000);
} else if (httpCode >= 500) {
// 服务器错误:可能很慢或超时
if (random.nextDouble() < 0.7) {
return random.nextInt(1000, 10000); // 70%在1-10秒
} else {
return random.nextInt(10000, 30000); // 30%在10-30秒
}
} else {
// 其他状态码
return random.nextInt(100, 3000);
}
}
```
@@ -0,0 +1,67 @@
# Role: 高级Java工程师
## Profile
- Description: 您是一位经验丰富的Java后端开发专家,精通Spring Boot框架和相关的生态系统。您尤其擅长使用像EasyExcel这样的库来处理复杂的文件导入导出需求,并且代码风格优雅、结构清晰、注重实践。
## Rules
1. 提供的代码必须是可工作的、高质量的,并包含必要的导入语句。
2. 代码解释要清晰易懂,说明关键部分的设计思路和作用。拥有标准的中文 javadoc。
## Goal
JDK8、spring-boot.version2.5.15、项目已引入 easyexcel4.0.3
无需参考历史实现,直接写新的实现即可。在当前 DomainBatchDeletionController 中增加一个“批量删除模板”下载功能。对应的 service 是 DomainBatchDeletionService。如果有关于文件操作的公共方法放到 D:\MyCode\Work\yd-hy\ibs-portal\cdn-service\src\main\java\com\cmcc\cdn\platform\common\util\EasyExcelUtil.java,注意是公共,大多数实现写在service 中即可。模板只有一列,第一行第一个单元格是 "域名",此单元格绿色背景(0, 176, 80,这个条件必须实现的),第一列前 30 行有框线。列宽设置为默认40(这个是否可以通过注解实现。)。文件名称:批量删除域名模板。
关于颜色处理的代码参考下边:
```java
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import java.awt.Color;
import java.util.Arrays;
import java.util.List;
public class ExcelColorExample {
/**
* 自定义颜色处理器
*/
static class CustomColorHandler implements CellWriteHandler {
@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
List<com.alibaba.excel.metadata.data.WriteCellData<?>> cellDataList,
Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
if (cell == null) return;
Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
CellStyle cellStyle = workbook.createCellStyle();
// 设置背景色(例如 RGB: 255, 200, 200
XSSFColor myColor = new XSSFColor(new Color(255, 200, 200), null);
((XSSFCellStyle) cellStyle).setFillForegroundColor(myColor);
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 额外设置边框(可选)
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
cell.setCellStyle(cellStyle);
}
}
}
```
现在模板有了。客户会在第一列第一行域名下方依次填写要删除的域名。请帮我写一个接口:
1. 校验若文件大小超出上限5M,返回“文件大小超出5M上限,请重新上传”;
2. 文件格式校验:若格式与域名模板不一致,返回提示“文件格式错误,请按模板格式上传”。校验为(第一列第一行是“域名”)
3. 过滤出上传中不是当前客户经理名下企业的域名,收集为一个 list 给前端。(这个我来写给我留好 TODO 即可。)
4. 过滤出在平台不存在的域名给前端。(这个我来写给我留好 TODO 即可。)
5. 剩余域名查询域名表获取域名的域名、 订购ID、域名是否存在、产品类型、域名状态、近7天峰值流量、近7天峰值流量单位(帮我声明好前端对象)
@@ -0,0 +1,219 @@
# 2.2 直播流程改造-域名配置变更的工单改成增量修改
NRWLXT-30027
## 需求评审
## 需求备注
√修改引导机制:scheduleType
√cnamednsCname
√修改回源hostconvergentDomain
√httpSelection
√configCrt
√loopDomain
√provinces
√sourceProtocol
√domainPlain
√state
√绑定证书生效
---
关于 cache+ chargeProcessFlag
httpPort
httpsPort
## 需求开发
# 2.3 直播流程改造-直播流程支持退回
NRWLXT-30028
## 需求评审
## 需求备注
涉及接口
```
驳回接口:/api/bpm/bpmDrawBack
试用单
试用变更工单
非首次开通
域名配置需求
需求变更工单
```
## 需求开发
# 2.5 针对IBS发起的工单支持现网部署验收环节退回
NRWLXT-30029
## 需求评审
1、针对ibs发起的,域名配置需求(新增)、需求变更工单、cache+域名配置工单、Cache+需求变更工单,当bpm现网部署验收环节退回时,ibs直接同步关闭这四种类型的工单。
2、与bpm交互10.4章节新增is_acceptance_returned字段,是否现网部署验收环节退回,0:是1:否,为0时表示BPM现网部署验收环节因业务结束回滚调用此接口;其他场景退回不受理BPM传1。
当bpm传0时,这四种类型的工单直接同步关闭,不再打回给创建人,当bpm传0时,仍保持现有逻辑不变。
## 需求备注
## 需求开发
# 3.5 IBS支持批量域名删除功能
NRWLXT-30019
## 需求评审
1. 文件大小,1w 域名加上备注是 百K 左右。这个地方如果限制加个三五兆是不是比较合适。
2. 根据导入时间倒序排序,对导入时间一致的不做排序要求。这个东西是不是看客户想删除的是哪一类型的?
3. 这个功能如果做成持久化,有一些问题。
1. 客户导入当时可能不处理。但是后期可能存在删除又通过别的企业引入。造成歧义。
2. 随着时间的增长,这里数据肯定会越来越多。越来越重。
3. 关于平台不存在的域名是否直接不渲染。或者怎么定期清楚。
4. 删除操作需进行校验,只允许删除当前客户经理名下企业的域名,不可删除其他。(腾讯的客户经理只能删腾讯的域名,不能删华为的),是否可以放到上传附件的时候,这样有利于数据干净。
5. 删除最好说清楚域名删除还是记录删除。
6. 关于 cache+ 和 esop。
## 需求备注
1. 政企客户经理账号,运营管理一级菜单下新增域名批量删除二级菜单
项目是 JDK8
在当前 DomainBatchDeletionController 中增加一个批量删除模板下载功能。模板只有一列,第一行第一个单元格是 "域名"此单元格绿色背景(#00B050),第一列前 30 行有框线,文件名称:批量删除域名模板。
项目新引入了 D:\MyCode\Work\yd-hy\ibs-portal\cdn-service\src\main\java\com\cmcc\cdn\platform\common\util\EasyExcelUtil.java。
实现尽可能优雅,标准,健壮。不需要参考项目其他附件模板下载实现,用你认为最合适的方式。
大数据交互接口:
```
http://172.21.16.30:8511
/analyzer/bandwidth/statistics
?startTime=2025-06-01T00%3A00%3A00%2B08%3A00 // 开始时间 2025-08-13T02:15:30+08:00
&endTime=2025-06-30T00%3A00%3A00%2B08%3A00 // 结束时间 2025-08-13T02:15:30+08:00
&cpIds=9dtzcfhn-o5qam4hr6xvd4hiy // 企业 ID
&productId=2 // 产品 ID ProductsEnums
&domainNames=xcftestf.052025030501.com // 域名
&areas=all // 默认 all
&isps=all // 默认 all
&ipProtocol=all // 默认 all
&seconds=86400 // 天粒度都是这个
&provider=1 // 所有就是这个四个平面自动转换
&provider=2
&provider=3
&provider=crs-4
&provider=8
[
{
"domain": "baidu.com",
"peakBandwidth": "123456789.12",
"peakTime": "20250813100132"
},
{
"domain": "baid.com",
"peakBandwidth": "123456789.12",
"peakTime": "20250813100132"
}
]
public class PeakBandwidthRequest {
private String startTime; // 格式: "2025-06-01T00:00:00+08:00"
private String endTime; // 格式: "2025-06-30T00:00:00+08:00"
private String cpIds; // 例如: "9dtzcfhn-o5qam4hr6xvd4hiy"
private Integer productId; // 产品ID (如2)
private List<String> domainNames; // 域名列表 (最多100个)
private String areas = "all"; // 默认"all"
private String isps = "all"; // 默认"all"
private String ipProtocol = "all"; // 默认"all"
private Integer seconds = 86400; // 默认86400(天粒度)
private List<String> providers; // 值示例: ["1","2","3","crs-4","8"]
}
```
```
批量删除-点播
/configManage/batch/operate
{
"domainIds": [
35349,
35351
],
"operate": "DELETE"
}
批量删除-直播
/live/order/batchDelete
{
"domainIds": [
34490,
34496
],
"operate": "DELETE"
}
停用-直播
/live/order/disable
```
遗留代码
```
/**
* 根据域名ID列表查询域名基本信息(ID、域名名称、产品ID)
*
* @param domainIds 域名ID列表
* @return 域名基本信息列表
*/
@Query("SELECT new com.cmcc.cdn.platform.selfservice.entity.jpa.DomainBasicInfoDTO("
+ "ssdc.id, "
+ "ssdc.domain, "
+ "ssdc.product) "
+ "FROM SelfServiceDomainConfigPO ssdc "
+ "WHERE ssdc.id IN :domainIds")
List<DomainBasicInfoDTO> findDomainIdProductIdByIds(@Param("domainIds") List<Long> domainIds);
/**
* 域名基本信息 DTO 类。
*/
@Getter
@AllArgsConstructor
public class DomainBasicInfoDTO
implements Serializable {
private final Long id;
private final String domain;
private final ProductsEnums product;
}
```
## 需求开发
# 用例评审
# 冒烟自测
@@ -0,0 +1,130 @@
# 问题 1
田卓好,杨雪莹的7月的数据,有些问题,我列在下面了,明天帮忙看下吧:
系统导出的7月数据,“CDN存量试用客户数”那个表格中,缺少了下面这些企业,请确认,问题我已标记说明
![](../../../../attachment/images-uuid/d852014053d243a582e81279c96a87c2.png)
北京技德系统技术有限公司【试用结束时间 2025-07-18 23:59:00,我查询结束时间为 7月31日】
江苏达芬云科技有限公司温州分公司【试用结束时间 2025-07-11 23:59:00,我查询结束时间为 7月31日】
安徽远博通达科技有限公司
广州信游信息科技有限公司
河北广播电视台(集团)
深圳市云网万店电子商务有限公司
长沙市摩根网络科技有限公司
# 【√】问题 2
> 两个逻辑问题,已修正。
以下系统导出的7月“CDN存量试用客户数”中,有两个问题:
1. 表格中给出的这些企业的状态都是“试用中”,与ibs平台查询的结果不一致,ibs上查到的大部分是试用结束未停服;
2. 试用结束未停服,6月鹏豪说只有“北京华夏创新科技有限公司”是真的试用结束未停服,其他企业都让我删除了,所以得确认下这里其他的试用结束未停服的企业是否要删除;
3. 企业“北京市数字教育中心(北京电化教育馆)”有两个订购,都是点播,已经有点播是已开通了,试用企业中就不需要再有点播的产品关系了吧,请确认下吧
北京新流万联网络技术有限公司(新增)
北京华夏创新科技有限公司
北京艾普信电子科技有限公司
广西阳晨伟业科技有限公司
北京市数字教育中心(北京电化教育馆)
广东云下汇金科技有限公司
广州可圈点信息科技有限公司
上海琥讯信息科技有限公司
上海梦曼网络科技有限公司
![](../../../../attachment/images-uuid/b6fb0552e3e94f27ae03c22cc3494856.jpg)
这个我之前有统计过,以我的为准吧。但是状态可以改为 试用结束(未停服),这个问题我会修正一下代码。
# 【√】问题 3
> 系统数据没有问题。
![](../../../../attachment/images-uuid/7fd1effb179e4e3c8cf15f40675a2d0e.png)
# 【√】问题 4
> 系统数据没有问题。
> 德阳城市智慧之心信息技术有限公司 试用开始时间是:2025-08-01 10:25:25
> 汉中日报社 试用开始时间是:2025-08-04 11:02:09
> 四川华西集团有限公司 试用开始时间是:2025-08-04 14:06:27
![](../../../../attachment/images-uuid/8b40312a288a42878d7e8057957e9fe6.png)
# 【√】问题 5
> 系统数据没有问题。
25年至今试用转商企业
![](../../../../attachment/images-uuid/d838fe28bc024dcc916a12b1a6d0510e.png)
# 【√】问题 6
> 北京东方美景展览有限公司 24 年存在开通。
> 广西数诚计算机网络工程有限公司 8 月才开通。江苏和四川类似。
> 深圳腾讯 24 年有直播。
![](../../../../attachment/images-uuid/f0282f0f96ac46ec91cf6c8e5e071791.png)
# 【√】问题 7
> 北京达佳互联信息技术有限公司 24 年开通过。
> 北京东方美景展览有限公司 24 年开通过。
> 深圳华为云计算技术有限公司 23 年开通过。
> 深圳市腾讯计算机系统有限公司 24 年开通过。
25年新增商用客户数
![](../../../../attachment/images-uuid/f2f21dce1ae6457783cd49f99767a395.png)
# 【√】问题 8
> 数据已核对。
> 注意有的客户是 24 年底走的单子,但是实际配置完开始试用是 25 年。
25年新增客户数:
![](../../../../attachment/images-uuid/6138a452f15f417fa93e1a3f0657eeb5.png)
# 【√】问题 9
> 北京东方美景展览有限公司 已经试用过了。
> 德阳城市智慧之心信息技术有限公司 是八月份的。
> 汉中日报社 是八月份的。
> 深圳市腾讯计算机系统有限公司 很早就有了。
> 四川华西集团有限公司 23 年的企业。
![](../../../../attachment/images-uuid/c2e36399bede476b893a85309d27e83b.png)
# 【√】问题 10
> 能查出来肯定是库中实际存在的。
CDN累计客户数:
![](../../../../attachment/images-uuid/dbc81b3324964d8ab879eedc1be57e24.png)
# 问题 11
> 历史有一些工单没有试用记录。
![](../../../../attachment/images-uuid/456196ff11bc408dea59beb9b9985080.png)
![](../../../../attachment/images-paste/image-20250815092219063.png)
@@ -0,0 +1,67 @@
现在需要给前端提供一个批量删除接口,在我的 DomainBatchDeletionController
接口规范
```
批量删除接
接口
POST /domain/batch-deletion/delete
{
"domainIds": [
34490,
34496
],
"operate": "DELETE"
}
响应
{
"data": {
"successDeletedDomains": [
"DevReq1748424822A.komect.com"
],
"failedDeletedDomains": [
"xcftestf.052025030501.com"
]
},
"success": true
}
```
通过这个接口可以直接删除点播域名和直播域名。
历史已经存在点播批量删除接口逻辑:
```
com.cmcc.cdn.platform.selfservice.controller.ConfigManageController#batchDelete
```
直播删除接口逻辑:
```
com.cmcc.cdn.platform.selfservice.controller.live.LiveOrderController#batchDelete
```
我现在需要汇总为一个新街口,自动区分直播和点播,然后下发删除。
直播点播区分方法:
```
ProductsEnums.isLiveStreamProduct
```
查询 products 的方法,需要写在 private SelfServiceDomainConfigDao selfServiceDomainConfigDao; 中,注意注意查询效率,尽可能只查 id 和对应的 product,然后用 ProductsEnums.isLiveStreamProduct 分类。
有一个问题是,如何把两个下发柔和起来。但保持和之前一样的下发逻辑。最终任务记录一批的形式记录在 batchDeleteDomainRecordDao 中。包括之前相当于两个接口直播打包,点播打包。新街口可以打包在一起吗?
现在这样删除实现有点问题,能否给我把现有的
点播删除
com.cmcc.cdn.platform.selfservice.service.impl.ConfigManageServiceImpl#batchDeleteDomain
直播删除
com.cmcc.cdn.platform.selfservice.service.live.impl.LiveConfigServiceImpl#batchDeleteDomain
融合在这个方法。不然直接调用异常域名和任务记录不太对。
@@ -0,0 +1,194 @@
# 3.4 信安查询接口增加重试机制
NRWLXT-30114
## 需求评审
1、为信安查询接口增加重试机制。单次请求超时时间设为15秒,当请求超时或报错时,系统将自动进行重试,最大重试次数为3次。若所有重试均失败,则本次调用按失败处理。
## 需求备注
## 需求开发
# 4.4 业务巡检增加商用域名业务全生命周期巡检:域名创建、域名启停、删除。
NRWLXT-30115
## 需求评审
业务巡检增加试商用域名(cache+、esop、移动云)业务全生命周期巡检:域名创建、域名启停、删除,记录操作日志。操作时间、域名、域名引入时间、企业、域名所属平面、是否计费、操作人、状态。
数据库表:domain_lifecycle_record
## 需求备注
业务巡检增加试商用域名业务全生命周期巡检:域名启停、删除,记录操作日志。企业、平面、是否计费、操作人、操作时间
## 需求开发
场景
```
域名配置需求工单
需求变更
cache+ 域名配置需求工单
cache+ 需求变更
试用单
试用变更新增域名
非首次开通
自助域名页面和接口
移动云
点播直播控制台
停启用删除按钮
控制台批量删除按钮
直播控制台批量停用
单独批量删除功能
k-v 删除
```
字段
```
id
操作记录时间
domain
cp_domain
enterprise_id
domain_plain
charge_process_flag
计费开始时间
操作类型:创建()、删除、启用、停用
操作来源:用户、接口
操作人
域名引入时间
state 变更前
state 变更后
```
停用就是计费结束。
我有一个需求,记录域名声明周期变化。我想利用 SelfServiceDomainConfigPO 的持久化声明周期,例如创建这个表的时候记录到我的 DomainLifecycleRecordPO(对应的 DAO 是 DomainLifecycleRecordDao),更近这个表的时候记录到我的表。但是更新条件是 charge_process_flag 发生变化的时候。操作人 可以通过SecurityUserUtil.getCurrentUser().getId()获取,如果获取到了就是用户操作,没有就是系统或者定时任务操作,可以为空。因为涉及在 SelfServiceDomainConfigPO 声明周期做一些事情,一定要考虑周全。不要影响原来的流程。
这里我是想实现,state 变化的时候或 charge_process_flag 发生变化的时候。
```
@Autowired
private SelfServiceDomainConfigService selfServiceDomainConfigService;
selfServiceDomainConfigService.recordDomainLifecycle(byDomain, domainState);
selfServiceDomainConfigService.recordDomainLifecycleBatch(Collections.singletonList(byDomain),
domainState);
```
业务梳理:
点播控制台:
**停用**
ESOP企业点播自助域名停用k-v下发配管
ESOP企业点播定制化域名停用,非 kv。
非cache+企业点播定制化域名停用下发BPM
```
{"host":"http://mock.p.cdn.10086.cn/o/cdn-config","accesskey":"BPM_OMC","secretkey":"5cbd3ad240d81fd4221d4d9d76f6713222bcf575fa3ee0b7983ae2796f41c72f"}
```
# 4.6 客户运营数据统计-新增省份指标数据展示
NRWLXT-30119
## 需求评审
## 需求备注
192, 215, 238
产品分点播(全站四层加速、全站七层加速归为点播)、直播数据(超低时延直播归为直播),订购分试用跟商用统计,统计规则沿用已开发的统计规则,统计计算截止到上月的相关数据。如果相关的产品及订购下当月有新增或减少则后边标红展示出增加或减少的个数。增加用红色,减少用绿色,用箭头标识。
```
本统计将产品分为点播与直播两类。其中,点播需额外包括全站四层加速和全站七层加速,直播需额外包括超低时延直播。在订购维度上,区分为试用和商用进行统计。统计口径沿用现有已开发的标准规则。默认时间选择上月。若选择月份对比前月,相关产品或订购数量在选择月份出现新增或减少,在结果中进行个数变化标注:新增部分以向上箭头(↑)配合红色字体展示,减少部分以向下箭头(↓)配合绿色字体展示。
```
## 需求开发
```
帮我完成我的需求,实现客户运营数据统计分省的维度。计算每个省,直播试用、直播商用、点播试用、点播商用相对于上月的变化。我已经写好了入参和响应例如 "vodTrial": "11+1" 代表点播本月 11 个,相对于上个月 +1。要仔细分析历史功能。将查询到的数据进行比较处理。public class CommercialCustomerVO extends CustomerInfo 的 CustomerInfo 中都有 province,但这里有个一坑点,就是可能业务覆盖不了所有省份比如导出的就是没有某个省份的数据。但是返回前端的一定是要com.cmcc.cdn.platform.common.enums.ProvinceEnum中provinceType为local的加上Zhengqi和一个合计。注意代码实现优雅,通用,健壮,带有标准的中文注释和必要中文日志。
前后端接口规范
/customer-operation/analytics/province-data/list?month=2023-10
[
{
"province": "安徽",
"liveTrial": 0,
"liveCommercial": 2,
"vodTrial": 2,
"vodCommercial": 62
},
{
"province": "北京",
"liveTrial": 0,
"liveCommercial": 3,
"vodTrial": "11+1",
"vodCommercial": 15
},
{
"province": "福建",
"liveTrial": 0,
"liveCommercial": 0,
"vodTrial": "1-1",
"vodCommercial": 5
},
{
"province": "合计",
"liveTrial": 6,
"liveCommercial": 23,
"vodTrial": 47,
"vodCommercial": 241
}
]
```
```
需要帮我设计一个 新增分省数据 导出接口。导出这个类型的 excel。但是表头要处理一下。省是上下合并两个单元格,直播和点播左右合并单元和包含试用、商用的效果。数据的计算我在 getProvinceDataList 有一般,可以分析下,看是否可以复用。项目由引入EasyExcelEasyExcelUtil有历史逻辑。
```
![](../../../../attachment/images-paste/image-20250923142239334.png)
![](../../../../attachment/images-paste/image-20250923142220184.png)
# 用例评审
# 冒烟自测
求和=A:直播试用(红绿值)+点播试用(红绿值)
A=2+49 = 2
3.进入运营管理-客户运营数据统计,
分别筛选7月、8月的数据,
求差=B:8月CDN存量试用客户数-7月CDN存量试用客户数
B=52-50=2
@@ -0,0 +1,219 @@
```
接收API请求,提交内容管理任务(刷新/预热/分发)到配管系统。
【输入】ContentManageRequestParam
├─ contentURLs: List<UrlMd5> // URL列表(可能包含MD5)
├─ dirs: List<String> // 目录列表(目录刷新用)
├─ callBackUrl: String // 回调地址
└─ enterprise: String // 企业ID
【阶段1】verifyParam (行1094-1137)
↓ 校验URL数量、合法性、企业额度
↓ 从Redis批量获取域名缓存信息
└─ 输出: Tuple4<URL列表, URL→域名映射, 域名集合, 缓存域名信息>
【阶段2】checkValidDomainRefresh (行985-1078)
↓ 校验域名归属、状态、平面信息
↓ 精准域名(数据库) + 广义域名(泛域名匹配) + 冲突域名处理
↓ 缓存miss时查DB,写回Redis(TTL 1800秒)
└─ 输出: Map<域名, 平面JSON字符串>
【阶段3】buildContentTask (行856-930)
↓ 查询企业信息(cpId, 创建者, 省份)
↓ 构建BPM任务列表(每个URL一个task)
↓ 如果有回调URL,构建回调任务PO
└─ 输出: Tuple3<BPM请求, 回调任务PO, 回调URL列表PO>
【阶段4】sendContentTask (行787-848)
↓ 根据操作类型调用BPM接口:
│ INSERT → contentReload (预热)
│ DISTRIBUTE → contentDistribution (分发)
│ 其他 → contentRefresh (刷新)
↓ 成功后:
│ 1. 扣减企业额度
│ 2. 保存回调任务到DB (content_customize_task)
│ 3. 保存回调URL明细到DB (content_customize_url)
└─ 输出: taskId
---
三、核心数据表结构
1. content_customize_task (回调任务主表)
关键字段:
- id 主键
- cpId 企业cpId (纯数字)
- taskId 任务ID (UUID)
- callBackUrl 回调地址
- operationType 操作类型枚举
- state 任务状态 (0=待回调)
- callBack 回调状态 (0=未回调, 1=已回调)
- callBackSeparate 是否单独回调
用途: 记录需要异步回调的任务,供定时任务扫描并回调客户接口。
2. content_customize_url (回调URL明细表)
关键字段:
- id 主键
- taskId 任务ID (外键关联task表)
- url 具体URL
- operateType 操作类型 (0=预热,1=刷新,3=分发,4=目录刷新)
- urlIndex URL序号
- issuePlainInfo 平面信息JSON (List<Integer>)
- status URL执行状态
- nodeTotal 节点总数
- nodeSuccessCount 成功节点数
用途: 记录每个URL的执行详情,回调时提供细粒度状态。
---
四、校验规则详解
1. URL数量校验 (verifyParam)
普通操作(刷新/预热/分发): 单次最大 maxDir(配置,默认2000)
目录刷新: 单次最大 maxDirLength(配置,默认100)
2. URL合法性校验 (checkURL方法,未展示)
- URL格式验证
- 协议检查(http/https)
- 域名提取
3. 企业额度校验 (enterpriseContentNumberMaxNum)
每日默认额度:
- 普通操作: 2000次 (Constants.CONTENT_MAXOPERATION_DAY)
- 目录刷新: 100次 (Constants.CONTENT_MAXDIRS_DAY)
校验逻辑: 已用额度 + 本次请求数量 <= 企业配额
4. 域名归属校验 (checkValidDomainRefresh:1069-1072)
if (!enterpriseId.equals(domainInfo.getTenantId())) {
throw new PlatformException("域名:" + domain + "不存在");
}
关键: 防止企业操作其他企业的域名。
5. 域名状态校验 (checkValidDomainRefresh:1064-1067)
允许的域名状态:
- 已生效
- 部署中
- 部署失败
- 启用中
校验方法: DomainTicketStateEnum.judgeDomainState(domainInfo.getDomainState())
6. 域名类型处理
- 精准域名: 完全匹配 (http://www.example.com)
- 广义域名: 泛域名匹配 (*.example.com)
- 冲突域名: 多企业共用域名,通过cpDomain字段区分真实域名
---
五、关键业务逻辑
1. 域名缓存策略 (行1118-1133)
查询顺序:
Redis批量查询 → 缓存命中直接用
→ 缓存miss查DB → 写回Redis(TTL 30分钟)
广义域名永远查内存(不缓存到Redis的key)
问题: 广义域名每次都查全量,如果广义域名数量巨大会有性能问题。
2. 平面信息处理
平面 = CDN节点分组概念 (可能是地域/运营商等维度)
domainPlain.get(urlDomainMap.get(url)) // JSON字符串 "[1,2,3]"
↓ 解析
List<Integer> plains = JSONArray.parseArray(...) // [1,2,3]
每个URL会下发到对应的平面节点。
3. 操作类型路由 (handleContentTask:819-829)
switch (operationType) {
case INSERT: → bpm.contentReload() // 预热
case DISTRIBUTE: → bpm.contentDistribution() // 分发
default: → bpm.contentRefresh() // 刷新/其他
}
注意: DIRUPDATE(目录刷新)走的是default分支,即contentRefresh()。
---
六、异常处理机制
任何阶段失败 → 抛出PlatformException → 整个任务失败
→ 不会保存任何DB记录
→ 不会扣减企业额度
成功下发BPM后 → 立即扣减额度 + 保存回调任务
→ 如果回调任务保存失败?代码没处理这种情况!(bug风险)
---
七、代码问题清单
🔴 严重问题
4. Tuple滥用: Tuple4/Tuple3完全不可读,应该用命名类
5. 重复遍历:
- verifyParam遍历urlHostList构建urlHostMap
- buildContentTask又遍历contentUrlList
- 同样的数据被多次转换
6. 异常处理不完整:
// 行838-848
postSuccessActions(...) {
updateEnterpriseContentNumber(...); // 如果这里失败?
contentCustomizeTaskDao.save(...); // 如果这里失败?
contentCustomizeUrlDao.saveAll(...); // 如果这里失败?
}
这三个操作应该在一个事务里!
7. 缓存一致性风险:
- Redis缓存30分钟
- 如果DB中域名状态变更,缓存不会主动失效
- 可能导致已下线域名仍能操作
🟡 中等问题
8. 日志信息不足:
- 缺少域名校验失败的详细日志
- 缺少企业额度扣减的审计日志
9. 魔法数字:
- Redis TTL硬编码1800L
- 应该定义常量
10. 空指针风险:
// 行884
user = enterpriseInfo.getAccounts().get(0); // 如果accounts为空?
🟢 小问题
11. 变量命名混乱:
- urlPlain 实际是 domainPlainMap
- urlHost 实际是 validationResult
12. 注释质量差:
- "校验url数量、url合法性..." 这不是废话吗?
---
八、数据依赖关系
EnterpriseInfo (企业表)
└─ cpId, accounts, 额度信息
SelfServiceDomainConfig (域名配置表)
├─ domain (域名)
├─ cpDomain (冲突域名真实值)
├─ tenantId (所属企业)
├─ domainState (域名状态)
└─ domainPlain (平面信息JSON)
Redis缓存
key: content:domain:{domain}:{enterpriseId}
value: DomainEnterpriseInfoRedisPO
ttl: 1800秒
```
@@ -0,0 +1,440 @@
```
1. 精准域名 - www.example.com 必须完全匹配
2. 冲突域名 - 多个企业可能配置同一个域名(联通/电信/移动各有一套)
3. 泛域名 - *.example.com 匹配所有子域名
"数据结构是什么?"
这才是关键:
【输入】
domains: [www.a.com, b.b.com, sub.c.com] // 用户请求的域名列表
absentDomain: [www.a.com, b.b.com] // Redis缓存未命中的域名
cacheDomain: {sub.c.com -> 域名信息PO} // Redis缓存命中的域名
【输出】
Map<域名, 平面JSON> = {
"www.a.com" -> "[1,2,3]", // 该域名可以下发到平面1,2,3
"b.b.com" -> "[1,2,5]",
"sub.c.com" -> "[1,2,3,4,5,6,7,8]"
}
---
【完整流程拆解】
阶段1: 初始化 (行993-998)
Map<String, DomainEnterpriseInfoRedisPO> preciseDomainMap = new HashMap<>();
if (!MapUtils.isEmpty(cacheDomain)) {
preciseDomainMap.putAll(cacheDomain); // 把Redis缓存的域名先放进来
}
目的: 构建一个"精准域名查找表",包含缓存+DB查询的完整域名信息。
---
阶段2: 处理未缓存的精准域名 (行1000-1035)
这是整段代码最复杂的部分,因为要处理冲突域名。
2.1 数据库查询
List<DomainEnterpriseInfoTmp> preciseDomains =
selfServiceDomainConfigDao.findDomainInfoByListDomain(absentDomain, enterpriseId);
SQL伪代码:
SELECT * FROM domain_config
WHERE domain IN ('www.a.com', 'b.b.com')
AND tenant_id = '企业123'
重要: 这里查询会返回两种情况的数据:
4. domain字段就是真实域名: {domain: 'www.a.com', cpDomain: null}
5. cpDomain字段是真实域名: {domain: 'www.a.com_conflict', cpDomain: 'www.a.com'}
---
2.2 构建两个Map (行1009-1014) - 关键设计
// Map1: 以domain字段为key
Map<String, Info> realDomainMap = {
"www.a.com" -> Info{domain='www.a.com', cpDomain=null, ...}
"b.b.com_conflict" -> Info{domain='b.b.com_conflict', cpDomain='b.b.com', ...}
}
// Map2: 以cpDomain字段为key (只包含冲突域名)
Map<String, Info> cpDomainMap = {
"b.b.com" -> Info{domain='b.b.com_conflict', cpDomain='b.b.com', ...}
}
为什么需要两个Map?
因为用户请求的是真实域名b.b.com,但数据库存储的可能是b.b.com_conflict!
---
2.3 遍历处理每个域名 (行1017-1034) - 双重匹配逻辑
for (String domain : absentDomain) { // domain = "b.b.com"
DomainEnterpriseInfoRedisPO redisPO = null;
// 第一次尝试: 直接匹配domain字段
DomainEnterpriseInfoTmp tmpInfo = realDomainMap.get(domain);
if (tmpInfo != null) {
redisPO = convert(tmpInfo);
} else {
// 第二次尝试: 从冲突域名Map中匹配cpDomain字段
tmpInfo = cpDomainMap.get(domain); // 用b.b.com查cpDomain
if (tmpInfo != null) {
redisPO = convert(tmpInfo);
redisPO.setDomain(domain); // 🔴 关键:覆盖domain为真实域名
}
}
if (redisPO != null) {
preciseDomainMap.put(domain, redisPO);
redis.set(cacheKey, redisPO, 1800秒); // 写回缓存
}
}
举例说明冲突域名处理:
数据库记录:
┌─────────────────────┬──────────────┬────────────┐
│ domain │ cpDomain │ tenantId │
├─────────────────────┼──────────────┼────────────┤
│ www.a.com │ NULL │ 企业123 │ // 普通域名
│ b.b.com_unicom │ b.b.com │ 企业123 │ // 冲突域名(联通)
│ b.b.com_telecom │ b.b.com │ 企业456 │ // 冲突域名(电信)
└─────────────────────┴──────────────┴────────────┘
用户请求: ["www.a.com", "b.b.com"]
处理流程:
6. www.a.com → realDomainMap.get("www.a.com") ✅ 直接命中
7. b.b.com → realDomainMap.get("b.b.com") ❌ 未命中
→ cpDomainMap.get("b.b.com") ✅ 命中 b.b.com_unicom
→ 覆盖domain字段为 "b.b.com"
→ Redis缓存key用真实域名 "b.b.com"
设计意图:
- 数据库用domain_conflict存储避免主键冲突
- 但对用户透明,用户永远使用真实域名
- 通过企业ID区分不同企业的同名域名
---
阶段3: 处理广义域名(泛域名) (行1037-1061)
Map<String, DomainEnterpriseInfoRedisPO> extensiveDomainMap = new HashMap<>();
for (String domain : domains) { // 遍历所有域名
DomainEnterpriseInfoRedisPO domainInfo = preciseDomainMap.get(domain);
if (domainInfo == null) { // 精准域名没找到
// 延迟加载:只在第一次需要时才查询广义域名
if (extensiveDomainMap.isEmpty()) {
List<Info> extensiveDomains = service.findAllExtensiveDomain();
extensiveDomainMap = toMap(extensiveDomains);
// 可能包含: {"*.example.com", "*.test.com"}
}
// 泛域名匹配
String matchedDomain = matchExtensiveDomain(domain, extensiveDomainMap.keySet());
// 例: domain="sub.example.com" → 匹配到 "*.example.com"
if (StringUtils.isBlank(matchedDomain)) {
throw new PlatformException("未查询到域名 " + domain);
}
domainInfo = extensiveDomainMap.get(matchedDomain); // 使用泛域名的配置
redis.set(cacheKey, domainInfo, 1800秒); // 也缓存到Redis
}
// ... 后续校验
}
泛域名匹配算法 (CdniContextVO.matchExtensiveDomain)
public static String matchExtensiveDomain(String domain, Collection<String> extensiveDomains) {
// domain = "sub.example.com"
// extensiveDomains = ["*.example.com", "*.test.com"]
int index = domain.indexOf('.'); // index = 3
if (index != -1) {
String match = "*" + domain.substring(index); // match = "*.example.com"
for (String s : extensiveDomains) {
if (match.equals(s)) {
return s; // 返回 "*.example.com"
}
}
}
return null;
}
匹配逻辑:
sub.example.com → *.example.com ✅
a.b.example.com → *.b.example.com (如果存在) ✅
→ 否则匹配失败 ❌
注意: 只匹配第一级子域名!
延迟加载优化:
if (extensiveDomainMap.isEmpty()) {
// 只在第一次遇到泛域名需求时才查询
// 如果所有域名都是精准域名,这个查询就省了
}
---
阶段4: 校验域名状态和企业归属 (行1063-1074)
// 4.1 状态校验
if (!DomainTicketStateEnum.judgeDomainState(domainInfo.getDomainState())) {
throw new PlatformException("域名状态无效");
}
// 允许的状态: 已生效、部署中、部署失败、启用中
// 4.2 企业归属校验
if (!enterpriseId.equals(domainInfo.getTenantId())) {
throw new PlatformException("域名不存在"); // 实际是权限不足
}
// 4.3 提取平面信息
result.put(domain, domainInfo.getDomainPlain());
// domainPlain 是JSON字符串: "[1,2,3,4,5]"
---
【完整数据流示例】
假设场景:
用户请求:
domains = ["www.a.com", "sub.b.com", "c.example.com"]
enterpriseId = "企业123"
Redis缓存:
命中: {"www.a.com" -> Info{...}}
未命中: ["sub.b.com", "c.example.com"]
数据库 domain_config:
┌──────────────────┬────────────┬──────────────┬──────────────┐
│ domain │ cpDomain │ tenantId │ domainPlain │
├──────────────────┼────────────┼──────────────┼──────────────┤
│ www.a.com │ NULL │ 企业123 │ [1,2,3] │
│ sub.b.com │ NULL │ 企业123 │ [1,2,5] │
│ *.example.com │ NULL │ 企业123 │ [1,2,3,4,5] │
└──────────────────┴────────────┴──────────────┴──────────────┘
执行流程:
┌─ 阶段1: 初始化 ─────────────────────────────────┐
│ preciseDomainMap = {"www.a.com" -> Info{...}} │ // 来自Redis
└──────────────────────────────────────────────┘
┌─ 阶段2: 查询DB ──────────────────────────────────┐
│ absentDomain = ["sub.b.com", "c.example.com"] │
│ ↓ DB查询 (精准域名) │
│ 结果: [Info{domain='sub.b.com', ...}] │
│ c.example.com 未找到 │
│ ↓ 处理 │
│ preciseDomainMap.put("sub.b.com", ...) │
│ Redis.set("sub.b.com", ..., 1800秒) │
└──────────────────────────────────────────────┘
┌─ 阶段3: 泛域名匹配 ────────────────────────────────┐
│ 遍历: ["www.a.com", "sub.b.com", "c.example.com"]│
│ │
│ www.a.com → preciseDomainMap.get() ✅ │
│ sub.b.com → preciseDomainMap.get() ✅ │
│ c.example.com → preciseDomainMap.get() ❌ │
│ ↓ 触发广义域名查询 │
│ extensiveDomainMap = {"*.example.com"│-> Info}
│ ↓ 匹配 │
│ matchExtensiveDomain("c.example.com")│
│ → "*.example.com" ✅ │
│ ↓ 使用泛域名配置 │
│ domainInfo = Info{domain='*.example.com', plain='[1,2,3,4,5]'}
└──────────────────────────────────────────────┘
┌─ 阶段4: 校验 + 输出 ─────────────────────────────┐
│ result = { │
│ "www.a.com" -> "[1,2,3]", │
│ "sub.b.com" -> "[1,2,5]", │
│ "c.example.com" -> "[1,2,3,4,5]" // 泛域名的平面│
│ } │
└──────────────────────────────────────────────┘
---
【代码问题分析】
🔴 严重问题
1. 冲突域名处理的设计缺陷
// 行1026
redisPO.setDomain(domain); // 直接修改对象
这个操作污染了数据!如果tmpInfo被其他地方引用,也会被修改。应该:
redisPO = tmpInfo.cloneAndSetDomain(domain); // 创建新对象
2. 广义域名查询性能问题
// 行1045
List<Info> extensiveDomains = service.findAllExtensiveDomain();
// 查询全量泛域名!如果有1000个泛域名,全部加载到内存
问题:
- 每次处理任务时,只要有一个域名需要泛域名匹配,就查询全部
- 没有缓存到Redis(只缓存匹配结果)
- 如果泛域名数量巨大,这是性能炸弹
改进:
// 泛域名应该缓存到Redis或本地内存
private static final Cache<String, List<Info>> EXTENSIVE_DOMAIN_CACHE =
CacheBuilder.newBuilder()
.expireAfterWrite(5, TimeUnit.MINUTES)
.build();
3. 缓存一致性问题
// 行1032、1060
redisUtil.setJSONString(key, redisPO, 1800L); // 30分钟
问题场景:
4. 域名状态从"已生效"变更为"已下线"
5. Redis缓存还有30分钟才过期
6. 用户仍然可以操作已下线的域名!
解决方案:
- 域名状态变更时主动清除Redis缓存(事件总线)
- 或者缩短TTL到5分钟
4. 重复查询问题
// 行1002
List<Info> preciseDomains = dao.findDomainInfoByListDomain(absentDomain, enterpriseId);
// 如果absentDomain = ["a.com", "b.com", "c.com"]
// 而数据库只有 a.com 和 b.com
// c.com 不存在,直接抛异常 (行1005)
问题: 无法区分"域名不存在"还是"需要泛域名匹配"。
正确流程:
5. 查询精准域名,允许部分未找到
6. 未找到的再尝试泛域名匹配
7. 最后仍未找到才抛异常
但当前代码:
- 如果查询结果为空,直接抛异常
- 导致泛域名逻辑(行1037)永远无法执行!
等等,我看错了吗?让我重新看代码...
// 行1002
List<Info> preciseDomains = dao.findDomainInfoByListDomain(absentDomain, enterpriseId);
if (CollectionUtils.isEmpty(preciseDomains)) {
log.error("域名不存在: {}", absentDomain);
throw new PlatformException("未查询到域名信息"); // 🔴 这里直接抛异常了!
}
妈的,这是个BUG!
如果absentDomain中全是泛域名的子域名(比如sub.example.com),数据库查不到精准记录,会直接抛异常,永远走不到泛域名匹配逻辑(行1037)!
正确逻辑应该是:
if (!CollectionUtils.isEmpty(absentDomain)) {
List<Info> preciseDomains = dao.findDomainInfoByListDomain(absentDomain, enterpriseId);
// 允许查询结果为空,部分域名可能是泛域名
if (!CollectionUtils.isEmpty(preciseDomains)) {
// 处理查到的精准域名
// ...
}
// 未查到的域名留给后面的泛域名匹配
}
---
🟡 中等问题
5. 方法命名误导
private Map<String, String> checkValidDomainRefresh(...)
方法名叫checkValidDomainRefresh,但实际上:
- 不仅校验,还查询、转换、缓存
- 不仅适用于Refresh,INSERT/DISTRIBUTE也用这个方法
应该叫:
private Map<String, String> resolveDomainPlainsWithValidation(...)
6. 日志不足
缺少关键日志:
- 冲突域名处理的日志
- 泛域名匹配的日志
- Redis缓存命中率日志
---
【Linus式总结】
核心判断
这段代码在解决真实问题吗? → ✅ 是的
- CDN系统确实需要支持精准域名+泛域名+多租户隔离
- 缓存策略也是必要的(减少DB压力)
数据结构设计合理吗? → ⚠️ 凑合
- 用两个Map处理冲突域名,思路正确但实现有bug
- 延迟加载广义域名是好的优化
有特殊情况需要消除吗? → 🔴 有!
- 冲突域名的特殊处理应该封装成独立方法
- 精准域名和泛域名的处理应该统一
---
改进方案
如果让我重写这段代码:
private Map<String, String> resolveDomainPlains(
Set<String> domains,
String enterpriseId,
Map<String, DomainInfo> cached) {
DomainResolver resolver = DomainResolver.builder()
.withCache(cached)
.withEnterpriseId(enterpriseId)
.build();
Map<String, String> result = new HashMap<>();
for (String domain : domains) {
DomainInfo info = resolver.resolve(domain);
// 内部统一处理: 缓存查询 → 精准域名 → 冲突域名 → 泛域名
info.validateState();
info.validateOwnership(enterpriseId);
result.put(domain, info.getPlains());
}
return result;
}
消除特殊情况,用统一的Resolver模式。
---
最终评价
品味评分: 🟡 凑合
问题:
1. 有个严重BUG(行1003-1005的异常处理)
2. 缓存一致性风险
3. 泛域名查询性能隐患
优点:
4. 延迟加载广义域名是个好主意
5. 冲突域名处理思路正确
"这代码能用,但有定时炸弹。那个精准域名查询为空就抛异常的逻辑,需要立即修复。"
---
现在清楚这段域名校验逻辑了吗?有哪里不明白的?
```
@@ -0,0 +1,107 @@
# 2.1 跨客户订购迁移流程自动化(涉及子系统与CPID字段解耦)
## 需求评审
NRWLXT-30203
**功能说明:** 针对不同 cpid 的冲突域名,预热刷新及 URL 封禁, 我们把 A 转为 A^,底层回调给我们的也按照 A^回调,展示给客户的结果按照 A 展示。
**需求来源:** 集团-高旭、韩齐雅
**需求背景:**
政企侧 2025 年订购迁移需求呈现出密集、不定期态势,主要为从【总部政企】迁移至【省公司政企】需求。
政企侧要求订购迁移时,保障业务服务不中断、计费数据不受影响(一般需要某月 1 号 00:00 分新订购生效计费,前一日 23:59 分旧订购中止)。
由于订购迁移主要为【订购ID】和【CPID】变更,当前各系统和平面与 CPID 字段耦合严重,导致订购迁移工作组织消耗大量人力。
当前不同场景订购迁移各系统需配合的工作,主要涉及:IBS、CRS、集中配管、自研平面、中兴平面、华为平面,以及客户侧配合变更 AKSK 等。
**具体描述:**
1、预热刷新:针对冲突域名,不同 CPID 时,客户下发预热刷新任务时(接口、页面),需将URL中的原始域名修改为加后缀的冲突域名给下游系统。查询任务时,将待后缀的冲突域名转换回原始域名给客户展示。
2、[CDN运营平台接口规范-客户版-20250519](https://www.kdocs.cn/office/w/cnS6vYEirmwO?sub_file_id=AEITSOBCADQHU&attachment_store_type=upload_ks3&disablePlugins&readonly) 涉及 4 内容管理接口、8.1 解封禁接口、8.2 URL 封禁/解封任务查询接口。
3、相同 cpid 下的不做任何逻辑处理,子账号做同步处理。
4、场景说明
1A:冲突a  展示原始a
(2)A:冲突a+冲突2a   展示冲突a+冲突2a
(3)A:冲突a+冲突b  展示原始a +原始b
(4)A:原始a+冲突b   展示原始a +原始b
(5)A:原始a+冲突a    展示原始a+冲突a
## 需求备注
老接口:com.cmcc.cdn.api.service.impl.ContentApiServiceImpl#submitContentTasksFromApi
正哥写的新接口:
com.cmcc.cdn.api.service.impl.ContentApiServiceImpl#submitContentTasksFromApiNew
## 需求开发
```
/**
* 根据企业ID集合查询活跃域名信息
* 返回包含企业ID和域名的投影对象列表
*/
@Query("select s.tenantId as tenantId, s.domain as domain from SelfServiceDomainConfigPO s "
+ "where s.tenantId in :tenantIds and s.deleted = false and s.state in :states")
List<TenantDomainProjection> findActiveDomainsByTenantIds(@Param("tenantIds") Collection<String> tenantIds,
@Param("states") Collection<DomainTicketStateEnum> states);
```
1、 客户同时拥有冲突域名和真实域名,当在缓存失效内,删除了真实域名,这时候处理冲突域名的时候会存在获取异常。
2、 4.5 支持域名和 URL 维度查询。历史没有校验直接给配管。现在因为要做冲突域名转换。如果没有查到域名信息和 rul 中的 hsot 信息,我们要进行异常抛出吗?
URL 解封禁途径:
```
deny_allow_task 库表存储
更新(网宿URL封禁/解禁回调入口):/v1/url/ban/callback
新增(URL封禁/解禁,网速封禁):/api/normal/url/ban
新增
/action?commandType=urlbanorunban
/api/toutiao/url/ban
/api/url/ban8.1
更新:/actionpm?commandType=pipeDomainCallBack
/v1/pipe/config/callback
```
# 用例评审
# 冒烟自测
## API 接口
**URL预热**
```
https://apppkg-p02-bg-drcn.hihonorcdn.com/diff/com.zhongyuedu.zhongyuzhongyi_183_19_186_0_e6f007_3d1930_1761718044875.diff
```
**内容刷新**
```
https://contentplatform-drcn.hihonorcdn.com.wskam.com/AdPlatformDelivery/landingPagePkgName/com.jzxy.heisu.json
```
**目录刷新**
```
https://s-file-1.ykt.cbern.com.cn/
```
@@ -0,0 +1,105 @@
XinAnApiService 中 getDomainsIcp 逻辑非常糟糕,递归多次查询,没必要。帮我实现新的查询功能,保持原来的所有代码不要动,在类最后新写一个方法。但是保持入参、返回值和 原getDomainsIcp 一致。
# 域名备案查询方案
## 目标
对一批域名进行备案查询。由于信安接口单次最多支持 100 个域名,因此需要对域名进行拆解、去重、分批查询,并最终为每个域名选出“最接近原始域名但有备案”的结果。
# 整体流程
## ① 域名拆解(从左向右逐级截断)
对每个输入域名,按 `.` 分段,并从每个位置向右拼接成子域名列表。 最低拆到这种 `baidu.com` 程度作为最后一级,也就是主域名的上一级,不要拆到顶级域名 com,com 这种去查备案号没什么用。
主域名以 `List<String> mainDomainCollections =mainDomainDao.findAll().stream().map(MainDomainPO::getDomain).collect(Collectors.toList()); ` 为优先,如果没在表中的默认拆到两级。
main_domain 的数据是这种:
```
or.id
org.pg
tw
tel
信息
广东
```
注意表中可能出现 xj.cn 和 cn,要先main_domain排序后去匹配域名。
例如:
- `a.b.c.baidu.com`
`a.b.c.baidu.com`, `b.c.baidu.com`, `c.baidu.com`, `baidu.com`
- `a.b.c.d.baidu.com`
`a.b.c.d.baidu.com`, `b.c.d.baidu.com`, `c.d.baidu.com`, `d.baidu.com`, `baidu.com`
- `a.b.c.d.org.pg`
`a.b.c.d.org.pg`, `b.c.d.org.pg`, `c.d.org.pg`, `d.org.pg`
## ② 全局去重
所有要查询的域名放入一个 Set,去掉重复项,例如 `baidu.com` 只会出现一次。
## ③ 分批调用信安接口
规则:
- 按 100 个域名一批切分
- 每批调用一次信安接口
- 将所有批次的结果合并成:
recordMap:域名 → 备案信息
## ④ 为每个原始域名选择“最佳备案”
对于一个域名的候选列表(从长到短):
例如:
```
[a.b.c.baidu.com, b.c.baidu.com, c.baidu.com, baidu.com]
```
选择第一个在 `recordMap` 中“有备案”的域名,作为最终结果。
例:
- a.b.c.baidu.com → 无备案
- b.c.baidu.com → 有备案(选它)
最终输出:
```
原始域名 → 最匹配备案号
```
---
底层查询使用 `private Map<String, String> queryDomainsIcpByGroup(List<String> domains)`,已实现分组、重试直接用就行。代码要易读健壮优雅。
函数说明:
```
/**
* 批量查询域名备案号
* @param domains 域名集合
* @return Map value: false:未备案;具体备案号:说明备案;"":信安未返回
*/
private Map<String, String> queryDomainsIcpByGroup(List<String> domains) {
Map<String, String> result = Maps.newHashMap();
//list分组
List<List<String>> lists = Lists.partition(domains, XINAN_DOMAIN_QUERY_SIZE);
lists.parallelStream().forEach((temp -> {
try {
Map<String, String> domainsIcpMap = queryDomainsIcp(temp);
if (MapUtils.isNotEmpty(domainsIcpMap)) {
result.putAll(domainsIcpMap);
}
} catch (Exception e) {
log.error("queryDomainsIcpByGroup() -> 批量分组查询icp异常, domains:{}", JacksonUtils.toJSONString(domains), e);
}
}));
return result;
}
```
@@ -0,0 +1,61 @@
# 2.3 业务分发范围为海外的取消信安信息校验
## 需求评审
5 人天
NRWLXT-30316
## 需求备注
1、与集客大厅交互中,3.2章节商机与试用申请,如果分发范围为3海外服务(纯海外)4国际CDN,则不校验信安信息。信安信息不上传。
2、3.9试用变更单,如果分发范围变为3海外服务,则不校验信息信息。
3、3.11章节,如果分发范围为3海外服务,则不校验信安信息。
4、纯海外不支持冲突域名。点播、直播 标记位:合法
5、域名配置需求工单
## 需求开发
接口梳理
**3.2.商机与试用申请信息同步**
infoSecurityTable 字段有必填校验。
下载信安复检(试用、试用变更、):com.cmcc.cdn.platform.selfservice.service.impl.PreCheckServiceImpl#downloadAndParseInfoSecurity
床单前置校验都使用:com.cmcc.cdn.platform.common.util.ExcelUtil#convertToObjectFromExcelForPreCheck
校验备案号。
# 3.5 客户子账号-新增证书管理权限
## 需求评审
2 人天
NRWLXT-30305
## 需求备注
## 需求开发
# 3.7 查询信安备案号逻辑优化
## 需求评审
2 人天
NRWLXT-30340
## 需求备注
## 需求开发
# 用例评审
# 冒烟自测
@@ -0,0 +1,79 @@
![](../../../../attachment/images-uuid/b674d087935f46ac9dc875b4ee5c1a5e.png)
```sql
-- 录音表
-- DROP TABLE IF EXISTS record_audio;
CREATE TABLE record_audio
(
id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
upload_user_id BIGINT COMMENT '录音上传的用户id',
audio_name VARCHAR(255) NOT NULL COMMENT '录音名称',
record_time DATETIME NOT NULL COMMENT '录音时间',
audio_duration INT COMMENT '录音时长(秒)',
duration_bucket TINYINT COMMENT '录音时长区间(如:1 10分钟以下 2 10-20分 3 20-30分钟 4 30-60分钟 5 60分钟以上)',
session_type TINYINT COMMENT '会话类型(如:1 客服 2 装维)',
source VARCHAR(50) COMMENT '录音来源(如:某公司)',
audio_file_id BIGINT COMMENT '录音文件存储id,common_file主键',
audio_format VARCHAR(20) COMMENT '音频格式(mp3/wav等)',
audio_size BIGINT COMMENT '音频大小(字节)',
status TINYINT DEFAULT 0 COMMENT '状态:0-未分析 1-分析中 2-已完成 3-失败',
score INT COMMENT 'AI评分(0-100',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
yn bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除:0:否;1:是 默认0',
PRIMARY KEY (`id`),
KEY idx_record_time (record_time) USING BTREE COMMENT '录音时间'
) COMMENT='录音基础信息表';
-- 录音AI分析请求表
-- DROP TABLE IF EXISTS record_audio_ai_request;
CREATE TABLE record_audio_ai_request
(
id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
audio_id BIGINT NOT NULL COMMENT '录音ID',
request_id VARCHAR(64) COMMENT '请求ID,用于标识单次请求,便于追踪和调试',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) COMMENT='录音AI分析请求表';
-- 录音AI分析结果表
-- DROP TABLE IF EXISTS record_audio_ai_analysis;
CREATE TABLE record_audio_ai_analysis
(
id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
audio_id BIGINT NOT NULL COMMENT '录音ID',
score INT COMMENT 'AI评分(0-100',
score_reason VARCHAR(512) COMMENT '评分原因',
transcript_text LONGTEXT COMMENT '转写文本',
audio_duration DECIMAL(8, 3) COMMENT '录音时长(秒)',
processing_time DECIMAL(8, 3) COMMENT '模型处理耗时(秒)',
time_rate DECIMAL(10, 4) COMMENT '实时率(处理耗时/音频时长)',
analyze_success TINYINT COMMENT '1-成功 0-失败',
error_msg VARCHAR(512) COMMENT '错误信息(失败时返回)',
request_id VARCHAR(64) COMMENT '请求ID,用于标识单次请求,便于追踪和调试',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
yn bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除:0:否;1:是 默认0',
PRIMARY KEY (`id`),
KEY idx_audio_id (audio_id)
) COMMENT='录音AI分析结果表';
-- AI质检-评价项表
-- DROP TABLE IF EXISTS ai_qc_evaluate_item;
CREATE TABLE ai_qc_evaluate_item
(
id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
session_type TINYINT COMMENT '会话类型(如:1 客服 2 装维)',
evaluate_type TINYINT NOT NULL COMMENT '评价类型 1正向 2负向',
content VARCHAR(1024) NOT NULL COMMENT '评价内容',
evaluate_impact TINYINT NOT NULL COMMENT '影响度(1-10整数)',
create_pin VARCHAR(64) COMMENT '创建人',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_pin VARCHAR(64) COMMENT '更新人',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
yn bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除:0:否;1:是 默认0',
PRIMARY KEY (`id`)
) COMMENT='AI质检-评价项表';
```
# 录音数量/平均时长/平均得分
@@ -0,0 +1,74 @@
# 3.2 页面的配置管理-支持冲突域名下发
## 需求评审
NRWLXT-30404
页面
## 需求备注
qgznnby1-gi8ogekc6ly2hpfz
13896486829
3646
## 需求开发
1、企业账号页面新增域名权限(ADD_DOMAIN_ENTERPRISE_ID);
2、企业账号与省运营经理在域名列表页面上的“配置管理”按钮权限(CONFIG_DOMAIN_ENTERPRISE);
3、新增域名接口 /api/config/cp/domain/create 无权限控制,企业客户获取鉴权token后可直接调用;
4、kv系列接口 /api/config/action 权限(enterprise_accesspath_config表 都改成配置项了,接口名称大写加下划线拼接)
因页面是 ID 交互,所以只需要修改下页面的查询逻辑即可。
# 3.3 KV接口及domain_list查询接口适配冲突域名
## 需求评审
NRWLXT-30405
通用客户接口
## 需求备注
```java
String subUserId = request.getHeader("subUserId");
if (StringUtils.isNotBlank(subUserId)) {
long subUserIdLong = Long.parseLong(subUserId);
List<String> subUserDomains =
enterpriseSubUserDomainDao.findDomainNamesByUserIdAndEnterpriseId(subUserIdLong, tenantId);
if (CollectionUtils.isEmpty(subUserDomains)) {
throw new PlatformException("该子账号暂未分配任何域名操作权限");
}
Set<String> subUserDomainSet = new HashSet<>(subUserDomains);
for (DomainBasisConfigRequest.Domain domain : domains) {
if (!subUserDomainSet.contains(domain.getDomain())) {
throw new PlatformException("子账号无权操作域名:" + domain.getDomain());
}
}
}
```
## 需求开发
# 3.4 企业子账号的鉴权适配冲突域名
## 需求评审
NRWLXT-30406
## 需求备注
## 需求开发
关于 12.3查询证书内容、12.4查询域名可绑定证书列表、13创建企业域名 目前因为权限树种没有权限,子账号无法调用。
# 用例评审
# 冒烟自测
@@ -0,0 +1,139 @@
```
sequenceDiagram
autonumber
participant U as User/前端
participant C as NewWorkOrderController
participant W as WorkOrderServiceImpl
participant E as EnterpriseInfoDao
participant BB as BBossInteractiveService
participant DS as DomainOrderService
participant CS as CustomService
participant WOR as work_order(Repo)
participant DOR as configure_list(DomainOrderRepository)
participant SDR as speed_configure_domain(SpeedConfigureDomainDao)
participant BSD as BatchSelfDomainService
participant BSDao as batch_self_domain(BatchSelfDomainDao)
participant LFS as LogOrderService
participant LFR as log_file_resource(LogFileResourceRepository)
participant FI as file_info(FileInfoDao)
participant WOE as work_order_enterprise(WorkOrderEnterPriseDao)
participant WM as WorkOrderManager
participant DICP as DomainICPService
participant PIS as portalInformationService
participant BPM as BpmTaskDao
participant ODao as OrderDao
participant UR as UserRepository
U->>C: POST /workorder/custom/save(workList)
C->>C: checkParam(workList)
C->>W: newOrderAllowed()
C->>W: saveCustomWorkOrder(MutableHttpServletRequest, workList)
W->>W: 校验当前用户 & 企业可操作性
W->>E: findByEnterpriseId(workList.enterprise)
E-->>W: Optional<EnterpriseInfo>
alt workList.type == domain_request
W->>W: recheckEnterprisePunishmentStatus(info)
W->>BB: queryJointPunish(ecId)
BB-->>W: JointPunishResponse
W->>W: isModify = (workList.id != null)
W->>DS: handleWithDomainOrder(workList, modelStr)
alt isBatch == true
DS->>W: getWorkOrderCode(domain_request)
DS->>BSD: readBatchInformationFromExcel440(secInfoFile)
BSD-->>DS: List<BatchSelfDomainVO>
DS->>BSD: saveBatchDomains(batchVO, batchId=workOrder.code, provinceCodes, product, enterprise)
BSD->>BSDao: saveAll(batch_self_domain)
BSDao-->>BSD: saved
DS->>DOR: save(configure_list with isBatch=true, batchId=code)
else isBatch == false
DS->>CS: getWorkOrder(domain_request, details, enterprise)
CS-->>DS: WorkOrder(in memory)
DS->>DOR: save(configure_list)
end
DS->>WOR: save(work_order) %% (via cascade in configure_list.workOrder / or other path)
DS->>DOR: save(domain_history create + (create且非海外时) icp check marker)
alt isModify == true
W->>W: deleteHistoryFileInfo(workList, domainOrderPO.id)
W->>LFR: findByOrderId(configure_list.id)
LFR-->>W: old LogFileResource list
W->>FI: deleteAll(file_info by md5 diff)
W->>LFR: deleteAllByOrderId(configure_list.id)
end
W->>LFS: saveFilesToTable(orderId=configure_list.id, md5List, type=configure)
W->>LFR: saveAll(log_file_resource: normal attachments)
opt fileId not empty
W->>LFR: save(domain_config file link)
end
opt secInfoFileId not empty
W->>LFR: saveAll(security_info file links)
end
W->>WOE: setNewWorkOrderEnterpriseForDR(workOrderId, enterpriseId, orgEnterId?)
W->>WM: handleDomainConfigXinAnInfo(submitUserId, configure_list.id)
WM->>DOR: findById(configure_list.id)
WM->>UR: findById(submitUserId)
alt operateType == CREATE
alt overseas product
WM->>DS: updateNextCheckUserInOrderSubmit(order, submit, CREATE)
else non-overseas
WM->>DS: updateCheckedIcpInfo(order)
DS->>DICP: getDomainIcp(domains)
DICP-->>DS: recordNumber map
DS->>BSDao: saveAll(batch_self_domain recordNumber/icpEquals) %% batch
DS->>DOR: save(configure_list recordNumber) %% non-batch
DS->>DOR: save(domain_history isIcpCheckCompleted=true)
alt checkDomainIcpEqual == true
WM->>DS: uploadInformation(order)
DS->>PIS: validateAndSyncInformation(vos, domains, enterpriseId, provinceCode?)
alt sync failed
DS->>DOR: update(domain_history.last.msg=error)
DS-->>WM: return (stop flow)
else sync ok
DS->>DOR: update(domain_history.last.msg=null)
WM->>DS: updateNextCheckUserInOrderSubmit(order, submit, CREATE)
end
else icp incomplete
WM-->>W: (不进入信安同步与流转)
end
end
else operateType != CREATE
WM->>DS: updateNextCheckUserInOrderSubmit(order, submit, operateType)
end
W->>W: build domains from speedDomains + batch_self_domain
W->>W: req.putHeader(domainInfo, enterpriseInfo)
opt bpmTask exists && !isModify
W->>BPM: findByCode(workOrder.code)
BPM-->>W: BpmTaskPO
W->>ODao: findByEcId(ecId)
ODao-->>W: OrderInfo list
W->>UR: findById(currentUserId)
UR-->>W: nextApprover
W->>WOR: save(work_order.approvingUser=nextApprover)
end
C-->>U: success
Note over C,W: finally: logSubscribeService.updateSubscribeInfoForWorkOrder(domainInfo, enterpriseInfo, isSubscribe)
else workList.type != domain_request
W-->>C: (其它工单类型分支)
end
```
@@ -0,0 +1,624 @@
# WorkOrderServiceImpl.saveCustomWorkOrder 中 domain_request 分支梳理
> 目标:把 `saveCustomWorkOrder` 里 `if (WorkOrderEnums.Type.domain_request.name().equals(workList.getType()))` 这一支的整体链路、分支条件、以及涉及的库表操作梳理清楚(包含精确/泛域名、批量/非批量两条线),用于后续重构前的理解与拆分。
---
## 0. 入口位置与范围
入口方法:
- `WorkOrderServiceImpl.saveCustomWorkOrder(…)`
`cdn-service/src/main/java/com/cmcc/cdn/platform/selfservice/order/WorkOrderServiceImpl.java:2634`
本文聚焦分支:
- `WorkOrderServiceImpl.saveCustomWorkOrder`
`if (WorkOrderEnums.Type.domain_request.name().equals(workList.getType())) { … }`
`WorkOrderServiceImpl.java:2664`
---
## 1. saveCustomWorkOrder 的前置校验(进入 domain_request 分支之前)
### 1.1 登录态与企业操作权限校验
- 登录态为空直接失败:`WorkOrderServiceImpl.java:2635-2637`
- 校验当前用户是否能操作 `workList.enterprise`
- 读取当前用户可操作的企业列表:`enterpriseService.getNewCustomDisplay(SecurityUserUtil.getId())`
-`workList.enterprise != 当前登录企业` 且也不在可操作企业列表里:抛错
`WorkOrderServiceImpl.java:2638-2643`
涉及表:这里主要是服务查询,具体表在 `enterpriseService` 内部(本文不展开)。
### 1.2 企业信息读取(用于后续显示/通知等)
- 通过 `enterpriseInfoDao.findByEnterpriseId(workList.getEnterprise())` 拿企业名称
`WorkOrderServiceImpl.java:2646-2649`
> `enterprise_info`(推断)被读;实际表名需以 `EnterpriseInfo` 实体为准。
### 1.3 CP 角色分支:配置校验 + model 文案拼接
如果当前登录角色为企业账号(CP):
- `checkOrderConfig(workList)` 校验姓名/手机号/邮箱格式
`WorkOrderServiceImpl.java:2650-2652`
`WorkOrderServiceImpl.java:3038-3049`
- `workList.model` 解析成文案(`CustomOrderEnums.ModelVO`
`WorkOrderServiceImpl.java:2652-2658`
### 1.4 附件数量限制
- `workList.md5List`(通用附件)最多 5 个
`WorkOrderServiceImpl.java:2660-2662`
---
## 2. domain_request 分支总览(主流程)
核心代码范围:
- `WorkOrderServiceImpl.java:2664-2734`
整体顺序可以理解为:
1. 企业惩戒复核(联合惩戒黑名单)
2.`DomainOrderService.handleWithDomainOrder` 生成/更新域名配置需求工单(含写库)
3. 若是修改重提:清理历史“信安附件 file_info + 工单附件关联 log_file_resource”冗余
4. 重建本次提交的附件关联(log_file_resource
5. 绑定工单-企业关系(worker_order_enterprise
6. 触发信安/备案号校验与流程流转(WorkOrderManager
7. 拼 domainInfo / enterpriseInfo 写入 request header(疑似用于后续启动 BPM 或审计)
8. 特殊:若工单已落 BPM 且为新建(非修改),则覆盖工单下一处理人
下面按步骤拆开。
---
## 3. Step 1:联合惩戒复核(企业是否被惩戒)
- `recheckEnterprisePunishmentStatus(info)`
`WorkOrderServiceImpl.java:2665-2666`
方法本体:`WorkOrderServiceImpl.java:2753-2772`
逻辑要点:
- info 不存在:仅 warn,不阻断(`2754-2757`
- 调用 BBoss 联合惩戒查询:`bBossInteractiveService.queryJointPunish(enterpriseInfo.getEcId())``2759`
- 若响应失败或已惩戒:抛 `PlatformException` 阻断(`2761-2771`
库表:无直接 DB 写入(是外部接口/服务调用)。
---
## 4. Step 2:创建/修改域名配置需求工单(核心入库点)
### 4.1 是否修改重提
- `boolean isModify = Objects.nonNull(workList.getId());`
`WorkOrderServiceImpl.java:2667`
> 这里的 `workList.id` 代表 **work_order.id(运营总表主键)**。
### 4.2 调用 DomainOrderService.handleWithDomainOrder(★主入口)
- `ConfigureDomainOrderPO domainOrderPO = domainOrderService.handleWithDomainOrder(workList, modelStr);`
`WorkOrderServiceImpl.java:2669`
该方法位置:
- `DomainOrderService.handleWithDomainOrder(…)`
`cdn-service/src/main/java/com/cmcc/cdn/platform/selfservice/order/DomainOrderService.java:2569`
#### 4.2.1 handleWithDomainOrder:域名规模/泛域名/迁移工单校验
- 单次 add/delete 的域名数上限(配置项 `MAX_DOMAIN_ADD_SIZE`,默认 100
`DomainOrderService.java:2570-2574`
- 域名存在性校验(域名表或工单表):
`domainStateService.checkDomainExist(domains, workList.getCode(), workList.getRequirement())`
`DomainOrderService.java:2576-2580`
- 新增(add)时泛域名包含关系校验(泛域名之间、与系统已有泛域名)
`DomainOrderService.java:2587-2596`
- 删除(delete)时校验不能存在未完成的域名迁移工单
`domainMigrateService.judgeUnCompleteDomainMigRateOrder(domains)`
`DomainOrderService.java:2598-2609`
- 省份“全国(33)”展开为 31 省
`DomainOrderService.java:2612-2617`
- 非 delete 时:BSS/THIRD/WEB 来源企业必须上传信安附件
`DomainOrderService.java:2625-2632`
最后落到:
- `return checkAndSaveConfigDomain(workList, modelStr);`
`DomainOrderService.java:2633`
#### 4.2.2 checkAndSaveConfigDomain:批量/非批量分流、重复工单校验、入域名表
入口:
- `DomainOrderService.checkAndSaveConfigDomain(…)`
`DomainOrderService.java:2328`
关键分支:
1. 批量单要求必须有 `fileId`(批量附件)
-`isBatch=true`,把 `fileId` fallback 为 `secInfoFileId[0]`(存在明显历史兼容)
`DomainOrderService.java:2333-2338`
2. 非批量必须有 speedList;删除时还校验域名状态
`DomainOrderService.java:2339-2351`
3. 修改重提场景:允许同域名的“进行中工单”只排除自己
- 查询 `configure_list + speed_configure_domain` 的进行中工单:
`orderRepository.findByDomainAndStatusIsNot(domain, Finish)`
`DomainOrderService.java:2354-2373`
- `DomainOrderRepository.findByDomainAndStatusIsNot` 是 native join(见库表章节)
4. 直播产品不支持冲突域名(cpDomain)场景
`DomainOrderService.java:2393-2397`
然后真正保存工单子表(configure_list):
- `ConfigureDomainOrderPO domainOrderPO = saveConfigureDomain(workList, modelStr);`
`DomainOrderService.java:2398`
并且在 `domain_request + requirement=CREATE` 情况下,会把域名落到域名配置表:
- 批量:从 `batch_self_domain` 生成 `self_service_domain_config`
`DomainOrderService.java:2406-2444`
- 非批量:从 `speed_configure_domain` 生成 `self_service_domain_config`
`DomainOrderService.java:2445-2481`
> 这一步是 **“域名入域名表”** 的关键点:`selfServiceDomainConfigDao.saveAll(…)`。
---
## 5. Step 2.3 saveConfigureDomainwork_order / configure_list / 关联表写入(非常关键)
入口:
- `DomainOrderService.saveConfigureDomain(…)`
`DomainOrderService.java:509`
### 5.1 “workList.type == domain_request” vs “最终写入 work_order.type”
这里有一个容易踩坑的点:
- `saveCustomWorkOrder` 的分支条件看的是 `workList.getType()`(前端传参)
-`saveConfigureDomain` 内部会根据是否 CP 账号改写实际工单类型:
- `cpFlag=true``workType = WorkOrderEnums.Type.configure`
- 否则 `workType = WorkOrderEnums.Type.domain_request`
`DomainOrderService.java:510-513`
也就是说:**同样走 domain_request 分支,落库可能是 configure 或 domain_request 两种工单类型**(看当前登录角色)。
### 5.2 修改重提(isModify)的认定
- `isModify = workList.id != null && workType == domain_request`
`DomainOrderService.java:514-515`
- 修改时:
- 读取旧 `work_order``workOrderService.findById(workList.getId())``516`
- 用新的域名列表覆盖 `work_order.details``517-521`
- 同时记录旧的 speedDomains,稍后删除旧关联行
`DomainOrderService.java:565-575`
### 5.3 非批量新建:work_order 复用/创建 & 工单号生成
非批量 `!isBatch` 时:
- 通过 `customService.getWorkOrder(workType, domains, enterprise)` 获取/复用 `work_order`
`DomainOrderService.java:523-528`
- 如果 `workOrder` 为空且不是 delete:生成 code
- domain_request:调用 `workOrderService.getWorkOrderCode(domain_request)`
`DomainOrderService.java:534-536`
- configure:随机 16 位并保证不重复
`DomainOrderService.java:537-543`
### 5.4 信安附件内容校验(重要:精确/泛域名都在这里做一致性校验)
- 非 delete 时做校验:`checkUnitInfomation(workList, workOrder.getCode())`
`DomainOrderService.java:545-548`
方法本体:
- `DomainOrderService.checkUnitInfomation(WorkOrderVO, workId)`
`DomainOrderService.java:372`
关键点:
- 海外产品(ProdTypeEnum.isOverseas)且是 domain_request:跳过信安附件校验
`DomainOrderService.java:373-377`
- 读取信安 Excel(从 `secInfoFileId[0]`)解析为对象:
`excelUtil.convertToObjectFromExcel(…)`
`DomainOrderService.java:379-384`
- 信安信息不允许泛域名(domain 以 `*` 开头直接抛错)
`DomainOrderService.java:385-389`
- 若是泛域名(EXTENSIVEDOMAIN):
- 校验上传信安域名与页面 subdomain 列表一一对应、备案号一致
`DomainOrderService.java:391-403`
- 若是精确域名(非 EXTENSIVE):
- 校验上传信安域名与页面 speedList 一一对应、备案号一致
`DomainOrderService.java:404-416`
- 校验域名未在域名表中存在:`selfServiceDomainConfigDao.findByDomain(domain)`
`DomainOrderService.java:420-426`
- 给每条信安记录打上 `informaionId = workId`(这里的 workId 实际是工单 code
`DomainOrderService.java:427-429`
> 这里的校验是“前端页面填写信息”与“上传信安模板内容”的强一致校验,是后续重构时最容易拆坏的点。
### 5.5 生成 ConfigureDomainOrderPO 并保存(configure_list
- 非批量:用 `ConfigureDomainOrderPO.createDomainOrderPO(…)` 构造
`DomainOrderService.java:579-583`
对应实体表:`configure_list``ConfigureDomainOrderPO.java:40-41`
- 批量:走 `createConfigureDomainOrderPOFromBatchDomainFile(…)`
`DomainOrderService.java:577-579`
批量域名表:
- `BatchSelfDomainPO` => `batch_self_domain`
`BatchSelfDomainPO.java:32-33`
关联的“加速域名明细”表:
- `SpeedConfigureDomainPO` => `speed_configure_domain`
`SpeedConfigureDomainPO.java:26-27`
### 5.6 泛域名(EXTENSIVEDOMAIN):子域名入库(sub_domain + join 表)
如果 `workList.domainType == EXTENSIVEDOMAIN`
- 校验每个子域名必须属于该泛域名后缀
- `domainOrderPO.setSubDomains(…)` 存子域名列表(SubDomainPO
`DomainOrderService.java:611-625`
子域名表:
- `sub_domain``SubDomainPO.java:20-21`
join 表:
- `work_order_domain_request_sub`(在 `ConfigureDomainOrderPO``@JoinTable` 上)
`ConfigureDomainOrderPO.java:139-145`
### 5.7 修改重提:删除旧 speed_configure_domain
-`preSpeedDomains` 非空:`speedConfigureDomainDao.deleteAll(preSpeedDomains)`
`DomainOrderService.java:629-633`
### 5.8 保存 configure_list + 追加 domain_history 记录
- `ConfigureDomainOrderPO p = orderRepository.save(domainOrderPO);`
`DomainOrderService.java:635`
- domain_history:至少写 1 条
- 修改重提:`Button.submit`
`DomainOrderService.java:637-640`
- 普通新建:result 为 null
`DomainOrderService.java:641-643`
此外(非海外 + 创建单)还会写一条“控制信安信息显示/校验状态”的记录:
- `DomainHistoryPO.create(p.getId(), false, false, submit)`
`DomainOrderService.java:651-654`
---
## 6. Step 3:修改重提时的“历史附件清理”(file_info + log_file_resource
回到 `WorkOrderServiceImpl.saveCustomWorkOrder`
如果 `isModify=true`
1. 查旧 configure_list(通过 work_order.id)拿 orgEnterId
- `ConfigureDomainOrderPO orgPo = orderRepository.findByWorkOrderId(workList.getId()).orElse(null);`
- `orgEnterId = orgPo.getTenantId();`
`WorkOrderServiceImpl.java:2671-2672`
2. 删除历史信安附件(file_info)冗余:
- `deleteHistoryFileInfo(workList, domainOrderPOId)`
`WorkOrderServiceImpl.java:2676`
方法:`WorkOrderServiceImpl.java:3660-3683`
其删除策略:
- 新提交的 `secInfoFileId` 为空则不删
- 查当前工单关联的 log_file_resource,取 `fileContentType == security_info` 的 md5 列表
- `oldMd5.removeAll(newSecInfoFileId)` 得到“旧有但本次未再使用”的 md5
- `fileInfoDao.findByMd5In(oldMd5)``fileInfoDao.deleteAll(…)`
`WorkOrderServiceImpl.java:3663-3679`
涉及表:
- `file_info``FileInfoPO.java:30-31`
- `log_file_resource`
1. 清空该 configure_list 下的所有附件关联:
- `logFileResourceRepository.deleteAllByOrderId(domainOrderPOId)`
`WorkOrderServiceImpl.java:2678-2682`
repository`LogFileResourceRepository.deleteAllByOrderId`
`LogFileResourceRepository.java:147-149`
---
## 7. Step 4:重建本次提交的附件关联(log_file_resource
无论新建还是修改,都会重新生成附件关联:
### 7.1 md5List(最多 5 个)
- `logOrderService.saveFilesToTable(domainOrderPO.getId(), workList.getMd5List(), WorkOrderEnums.Type.configure);`
`WorkOrderServiceImpl.java:2684-2685`
`LogOrderService.saveFilesToTable(…)`
- 对 list 中每个 md5 插入 `LogFileResource(type, md5, orderId)`
`LogOrderService.java:761-772`
### 7.2 fileId(单文件,标记 domain_config
- `logOrderService.saveFiles([LogFileResource.create(…, FileContentTypeEnum.domain_config)])`
`WorkOrderServiceImpl.java:2686-2689`
### 7.3 secInfoFileId(信安附件,标记 security_info
- 遍历每个 md5,插入 `LogFileResource(…, FileContentTypeEnum.security_info)`
`WorkOrderServiceImpl.java:2690-2697`
LogFileResource 说明:
- repository 的 SQL 指向 `log_file_resource`
- 字段 `md5` 注释说明“是 mongodb_Id 值,不是文件 md5 值”(非常重要)
`LogFileResource.java:51`
---
## 8. Step 5:绑定工单与企业关系(worker_order_enterprise
- `workOrderService.setNewWorkOrderEnterpriseForDR(workOrderId, newEnterpriseId, orgEnterpriseId)`
`WorkOrderServiceImpl.java:2698-2701`
方法位置:
- `WorkOrderServiceImpl.setNewWorkOrderEnterpriseForDR(…)`
`WorkOrderServiceImpl.java:1183-1209`
逻辑:
-`orgEnterpriseId` 不为空(修改工单)且企业变更:
-`worker_order_enterprise` 记录并更新 `enterpriseId/enterpriseType`
`WorkOrderServiceImpl.java:1185-1196`
- 否则(新建):
- 插入一条新的 `WorkOrderEnterprise`
`WorkOrderServiceImpl.java:1197-1208`
表:
- `worker_order_enterprise`(注意表名是 worker_order_enterprise
`WorkOrderEnterprise.java:22-23`
---
## 9. Step 6:触发信安/备案号校验与流程流转(WorkOrderManager
- `workOrderManager.handleDomainConfigXinAnInfo(SecurityUserUtil.getId(), domainOrderPO.getId());`
`WorkOrderServiceImpl.java:2702-2703`
方法位置:
- `WorkOrderManager.handleDomainConfigXinAnInfo(…)`
`WorkOrderManager.java:58-92`
核心逻辑(只说需求类相关):
1. 读 configure_list
- `orderRepository.findById(orderId)`
`WorkOrderManager.java:59`
2. 若 operateType == CREATE
- 海外产品:直接 `updateNextCheckUserInOrderSubmit(…)` 并返回
`WorkOrderManager.java:62-67`
- 非海外:先刷新备案号/一致性状态:
- `domainOrderService.updateCheckedIcpInfo(po)`
`WorkOrderManager.java:68`
- 如果 `checkDomainIcpEqual(po)` 为 true`uploadInformation(po)`(同步信安系统)
`WorkOrderManager.java:71-73`
- 最后如果仍然 `checkDomainIcpEqual(po)` 为 true:进入流转
`domainOrderService.updateNextCheckUserInOrderSubmit(…)`
`WorkOrderManager.java:83-85`
3. 若 operateType != CREATE:直接 `updateNextCheckUserInOrderSubmit(…)`
`WorkOrderManager.java:86-88`
---
## 10. Step 7:拼 domainInfo/enterpriseInfo 写入请求头(包含精确+批量域名)
代码位置:
- `WorkOrderServiceImpl.java:2704-2726`
逻辑:
1. 先从 `domainOrderPO.getSpeedDomains()` 拿域名(对应 `speed_configure_domain`
`WorkOrderServiceImpl.java:2706-2708`
2. 如果 `domainOrderPO.getBatchId() != null`
-`batch_self_domain``batchSelfDomainDao.findByBatchId(domainOrderPO.getBatchId())`
`WorkOrderServiceImpl.java:2709-2713`
- 把批量域名也加入 domains
3. domains 去重(Set
`WorkOrderServiceImpl.java:2716-2719`
4. 拼成 `"a.com,b.com"` 写入 header
- `req.putHeader("domainInfo", "…")`
- `req.putHeader("enterpriseInfo", domainOrderPO.getTenantId())`
`WorkOrderServiceImpl.java:2720-2726`
---
## 11. Step 8:BPM 已存在且是新建(非修改)时的特殊“下一处理人覆盖”
代码:
- `WorkOrderServiceImpl.java:2726-2733`
条件:
- `BpmTaskPO bpmTaskPO = bpmTaskDao.findByCode(domainOrderPO.getWorkOrder().getCode());`
- `if (bpmTaskPO != null && !isModify) { … }`
动作:
- `WorkOrder workOrder = workOrderRepository.findByMyId(domainOrderPO.getId());`
`WorkOrderServiceImpl.java:2728`
> 这里传入的是 `domainOrderPO.getId()`configure_list.id),但方法名 `findByMyId` 从语义上更像查 work_order.id。后续重构/排雷建议重点确认。
然后:
- `orderDao.findByEcId(enter.get().getEcId())` 找到 BBoss 侧订单
-`currentUserId` 找用户,设置为工单审批人:
- `workOrder.setApprovingUser(users);`
- `workOrderRepository.save(workOrder);`
`WorkOrderServiceImpl.java:2729-2733`
涉及表(推断/部分不在本文展开):
- `bpm_task``bpmTaskDao`
- `work_order``workOrderRepository`
- `bboss order` 相关表(`orderDao`/`OrderInfo`
---
## 12. 涉及库表与操作一览(按“表 -> 操作 -> 代码点”)
### 12.1 work_order(运营总表)
- 新建/复用/修改 details、设置 code、corpName、省份信息、审批人等
`DomainOrderService.saveConfigureDomain``DomainOrderService.java:523-563``679-698`
- 设置下一审批人(dealer/approvingUser/userTemp
`DomainOrderService.updateNextCheckUserInOrderSubmit``DomainOrderService.java:1130-1168`
### 12.2 configure_list(域名配置需求工单子表)
- 保存 configure_list 主记录
`DomainOrderService.saveConfigureDomain``DomainOrderService.java:635`
- 保存备案号查询结果 recordNumber(非批量)
`DomainOrderService.updateCheckedIcpInfo``DomainOrderService.java:977-982`
实体:
- `ConfigureDomainOrderPO` => `configure_list`
`ConfigureDomainOrderPO.java:40-41`
### 12.3 speed_configure_domain(工单加速域名明细)
- 新建:由 `ConfigureDomainOrderPO.createDomainOrderPO` 生成并随 configure_list 保存
`DomainOrderService.java:579-583`
- 修改重提:删除旧的 speedDomains 记录
`speedConfigureDomainDao.deleteAll(preSpeedDomains)`
`DomainOrderService.java:629-633`
实体:
- `SpeedConfigureDomainPO` => `speed_configure_domain`
`SpeedConfigureDomainPO.java:26-27`
### 12.4 batch_self_domain(批量域名明细)
- 批量新建时写入(saveBatchDomains / saveAll
`DomainOrderService.createConfigureDomainOrderPOFromBatchDomainFile``DomainOrderService.java:721-723`
- ICP 查询后回写 recordNumber/icpEquals
`DomainOrderService.updateCheckedIcpInfo``DomainOrderService.java:934-963`
- saveCustomWorkOrder 用于拼装 domainInfo(按 batchId 查询)
`WorkOrderServiceImpl.java:2709-2713`
实体:
- `BatchSelfDomainPO` => `batch_self_domain`
`BatchSelfDomainPO.java:32-33`
### 12.5 self_service_domain_config(域名配置表/域名主表)
- domain_request 且 requirement=CREATE 时:把域名插入域名表(批量/非批量两条线)
`DomainOrderService.checkAndSaveConfigDomain``DomainOrderService.java:2400-2481`
- ICP 查询后更新 legal(合法性)
`DomainOrderService.updateCheckedIcpInfo``DomainOrderService.java:954-955``975-976``988-989`
实体:
- `SelfServiceDomainConfigPO` => `self_service_domain_config`
`SelfServiceDomainConfigPO.java:79-80`
### 12.6 domain_history(域名配置需求工单历史)
- 保存初始/提交记录、IC P 校验控制记录等
`DomainOrderService.saveConfigureDomain``DomainOrderService.java:636-654`
- ICP 校验完成标记
`DomainOrderService.updateCheckedIcpInfo``DomainOrderService.java:992-999``956-962`
- 异常时写 msgWorkOrderManager 捕获 uploadInformation 异常)
`WorkOrderManager.java:75-78`
实体:
- `DomainHistoryPO` => `domain_history`
`DomainHistoryPO.java:21-22`
### 12.7 log_file_resource(工单附件关联表)
- 修改重提时:按 orderIdconfigure_list.id)清空
`logFileResourceRepository.deleteAllByOrderId(domainOrderPOId)`
`WorkOrderServiceImpl.java:2678-2682`
- 新建附件关联:
- md5List`LogOrderService.saveFilesToTable`
`WorkOrderServiceImpl.java:2684-2685` / `LogOrderService.java:761-772`
- fileIddomain_config):`WorkOrderServiceImpl.java:2686-2689`
- secInfoFileIdsecurity_info):`WorkOrderServiceImpl.java:2690-2697`
### 12.8 file_info(信安附件内容落库)
- 修改重提时:根据“旧的安全信息 md5 列表”删除 file_info 记录
`WorkOrderServiceImpl.deleteHistoryFileInfo``WorkOrderServiceImpl.java:3660-3679`
实体:
- `FileInfoPO` => `file_info`
`FileInfoPO.java:30-31`
### 12.9 worker_order_enterprise(工单-企业关系映射)
- 新建工单:插入映射
- 修改且企业变更:更新映射
`WorkOrderServiceImpl.setNewWorkOrderEnterpriseForDR``WorkOrderServiceImpl.java:1183-1209`
实体:
- `WorkOrderEnterprise` => `worker_order_enterprise`
`WorkOrderEnterprise.java:22-23`
### 12.10 sub_domain / work_order_domain_request_sub(泛域名子域名)
- EXTENSIVEDOMAIN 时保存子域名集合(SubDomainPO
- join 表:`work_order_domain_request_sub`(配置在 ConfigureDomainOrderPO 上)
`ConfigureDomainOrderPO.java:139-145`
`SubDomainPO.java:20-21`
---
## 13. 重构前建议你重点“标注/解耦”的风险点(仅提示,不做重构方案)
1. **domain_request 分支里实际落库的工单类型可能是 configure 或 domain_request**
根因:`saveConfigureDomain``cpFlag ? configure : domain_request`
`DomainOrderService.java:510-513`
2. **修改重提的附件清理策略**:同时删 `log_file_resource` + `file_info`,并且 `LogFileResource.md5` 实际是 mongodb_id
`WorkOrderServiceImpl.java:2673-2682``3660-3679``LogFileResource.java:51`
3. **BPM 存在时覆盖审批人** 的取数链路(`workOrderRepository.findByMyId(domainOrderPO.getId())`)参数语义可疑
`WorkOrderServiceImpl.java:2726-2733`
@@ -0,0 +1,24 @@
# 2.1 域名配置需求工单重构,提升用户操作便捷性
## 需求评审
11 人天
NRWLXT-30547
## 需求备注
## 需求开发
1. 页面
2. 信安(验收反馈同步,注意海外。)
3. updateEpAndDomainWithManage
4. 话单发两次。
![](../../../../attachment/images-paste/image-20260206105036743.png)
![](../../../../attachment/images-paste/image-20260206105528982.png)
# 用例评审
# 冒烟自测
@@ -0,0 +1,658 @@
# 2.1 工单管理 - 工单搜索详情优化
## 需求评审
## 需求备注
1. 功能说明部分描述不符合。(已优化。)
2. 详情的拼接规则是什么?(已优化。)
3. 前端是否需要处理?(无需处理前台默认 20 单字节字符,看前台代码确认的。)
4. 工单范围:订购迁移工单、直播域名配置记录工单。(产品缩减后的处理范围。)
### 文档优化
功能说明 部分:可以去掉 直播字眼。
具体描述 部分:
第一点,可以补充说明下,多域名之间用 英文逗号(,)隔开。
1)订购迁移工单 格式:原订购 ID: 域名
例如:PRODUCTID1718174093:DevReq1718173913A.komect.com
2)直播域名配置记录工单 格式:域名操作类型(域名停用、域名启用、域名删除、域名修改、): 域名
例如:域名停用:DevReq1720485193A.komect.com
关于 直播域名配置记录工单 无法触发自动删除流程。
## 需求开发
### 订购迁移工单
因订购迁移工单工单会有大批域名,数据库字段(details)目前是 varchar(8000) 限制。所以代码中的 details 字段进行了 7900 的截取。
1. 考虑字符编码带来的存储空间差异;
2. 预留处理和编码转换的安全空间。
### 直播域名配置记录工单
直播域名配置记录工单的触发场景:
1. 直播控制台 -> 域名管理列表 -> 停用、启用、删除;(没问题)
2. 直播控制台 -> 域名管理列表 -> 配置按钮 -> 修改配置;(没问题)
3. 业务单相关定时任务自动停用和自动删除;
1. 点播:停用无运营单,删除没问题;
2. 直播:停用没问题,无法触发自动删除流程(直播的停用 self_service_domain_config 中没有 domain_disable_time
4. 预约注销直播删除。(没问题)
# 2.2 工单管理 - 集团业务管理员驳回修改重提后附件展示重复优化
## 需求评审
## 需求备注
1. 工单详情展示新提交的需求附件和信安附件、底层删除旧信安附件。
2. 具体描述:
1、 针对【域名配置需求工单】集团业务管理员驳回,客户经理修改重提后附件展示重复。当客户经理重新提交后,集团业务管理员工单详情展示新提交的需求附件和信安附件。
2、被集团业务管理员退回后,客户经理点击修改时显示上次上传的文件附件,并解析出相关域名信息(单个和多个域名显示逻辑一致)。
2、客户经理可删除历史上传的信安附件文件及其他附件。
3、新信安附件上传后,工单流转更新为最新的信安附件,底层删除旧信安附件。
## 需求开发
### 域名配置需求工单 - 上传信安附件接口
```
/workorder/requestDomain/upload
```
#### 接口携带参数
```
name: 信安导入模板.xls
enterprise: g18wgpcx-bdyfrmx8fvls1wk4
product: 视音频点播加速
type: domain_request
file: (binary)
```
#### 接口响应参数
```json
{
"id": "unssywtot8iapfk6f6kf6bgzj",
"info": [
{
"cpDomain": "",
"domain": "20240701095811.komect.com",
"domainType": "0",
"icp": "京ICP备0500_komect.com_12号",
"loopDomain": [
{
"mainFlag": true,
"type": "domain",
"value": "so1urce.test.com:80"
}
],
"speedList": [
{
"cpDomain": "",
"domain": "20240701095811.komect.com",
"icpNumber": "京ICP备0500_komect.com_12号"
}
]
}
],
"name": "信安导入模板.xls"
}
```
#### 参数说明
```
id:生成的md5值
name:原始文件名
info:附件内容
cpDomain:企业真实域名
domain:域名
icp:备案号
loopDomain:回源信息
domainType:默认0
speedList:域名信息
```
多次上传库中均保存,前端传最后一个文件 md5 值。
#### 附件入库相关
file_infofilename 原始文件名称、md5、user_id(自动持久化)
### 附件删除按钮接口
```
/workorder/custom/deleteFile
```
#### 接口携带参数
```
idunssywtot8iapfk6f6kf6bgzj
```
### 上传其他附件接口
```
/workorder/custom/upload
```
#### 接口响应参数
```json
{
"name":"测试备用附件.docx",
"id":"mmfgjt72rflso2xb5zqnbjd0d"
}
```
### 提供附件解析新接口
```json
GET http://localhost:8080/workorder/parseByMd5?md5=
{
"info": [
{
"cpDomain": "",
"domain": "20240715141708.komect.com",
"domainType": "0",
"icp": "京ICP备0500_komect.com_12号",
"loopDomain": [
{
"mainFlag": true,
"type": "domain",
"value": "so1urce1.test.com:80"
},
{
"mainFlag": false,
"type": "domain",
"value": "back1.test.com:80"
}
],
"speedList": [
{
"cpDomain": "",
"domain": "20240715141708.komect.com",
"icpNumber": "京ICP备0500_komect.com_12号"
}
]
}
]
}
```
### 列表修改按钮 - 接口及响应
```json
/workorder/modify/detail
{
"approve":{
"accountId":"政企分公司|政企客户经理|政企汤汤",
"buttons":[
"ok",
"back",
"kill"
],
"createInfo":"政企汤汤 | 18867102345",
"createTime":"2024-07-02T17:09:25",
"userid":831
},
"code":"001-20240702001",
"corp":"ECName1714374835",
"createTime":"2024-07-02 17:09:25",
"creatorInfo":"政企汤汤 | 18867102345",
"dealer":"政企客户经理",
"enterpriseCpId":"8351490236157",
"files":[
{
"id":"76jsh7pvl6flg0zalhyceqoen",
"name":"测试备用附件.docx"
},
{
"id":"mhwexnchqtvn2xqqx6r3nfwqz",
"name":"信安导入模板.xls"
},
{
"id":"z05tt3zlh1vyu07yhdgdkwoir",
"name":"性格测试.png"
}
],
"history":[
{
"finished":true,
"mobile":"18867102345",
"modify":false,
"province":"政企分公司",
"role":"政企分公司|政企汤汤:提交",
"time":"2024-07-02 17:09",
"userAccount":"18867102345cmcc",
"userName":"政企汤汤"
},
{
"finished":true,
"icpNeedUpdate":false,
"modify":false,
"role":"信安信息:上传成功"
},
{
"finished":true,
"mobile":"18867121321",
"modify":false,
"msg":"",
"province":"集团",
"result":"back",
"role":"集团|集团客户经理管理员",
"time":"2024-07-02 17:13",
"userAccount":"jt-cma",
"userName":"集团客户经理管理员"
},
{
"finished":false,
"modify":false,
"role":"当前办理: 政企分公司|政企汤汤|18867102345"
},
{
"finished":false,
"modify":false,
"role":"集团客户经理管理员审批"
},
{
"finished":false,
"modify":false,
"role":"BPM运维工程师审批"
}
],
"httpSelection":{
},
"informationFiles":[
{
"fileId":"mhwexnchqtvn2xqqx6r3nfwqz",
"name":"信安导入模板.xls"
}
],
"orderSource":1,
"requirement":"add",
"self":{
"httpSelection":{
},
"provinceCodeList":[
"551",
"100",
"591",
"931",
"200",
"771",
"851",
"898",
"311",
"371",
"451",
"270",
"731",
"431",
"250",
"791",
"240",
"471",
"951",
"971",
"531",
"351",
"290",
"210",
"280",
"220",
"891",
"991",
"871",
"571",
"230"
],
"domainInfo":[
{
"adaptPlain":[
{
"approve":0,
"editable":false,
"loopDomain":[
{
"mainFlag":true,
"type":"domain",
"value":"so1urce.test.com:80"
}
],
"plane":""
}
],
"domain":"20240702170545.komect.com 已删除",
"icp":"京ICP备0500_komect.com_12号",
"provinceCodeList":[
"all"
]
},
{
"adaptPlain":[
{
"approve":0,
"editable":false,
"loopDomain":[
{
"mainFlag":true,
"type":"domain",
"value":"so1urce.test.com:80"
}
],
"plane":""
}
],
"domain":"20240702170549.komect.com 已删除",
"icp":"京ICP备0500_komect.com_12号",
"provinceCodeList":[
"all"
]
}
],
"domainType":"0",
"enterprise":"ECName1714374835",
"description":"",
"isBatch":true,
"type":"configure",
"speedList":[
{
"cpDomain":"",
"domain":"20240702170545.komect.com",
"icpNumber":"京ICP备0500_komect.com_12号",
"loopDomain":[],
"loopType":"DOMAIN",
"mainLoopDomain":"so1urce.test.com:80"
},
{
"cpDomain":"",
"domain":"20240702170549.komect.com",
"icpNumber":"京ICP备0500_komect.com_12号",
"loopDomain":[],
"loopType":"DOMAIN",
"mainLoopDomain":"so1urce.test.com:80"
}
],
"provinceIdList":[
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
],
"loopDomain":[],
"province":"安徽 北京 福建 甘肃 广东 广西 贵州 海南 河北 河南 黑龙江 湖北 湖南 吉林 江苏 江西 辽宁 内蒙古 宁夏 青海 山东 山西 陕西 上海 四川 天津 西藏 新疆 云南 浙江 重庆 ",
"probationTime":"",
"product":"PAGE_UP",
"charge":false,
"productId":"PRODUCTID1714375610",
"cpid":"kimpg6gh-oxul9g7qpp06hhcw",
"chargeTime":"",
"workOrderFileList":{
"batchExcelFiles":[
{
"fileId":"76jsh7pvl6flg0zalhyceqoen",
"name":"测试备用附件.docx"
}
],
"batchFiles":[
{
"fileId":"mhwexnchqtvn2xqqx6r3nfwqz",
"name":"信安导入模板.xls"
}
],
"informationFiles":[
{
"fileId":"mhwexnchqtvn2xqqx6r3nfwqz",
"name":"信安导入模板.xls"
}
]
},
"operateType":"新增域名",
"canConfig":false,
"planeData":[
"自研(杭研)",
"华为平面"
]
},
"source":"ESOP",
"speedDomain":"20240702170545.komect.com",
"state":"CmaCheck",
"type":"domain_request"
}
```
### 最终处理取消批量和单个,与前端定义交互字段
```json
"workOrderFileList": {
"requirementAttachment": [
{
"fileId": "bj8vcjfajlm6egzapqikfexrb",
"name": "测试备用附件.docx"
},
{
"fileId": "2jyoubwaf4wn4grft2tgrmxnc",
"name": "vim键盘位置.png"
}
],
"securityInfoAttachment": {
"fileId": "pnd2zjrrvcvrgbh7mhplsimph",
"name": "信安导入模板.xls"
}
}
```
# 3.1 企业管理新增运营经理删除功能
## 需求评审
## 需求备注
1. 需求背景中:当前企业管理功能页中不支持新增操作,新增是在 ESOP 工单流转过程中分配不同运营经理绑定的。
2. 具体描述中:增加说明限制此操作目前仅限 ESOP 企业操作。
各省业务管理员仅能删除本省内的运营经理数据。
## 需求开发
### esop 变更运营经理接口
```
/selfService/enterprise/bindToUsers
{
"enterId": 728, 企业ID
"userId": [
"865", 要变更的人员ID
"921"
],
"alterId": "865" 要变更的人员ID
}
```
### cache+ 绑定接口
```
/selfService/enterprise/bindToUser
```
### 删除并更换企业运营经理接口说明
`POST /selfService/enterprise/replaceEnterpriseManager`
请求参数以 JSON 格式通过请求体 (`@RequestBody`) 传递。
| 参数名 | 类型 | 是否必填 | 描述 |
| ------------ | ---- | ---- | -------------- |
| deleteUserId | Long | 是 | 要删除的运营经理的用户 ID |
| bindUserId | Long | 是 | 要绑定的新运营经理的用户 ID |
| enterpriseId | Long | 是 | 企业 ID |
请求示例
```json
{
"deleteUserId": 123,
"bindUserId": 456,
"enterpriseId": 789
}
```
### 直播控制触发运营单无法变更问题
![](../../../../attachment/images-paste/image-20240711121358676.png)
### 自测
1、IBS 测试环境:https://test.p.cdn.10086.cn/
2、集团国际 CDN 有限公司存在两个两个试用单,运营经理分别是集团运营经理 001 集团运营经理 003
ECName1720664357
xj 集团运营经理 B07111019_14
3、集团国际 CDN 有限公司存在一个试用变更单(未新增域名),集团运营经理 001 待审批
企业:ECName1720592898
运营经理:xj 集团运营经理 B
试用单:07101427_57(完结)
试用单:07101450_03(在途)
删除前:完结的已办可查,工单查询可查
在途的代办可查,工单查询可查
运营经理:集团运营汤汤
试用单:07101446_34(完结)
转派前:完结的已办不可查,工单查询可查
在途的代办不可查,工单查询可查
删除后:07101450_03(在途)到新运营经理
首次开通也发到新运营经理
非首次开通发到新运营经理
**售前支撑工单**
此类型工单无法支持变更运营经理,目前售前支撑工单由业务员分配运营经理,可以分配任意运营经理。
工单与企业无强关联关系。
一个企业、两个试用单
![](../../../../attachment/images-paste/image-20240716100224705.png)
# 5.1 国际 CDN&咪咕直播配置能力接入(石正/田卓)
## 需求评审
## 需求备注
因版本排期问题,正哥帮忙全力处理了需求。
## 需求开发
# 测试评审
## 集团运营经理通过直播域名搜索直播域名配置记录工单
1. 前提:需要新生成的记录才可以模糊搜索。
## 集团业务管理员删除运营经理 - 存在待办试用变更单
1. 第一步 点击按钮异常
2. 第二部 不存在删除按钮
# 冒烟自测
## 集团运营经理通过直播域名搜索直播域名配置记录工单
前提:
1、IBS 测试环境:https://test.p.cdn.10086.cn/
2、系统存在 A 企业直播域名 www.test.com,已生效
ECName1720604734
DevReq1720604734A.komect.com
## 集团客户经理管理员退回多个域名修改附件后提交
1、IBS 测试环境:https://test.p.cdn.10086.cn/
2、IBS 系统存在 esop 企业 A,已开通网页加速产品
第一步验证点:角色名称 集团客户经理管理员
![](../../../../attachment/images-paste/image-20240710180936445.png)
## 新增 Esop 定制域名默认开启流式数据
1.Esop 企业:testA,已开通网页加速,订购关系:123456,对应客户经理:浙江省客户经理 002,对应运营经理: 浙江省运营经理 002
步骤 1:新建工单
![](../../../../attachment/images-paste/image-20240711144307205.png)
## 非域名运营经理停用点播域名
1、IBS 测试环境:https://test.p.cdn.10086.cn
2、esop 企业 A 存在运营经理:集团运营经理 001 集团运营经理 002
![](../../../../attachment/images-uuid/31eedefcb6f74f2ba3497fe0e64ff9ce.jpg)
企业下已生效域名 test.com 运营经理为集团运营经理 001
@@ -0,0 +1,572 @@
# 3.6 系统提示优化 - 信安错误提醒优化(5 天)
> [!NOTE]
> 开发环境删除 DEFAULT_FILE_HEADER 配置项和生产保持一致。(生产不存在,已备份。)
1.登录“浙江省客户经理”账号
2.进入工单管理 - 运营操作工单 - 新建工单,问题类型选择“域名配置需求”,需求类型选择“新增”,企业:江苏宝胜集团有限公司,产品:下载加速
3.已下载 信安信息模板
## 需求评审
1. 触发场景;(域名配置需求 - 新增、cache+ 域名配置工单。)
2. 返回前端的格式;(未确认。)
3. 梳理现状后还是对需求的重点存在一些疑问;(未确认。)
## 需求备注
[信安附件校验场景(域名配置需求和cache+域名配置) (kdocs.cn)](https://www.kdocs.cn/l/cp84H09h2t89)
信安附件中的必填项填写不完整,上传失败(**必填说明目前固定提示,未反馈到前端具体的字段。**)
点播业务回源类型为必填项
20240729085016.komect.com 邮编超出规定长度,请重新填写
20240729085016.komect.com 移动电话格式不合法,上传失败
回源地址填写有误,回源地址只支持一个
example..com 域名格式有误,上传失败
备站回源最多只支持 10 个地址
20240729085016.komect.com 备案号中含有空格,上传失败
上传成功!存在域名备案号与工信部备案号不一致,域名展示为不合法,请知晓!(**备案号的统一提示,非强制性校验。**)
> 只支持检测一个问题域名。
## 需求开发
企业客户(cache+
```json
/workorder/requestDomain/upload
name: -2.xls
type: CACHE_DOMAIN_CONFIG
file: (binary)
{
"id": "lhsymnanio5vjnvwvtp9mf3xj",
"info": {
"domain": "20240729085016.komect.com",
"domainType": "0",
"icp": "京ICP备0500_komect.com_12号",
"loopDomain": [
{
"mainFlag": true,
"type": "domain",
"value": "so1urce1.test.com"
},
{
"mainFlag": false,
"type": "domain",
"value": "back1.test.com"
}
],
"speedList": [
{
"cpDomain": "",
"domain": "20240729085016.komect.com",
"icpNumber": "京ICP备0500_komect.com_12号"
}
],
"subdomain": [
]
},
"name": "信安导入模板-2.xls"
}
```
域名配置需求(esop
```json
/workorder/requestDomain/upload
name: -2.xls
enterprise: 9nx9slcl-119v79asconu0gft
product:
type: domain_request
file: (binary)
{
"id": "ewfkxrjl465emf0azwx4mj08u",
"info": [
{
"cpDomain": "",
"domain": "20240729085016.komect.com",
"domainType": "0",
"icp": "京ICP备0500_komect.com_12号",
"loopDomain": [
{
"mainFlag": true,
"type": "domain",
"value": "so1urce1.test.com:80"
},
{
"mainFlag": false,
"type": "domain",
"value": "back1.test.com:80"
}
],
"speedList": [
{
"cpDomain": "",
"domain": "20240729085016.komect.com",
"icpNumber": "京ICP备0500_komect.com_12号"
}
]
}
],
"name": "信安导入模板-2.xls"
}
```
system_config::SYSTEM_CONFIG_DEFAULT_FILE_HEADER
```
DEFAULT_FILE_HEADER
JPEG,FFD8FF;PNG,89504E47;GIF,47494638;TXT,75736167;PDF,255044462D312E;DOC,D0CF11E0;XML,3C3F786D6C;DOCX,504B030;XLS,D0CF11E0;XLSX,504B0304;JPG,FFD8FFE00;RAR,52617221;BMP,424D
```
# 3.8 试用到期邮件提醒优化(P1)
> [!NOTE]
> 两个邮件的密送人增加占小虹、姬高峰,即 STOP_PRE_TESTORDER_NOTIFY_ROLE_EMAIL、STOP_TESTORDER_NOTIFY_ROLE_EMAIL 两个配置项增加占小虹( zhanxiaohong@cmhi.chinamobile.com )、姬高峰( jigaofeng@cmhi.chinamobile.com )配置。这个之前就已经加过了。
加 patch
**定时任务**
每十分钟查询一次试用流量
默认一天扫描一次,每天早上 9 点触发
**数据库时间**
actual_start_time2024-05-20 09:30:3019 位,库中统一)
actual_end_time2024-05-20 09:30:3019 位,库中统一)
start_time:存在 10 位和 19 位
end_time10 位
**生产现状**
<table>
<tr>
<th><b>试用开始时间</b></th>
<th><b>预计试用结束时间</b></th>
<th><b>可试用时长(天)</b></th>
<th><b>已试用时长(天)</b></th>
</tr>
<tr>
<td>2024-07-16 00:00:00</td>
<td>2024-08-15</td>
<td>30</td>
<td>28</td>
</tr>
</table>
**邮件字段**
**企业名称**enterpriseName
**订单号**orderNumber
**商业类型**businessType
**试用总流量**trialRequested
**试用开始时间**startTime
**试用结束时间**realEndDate
**可使用时长**(天):testDuration
**已试用时长**(天):alreadyTestDays
通知日期:currentDate
**已试用流量**trialUsed
试用流量剩余:trialRemaining
试用时长剩余:timeRemaining
ECID000202310161117-ZPHA202310161117
```
1PB = 1099511627776 KB
1PB的65% = 714682558054.4 KB
1PB的85% = 934584883609.6 KB
```
7146825580544
5497558138880
7318349394477056
zhangpenghao@cmhi.chinamobile.com,2870503959@qq.com
optimize
# 4.1 政企侧用户体验优化(2 天)
## 需求评审
1. 是不是所有的异常都是固定字体返回;
## 需求备注
IAM 账号登录
原华为云账号:hid_4ss4xpxza1d1-1j
IAM 用户名:live_obs_manager
密码:hangyan123
```
<JSONObject>
<data>
<200>
<2024-09-02 11:29>0</2024-09-02 11:29>
<2024-09-02 11:29>0.0</2024-09-02 11:29>
<2024-09-02 11:30>0</2024-09-02 11:30>
<2024-09-02 11:30>0.0</2024-09-02 11:30>
<2024-09-02 11:31>0</2024-09-02 11:31>
<2024-09-02 11:31>0.0</2024-09-02 11:31>
<2024-09-02 11:32>0</2024-09-02 11:32>
<2024-09-02 11:32>0.0</2024-09-02 11:32>
<2024-09-02 11:33>0</2024-09-02 11:33>
<2024-09-02 11:33>0.0</2024-09-02 11:33>
<2024-09-02 11:34>0</2024-09-02 11:34>
<2024-09-02 11:34>0.0</2024-09-02 11:34>
<2024-09-02 11:35>0</2024-09-02 11:35>
<2024-09-02 11:35>0.0</2024-09-02 11:35>
<2024-09-02 11:36>0</2024-09-02 11:36>
<2024-09-02 11:36>0.0</2024-09-02 11:36>
<2024-09-02 11:37>0</2024-09-02 11:37>
<2024-09-02 11:37>0.0</2024-09-02 11:37>
<2024-09-02 11:38>0</2024-09-02 11:38>
<2024-09-02 11:38>0.0</2024-09-02 11:38>
<2024-09-02 11:39>0</2024-09-02 11:39>
<2024-09-02 11:39>0.0</2024-09-02 11:39>
<2024-09-02 11:40>0</2024-09-02 11:40>
<2024-09-02 11:40>0.0</2024-09-02 11:40>
<2024-09-02 11:41>0</2024-09-02 11:41>
<2024-09-02 11:41>0.0</2024-09-02 11:41>
<2024-09-02 11:42>0</2024-09-02 11:42>
<2024-09-02 11:42>0.0</2024-09-02 11:42>
<2024-09-02 11:43>0</2024-09-02 11:43>
<2024-09-02 11:43>0.0</2024-09-02 11:43>
<2024-09-02 11:44>0</2024-09-02 11:44>
<2024-09-02 11:44>0.0</2024-09-02 11:44>
<2024-09-02 11:45>0</2024-09-02 11:45>
<2024-09-02 11:45>0.0</2024-09-02 11:45>
<2024-09-02 11:46>0</2024-09-02 11:46>
<2024-09-02 11:46>0.0</2024-09-02 11:46>
<2024-09-02 11:47>0</2024-09-02 11:47>
<2024-09-02 11:47>0.0</2024-09-02 11:47>
<2024-09-02 11:48>0</2024-09-02 11:48>
<2024-09-02 11:48>0.0</2024-09-02 11:48>
<2024-09-02 11:49>0</2024-09-02 11:49>
<2024-09-02 11:49>0.0</2024-09-02 11:49>
<2024-09-02 11:50>0</2024-09-02 11:50>
<2024-09-02 11:50>0.0</2024-09-02 11:50>
<2024-09-02 11:51>0</2024-09-02 11:51>
<2024-09-02 11:51>0.0</2024-09-02 11:51>
<2024-09-02 11:52>0</2024-09-02 11:52>
<2024-09-02 11:52>0.0</2024-09-02 11:52>
<2024-09-02 11:53>0</2024-09-02 11:53>
<2024-09-02 11:53>0.0</2024-09-02 11:53>
<2024-09-02 11:54>0</2024-09-02 11:54>
<2024-09-02 11:54>0.0</2024-09-02 11:54>
<2024-09-02 11:55>0</2024-09-02 11:55>
<2024-09-02 11:55>0.0</2024-09-02 11:55>
<2024-09-02 11:56>0</2024-09-02 11:56>
<2024-09-02 11:56>0.0</2024-09-02 11:56>
<2024-09-02 11:57>0</2024-09-02 11:57>
<2024-09-02 11:57>0.0</2024-09-02 11:57>
<2024-09-02 11:58>0</2024-09-02 11:58>
<2024-09-02 11:58>0.0</2024-09-02 11:58>
<2024-09-02 11:59>0</2024-09-02 11:59>
<2024-09-02 11:59>0.0</2024-09-02 11:59>
<2024-09-02 12:00>0</2024-09-02 12:00>
<2024-09-02 12:00>0.0</2024-09-02 12:00>
<2024-09-02 12:01>0</2024-09-02 12:01>
<2024-09-02 12:01>0.0</2024-09-02 12:01>
<2024-09-02 12:02>0</2024-09-02 12:02>
<2024-09-02 12:02>0.0</2024-09-02 12:02>
<2024-09-02 12:03>0</2024-09-02 12:03>
<2024-09-02 12:03>0.0</2024-09-02 12:03>
<2024-09-02 12:04>0</2024-09-02 12:04>
<2024-09-02 12:04>0.0</2024-09-02 12:04>
<2024-09-02 12:05>0</2024-09-02 12:05>
<2024-09-02 12:05>0.0</2024-09-02 12:05>
<2024-09-02 12:06>0</2024-09-02 12:06>
<2024-09-02 12:06>0.0</2024-09-02 12:06>
<2024-09-02 12:07>0</2024-09-02 12:07>
<2024-09-02 12:07>0.0</2024-09-02 12:07>
<2024-09-02 12:08>0</2024-09-02 12:08>
<2024-09-02 12:08>0.0</2024-09-02 12:08>
<2024-09-02 12:09>0</2024-09-02 12:09>
<2024-09-02 12:09>0.0</2024-09-02 12:09>
<2024-09-02 12:10>0</2024-09-02 12:10>
<2024-09-02 12:10>0.0</2024-09-02 12:10>
<2024-09-02 12:11>0</2024-09-02 12:11>
<2024-09-02 12:11>0.0</2024-09-02 12:11>
<2024-09-02 12:12>0</2024-09-02 12:12>
<2024-09-02 12:12>0.0</2024-09-02 12:12>
<2024-09-02 12:13>1</2024-09-02 12:13>
<2024-09-02 12:13>100.0</2024-09-02 12:13>
<2024-09-02 12:14>1</2024-09-02 12:14>
<2024-09-02 12:14>100.0</2024-09-02 12:14>
<2024-09-02 12:15>1</2024-09-02 12:15>
<2024-09-02 12:15>100.0</2024-09-02 12:15>
<2024-09-02 12:16>1</2024-09-02 12:16>
<2024-09-02 12:16>100.0</2024-09-02 12:16>
<2024-09-02 12:17>1</2024-09-02 12:17>
<2024-09-02 12:17>100.0</2024-09-02 12:17>
<2024-09-02 12:18>1</2024-09-02 12:18>
<2024-09-02 12:18>100.0</2024-09-02 12:18>
<2024-09-02 12:19>1</2024-09-02 12:19>
<2024-09-02 12:19>100.0</2024-09-02 12:19>
<2024-09-02 12:20>1</2024-09-02 12:20>
<2024-09-02 12:20>100.0</2024-09-02 12:20>
<2024-09-02 12:21>1</2024-09-02 12:21>
<2024-09-02 12:21>100.0</2024-09-02 12:21>
<2024-09-02 12:22>1</2024-09-02 12:22>
<2024-09-02 12:22>100.0</2024-09-02 12:22>
<2024-09-02 12:23>1</2024-09-02 12:23>
<2024-09-02 12:23>100.0</2024-09-02 12:23>
<2024-09-02 12:24>1</2024-09-02 12:24>
<2024-09-02 12:24>100.0</2024-09-02 12:24>
<2024-09-02 12:25>1</2024-09-02 12:25>
<2024-09-02 12:25>100.0</2024-09-02 12:25>
<2024-09-02 12:26>1</2024-09-02 12:26>
<2024-09-02 12:26>100.0</2024-09-02 12:26>
<2024-09-02 12:27>1</2024-09-02 12:27>
<2024-09-02 12:27>100.0</2024-09-02 12:27>
<2024-09-02 12:28>1</2024-09-02 12:28>
<2024-09-02 12:28>100.0</2024-09-02 12:28>
</200>
</data>
<success>true</success>
</JSONObject>
```
```
ping push.komect.com.c.cdnhwc3.com
正在 Ping hcdnl.push01.gslb.c.cdnhwc2.com [111.62.30.101] 具有 32 字节的数据:
```
状态码
```
/live/statistics/statusCode
?domainNames=20231212134910.komect.com
&affectAreas=%E6%B1%9F%E8%A5%BF&isps=CMCC&statusCodes=101
&plain=1
&startTime=2024-07-29%2013:20
&endTime=2024-07-29%2014:21
&_=1722234106473
```
下行带宽/流量
```
/live/statistics/lives
?pullDomain=20231212135656.komect.com
&affectAreas=%E5%AE%89%E5%BE%BD
&isps=CUCC&appName=
&streamName=
&plain=1
&startTime=2024-07-22%2014:29
&endTime=2024-07-29%2014:30
&interval=300
&type=band
&_=1722234654985
```
上行带宽
```
/live/statistics/upLive
?affectAreas=%E5%AE%89%E5%BE%BD&isps=CUCC
&appName=
&streamName=
&plain=1
&pushDomainName=18762603049.komect.com
&startTime=2024-07-22%2014:31
&endTime=2024-07-29%2014:32
&interval=300
&_=1722234749908
```
观众数
```
/live/statistics/audience
?affectAreas=%E5%AE%89%E5%BE%BD
&isps=CUCC&appName=
&streamName=
&plain=1
&pullDomain=20231212135656.komect.com
&startTime=2024-07-22%2014:32
&endTime=2024-07-29%2014:33
&interval=60
&_=1722234825080
```
推流路数(提示问题)
```
/live/statistics/pullNumber
?plain=1
&pushDomainName=20231208103305.komect.com,18762603049.komect.com
&startTime=2024-07-22%2014:33
&endTime=2024-07-29%2014:34
&_=1722234863461
```
## 需求开发
```java
throw new PlatformException("未查询到数据");
} catch (MiguFeignErrorException e) {
log.error("咪咕查询下行流量失败, 接口异常: {}",e.getMessage(), e);
throw new PlatformException("未查询到数据");
} catch (Exception e) {
log.error("咪咕查询下行流量失败, 全局异常: {}", e.getMessage(), e);
throw new PlatformException("未查询到数据");
}
```
StringUtils
接口信息异常, 请检查
![](../../../../attachment/images-paste/image-20240731164847186.png)
# 4.3 试商用客户峰值带宽增加引入省份信息(2 天)
## 需求评审
1. 导出功能一并修改;
## 需求备注
![](../../../../attachment/images-paste/image-20240729100929288.png)
页面权限
![](../../../../attachment/images-paste/image-20240729101910164.png)
## 需求开发
查询接口
```
/statistics/report/enterprisePeekBW
?pageNum=1&pageSize=10&enterpriseId=xeakniba-aazka9cc5d2uuo5t&type=&tag=&plain=-3&startTime=2024-07-02&endTime=2024-07-31&_=1722472299718
```
```json
{
"data": [
{
"enterpriseId": "xeakniba-aazka9cc5d2uuo5t",
"enterpriseName": "测试企业1",
"peekBW": 0,
"peekTime": "2024-07-31 23:55",
"plain": "华为平面,中兴平面",
"tag": "银牌",
"type": "商用"
}
],
"message": "ok",
"pageNum": 1,
"pageSize": 10,
"retriable": false,
"statusCode": "200",
"success": true,
"total": 1
}
```
# 用例评审
# 冒烟自测
![](../../../../attachment/images-paste/image-20240819085517170.png)
填充默认值日志关键词:首先填充默认值。
![](../../../../attachment/images-paste/image-20240819090418376.png)
![](../../../../attachment/images-paste/image-20240819104334355.png)
开发设置异常场景:
将 HUAWEI_HEADER_URL 设置为 https://live.cn-east-3.myhuaweicloud.com
> 测试备份:http://mock.p.cdn.10086.cn
此接口不会触发 自研 RTMP 前端限制。
7318349394477056
# 上线自审
## 3.6 系统提示优化 - 信安错误提醒优化
无法验证,已自测正常流程。
## 3.8 试用到期邮件提醒优化
需存在即将到期或到期的业务触发。
## 4.1 政企侧用户体验优化
**状态码**
深圳华为云计算技术有限公司、hpl.edgeorgn.com、上海、移动、100、华为平面。
**直播统计**
下行带宽/流量:深圳华为云计算技术有限公司、hpl.edgeorgn.com、全部、移动、华为平面、5 分钟。(分别点击带宽、流量。)
上行带宽:深圳华为云计算技术有限公司、test-hw-push.meituan.net、全部、移动、华为平面、5 分钟。
观众数:深圳华为云计算技术有限公司、hpl.edgeorgn.com、全部、移动、华为平面、1 分钟。
推流路数:深圳华为云计算技术有限公司、test-hw-push.meituan.net、华为平面。
以上查询均提示:**未查询到数据**
```
北京字跳网络技术有限公司
pull-flv-f96-admin.douyincdn.com 上海、移动、200
```
## 4.3 试商用客户峰值带宽增加引入省份信息
登录超管子账号,点击 运营管理/月统计报表/试商用客户峰值带宽 查询、导出 存在引入省公司字段。
@@ -0,0 +1 @@
1881144685911,北京字节跳动网络技术有限公司,和鹏,1478,ngmcadl2-gbu01d21yhrhncf2
@@ -0,0 +1,208 @@
# 2.1 试用工单优化 - 同类型试用工单逻辑变更(P0)
**需求背景**
针对试用工单流程存在的问题,计划建议 CDN 平台与 BOSS 的信息同步机制,CDN 平台和 BOSS 基于同步的信息判断各试用阶段可以进行的操作、限制等。本期做新增试用单状态接口及同类型试用工单逻辑变更。
**具体描述**
1. 分发范围(==产品类型。==)相同且业务类型相同的试用工单,视为“同类型”,其中网内和三网视为**同一种**分发范围。该条件**在集客大厅侧进行限制**,IBS 不对同一企业同一产品的试用次数进行限制。
2. 企业开户时序调整,当 ibs 接到集客大厅试用工单并校验通过后,创建相关企业信息。在流程中的试用单做开户的数据割接。(开户所用到的手机号、邮箱等信息若校验失败,先做拒收处理,待二期做退单处理)。企业信息以第一次为准。第一次试用驳回删除企业信息。下发业务适配单带 CPID,跟 bpm 联调。
3. 同一客户每种产品的同一种业务类型(以下简称“同一类型”)最多只能有 1 个在途试用工单。同一类型的试用工单转正式商用后,则此类型试用在途工单归 0。此时如因客户业务/计费需要,需开通新的订购将独立计费,则同一类型方可再发起新一次的试用以验证业务功能,但仍需保持同一类型最多只能有 1 个在途试用工单。该判定逻辑放在集客大厅,IBS 不限制试用单数量,集客大厅给工单接受即可。
4. 每次发起的试用工单相互独立(独立的 ProductID),分别计算试用时长和累计流量。可以针对试用单进行多次变更,变更工单与试用工单共用一个 ProductID,基于试用的多次试用变更视为同 1 次试用。其中域名为增量变更,时长和累计流量为全量变更,多次变更的工单试用时长和试用流量取变更单中的最大值。若遇到 22 年之前试用单无订购 ID 信息的报错处理,线上若出问题时通过后台补订购 ID 规避处理。
5. 后端企业与产品订购表结构修改,同一产品下支持多个订购。企业管理页面调整详见 3.6 章节。
6. 试用工单转商后就不能再进行试用相关操作。如:试用暂停/恢复、变更、删除。若接到集客大厅对该试用单进行操作,本期做拒收处理,下期做退单处理。
## 需求评审
1. 注意取消开户失败邮件。(开户时成功发成功,失败发失败)
2. 停启用删除下发 CpId 问题。
3. 驳回的时候如何确认的企业是否是第一次试用逻辑。
4. 处理试用单前置校验。
5. 接口创单校验。
6. 试用变更单验收无对应试用单要报错。
测试提问:
![](../../../../attachment/images-uuid/720cb9e456ef40f5ba72088fdf84fb44.png)
## 需求备注
## 需求开发
1. ~~创单开户校验。~~(已完成,使用历史手机号、邮箱校验格式。)
2. ~~下发 BPM 携带 CpId,目前逻辑已支持。~~(已完成,注意测试及联调 BPM 接收情况。)
3. ~~开户:异步开户。~~(已完成)
4. ~~阶段反馈逻辑缩减。~~(已完成。)
5. ~~开户失败是不是要处理受理按钮呀。~~(沿用验收反馈限制。)
6. ~~开户成功和成功发送邮件范围确认。~~(原开户成功和失败会发送给运营经理,现在无法发送。已同步产品。不发运营经理、失败发刘霞等抄送)
7. ~~处理试用单前置校验。~~
8. ~~接口创单校验。~~
9. ~~试用变更单验收无对应试用单要报错。~~
10. ~~验收反馈:补充 productChargeModeDao (改)数据,存在性补充。~~
11. ~~验收反馈:productChargeModeDao 改为试用中。创单设置为 配置中~~
12. 开户逻辑异常重试,及数据割接接口。(沿用之前的运营经理点击配置按钮,待验证。)
13. 驳回的时候如何确认的企业是否是第一次试用逻辑。(ecId 下其他试用单,改判断条件)
这段代码的核心逻辑可以总结为以下步骤:
1. **从数据库中获取相关信息**
- 通过 `orderInfo.getEcId()``productIdInfoDao``preOrderDao` 中分别获取企业客户的 `ProductIdInfo` 列表和 `PreOrderInfo` 列表。
2. **过滤和映射预订单号**
-`preOrders` 中的每个元素,过滤掉与当前 `orderNum` 相同的订单号,并提取剩下的订单号集合。
3. **从 `testOrderDao` 获取测试订单**
- 使用过滤后的订单号列表以及企业配置状态 `EnterpriseConfigEnum.CONFIGSUCCESS.getCode()` 作为条件,从 `testOrderDao` 中获取符合条件的 `TestOrderInfo` 列表。
- 进一步过滤这些 `TestOrderInfo`,确保它们的 `TestType` 与当前 `testOrderInfo``TestType` 一致。
4. **判断测试订单列表是否为空**
- 使用 `CommonUtil.listIsNullOrSizeEqualZero` 检查 `testOrders` 列表是否为空。
- 如果为空,表示这是企业客户的首次试用,执行同步删除企业信息的操作,并记录日志。
总结:
- 该逻辑通过客户 ID 获取多个相关信息,对其中部分信息进行过滤和映射,最终判断是否是企业客户的首次试用。若是首次试用,执行特定操作。
# 2.4 与 BPM 下发的域名删除任务中增加运营经理信息(P0)
1、当客户点击删除按钮时,触发的域名删除任务(域名删除、cache+ 域名删除),下发给 BPM 的字段内容增加运营经理信息。**如果 bpm 不传 sa 信息**,需补充运营经理字段信息。
2、与 BPM 接口交互中,当 9.1.2 章节 task_second_class 字段为 2 和 7 时,user_id 为必填字段。
3、去除原有的限制条件:“任务二级分类”为域名删除且“派发 BPM 工单方式”为到期自动触发时,IBS 必须传此字段,BPM 用于给对应运营经理发起 IBS 通用运维待办工单(用于进行域名删除审核)。
4、同步支持直播域名的删除。
9.1.2 章节 task_second_class 字段
cache+:停用 8 启用 10 删除 7
esop/移动云 :停用 3 启用 4 删除 2
Esop 取值顺序:
1. BPM 回传值;
2. 企业省份的 SA;(取第一个。)
3. 保底配置项 GLOBAL_AREA_MANAGER_ID。
Cache+ 取值规则:
1. 省侧:区域经理;(随机一个。)
2. 集团:企业对应运营经理;(取第一个。)
3. 保底配置项 GLOBAL_AREA_MANAGER_ID
关于配置项:GLOBAL_AREA_MANAGER_ID(目前现网配置的 徐娜 id:1649 角色为运营经理)
“任务二级分类”为 2、3、4、7、8、10 时此字段为必填。
## 需求评审
## 需求备注
1. 更新接口文档。
2. 是否只有域名删除,停启用?(更新需求文档。)
3. cache+ 的兜底是否也设置一个徐娜。
4. cache+ 的集团侧逻辑方案(1. 企业对应的运营经理。2. 直接兜底。)
9.1.2 章节 task_second_class 字段为 2(域名删除) 和 7(cache+ 域名删除) 时,user_id 为必填字段。
同步支持直播域名的删除。
cache+:停用 8 启用 10 删除 7
esop/移动云 :停用 3 启用 4 删除 2
## 需求开发
# 用例评审
# 冒烟自测
## 删除定制化域名 - 点播 -ESOP(试用单引入)
这一步,点击删除按钮 后会有提示框,需点击确认后观察日志。
![](../../../../attachment/images-uuid/691212da0c2949e18ad35b9dc1b3ce75.png)
验证点中:日志展示这个会严格比对字符吗?
现在日志打的是:点播域名操作下发 BPM
有个空格,我怕你们用用例的字眼去筛选日志筛选不到。
## 解除试用次数限制 - 同一企业、业务类型、产品类型
前提中:
产品类型:移动网内 CDN
## 浙江省份企业首次订购试用单(退回)- 验证下发业务适
前提中直接就是
1.浙江企业:测试企业,首次提交试用单
已存在 怪怪的本来就是首次。
最后一步,这个页面不能通过 cpid 查企业。
![](../../../../attachment/images-paste/image-20240926171614938.png)
![](../../../../attachment/images-paste/image-20240926171646407.png)
## 试用变更单(新增域名 - 点播):试用 - 变更时长 - 变更
前提中、六、七、十、十一、十二 的 产品类型:移动网内 CDN
第四步:4.阶段反馈决策通过,刷新页面,IBS 页面弹出 6 项配置项
“刷新页面”建议改为“重新进入工单页面”刷新页面会直接回到工单列表。
第五步:5.调用验收反馈接口,验收反馈通过
接口和报文粘贴的是阶段反馈
第五步:验证点 工单状态 已完成
第九步:验证点 工单状态 已完成
---
第五步:
![](../../../../attachment/images-paste/image-20240927125317119.png)
![](../../../../attachment/images-paste/image-20240927130949211.png)
去掉端口。
第六、七、十、十一、十二步,验证点都有两个域名,我看着最后一个是可以的,中间那个看看可以删了。
这用例算是走不完了。 哈哈。
第六步:
![](../../../../attachment/images-paste/image-20240927131138856.png)
第七步:
![](../../../../attachment/images-paste/image-20240927125846497.png)
重复了。留最后一个就行。
第十步:
![](../../../../attachment/images-paste/image-20240927130519270.png)
留最后一个就行。
第十一步:
![](../../../../attachment/images-paste/image-20240927130624868.png)
第十二步:
![](../../../../attachment/images-paste/image-20240927130735366.png)
### 流程备注
商机与试用订单号:0927_0937_20
第一次变更单:0927_0941_04
@@ -0,0 +1,62 @@
1、试用单创建成功。
![](../../../../attachment/images-paste/image-20241017142807793.png)
2、企业创建成功,存在 CpId。
![](../../../../attachment/images-paste/image-20241017142828161.png)
3、业务管理员分配运营经理。
![](../../../../attachment/images-paste/image-20241017142859116.png)
![](../../../../attachment/images-paste/image-20241017142921337.png)
4、运营经理受理下发 BPM 日志:
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"1017_1427_16","createDate":"2024-10-17 14:27:43","data":{"cdn_type":"web","cpId":"83526010","domains":["DevReq1729146443A.komect.com"],"filelist":[{"name":"InfoSecurity.xls"},{"name":"BusiInfo.xls"}],"nameOfClient":"ECName1729146443","numberOfDoamin":1,"operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","sourceBasis":"1017_1427_16","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":"","titleOfDemand":"商机与试用工单"},"processType":"0","prodType":"1","province":"JT","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
![](../../../../attachment/images-paste/image-20241017143048484.png)
![](../../../../attachment/images-paste/image-20241017143136267.png)
5、BPM 阶段反馈
![](../../../../attachment/images-paste/image-20241017150006870.png)
```json
{
"code": "1017_1427_16",
"plains": [
"1"
],
"planeEvaluationInfo": [
{
"capacity": "可满足",
"estimatedCompletionDate": 1729148362000,
"plainName": "1",
"resultOfEstimate": "可支持"
}
],
"resultOfPolicy": "1",
"userId": "24"
}
```
6、确认 BPM 阶段反馈后是否还需要反馈 CpId。
![](../../../../attachment/images-paste/image-20241017150509955.png)
7、 BPM 验收反馈。
![](../../../../attachment/images-paste/image-20241017150708398.png)
```json
{"approve":0,"code":"1017_1427_16","plain_info":[{"approve":0,"domain_pre_info":[{"domain":"DevReq1729146443A.komect.com","httpSelection":{"protocol":0},"plain_name":"1","provinces":["551"],"schedule_type":"Forward","server_domain":["1.1.1.1"],"source_protocol":{"protocol_port":{"http":1},"protocol_type":1},"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip","weight":1}]}],"plain_name":"1"}],"try_time":1729148805000,"user_id":"24"}
```
8、 域名已生效
![](../../../../attachment/images-paste/image-20241017150842297.png)
@@ -0,0 +1,45 @@
1、试用单创建成功。
![](../../../../attachment/images-paste/image-20241017164407097.png)
2、企业创建成功,存在 CpId。
![](../../../../attachment/images-paste/image-20241017164422557.png)
3、业务管理员分配运营经理。
![](../../../../attachment/images-paste/image-20241017164442720.png)
![](../../../../attachment/images-paste/image-20241017164524575.png)
4、运营经理受理下发 BPM 日志:
```json
{"accessSystem":"IBS","account":"CDN-IBS","code":"1017_1642_30","createDate":"2024-10-17 16:43:08","data":{"cdn_type":"web","cpId":"83535154","domains":["DevReq1729154568A.komect.com"],"filelist":[{"name":"InfoSecurity.xls"},{"name":"BusiInfo.xls"}],"nameOfClient":"ECName1729154568","numberOfDoamin":1,"operMail":"group_om3@cdn.com","operTel":"15700197926","operUser":"15700197926cmcc","sourceBasis":"1017_1642_30","sourceOfDemand":"ESOPIBS平台)","summaryOfDemand":"","titleOfDemand":"商机与试用工单"},"processType":"0","prodType":"1","province":"JT","userList":[{"userMail":"group_om3@cdn.com","userName":"15700197926cmcc","userTel":"15700197926"},{"userMail":"yuhuazheng@aspirecn.com","userName":"15512341234cmcc","userTel":"15512341234"},{"userMail":"13807031909sa@qq.com","userName":"13807031909sa","userTel":"13807031909"}]}
```
![](../../../../attachment/images-paste/image-20241017164747023.png)
5、BPM 阶段反馈
```json
{"code":"1017_1642_30","plains":["1"],"planeEvaluationInfo":[{"capacity":"可满足","estimatedCompletionDate":1729155324000,"plainName":"1","resultOfEstimate":"可支持"}],"resultOfPolicy":"1","userId":"24"}
```
6、确认 BPM 阶段反馈后是否还需要反馈 CpId。
![](../../../../attachment/images-paste/image-20241017170457892.png)
7、 BPM 验收反馈。
```json
{"approve":0,"code":"1017_1642_30","plain_info":[{"approve":0,"domain_pre_info":[{"domain":"DevReq1729154568A.komect.com","httpSelection":{"protocol":0},"plain_name":"1","provinces":["551"],"schedule_type":"Forward","server_domain":["1.1.1.1"],"source_protocol":{"protocol_port":{"http":1,"https":2},"protocol_type":0},"sources":[{"back_addr":"1.1.1.1","back_protocol":0,"primary":true,"type":"ip","weight":1}]}],"plain_name":"1"}],"try_time":1729155407000,"user_id":"24"}
```
8、 域名已生效
![](../../../../attachment/images-paste/image-20241017170431450.png)
9、 工单已完成
![](../../../../attachment/images-paste/image-20241017170410268.png)
@@ -0,0 +1,373 @@
[内容网络产品需求说明书V7.5.0](https://www.kdocs.cn/l/cickeTai921A)
# 2.2 点播和直播的域名管理新增试用订购 ID
> 5 工时
## 需求评审
1. ~~关于订购关系的筛选框功能如何处理。~~(本期不处理。)
2. ~~点播和直播列表的字段位置不太一样,需要分别确认下放哪里以及导出。~~
## 需求备注
字段:
trialProductId
trial_product_id
## 需求开发
### 导出功能
**点播导出**/configManage/list/data/export
**点播导出按钮**显示:/configManage/indexexport
**点播导出按钮**权限:集团业务管理员、SHOW_EXPORT_USER_ID
![](../../../../attachment/images-paste/image-20241107103024687.png)
```sql
select r.name,
COUNT(*) as user_count,
GROUP_CONCAT(u.id) as user_ids
from user u
join role r on u.role_id = r.id
where u.id in
(1, 24, 136, 736, 874, 898, 899, 900, 901, 902, 903, 904, 906, 909, 913, 915, 916, 918, 920, 921, 923, 925, 927,
929, 930, 933, 934, 935, 937, 941, 944, 948, 950, 953, 954, 955, 958, 961, 962, 963, 964, 966, 967, 972, 974,
977, 979, 992, 996, 997, 1010, 1013, 1015, 1017, 1020, 1026, 1028, 1095, 1107, 1110, 1134, 1170, 1171, 1294,
1428, 1499, 1500, 1502, 1562, 1620, 1632, 1637, 1638, 1649, 1784, 1842, 1851, 1970, 1971, 1972, 1973, 1974, 1975,
1976, 1977, 1978, 2153, 2376, 2404, 2436, 2475)
group by r.name;
```
![](../../../../attachment/images-paste/image-20241107121446888.png)
**直播导出**/configManage/livestream/listLive/data/export
**直播导出按钮**标识:/live/order/list/indexexport
**直播导出按钮**权限:LIVE_STREAM_EXPORT_CONFIG_KEY 对应运营配置文件(operation_config SHOW_LIVE_EXPORT_USER_ID
![](../../../../attachment/images-paste/image-20241107104420480.png)
```sql
select r.name,
COUNT(*) as user_count,
GROUP_CONCAT(u.id) as user_ids
from user u
join role r on u.role_id = r.id
where u.id in
(select user_info_id
from operation_config_user_info
where operation_config_user_info_id = 12)
group by r.name;
```
加在域名状态前。
![](../../../../attachment/images-paste/image-20241107120154382.png)
### 割接方案
`self_service_domain_config` 表联合企业表获取所有 ESOP 企业的域名。
过滤掉拥有 `productId` 的域名,认为是商用的。
通过域名获取对应的试用单(`testorder_info``test_substance``test_order_domain`
注意未来开通时间的。(可以不用考虑,因为未来时间的定时任务会置空。)
# 3.3 试商用客户信息管理页面动态更新运营经理信息
> 2 工时
## 需求评审
1. 运营经理变更场景。
## 需求备注
## 需求开发
查询接口,接口以查询 `statement_flow_po` 为主:
```
https://inte.p.cdn.10086.cn
/statement/get/flow/list
?pageNum=1
&pageSize=10
&enterpriseId=
&productId=
&enterProvince=
&productType=
&businessStatus=%E5%BC%80%E9%80%9A%E6%88%90%E5%8A%9F
&orderNum=
&_=1730169027819
```
刷新按钮,刷新流量:
```
https://inte.p.cdn.10086.cn
/statement/refreshFlow
```
![](../../../../attachment/images-paste/image-20241029103934653.png)
所有 save 接口
```
POST http://localhost:8080/statement/upload?
orderNum={{$random.alphanumeric(8)}}&
type={{$random.alphanumeric(8)}}
GET /statement/delete?
id={{$random.alphanumeric(8)}}&
orderNum={{$random.alphanumeric(8)}}&
type={{$random.alphanumeric(8)}}
POST http://localhost:8080/param/config/statement/correct
StatementFlowQueryJob
```
重点:StatementFlowQueryJob(每天凌晨 3:00 执行一次任务。)
关注字段 operateManagerInfoorder_info 的 currentUserId
1. 在定时任务更新 `statement_flow_po` 的时候进行查询 `order_info` 后补充。新增不处理查到什么就是什么。
2. 在删除运营经理的时候进行替换,保证实时更新显示。
# 3.4 新增信安交互接口接收备案号相关信息
> 3 工时
## 需求评审
1. 关于 信安系统推送 这个是不是和需求没关系。
2. 我看接口文档中 我们这边规则是不是直接传参:abnormal_status 为 2 的当天数据。来做比较。
3. 响应信息中 reg_id 和 register_abnormal_num 的区别。我们是以 register_abnormal_num 为准吗?
4. reg_id 是不是会存在多个?reg_id 和 unit_name 要覆盖吗?还是只处理工单号。
5. 是否要为域名重置标记位。
6. 开发技术方面:我是否可以直接让接口吐一万个域名的信息。
## 需求备注
`register_abnormal_num` 是不是就是响应示例的 `abnormal_num`
> 文档写错了。
`reg_id``register_abnormal_num`:这两个字段 reg_id 是代表工信部查到的嘛?`register_abnormal_num` 返回规则是什么?我看有备案号有汉字。
> `reg_id`:新增时 IBS 同步的备案号。
> `register_abnormal_num`:已备案的情况下,返回的是 CU 核实后的备案号。未备案的情况下,返回的是字符串 “未备案”。
辛苦帮忙看下目前现网,IBS 这边 `abnormal_status` 为 1 和 2 的域名量在多少?
> 总数 163,未备案 52,备案号不一致 111。
date:关于查询日期,是不是有定期巡检?每天具体几点更新你们那边的数据呢?这个涉及产品设计到时候 IBS 定时任务设计在什么时候,获取到的是什么时候的数据?看你新更新的报文是凌晨 2 点是吧。
> 是的。跑多久?一个小时之内基本没问题。
`reg_id` 必传,总是返回 IBS 新增同步的?
> 必返回。
`abnormal_status`
为 0 正常 时: `register_abnormal_num` 返回 CU 核实的,此时与 reg_id 是相同的。 (**此字段被更改定义为查全部异常状体啊,接口没有正常的信息。**)
为 1 未备案 时:`register_abnormal_num` 返回“未备案”字符串。
为 2 备案号不同 时:`register_abnormal_num` 返回 CU 核实的,此时与 reg_id 是不一样的。
> `abnormal_status` 必填
还有这个两个场景帮忙确认下。
关于 `abnormal_status` 为 1 未备案:
场景一:IBS 新增同步了域名和备案号。但是您那边核查后发现域名在 CU 未备案,此时这个域名属于未备案吧?
场景二:IBS 新增同步时域名和备案号正常,后期备案号过期了 IBS 未更新,此时接口返回的 `abnormal_status``register_abnormal_num` 是什么? 过期 备案号不同。
场景三:关于 `abnormal_status` 为 2 备案号不同,是客户更换了备案,但是未通过 IBS 同步给信安的状态。
> 无备案号过期一说,对方核对 CU 有就核对备案还是未备案,无过期一说。
所有字段都是必返回吗?
> 必返回。
因为我们获取当天默认,我们预期只传一个 `abnormal_status` 没问题吧。
> 可以。
接口传参支持任意组合吗?
> 可以。
确认 `prov_id` 字段,您那边一个企业只有一个 `prov_id` 吗?域名。
> 域名。
接口可以联调的时间和上线的时间。
> 联调网络。
> 11 月中旬。
### 域名备案信息同步方案
一、同步流程
每日凌晨 4:25(避开业务高峰期),系统将通过信安接口拉取所有异常域名数据,并进行如下处理:
1. 备案号不一致: 针对备案号与信安接口不一致的域名,系统将自动调用【域名信安信息修改同步接口】进行更正。
2. 未备案域名: 系统将记录未备案域名,但不进行自动操作。
二、结果通知
每日同步任务完成后,系统将生成邮件报告,包含以下信息:
- 备案号不一致域名: 企业名称、域名、修改前备案号、修改后备案号。
- 未备案域名: 企业名称、域名。
### 产品沟通记录
能不能把邮件发送时间调整到定时任务执行完毕后直接发送?这样就不用起两个定时任务了。或者,我们可以把定时任务调整到早上 9:20 执行,然后立即发送邮件。尽可能任务和邮件在一起。
发送逻辑:筛选出未备案或备案号不同的数据,就发送邮件。如果两种情况都不存在,则不发送。
一个小点:即使从信安返回了一个域名 A 备案号不一致。但是我会比较一下信安返回的备案号和 IBS 信安库中的是否一致,如果一致则只记录不进行同步和刷库,更严谨一些。
更新接口文档!!!
信安系统推送或者”这可以去掉了。
信安信息过期或变更 这可以写的清楚点,那天会上问了,备案号没有过期一说。就是未备案和备案号不一致。
上边写清楚是不是下边 的发送时间和发送时机就没必要了。
将数据通过接口同步至信安,这个接口名是:编辑加速域名接口。关于域名备案号不一致,发起信安信息修改同步,备案号取 域名异常备案查询接口 的 register_abnormal_num 字段,其余值为 IBS 库中现有信安数据填充。
## 需求开发
# 用例评审
## 查看试用订购 ID:新购试用单(点播集团)
开发注意:受理工单并关联售前支撑工单。
## 查看试用订购 ID:新购试用单(直播省侧)
测试注意:关于直播的域名,阶段反馈后需要集团运维工程师点击下发后验收反馈。
## 试商用客户信息管理 - 同步删除后的运营经理信息 - 新购两个试用单
测试注意:
1. 分别查看两个试用单的运营经理信息(这里表格是【总部运营经理及电话】字段)
## 新增接口,域名未备案或备案号不一致进行变更,查看同时同步的邮件信息
前提:
1. 存不存在备案这个不是必要的。因为会存在域名引入是正常的但是客户自己注销了。所以可以去掉。
2. 更新备案号为:津 ICP 备 0500_20241107.com_12,这个
3. 定时任务执行时间到时候可以配合提前执行。
4. 发送时间。发送机制:存在备案信息不一致时,触发发送。
5. 邮件是有表格的。
# 冒烟自测
```
新增两个配置项存在默认值,无需写在 Patch 中:
DOMAIN_ABNORMAL_ICP_CHECK_JOB("DOMAIN_ABNORMAL_ICP_CHECK_JOB", "域名异常备案查询定时任务")
INFORMATION_TO_XINAN_QUANTITY_PER_BATCH("INFORMATION_TO_XINAN_QUANTITY_PER_BATCH", "域名异常备案查询定时任务,同步信安批次数量")
需补充在升级文档(Patch 已增加。):
DOMAIN_ABNORMAL_ICP_CHECK_JOB_EMAIL("DOMAIN_ABNORMAL_ICP_CHECK_JOB_EMAIL", "信安信息更新通知所有邮件提醒人, 包含主送和密送"),
keyDOMAIN_ABNORMAL_ICP_CHECK_JOB_EMAIL
valueyushanshan@chinamobile.com;xuxuehan@cmhi.chinamobile.com,jigaofeng@cmhi.chinamobile.com,zhanxiaohong@cmhi.chinamobile.com,lichunliang@cmhi.chinamobile.com,shizheng@cmhi.chinamobile.com,zhangpenghao@cmhi.chinamobile.com,15033848944@163.com
desc:信安信息更新通知所有邮件提醒人,包含主送和密送(“;”前为主送,后边为密送,每组邮箱之间用“,”分割。)
```
## 查看试用订购 ID:新购试用单(点播集团)
与测试已确认,均为企业已存在场景:
1113_1450_04
## 查看试用订购 ID:新购试用单(直播省侧)
前提:已存在浙江省企业,且存在试用单
与测试已确认,集团业务管理员才能导出
911
923
1113_1452_24
![](../../../../attachment/images-paste/image-20241113145555577.png)
20241113151242
testzw.20241113151242.com
## 试商用客户信息管理 - 同步删除后的运营经理信息 - 新购两个试用单
```
1.政企公司-testzw,订购两个试用单,分配给不同的运营经理,到已反馈状态
(1)试用单一:订购关系ID-001,运营经理-集团运营经理001(电话18866220001
(2)试用单二:订购关系ID-002,运营经理-集团运营经理002(电话18866220002
2.对应信息已写入 试商用客户信息管理 页面
```
1113_1240_38ProductID1731472847xj 集团运营经理 B
1113_1245_03ProductID1731473106:集团运营汤汤
921,xj 集团运营经理 B,15700197926
1354,集团运营汤汤,15512341234
更改定时任务时间,确保对应信息已写入 试商用客户信息管理 页面。
```sql
select *
from qrtz_triggers
where TRIGGER_NAME like '%StatementFlowQueryJob%';
```
## 新增接口,域名未备案或备案号不一致进行变更,查看同时同步的邮件信息
```sql
select ssdc.domain as '域名',
ssdc.legal as '合法性',
ssdc.icp '域名表备案号',
bcid.reg_id '信安表备案号',
bcid.domain_id_cdn_sys as '域名信安 ID',
iu.unit_name as '信安企业名称',
ei.enterprise_name as 'IBS 企业名称',
bcid.introduce_prov as '引入身份',
bcid.top_domain,
bcid.source_list,
bcid.distribute_prov,
bcid.user_id_cdn
from self_service_domain_config ssdc
join big_cloud_information_domain bcid on ssdc.domain = bcid.domain
join enterprise_info ei on ei.enterprise_id = ssdc.tenant_id
join information_user iu on iu.user_id_cdn = bcid.user_id_cdn
where ssdc.legal = false
and product not in (3, 4, 5, 6, 7)
order by ssdc.id desc;
```
```sql
select *
from qrtz_triggers
where TRIGGER_NAME like '%DomainAbnormalIcpCheckJob%';
```
File diff suppressed because one or more lines are too long
@@ -0,0 +1,188 @@
[内容网络产品需求说明书 V7.6.0](https://www.kdocs.cn/l/cqzhTrluWRtv)
# 试用单优化 - 试用变更成功后试用单处理逻辑优化
> 10 工时。
## 需求评审
1、若试用变更工单被驳回(包含驳回工单、不可承接驳回工单)则试用单状态不变。【现状如此。】
2、对于已完成的工单,增加试用变更单进单校验。
1. 若试用时长流量已用完,也正常进单,正常变更状态。【现状如此。】
2. 若试用变更单新增了域名,则校验分发范围跟原试用变更单是否一致,若一致则正常进单,若不一致则退单处理,退单原因为:一个订购下,域名分发范围必须一致。(**需求点!(待自测。)**)
3. 若校验失败则做退单处理,并邮件告警出来。【现状如此。】
3、跟集客大厅交互,3.14 反馈试用单状态的接口,反馈已完成、已删除的状态时,流量时长为必填字段,若没查到数据则不反馈该字段。(**需求点!(待自测。)**)
> 已完成(试用时长耗尽或者流量,停用中)
> 已删除(配置删除,工单保留)
4、试用变更工单为变更流量跟时长工单(不增域名),工单已完成且工单处理结果为变更成功。
1. 若试用状态为试用中,则仅增加试用单的流量时长等信息,试用工单状态、产品状态、试用状态(集客大厅)不变。【现状如此。】
2. 若试用状态为已完成,则增加试用单的流量时长等信息,试用工单状态为已反馈、试用状态(集客大厅)试用中、产品状态变更为试用中,域名需同步开启。【现状如此。】
3. 若试用状态为已删除,不可仅提交试用变更流量时长工单。【现状如此。】
5、试用变更工单变更域名(包含同步增加的流量/时长)工单已完成且工单处理结果为变更成功。下发 bpm 域名配置工单后,域名状态为部署中。
1. 若试用状态为试用中,则同步变更试用单的流量时长等信息,试用工单状态、产品状态、试用状态(集客大厅)不变,新增的域名状态为已生效。【现状如此。】
2. 若试用状态为已完成,则需增加试用单的流量时长等信息,试用工单状态已反馈、试用状态(集客大厅)试用中、产品状态变更为试用中,旧域名需同步开启,新增的域名状态为已生效。【现状如此。】
3. 若试用状态为已删除(必须新增域名,若没有域名则退单处理),则同步增加试用单的流量时长等信息,试用工单状态为已反馈、试用状态(集客大厅)试用中、产品状态变更为试用中,新增的域名状态为已生效。【现状如此。】
6、对于已删除的试用单,若试用变更单未增加流量时长(仅增加域名),且流量时长已耗尽,则按照正常流程处理,试用变更单完成后,试用工单状态已反馈,试用状态试用中,产品状态为试用中,域名状态为已生效。(**需求点!**)
> 历史域名问题,是否状态变更。
7、试用变更工单支持同一种分发范围之间相互调整。即分发范围网内和三网视为一种类型,可互相调整。网内和海外,三网和海外不可调整。
1. 10.1.2 新增 processType 枚举值 9“试用变更分发范围工单”。当试用变更工单变更了分发范围时(不可同时新增域名和变更分发范围),通过业务适配单下发给 bpm,processType 为 9.
2. 给 bpm 下发的试用变更单(10.1.2 章节),prodType 枚举值 1 2 可互相调整,其他不可调整,给 BPM 下发试用变更单时需带该试用单下所有的域名信息。域名状态不变,需根据 bpm 反馈的结果,刷新分发范围信息。
3. 若下发试用变更分发范围工单,summaryOfDemand 字段必填,需拼接内容信息:原分发范围是**需变更为**,分发平面不能变。
4. BPM 反馈变更成功后,若变更了分发范围,试用单、企业管理产品详情也要同步变更。
5. 不涉及域名状态变更,需联调测试直播流程是否正常。
8、当省运营经理、集团运营经理收到试用变更工单时,可以退回或受理试用变更工单。若退回试用变更工单则退回到集客大厅。(**需求点!(待自测。)**)
### 会上疑问点
1. ~~流量未查询到填空。~~
2. ~~分发范围调整不做限制。BPM 交互增加新的工单类型。是否允许反馈失败。驳回是全量驳回。~~
3. ~~建单不校验。通过时长和流量耗尽限制。~~
4. 可能出现问题:**验收反馈时间是未来时间。可以是负数。**
## 需求备注
IBS 集中运营 - BPM 对接接口规范 V6.010.1.2 新增 processType 枚举值【9 试用变更分发范围工单】)- 20241216
## 需求开发
# 信安信息巡检 Bug 优化
## 需求评审
版本遗留 Bug。
## 需求备注
版本遗留 Bug。
## 需求开发
# 增加信安巡检功能
# 用例评审
2024 年 12 月 13 日测试用例评审。
# 冒烟自测
![](../../../../attachment/images-paste/image-20241217143940888.png)
![](../../../../attachment/images-paste/image-20241217143955761.png)
第一步:
变更分发范围(ProdType)为:三网
> 这里应该是:三网 CDN
![](../../../../attachment/images-paste/image-20241217144839755.png)
![](../../../../attachment/images-paste/image-20241217145123454.png)
![](../../../../attachment/images-paste/image-20241217145248700.png)
![](../../../../attachment/images-paste/image-20241217145453393.png)
![](../../../../attachment/images-paste/image-20241217160617993.png)
![](../../../../attachment/images-paste/image-20241218145342208.png)
## 试用变更(新增域名,变更分发范围)- 试用单为试用中
```
前提:
1.已存在试用单,工单状态:已反馈,工单处理结果:试用可以承接
分发范围(ProdType)为:移动网内CDN
试用订购ID:012024111815
```
![](../../../../attachment/images-paste/image-20241218184629983.png)
## 变更分发范围 1->2:试用变更(不新增域名)- 试用单试用中
```
1.已存在试用单,工单状态:已反馈,工单处理结果:试用可以承接
分发范围(ProdType)为:1 移动网内CDN
试用订购ID:012024111815
```
## 可查询到时长流量:试用删除(无域名)- 试用单已暂停
```
1.已存在试用单,工单状态:已完成,工单处理结果:试用暂停
试用订购ID012024111815
已试用流量:10PB
已试用时长:10天
```
![](../../../../attachment/images-paste/image-20241218190615350.png)
![](../../../../attachment/images-paste/image-20241218190624728.png)
![](../../../../attachment/images-paste/image-20241218191107259.png)
## 试用变更(新增域名)- 试用删除且流量耗尽
```
前提:
1.已存在试用单,工单状态:已完成,工单处理结果:试用流量耗尽
试用单订购ID012024111815
域名:test.com
2.对该试用单(012024111815)提交试用删除工单,试用删除工单到已完成状态
3.该试用单的 工单状态:已完成,工单处理结果:试用删除
试用单订购ID012024111815
```
![](../../../../attachment/images-paste/image-20241218192901828.png)
![](../../../../attachment/images-paste/image-20241218193126928.png)
![](../../../../attachment/images-paste/image-20241218193606802.png)
![](../../../../attachment/images-paste/image-20241218193609623.png)
## 试用变更(不新增域名)- 运营经理驳回
```
1.已存在试用单,工单状态:已反馈,工单处理结果:试用可以承接
试用订购ID012024111815
试用时长:5天
试用流量:5PB
```
```
List<String> productIdList = selfServiceDomainConfigList.stream()
.map(SelfServiceDomainConfigPO::getProductId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
```
## 春良
```
1.已存在试用单,状态为已反馈,工单处理结果为:试用可以承接
订购关系ID012024111815
MarketingTrial值为1(是)
```
```
前提:
1.集团企业账号,已存在试用单,订购直播加速
单号:2024111818
工单状态:已完成,
工单处理结果:试用删除
2.提交试用变更工单(新增域名)接口,使试用单存在在途试用变更工单
```
@@ -0,0 +1,44 @@
# 【试用变更单】变更分发范围
> [!NOTE]
> 和 BPM 交互重点测下直播。
# 【反馈试用单状态】反馈已完成、已删除的状态时,流量时长为必填字段,若没查到数据则不反馈该字段。
> [!NOTE]
> 时长的处理逻辑优化。
# 【试用变更单】省运营经理、集团运营经理,可以退回试用变更工单到集客大厅。
# 【试用变更单】对已删除的试用单,且流量时长已耗尽,试用变更单未增加流量时长(仅增加域名)。
> [!NOTE]
> 此场景按理说不应该成功,需关注。
>
> 再确认 3 个场景:
>
> 1. 试用已完成(流量耗尽、时长耗尽),可以不增加对应的时长流量吗?
> 2. 试用已删除,需同时增加时长流量?
> 3. 试用已删除,前提是暂停,此时可以不增加流量引进域名吗?
1. 已存在试用单,工单状态:已完成,工单处理结果:试用流量耗尽。
2. 对该试用单(012024111815)提交试用删除工单,试用删除工单到已完成状态。该试用单的 工单状态:已完成,工单处理结果:试用删除。
3. BBOSS 提交试用变更(仅新增域名)。
4. 登录业务管理员,受理工单。
5. 登录运营经理,受理工单。
6. 调用阶段反馈接口,反馈成功。
7. 调用验收反馈接口,反馈成功。
8. 查看原试用单,工单状态:已反馈,工单处理结果:试用可以承接,域名已生效。
9. 等 10 分钟后,查看原始试用单工单状态:已反馈,工单处理结果:试用流量耗尽域名已生效。
# 试用工单、试用变更工单新增展示字段:是否参加省公司本地客户营销活动试用规则。
# 存在未完成的试用变更工单开通
> [!NOTE]
> 确认下是否可以触发。(预期不可以。)
# 存在未完成的试用暂停工单开通
> [!NOTE]
> 确认下是否可以触发。(预期不可以。)
@@ -0,0 +1,46 @@
# 信安信息附件中新增冲突域名列
## 需求评审
反馈产品增加业务类型显示问题修复。
## 需求备注
下载接口,点播直播一个接口。
```
/configManage/getSecurity?domain=
```
按钮显示规则:
```
点播
/configManage/update/domain
update为true
直播是
/live/order/config/display
icpDownload为true
```
## 需求开发
# 用例评审
# 冒烟自测
```
前提:
已存在冲突域名:www.xcftesta.com.04.cdnhwcqir15.com
真实域名为:www.xcftesta.com
存在信安信息、业务类型为下载加速
```
7.7.0 和 7.7.1 是两个版本并行。
1、a列展示冲突域名:webcdn.m.qq.com.54.cdnhwcqir15.com
2、s列展示真实域名:webcdn.m.qq.com
3、业务类型展示网页加速
@@ -0,0 +1,304 @@
# 相同CPID下冲突域名兼容
5 人天
## 需求评审
## 需求备注
重点完成:2、5、7。
## 需求开发
> [!WARNING]
> 注意企业子账号。
企业客户账号:
```
http://dev.p.cdn.10086.cn:8080/sso/login/sso_login?token=3075&env=test
```
第一版企业客户证书管理代码:
```java
if (RoleEnum.CP.getRole().equals(currentRole)) {
Object domainObject = selectResult.get("bindDomains");
List<String> domains = CollectionUtils.emptyIfNull(domainObject instanceof List<?> ? (List<?>) domainObject : null)
.stream()
.filter(Objects::nonNull)
.map(Object::toString)
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(domains)) {
List<SelfServiceDomainConfigPO> bindDomains = selfServiceDomainConfigDao.findByDomainIn(domains);
List<String> bindDomainList = new ArrayList<>();
for (SelfServiceDomainConfigPO s : bindDomains) {
if (StringUtils.isEmpty(s.getCpDomain())) {
// 当前域名为真实配置。
bindDomainList.add(s.getDomain());
} else {
// 当前域名为冲突配置。
Long configCount = selfServiceDomainConfigDao.countByTenantIdAndDomainOrCpDomain(s.getTenantId(), s.getCpDomain());
// 关于 configCount 的相关场景在 countByTenantIdAndDomainOrCpDomain 中有说明。
bindDomainList.add(configCount == 1 ? s.getCpDomain() : s.getDomain());
}
}
selectResult.put("bindDomains", bindDomainList);
}
}
```
```java
private void replaceDomainForCP(List<CertDomainDeployVO> vos) {
SecurityUser user = SecurityUserUtil.getCurrentUser();
if (CollectionUtils.isEmpty(vos) || user == null || !RoleEnum.CP.getRole().equals(user.getRole().getRole())) {
return;
}
for (CertDomainDeployVO vo : vos) {
if (StringUtils.isEmpty(vo.getDomain())) {
continue;
}
List<SelfServiceDomainConfigPO> bindDomains = selfServiceDomainConfigDao.findByDomainIn(Lists.newArrayList(vo.getDomain()));
List<String> bindDomainList = new ArrayList<>();
for (SelfServiceDomainConfigPO s : bindDomains) {
if (StringUtils.isEmpty(s.getCpDomain())) {
// 当前域名为真实配置。
bindDomainList.add(s.getDomain());
} else {
// 当前域名为冲突配置。
Long configCount = selfServiceDomainConfigDao.countByTenantIdAndDomainOrCpDomain(s.getTenantId(), s.getCpDomain());
// 关于 configCount 的相关场景在 countByTenantIdAndDomainOrCpDomain 中有说明。
bindDomainList.add(configCount == 1 ? s.getCpDomain() : s.getDomain());
}
}
if (CollectionUtils.isEmpty(bindDomainList)) {
continue;
}
vo.setDomain(bindDomainList.get(0));
}
}
```
### 证书相关
```
已完成。
/crt/statis
?_=1740447840405
bindDomains
已完成。
/crt/list
?pageNum=1&pageSize=10&name=&domain=&search=&_=1740447469844
bindDomain
已完成。
/crt/detail
?uniqueId=20250224172158--c551-4982-8a35-a4ca3c5acaac&_=1740447537010
bindDomain
已完成。
/crt/list/unbindDomain
?enterpriseId=oe6cljyn-8xkwymbxps0pednz&certUniqueId=20250224172158--c551-4982-8a35-a4ca3c5acaac&_=1740447602214
bindDomain
unBindDomain
已完成。
/crt/domain/deploy/list
?crtUniqueId=20250224172158--c551-4982-8a35-a4ca3c5acaac&_=1740447680951
domain
```
信息准备。
ECName1740554572
15700197926
PRODUCTID1740554900
DevReq1740554572A.komect.com
```
http://dev.p.cdn.10086.cn:8080/sso/login/sso_login?token=3075&env=test
20250226154158--dc67-4225-bd2a-b17413dd9b13
3075-企业子账号
```
```
private List<String> transformDomainForCP(List<String> domains) {
String enterpriseId = SecurityUserUtil.getEnterpriseId();
List<String> list = new ArrayList<>();
for (String domain : domains) {
Long l = selfServiceDomainConfigDao.countByTenantIdAndDomainOrCpDomain(enterpriseId, domain);
if (l == 1){ // 这必然是一个冲突配置或者真实配置
Optional<SelfServiceDomainConfigPO> tenantIdAndDomain = selfServiceDomainConfigDao.findByTenantIdAndDomain(enterpriseId, domain);
if (tenantIdAndDomain.isPresent()) {
// 非冲突域名
list.add(domain);
}else {
// 冲突域名
Optional<SelfServiceDomainConfigPO> tenantIdAndCpDomain = selfServiceDomainConfigDao.findByTenantIdAndCpDomain(enterpriseId, domain);
tenantIdAndCpDomain.ifPresent(domainConfigPO -> list.add(domainConfigPO.getDomain()));
}
}else { // 由于不是唯一的前端传过来的肯定是域名表 domain 字段,直接用。
list.add(domain);
}
}
return list;
}
```
# 增加黑名单联合惩戒需求,不允许惩戒客户新增域名
2 人天
## 需求评审
## 需求备注
queryJointPunishFromBBoss
JointPunishContentVO
JointPunishVO
JointPunishFeedbackVO
JointPunishFeedbackResultVO
## 需求开发
# 月统计报表中平面筛选项变更为后端控制
0.5 人天
## 需求评审
(1)IBS-运营管理-月统计报表-企业月流量,
(2)IBS-运营管理-月统计报表-试商用客户峰值带宽
## 需求备注
企业月流量
华为平面:1
中兴平面:2
HCDN3
自研2.08
试商用客户峰值带宽
华为平面:1
中兴平面:2
HCDN3
自研2.04
## 需求开发
```json
{
"企业月流量": {
"华为平面": "1",
"中兴平面": "2",
"HCDN": "3",
"自研2.0": "8"
},
"试商用客户峰值带宽": {
"华为平面": "1",
"中兴平面": "2",
"HCDN": "3",
"自研2.0": "4"
}
}
```
# 企业白名单审批人员变更需求
0.5 人天
## 需求评审
1、二级域名白名单工单审批,审批人从政企客户经理管理员换成集团客户经理管理员。
2、企业白名单企业管理-企业白名单-TOP55企业&二级域名白名单,新增集团客户经理管理员编辑查看权限。
## 需求备注
## 需求开发
登录集团超级管理员,进入账户管理-角色权限管理,在企业管理下增加权限。
```
权限关键字:NEW_QYGL_TAB_WHITELISTING
权限名称:企业白名单
```
进入账户管理-角色管理,找到集团客户经理管理员、政企客户经理管理员。
进行编辑,勾选企业白名单。
# 用例评审
# 冒烟自测
## (完成)月统计报表中平面筛选项变更为后端控制
企业月流量
> 这个从芳造好数据后需要触发后端数据写入。
```
xcftest2025010403.com
xcftest2025010401.com
```
试商用
```
xcftest1119esop01.komect.com,gpnxknoh-mqewujpo0ofulamk,[1],2024-11-19 08:47:57,彭的企业,政企分公司,83526154
```
## (完成)企业白名单审批人员变更需求
> 确认白名单权限显示问题。
1、前提的 关闭惩戒功能。
2、第二部中的(2)调用esop企业客户调用新增自助域名接口,这一步除了 CMCDN-Auth-Token 还有一个 Accept 参数的。
验证点文案:
```
{
"err_desc":"请求校验通过,域名正在审核中,请等待集团客户经理管理员审核,审核通过后请在域名管理列表里查看域名信息。",
"status":"under_review",
"task_id":"7abc1faa3f324589a49380fdd1f12ea2"
}
```
3、第二步验证点 2.邮件提醒集团客户经理管理员审批【ESOP自助域名新增工单】
![](../../../../attachment/images-paste/image-20250303145056738.png)
1.已存在esop企业:esop测试企业,企业中已存在点播域名
2.已在后台配置开启,域名列表页存在“新建域名”按钮
3.esop测试企业 配置为惩戒黑名单企业
4.开启惩戒功能
## (完成)相同CPID下冲突域名兼容
前提:1.已存在企业:xcf海外点播,企业下已存在域名test.com和冲突域名test.com.01.cdnhwcqir15.com
## (完成)增加黑名单联合惩戒需求,不允许惩戒客户新增域名
@@ -0,0 +1,256 @@
# 前置校验
试用单请求
![](../../../../attachment/images-paste/image-20250307091312022.png)
响应
![](../../../../attachment/images-paste/image-20250307091515330.png)
# 试用工单
建单
![](../../../../attachment/images-paste/image-20250307141134647.png)
分配业务管理员
![](../../../../attachment/images-paste/image-20250307161452880.png)
![](../../../../attachment/images-uuid/6e6f40119eb447eb96b5eefb52e61395.png)
分配运营经理
![](../../../../attachment/images-paste/image-20250307170655169.png)
受理下发BPM
![](../../../../attachment/images-paste/image-20250307170841967.png)
阶段反馈
![](../../../../attachment/images-paste/image-20250307171052796.png)
验收反馈
试用结果反馈
![](../../../../attachment/images-paste/image-20250307171439866.png)
![](../../../../attachment/images-paste/image-20250307181818149.png)
# 试用变更工单
## 不新增域名
建单
![](../../../../attachment/images-paste/image-20250310100833087.png)
![](../../../../attachment/images-paste/image-20250310100924000.png)
提交
![](../../../../attachment/images-paste/image-20250310101024997.png)
结果
![](../../../../attachment/images-paste/image-20250310101134905.png)
## 新增域名
建单
![](../../../../attachment/images-paste/image-20250310145519093.png)
![](../../../../attachment/images-paste/image-20250310145544957.png)
业务管理员受理
![](../../../../attachment/images-paste/image-20250310145620501.png)
下发 BPM
![](../../../../attachment/images-paste/image-20250310145713001.png)
阶段反馈
![](../../../../attachment/images-paste/image-20250310145824662.png)
验收反馈
![](../../../../attachment/images-paste/image-20250310150142511.png)
![](../../../../attachment/images-paste/image-20250310150224943.png)
# 试用业务状态变更工单(暂停/恢复/删除)
## 暂停
![](../../../../attachment/images-paste/image-20250310152906430.png)
![](../../../../attachment/images-paste/image-20250310153523687.png)
## 恢复
![](../../../../attachment/images-paste/image-20250310154629115.png)
![](../../../../attachment/images-paste/image-20250310154746148.png)
## 删除
![](../../../../attachment/images-paste/image-20250312095435765.png)
![](../../../../attachment/images-paste/image-20250312095445843.png)
![](../../../../attachment/images-paste/image-20250312095733566.png)
![](../../../../attachment/images-paste/image-20250312095741612.png)
![](../../../../attachment/images-paste/image-20250312095755895.png)
# 业务开通工单
## 首次
![](../../../../attachment/images-paste/image-20250310161540838.png)
![](../../../../attachment/images-paste/image-20250310161546728.png)
![](../../../../attachment/images-paste/image-20250310161625737.png)
归档
![](../../../../attachment/images-paste/image-20250310161700189.png)
## 非首次
![](../../../../attachment/images-paste/image-20250310172058849.png)
![](../../../../attachment/images-paste/image-20250310172106020.png)
![](../../../../attachment/images-paste/image-20250310172138422.png)
![](../../../../attachment/images-paste/image-20250310172158933.png)
![](../../../../attachment/images-paste/image-20250310172304750.png)
![](../../../../attachment/images-paste/image-20250310172514663.png)
![](../../../../attachment/images-paste/image-20250310172521268.png)
![](../../../../attachment/images-paste/image-20250310172553581.png)
# 业务变更工单
![](../../../../attachment/images-paste/image-20250311101301666.png)
![](../../../../attachment/images-paste/image-20250311101631801.png)
![](../../../../attachment/images-paste/image-20250311104453303.png)
# 业务状态变更工单
## 暂停
![](../../../../attachment/images-paste/image-20250311105554747.png)
![](../../../../attachment/images-paste/image-20250311105612898.png)
![](../../../../attachment/images-paste/image-20250311105804120.png)
## 恢复
![](../../../../attachment/images-paste/image-20250311110831441.png)
![](../../../../attachment/images-paste/image-20250311110941442.png)
![](../../../../attachment/images-paste/image-20250311111048839.png)
![](../../../../attachment/images-paste/image-20250311111219821.png)
# 业务注销工单
## 点播注销
![](../../../../attachment/images-paste/image-20250311165810016.png)
![](../../../../attachment/images-paste/image-20250311165821553.png)
![](../../../../attachment/images-paste/image-20250311170038564.png)
![](../../../../attachment/images-paste/image-20250311170107363.png)
## 增值注销
![](../../../../attachment/images-paste/image-20250311171634673.png)
![](../../../../attachment/images-paste/image-20250311171942571.png)
![](../../../../attachment/images-paste/image-20250311171716309.png)
![](../../../../attachment/images-paste/image-20250311172323936.png)
![](../../../../attachment/images-uuid/116f6dcd8914494f85dc85b96644adba.png)
![](../../../../attachment/images-paste/image-20250311172420633.png)
# 增值业务受理工单
![](../../../../attachment/images-paste/image-20250311163647809.png)
![](../../../../attachment/images-paste/image-20250311163655393.png)
![](../../../../attachment/images-paste/image-20250311164853999.png)
![](../../../../attachment/images-paste/image-20250311164921928.png)
# 总结
![](../../../../attachment/images-uuid/6f458f86f7a54cf5b8e604faefabaeac.png)
# 惩戒联调
```
2025-03-14 01:56:06 [a6ecb4e01a7c7334] [a6ecb4e01a7c7334] [] [ibs-portal] [http-nio-8080-exec-6] INFO com.cmcc.cdn.platform.selfservice.service.impl.BBossInterGatewayService 63 sendPostRequest - send post request to BBoss gateway, url:http://172.21.16.223:50079/api/v2/sync/BBOSS/JointPunishServ, request:{"sign":"9C382DD417F0CC029D7D7A1D9389A88C","sessionID":"3036e23fcf0242dda5e85ade39cf9b","accessToken":"20250409135819abd084d9d9534e4593ce359df2283950-0330-1741586299","version":"1.0.0","content":"{\"ECID\":\"871A87114166070\",\"PkgSeq\":\"1741917366808\"}","timeStamp":"20250314095606","envFlag":"0","transIDO":"3036e23fcf0242dda5e85ade39cf9b","domain":"BBSS","routeValue":"998","busType":"BBSS","routeType":"00","signMethod":"md5"}
2025-03-14 01:56:07 [a6ecb4e01a7c7334] [a6ecb4e01a7c7334] [] [ibs-portal] [http-nio-8080-exec-6] INFO com.cmcc.cdn.platform.common.util.HttpUtil 342 doHttpRequest2 - url:http://172.21.16.223:50079/api/v2/sync/BBOSS/JointPunishServ, method:POST, 返回的状态码为:200
2025-03-14 01:56:07 [a6ecb4e01a7c7334] [a6ecb4e01a7c7334] [] [ibs-portal] [http-nio-8080-exec-6] INFO com.cmcc.cdn.platform.common.util.HttpUtil 348 doHttpRequest2 - url:http://172.21.16.223:50079/api/v2/sync/BBOSS/JointPunishServ, method:POST, 返回的请求体:{"cutOffDay":"20250314","response":{"rspCode":"20004","rspDesc":"otn error(no route)"},"transIDO":"3036e23fcf0242dda5e85ade39cf9b"}
```
## 异常
![](../../../../attachment/images-paste/image-20250314161853342.png)
![](../../../../attachment/images-paste/image-20250314161944840.png)
![](../../../../attachment/images-paste/image-20250314162535887.png)
## 惩戒
![](../../../../attachment/images-paste/image-20250314170340748.png)
![](../../../../attachment/images-paste/image-20250314170347253.png)
![](../../../../attachment/images-paste/image-20250314170422153.png)
![](../../../../attachment/images-paste/image-20250314170427803.png)
![](../../../../attachment/images-paste/image-20250314170451545.png)
![](../../../../attachment/images-paste/image-20250314170503112.png)
## 未惩戒
![](../../../../attachment/images-paste/image-20250314171647146.png)
![](../../../../attachment/images-paste/image-20250314171706916.png)
![](../../../../attachment/images-paste/image-20250314171733525.png)
![](../../../../attachment/images-paste/image-20250314171737579.png)
![](../../../../attachment/images-paste/image-20250314171757896.png)
![](../../../../attachment/images-paste/image-20250314171833509.png)
@@ -0,0 +1,334 @@
# CPID反查接口新增客户等级字段(联调)
## 需求评审
## 需求备注
## 需求开发
增加当手动修改客户等级时清楚缓存。
# 业务工单与IBS的后端portal交互优化
## 需求评审
## 需求备注
```yaml
##测试验证环境
app.name=CDN Portal
server.port=8181
spring.thymeleaf.mode=HTML
spring.thymeleaf.servlet.content-type=text/html
spring.devtools.livereload.enabled=true
#########################################################
###存储基本配置;
#########################################################
#定义文件存储的方式(本地或者archive子系统)
storage.engine = local
#storage.upload 一定不能配置为C:\\,否则无法使用
storage.upload = /tmp/upload/
#本地存储的参数定义
storage.local.base = /tmp/images/
########################################################
###quartz 配置
########################################################
quartz.enabled=true
# Configure Main Scheduler Properties
org.quartz.scheduler.instanceName = MyScheduler
# Configure Datasources, release host address
org.quartz.dataSource.myDS.driver = ${spring.datasource.driver-class-name}
org.quartz.dataSource.myDS.URL = ${spring.datasource.url}
org.quartz.dataSource.myDS.user = ${spring.datasource.username}
org.quartz.dataSource.myDS.password = ${spring.datasource.password}
org.quartz.dataSource.myDS.maxConnections = 5
org.quartz.dataSource.myDS.validationQuery =select 1
#登陆页面地址
login.html = http://10.26.1.32:8080/
auth.useUsernamePassword = false
auth.permitAll = false
#客户经理姓名和手机号
account.manager.name=徐娜
account.manager.mobile=13401095778
# BBOSS地址
bboss.url = http://117.136.128.15:1102/TransProxy/in/Trans/Receiver
# bboss.url = http://13.115.181.62:1102/bboss_ok
# BBOSS的testFlag
test.flag = 0
#试用工单流量监控触发时间
cron =0 0/10 * * * ?
#读取公告栏文件地址
notice.location = /tmp/cdnportal/notice.txt
#代理配置
server.tomcat.remote_ip_header=x-forwarded-for
server.tomcat.protocol_header=x-forwarded-proto
server.use-forward-headers=true
server.tomcat.internal-proxies=117\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}
#######################################################
#IBS提供的接口地址
#######################################################
#通过接口在portal发起用户注册流程和更新试用起止时间
self.portal.create.enterprise = https://p.cdn.10086.cn/portal/bss/createCP
#通过接口在portal更新企业信息
self.portal.update.enterprise = https://p.cdn.10086.cn/portal/bss/updateTrail
#通过接口在portal检验验证企业账号下试用域名是否已配置生效
self.portal.verification = https://p.cdn.10086.cn/portal/bss/trialDomainConfig
#当BSS平台上业务开通工单反馈“开通成功”时,通知自服务门户IBS进行产品开通
self.portal.businessorder = https://p.cdn.10086.cn/portal/bss/businessorder
#当使用工单提交 流量耗尽或时长耗尽 请求同步
self.portal.flowOrtime.finish = https://p.cdn.10086.cn/portal/bss/trail/end
#######################################################
#大数据提供的接口
#######################################################
#通过接口从大数据获取试用工单中产品已使用的流量
bboss.flow.url=http://39.136.113.82:8081/commercialTrial/get
#新增域名话单配置大数据请求路径
bboss.save.productid.url=/productInfo/save
#删除域名话单配置大数据请求路径
bboss.delete.productid.url=/productInfo/delete
#修改订购关系的计费方式大数据请求路径
bboss.update.productid.url=http://39.136.113.82:8081/productInfo/update
#访问自服务接口是否使用代理模式
portal.cdn.proxy=false
#代理ip
proxy_ip=10.26.1.1
#代理端口
proxy_port=3128
logging.config=file:config/log4j2.xml
server.tomcat.basedir=${user.home}/deployer/tomcat
auth.token.key=cmcdn
auth.token.id=cdnbss
portal.url.login=https://p.cdn.10086.cn/
ibs.url = https://p.cdn.10086.cn/bboss/order
statement.ip=http://39.136.113.82:8081
statistic.flow.export.url=http://39.136.113.82:8081/statistic/bss/flow
bboss.trail.flow.url =http://39.136.113.82:8081/queryFlow/trial
bboss.commercial.flow.url =http://39.136.113.82:8081/queryFlow/commercial
statistic.bw.export.url=http://39.136.113.82:8081/statistic/bss/bandwidth
security.ignored=/**
productId.peek.url=http://39.136.113.82:8081/statistic/bss/bwPeak
statistic.crs.bw.export.url = http://39.136.113.82:8081/statistic/crs/bandwidth
authorization.switch=false
time.effective.duration=5
bss.access.key=XtrqJJ4S
bss.secret.key=26484d7e6735e141653a421e0b877d2a25f0c84d2fddb3753f43d03732d2c472
bss.salt=lpYeKpha
ibs.access.key=Mlvb2EWP
ibs.secret.key=7e671ab145af9c4138d0c65be0e751ab9e062ef61a6e0834dba92454d5d273a2
statistic.crs.flow.export.url = http://39.136.113.82:8081/statistic/crs/flow
statistic.css.flow.url = http://39.136.113.82:8081/statistic/bss/ccs/flow
#ydy.statement.ip=http://39.135.122.120:20045
ydy.statement.ip=http://39.136.113.84:8088
ydy.update.statement.url=/productInfo/updateByDomain
statistic.mul.peak.url = http://39.136.113.82:8081/statistic/bss/mul/aggBwPeak
statistic.mul.detail.peak.url = http://39.136.113.82:8081/statistic/bss/mul/detBwPeak
statistic.mul.flow.url = http://39.136.113.82:8081/statistic/bss/mul/flow
statistic.mul.ec.flow.url = http://39.136.113.82:8081/statistic/bss/mul/ec/flow
statistic.mul.css.flow.url = http://39.136.113.82:8081/statistic/bss/mul/ccs/flow
statistic.mul.bw.url = http://39.136.113.82:8081/statistic/bss/mul/bandwidth
ydy.productId.peek.url = http://39.136.113.84:8088/statistic/bss/bwPeak
ydy.statistic.flow.export.url = http://39.136.113.84:8088/statistic/bss/flow
ydy.statistic.crs.flow.export.url = http://39.136.113.84:8088/statistic/crs/flow
ydy.statistic.bw.export.url = http://39.136.113.84:8088/statistic/bss/bandwidth
ydy.statistic.crs.bw.export.url = http://39.136.113.84:8088/statistic/crs/bandwidth
ydy.statistic.css.flow.url = http://39.136.113.84:8088/statistic/bss/ccs/flow
ydy.statistic.mul.peak.url = http://39.136.113.84:8088/statistic/bss/mul/aggBwPeak
ydy.statistic.mul.detail.peak.url = http://39.136.113.84:8088/statistic/bss/mul/detBwPeak
ydy.statistic.mul.flow.url = http://39.136.113.84:8088/statistic/bss/mul/flow
ydy.statistic.mul.ec.flow.url = http://39.136.113.84:8088/statistic/bss/mul/ec/flow
ydy.statistic.mul.css.flow.url = http://39.136.113.84:8088/statistic/bss/mul/ccs/flow
ydy.statistic.mul.bw.url = http://39.136.113.84:8088/statistic/bss/mul/bandwidth
ibs.service.ip = https://p.cdn.10086.cn/
bboss.service.ip = https://39.135.122.120:14465
bboss.token.ip = https://39.135.122.120:14465
bboss.mock = false
statistic.charge.url = http://39.136.113.82:8081/statistic/crs/bandwidth/bytedance
```
## 需求开发
```
/statistic/bss/mul/ccs/flow
/statistic/bss/bwPeak
/queryFlow/commercial
/queryFlow/trial
```
自测:ECName1743039575
PRODUCTID1743039933
```
BBossAndDssInteractiveServiceImpl.queryProductIdCssFlowResult(String) (com.cmcc.cdn.platform.selfservice.service.impl)
ProductIdInfoServiceImpl.queryProductIdCssFlowResult(String, String, List<String>, List<String>, List<String>, List<String>, List<String>, ...) (com.cmcc.cdn.platform.selfservice.service.impl)
ProductIdInfoServiceImpl.getProductIdProvinceTotalData(List<String>, Integer, Integer, JSONObject, List<String>, String, List<String>, ...) (com.cmcc.cdn.platform.selfservice.service.impl)
ProductIdInfoServiceImpl.handleDetailProductIdTask(List<String>, Integer, Integer, List<String>, List<String>, JSONObject, Boolean, ...) (com.cmcc.cdn.platform.selfservice.service.impl)
ProductIdInfoServiceImpl.getProductIdProvinceDetailData(List<String>, Integer, Integer, JSONObject, List<String>, String, List<String>, ...) (com.cmcc.cdn.platform.selfservice.service.impl)
ProductIdInfoServiceImpl.handleDetailProductIdTask(List<String>, Integer, Integer, List<String>, List<String>, JSONObject, Boolean, ...) (com.cmcc.cdn.platform.selfservice.service.impl)
ProductIdChargeInfoServiceImpl.getProductIdChargeInfoDataCssResult(String, String, List<String>, Map, List<String>, Class<T>, String) (com.cmcc.cdn.platform.selfservice.service.impl)
ProductIdChargeInfoServiceImpl.queryProductIdDimensionsRequest(String, String, List<String>, JSONObject, String) (com.cmcc.cdn.platform.selfservice.service.impl)
ProductIdChargeInfoServiceImpl.queryStatisticBssCssFlow(String, String, String, List<String>, Integer, Integer) (com.cmcc.cdn.platform.selfservice.service.impl)
ProductIdChargeInfoServiceImpl.handleCpProvinceDimensionsCssRequest(String, String, List<String>, List<String>, Map, Map<String, List<String>>, String) (com.cmcc.cdn.platform.selfservice.service.impl)
ProductIdChargeInfoServiceImpl.handleProvinceDimensionsCssRequest(String, String, JSONObject, String) (com.cmcc.cdn.platform.selfservice.service.impl)
```
5497558138880
### 商用流量
```
Method: post
URL: http://172.21.16.50:8090/queryFlow/commercial
Request Body: {"productIds":["PRODUCTID1743039933"]}
```
### 话单带宽
```
Method: get
URL: http://172.21.16.50:8090/statistic/bss/bwPeak?startTime=2025-04-03T00%3A00%3A00%2B08%3A00&endTime=2025-04-03T07%3A50%3A00%2B08%3A00&productIds=PRODUCTID1743039933&provinces=all&dimensions=productId%2Ctime&source=bw&crsDataSource=false&distributionPlanes=all&flowTypes=all&sources=1&ecProvinces=000
Request Body: null
```
### 查询计费话单多订购聚合95峰值
```
Method: post
URL: http://172.21.16.50:8090/statistic/bss/mul/aggBwPeak
Request Body: {"dimensions":["time"],"distributionPlanes":["all"],"endTime":"2025-04-02T23:59:00+08:00","flowTypes":["all"],"metric":"flow","prodMapToEcProv":{"PRODUCTID1743039933":"000"},"productIds":["PRODUCTID1743039933"],"provinces":["all"],"sources":["1"],"startTime":"2025-03-27T00:00:00+08:00"}
```
### 查询计费话单多订购带宽
```
Method: post
URL: http://172.21.16.50:8090/statistic/bss/mul/bandwidth
Request Body: {"dimensions":["productId","time"],"distributionPlanes":["all"],"endTime":"2025-04-02T23:59:00+08:00","flowTypes":["all"],"prodMapToEcProv":{"PRODUCTID1743039933":"000"},"productIds":["PRODUCTID1743039933"],"provinces":["all"],"sources":["1"],"startTime":"2025-03-27T00:00:00+08:00"}
```
### 查询计费话单多订购明细95峰值
```
Method: post
URL: http://172.21.16.50:8090/statistic/bss/mul/detBwPeak
Request Body: {"dimensions":["productId","time"],"distributionPlanes":["all"],"endTime":"2025-04-02T23:59:00+08:00","flowTypes":["all"],"metric":"flow","prodMapToEcProv":{"PRODUCTID1743039933":"000"},"productIds":["PRODUCTID1743039933"],"provinces":["all"],"sources":["1"],"startTime":"2025-03-27T00:00:00+08:00"}
```
### 查询计费话单多订购流量
```
Method: post
URL: http://172.21.16.50:8090/statistic/bss/mul/flow
Request Body: {"dimensions":["productId","province"],"distributionPlanes":["all"],"endTime":"2025-04-02T23:59:00+08:00","flowTypes":["all"],"prodMapToEcProv":{"PRODUCTID1743039933":"000"},"productIds":["PRODUCTID1743039933"],"provinces":["all"],"sources":["1"],"startTime":"2025-03-27T00:00:00+08:00"}
```
### 查询边缘和内容中心计费话单总和
```
Method: post
URL: http://172.21.16.50:8090/statistic/bss/mul/ec/flow
Request Body: {"dimensions":["productId","province"],"distributionPlanes":["all"],"endTime":"2025-04-02T23:59:00+08:00","flowTypes":["all"],"prodMapToEcProv":{"PRODUCTID1743039933":"000"},"productIds":["PRODUCTID1743039933"],"provinces":["all"],"sources":["1"],"startTime":"2025-03-27T00:00:00+08:00"}
```
### 华为内容中心数据查询接口
```
Method: post
URL: http://172.21.16.50:8090/statistic/bss/mul/ccs/flow
Request Body: {"dimensions":["productId","province"],"distributionPlanes":["all"],"endTime":"2025-04-02T23:59:00+08:00","flowTypes":["all"],"prodMapToEcProv":{"PRODUCTID1743039933":"000"},"productIds":["PRODUCTID1743039933"],"provinces":["all"],"sources":["1"],"startTime":"2025-03-27T00:00:00+08:00"}
```
# 企业客户-域名列表-冲突域名-信安附件展示优化
## 需求评审
针对冲突域名:在企业客户的域名列表和直播控制台的域名详情页,用户下载已上传的附件时附件中 A 列显示“冲突域名”,S 列显示“真实域名”。
## 需求备注
## 需求开发
【金山文档 | WPS云文档】 企业-视图跳转
https://kdocs.cn/l/caFIsEA7q3DD
### 直播控制台
后端处理信安接口为 ID。
### 点播控制台
后端处理信安接口为 ID。
/configManage/detail/display?domainId=(入参字段改为 domainId
/configManage/update/domain?domainId=(入参字段改为 domainId
### 企业客户跳转
后端处理信安接口为 ID。
/selfService/domain/ticket/display?domainId=(入参字段改为 domainId
/selfService/domain/ticket/getDomain?domainId=(入参字段改为 domainId
### 信安信息下载
/configManage/getSecurity?domainId=(入参字段改为 domainId
# 用例评审
## 企业客户-域名列表-冲突域名-信安附件展示优化
确认测试用例的意思是冲突和真实在一个企业下。
## 业务工单与IBS的后端portal交互优化
需要大数据确认前提是否正常。
# 冒烟自测