MemberClanServer.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. namespace App\Servers;
  3. use App\Jobs\MemberShareJob;
  4. use App\Models\Member;
  5. use App\Models\MemberClan;
  6. use Illuminate\Support\Facades\DB;
  7. /**
  8. * 会员
  9. */
  10. class MemberClanServer
  11. {
  12. /**
  13. * 错误信息
  14. * @var string
  15. */
  16. private $errorMsg = '';
  17. static private $server = '';
  18. private function __construct()
  19. {
  20. }
  21. /**
  22. * 创建对象
  23. * @return MemberClanServer
  24. */
  25. static function creatServer()
  26. {
  27. if (empty(self::$server)) {
  28. self::$server = new MemberClanServer();
  29. }
  30. return self::$server;
  31. }
  32. /**
  33. * 创建会员关系
  34. * @param Member $member
  35. * @throws \Exception
  36. */
  37. function creatRelevance(Member $member)
  38. {
  39. $p_clan = MemberClan::where('m_id', $member->{'recom_id'})->first();
  40. $member_clan = [
  41. 'm_id' => $member->{'id'},
  42. 'tier_num' => $p_clan->{'tier_num'} + 1,
  43. 'one_m_id' => $p_clan->{'m_id'},
  44. 'two_m_id' => $p_clan->{'one_m_id'},
  45. 'three_m_id' => $p_clan->{'two_m_id'},
  46. 'four_m_id' => $p_clan->{'three_m_id'},
  47. 'five_m_id' => $p_clan->{'four_m_id'},
  48. 'm_ids' => 0,
  49. 'p_ids' => $p_clan->{'p_ids'} . ',' . $p_clan->{'m_id'},
  50. ];
  51. $clan_ret = MemberClan::create($member_clan);
  52. if (!empty($clan_ret)) {
  53. $p_clan->{'m_ids'} = $p_clan->{'m_ids'} . ',' . $member->{'id'};
  54. $clan_ret = MemberClan::where('id', $p_clan->{'id'})->update(['m_ids' => $p_clan->{'m_ids'}]);
  55. if (empty($clan_ret)) {
  56. DB::rollBack(); //回滚
  57. } else {
  58. //更新所有父级的信息
  59. if ($p_clan->{'p_ids'}) {
  60. $clan_list = MemberClan::whereIn('m_id', explode(',', $p_clan->{'p_ids'}))->select(['id', 'm_ids'])->get();
  61. foreach ($clan_list as $clan_info) {
  62. MemberClan::where('id', $clan_info->{'id'})->update(['m_ids' => $clan_info->{'m_ids'} . ',' . $member->{'id'}]);
  63. }
  64. }
  65. }
  66. }
  67. }
  68. /**
  69. * 更新会员关系
  70. * @param $m_member
  71. * @param $new_p_id
  72. * @return array|false
  73. * @throws \Exception
  74. */
  75. function updateRelevance(Member $m_member, $new_p_id)
  76. {
  77. $p_member = Member::where('id', $new_p_id)->select(['id', 'phone', 'recom_id'])->first();
  78. if (empty($p_member)) return false;
  79. DB::beginTransaction();
  80. //修改会员表的会员关系
  81. Member::where('id', $m_member->{'id'})->update(['recom_id' => $p_member->{'id'}]);
  82. //获取会员层级信息
  83. $m_clans = MemberClan::where('m_id', $m_member->{'id'})->select(['id', 'm_ids', 'p_ids'])->first();
  84. if (!empty($m_clans->{'m_ids'})) $move_ids = array_filter(explode(',', $m_clans->{'m_ids'}));
  85. $move_ids[] = $m_member->{'id'};
  86. //去处旧父级信息
  87. $old_p_ids_str = $m_clans->{'p_ids'};
  88. $old_p_ids = array_filter(explode(',', $m_clans->{'p_ids'}));
  89. foreach ($old_p_ids as $old_p_id) {
  90. $old_m_ids = MemberClan::where('m_id', $old_p_id)->value('m_ids');
  91. $old_m_ids = explode(',', $old_m_ids);
  92. $old_m_ids = array_diff($old_m_ids, $move_ids);
  93. MemberClan::where('m_id', $old_p_id)->update(['m_ids' => implode(',', $old_m_ids)]);
  94. }
  95. //更新新父级关系
  96. $p_clans = MemberClan::where('m_id', $p_member->{'id'})->select(['id', 'm_ids', 'p_ids'])->first();
  97. $new_p_ids_str = $p_clans->{'p_ids'} . ',' . $p_member->{'id'};
  98. $new_p_ids = array_filter(explode(',', $new_p_ids_str));
  99. foreach ($new_p_ids as $new_p_id) {
  100. $new_m_ids = MemberClan::where('m_id', $new_p_id)->value('m_ids');
  101. $new_m_ids = explode(',', $new_m_ids);
  102. $new_m_ids = array_unique(array_merge($new_m_ids, $move_ids));
  103. MemberClan::where('m_id', $new_p_id)->update(['m_ids' => implode(',', $new_m_ids)]);
  104. }
  105. //更新移动族谱的父级关系
  106. foreach ($move_ids as $move_id) {
  107. $move_info = MemberClan::where('m_id', $move_id)->first();
  108. $p_ids = str_replace($old_p_ids_str, $new_p_ids_str, $move_info->{'p_ids'});
  109. $update_move = ['p_ids' => $p_ids];
  110. $p_ids = explode(',', $p_ids);
  111. $p_ids = array_reverse($p_ids);
  112. $update_move['one_m_id'] = $p_ids[0];
  113. $update_move['two_m_id'] = empty($p_ids[1]) ? 0 : $p_ids[1];
  114. $update_move['three_m_id'] = empty($p_ids[2]) ? 0 : $p_ids[2];
  115. $update_move['four_m_id'] = empty($p_ids[3]) ? 0 : $p_ids[3];
  116. $update_move['five_m_id'] = empty($p_ids[4]) ? 0 : $p_ids[4];
  117. MemberClan::where('id', $move_info->{'id'})->update($update_move);
  118. }
  119. DB::commit();
  120. return true;
  121. }
  122. }