{'recom_id'})->first(); $member_clan = [ 'm_id' => $member->{'id'}, 'tier_num' => $p_clan->{'tier_num'} + 1, 'one_m_id' => $p_clan->{'m_id'}, 'two_m_id' => $p_clan->{'one_m_id'}, 'three_m_id' => $p_clan->{'two_m_id'}, 'four_m_id' => $p_clan->{'three_m_id'}, 'five_m_id' => $p_clan->{'four_m_id'}, 'm_ids' => 0, 'p_ids' => $p_clan->{'p_ids'} . ',' . $p_clan->{'m_id'}, ]; $clan_ret = MemberClan::create($member_clan); if (!empty($clan_ret)) { $p_clan->{'m_ids'} = $p_clan->{'m_ids'} . ',' . $member->{'id'}; $clan_ret = MemberClan::where('id', $p_clan->{'id'})->update(['m_ids' => $p_clan->{'m_ids'}]); if (empty($clan_ret)) { DB::rollBack(); //回滚 } else { //更新所有父级的信息 if ($p_clan->{'p_ids'}) { $clan_list = MemberClan::whereIn('m_id', explode(',', $p_clan->{'p_ids'}))->select(['id', 'm_ids'])->get(); foreach ($clan_list as $clan_info) { MemberClan::where('id', $clan_info->{'id'})->update(['m_ids' => $clan_info->{'m_ids'} . ',' . $member->{'id'}]); } } } } } /** * 更新会员关系 * @param $m_member * @param $new_p_id * @return array|false * @throws \Exception */ function updateRelevance(Member $m_member, $new_p_id) { $p_member = Member::where('id', $new_p_id)->select(['id', 'phone', 'recom_id'])->first(); if (empty($p_member)) return false; DB::beginTransaction(); //修改会员表的会员关系 Member::where('id', $m_member->{'id'})->update(['recom_id' => $p_member->{'id'}]); //获取会员层级信息 $m_clans = MemberClan::where('m_id', $m_member->{'id'})->select(['id', 'm_ids', 'p_ids'])->first(); if (!empty($m_clans->{'m_ids'})) $move_ids = array_filter(explode(',', $m_clans->{'m_ids'})); $move_ids[] = $m_member->{'id'}; //去处旧父级信息 $old_p_ids_str = $m_clans->{'p_ids'}; $old_p_ids = array_filter(explode(',', $m_clans->{'p_ids'})); foreach ($old_p_ids as $old_p_id) { $old_m_ids = MemberClan::where('m_id', $old_p_id)->value('m_ids'); $old_m_ids = explode(',', $old_m_ids); $old_m_ids = array_diff($old_m_ids, $move_ids); MemberClan::where('m_id', $old_p_id)->update(['m_ids' => implode(',', $old_m_ids)]); } //更新新父级关系 $p_clans = MemberClan::where('m_id', $p_member->{'id'})->select(['id', 'm_ids', 'p_ids'])->first(); $new_p_ids_str = $p_clans->{'p_ids'} . ',' . $p_member->{'id'}; $new_p_ids = array_filter(explode(',', $new_p_ids_str)); foreach ($new_p_ids as $new_p_id) { $new_m_ids = MemberClan::where('m_id', $new_p_id)->value('m_ids'); $new_m_ids = explode(',', $new_m_ids); $new_m_ids = array_unique(array_merge($new_m_ids, $move_ids)); MemberClan::where('m_id', $new_p_id)->update(['m_ids' => implode(',', $new_m_ids)]); } //更新移动族谱的父级关系 foreach ($move_ids as $move_id) { $move_info = MemberClan::where('m_id', $move_id)->first(); $p_ids = str_replace($old_p_ids_str, $new_p_ids_str, $move_info->{'p_ids'}); $update_move = ['p_ids' => $p_ids]; $p_ids = explode(',', $p_ids); $p_ids = array_reverse($p_ids); $update_move['one_m_id'] = $p_ids[0]; $update_move['two_m_id'] = empty($p_ids[1]) ? 0 : $p_ids[1]; $update_move['three_m_id'] = empty($p_ids[2]) ? 0 : $p_ids[2]; $update_move['four_m_id'] = empty($p_ids[3]) ? 0 : $p_ids[3]; $update_move['five_m_id'] = empty($p_ids[4]) ? 0 : $p_ids[4]; MemberClan::where('id', $move_info->{'id'})->update($update_move); } DB::commit(); return true; } /** * 双线关系绑定 * @param $mId * @param $pId * @return bool */ function creatBoth($mId,$pId){ $num=MemberBoth::where('m_id',$mId)->count(); if($num>0){ return ; } $bothData=[ 'm_id'=>$mId, 'direct_id'=>$pId, 'left_id'=>0, 'right_id'=>0, ]; $pBothData=MemberBoth::where('m_id',$pId)->first(); if(empty($pBothData)){ CommonServer::creatServer()->addErrorRecord('层级关系错误',$bothData); }else{ if($pBothData->{'is_end'}!=0){ //直推人已满就检查下面人员 $childIds=array_filter(explode(',',$pBothData->{'child_ids'})); //重新获取 $pBothData=MemberBoth::whereIn('m_id',$childIds)->where('is_end',0)->orderBy('tier_num' ,'asc')->orderBy('id','asc')->first(); if(empty($pBothData)){ CommonServer::creatServer()->addErrorRecord('子节点层级关系错误',$bothData); } } if($pBothData->{'left_id'}){ $pBothData->{'right_id'}=$mId; }else{ $pBothData->{'left_id'}=$mId; } $pBothData->{'child_ids'}.=(($pBothData->{'child_ids'}?',':'').$mId); $bothData['tier_num']=$pBothData->{'tier_num'}+1; $bothData['parent_id']=$pBothData->{'id'}; $bothData['parent_ids']=$pBothData->{'parent_ids'}.','.$pBothData->{'id'}; $bothData['child_ids']=''; $bothData['is_end']='0'; $bothData=MemberBoth::create($bothData); if($pBothData->{'left_id'} && $pBothData->{'right_id'}){ $pBothData->{'is_end'}=1; } $pBothData->save(); $parentIds=array_filter(explode(',',$bothData['parent_ids'])); foreach ($parentIds as $parentId){ if($parentId!=$pBothData->{'id'}){ $childIds=MemberBoth::where('id',$parentId)->value('child_ids'); $childIds=explode(',', $childIds); $childIds[]=$bothData->{'id'}; MemberBoth::where('id',$parentId)->update(['child_ids'=>implode(',',$childIds)]); } } } return true; } }