pages = [ 'name' => '商户' ]; } public function shareData($id = '') { write_merchant_ratio(); $gateways = Gateway::where('is_checked', 1)->orderBy('ename', 'desc')->orderBy('client_type', 'desc')->get();// $arr = []; if (count($gateways) > 0) { foreach ($gateways as $k => $v) { $arr[$v->ename]['name']=config('adconfig.pay_type')[$v->ename]; $arr[$v->ename]['data'][]=$v; } } //上级是否存在 $from_id = \request()->input('from_id'); $from_name = ''; if ($from_id) { // $uobj = Merchant::find($from_id); $from_name = $uobj['name'] ?: ''; } return [ 'gateways' => $arr, 'level' => config('adconfig.merchant_level'), 'bank' => Bank::where(['is_checked' => 1])->pluck('name', 'id'), 'draw_type' => config('adconfig.draw_type'), 'from_id' => $from_id, 'from_name' => $from_name ]; } public function checkRule($id = '') { if (!$id) { return [ 'name' => 'required', 'email' => 'required|unique:merchants|max:255', 'total_price' => 'required', //'ratio' => 'required', ]; } return [ 'name' => 'required', 'email' => 'required', 'total_price' => 'required', //'ratio' => 'required', ]; } public function extendValidate($request, $model, $id) { $level = $request->input('level'); $from_id = $request->input('from_id'); //禁止使用qq /* if (stripos($request->input('email'), '@qq.com')) { return $this->errorJosn('禁止使用QQ邮箱'); }*/ if ($from_id) { //等级判断股东下不能再有上级 if ($level == 1) { return $this->errorJosn('股东下不能再有上级'); } //判断上级费率,不能低于 $proxy = Merchant::find($request->input('from_id')); if ($request->input('ratio') <= $proxy->ratio) { return $this->errorJosn('设置费率,不能低于上级费率:' . $proxy->ratio); } //股东不能再添加股东 //代理不能再添加代理 if ($level == $proxy->level) { return $this->errorJosn('同级别是不能再添加同级别的'); } //身份低的不能添加高的 if ($level < $proxy->level) { return $this->errorJosn('身份等级不匹配,可能是代理或股东是不能再添加代理或股东的'); } } if ($id) { if ($id == $request->input('from_id')) { return $this->errorJosn('不能是自己'); } } } protected function postDataDb($request, $id = '') { $data = $request->all(); if (!$id) { $data['app_key'] = date('YmdHis') . str_random(6); $data['token'] = str_random(32); } //如果上级代理不是0,则需要计算上级代理的费率 if ($data['from_id'] != 0) { $proxy = Merchant::find($data['from_id']); $data['next_ratio'] = $proxy->ratio;//上级代理费率 } if (!$request->input('password')) { unset($data['password']); } else { $data['origin_password'] = $data['password']; } if (isset($data['gateways'])) { $data['gateways_id'] = implode(",", $data['gateways']); }else { $data['gateways_id']=0; } //全部不选则为0 if(isset($data['all_waygate'])) { if($data['all_waygate']==1) { $data['gateways_id']=0; } } //添加的时候需要开启 if (!$id) { $data['begindb'] = 1;//开启事务 } return $data; } protected function updateMerchantRatio($merchant) { //取得费率表信息 $ratio = MerchantRatio::where('merchant_id', $merchant->id)->where('is_self', 1)->first(); //判断上级是否有上级 $upObj = Merchant::find($merchant->from_id); $hierarchy = 1;//默认1级,表示顶级 if ($upObj) { if ($upObj->from_id != 0) { $hierarchy = 3; } else { //没有上级,则只有2级别 $hierarchy = 2; } } //层级不一样了,判断谁的层级高一点 //全部删除,重新添加 MerchantRatio::where('merchant_id', $merchant->id)->delete(); //重新添加 //判断层级 if ($hierarchy == 3) { //3级关系级别 return MerchantRatio::addDefault($merchant->from_id, $merchant->id, $merchant->ratio); } elseif ($hierarchy == 2) { //代理级别 if($merchant->level==2) { //代理级别 return MerchantRatio::addProxyLevel($merchant->from_id, $merchant->id, $merchant->ratio); }else { //商户级别 return MerchantRatio::add($merchant->from_id, $merchant->level, 2, $merchant->id, $merchant->ratio); } } elseif ($hierarchy == 1) { //普通级别 return MerchantRatio::add(0, $merchant->level, 1, $merchant->id, $merchant->ratio); } /* //判断层级是否一样且父没有更换,如果是的话,只需要更新,无需删除和添加操作 if($hierarchy==$ratio->hierarchy && $merchant->from_id==$ratio->parent_id) { MerchantRatio::where('merchant_id',$merchant->id)->update(['hierarchy'=>$hierarchy,'ratio'=>$merchant->ratio,'parent_id'=>$merchant->from_id,'level'=>$merchant->level]);// }else { }*/ } protected function saveAfter($request, $model, $id = '') { //$this->insertBank($request->input('bank'),$model->id,$id); //创建钱包记录 $this->crateWallte($request, $model); //判断等级, $level = $request->input('level'); $from_id = $request->input('from_id'); //添加操作 if ($id) { //更新 //当前的身份等级 $this->updateMerchantRatio($model); } else { //上级ID存在 if ($from_id) { //等级判断 if ($level == 2) { //代理级别添加 return MerchantRatio::addProxyLevel($from_id, $model->id, $request->input('ratio')); } //如果添加是商户 if ($level == 3) { return MerchantRatio::addDefault($from_id, $model->id, $model->ratio); } } else { //普通用户,普通代理,普通股东 return MerchantRatio::add(0, $level, 1, $model->id, $request->input('ratio')); } } write_merchant();//写入配置文件 //写入费率信息 write_merchant_ratio(); } public function crateWallte(Request $request, $model) { $obj = new MerchantWallet(); //判断是否存在,如果存在不需要再创建 $has = $obj->where('merchant_id', $model->id)->first(); if (!$has) { MerchantWallet::firstOrCreate(['merchant_id' => $model->id]); } } public function insertBank($arr, $id = '', $is_del = 0) { if (count($arr) <= 0) { return false; } $insert_m_data = []; if ($is_del) { //删除之前的 BankRel::where(['model_id' => $id, 'model_type' => 'merchant', 'is_default' => 1])->delete(); } //插入关联表 $insert_m_data = $arr; $insert_m_data['model_id'] = $id; $insert_m_data['model_type'] = 'merchant'; $insert_m_data['is_default'] = 1; BankRel::insert($insert_m_data); } public function setErrorMsg() { $messages = [ ]; return $messages; } public function setModel() { return new Merchant(); } protected function getShow($id) { $show = $this->setModel()->find($id); if (!$show) { return abort(404); } view()->share('show', $show); //申请提现资金 $data['draw_money_wait_number'] = DrawMoney::getDrawMoney(['status_in' => [0, 2]]); $day_seizure = $this->daySeizure($id); $data['today_money'] = $day_seizure['day_total_money']; $data['day_seizure_money'] = $day_seizure['day_seizure_money']; $data = $data + $this->shareData(); return $this->display($data); } //每天扣押款 public function daySeizure($merchant_id) { //统计今天成就结算总额 $to_day_total_money = Order::getMerchantTotalToDayMoney($merchant_id, 1); $day_seizure_money = 0; //每天押款多少比率 if ($to_day_total_money > 0) { $day_seizure_ratio = config_cache('draw_config.draw_day_money_ratio') ? config_cache('draw_config.draw_day_money_ratio') : 0; $day_seizure_money = round($to_day_total_money * $day_seizure_ratio / 100, 2); } return ['day_total_money' => $to_day_total_money, 'day_seizure_money' => $day_seizure_money]; } public function createGroupBtn($id, $prev_id, $level, $msg, $color = 'default') { return ''; } public function createGroupBackBtn($id, $prev_id, $level, $msg, $color = 'default') { return ''; } public function createGroupAddBtn($id, $msg, $color = 'danger') { return ''; } public function apiJson(Request $request) { $offset = $request->input('page', 1); $pagesize = $request->input('limit', 1); $offset = ($offset - 1) * $pagesize; $order_id = $request->input('sort', 'id'); $order_type = $request->input('order', 'desc'); $debug = $request->input('debug', 0); $param = $request->all(); $prev_id = $request->input('prev_id', 0); $level = $request->input('level', ''); //搜索集合地 $search = (new SearchServices($this->setModel(), $param)); $model = $search->getList(); $total = $model->count(); $result = $model->with(['wallets', 'froms' => function ($query) { //再来嵌套一个 $query->with('froms'); }])->skip($offset)->orderBy($order_id, $order_type)->orderBy('id', 'desc')->take($pagesize)->get();; $narr = array(); foreach ($result as $k => $v) { $v['edit_url'] = action($this->route['controller_name'] . '@edit', ['id' => $v->id]); $v['edit_post_url'] = action($this->route['controller_name'] . '@update', ['id' => $v->id]); $v['show_url'] = action($this->route['controller_name'] . '@show', ['id' => $v->id]); /* $v['bank_name']=$v->getDefaultBank['name']; $v['bank_account']=$v->getDefaultBank['account']; $v['bank_realname']=$v->getDefaultBank['realname'];*/ $v['money'] = $v->wallets['money']; $v['draw_money'] = $v->wallets['draw_money']; $v['other_money'] = $v->wallets['other_money']; $v['total_money'] = $v->wallets['total_money']; $v['check_status_name2'] = $v->check_status != 1 ? '' . $v->CheckStatusName . '' : $v->CheckStatusName; $v['name_tpl'] = $v->name; $from_name = ''; if ($v->froms['name']) { $from_name = '

上级:' . $v->froms['name'] . '

'; if ($v->froms['froms']['name']) { $from_name .= '

顶级:' . $v->froms['froms']['name'] . '

'; } } $btn = ''; $back_id = $prev_id; if ($v->level == 3) { $level = $v->level - 1; } if ($v->level == 2) { $back_id = 0; } $back_btn = $this->createGroupBackBtn($back_id, $v->from_id, $level, '返回'); //全部列表不显示按钮 if (!$request->input('is_all')) { if (!$v->from_id) { $back_btn = ''; } //股东上面才有上下级 if ($v->level == 1) { $btn = '
' . $this->createGroupBtn($v->id, $v->from_id, 2, '下级代理') . $back_btn . $this->createGroupBtn($v->id, $v->from_id, 3, '下级商户') . $this->createGroupAddBtn($v->id, '添加下级') . '
'; } if ($v->level == 2) { $btn = '
' . $this->createGroupBtn($v->id, $v->from_id, 3, '下级商户') . $back_btn . $this->createGroupAddBtn($v->id, '添加下级') . '
'; } if ($v->level == 3) { if ($v->from_id) { $btn = '
' . $back_btn . '
'; } } } $color = 'layui-bg-green'; if ($v->level == 1) { $color = 'layui-bg-cyan'; } elseif ($v->level == 2) { $color = 'layui-bg-blue'; } $v['level_name_label'] = '' . $v->levelName . ' '; $v['name'] = '

' . $v->name . '

' . $from_name . '

邮箱:' . $v->email . '

' . $btn; $v['post_check_url'] = action($this->route['controller_name'] . '@checkHandle', ['id' => $v->id]); $narr[] = $v; } $json = [ "pid" => $prev_id, "level" => $level, "status" => 1, 'code' => $total > 0 ? 0 : 1, 'msg' => $total > 0 ? '请求数据成功' : '暂无数据', 'count' => $total, 'data' => $narr ]; if ($debug) { return $this->jsonDebug($json); } return response()->json($json); } public function checkHandle($id, Request $request) { $value = $request->input('value'); $data = [ 'check_status' => $value ]; $r = $this->setModel()::where('id', $id)->update($data); if ($r) { //更新 write_merchant(); $this->insertLog('审核商户申请状态,状态设置为', $value); return $this->jsonMsg(0, '审核操作成功'); } else { $this->insertLog('审核商户申请状态,状态设置为', $value); return $this->jsonMsg(1, '审核操作失败'); } } }