MemberShip.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\wap\model\user;
  12. use traits\ModelTrait;
  13. use basic\ModelBasic;
  14. /**会员 model
  15. * Class MemberShip
  16. * @package app\wap\model\user
  17. */
  18. class MemberShip extends ModelBasic
  19. {
  20. use ModelTrait;
  21. /**条件处理
  22. * @return MemberShip
  23. */
  24. public static function setWhere()
  25. {
  26. return self::where(['is_publish' => 1, 'is_del' => 0, 'type' => 1]);
  27. }
  28. /**会员套餐列表
  29. * @return array|false|\PDOStatement|string|\think\Collection
  30. * @throws \think\db\exception\DataNotFoundException
  31. * @throws \think\db\exception\ModelNotFoundException
  32. * @throws \think\exception\DbException
  33. */
  34. public static function membershipList($uid)
  35. {
  36. $free = self::setWhere()->where('is_free', 1)->find();
  37. $record = MemberRecord::where('uid', $uid)->where('is_free', 1)->find();
  38. $list = self::setWhere()->where('is_free', 0)->order('sort DESC,id DESC')->select();
  39. $list = $list ? $list->toArray() : [];
  40. foreach ($list as &$vc) {
  41. $vc['sale'] = bcsub($vc['original_price'], $vc['price'], 2);
  42. }
  43. if ($free && !$record) {
  44. array_unshift($list, $free);
  45. }
  46. return $list;
  47. }
  48. /**修改用户会员信息
  49. * @param $order
  50. * @param $userInfo
  51. * @return bool
  52. * @throws \think\db\exception\DataNotFoundException
  53. * @throws \think\db\exception\ModelNotFoundException
  54. * @throws \think\exception\DbException
  55. */
  56. public static function getUserMember($order, $userInfo)
  57. {
  58. $member = self::setWhere()->where('id', $order['member_id'])->find();
  59. if (!$member) return false;
  60. $is_permanent = 0;
  61. if ($member['is_permanent']) {
  62. $is_permanent = 1;
  63. $overdue_time = User::where('uid', $order['uid'])->value('overdue_time');
  64. } else {
  65. switch ($userInfo['level']) {
  66. case 1:
  67. $overdue_time = bcadd(bcmul($member['vip_day'], 86400, 0), $userInfo['overdue_time'], 0);
  68. break;
  69. case 0:
  70. $overdue_time = bcadd(bcmul($member['vip_day'], 86400, 0), time(), 0);
  71. break;
  72. }
  73. }
  74. $data = [
  75. 'oid' => $order['id'],
  76. 'uid' => $order['uid'],
  77. 'price' => $member['price'],
  78. 'validity' => $member['vip_day'],
  79. 'purchase_time' => time(),
  80. 'is_permanent' => $is_permanent,
  81. 'is_free' => $member['is_free'],
  82. 'overdue_time' => $overdue_time,
  83. 'add_time' => time(),
  84. ];
  85. $res = MemberRecord::set($data);
  86. if ($res) {
  87. switch ($userInfo['level']) {
  88. case 1:
  89. $res1 = User::edit(['overdue_time' => $overdue_time, 'is_permanent' => $is_permanent], $order['uid'], 'uid');
  90. break;
  91. case 0:
  92. $res1 = User::edit(['level' => 1, 'member_time' => time(), 'overdue_time' => $overdue_time, 'is_permanent' => $is_permanent], $order['uid'], 'uid');
  93. break;
  94. }
  95. }
  96. $res2 = $res && $res1;
  97. return $res2;
  98. }
  99. /**
  100. * 会员过期
  101. */
  102. public static function memberExpiration($uid)
  103. {
  104. $user = User::where('uid', $uid)->find();
  105. if ($user['level'] && $user['is_permanent'] == 0 && bcsub($user['overdue_time'], time(), 0) <= 0) {
  106. User::edit(['level' => 0, 'member_time' => 0], $uid, 'uid');
  107. }
  108. return true;
  109. }
  110. /**
  111. * 获取单独分销设置
  112. */
  113. public static function getIndividualDistributionSettings($member_id)
  114. {
  115. $data = self::where('id', $member_id)->field('is_alone,brokerage_ratio,brokerage_two')->find();
  116. if ($data) return $data;
  117. else return [];
  118. }
  119. }