validate(['id' => 'required|integer|min:1'], null, [], ['id' => '经销商ID']); if (!$agent = TeamDividendAgencyModel::uniacid()->find(request()->id)) { return $this->errorJson('经销商不存在'); } if (!TeamDividendAgencyModel::setBlack($agent, request()->is_black ? 1 : 0)) { return $this->message('修改失败','','error'); } return $this->message('修改成功'); } public function index() { $parames = \YunShop::request(); $uid = $parames->get('uid'); $title = '经销商'; if (strpos($parames['searchtime'], '×') !== FALSE) { $search_time = explode('×', $parames['searchtime']); if (!empty($search_time)) { $parames['searchtime'] = $search_time[0]; $start_time = explode('=', $search_time[1]); $end_time = explode('=', $search_time[2]); $parames->times = [ 'start' => $start_time[1], 'end' => $end_time[1] ]; } } $list = TeamDividendAgencyModel::searchAgency($parames); $list->with(['hasManyMemberChildren'=>function ($query) { return $query->select('yz_member.member_id','yz_member.parent_id')->join('yz_team_dividend_agency',function ($join) { $join->on('yz_team_dividend_agency.uid','=','yz_member.member_id')->whereNull('yz_team_dividend_agency.deleted_at'); }); }]); if($uid){ $list = $list->where('yz_member.parent_id',$uid); $title = '下级经销商'; } $list = $list->paginate($this->pageSize); $list = $list->toArray(); $pager = PaginationHelper::show($list['total'], $list['current_page'], $this->pageSize); $starttime = $endtime = time(); if (isset($parames['searchtime']) && ($parames['searchtime'] == 1 || $parames['searchtime'] == 2)) { if ($parames['times']['start'] != '请选择' && $parames['times']['end'] != '请选择') { $starttime = strtotime($parames['times']['start']); $endtime = strtotime($parames['times']['end']); } } $level = TeamDividendLevelModel::getList()->get(); // 获取所有经销商的排名信息 $rankList = TeamDividendLevelModel::getRanking(); // 获取每个经销商的赠送名额 $uidS = array_column($list['data'],'uid'); $quotaInfo = Uplog::uniacid() ->select([DB::raw("sum(give_limit) as total_quota"),'uid']) ->whereIn('uid',$uidS) ->orderBy('created_at','ASC') ->groupBy('uid') ->get() ->toArray(); $quotaInfo = array_column($quotaInfo,'total_quota','uid'); // 已使用 $useQuota = TeamDividendAgencyModel::uniacid() ->select([DB::raw("count(id) as total_use_quota"),'give_uid']) ->whereIn('give_uid',$uidS) ->groupBy('uid') ->get() ->toArray(); $useQuota = array_column($useQuota,'total_use_quota','give_uid'); foreach ($list['data'] as $key => $item) { $list['data'][$key]['total'] = count($item['has_many_member_children']); // 剩余名额处理 $list['data'][$key]['total_quota'] = (int)$quotaInfo[$item['uid']]; $list['data'][$key]['surplus_quota'] = (int)$quotaInfo[$item['uid']] - (int)$useQuota[$item['uid']]; $list['data'][$key]['use_quota'] = (int)$useQuota[$item['uid']]; // 排名处理 $list['data'][$key]['rank_list'] = array_filter(array_map(function($rankInfo) use ($item){ $rankSort = (string)$rankInfo['up_log'][$item['uid']]; if($rankSort === '0' || $rankSort) { return [ 'id' => $rankInfo['id'], 'level_name' => $rankInfo['level_name'], 'ranking' => ((int)$rankInfo['up_log'][$item['uid']] + 1), ]; } return []; },$rankList)); } return view('Yunshop\TeamDividend::admin.team-agency', [ 'list' => $list, 'endtime' => $endtime, 'starttime' => $starttime, 'total' => $list['total'], 'pager' => $pager, 'title' => $title, 'level' => $level, 'request' => \YunShop::request(), ])->render(); } /** * @return mixed|string * @throws AppException * @throws \Throwable */ public function add() { $level_list = TeamDividendLevelModel::getList()->get(); if (\Request::getMethod() == 'POST') { $agentData = \YunShop::request()->team; $agentData['uniacid'] = \YunShop::app()->uniacid; $agentData['upgrade_at'] = time(); if((int)$agentData['level'] <= 0) return $this->message('添加失败,请选择代理等级!', '', 'error'); // 其他验证 $agency_model = new TeamDividendAgencyModel(); $agency_model->fill($agentData); $validator = $agency_model->validator(); if ($validator->fails()) { $this->error($validator->messages()); } else { if ($agency_model->save()) { // 升级后等级 $c_level = TeamDividendLevelModel::with(['hasOneUpgradeSet'])->find($agentData['level']); // 升级前等级 $o_level = NULL; // 升级日志 Uplog::addLog($agency_model, $o_level, $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']); //直推奖 todo 直推奖不用了 // (new UpgradeService())->sendBonus($agentData['uid']); // \Log::debug('直推奖'); return $this->message('经销商操作成功', yzWebUrl('plugin.team-dividend.admin.team-agency')); } } } return view('Yunshop\TeamDividend::admin.team-agency-add', [ 'level' => $level_list ])->render(); } public function searchAgency() { $keyword = \YunShop::request()->keyword; $member = Member::getMemberInfoByNickName($keyword); return view('Yunshop\TeamDividend::admin.query', [ 'members' => $member ])->render(); } public function export() { $file_name = date('Ymdhis', time()) . ''; $parames = \YunShop::request(); if (strpos($parames['searchtime'], '×') !== FALSE) { $search_time = explode('×', $parames['searchtime']); if (!empty($search_time)) { $parames['searchtime'] = $search_time[0]; $start_time = explode('=', $search_time[1]); $end_time = explode('=', $search_time[2]); $parames->times = [ 'start' => $start_time[1], 'end' => $end_time[1] ]; } } // $list = TeamDividendAgencyModel::searchAgency($parames)->get()->toArray(); $list = TeamDividendAgencyModel::searchAgency($parames); $uid = $parames->get('uid'); if($uid){ $list = $list->where('yz_team_dividend_agency.parent_id',$uid); } $export_page = request()->export_page ? request()->export_page : 1; $export_model = new ExportService($list, $export_page); $list = $list->get()->toArray(); $childe = TeamDividendAgencyModel::getChildNumByPrantId(); foreach ($list as $key => $item) { foreach ($childe as $c_item ) { if ($c_item['parent_id'] == $item['uid']) { $list[$key]['total'] = $c_item['total']; } } } $export_data[0] = ['ID', '会员', '推荐人会员ID', '成为代理时间', '推荐人姓名', '推荐人手机号', '经销商', '手机号','等级', '一级(直系)总经销商人数', '分红比例', '已结算分红', '未结算分红', '累计结算分红','团队业绩','团队商品销量']; foreach ($list as $key => $item) { if (!empty($item['status'])) { $status = '已使用'; } else { $status = '未使用'; } if($item['has_many_team_dividend'][0]['status'] == 1) $item['dividend_final'] = $item['has_many_team_dividend'][0]['total_amount']; elseif($item['has_many_team_dividend'][1]['status'] == 1) $item['dividend_final'] = $item['has_many_team_dividend'][1]['total_amount']; elseif($item['has_many_team_dividend'][2]['status'] == 1) $item['dividend_final'] = $item['has_many_team_dividend'][2]['total_amount']; else $item['dividend_final'] = 0; if($item['has_many_team_dividend'][0]['status'] === 0) $item['dividend_open'] = $item['has_many_team_dividend'][0]['total_amount']; elseif($item['has_many_team_dividend'][1]['status'] === 0) $item['dividend_open'] = $item['has_many_team_dividend'][1]['total_amount']; elseif($item['has_many_team_dividend'][2]['status'] === 0) $item['dividend_open'] = $item['has_many_team_dividend'][2]['total_amount']; else $item['dividend_open'] = 0; $item['dividend_total'] = $item['has_many_team_dividend'][2]['total_amount'] + $item['has_many_team_dividend'][1]['total_amount'] + $item['has_many_team_dividend'][0]['total_amount']?:0; $export_data[$key + 1] = [ $item['id'], $item['has_one_member']['uid'], $item['to_parent']['uid'] ?? 0, $item['created_at'], $item['to_parent']['realname'] ?? '', $item['to_parent']['mobile'] ?? 0, $item['has_one_member']['username'], $item['has_one_member']['mobile'], $item['has_one_level']['level_name'], $item['total'], $item['has_one_level']['dividend_ratio'], $item['dividend_final'], $item['dividend_open'], $item['dividend_total'], $item['team_order_price'], $item['team_goods_total']]; } $export_model->export($file_name, $export_data, 'plugin.team-dividend.admin.team-agency.index', 'direct_export'); // \Excel::create($file_name, function ($excel) use ($export_data) { // // Set the title // $excel->setTitle('Office 2005 XLSX Document'); // // // Chain the setters // $excel->setCreator('') // ->setLastModifiedBy("") // ->setSubject("Office 2005 XLSX Test Document") // ->setDescription("Test document for Office 2005 XLSX, generated using PHP classes.") // ->setKeywords("office 2005 openxml php") // ->setCategory("report file"); // // $excel->sheet('info', function ($sheet) use ($export_data) { // $sheet->rows($export_data); // }); // // // })->export('xls'); } public function daletedAgency() { $id = \YunShop::request()->id; $agency = TeamDividendAgencyModel::find($id); if(!$agency) { return $this->message('无此经销商或已经删除','','error'); } $uid= TeamDividendAgencyModel::getuid($id); $result = TeamDividendAgencyModel::daletedAgency($id); $code_id=CodeRecordModel::daletedCode($uid['uid']); return $this->message('删除成功',Url::absoluteWeb('plugin.team-dividend.admin.team-agency')); } public function change() { $id = \YunShop::request()->id; $levelId = \YunShop::request()->value; $agency = TeamDividendAgencyModel::find($id); $levelInfo = TeamDividendLevelModel::find($levelId); // 等级类型:0=普通等级,1=文创等级 if((int)$levelInfo->level_type == 1){ $level = $agency->cultural_level_id; $agency->cultural_level_id = $levelId; $agency->cultural_upgrade_at = time(); }else{ $level = $agency->level; $agency->level = \YunShop::request()->value; $agency->upgrade_at = time(); } if ($agency->save()) { // 升级后等级 $c_level = TeamDividendLevelModel::with(['hasOneUpgradeSet'])->find($agency->level); // 升级前等级 $o_level = TeamDividendLevelModel::with(['hasOneUpgradeSet'])->find($level); // 升级日志 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); } } } public function test(){ //因为model偶尔会出现status异常的问题,所以重新查询一遍 // $model = Order::with('hasManyOrderGoods')->find(84); // $set = \Setting::get('plugin.team_dividend'); // (new NewUpgrateJob($model->uid, $set, $model->uniacid, TeamDividendLevelUpgrade::ORDER_PAY, $model))->handle(); // $order = Order::find(87); // $TeamReturnService = ReturnConfig::getClass(); // if (app('plugins')->isEnabled('team-sideways')) debug('经销商订单创建终止:team-sideways'); // $set = $order->getSetting('plugin.team_dividend'); // if (!$set['is_team_dividend']) debug('是否开启经销商插件'); // $buyMember = $order->belongsToMember; // $agents = GetAgentsService::index($set, $order->uid, $order->create_time); // foreach ($order->hasManyOrderGoods as $order_goods) { // // 普通经销商提成处理 // $TeamReturnService->setData($order, $set, $buyMember, $order_goods, $agents); // $TeamReturnService->handle(); // $this->totalDividend += $TeamReturnService->totalDividend; // // 文创津贴(补贴)处理 // $TeamReturnService->setData($order, $set, $buyMember, $order_goods, $agents,1); // $TeamReturnService->handle(); // $this->totalDividend += $TeamReturnService->totalDividend; // } // debug(['总分红金额(包括津贴和补贴)'=>$this->totalDividend]); debug("结束"); } }