Files
fast/addons/shopro/job/OrderPaid.php
xiadc 35725ffd2d fix(zy): 修复活动报名时间和状态逻辑
- 修复了活动报名时间判断逻辑,增加了对报名结束时间的判断
- 修改了活动报名状态的判断条件,提高了代码的可读性和准确性
- 优化了订单自动操作和支付后的处理流程,确保活动报名状态正确更新
- 新增了用户权限验证功能,确保只有管理员或裁判可以修改用户状态
2025-05-31 21:22:44 +08:00

123 lines
4.3 KiB
PHP

<?php
namespace addons\shopro\job;
use think\Db;
use think\queue\Job;
use addons\shopro\service\StockSale;
use addons\shopro\controller\zy\Game;
use app\admin\model\shopro\user\User;
use app\admin\model\zy\game\GameJoin;
use app\admin\model\shopro\order\Order;
use app\admin\model\zy\game\Participant;
use addons\shopro\service\order\OrderOper;
use think\exception\HttpResponseException;
use addons\shopro\facade\Activity as ActivityFacade;
use app\admin\model\shopro\order\Invoice as OrderInvoice;
/**
* 订单自动操作
*/
class OrderPaid extends BaseJob
{
/**
* 订单支付完成
*/
public function paid(Job $job, $data)
{
try {
$order = $data['order'];
$user = $data['user'];
$order = Order::with('items')->where('id', $order['id'])->find();
$user = User::get($user['id']);
// 数据库删订单的问题常见,这里被删的订单直接把队列移除
if ($order) {
Db::transaction(function () use ($order, $user, $data) {
// 订单减库存
$stockSale = new StockSale();
$stockSale->forwardStockSale($order);
// 处理发票审核改为等待开具
if ($order->invoice_status == 1) {
$invoice = OrderInvoice::where('order_id', $order->id)->find();
if ($invoice) {
$invoice->status = 'waiting';
$invoice->save();
}
}
// 处理活动,加入拼团,完成拼团,添加赠品记录等
ActivityFacade::buyOk($order, $user);
// 将订单参与活动信息改为已支付
$orderOper = new OrderOper();
$orderOper->activityOrderPaid($order);
// 触发订单支付完成事件
$data = ['order' => $order, 'user' => $user];
\think\Hook::listen('order_paid_after', $data);
// zy体育报名处理
GameJoin::where('order_id', $order->id)->update(['status' => 1]);
});
}
// 删除 job
$job->delete();
} catch (HttpResponseException $e) {
$data = $e->getResponse()->getData();
$message = $data ? ($data['msg'] ?? '') : $e->getMessage();
format_log_error($e, 'OrderPaid.paid.HttpResponseException', $message);
} catch (\Exception $e) {
// 队列执行失败
format_log_error($e, 'OrderPaid.paid');
}
}
/**
* 订单选择线下支付(货到付款)完成
*/
public function offline(Job $job, $data)
{
try {
$order = $data['order'];
$user = $data['user'];
$order = Order::with('items')->where('id', $order['id'])->find();
$user = User::get($user['id']);
// 数据库删订单的问题常见,这里被删的订单直接把队列移除
if ($order) {
Db::transaction(function () use ($order, $user, $data) {
// 订单减库存
$stockSale = new StockSale();
$stockSale->forwardStockSale($order);
// 处理活动,加入拼团,完成拼团,添加赠品记录等
ActivityFacade::buyOk($order, $user);
// 触发订单选择线下支付(货到付款)完成事件
$data = ['order' => $order, 'user' => $user];
\think\Hook::listen('order_offline_after', $data);
// zy体育报名处理
GameJoin::where('order_id', $order->id)->update(['status' => 1]);
});
}
// 删除 job
$job->delete();
} catch (HttpResponseException $e) {
$data = $e->getResponse()->getData();
$message = $data ? ($data['msg'] ?? '') : $e->getMessage();
format_log_error($e, 'OrderPaid.offline.HttpResponseException', $message);
} catch (\Exception $e) {
// 队列执行失败
format_log_error($e, 'OrderPaid.offline');
}
}
}