false, 'msg' => '供应商不存在']; } // 获取年卡套餐信息 $plan = MemberPlanModel::where(['plan_id' => $planId, 'status' => 1])->find(); if (!$plan) { return ['status' => false, 'msg' => '年卡套餐不存在或已禁用']; } // 生成订单号 $orderNo = date('Ymd') . substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8); // 创建订单 $orderData = [ 'order_no' => $orderNo, 'shop_supplier_id' => $supplierId, 'plan_id' => $planId, 'plan_name' => $plan['name'], 'price' => $plan['price'], 'user_id' => $user['user_id'], 'pay_status' => MemberOrderStatusEnum::PENDING, 'app_id' => $supplier['app_id'], 'pay_source' => 'wx', // 默认来源 ]; $order = MemberOrderModel::create($orderData); if (!$order) { return ['status' => false, 'msg' => '创建订单失败']; } return ['status' => true, 'data' => $order]; } /** * 支付成功后处理年卡激活 * @param int $orderId 订单ID * @return bool 是否处理成功 */ public function activateMember($orderId) { // 获取订单信息 $order = MemberOrderModel::where(['order_id' => $orderId, 'pay_status' => MemberOrderStatusEnum::PENDING])->find(); if (!$order) { return false; } // 获取供应商和套餐信息 $supplier = SupplierModel::detail($order['shop_supplier_id']); $user = UserModel::detail($order['user_id']); $plan = MemberPlanModel::where(['plan_id' => $order['plan_id'], 'status' => 1])->find(); if (!$supplier || !$plan) { return false; } // 更新订单状态 $order->save([ 'pay_status' => MemberOrderStatusEnum::SUCCESS, 'pay_time' => time(), 'update_time' => time() ]); // 计算过期时间 $expireTime = time() + ($plan['duration'] * 24 * 60 * 60); // 创建或更新年卡记录 $memberData = [ 'shop_supplier_id' => $supplier['shop_supplier_id'], 'plan_id' => $plan['plan_id'], 'plan_name' => $plan['name'], 'price' => $plan['price'], 'expire_time' => $expireTime, 'bonus_points' => $plan['bonus_points'], 'is_expire' => 0, 'app_id' => $supplier['app_id'], ]; $member = MemberModel::where([ 'shop_supplier_id' => $supplier['shop_supplier_id'], 'is_expire' => 0 ])->where('expire_time', '>', time())->find(); if ($member) { $expireTime = $member['expire_time'] + ($plan['duration'] * 24 * 60 * 60); // 续费,延长过期时间 $member->save([ 'expire_time' => $expireTime, ]); } else { // 新购买 MemberModel::create($memberData); } // 赠送积分 if ($plan['bonus_points'] > 0) { $user->setIncPoints($plan['bonus_points'], '购买年卡赠送积分:'.$order['order_no']); } return true; } /** * 检查供应商是否有指定权限 * @param int $supplierId 供应商ID * @param string $permission 权限标识 * @return bool 是否有权限 */ public function checkPermission($supplierId, $permission) { // 获取供应商当前年卡 $supplier = SupplierModel::detail($supplierId); $member = $supplier->getCurrentMember(); if (!$member) { return false; // 没有有效年卡 } // 获取年卡套餐信息 $plan = MemberPlanModel::where(['plan_id' => $member['plan_id'], 'status' => 1])->find(); if (!$plan || empty($plan['permissions'])) { return false; } // 解析权限 $permissions = json_decode($plan['permissions'], true); if (!$permissions) { return false; } // 检查是否有指定权限 return isset($permissions[$permission]) && $permissions[$permission] == 1; } /** * 获取供应商所有权限 * @param int $supplierId 供应商ID * @return array 权限列表 */ public function getPermissions($supplierId) { // 获取供应商当前年卡 $supplier = SupplierModel::detail($supplierId); $member = $supplier->getCurrentMember(); if (!$member) { return []; // 没有有效年卡 } // 获取年卡套餐信息 $plan = MemberPlanModel::where(['plan_id' => $member['plan_id'], 'status' => 1])->find(); if (!$plan || empty($plan['permissions'])) { return []; } // 解析权限 $permissions = json_decode($plan['permissions'], true); return $permissions ?: []; } }