123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- #!/bin/bash
- # 后端源代码拼接脚本 (Shell版本)
- # 将 output_sourcecode/backend/ 目录下所有Java文件及配置文件内容拼接生成统一的后端源代码文档
- # 设置脚本目录
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" # 回到项目根目录
- BACKEND_DIR="${SCRIPT_DIR}/output_sourcecode/backend"
- OUTPUT_DIR="${SCRIPT_DIR}/output_docs"
- OUTPUT_FILE="${OUTPUT_DIR}/后端源代码.txt"
- # 确保输出目录存在
- mkdir -p "${OUTPUT_DIR}"
- # 检查后端目录是否存在
- if [ ! -d "${BACKEND_DIR}" ]; then
- echo "❌ 错误:后端目录不存在 ${BACKEND_DIR}"
- exit 1
- fi
- # 获取后端文件列表(按类型优先级排序)
- get_backend_files() {
- local files=()
-
- # 优先级文件顺序
- # 1. pom.xml
- find "${BACKEND_DIR}" -name "pom.xml" -type f | while read file; do
- echo "1:$file"
- done
-
- # 2. 配置文件
- find "${BACKEND_DIR}" -name "*.yml" -o -name "*.yaml" -o -name "*.properties" | while read file; do
- echo "2:$file"
- done
-
- # 3. Application.java
- find "${BACKEND_DIR}" -name "Application.java" -type f | while read file; do
- echo "3:$file"
- done
-
- # 4. Entity类
- find "${BACKEND_DIR}" -path "*/entity/*" -name "*.java" -type f | while read file; do
- echo "4:$file"
- done
-
- # 5. Mapper类
- find "${BACKEND_DIR}" -path "*/mapper/*" -name "*.java" -type f | while read file; do
- echo "5:$file"
- done
-
- # 6. Service类
- find "${BACKEND_DIR}" -path "*/service/*" -name "*.java" -type f | while read file; do
- echo "6:$file"
- done
-
- # 7. Controller类
- find "${BACKEND_DIR}" -path "*/controller/*" -name "*.java" -type f | while read file; do
- echo "7:$file"
- done
-
- # 8. DTO类
- find "${BACKEND_DIR}" -path "*/dto/*" -name "*.java" -type f | while read file; do
- echo "8:$file"
- done
-
- # 9. VO类
- find "${BACKEND_DIR}" -path "*/vo/*" -name "*.java" -type f | while read file; do
- echo "9:$file"
- done
-
- # 10. 其他Java文件
- find "${BACKEND_DIR}" -name "*.java" -type f | while read file; do
- # 排除已经处理的文件
- if [[ ! "$file" =~ /entity/ ]] && [[ ! "$file" =~ /mapper/ ]] && [[ ! "$file" =~ /service/ ]] && [[ ! "$file" =~ /controller/ ]] && [[ ! "$file" =~ /dto/ ]] && [[ ! "$file" =~ /vo/ ]] && [[ ! "$file" =~ Application.java ]]; then
- echo "10:$file"
- fi
- done
- }
- # 获取排序后的文件列表
- BACKEND_FILES=($(get_backend_files | sort -t: -k1,1n -k2,2 | cut -d: -f2-))
- if [ ${#BACKEND_FILES[@]} -eq 0 ]; then
- echo "❌ 错误:在 ${BACKEND_DIR} 目录下没有找到后端源代码文件"
- exit 1
- fi
- echo "============================================================"
- echo "后端源代码生成脚本 (用于AI分析和代码审查)"
- echo "============================================================"
- echo "找到 ${#BACKEND_FILES[@]} 个后端源代码文件:"
- for file in "${BACKEND_FILES[@]}"; do
- rel_path=$(realpath --relative-to="${BACKEND_DIR}" "$file" 2>/dev/null || python -c "import os; print(os.path.relpath('$file', '${BACKEND_DIR}'))")
- echo " - ${rel_path}"
- done
- echo ""
- echo "开始生成后端源代码文档..."
- # 清空输出文件
- > "${OUTPUT_FILE}"
- # 处理每个后端文件
- counter=1
- for backend_file in "${BACKEND_FILES[@]}"; do
- rel_path=$(realpath --relative-to="${BACKEND_DIR}" "$backend_file" 2>/dev/null || python -c "import os; print(os.path.relpath('$backend_file', '${BACKEND_DIR}'))")
-
- echo "处理文件 ${counter}/${#BACKEND_FILES[@]}: ${rel_path}"
-
- # 写入文件分隔标识和源代码
- echo "=== ${rel_path} ===" >> "${OUTPUT_FILE}"
-
- # 读取文件内容
- if [ -f "$backend_file" ]; then
- cat "$backend_file" >> "${OUTPUT_FILE}"
- else
- echo "错误:无法读取文件 ${backend_file}" >> "${OUTPUT_FILE}"
- fi
-
- echo "" >> "${OUTPUT_FILE}"
- echo "" >> "${OUTPUT_FILE}"
-
- ((counter++))
- done
- echo "✅ 后端源代码文档生成完成!"
- echo "📁 输出文件: ${OUTPUT_FILE}"
- # 显示文件大小
- if [ -f "${OUTPUT_FILE}" ]; then
- file_size=$(stat -f%z "${OUTPUT_FILE}" 2>/dev/null || stat -c%s "${OUTPUT_FILE}" 2>/dev/null)
- if [ $? -eq 0 ]; then
- if [ $file_size -gt 1048576 ]; then
- size_str="$(echo "scale=2; $file_size / 1048576" | bc) MB"
- elif [ $file_size -gt 1024 ]; then
- size_str="$(echo "scale=2; $file_size / 1024" | bc) KB"
- else
- size_str="${file_size} bytes"
- fi
- echo "📊 文件大小: ${size_str}"
- fi
- fi
- echo ""
- echo "============================================================"
- echo "脚本执行完成"
- echo "============================================================"
|