user_id; $store_id = $this->store_id; $order_no = $this->order_no; $user_name = $this->user_name; $mobile = $this->mobile; $day = (int)$this->day; $order_start_time = $this->order_start_time; $order_end_time = $this->order_end_time; $start_time = 0; $end_time = time(); $type = $this->type; $md_id = $this->md_id; $query = Order::find()->alias('o')->where([ 'o.store_id' => $store_id, 'o.is_delete' => 0, 'o.trade_status' => [Order::ORDER_FLOW_NO_SEND, Order::ORDER_FLOW_SEND, Order::ORDER_FLOW_CONFIRM] ])->andWhere(['or', ['o.is_pay' => 1], ['o.pay_type' => \app\models\Order::PAY_TYPE_COD]]) ->leftJoin(['u' => User::tableName()], 'o.user_id = u.id') ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile = u.binding'); if ($order_no) { $query->andWhere(['LIKE', 'o.order_no', $order_no]); } if ($user_id) { $query->andWhere(['o.user_id' => $user_id]); } if ($user_name) { $query->andWhere(['LIKE', 'su.name', $user_name]); } if ($mobile) { $query->andWhere(['OR', ['LIKE', 'su.mobile', $mobile], ['LIKE', 'o.mobile', $mobile]]); } if (intval($type)) { $query->andWhere(['AND', ['o.is_offline' => 1], ['>', 'md_id', 0]]); if ($md_id) { $query->andWhere(['o.md_id' => $md_id]); } } if ($day) { switch ($day) { case 2: $start_time = strtotime(date('Y-m-d', strtotime('-1 week'))); break; case 3: $start_time = strtotime(date('Y-m-d', strtotime('-1 month'))); break; case 4: $start_time = strtotime(date('Y-m-d', strtotime('-1 year'))); break; default: $start_time = strtotime(date('Y-m-d')); break; } } if ($order_start_time && $order_end_time) { $order_start_time = strtotime($order_start_time); $order_end_time = strtotime($order_end_time); if ($order_start_time > $start_time) { $start_time = $order_start_time; } if ($order_end_time < $end_time) { $end_time = $order_end_time; } } $query->select('o.id, o.order_no, su.name user_name, su.mobile user_mobile, su.avatar, o.name, o.mobile, o.pay_price total_price, o.created_at, o.rand_discount, o.integral, o.balance, o.md_id'); $query->groupBy('o.id'); $total_query = clone $query; if (intval($type)) { $today_total_order = $total_query->asArray()->all(); } else { $today_total_order = $total_query->andWhere(['AND', ['>=', 'o.created_at', strtotime(date('Y-m-d'))], ['<=', 'o.created_at', time()]]) ->asArray()->all(); } //今日累计 $today_data = [ 'total_price' => 0, 'num' => 0, 'profit' => 0 ]; if ($today_total_order) { $total_price_arr = array_column($today_total_order, 'total_price'); $today_data['total_price'] = sprintf("%.2f", array_sum($total_price_arr)); $today_data['num'] = count($today_total_order); $this->commonData($today_total_order); $total_profit_arr = array_column($today_total_order, 'profit'); $today_data['profit'] = sprintf("%.2f", array_sum($total_profit_arr)); } if ($start_time && $end_time) { $query->andWhere(['AND', ['>=', 'o.created_at', $start_time], ['<=', 'o.created_at', $end_time]]); } $query->orderBy('o.created_at desc'); $list = pagination_make($query); $this->commonData($list['list']); return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'data' => $list['list'], 'today_data' => $today_data, 'pageNo' => $list['pageNo'], 'totalCount' => $list['totalCount'], ], ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } public function commonData(&$list) { foreach ($list as &$item) { $goods_list = OrderDetail::find()->alias('od')->where(['od.order_id' => $item['id']]) ->leftJoin(['g' => Goods::tableName()], 'od.goods_id = g.id') ->select('od.id, od.attr, g.use_attr ,g.price, g.attr goods_attr, od.total_price, od.num, od.cost_price')->asArray()->all(); $profit = 0; foreach ($goods_list as $goods_item) { $total_cost = $goods_item['cost_price'] * $goods_item['num']; $profit += ($goods_item['total_price'] - $total_cost); } //减去立减 $profit -= $item['rand_discount']; // 减去余额抵扣 $profit -= $item['balance']; $item['goods_balance'] = $item['balance'] ?? 0; //减去积分抵扣 $integral = json_decode($item['integral'], true); $profit -= $integral['forehead']; $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']); $item['profit'] = sprintf("%.2f", $profit); $item['goods_num'] = count($goods_list); $md = Md::findOne($item['md_id']); $item['md_name'] = $md->name ?: ''; } } }