where(['mall_id' => $mall_id]) ->andWhere(['like', 'name', "%{$params['name']}%", false])->select('id')->column(); if (!empty($a_ids)) { $where[]['activity_id'] = $a_ids; } else { $where[]['activity_id'] = StatusEnum::DISABLED; // 如果没有相关的活动,则不返回数据 } } if (!empty($params['member'])) { $user_or[] = 'or'; $user_or[] = ['like', 'id', $params['member']]; $user_or[] = ['like', 'nickname', $params['member']]; $u_ids = User::find()->where(['mall_id' => $mall_id])->andWhere($user_or)->column(); if (!empty($u_ids)) { $where[] = ['in', 'user_id', $u_ids]; } else { $where[] = ['user_id' => StatusEnum::DISABLED]; } } if (!empty($params['date_start']) && !empty($params['date_end'])) { $s = strtotime($params['date_start']); $e = strtotime($params['date_end']); $where[] = ['between', 'created_at', $s, $e]; } elseif (!empty($params['date_start'])) { $s = strtotime($params['date_start']); $where[] = ['<=', 'created_at', $s]; } elseif (!empty($params['date_end'])) { $e = strtotime($params['date_end']); $where[] = ['>=', 'created_at', $e]; } $ret = AddonsBusinessActivityOrderModel::listPage([ 'where' => $where, 'with' => ['activity', 'user', 'order' => function($query) { $query->with(['detail']); }], 'order' => 'id desc' ]); if (!empty(AddonsBusinessActivityOrderModel::getStaticError())) return AddonsBusinessActivityOrderModel::getStaticError(); return $ret; } /** * 同步创建订单 * @param Order $order * @param int $business_activity_id * @param array $activity_goods_ids * @return void * @throws \Exception */ public function create(Order $order, int $business_activity_id, array $activity_goods_ids) { $model = new AddonsBusinessActivityOrderModel(); $model->mall_id = $order->mall_id; $model->activity_id = $business_activity_id; $model->user_id = $order->user_id; $model->order_id = $order->id; $model->status = StatusEnum::ENABLED; $model->order_status = OrderStatusEnum::NOT_PAY; $model->goods_ids = Json::encode($activity_goods_ids); // 存储商品ID if (!$model->save()) { throw new \Exception("同步订单 {$order->id} 至招商活动 {$business_activity_id} 失败 {$model->getErrorMessage()}"); } // 将订单来源修改一下 $order->order_source = BusinessActivityEnum::ADDONS_NAME; $order->marketing_type = BusinessActivityEnum::ADDONS_NAME; if (!$order->save()) throw new \Exception("同步订单 {$order->id} 至招商活动 {$business_activity_id} 失败 {$order->getErrorMessage()}"); } /** * 同步更新订单状态 * @param Order $order * @param int $status * @param \Closure|null $callback * @return bool */ public function changeStatus(Order $order, AddonsBusinessActivityOrderModel $data, int $status, \Closure $callback = null) { $t = \Yii::$app->db->beginTransaction(); try { $data->order_status = $status; if (!$data->save()) { \Yii::error("同步订单 {$order->id} 状态 {$status} 至招商活动 {$data->activity_id} 失败 {$data->getErrorMessage()}"); throw new \Exception($data->getErrorMessage()); } // 闭包处理 if (!empty($callback)) { $callback->call($this); } $t->commit(); return true; } catch (\Exception $e) { $t->rollBack(); \Yii::error(FormatHelper::exception($e, __CLASS__)); return false; } } /** * 获取活动数量 * @param int $mall_id * @param array $activity_ids * @return array|\yii\db\ActiveRecord|null */ public function totalByActivity(int $mall_id, array $activity_ids) { return AddonsBusinessActivityOrderModel::find()->where(['mall_id' => $mall_id]) ->andWhere(['activity_id' => $activity_ids]) ->andWhere(['status' => StatusEnum::ENABLED]) ->select('COUNT(distinct user_id) as total_order')->asArray()->one(); } }