Files
x-server-mobile/docs/DEPLOYMENT_STEPS.md
T

239 lines
6.2 KiB
Markdown
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.
# 线上部署和调试步骤
**版本**: 1.0.0
**更新时间**: 2026-02-28
**分支**: feature/debug-feishu-message
---
## 📋 部署前检查清单
### 代码变更文件
```
backend/app/model/FeishuMessage.php # 新建 - 消息映射模型
backend/app/model/FeishuMessageLog.php # 新建 - 消息日志模型
backend/app/service/ApprovalService.php # 修改 - 添加消息更新逻辑
backend/app/service/FeishuNotificationService.php # 修改 - 添加日志记录
backend/app/controller/DebugController.php # 新建 - 调试接口
backend/app/service/BusinessTripService.php # 修改 - 添加node_id参数
backend/config/route.php # 修改 - 添加调试路由
```
### 数据库变更
```
新建表:
- feishu_message # 消息映射表
- feishu_message_log # 消息日志表
```
---
## 🚀 部署步骤
### Step 1: 备份数据库
```bash
ssh root@45.153.130.80
# 备份数据库
docker exec 1Panel-mysql-XyxS mysqldump -uxserver -pNsNBSQm4b2b7SzhR xserver > backup_$(date +%Y%m%d_%H%M%S).sql
```
### Step 2: 创建数据库表
```bash
# 创建 feishu_message_log 表
docker exec 1Panel-mysql-XyxS mysql -uxserver -pNsNBSQm4b2b7SzhR xserver << 'EOF'
CREATE TABLE IF NOT EXISTS feishu_message_log (
id bigint unsigned NOT NULL AUTO_INCREMENT,
action varchar(20) NOT NULL COMMENT '操作类型:send=发送, update=更新, update_card=更新卡片',
order_id bigint unsigned NOT NULL COMMENT '审批订单ID',
node_id bigint unsigned DEFAULT NULL COMMENT '审批节点ID',
user_id bigint unsigned DEFAULT NULL COMMENT '用户ID',
message_id varchar(64) DEFAULT NULL COMMENT '飞书消息ID',
status varchar(10) NOT NULL COMMENT '状态:success=成功, failed=失败',
request_data text DEFAULT NULL COMMENT '请求数据(JSON)',
response_data text DEFAULT NULL COMMENT '响应数据(JSON)',
error_message text DEFAULT NULL COMMENT '错误信息',
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_order_id (order_id),
KEY idx_action (action),
KEY idx_status (status),
KEY idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='飞书消息日志表';
EOF
# 验证表创建
docker exec 1Panel-mysql-XyxS mysql -uxserver -pNsNBSQm4b2b7SzhR xserver -e "SHOW TABLES LIKE 'feishu%';"
```
### Step 3: 部署代码
```bash
# 进入项目目录
cd /opt/1panel/www/sites/uniservice-mobile.hnxinyouhe.com/index
# 拉取最新代码
git fetch origin
git checkout feature/debug-feishu-message
git pull origin feature/debug-feishu-message
```
### Step 4: 重启后端服务
```bash
# 重启后端容器
docker restart x-server-backend
# 检查服务状态
docker logs x-server-backend --tail 50
```
### Step 5: 验证部署
```bash
# 检查PHP报错
docker logs x-server-backend 2>&1 | grep -i error
# 测试调试接口
curl "http://localhost:8787/debug/message-logs?debug=1&limit=10"
```
---
## 🧪 调试测试计划
### 测试场景1:会签(and_approve)
**配置:**
```sql
-- 确认节点类型为会签
UPDATE approval_node SET type='and_approve' WHERE id=7;
```
**测试步骤:**
1. 选择3个审批人提交申请
2. 第一个审批人通过 → 检查状态仍为 pending
3. 第二个审批人通过 → 检查状态仍为 pending
4. 第三个审批人通过 → 检查状态变为 approved
5. 检查消息日志,验证所有操作都被记录
**验证点:**
- [ ] 每次审批后状态正确更新
- [ ] 审批记录正确保存
- [ ] 消息日志有记录
- [ ] 会签完成后通知申请人
---
### 测试场景2:或签(or_approve)
**配置:**
```sql
-- 修改节点类型为或签
UPDATE approval_node SET type='or_approve' WHERE id=7;
```
**测试步骤:**
1. 选择3个审批人提交申请
2. 第一个审批人通过 → 状态变为 approved
3. 检查其他审批人的消息卡片是否更新
**验证点:**
- [ ] 一人通过后立即完成流程
- [ ] 消息卡片更新被调用
- [ ] 其他审批人的消息移除按钮
- [ ] 消息日志记录更新操作
---
### 测试场景3:单人审批(approver)
**配置:**
```sql
-- 修改节点类型为单人审批
UPDATE approval_node SET type='approver' WHERE id=7;
```
**测试步骤:**
1. 选择多个审批人提交申请
2. 第一个审批人通过 → 状态变为 approved
3. 检查消息更新
**验证点:**
- [ ] 一人通过后完成流程
- [ ] 消息卡片正确更新
- [ ] 其他人无法重复操作
---
## 🔍 问题排查
### 查看消息日志
```bash
# 查看最近50条日志
docker exec 1Panel-mysql-XyxS mysql -uxserver -pNsNBSQm4b2b7SzhR xserver -e "
SELECT id, action, order_id, user_id, message_id, status,
created_at
FROM feishu_message_log
ORDER BY created_at DESC
LIMIT 50;
"
# 查看失败的日志
docker exec 1Panel-mysql-XyxS mysql -uxserver -pNsNBSQm4b2b7SzhR xserver -e "
SELECT * FROM feishu_message_log
WHERE status = 'failed'
ORDER BY created_at DESC
LIMIT 10\G
"
```
### 查看消息映射
```bash
# 查看某个订单的消息映射
docker exec 1Panel-mysql-XyxS mysql -uxserver -pNsNBSQm4b2b7SzhR xserver -e "
SELECT * FROM feishu_message
WHERE order_id = <ORDER_ID>;
"
```
### 查看后端日志
```bash
# 实时日志
docker logs x-server-backend -f --tail 100
# 查看特定关键词
docker logs x-server-backend 2>&1 | grep -i "飞书\|审批\|消息"
```
---
## 📊 测试记录模板
### 审批测试记录
| 订单ID | 申请人 | 审批人 | 节点类型 | 操作 | 预期结果 | 实际结果 | 状态 |
|--------|--------|--------|----------|------|----------|----------|------|
| | | | | | | | |
### 消息测试记录
| 订单ID | 操作 | message_id | 状态 | 预期行为 | 实际行为 | 状态 |
|--------|------|------------|------|----------|----------|------|
| | |------------|------|----------| | |
---
## 🔄 回滚方案
如果出现问题需要回滚:
```bash
# 回滚代码
git checkout master
git pull origin master
docker restart x-server-backend
# 恢复数据库(如果需要)
docker exec -i 1Panel-mysql-XyxS mysql -uxserver -pNsNBSQm4b2b7SzhR xserver < backup_xxx.sql
```
---
**维护人**: 开发团队
**最后更新**: 2026-02-28