| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- <?php
- namespace console\controllers;
- use addons\Bargain\common\enums\BargainEnum;
- use addons\Bargain\common\models\BargainActive;
- use addons\Bargain\common\models\BargainOrder;
- use addons\GroupBuy\common\enums\GroupBuyEnum;
- use common\models\goods\GoodsMarketing;
- use common\models\mall\MallAddons;
- use yii\console\Controller;
- use common\models\order\Order;
- use common\models\mall\Mall;
- use common\enums\OrderStatusEnum;
- use common\enums\StatusEnum;
- use yii\console\ExitCode;
- /**
- * 订单相关定时处理任务
- */
- class BargainOrderController extends Controller
- {
- /**
- * 自动关闭过期订单
- */
- public function actionAutoClose()
- {
- $where = [
- ['order_status' => OrderStatusEnum::NOT_PAY],
- ['status' => StatusEnum::ENABLED],
- ];
- return self::actionOrderProcess('close', 'order.payment_expire_time', $where);
- }
- /**
- * @desc:自动结束过期砍价活动
- * @Author: hua
- * @Date: 2021/12/16
- * @Time: 8:57
- * @Copyright: copyright (c) 2021 广东七件事集团
- */
- public function actionAutoFinishActive()
- {
- try {
- $mall_list = Mall::getEnableMallList(true);
- $mall_ids = array_column($mall_list, 'id');
- if (empty($mall_ids)) {
- echo '没有可用商城,不做处理 ... ' . PHP_EOL;
- return ExitCode::UNSPECIFIED_ERROR;
- }
- foreach ($mall_ids as $mall_id) {
- if (MallAddons::isInstall($mall_id, BargainEnum::ADDONS_NAME) == 0) continue;
- $active_list = BargainActive::findAll(['mall_id' => $mall_id, 'active_status' => BargainEnum::ACTIVE_HANDING]);
- if ($active_list) {
- foreach ($active_list as $active) {
- if ($active->end_time > time()) continue;
- $where = [
- 'mall_id' => $mall_id,
- 'bargain_active_id' => $active->id,
- 'order_status' => BargainEnum::ORDER_HANDING,
- 'is_pay' => 0,
- ];
- foreach (BargainOrder::find()->where($where)->each(500) as $bargain_order) {
- //已过期,砍价要结束
- $data = [
- 'id' => $bargain_order->id,
- 'user_id' => $bargain_order->user_id,
- 'mall_id' => $mall_id,
- 'operator_id' => 0,
- 'operator_name' => '系统',
- ];
- $res = BargainOrder::close($data);
- if ($res == false) {
- echo ' 砍价订单[ID:' . $bargain_order->id . ']过期,执行砍价结束失败, errmsg: ' . BargainOrder::getStaticError() . PHP_EOL;
- continue;
- }
- }
- $active->active_status = BargainEnum::ACTIVE_FINISH;
- $active->save();
- $params['mall_id'] = $mall_id;
- $params['marketing_id'] = $active['id'];
- $params['marketing_type'] = BargainEnum::ADDONS_NAME;
- $params['status'] = StatusEnum::DELETE;
- GoodsMarketing::setData($params);
- }
- }
- }
- return ExitCode::OK;
- } catch (\Exception $e) {
- echo '砍价订单,执行砍价结束失败任务处理出错:' . $e->getMessage() . PHP_EOL;
- return ExitCode::UNSPECIFIED_ERROR;
- }
- }
- /**
- * @name:
- * @msg:
- * @param {string} $action 操作类型,close:自动关闭订单,confirm:自动确认收货,complete:订单自动过售后
- * @param {string} $config_key 相应操作时间间隔配置名称
- * @param {int} $order_status 需要进行处理的订单的状态
- * @return {int}
- */
- private static function actionOrderProcess(string $action, string $config_key, array $order_wheres = null): int
- {
- $action_info_map = [
- 'close' => [
- 'task_name' => '自动关闭订单',
- 'time_radix' => 60, // 时间节点计算的基数,自动关闭订单时间单位是分钟,转换为秒的基数是60
- 'method' => 'close',
- 'time_field' => 'created_at',
- 'default' => 30, // 自动关闭订单默认时间 30 分钟
- ],
- ];
- try {
- $mall_list = Mall::getEnableMallList(true);
- $mall_ids = array_column($mall_list, 'id');
- if (empty($mall_ids)) {
- echo '没有可用商城,不做处理 ... ' . PHP_EOL;
- return ExitCode::UNSPECIFIED_ERROR;
- }
- foreach ($mall_ids as $mall_id) {
- // 判断用户插件是否安装
- if (MallAddons::isInstall($mall_id, BargainEnum::ADDONS_NAME) == 0) continue;
- // 订单自动处理时间
- $order_auto_handle_time = \Yii::$app->services->setting->mall->get($mall_id, $config_key);
- // 如果自动处理时间没有配置,则取默认值
- if (empty($order_auto_handle_time)) $order_auto_handle_time = $action_info_map[$action]['default'];
- // 订单自动处理时间节点,延后两分钟处理,避免支付回调尚未回来订单已经被取消s
- $time_node = time() - $order_auto_handle_time * $action_info_map[$action]['time_radix'] - 120;
- $time_field = $action_info_map[$action]['time_field'];
- $where = [
- 'and',
- ['mall_id' => $mall_id],
- ['<', $time_field, $time_node]
- ];
- if (!empty($order_wheres)) {
- foreach ($order_wheres as $order_where) {
- array_push($where, $order_where);
- }
- }
- $select = 'id,user_id';
- foreach (BargainOrder::find()->select($select)->where($where)->each(500) as $order) {
- $data = [
- 'id' => $order->id,
- 'user_id' => $order->user_id,
- 'mall_id' => $mall_id,
- 'operator_id' => 0,
- 'operator_name' => '系统',
- ];
- $method = $action_info_map[$action]['method'];
- if (!BargainOrder::$method($data)) {
- echo ' 砍价订单[ID:' . $order->id . ']' . $action_info_map[$action]['task_name'] . '失败, errmsg: ' . BargainOrder::getStaticError() . PHP_EOL;
- continue;
- }
- }
- }
- return ExitCode::OK;
- } catch (\Exception $e) {
- echo ' 砍价订单' . $action_info_map[$action]['task_name'] . ' 任务处理出错:' . $e->getMessage() . PHP_EOL;
- return ExitCode::UNSPECIFIED_ERROR;
- }
- }
- }
|