tokens()->create([ 'name' => $name, 'token' => hash('sha256', $plainTextToken = Str::random(40)), 'abilities' => $abilities, ]); return new NewAccessToken($token, $plainTextToken); } // 表字段 protected $fillable = [ 'id', 'user_id', // 用户id 'username', // 用户名 'password', // 密码 'name', // 名称 'avatar', // 头像 'remember_token', 'created_at', 'updated_at', 'real_password', // 真实密码 'mobile', // 联系电话 'address', // 地址 'yj', // 剩余佣金 'yj_p', // 佣金比例 'al_yj', // 已提现佣金 'share_code', // 邀请码 'role_ids', // 角色 'agent_level', // 代理等级:0合伙人 1代理 'kefu_type', // 客服类型 1:链接 2:图片 'kefu_url', // 客服链接 'kefu_image', // 客服图片 'small_shop_image', // 小店头像图片 'contact_number', // 联系电话 'contact_qrcode', // 联系二维码 'jkc_user_id', // 集客仓用户id 'yj_type', // 分成类型 1:比例 2:金额 'yj_a', 'default_yj_p', // 合伙人默认抽成比例 'remark', // 备注 'deleted_at', // 删除时间 'is_follow', // 下级分销是否强制关注 'is_package_sms', // 是否发送套餐短信 'is_real', // 是否实名 'id_name', // 身份证姓名 'id_card', // 身份证号码 'id_card_address', // 身份证家庭地址 'id_card_front', // 身份证正面 'id_card_back', // 身份证反面 'agent_operate', // 合伙人运营 'agent_kefu', // 合伙人客服 'agent_anchor', // 合伙人主播 'gzh_open_id', // 公众号open_id 'xcx_open_id', // 小程序open_id 'unionid', // unionid 'is_api', // 是否接口提单 'status', // 状态 0正常 1注销 'default_yj_type', // 合伙人默认抽成类型 0不启用 1比例 2金额 'default_yj_a', 'package_yj_status', // 套餐分成开关 0关 1开(默认) 'show_first_charge', // 显示首冲信息开关 'member_level_id', // 头衔id 'royalty_yj', 'is_put_order', // 是否允许下单 0禁止下单 1可以下单 'iot_yj_type', // 设备抽成类型 1比例 2金额 'iot_yj_p', // 设备抽成比例 'iot_yj_a', 'default_iot_yj_type', // 默认设备抽成类型 1比例 2金额 'default_iot_yj_p', // 默认设备抽成比例 'default_iot_yj_a', 'kd_yj_type', // 宽带抽成类型 1比例 2金额 'kd_yj_p', // 宽带抽成比例 'kd_yj_a', 'default_kd_yj_type', // 默认宽带抽成类型 1比例 2金额 'default_kd_yj_p', // 默认宽带抽成比例 'default_kd_yj_a', 'is_snapshotuser', // 是否快照授权 0否 1是 'level_path', // 上下级关系 'parent_id',// 上级用户id 'last_system_msg_id', // 最后系统消息id ]; // 查询字段 public static $selectFields = [ 'id', 'user_id', // 用户id 'username', // 用户名 'password', // 密码 'real_password', // 真实密码 // 'name', // 名称 'avatar', // 头像 // 'remember_token', 'created_at', // 'updated_at', 'mobile', // 联系电话 'address', // 地址 'yj', // 剩余佣金 // 'al_yj', // 已提现佣金 // 'is_agent', // 是否是代理 'share_code', // 邀请码 // 'role_ids', // 角色 'agent_level', // 代理等级:1一级 2二级 3三级 4四级 // 'kefu_type', // 客服类型 1:链接 2:图片 // 'kefu_url', // 客服链接 // 'kefu_image', // 客服图片 // 'small_shop_image', // 小店头像图片 // 'contact_number', // 联系电话 // 'contact_qrcode', // 联系二维码 // 'jkc_user_id', // 集客仓用户id 'yj_type', // 分成类型 1:比例 2:金额 'yj_a', 'yj_p', // 佣金比例 'iot_yj_type', // 设备抽成类型 1比例 2金额 'iot_yj_p', // 设备抽成比例 'kd_yj_type', // 宽带抽成类型 1比例 2金额 'kd_yj_p', // 宽带抽成比例 'kd_yj_a', 'default_yj_type', // 合伙人默认抽成类型 0不启用 1比例 2金额 'default_yj_a', 'default_yj_p', // 合伙人默认抽成比例 'default_iot_yj_type', // 默认设备抽成类型 1比例 2金额 'default_iot_yj_p', // 默认设备抽成比例 'default_kd_yj_type', // 默认宽带抽成类型 1比例 2金额 'default_kd_yj_p', // 默认宽带抽成比例 'default_kd_yj_a', // 'remark', // 备注 // 'deleted_at', // 删除时间 // 'is_follow', // 下级分销是否强制关注 // 'is_package_sms', // 是否发送套餐短信 'is_real', // 是否实名 // 'id_name', // 身份证姓名 // 'id_card', // 身份证号码 // 'id_card_address', // 身份证家庭地址 // 'id_card_front', // 身份证正面 // 'id_card_back', // 身份证反面 // 'agent_operate', // 合伙人运营 // 'agent_kefu', // 合伙人客服 // 'agent_anchor', // 合伙人主播 // 'gzh_open_id', // 公众号open_id // 'xcx_open_id', // 小程序open_id // 'unionid', // unionid // 'is_api', // 是否接口提单 'status', // 状态 // 'package_yj_status', // 套餐分成开关 0关 1开(默认) // 'show_first_charge', // 显示首冲信息开关 'member_level_id', // 头衔id 'level_path', // 上下级关系 // 'royalty_yj', // 'is_put_order', // 是否允许下单 0禁止下单 1可以下单 // 'is_snapshotuser', // 是否快照授权 0否 1是 'parent_id',// 上级用户id ]; // 默认佣金配置 public static $defaultYjConfig = [ 'default_yj_type' => 1, // 合伙人默认抽成类型 0不启用 1比例 2金额 'default_yj_a' => 5, // 合伙人默认抽成金额 'default_yj_p' => 5, // 合伙人默认抽成比例 'default_iot_yj_type' => 1, // 默认设备抽成类型 1比例 2金额 'default_iot_yj_p' => 5, // 默认设备抽成比例 'default_kd_yj_type' => 1, // 默认宽带抽成类型 1比例 2金额 'default_kd_yj_p' => 5, // 默认宽带抽成比例 'default_kd_yj_a' => 5, // 默认宽带抽成金额 ]; // 是否实名 const IS_REAL_YES = 1; // 是 const IS_REAL_NO = 0; // 否 public static $isReal = [ self::IS_REAL_YES => '是', self::IS_REAL_NO => '否', ]; // 不发送短信的手机号 public static $notSmsMobile = [ '15244141832', '13235388225', ]; // 是否为超管 public static function isAdmin($user_id) { $adminList = [1]; return in_array($user_id, $adminList); } // 头衔 public function member_level() { return $this->belongsTo(AdminUsersMemberLevel::class, 'member_level_id')->select(['id', 'name', 'tag', 'royalty_yj']); } // 用户套餐 public function agent_package() { return $this->hasMany(AgentPackage::class, 'user_id', 'id')->select(['id','user_id','package_id','yj_type','yj_a','yj_p']); } // 获取全部上级,包括自己 public static function getParents($id) { $level_path = self::where('id', $id)->value('level_path'); preg_match_all('/\d+/', $level_path, $id_list); return $id_list[0]; } // 获取全部下级,包括自己 public static function getChildrens($id) { $level_path = self::where('level_path', 'like', '%\['.$id.'\]%')->orderByDesc('agent_level')->value('level_path'); preg_match_all('/\d+/', $level_path, $id_list); $id_list = $id_list[0]; $index = array_search($id, $id_list); // 找到自己的索引位置 if ($index === false) { return []; } $id_list = array_slice($id_list, $index); return $id_list ?: []; } // 获取全部下级,不包括自己 public static function getChildrensNotSelf($id) { $level_path = self::where('level_path', 'like', '%\['.$id.'\]%')->orderByDesc('agent_level')->value('level_path'); preg_match_all('/\d+/', $level_path, $id_list); $id_list = $id_list[0]; $index = array_search($id, $id_list); // 找到自己的索引位置 if ($index === false) { return []; } $id_list = array_slice($id_list, $index + 1); return $id_list ?: []; } // 获取直属下级 public static function getDirectChildrens($id) { $id_list = self::where('parent_id', $id)->pluck('id'); return $id_list ?: []; } }