洗车小程序系统前端uniapp 后台thinkphp

99 阅读3分钟

2.png

3.png

4.png

5.png

洗车行业全栈解决方案:基于UniApp+ThinkPHP的智能小程序系统

技术架构全景解析

本洗车小程序系统采用前后端分离架构,前端基于UniApp跨平台框架开发,后端采用ThinkPHP 6.0构建,实现了微信小程序、H5及APP多端适配。系统整体架构分为表现层、业务逻辑层和数据访问层三层设计,支持日均10万+订单的高并发场景。

核心技术栈组成

前端技术矩阵

  • 开发框架:UniApp 3.5(Vue3语法支持)
  • UI组件库:uView UI 2.0
  • 状态管理:Vuex + Pinia
  • 地图服务:腾讯位置服务JavaScript SDK
  • 图表库:uCharts高性能跨端图表

后端技术栈

  • 核心框架:ThinkPHP 6.0.12
  • API文档:Swagger 3.0自动生成
  • 缓存系统:Redis 6.2集群
  • 消息队列:Workerman异步任务处理
  • 支付网关:微信支付V3+支付宝双渠道

系统架构优势

  1. 跨平台一致性:UniApp编译到多个平台保持UI和业务逻辑统一
  2. 高性能后端:ThinkPHP优化路由解析速度提升30%
  3. 弹性扩展:支持容器化部署和自动水平扩展
  4. 安全可靠:RBAC权限控制+接口签名验证+数据加密传输

前端UniApp实现详解

核心页面架构

src/
├── pages/
│   ├── index/            # 首页
│   ├── shop/             # 门店列表
│   ├── appointment/      # 预约系统
│   ├── order/            # 订单管理
│    └── user/             # 个人中心
├── static/
│   ├── icons/            # 自定义图标
│   └── styles/           # 全局样式
└── store/                # Vuex状态管理

关键技术实现

预约时段选择组件

<template>
  <view class="time-grid">
    <block v-for="(item,index) in timeSlots" :key="index">
      <view 
        @click="selectTime(item)"
        :class="['time-item', { active: selected === item.time }]">
        {{ item.time }}
        <text v-if="item.count > 0" class="badge">{{ item.count }}</text>
      </view>
    </block>
  </view>
</template>

<script>
export default {
  props: {
    timeSlots: Array
  },
  methods: {
    selectTime(item) {
      if (item.available) {
        this.$emit('change', item.time)
      }
    }
  }
}
</script>

地图定位集成

// 获取用户当前位置
export const getLocation = () => {
  return new Promise((resolve, reject) => {
    uni.getLocation({
      type: 'gcj02',
      success: res => {
        resolve({
          lat: res.latitude,
          lng: res.longitude
        })
      },
      fail: err => reject(err)
    })
  })
}

性能优化实践

  1. 分包加载策略

    {
      "optimization": {
        "subPackages": true,
        "preloadRule": {
          "pages/appointment/index": {
            "network": "all",
            "packages": ["__APP__"]
          }
        }
      }
    }
    
  2. 图片懒加载

    <image 
      lazy-load 
      :src="item.image" 
      mode="aspectFill"
    />
    
  3. 数据缓存机制

    // 缓存门店数据
    const storeShops = () => {
      uni.setStorage({
        key: 'cached_shops',
        data: JSON.stringify(shopList),
        expire: 3600 // 1小时过期
      })
    }
    

后端ThinkPHP实现解析

目录结构设计

app/
├── controller/            # 控制器层
│   ├── Api/               # API接口
│    └── Admin/             # 管理后台
├── model/                 # 数据模型
│   ├── Shop.php           # 门店模型
│   └── Order.php          # 订单模型
├── service/               # 业务服务
│   ├── Payment.php        # 支付服务
│    └── Schedule.php       # 排程服务
└── validate/              # 验证器
config/
├── database.php           # 数据库配置
└── cache.php              # 缓存配置

核心业务逻辑

预约订单创建

public function createOrder()
{
    $params = $this->request->post();
    
    // 数据验证
    try {
        validate(OrderValidate::class)->check($params);
    } catch (ValidateException $e) {
        return json(['code' => 400, 'msg' => $e->getError()]);
    }

    // 检查时段可用性
    $schedule = new ScheduleService();
    if (!$schedule->checkAvailable($params['shop_id'], $params['time_slot'])) {
        return json(['code' => 500, 'msg' => '该时段已约满']);
    }

    // 创建订单
    Db::startTrans();
    try {
        $order = OrderModel::create($params);
        $payment = new PaymentService();
        $result = $payment->unifiedOrder($order);
        
        Db::commit();
        return json(['code' => 200, 'data' => $result]);
    } catch (\Exception $e) {
        Db::rollback();
        return json(['code' => 500, 'msg' => $e->getMessage()]);
    }
}

智能排程算法

class ScheduleService
{
    public function getAvailableSlots($shopId)
    {
        // 获取门店服务能力
        $shop = ShopModel::find($shopId);
        $capacity = $shop->wash_bays * $shop->slots_per_hour;
        
        // 查询已预约数
        $startTime = strtotime(date('Y-m-d 00:00:00'));
        $endTime = $startTime + 86400;
        
        $booked = OrderModel::where('shop_id', $shopId)
            ->where('appointment_time', 'between', [$startTime, $endTime])
            ->group('time_slot')
            ->column('count(id)', 'time_slot');
            
        // 生成时段数据
        $slots = [];
        for ($i = 9; $i <= 20; $i++) {
            $time = sprintf('%02d:00', $i);
            $count = $booked[$time] ?? 0;
            $slots[] = [
                'time' => $time,
                'available' => $count < $capacity,
                'count' => $capacity - $count
            ];
        }
        
        return $slots;
    }
}

接口安全设计

  1. JWT身份认证

    // 中间件配置
    public function handle($request, Closure $next)
    {
        $token = $request->header('Authorization');
        try {
            $payload = JwtAuth::verify($token);
            $request->user = UserModel::find($payload->uid);
        } catch (Exception $e) {
            return json(['code' => 401, 'msg' => 'Unauthorized']);
        }
        return $next($request);
    }
    
  2. 接口限流控制

    // 路由中间件
    'throttle' => \think\middleware\Throttle::class,
    
    // 配置
    'throttle' => [
        'limit' => 60,         // 允许请求次数
        'expire' => 60,        // 限流周期(秒)
        'key' => 'ip'          // 依据IP限流
    ],
    
  3. 数据加密传输

    // 响应加密
    public function encryptResponse($data)
    {
        $aes = new AesCrypt(config('app.aes_key'));
        return $aes->encrypt(json_encode($data));
    }
    

系统部署实战指南

环境准备清单

生产环境要求

  • 服务器:2核4G内存起步(推荐4核8G)
  • 操作系统:CentOS 7.9/Ubuntu 20.04 LTS
  • 软件依赖:
    • Nginx 1.20+
    • PHP 8.0(需安装swoole、redis扩展)
    • MySQL 5.7+/MariaDB 10.3+
    • Redis 6.2+

开发环境快速搭建

# 使用Docker
git clone https://github.com/car-wash-system.git
cd car-wash-system/docker
docker-compose up -d

详细部署步骤

后端部署

  1. 安装Composer依赖:

    composer install --no-dev
    
  2. 配置环境变量:

    cp .env.example .env
    vi .env  # 修改数据库和Redis配置
    
  3. 初始化应用:

    php think optimize:schema
    php think migrate:run
    php think seed:run
    

前端构建

  1. 安装npm依赖:

    npm install --registry=https://registry.npmmirror.com
    
  2. 配置API地址:

    // src/config/api.js
    export default {
      baseUrl: 'https://yourdomain.com/api',
      staticUrl: 'https://static.yourdomain.com'
    }
    
  3. 编译小程序:

    npm run build:mp-weixin
    

运维管理命令

常用指令集

# 定时任务(每天3点执行)
0 3 * * * php /path/to/think timer clear_expired

# 队列处理
nohup php think queue:work --daemon > queue.log 2>&1 &

# 数据备份
php think backup -d /backups --compress

商业应用与二次开发

运营功能扩展

会员积分系统

class PointService
{
    public function add($userId, $points, $remark)
    {
        Db::transaction(function() use ($userId, $points, $remark) {
            // 更新用户总积分
            UserModel::where('id', $userId)->inc('points', $points);
            
            // 记录积分日志
            PointLog::create([
                'user_id' => $userId,
                'points' => $points,
                'balance' => Db::name('user')->where('id', $userId)->value('points'),
                'remark' => $remark
            ]);
        });
    }
}

分销佣金计算

-- 三级分佣计算
SELECT 
    o.id,
    o.amount,
    u1.id AS level1_user,
    u2.id AS level2_user,
    u3.id AS level3_user,
    o.amount * 0.1 AS level1_commission,
    o.amount * 0.05 AS level2_commission,
    o.amount * 0.03 AS level3_commission
FROM orders o
LEFT JOIN users u1 ON o.user_id = u1.inviter_id
LEFT JOIN users u2 ON u1.inviter_id = u2.id
LEFT JOIN users u3 ON u2.inviter_id = u3.id
WHERE o.status = 2;

二次开发指南

API扩展规范

  1. 版本控制:/api/v2/前缀
  2. 错误码体系:
    {
      "code": 40001,
      "msg": "参数校验失败",
      "errors": {
        "mobile": "手机号格式不正确"
      }
    }
    

插件开发示例(支付网关):

extend/payment/
├── Alipay
│   ├── Config.php
│   └── Gateway.php
└── WechatPay
    ├── Config.php
    └── Gateway.php

支付接口契约

interface PaymentContract
{
    public function pay(array $order);
    public function refund(array $order);
    public function notify(callable $callback);
}

行业创新与未来展望

技术融合趋势

  1. 无感支付:车牌识别自动扣费

    # 车牌识别示例
    def recognize_plate(image):
        model = load_model('plate_recognition.h5')
        return model.predict(image)
    
  2. IoT智能硬件

    • 洗车机状态远程监控
    • 水电消耗实时统计
    • 设备故障预警系统
  3. 大数据分析

    -- 用户消费习惯分析
    SELECT 
      user_id,
      AVG(amount) AS avg_spend,
      COUNT(*) AS frequency,
      DATEDIFF(NOW(), MAX(create_time)) AS recency
    FROM orders
    GROUP BY user_id;
    

商业模式创新

生态合作案例

  • 加油站场景:加油满200元送洗车券
  • 保险增值服务:购保险赠全年洗车服务
  • 电动车专属:充电免基础洗车费

数据价值挖掘

  1. 用户画像系统
  2. 区域消费能力评估
  3. 动态定价策略优化

本系统已在多个城市验证商业价值,实际运营数据显示:

  • 门店运营效率提升45%
  • 客户留存率提高至60%
  • 高峰时段营收增长80% 全套源码遵循MIT开源协议,配套完整开发文档和技术支持,助力洗车行业快速实现数字化转型。