Transfer模块是一个完整的资金划转解决方案,支持农场内部模式和外部API模式。本文档详细说明了模块的部署、配置和维护流程。
# 连接到MySQL数据库
mysql -u username -p database_name
# 执行建表SQL
source app/Module/Transfer/Database/transfer_tables.sql
# 执行初始化数据SQL
source app/Module/Transfer/Database/transfer_init_data.sql
# 执行性能优化SQL
source app/Module/Transfer/Database/optimization.sql
# 发布Transfer配置文件
php artisan vendor:publish --tag=transfer-config
在 .env 文件中添加:
# Transfer模块配置
TRANSFER_DEBUG=false
TRANSFER_API_TIMEOUT=30
TRANSFER_QUEUE_CONNECTION=redis
TRANSFER_CACHE_DRIVER=redis
编辑 config/transfer.php:
// 根据生产环境需求调整配置
'api' => [
'timeout' => env('TRANSFER_API_TIMEOUT', 30),
'retry_times' => 3,
],
'queue' => [
'default' => env('TRANSFER_QUEUE_CONNECTION', 'redis'),
],
在 config/queue.php 中确保Redis配置正确:
'connections' => [
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 90,
'block_for' => null,
],
],
# 启动Transfer队列工作进程
php artisan queue:work redis --queue=transfer,transfer_callback --sleep=3 --tries=3 --max-time=3600
# 使用Supervisor管理队列进程(推荐)
# 创建 /etc/supervisor/conf.d/transfer-worker.conf
Supervisor配置示例:
[program:transfer-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/artisan queue:work redis --queue=transfer,transfer_callback --sleep=3 --tries=3 --max-time=3600
directory=/path/to/project
autostart=true
autorestart=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/log/transfer-worker.log
stopwaitsecs=3600
# 编辑crontab
crontab -e
# 添加以下任务
# Transfer订单处理(每5分钟)
*/5 * * * * cd /path/to/project && php artisan transfer:process --type=orders --limit=100 >> /dev/null 2>&1
# Transfer回调处理(每2分钟)
*/2 * * * * cd /path/to/project && php artisan transfer:process --type=callbacks --limit=50 >> /dev/null 2>&1
# 每日统计报告(每天凌晨1点)
0 1 * * * cd /path/to/project && php artisan transfer:stats --period=yesterday --export=/var/log/transfer-daily-stats.csv >> /dev/null 2>&1
# 设置正确的文件权限
chown -R www-data:www-data /path/to/project/storage
chown -R www-data:www-data /path/to/project/bootstrap/cache
chmod -R 755 /path/to/project/storage
chmod -R 755 /path/to/project/bootstrap/cache
# 创建Transfer日志目录
mkdir -p /var/log/transfer
chown www-data:www-data /var/log/transfer
chmod 755 /var/log/transfer
适用于纯内部资金流转,无需外部API:
// 所有API URL留空即为农场内部模式
'order_callback_url' => null,
'order_in_info_url' => null,
'order_out_create_url' => null,
'order_out_info_url' => null,
适用于与外部系统对接:
// 配置相应的API端点
'order_callback_url' => 'https://external-api.com/callback',
'order_out_create_url' => 'https://external-api.com/transfer/create',
'order_out_info_url' => 'https://external-api.com/transfer/info',
'security' => [
'signature_verification' => true,
'signature_method' => 'md5',
],
'security' => [
'ip_whitelist_enabled' => true,
'ip_whitelist' => [
'192.168.1.100',
'10.0.0.50',
],
],
'cache' => [
'enabled' => true,
'app_config_ttl' => 3600,
'stats_ttl' => 300,
],
'queue' => [
'max_tries' => 3,
'timeout' => 120,
'failed_job_retention' => 86400,
],
# 查看Transfer模块日志
tail -f storage/logs/laravel.log | grep Transfer
# 查看队列日志
tail -f /var/log/transfer-worker.log
# 查看慢查询日志
tail -f /var/log/mysql/slow.log | grep transfer
# 查看队列状态
php artisan queue:monitor redis:transfer,redis:transfer_callback
# 查看失败任务
php artisan queue:failed
-- 查看表大小
SELECT
TABLE_NAME,
ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024), 2) AS 'Size (MB)',
TABLE_ROWS
FROM information_schema.TABLES
WHERE TABLE_NAME LIKE 'kku_transfer_%';
-- 查看索引使用情况
SHOW INDEX FROM kku_transfer_orders;
#!/bin/bash
# transfer-health-check.sh
# 检查数据库连接
php artisan tinker --execute="DB::connection()->getPdo();"
# 检查队列工作进程
ps aux | grep "queue:work" | grep -v grep
# 检查Redis连接
redis-cli ping
# 检查最近的订单处理情况
php artisan transfer:stats --period=today
# 添加到crontab,每10分钟检查一次
*/10 * * * * /path/to/transfer-health-check.sh || echo "Transfer health check failed" | mail -s "Transfer Alert" admin@example.com
# 查看失败任务详情
php artisan queue:failed
# 重试失败任务
php artisan queue:retry all
# 清除失败任务
php artisan queue:flush
# 检查网络连接
curl -I https://external-api.com/health
# 查看API调用日志
grep "ExternalApiService" storage/logs/laravel.log
-- 查看正在执行的查询
SHOW PROCESSLIST;
-- 查看锁等待情况
SELECT * FROM information_schema.INNODB_LOCKS;
-- 优化表
OPTIMIZE TABLE kku_transfer_orders;
# 恢复数据库备份
mysql -u username -p database_name < transfer_backup.sql
# 重启队列工作进程
supervisorctl restart transfer-worker:*
# 重启Web服务
systemctl restart nginx
systemctl restart php8.1-fpm
如遇到部署问题,请联系技术支持团队,并提供: