GiftLevel.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace app\common\model\user;
  3. use app\common\model\BaseModel;
  4. use app\common\model\store\order\StoreOrder;
  5. class GiftLevel extends BaseModel
  6. {
  7. public static function tablePk(): ?string
  8. {
  9. return 'id';
  10. }
  11. public static function tableName(): string
  12. {
  13. return 'gift_level';
  14. }
  15. //买礼包商品的时候触发 检测升级
  16. public function checkLevel($uid, $pass = [])
  17. {
  18. if (in_array($uid, $pass)) return true;
  19. $user = User::find($uid);
  20. @file_put_contents('quanju2.txt', json_encode($user)."-用户信息\r\n", 8);
  21. $group_users = $this->get_group_user($uid);
  22. //Todo 获取在$group_users内所有用户的消费情况
  23. $achievement = 0;
  24. //获取该用户购买过的礼包商品的全部订单
  25. $achievement = StoreOrder::where('uid','in', $group_users)->where('paid', 1)->where('product_type',2)->whereNotIn('status',-1)->sum('pay_price');
  26. @file_put_contents('quanju2.txt', $achievement."-总业绩\r\n", 8);
  27. $old_level = self::where('id', $user['level'])->find();
  28. if (!$old_level) $old_level = [
  29. 'grade' => 0,
  30. 'name' => '普通会员'
  31. ];
  32. $level = self::where('grade', '>', $old_level['grade'])->where('achievement', '<=', $achievement)
  33. ->order('grade', 'desc')->find();
  34. if ($level) {
  35. $user->level = $level['id'];
  36. $user->save();
  37. }
  38. $pass[] = $uid;
  39. $spread = User::where('uid', $user['spread_uid'])->find();
  40. if ($spread) return $this->checkLevel($spread['id'], $pass);
  41. return true;
  42. }
  43. public function get_group_user($id, $init = true, $members = null){
  44. if ($init) {
  45. $us = \app\common\model\user\User::column('spread_uid', 'uid');
  46. $members = [];
  47. foreach ($us as $k => $v) {
  48. if ($v > 0)
  49. $members[$v][] = $k;
  50. }
  51. $id = [$id];
  52. }
  53. $arr = array();
  54. foreach ($id as $v) {
  55. $child = $members[$v] ?? [];
  56. $arr = array_merge($arr, $child);
  57. }
  58. if (count($arr)) {
  59. return array_merge($arr, $this->get_group_user($arr, false, $members));
  60. } else {
  61. return $arr;
  62. }
  63. }
  64. }