User.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // |
  4. // +----------------------------------------------------------------------
  5. // |
  6. // +----------------------------------------------------------------------
  7. // |
  8. // +----------------------------------------------------------------------
  9. // |
  10. // +----------------------------------------------------------------------
  11. // +----------------------------------------------------------------------
  12. // | 会员模型
  13. // +----------------------------------------------------------------------
  14. namespace app\common\model;
  15. use app\common\library\Auth;
  16. use think\facade\Config;
  17. use think\facade\Db;
  18. use think\Model;
  19. /**
  20. * 会员模型
  21. */
  22. class User extends Model
  23. {
  24. protected $autoWriteTimestamp = true;
  25. protected $updateTime = false;
  26. protected $createTime = 'reg_time';
  27. protected function setRegIpAttr()
  28. {
  29. return request()->ip();
  30. }
  31. protected function setLastLoginIpAttr()
  32. {
  33. return request()->ip();
  34. }
  35. protected function setLastLoginTimeAttr()
  36. {
  37. return time();
  38. }
  39. protected function setBirthdayAttr($value)
  40. {
  41. return $value ? $value : null;
  42. }
  43. protected function getBirthdayAttr($value)
  44. {
  45. return $value ? $value : '';
  46. }
  47. public function getLastLoginTimeAttr($value, $data)
  48. {
  49. return time_format($data['last_login_time']);
  50. }
  51. /**
  52. * 获取会员的组别
  53. */
  54. public function getGroupAttr($value, $data)
  55. {
  56. return UserGroup::find($data['group_id']);
  57. }
  58. /**
  59. * 变更会员余额
  60. * @param int $amount 余额
  61. * @param int $user_id 会员ID
  62. * @param string $remark 备注
  63. */
  64. public static function amount($amount, $user_id, $remark)
  65. {
  66. Db::startTrans();
  67. try {
  68. $user = self::lock(true)->find($user_id);
  69. if ($user && $amount != 0) {
  70. $before = $user->amount;
  71. //$after = $user->amount + $amount;
  72. $after = function_exists('bcadd') ? bcadd($user->amount, $amount, 2) : $user->amount + $amount;
  73. //更新会员信息
  74. $user->save(['amount' => $after]);
  75. //写入日志
  76. AmountLog::create(['user_id' => $user_id, 'amount' => $amount, 'before' => $before, 'after' => $after, 'remark' => $remark]);
  77. }
  78. Db::commit();
  79. } catch (\Exception $e) {
  80. Db::rollback();
  81. }
  82. }
  83. /**
  84. * 变更会员积分
  85. * @param int $point 积分
  86. * @param int $user_id 会员ID
  87. * @param string $remark 备注
  88. */
  89. public static function point($point, $user_id, $remark)
  90. {
  91. Db::startTrans();
  92. try {
  93. $user = self::lock(true)->find($user_id);
  94. if ($user && $point != 0) {
  95. $before = $user->point;
  96. $after = $user->point + $point;
  97. $groupid = Auth::instance()->get_usergroup_bypoint($after);
  98. //更新会员信息
  99. $user->save(['point' => $after, 'groupid' => $groupid]);
  100. //写入日志
  101. PointLog::create(['user_id' => $user_id, 'point' => $point, 'before' => $before, 'after' => $after, 'remark' => $remark]);
  102. }
  103. Db::commit();
  104. } catch (\Exception $e) {
  105. Db::rollback();
  106. }
  107. }
  108. /**
  109. * 获取头像
  110. * @param $value
  111. * @param $data
  112. * @return string
  113. */
  114. public function getAvatarAttr($value, $data)
  115. {
  116. if (!$value) {
  117. switch (Config::get('yzn.user_avatar_mode')) {
  118. case 'letter':
  119. $value = letter_avatar($data['nickname']);
  120. break;
  121. case 'gravatar':
  122. $value = "https://cravatar.cn/avatar/" . md5(strtolower(trim($data['email']))) . "?s=80";
  123. break;
  124. default:
  125. $value = config('upload.cdnurl') . '/assets/img/avatar.png';
  126. break;
  127. }
  128. }
  129. return cdnurl($value, true);
  130. }
  131. }