57 行
2.1 KiB
PHP
57 行
2.1 KiB
PHP
<?php
|
|
|
|
namespace addons\shopro\job;
|
|
|
|
use addons\shopro\library\traits\ActivityCache;
|
|
use addons\shopro\library\traits\Groupon;
|
|
use addons\shopro\model\Activity;
|
|
use addons\shopro\model\ActivityGroupon;
|
|
use think\queue\Job;
|
|
|
|
|
|
/**
|
|
* 订单自动操作
|
|
*/
|
|
class ActivityGrouponAutoOper extends BaseJob
|
|
{
|
|
use ActivityCache, Groupon;
|
|
|
|
/**
|
|
* 拼团判断,将团结束,
|
|
*/
|
|
public function expire(Job $job, $data){
|
|
try {
|
|
$activity = $data['activity'];
|
|
$activity_groupon_id = $data['activity_groupon_id'];
|
|
$activityGroupon = ActivityGroupon::where('id', $activity_groupon_id)->find();
|
|
|
|
// 活动正在进行中, 走这里的说明人数 都没满
|
|
if ($activityGroupon && $activityGroupon['status'] == 'ing') {
|
|
\think\Db::transaction(function () use ($activity, $activityGroupon) {
|
|
$rules = $activity['rules'];
|
|
// 是否虚拟成团
|
|
$is_fictitious = $rules['is_fictitious'] ?? 0;
|
|
// 最大虚拟人数 ,不填或者 "" 不限制人数,都允许虚拟成团, 0相当于不允许虚拟成团
|
|
$fictitious_num = (!isset($rules['fictitious_num']) || $rules['fictitious_num'] == '') ? 'no-limit' : $rules['fictitious_num'];
|
|
// 拼团剩余人数
|
|
$surplus_num = $activityGroupon['num'] - $activityGroupon['current_num'];
|
|
|
|
if ($is_fictitious && ($fictitious_num == 'no-limit' || $fictitious_num >= $surplus_num)) {
|
|
// 虚拟成团,如果虚拟用户不够,则自动解散
|
|
$this->finishFictitiousGroupon($activityGroupon);
|
|
} else {
|
|
// 解散退款
|
|
$this->invalidRefundGroupon($activityGroupon);
|
|
}
|
|
});
|
|
}
|
|
|
|
// 删除 job
|
|
$job->delete();
|
|
} catch (\Exception $e) {
|
|
// 队列执行失败
|
|
\think\Log::write('queue-' . get_class() . '-expire' . ':执行失败,错误信息:' . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
} |