381 lines
13 KiB
Makefile
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.

# 福建水务营收系统概要设计文档 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
# 默认目标
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 " 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 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
# 检测所有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