0 ]; public static function boot() { parent::boot(); self::observe(new DealerObserver()); } public function rules() { $rules = [ 'uniacid' => 'required', 'uid' => [ Rule::unique($this->table)->where('uniacid', \YunShop::app()->uniacid)->whereNull('deleted_at')->ignore($this->id), 'required' ], 'level' => 'required', 'parent_id' => 'required', // 'relation' => 'required', ]; return $rules; } public function atributeNames() { return [ 'uniacid' => '公众号ID', 'uid' => '会员ID', 'level' => '经销商等级', 'parent_id' => '会员上级ID', 'relation' => '会员关系链' ]; } /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function toParent() { return $this->belongsTo('app\common\models\Member', 'parent_id', 'uid'); } public function hasOneMemberParent() { return $this->hasOne(\app\common\models\member\MemberParent::class, 'member_id', 'uid'); } /** * 等级1:1关系 * * @return mixed */ public function hasOneLevel() { return $this->hasOne('Yunshop\TeamDividend\models\TeamDividendLevelModel', 'id', 'level'); } /** * 会员1:1关系 * * @return mixed */ public function hasOneMember() { return $this->hasOne('app\common\models\Member', 'uid', 'uid'); } public function hasManyTeamDividend() { return $this->hasMany(TeamDividendModel::class, 'member_id', 'uid'); } /* * 上下级 1:n 关系 * * */ public function hasManyChildren() { return $this->hasMany(MemberChildren::class, 'member_id', 'uid'); } public static function searchAgency($parame) { $result = self::uniacid()->select(['yz_team_dividend_agency.*']) ->join('yz_member', 'yz_team_dividend_agency.uid', '=', 'yz_member.member_id') ->whereNull('yz_member.deleted_at'); if (!empty($parame['realname'])) { $result = $result->whereHas('hasOneMember', function ($query) use ($parame) { $query->where('nickname', 'like', "%{$parame['realname']}%") ->orWhere('realname', 'like', "%{$parame['realname']}%") ->orWhere('mobile', 'like', "%{$parame['realname']}%"); }); } if (!empty($parame['level_id'])) { $result = $result->where('level', $parame['level_id']); } if (!empty($parame['member_id'])) { $result = $result->whereHas('hasOneMember', function ($query) use ($parame) { $query->where('uid', $parame['member_id']); }); } if (isset($parame['searchtime']) && $parame['searchtime'] == 2) { if ($parame['times']['start'] != '请选择' && $parame['times']['end'] != '请选择') { $range = [strtotime($parame['times']['start']), strtotime($parame['times']['end'])]; $result = $result->whereBetween('yz_team_dividend_agency.created_at', $range); } } $result = $result->with( ['hasOneLevel' => function($query){ return $query->select(['*']); },'hasOneMember' => function($query){ return $query->select(['*']); },'toParent' => function($query){ return $query->select('uid', 'realname', 'mobile'); },'hasManyTeamDividend' => function($query){ return $query->selectRaw('member_id, status, sum(dividend_amount) as total_amount')->groupBy('member_id','status'); }])->orderBy('id', 'desc'); return $result; } public static function getAgencyInfoByUid($uid) { return self::uniacid() ->with('hasOneLevel') ->where('uid', $uid) ->first(); } public static function updatedAgentById($data, $id) { self::uniacid() ->where('id', $id) ->update($data); } public static function getAgentByUidId($membeId) { return self::uniacid() ->where('uid',$membeId); } public static function getFirstAgencyNum($uid) { return self::uniacid() ->where('parent_id', $uid) ->count(DB::raw("distinct(uid)")); } public static function getThridAgencyNum($uid) { return self::uniacid() ->whereRaw('FIND_IN_SET(?,relation)' , [$uid]) ->count(); } public static function getFirstAgency($uid) { return self::uniacid() ->where('parent_id', $uid) ->get(); } /** * 统计下级团队人数 * * @return mixed */ public static function getChildNumByPrantId() { return self::selectRaw('parent_id, count(parent_id) as total') ->uniacid() ->groupBy('parent_id') ->get(); } public static function daletedAgency($id) { return self::where('id', $id) ->delete(); } public static function getLevelNumAgency($pid, $level) { if (!$uids = MemberShopInfo::uniacid()->where('parent_id',$pid)->pluck('member_id')->toArray()){ return 0; } return self::uniacid()->whereIn('uid',$uids)->where('level', $level)->count(DB::raw("distinct(uid)")); // return self::uniacid() // ->where('parent_id', $pid) // ->where('level', $level) // ->count(); } public static function getuid($id) { return self::select('uid') ->where('id', $id) ->first(); } public static function getMemberAutoWithdrawByUid($uid) { $set = \Setting::get('plugin.team_dividend'); if ($set['withdraw_type']) { return self::uniacid() ->where('uid', $uid) ->whereHas('hasOneLevel', function ($q) { $q->where('auto_withdraw_period','>', 0); }) ->with('hasOneLevel') ->first(); } return self::uniacid() ->where('uid', $uid) ->whereHas('hasOneLevel', function ($q) { $q->where('auto_withdraw_day' ,'>', 0); }) ->with('hasOneLevel') ->first(); } public static function getAgencyByMemberId($memberID) { return self::uniacid() ->join('yz_team_dividend_level', 'yz_team_dividend_agency.level', '=', 'yz_team_dividend_level.id') ->where('uid', $memberID); } public function agencyLevel() { return $this->belongsTo('Yunshop\TeamDividend\models\TeamDividendLevelModel', 'level', 'id'); } public static function getAgentByMemberId($memberID) { return self::uniacid() ->with('agencyLevel') ->where('uid', $memberID); } /** * @param $agent * @param $is_black * @param int $type 0-后台/其他,1-爱心值加速池清零设置操作 * @return bool|void * 设置/取消黑名单 */ public function setBlack($agent, $is_black, $type = 0) { $is_black = $is_black ? 1 : 0; if ($agent->is_black == $is_black) { return true; } $agent->is_black = $is_black; $agent->black_time = time(); $agent->save(); TeamDividendBlackLog::create([ 'uniacid' => \YunShop::app()->uniacid, 'agent_id' => $agent->id, 'uid' => $agent->uid, 'is_black' => $is_black, 'type' => $type ]); return true; } public function addTeamAgency($agentData){ // 其他验证 $agency_model = new \Yunshop\TeamDividend\admin\models\TeamDividendAgencyModel(); $agency_model->fill($agentData); $validator = $agency_model->validator(); if ($validator->fails()) { throw new \Exception($validator->messages()->first()); } else { if ($agency_model->save()) { // 升级后等级 $c_level = TeamDividendLevelModel::with(['hasOneUpgradeSet'])->find($agentData['level']); // 升级前等级 $o_level = NULL; // 升级日志 Uplog::addLog($agency_model, $o_level, $c_level); // if((int)$agentData['cultural_level_id'] > 0){ // // 升级后等级 // $c_c_level = TeamDividendLevelModel::with(['hasOneUpgradeSet'])->find((int)$agentData['cultural_level_id']); // // 升级前等级 // $o_c_level = NULL; // // 升级日志 // Uplog::addLog($agency_model, $o_c_level, $c_c_level); // } //签合同 $data=[ 'member_id'=>$agentData['uid'], 'created_at' => time(), ]; event(new \app\common\events\plugin\TeamDividendEvent($data)); //激活码 $upgrade_set = (new UpgradeService())->getUpgradeById($agentData['level']); if ($upgrade_set) { $set = \Setting::get('plugin.team_dividend'); if ($set['is_activation_code'] && $upgrade_set[0]->code_num) { $level_list = TeamDividendLevelModel::getList()->get(); $code_num = unserialize($upgrade_set[0]->code_num); foreach($level_list as $key => $level) { if($code_num['level_'.$level->id]) { (new UpgradeService())->senCode($agentData['uid'], $code_num['level_'.$level->id], $level->id, $level->level_name); } } \Log::debug('激活码'); } } (new UpgradeService())->becomeAgencyNotify($agentData['uid']); }else{ throw new \Exception('添加失败'); } } } public function changeLevel($id,$levelId,$leveType){ $agency = TeamDividendAgencyModel::find($id); // 等级类型:''=普通等级,cultural=文创等级 // if((string)$leveType == 'cultural'){ // $level = $agency->cultural_level_id; // $agency->cultural_level_id = $levelId; // $agency->cultural_upgrade_at = time(); // }else{ $level = $agency->level; $agency->level = $levelId; $agency->upgrade_at = time(); // } // 升级后等级 $c_level = TeamDividendLevelModel::with(['hasOneUpgradeSet'])->find($leveType == 'cultural' ? $agency->cultural_level_id : $agency->level); // 升级前等级 $o_level = TeamDividendLevelModel::with(['hasOneUpgradeSet'])->find($level); if($c_level && $o_level && $c_level->level_type != $o_level->level_type ){ // 非默认等级 且 类型不一致,升级失败 return false; } if ($agency->save()) { // 升级日志 Uplog::addLog($agency, $o_level, $c_level); if ($c_level->level_weight > $o_level->level_weight) { //激活码 $upgrade_set = (new UpgradeService())->getUpgradeById($agency->level); if ($upgrade_set) { $set = \Setting::get('plugin.team_dividend'); if ($set['is_activation_code'] && $upgrade_set[0]->code_num) { $level_list = TeamDividendLevelModel::getList()->get(); $code_num = (is_array($upgrade_set[0]->code_num) ? $upgrade_set[0]->code_num : unserialize($upgrade_set[0]->code_num)) ?: []; foreach($level_list as $key => $level) { if($code_num['level_'.$level->id]) { (new UpgradeService())->senCode($agency->uid, $code_num['level_'.$level->id], $level->id, $level->level_name); } } \Log::debug('激活码'); } } //代理商升级通知 (new UpgradeService())->agencyUpgradeNotify($agency->uid, $o_level->level_name, $o_level->dividend_ratio_name, $agency->level); } } } }