# 福建水务营收系统概要设计文档 Makefile # Version: 1.0 .PHONY: help init create validate export clean install-deps check-links check-mermaid validate-mermaid count-mermaid check-mermaid-file merge-docs check-ai-governance archive-tag-index ai-audit-diff smoke-sftp smoke-ftp # 默认目标 help: @echo "福建水务营收系统概要设计文档工具链" @echo "" @echo "可用命令:" @echo " help 显示此帮助信息" @echo " init 初始化工具链配置" @echo " install-deps 安装必要的依赖" @echo " create MODULE 创建新的模块设计文档" @echo " validate 验证所有文档" @echo " validate-file 验证指定文档 (使用 FILE=文件名)" @echo " export-word 导出Word格式文档" @echo " export-pdf 导出PDF格式文档" @echo " export-html 导出HTML格式文档" @echo " check-links 检查所有链接" @echo " check-mermaid 检测所有markdown文件中的mermaid图表" @echo " validate-mermaid 验证mermaid图表语法" @echo " check-ai-governance 检查AI文档治理基线" @echo " archive-tag-index 生成 Archive 标签索引" @echo " ai-audit-diff 生成 AI 抽检差异清单" @echo " smoke-sftp 调用 Java smoke CLI 连接 Docker SFTP 容器" @echo " smoke-ftp 调用 Java smoke CLI 连接 Docker FTP 容器" @echo " count-mermaid 统计mermaid图表数量" @echo " check-mermaid-file 检测指定文件中的mermaid图表 (使用 FILE=文件名)" @echo " merge-docs 合并所有文档" @echo " clean 清理临时文件" @echo " export-word-with-diagrams 导出包含图表的Word文档" @echo " fix-docx-diagrams 快速修复:处理docx文档中的流程图问题" @echo " unified-export 统一导出所有格式(推荐)" @echo " unified-export-docx 统一导出Word格式" @echo " unified-export-pdf 统一导出PDF格式" @echo " unified-export-html 统一导出HTML格式" @echo " quick-export 快速统一导出所有格式(稳定版)" @echo " quick-export-docx 快速统一导出Word格式" @echo " quick-export-pdf 快速统一导出PDF格式" @echo " quick-export-html 快速统一导出HTML格式" @echo "" @echo "示例:" @echo " make init # 初始化工具链" @echo " make create MODULE=user # 创建用户管理模块文档" @echo " make validate # 验证所有文档" @echo " make validate-file FILE=water_biz_user_design.md" @echo " make check-mermaid # 检测所有mermaid图表" @echo " make validate-mermaid # 验证mermaid语法" @echo " make check-ai-governance # 检查AI文档治理基线" @echo " make archive-tag-index # 生成 Archive 标签索引" @echo " make ai-audit-diff # 生成 AI 抽检差异清单" @echo " make smoke-sftp # 运行 Docker SFTP smoke" @echo " make smoke-ftp # 运行 Docker FTP smoke" @echo " make check-mermaid-file FILE=新-概要设计说明书.md" @echo " make export-word # 导出Word文档" @echo " make export-pdf # 导出PDF文档" # 初始化工具链 init: @echo "初始化文档工具链..." @chmod +x scripts/doc-toolkit.sh @./scripts/doc-toolkit.sh init # 安装依赖 install-deps: @echo "检查并安装必要的依赖..." @if ! command -v pandoc > /dev/null 2>&1; then \ echo "安装 pandoc..."; \ if [[ "$$OSTYPE" == "darwin"* ]]; then \ brew install pandoc; \ elif [[ "$$OSTYPE" == "linux-gnu"* ]]; then \ sudo apt-get update && sudo apt-get install -y pandoc; \ else \ echo "请手动安装 pandoc: https://pandoc.org/installing.html"; \ fi; \ else \ echo "pandoc 已安装"; \ fi @if ! npx mmdc --version > /dev/null 2>&1 && ! command -v mmdc > /dev/null 2>&1; then \ echo "安装 mermaid-cli..."; \ npm install @mermaid-js/mermaid-cli --save-dev; \ else \ echo "mermaid-cli 已安装"; \ fi # 创建模块文档 create: @if [ -z "$(MODULE)" ]; then \ echo "错误: 请提供模块名称,例如: make create MODULE=user_management"; \ exit 1; \ fi @./scripts/doc-toolkit.sh create $(MODULE) # 验证所有文档 validate: @echo "验证所有文档..." @./scripts/doc-toolkit.sh validate # 验证指定文档 validate-file: @if [ -z "$(FILE)" ]; then \ echo "错误: 请提供文件名,例如: make validate-file FILE=water_biz_user_design.md"; \ exit 1; \ fi @./scripts/doc-toolkit.sh validate $(FILE) # 导出Word文档 export-word: @echo "导出Word格式文档..." @./scripts/doc-toolkit.sh export word # 导出PDF文档 export-pdf: @echo "导出PDF格式文档..." @./scripts/doc-toolkit.sh export pdf # 导出HTML文档 export-html: @echo "导出HTML格式文档..." @./scripts/doc-toolkit.sh export html # 检查链接 check-links: @echo "检查文档链接..." @./scripts/doc-toolkit.sh check-links # 检查AI文档治理基线 check-ai-governance: @echo "检查AI文档治理基线..." @./scripts/check-ai-doc-governance.sh # 生成 Archive 标签索引 archive-tag-index: @echo "生成 Archive 标签索引..." @./scripts/generate-archive-tag-index.sh # 生成 AI 抽检差异清单 ai-audit-diff: @echo "生成 AI 抽检差异清单..." @./scripts/ai-weekly-audit-diff.sh smoke-sftp: @echo "运行 Docker SFTP smoke..." @./scripts/run-bank-transfer-smoke.sh sftp smoke-ftp: @echo "运行 Docker FTP smoke..." @./scripts/run-bank-transfer-smoke.sh ftp # 检测所有markdown文件中的mermaid图表 check-mermaid: @echo "检测所有markdown文件中的mermaid图表..." @echo "=== Mermaid 图表检测报告 ===" @for file in *.md; do \ if [ -f "$$file" ]; then \ echo ""; \ echo "📄 检查文件: $$file"; \ mermaid_count=$$(grep -c '```mermaid' "$$file" 2>/dev/null | head -1 || echo "0"); \ if [ "$$mermaid_count" -gt 0 ] 2>/dev/null; then \ echo "✅ 发现 $$mermaid_count 个 mermaid 图表"; \ echo " 图表类型:"; \ grep -A 1 '```mermaid' "$$file" | grep -E '^(graph|flowchart|sequenceDiagram|classDiagram|stateDiagram|erDiagram|journey|gantt|pie|gitgraph)' | sort | uniq -c | sed 's/^/ /' || echo " 无法识别图表类型"; \ else \ echo "❌ 未发现 mermaid 图表"; \ fi; \ fi; \ done @echo "" @echo "=== 总体统计 ===" @total_files=$$(ls -1 *.md 2>/dev/null | wc -l); \ total_mermaid=$$(grep -c '```mermaid' *.md 2>/dev/null | awk -F: '{sum += $$2} END {print sum}' || echo "0"); \ files_with_mermaid=$$(grep -l '```mermaid' *.md 2>/dev/null | wc -l || echo "0"); \ echo "📊 总计: $$total_files 个文件,$$files_with_mermaid 个包含图表,共 $$total_mermaid 个 mermaid 图表" # 验证mermaid图表语法 validate-mermaid: @echo "验证mermaid图表语法..." @if ! npx mmdc --version > /dev/null 2>&1 && ! command -v mmdc > /dev/null 2>&1; then \ echo "❌ 错误: mermaid-cli 未安装,请运行 'make install-deps' 安装"; \ exit 1; \ fi @echo "=== Mermaid 语法验证报告 ===" @temp_dir=$$(mktemp -d); \ validation_passed=true; \ for file in *.md; do \ if [ -f "$$file" ] && grep -q '```mermaid' "$$file"; then \ echo ""; \ echo "📄 验证文件: $$file"; \ awk '/```mermaid/,/```/' "$$file" | grep -v '```' > "$$temp_dir/temp.mmd"; \ if [ -s "$$temp_dir/temp.mmd" ]; then \ if npx mmdc -i "$$temp_dir/temp.mmd" -o "$$temp_dir/temp.png" > /dev/null 2>&1 || mmdc -i "$$temp_dir/temp.mmd" -o "$$temp_dir/temp.png" > /dev/null 2>&1; then \ echo "✅ mermaid 语法验证通过"; \ else \ echo "❌ mermaid 语法验证失败"; \ validation_passed=false; \ fi; \ fi; \ fi; \ done; \ rm -rf "$$temp_dir"; \ if [ "$$validation_passed" = "true" ]; then \ echo ""; \ echo "🎉 所有 mermaid 图表语法验证通过!"; \ else \ echo ""; \ echo "⚠️ 部分 mermaid 图表存在语法错误,请检查"; \ exit 1; \ fi # 统计mermaid图表数量 count-mermaid: @echo "统计mermaid图表数量..." @echo "=== Mermaid 图表统计 ===" @echo "" @echo "📊 按文件统计:" @for file in *.md; do \ if [ -f "$$file" ]; then \ count=$$(grep -c '```mermaid' "$$file" 2>/dev/null | head -1 || echo "0"); \ if [ "$$count" -gt 0 ] 2>/dev/null; then \ printf " %-35s: %d 个图表\n" "$$file" "$$count"; \ fi; \ fi; \ done 2>/dev/null || echo " 无包含图表的文件" @echo "" @echo "📈 按图表类型统计:" @if ls *.md > /dev/null 2>&1; then \ grep -h -A 1 '```mermaid' *.md 2>/dev/null | \ grep -E '^(graph|flowchart|sequenceDiagram|classDiagram|stateDiagram|erDiagram|journey|gantt|pie|gitgraph)' | \ sort | uniq -c | \ awk '{printf " %-20s: %d 个\n", $$2, $$1}' || echo " 无法识别的图表类型"; \ fi @echo "" @total=$$(grep -c '```mermaid' *.md 2>/dev/null | awk -F: '{sum += $$2} END {print sum}' || echo "0"); \ files=$$(grep -l '```mermaid' *.md 2>/dev/null | wc -l || echo "0"); \ echo "🎯 总计: $$files 个文件包含 $$total 个 mermaid 图表" # 检测指定文件中的mermaid图表 check-mermaid-file: @if [ -z "$(FILE)" ]; then \ echo "错误: 请提供文件名,例如: make check-mermaid-file FILE=新-概要设计说明书.md"; \ exit 1; \ fi @if [ ! -f "$(FILE)" ]; then \ echo "错误: 文件 $(FILE) 不存在"; \ exit 1; \ fi @echo "检测文件 $(FILE) 中的mermaid图表..." @echo "=== $(FILE) Mermaid 图表分析 ===" @echo "" @mermaid_count=$$(grep -c '```mermaid' "$(FILE)" 2>/dev/null | head -1 || echo "0"); \ if [ "$$mermaid_count" -gt 0 ] 2>/dev/null; then \ echo "✅ 发现 $$mermaid_count 个 mermaid 图表"; \ echo ""; \ echo "📋 图表详细信息:"; \ grep -n -A 2 '```mermaid' "$(FILE)" | while IFS=: read -r line_num content; do \ if echo "$$content" | grep -q '```mermaid'; then \ echo " 图表 #$$(( (line_num + 2) / 4 )) (第 $$line_num 行)"; \ elif echo "$$content" | grep -qE '^(graph|flowchart|sequenceDiagram|classDiagram|stateDiagram|erDiagram|journey|gantt|pie|gitgraph)'; then \ echo " 类型: $$content"; \ fi; \ done; \ echo ""; \ echo "📊 图表类型统计:"; \ grep -A 1 '```mermaid' "$(FILE)" | grep -E '^(graph|flowchart|sequenceDiagram|classDiagram|stateDiagram|erDiagram|journey|gantt|pie|gitgraph)' | sort | uniq -c | awk '{printf " %-15s: %d 个\n", $$2, $$1}'; \ else \ echo "❌ 文件中未发现 mermaid 图表"; \ fi # 合并文档 merge-docs: @echo "合并所有文档..." @./scripts/doc-toolkit.sh merge-docs # 清理临时文件 clean: @echo "清理临时文件..." @rm -rf output/*.tmp @rm -rf templates/*.bak @rm -rf *.bak @find . -name "*.DS_Store" -delete @echo "清理完成" # 生成架构图 generate-architecture: @./scripts/doc-toolkit.sh generate-diagram architecture # 生成流程图 generate-flow: @./scripts/doc-toolkit.sh generate-diagram flow # 生成ER图 generate-er: @./scripts/doc-toolkit.sh generate-diagram er # 生成时序图 generate-sequence: @./scripts/doc-toolkit.sh generate-diagram sequence # 开发模式 - 实时验证和预览 dev: @echo "启动开发模式..." @while true; do \ echo "等待文件变化..."; \ inotifywait -e modify *.md 2>/dev/null || fswatch -o *.md 2>/dev/null || sleep 5; \ echo "检测到文件变化,重新验证..."; \ make validate 2>/dev/null || true; \ sleep 2; \ done # 快速构建 - 验证+导出HTML quick-build: @echo "快速构建 - 验证并导出HTML..." @make validate @make export-html @echo "构建完成,查看 output/福建水务营收系统概要设计文档.html" # 完整构建 - 验证+导出所有格式 full-build: @echo "完整构建 - 验证并导出所有格式..." @make validate @make export-word @make export-pdf @make export-html @echo "构建完成,查看 output/ 目录" # 检查项目状态 status: @echo "=== 项目状态 ===" @echo "文档数量: $$(ls -1 *.md 2>/dev/null | wc -l)" @echo "模板数量: $$(ls -1 templates/ 2>/dev/null | wc -l)" @echo "输出文件: $$(ls -1 output/ 2>/dev/null | wc -l)" @echo "" @echo "=== 依赖检查 ===" @if command -v pandoc > /dev/null 2>&1; then \ echo "✓ pandoc: $$(pandoc --version | head -1)"; \ else \ echo "✗ pandoc: 未安装"; \ fi @if npx mmdc --version > /dev/null 2>&1; then \ echo "✓ mermaid-cli: $$(npx mmdc --version) (本地)"; \ elif command -v mmdc > /dev/null 2>&1; then \ echo "✓ mermaid-cli: $$(mmdc --version) (全局)"; \ else \ echo "✗ mermaid-cli: 未安装"; \ fi # 更新工具链 update: @echo "更新文档工具链..." @git pull origin main 2>/dev/null || echo "无法从远程仓库更新" @chmod +x scripts/doc-toolkit.sh @echo "工具链更新完成" # 导出包含图表的Word文档 export-word-with-diagrams: @echo "导出包含图表的Word格式文档..." @chmod +x scripts/process-mermaid.sh @./scripts/process-mermaid.sh # 快速修复:处理Mermaid图表问题 fix-docx-diagrams: @echo "修复docx文档中的流程图问题..." @./scripts/process-mermaid.sh # 统一文档导出 - 解决多文件图表混乱问题 unified-export: @echo "统一导出所有格式..." @chmod +x scripts/unified_export.sh @./scripts/unified_export.sh unified-export-docx: @echo "统一导出Word格式..." @chmod +x scripts/unified_export.sh @./scripts/unified_export.sh docx unified-export-pdf: @echo "统一导出PDF格式..." @chmod +x scripts/unified_export.sh @./scripts/unified_export.sh pdf unified-export-html: @echo "统一导出HTML格式..." @chmod +x scripts/unified_export.sh @./scripts/unified_export.sh html # 快速统一文档导出 - 不处理图表转换,更稳定快速 quick-export: @echo "快速统一导出所有格式..." @chmod +x scripts/quick_unified_export.sh @./scripts/quick_unified_export.sh quick-export-docx: @echo "快速统一导出Word格式..." @chmod +x scripts/quick_unified_export.sh @./scripts/quick_unified_export.sh docx quick-export-pdf: @echo "快速统一导出PDF格式..." @chmod +x scripts/quick_unified_export.sh @./scripts/quick_unified_export.sh pdf quick-export-html: @echo "快速统一导出HTML格式..." @chmod +x scripts/quick_unified_export.sh @./scripts/quick_unified_export.sh html