| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- <?php
- namespace console\controllers;
- use bizHd\groupBuy\classes\GroupBuyClass;
- use bizHd\groupBuy\models\GroupBuy;
- use common\components\noticeUtil;
- use yii\console\Controller;
- /**
- * 拼团到期兜底扫描
- * 建议 crontab:每分钟 php yii group-buy/expire
- * 主触发依赖 RabbitMQ 延迟消息,本脚本防消息丢失漏判
- */
- class GroupBuyController extends Controller
- {
- /**
- * 扫描已到期仍拼团中的团,执行虚拟成团或失败退款
- */
- public function actionExpire()
- {
- $query = new \yii\db\Query();
- $query->from(GroupBuy::tableName());
- $endTime = time();
- $startTime = strtotime('-10 days');
- $query->where(['status' => GroupBuyClass::STATUS_ONGOING])
- ->andWhere(['>', 'deadline', $startTime])
- ->andWhere(['<=', 'deadline', $endTime])
- ->orderBy('deadline ASC');
- foreach ($query->batch() as $batch) {
- foreach ($batch as $row) {
- $id = intval($row['id'] ?? 0);
- try {
- GroupBuyClass::expireById($id);
- } catch (\Exception $e) {
- noticeUtil::push(
- '拼团到期扫描报错 groupBuyId=' . $id . ' ' . $e->getMessage(),
- '15280215347'
- );
- }
- }
- }
- echo "group-buy expire done\n";
- }
- }
|