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