| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\client\models\v1;
- use app\models\Goods;
- use app\models\Option;
- use app\models\Order;
- use app\models\OrderDetail;
- use app\plugins\food\models\FoodOrder;
- use app\plugins\food\models\FoodOrderDetail;
- use app\plugins\integral\models\SaasIntegralGoods;
- use app\plugins\integral\models\SaasIntegralOrder;
- use yii\base\Model;
- /**
- * Class SaasOrderForm
- * @package app\modules\client\models\v1
- */
- class SaasOrderForm extends Model
- {
- public $page = 1;
- public $limit = 12;
- public $user_id;
- // -1: 待付款,0:待发货,1:已取消,2:待收货 3:已完成
- public $status;
- public $validStatus = [-1, 0, 1, 2, 3];
- public $order_list = [];
- public function rules()
- {
- return [
- [['page', 'limit'], 'integer'],
- [['page'], 'default', 'value' => 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);
- }
- }
|