generate_backend_sourcecode.sh 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #!/bin/bash
  2. # 后端源代码拼接脚本 (Shell版本)
  3. # 将 output_sourcecode/backend/ 目录下所有Java文件及配置文件内容拼接生成统一的后端源代码文档
  4. # 设置脚本目录
  5. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" # 回到项目根目录
  6. BACKEND_DIR="${SCRIPT_DIR}/output_sourcecode/backend"
  7. OUTPUT_DIR="${SCRIPT_DIR}/output_docs"
  8. OUTPUT_FILE="${OUTPUT_DIR}/后端源代码.txt"
  9. # 确保输出目录存在
  10. mkdir -p "${OUTPUT_DIR}"
  11. # 检查后端目录是否存在
  12. if [ ! -d "${BACKEND_DIR}" ]; then
  13. echo "❌ 错误:后端目录不存在 ${BACKEND_DIR}"
  14. exit 1
  15. fi
  16. # 获取后端文件列表(按类型优先级排序)
  17. get_backend_files() {
  18. local files=()
  19. # 优先级文件顺序
  20. # 1. pom.xml
  21. find "${BACKEND_DIR}" -name "pom.xml" -type f | while read file; do
  22. echo "1:$file"
  23. done
  24. # 2. 配置文件
  25. find "${BACKEND_DIR}" -name "*.yml" -o -name "*.yaml" -o -name "*.properties" | while read file; do
  26. echo "2:$file"
  27. done
  28. # 3. Application.java
  29. find "${BACKEND_DIR}" -name "Application.java" -type f | while read file; do
  30. echo "3:$file"
  31. done
  32. # 4. Entity类
  33. find "${BACKEND_DIR}" -path "*/entity/*" -name "*.java" -type f | while read file; do
  34. echo "4:$file"
  35. done
  36. # 5. Mapper类
  37. find "${BACKEND_DIR}" -path "*/mapper/*" -name "*.java" -type f | while read file; do
  38. echo "5:$file"
  39. done
  40. # 6. Service类
  41. find "${BACKEND_DIR}" -path "*/service/*" -name "*.java" -type f | while read file; do
  42. echo "6:$file"
  43. done
  44. # 7. Controller类
  45. find "${BACKEND_DIR}" -path "*/controller/*" -name "*.java" -type f | while read file; do
  46. echo "7:$file"
  47. done
  48. # 8. DTO类
  49. find "${BACKEND_DIR}" -path "*/dto/*" -name "*.java" -type f | while read file; do
  50. echo "8:$file"
  51. done
  52. # 9. VO类
  53. find "${BACKEND_DIR}" -path "*/vo/*" -name "*.java" -type f | while read file; do
  54. echo "9:$file"
  55. done
  56. # 10. 其他Java文件
  57. find "${BACKEND_DIR}" -name "*.java" -type f | while read file; do
  58. # 排除已经处理的文件
  59. if [[ ! "$file" =~ /entity/ ]] && [[ ! "$file" =~ /mapper/ ]] && [[ ! "$file" =~ /service/ ]] && [[ ! "$file" =~ /controller/ ]] && [[ ! "$file" =~ /dto/ ]] && [[ ! "$file" =~ /vo/ ]] && [[ ! "$file" =~ Application.java ]]; then
  60. echo "10:$file"
  61. fi
  62. done
  63. }
  64. # 获取排序后的文件列表
  65. BACKEND_FILES=($(get_backend_files | sort -t: -k1,1n -k2,2 | cut -d: -f2-))
  66. if [ ${#BACKEND_FILES[@]} -eq 0 ]; then
  67. echo "❌ 错误:在 ${BACKEND_DIR} 目录下没有找到后端源代码文件"
  68. exit 1
  69. fi
  70. echo "============================================================"
  71. echo "后端源代码生成脚本 (用于AI分析和代码审查)"
  72. echo "============================================================"
  73. echo "找到 ${#BACKEND_FILES[@]} 个后端源代码文件:"
  74. for file in "${BACKEND_FILES[@]}"; do
  75. rel_path=$(realpath --relative-to="${BACKEND_DIR}" "$file" 2>/dev/null || python -c "import os; print(os.path.relpath('$file', '${BACKEND_DIR}'))")
  76. echo " - ${rel_path}"
  77. done
  78. echo ""
  79. echo "开始生成后端源代码文档..."
  80. # 清空输出文件
  81. > "${OUTPUT_FILE}"
  82. # 处理每个后端文件
  83. counter=1
  84. for backend_file in "${BACKEND_FILES[@]}"; do
  85. rel_path=$(realpath --relative-to="${BACKEND_DIR}" "$backend_file" 2>/dev/null || python -c "import os; print(os.path.relpath('$backend_file', '${BACKEND_DIR}'))")
  86. echo "处理文件 ${counter}/${#BACKEND_FILES[@]}: ${rel_path}"
  87. # 写入文件分隔标识和源代码
  88. echo "=== ${rel_path} ===" >> "${OUTPUT_FILE}"
  89. # 读取文件内容
  90. if [ -f "$backend_file" ]; then
  91. cat "$backend_file" >> "${OUTPUT_FILE}"
  92. else
  93. echo "错误:无法读取文件 ${backend_file}" >> "${OUTPUT_FILE}"
  94. fi
  95. echo "" >> "${OUTPUT_FILE}"
  96. echo "" >> "${OUTPUT_FILE}"
  97. ((counter++))
  98. done
  99. echo "✅ 后端源代码文档生成完成!"
  100. echo "📁 输出文件: ${OUTPUT_FILE}"
  101. # 显示文件大小
  102. if [ -f "${OUTPUT_FILE}" ]; then
  103. file_size=$(stat -f%z "${OUTPUT_FILE}" 2>/dev/null || stat -c%s "${OUTPUT_FILE}" 2>/dev/null)
  104. if [ $? -eq 0 ]; then
  105. if [ $file_size -gt 1048576 ]; then
  106. size_str="$(echo "scale=2; $file_size / 1048576" | bc) MB"
  107. elif [ $file_size -gt 1024 ]; then
  108. size_str="$(echo "scale=2; $file_size / 1024" | bc) KB"
  109. else
  110. size_str="${file_size} bytes"
  111. fi
  112. echo "📊 文件大小: ${size_str}"
  113. fi
  114. fi
  115. echo ""
  116. echo "============================================================"
  117. echo "脚本执行完成"
  118. echo "============================================================"