User.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\common\model\user;
  12. use app\common\model\BaseModel;
  13. use app\common\model\store\order\StoreOrder;
  14. use app\common\model\store\service\StoreService;
  15. use app\common\model\store\staff\Staffs;
  16. use app\common\model\wechat\WechatUser;
  17. use app\common\repositories\store\coupon\StoreCouponUserRepository;
  18. use app\common\repositories\store\order\StoreGroupOrderRepository;
  19. use app\common\repositories\store\order\StoreOrderRepository;
  20. use app\common\repositories\store\service\StoreServiceLogRepository;
  21. use app\common\repositories\system\config\ConfigValueRepository;
  22. use app\common\repositories\user\UserBillRepository;
  23. use app\common\repositories\user\UserExtractRepository;
  24. use app\common\repositories\user\UserHistoryRepository;
  25. use app\common\repositories\user\UserRelationRepository;
  26. use app\common\repositories\user\UserRepository;
  27. /**
  28. * Class User
  29. * @package app\common\model\user
  30. * @author xaboy
  31. * @day 2020-04-28
  32. */
  33. class User extends BaseModel
  34. {
  35. /**
  36. * @return string
  37. * @author xaboy
  38. * @day 2020-03-30
  39. */
  40. public static function tablePk(): string
  41. {
  42. return 'uid';
  43. }
  44. /**
  45. * @return string
  46. * @author xaboy
  47. * @day 2020-03-30
  48. */
  49. public static function tableName(): string
  50. {
  51. return 'user';
  52. }
  53. /**
  54. * @param $value
  55. * @return string
  56. * @author xaboy
  57. * @day 2020-05-09
  58. */
  59. public function getBirthdayAttr($value)
  60. {
  61. return $value == '0000-00-00' ? '' : $value;
  62. }
  63. public function getIsSvipAttr($value)
  64. {
  65. if (systemConfig('svip_switch_status') == 1) {
  66. return $value;
  67. } else {
  68. return $value > 0 ? 0 : $value;
  69. }
  70. }
  71. public function getPhoneAttr($value)
  72. {
  73. if (env('SHOW_PHONE', false) && app('request')->hasMacro('adminInfo') && $value && is_numeric($value)) {
  74. if (app('request')->userType() !== 2 || app('request')->adminInfo()['level'] !== 0) {
  75. return substr_replace($value, '****', 3, 4);
  76. }
  77. }
  78. return $value;
  79. }
  80. public function getAccountAttr($value)
  81. {
  82. if (env('SHOW_PHONE', false) && app('request')->hasMacro('adminInfo') && $value && is_numeric($value)) {
  83. if (app('request')->userType() !== 2 || app('request')->adminInfo()['level'] !== 0) {
  84. return substr_replace($value, '****', 3, 4);
  85. }
  86. }
  87. return $value;
  88. }
  89. /**
  90. * @param $value
  91. * @return array
  92. * @author xaboy
  93. * @day 2020-05-09
  94. */
  95. public function getLabelIdAttr($value)
  96. {
  97. if (empty($value)) {
  98. return [];
  99. }
  100. return array_map(function ($item) {
  101. return (int)$item;
  102. }, explode(',', $value));
  103. }
  104. /**
  105. * @param $value
  106. * @return string
  107. * @author xaboy
  108. * @day 2020-05-09
  109. */
  110. public function setLabelIdAttr($value)
  111. {
  112. return is_array($value) ? implode(',', $value) : $value;
  113. }
  114. public function getValidSpreadUidAttr()
  115. {
  116. if (!$this->spread_uid) return 0;
  117. $data = self::getDB()->where('uid', $this->spread_uid)->field('is_promoter,spread_uid')->find();
  118. $extensionInfo = get_extension_info($data);//获取用户是否可以分销以及是否内购
  119. return $data && $extensionInfo['isPromoter'] ? $this->spread_uid : 0;
  120. }
  121. public function getValidSpreadAttr()
  122. {
  123. if (!$this->spread_uid) return null;
  124. $data = self::getDB()->where('uid', $this->spread_uid)->find();
  125. $extensionInfo = get_extension_info($data);//获取用户是否可以分销以及是否内购
  126. return $data && $extensionInfo['isPromoter'] ? $data : null;
  127. }
  128. public function getValidTopUidAttr()
  129. {
  130. if (!$this->top_uid) return 0;
  131. $data = self::getDB()->where('uid', $this->spread_uid)->find();
  132. $extensionInfo = get_extension_info($data);//获取用户是否可以分销以及是否内购
  133. return $data && $extensionInfo['isPromoter'] ? $this->top_uid : 0;
  134. }
  135. public function getValidTopAttr()
  136. {
  137. if (!$this->top_uid) return null;
  138. $data = self::getDB()->where('uid', $this->top_uid)->find();
  139. $extensionInfo = get_extension_info($data);//获取用户是否可以分销以及是否内购
  140. return $data && $extensionInfo['isPromoter'] ? $data : null;
  141. }
  142. public function getTopUidAttr()
  143. {
  144. return self::getDB()->where('uid', $this->spread_uid)->value('spread_uid') ?: 0;
  145. }
  146. /**
  147. * @return \think\model\relation\HasOne
  148. * @author xaboy
  149. * @day 2020-05-09
  150. */
  151. public function group()
  152. {
  153. return $this->hasOne(UserGroup::class, 'group_id', 'group_id');
  154. }
  155. public function spread()
  156. {
  157. return $this->hasOne(User::class, 'uid', 'spread_uid');
  158. }
  159. public function brokerage()
  160. {
  161. return $this->hasOne(UserBrokerage::class, 'brokerage_level', 'brokerage_level')->where('type', 0);
  162. }
  163. public function member()
  164. {
  165. return $this->hasOne(UserBrokerage::class, 'brokerage_level', 'member_level')->where('type', 1);
  166. }
  167. public function memberIcon()
  168. {
  169. return $this->hasOne(UserBrokerage::class, 'brokerage_level', 'member_level')->where('type', 1)->bind(['member_icon' => 'brokerage_icon']);
  170. }
  171. public function getUserLabelAttr()
  172. {
  173. return UserLabel::whereIn('label_id', $this->label_id)->select();
  174. }
  175. public function getUserFields()
  176. {
  177. return $this->hasOne(UserFields::class, 'uid', 'uid');
  178. }
  179. /**
  180. * @param $spreadUid
  181. * @author xaboy
  182. * @day 2020-04-28
  183. */
  184. public function setSpread($spreadUid)
  185. {
  186. if (self::getDB()->where('uid', $spreadUid)->value('is_promoter'))
  187. $this->save([
  188. 'spread_uid' => $spreadUid,
  189. 'spread_time' => date('Y-m-d H:i:s')
  190. ]);
  191. }
  192. public function service()
  193. {
  194. return $this->hasOne(StoreService::class, 'uid', 'uid')
  195. ->where('mer_id', '<>', 0)
  196. ->where('is_del', 0)
  197. ->where('is_open', 1)
  198. ->field('service_id,uid,nickname,avatar,customer,mer_id,is_verify,is_goods,is_open')
  199. ->order('is_verify DESC,customer DESC');
  200. }
  201. public function topService()
  202. {
  203. return $this->hasOne(StoreService::class, 'uid', 'uid')
  204. ->where('mer_id', 0)->where('is_open',1)
  205. ->where('is_del', 0)
  206. ->field('service_id,uid,nickname,avatar,customer,mer_id,is_verify,is_goods')
  207. ->order('is_verify DESC,customer DESC');
  208. }
  209. public function staffs()
  210. {
  211. return $this->hasMany(Staffs::class, 'uid', 'uid')->where('status', 1);
  212. }
  213. public function getLockBrokerageAttr()
  214. {
  215. return app()->make(UserBillRepository::class)->lockBrokerage($this->uid) ?: 0;
  216. }
  217. public function getLockIntegralAttr()
  218. {
  219. return app()->make(UserBillRepository::class)->lockIntegral($this->uid) ?: 0;
  220. }
  221. public function getYesterdayBrokerageAttr()
  222. {
  223. return app()->make(UserBillRepository::class)->yesterdayBrokerage($this->uid) ?: 0;
  224. }
  225. public function getTotalExtractAttr()
  226. {
  227. return app()->make(UserExtractRepository::class)->userTotalExtract($this->uid) ?: 0;
  228. }
  229. public function getTotalBrokerageAttr()
  230. {
  231. return app()->make(UserBillRepository::class)->totalBrokerage($this->uid) ?: 0;
  232. }
  233. public function getTotalBrokeragePriceAttr()
  234. {
  235. return bcadd($this->lock_brokerage, $this->brokerage_price, 2);
  236. }
  237. public function getTotalIntegralAttr()
  238. {
  239. return bcadd($this->lock_integral, $this->integral, 0);
  240. }
  241. public function getTotalRechargeAttr()
  242. {
  243. return app()->make(UserBillRepository::class)->userNowMoneyIncTotal($this->uid);
  244. }
  245. public function getTotalConsumeAttr()
  246. {
  247. return app()->make(StoreGroupOrderRepository::class)->totalNowMoney($this->uid);
  248. }
  249. public function getTotalCollectProductAttr()
  250. {
  251. return app()->make(UserRelationRepository::class)->getWhereCount(['uid' => $this->uid, 'type' => 1]);
  252. }
  253. public function getTotalCollectStoreAttr()
  254. {
  255. return app()->make(UserRelationRepository::class)->getWhereCount(['uid' => $this->uid, 'type' => 10]);
  256. }
  257. public function getTotalVisitProductAttr()
  258. {
  259. return app()->make(UserHistoryRepository::class)->userTotalHistory($this->uid);
  260. }
  261. public function getTotalCouponAttr()
  262. {
  263. return app()->make(StoreCouponUserRepository::class)->userTotal($this->uid, 0);
  264. }
  265. public function getTotalUnreadAttr()
  266. {
  267. return app()->make(StoreServiceLogRepository::class)->totalUnReadNum($this->uid);
  268. }
  269. public function getOneLevelCountAttr()
  270. {
  271. return app()->make(UserRepository::class)->getOneLevelCount($this->uid);
  272. }
  273. public function getTwoLevelCountAttr()
  274. {
  275. return app()->make(UserRepository::class)->getTwoLevelCount($this->uid);
  276. }
  277. public function getSpreadTotalAttr()
  278. {
  279. return $this->one_level_count + $this->two_level_count;
  280. }
  281. public function wechat()
  282. {
  283. return $this->hasOne(WechatUser::class, 'wechat_user_id', 'wechat_user_id');
  284. }
  285. public function fields()
  286. {
  287. return $this->hasOne(UserFields::class, 'uid', 'uid');
  288. }
  289. public function getIntegralAttr($val)
  290. {
  291. return is_null($val) ? 0 : $val;
  292. }
  293. // public function getUserTypeAttr()
  294. // {
  295. // if($this->wechat['openid']){
  296. // return 'wechat';
  297. // }elseif($this->wechat['routine_openid']){
  298. // return 'routine';
  299. // }else{
  300. // return 'H5';
  301. // }
  302. // }
  303. public function getSubscribeAttr()
  304. {
  305. if ($this->wechat['openid'] && $this->wechat['subscribe']) {
  306. return true;
  307. } else {
  308. return false;
  309. }
  310. }
  311. public function getAvatarAttr($value)
  312. {
  313. if (empty($value)) {
  314. return systemConfig('user_default_avatar') ?: rtrim(systemConfig('site_url'), '/') . '/static/f.png';
  315. }
  316. return $value;
  317. }
  318. /**
  319. * 是否分销获取器
  320. * @param $value
  321. * @param $data
  322. * @return void
  323. */
  324. public function getIsPromoterAttr($value,$data)
  325. {
  326. $extensionInfo = get_extension_info($data);//获取用户是否可以分销以及是否内购
  327. return $extensionInfo['isPromoter'];
  328. }
  329. // 判断是否有推荐订单(推荐下级是否有订单)
  330. public function spread_order($uid){
  331. // $user = User::find($uid);
  332. // $group_users = app()->make(GiftLevel::class)->get_group_user($uid);
  333. $group_users = User::where('spread_uid',$uid)->column('uid');
  334. // $count = app()->make(StoreOrderRepository::class);
  335. $order_count = StoreOrder::getDB()->whereIn('uid',$group_users)->where('paid',1)->where('is_del',0)->count();
  336. return $order_count;
  337. }
  338. }