' . implode(', ', $mall_ids) . PHP_EOL; try { foreach ($mall_ids as $mall_id) { $activities = DepositPresaleActive::find()->where([ 'and', ['mall_id' => $mall_id], ['group_status' => [DepositPresaleEnum::NOT_STARTED, DepositPresaleEnum::OPEN_GROUP]], ['status' => StatusEnum::ENABLED], ]); /** @var DepositPresaleActive $activity */ foreach ($activities->each() as $activity) { $is_change = 0; if ($activity->group_status == DepositPresaleEnum::NOT_STARTED) { if (time() >= $activity->deposit_start_at) { $is_change += 1; $activity->group_status = DepositPresaleEnum::OPEN_GROUP; } } if ($activity->group_status == DepositPresaleEnum::OPEN_GROUP) { if (time() > $activity->deposit_end_at) { $is_change += 1; $activity->group_status = DepositPresaleEnum::GROUP_FINISH; $result = DepositPresaleActive::delDiyGoods(['mall_id' => $mall_id, 'id' => $activity->id]); if ($result === false) throw new Exception(DepositPresaleActive::getStaticError()); } } if ($is_change) { $res = $activity->save(); if (!$res) throw new Exception($activity->getErrorMessage()); } } } } catch (\Exception $e) { echo '执行失败的原因: ' . $e->getMessage(); } } /**废弃 * @Description: 处理过期的活动,已付定金的订单但是没有付尾款的退款 * @Author: code farmer 3 * @DateTime 2022-04-28 10:36:34 * @return void */ public function actionDealOrderOld() { $malls = Mall::getEnableMallList(); $mall_ids = array_column($malls, 'id'); echo ' 获取到的 mall_id => ' . implode(', ', $mall_ids) . PHP_EOL; foreach ($mall_ids as $mall_id) { $activities = DepositPresaleActive::find()->where([ 'and', ['mall_id' => $mall_id], ['group_status' => DepositPresaleEnum::GROUP_FINISH] ]); /** @var DepositPresaleActive $activity */ foreach ($activities->each() as $activity) { // 付了定金但是没有付尾款 try { $presale_orders = DepositPresaleOrder::find()->where([ 'and', ['mall_id' => $mall_id], ['deposit_presale_active_id' => $activity->id], ['order_status' => DepositPresaleEnum::JOINING], ['status' => StatusEnum::ENABLED], ['<=', 'final_payment_time', 0], ['>', 'pay_time', 0] ]); /** @var DepositPresaleOrder $presale_order */ foreach ($presale_orders->each() as $presale_order) { $res = DepositPresaleOrder::finishDepositPresaleOrder($presale_order->mall_id, $presale_order->open_group_id); if ($res === false) { throw new Exception("预售订单ID:{$presale_order->id}, 主商城订单ID:{$presale_order->order_id}" . DepositPresaleOrder::getStaticError()); } } } catch (\Exception $e) { Yii::error('退款执行失败的原因' . $e->getMessage()); echo '退款执行失败的原因: ' . $e->getMessage() . PHP_EOL; } try { //未付款的 $orders_query = DepositPresaleOrder::find()->where([ 'and', ['mall_id' => $mall_id], ['deposit_presale_active_id' => $activity->id], ['order_status' => DepositPresaleEnum::NOT_PAY], ['status' => StatusEnum::ENABLED], ]); /** @var DepositPresaleOrder $order */ foreach ($orders_query->each() as $order) { $params = ['mall_id' => $mall_id, 'id' => $order->id, 'user_id' => $order->user_id, 'operator_id' => 0, 'operator_name' => '系统']; $result = DepositPresaleOrder::close($params); if ($result === false) { throw new Exception("预售订单ID:{$order->id}, 订单ID:{$order->order_id}," . DepositPresaleOrder::getStaticError()); } } } catch (\Exception $e) { Yii::error('关闭订单执行失败的原因' . $e->getMessage()); echo '关闭订单执行失败的原因: ' . $e->getMessage() . PHP_EOL; } } } } /** * @Description: 更改活动状态和订单状态 * @Author: observer3 * @DateTime 2022-06-10 15:46:57 * @return void */ public function actionDealOrder() { $malls = Mall::getEnableMallList(); $mall_ids = array_column($malls, 'id'); echo ' 获取到的 mall_id => ' . implode(', ', $mall_ids) . PHP_EOL; foreach ($mall_ids as $mall_id) { $activities = DepositPresaleActive::find()->where([ 'and', ['mall_id' => $mall_id], ['group_status' => [DepositPresaleEnum::NOT_STARTED, DepositPresaleEnum::OPEN_GROUP, DepositPresaleEnum::GROUP_FINISH]], ['status' => StatusEnum::ENABLED], ]); try { /** @var DepositPresaleActive $activity */ foreach ($activities->each() as $activity) { if ($activity->group_status == DepositPresaleEnum::NOT_STARTED) { if (time() >= $activity->deposit_start_at) { $activity->group_status = DepositPresaleEnum::OPEN_GROUP; $res = $activity->save(); if (!$res) throw new Exception($activity->getErrorMessage()); } } if ($activity->group_status == DepositPresaleEnum::OPEN_GROUP) { if (time() > $activity->deposit_end_at) { $activity->group_status = DepositPresaleEnum::GROUP_FINISH; $res = $activity->save(); if (!$res) throw new Exception($activity->getErrorMessage()); $result = DepositPresaleActive::delDiyGoods(['mall_id' => $mall_id, 'id' => $activity->id]); if ($result === false) throw new Exception(DepositPresaleActive::getStaticError()); $this->getUnpaidOrder($mall_id, $activity); } } if($activity->group_status == DepositPresaleEnum::GROUP_FINISH && time() > $activity->final_payment_end_at){ $this->getNotPayFinalOrder($mall_id, $activity); } } } catch (Exception $e) { Yii::error('活动状态更改失败原因' . $e->getMessage()); echo '活动状态更改失败原因: ' . $e->getMessage() . PHP_EOL; } } } public function getNotPayFinalOrder($mall_id, $activity) { try { $presale_orders = DepositPresaleOrder::find()->where([ 'and', ['mall_id' => $mall_id], ['deposit_presale_active_id' => $activity->id], ['order_status' => DepositPresaleEnum::JOINING], ['status' => StatusEnum::ENABLED], ['<=', 'final_payment_time', 0], ['>', 'pay_time', 0] ]); /** @var DepositPresaleOrder $presale_order */ foreach ($presale_orders->each() as $presale_order) { try { $res = DepositPresaleOrder::finishDepositPresaleOrder($presale_order->mall_id, $presale_order->open_group_id); if ($res === false) { throw new Exception("预售订单ID:{$presale_order->id}, 主商城订单ID:{$presale_order->order_id}" . DepositPresaleOrder::getStaticError()); } } catch (\Exception $e) { Yii::error('退款执行失败的原因' . $e->getMessage()); echo '退款执行失败的原因: ' . $e->getMessage() . PHP_EOL; } } } catch (\Exception $e) { Yii::error('仅支付定金未付尾款订单处理失败:' . $e->getMessage()); echo '仅支付定金未付尾款订单处理失败: ' . $e->getMessage() . PHP_EOL; } } public function getUnpaidOrder($mall_id, $activity) { try { $orders_query = DepositPresaleOrder::find()->where([ 'and', ['mall_id' => $mall_id], ['deposit_presale_active_id' => $activity->id], ['order_status' => DepositPresaleEnum::NOT_PAY], ['status' => StatusEnum::ENABLED], ]); /** @var DepositPresaleOrder $order */ foreach ($orders_query->each() as $order) { try { $params = ['mall_id' => $mall_id, 'id' => $order->id, 'user_id' => $order->user_id, 'operator_id' => 0, 'operator_name' => '系统']; $result = DepositPresaleOrder::close($params); if ($result === false) { throw new Exception("预售订单ID:{$order->id}, 订单ID:{$order->order_id}," . DepositPresaleOrder::getStaticError()); } } catch (\Exception $e) { Yii::error('关闭订单执行失败的原因:' . $e->getMessage()); echo '关闭订单执行失败的原因: ' . $e->getMessage() . PHP_EOL; } } } catch (\Exception $e) { Yii::error('未付定金订单关闭订单失败:' . $e->getMessage()); echo '未付定金订单关闭订单失败: ' . $e->getMessage() . PHP_EOL; } } }