init: import production code mss.nahaichuan.com (exclude Runtime/Uploads/backups/logs)
这个提交包含在:
567
docs/宝塔面板Supervisor配置指南.md
普通文件
567
docs/宝塔面板Supervisor配置指南.md
普通文件
@@ -0,0 +1,567 @@
|
||||
# 宝塔面板 Supervisor 配置订单同步任务指南
|
||||
|
||||
## 概述
|
||||
|
||||
本文档介绍如何在宝塔面板中使用 **Supervisor 进程守护管理器** 配置订单双向同步任务。
|
||||
|
||||
**为什么使用 Supervisor 而不是计划任务?**
|
||||
- 宝塔计划任务可能存在路径识别问题
|
||||
- Supervisor 提供更稳定的进程管理
|
||||
- 自动重启、开机自启等高级功能
|
||||
- 更好的日志管理和监控
|
||||
|
||||
## 前置条件
|
||||
|
||||
### 1. 安装 Supervisor 管理器
|
||||
|
||||
1. 登录宝塔面板
|
||||
2. 点击 **软件商店**
|
||||
3. 搜索 **"Supervisor管理器"**
|
||||
4. 点击 **"安装"**
|
||||
|
||||
### 2. 创建守护脚本
|
||||
|
||||
在SSH中执行以下命令:
|
||||
|
||||
```bash
|
||||
# 进入项目目录
|
||||
cd /www/wwwroot/mss.nahaichuan.com
|
||||
|
||||
# 创建守护脚本
|
||||
cat > order_sync_daemon.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
|
||||
# 订单同步守护脚本
|
||||
# 每5分钟执行一次双向同步任务
|
||||
|
||||
# 项目路径
|
||||
PROJECT_DIR="/www/wwwroot/mss.nahaichuan.com"
|
||||
|
||||
# 日志目录
|
||||
LOG_DIR="/www/wwwroot/mss.nahaichuan.com/Runtime/Logs/OrderSync"
|
||||
mkdir -p $LOG_DIR
|
||||
|
||||
# 无限循环
|
||||
while true; do
|
||||
echo "========================================" >> $LOG_DIR/daemon.log
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始执行订单同步任务" >> $LOG_DIR/daemon.log
|
||||
|
||||
cd $PROJECT_DIR
|
||||
|
||||
# 1. 正向同步:原订单 → 骑手端(创建可接订单)
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 执行正向同步(原订单→骑手端)..." >> $LOG_DIR/daemon.log
|
||||
php index.php /Cli/OrderSync/batchSync >> $LOG_DIR/daemon.log 2>&1
|
||||
|
||||
echo "" >> $LOG_DIR/daemon.log
|
||||
|
||||
# 2. 反向同步:骑手端 → 原订单(更新订单状态)
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 执行反向同步(骑手端→原订单)..." >> $LOG_DIR/daemon.log
|
||||
php index.php /Cli/OrderSync/syncRiderOrderStatus >> $LOG_DIR/daemon.log 2>&1
|
||||
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 双向同步完成,等待下次执行..." >> $LOG_DIR/daemon.log
|
||||
echo "" >> $LOG_DIR/daemon.log
|
||||
|
||||
# 休眠5分钟(300秒)
|
||||
sleep 300
|
||||
done
|
||||
EOF
|
||||
|
||||
# 赋予执行权限
|
||||
chmod +x order_sync_daemon.sh
|
||||
```
|
||||
|
||||
### 3. 测试脚本
|
||||
|
||||
在启用 Supervisor 之前,先手动测试脚本是否正常:
|
||||
|
||||
```bash
|
||||
# 测试正向同步
|
||||
cd /www/wwwroot/mss.nahaichuan.com
|
||||
php index.php /Cli/OrderSync/batchSync
|
||||
|
||||
# 测试反向同步
|
||||
php index.php /Cli/OrderSync/syncRiderOrderStatus
|
||||
```
|
||||
|
||||
如果都能正常执行,再继续下一步。
|
||||
|
||||
## Supervisor 配置步骤
|
||||
|
||||
### 方法一:使用宝塔界面配置(推荐)
|
||||
|
||||
#### 1. 打开 Supervisor 管理器
|
||||
|
||||
1. 登录宝塔面板
|
||||
2. 点击左侧菜单 **"软件商店"**
|
||||
3. 找到已安装的 **"Supervisor管理器"**
|
||||
4. 点击 **"设置"** 按钮
|
||||
|
||||
#### 2. 添加守护进程
|
||||
|
||||
点击 **"添加守护进程"** 按钮,填写以下信息:
|
||||
|
||||
| 配置项 | 值 | 说明 |
|
||||
|--------|-----|------|
|
||||
| **名称** | `order_sync` | 进程名称,可自定义 |
|
||||
| **运行目录** | `/www/wwwroot/mss.nahaichuan.com` | 项目根目录 |
|
||||
| **启动命令** | `/bin/bash /www/wwwroot/mss.nahaichuan.com/order_sync_daemon.sh` | 守护脚本完整路径 |
|
||||
| **进程数量** | `1` | 只需要1个进程 |
|
||||
| **用户** | `www` 或 `root` | 运行用户 |
|
||||
|
||||
**配置示例截图说明:**
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────┐
|
||||
│ 添加守护进程 │
|
||||
├──────────────────────────────────────────────┤
|
||||
│ 名称: order_sync │
|
||||
│ │
|
||||
│ 运行目录: /www/wwwroot/mss.nahaichuan.com│
|
||||
│ │
|
||||
│ 启动命令: /bin/bash │
|
||||
│ /www/wwwroot/mss.nahaichuan.com/│
|
||||
│ order_sync_daemon.sh │
|
||||
│ │
|
||||
│ 进程数量: 1 │
|
||||
│ │
|
||||
│ 用户: www │
|
||||
│ │
|
||||
│ [取消] [提交] │
|
||||
└──────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
#### 3. 启动进程
|
||||
|
||||
1. 提交配置后,会在进程列表中看到 `order_sync`
|
||||
2. 状态显示为 **"已停止"**
|
||||
3. 点击 **"启动"** 按钮
|
||||
4. 状态变为 **"运行中"** 表示成功
|
||||
|
||||
### 方法二:使用配置文件(高级)
|
||||
|
||||
#### 1. 进入配置文件
|
||||
|
||||
在 Supervisor 管理器界面,点击 **"配置修改"** 标签。
|
||||
|
||||
#### 2. 添加配置
|
||||
|
||||
在配置文件末尾添加:
|
||||
|
||||
```ini
|
||||
[program:order_sync]
|
||||
# 进程名称
|
||||
command=/bin/bash /www/wwwroot/mss.nahaichuan.com/order_sync_daemon.sh
|
||||
# 运行目录
|
||||
directory=/www/wwwroot/mss.nahaichuan.com
|
||||
# 运行用户
|
||||
user=www
|
||||
# 自动启动
|
||||
autostart=true
|
||||
# 自动重启
|
||||
autorestart=true
|
||||
# 启动等待时间(秒)
|
||||
startsecs=5
|
||||
# 停止等待时间(秒)
|
||||
stopwaitsecs=10
|
||||
# 重启次数限制
|
||||
startretries=3
|
||||
# 重定向stderr到stdout
|
||||
redirect_stderr=true
|
||||
# 日志文件路径
|
||||
stdout_logfile=/www/wwwroot/mss.nahaichuan.com/Runtime/Logs/OrderSync/supervisor.log
|
||||
# 日志文件大小限制(50MB)
|
||||
stdout_logfile_maxbytes=50MB
|
||||
# 保留日志文件数量
|
||||
stdout_logfile_backups=10
|
||||
```
|
||||
|
||||
#### 3. 重载配置
|
||||
|
||||
```bash
|
||||
# SSH中执行
|
||||
supervisorctl reread
|
||||
supervisorctl update
|
||||
supervisorctl start order_sync
|
||||
```
|
||||
|
||||
## 同步任务说明
|
||||
|
||||
守护脚本会每5分钟自动执行以下**两个同步任务**:
|
||||
|
||||
### 1. 正向同步(batchSync)
|
||||
**原订单系统 → 骑手端**
|
||||
|
||||
```bash
|
||||
php index.php /Cli/OrderSync/batchSync
|
||||
```
|
||||
|
||||
- **作用:** 将待发货订单推送到骑手端
|
||||
- **触发条件:** 原订单状态为"待发货"(status = 1)
|
||||
- **同步结果:** 在骑手端创建"待接单"订单(order_status = 0)
|
||||
|
||||
### 2. 反向同步(syncRiderOrderStatus)
|
||||
**骑手端 → 原订单系统**
|
||||
|
||||
```bash
|
||||
php index.php /Cli/OrderSync/syncRiderOrderStatus
|
||||
```
|
||||
|
||||
- **作用:** 将骑手操作状态同步回原订单
|
||||
- **同步逻辑:**
|
||||
- 骑手接单(order_status = 1-5)→ 原订单"已发货"(status = 2)
|
||||
- 骑手送达(order_status = 6)→ 原订单"已完成"(status = 3)
|
||||
|
||||
## 日志管理
|
||||
|
||||
### 1. 查看守护脚本日志
|
||||
|
||||
**方法一:宝塔界面查看**
|
||||
1. Supervisor管理器 → 找到 `order_sync` 进程
|
||||
2. 点击 **"日志"** 按钮
|
||||
|
||||
**方法二:SSH查看**
|
||||
```bash
|
||||
# 实时查看日志
|
||||
tail -f /www/wwwroot/mss.nahaichuan.com/Runtime/Logs/OrderSync/daemon.log
|
||||
|
||||
# 查看最近100行
|
||||
tail -n 100 /www/wwwroot/mss.nahaichuan.com/Runtime/Logs/OrderSync/daemon.log
|
||||
|
||||
# 按日期查看
|
||||
grep "2025-10-29" /www/wwwroot/mss.nahaichuan.com/Runtime/Logs/OrderSync/daemon.log
|
||||
```
|
||||
|
||||
### 2. 查看 Supervisor 日志
|
||||
|
||||
```bash
|
||||
tail -f /www/wwwroot/mss.nahaichuan.com/Runtime/Logs/OrderSync/supervisor.log
|
||||
```
|
||||
|
||||
### 3. 日志示例
|
||||
|
||||
正常运行的日志应该类似:
|
||||
|
||||
```
|
||||
========================================
|
||||
[2025-10-29 15:00:00] 开始执行订单同步任务
|
||||
[2025-10-29 15:00:00] 执行正向同步(原订单→骑手端)...
|
||||
===== 批量同步任务开始 =====
|
||||
开始时间:2025-10-29 15:00:00
|
||||
找到 3 个待同步订单
|
||||
✓ 订单 2831 同步成功
|
||||
✓ 订单 2832 同步成功
|
||||
✓ 订单 2833 同步成功
|
||||
批量同步完成:成功 3 个,失败 0 个
|
||||
===== 同步任务完成 =====
|
||||
|
||||
[2025-10-29 15:00:00] 执行反向同步(骑手端→原订单)...
|
||||
===== 订单状态同步任务开始 =====
|
||||
开始时间:2025-10-29 15:00:00
|
||||
自动同步已启用,开始执行...
|
||||
找到 2 个待同步的接单订单
|
||||
✓ 订单 2625 状态已更新为发货
|
||||
✓ 订单 2683 状态已更新为发货
|
||||
接单状态同步:成功 2 个,失败 0 个
|
||||
找到 1 个待同步的完成订单
|
||||
✓ 订单 2701 状态已更新为完成
|
||||
完成状态同步:成功 1 个,失败 0 个
|
||||
===== 同步任务完成 =====
|
||||
|
||||
[2025-10-29 15:00:01] 双向同步完成,等待下次执行...
|
||||
|
||||
[2025-10-29 15:05:00] 开始执行订单同步任务
|
||||
...
|
||||
```
|
||||
|
||||
## 进程管理
|
||||
|
||||
### 宝塔界面操作
|
||||
|
||||
在 Supervisor 管理器的进程列表中:
|
||||
|
||||
| 操作 | 按钮/方法 | 说明 |
|
||||
|------|----------|------|
|
||||
| **启动** | 点击"启动"按钮 | 启动已停止的进程 |
|
||||
| **停止** | 点击"停止"按钮 | 停止运行中的进程 |
|
||||
| **重启** | 点击"重启"按钮 | 重启进程(配置修改后) |
|
||||
| **查看日志** | 点击"日志"按钮 | 查看进程输出日志 |
|
||||
| **删除** | 点击"删除"按钮 | 删除进程配置 |
|
||||
|
||||
### SSH 命令操作
|
||||
|
||||
```bash
|
||||
# 查看状态
|
||||
supervisorctl status order_sync
|
||||
|
||||
# 启动进程
|
||||
supervisorctl start order_sync
|
||||
|
||||
# 停止进程
|
||||
supervisorctl stop order_sync
|
||||
|
||||
# 重启进程
|
||||
supervisorctl restart order_sync
|
||||
|
||||
# 查看所有进程
|
||||
supervisorctl status
|
||||
|
||||
# 重新加载配置
|
||||
supervisorctl reread
|
||||
supervisorctl update
|
||||
```
|
||||
|
||||
## 修改同步频率
|
||||
|
||||
如果需要修改执行间隔,编辑守护脚本:
|
||||
|
||||
```bash
|
||||
vi /www/wwwroot/mss.nahaichuan.com/order_sync_daemon.sh
|
||||
```
|
||||
|
||||
找到 `sleep 300` 这一行,修改为:
|
||||
|
||||
| 间隔时间 | 配置值 | 说明 |
|
||||
|---------|--------|------|
|
||||
| 1分钟 | `sleep 60` | 适合订单量大、要求实时性高的场景 |
|
||||
| 3分钟 | `sleep 180` | 平衡性能和实时性 |
|
||||
| 5分钟 | `sleep 300` | 默认配置,推荐 |
|
||||
| 10分钟 | `sleep 600` | 适合订单量小的场景 |
|
||||
|
||||
**修改后重启进程:**
|
||||
|
||||
```bash
|
||||
supervisorctl restart order_sync
|
||||
```
|
||||
|
||||
或在宝塔界面点击 **"重启"** 按钮。
|
||||
|
||||
## 状态监控
|
||||
|
||||
### 1. 检查进程是否运行
|
||||
|
||||
**宝塔界面:**
|
||||
- Supervisor管理器 → 查看 `order_sync` 状态
|
||||
- 显示"运行中"且有运行时长
|
||||
|
||||
**SSH命令:**
|
||||
```bash
|
||||
# 查看 Supervisor 状态
|
||||
supervisorctl status order_sync
|
||||
|
||||
# 查看系统进程
|
||||
ps aux | grep order_sync_daemon
|
||||
|
||||
# 查看进程数
|
||||
ps aux | grep order_sync_daemon | grep -v grep | wc -l
|
||||
```
|
||||
|
||||
### 2. 验证同步是否正常
|
||||
|
||||
```bash
|
||||
# 查看最近的同步记录
|
||||
tail -n 50 /www/wwwroot/mss.nahaichuan.com/Runtime/Logs/OrderSync/daemon.log
|
||||
|
||||
# 查看数据库同步日志表
|
||||
mysql -u用户名 -p密码 -e "SELECT * FROM 数据库名.ls_rider_order_sync_log ORDER BY add_time DESC LIMIT 10;"
|
||||
```
|
||||
|
||||
### 3. 设置告警(可选)
|
||||
|
||||
可以编写监控脚本,定期检查:
|
||||
- 进程是否运行
|
||||
- 日志是否有错误
|
||||
- 最近一次同步时间
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 问题1:进程无法启动
|
||||
|
||||
**现象:** 点击启动后立即停止,或状态显示"FATAL"
|
||||
|
||||
**排查步骤:**
|
||||
|
||||
1. **查看 Supervisor 日志**
|
||||
```bash
|
||||
tail -f /www/server/supervisor/logs/order_sync.log
|
||||
```
|
||||
|
||||
2. **检查脚本权限**
|
||||
```bash
|
||||
ls -l /www/wwwroot/mss.nahaichuan.com/order_sync_daemon.sh
|
||||
# 应显示 -rwxr-xr-x
|
||||
|
||||
# 如果没有执行权限,添加:
|
||||
chmod +x /www/wwwroot/mss.nahaichuan.com/order_sync_daemon.sh
|
||||
```
|
||||
|
||||
3. **检查脚本语法**
|
||||
```bash
|
||||
bash -n /www/wwwroot/mss.nahaichuan.com/order_sync_daemon.sh
|
||||
# 无输出表示语法正确
|
||||
```
|
||||
|
||||
4. **手动执行测试**
|
||||
```bash
|
||||
/bin/bash /www/wwwroot/mss.nahaichuan.com/order_sync_daemon.sh
|
||||
# 等待几分钟,按Ctrl+C停止
|
||||
# 查看是否有错误输出
|
||||
```
|
||||
|
||||
### 问题2:同步任务未执行
|
||||
|
||||
**现象:** 进程运行中,但日志没有更新
|
||||
|
||||
**排查步骤:**
|
||||
|
||||
1. **检查日志目录权限**
|
||||
```bash
|
||||
ls -ld /www/wwwroot/mss.nahaichuan.com/Runtime/Logs/OrderSync/
|
||||
# 确保www用户有写入权限
|
||||
|
||||
# 如果没有,创建并设置权限:
|
||||
mkdir -p /www/wwwroot/mss.nahaichuan.com/Runtime/Logs/OrderSync/
|
||||
chown -R www:www /www/wwwroot/mss.nahaichuan.com/Runtime/Logs/
|
||||
chmod -R 755 /www/wwwroot/mss.nahaichuan.com/Runtime/Logs/
|
||||
```
|
||||
|
||||
2. **检查PHP路径**
|
||||
```bash
|
||||
which php
|
||||
# 输出PHP路径,如:/usr/bin/php
|
||||
|
||||
# 如果找不到,安装或配置PATH
|
||||
```
|
||||
|
||||
3. **手动执行同步命令**
|
||||
```bash
|
||||
cd /www/wwwroot/mss.nahaichuan.com
|
||||
php index.php /Cli/OrderSync/batchSync
|
||||
php index.php /Cli/OrderSync/syncRiderOrderStatus
|
||||
```
|
||||
|
||||
### 问题3:同步失败
|
||||
|
||||
**现象:** 日志显示执行了,但同步失败
|
||||
|
||||
**排查步骤:**
|
||||
|
||||
1. **查看详细错误日志**
|
||||
```bash
|
||||
cat /www/wwwroot/mss.nahaichuan.com/Runtime/Logs/OrderSync/daemon.log | grep -i "error\|fail\|exception"
|
||||
```
|
||||
|
||||
2. **检查数据库配置**
|
||||
```bash
|
||||
# 查看数据库配置文件
|
||||
cat /www/wwwroot/mss.nahaichuan.com/Application/Common/Conf/config.php | grep -A 5 "DB_"
|
||||
```
|
||||
|
||||
3. **检查 auto_sync_enabled 配置**
|
||||
```sql
|
||||
SELECT * FROM ls_rider_config WHERE merchant_id = 0;
|
||||
-- 确保 auto_sync_enabled = 1
|
||||
```
|
||||
|
||||
4. **查看同步日志表**
|
||||
```sql
|
||||
SELECT * FROM ls_rider_order_sync_log
|
||||
WHERE sync_result = 0
|
||||
ORDER BY add_time DESC
|
||||
LIMIT 10;
|
||||
-- 查看失败原因
|
||||
```
|
||||
|
||||
### 问题4:服务器重启后进程未启动
|
||||
|
||||
**原因:** Supervisor 服务未设置开机自启
|
||||
|
||||
**解决方法:**
|
||||
|
||||
```bash
|
||||
# 检查 Supervisor 服务状态
|
||||
systemctl status supervisord
|
||||
|
||||
# 设置开机自启
|
||||
systemctl enable supervisord
|
||||
|
||||
# 启动服务
|
||||
systemctl start supervisord
|
||||
```
|
||||
|
||||
## 性能优化建议
|
||||
|
||||
### 1. 数据库索引
|
||||
|
||||
确保相关表有索引,提升查询性能:
|
||||
|
||||
```sql
|
||||
-- ls_retail_bill_online 表
|
||||
ALTER TABLE ls_retail_bill_online ADD INDEX idx_status_time (status, add_time);
|
||||
|
||||
-- ls_rider_order 表
|
||||
ALTER TABLE ls_rider_order ADD INDEX idx_order_status (order_status, bill_id);
|
||||
ALTER TABLE ls_rider_order ADD INDEX idx_sync_status (is_synced);
|
||||
|
||||
-- ls_rider_order_sync_log 表
|
||||
ALTER TABLE ls_rider_order_sync_log ADD INDEX idx_sync_result (sync_result, sync_time);
|
||||
```
|
||||
|
||||
### 2. 日志清理
|
||||
|
||||
定期清理旧日志,避免占用过多磁盘空间:
|
||||
|
||||
```bash
|
||||
# 创建日志清理脚本
|
||||
cat > /www/wwwroot/mss.nahaichuan.com/clean_logs.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
# 删除30天前的日志
|
||||
find /www/wwwroot/mss.nahaichuan.com/Runtime/Logs/OrderSync/ -name "*.log" -mtime +30 -delete
|
||||
echo "[$(date)] 日志清理完成"
|
||||
EOF
|
||||
|
||||
chmod +x /www/wwwroot/mss.nahaichuan.com/clean_logs.sh
|
||||
|
||||
# 添加到crontab,每天凌晨3点执行
|
||||
# 0 3 * * * /www/wwwroot/mss.nahaichuan.com/clean_logs.sh
|
||||
```
|
||||
|
||||
### 3. 调整执行频率
|
||||
|
||||
根据业务量调整:
|
||||
- **订单量大**:缩短间隔(1-3分钟)
|
||||
- **订单量小**:延长间隔(5-10分钟)
|
||||
- **非营业时段**:可以暂停同步
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. **使用 www 用户运行**
|
||||
- 避免使用 root 用户
|
||||
- 限制文件访问权限
|
||||
|
||||
2. **日志敏感信息**
|
||||
- 不要在日志中记录密码、密钥等敏感信息
|
||||
- 定期清理日志文件
|
||||
|
||||
3. **监控异常**
|
||||
- 设置日志监控告警
|
||||
- 定期检查同步失败记录
|
||||
|
||||
## 总结
|
||||
|
||||
使用 Supervisor 守护进程管理订单同步任务的优势:
|
||||
|
||||
✅ **稳定可靠** - 自动重启,不会因为异常而停止
|
||||
✅ **开机自启** - 服务器重启后自动恢复
|
||||
✅ **日志完善** - 详细的执行日志,便于排查问题
|
||||
✅ **易于管理** - 宝塔界面操作简单,SSH命令也很方便
|
||||
✅ **双向同步** - 同时处理正向和反向同步,确保数据一致性
|
||||
|
||||
如有疑问,请参考:
|
||||
- [订单同步定时任务说明.md](./订单同步定时任务说明.md)
|
||||
- ThinkPHP 3.2.3 官方文档
|
||||
- Supervisor 官方文档
|
||||
|
||||
---
|
||||
|
||||
**最后更新:** 2025-10-29
|
||||
|
||||
421
docs/宝塔面板配置指南.md
普通文件
421
docs/宝塔面板配置指南.md
普通文件
@@ -0,0 +1,421 @@
|
||||
# 宝塔面板 - 订单同步定时任务配置指南
|
||||
|
||||
## 方案选择
|
||||
|
||||
### ✅ 推荐:使用宝塔计划任务
|
||||
|
||||
订单同步任务是**定时执行**的任务,推荐使用**宝塔计划任务**功能。
|
||||
|
||||
### ⚠️ 不推荐:进程守护
|
||||
|
||||
进程守护适合需要**常驻运行**的服务(如消息队列消费者),不适合定时任务。
|
||||
|
||||
---
|
||||
|
||||
## 方案一:宝塔计划任务(推荐)
|
||||
|
||||
### 1. 登录宝塔面板
|
||||
|
||||
访问:`http://你的服务器IP:8888`
|
||||
|
||||
### 2. 进入计划任务
|
||||
|
||||
```
|
||||
左侧菜单 → 计划任务
|
||||
```
|
||||
|
||||
### 3. 添加计划任务
|
||||
|
||||
点击**"添加计划任务"**按钮,填写以下信息:
|
||||
|
||||
#### 基本配置
|
||||
|
||||
| 配置项 | 值 |
|
||||
|--------|-----|
|
||||
| **任务类型** | Shell脚本 |
|
||||
| **任务名称** | 订单同步任务 |
|
||||
| **执行周期** | N分钟(建议5分钟) |
|
||||
| **脚本内容** | 见下方 |
|
||||
|
||||
#### 脚本内容
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
cd /www/wwwroot/mss.nahaichuan.com
|
||||
/www/server/php/74/bin/php index.php /Cli/OrderSync/syncRiderOrderStatus
|
||||
```
|
||||
|
||||
**注意事项:**
|
||||
1. 替换PHP版本路径(`/www/server/php/74/bin/php` 中的 `74` 改为你的PHP版本)
|
||||
2. 确认项目路径(`/www/wwwroot/mss.nahaichuan.com`)
|
||||
|
||||
#### 查看PHP版本路径
|
||||
|
||||
在宝塔面板中查看:
|
||||
```
|
||||
软件商店 → 已安装 → PHP → 设置 → 配置文件 → 查看当前PHP路径
|
||||
```
|
||||
|
||||
常见PHP路径:
|
||||
- PHP 7.4: `/www/server/php/74/bin/php`
|
||||
- PHP 7.3: `/www/server/php/73/bin/php`
|
||||
- PHP 7.2: `/www/server/php/72/bin/php`
|
||||
- PHP 8.0: `/www/server/php/80/bin/php`
|
||||
- PHP 8.1: `/www/server/php/81/bin/php`
|
||||
|
||||
### 4. 设置执行周期
|
||||
|
||||
根据需求选择执行频率:
|
||||
|
||||
#### 每5分钟执行一次(推荐)
|
||||
```
|
||||
任务类型:N分钟
|
||||
分钟数:5
|
||||
```
|
||||
|
||||
#### 每分钟执行一次
|
||||
```
|
||||
任务类型:N分钟
|
||||
分钟数:1
|
||||
```
|
||||
|
||||
#### 每10分钟执行一次
|
||||
```
|
||||
任务类型:N分钟
|
||||
分钟数:10
|
||||
```
|
||||
|
||||
#### 自定义时间(使用Cron表达式)
|
||||
```
|
||||
任务类型:自定义
|
||||
Cron表达式:*/5 * * * *
|
||||
```
|
||||
|
||||
### 5. 日志配置
|
||||
|
||||
宝塔会自动记录执行日志。
|
||||
|
||||
**查看日志:**
|
||||
```
|
||||
计划任务 → 找到该任务 → 点击"日志"按钮
|
||||
```
|
||||
|
||||
**日志路径:**
|
||||
```
|
||||
/www/server/cron/任务ID.log
|
||||
```
|
||||
|
||||
### 6. 保存并启用
|
||||
|
||||
1. 点击**"确定"**保存任务
|
||||
2. 确保任务状态为**"启用"**(绿色开关)
|
||||
|
||||
### 7. 手动测试
|
||||
|
||||
点击任务右侧的**"执行"**按钮,立即运行一次,查看是否正常。
|
||||
|
||||
---
|
||||
|
||||
## 方案二:进程守护(不推荐,仅供参考)
|
||||
|
||||
如果你确实需要使用进程守护,需要创建一个常驻脚本。
|
||||
|
||||
### 1. 创建守护脚本
|
||||
|
||||
创建文件:`/www/wwwroot/mss.nahaichuan.com/daemon_order_sync.php`
|
||||
|
||||
```php
|
||||
<?php
|
||||
/**
|
||||
* 订单同步守护进程
|
||||
* 每5分钟检查一次
|
||||
*/
|
||||
|
||||
// 设置时区
|
||||
date_default_timezone_set('Asia/Shanghai');
|
||||
|
||||
// 无限循环
|
||||
while (true) {
|
||||
echo "[" . date('Y-m-d H:i:s') . "] 开始执行订单同步...\n";
|
||||
|
||||
// 执行同步任务
|
||||
$output = shell_exec('cd /www/wwwroot/mss.nahaichuan.com && /www/server/php/74/bin/php index.php /Cli/OrderSync/syncRiderOrderStatus 2>&1');
|
||||
|
||||
echo $output;
|
||||
echo "[" . date('Y-m-d H:i:s') . "] 执行完成,等待下次执行...\n\n";
|
||||
|
||||
// 休眠5分钟(300秒)
|
||||
sleep(300);
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 配置进程守护
|
||||
|
||||
**路径:**
|
||||
```
|
||||
左侧菜单 → 软件商店 → 进程守护管理器 → 添加守护进程
|
||||
```
|
||||
|
||||
**配置项:**
|
||||
|
||||
| 配置项 | 值 |
|
||||
|--------|-----|
|
||||
| **名称** | 订单同步守护 |
|
||||
| **启动文件** | `/www/server/php/74/bin/php` |
|
||||
| **启动参数** | `/www/wwwroot/mss.nahaichuan.com/daemon_order_sync.php` |
|
||||
| **运行目录** | `/www/wwwroot/mss.nahaichuan.com` |
|
||||
| **进程数量** | 1 |
|
||||
|
||||
### 3. 启动守护进程
|
||||
|
||||
1. 保存配置
|
||||
2. 点击**"启动"**按钮
|
||||
3. 查看**"运行状态"**是否为"运行中"
|
||||
|
||||
### 4. 查看日志
|
||||
|
||||
点击**"日志"**按钮查看运行日志。
|
||||
|
||||
### ⚠️ 进程守护的缺点
|
||||
|
||||
1. 占用系统资源(常驻进程)
|
||||
2. 重启服务器需要手动启动
|
||||
3. 进程崩溃需要监控
|
||||
4. 不如计划任务灵活
|
||||
|
||||
---
|
||||
|
||||
## 配置示例截图说明
|
||||
|
||||
### 计划任务配置示例
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ 添加计划任务 │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ 任务类型: [Shell脚本 ▼] │
|
||||
│ 任务名称: 订单同步任务 │
|
||||
│ 执行周期: [N分钟 ▼] [5] 分钟 │
|
||||
│ 脚本内容: │
|
||||
│ ┌─────────────────────────────────────────┐ │
|
||||
│ │#!/bin/bash │ │
|
||||
│ │cd /www/wwwroot/mss.nahaichuan.com │ │
|
||||
│ │/www/server/php/74/bin/php index.php \ │ │
|
||||
│ │ /Cli/OrderSync/syncRiderOrderStatus │ │
|
||||
│ └─────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ [取消] [确定] │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 验证任务是否正常
|
||||
|
||||
### 1. 手动执行测试
|
||||
|
||||
在宝塔计划任务列表中,点击任务右侧的**"执行"**按钮。
|
||||
|
||||
### 2. 查看执行日志
|
||||
|
||||
点击**"日志"**按钮,应该看到类似输出:
|
||||
|
||||
```
|
||||
===== 订单状态同步任务开始 =====
|
||||
开始时间:2025-10-29 14:40:10
|
||||
|
||||
自动同步已启用,开始执行...
|
||||
|
||||
找到 4 个待同步的完成订单
|
||||
✓ 订单 2625 状态已更新为完成
|
||||
✓ 订单 2683 状态已更新为完成
|
||||
✓ 订单 2701 状态已更新为完成
|
||||
✓ 订单 2830 状态已更新为完成
|
||||
完成状态同步:成功 4 个,失败 0 个
|
||||
|
||||
===== 同步任务完成 =====
|
||||
总计:成功 4 个,失败 0 个
|
||||
耗时:0.04 秒
|
||||
结束时间:2025-10-29 14:40:10
|
||||
```
|
||||
|
||||
### 3. 检查数据库
|
||||
|
||||
```sql
|
||||
-- 查看最近的同步记录
|
||||
SELECT * FROM ls_rider_order_sync_log
|
||||
ORDER BY id DESC
|
||||
LIMIT 10;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q1: 找不到PHP路径怎么办?
|
||||
|
||||
**方法1:宝塔面板查看**
|
||||
```
|
||||
软件商店 → 已安装 → PHP → 设置 → 配置文件
|
||||
```
|
||||
|
||||
**方法2:SSH命令查看**
|
||||
```bash
|
||||
which php
|
||||
# 或
|
||||
/www/server/php/*/bin/php -v
|
||||
```
|
||||
|
||||
### Q2: 任务执行失败怎么办?
|
||||
|
||||
**检查步骤:**
|
||||
|
||||
1. 查看日志文件
|
||||
```bash
|
||||
cat /www/server/cron/任务ID.log
|
||||
```
|
||||
|
||||
2. 手动执行测试
|
||||
```bash
|
||||
cd /www/wwwroot/mss.nahaichuan.com
|
||||
/www/server/php/74/bin/php index.php /Cli/OrderSync/syncRiderOrderStatus
|
||||
```
|
||||
|
||||
3. 检查权限
|
||||
```bash
|
||||
chmod +x /www/wwwroot/mss.nahaichuan.com/index.php
|
||||
```
|
||||
|
||||
4. 检查PHP版本
|
||||
```bash
|
||||
/www/server/php/74/bin/php -v
|
||||
```
|
||||
|
||||
### Q3: 如何修改执行频率?
|
||||
|
||||
在计划任务列表中:
|
||||
1. 点击任务右侧的**"修改"**按钮
|
||||
2. 修改**"执行周期"**
|
||||
3. 点击**"确定"**保存
|
||||
|
||||
### Q4: 如何暂停任务?
|
||||
|
||||
点击任务右侧的开关按钮,变为灰色即为暂停。
|
||||
|
||||
### Q5: 如何删除任务?
|
||||
|
||||
点击任务右侧的**"删除"**按钮,确认删除。
|
||||
|
||||
---
|
||||
|
||||
## 高级配置
|
||||
|
||||
### 带日志输出的脚本
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# 定义日志目录
|
||||
LOG_DIR="/www/wwwroot/mss.nahaichuan.com/Runtime/Logs/OrderSync"
|
||||
LOG_FILE="${LOG_DIR}/$(date +%Y-%m-%d).log"
|
||||
|
||||
# 创建日志目录
|
||||
mkdir -p ${LOG_DIR}
|
||||
|
||||
# 记录开始时间
|
||||
echo "========================================" >> ${LOG_FILE}
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始执行订单同步任务" >> ${LOG_FILE}
|
||||
|
||||
# 执行任务
|
||||
cd /www/wwwroot/mss.nahaichuan.com
|
||||
/www/server/php/74/bin/php index.php /Cli/OrderSync/syncRiderOrderStatus >> ${LOG_FILE} 2>&1
|
||||
|
||||
# 记录结束
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 任务执行完成" >> ${LOG_FILE}
|
||||
echo "" >> ${LOG_FILE}
|
||||
```
|
||||
|
||||
### 错误通知脚本
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# 执行任务并捕获输出
|
||||
cd /www/wwwroot/mss.nahaichuan.com
|
||||
OUTPUT=$(/www/server/php/74/bin/php index.php /Cli/OrderSync/syncRiderOrderStatus 2>&1)
|
||||
|
||||
# 检查是否有错误
|
||||
if echo "$OUTPUT" | grep -q "失败"; then
|
||||
# 发送告警(可以对接钉钉、企业微信等)
|
||||
echo "订单同步任务出现错误:" >> /tmp/order_sync_error.log
|
||||
echo "$OUTPUT" >> /tmp/order_sync_error.log
|
||||
fi
|
||||
|
||||
echo "$OUTPUT"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 监控建议
|
||||
|
||||
### 1. 设置告警
|
||||
|
||||
在宝塔面板中:
|
||||
```
|
||||
计划任务 → 找到任务 → 点击"告警"
|
||||
```
|
||||
|
||||
配置失败时的通知方式(短信、邮件、钉钉等)。
|
||||
|
||||
### 2. 定期检查
|
||||
|
||||
建议每周检查一次:
|
||||
- 任务执行状态
|
||||
- 执行日志
|
||||
- 数据库同步记录
|
||||
|
||||
### 3. 性能监控
|
||||
|
||||
```sql
|
||||
-- 查看今日同步统计
|
||||
SELECT
|
||||
DATE(sync_time) as date,
|
||||
COUNT(*) as total,
|
||||
SUM(CASE WHEN sync_result = 1 THEN 1 ELSE 0 END) as success,
|
||||
SUM(CASE WHEN sync_result = 0 THEN 1 ELSE 0 END) as fail
|
||||
FROM ls_rider_order_sync_log
|
||||
WHERE sync_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
|
||||
GROUP BY DATE(sync_time)
|
||||
ORDER BY date DESC;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
### ✅ 推荐配置
|
||||
|
||||
- **使用方式**:宝塔计划任务
|
||||
- **执行频率**:每5分钟
|
||||
- **日志记录**:启用
|
||||
- **告警通知**:启用
|
||||
|
||||
### 📝 配置清单
|
||||
|
||||
- [ ] 添加计划任务
|
||||
- [ ] 设置正确的PHP路径
|
||||
- [ ] 设置执行周期(5分钟)
|
||||
- [ ] 手动测试执行
|
||||
- [ ] 查看执行日志
|
||||
- [ ] 验证数据库记录
|
||||
- [ ] 启用告警通知
|
||||
|
||||
### 🔗 相关文档
|
||||
|
||||
- 详细使用说明:`docs/订单同步定时任务说明.md`
|
||||
- 数据库表结构:`client/rider_tables.sql`
|
||||
|
||||
---
|
||||
|
||||
**配置完成后,订单同步任务将自动运行,无需人工干预!** 🎉
|
||||
|
||||
294
docs/订单同步定时任务说明.md
普通文件
294
docs/订单同步定时任务说明.md
普通文件
@@ -0,0 +1,294 @@
|
||||
# 订单同步定时任务使用说明
|
||||
|
||||
## 功能说明
|
||||
|
||||
该系统提供**双向同步**功能,确保原订单系统与骑手端数据实时同步:
|
||||
|
||||
### 1. 正向同步(batchSync)
|
||||
将原始订单系统的待发货订单同步到骑手端,创建可接订单:
|
||||
- **触发条件**:原订单状态为"待发货"(status = 1)
|
||||
- **同步结果**:在骑手端创建"待接单"订单(order_status = 0)
|
||||
- **作用**:让骑手能够看到新的配送任务
|
||||
|
||||
### 2. 反向同步(syncRiderOrderStatus)
|
||||
将骑手操作的状态同步回原订单系统:
|
||||
- **接单同步**:当骑手接单后(order_status = 1-5),自动将原始订单状态更新为"已发货"(status = 2)
|
||||
- **完成同步**:当骑手配送完成后(order_status = 6),自动将原始订单状态更新为"已完成"(status = 3)
|
||||
- **作用**:让商家系统实时了解配送进度
|
||||
|
||||
## 完整同步流程
|
||||
|
||||
```
|
||||
┌─────────────────┐ 正向同步 ┌──────────────────┐
|
||||
│ 原订单系统 │ ──────────────────────→ │ 骑手端系统 │
|
||||
│ (待发货订单) │ batchSync │ (可接订单) │
|
||||
│ │ │ │
|
||||
│ status = 1 │ ←────────────────────── │ order_status │
|
||||
│ ↓ │ 反向同步 │ 0 → 1 → ... → 6│
|
||||
│ status = 2 │ syncRiderOrderStatus │ │
|
||||
│ ↓ │ │ │
|
||||
│ status = 3 │ │ │
|
||||
└─────────────────┘ └──────────────────┘
|
||||
|
||||
步骤说明:
|
||||
1. 商家创建订单(status = 1 待发货)
|
||||
2. batchSync 将订单同步到骑手端(order_status = 0 待接单)
|
||||
3. 骑手接单(order_status = 1)
|
||||
4. syncRiderOrderStatus 更新原订单(status = 2 已发货)
|
||||
5. 骑手配送完成(order_status = 6)
|
||||
6. syncRiderOrderStatus 更新原订单(status = 3 已完成)
|
||||
```
|
||||
|
||||
## 启用条件
|
||||
|
||||
定时任务执行前会检查 `ls_rider_config` 表中的 `auto_sync_enabled` 字段:
|
||||
- 值为 `1`:启用自动同步,任务正常执行
|
||||
- 值为 `0`:禁用自动同步,任务跳过
|
||||
|
||||
## 使用方式
|
||||
|
||||
### CLI命令行方式
|
||||
|
||||
适用于支持 PHP CLI 的服务器环境。
|
||||
|
||||
#### 1. 手动执行测试
|
||||
|
||||
```bash
|
||||
# 进入项目根目录
|
||||
cd /path/to/project
|
||||
|
||||
# 执行同步任务
|
||||
php index.php Cli/OrderSync/syncRiderOrderStatus
|
||||
|
||||
# 执行批量同步(将原始订单同步为骑手订单)
|
||||
php index.php Cli/OrderSync/batchSync
|
||||
```
|
||||
|
||||
#### 2. 设置Cron定时任务
|
||||
|
||||
**重要:完整的订单同步需要同时运行两个任务**
|
||||
|
||||
编辑crontab:
|
||||
```bash
|
||||
crontab -e
|
||||
```
|
||||
|
||||
添加以下配置:
|
||||
|
||||
```bash
|
||||
# 方案一:每5分钟执行一次完整同步(推荐)
|
||||
*/5 * * * * cd /path/to/project && php index.php Cli/OrderSync/batchSync >> /path/to/logs/batch_sync.log 2>&1
|
||||
*/5 * * * * cd /path/to/project && php index.php Cli/OrderSync/syncRiderOrderStatus >> /path/to/logs/order_sync.log 2>&1
|
||||
|
||||
# 方案二:根据业务需求分别设置频率
|
||||
# 正向同步(原订单→骑手端)- 每3分钟一次(新订单出现较快)
|
||||
*/3 * * * * cd /path/to/project && php index.php Cli/OrderSync/batchSync >> /path/to/logs/batch_sync.log 2>&1
|
||||
|
||||
# 反向同步(骑手端→原订单)- 每1分钟一次(状态更新需要及时)
|
||||
* * * * * cd /path/to/project && php index.php Cli/OrderSync/syncRiderOrderStatus >> /path/to/logs/order_sync.log 2>&1
|
||||
```
|
||||
|
||||
## 输出结果示例
|
||||
|
||||
```
|
||||
===== 订单状态同步任务开始 =====
|
||||
开始时间:2024-01-20 10:00:00
|
||||
|
||||
自动同步已启用,开始执行...
|
||||
|
||||
找到 5 个待同步的接单订单
|
||||
✓ 订单 1001 状态已更新为发货
|
||||
✓ 订单 1002 状态已更新为发货
|
||||
✓ 订单 1003 状态已更新为发货
|
||||
✓ 订单 1004 状态已更新为发货
|
||||
✓ 订单 1005 状态已更新为发货
|
||||
接单状态同步:成功 5 个,失败 0 个
|
||||
|
||||
找到 3 个待同步的完成订单
|
||||
✓ 订单 998 状态已更新为完成
|
||||
✓ 订单 999 状态已更新为完成
|
||||
✓ 订单 1000 状态已更新为完成
|
||||
完成状态同步:成功 3 个,失败 0 个
|
||||
|
||||
===== 同步任务完成 =====
|
||||
总计:成功 8 个,失败 0 个
|
||||
耗时:0.52 秒
|
||||
结束时间:2024-01-20 10:00:01
|
||||
```
|
||||
|
||||
## 日志记录
|
||||
|
||||
### 1. 运行日志
|
||||
|
||||
日志位置:`Runtime/Logs/OrderSync/YYYY-MM-DD.log`
|
||||
|
||||
日志内容:
|
||||
```
|
||||
[2024-01-20 10:00:00] 同步任务完成,成功 8 个,失败 0 个
|
||||
[2024-01-20 10:05:00] 自动同步未启用,任务终止
|
||||
[2024-01-20 10:10:00] 同步任务异常:数据库连接失败
|
||||
```
|
||||
|
||||
### 2. 数据库同步日志
|
||||
|
||||
所有同步操作都会记录到 `ls_rider_order_sync_log` 表中,包括:
|
||||
- 原订单ID(bill_id)
|
||||
- 骑手订单ID(rider_order_id)
|
||||
- 骑手ID(rider_id)
|
||||
- 操作类型(operation_type):`accept`(接单)、`complete`(完成)
|
||||
- 原状态(old_status)
|
||||
- 新状态(new_status)
|
||||
- 同步结果(sync_result):1成功,0失败
|
||||
- 错误信息(error_msg)
|
||||
- 同步时间(sync_time)
|
||||
|
||||
## 状态映射关系
|
||||
|
||||
### 骑手订单状态(ls_rider_order.order_status)
|
||||
|
||||
| 状态值 | 状态说明 | 同步到原订单 |
|
||||
|--------|----------|-------------|
|
||||
| 0 | 待接单 | 不同步 |
|
||||
| 1 | 已接单 | 发货(status=2) |
|
||||
| 2 | 前往商家 | 发货(status=2) |
|
||||
| 3 | 已到店 | 发货(status=2) |
|
||||
| 4 | 已取餐 | 发货(status=2) |
|
||||
| 5 | 配送中 | 发货(status=2) |
|
||||
| 6 | 已送达 | 完成(status=3) |
|
||||
| 7 | 异常 | 不同步 |
|
||||
| 8 | 已取消 | 不同步 |
|
||||
|
||||
### 原订单状态(ls_retail_bill_online.status)
|
||||
|
||||
| 状态值 | 状态说明 |
|
||||
|--------|----------|
|
||||
| 1 | 未发货 |
|
||||
| 2 | 已发货 |
|
||||
| 3 | 已完成 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **执行频率建议**
|
||||
- 推荐每1-5分钟执行一次
|
||||
- 不建议设置太频繁(如每秒),避免数据库压力
|
||||
|
||||
2. **性能优化**
|
||||
- 任务设置了5分钟超时限制
|
||||
- 大量订单时可能需要调整 `set_time_limit()`
|
||||
- 建议在数据库相关字段添加索引
|
||||
|
||||
3. **监控建议**
|
||||
- 定期检查日志文件,确保任务正常执行
|
||||
- 监控 `ls_rider_order_sync_log` 表的 `sync_result` 字段
|
||||
- 设置异常告警机制
|
||||
|
||||
4. **测试流程**
|
||||
- 在生产环境启用前,先在测试环境验证
|
||||
- 确认数据库表结构完整
|
||||
- 手动执行测试,检查返回结果和日志
|
||||
|
||||
## 启用步骤
|
||||
|
||||
### 1. 数据库配置
|
||||
|
||||
确保 `ls_rider_config` 表有配置记录:
|
||||
|
||||
```sql
|
||||
-- 查看当前配置
|
||||
SELECT * FROM ls_rider_config WHERE merchant_id = 0;
|
||||
|
||||
-- 如果没有记录,插入默认配置
|
||||
INSERT INTO ls_rider_config (
|
||||
merchant_id,
|
||||
auto_sync_enabled,
|
||||
created_time,
|
||||
updated_time
|
||||
) VALUES (
|
||||
0,
|
||||
1,
|
||||
UNIX_TIMESTAMP(),
|
||||
UNIX_TIMESTAMP()
|
||||
);
|
||||
|
||||
-- 启用自动同步
|
||||
UPDATE ls_rider_config SET auto_sync_enabled = 1 WHERE merchant_id = 0;
|
||||
|
||||
-- 禁用自动同步
|
||||
UPDATE ls_rider_config SET auto_sync_enabled = 0 WHERE merchant_id = 0;
|
||||
```
|
||||
|
||||
### 2. 权限检查
|
||||
|
||||
确保定时任务有权限访问:
|
||||
- 读取数据库
|
||||
- 写入日志目录
|
||||
- 执行PHP脚本
|
||||
|
||||
### 3. 测试执行
|
||||
|
||||
```bash
|
||||
# 测试同步任务
|
||||
php index.php Cli/OrderSync/syncRiderOrderStatus
|
||||
|
||||
# 测试批量同步
|
||||
php index.php Cli/OrderSync/batchSync
|
||||
```
|
||||
|
||||
### 4. 设置定时任务
|
||||
|
||||
根据执行频率设置Cron定时任务。
|
||||
|
||||
### 5. 监控运行
|
||||
|
||||
```bash
|
||||
# 查看运行日志
|
||||
tail -f Runtime/Logs/OrderSync/$(date +%Y-%m-%d).log
|
||||
|
||||
# 查看同步记录
|
||||
mysql> SELECT * FROM ls_rider_order_sync_log ORDER BY add_time DESC LIMIT 10;
|
||||
```
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 问题:任务不执行
|
||||
|
||||
**检查项:**
|
||||
1. Cron是否正确设置并运行
|
||||
2. PHP路径是否正确
|
||||
3. 项目路径是否正确
|
||||
4. 文件权限是否正确
|
||||
|
||||
```bash
|
||||
# 检查Cron是否运行
|
||||
service cron status
|
||||
|
||||
# 手动执行测试
|
||||
php index.php /Cli/OrderSync/syncRiderOrderStatus
|
||||
|
||||
# 查看Cron日志
|
||||
tail -f /var/log/cron
|
||||
```
|
||||
|
||||
### 问题:同步失败
|
||||
|
||||
**检查项:**
|
||||
1. 数据库连接是否正常
|
||||
2. `auto_sync_enabled` 是否为 1
|
||||
3. 表结构是否完整
|
||||
4. 查看错误日志
|
||||
|
||||
```bash
|
||||
# 查看运行日志
|
||||
cat Runtime/Logs/OrderSync/$(date +%Y-%m-%d).log
|
||||
|
||||
# 查看同步失败记录
|
||||
mysql> SELECT * FROM ls_rider_order_sync_log WHERE sync_result = 0 ORDER BY add_time DESC LIMIT 10;
|
||||
```
|
||||
|
||||
## 技术支持
|
||||
|
||||
如有问题,请联系技术支持团队或查看以下资源:
|
||||
- 项目文档
|
||||
- 数据库表结构文件:`client/rider_tables.sql`
|
||||
- 源代码注释
|
||||
|
||||
299
docs/订单同步快速开始.md
普通文件
299
docs/订单同步快速开始.md
普通文件
@@ -0,0 +1,299 @@
|
||||
# 订单同步定时任务 - 快速开始
|
||||
|
||||
## 📋 功能说明
|
||||
|
||||
自动同步骑手订单状态到原始订单系统:
|
||||
- ✅ 骑手接单后 → 原订单状态更新为"已发货"
|
||||
- ✅ 骑手配送完成 → 原订单状态更新为"已完成"
|
||||
|
||||
## 🚀 快速开始(5分钟)
|
||||
|
||||
### 步骤1:初始化数据库配置
|
||||
|
||||
```bash
|
||||
# 登录MySQL
|
||||
mysql -u用户名 -p
|
||||
|
||||
# 选择数据库
|
||||
use 数据库名;
|
||||
|
||||
# 执行初始化脚本
|
||||
source docs/init_auto_sync.sql;
|
||||
```
|
||||
|
||||
或者手动执行:
|
||||
|
||||
```sql
|
||||
-- 启用自动同步
|
||||
UPDATE ls_rider_config SET auto_sync_enabled = 1 WHERE merchant_id = 0;
|
||||
```
|
||||
|
||||
### 步骤2:测试运行
|
||||
|
||||
**Linux/Mac:**
|
||||
```bash
|
||||
# 赋予执行权限
|
||||
chmod +x scripts/test_order_sync.sh
|
||||
|
||||
# 编辑脚本,修改项目路径
|
||||
vim scripts/test_order_sync.sh
|
||||
# 修改:PROJECT_ROOT="/path/to/your/project"
|
||||
|
||||
# 运行测试
|
||||
./scripts/test_order_sync.sh
|
||||
# 选择选项 1:测试CLI模式 - 同步订单状态
|
||||
```
|
||||
|
||||
**Windows:**
|
||||
```batch
|
||||
# 编辑脚本,修改项目路径
|
||||
记事本打开 scripts\test_order_sync.bat
|
||||
修改:set PROJECT_ROOT=D:\Project\mss.nahaichuan.com
|
||||
|
||||
# 运行测试
|
||||
scripts\test_order_sync.bat
|
||||
选择选项 1:测试CLI模式 - 同步订单状态
|
||||
```
|
||||
|
||||
**直接命令行:**
|
||||
```bash
|
||||
cd /path/to/project
|
||||
php index.php /Cli/OrderSync/syncRiderOrderStatus
|
||||
```
|
||||
|
||||
### 步骤3:设置定时任务
|
||||
|
||||
**Linux Cron:**
|
||||
```bash
|
||||
# 编辑crontab
|
||||
crontab -e
|
||||
|
||||
# 添加以下行(每5分钟执行一次)
|
||||
*/5 * * * * cd /path/to/project && php index.php /Cli/OrderSync/syncRiderOrderStatus >> /var/log/order_sync.log 2>&1
|
||||
```
|
||||
|
||||
**Windows 计划任务:**
|
||||
1. 打开"任务计划程序"(运行:`taskschd.msc`)
|
||||
2. 创建基本任务
|
||||
3. 触发器:每5分钟
|
||||
4. 操作:启动程序
|
||||
- 程序:`C:\php\php.exe`(你的PHP路径)
|
||||
- 参数:`index.php /Cli/OrderSync/syncRiderOrderStatus`
|
||||
- 起始于:`D:\Project\mss.nahaichuan.com`(你的项目路径)
|
||||
|
||||
**Web Cron(虚拟主机):**
|
||||
```bash
|
||||
# 1. 设置密钥
|
||||
编辑:Application/Cron/Controller/OrderSyncController.class.php
|
||||
修改:const SECRET_KEY = 'your_secure_random_key';
|
||||
|
||||
# 2. 添加Cron
|
||||
*/5 * * * * curl -s "http://your-domain.com/Cron/OrderSync/syncRiderOrderStatus?key=your_key" >> /var/log/order_sync.log 2>&1
|
||||
```
|
||||
|
||||
### 步骤4:验证运行
|
||||
|
||||
**查看日志:**
|
||||
```bash
|
||||
# Linux/Mac
|
||||
tail -f Runtime/Logs/OrderSync/$(date +%Y-%m-%d).log
|
||||
|
||||
# Windows
|
||||
type Runtime\Logs\OrderSync\2024-01-20.log
|
||||
```
|
||||
|
||||
**查看数据库同步记录:**
|
||||
```sql
|
||||
SELECT * FROM ls_rider_order_sync_log ORDER BY id DESC LIMIT 10;
|
||||
```
|
||||
|
||||
## 📊 状态映射
|
||||
|
||||
| 骑手订单状态 | 状态值 | 同步到原订单 |
|
||||
|-------------|--------|-------------|
|
||||
| 待接单 | 0 | 不同步 |
|
||||
| 已接单 | 1 | → 已发货(2) |
|
||||
| 前往商家 | 2 | → 已发货(2) |
|
||||
| 已到店 | 3 | → 已发货(2) |
|
||||
| 已取餐 | 4 | → 已发货(2) |
|
||||
| 配送中 | 5 | → 已发货(2) |
|
||||
| **已送达** | **6** | **→ 已完成(3)** |
|
||||
| 异常 | 7 | 不同步 |
|
||||
| 已取消 | 8 | 不同步 |
|
||||
|
||||
## 🔧 常用命令
|
||||
|
||||
### 手动同步
|
||||
```bash
|
||||
# 同步订单状态
|
||||
php index.php /Cli/OrderSync/syncRiderOrderStatus
|
||||
|
||||
# 批量同步订单(创建骑手订单)
|
||||
php index.php /Cli/OrderSync/batchSync
|
||||
```
|
||||
|
||||
### 查看日志
|
||||
```bash
|
||||
# 今日日志
|
||||
cat Runtime/Logs/OrderSync/$(date +%Y-%m-%d).log
|
||||
|
||||
# 实时监控
|
||||
tail -f Runtime/Logs/OrderSync/$(date +%Y-%m-%d).log
|
||||
|
||||
# 统计成功数
|
||||
grep "同步任务完成" Runtime/Logs/OrderSync/*.log
|
||||
```
|
||||
|
||||
### 数据库查询
|
||||
```sql
|
||||
-- 查看配置状态
|
||||
SELECT * FROM ls_rider_config WHERE merchant_id = 0;
|
||||
|
||||
-- 查看待同步订单
|
||||
SELECT COUNT(*) FROM ls_rider_order ro
|
||||
LEFT JOIN ls_retail_bill_online o ON ro.bill_id = o.bill_id
|
||||
WHERE ro.order_status IN (1,2,3,4,5) AND o.status = 1;
|
||||
|
||||
-- 查看同步记录
|
||||
SELECT * FROM ls_rider_order_sync_log
|
||||
WHERE DATE(sync_time) = CURDATE()
|
||||
ORDER BY id DESC;
|
||||
|
||||
-- 统计今日同步情况
|
||||
SELECT
|
||||
operation_type,
|
||||
COUNT(*) as total,
|
||||
SUM(CASE WHEN sync_result = 1 THEN 1 ELSE 0 END) as success,
|
||||
SUM(CASE WHEN sync_result = 0 THEN 1 ELSE 0 END) as fail
|
||||
FROM ls_rider_order_sync_log
|
||||
WHERE DATE(sync_time) = CURDATE()
|
||||
GROUP BY operation_type;
|
||||
```
|
||||
|
||||
### 启用/禁用同步
|
||||
```sql
|
||||
-- 启用
|
||||
UPDATE ls_rider_config SET auto_sync_enabled = 1 WHERE merchant_id = 0;
|
||||
|
||||
-- 禁用
|
||||
UPDATE ls_rider_config SET auto_sync_enabled = 0 WHERE merchant_id = 0;
|
||||
|
||||
-- 验证
|
||||
SELECT auto_sync_enabled FROM ls_rider_config WHERE merchant_id = 0;
|
||||
```
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
1. **执行频率**
|
||||
- 推荐:每1-5分钟
|
||||
- 不推荐:每秒(数据库压力大)
|
||||
|
||||
2. **安全性**
|
||||
- Web方式必须设置安全密钥
|
||||
- 密钥至少32位随机字符
|
||||
- 不要将密钥提交到Git
|
||||
|
||||
3. **监控**
|
||||
- 定期检查日志
|
||||
- 监控同步失败记录
|
||||
- 设置异常告警
|
||||
|
||||
4. **测试**
|
||||
- 生产环境前先测试
|
||||
- 确认数据库表完整
|
||||
- 验证同步逻辑正确
|
||||
|
||||
## 🐛 故障排查
|
||||
|
||||
### 任务不执行?
|
||||
|
||||
**检查:**
|
||||
```bash
|
||||
# 1. Cron是否运行
|
||||
service cron status # Linux
|
||||
# 或 检查Windows计划任务
|
||||
|
||||
# 2. PHP路径是否正确
|
||||
which php
|
||||
php -v
|
||||
|
||||
# 3. 项目路径是否正确
|
||||
cd /path/to/project && pwd
|
||||
|
||||
# 4. 手动执行测试
|
||||
php index.php /Cli/OrderSync/syncRiderOrderStatus
|
||||
```
|
||||
|
||||
### 同步失败?
|
||||
|
||||
**检查:**
|
||||
```bash
|
||||
# 1. 查看错误日志
|
||||
tail -100 Runtime/Logs/OrderSync/$(date +%Y-%m-%d).log
|
||||
|
||||
# 2. 查看数据库失败记录
|
||||
mysql> SELECT * FROM ls_rider_order_sync_log
|
||||
WHERE sync_result = 0
|
||||
ORDER BY id DESC LIMIT 10;
|
||||
|
||||
# 3. 检查配置
|
||||
mysql> SELECT * FROM ls_rider_config WHERE merchant_id = 0;
|
||||
|
||||
# 4. 检查表结构
|
||||
mysql> SHOW TABLES LIKE 'ls_rider%';
|
||||
```
|
||||
|
||||
### Web方式报错?
|
||||
|
||||
**检查:**
|
||||
1. 密钥是否正确
|
||||
2. URL参数是否完整
|
||||
3. 服务器是否可访问
|
||||
4. PHP错误日志
|
||||
|
||||
```bash
|
||||
# 测试连通性
|
||||
curl -v "http://your-domain.com/Cron/OrderSync/health?key=your_key"
|
||||
|
||||
# 查看PHP错误日志
|
||||
tail -f /var/log/php_errors.log
|
||||
```
|
||||
|
||||
## 📚 相关文档
|
||||
|
||||
- 详细说明:`docs/订单同步定时任务说明.md`
|
||||
- 数据库表结构:`client/rider_tables.sql`
|
||||
- 初始化脚本:`docs/init_auto_sync.sql`
|
||||
- 测试工具:`scripts/test_order_sync.sh` / `scripts/test_order_sync.bat`
|
||||
|
||||
## 💡 常见问题
|
||||
|
||||
**Q: 可以同时运行多个定时任务吗?**
|
||||
A: 可以,但不建议。建议使用文件锁防止并发执行。
|
||||
|
||||
**Q: 如何只同步特定门店的订单?**
|
||||
A: 修改代码中的 WHERE 条件,添加 store_id 筛选。
|
||||
|
||||
**Q: 同步失败了怎么办?**
|
||||
A: 查看 ls_rider_order_sync_log 表的 error_msg 字段,根据错误信息处理。
|
||||
|
||||
**Q: 可以手动重新同步吗?**
|
||||
A: 可以,删除对应的同步日志记录后重新执行任务。
|
||||
|
||||
**Q: 如何暂停同步?**
|
||||
A: 执行 SQL:`UPDATE ls_rider_config SET auto_sync_enabled = 0 WHERE merchant_id = 0;`
|
||||
|
||||
## 🎯 下一步
|
||||
|
||||
1. ✅ 初始化数据库配置
|
||||
2. ✅ 测试手动执行
|
||||
3. ✅ 设置定时任务
|
||||
4. ✅ 监控运行日志
|
||||
5. ⏭️ 优化配置参数
|
||||
6. ⏭️ 设置异常告警
|
||||
7. ⏭️ 定期维护检查
|
||||
|
||||
---
|
||||
|
||||
**需要帮助?** 查看详细文档或联系技术支持。
|
||||
|
||||
在新工单中引用
屏蔽一个用户