<?php
|
|
namespace app\common\service\supplier;
|
|
use app\common\enum\supplier\MemberOrderStatusEnum;
|
use app\common\model\supplier\member\Member as MemberModel;
|
use app\common\model\supplier\member\Order as MemberOrderModel;
|
use app\common\model\supplier\member\Plan as MemberPlanModel;
|
use app\common\model\supplier\Supplier as SupplierModel;
|
use app\common\model\user\User as UserModel;
|
/**
|
* 供应商年卡服务类
|
* 用于处理年卡购买、权限分配等业务逻辑
|
*/
|
class MemberService
|
{
|
/**
|
* 创建年卡订单
|
* @param int $supplierId 供应商ID
|
* @param int $planId 年卡套餐ID
|
* @return array 订单信息
|
*/
|
public function createOrder($supplierId, $planId, $user)
|
{
|
// 获取供应商信息
|
$supplier = SupplierModel::detail($supplierId);
|
if (!$supplier) {
|
return ['status' => 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 ?: [];
|
}
|
}
|