request->isAjax) { if (\Yii::$app->request->isGet) { $params = \Yii::$app->request->get(); $mall_id = $this->mall_id; $where[] = ['mall_id' => $mall_id]; $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $user_ids = []; if (!empty($params['level'])) $where[] = ['level' => $params['level']]; if (!empty($params['keyword'])) { $is_search = 1; $user_list = User::lists(['where' => [['mall_id' => $this->mall_id], [ 'or', ['=', 'id', $params['keyword']], ['like', 'nickname', $params['keyword'] . '%', false], ['like', 'mobile', $params['keyword'] . '%', false] ]], 'select' => 'id']); $user_ids = array_column($user_list, 'id'); } if (!empty($is_search)) $where[] = ['user_id' => $user_ids]; $params['limit'] = 10; $params['where'] = $where; $params['order'] = 'id DESC'; $params['select'] = 'id,user_id,realname,mobile,level,address,regional_id,province_id,city_id,district_id,town_id,total_commission,created_at,community_id, is_enable_dividend'; $params['with'] = ['user' => function ($query) use ($mall_id) { $query->where(['mall_id' => $mall_id])->select('id,nickname,avatar_url,mobile,parent_id')->with(['parent']); }, 'goods' => function($query) { $query->with(['goods']); }]; $pageData = AreaAgent::listPage($params, false); if ($pageData === false) return $this->error(AreaAgent::getStaticError()); $pageData['level_map'] = AreaEnum::getLevelMap(null, $this->mall_id); if (!empty($pageData['list'])) { foreach ($pageData['list'] as &$item) { $_where = [ 'and', ['mall_id' => $mall_id], ['status' => StatusEnum::ENABLED], ['pay_status' => StatusEnum::ENABLED], ['store_id' => 0], ['mch_id' => 0] ]; switch ($item['level']) { case AreaEnum::PROVINCE: $_where[] = ['province' => $item['province_id']]; break; case AreaEnum::CITY: $_where[] = ['city' => $item['city_id']]; break; case AreaEnum::DISTRICT: $_where[] = ['area' => $item['district_id']]; break; case AreaEnum::TOWN: $_where[] = ['town' => $item['town_id']]; break; case AreaEnum::COMMUNITY: $_where[] = ['community' => $item['community_id']]; break; case AreaEnum::REGIONAL: $res = AreaRegional::findOne($item['regional_id']); if(empty($res->province_ids) == false){ $_where[] = ['in', 'province', explode(',',$res->province_ids)]; }else{ $_where[] = ['province' => -1]; //防止数据为空 } break; default: $_where[] = ['id' => 0]; } if (!empty($params['start'])) $_where[] = ['>=', 'created_at', strtotime($params['start'] . ' 00:00:00')]; if (!empty($params['end'])) $_where[] = ['<=', 'created_at', strtotime($params['end'] . ' 23:59:59')]; $order_ids = Order::find()->where($_where)->select('id')->column(); $item['order_num'] = count($order_ids); $order_amount = Order::find()->where($_where)->sum('goods_price'); $item['order_amount'] = !empty($order_amount)? $order_amount : 0; $pay_amount = Order::find()->where($_where)->sum('pay_money'); $item['order_pay_amount'] = !empty($pay_amount)? $pay_amount : 0; $refund_amount = OrderRefund::find()->where(['order_id' => $order_ids, 'status' => StatusEnum::ENABLED, 'step_status' => [RefundStatusEnum::STEP_4, RefundStatusEnum::STEP_6]])->sum('refund_price'); $item['refund_amount'] = !empty($refund_amount)? $refund_amount : 0; $item['date'] = date('Y-m-d'); } } return $this->success('操作成功', $pageData); } } return $this->render('index'); } /** * 不分页获取数据 * @return mixed|void|null */ public function actionList() { if (\Yii::$app->request->isAjax) { $params = \Yii::$app->request->get(); if (!\Yii::$app->services->validate->validate($params, [ [['user_id', 'order_status', 'page', 'limit'], 'integer'], [['user_id'], 'required'], [['order_no'], 'string'], [['keyword', 'start', 'end'], 'safe'], ])) { return $this->error(\Yii::$app->services->validate->getErrorMessage()); } $agent = AreaAgent::findOne(['user_id' => $params['user_id'], 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]); if (!$agent) { return $this->error('代理不存在'); } $where = [ ['mall_id' => $this->mall_id], ['status' => StatusEnum::ENABLED], ['pay_status' => StatusEnum::ENABLED], ['store_id' => 0], ['mch_id' => 0] ]; switch ($agent->level) { case AreaEnum::PROVINCE: $where[] = ['province' => $agent->province_id]; break; case AreaEnum::CITY: $where[] = ['city' => $agent->city_id]; break; case AreaEnum::DISTRICT: $where[] = ['area' => $agent->district_id]; break; case AreaEnum::TOWN: $where[] = ['town' => $agent->town_id]; break; case AreaEnum::COMMUNITY: $where[] = ['community' => $agent->community_id]; break; case AreaEnum::REGIONAL: $res = AreaRegional::findOne($agent->regional_id); if(empty($res->province_ids) == false){ $where[] = ['in', 'province', explode(',',$res->province_ids)]; }else{ $where[] = ['province' => -1]; //防止数据为空 } break; default: $where[] = ['id' => 0]; } if (!empty($params['keyword'])) { $user_list = User::lists(['where' => [['mall_id' => $this->mall_id], [ 'or', ['=', 'id', $params['keyword']], ['like', 'nickname', $params['keyword'] . '%', false], ['like', 'mobile', $params['keyword'] . '%', false] ]], 'select' => 'id']); $user_ids = array_column($user_list, 'id'); if (!empty($user_ids)) { $where[] = ['user_id' => $user_ids]; } else { $where[] = ['id' => 0]; } } if (!empty($params['start'])) $where[] = ['>=', 'created_at', strtotime($params['start'] . ' 00:00:00')]; if (!empty($params['end'])) $where[] = ['<=', 'created_at', strtotime($params['end'] . ' 23:59:59')]; if (!empty($params['order_status'])) { $where[] = ['order_status' => $params['order_status']]; } if (!empty($params['order_no'])) { $where[] = ['like', 'order_no', $params['order_no']]; } $ret = Order::listPage([ 'where' => $where, 'select' => 'id,order_no,user_id,pay_money,goods_price,out_trade_no,created_at,order_source,order_status', 'order' => 'id desc', 'limit' => $params['limit'] ?? 10, 'with' => ['detail' => function($query) { $query->select('order_id,goods_name,num,goods_price,price,id'); }, 'user' => function($query) { $query->select('id,nickname,avatar_url,mobile'); }] ]); if (!$ret) return $this->error(Order::getStaticError()); if (!empty($ret['list'])) { $order_ids = array_column($ret['list'], 'id'); $refund_list = OrderRefund::lists([ 'where' => [ ['order_id' => $order_ids], ['step_status' => [RefundStatusEnum::STEP_4, RefundStatusEnum::STEP_6]], ['status' => StatusEnum::ENABLED] ], 'select' => 'order_detail_id,refund_price', 'index' => 'order_detail_id', ]); foreach ($ret['list'] as &$item) { foreach ($item['detail'] as &$detail) { $detail['refund_price'] = isset($refund_list[$detail['id']])? $refund_list[$detail['id']]['refund_price'] : 0; } unset($detail); } unset($item); } $ret['order_status_map'] = OrderStatusEnum::getMap(); return $this->success('获取成功', $ret); } return $this->render('list'); } }