Files
sbnews/server/app/api/logic/VipOrderLogic.php
2026-06-11 12:15:29 +08:00

74 lines
2.4 KiB
PHP

<?php
namespace app\api\logic;
use app\common\enum\PayEnum;
use app\common\logic\BaseLogic;
use app\common\model\user\User;
use app\common\model\vip\VipLevel;
use app\common\model\vip\VipOrder;
class VipOrderLogic extends BaseLogic
{
public static function levels(): array
{
return VipLevel::where('status', 1)
->order('sort', 'desc')
->order('id', 'asc')
->select()
->toArray();
}
public static function createOrder(array $params)
{
try {
$level = VipLevel::where(['id' => $params['level_id'], 'status' => 1])->findOrEmpty();
if ($level->isEmpty()) {
throw new \Exception('VIP套餐不存在或已下架');
}
// 有效期内不能重复购买同一等级
$user = User::findOrEmpty($params['user_id']);
if ($user->is_vip == 1 && $user->vip_expire_time > time() && $user->vip_level == $level['level']) {
throw new \Exception('您当前已是' . $level['name'] . ',有效期内无需重复购买');
}
$order = VipOrder::create([
'sn' => generate_sn(VipOrder::class, 'sn'),
'user_id' => $params['user_id'],
'level_id' => $level['id'],
'level_name' => $level['name'],
'duration' => $level['duration'],
'order_amount' => $level['price'],
'pay_status' => PayEnum::UNPAID,
'order_terminal' => $params['terminal'],
]);
return [
'order_id' => (int) $order['id'],
'from' => 'vip_order'
];
} catch (\Exception $e) {
self::setError($e->getMessage());
return false;
}
}
public static function detail(array $params)
{
try {
$order = VipOrder::where(['id' => $params['order_id'], 'user_id' => $params['user_id']])
->append(['pay_status_text', 'pay_way_text'])
->findOrEmpty();
if ($order->isEmpty()) {
throw new \Exception('订单不存在');
}
$data = $order->toArray();
$data['pay_time'] = empty($data['pay_time']) ? '' : date('Y-m-d H:i:s', $data['pay_time']);
return $data;
} catch (\Exception $e) {
self::setError($e->getMessage());
return false;
}
}
}