<?php namespace App\Model; use App\Http\Services\AdminUserService; use App\Http\Services\DepartmentService; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Redis; class IntracodeModel extends Model { protected $table = 'lie_intracode'; protected $primaryKey = 'code_id'; public function userInfo() { return $this->hasOne(UserInfoModel::class, 'admin_id', 'userId'); } //默认不包含离职 public function getEncode($includeResigned = false) { $redis = new RedisModel(); $codeList = json_decode($redis->get('EncodedList_supplier_' . $includeResigned), true); if (!$codeList) { $query = $this->where('admin_id', '>', 0)->join('user_info', 'lie_intracode.admin_id', '=', 'user_info.userId'); if (!$includeResigned) { $query->where('user_info.status', '!=', 4); } $codeList = $query->select('code_id', 'admin_id', 'name', 'email')->get(); if ($codeList) { $codeList = $codeList->toArray(); foreach ($codeList as $k => &$v) { if (empty($v['name'])) { $v['name'] = $v['email']; } } $redis->set('EncodedList_supplier_' . $includeResigned, json_encode($codeList)); $redis->expire('EncodedList_supplier_' . $includeResigned, 60);//缓存1分钟 } } return $codeList; } //包含离职的 public function getAllEncode() { $redis = new RedisModel(); $codeList = json_decode($redis->get('EncodedList_all_supplier'), true); if (!$codeList) { $codeList = $this->where('admin_id', '>', 0)->join('user_info', 'lie_intracode.admin_id', '=', 'user_info.userId') ->select('code_id', 'admin_id', 'name', 'email')->get(); if ($codeList) { $codeList = $codeList->toArray(); foreach ($codeList as $k => &$v) { if (empty($v['name'])) { $v['name'] = $v['email']; } } $redis->set('EncodedList_all_supplier', json_encode($codeList)); $redis->expire('EncodedList_all_supplier', 60);//缓存1分钟 } } return $codeList; } //获取简单的内部用户数据 //默认不包含离职的 public function getSampleEncode($includeResigned = false) { $codeList = $this->getEncode($includeResigned); $result = []; foreach ($codeList as $code) { $result[$code['code_id']] = $code['name'] . '(' . $code['code_id'] . ')'; } return $result; } //根据用户内部编码获取 public function getSampleEncodeByCodeIds($codeIds = []) { $codeList = $this->getEncode(true); $result = []; foreach ($codeList as $code) { if (in_array($code['code_id'], $codeIds)) { $result[$code['code_id']] = $code['name'] . '(' . $code['code_id'] . ')'; } continue; } return $result; } //获取简单的内部用户数据 //默认不包含离职的 public function getSampleName($includeResigned = false) { $codeList = $this->getEncode($includeResigned); $result = []; foreach ($codeList as $code) { $result[$code['code_id']] = $code['name']; } return $result; } //获取简单的内部用户数据(包含离职) public function getAllSampleEncode() { $codeList = $this->getAllEncode(); $result = []; foreach ($codeList as $code) { $result[$code['code_id']] = $code['name'] . '(' . $code['code_id'] . ')'; } return $result; } //获取采购员和对应的编码 public function getChannelUsersEncode($includeResign = true) { $departmentService = new DepartmentService(); //市场部 $usersMarket = $departmentService->getUserByDepartmentId(4); //运营部 $usersOperation = $departmentService->getUserByDepartmentId(9); //采购部 $userChannel = $departmentService->getUserByDepartmentId(8); $users = array_merge(array_merge($usersMarket, $usersOperation), $userChannel); $userIds = array_column($users, 'userId'); $users = $this->getEncodeByUserIds($userIds, $includeResign); $result = []; foreach ($users as $code) { $result[$code['code_id']] = $code['name'] . '(' . $code['code_id'] . ')'; } return $result; } //获取admin_id对应user_code的用户数据 public function getAdminUserAndCode() { $codeList = $this->getEncode(); $result = []; foreach ($codeList as $code) { $result[$code['admin_id']] = $code['name'] . '(' . $code['code_id'] . ')'; } return $result; } public function getCodeIdByUserName($userName) { $codeId = $this->where('admin_id', '>', 0)->join('user_info', 'lie_intracode.admin_id', '=', 'user_info.userId') ->where('user_info.name', $userName) ->value('code_id'); return $codeId; } public function getEncodeByUserIds($userIds = [], $includeResign = true) { $query = $this->where('admin_id', '>', 0)->join('user_info', 'lie_intracode.admin_id', '=', 'user_info.userId') ->whereIn('user_info.userId', $userIds) ->select('code_id', 'admin_id', 'name', 'email', 'mobile'); $code = $includeResign ? $query->get() : $query->where('user_info.status', '!=', 4)->get(); if ($code) { $code = $code->toArray(); } return $code; } //获取渠道开发那边的人员(还是会汇总所有的内部编码的,只是把运营他们那边的人员优先级提高一些) public function getPurchaseUserCodes() { $adminService = new AdminUserService(); $users = $adminService->getPurchaseUsers(); $codeIds = array_column($users, 'code_id'); $codes = $this->getSampleEncode(); $userCodes = []; foreach ($users as $user) { $userCodes[$user['code_id']] = $user['name']; } $temp = []; foreach ($codes as $code => $name) { if (in_array($code, $codeIds)) { unset($codes[$code]); $temp[$code] = $name; } } $userCodes = $temp + $codes; return $userCodes; } //获取内部编码相关信息 public function getEncodedUserByEncoded($encodedList = []) { $encodedUsers = []; $codes = $this->select('code_id', 'admin_id') ->whereIn('code_id', $encodedList) ->get(); if (empty($codes)) { return []; } $codes = $codes->toArray(); $adminIds = array_column($codes, 'admin_id'); $userModel = new UserInfoModel(); $users = $userModel->whereIn('userId', $adminIds)->pluck('name', 'userId'); foreach ($codes as $key => $code) { $encodedUsers[$code['code_id']] = array_get($users, $code['admin_id']); } return $encodedUsers; } }