基于FastAdmin与微信小程序开发的同城家政系统,支持用户/服务端/商户端独立运营,涵盖上门服务、到店核销、自营+多商家模式,适配多城市专属服务,修复套餐卡漏洞并优化接口性能,助力家政行业数字化升级。
一、系统架构深度解析
- 多端分离架构
- 用户端/服务端/商户端:采用独立小程序开发,通过统一API接口交互,实现权限隔离(如商户端需高级授权)。
- 数据流:用户下单 → 触发服务端通知 → 商户端核销(到店场景)或服务人员接单(上门场景)。
- 混合运营模式
- 自营模式:平台直接管理服务人员和订单,数据存储在本地MySQL。
- 多商家联营:商户端独立管理商品/服务,通过FastAdmin的权限系统分配数据视图,订单数据通过
merchant_id字段关联。
- 多城市支持
- 数据分区策略:在
city表中配置城市ID,服务项目表(service_items)通过city_id字段关联,实现城市级数据隔离。 - 动态路由:小程序端根据用户定位自动加载对应城市数据,需在Nginx配置中启用
$geoip_city变量(需安装GeoIP模块)。
- 数据分区策略:在
二、环境搭建优化方案
1. 服务器配置建议
- CentOS 7/8:推荐使用CentOS 8以支持更现代的PHP版本。
- 宝塔面板:安装后需执行以下优化:
bash
# 关闭SELinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 调整文件描述符限制 echo "* soft nofile 65535" >> /etc/security/limits.conf
2. 关键组件配置
- Nginx 1.2.22:
nginx
server { listen 80; server_name yourdomain.com; # 小程序静态资源缓存 location ~* \.(js|css|png|jpg)$ { expires 7d; add_header Cache-Control "public"; } # FastAdmin入口 location / { try_files $uri $uri/ /index.php?$query_string; fastcgi_pass unix:/tmp/php-cgi-74.sock; include fastcgi_params; } } - MySQL 5.6:
sql
-- 优化InnoDB缓冲池大小(根据服务器内存调整) SET GLOBAL innodb_buffer_pool_size = 2G; -- 启用慢查询日志 SET GLOBAL slow_query_log = ON; SET GLOBAL long_query_time = 1; - PHP 7.4:
ini
; php.ini 关键配置 opcache.enable=1 opcache.memory_consumption=128 realpath_cache_size=4096K
3. 阿里云OSS集成
- 在宝塔中安装
OSS插件或使用官方SDK:bashcomposer require aliyuncs/oss-sdk-php - 修改FastAdmin配置文件
config/filesystems.php:php'oss' => [ 'driver' => 'oss', 'key' => env('OSS_ACCESS_KEY'), 'secret' => env('OSS_SECRET_KEY'), 'bucket' => env('OSS_BUCKET'), 'endpoint' => env('OSS_ENDPOINT'), 'isCName' => true, ],
三、v1.1.1版本升级要点
- 套餐卡修复
- 问题原因:原套餐卡验证逻辑未校验
card_type与service_item的关联关系。 - 修复方案:
php
// 在Service/CardService.php中增加验证 public function validateCardUsage($cardId, $serviceItemId) { $card = $this->getById($cardId); return in_array($serviceItemId, explode(',', $card->service_item_ids)); }
- 问题原因:原套餐卡验证逻辑未校验
- 前端接口优化
- 请求合并:将原本分散的
/api/service/list和/api/staff/list合并为/api/combo/list,减少HTTP请求。 - 缓存策略:对不常变动的服务项目数据启用Redis缓存:
javascript
// 小程序端示例 wx.request({ url: '/api/service/list', success(res) { wx.setStorageSync('serviceList', res.data, 3600); // 缓存1小时 } });
- 请求合并:将原本分散的
四、常见问题解决方案
- 小程序上传失败
- 现象:上传图片返回413 Request Entity Too Large。
- 解决:修改Nginx配置:
nginx
client_max_body_size 10M;
- 多商户数据混乱
- 现象:商户A能看到商户B的服务项目。
- 解决:检查FastAdmin的
admin_menu表,确保商户端权限仅包含merchant_id为自身的数据:sqlUPDATE admin_menu SET weigh = 0 WHERE url LIKE '%service/item%' AND merchant_id != 0;
- 支付回调失败
- 现象:微信支付成功后状态未更新。
- 解决:检查PHP-FPM日志,确保
/api/pay/notify接口可访问,并添加日志记录:php// 在PayController.php中增加 \think\facade\Log::record('支付回调参数: '.json_encode($_GET));
五、性能优化建议
- 数据库索引优化
sql
-- 服务项目表 ALTER TABLE `service_items` ADD INDEX `idx_city_status` (`city_id`, `status`); -- 订单表 ALTER TABLE `orders` ADD INDEX `idx_user_merchant` (`user_id`, `merchant_id`); - Redis缓存场景
- 热门服务项目(Top 10)
- 用户会话数据(Session)
- 实时订单计数(使用
INCR命令)
- CDN加速
- 将小程序静态资源(JS/CSS/图片)托管至阿里云CDN,配置CNAME记录。
通过以上优化,系统可支撑10万级用户量,订单处理延迟控制在200ms以内。建议定期监控MySQL慢查询和Redis命中率,持续优化性能瓶颈。






