1], [['limit'], 'default', 'value' => 12], ]; } public function getList() { if (!$this->validate()) { return [ 'code' => 1, 'msg' => $this->getErrorSummary(false)[0] ]; } $this->getOrderList(); $this->getIntegralOrderList(); $this->getScanOrderList(); $this->getFoodOrderList(); $data = []; if (!empty($this->order_list)) { $time_keys = array_column($this->order_list, 'created_at'); array_multisort($time_keys, SORT_DESC, $this->order_list); $data = array_slice($this->order_list, ($this->page - 1) * $this->limit, $this->limit); } return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'row_count' => count($this->order_list), 'page_count' => ceil(count($this->order_list) / $this->limit), 'list' => $data, ], ]; } /** * 普通订单 */ public function getOrderList() { $start_time = $this->get_total_millisecond(); $query = Order::find()->where(['user_id' => $this->user_id, 'is_delete' => 0]); if (in_array($this->status, $this->validStatus)) { $query->andWhere(['trade_status' => $this->status]); } $list = $query->select('id, order_no, pay_price, created_at, trade_status, store_id')->asArray()->all(); if (!empty($list)) { $new_list = []; foreach ($list as $order) { $tmp = []; $tmp['goods_list'] = OrderDetail::find()->where(['order_id' => $order['id']])->select('goods_id as id, goods_name as name, num, total_price as cost, pic')->limit(3)->asArray()->all(); $tmp['unit'] = count($tmp['goods_list']); $tmp['id'] = $order['id']; $tmp['order_no'] = $order['order_no']; $tmp['cost'] = $order['pay_price']; $tmp['created_at'] = $order['created_at']; $tmp['time_format'] = date('Y-m-d H:i', $order['created_at']); $tmp['trade_status_text'] = $this->statusText($order['trade_status']); $tmp['store_info'] = [ 'name' => Option::get('name', $order['store_id'], 'store')['value'], 'logo' => Option::get('web_log', $order['store_id'], 'web')['value'], ]; $tmp['order_type'] = 0; $new_list[] = $tmp; } $this->order_list = array_merge($this->order_list, $new_list); } $end_time = $this->get_total_millisecond(); \Yii::error(['<======== 普通订单时间测试 =======>:', $end_time, $start_time, $end_time - $start_time]); } /** * 积分订单 */ public function getIntegralOrderList() { $start_time = $this->get_total_millisecond(); if (!is_null($this->status) && ($this->status == Order::ORDER_FLOW_NO_SEND || $this->status == Order::ORDER_FLOW_SEND || $this->status == Order::ORDER_FLOW_DEFAULT)) { return; } $query = SaasIntegralOrder::find()->where(['user_id' => $this->user_id, 'is_delete' => 0]); if ($this->status == Order::ORDER_FLOW_CONFIRM) { $query->andWhere(['is_clerk' => 1]); } $list = $query->select('id, order_no, cost, created_at, is_clerk, store_id, integral_goods_id, goods_id')->asArray()->all(); if (!empty($list)) { $new_list = []; foreach ($list as $order) { $tmp = []; $pic = Goods::findOne($order['goods_id'])->cover_pic; $goods = SaasIntegralGoods::find()->where(['id' => $order['integral_goods_id']])->select('name, id')->asArray()->one(); $goods['pic'] = $pic; $goods['num'] = 1; $goods['cost'] = $order['cost']; $tmp['goods_list'][] = $goods; $tmp['unit'] = 1; $tmp['id'] = $order['id']; $tmp['order_no'] = $order['order_no']; $tmp['cost'] = $order['cost']; $tmp['created_at'] = $order['created_at']; $tmp['time_format'] = date('Y-m-d H:i', $order['created_at']); $tmp['trade_status_text'] = $order['is_clerk'] == 1 ? '已核销' : '待核销'; $tmp['store_info'] = [ 'name' => Option::get('name', $order['store_id'], 'store')['value'], 'logo' => Option::get('web_log', $order['store_id'], 'web')['value'], ]; $tmp['order_type'] = 1; $new_list[] = $tmp; } $this->order_list = array_merge($this->order_list, $new_list); } $end_time = $this->get_total_millisecond(); \Yii::error(['<======== 积分订单时间测试 =======>:', $end_time, $start_time, $end_time - $start_time]); } /** * 当面付订单 */ public function getScanOrderList() { $start_time = $this->get_total_millisecond(); if (!is_null($this->status) && ($this->status == Order::ORDER_FLOW_NO_SEND || $this->status == Order::ORDER_FLOW_SEND)) { return; } $query = \app\plugins\scanCodePay\models\Order::find()->where(['user_id' => $this->user_id, 'is_delete' => 0]); if (in_array($this->status, $this->validStatus)) { $query->andWhere(['trade_status' => $this->status]); } $list = $query->select('id, order_no, pay_price, created_at, trade_status, store_id')->asArray()->all(); if (!empty($list)) { $new_list = []; foreach ($list as $order) { $tmp = []; $tmp['goods_list'] = \app\plugins\scanCodePay\models\OrderDetail::find()->where(['order_id' => $order['id']])->select('goods_id as id, goods_name as name, num, total_price as cost, pic')->asArray()->all(); $tmp['unit'] = count($tmp['goods_list']); $tmp['id'] = $order['id']; $tmp['order_no'] = $order['order_no']; $tmp['cost'] = $order['pay_price']; $tmp['created_at'] = $order['created_at']; $tmp['time_format'] = date('Y-m-d H:i', $order['created_at']); $tmp['trade_status_text'] = $this->statusText($order['trade_status']); $tmp['store_info'] = [ 'name' => Option::get('name', $order['store_id'], 'store')['value'], 'logo' => Option::get('web_log', $order['store_id'], 'web')['value'], ]; $tmp['order_type'] = 2; $new_list[] = $tmp; } $this->order_list = array_merge($this->order_list, $new_list); } $end_time = $this->get_total_millisecond(); \Yii::error(['<======== 当面付订单时间测试 =======>:', $end_time, $start_time, $end_time - $start_time]); } /** * 点餐订单 */ public function getFoodOrderList() { $start_time = $this->get_total_millisecond(); if (!is_null($this->status) && ($this->status == Order::ORDER_FLOW_NO_SEND || $this->status == Order::ORDER_FLOW_SEND)) { return; } $query = FoodOrder::find()->where(['user_id' => $this->user_id, 'is_delete' => 0]); if ($this->status == -1) { $query->andWhere(['is_pay' => 0]); } if ($this->status == 3) { $query->andWhere(['is_pay' => 1]); } $list = $query->select('id, order_no, pay_price, created_at, is_pay, store_id')->asArray()->all(); if (!empty($list)) { $new_list = []; foreach ($list as $order) { $tmp = []; $tmp['goods_list'] = FoodOrderDetail::find()->where(['order_id' => $order['id']])->select('goods_id as id, goods_name as name, num, total_price as cost, pic')->asArray()->all(); $food_num = 0; foreach ($tmp['goods_list'] as $food) { $food_num += $food['num']; } $tmp['unit'] = $food_num; $tmp['id'] = $order['id']; $tmp['order_no'] = $order['order_no']; $tmp['cost'] = $order['pay_price']; $tmp['created_at'] = $order['created_at']; $tmp['time_format'] = date('Y-m-d H:i', $order['created_at']); $tmp['trade_status_text'] = $order['is_pay'] == 0 ? '待支付' : '已完成'; $tmp['store_info'] = [ 'name' => Option::getFoodBookConfig($order['store_id'])['name'], 'logo' => Option::getFoodBookConfig($order['store_id'])['logo'], ]; $tmp['order_type'] = 3; $new_list[] = $tmp; } $this->order_list = array_merge($this->order_list, $new_list); } $end_time = $this->get_total_millisecond(); \Yii::error(['<======== 点餐订单时间测试 =======>:', $end_time, $start_time, $end_time - $start_time]); } /** * 返回订单状态文字 * @param integer $status * @return string $text */ private function statusText($status) { switch ($status) { case -1: $text = '待支付'; break; case 0: $text = '待发货'; break; case 1: $text = '已取消'; break; case 2: $text = '待收货'; break; case 3: $text = '已完成'; break; default: $text = '未知状态'; break; } return $text; } private function get_total_millisecond() { list($s1, $s2) = explode(' ', microtime()); return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000); } }