建立可移交的 AI 软件交付规划文档仓库。
纳入截至 2026-10-13 会议回写后的产品基线与会议图源。
No files matched your search
@@ -0,0 +1,3 @@
|
||||
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>AI 软件交付平台 · G01–G05 会议图集</title><style>
|
||||
*{box-sizing:border-box}body{margin:0;background:#f2f5fa;color:#17233a;font-family:"Microsoft YaHei",Arial,sans-serif;font-size:16px}header{background:#fff;padding:20px 28px;border-bottom:1px solid #dce3ed}header p{margin:4px 0;color:#526176}nav{display:flex;gap:8px;flex-wrap:wrap;margin-top:16px}button{font:inherit;border:1px solid #cbd5e1;border-radius:6px;background:#fff;padding:10px 14px;color:#17233a;cursor:pointer}button[aria-pressed=true]{background:#253f6b;color:#fff;border-color:#253f6b}main{padding:24px 28px}h1{font-size:28px;margin:0 0 12px}h2{font-size:19px;margin:0 0 12px}.lead{line-height:1.8;margin:0 0 10px}.links{font-size:14px;line-height:1.8}a{color:#245b98}article{background:white;border-radius:8px;padding:20px;margin:20px 0;border:1px solid #dce3ed}.diagram{overflow:auto}.diagram>svg{width:100%;height:auto;min-width:1000px;display:block}footer{color:#526176;font-size:14px;line-height:1.8;margin-top:20px}@media(max-width:700px){header,main{padding:16px}article{padding:12px}h1{font-size:24px}}@media print{nav,header,.links{display:none}body,main{background:white;padding:0}section[hidden]{display:block!important}article{break-inside:avoid;page-break-after:always;border:0;padding:0}.diagram{overflow:visible}.diagram>svg{min-width:0}footer{display:none}}
|
||||
</style></head><body><header><strong>AI 软件交付与持续服务平台 · 会议图集</strong><p>G01–G05 · 2026-10-12 · 业务基线 0.14 · 图集 0.17</p><nav aria-label="选择图表"><button type="button" data-index="0" aria-pressed="true">G01 产品业务全景</button><button type="button" data-index="1" aria-pressed="false">G02 领域概念关系</button><button type="button" data-index="2" aria-pressed="false">G03 购买与开通</button><button type="button" data-index="3" aria-pressed="false">G04 定制工单处理</button><button type="button" data-index="4" aria-pressed="false">G05 收费与权益</button></nav></header><main><section id="panel0" ><h1>G01 产品业务全景</h1><p class="lead">我们销售可稳定运行的应用技术封装,以及 AI 和团队的定制开发能力;基础服务保障交付和成本覆盖。</p><p class="links"><a href="G01-产品业务全景.md">阅读 Markdown 与编辑源</a> · <a href="G01-产品业务全景.svg">产品业务全景 SVG</a> · <a href="G01-产品业务全景.png">PNG</a></p><article><h2>产品业务全景</h2><div class="diagram"><svg xmlns="http://www.w3.org/2000/svg" width="1657" height="1082" viewBox="0 0 1657 1082" role="img" aria-labelledby="G01-产品业务全景Title G01-产品业务全景Desc"><title id="G01-产品业务全景Title">G01 产品业务全景 · 产品业务全景</title><desc id="G01-产品业务全景Desc">我们销售可稳定运行的应用技术封装,以及 AI 和团队的定制开发能力;基础服务保障交付和成本覆盖。;2026-10-12,业务基线 0.14,图集版本 0.17</desc><rect width="100%" height="100%" fill="#fff"/><text x="32" y="42" font-family="Microsoft YaHei,Arial,sans-serif" font-size="28" font-weight="600" fill="#17233a">G01 产品业务全景</text><text x="32" y="79" font-family="Microsoft YaHei,Arial,sans-serif" font-size="18" fill="#526176">2026-10-12 · 业务基线 0.14 · 图集 0.17 · 主图 · 技术选型未定</text><g transform="translate(32,124)"><svg id="diagram01x0" width="1592.15625" xmlns="http://www.w3.org/2000/svg" class="flowchart" height="910" viewBox="0 -1 1592.15625 910" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#diagram01x0{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;fill:#17233a;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram01x0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram01x0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram01x0 .error-icon{fill:#ffffff;}#diagram01x0 .error-text{fill:#000000;stroke:#000000;}#diagram01x0 .edge-thickness-normal{stroke-width:1px;}#diagram01x0 .edge-thickness-thick{stroke-width:3.5px;}#diagram01x0 .edge-pattern-solid{stroke-dasharray:0;}#diagram01x0 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram01x0 .edge-pattern-dashed{stroke-dasharray:3;}#diagram01x0 .edge-pattern-dotted{stroke-dasharray:2;}#diagram01x0 .marker{fill:#60718a;stroke:#60718a;}#diagram01x0 .marker.cross{stroke:#60718a;}#diagram01x0 svg{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;}#diagram01x0 p{margin:0;}#diagram01x0 .label{font-family:Microsoft YaHei,Arial,sans-serif;color:#17233a;}#diagram01x0 .cluster-label text{fill:#000000;}#diagram01x0 .cluster-label span{color:#000000;}#diagram01x0 .cluster-label span p{background-color:transparent;}#diagram01x0 .label text,#diagram01x0 span{fill:#17233a;color:#17233a;}#diagram01x0 .node rect,#diagram01x0 .node circle,#diagram01x0 .node ellipse,#diagram01x0 .node polygon,#diagram01x0 .node path{fill:#eef5ff;stroke:#8198bb;stroke-width:1px;}#diagram01x0 .rough-node .label text,#diagram01x0 .node .label text,#diagram01x0 .image-shape .label,#diagram01x0 .icon-shape .label{text-anchor:middle;}#diagram01x0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram01x0 .rough-node .label,#diagram01x0 .node .label,#diagram01x0 .image-shape .label,#diagram01x0 .icon-shape .label{text-align:center;}#diagram01x0 .node.clickable{cursor:pointer;}#diagram01x0 .root .anchor path{fill:#60718a!important;stroke-width:0;stroke:#60718a;}#diagram01x0 .arrowheadPath{fill:#0b0b0b;}#diagram01x0 .edgePath .path{stroke:#60718a;stroke-width:2.0px;}#diagram01x0 .flowchart-link{stroke:#60718a;fill:none;}#diagram01x0 .edgeLabel{background-color:#f3f8f6;text-align:center;}#diagram01x0 .edgeLabel p{background-color:#f3f8f6;}#diagram01x0 .edgeLabel rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram01x0 .labelBkg{background-color:rgba(243, 248, 246, 0.5);}#diagram01x0 .cluster rect{fill:#f8fafc;stroke:#cbd5e1;stroke-width:1px;}#diagram01x0 .cluster text{fill:#000000;}#diagram01x0 .cluster span{color:#000000;}#diagram01x0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;paddiLine truncated
|
||||
@@ -0,0 +1,69 @@
|
||||
# G01 产品业务全景
|
||||
|
||||
2026-10-13 · 业务基线 0.15 · 图集版本 0.18。按 D085–D088 修订文字。标记“后续”的能力不代表当前交付承诺。投影用 SVG 尚未按本次文字重绘。
|
||||
|
||||
**我们销售可稳定运行的应用技术封装,以及 AI 和团队的定制开发能力;基础服务保障交付和成本覆盖。**
|
||||
|
||||

|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
product["AI 软件交付与持续服务平台"]
|
||||
subgraph audience["客户与入口"]
|
||||
direction LR
|
||||
familiar["首期:熟客普通账户
|
||||
中介也按普通客户使用"]
|
||||
publicEntry["长期:公开服务网站
|
||||
案例、应用目录、SEO、广告"]
|
||||
familiar ~~~ publicEntry
|
||||
end
|
||||
subgraph value["核心销售与配套服务"]
|
||||
direction LR
|
||||
packaging["经验证的应用技术封装
|
||||
自有模板 / 开源应用"]
|
||||
customization["核心价值:二次开发定制
|
||||
有限自动 AI / 人工团队使用 AI"]
|
||||
annual["年付开发与运行套餐
|
||||
资源、域名、邮箱可按需选配"]
|
||||
apiService["目标能力:公共 API 服务
|
||||
独立订阅;接入版本待定"]
|
||||
packaging ~~~ customization ~~~ annual ~~~ apiService
|
||||
end
|
||||
subgraph journey["客户使用路径"]
|
||||
direction LR
|
||||
choose["选应用并配置项目
|
||||
普通向导 / 高级组合"]
|
||||
operate["查看部署与管理应用
|
||||
受保护预览 / 正式域名"]
|
||||
request["工单提交明确改动需求
|
||||
文字和附件;自动或人工"]
|
||||
deliver["核验后更新运行版本
|
||||
回执、版本记录、持续维护"]
|
||||
choose --> operate --> request --> deliver
|
||||
end
|
||||
subgraph support["统一产品的内部支撑能力"]
|
||||
direction LR
|
||||
catalog["应用预设与资源绑定
|
||||
应用指功能,如邮箱应用
|
||||
初级不选组件;域名资源另购"]
|
||||
execution["每次工单创建一个版本
|
||||
恢复就用这个版本"]
|
||||
business["账户、年付订单、积分与权益
|
||||
供应商账号池、客服 / TG 沟通"]
|
||||
catalog ~~~ execution ~~~ business
|
||||
end
|
||||
audience --> product --> value --> journey --> support
|
||||
classDef future fill:#f4f4f5,stroke:#71717a,stroke-dasharray:5 4;
|
||||
class apiService future;
|
||||
```
|
||||
|
||||
读图时说明:
|
||||
|
||||
- 各框表示业务能力,不代表独立微服务、数据库或已经完成的功能。
|
||||
- 应用目录可以跨行业扩展,但必须先接入、调通并验证。金融机构展示官网、纯前端站点、Web+worker、仅邮箱是代表场景;并非所有场景首期都自动化。
|
||||
- 应用指功能,邮箱应用是例子。初级版本不让客户选择 Web、API、worker。域名是需要购买的资源。高级版本的组件选择以后再做。
|
||||
- 不单独做任务执行、自动能力与人工接续这一层。每一次工单创建一个版本,恢复使用该版本。自动路径先 AI 验收,失败达到 x 次再转人工,x 未定。
|
||||
- 工单承载改动任务和系统回执。沟通与价格协商通过客服或 TG,人工工单额外确认金额。计费按客户分模式,暂时只记用户报价模式和用户自由模式,见 G05。
|
||||
- 标准开源应用部署不额外收开发费;资源等基础费用仍须覆盖成本。定制能力是核心销售,不能把平台理解成单纯出售 VPS。
|
||||
|
||||
依据:[01 产品定位](../01-立项与产品定位.md)、[02 业务流程](../02-业务流程与产品需求.md)、[05 商业模式](../05-商业模式与成本指标.md)。[返回图集](README.md)。
|
||||
@@ -0,0 +1,47 @@
|
||||
flowchart TB
|
||||
product["AI 软件交付与持续服务平台"]
|
||||
subgraph audience["客户与入口"]
|
||||
direction LR
|
||||
familiar["首期:熟客普通账户
|
||||
中介也按普通客户使用"]
|
||||
publicEntry["长期:公开服务网站
|
||||
案例、应用目录、SEO、广告"]
|
||||
familiar ~~~ publicEntry
|
||||
end
|
||||
subgraph value["核心销售与配套服务"]
|
||||
direction LR
|
||||
packaging["经验证的应用技术封装
|
||||
自有模板 / 开源应用"]
|
||||
customization["核心价值:二次开发定制
|
||||
有限自动 AI / 人工团队使用 AI"]
|
||||
annual["年付开发与运行套餐
|
||||
资源、域名、邮箱可按需选配"]
|
||||
apiService["目标能力:公共 API 服务
|
||||
独立订阅;接入版本待定"]
|
||||
packaging ~~~ customization ~~~ annual ~~~ apiService
|
||||
end
|
||||
subgraph journey["客户使用路径"]
|
||||
direction LR
|
||||
choose["选应用并配置项目
|
||||
普通向导 / 高级组合"]
|
||||
operate["查看部署与管理应用
|
||||
受保护预览 / 正式域名"]
|
||||
request["工单提交明确改动需求
|
||||
文字和附件;自动或人工"]
|
||||
deliver["核验后更新运行版本
|
||||
回执、版本记录、持续维护"]
|
||||
choose --> operate --> request --> deliver
|
||||
end
|
||||
subgraph support["统一产品的内部支撑能力"]
|
||||
direction LR
|
||||
catalog["应用预设与资源绑定
|
||||
Web、API、worker 等组件"]
|
||||
execution["任务执行、版本与恢复
|
||||
自动能力与人工接续"]
|
||||
business["账户、年付订单、积分与权益
|
||||
供应商账号池、客服 / TG 沟通"]
|
||||
catalog ~~~ execution ~~~ business
|
||||
end
|
||||
audience --> product --> value --> journey --> support
|
||||
classDef future fill:#f4f4f5,stroke:#71717a,stroke-dasharray:5 4;
|
||||
class apiService future;
|
||||
|
After Width: | Height: | Size: 251 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1657" height="1082" viewBox="0 0 1657 1082" role="img" aria-labelledby="G01-产品业务全景Title G01-产品业务全景Desc"><title id="G01-产品业务全景Title">G01 产品业务全景 · 产品业务全景</title><desc id="G01-产品业务全景Desc">我们销售可稳定运行的应用技术封装,以及 AI 和团队的定制开发能力;基础服务保障交付和成本覆盖。;2026-10-12,业务基线 0.14,图集版本 0.17</desc><rect width="100%" height="100%" fill="#fff"/><text x="32" y="42" font-family="Microsoft YaHei,Arial,sans-serif" font-size="28" font-weight="600" fill="#17233a">G01 产品业务全景</text><text x="32" y="79" font-family="Microsoft YaHei,Arial,sans-serif" font-size="18" fill="#526176">2026-10-12 · 业务基线 0.14 · 图集 0.17 · 主图 · 技术选型未定</text><g transform="translate(32,124)"><svg id="diagram01x0" width="1592.15625" xmlns="http://www.w3.org/2000/svg" class="flowchart" height="910" viewBox="0 -1 1592.15625 910" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#diagram01x0{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;fill:#17233a;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram01x0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram01x0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram01x0 .error-icon{fill:#ffffff;}#diagram01x0 .error-text{fill:#000000;stroke:#000000;}#diagram01x0 .edge-thickness-normal{stroke-width:1px;}#diagram01x0 .edge-thickness-thick{stroke-width:3.5px;}#diagram01x0 .edge-pattern-solid{stroke-dasharray:0;}#diagram01x0 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram01x0 .edge-pattern-dashed{stroke-dasharray:3;}#diagram01x0 .edge-pattern-dotted{stroke-dasharray:2;}#diagram01x0 .marker{fill:#60718a;stroke:#60718a;}#diagram01x0 .marker.cross{stroke:#60718a;}#diagram01x0 svg{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;}#diagram01x0 p{margin:0;}#diagram01x0 .label{font-family:Microsoft YaHei,Arial,sans-serif;color:#17233a;}#diagram01x0 .cluster-label text{fill:#000000;}#diagram01x0 .cluster-label span{color:#000000;}#diagram01x0 .cluster-label span p{background-color:transparent;}#diagram01x0 .label text,#diagram01x0 span{fill:#17233a;color:#17233a;}#diagram01x0 .node rect,#diagram01x0 .node circle,#diagram01x0 .node ellipse,#diagram01x0 .node polygon,#diagram01x0 .node path{fill:#eef5ff;stroke:#8198bb;stroke-width:1px;}#diagram01x0 .rough-node .label text,#diagram01x0 .node .label text,#diagram01x0 .image-shape .label,#diagram01x0 .icon-shape .label{text-anchor:middle;}#diagram01x0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram01x0 .rough-node .label,#diagram01x0 .node .label,#diagram01x0 .image-shape .label,#diagram01x0 .icon-shape .label{text-align:center;}#diagram01x0 .node.clickable{cursor:pointer;}#diagram01x0 .root .anchor path{fill:#60718a!important;stroke-width:0;stroke:#60718a;}#diagram01x0 .arrowheadPath{fill:#0b0b0b;}#diagram01x0 .edgePath .path{stroke:#60718a;stroke-width:2.0px;}#diagram01x0 .flowchart-link{stroke:#60718a;fill:none;}#diagram01x0 .edgeLabel{background-color:#f3f8f6;text-align:center;}#diagram01x0 .edgeLabel p{background-color:#f3f8f6;}#diagram01x0 .edgeLabel rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram01x0 .labelBkg{background-color:rgba(243, 248, 246, 0.5);}#diagram01x0 .cluster rect{fill:#f8fafc;stroke:#cbd5e1;stroke-width:1px;}#diagram01x0 .cluster text{fill:#000000;}#diagram01x0 .cluster span{color:#000000;}#diagram01x0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:Microsoft YaHei,Arial,sans-serif;font-size:12px;background:#ffffff;border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#diagram01x0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#17233a;}#diagram01x0 rect.text{fill:none;stroke-width:0;}#diagram01x0 .icon-shape,#diagram01x0 .image-shape{background-color:#f3f8f6;text-align:center;}#diagram01x0 .icon-shape p,#diagram01x0 .image-shape p{background-color:#f3f8f6;padding:2px;}#diagram01x0 .icon-shape rect,#diagram01x0 .image-shape rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram01x0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram01x0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram01x0 :root{--mermaid-font-family:Microsoft YaHei,Arial,sans-serif;}#diagram01x0 .future rect{fill:#f4f4f5!important;stroke:#71717a!important;stroke-dasharray:5 4!important;}#diagram01x0 .future polygon{fill:#f4f4f5!important;stroke:#71717a!important;stroke-dasharray:5 4!important;}#diagram01x0 .future ellipse{fill:#f4f4f5!importLine truncated
|
||||
|
After Width: | Height: | Size: 27 KiB |
@@ -0,0 +1,18 @@
|
||||
flowchart TB
|
||||
scope["项目:工单的业务范围"]
|
||||
workOrder["工单属于一个项目
|
||||
可修改该项目多个 APP"]
|
||||
version["项目发布组合
|
||||
关联涉及 APP 的代码、产物、配置版本"]
|
||||
software["APP:完整软件实例"]
|
||||
runtime["运行组件与配置档位"]
|
||||
resources["明确归属的数据库 / 存储
|
||||
可被多个组件显式引用"]
|
||||
items["购买项:独立计费对象
|
||||
组件资源分别计费;共享资源只计一份"]
|
||||
scope --> workOrder --> version
|
||||
version -->|"记录版本"| software
|
||||
software -->|"由组件运行"| runtime
|
||||
runtime -->|"显式引用"| resources
|
||||
runtime -->|"配置费用"| items
|
||||
resources -->|"对应购买项"| items
|
||||
|
After Width: | Height: | Size: 137 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1298" viewBox="0 0 1000 1298" role="img" aria-labelledby="G02-工单与购买项Title G02-工单与购买项Desc"><title id="G02-工单与购买项Title">G02 领域概念关系 · 工单与购买项</title><desc id="G02-工单与购买项Desc">项目代表业务目标,APP 代表完整软件;组件运行软件,资源由显式绑定关联。;2026-10-12,业务基线 0.14,图集版本 0.17</desc><rect width="100%" height="100%" fill="#fff"/><text x="32" y="42" font-family="Microsoft YaHei,Arial,sans-serif" font-size="28" font-weight="600" fill="#17233a">G02 · 工单与购买项</text><text x="32" y="79" font-family="Microsoft YaHei,Arial,sans-serif" font-size="18" fill="#526176">2026-10-12 · 业务基线 0.14 · 图集 0.17 · 展开图 · 技术选型未定</text><g transform="translate(270,124)"><svg id="diagram02x1" width="460.29296875" xmlns="http://www.w3.org/2000/svg" class="flowchart" height="1126" viewBox="0 0 460.29296875 1126" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#diagram02x1{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;fill:#17233a;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram02x1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram02x1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram02x1 .error-icon{fill:#ffffff;}#diagram02x1 .error-text{fill:#000000;stroke:#000000;}#diagram02x1 .edge-thickness-normal{stroke-width:1px;}#diagram02x1 .edge-thickness-thick{stroke-width:3.5px;}#diagram02x1 .edge-pattern-solid{stroke-dasharray:0;}#diagram02x1 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram02x1 .edge-pattern-dashed{stroke-dasharray:3;}#diagram02x1 .edge-pattern-dotted{stroke-dasharray:2;}#diagram02x1 .marker{fill:#60718a;stroke:#60718a;}#diagram02x1 .marker.cross{stroke:#60718a;}#diagram02x1 svg{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;}#diagram02x1 p{margin:0;}#diagram02x1 .label{font-family:Microsoft YaHei,Arial,sans-serif;color:#17233a;}#diagram02x1 .cluster-label text{fill:#000000;}#diagram02x1 .cluster-label span{color:#000000;}#diagram02x1 .cluster-label span p{background-color:transparent;}#diagram02x1 .label text,#diagram02x1 span{fill:#17233a;color:#17233a;}#diagram02x1 .node rect,#diagram02x1 .node circle,#diagram02x1 .node ellipse,#diagram02x1 .node polygon,#diagram02x1 .node path{fill:#eef5ff;stroke:#8198bb;stroke-width:1px;}#diagram02x1 .rough-node .label text,#diagram02x1 .node .label text,#diagram02x1 .image-shape .label,#diagram02x1 .icon-shape .label{text-anchor:middle;}#diagram02x1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram02x1 .rough-node .label,#diagram02x1 .node .label,#diagram02x1 .image-shape .label,#diagram02x1 .icon-shape .label{text-align:center;}#diagram02x1 .node.clickable{cursor:pointer;}#diagram02x1 .root .anchor path{fill:#60718a!important;stroke-width:0;stroke:#60718a;}#diagram02x1 .arrowheadPath{fill:#0b0b0b;}#diagram02x1 .edgePath .path{stroke:#60718a;stroke-width:2.0px;}#diagram02x1 .flowchart-link{stroke:#60718a;fill:none;}#diagram02x1 .edgeLabel{background-color:#f3f8f6;text-align:center;}#diagram02x1 .edgeLabel p{background-color:#f3f8f6;}#diagram02x1 .edgeLabel rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram02x1 .labelBkg{background-color:rgba(243, 248, 246, 0.5);}#diagram02x1 .cluster rect{fill:#f8fafc;stroke:#cbd5e1;stroke-width:1px;}#diagram02x1 .cluster text{fill:#000000;}#diagram02x1 .cluster span{color:#000000;}#diagram02x1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:Microsoft YaHei,Arial,sans-serif;font-size:12px;background:#ffffff;border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#diagram02x1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#17233a;}#diagram02x1 rect.text{fill:none;stroke-width:0;}#diagram02x1 .icon-shape,#diagram02x1 .image-shape{background-color:#f3f8f6;text-align:center;}#diagram02x1 .icon-shape p,#diagram02x1 .image-shape p{background-color:#f3f8f6;padding:2px;}#diagram02x1 .icon-shape rect,#diagram02x1 .image-shape rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram02x1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram02x1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram02x1 :root{--mermaid-font-family:Microsoft YaHei,Arial,sans-serif;}</style><g><marker id="diagram02x1_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroLine truncated
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,28 @@
|
||||
flowchart TB
|
||||
subgraph financial["例 1:金融官网"]
|
||||
financeApp["金融官网 APP"]
|
||||
financeWeb["Web 与后台组件"]
|
||||
financeDb["必需:数据库"]
|
||||
financePvc["必需:PVC 文件存储"]
|
||||
financeApp --> financeWeb
|
||||
financeWeb --> financeDb
|
||||
financeWeb --> financePvc
|
||||
end
|
||||
subgraph collecting["例 2:Web 与采集"]
|
||||
collectApp["一个 APP 也可同时包含"]
|
||||
collectWeb["Web 组件"]
|
||||
collectWorker["worker 组件"]
|
||||
sharedDb["同一数据库:显式授权共用"]
|
||||
collectApp --> collectWeb
|
||||
collectApp --> collectWorker
|
||||
collectWeb --> sharedDb
|
||||
collectWorker --> sharedDb
|
||||
end
|
||||
subgraph cooperation["例 3:跨项目 API"]
|
||||
review["项目 A:评价网
|
||||
独立 APP 和数据库"]
|
||||
content["项目 B:内容中心
|
||||
独立 APP 和数据库"]
|
||||
content -->|"通过 API 提供数据"| review
|
||||
end
|
||||
financial ~~~ collecting ~~~ cooperation
|
||||
|
After Width: | Height: | Size: 119 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1107" height="887" viewBox="0 0 1107 887" role="img" aria-labelledby="G02-项目组成例子Title G02-项目组成例子Desc"><title id="G02-项目组成例子Title">G02 领域概念关系 · 项目组成例子</title><desc id="G02-项目组成例子Desc">项目代表业务目标,APP 代表完整软件;组件运行软件,资源由显式绑定关联。;2026-10-12,业务基线 0.14,图集版本 0.17</desc><rect width="100%" height="100%" fill="#fff"/><text x="32" y="42" font-family="Microsoft YaHei,Arial,sans-serif" font-size="28" font-weight="600" fill="#17233a">G02 · 项目组成例子</text><text x="32" y="79" font-family="Microsoft YaHei,Arial,sans-serif" font-size="18" fill="#526176">2026-10-12 · 业务基线 0.14 · 图集 0.17 · 展开图 · 技术选型未定</text><g transform="translate(32,124)"><svg id="diagram02x2" width="1042.84375" xmlns="http://www.w3.org/2000/svg" class="flowchart" height="715" viewBox="0 -1 1042.84375 715" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#diagram02x2{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;fill:#17233a;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram02x2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram02x2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram02x2 .error-icon{fill:#ffffff;}#diagram02x2 .error-text{fill:#000000;stroke:#000000;}#diagram02x2 .edge-thickness-normal{stroke-width:1px;}#diagram02x2 .edge-thickness-thick{stroke-width:3.5px;}#diagram02x2 .edge-pattern-solid{stroke-dasharray:0;}#diagram02x2 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram02x2 .edge-pattern-dashed{stroke-dasharray:3;}#diagram02x2 .edge-pattern-dotted{stroke-dasharray:2;}#diagram02x2 .marker{fill:#60718a;stroke:#60718a;}#diagram02x2 .marker.cross{stroke:#60718a;}#diagram02x2 svg{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;}#diagram02x2 p{margin:0;}#diagram02x2 .label{font-family:Microsoft YaHei,Arial,sans-serif;color:#17233a;}#diagram02x2 .cluster-label text{fill:#000000;}#diagram02x2 .cluster-label span{color:#000000;}#diagram02x2 .cluster-label span p{background-color:transparent;}#diagram02x2 .label text,#diagram02x2 span{fill:#17233a;color:#17233a;}#diagram02x2 .node rect,#diagram02x2 .node circle,#diagram02x2 .node ellipse,#diagram02x2 .node polygon,#diagram02x2 .node path{fill:#eef5ff;stroke:#8198bb;stroke-width:1px;}#diagram02x2 .rough-node .label text,#diagram02x2 .node .label text,#diagram02x2 .image-shape .label,#diagram02x2 .icon-shape .label{text-anchor:middle;}#diagram02x2 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram02x2 .rough-node .label,#diagram02x2 .node .label,#diagram02x2 .image-shape .label,#diagram02x2 .icon-shape .label{text-align:center;}#diagram02x2 .node.clickable{cursor:pointer;}#diagram02x2 .root .anchor path{fill:#60718a!important;stroke-width:0;stroke:#60718a;}#diagram02x2 .arrowheadPath{fill:#0b0b0b;}#diagram02x2 .edgePath .path{stroke:#60718a;stroke-width:2.0px;}#diagram02x2 .flowchart-link{stroke:#60718a;fill:none;}#diagram02x2 .edgeLabel{background-color:#f3f8f6;text-align:center;}#diagram02x2 .edgeLabel p{background-color:#f3f8f6;}#diagram02x2 .edgeLabel rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram02x2 .labelBkg{background-color:rgba(243, 248, 246, 0.5);}#diagram02x2 .cluster rect{fill:#f8fafc;stroke:#cbd5e1;stroke-width:1px;}#diagram02x2 .cluster text{fill:#000000;}#diagram02x2 .cluster span{color:#000000;}#diagram02x2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:Microsoft YaHei,Arial,sans-serif;font-size:12px;background:#ffffff;border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#diagram02x2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#17233a;}#diagram02x2 rect.text{fill:none;stroke-width:0;}#diagram02x2 .icon-shape,#diagram02x2 .image-shape{background-color:#f3f8f6;text-align:center;}#diagram02x2 .icon-shape p,#diagram02x2 .image-shape p{background-color:#f3f8f6;padding:2px;}#diagram02x2 .icon-shape rect,#diagram02x2 .image-shape rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram02x2 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram02x2 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram02x2 :root{--mermaid-font-family:Microsoft YaHei,Arial,sans-serif;}</style><g><marker id="diagram02x2_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dashaLine truncated
|
||||
|
After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1,110 @@
|
||||
# G02 领域概念关系
|
||||
|
||||
2026-10-13 · 业务基线 0.15 · 图集版本 0.18。概念图不等于数据库 ER 图或部署架构。投影用 SVG 尚未按本次文字重绘。
|
||||
|
||||
**项目代表业务目标。应用指功能,例如邮箱应用。初级版本不选择组件。域名是需要购买的资源。**
|
||||
|
||||

|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
account["客户账户"]
|
||||
grouping["项目组:可选、单层
|
||||
一个项目最多属于一个组"]
|
||||
project["项目:一个业务目标
|
||||
稳定 ID;不依赖人工编号"]
|
||||
app["应用:一项功能
|
||||
例如邮箱应用"]
|
||||
preset["应用预设
|
||||
初级版本不让客户改选组件"]
|
||||
component["运行组件:Web / API / worker
|
||||
初级按预设固定;高级版本以后再选"]
|
||||
resource["数据库、持久化存储等资源
|
||||
明确归属与使用引用"]
|
||||
service["域名资源
|
||||
需要购买,不包含在应用里"]
|
||||
account -->|"拥有多个"| project
|
||||
project -->|"可归入一个组;不产生互通授权"| grouping
|
||||
project -->|"包含"| app
|
||||
preset -->|"实例化并约束配置"| app
|
||||
app -->|"由组件运行"| component
|
||||
component -->|"显式引用,可共享"| resource
|
||||
project -->|"购买"| service
|
||||
```
|
||||
|
||||
主图中的关系有五个边界:
|
||||
|
||||
- 应用指功能。邮箱应用是一种应用,不再把仅邮箱理解成零应用。初级版本不提供组件选择,Web、API、worker 按预设固定带上。高级版本以后用界面选择这个项目要不要组件。
|
||||
- 域名是需要购买的资源,不包含在应用里。
|
||||
- 同集群、同环境的同项目 APP 默认使用同一个 namespace;namespace 不等于数据库,也不自动授予共享权限。项目可有零到多个数据库。
|
||||
- 数据库、卷、供应商实例和购买项是不同对象。数据库共享需明确引用和权限;PVC 直接引用受 namespace 约束,外部数据库用连接授权。仓库、项目、数据库与 namespace 不要求同名。
|
||||
- 项目组只是客户整理工具,与后台用于定价的“价格客户组”不同。跨项目 API 协作需另外授权。
|
||||
- 零引用资源进入待释放处理:移除最后一个引用时提示用户,释放前复核引用和任务;恢复引用应取消释放。三天延迟只是候选参数。独立服务不随 APP 删除自动取消。
|
||||
|
||||
## 工单、发布与购买项
|
||||
|
||||

|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
scope["项目:工单的业务范围"]
|
||||
workOrder["工单属于一个项目
|
||||
可修改该项目多个 APP"]
|
||||
version["项目发布组合
|
||||
关联涉及 APP 的代码、产物、配置版本"]
|
||||
software["APP:完整软件实例"]
|
||||
runtime["运行组件与配置档位"]
|
||||
resources["明确归属的数据库 / 存储
|
||||
可被多个组件显式引用"]
|
||||
items["购买项:独立计费对象
|
||||
组件资源分别计费;共享资源只计一份"]
|
||||
scope --> workOrder --> version
|
||||
version -->|"记录版本"| software
|
||||
software -->|"由组件运行"| runtime
|
||||
runtime -->|"显式引用"| resources
|
||||
runtime -->|"配置费用"| items
|
||||
resources -->|"对应购买项"| items
|
||||
```
|
||||
|
||||
发布组合表达一组实际版本,不要求多个仓库拥有同一个提交号;业务范围、技术组件和购买项不应合并成一个对象。
|
||||
|
||||
## 三个具体例子
|
||||
|
||||

|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph financial["例 1:金融官网"]
|
||||
financeApp["金融官网 APP"]
|
||||
financeWeb["Web 与后台组件"]
|
||||
financeDb["必需:数据库"]
|
||||
financePvc["必需:PVC 文件存储"]
|
||||
financeApp --> financeWeb
|
||||
financeWeb --> financeDb
|
||||
financeWeb --> financePvc
|
||||
end
|
||||
subgraph collecting["例 2:Web 与采集"]
|
||||
collectApp["一个 APP 也可同时包含"]
|
||||
collectWeb["Web 组件"]
|
||||
collectWorker["worker 组件"]
|
||||
sharedDb["同一数据库:显式授权共用"]
|
||||
collectApp --> collectWeb
|
||||
collectApp --> collectWorker
|
||||
collectWeb --> sharedDb
|
||||
collectWorker --> sharedDb
|
||||
end
|
||||
subgraph cooperation["例 3:跨项目 API"]
|
||||
review["项目 A:评价网
|
||||
独立 APP 和数据库"]
|
||||
content["项目 B:内容中心
|
||||
独立 APP 和数据库"]
|
||||
content -->|"通过 API 提供数据"| review
|
||||
end
|
||||
financial ~~~ collecting ~~~ cooperation
|
||||
```
|
||||
|
||||
worker 是否单独成为 APP,取决于它是否是独立软件实例,不能仅因它需要独立 Deployment 就按一个 APP 处理。纯前端应用可以不需要数据库/PVC,必需资源由具体应用预设决定。
|
||||
|
||||
平台自有新闻 API 是平台部署的公共应用,客户购买 API 使用权益;不为每个客户复制整套公共应用。外部 RDS、云存储及公共 API 接入的供应商和实施版本仍待讨论。
|
||||
|
||||
依据:[03 领域模型](../03-系统架构与领域模型.md)、[05 费用组成](../05-商业模式与成本指标.md)。[返回图集](README.md)。
|
||||
@@ -0,0 +1,23 @@
|
||||
flowchart TB
|
||||
account["客户账户"]
|
||||
grouping["项目组:可选、单层
|
||||
一个项目最多属于一个组"]
|
||||
project["项目:一个业务目标
|
||||
稳定 ID;不依赖人工编号"]
|
||||
app["APP:完整软件实例
|
||||
项目包含 0 到多个 APP"]
|
||||
preset["应用目录 / 版本预设
|
||||
声明必需与可选依赖"]
|
||||
component["运行组件:Web / API / worker
|
||||
一个 APP 可有多个组件"]
|
||||
resource["数据库、持久化存储等资源
|
||||
明确归属与使用引用"]
|
||||
service["独立服务:域名 / 邮箱
|
||||
各自的订购与存续周期"]
|
||||
account -->|"拥有多个"| project
|
||||
project -->|"可归入一个组;不产生互通授权"| grouping
|
||||
project -->|"包含"| app
|
||||
preset -->|"实例化并约束配置"| app
|
||||
app -->|"由组件运行"| component
|
||||
component -->|"显式引用,可共享"| resource
|
||||
project -->|"关联,可仅购买邮箱"| service
|
||||
|
After Width: | Height: | Size: 169 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1062" height="1012" viewBox="0 0 1062 1012" role="img" aria-labelledby="G02-领域概念关系Title G02-领域概念关系Desc"><title id="G02-领域概念关系Title">G02 领域概念关系 · 领域概念关系</title><desc id="G02-领域概念关系Desc">项目代表业务目标,APP 代表完整软件;组件运行软件,资源由显式绑定关联。;2026-10-12,业务基线 0.14,图集版本 0.17</desc><rect width="100%" height="100%" fill="#fff"/><text x="32" y="42" font-family="Microsoft YaHei,Arial,sans-serif" font-size="28" font-weight="600" fill="#17233a">G02 领域概念关系</text><text x="32" y="79" font-family="Microsoft YaHei,Arial,sans-serif" font-size="18" fill="#526176">2026-10-12 · 业务基线 0.14 · 图集 0.17 · 主图 · 技术选型未定</text><g transform="translate(32,124)"><svg id="diagram02x0" width="997.6640625" xmlns="http://www.w3.org/2000/svg" class="flowchart" height="840" viewBox="0 0 997.6640625 840" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#diagram02x0{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;fill:#17233a;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram02x0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram02x0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram02x0 .error-icon{fill:#ffffff;}#diagram02x0 .error-text{fill:#000000;stroke:#000000;}#diagram02x0 .edge-thickness-normal{stroke-width:1px;}#diagram02x0 .edge-thickness-thick{stroke-width:3.5px;}#diagram02x0 .edge-pattern-solid{stroke-dasharray:0;}#diagram02x0 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram02x0 .edge-pattern-dashed{stroke-dasharray:3;}#diagram02x0 .edge-pattern-dotted{stroke-dasharray:2;}#diagram02x0 .marker{fill:#60718a;stroke:#60718a;}#diagram02x0 .marker.cross{stroke:#60718a;}#diagram02x0 svg{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;}#diagram02x0 p{margin:0;}#diagram02x0 .label{font-family:Microsoft YaHei,Arial,sans-serif;color:#17233a;}#diagram02x0 .cluster-label text{fill:#000000;}#diagram02x0 .cluster-label span{color:#000000;}#diagram02x0 .cluster-label span p{background-color:transparent;}#diagram02x0 .label text,#diagram02x0 span{fill:#17233a;color:#17233a;}#diagram02x0 .node rect,#diagram02x0 .node circle,#diagram02x0 .node ellipse,#diagram02x0 .node polygon,#diagram02x0 .node path{fill:#eef5ff;stroke:#8198bb;stroke-width:1px;}#diagram02x0 .rough-node .label text,#diagram02x0 .node .label text,#diagram02x0 .image-shape .label,#diagram02x0 .icon-shape .label{text-anchor:middle;}#diagram02x0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram02x0 .rough-node .label,#diagram02x0 .node .label,#diagram02x0 .image-shape .label,#diagram02x0 .icon-shape .label{text-align:center;}#diagram02x0 .node.clickable{cursor:pointer;}#diagram02x0 .root .anchor path{fill:#60718a!important;stroke-width:0;stroke:#60718a;}#diagram02x0 .arrowheadPath{fill:#0b0b0b;}#diagram02x0 .edgePath .path{stroke:#60718a;stroke-width:2.0px;}#diagram02x0 .flowchart-link{stroke:#60718a;fill:none;}#diagram02x0 .edgeLabel{background-color:#f3f8f6;text-align:center;}#diagram02x0 .edgeLabel p{background-color:#f3f8f6;}#diagram02x0 .edgeLabel rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram02x0 .labelBkg{background-color:rgba(243, 248, 246, 0.5);}#diagram02x0 .cluster rect{fill:#f8fafc;stroke:#cbd5e1;stroke-width:1px;}#diagram02x0 .cluster text{fill:#000000;}#diagram02x0 .cluster span{color:#000000;}#diagram02x0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:Microsoft YaHei,Arial,sans-serif;font-size:12px;background:#ffffff;border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#diagram02x0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#17233a;}#diagram02x0 rect.text{fill:none;stroke-width:0;}#diagram02x0 .icon-shape,#diagram02x0 .image-shape{background-color:#f3f8f6;text-align:center;}#diagram02x0 .icon-shape p,#diagram02x0 .image-shape p{background-color:#f3f8f6;padding:2px;}#diagram02x0 .icon-shape rect,#diagram02x0 .image-shape rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram02x0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram02x0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram02x0 :root{--mermaid-font-family:Microsoft YaHei,Arial,sans-serif;}</style><g><marker id="diagram02x0_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharraLine truncated
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,51 @@
|
||||
# G03 购买与开通
|
||||
|
||||
2026-10-12 · 业务基线 0.14 · 图集版本 0.17。泳道按参与方分列;这是首期正式购买路径,后续新客测试赠送另见 G05。
|
||||
|
||||
**普通向导减少信息量,高级配置支持多 APP;购买完成后还须核验实际开通结果。**
|
||||
|
||||

|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant customer as 客户
|
||||
participant platform as 平台业务
|
||||
participant provisioning as 自动开通能力
|
||||
participant staff as 内部人员
|
||||
customer->>platform: 案例快捷建立同类项目 / 从应用目录建立项目
|
||||
alt 普通向导
|
||||
platform-->>customer: 单 APP:选择必需资源档位,再选择域名、邮箱等
|
||||
else 高级配置
|
||||
platform-->>customer: 同项目配置多个 APP、组件和资源绑定
|
||||
end
|
||||
customer->>platform: 确认配置,查看年付套餐和积分总价
|
||||
opt 真实充值积分不足
|
||||
customer->>platform: 充值到账后继续
|
||||
end
|
||||
customer->>platform: 确认购买并消耗真实充值积分
|
||||
platform->>provisioning: 建立开通任务,按购买项分别执行
|
||||
platform-->>customer: 展示正在执行、等待人工或失败等任务状态
|
||||
opt 供应商账号等步骤需要人工准备
|
||||
provisioning->>staff: 请求人工准备或排查
|
||||
staff-->>provisioning: 更新处理结果,继续开通
|
||||
end
|
||||
provisioning->>provisioning: 核验应用健康和各服务实际开通结果
|
||||
alt 应用已可用
|
||||
provisioning-->>platform: 更新成功项与访问入口;其他服务独立显示状态
|
||||
platform-->>customer: 受保护预览地址 / 已绑定的正式域名;发送成功邮件
|
||||
else 开通失败或结果不明
|
||||
provisioning-->>platform: 保留失败或待核查状态,避免重复开通 / 重复扣费
|
||||
platform->>staff: 人工核查与修复
|
||||
platform-->>customer: 显示原因与处理进度
|
||||
end
|
||||
```
|
||||
|
||||
讲解时补充:
|
||||
|
||||
- 应用预设始终校验必需依赖,高级模式也不能随意删除应用所需数据库等资源。仅邮箱场景只开通购买的服务。
|
||||
- 案例快捷入口复制的是可交付模板选择,不是别的客户的私有代码、数据或素材。已有项目可以继续添加 APP。
|
||||
- 应用、域名、邮箱分别跟踪实际结果;不能因扣款成功就称全部开通成功。供应商结果不明时先核查,再决定重试。
|
||||
- 默认建站域仅用于受保护预览;正式访问可以绑定客户自有域名或平台代购域名,不要求另买第二套服务器。验证码/声明不是法律免责保证。
|
||||
- 开通成功邮件发送失败应重试通知,不把健康运行的应用改成开通失败。首期无系统内退款流程,特殊情况通过人工线下处理。
|
||||
|
||||
依据:[02 购买与开通](../02-业务流程与产品需求.md)、[05 年付与积分](../05-商业模式与成本指标.md)。[返回图集](README.md)。
|
||||
@@ -0,0 +1,31 @@
|
||||
sequenceDiagram
|
||||
participant customer as 客户
|
||||
participant platform as 平台业务
|
||||
participant provisioning as 自动开通能力
|
||||
participant staff as 内部人员
|
||||
customer->>platform: 案例快捷建立同类项目 / 从应用目录建立项目
|
||||
alt 普通向导
|
||||
platform-->>customer: 单 APP:选择必需资源档位,再选择域名、邮箱等
|
||||
else 高级配置
|
||||
platform-->>customer: 同项目配置多个 APP、组件和资源绑定
|
||||
end
|
||||
customer->>platform: 确认配置,查看年付套餐和积分总价
|
||||
opt 真实充值积分不足
|
||||
customer->>platform: 充值到账后继续
|
||||
end
|
||||
customer->>platform: 确认购买并消耗真实充值积分
|
||||
platform->>provisioning: 建立开通任务,按购买项分别执行
|
||||
platform-->>customer: 展示正在执行、等待人工或失败等任务状态
|
||||
opt 供应商账号等步骤需要人工准备
|
||||
provisioning->>staff: 请求人工准备或排查
|
||||
staff-->>provisioning: 更新处理结果,继续开通
|
||||
end
|
||||
provisioning->>provisioning: 核验应用健康和各服务实际开通结果
|
||||
alt 应用已可用
|
||||
provisioning-->>platform: 更新成功项与访问入口;其他服务独立显示状态
|
||||
platform-->>customer: 受保护预览地址 / 已绑定的正式域名;发送成功邮件
|
||||
else 开通失败或结果不明
|
||||
provisioning-->>platform: 保留失败或待核查状态,避免重复开通 / 重复扣费
|
||||
platform->>staff: 人工核查与修复
|
||||
platform-->>customer: 显示原因与处理进度
|
||||
end
|
||||
|
After Width: | Height: | Size: 241 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1294" height="1667" viewBox="0 0 1294 1667" role="img" aria-labelledby="G03-购买与开通Title G03-购买与开通Desc"><title id="G03-购买与开通Title">G03 购买与开通 · 购买与开通</title><desc id="G03-购买与开通Desc">普通向导减少信息量,高级配置支持多 APP;购买完成后还须核验实际开通结果。;2026-10-12,业务基线 0.14,图集版本 0.17</desc><rect width="100%" height="100%" fill="#fff"/><text x="32" y="42" font-family="Microsoft YaHei,Arial,sans-serif" font-size="28" font-weight="600" fill="#17233a">G03 购买与开通</text><text x="32" y="79" font-family="Microsoft YaHei,Arial,sans-serif" font-size="18" fill="#526176">2026-10-12 · 业务基线 0.14 · 图集 0.17 · 主图 · 技术选型未定</text><g transform="translate(32,124)"><svg id="diagram03x0" width="1230" xmlns="http://www.w3.org/2000/svg" height="1495" viewBox="-30 -20 1230 1495" role="graphics-document document" aria-roledescription="sequence"><g><line id="actor3" x1="1050" y1="65" x2="1050" y2="2000" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="staff"></line><g id="root-3"><rect x="930" y="0" fill="#eaeaea" stroke="#666" width="240" height="65" name="staff" rx="3" ry="3" class="actor actor-top"></rect><text x="1050" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: "Microsoft YaHei", Arial, sans-serif;"><tspan x="1050" dy="0">内部人员</tspan></text></g></g><g><line id="actor2" x1="748" y1="65" x2="748" y2="2000" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="provisioning"></line><g id="root-2"><rect x="628" y="0" fill="#eaeaea" stroke="#666" width="240" height="65" name="provisioning" rx="3" ry="3" class="actor actor-top"></rect><text x="748" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: "Microsoft YaHei", Arial, sans-serif;"><tspan x="748" dy="0">自动开通能力</tspan></text></g></g><g><line id="actor1" x1="434" y1="65" x2="434" y2="2000" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="platform"></line><g id="root-1"><rect x="314" y="0" fill="#eaeaea" stroke="#666" width="240" height="65" name="platform" rx="3" ry="3" class="actor actor-top"></rect><text x="434" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: "Microsoft YaHei", Arial, sans-serif;"><tspan x="434" dy="0">平台业务</tspan></text></g></g><g><line id="actor0" x1="120" y1="65" x2="120" y2="2000" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="customer"></line><g id="root-0"><rect x="0" y="0" fill="#eaeaea" stroke="#666" width="240" height="65" name="customer" rx="3" ry="3" class="actor actor-top"></rect><text x="120" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: "Microsoft YaHei", Arial, sans-serif;"><tspan x="120" dy="0">客户</tspan></text></g></g><style>#diagram03x0{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;fill:#17233a;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram03x0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram03x0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram03x0 .error-icon{fill:#ffffff;}#diagram03x0 .error-text{fill:#000000;stroke:#000000;}#diagram03x0 .edge-thickness-normal{stroke-width:1px;}#diagram03x0 .edge-thickness-thick{stroke-width:3.5px;}#diagram03x0 .edge-pattern-solid{stroke-dasharray:0;}#diagram03x0 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram03x0 .edge-pattern-dashed{stroke-dasharray:3;}#diagram03x0 .edge-pattern-dotted{stroke-dasharray:2;}#diagram03x0 .marker{fill:#60718a;stroke:#60718a;}#diagram03x0 .marker.cross{stroke:#60718a;}#diagram03x0 svg{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;}#diagram03x0 p{margin:0;}#diagram03x0 .actor{stroke:#8198bb;fill:#edf3fb;}#diagram03x0 text.actor>tspan{fill:#17233a;stroke:none;}#diagram03x0 .actor-line{stroke:#8198bb;}#diagram03x0 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#diagram03x0 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#334155;}#diagram03x0 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#334155;}#diagram03x0 #arrowhead path{fill:#334155;stroke:#334155;}#diagram03x0 .sequenceNumber{fill:#9f8e75;}#diagram03x0 #sequencenumber{fill:#334155;}#diagram03x0 #crosshead path{fill:#334155;strLine truncated
|
||||
|
After Width: | Height: | Size: 32 KiB |
@@ -0,0 +1,35 @@
|
||||
flowchart LR
|
||||
attempt["执行一次工单尝试
|
||||
固定需求修订与执行基准"]
|
||||
conditions{"满足执行条件?"}
|
||||
waiting["等待资源 / 用量 / 充值
|
||||
停止新调用,保留任务;已有年付服务继续"]
|
||||
work["开发与内部检查
|
||||
有限修复;到次数或预算上限停止"]
|
||||
checked{"内部检查通过?"}
|
||||
unchanged["发布前失败
|
||||
保留原运行版本"]
|
||||
deploy["发布涉及的 APP 组合"]
|
||||
healthy{"实际运行健康?"}
|
||||
success["成功回执
|
||||
改动摘要、版本、预览地址"]
|
||||
recover["新版无法运行
|
||||
恢复此前有效版本并核验"]
|
||||
restored{"恢复成功?"}
|
||||
failure["失败回执
|
||||
原因、当前有效版本、重试 / 人工入口"]
|
||||
intervention["恢复异常:人工接管
|
||||
如实显示服务故障"]
|
||||
retry["同范围:新增需求修订与尝试
|
||||
旧尝试结束后重试;不覆盖原件"]
|
||||
attempt --> conditions
|
||||
conditions -->|"否"| waiting
|
||||
waiting -->|"条件补足后"| attempt
|
||||
conditions -->|"是"| work --> checked
|
||||
checked -->|"否"| unchanged --> failure
|
||||
checked -->|"是"| deploy --> healthy
|
||||
healthy -->|"是"| success
|
||||
healthy -->|"否"| recover --> restored
|
||||
restored -->|"是"| failure
|
||||
restored -->|"否"| intervention
|
||||
failure -->|"客户选择再次尝试"| retry --> attempt
|
||||
|
After Width: | Height: | Size: 110 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="3685" height="751" viewBox="0 0 3685 751" role="img" aria-labelledby="G04-失败与恢复Title G04-失败与恢复Desc"><title id="G04-失败与恢复Title">G04 定制工单处理 · 失败与恢复</title><desc id="G04-失败与恢复Desc">一个工单固定一次改动需求,自动或人工执行后直接更新运行版本;人工模式增加金额确认。;2026-10-12,业务基线 0.14,图集版本 0.17</desc><rect width="100%" height="100%" fill="#fff"/><text x="32" y="42" font-family="Microsoft YaHei,Arial,sans-serif" font-size="28" font-weight="600" fill="#17233a">G04 · 失败与恢复</text><text x="32" y="79" font-family="Microsoft YaHei,Arial,sans-serif" font-size="18" fill="#526176">2026-10-12 · 业务基线 0.14 · 图集 0.17 · 展开图 · 技术选型未定</text><g transform="translate(32,124)"><svg id="diagram04x1" width="3620.390625" xmlns="http://www.w3.org/2000/svg" class="flowchart" height="579" viewBox="0 0 3620.390625 579" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#diagram04x1{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;fill:#17233a;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram04x1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram04x1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram04x1 .error-icon{fill:#ffffff;}#diagram04x1 .error-text{fill:#000000;stroke:#000000;}#diagram04x1 .edge-thickness-normal{stroke-width:1px;}#diagram04x1 .edge-thickness-thick{stroke-width:3.5px;}#diagram04x1 .edge-pattern-solid{stroke-dasharray:0;}#diagram04x1 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram04x1 .edge-pattern-dashed{stroke-dasharray:3;}#diagram04x1 .edge-pattern-dotted{stroke-dasharray:2;}#diagram04x1 .marker{fill:#60718a;stroke:#60718a;}#diagram04x1 .marker.cross{stroke:#60718a;}#diagram04x1 svg{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;}#diagram04x1 p{margin:0;}#diagram04x1 .label{font-family:Microsoft YaHei,Arial,sans-serif;color:#17233a;}#diagram04x1 .cluster-label text{fill:#000000;}#diagram04x1 .cluster-label span{color:#000000;}#diagram04x1 .cluster-label span p{background-color:transparent;}#diagram04x1 .label text,#diagram04x1 span{fill:#17233a;color:#17233a;}#diagram04x1 .node rect,#diagram04x1 .node circle,#diagram04x1 .node ellipse,#diagram04x1 .node polygon,#diagram04x1 .node path{fill:#eef5ff;stroke:#8198bb;stroke-width:1px;}#diagram04x1 .rough-node .label text,#diagram04x1 .node .label text,#diagram04x1 .image-shape .label,#diagram04x1 .icon-shape .label{text-anchor:middle;}#diagram04x1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram04x1 .rough-node .label,#diagram04x1 .node .label,#diagram04x1 .image-shape .label,#diagram04x1 .icon-shape .label{text-align:center;}#diagram04x1 .node.clickable{cursor:pointer;}#diagram04x1 .root .anchor path{fill:#60718a!important;stroke-width:0;stroke:#60718a;}#diagram04x1 .arrowheadPath{fill:#0b0b0b;}#diagram04x1 .edgePath .path{stroke:#60718a;stroke-width:2.0px;}#diagram04x1 .flowchart-link{stroke:#60718a;fill:none;}#diagram04x1 .edgeLabel{background-color:#f3f8f6;text-align:center;}#diagram04x1 .edgeLabel p{background-color:#f3f8f6;}#diagram04x1 .edgeLabel rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram04x1 .labelBkg{background-color:rgba(243, 248, 246, 0.5);}#diagram04x1 .cluster rect{fill:#f8fafc;stroke:#cbd5e1;stroke-width:1px;}#diagram04x1 .cluster text{fill:#000000;}#diagram04x1 .cluster span{color:#000000;}#diagram04x1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:Microsoft YaHei,Arial,sans-serif;font-size:12px;background:#ffffff;border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#diagram04x1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#17233a;}#diagram04x1 rect.text{fill:none;stroke-width:0;}#diagram04x1 .icon-shape,#diagram04x1 .image-shape{background-color:#f3f8f6;text-align:center;}#diagram04x1 .icon-shape p,#diagram04x1 .image-shape p{background-color:#f3f8f6;padding:2px;}#diagram04x1 .icon-shape rect,#diagram04x1 .image-shape rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram04x1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram04x1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram04x1 :root{--mermaid-font-family:Microsoft YaHei,Arial,sans-serif;}</style><g><marker id="diagram04x1_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-daLine truncated
|
||||
|
After Width: | Height: | Size: 30 KiB |
@@ -0,0 +1,101 @@
|
||||
# G04 定制工单处理
|
||||
|
||||
2026-10-13 · 业务基线 0.15 · 图集文字 0.18。主图文字已加入 AI 验收;失败达到 x 次才转人工。x 未定。投影用 SVG 尚未重绘。执行器、Git 服务及实现参数尚未选择。
|
||||
|
||||
**一个工单固定一次改动需求,自动或人工执行后直接更新运行版本;人工模式增加金额确认。**
|
||||
|
||||

|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant customer as 客户
|
||||
participant ticket as 平台工单
|
||||
participant ai as AI 执行能力
|
||||
participant human as 人工团队
|
||||
participant publish as 发布与运行核验
|
||||
customer->>ticket: 单项目提交文字与附件,选择自动或人工
|
||||
ticket->>ticket: 固定需求修订;核对执行基准、权限及费用条件
|
||||
alt 自动模式
|
||||
ticket->>ai: 执行需求分析与开发;每次真实 AI 调用均计消耗
|
||||
ai->>ai: AI 验收;未通过则修改后再验收
|
||||
alt 验收通过
|
||||
ai-->>ticket: 合格改动成果
|
||||
else 验收失败达到 x 次
|
||||
ai-->>ticket: 此时才转原工单人工模式,保留需求、成果和消耗
|
||||
end
|
||||
end
|
||||
opt 人工模式,包括由自动模式转入
|
||||
ticket->>human: 内部评估并设置本次人工服务金额
|
||||
human-->>ticket: 提交报价
|
||||
ticket-->>customer: 系统提示金额:同意 / 拒绝
|
||||
alt 同意且满足消费条件
|
||||
customer->>ticket: 确认报价
|
||||
ticket->>human: 执行开发与验证;真实 AI 辅助同样计消耗
|
||||
human-->>ticket: 合格改动成果 / 失败原因
|
||||
else 拒绝或未满足消费条件
|
||||
ticket-->>customer: 拒绝则停止改动;缺少消费条件则等待,不停已有服务
|
||||
end
|
||||
end
|
||||
opt 已产生合格成果且允许发布
|
||||
ticket->>publish: 发布涉及的 APP 版本,核验实际运行
|
||||
publish-->>ticket: 实际发布 / 健康 / 恢复结果
|
||||
ticket-->>customer: 成功摘要、版本和预览地址;或失败原因与下一步
|
||||
end
|
||||
```
|
||||
|
||||
2026-10-13 会上补充:自动路径里,转人工之前先做 AI 验收。验收失败未达到 x 次时继续修改并再次验收;达到 x 次才转入原工单人工模式。x 的具体次数未定。这里的 AI 验收不是客户逐次验收后才允许上线。
|
||||
|
||||
自动开发失败未产生合格成果时,也必须在工单写入失败回执;详见下面的异常图。验收失败次数用尽后走转人工,不把未达次数的一次失败直接当成已经转人工。
|
||||
|
||||
## 失败、恢复与再试
|
||||
|
||||

|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
attempt["执行一次工单尝试
|
||||
固定需求修订与执行基准"]
|
||||
conditions{"满足执行条件?"}
|
||||
waiting["等待资源 / 用量 / 充值
|
||||
停止新调用,保留任务;已有年付服务继续"]
|
||||
work["开发与内部检查
|
||||
有限修复;到次数或预算上限停止"]
|
||||
checked{"内部检查通过?"}
|
||||
unchanged["发布前失败
|
||||
保留原运行版本"]
|
||||
deploy["发布涉及的 APP 组合"]
|
||||
healthy{"实际运行健康?"}
|
||||
success["成功回执
|
||||
改动摘要、版本、预览地址"]
|
||||
recover["新版无法运行
|
||||
恢复此前有效版本并核验"]
|
||||
restored{"恢复成功?"}
|
||||
failure["失败回执
|
||||
原因、当前有效版本、重试 / 人工入口"]
|
||||
intervention["恢复异常:人工接管
|
||||
如实显示服务故障"]
|
||||
retry["同范围:新增需求修订与尝试
|
||||
旧尝试结束后重试;不覆盖原件"]
|
||||
attempt --> conditions
|
||||
conditions -->|"否"| waiting
|
||||
waiting -->|"条件补足后"| attempt
|
||||
conditions -->|"是"| work --> checked
|
||||
checked -->|"否"| unchanged --> failure
|
||||
checked -->|"是"| deploy --> healthy
|
||||
healthy -->|"是"| success
|
||||
healthy -->|"否"| recover --> restored
|
||||
restored -->|"是"| failure
|
||||
restored -->|"否"| intervention
|
||||
failure -->|"客户选择再次尝试"| retry --> attempt
|
||||
```
|
||||
|
||||
必须保留的规则:
|
||||
|
||||
- 项目创建后可提交工单,实际执行要等必要应用/基准与消费条件满足。还没初始版本时,不能虚构“修改前版本”。
|
||||
- 一个工单只涉及一个项目,但可修改多个 APP。跨项目分别提交;多个 APP 发布不天然原子完成,部分失败的恢复策略由技术设计落实。
|
||||
- 客服/TG 负责沟通、协商及反馈。工单保存需求原件、追加修订、尝试、系统回执和工程关联;新增业务范围或方向另开工单。
|
||||
- 所有实际项目 AI 调用,包括分析、失败、修复、转人工及人工辅助,都先消耗套餐内含 AI 用量,超额扣真实积分。回退不撤销真实消耗;同一调用不得重复计费。见 [G05](G05-收费与权益.md)。
|
||||
- 平台工单为业务主记录,Git Issue/PR/提交是工程关联。引擎返回成功、Issue 关闭或代码提交不等于线上健康。
|
||||
- 默认代码回退保留业务数据并检查兼容性。涉及数据库/文件数据恢复时使用保护检查点并提示丢失新增数据风险,不把每次普通改动都画成整库回滚;实现与保留参数待技术评审。
|
||||
|
||||
依据:[02 工单流程](../02-业务流程与产品需求.md)、[03 发布与恢复](../03-系统架构与领域模型.md)、[04 工作流草案](../04-模板与AI工作流.md)、[05 消耗规则](../05-商业模式与成本指标.md)。[返回图集](README.md)。
|
||||
@@ -0,0 +1,34 @@
|
||||
sequenceDiagram
|
||||
participant customer as 客户
|
||||
participant ticket as 平台工单
|
||||
participant ai as AI 执行能力
|
||||
participant human as 人工团队
|
||||
participant publish as 发布与运行核验
|
||||
customer->>ticket: 单项目提交文字与附件,选择自动或人工
|
||||
ticket->>ticket: 固定需求修订;核对执行基准、权限及费用条件
|
||||
alt 自动模式
|
||||
ticket->>ai: 执行需求分析;每次真实 AI 调用均计消耗
|
||||
alt 适合自动处理
|
||||
ai->>ai: 开发与内部验收;预算内有限修复
|
||||
ai-->>ticket: 合格改动成果 / 失败原因
|
||||
else 判断需要人工
|
||||
ai-->>ticket: 转原工单人工模式,保留需求、成果和消耗
|
||||
end
|
||||
end
|
||||
opt 人工模式,包括由自动模式转入
|
||||
ticket->>human: 内部评估并设置本次人工服务金额
|
||||
human-->>ticket: 提交报价
|
||||
ticket-->>customer: 系统提示金额:同意 / 拒绝
|
||||
alt 同意且满足消费条件
|
||||
customer->>ticket: 确认报价
|
||||
ticket->>human: 执行开发与验证;真实 AI 辅助同样计消耗
|
||||
human-->>ticket: 合格改动成果 / 失败原因
|
||||
else 拒绝或未满足消费条件
|
||||
ticket-->>customer: 拒绝则停止改动;缺少消费条件则等待,不停已有服务
|
||||
end
|
||||
end
|
||||
opt 已产生合格成果且允许发布
|
||||
ticket->>publish: 发布涉及的 APP 版本,核验实际运行
|
||||
publish-->>ticket: 实际发布 / 健康 / 恢复结果
|
||||
ticket-->>customer: 成功摘要、版本和预览地址;或失败原因与下一步
|
||||
end
|
||||
|
After Width: | Height: | Size: 260 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1596" height="1744" viewBox="0 0 1596 1744" role="img" aria-labelledby="G04-定制工单处理Title G04-定制工单处理Desc"><title id="G04-定制工单处理Title">G04 定制工单处理 · 定制工单主流程</title><desc id="G04-定制工单处理Desc">一个工单固定一次改动需求,自动或人工执行后直接更新运行版本;人工模式增加金额确认。;2026-10-12,业务基线 0.14,图集版本 0.17</desc><rect width="100%" height="100%" fill="#fff"/><text x="32" y="42" font-family="Microsoft YaHei,Arial,sans-serif" font-size="28" font-weight="600" fill="#17233a">G04 定制工单处理</text><text x="32" y="79" font-family="Microsoft YaHei,Arial,sans-serif" font-size="18" fill="#526176">2026-10-12 · 业务基线 0.14 · 图集 0.17 · 主图 · 技术选型未定</text><g transform="translate(32,124)"><svg id="diagram04x0" width="1532" xmlns="http://www.w3.org/2000/svg" height="1572" viewBox="-30 -20 1532 1572" role="graphics-document document" aria-roledescription="sequence"><g><line id="actor8" x1="1352" y1="65" x2="1352" y2="2000" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="publish"></line><g id="root-8"><rect x="1232" y="0" fill="#eaeaea" stroke="#666" width="240" height="65" name="publish" rx="3" ry="3" class="actor actor-top"></rect><text x="1352" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: "Microsoft YaHei", Arial, sans-serif;"><tspan x="1352" dy="0">发布与运行核验</tspan></text></g></g><g><line id="actor7" x1="1050" y1="65" x2="1050" y2="2000" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="human"></line><g id="root-7"><rect x="930" y="0" fill="#eaeaea" stroke="#666" width="240" height="65" name="human" rx="3" ry="3" class="actor actor-top"></rect><text x="1050" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: "Microsoft YaHei", Arial, sans-serif;"><tspan x="1050" dy="0">人工团队</tspan></text></g></g><g><line id="actor6" x1="748" y1="65" x2="748" y2="2000" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="ai"></line><g id="root-6"><rect x="628" y="0" fill="#eaeaea" stroke="#666" width="240" height="65" name="ai" rx="3" ry="3" class="actor actor-top"></rect><text x="748" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: "Microsoft YaHei", Arial, sans-serif;"><tspan x="748" dy="0">AI 执行能力</tspan></text></g></g><g><line id="actor5" x1="434" y1="65" x2="434" y2="2000" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="ticket"></line><g id="root-5"><rect x="314" y="0" fill="#eaeaea" stroke="#666" width="240" height="65" name="ticket" rx="3" ry="3" class="actor actor-top"></rect><text x="434" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: "Microsoft YaHei", Arial, sans-serif;"><tspan x="434" dy="0">平台工单</tspan></text></g></g><g><line id="actor4" x1="120" y1="65" x2="120" y2="2000" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="customer"></line><g id="root-4"><rect x="0" y="0" fill="#eaeaea" stroke="#666" width="240" height="65" name="customer" rx="3" ry="3" class="actor actor-top"></rect><text x="120" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400; font-family: "Microsoft YaHei", Arial, sans-serif;"><tspan x="120" dy="0">客户</tspan></text></g></g><style>#diagram04x0{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;fill:#17233a;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram04x0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram04x0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram04x0 .error-icon{fill:#ffffff;}#diagram04x0 .error-text{fill:#000000;stroke:#000000;}#diagram04x0 .edge-thickness-normal{stroke-width:1px;}#diagram04x0 .edge-thickness-thick{stroke-width:3.5px;}#diagram04x0 .edge-pattern-solid{stroke-dasharray:0;}#diagram04x0 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram04x0 .edge-pattern-dashed{stroke-dasharray:3;}#diagram04x0 .edge-pattern-dotted{stroke-dasharray:2;}#diagram04x0 .marker{fill:#60718a;stroke:#60718a;}#diagram04x0 .marker.cross{stroke:#60718a;}#diagram04x0 svg{font-family:Microsoft YaHei,Arial,sans-serif;font-sLine truncated
|
||||
|
After Width: | Height: | Size: 33 KiB |
@@ -0,0 +1,20 @@
|
||||
flowchart LR
|
||||
aiCall["一次真实项目 AI 调用
|
||||
自动 / 人工辅助 / 失败 / 修复 / 转人工"]
|
||||
cost["核对供应商实际消耗成本
|
||||
记录调用与计费规则,防重复记账"]
|
||||
allowance{"套餐内含 AI 用量可抵扣?"}
|
||||
deduct["抵扣套餐内含用量"]
|
||||
excess["剩余超额部分
|
||||
按成本、可配置加价及积分汇率结算"]
|
||||
example["例:全部属于超额
|
||||
成本 1 USD × 1.20 × 100 = 120 积分"]
|
||||
gate["下一次调用前检查预算 / 权益
|
||||
不足则停止新调用并提示充值"]
|
||||
aiCall --> cost --> allowance
|
||||
allowance -->|"有"| deduct
|
||||
deduct -->|"如有超额部分"| excess
|
||||
allowance -->|"无"| excess
|
||||
excess --> example
|
||||
deduct --> gate
|
||||
excess --> gate
|
||||
|
After Width: | Height: | Size: 129 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="2569" height="486" viewBox="0 0 2569 486" role="img" aria-labelledby="G05-AI消耗记账Title G05-AI消耗记账Desc"><title id="G05-AI消耗记账Title">G05 收费与权益 · AI 实际消耗记账</title><desc id="G05-AI消耗记账Desc">真实充值、套餐内含 AI 用量、未来测试赠送是三类不同权益;年付服务与 AI 实际消耗分开计量。;2026-10-12,业务基线 0.14,图集版本 0.17</desc><rect width="100%" height="100%" fill="#fff"/><text x="32" y="42" font-family="Microsoft YaHei,Arial,sans-serif" font-size="28" font-weight="600" fill="#17233a">G05 · AI 实际消耗记账</text><text x="32" y="79" font-family="Microsoft YaHei,Arial,sans-serif" font-size="18" fill="#526176">2026-10-12 · 业务基线 0.14 · 图集 0.17 · 展开图 · 技术选型未定</text><g transform="translate(32,124)"><svg id="diagram05x1" width="2504.796875" xmlns="http://www.w3.org/2000/svg" class="flowchart" height="313.796875" viewBox="0 0 2504.796875 313.796875" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#diagram05x1{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;fill:#17233a;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram05x1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram05x1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram05x1 .error-icon{fill:#ffffff;}#diagram05x1 .error-text{fill:#000000;stroke:#000000;}#diagram05x1 .edge-thickness-normal{stroke-width:1px;}#diagram05x1 .edge-thickness-thick{stroke-width:3.5px;}#diagram05x1 .edge-pattern-solid{stroke-dasharray:0;}#diagram05x1 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram05x1 .edge-pattern-dashed{stroke-dasharray:3;}#diagram05x1 .edge-pattern-dotted{stroke-dasharray:2;}#diagram05x1 .marker{fill:#60718a;stroke:#60718a;}#diagram05x1 .marker.cross{stroke:#60718a;}#diagram05x1 svg{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;}#diagram05x1 p{margin:0;}#diagram05x1 .label{font-family:Microsoft YaHei,Arial,sans-serif;color:#17233a;}#diagram05x1 .cluster-label text{fill:#000000;}#diagram05x1 .cluster-label span{color:#000000;}#diagram05x1 .cluster-label span p{background-color:transparent;}#diagram05x1 .label text,#diagram05x1 span{fill:#17233a;color:#17233a;}#diagram05x1 .node rect,#diagram05x1 .node circle,#diagram05x1 .node ellipse,#diagram05x1 .node polygon,#diagram05x1 .node path{fill:#eef5ff;stroke:#8198bb;stroke-width:1px;}#diagram05x1 .rough-node .label text,#diagram05x1 .node .label text,#diagram05x1 .image-shape .label,#diagram05x1 .icon-shape .label{text-anchor:middle;}#diagram05x1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram05x1 .rough-node .label,#diagram05x1 .node .label,#diagram05x1 .image-shape .label,#diagram05x1 .icon-shape .label{text-align:center;}#diagram05x1 .node.clickable{cursor:pointer;}#diagram05x1 .root .anchor path{fill:#60718a!important;stroke-width:0;stroke:#60718a;}#diagram05x1 .arrowheadPath{fill:#0b0b0b;}#diagram05x1 .edgePath .path{stroke:#60718a;stroke-width:2.0px;}#diagram05x1 .flowchart-link{stroke:#60718a;fill:none;}#diagram05x1 .edgeLabel{background-color:#f3f8f6;text-align:center;}#diagram05x1 .edgeLabel p{background-color:#f3f8f6;}#diagram05x1 .edgeLabel rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram05x1 .labelBkg{background-color:rgba(243, 248, 246, 0.5);}#diagram05x1 .cluster rect{fill:#f8fafc;stroke:#cbd5e1;stroke-width:1px;}#diagram05x1 .cluster text{fill:#000000;}#diagram05x1 .cluster span{color:#000000;}#diagram05x1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:Microsoft YaHei,Arial,sans-serif;font-size:12px;background:#ffffff;border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#diagram05x1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#17233a;}#diagram05x1 rect.text{fill:none;stroke-width:0;}#diagram05x1 .icon-shape,#diagram05x1 .image-shape{background-color:#f3f8f6;text-align:center;}#diagram05x1 .icon-shape p,#diagram05x1 .image-shape p{background-color:#f3f8f6;padding:2px;}#diagram05x1 .icon-shape rect,#diagram05x1 .image-shape rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram05x1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram05x1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram05x1 :root{--mermaid-font-family:Microsoft YaHei,Arial,sans-serif;}</style><g><marker id="diagram05x1_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stLine truncated
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,98 @@
|
||||
# G05 收费与权益
|
||||
|
||||
2026-10-13 · 业务基线 0.15 · 图集版本 0.18。投影用 SVG 尚未按本次文字重绘。
|
||||
|
||||
**计费按客户使用不同模式。暂时只记用户报价模式和用户自由模式。下面原图是改模式之前的年付与积分基线,两种模式如何衔接尚未写完。**
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
customer["不同客户使用不同模式"]
|
||||
quote["用户报价模式
|
||||
创建时选择并报价
|
||||
后台查看后决定是否启动"]
|
||||
free["用户自由模式
|
||||
自选配置和 token 数量
|
||||
从预充值扣除"]
|
||||
customer --> quote
|
||||
customer --> free
|
||||
```
|
||||
|
||||
2026-10-12 原图仍保留作对照:真实充值、套餐内含 AI 用量、未来测试赠送是三类不同权益。
|
||||
|
||||

|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
recharge["客户真实充值
|
||||
默认 1 USD = 100 积分;允许小数"]
|
||||
paid["真实充值积分余额"]
|
||||
annual["正式年付套餐
|
||||
可包含初始开发、运维、运行资源"]
|
||||
independent["独立选配年度服务
|
||||
域名:成本加服务费
|
||||
邮箱:共享 / 独享"]
|
||||
manual["新增人工定制服务
|
||||
评估金额,客户确认后消费"]
|
||||
included["套餐内含 AI 用量
|
||||
正式项目可用;不是测试赠送"]
|
||||
usage["真实项目 AI 消耗
|
||||
先用内含用量,超额扣真实积分"]
|
||||
trial["后续:新客测试赠送权益
|
||||
独立记录,不可转真实余额"]
|
||||
preview["仅测试部署与受保护预览
|
||||
禁正式域名;可撤销和销毁"]
|
||||
pricing["后台可配置价格政策
|
||||
档位、费率、账户固定服务费、内含用量"]
|
||||
recharge --> paid
|
||||
paid -->|"购买"| annual
|
||||
paid -->|"购买"| independent
|
||||
paid -->|"确认金额后支付"| manual
|
||||
annual -->|"授予"| included
|
||||
included -->|"优先抵扣"| usage
|
||||
paid -->|"只支付超出包含用量的部分"| usage
|
||||
trial -.->|"仅限"| preview
|
||||
pricing --- annual
|
||||
pricing --- independent
|
||||
pricing --- manual
|
||||
pricing --- usage
|
||||
classDef future fill:#f4f4f5,stroke:#71717a,stroke-dasharray:5 4;
|
||||
class trial,preview future;
|
||||
```
|
||||
|
||||
## AI 调用如何记账
|
||||
|
||||

|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
aiCall["一次真实项目 AI 调用
|
||||
自动 / 人工辅助 / 失败 / 修复 / 转人工"]
|
||||
cost["核对供应商实际消耗成本
|
||||
记录调用与计费规则,防重复记账"]
|
||||
allowance{"套餐内含 AI 用量可抵扣?"}
|
||||
deduct["抵扣套餐内含用量"]
|
||||
excess["剩余超额部分
|
||||
按成本、可配置加价及积分汇率结算"]
|
||||
example["例:全部属于超额
|
||||
成本 1 USD × 1.20 × 100 = 120 积分"]
|
||||
gate["下一次调用前检查预算 / 权益
|
||||
不足则停止新调用并提示充值"]
|
||||
aiCall --> cost --> allowance
|
||||
allowance -->|"有"| deduct
|
||||
deduct -->|"如有超额部分"| excess
|
||||
allowance -->|"无"| excess
|
||||
excess --> example
|
||||
deduct --> gate
|
||||
excess --> gate
|
||||
```
|
||||
|
||||
会议说明:
|
||||
|
||||
- 熟客账户可配置固定项目服务费,与正常套餐/选配合计匹配既有合作价。套餐可含初始开发,不能理解为只卖计算资源,也不等于所有未来开发免费。
|
||||
- 包含用量可以覆盖部分 AI 消耗;只对剩余超额结算。实际成本按供应商模型用量核对,不用“普通 token 总数”统一单价,不以客户满意或产出文件数作为计费依据。
|
||||
- 人工服务金额与超额 AI 消耗分别展示。同一项 AI 费用不得重复包含/另扣;没有 AI 调用的固定运维不能凭空收费为 token。
|
||||
- 域名、邮箱按独立年度服务计算;共享数据库/存储只记一份购买项。共享邮箱池与独享账号的成本、容量及人工准备方式不同,具体价目在后台配置。
|
||||
- 首期年付,不建系统内退款或按月提前退役退款;退役释放运行数据资源但保留代码/启动配置,不退年费。特殊差额线下处理。年付运行权益不会因为 AI 余额不足而中途停止。
|
||||
- 未来测试赠送只能测试预览,**不能支付正式套餐、购买域名/邮箱、绑定正式域名或兑换真实积分**。平台可销毁试用资源;授予额度、期限与反滥用细则不属于本轮定案。
|
||||
|
||||
依据:[05 商业模式](../05-商业模式与成本指标.md)、[07 决策 D073–D080](../07-待确认问题与决策记录.md)。Mermaid 用法参考 [官方文档](https://mermaid.js.org/config/usage.html)。[返回图集](README.md)。
|
||||
@@ -0,0 +1,35 @@
|
||||
flowchart TB
|
||||
recharge["客户真实充值
|
||||
默认 1 USD = 100 积分;允许小数"]
|
||||
paid["真实充值积分余额"]
|
||||
annual["正式年付套餐
|
||||
可包含初始开发、运维、运行资源"]
|
||||
independent["独立选配年度服务
|
||||
域名:成本加服务费
|
||||
邮箱:共享 / 独享"]
|
||||
manual["新增人工定制服务
|
||||
评估金额,客户确认后消费"]
|
||||
included["套餐内含 AI 用量
|
||||
正式项目可用;不是测试赠送"]
|
||||
usage["真实项目 AI 消耗
|
||||
先用内含用量,超额扣真实积分"]
|
||||
trial["后续:新客测试赠送权益
|
||||
独立记录,不可转真实余额"]
|
||||
preview["仅测试部署与受保护预览
|
||||
禁正式域名;可撤销和销毁"]
|
||||
pricing["后台可配置价格政策
|
||||
档位、费率、账户固定服务费、内含用量"]
|
||||
recharge --> paid
|
||||
paid -->|"购买"| annual
|
||||
paid -->|"购买"| independent
|
||||
paid -->|"确认金额后支付"| manual
|
||||
annual -->|"授予"| included
|
||||
included -->|"优先抵扣"| usage
|
||||
paid -->|"只支付超出包含用量的部分"| usage
|
||||
trial -.->|"仅限"| preview
|
||||
pricing --- annual
|
||||
pricing --- independent
|
||||
pricing --- manual
|
||||
pricing --- usage
|
||||
classDef future fill:#f4f4f5,stroke:#71717a,stroke-dasharray:5 4;
|
||||
class trial,preview future;
|
||||
|
After Width: | Height: | Size: 257 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1465" height="1132" viewBox="0 0 1465 1132" role="img" aria-labelledby="G05-收费与权益Title G05-收费与权益Desc"><title id="G05-收费与权益Title">G05 收费与权益 · 收费与权益</title><desc id="G05-收费与权益Desc">真实充值、套餐内含 AI 用量、未来测试赠送是三类不同权益;年付服务与 AI 实际消耗分开计量。;2026-10-12,业务基线 0.14,图集版本 0.17</desc><rect width="100%" height="100%" fill="#fff"/><text x="32" y="42" font-family="Microsoft YaHei,Arial,sans-serif" font-size="28" font-weight="600" fill="#17233a">G05 收费与权益</text><text x="32" y="79" font-family="Microsoft YaHei,Arial,sans-serif" font-size="18" fill="#526176">2026-10-12 · 业务基线 0.14 · 图集 0.17 · 主图 · 技术选型未定</text><g transform="translate(32,124)"><svg id="diagram05x0" width="1400.75" xmlns="http://www.w3.org/2000/svg" class="flowchart" height="960" viewBox="0 0 1400.75 960" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#diagram05x0{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;fill:#17233a;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram05x0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram05x0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram05x0 .error-icon{fill:#ffffff;}#diagram05x0 .error-text{fill:#000000;stroke:#000000;}#diagram05x0 .edge-thickness-normal{stroke-width:1px;}#diagram05x0 .edge-thickness-thick{stroke-width:3.5px;}#diagram05x0 .edge-pattern-solid{stroke-dasharray:0;}#diagram05x0 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram05x0 .edge-pattern-dashed{stroke-dasharray:3;}#diagram05x0 .edge-pattern-dotted{stroke-dasharray:2;}#diagram05x0 .marker{fill:#60718a;stroke:#60718a;}#diagram05x0 .marker.cross{stroke:#60718a;}#diagram05x0 svg{font-family:Microsoft YaHei,Arial,sans-serif;font-size:20px;}#diagram05x0 p{margin:0;}#diagram05x0 .label{font-family:Microsoft YaHei,Arial,sans-serif;color:#17233a;}#diagram05x0 .cluster-label text{fill:#000000;}#diagram05x0 .cluster-label span{color:#000000;}#diagram05x0 .cluster-label span p{background-color:transparent;}#diagram05x0 .label text,#diagram05x0 span{fill:#17233a;color:#17233a;}#diagram05x0 .node rect,#diagram05x0 .node circle,#diagram05x0 .node ellipse,#diagram05x0 .node polygon,#diagram05x0 .node path{fill:#eef5ff;stroke:#8198bb;stroke-width:1px;}#diagram05x0 .rough-node .label text,#diagram05x0 .node .label text,#diagram05x0 .image-shape .label,#diagram05x0 .icon-shape .label{text-anchor:middle;}#diagram05x0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram05x0 .rough-node .label,#diagram05x0 .node .label,#diagram05x0 .image-shape .label,#diagram05x0 .icon-shape .label{text-align:center;}#diagram05x0 .node.clickable{cursor:pointer;}#diagram05x0 .root .anchor path{fill:#60718a!important;stroke-width:0;stroke:#60718a;}#diagram05x0 .arrowheadPath{fill:#0b0b0b;}#diagram05x0 .edgePath .path{stroke:#60718a;stroke-width:2.0px;}#diagram05x0 .flowchart-link{stroke:#60718a;fill:none;}#diagram05x0 .edgeLabel{background-color:#f3f8f6;text-align:center;}#diagram05x0 .edgeLabel p{background-color:#f3f8f6;}#diagram05x0 .edgeLabel rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram05x0 .labelBkg{background-color:rgba(243, 248, 246, 0.5);}#diagram05x0 .cluster rect{fill:#f8fafc;stroke:#cbd5e1;stroke-width:1px;}#diagram05x0 .cluster text{fill:#000000;}#diagram05x0 .cluster span{color:#000000;}#diagram05x0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:Microsoft YaHei,Arial,sans-serif;font-size:12px;background:#ffffff;border:1px solid hsl(0, 0%, 90%);border-radius:2px;pointer-events:none;z-index:100;}#diagram05x0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#17233a;}#diagram05x0 rect.text{fill:none;stroke-width:0;}#diagram05x0 .icon-shape,#diagram05x0 .image-shape{background-color:#f3f8f6;text-align:center;}#diagram05x0 .icon-shape p,#diagram05x0 .image-shape p{background-color:#f3f8f6;padding:2px;}#diagram05x0 .icon-shape rect,#diagram05x0 .image-shape rect{opacity:0.5;background-color:#f3f8f6;fill:#f3f8f6;}#diagram05x0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram05x0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram05x0 :root{--mermaid-font-family:Microsoft YaHei,Arial,sans-serif;}#diagram05x0 .future rect{fill:#f4f4f5!important;stroke:#71717a!important;stroke-dasharray:5 4!important;}#diagram05x0 .future polygon{fill:#f4f4f5!important;stroke:#71717a!important;stroke-dasharray:5 4!important;}#diagram05x0 .future ellipse{fill:#f4f4f5!important;stroke:#71717a!important;stroke-Line truncated
|
||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,32 @@
|
||||
# G01–G05 产品会议图集
|
||||
|
||||
2026-10-13 · 业务基线 0.15 · 目录协作版本 0.18。
|
||||
|
||||
**可编辑 Markdown 已按 D085–D088 改过。离线会议图集里的 SVG 仍是 2026-10-12 的图,和文字不一致的地方以 Markdown 为准。** 打开 [离线会议图集](G01-G05-会议图集.html) 时请配合各图 Markdown 的补充说明。
|
||||
|
||||
| 图号 | 表达的结论 | 可编辑 Markdown |
|
||||
| --- | --- | --- |
|
||||
| G01 | 销售应用技术封装和定制能力,基础服务支持交付与成本覆盖 | [产品业务全景](G01-产品业务全景.md) |
|
||||
| G02 | 项目、APP、组件、资源和服务分开建模,通过显式关系关联 | [领域概念关系](G02-领域概念关系.md) |
|
||||
| G03 | 普通向导与高级配置分开,扣款后跟踪实际开通结果 | [购买与开通](G03-购买与开通.md) |
|
||||
| G04 | 明确需求的单项目工单,自动/人工接续,核验后直接更新运行版本 | [定制工单处理](G04-定制工单处理.md) |
|
||||
| G05 | 年付、真实积分、套餐内含 AI 和测试赠送按不同规则消费 | [收费与权益](G05-收费与权益.md) |
|
||||
|
||||
这五个主题足以说明当前产品概念,不能替代全部正文。G06 生命周期、G07 首期边界、G08 数据流仍在 [图表计划](../10-会议图表与可视化计划.md)中,尚未生成;数据库、执行器和部署技术架构也未定案。
|
||||
|
||||
## 阅读、分享与修改
|
||||
|
||||
- `.md` 是唯一编辑源:含 Mermaid 代码块、图形预览、业务边界和依据。支持 Mermaid 的 Markdown 阅读器可直接渲染代码块;不支持时仍可阅读文字及已导出的图形。
|
||||
- `.svg` 是可缩放展示图,`.png` 适合插入会议材料;`.mmd` 是从 Markdown 提取的绘图源,避免另行修改导致两份内容不一致。
|
||||
- 主图之外,G02 有工单/费用关系与三个项目例子,G04 有失败/恢复,G05 有实际 AI 消耗记账。需要时展开,不要求第一遍逐个解释。
|
||||
- 实线表达确认关系;虚线框/线和“后续 / 待定”文字表示未来或候选。泳道中的虚线返回箭头表示结果反馈,不表示该流程未确认。不可只凭颜色判断状态。
|
||||
- 图中模块是业务能力,概念关系不是数据库表关系;年度套餐、默认积分汇率等也不是已经实施的系统。发现图与正文差异,应按人类决定核查并同步修订。
|
||||
- 给同事发送整个 `ai-web-delivery` 目录,保留规范、源文档、07/08 和交接记录;不要只发 PNG。新 AI 从上级 README/AGENTS 恢复,随后读取本图集。
|
||||
|
||||
## 重新生成
|
||||
|
||||
修改 `.md` 中 Mermaid 代码后,使用 `render-diagrams.cjs` 重新生成展示文件;需要 Node.js、Playwright 与 Chromium 浏览器。脚本默认使用本机已存在的运行依赖和 Edge,可用 `DIAGRAM_NODE_MODULES`、`DIAGRAM_BROWSER` 指定其他电脑的依赖/浏览器绝对路径。缺少渲染依赖只影响重新导出,不影响阅读 Markdown 和现有离线图集。
|
||||
|
||||
渲染器固定 Mermaid 11.12.0;首次重绘会下载该版本的官方 npm 分发文件至 `.render-cache`。缓存和检查截图不是业务资料,可不随目录移交。`render-manifest.json` 记录图集版本与实际导出尺寸;业务/格式校验及摘要见 [H0003](../handoffs/H0003-2026-10-12-G01至G05会议图集.md)。
|
||||
|
||||
[返回项目入口](../README.md) · [当前讨论状态](../08-当前讨论状态.md)
|
||||
@@ -0,0 +1,93 @@
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
|
||||
// 文档是唯一编辑源;本脚本只生成图集和展示文件。
|
||||
const root = __dirname;
|
||||
const bundlePackages = process.env.DIAGRAM_NODE_MODULES || 'C:/Users/mk/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/node_modules';
|
||||
const { chromium } = require(path.join(bundlePackages, 'playwright'));
|
||||
const escapeHtml = text => text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('"', '"');
|
||||
const files = fs.readdirSync(root).filter(name => /^G0[1-5]-.+\.md$/.test(name)).sort();
|
||||
|
||||
async function main() {
|
||||
const cache = path.join(root, '.render-cache');
|
||||
fs.mkdirSync(cache, { recursive: true });
|
||||
const library = path.join(cache, 'mermaid-11.12.0.min.js');
|
||||
if (!fs.existsSync(library)) {
|
||||
const response = await fetch('https://cdn.jsdelivr.net/npm/[email protected]/dist/mermaid.min.js');
|
||||
if (!response.ok) throw new Error(`Mermaid download: ${response.status}`);
|
||||
fs.writeFileSync(library, await response.text());
|
||||
}
|
||||
const executablePath = process.env.DIAGRAM_BROWSER || 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe';
|
||||
const browser = await chromium.launch({ executablePath, headless: true });
|
||||
const page = await browser.newPage({ viewport: { width: 1800, height: 1200 }, deviceScaleFactor: 1.5 });
|
||||
await page.setContent('<!doctype html><html lang="zh-CN"><meta charset="utf-8"><style>body{margin:0;font-family:"Microsoft YaHei",sans-serif}#canvas{background:white}svg{display:block}</style><div id="canvas"></div></html>');
|
||||
await page.addScriptTag({ path: library });
|
||||
await page.evaluate(() => mermaid.initialize({
|
||||
startOnLoad: false, securityLevel: 'strict', theme: 'base',
|
||||
fontFamily: 'Microsoft YaHei, Arial, sans-serif',
|
||||
themeVariables: {
|
||||
fontSize: '20px', primaryColor: '#eef5ff', primaryTextColor: '#17233a', primaryBorderColor: '#8198bb',
|
||||
lineColor: '#60718a', secondaryColor: '#f3f8f6', tertiaryColor: '#ffffff',
|
||||
clusterBkg: '#f8fafc', clusterBorder: '#cbd5e1', actorBkg: '#edf3fb', actorBorder: '#8198bb',
|
||||
actorTextColor: '#17233a', signalColor: '#334155', signalTextColor: '#17233a',
|
||||
labelBoxBkgColor: '#f3f6fa', labelBoxBorderColor: '#9aabc1', labelTextColor: '#17233a',
|
||||
loopTextColor: '#17233a', noteBkgColor: '#fffbea', noteBorderColor: '#d4c79f', noteTextColor: '#17233a'
|
||||
},
|
||||
flowchart: { htmlLabels: false, useMaxWidth: false, nodeSpacing: 32, rankSpacing: 58, padding: 18, wrappingWidth: 310, curve: 'basis' },
|
||||
sequence: { useMaxWidth: false, wrap: true, width: 240, actorMargin: 62, diagramMarginX: 30, diagramMarginY: 20, messageMargin: 40, boxMargin: 14, mirrorActors: false }
|
||||
}));
|
||||
const manifest = [];
|
||||
for (const file of files) {
|
||||
const md = fs.readFileSync(path.join(root, file), 'utf8');
|
||||
const title = md.match(/^# (.+)$/m)[1];
|
||||
const conclusion = md.match(/^\*\*(.+)\*\*$/m)[1];
|
||||
const sources = [...md.matchAll(/```mermaid\r?\n([\s\S]+?)\r?\n```/g)];
|
||||
const images = [...md.matchAll(/!\[([^\]]+)\]\(([^)]+)\.svg\)/g)];
|
||||
if (sources.length !== images.length) throw new Error(`${file}: sources and images differ`);
|
||||
const diagrams = [];
|
||||
for (let index = 0; index < sources.length; index++) {
|
||||
const name = images[index][2];
|
||||
const source = sources[index][1];
|
||||
fs.writeFileSync(path.join(root, `${name}.mmd`), source + '\n');
|
||||
const rendered = await page.evaluate(async ({ source, id }) => {
|
||||
const { svg } = await mermaid.render(id, source);
|
||||
document.getElementById('canvas').innerHTML = svg;
|
||||
const element = document.querySelector('#canvas svg');
|
||||
const view = element.viewBox.baseVal;
|
||||
return { svg, width: view.width, height: view.height };
|
||||
}, { source, id: `diagram${file.slice(1, 3)}x${index}` });
|
||||
if (!rendered.width || !rendered.height || /Syntax error/.test(rendered.svg)) throw new Error(`${name}: invalid render`);
|
||||
const header = 124;
|
||||
const width = Math.max(1000, Math.ceil(rendered.width + 64));
|
||||
const height = Math.ceil(rendered.height + header + 48);
|
||||
const wrapped = `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" role="img" aria-labelledby="${name}Title ${name}Desc"><title id="${name}Title">${escapeHtml(title)} · ${escapeHtml(images[index][1])}</title><desc id="${name}Desc">${escapeHtml(conclusion)};2026-10-12,业务基线 0.14,图集版本 0.17</desc><rect width="100%" height="100%" fill="#fff"/><text x="32" y="42" font-family="Microsoft YaHei,Arial,sans-serif" font-size="28" font-weight="600" fill="#17233a">${escapeHtml(index ? `${title.slice(0, 3)} · ${images[index][1]}` : title)}</text><text x="32" y="79" font-family="Microsoft YaHei,Arial,sans-serif" font-size="18" fill="#526176">2026-10-12 · 业务基线 0.14 · 图集 0.17 · ${index ? '展开图' : '主图'} · 技术选型未定</text><g transform="translate(${Math.round((width - rendered.width) / 2)},${header})">${rendered.svg}</g></svg>`;
|
||||
fs.writeFileSync(path.join(root, `${name}.svg`), wrapped);
|
||||
await page.evaluate(svg => { document.getElementById('canvas').innerHTML = svg; }, wrapped);
|
||||
const scale = Math.min(1, 2200 / width);
|
||||
await page.evaluate(({ width, height }) => {
|
||||
const svg = document.querySelector('#canvas > svg');
|
||||
svg.style.width = `${width}px`;
|
||||
svg.style.height = `${height}px`;
|
||||
document.getElementById('canvas').style.width = `${width}px`;
|
||||
}, { width: Math.ceil(width * scale), height: Math.ceil(height * scale) });
|
||||
await page.locator('#canvas').screenshot({ path: path.join(root, `${name}.png`) });
|
||||
diagrams.push({ name, label: images[index][1], width, height, svg: wrapped });
|
||||
console.log(`${name}: ${width}x${height}`);
|
||||
}
|
||||
manifest.push({ file, title, conclusion, diagrams });
|
||||
}
|
||||
const menu = manifest.map((entry, index) => `<button type="button" data-index="${index}" aria-pressed="${index === 0}">${escapeHtml(entry.title)}</button>`).join('');
|
||||
const panels = manifest.map((entry, index) => `<section id="panel${index}" ${index ? 'hidden' : ''}><h1>${escapeHtml(entry.title)}</h1><p class="lead">${escapeHtml(entry.conclusion)}</p><p class="links"><a href="${escapeHtml(entry.file)}">阅读 Markdown 与编辑源</a>${entry.diagrams.map(graph => ` · <a href="${escapeHtml(graph.name)}.svg">${escapeHtml(graph.label)} SVG</a> · <a href="${escapeHtml(graph.name)}.png">PNG</a>`).join('')}</p>${entry.diagrams.map(graph => `<article><h2>${escapeHtml(graph.label)}</h2><div class="diagram">${graph.svg}</div></article>`).join('')}</section>`).join('');
|
||||
const html = `<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>AI 软件交付平台 · G01–G05 会议图集</title><style>
|
||||
*{box-sizing:border-box}body{margin:0;background:#f2f5fa;color:#17233a;font-family:"Microsoft YaHei",Arial,sans-serif;font-size:16px}header{background:#fff;padding:20px 28px;border-bottom:1px solid #dce3ed}header p{margin:4px 0;color:#526176}nav{display:flex;gap:8px;flex-wrap:wrap;margin-top:16px}button{font:inherit;border:1px solid #cbd5e1;border-radius:6px;background:#fff;padding:10px 14px;color:#17233a;cursor:pointer}button[aria-pressed=true]{background:#253f6b;color:#fff;border-color:#253f6b}main{padding:24px 28px}h1{font-size:28px;margin:0 0 12px}h2{font-size:19px;margin:0 0 12px}.lead{line-height:1.8;margin:0 0 10px}.links{font-size:14px;line-height:1.8}a{color:#245b98}article{background:white;border-radius:8px;padding:20px;margin:20px 0;border:1px solid #dce3ed}.diagram{overflow:auto}.diagram>svg{width:100%;height:auto;min-width:1000px;display:block}footer{color:#526176;font-size:14px;line-height:1.8;margin-top:20px}@media(max-width:700px){header,main{padding:16px}article{padding:12px}h1{font-size:24px}}@media print{nav,header,.links{display:none}body,main{background:white;padding:0}section[hidden]{display:block!important}article{break-inside:avoid;page-break-after:always;border:0;padding:0}.diagram{overflow:visible}.diagram>svg{min-width:0}footer{display:none}}
|
||||
</style></head><body><header><strong>AI 软件交付与持续服务平台 · 会议图集</strong><p>G01–G05 · 2026-10-12 · 业务基线 0.14 · 图集 0.17</p><nav aria-label="选择图表">${menu}</nav></header><main>${panels}<footer>虚线及“后续 / 待定”文字表示目标能力或候选,不代表首期承诺。图表达业务与概念,技术架构未定案。完整规则及图内省略的分支请查看对应 Markdown;附图用于会中展开。此图集已内嵌图形,可离线打开。</footer></main><script>document.querySelectorAll('nav button').forEach(button=>button.addEventListener('click',()=>{document.querySelectorAll('nav button').forEach(peer=>peer.setAttribute('aria-pressed',String(peer===button)));document.querySelectorAll('main section').forEach((panel,index)=>panel.hidden=index!==Number(button.dataset.index));}));</script></body></html>`;
|
||||
fs.writeFileSync(path.join(root, 'G01-G05-会议图集.html'), html);
|
||||
fs.writeFileSync(path.join(root, 'render-manifest.json'), JSON.stringify({ date: '2026-10-12', baseline: '0.14', version: '0.17', mermaid: '11.12.0', diagrams: manifest.map(({ file, title, diagrams }) => ({ file, title, diagrams: diagrams.map(({ svg, ...graph }) => graph) })) }, null, 2) + '\n');
|
||||
await page.goto('file:///' + path.join(root, 'G01-G05-会议图集.html').replaceAll('\\', '/'));
|
||||
for (let index = 0; index < manifest.length; index++) {
|
||||
await page.locator(`button[data-index="${index}"]`).click();
|
||||
await page.screenshot({ path: path.join(cache, `review-G0${index + 1}.png`), fullPage: true });
|
||||
}
|
||||
await browser.close();
|
||||
}
|
||||
main().catch(error => { console.error(error); process.exit(1); });
|
||||
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"date": "2026-10-12",
|
||||
"baseline": "0.14",
|
||||
"version": "0.17",
|
||||
"mermaid": "11.12.0",
|
||||
"diagrams": [
|
||||
{
|
||||
"file": "G01-产品业务全景.md",
|
||||
"title": "G01 产品业务全景",
|
||||
"diagrams": [
|
||||
{
|
||||
"name": "G01-产品业务全景",
|
||||
"label": "产品业务全景",
|
||||
"width": 1657,
|
||||
"height": 1082
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "G02-领域概念关系.md",
|
||||
"title": "G02 领域概念关系",
|
||||
"diagrams": [
|
||||
{
|
||||
"name": "G02-领域概念关系",
|
||||
"label": "领域概念关系",
|
||||
"width": 1062,
|
||||
"height": 1012
|
||||
},
|
||||
{
|
||||
"name": "G02-工单与购买项",
|
||||
"label": "工单与购买项",
|
||||
"width": 1000,
|
||||
"height": 1298
|
||||
},
|
||||
{
|
||||
"name": "G02-项目组成例子",
|
||||
"label": "项目组成例子",
|
||||
"width": 1107,
|
||||
"height": 887
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "G03-购买与开通.md",
|
||||
"title": "G03 购买与开通",
|
||||
"diagrams": [
|
||||
{
|
||||
"name": "G03-购买与开通",
|
||||
"label": "购买与开通",
|
||||
"width": 1294,
|
||||
"height": 1667
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "G04-定制工单处理.md",
|
||||
"title": "G04 定制工单处理",
|
||||
"diagrams": [
|
||||
{
|
||||
"name": "G04-定制工单处理",
|
||||
"label": "定制工单主流程",
|
||||
"width": 1596,
|
||||
"height": 1744
|
||||
},
|
||||
{
|
||||
"name": "G04-失败与恢复",
|
||||
"label": "失败与恢复",
|
||||
"width": 3685,
|
||||
"height": 751
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "G05-收费与权益.md",
|
||||
"title": "G05 收费与权益",
|
||||
"diagrams": [
|
||||
{
|
||||
"name": "G05-收费与权益",
|
||||
"label": "收费与权益",
|
||||
"width": 1465,
|
||||
"height": 1132
|
||||
},
|
||||
{
|
||||
"name": "G05-AI消耗记账",
|
||||
"label": "AI 实际消耗记账",
|
||||
"width": 2569,
|
||||
"height": 486
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||