- 修复了活动报名时间判断逻辑,增加了对报名结束时间的判断 - 修改了活动报名状态的判断条件,提高了代码的可读性和准确性 - 优化了订单自动操作和支付后的处理流程,确保活动报名状态正确更新 - 新增了用户权限验证功能,确保只有管理员或裁判可以修改用户状态
166 lines
5.3 KiB
PHP
166 lines
5.3 KiB
PHP
<?php
|
|
|
|
namespace addons\shopro\job;
|
|
|
|
use think\Db;
|
|
use think\Log;
|
|
use think\queue\Job;
|
|
use think\Collection;
|
|
use app\admin\model\zy\game\GameJoin;
|
|
use app\admin\model\shopro\order\Order;
|
|
use app\admin\model\shopro\order\Action;
|
|
use app\admin\model\zy\game\Participant;
|
|
use addons\shopro\service\order\OrderOper;
|
|
use think\exception\HttpResponseException;
|
|
use app\admin\model\shopro\order\OrderItem;
|
|
use addons\shopro\exception\ShoproException;
|
|
|
|
/**
|
|
* 订单自动操作
|
|
*/
|
|
class OrderAutoOper extends BaseJob
|
|
{
|
|
|
|
/**
|
|
* 订单自动关闭
|
|
*/
|
|
public function autoClose(Job $job, $data)
|
|
{
|
|
if (check_env('yansongda', false)) {
|
|
set_addon_config('epay', ['version' => 'v3'], false);
|
|
\think\Hook::listen('epay_config_init');
|
|
}
|
|
|
|
try {
|
|
$order = $data['order'];
|
|
|
|
// 重新查询订单
|
|
$order = Order::unpaid()->where('id', $order['id'])->find();
|
|
|
|
if ($order) {
|
|
Db::transaction(function () use ($order, $data) {
|
|
$orderOper = new OrderOper();
|
|
$order = $orderOper->close($order, null, 'system');
|
|
// zy体育报名处理(未支付,自动退坑)
|
|
$join = GameJoin::where('order_id', $data['order']['id'])->find();
|
|
if (!empty($join)) {
|
|
$join->save([' status' => -1]);
|
|
Participant::where('game_join_id', $join['id'])->update(['status' => -1]);
|
|
}
|
|
return $order;
|
|
});
|
|
}
|
|
|
|
// 删除 job
|
|
$job->delete();
|
|
} catch (ShoproException $e) {
|
|
// 自定义异常时删除 队列
|
|
$job->delete();
|
|
|
|
format_log_error($e, 'OrderAutoOper.autoClose.sheepException');
|
|
} catch (HttpResponseException $e) {
|
|
// error_stop 异常时删除 队列
|
|
$job->delete();
|
|
|
|
$data = $e->getResponse()->getData();
|
|
$message = $data ? ($data['msg'] ?? '') : $e->getMessage();
|
|
format_log_error($e, 'OrderAutoOper.autoClose.HttpResponseException', $message);
|
|
} catch (\Exception $e) {
|
|
// 队列执行失败
|
|
format_log_error($e, 'OrderAutoOper.autoClose');
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 订单自动确认收货
|
|
*/
|
|
public function autoConfirm(Job $job, $data)
|
|
{
|
|
try {
|
|
$order = $data['order'];
|
|
$items = $data['items'];
|
|
$itemIds = $items instanceof Collection ? $items->column('id') : array_column($items, 'id');
|
|
|
|
// 重新查询订单
|
|
$order = Order::paid()->where('id', $order['id'])->find(); // 货到付款的 还未付款的订单被排除在外,不会自动收货
|
|
|
|
if ($order) {
|
|
$order = Db::transaction(function () use ($order, $itemIds) {
|
|
$orderOper = new OrderOper();
|
|
$order = $orderOper->confirm($order, $itemIds, null, 'system');
|
|
|
|
return $order;
|
|
});
|
|
}
|
|
|
|
// 删除 job
|
|
$job->delete();
|
|
} catch (ShoproException $e) {
|
|
// 自定义异常时删除 队列
|
|
$job->delete();
|
|
|
|
format_log_error($e, 'OrderAutoOper.autoConfirm.sheepException');
|
|
} catch (HttpResponseException $e) {
|
|
// error_stop 异常时删除 队列
|
|
$job->delete();
|
|
|
|
$data = $e->getResponse()->getData();
|
|
$message = $data ? ($data['msg'] ?? '') : $e->getMessage();
|
|
format_log_error($e, 'OrderAutoOper.autoConfirm.HttpResponseException', $message);
|
|
} catch (\Exception $e) {
|
|
// 队列执行失败
|
|
format_log_error($e, 'OrderAutoOper.autoConfirm');
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public function autoComment(Job $job, $data)
|
|
{
|
|
try {
|
|
$order = $data['order'];
|
|
$item = $data['item'];
|
|
|
|
// 重新查询订单
|
|
$order = Order::paid()->where('id', $order['id'])->find();
|
|
|
|
if ($order && $item) {
|
|
$order = Db::transaction(function () use ($order, $item) {
|
|
$orderOper = new OrderOper();
|
|
|
|
$comments[] = [
|
|
'item_id' => $item['id'],
|
|
'level' => 5,
|
|
];
|
|
|
|
// 评价一个订单商品
|
|
$order = $orderOper->comment($order, $comments, null, 'system');
|
|
|
|
return $order;
|
|
});
|
|
}
|
|
|
|
// 删除 job
|
|
$job->delete();
|
|
} catch (ShoproException $e) {
|
|
// 自定义异常时删除 队列
|
|
$job->delete();
|
|
|
|
format_log_error($e, 'OrderAutoOper.autoComment.sheepException');
|
|
} catch (HttpResponseException $e) {
|
|
// error_stop 异常时删除 队列
|
|
$job->delete();
|
|
|
|
$data = $e->getResponse()->getData();
|
|
$message = $data ? ($data['msg'] ?? '') : $e->getMessage();
|
|
format_log_error($e, 'OrderAutoOper.autoComment.HttpResponseException', $message);
|
|
} catch (\Exception $e) {
|
|
// 队列执行失败
|
|
format_log_error($e, 'OrderAutoOper.autoComment');
|
|
|
|
$job->delete();
|
|
}
|
|
}
|
|
}
|