search; $pageSize = 20; $list = AreaDividendAgent::getAgents($search)->orderBy('id','DESC')->paginate($pageSize); $pager = PaginationHelper::show($list->total(), $list->currentPage(), $list->perPage()); if(!$search['time']){ $search['time']['start'] = date("Y-m-d H:i:s",time()); $search['time']['end'] = date("Y-m-d H:i:s",time()); } return view('Yunshop\AreaDividend::admin.list', [ 'list' => $list->toarray(), 'pager' => $pager, 'total' => $list->total(), 'search' => $search, ])->render(); } public function createAgent() { $agentData = \YunShop::request()->agent; $wq_data = \YunShop::request()->wq; if ($agentData) { $agent = AreaDividendAgent::getAgentByMemberId($agentData['member_id'])->where('status','<>',-1)->first(); if(!empty($agent)){ $set = Setting::get('plugin.area_dividend'); if($agent->status == 0){ return $this->message('添加失败,此会员已进行申请,请在申请列表进行审核', '', 'error'); }else if($agent->status == 1 && !$set['agent_many']){ return $this->message('添加失败,此会员已是代理商', '', 'error'); } } $agentData = AgentService::setAgentData($agentData); $retLock = Lock::verify($agentData); if ($retLock) return $this->message('该区域已被锁定', '', 'error'); if (trim($wq_data['username']) && trim($wq_data['password'])) { if (trim($wq_data['password_again']) != trim($wq_data['password'])) { return $this->message('两次密码不相同', '', 'error'); } $verifyPassword = verifyPasswordStrength(trim($wq_data['password'])); if($verifyPassword !== true){ return $this->message($verifyPassword, '', 'error'); } $result = WeiQingUsers::getUserByUserName(trim($wq_data['username']))->first(); if ($result) { return $this->message('用户名已存在', '', 'error'); } $user = WeiQingUsers::register(trim($wq_data['username']), $wq_data['password']); $agentData['user_id'] = $user['user_id']; $agentData['username'] = $user['username']; $agentData['password'] = $user['password']; $agentData['salt'] = $user['salt']; } $agentModel = new AreaDividendAgent(); //将数据赋值到model $agentModel->setRawAttributes($agentData); //其他字段赋值 $agentModel->uniacid = \YunShop::app()->uniacid; $agentModel->status = 1; $agentModel->agent_at = time(); $agentModel->title = request()->title; $agentModel->min_status = request()->min_status; $agentModel->min_app_id = request()->min_app_id; $agentModel->min_app_secret = request()->min_app_secret; $agentModel->min_mch_id = request()->min_mch_id; $agentModel->min_api_secret = request()->min_api_secret; if (request()->file('apiclient_cert')) $agentModel->min_apiclient_cert = $this->uploadFile('apiclient_cert', $agentModel->min_app_id); if (request()->file('apiclient_key')) $agentModel->min_apiclient_key = $this->uploadFile('apiclient_key', $agentModel->min_app_id); //字段检测 $validator = $agentModel->validator($agentModel->getAttributes()); if ($validator->fails()) { //检测失败 $this->error($validator->messages()); } else { //数据保存 if ($agentModel->save()) { $data=[ 'member_id'=>$agentData['member_id'], 'username'=>$agentData['username'], 'created_at' => time(), ]; event(new \app\common\events\plugin\AreaDividendEvent($data)); // 发送消息 $member = Member::getMemberByUid($agentModel->member_id)->with('hasOneFans')->first(); MessageService::becomeAgent($agentModel, $member->hasOneFans); //显示信息并跳转 return $this->message('添加成功', yzWebUrl('plugin.area-dividend.admin.agent')); } else { return $this->message('添加失败', '', 'error'); } } } return view('Yunshop\AreaDividend::admin.create-agent', [ 'wq_data' => $wq_data, ])->render(); } public function editAgency(){ $id = \YunShop::request()->id; $agency = AreaDividendAgent::find($id); if(!$agency) return $this->message('无此区域代理或已经删除','','error'); if ($agency->user_id) { $user = WeiQingUsers::getUserByUid($agency->user_id)->first(); if (!$user) return $this->message('微擎账号不存在','','error'); } if (request()->isMethod('post')) { $wq_data = \YunShop::request()->wq; if ($wq_data['password'] && $wq_data['password_again']) { if (trim($wq_data['password_again']) != trim($wq_data['password'])) { return $this->message('两次密码不相同', '', 'error'); } $verifyPassword = verifyPasswordStrength(trim($wq_data['password'])); if($verifyPassword !== true){ return $this->message($verifyPassword, '', 'error'); } if ($agency->user_id && $user) { WeiQingUsers::editPwd(trim($wq_data['password']), $user); return $this->message('修改密码成功', yzWebUrl('plugin.area-dividend.admin.agent')); } else { $result = WeiQingUsers::getUserByUserName(trim($wq_data['username']))->first(); if ($result) { return $this->message('用户名已存在', '', 'error'); } $user = WeiQingUsers::register(trim($wq_data['username']), $wq_data['password']); $agentData['user_id'] = $user['user_id']; $agentData['username'] = $user['username']; $agentData['password'] = $user['password']; $agentData['salt'] = $user['salt']; $agentData['user_id'] = $user['user_id']; $agency->setRawAttributes($agentData); if ($agency->save()) { //显示信息并跳转 return $this->message('账号添加成功', yzWebUrl('plugin.area-dividend.admin.agent')); } else { return $this->message('账号添加失败', '', 'error'); } } } else { if (request()->order_manage == 1) { $whereColumn = 'province_id'; if ($agency->agent_level == 4) { $whereColumn = 'street_id'; } else if ($agency->agent_level == 3) { $whereColumn = 'district_id'; } else if ($agency->agent_level == 2) { $whereColumn = 'city_id'; } $existModel = AreaDividendAgent::uniacid() ->where('agent_level', $agency->agent_level) ->where('status', 1) ->where($whereColumn, $agency->$whereColumn) ->where('manage', 1) ->where('id', '!=', $agency->id) ->first(); if ($existModel) { return $this->message('该区域下已存在[订单管理权限]的代理商', '', 'error'); } } $agency->manage = request()->order_manage; $agency->ratio = request()->ratio; $agency->has_ratio = request()->has_ratio; $agency->title = request()->title; // 支付信息修改 $agency->min_status = request()->min_status; $agency->min_app_id = request()->min_app_id; $agency->min_app_secret = request()->min_app_secret; $agency->min_mch_id = request()->min_mch_id; $agency->min_api_secret = request()->min_api_secret; if (request()->file('apiclient_cert')) $agency->min_apiclient_cert = $this->uploadFile('apiclient_cert', $agency->min_app_id); if (request()->file('apiclient_key')) $agency->min_apiclient_key = $this->uploadFile('apiclient_key', $agency->min_app_id); if (intval(request()->input('agent')['investor_uid'])) $agency->investor_uid = intval(request()->input('agent')['investor_uid']); $agency->save(); return $this->message('账号编辑成功', yzWebUrl('plugin.area-dividend.admin.agent')); } } return view('Yunshop\AreaDividend::admin.change-pwd', [ 'username' => $user->username, 'agency' => $agency->toArray() ])->render(); } public function agentApply() { $search = request()->search; if ($search) { $pageSize = 20; $list = AreaDividendAgent::getApplyAgentsBySearch($search)->paginate($pageSize); $pager = PaginationHelper::show($list->total(), $list->currentPage(), $list->perPage()); return view('Yunshop\AreaDividend::admin.apply', [ 'list' => $list->toarray(), 'pager' => $pager, ])->render(); } $pageSize = 20; $list = AreaDividendAgent::getApplyAgents()->paginate($pageSize); $pager = PaginationHelper::show($list->total(), $list->currentPage(), $list->perPage()); return view('Yunshop\AreaDividend::admin.apply', [ 'list' => $list->toarray(), 'pager' => $pager, ])->render(); } public function copeApply() { $id = \YunShop::request()->id; $status = \YunShop::request()->status; $agentModel = AreaDividendAgent::find($id); if (!$agentModel) { return $this->message('操作失败,代理商不存在!', '', 'error'); } $result = false; if ($status == '1') { if ($agentModel->username) { $user = WeiQingUsers::getUserByUserName($agentModel->username)->first(); if ($user) { return $this->message('用户名已存在,请驳回后重新申请','','error'); } } $result = static::setApplyAdopt($agentModel, $status); } elseif ($status == '-1') { $result = static::setApplyReject($agentModel, $status); } if ($result) { if ($status == '1') { $member = Member::getMemberByUid($agentModel->member_id)->with('hasOneFans')->first(); MessageService::becomeAgent($agentModel, $member->hasOneFans); } $data=[ 'member_id'=>$agentModel['member_id'], 'username'=>$agentModel['real_name'], 'created_at' => time(), ]; event(new \app\common\events\plugin\AreaDividendEvent($data)); if (app('plugins')->isEnabled('instation-message')) { //开启了站内消息插件 $agentModelNew = AreaDividendAgent::find($id); event(new \Yunshop\InstationMessage\event\AreaDividendEvent($agentModelNew)); } return $this->message('操作成功', yzWebUrl('plugin.area-dividend.admin.agent.agent-apply')); } else { return $this->message('操作失败', '', 'error'); } } protected static function setApplyAdopt($agentModel, $status) { $agentModel->status = $status; if (!empty($agentModel->username) && !empty($agentModel->password)) { $user_uid= WeiQingUsers::registerBySalt($agentModel->username, $agentModel->password, $agentModel->salt); $agentModel->user_id = $user_uid; } $agentModel->agent_at = time(); return $agentModel->save(); } protected static function setApplyReject($agentModel, $status) { $agentModel->status = $status; return $agentModel->save(); } /** * 数据导出 * */ public function export() { $file_name = date('Ymdhis', time()) . '区域代理导出'; $search = \YunShop::request()->search; $list = AreaDividendAgent::getAgents($search) ->get() ->toArray(); $export_data[0] = [ 'ID', '会员id', '会员', '姓名/手机号', '成为代理时间', '申请区域', '申请等级', '区域消费总额', '分红比例', '累计结算佣金', '已结算分红金额', '未结算分红金额' ]; foreach ($list as $key => $item) { $area = ''; if ($item['province_name']) { $area .= $item['province_name']; } if ($item['city_name']) { $area .= $item['city_name']; } if ($item['district_name']) { $area .= $item['district_name']; } if ($item['street_name']) { $area .= $item['street_name']; } $export_data[$key + 1] = [ $item['id'], $item['has_one_member']['uid'] ?: '', $item['has_one_member']['nickname'] ?: '', $item['has_one_member']['realname'].'/'.$item['has_one_member']['mobile'], $item['created_at'], $area, $item['level_name'], $item['count_order_amount']."元", $item['rate']."%", $item['count_settle_amount']."元", $item['settle_dividend_amount']."元", $item['unsettled_dividend_amount']."元" ]; } return \app\exports\ExcelService::fromArrayExport($export_data,$file_name); // 商城更新,无法使用 // \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 change() { $id = \YunShop::request()->id; $agent = AreaDividendAgent::find($id); $agentData = \YunShop::request()->value; $agentData = AgentService::setAgentData($agentData); $whereColumn = 'province_id'; if ($agentData['agent_level'] == 4) { $whereColumn = 'street_id'; } else if ($agentData['agent_level'] == 3) { $whereColumn = 'district_id'; } else if ($agentData['agent_level'] == 2) { $whereColumn = 'city_id'; } $existModel = AreaDividendAgent::uniacid() ->where('agent_level', $agentData['agent_level']) ->where('status', 1) ->where($whereColumn, $agentData[$whereColumn]) ->where('manage', 1) ->where('id', '!=', $id) ->first(); if ($existModel) { return $this->errorJson('该区域下已存在[订单管理权限]的代理商'); } else { $agent->setRawAttributes($agentData); $agent->save(); return $this->errorJson('成功'); } } public function daletedAgency() { $id = \YunShop::request()->id; $agency = AreaDividendAgent::find($id); if(!$agency) { return $this->message('无此区域代理或已经删除','','error'); } //删除登录 if ($agency->user_id) { WeiQingUsers::delUser($agency->user_id); } $result = AreaDividendAgent::daletedAgency($id); if($result) { return $this->message('删除成功',Url::absoluteWeb('plugin.area-dividend.admin.agent')); }else{ return $this->message('删除失败','','error'); } } /** * Common: 证书上传 - 仅用于区域代理中的微信小程序配置中证书文件上传 * Author: wu-hui * Time: 2023/05/31 17:08 * @param $fileKey * @param $appId * @return string * @throws ShopException */ private function uploadFile($fileKey,$appId){ $file = request()->file($fileKey); if ($file->isValid()) { //文件原名 $originalName = $file->getClientOriginalName(); //扩展名 $fileExt = $file->getClientOriginalExtension(); //临时文件的绝对路径 $realPath = $file->getRealPath(); //新文件名 $fileName = "area_pem_{$appId}_{$originalName}"; if ($fileExt != 'pem') throw new ShopException("{$originalName}文件格式错误"); $bool = Storage::disk('cert')->put($fileName, file_get_contents($realPath)); if ($bool) return storage_path("cert/{$fileName}"); } throw new ShopException("{$fileKey}.pem文件上传错误"); } }