You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

User.php 8.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. <?php
  2. namespace app\model\user;
  3. use app\model\agent\AgentLevel;
  4. use app\model\order\StoreOrder;
  5. use app\model\user\level\SystemUserLevel;
  6. use app\model\user\group\UserGroup;
  7. use app\model\user\label\UserLabel;
  8. use app\model\user\label\UserLabelRelation;
  9. use crmeb\basic\BaseModel;
  10. use crmeb\traits\ModelTrait;
  11. use think\Model;
  12. use think\model\concern\SoftDelete;
  13. /**
  14. * Class User
  15. * @package app\model\user
  16. */
  17. class User extends BaseModel
  18. {
  19. use ModelTrait;
  20. use SoftDelete;
  21. /**
  22. * @var string
  23. */
  24. protected $pk = 'uid';
  25. protected $name = 'user';
  26. protected $insert = ['add_time', 'add_ip', 'last_time', 'last_ip'];
  27. protected $hidden = [
  28. 'add_ip', 'account', 'clean_time', 'last_ip', 'pwd'
  29. ];
  30. protected $deleteTime = 'delete_time';
  31. /**
  32. * 自动转类型
  33. * @var string[]
  34. */
  35. protected $type = [
  36. 'birthday' => 'int'
  37. ];
  38. protected $updateTime = false;
  39. /**
  40. * 更新用户事件
  41. * @param Model $user
  42. */
  43. public static function onAfterUpdate($user)
  44. {
  45. event('user.update');
  46. }
  47. protected function setAddTimeAttr($value)
  48. {
  49. return time();
  50. }
  51. protected function setAddIpAttr($value)
  52. {
  53. return app('request')->ip();
  54. }
  55. protected function setLastTimeAttr($value)
  56. {
  57. return time();
  58. }
  59. protected function setLastIpAttr($value)
  60. {
  61. return app('request')->ip();
  62. }
  63. /**
  64. * 链接会员登陆设置表
  65. * @return \think\model\relation\HasOne
  66. */
  67. public function systemUserLevel()
  68. {
  69. return $this->hasOne(SystemUserLevel::class, 'id', 'level');
  70. }
  71. /**
  72. * 关联用户分组
  73. * @return \think\model\relation\HasOne
  74. */
  75. public function userGroup()
  76. {
  77. return $this->hasOne(UserGroup::class, 'id', 'group_id');
  78. }
  79. /**
  80. * 关联自己
  81. * @return \think\model\relation\HasOne
  82. */
  83. public function spreadUser()
  84. {
  85. return $this->hasOne(self::class, 'uid', 'spread_uid');
  86. }
  87. /**
  88. * 关联自己
  89. * @return \think\model\relation\HasOne
  90. */
  91. public function spreadCount()
  92. {
  93. return $this->hasMany(User::class, 'spread_uid', 'uid');
  94. }
  95. /**
  96. * 关联用户标签关系
  97. * @return \think\model\relation\HasMany
  98. */
  99. public function LabelRelation()
  100. {
  101. return $this->hasMany(UserLabelRelation::class, 'uid', 'uid');
  102. }
  103. /**
  104. * 关联用户标签
  105. * @return \think\model\relation\HasManyThrough
  106. */
  107. public function label()
  108. {
  109. return $this->hasManyThrough(UserLabel::class, UserLabelRelation::class, 'uid', 'id', 'uid', 'label_id');
  110. }
  111. /**
  112. * 关联用户地址
  113. * @return \think\model\relation\HasMany
  114. */
  115. public function address()
  116. {
  117. return $this->hasMany(UserAddress::class, 'uid', 'uid');
  118. }
  119. /**
  120. * 关联提现
  121. * @return \think\model\relation\HasMany
  122. */
  123. public function extract()
  124. {
  125. return $this->hasMany(UserExtract::class, 'uid', 'uid');
  126. }
  127. /**
  128. * 关联订单
  129. * @return User|\think\model\relation\HasMany
  130. */
  131. public function order()
  132. {
  133. return $this->hasMany(StoreOrder::class, 'uid', 'uid');
  134. }
  135. /**
  136. * 关联分销等级
  137. * @return \think\model\relation\HasOne
  138. */
  139. public function agentLevel()
  140. {
  141. return $this->hasOne(AgentLevel::class, 'id', 'agent_level')->where('is_del', 0)->where('status', 1);
  142. }
  143. /**
  144. * 关联积分数据
  145. * @return \think\model\relation\HasMany
  146. */
  147. public function bill()
  148. {
  149. return $this->hasMany(UserBill::class, 'uid', 'uid');
  150. }
  151. /**
  152. * 关联佣金数据
  153. * @return \think\model\relation\HasMany
  154. */
  155. public function brokerage()
  156. {
  157. return $this->hasMany(UserBrokerage::class, 'uid', 'uid');
  158. }
  159. /**
  160. * 关联余额数据
  161. * @return \think\model\relation\HasMany
  162. */
  163. public function money()
  164. {
  165. return $this->hasMany(UserMoney::class, 'uid', 'uid');
  166. }
  167. /**
  168. * 用户uid
  169. * @param Model $query
  170. * @param $value
  171. */
  172. public function searchUidAttr($query, $value)
  173. {
  174. if (is_array($value))
  175. $query->whereIn('uid', $value);
  176. else
  177. $query->where('uid', $value);
  178. }
  179. /**
  180. * 账号搜索器
  181. * @param Model $query
  182. * @param $value
  183. */
  184. public function searchAccountAttr($query, $value)
  185. {
  186. $query->where('account', $value);
  187. }
  188. /**
  189. * 密码搜索器
  190. * @param Model $query
  191. * @param $value
  192. */
  193. public function searchPwdAttr($query, $value)
  194. {
  195. $query->where('pwd', $value);
  196. }
  197. /**
  198. * uid范围查询搜索器
  199. * @param Model $query
  200. * @param $value
  201. */
  202. public function searchUidsAttr($query, $value)
  203. {
  204. $query->whereIn('uid', $value);
  205. }
  206. /**
  207. * 模糊条件搜索器
  208. * @param Model $query
  209. * @param $value
  210. */
  211. public function searchStoreLikeAttr($query, $value)
  212. {
  213. $query->where('uid|phone', 'LIKE', "%$value%");
  214. }
  215. /**
  216. * 模糊条件搜索器
  217. * @param Model $query
  218. * @param $value
  219. */
  220. public function searchLikeAttr($query, $value)
  221. {
  222. $query->where('account|nickname|phone|real_name|uid', 'LIKE', "%$value%");
  223. }
  224. /**
  225. * 手机号搜索器
  226. * @param Model $query
  227. * @param $value
  228. */
  229. public function searchPhoneAttr($query, $value)
  230. {
  231. if (is_array($value)) {
  232. $query->whereIn('phone', $value);
  233. } else {
  234. $query->where('phone', $value);
  235. }
  236. }
  237. /**
  238. * 分组搜索器
  239. * @param Model $query
  240. * @param $value
  241. */
  242. public function searchGroupIdAttr($query, $value)
  243. {
  244. $query->where('group_id', $value);
  245. }
  246. /**
  247. * 是否推广人搜索器
  248. * @param Model $query
  249. * @param $value
  250. */
  251. public function searchIsPromoterAttr($query, $value)
  252. {
  253. $query->where('is_promoter', $value);
  254. }
  255. /**
  256. * 状态搜索器
  257. * @param Model $query
  258. * @param $value
  259. */
  260. public function searchStatusAttr($query, $value)
  261. {
  262. $query->where('status', $value);
  263. }
  264. /**
  265. * 会员等级搜索器
  266. * @param Model $query
  267. * @param $value
  268. */
  269. public function searchLevelAttr($query, $value)
  270. {
  271. $query->where('level', $value);
  272. }
  273. /**
  274. * 推广人uid搜索器
  275. * @param Model $query
  276. * @param $value
  277. */
  278. public function searchSpreadUidAttr($query, $value)
  279. {
  280. $query->where('spread_uid', $value);
  281. }
  282. /**
  283. * 推广人uid不等于搜索器
  284. * @param Model $query
  285. * @param $value
  286. */
  287. public function searchNotSpreadUidAttr($query, $value)
  288. {
  289. $query->where('spread_uid', '<>', $value);
  290. }
  291. /**
  292. * 推广人时间搜索器
  293. * @param Model $query
  294. * @param $value
  295. */
  296. public function searchSpreadTimeAttr($query, $value)
  297. {
  298. if ($value) {
  299. if (is_array($value)) {
  300. if (count($value) == 2) $query->whereTime('spread_time', $value[0], $value[1]);
  301. } else {
  302. $query->whereTime('spread_time', $value);
  303. }
  304. }
  305. }
  306. /**
  307. * 用户类型搜索器
  308. * @param Model $query
  309. * @param $value
  310. */
  311. public function searchUserTypeAttr($query, $value)
  312. {
  313. if ($value != '') $query->where('user_type', $value);
  314. }
  315. /**
  316. * 购买次数搜索器
  317. * @param Model $query
  318. * @param $value
  319. */
  320. public function searchPayCountAttr($query, $value)
  321. {
  322. if ($value !== '') {
  323. if ($value == -1) {
  324. $query->where('pay_count', '>', 0);
  325. } else {
  326. $query->where('pay_count', $value);
  327. }
  328. }
  329. }
  330. /**
  331. * 用户推广资格
  332. * @param Model $query
  333. * @param $value
  334. */
  335. public function searchSpreadOpenAttr($query, $value)
  336. {
  337. if ($value != '') $query->where('spread_open', $value);
  338. }
  339. public function searchNicknameAttr($query, $value)
  340. {
  341. $query->where('nickname', "like", "%" . $value . "%");
  342. }
  343. /**
  344. * bar_code搜索器
  345. * @param Model $query
  346. * @param $value
  347. */
  348. public function searchBarCodeAttr($query, $value)
  349. {
  350. if ($value != '') $query->where('bar_code', $value);
  351. }
  352. }