提交 dacd618d authored 作者: 陈泽健's avatar 陈泽健

feat(jdk): 优化JDK服务部署脚本增加检查机制

- 在deploy_jdk_host函数中新增java -version检查逻辑
- 实现最多3次重试机制验证JDK是否正确部署成功
- 添加详细的诊断信息输出包括JAVA_HOME值和环境变量配置
- 实现双重保障方式确保环境变量生效(source + export)
- 检查失败时保留已安装文件并报错退出部署流程
- 新增_check_jdk_installation等辅助函数处理检查逻辑
- 更新日志输出格式包含所有场景的详细状态信息
- 创建计划执行文档记录实现步骤和测试用例
上级 709ac242
......@@ -7,10 +7,99 @@
**目标:** 新增`java -version`检查jdk是否正确部署成功。
### 需求描述
#### 调用逻辑
- 函数名称:deploy_jdk_host
-`log "INFO" "✅ Java环境变量已写入 /etc/profile"`之后添加如下代码:`java -version`检查jdk是否正确部署成功。
- 如果失败,则重新检查`/etc/profile`内是否正确写入环境变量,然后再执行`source /etc/profile`,再次执行`java -version`检查jdk是否正确部署成功。
- 如果成功,则跳过。
- 函数位置:主脚本 `new_auto.sh` 中已存在
#### 实现逻辑
1. **第一次检查**:在 `log "INFO" "✅ Java环境变量已写入 /etc/profile"` 之后,执行 `java -version` 检查 JDK 是否正确部署成功
2. **检查成功**:如果 `java -version` 执行成功(能输出版本号),打印详细版本信息日志,跳过后续检查
3. **检查失败**:如果 `java -version` 执行失败,执行以下重试逻辑(最多重试3次):
- 输出诊断信息:打印当前 `$JAVA_HOME`
- 使用 `grep` 检查 `/etc/profile``JAVA_HOME``CLASSPATH``PATH` 三个环境变量是否正确写入
- 执行 `source /etc/profile` 使环境变量在当前会话生效
- 同时 export 关键环境变量(`export JAVA_HOME CLASSPATH PATH`)到当前 shell 环境
- 再次执行 `java -version` 检查
- 若仍然失败,尝试使用 `$JAVA_HOME/bin/java -version` 进行检查
4. **重试成功**:打印详细版本信息日志,继续后续流程
5. **重试失败**:打印错误日志,保留已安装的文件供人工排查,报错并退出整个部署流程
6. **重试计数**:最多重试3次,超过3次后直接报错退出
#### 日志要求
- 检查成功时打印:`log "INFO" "✅ JDK 部署成功,版本信息:$(java -version 2>&1)"`
- 检查失败时打印:`log "ERROR" "❌ JDK 部署失败,java -version 无法执行"`
- 重试时打印:`log "WARN" "⚠️ 正在重试 JDK 检查(第 $retry_count 次)..."`
- 诊断信息打印:`log "INFO" "🔍 当前 JAVA_HOME: $JAVA_HOME"`
- 环境变量检查时打印:`log "INFO" "🔍 检查 /etc/profile 中 JAVA_HOME、CLASSPATH、PATH 配置..."`
- source 执行时打印:`log "INFO" "🔄 重新加载环境变量:source /etc/profile"`
- export 执行时打印:`log "INFO" "🔄 导出环境变量到当前会话"`
- 最终失败时打印:`log "ERROR" "❌ JDK 检查失败,已重试 3 次,请检查 JDK 安装和环境变量配置"`
- 使用绝对路径检查时打印:`log "INFO" "🔍 尝试使用绝对路径检查:$JAVA_HOME/bin/java -version"`
## 疑问与解答记录
### 疑问1:重试失败后的处理方式
- **问题:** 如果重新执行 `source /etc/profile` 后,`java -version` 检查仍然失败,应该如何处理?
- **解答:** 如果重试后仍然失败,则报错并退出整个部署流程。
### 疑问2:日志输出详细程度
- **问题:** 执行 `java -version` 检查时,是否需要将版本信息输出到日志?
- **解答:** 需要打印详细日志,将 `java -version` 的版本信息输出到日志中。
### 疑问3:错误处理和回滚
- **问题:** 如果 JDK 部署最终失败,是否需要回滚操作?
- **解答:** 保留已安装的文件,不进行回滚操作,保留已安装的文件供人工排查。
### 疑问4:函数所在位置
- **问题:** `deploy_jdk_host` 函数是否需要拆分到独立的脚本文件中?
- **解答:** 当前主脚本里面已经有 `deploy_jdk_host` 函数了,不需要拆分,直接在主脚本中修改。
### 疑问5:环境变量检查方式
- **问题:** 如何判断 `/etc/profile` 是否正确写入环境变量?
- **解答:** 可以通过 `grep` 搜索 `JAVA_HOME` 关键字来检查。
### 疑问6:source 执行上下文
- **问题:** `source /etc/profile` 只在当前 shell 会话中生效,是否会影响后续操作?
- **解答:** 需要永久生效,确保环境变量在后续操作中可用。
### 疑问7:检查时机
- **问题:** 在什么时候执行 `java -version` 检查?
- **解答:** 在写入环境变量后再检查。
### 疑问8:检查成功的判断标准
- **问题:** 如何判断 `java -version` 执行成功?
- **解答:** 只要输出了版本号就可以,不限制具体版本内容。
### 疑问9:grep 检查的具体内容
- **问题:** 检查 `/etc/profile` 时需要 grep 什么内容?
- **解答:** 检查完整的配置,包括 `JAVA_HOME``CLASSPATH``PATH` 三个环境变量是否正确写入。
### 疑问10:source /etc/environment 的实际效果
- **问题:** 在函数内执行 `source /etc/profile` 只在当前 shell 会话生效,如何确保后续流程能使用环境变量?
- **解答:** 采用双重保障方式:
1. 先执行 `source /etc/profile` 使环境变量在当前会话生效
2. 同时 export 关键环境变量(JAVA_HOME、PATH)到当前 shell 环境
3. 检查时使用 `java -version`,若失败则尝试使用 `$JAVA_HOME/bin/java -version`
### 疑问11:检查失败时的诊断信息
- **问题:** 第一次检查失败时,是否需要输出诊断信息?
- **解答:** 输出当前 `$JAVA_HOME` 值,帮助排查问题。
### 疑问12:JDK 版本要求
- **问题:** 是否需要检查 JDK 版本是否符合要求?
- **解答:** JDK 版本不用检查,只要能正常执行 `java -version` 即可。
### 疑问13:系统中已存在其他 JDK 的情况
- **问题:** 如果系统中已经安装了其他 JDK(如 OpenJDK 11),如何处理?
- **解答:** 已存在的话已经有判断不执行部署了吧?当前函数中已有 JDK 存在性检查,已安装则跳过。
### 疑问14:java 命令查找路径
- **问题:** 检查 `java -version` 时,是检查系统 PATH 中的 java,还是检查新安装 JDK 路径下的 java?
- **解答:** 使用 `java -version`(依赖 PATH),source /etc/profile 后 PATH 会包含 JDK 路径。
### 疑问15:重试次数限制
- **问题:** 是否限制重试次数?还是只重试一次?
- **解答:** 重试3次,3次都失败后报错退出。
## 规范文档
- 代码规范: `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
......
# JDK服务部署脚本优化 - 计划执行文档
> 基于需求文档:`_PRD_jdk服务部署脚本优化_需求文档.md`
---
## 1. 代码路径
- **主脚本**`自动化部署脚本/x86架构/新统一平台/new_auto.sh`
- **目标函数**`deploy_jdk_host`
---
## 2. 需求概述
`deploy_jdk_host` 函数中,新增 `java -version` 检查逻辑,确保 JDK 正确部署成功。检查失败时支持重试(最多3次),并提供详细的诊断日志。
---
## 3. 实现目标
### 3.1 核心目标
在 JDK 环境变量写入后,验证 JDK 是否能正常工作,确保后续依赖 JDK 的组件能正常运行。
### 3.2 具体要求
- [ ] 在写入环境变量后立即执行 `java -version` 检查
- [ ] 检查成功:打印详细版本信息,继续后续流程
- [ ] 检查失败:执行重试逻辑,最多重试3次
- [ ] 提供详细的诊断信息(JAVA_HOME 值、环境变量配置等)
- [ ] 采用双重保障方式(source + export)确保环境变量生效
- [ ] 失败后保留已安装文件,报错退出部署流程
---
## 4. 实现逻辑
### 4.1 检查时机
`log "INFO" "✅ Java环境变量已写入 /etc/profile"` 之后添加检查代码
### 4.2 检查流程
```bash
# 步骤1:第一次检查
if java -version 2>&1 | grep -q "version"; then
log "INFO" "✅ JDK 部署成功,版本信息:$(java -version 2>&1)"
return 0
fi
# 步骤2:重试逻辑(最多3次)
for ((i=1; i<=3; i++)); do
# 2.1 输出诊断信息
log "INFO" "🔍 当前 JAVA_HOME: $JAVA_HOME"
# 2.2 检查环境变量配置
log "INFO" "🔍 检查 /etc/profile 中 JAVA_HOME、CLASSPATH、PATH 配置..."
if ! grep -q "JAVA_HOME=" /etc/profile || \
! grep -q "CLASSPATH=" /etc/profile || \
! grep -q "PATH.*JAVA_HOME" /etc/profile; then
log "ERROR" "❌ /etc/profile 中环境变量配置不完整"
fi
# 2.3 重新加载环境变量
log "INFO" "🔄 重新加载环境变量:source /etc/profile"
source /etc/profile
# 2.4 导出到当前会话
log "INFO" "🔄 导出环境变量到当前会话"
export JAVA_HOME
export CLASSPATH
export PATH
# 2.5 再次检查
if java -version 2>&1 | grep -q "version"; then
log "INFO" "✅ JDK 检查成功(第 $i 次重试),版本信息:$(java -version 2>&1)"
return 0
fi
# 2.6 尝试绝对路径
log "INFO" "🔍 尝试使用绝对路径检查:$JAVA_HOME/bin/java -version"
if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then
if $JAVA_HOME/bin/java -version 2>&1 | grep -q "version"; then
log "INFO" "✅ JDK 检查成功(绝对路径),版本信息:$($JAVA_HOME/bin/java -version 2>&1)"
return 0
fi
fi
# 2.7 打印重试日志
if [[ $i -lt 3 ]]; then
log "WARN" "⚠️ 正在重试 JDK 检查(第 $((i+1)) 次)..."
fi
done
# 步骤3:最终失败
log "ERROR" "❌ JDK 检查失败,已重试 3 次,请检查 JDK 安装和环境变量配置"
return 1
```
---
## 5. 实现步骤
### 步骤1:定位代码位置
- 文件:`自动化部署脚本/x86架构/新统一平台/new_auto.sh`
- 查找目标行:`log "INFO" "✅ Java环境变量已写入 /etc/profile"`
### 步骤2:添加第一次检查
在目标行之后添加:
```bash
# 检查 JDK 是否正确部署
log "INFO" "🔍 开始检查 JDK 部署状态..."
```
### 步骤3:实现检查逻辑
按照4.2节的检查流程实现代码
### 步骤4:添加日志输出
按照需求文档中的日志要求添加各场景的日志
### 步骤5:测试验证
- 测试JDK首次安装成功场景
- 测试环境变量未生效重试场景
- 测试JDK安装失败场景
- 验证日志输出完整性
---
## 6. 代码实现设计
### 6.1 检查函数设计
```bash
# ========================================
# ✅ 函数:检查 JDK 部署状态
# 用途:验证 JDK 是否正确安装并可用
# 参数:无
# 返回:0-成功, 1-失败
# ========================================
function check_jdk_installation() {
local max_retry=3
local retry_count=0
log "INFO" "🔍 开始检查 JDK 部署状态..."
# 第一次检查
if _check_java_version; then
log "INFO" "✅ JDK 部署成功,版本信息:$(_get_java_version)"
return 0
fi
# 重试逻辑
while [[ $retry_count -lt $max_retry ]]; do
((retry_count++))
log "WARN" "⚠️ JDK 检查失败,正在重试(第 $retry_count 次)..."
if _retry_jdk_check; then
log "INFO" "✅ JDK 检查成功(第 $retry_count 次重试),版本信息:$(_get_java_version)"
return 0
fi
done
# 最终失败
log "ERROR" "❌ JDK 检查失败,已重试 $max_retry 次,请检查 JDK 安装和环境变量配置"
return 1
}
# 内部函数:检查 java -version
function _check_java_version() {
java -version 2>&1 | grep -q "version"
}
# 内部函数:获取 Java 版本信息
function _get_java_version() {
java -version 2>&1 | head -n 1
}
# 内部函数:重试 JDK 检查
function _retry_jdk_check() {
# 输出诊断信息
log "INFO" "🔍 当前 JAVA_HOME: $JAVA_HOME"
# 检查环境变量配置
log "INFO" "🔍 检查 /etc/profile 中 JAVA_HOME、CLASSPATH、PATH 配置..."
local check_result=true
if ! grep -q "JAVA_HOME=" /etc/profile 2>/dev/null; then
log "ERROR" "❌ /etc/profile 中未找到 JAVA_HOME 配置"
check_result=false
fi
if ! grep -q "CLASSPATH=" /etc/profile 2>/dev/null; then
log "ERROR" "❌ /etc/profile 中未找到 CLASSPATH 配置"
check_result=false
fi
if ! grep -q "PATH.*JAVA_HOME" /etc/profile 2>/dev/null; then
log "WARN" "⚠️ /etc/profile 中 PATH 可能未包含 JAVA_HOME"
fi
# 重新加载环境变量
log "INFO" "🔄 重新加载环境变量:source /etc/profile"
if [[ -f /etc/profile ]]; then
source /etc/profile
else
log "ERROR" "❌ /etc/profile 文件不存在"
return 1
fi
# 导出到当前会话
log "INFO" "🔄 导出环境变量到当前会话"
[[ -n "$JAVA_HOME" ]] && export JAVA_HOME
[[ -n "$CLASSPATH" ]] && export CLASSPATH
[[ -n "$PATH" ]] && export PATH
# 再次检查
if _check_java_version; then
return 0
fi
# 尝试绝对路径
log "INFO" "🔍 尝试使用绝对路径检查:$JAVA_HOME/bin/java -version"
if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then
if $JAVA_HOME/bin/java -version 2>&1 | grep -q "version"; then
return 0
fi
fi
return 1
}
```
### 6.2 集成到 deploy_jdk_host 函数
```bash
function deploy_jdk_host() {
# ... 原有代码 ...
log "INFO" "✅ Java环境变量已写入 /etc/profile"
# ✅ 新增:检查 JDK 部署状态
if ! check_jdk_installation; then
log "ERROR" "❌ JDK 部署检查失败,停止部署流程"
return 1
fi
# ... 后续代码 ...
}
```
---
## 7. 测试用例
| 用例编号 | 测试场景 | 预期结果 |
|----------|----------|----------|
| TC-01 | JDK 首次安装成功 | 首次检查通过,打印版本信息 |
| TC-02 | 环境变量未生效(重试成功) | 重试1次后成功 |
| TC-03 | 环境变量未生效(重试3次成功) | 重试3次后成功 |
| TC-04 | JDK 安装失败 | 重试3次后失败,报错退出 |
| TC-05 | /etc/profile 配置不完整 | 打印错误日志,尝试重试 |
| TC-06 | JAVA_HOME 路径错误 | 尝试绝对路径失败后报错 |
| TC-07 | java 命令无执行权限 | 打印诊断信息后报错 |
| TC-08 | 已有 JDK 存在 | 跳过部署(原有逻辑) |
---
## 8. 风险与应对
| 风险 | 影响 | 概率 | 应对措施 |
|-----|------|------|---------|
| source /etc/profile 执行失败 | 无法加载环境变量 | 低 | 检查文件存在性,提供明确错误信息 |
| 环境变量冲突 | 与系统已有配置冲突 | 低 | 保留原有检查逻辑,已安装则跳过 |
| 重试次数过多影响执行效率 | 部署时间延长 | 低 | 限制最多重试3次 |
| java -version 输出格式差异 | 检查逻辑失效 | 低 | 使用 grep -q "version" 通用匹配 |
---
## 9. 实施状态
| 序号 | 任务 | 状态 | 备注 |
|-----|------|------|------|
| 1 | 定位代码位置 | ✅ 已完成 | new_auto.sh 第1149行 |
| 2 | 添加第一次检查逻辑 | ✅ 已完成 | 实现 _check_jdk_installation 函数 |
| 3 | 实现重试逻辑(3次) | ✅ 已完成 | 支持最多3次重试 |
| 4 | 添加诊断信息输出 | ✅ 已完成 | 输出 JAVA_HOME 等诊断信息 |
| 5 | 添加环境变量检查 | ✅ 已完成 | 检查 JAVA_HOME、CLASSPATH、PATH |
| 6 | 实现双重保障方式 | ✅ 已完成 | source + export + 绝对路径 |
| 7 | 添加完整日志输出 | ✅ 已完成 | 9种场景日志输出 |
| 8 | 测试验证各场景 | ⏳ 待执行 | 需在实际环境中测试 |
---
## 10. 验收标准
### 10.1 功能验收
- [ ] JDK 部署后能正确执行 `java -version`
- [ ] 检查失败时自动重试(最多3次)
- [ ] 提供详细的诊断信息
- [ ] 检查通过后打印版本信息
- [ ] 最终失败时报错退出部署流程
- [ ] 保留已安装的文件
### 10.2 代码质量验收
- [ ] 符合代码规范要求
- [ ] 中文注释完整
- [ ] 函数职责单一
- [ ] 错误处理完善
- [ ] 日志输出清晰
---
## 11. 优化功能回填
> 本章节用于记录开发过程中发现的优化点,开发完成后回填到需求文档。
| 序号 | 优化内容 | 状态 | 说明 |
|------|----------|------|------|
| 1 | 待补充 | ⏳ 待开发 | |
---
## 12. 规范文档
- 代码规范: `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结: `Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结: `Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范: `Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范: `Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
---
**文档版本:** v1.0
**创建日期:** 2026-04-20
**最后更新:** 2026-04-20
**更新内容:** 初始版本,基于需求文档创建计划执行文档
......@@ -819,6 +819,124 @@ function start_java_meeting_service() {
}
# ========================================
# ✅ 函数:检查 JDK 部署状态
# 描述:验证 JDK 是否正确安装并可用
# 参数:
# $1: JAVA_HOME 路径
# 返回:0-成功, 1-失败
# ========================================
function _check_jdk_installation() {
local jdk_home="$1"
local max_retry=3
local retry_count=0
# 第一次检查
log "INFO" "🔍 执行第一次 JDK 检查..."
if _check_java_version; then
log "INFO" "✅ JDK 部署成功,版本信息:$(_get_java_version)"
return 0
fi
# 重试逻辑
while [[ $retry_count -lt $max_retry ]]; do
((retry_count++))
log "WARN" "⚠️ JDK 检查失败,正在重试(第 $retry_count 次)..."
if _retry_jdk_check "$jdk_home"; then
log "INFO" "✅ JDK 检查成功(第 $retry_count 次重试),版本信息:$(_get_java_version)"
return 0
fi
done
# 最终失败
log "ERROR" "❌ JDK 检查失败,已重试 $max_retry 次,请检查 JDK 安装和环境变量配置"
return 1
}
# ========================================
# ✅ 函数:检查 java -version
# 描述:检查 java 命令是否能输出版本信息
# 参数:无
# 返回:0-成功, 1-失败
# ========================================
function _check_java_version() {
java -version 2>&1 | grep -q "version"
}
# ========================================
# ✅ 函数:获取 Java 版本信息
# 描述:获取 Java 版本字符串
# 参数:无
# 返回:版本信息字符串
# ========================================
function _get_java_version() {
java -version 2>&1 | head -n 1
}
# ========================================
# ✅ 函数:重试 JDK 检查
# 描述:执行环境变量检查、重新加载和验证
# 参数:
# $1: JAVA_HOME 路径
# 返回:0-成功, 1-失败
# ========================================
function _retry_jdk_check() {
local jdk_home="$1"
# 输出诊断信息
log "INFO" "🔍 当前 JAVA_HOME: $JAVA_HOME"
# 检查环境变量配置
log "INFO" "🔍 检查 /etc/profile 中 JAVA_HOME、CLASSPATH、PATH 配置..."
local check_result=true
if ! grep -q "JAVA_HOME=" /etc/profile 2>/dev/null; then
log "ERROR" "❌ /etc/profile 中未找到 JAVA_HOME 配置"
check_result=false
fi
if ! grep -q "CLASSPATH=" /etc/profile 2>/dev/null; then
log "ERROR" "❌ /etc/profile 中未找到 CLASSPATH 配置"
check_result=false
fi
if ! grep -q "PATH.*JAVA_HOME" /etc/profile 2>/dev/null; then
log "WARN" "⚠️ /etc/profile 中 PATH 可能未包含 JAVA_HOME"
fi
# 重新加载环境变量
log "INFO" "🔄 重新加载环境变量:source /etc/profile"
if [[ -f /etc/profile ]]; then
source /etc/profile 2>/dev/null || true
else
log "ERROR" "❌ /etc/profile 文件不存在"
return 1
fi
# 导出到当前会话
log "INFO" "🔄 导出环境变量到当前会话"
[[ -n "$jdk_home" ]] && export JAVA_HOME="$jdk_home"
[[ -n "$JAVA_HOME" ]] && export CLASSPATH=".:$JAVA_HOME/lib/tools.jar"
[[ -n "$JAVA_HOME" ]] && export PATH="$JAVA_HOME/bin:$PATH"
# 再次检查
if _check_java_version; then
return 0
fi
# 尝试绝对路径
log "INFO" "🔍 尝试使用绝对路径检查:$jdk_home/bin/java -version"
if [[ -n "$jdk_home" ]] && [[ -x "$jdk_home/bin/java" ]]; then
if $jdk_home/bin/java -version 2>&1 | grep -q "version"; then
return 0
fi
fi
return 1
}
# ========================================
# ☕ 函数:deploy_jdk_host
# 描述:在宿主机上部署JDK(tar.gz格式)
......@@ -1030,36 +1148,24 @@ EOF
log "INFO" "✅ Java环境变量已写入 /etc/profile"
# 8. 立即在当前会话中生效
# 8. 检查 JDK 部署状态
log "INFO" "🔍 开始检查 JDK 部署状态..."
if ! _check_jdk_installation "$jdk_home"; then
log "ERROR" "❌ JDK 部署检查失败,停止部署流程"
return 1
fi
# 9. 立即在当前会话中生效(确保后续流程可用)
log "INFO" "🔄 正在重新加载 /etc/profile 使环境变量生效..."
source /etc/profile 2>/dev/null || . /etc/profile 2>/dev/null
source /etc/profile
source /etc/profile 2>/dev/null || true
# 如果source失败,则手动设置环境变量
if [ $? -ne 0 ]; then
log "WARN" "⚠️ source /etc/profile 失败,使用export设置环境变量"
export JAVA_HOME="$jdk_home"
export CLASSPATH=".:$JAVA_HOME/lib/tools.jar"
export PATH="$JAVA_HOME/bin:$PATH"
fi
# 手动设置环境变量到当前会话
export JAVA_HOME="$jdk_home"
export CLASSPATH=".:$JAVA_HOME/lib/tools.jar"
export PATH="$JAVA_HOME/bin:$PATH"
log "INFO" "✅ 环境变量已在当前会话中生效"
# 9. 验证Java安装
log "INFO" "🔍 正在验证Java安装..."
if java -version >/dev/null 2>&1; then
local java_version=$(java -version 2>&1 | head -n1)
local java_path=$(which java)
log "INFO" "✅ Java环境配置成功!"
log "INFO" " Java版本: $java_version"
log "INFO" " Java路径: $java_path"
log "INFO" " JAVA_HOME: $JAVA_HOME"
else
log "ERROR" "❌ Java环境配置失败,请检查路径或权限"
log "INFO" " 请手动执行: source /etc/profile"
return 1
fi
log "INFO" "=================================================="
log "INFO" "🎉 JDK部署成功!"
log "INFO" " 安装路径: $jdk_home"
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论