getJsonData(); // 针对layui table自动分页请求参数,优先GET值. $queryPage = request()->has('page') ? request()->input('page', 1) : null; $queryPageSize = request()->has('page_size') ? request()->input('page_size', 10) : null; if (!is_null($queryPage)) { $inputData['page'] = $queryPage; } if (!is_null($queryPageSize)) { $inputData['page_size'] = $queryPageSize; } $rules = [ 'page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'deduction_switch' => 'nullable|integer', 'parent_uid' => 'nullable', 'uid' => 'nullable', 'username' => 'nullable', 'nick' => 'nullable', 'end_date' => 'nullable|date', 'start_date' => 'nullable|date' ]; $validator = Validator::make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $inputData['today_date'] = date('Y-m-d'); $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE; if ($pageSize > 500) { $pageSize = CommonConstant::PAGE_SIZE; } $page = format_page($inputData['page'] ?? 0); $orders = [['id', 'desc']]; $res = $agenRepo->pushCriteria(new AgentPagesCriteria($inputData)) ->pushCriteria(new OrderLimitCriteria($orders)) ->paginate($pageSize, ['*'], $page); if (!empty($inputData['start_date']) && !empty($inputData['end_date'])) { $startDate = toMongoIsoDate(Carbon::parse($inputData['start_date'])->startOfDay()->toDateTimeString()); $endDate = toMongoIsoDate(Carbon::parse($inputData['end_date'])->endOfDay()->toDateTimeString()); } $withdrawalModel = new WithDrawalLogModel(); foreach ($res->items() as &$val) { // 今日充值 $val->td_order_success_money = $val->attrsDay->td_order_success_money ?? 0; // 今日扣量金额 $val->td_deduction_money = $val->attrsDay->td_deduction_success_money ?? 0; // 今日注册 $val->td_users_total = $val->attrsDay->td_users_total ?? 0; // 今日注册扣量 $val->td_users_deduction = $val->attrsDay->td_users_deduction ?? 0; // 时间范围搜索数据 if (empty($inputData['start_date'])) { $val->all_users_total = 0; $val->add_users_deduction = 0; $val->add_deduction_success_money = 0; $val->all_success_money = 0; } else { $val->all_users_total = UsersModel::where( 'agent_uid', $val->uid)->whereBetween('created_at', [$startDate, $endDate])->count(); $val->add_users_deduction = UsersModel::where(['is_deduction' => 1, 'agent_uid' => $val->uid])->whereBetween('created_at', [$startDate, $endDate])->count(); $val->all_success_money = PayLogsModel::where( ['agent_uid' => $val->uid, 'pay_status' => 1])->whereBetween('created_at', [$startDate, $endDate])->sum('real_amount'); $val->add_deduction_success_money = PayLogsModel::where( ['agent_uid' => $val->uid, 'pay_status' => 1, 'is_deduction' => 1])->whereBetween('created_at', [$startDate, $endDate])->sum('real_amount'); } // 今日提现 $val->td_withdraw = $withdrawalModel->where([ 'status' => 3, 'agent_uid' => $val['uid'] ])->whereBetween('paid_at', [ Carbon::parse()->startOfDay()->toDateTimeString(), Carbon::parse()->endOfDay()->toDateTimeString() ])->sum('amount'); // 总充值 $val->order_success_money = $val->attrs->order_success_money ?? 0; // 总充值扣量 $val->deduction_success_money = $val->attrs->deduction_success_money ?? 0; // // 总注册 // $val->users_total = UsersModel::where('agent_uid', $val->uid)->groupBy('user_uid')->count(); // // 总注册扣量 // $val->users_deduction = UsersModel::where(['agent_uid' => $val->uid, 'is_deduction' => 1])->groupBy('user_uid')->count(); // 总注册 $val->users_total = UsersModel::where('agent_uid', $val->uid)->groupBy('user_uid')->count(); // 总注册扣量 $val->users_deduction = UsersModel::where(['agent_uid' => $val->uid, 'is_deduction' => 1])->groupBy('user_uid')->count(); // 累计提现 $val->withdraw_money = $withdrawalModel->where(['status' => 3, 'agent_uid' => $val['uid']])->sum('amount'); // cpa支出金额 $val->cps_money = ($val->users_total - $val->users_deduction) * $val->cpa_price; unset($val->attrs, $val->attrsDay, $val->everyDay); } return new AgentPagesResponse($res); } /** * 用户详情 */ public function detail() { $inputData = $this->getJsonData(); $rules = [ 'uid' => 'required|string', ]; $validator = Validator::make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $agentRepo = app(AgentRepository::class); $data = $agentRepo->findBy('uid', $inputData['uid']); $jdata = json_decode($data['jdata'], true); $data['deduction_price'] = $jdata['deduction_price'] ?? 0; $data['deduction_number'] = $jdata['deduction_number'] ?? 0; //获取代理提现银行卡 $bankRepo = app(AgentBankInfoRepository::class); $data['bank_info'] = $bankRepo->findWhere(['agent_uid' => $inputData['uid']]); return new NotIncrementIdDetailResponse($data); } /** * 创建一个代理. * @param Validator $validatorFactory * @param AgentRepository $objRepo * @return \Illuminate\Http\JsonResponse|CommonSuccessUidResponse */ public function create(Validator $validatorFactory, AgentRepository $objRepo) { $inputData = $this->getJsonData(); $rules = [ 'parent_uid' => 'nullable|max:16', 'username' => 'unique:agent,username|required|max:16', 'nick' => 'nullable|max:64', 'status' => 'in:1,2', 'password' => 'required|min:6|max:32', 'otp_screct' => 'nullable|max:32', 'own_app_uids' => 'required|string', 'withdraw_pwd' => 'nullable|max:64', 'commission_ratio' => 'required|integer|between:0,100', 'deduction_switch' => 'in:0,1,2,3', 'deduction_price' => 'nullable|string', 'deduction_number' => 'nullable|string', 'withdraw_amount' => 'nullable|integer', 'withdraw_usdt' => 'nullable|integer' ]; $validator = Validator::make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } if ($inputData['commission_ratio'] < AgentConstant::MIN_COMMISSION_RATIO || $inputData['commission_ratio'] > AgentConstant::MAX_COMMISSION_RATIO) { return json_fail('提成设置错误'); } if (empty($inputData['withdraw_pwd'])) { //如果为空就取默认值 $appRepo = app(ConfigRepoistory::class); $withdrawPwd = $appRepo->get('withdraw_pwd', 'sys'); $inputData['withdraw_pwd'] = $withdrawPwd; } if (empty($inputData['withdraw_pwd'])) { //如果为空就取默认值 $appRepo = app(ConfigRepoistory::class); $withdrawPwd = $appRepo->get('withdraw_pwd', 'sys'); $inputData['withdraw_pwd'] = $withdrawPwd; } if (empty($inputData['withdraw_amount'])) { $inputData['withdraw_amount'] = 0; } if (empty($inputData['withdraw_usdt'])) { $inputData['withdraw_usdt'] = 0; } $item = [ 'username' => $inputData['username'], 'nick' => $inputData['nick'] ?? '', 'password' => $inputData['password'], 'status' => $inputData['status'], 'otp_screct' => $inputData['otp_screct'] ?? '', 'parent_uid' => $inputData['parent_uid'] ?? '', 'withdraw_pwd' => $inputData['withdraw_pwd'], 'own_app_uids' => $inputData['own_app_uids'], 'commission_ratio' => $inputData['commission_ratio'], 'deduction_switch' => $inputData['deduction_switch'], 'preferential_order' => $inputData['preferential_order'] ?: 0, 'jdata' => $inputData['jdata'], 'cpa_deduction_rule' => $inputData['cpa_deduction_rule'], 'cpa_price' => $inputData['cpa_price'] ?: 0, 'withdraw_amount' => $inputData['withdraw_amount'], 'withdraw_usdt' => $inputData['withdraw_usdt'], ]; $agentObj = $objRepo->createOne($item); $respData = [ 'uid' => $agentObj->uid, ]; //创建渠道 $chanRepo = app(ChannelRepository::class); $chanRepo->createAgentChannel($agentObj->uid); return new CommonSuccessUidResponse($respData); } public function checkUsername() { $inputData = $this->getJsonData(); $rules = [ 'username' => 'unique:agent,username|required|max:16', ]; $message = [ 'username.unique' => '账号已存在!', 'username.required' => '用户名不能为空!', 'username.max' => '用户名不能大于16字节!' ]; $validator = Validator::make($inputData, $rules, $message); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } return json_fail('用户名可用!', 200, []); } /** * 修改代理. * @param Validator $validatorFactory * @param AgentRepository $objRepo * @return \Illuminate\Http\JsonResponse|CommonSuccessUidResponse * @throws \App\Exceptions\ApiException */ public function modify(Validator $validatorFactory, AgentRepository $objRepo) { $inputData = $this->getJsonData(); $rules = [ 'uid' => 'required', 'nick' => 'required|max:64', 'password' => 'nullable|min:6|max:32', 'withdraw_pwd' => 'nullable|max:64', 'own_app_uids' => 'required|string', 'status' => 'in:1,2', 'commission_ratio' => 'required|integer|between:0,100', 'deduction_switch' => 'in:0,1,2,3', 'deduction_price' => 'nullable|string', 'deduction_number' => 'nullable|string', 'withdraw_amount' => 'nullable|integer', 'withdraw_usdt' => 'nullable|integer' ]; $validator = Validator::make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } if ($inputData['commission_ratio'] < AgentConstant::MIN_COMMISSION_RATIO || $inputData['commission_ratio'] > AgentConstant::MAX_COMMISSION_RATIO) { return json_fail('提成设置错误'); } if (empty($inputData['withdraw_amount'])) { $inputData['withdraw_amount'] = 0; } if (empty($inputData['withdraw_usdt'])) { $inputData['withdraw_usdt'] = 0; } $item = [ 'nick' => $inputData['nick'] ?? '', 'status' => $inputData['status'], 'password' => $inputData['password'] ?? null, 'withdraw_pwd' => $inputData['withdraw_pwd'] ?? null, 'parent_uid' => $inputData['parent_uid'] ?? '', 'own_app_uids' => $inputData['own_app_uids'], 'commission_ratio' => $inputData['commission_ratio'], 'deduction_switch' => $inputData['deduction_switch'], 'preferential_order' => $inputData['preferential_order'] ?: 0, 'cpa_deduction_rule' => $inputData['cpa_deduction_rule'], 'cpa_price' => $inputData['cpa_price'], 'withdraw_amount' => $inputData['withdraw_amount'], 'withdraw_usdt' => $inputData['withdraw_usdt'], 'jdata' => $inputData['jdata'] ]; $saveResult = $objRepo->updateOne($item, $inputData['uid']); if (!$saveResult) { return json_fail('修改失败'); } $objRepo->delAgentRuleCache($inputData['uid']); return new CommonSuccessUidResponse($inputData['uid']); } public function editStatus(Validator $validatorFactory, AgentRepository $objRepo) { $inputData = $this->getJsonData(); $rules = [ 'uid' => 'required|string' ]; $validator = Validator::make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $user = $objRepo->findBy('uid', $inputData['uid']); if (empty($user)) { return json_fail(trans('common.err_resource_not_found')); } $oldUser = clone $user; $user->status = $user->status === 1 ? 2 : 1; $result = $user->save(); if (!$result) { return json_fail('修改失败'); } else { $logSubject = '编辑一个代理状态, UID:' . $user->uid; $logSvalue = $user->uid; $logDbData = [ 'after_items' => [ $user->toArray(), ], 'before_items' => [ $oldUser->toArray(), ], ]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessUidResponse($user->uid); } } /** * 修改代理提现账户 * * @return \Illuminate\Http\JsonResponse|CommonSuccessUidResponse */ public function editAgentBank() { $inputData = $this->getJsonData(); $rules = [ 'type' => 'required|integer', 'agent_uid' => 'required|string', 'bank_card' => 'required|string', 'bank_account' => 'required|string', ]; $validator = Validator::make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } /** * @var AgentBankInfoRepository */ $agentBankRepo = app(AgentBankInfoRepository::class); $bankInfo = $agentBankRepo->findBy('agent_uid', $inputData['agent_uid']); if (empty($bankInfo)) { return json_fail(trans('common.err_resource_not_found')); } $oldbankInfo = clone $bankInfo; if (!empty($inputData['type'])) { $bankInfo->type = trim($inputData['type']); } if (!empty($inputData['bank_card'])) { $bankInfo->bank_card = trim($inputData['bank_card']); } if (!empty($inputData['bank_account'])) { $bankInfo->bank_account = trim($inputData['bank_account']); } $result = $bankInfo->save(); if (!$result) { return json_fail('修改失败'); } else { $logSubject = '修改一个代理的提现方式,开户方式:' . $bankInfo->type; $logSvalue = $bankInfo->uid; $logDbData = [ 'after_items' => [ $bankInfo->toArray(), ], 'before_items' => [ $oldbankInfo->toArray(), ], ]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessUidResponse($bankInfo->uid); } } public function channelList() { $inputData = $this->getJsonData(); $rules = [ 'uid' => 'nullable|string', 'agent_uid' => 'nullable|string', 'mom_app_uid' => 'nullable|string', ]; $validator = Validator::make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $orders = [ ['id', 'DESC'], ]; // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate); $page = request()->has('page') ? request()->input('page', 1) : null; $pageSize = request()->has('page_size') ? request()->input('page_size', 10) : null; if ($pageSize > 500) { $pageSize = CommonConstant::PAGE_SIZE; } /** * @var ChannelRepository $videoRepo */ $channelRepo = app(ChannelRepository::class); $res = $channelRepo->pushCriteria(new ChannelPagesCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders)) ->paginate($pageSize, ['*'], $page); $shareUrlData = app(ShareUrlsRepository::class)->findWhere(['status' => 1], ['mom_app_uid', 'url'])->toArray(); $shareUrlData = array_column($shareUrlData, null, 'mom_app_uid'); foreach ($res->items() as &$val) { if (isset($shareUrlData[$val->mom_app_uid])) { $val->share_url = $shareUrlData[$val->mom_app_uid]['url'] . '?channel_code=' . $val->uid; } else { $val->share_url = ''; } } return new CommonAllResponse($res); } /** * 打包 * @return \Illuminate\Http\JsonResponse|void */ public function channelPack() { $inputData = $this->getJsonData(); $rules = [ 'uid' => 'required', ]; $validator = Validator::make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } // 查找渠道开始打包 /** * 获取渠道app * @var ChannelRepository $channRepo */ $channelRepo = app(ChannelRepository::class); $channelData = $channelRepo->getAppChannel($inputData['uid']); $packArray =[ 'agent_uid'=>$channelData->agent_uid, 'channel_code'=>$channelData->uid, 'mom_app_name'=>$channelData->app->name, 'mom_app_uid'=>$channelData->app->uid, 'mom_app_id'=>$channelData->app->app_id, 'android_or_ios'=>1, 'mom_app_download'=>$channelData->app->android_url, 'mom_app_version'=>$channelData->app->android_version, ]; $packCreateData = $packArray; // 数据库格式 unset($packCreateData['mom_app_download']); $packCreateData['app_download'] = ''; $packCreateData['status'] = 3;// 打包中 // 写入数据库 $packModel = (new PackModel())->where('channel_code',$inputData['uid'])->count(); if ($packModel){ if (!PackModel::query()->where('channel_code',$inputData['uid'])->update($packCreateData)){ return json_success([],'打包失败请重试'); } }else{ if (!PackModel::query()->create($packCreateData)){ return json_success([],'打包失败请重试'); } } // 打包 dispatch(new AppPackJob($packArray))->onQueue('app_pack'); return json_success([],'开始打包,稍等1-2分钟'); } }