params = $params; } /** * 获取统计列表数据 */ public function get(GridModel $model) { // 获取当前页数 $this->currentPage = $model->getCurrentPage(); // 获取每页显示行数 $this->perPage = $model->getPerPage(); $where = []; if(!empty($this->params) && isset($this->params['market_id']) && !empty($this->params['market_id'])){ $where = ['market_id'=>$this->params['market_id']]; } $selectsEmp = 'id,user_id,position,market_id,name,tel,status'; $list = $this->getDataModel($selectsEmp, $where); return $model->makePaginator( $list['total'] ?? 0,$list['data'] ?? [] ); } public function getDataModel($selectsEmp, $params = [], $isPerPage = true) { // 获取筛选参数 如果没有时间,则用当天的数据 $startTime = $params['start_time'] ?? request()->input('start_time',''); $endTime = $params['end_time'] ?? request()->input('end_time',''); $status = request()->input('status',false); $params = [ 'status' => $status !== false ? $status : $params['status'] ?? null, 'user_id' => $params['user_id'] ?? request()->input('user_id', null), 'market_id' => $params['market_id'] ?? request()->input('market_id',null), 'name' => $params['name'] ?? request()->input('name',false), 'position' => $params['position'] ?? request()->input('position',false), ]; if(empty($startTime) && empty($endTime)){ return []; } $nowDay = date('Y-m-d', time()); if(empty($startTime)){ $startTime = '2020-07-01 00:00:00'; }else{ $startTime = $startTime . ' 00:00:00'; } if(empty($endTime)){ $endTime = $nowDay . ' 23:59:59'; }else{ $endTime = $endTime . ' 23:59:59'; } // 获取懒族员工 $employeesData = $this->getEmployeesData($selectsEmp,$params); $employeesData->orderBy('id','desc'); if($isPerPage){ $employeeList = $employeesData->paginate($this->perPage); $employeeList = $employeeList->toArray(); }else{ $list = $employeesData->get()->toArray(); $employeeList = [ 'total' => count($list), 'data' => $list ]; } if(!isset($employeeList['data']) || count($employeeList['data']) <= 0 ) { return $employeeList; } foreach ($employeeList['data'] as $key => &$employee) { // 根据员工信息,查询名下新增绑定的所有服务点 Statistics $newCsCount = CsInfoModel::where(function ($query) use ($employee) { $query->where('person_id', '=', $employee['user_id']) ->orWhere('user_id', '=', $employee['user_id']); }) ->where('created_at', '>=', strtotime($startTime)) ->where('created_at', '<=', strtotime($endTime)) ->count(); // 查询名下所有的服务点 $allCsInfos = CsInfoModel::where(function ($query) use ($employee) { $query->where('person_id', '=', $employee['user_id']) ->orWhere('user_id', '=', $employee['user_id']); }) ->get() ->toArray(); // 新增绑定用户数 Statistics $newBindUserCount = UserRelationBindModel::where('bind_type', '=', 1) ->whereIn('source_id', array_values(array_column($allCsInfos, 'admin_user_id'))) ->where('created_at', '>=', strtotime($startTime)) ->where('created_at', '<=', strtotime($endTime)) ->count(); // 查询名下所有服务点的所有用户 $allCsBindUsers = UserRelationBindModel::where('bind_type', '=', 1) ->whereIn('source_id', array_values(array_column($allCsInfos, 'admin_user_id'))) ->get() ->toArray(); // 平台新增用户数 Statistics $platNewUsers = OrderMainModel::select('user_id') ->where('type', '=', OrderMainModel::ORDER_TYPE_ONLINE) ->whereIn('state', OrderMainModel::ORDER_STATE_FINISH) ->whereIn('user_id', array_values(array_column($allCsBindUsers, 'user_id'))) ->groupBy('user_id') ->havingRaw('MIN(created_at)>='.strtotime($startTime).' AND MIN(created_at)<='.strtotime($endTime).'') ->get() ->toArray(); $platNewUserCount = count($platNewUsers); // 所有用户产生的线上订单数 Statistics $totalOrdersCount = OrderMainModel::where('type', '=', OrderMainModel::ORDER_TYPE_ONLINE) ->whereIn('state', OrderMainModel::ORDER_STATE_FINISH) ->whereIn('user_id', array_values(array_column($allCsBindUsers, 'user_id'))) ->where('created_at', '>=', strtotime($startTime)) ->where('created_at', '<=', strtotime($endTime)) ->count(); // 平台新增用户产生的线上订单数 Statistics $platNewUserOrdersCount =OrderMainModel::where('type', '=', OrderMainModel::ORDER_TYPE_ONLINE) ->whereIn('state', OrderMainModel::ORDER_STATE_FINISH) ->whereIn('user_id', array_values(array_column($platNewUsers, 'user_id'))) ->where('created_at', '>=', strtotime($startTime)) ->where('created_at', '<=', strtotime($endTime)) ->count(); $employee['new_cs_count'] = $newCsCount; $employee['new_bind_user_count'] = $newBindUserCount; $employee['plat_new_user_count'] = $platNewUserCount; $employee['bound_order_online_count'] = $totalOrdersCount; $employee['plat_new_user_order_online_count'] = $platNewUserOrdersCount; } return $employeeList; } /** * 获取懒族员工 model */ public function getEmployeesData($selects, $params = []) { $departments = config('role.department_value'); $positions = explode(',', $departments[9]); $model = Model::select(DB::raw($selects)); if(isset($params['status']) && is_numeric($params['status'])){ $model->where('status',$params['status']); } if(isset($params['user_id']) && !empty($params['user_id'])){ $userId = explode(',',$params['user_id']); $model->whereIn('user_id', $userId); } if(isset($params['name']) && $params['name']){ $model->where('name','like','%'.$params['name'].'%'); } if(isset($params['market_id']) && is_numeric($params['market_id'])){ $model->where('market_id', $params['market_id']); } if(!(isset($params['position']) && $params['position'] == 0)){ // $model->whereJsonContains('position', $positions); $model->where(function ($query) use ($positions) { foreach($positions as $key => $value){ if($key == 0){ $query->whereJsonContains('position', [$value]); }else{ $query->orWhere(function ($query) use($value){ $query->whereJsonContains('position', $value); }); } } }); } return $model; } }