Files
wiki/crmeb-mer-graph-report.html
T
2026-05-14 16:56:48 +08:00

963 lines
34 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CRMEB-MER 项目图谱报告</title>
<style>
/* ===== Design Tokens ===== */
:root {
--color-primary: #1677FF;
--color-primary-hover: #4096FF;
--color-primary-active: #0958D9;
--color-primary-bg: #E6F4FF;
--color-success: #52C41A;
--color-warning: #FAAD14;
--color-error: #FF4D4F;
--color-info: #1677FF;
--bg: #F5F5F5;
--bg-container: #FFFFFF;
--bg-elevated: #FAFAFA;
--border: #D9D9D9;
--border-light: #F0F0F0;
--text-primary: #141414;
--text-secondary: #595959;
--text-tertiary: #8C8C8C;
--gradient-title: linear-gradient(135deg, #1677FF 0%, #722ED1 100%);
--gradient-success: linear-gradient(135deg, #52C41A 0%, #1677FF 100%);
--radius-xs: 2px;
--radius-sm: 6px;
--radius-md: 8px;
--radius-lg: 12px;
--space-xs: 4px;
--space-sm: 8px;
--space-md: 12px;
--space-lg: 16px;
--space-xl: 24px;
--space-2xl: 32px;
--space-3xl: 48px;
--shadow-sm: 0 1px 2px rgba(0,0,0,0.03), 0 1px 6px -1px rgba(0,0,0,0.02);
--shadow-md: 0 2px 4px rgba(0,0,0,0.04), 0 4px 12px -2px rgba(0,0,0,0.04);
--shadow-lg: 0 4px 8px rgba(0,0,0,0.06), 0 8px 24px -4px rgba(0,0,0,0.08);
}
/* ===== Reset & Base ===== */
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 22px;
color: var(--text-primary);
background: var(--bg);
min-height: 100vh;
}
/* ===== Header ===== */
.header {
height: 64px;
background: var(--bg-container);
border-bottom: 1px solid var(--border-light);
box-shadow: var(--shadow-sm);
display: flex;
align-items: center;
padding: 0 var(--space-xl);
position: sticky;
top: 0;
z-index: 100;
}
.header-inner {
max-width: 1200px;
width: 100%;
margin: 0 auto;
display: flex;
align-items: center;
justify-content: space-between;
}
.header-title {
font-size: 18px;
font-weight: 700;
background: var(--gradient-title);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.header-meta {
font-size: 12px;
color: var(--text-tertiary);
}
/* ===== Layout ===== */
.container {
max-width: 1200px;
margin: 0 auto;
padding: var(--space-2xl) var(--space-xl);
}
/* ===== Summary Cards ===== */
.summary-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: var(--space-lg);
margin-bottom: var(--space-2xl);
}
.summary-card {
background: var(--bg-container);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: var(--space-xl);
transition: all 0.2s ease;
position: relative;
overflow: hidden;
}
.summary-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: var(--gradient-title);
}
.summary-card:nth-child(2)::before { background: var(--gradient-success); }
.summary-card:nth-child(3)::before { background: linear-gradient(135deg, #FAAD14 0%, #FF4D4F 100%); }
.summary-card:nth-child(4)::before { background: linear-gradient(135deg, #722ED1 0%, #1677FF 100%); }
.summary-card:hover {
border-color: var(--color-primary);
box-shadow: var(--shadow-md);
}
.summary-label {
font-size: 12px;
color: var(--text-tertiary);
margin-bottom: var(--space-sm);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.summary-value {
font-size: 30px;
font-weight: 700;
color: var(--text-primary);
line-height: 38px;
}
.summary-sub {
font-size: 12px;
color: var(--text-secondary);
margin-top: var(--space-xs);
}
/* ===== Section ===== */
.section {
margin-bottom: var(--space-2xl);
}
.section-title {
font-size: 24px;
font-weight: 600;
line-height: 32px;
color: var(--text-primary);
margin-bottom: var(--space-xl);
display: flex;
align-items: center;
gap: var(--space-sm);
}
.section-title::before {
content: '';
width: 4px;
height: 24px;
background: var(--gradient-title);
border-radius: 2px;
}
.sub-section-title {
font-size: 20px;
font-weight: 600;
line-height: 28px;
color: var(--text-primary);
margin-bottom: var(--space-lg);
}
/* ===== Card ===== */
.card {
background: var(--bg-container);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: var(--space-xl);
transition: all 0.2s ease;
margin-bottom: var(--space-lg);
}
.card:hover {
border-color: var(--color-primary);
box-shadow: var(--shadow-md);
}
.card-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: var(--space-md);
}
.card-title {
font-size: 16px;
font-weight: 600;
line-height: 24px;
color: var(--text-primary);
}
/* ===== Badge ===== */
.badge {
display: inline-block;
padding: 2px 10px;
border-radius: 12px;
font-size: 12px;
font-weight: 600;
}
.badge-primary {
background: rgba(22, 119, 255, 0.1);
border: 1px solid rgba(22, 119, 255, 0.25);
color: var(--color-primary);
}
.badge-success {
background: rgba(82, 196, 26, 0.1);
border: 1px solid rgba(82, 196, 26, 0.25);
color: var(--color-success);
}
.badge-warning {
background: rgba(250, 173, 20, 0.1);
border: 1px solid rgba(250, 173, 20, 0.25);
color: var(--color-warning);
}
.badge-error {
background: rgba(255, 77, 79, 0.1);
border: 1px solid rgba(255, 77, 79, 0.25);
color: var(--color-error);
}
/* ===== Table ===== */
.table-wrapper {
overflow-x: auto;
border: 1px solid var(--border);
border-radius: var(--radius-md);
}
table {
width: 100%;
border-collapse: collapse;
}
thead th {
background: var(--bg-elevated);
font-weight: 600;
text-align: left;
padding: 10px 14px;
border-bottom: 1px solid var(--border);
position: sticky;
top: 0;
font-size: 13px;
color: var(--text-secondary);
}
tbody td {
padding: 10px 14px;
border-bottom: 1px solid var(--border-light);
background: var(--bg-container);
font-size: 14px;
}
tbody tr:hover td {
background: var(--color-primary-bg);
}
tbody tr:last-child td {
border-bottom: none;
}
/* ===== Code ===== */
code {
font-family: 'SF Mono', 'Menlo', 'Monaco', 'Courier New', monospace;
background: var(--bg-elevated);
padding: 2px 8px;
border-radius: 4px;
font-size: 13px;
color: var(--color-success);
}
.code-block {
background: var(--bg-elevated);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: var(--space-lg);
line-height: 1.7;
overflow-x: auto;
font-family: 'SF Mono', 'Menlo', 'Monaco', 'Courier New', monospace;
font-size: 13px;
}
/* ===== God Nodes ===== */
.god-nodes-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: var(--space-md);
}
.god-node-item {
background: var(--bg-elevated);
border: 1px solid var(--border-light);
border-radius: var(--radius-sm);
padding: var(--space-md) var(--space-lg);
display: flex;
align-items: center;
justify-content: space-between;
}
.god-node-name {
font-family: 'SF Mono', 'Menlo', 'Monaco', 'Courier New', monospace;
font-size: 13px;
color: var(--text-primary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 200px;
}
.god-node-degree {
font-weight: 700;
color: var(--color-primary);
font-size: 16px;
flex-shrink: 0;
}
/* ===== Progress Bar ===== */
.progress-bar {
height: 8px;
background: var(--bg-elevated);
border-radius: 4px;
overflow: hidden;
margin-top: var(--space-sm);
}
.progress-fill {
height: 100%;
border-radius: 4px;
transition: width 0.3s ease;
}
.progress-extracted { background: var(--gradient-title); }
.progress-inferred { background: var(--gradient-success); }
/* ===== Architecture Section ===== */
.arch-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--space-lg);
}
.arch-card {
background: var(--bg-container);
border: 1px solid var(--border);
border-radius: var(--radius-md);
padding: var(--space-xl);
transition: all 0.2s ease;
}
.arch-card:hover {
border-color: var(--color-primary);
box-shadow: var(--shadow-md);
}
.arch-card-icon {
width: 40px;
height: 40px;
border-radius: var(--radius-md);
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
margin-bottom: var(--space-md);
}
.arch-card-icon.java { background: rgba(22, 119, 255, 0.1); color: var(--color-primary); }
.arch-card-icon.vue { background: rgba(82, 196, 26, 0.1); color: var(--color-success); }
.arch-card-icon.uni { background: rgba(250, 173, 20, 0.1); color: var(--color-warning); }
.arch-card-title {
font-size: 16px;
font-weight: 600;
margin-bottom: var(--space-sm);
color: var(--text-primary);
}
.arch-card-desc {
font-size: 13px;
color: var(--text-secondary);
line-height: 20px;
}
.arch-card-list {
list-style: none;
margin-top: var(--space-md);
}
.arch-card-list li {
font-size: 13px;
color: var(--text-secondary);
padding: var(--space-xs) 0;
padding-left: var(--space-md);
position: relative;
}
.arch-card-list li::before {
content: '·';
position: absolute;
left: 0;
color: var(--color-primary);
font-weight: 700;
}
/* ===== Community Table Specific ===== */
.community-detail {
margin-bottom: var(--space-xl);
}
.community-header {
display: flex;
align-items: center;
gap: var(--space-md);
margin-bottom: var(--space-md);
}
.community-id {
font-size: 12px;
color: var(--text-tertiary);
}
.community-members {
display: flex;
flex-wrap: wrap;
gap: var(--space-xs);
}
.member-tag {
display: inline-block;
padding: 2px 8px;
border-radius: var(--radius-xs);
font-size: 12px;
font-family: 'SF Mono', 'Menlo', 'Monaco', 'Courier New', monospace;
background: var(--bg-elevated);
border: 1px solid var(--border-light);
color: var(--text-secondary);
}
/* ===== Footer ===== */
.footer {
text-align: center;
padding: var(--space-2xl) 0;
color: var(--text-tertiary);
font-size: 12px;
border-top: 1px solid var(--border-light);
margin-top: var(--space-3xl);
}
/* ===== Responsive ===== */
@media (max-width: 992px) {
.summary-grid { grid-template-columns: repeat(2, 1fr); }
.arch-grid { grid-template-columns: repeat(2, 1fr); }
.container { padding: var(--space-xl) var(--space-md); }
}
@media (max-width: 768px) {
.summary-grid { grid-template-columns: 1fr; }
.arch-grid { grid-template-columns: 1fr; }
.god-nodes-grid { grid-template-columns: 1fr; }
.header { padding: 0 var(--space-md); }
}
/* ===== Scrollbar ===== */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: var(--bg-elevated); }
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--text-tertiary); }
</style>
</head>
<body>
<!-- ===== Header ===== -->
<header class="header">
<div class="header-inner">
<div class="header-title">CRMEB-MER 项目图谱报告</div>
<div class="header-meta">graphify-rs · 2026-05-06 · JAVA-MER-2.2</div>
</div>
</header>
<main class="container">
<!-- ===== Summary ===== -->
<section class="section">
<div class="section-title">项目概览</div>
<div class="summary-grid">
<div class="summary-card">
<div class="summary-label">节点数</div>
<div class="summary-value">36,835</div>
<div class="summary-sub">AST 解析 + 推理</div>
</div>
<div class="summary-card">
<div class="summary-label">边数</div>
<div class="summary-value">52,059</div>
<div class="summary-sub">引用 / 调用 / 导入</div>
</div>
<div class="summary-card">
<div class="summary-label">社区数</div>
<div class="summary-value">3,103</div>
<div class="summary-sub">Louvain 社群检测</div>
</div>
<div class="summary-card">
<div class="summary-label">文件数</div>
<div class="summary-value">4,086</div>
<div class="summary-sub">2,616 代码 / 24 文档 / 1,446 图片</div>
</div>
</div>
<!-- Confidence -->
<div class="card">
<div class="card-title">置信度分布</div>
<div style="display: flex; gap: var(--space-2xl); margin-top: var(--space-lg);">
<div style="flex: 1;">
<div style="display: flex; justify-content: space-between; align-items: center;">
<span style="font-size: 13px; color: var(--text-secondary);">EXTRACTED (AST 提取)</span>
<span style="font-weight: 600; color: var(--color-primary);">66.4% (34,555)</span>
</div>
<div class="progress-bar">
<div class="progress-fill progress-extracted" style="width: 66.4%;"></div>
</div>
</div>
<div style="flex: 1;">
<div style="display: flex; justify-content: space-between; align-items: center;">
<span style="font-size: 13px; color: var(--text-secondary);">INFERRED (推理)</span>
<span style="font-weight: 600; color: var(--color-success);">33.6% (17,504)</span>
</div>
<div class="progress-bar">
<div class="progress-fill progress-inferred" style="width: 33.6%;"></div>
</div>
</div>
</div>
</div>
</section>
<!-- ===== Architecture ===== -->
<section class="section">
<div class="section-title">系统架构</div>
<div class="arch-grid">
<div class="arch-card">
<div class="arch-card-icon java">J</div>
<div class="arch-card-title">Java 后端 (mer_java)</div>
<div class="arch-card-desc">Spring Boot 2.2.6 多模块 Maven 项目,Java 8MyBatis Plus 3.3.1</div>
<ul class="arch-card-list">
<li><code>crmeb-common</code> — 共享模型、DTO、常量、工具类</li>
<li><code>crmeb-service</code> — DAO + Service 业务逻辑层</li>
<li><code>crmeb-admin</code> — 后台管理 API(平台 + 商户)</li>
<li><code>crmeb-front</code> — 移动端/前端用户 API</li>
<li><code>crmeb-generate</code> — 代码生成模块</li>
</ul>
</div>
<div class="arch-card">
<div class="arch-card-icon vue">V</div>
<div class="arch-card-title">平台管理端 (mer_plat_admin)</div>
<div class="arch-card-desc">Vue 2 + Element UI 单页应用,平台管理员操作入口</div>
<ul class="arch-card-list">
<li>商品、订单、用户、营销、财务管理</li>
<li>商户入驻审核、分类、菜单管理</li>
<li>系统设置、权限、装修 DIY</li>
<li>路由按模块拆分至 router/modules/</li>
</ul>
</div>
<div class="arch-card">
<div class="arch-card-icon vue">M</div>
<div class="arch-card-title">商户管理端 (mer_mer_admin)</div>
<div class="arch-card-desc">Vue 2 + Element UI 单页应用,商户独立管理后台</div>
<ul class="arch-card-list">
<li>自有商品管理、订单发货、退款</li>
<li>优惠券、用户管理</li>
<li>运费模板、素材管理</li>
<li>财务流水、结算记录</li>
</ul>
</div>
<div class="arch-card">
<div class="arch-card-icon uni">U</div>
<div class="arch-card-title">移动端 (mer_uniapp)</div>
<div class="arch-card-desc">UniApp 跨平台应用 — H5、微信小程序、原生 App</div>
<ul class="arch-card-list">
<li>首页、商品、分类、购物车、订单</li>
<li>个人中心、地址、营销活动</li>
<li>逛逛社区、商户主页</li>
<li>Diy 页面装修组件系统</li>
</ul>
</div>
</div>
</section>
<!-- ===== God Nodes ===== -->
<section class="section">
<div class="section-title">核心节点(God Nodes</div>
<p style="color: var(--text-secondary); margin-bottom: var(--space-lg);">连接度最高的节点,代表项目中最核心/最常被引用的模块或函数。</p>
<div class="god-nodes-grid">
<div class="god-node-item">
<span class="god-node-name">echarts.min</span>
<span class="god-node-degree">552</span>
</div>
<div class="god-node-item">
<span class="god-node-name">n()</span>
<span class="god-node-degree">389</span>
</div>
<div class="god-node-item">
<span class="god-node-name">f()</span>
<span class="god-node-degree">322</span>
</div>
<div class="god-node-item">
<span class="god-node-name">T()</span>
<span class="god-node-degree">314</span>
</div>
<div class="god-node-item">
<span class="god-node-name">r()</span>
<span class="god-node-degree">280</span>
</div>
</div>
<div style="margin-top: var(--space-md);">
<span class="badge badge-warning">注意</span>
<span style="font-size: 13px; color: var(--text-secondary); margin-left: var(--space-sm);">顶层 God Nodes 主要为打包后的 minified 库函数(echarts.min 等),真实业务核心见下方社区分析</span>
</div>
</section>
<!-- ===== Key Business Communities ===== -->
<section class="section">
<div class="section-title">核心业务社区分析</div>
<p style="color: var(--text-secondary); margin-bottom: var(--space-lg);">从 3,103 个社区中筛选出的关键业务模块社区,按业务领域分类展示。</p>
<!-- Java Backend Communities -->
<div class="sub-section-title" style="margin-top: var(--space-xl);">Java 后端核心服务</div>
<div class="card community-detail">
<div class="card-header">
<div class="card-title">ProductService 社区</div>
<span class="badge badge-primary">94 节点</span>
</div>
<p style="color: var(--text-secondary); font-size: 13px; margin-bottom: var(--space-md);">商品服务核心社区,涵盖商品 CRUD、批量操作、审核、复制、库存管理等全部商品相关功能。</p>
<div class="table-wrapper">
<table>
<thead><tr><th>方法</th><th>说明</th></tr></thead>
<tbody>
<tr><td><code>batchAudit()</code></td><td>批量审核商品</td></tr>
<tr><td><code>batchDelete()</code></td><td>批量删除</td></tr>
<tr><td><code>batchSetBrokerage()</code></td><td>批量设置分销佣金</td></tr>
<tr><td><code>batchSetFreightTemplate()</code></td><td>批量设置运费模板</td></tr>
<tr><td><code>copyProduct()</code></td><td>复制商品</td></tr>
<tr><td><code>deleteProduct()</code></td><td>删除商品</td></tr>
<tr><td><code>downByMerId()</code></td><td>商户下架商品</td></tr>
<tr><td><code>validatedCanUseById()</code></td><td>校验商品可用性</td></tr>
</tbody>
</table>
</div>
</div>
<div class="card community-detail">
<div class="card-header">
<div class="card-title">OrderService 社区</div>
<span class="badge badge-primary">72 节点</span>
</div>
<p style="color: var(--text-secondary); font-size: 13px; margin-bottom: var(--space-md);">订单服务核心社区,涵盖订单查询、取消、退款、发货、统计等全部订单生命周期操作。</p>
<div class="table-wrapper">
<table>
<thead><tr><th>方法</th><th>说明</th></tr></thead>
<tbody>
<tr><td><code>cancel()</code></td><td>取消订单</td></tr>
<tr><td><code>directRefund()</code></td><td>直接退款</td></tr>
<tr><td><code>batchCompleteByOrderNo()</code></td><td>按订单号批量完成</td></tr>
<tr><td><code>findAwaitTakeDeliveryOrderList()</code></td><td>查找待发货订单</td></tr>
<tr><td><code>findPayByDate()</code></td><td>按日期查找已支付订单</td></tr>
<tr><td><code>getByOrderNo()</code></td><td>按订单号查询</td></tr>
<tr><td><code>getCircleOrderPage()</code></td><td>圈子订单分页</td></tr>
<tr><td><code>virtualShipment()</code></td><td>虚拟发货</td></tr>
</tbody>
</table>
</div>
</div>
<div class="card community-detail">
<div class="card-header">
<div class="card-title">ProductServiceImpl 实现社区</div>
<span class="badge badge-success">69 节点</span>
</div>
<p style="color: var(--text-secondary); font-size: 13px; margin-bottom: var(--space-md);">商品服务实现层,依赖 TransactionTemplate、Hutool、FastJSON、PageHelper 等基础设施。</p>
<div class="table-wrapper">
<table>
<thead><tr><th>关键依赖</th><th>说明</th></tr></thead>
<tbody>
<tr><td><code>TransactionTemplate</code></td><td>Spring 事务模板</td></tr>
<tr><td><code>LambdaQueryWrapper</code></td><td>MyBatis Plus 条件构造器</td></tr>
<tr><td><code>LambdaUpdateWrapper</code></td><td>MyBatis Plus 更新构造器</td></tr>
<tr><td><code>PageHelper / PageInfo</code></td><td>分页插件</td></tr>
<tr><td><code>cn.hutool.core.util.*</code></td><td>Hutool 工具类</td></tr>
<tr><td><code>com.alibaba.fastjson.*</code></td><td>FastJSON 序列化</td></tr>
</tbody>
</table>
</div>
</div>
<div class="card community-detail">
<div class="card-header">
<div class="card-title">UserServiceImpl 社区</div>
<span class="badge badge-success">57 节点</span>
</div>
<p style="color: var(--text-secondary); font-size: 13px; margin-bottom: var(--space-md);">用户服务核心实现,涵盖用户信息管理、等级、标签、地址、提现等功能。</p>
</div>
<div class="card community-detail">
<div class="card-header">
<div class="card-title">FrontOrderServiceImpl 社区</div>
<span class="badge badge-success">70 节点</span>
</div>
<p style="color: var(--text-secondary); font-size: 13px; margin-bottom: var(--space-md);">前端订单服务,处理 C 端用户下单流程,依赖 Hutool 日期工具、Cart 模型、Coupon 模型等。</p>
</div>
<div class="card community-detail">
<div class="card-header">
<div class="card-title">GroupBuyRecordServiceImpl 社区</div>
<span class="badge badge-success">66 节点</span>
</div>
<p style="color: var(--text-secondary); font-size: 13px; margin-bottom: var(--space-md);">拼团功能实现,包含拼团记录、状态管理等,依赖 GroupBuyRecordEnum 枚举和事务管理。</p>
</div>
<!-- Frontend Communities -->
<div class="sub-section-title" style="margin-top: var(--space-xl);">前端核心模块</div>
<div class="card community-detail">
<div class="card-header">
<div class="card-title">平台 Admin API 社区</div>
<span class="badge badge-primary">71 节点</span>
</div>
<p style="color: var(--text-secondary); font-size: 13px; margin-bottom: var(--space-md);">平台管理端 API 调用模块,涵盖区域管理(area)、管理员权限、菜单配置等接口。</p>
<div class="community-members" style="margin-top: var(--space-sm);">
<span class="member-tag">areaListTreeApi()</span>
<span class="member-tag">areaSaveApi()</span>
<span class="member-tag">areasAdminListApi()</span>
<span class="member-tag">areasAdminInfoApi()</span>
<span class="member-tag">areaBindMerchantApi()</span>
<span class="member-tag">areasGetMenusApi()</span>
<span class="member-tag">areasAdminUpdateStatusApi()</span>
</div>
</div>
<div class="card community-detail">
<div class="card-header">
<div class="card-title">商品 Admin API 社区</div>
<span class="badge badge-primary">70 节点</span>
</div>
<p style="color: var(--text-secondary); font-size: 13px; margin-bottom: var(--space-md);">商品管理端 API 模块,涵盖商品创建、分类、品牌、优惠券、保障服务等接口。</p>
<div class="community-members" style="margin-top: var(--space-sm);">
<span class="member-tag">attrCreatApi()</span>
<span class="member-tag">categoryApi()</span>
<span class="member-tag">brandListApi()</span>
<span class="member-tag">couponInfoApi()</span>
<span class="member-tag">guaranteeListApi()</span>
<span class="member-tag">copyProductApi()</span>
</div>
</div>
<div class="card community-detail">
<div class="card-header">
<div class="card-title">营销 Admin API 社区</div>
<span class="badge badge-primary">70 节点</span>
</div>
<p style="color: var(--text-secondary); font-size: 13px; margin-bottom: var(--space-md);">营销管理 API 模块,涵盖秒杀、优惠券、直播、氛围图等营销活动相关接口。</p>
<div class="community-members" style="margin-top: var(--space-sm);">
<span class="member-tag">catListApi()</span>
<span class="member-tag">couponUserListApi()</span>
<span class="member-tag">liveGoodsListApi()</span>
<span class="member-tag">draftListApi()</span>
<span class="member-tag">atmosphereStatusApi()</span>
<span class="member-tag">getSeckillStyleApi()</span>
</div>
</div>
<!-- uCharts Community -->
<div class="card community-detail">
<div class="card-header">
<div class="card-title">uCharts 图表库社区</div>
<span class="badge badge-warning">119 节点</span>
</div>
<p style="color: var(--text-secondary); font-size: 13px; margin-bottom: var(--space-md);">移动端数据可视化 uCharts 库,是 UniApp 项目中最大的第三方依赖社区之一。</p>
<div class="community-members" style="margin-top: var(--space-sm);">
<span class="member-tag">Animation()</span>
<span class="member-tag">calCategoriesData()</span>
<span class="member-tag">calLegendData()</span>
<span class="member-tag">calYAxisData()</span>
<span class="member-tag">drawActivePoint()</span>
<span class="member-tag">collisionNew()</span>
<span class="member-tag">deepAssign()</span>
</div>
</div>
</section>
<!-- ===== Technology Stack ===== -->
<section class="section">
<div class="section-title">技术栈</div>
<div class="card">
<div class="card-title" style="margin-bottom: var(--space-md);">后端依赖</div>
<div class="table-wrapper">
<table>
<thead><tr><th>依赖</th><th>版本</th><th>用途</th></tr></thead>
<tbody>
<tr><td><code>Spring Boot</code></td><td>2.2.6.RELEASE</td><td>应用框架</td></tr>
<tr><td><code>MyBatis Plus</code></td><td>3.3.1</td><td>ORM 框架</td></tr>
<tr><td><code>FastJSON</code></td><td>2.0.38</td><td>JSON 序列化</td></tr>
<tr><td><code>Druid</code></td><td>1.1.20</td><td>数据库连接池</td></tr>
<tr><td><code>MySQL Connector</code></td><td>8.0.33</td><td>MySQL 驱动</td></tr>
<tr><td><code>Redis (Jedis)</code></td><td>3.3.0</td><td>缓存</td></tr>
<tr><td><code>Hutool</code></td><td>4.5.7</td><td>Java 工具类库</td></tr>
<tr><td><code>weixin-java</code></td><td>4.7.5</td><td>微信生态 SDK</td></tr>
<tr><td><code>Alipay SDK</code></td><td>4.15.20</td><td>支付宝 SDK</td></tr>
<tr><td><code>Knife4j</code></td><td>2.0.7</td><td>API 文档 (Swagger)</td></tr>
<tr><td><code>PageHelper</code></td><td>1.2.5</td><td>分页插件</td></tr>
</tbody>
</table>
</div>
</div>
<div class="card" style="margin-top: var(--space-lg);">
<div class="card-title" style="margin-bottom: var(--space-md);">前端依赖</div>
<div class="table-wrapper">
<table>
<thead><tr><th>依赖</th><th>版本</th><th>用途</th></tr></thead>
<tbody>
<tr><td><code>Vue</code></td><td>2.6.10</td><td>前端框架</td></tr>
<tr><td><code>Element UI</code></td><td>2.15.14</td><td>UI 组件库</td></tr>
<tr><td><code>Vue Router</code></td><td>3.0.2</td><td>路由管理</td></tr>
<tr><td><code>Vuex</code></td><td>3.1.0</td><td>状态管理</td></tr>
<tr><td><code>Axios</code></td><td>0.24.0</td><td>HTTP 客户端</td></tr>
<tr><td><code>ECharts</code></td><td>4.2.1</td><td>数据可视化</td></tr>
<tr><td><td><code>XLSX</code></td><td>0.14.1</td><td>Excel 导入导出</td></tr>
<tr><td><code>Sass</code></td><td>1.26.2</td><td>CSS 预处理器</td></tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- ===== External Integrations ===== -->
<section class="section">
<div class="section-title">外部集成</div>
<div class="table-wrapper">
<table>
<thead><tr><th>集成</th><th>SDK / 服务</th><th>用途</th></tr></thead>
<tbody>
<tr><td>微信小程序</td><td><code>weixin-java-miniapp</code></td><td>小程序登录、消息、模板消息</td></tr>
<tr><td>微信支付</td><td><code>weixin-java-pay</code></td><td>支付、退款、订单查询</td></tr>
<tr><td>微信公众号</td><td><code>weixin-java-mp</code></td><td>公众号消息、菜单、用户管理</td></tr>
<tr><td>微信开放平台</td><td><code>weixin-java-open</code></td><td>第三方平台授权</td></tr>
<tr><td>支付宝</td><td><code>alipay-sdk-java</code></td><td>支付、退款</td></tr>
<tr><td>阿里云 OSS</td><td><code>aliyun-sdk-oss</code></td><td>对象存储</td></tr>
<tr><td>腾讯云 COS</td><td><code>cos_api</code></td><td>对象存储</td></tr>
<tr><td>七牛云</td><td><code>qiniu-java-sdk</code></td><td>对象存储</td></tr>
<tr><td>华为云 OBS</td><td><code>esdk-obs-java-bundle</code></td><td>对象存储</td></tr>
<tr><td>京东云 S3</td><td><code>aws-java-sdk-s3</code></td><td>对象存储</td></tr>
<tr><td>易联云打印</td><td><code>yly</code></td><td>小票打印</td></tr>
<tr><td>安吉加加验证码</td><td><code>spring-boot-starter-captcha</code></td><td>行为验证码</td></tr>
<tr><td>IP 解析</td><td><code>ip2region</code></td><td>IP 地理位置解析</td></tr>
</tbody>
</table>
</div>
</section>
<!-- ===== Business Domains ===== -->
<section class="section">
<div class="section-title">业务领域模型</div>
<p style="color: var(--text-secondary); margin-bottom: var(--space-lg);">根据模型文件目录 (crmeb-common/model) 梳理出的核心业务域。</p>
<div class="table-wrapper">
<table>
<thead><tr><th>业务域</th><th>模型包</th><th>核心实体</th></tr></thead>
<tbody>
<tr><td>商品</td><td><code>model/product</code></td><td>Product, ProductAttr, Category, Brand, Guarantee</td></tr>
<tr><td>订单</td><td><code>model/order</code></td><td>Order, OrderDetail, Refund, Cart</td></tr>
<tr><td>用户</td><td><code>model/user</code></td><td>User, UserLevel, UserTag, Address</td></tr>
<tr><td>商户</td><td><code>model/merchant</code></td><td>Merchant, MerchantType, MerchantCategory</td></tr>
<tr><td>优惠券</td><td><code>model/coupon</code></td><td>Coupon, CouponProduct, CouponUser</td></tr>
<tr><td>营销</td><td><code>model/seckill, model/activity</code></td><td>Seckill, Activity, Sign</td></tr>
<tr><td>拼团</td><td><code>model/groupbuy</code></td><td>GroupBuy, GroupBuyRecord</td></tr>
<tr><td>社区/圈子</td><td><code>model/circle, model/community</code></td><td>Circle, Community, Comment</td></tr>
<tr><td>文章</td><td><code>model/article</code></td><td>Article, ArticleCategory</td></tr>
<tr><td>物流</td><td><code>model/express, model/city</code></td><td>Express, City</td></tr>
<tr><td>财务</td><td><code>model/bill, model/closing</code></td><td>Bill, Closing, CapitalFlow</td></tr>
<tr><td>管理</td><td><code>model/admin, model/system</code></td><td>SystemAdmin, Role, Menu, Config</td></tr>
<tr><td>页面</td><td><code>model/page</code></td><td>PageDiy, Theme</td></tr>
<tr><td>预约</td><td><code>model/reservation</code></td><td>Reservation</td></tr>
<tr><td>会员</td><td><code>model/member</code></td><td>Member, PaidMember</td></tr>
<tr><td>卡密</td><td><code>model/cdkey</code></td><td>CardSecret</td></tr>
<tr><td>短信</td><td><code>model/sms</code></td><td>SmsTemplate, SmsRecord</td></tr>
</tbody>
</table>
</div>
</section>
<!-- ===== Module Dependency ===== -->
<section class="section">
<div class="section-title">模块依赖关系</div>
<div class="code-block">
crmeb-admin ──┐
├──► crmeb-service ──► crmeb-common
crmeb-front ──┘
crmeb-generate ──► crmeb-service ──► crmeb-common
mer_plat_admin ──(HTTP)──► crmeb-admin (platform/* controllers)
mer_mer_admin ──(HTTP)──► crmeb-admin (merchant/* controllers)
mer_uniapp ──(HTTP)──► crmeb-front (user-facing APIs)
</div>
</section>
<!-- ===== Commands Reference ===== -->
<section class="section">
<div class="section-title">常用开发命令</div>
<div class="table-wrapper">
<table>
<thead><tr><th>子系统</th><th>命令</th><th>说明</th></tr></thead>
<tbody>
<tr><td>Java 后端</td><td><code>mvn clean compile</code></td><td>编译所有模块</td></tr>
<tr><td>Java 后端</td><td><code>mvn clean package -DskipTests</code></td><td>打包 JAR</td></tr>
<tr><td>Java 后端</td><td><code>java -jar Crmeb-admin.jar --spring.profiles.active=dev</code></td><td>启动 Admin API</td></tr>
<tr><td>Java 后端</td><td><code>java -jar Crmeb-front.jar --spring.profiles.active=dev</code></td><td>启动 Front API</td></tr>
<tr><td>平台 Admin</td><td><code>npm run dev</code></td><td>启动开发服务器 (localhost:9527)</td></tr>
<tr><td>平台 Admin</td><td><code>npm run build:prod</code></td><td>生产环境构建</td></tr>
<tr><td>商户 Admin</td><td><code>npm run dev</code></td><td>启动开发服务器</td></tr>
<tr><td>商户 Admin</td><td><code>npm run build:prod</code></td><td>生产环境构建</td></tr>
<tr><td>移动端</td><td>HBuilderX IDE</td><td>运行 H5 / 微信小程序</td></tr>
</tbody>
</table>
</div>
</section>
</main>
<!-- ===== Footer ===== -->
<footer class="footer">
<div>Generated by graphify-rs · CRMEB-MER JAVA-MER-2.2 · 2026-05-06</div>
<div style="margin-top: var(--space-xs);">36,835 nodes · 52,059 edges · 3,103 communities</div>
</footer>
</body>
</html>