ActiveFinish.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace addons\GroupBuy\common\logic\order;
  3. use addons\GroupBuy\common\enums\GroupBuyEnum;
  4. use addons\GroupBuy\common\models\GroupBuyActive;
  5. use addons\GroupBuy\common\models\GroupBuyOrder;
  6. use common\enums\StatusEnum;
  7. use common\models\mall\Mall;
  8. class ActiveFinish
  9. {
  10. /**
  11. * 订单结束成团
  12. * @param $mall_id
  13. * @param $open_group_id
  14. * @param $active
  15. * @return bool
  16. */
  17. public static function handle($mall_id, $open_group_id, $active)
  18. {
  19. try {
  20. if (!$active || $active->virtual_group_type != 3) {
  21. return true;
  22. }
  23. // 获取当前团中的所有订单
  24. $where = [
  25. 'mall_id' => $mall_id,
  26. 'open_group_id' => $open_group_id,
  27. 'is_pay' => 1,
  28. 'order_status' => GroupBuyEnum::JOINING,
  29. 'status' => StatusEnum::ENABLED,
  30. ];
  31. $groupModel = GroupBuyOrder::find()
  32. ->where($where)
  33. ->orderBy('open_group_id asc')
  34. ->all();
  35. // 是否开启了 "当参团人数≥ x 人,拼团有效期结束后,自动成团"
  36. $groupCount = count($groupModel);
  37. if ($active->virtual_group_sub_type == 1 && $groupCount < $active->group_size && $groupCount < $active->expired_auto_complete_min_num) {
  38. // 拼团失败,退款
  39. $res = GroupBuyOrder::finishGroupBuyOrder($mall_id, $open_group_id);
  40. if (!$res) {
  41. throw new \Exception(' 开团id[ID:' . $open_group_id . ']过期,执行拼团结束失败, errmsg: ' . GroupBuyOrder::getStaticError() . PHP_EOL);
  42. }
  43. return true;
  44. }
  45. $res = GroupBuyOrder::addMainOrder($groupModel[0], $groupModel, $active, count($groupModel));
  46. if (!$res) {
  47. \Yii::$app->custom->logs("生成主订单错误,触发:order_id:" . $groupModel[0]['open_group_id']);
  48. return false;
  49. }
  50. return true;
  51. } catch (\Exception $e) {
  52. \Yii::$app->custom->logs('拼团订单生成失败', $e->getMessage());
  53. return false;
  54. }
  55. }
  56. }