| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537 |
- <?php
- namespace Modules\ManageApi\Controllers;
- use App\Constants\AgentConstant;
- use App\Constants\CommonConstant;
- use App\Jobs\AppPackJob;
- use App\Models\Mongo\PayLogsModel;
- use App\Models\Mongo\UsersModel;
- use App\Models\Mysql\AgentAttrsModel;
- use App\Models\Mysql\AgentModel;
- use App\Models\Mysql\PackModel;
- use App\Models\Mysql\WithDrawalLogModel;
- use App\Repositories\AgentBankInfoRepository;
- use App\Repositories\AgentRepository;
- use App\Repositories\AppRepository;
- use App\Repositories\ChannelRepository;
- use App\Repositories\ConfigRepoistory;
- use App\Repositories\Criterias\AgentPagesCriteria;
- use App\Repositories\Criterias\ChannelPagesCriteria;
- use App\Repositories\Criterias\OrderLimitCriteria;
- use App\Repositories\ShareUrlsRepository;
- use Carbon\Carbon;
- use Grpc\Channel;
- use Illuminate\Support\Facades\Validator;
- use Modules\ManageApi\Responses\AgentPagesResponse;
- use Modules\ManageApi\Responses\CommonAllResponse;
- use Modules\ManageApi\Responses\CommonSuccessUidResponse;
- use Modules\ManageApi\Responses\NotIncrementIdDetailResponse;
- class AgentController extends BaseController
- {
- public function lists(AgentRepository $agenRepo)
- {
- $inputData = $this->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分钟');
- }
- }
|