GroupBuyController.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <?php
  2. namespace console\controllers;
  3. use bizHd\groupBuy\classes\GroupBuyClass;
  4. use bizHd\groupBuy\models\GroupBuy;
  5. use common\components\noticeUtil;
  6. use yii\console\Controller;
  7. /**
  8. * 拼团到期兜底扫描
  9. * 建议 crontab:每分钟 php yii group-buy/expire
  10. * 主触发依赖 RabbitMQ 延迟消息,本脚本防消息丢失漏判
  11. */
  12. class GroupBuyController extends Controller
  13. {
  14. /**
  15. * 扫描已到期仍拼团中的团,执行虚拟成团或失败退款
  16. */
  17. public function actionExpire()
  18. {
  19. $query = new \yii\db\Query();
  20. $query->from(GroupBuy::tableName());
  21. $endTime = time();
  22. $startTime = strtotime('-10 days');
  23. $query->where(['status' => GroupBuyClass::STATUS_ONGOING])
  24. ->andWhere(['>', 'deadline', $startTime])
  25. ->andWhere(['<=', 'deadline', $endTime])
  26. ->orderBy('deadline ASC');
  27. foreach ($query->batch() as $batch) {
  28. foreach ($batch as $row) {
  29. $id = intval($row['id'] ?? 0);
  30. try {
  31. GroupBuyClass::expireById($id);
  32. } catch (\Exception $e) {
  33. noticeUtil::push(
  34. '拼团到期扫描报错 groupBuyId=' . $id . ' ' . $e->getMessage(),
  35. '15280215347'
  36. );
  37. }
  38. }
  39. }
  40. echo "group-buy expire done\n";
  41. }
  42. }