You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
10 KiB
113 lines
10 KiB
# -*- coding: utf-8 -*-
|
|
"""F-01 修正:推送/查重规则 4 份 .bru 的 pushConfig/wizardConfig 入参文档
|
|
由「整体 JSON 串」改为实现的嵌套索引属性路径绑定(e2e 已验证的契约)。
|
|
铁律:结构听源码(Spring indexed property binding);表述对齐 e2e 实证。
|
|
"""
|
|
import io, sys
|
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
|
|
|
BASE = r"D:\code\crm-api-docs\A7 后台管理\业务规则\商机规则"
|
|
|
|
def patch(path, reps):
|
|
t = open(path, encoding='utf-8').read()
|
|
for old, new in reps:
|
|
assert old in t, f"ANCHOR MISSING in {path}: {old[:60]!r}"
|
|
t = t.replace(old, new, 1)
|
|
open(path, 'w', encoding='utf-8', newline='\n').write(t)
|
|
print("patched:", path)
|
|
|
|
BIND_NOTE = " pushConfig 采用 Spring 嵌套索引属性路径表单字段提交(不支持整体 JSON 串提交);步骤结构总览见详情接口回显。\n"
|
|
|
|
# ---------- 方案推送规则 · 保存草稿 ----------
|
|
patch(BASE + r"\方案推送规则\保存推送规则草稿.bru", [
|
|
(''' pushConfig: {"basic":{"pushNodeName":"方案卡确认","schemeTemplateId":"747831302652166144"},"fieldValidations":[],"fieldMappings":[],"projectCreation":{"createMode":"auto","nameRule":"{客户名称}-{方案名称}"}}''',
|
|
''' pushConfig.basic.pushNodeName: 方案卡确认
|
|
pushConfig.basic.schemeTemplateId: 747831302652166144
|
|
pushConfig.projectCreation.createMode: auto
|
|
pushConfig.projectCreation.nameRule: {客户名称}-{方案名称}'''),
|
|
(''' | pushConfig | string(json) | 否 | - | 推送配置 4 步骤整体 JSON(结构见详情接口) |''',
|
|
''' | pushConfig.basic.pushNodeName | string | 否 | - | 步骤①推送节点名称(发布必配) |
|
|
| pushConfig.basic.schemeTemplateId | string | 发布时必配 | - | 步骤①方案卡模板版本行 ID(锁定版本;版本行不存在发布被拒 64030) |
|
|
| pushConfig.fieldValidations[n].* | string | 否 | - | 步骤②字段校验行:fieldName/fieldSource/fieldType/validateRule/failAction(按 [n] 索引) |
|
|
| pushConfig.fieldMappings[n].* | string | 否 | - | 步骤③字段映射行:fieldName/targetField/pushMode(按 [n] 索引) |
|
|
| pushConfig.projectCreation.createMode | string | 否 | - | 步骤④创建方式:auto/interactive/existing(值域外 64030) |
|
|
| pushConfig.projectCreation.dedupRuleId | string | 否 | - | 步骤④项目重复规则版本行 ID(须为发布中版本,草稿不可被正式引用 64030) |
|
|
| pushConfig.projectCreation.nameRule | string | 否 | - | 步骤④项目名称规则 |'''),
|
|
(''' ruleName=投标阶段方案推送&applyScope=1&isDefault=0&ruleDesc=全部商机默认推送规则&pushConfig=%7B...%7D''',
|
|
''' ruleName=投标阶段方案推送&applyScope=1&isDefault=0&ruleDesc=全部商机默认推送规则&pushConfig.basic.pushNodeName=方案卡确认&pushConfig.basic.schemeTemplateId=747831302652166144&pushConfig.projectCreation.createMode=auto'''),
|
|
(''' 保存草稿(新建/原位编辑草稿/从发布中停用生成新草稿;推送配置整体保存)。''',
|
|
''' 保存草稿(新建/原位编辑草稿/从发布中停用生成新草稿;推送配置整体保存)。
|
|
''' + BIND_NOTE),
|
|
])
|
|
|
|
# ---------- 方案推送规则 · 发布 ----------
|
|
patch(BASE + r"\方案推送规则\发布推送规则.bru", [
|
|
(''' pushConfig: {"basic":{"pushNodeName":"方案卡确认","schemeTemplateId":"747831302652166144"},"fieldValidations":[],"fieldMappings":[],"projectCreation":{"createMode":"auto","dedupRuleId":"8101","nameRule":"{客户名称}-{方案名称}"}}''',
|
|
''' pushConfig.basic.pushNodeName: 方案卡确认
|
|
pushConfig.basic.schemeTemplateId: 747831302652166144
|
|
pushConfig.projectCreation.createMode: auto
|
|
pushConfig.projectCreation.nameRule: {客户名称}-{方案名称}'''),
|
|
(''' | pushConfig | string(json) | 是 | - | 推送配置 4 步骤整体 JSON(发布校验步骤①必配+引用有效) |''',
|
|
''' | pushConfig.basic.pushNodeName | string | 是 | - | 步骤①推送节点名称(未配 64030) |
|
|
| pushConfig.basic.schemeTemplateId | string | 是 | - | 步骤①方案卡模板版本行 ID(锁定版本;不存在 64030) |
|
|
| pushConfig.fieldValidations[n].* | string | 否 | - | 步骤②字段校验行:fieldName/fieldSource/fieldType/validateRule/failAction(按 [n] 索引) |
|
|
| pushConfig.fieldMappings[n].* | string | 否 | - | 步骤③字段映射行:fieldName/targetField/pushMode(按 [n] 索引) |
|
|
| pushConfig.projectCreation.createMode | string | 否 | - | 步骤④创建方式:auto/interactive/existing(值域外 64030) |
|
|
| pushConfig.projectCreation.dedupRuleId | string | 否 | - | 步骤④项目重复规则版本行 ID(须为发布中版本,草稿不可被正式引用 64030) |
|
|
| pushConfig.projectCreation.nameRule | string | 否 | - | 步骤④项目名称规则 |'''),
|
|
(''' id=8001&ruleName=投标阶段方案推送&applyScope=1&isDefault=1&pushConfig=%7B...%7D''',
|
|
''' id=8001&ruleName=投标阶段方案推送&applyScope=1&isDefault=1&pushConfig.basic.pushNodeName=方案卡确认&pushConfig.basic.schemeTemplateId=747831302652166144&pushConfig.projectCreation.createMode=auto'''),
|
|
(''' 保存并发布(推送配置完整+方案卡模板引用有效+同名称发布中唯一;原发布中转停用)。''',
|
|
''' 保存并发布(推送配置完整+方案卡模板引用有效+同名称发布中唯一;原发布中转停用)。
|
|
''' + BIND_NOTE),
|
|
])
|
|
|
|
DEDUP_BIND_NOTE = " wizardConfig 采用 Spring 嵌套索引属性路径表单字段提交(不支持整体 JSON 串提交);步骤结构总览见详情接口回显。\n"
|
|
|
|
# ---------- 项目查重规则 · 保存草稿 ----------
|
|
patch(BASE + r"\项目查重规则\保存查重规则草稿.bru", [
|
|
(''' wizardConfig: {"triggerScenarios":["OPP_TO_PROJECT"],"projectStatuses":["进行中"],"searchConditions":[{"field":"项目名称","source":"商机","matchMode":"SIMILAR","threshold":80}],"analysisRules":[],"strategies":{"intercept":["明确重复"],"confirm":["疑似重复"],"normal":["无明显冲突"]}}''',
|
|
''' wizardConfig.triggerScenarios[0]: OPP_TO_PROJECT
|
|
wizardConfig.searchConditions[0].field: 项目名称
|
|
wizardConfig.searchConditions[0].source: 商机
|
|
wizardConfig.searchConditions[0].matchMode: SIMILAR
|
|
wizardConfig.searchConditions[0].threshold: 80
|
|
wizardConfig.strategies.intercept[0]: 明确重复'''),
|
|
(''' | wizardConfig | string(json) | 否 | - | 4 步骤向导配置整体 JSON(结构见详情接口) |''',
|
|
''' | wizardConfig.triggerScenarios[n] | string | 否 | - | 步骤①触发场景多选:OPP_TO_PROJECT/DIRECT_CREATE |
|
|
| wizardConfig.projectStatuses[n] | string | 否 | - | 步骤①参与检测项目状态多选 |
|
|
| wizardConfig.searchConditions[n].* | string | 否 | - | 步骤②关联项目检索行:field/source/matchMode(EXACT|SIMILAR)/threshold(按 [n] 索引) |
|
|
| wizardConfig.analysisRules[n].* | string | 否 | - | 步骤③异常关系分析行:seq/expression(嵌套 JSON 串)/conclusion(按 [n] 索引) |
|
|
| wizardConfig.strategies.{intercept|confirm|normal}[n] | string | 否 | - | 步骤④处理策略适用的研判结论列表 |'''),
|
|
(''' ruleName=全商机默认查重&applyScopeType=1&isDefault=1&ruleDesc=全部商机默认查重规则&wizardConfig=%7B...%7D''',
|
|
''' ruleName=全商机默认查重&applyScopeType=1&isDefault=1&ruleDesc=全部商机默认查重规则&wizardConfig.triggerScenarios[0]=OPP_TO_PROJECT&wizardConfig.searchConditions[0].field=项目名称&wizardConfig.searchConditions[0].matchMode=SIMILAR'''),
|
|
(''' 保存草稿(新建/原位编辑草稿/从发布中停用生成新草稿;向导配置整体保存)。''',
|
|
''' 保存草稿(新建/原位编辑草稿/从发布中停用生成新草稿;向导配置整体保存)。
|
|
''' + DEDUP_BIND_NOTE),
|
|
])
|
|
|
|
# ---------- 项目查重规则 · 发布 ----------
|
|
patch(BASE + r"\项目查重规则\发布查重规则.bru", [
|
|
(''' wizardConfig: {"triggerScenarios":["OPP_TO_PROJECT","DIRECT_CREATE"],"projectStatuses":["进行中","已中止暂停","已关闭","已结项"],"searchConditions":[{"field":"项目名称","source":"商机","matchMode":"SIMILAR","threshold":80},{"field":"甲方","source":"客户","matchMode":"EXACT","threshold":null}],"analysisRules":[{"seq":1,"expression":"{\\"op\\":\\"AND\\",\\"children\\":[]}","conclusion":"明确重复"}],"strategies":{"intercept":["明确重复"],"confirm":["疑似重复","同商机多客户"],"normal":["一般风险标签提醒","无明显冲突"]}}''',
|
|
''' wizardConfig.triggerScenarios[0]: OPP_TO_PROJECT
|
|
wizardConfig.projectStatuses[0]: 进行中
|
|
wizardConfig.searchConditions[0].field: 项目名称
|
|
wizardConfig.searchConditions[0].matchMode: SIMILAR
|
|
wizardConfig.searchConditions[0].threshold: 80
|
|
wizardConfig.analysisRules[0].seq: 1
|
|
wizardConfig.analysisRules[0].conclusion: 明确重复
|
|
wizardConfig.strategies.intercept[0]: 明确重复'''),
|
|
(''' | wizardConfig | string(json) | 是 | - | 4 步骤向导配置整体 JSON(结构见详情接口) |''',
|
|
''' | wizardConfig.triggerScenarios[n] | string | 否 | - | 步骤①触发场景多选:OPP_TO_PROJECT/DIRECT_CREATE |
|
|
| wizardConfig.projectStatuses[n] | string | 否 | - | 步骤①参与检测项目状态多选 |
|
|
| wizardConfig.searchConditions[n].* | string | 否 | - | 步骤②关联项目检索行:field/source/matchMode(EXACT|SIMILAR)/threshold(按 [n] 索引) |
|
|
| wizardConfig.analysisRules[n].* | string | 否 | - | 步骤③异常关系分析行:seq/expression(嵌套 JSON 串)/conclusion(按 [n] 索引) |
|
|
| wizardConfig.strategies.{intercept|confirm|normal}[n] | string | 否 | - | 步骤④处理策略适用的研判结论列表 |'''),
|
|
(''' id=8101&ruleName=全商机默认查重&applyScopeType=1&isDefault=1&wizardConfig=%7B...%7D''',
|
|
''' id=8101&ruleName=全商机默认查重&applyScopeType=1&isDefault=1&wizardConfig.triggerScenarios[0]=OPP_TO_PROJECT&wizardConfig.searchConditions[0].field=项目名称&wizardConfig.searchConditions[0].matchMode=SIMILAR'''),
|
|
(''' 保存并发布(原发布中转停用、仅全部商机档默认顶替)。''',
|
|
''' 保存并发布(原发布中转停用、仅全部商机档默认顶替)。
|
|
''' + DEDUP_BIND_NOTE),
|
|
])
|
|
|
|
print("ALL 4 FILES PATCHED")
|
|
|