AdminUsers.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <?php
  2. namespace App\DataApiNew\Models;
  3. use Illuminate\Database\Eloquent\SoftDeletes;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Dcat\Admin\Traits\HasDateTimeFormatter;
  6. use Spatie\Permission\Traits\HasRoles;
  7. use Illuminate\Foundation\Auth\User as Authenticatable;
  8. use Laravel\Sanctum\HasApiTokens;
  9. use Laravel\Sanctum\NewAccessToken;
  10. use Illuminate\Support\Str;
  11. // 无表注释
  12. class AdminUsers extends Authenticatable
  13. {
  14. use SoftDeletes, HasDateTimeFormatter, HasRoles, HasApiTokens;
  15. protected $table = 'admin_users';
  16. protected $dateFormat = 'Y-m-d H:i:s';
  17. protected $guard_name = 'web';
  18. const ADMINID = 1; // 系统管理员ID
  19. // 自定义生成token方法
  20. public function createToken(string $name, array $abilities = ['*'])
  21. {
  22. $token = $this->tokens()->create([
  23. 'name' => $name,
  24. 'token' => hash('sha256', $plainTextToken = Str::random(40)),
  25. 'abilities' => $abilities,
  26. ]);
  27. return new NewAccessToken($token, $plainTextToken);
  28. }
  29. // 表字段
  30. protected $fillable = [
  31. 'id',
  32. 'user_id', // 用户id
  33. 'username', // 用户名
  34. 'password', // 密码
  35. 'name', // 名称
  36. 'avatar', // 头像
  37. 'remember_token',
  38. 'created_at',
  39. 'updated_at',
  40. 'real_password', // 真实密码
  41. 'mobile', // 联系电话
  42. 'address', // 地址
  43. 'yj', // 剩余佣金
  44. 'yj_p', // 佣金比例
  45. 'al_yj', // 已提现佣金
  46. 'share_code', // 邀请码
  47. 'role_ids', // 角色
  48. 'agent_level', // 代理等级:0合伙人 1代理
  49. 'kefu_type', // 客服类型 1:链接 2:图片
  50. 'kefu_url', // 客服链接
  51. 'kefu_image', // 客服图片
  52. 'small_shop_image', // 小店头像图片
  53. 'contact_number', // 联系电话
  54. 'contact_qrcode', // 联系二维码
  55. 'jkc_user_id', // 集客仓用户id
  56. 'yj_type', // 分成类型 1:比例 2:金额
  57. 'yj_a',
  58. 'default_yj_p', // 合伙人默认抽成比例
  59. 'remark', // 备注
  60. 'deleted_at', // 删除时间
  61. 'is_follow', // 下级分销是否强制关注
  62. 'is_package_sms', // 是否发送套餐短信
  63. 'is_real', // 是否实名
  64. 'id_name', // 身份证姓名
  65. 'id_card', // 身份证号码
  66. 'id_card_address', // 身份证家庭地址
  67. 'id_card_front', // 身份证正面
  68. 'id_card_back', // 身份证反面
  69. 'agent_operate', // 合伙人运营
  70. 'agent_kefu', // 合伙人客服
  71. 'agent_anchor', // 合伙人主播
  72. 'gzh_open_id', // 公众号open_id
  73. 'xcx_open_id', // 小程序open_id
  74. 'unionid', // unionid
  75. 'is_api', // 是否接口提单
  76. 'status', // 状态 0正常 1注销
  77. 'default_yj_type', // 合伙人默认抽成类型 0不启用 1比例 2金额
  78. 'default_yj_a',
  79. 'package_yj_status', // 套餐分成开关 0关 1开(默认)
  80. 'show_first_charge', // 显示首冲信息开关
  81. 'member_level_id', // 头衔id
  82. 'royalty_yj',
  83. 'is_put_order', // 是否允许下单 0禁止下单 1可以下单
  84. 'iot_yj_type', // 设备抽成类型 1比例 2金额
  85. 'iot_yj_p', // 设备抽成比例
  86. 'iot_yj_a',
  87. 'default_iot_yj_type', // 默认设备抽成类型 1比例 2金额
  88. 'default_iot_yj_p', // 默认设备抽成比例
  89. 'default_iot_yj_a',
  90. 'kd_yj_type', // 宽带抽成类型 1比例 2金额
  91. 'kd_yj_p', // 宽带抽成比例
  92. 'kd_yj_a',
  93. 'default_kd_yj_type', // 默认宽带抽成类型 1比例 2金额
  94. 'default_kd_yj_p', // 默认宽带抽成比例
  95. 'default_kd_yj_a',
  96. 'is_snapshotuser', // 是否快照授权 0否 1是
  97. 'level_path', // 上下级关系
  98. 'parent_id',// 上级用户id
  99. 'last_system_msg_id', // 最后系统消息id
  100. ];
  101. // 查询字段
  102. public static $selectFields = [
  103. 'id',
  104. 'user_id', // 用户id
  105. 'username', // 用户名
  106. 'password', // 密码
  107. 'real_password', // 真实密码
  108. // 'name', // 名称
  109. 'avatar', // 头像
  110. // 'remember_token',
  111. 'created_at',
  112. // 'updated_at',
  113. 'mobile', // 联系电话
  114. 'address', // 地址
  115. 'yj', // 剩余佣金
  116. // 'al_yj', // 已提现佣金
  117. // 'is_agent', // 是否是代理
  118. 'share_code', // 邀请码
  119. // 'role_ids', // 角色
  120. 'agent_level', // 代理等级:1一级 2二级 3三级 4四级
  121. // 'kefu_type', // 客服类型 1:链接 2:图片
  122. // 'kefu_url', // 客服链接
  123. // 'kefu_image', // 客服图片
  124. // 'small_shop_image', // 小店头像图片
  125. // 'contact_number', // 联系电话
  126. // 'contact_qrcode', // 联系二维码
  127. // 'jkc_user_id', // 集客仓用户id
  128. 'yj_type', // 分成类型 1:比例 2:金额
  129. 'yj_a',
  130. 'yj_p', // 佣金比例
  131. 'iot_yj_type', // 设备抽成类型 1比例 2金额
  132. 'iot_yj_p', // 设备抽成比例
  133. 'kd_yj_type', // 宽带抽成类型 1比例 2金额
  134. 'kd_yj_p', // 宽带抽成比例
  135. 'kd_yj_a',
  136. 'default_yj_type', // 合伙人默认抽成类型 0不启用 1比例 2金额
  137. 'default_yj_a',
  138. 'default_yj_p', // 合伙人默认抽成比例
  139. 'default_iot_yj_type', // 默认设备抽成类型 1比例 2金额
  140. 'default_iot_yj_p', // 默认设备抽成比例
  141. 'default_kd_yj_type', // 默认宽带抽成类型 1比例 2金额
  142. 'default_kd_yj_p', // 默认宽带抽成比例
  143. 'default_kd_yj_a',
  144. // 'remark', // 备注
  145. // 'deleted_at', // 删除时间
  146. // 'is_follow', // 下级分销是否强制关注
  147. // 'is_package_sms', // 是否发送套餐短信
  148. 'is_real', // 是否实名
  149. // 'id_name', // 身份证姓名
  150. // 'id_card', // 身份证号码
  151. // 'id_card_address', // 身份证家庭地址
  152. // 'id_card_front', // 身份证正面
  153. // 'id_card_back', // 身份证反面
  154. // 'agent_operate', // 合伙人运营
  155. // 'agent_kefu', // 合伙人客服
  156. // 'agent_anchor', // 合伙人主播
  157. // 'gzh_open_id', // 公众号open_id
  158. // 'xcx_open_id', // 小程序open_id
  159. // 'unionid', // unionid
  160. // 'is_api', // 是否接口提单
  161. 'status', // 状态
  162. // 'package_yj_status', // 套餐分成开关 0关 1开(默认)
  163. // 'show_first_charge', // 显示首冲信息开关
  164. 'member_level_id', // 头衔id
  165. 'level_path', // 上下级关系
  166. // 'royalty_yj',
  167. // 'is_put_order', // 是否允许下单 0禁止下单 1可以下单
  168. // 'is_snapshotuser', // 是否快照授权 0否 1是
  169. 'parent_id',// 上级用户id
  170. ];
  171. // 默认佣金配置
  172. public static $defaultYjConfig = [
  173. 'default_yj_type' => 1, // 合伙人默认抽成类型 0不启用 1比例 2金额
  174. 'default_yj_a' => 5, // 合伙人默认抽成金额
  175. 'default_yj_p' => 5, // 合伙人默认抽成比例
  176. 'default_iot_yj_type' => 1, // 默认设备抽成类型 1比例 2金额
  177. 'default_iot_yj_p' => 5, // 默认设备抽成比例
  178. 'default_kd_yj_type' => 1, // 默认宽带抽成类型 1比例 2金额
  179. 'default_kd_yj_p' => 5, // 默认宽带抽成比例
  180. 'default_kd_yj_a' => 5, // 默认宽带抽成金额
  181. ];
  182. // 是否实名
  183. const IS_REAL_YES = 1; // 是
  184. const IS_REAL_NO = 0; // 否
  185. public static $isReal = [
  186. self::IS_REAL_YES => '是',
  187. self::IS_REAL_NO => '否',
  188. ];
  189. // 不发送短信的手机号
  190. public static $notSmsMobile = [
  191. '15244141832',
  192. '13235388225',
  193. ];
  194. // 是否为超管
  195. public static function isAdmin($user_id)
  196. {
  197. $adminList = [1];
  198. return in_array($user_id, $adminList);
  199. }
  200. // 头衔
  201. public function member_level()
  202. {
  203. return $this->belongsTo(AdminUsersMemberLevel::class, 'member_level_id')->select(['id', 'name', 'tag', 'royalty_yj']);
  204. }
  205. // 用户套餐
  206. public function agent_package()
  207. {
  208. return $this->hasMany(AgentPackage::class, 'user_id', 'id')->select(['id','user_id','package_id','yj_type','yj_a','yj_p']);
  209. }
  210. // 获取全部上级,包括自己
  211. public static function getParents($id)
  212. {
  213. $level_path = self::where('id', $id)->value('level_path');
  214. preg_match_all('/\d+/', $level_path, $id_list);
  215. return $id_list[0];
  216. }
  217. // 获取全部下级,包括自己
  218. public static function getChildrens($id)
  219. {
  220. $level_path = self::where('level_path', 'like', '%\['.$id.'\]%')->orderByDesc('agent_level')->value('level_path');
  221. preg_match_all('/\d+/', $level_path, $id_list);
  222. $id_list = $id_list[0];
  223. $index = array_search($id, $id_list); // 找到自己的索引位置
  224. if ($index === false) {
  225. return [];
  226. }
  227. $id_list = array_slice($id_list, $index);
  228. return $id_list ?: [];
  229. }
  230. // 获取全部下级,不包括自己
  231. public static function getChildrensNotSelf($id)
  232. {
  233. $level_path = self::where('level_path', 'like', '%\['.$id.'\]%')->orderByDesc('agent_level')->value('level_path');
  234. preg_match_all('/\d+/', $level_path, $id_list);
  235. $id_list = $id_list[0];
  236. $index = array_search($id, $id_list); // 找到自己的索引位置
  237. if ($index === false) {
  238. return [];
  239. }
  240. $id_list = array_slice($id_list, $index + 1);
  241. return $id_list ?: [];
  242. }
  243. // 获取直属下级
  244. public static function getDirectChildrens($id)
  245. {
  246. $id_list = self::where('parent_id', $id)->pluck('id');
  247. return $id_list ?: [];
  248. }
  249. }