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', 'user_uid' => 'nullable|string', 'user_name' => 'nullable|string', 'pay_type' => 'nullable|string', 'order_status' => 'nullable|integer', 'mom_app_uid' => 'nullable|string', 'order_sn' => 'nullable|string', 'start_date' => 'nullable|string', 'end_date' => 'nullable|string', ]; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $orders = [ ['created_at', 'DESC'], ]; if (!isset($inputData['page_size']) || $inputData['page_size'] > 500) { $pageSize = CommonConstant::PAGE_SIZE; } else { $pageSize = $inputData['page_size']; } $page = format_page($inputData['page'] ?? 0); $field = ['order_sn', 'user_uid', 'mom_app_uid', 'nick', 'agent_uid', 'real_amount', 'order_status', 'pay_channel', 'order_sn', 'created_at', 'paid_at', 'pay_type']; $res = $payRepo->pushCriteria(new FinanceRechargeCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page); $recTotal = $this->rechargeTotal($inputData, $res); return new FinanceRechargePageResponse($res, $recTotal); } /** * 提现列表 * * @return \Illuminate\Http\JsonResponse|FinanceWithdrawResponse */ public function withdrawList() { /** * @var Validator $validatorFactory */ $validatorFactory = app('validator'); /** * @var WithDrawalLogRepository $witRepo */ $witRepo = app(WithDrawalLogRepository::class); $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', 'agent_username' => 'nullable|string', 'status' => 'nullable|integer', 'type' => 'nullable|integer', 'start_date' => 'nullable|string', 'end_date' => 'nullable|string', 'order' => 'nullable|string', ]; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } if (empty($inputData['order'])) { $orders = [ ['id', 'DESC'] ]; } else { $orderMap = explode('-', $inputData['order']); $orders = [[$orderMap[0], $orderMap[1]]]; } if (!isset($inputData['page_size']) || $inputData['page_size'] > 500) { $pageSize = CommonConstant::PAGE_SIZE; } else { $pageSize = $inputData['page_size']; } $page = format_page($inputData['page'] ?? 0); $res = $witRepo->pushCriteria(new FinanceWithdrawCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page); $withdrawTotal = $this->withdrawTotal($inputData, $res); return new FinanceWithdrawResponse($res, $withdrawTotal); } /** * 提现操作 * * @return \Illuminate\Http\JsonResponse|ConfigSuccessResponse * @throws \Exception */ public function applyWithdraw() { $inputData = $this->getJsonData(); $rules = [ 'order_uid' => 'required|string', 'status' => 'required|integer|in:1,3' ]; $validator = Validator::make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } /** * @var WithDrawalLogRepository $witRepo */ $witRepo = app(WithDrawalLogRepository::class); /** * @var AgentRepository $witRepo */ $agentRepo = app(AgentRepository::class); /** * @var BalanceLogRepository $bLogRepo */ $bLogRepo = app(BalanceLogRepository::class); $witOrder = $witRepo->getOrderFirst($inputData['order_uid']); if (empty($witOrder)) { return json_fail('订单状态异常'); } $agent = $agentRepo->findBy('uid', $witOrder->agent_uid); if (empty($agent)) { return json_fail('代理账户不存在'); } $oldAgent = clone $agent; //开启事物 DB::beginTransaction(); if ($inputData['status'] == 1) { //拒绝 $agent->balance += $witOrder->amount; } $agent->frozen -= $witOrder->amount; $res = $agent->save(); //修改订单状态 $res1 = $witRepo->update(['status' => $inputData['status'], 'paid_at' => date('Y-m-d H:i:s')], $inputData['order_uid'], 'uid'); if (!$res || !$res1) { DB::rollBack(); return json_fail('操作失败'); } $res2 = $bLogRepo->record($agent, $oldAgent); if (!$res2) { DB::rollBack(); return json_fail('帐变写入失败'); } DB::commit(); return new ConfigSuccessResponse(); } /** * 删除提现银行卡 * * @param AgentBankInfoRepository $bankRepo * @return \Illuminate\Http\JsonResponse|CommonSuccessUidResponse */ public function withdrawBankDel(AgentBankInfoRepository $bankRepo) { $inputData = $this->getJsonData(); $rules = [ 'uid' => 'required|string', ]; $validator = Validator::make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $bankInfo = $bankRepo->findBy('uid', $inputData['uid']); if (empty($bankInfo)) { return json_fail(trans('common.err_resource_not_found')); } $oldBankInfo = clone $bankInfo; $result = $bankInfo->delete(); if (!$result) { return json_fail('删除失败'); } else { $logSubject = '删除一个提现银行卡,uid:' . $bankInfo->uid; $logSvalue = $bankInfo->uid; $logDbData = [ 'after_items' => [ ], 'before_items' => [ $oldBankInfo->toArray(), ], ]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessUidResponse($bankInfo->uid); } } /** * 提现统计计算 * * @param $inputData * @param $res * @return array */ private function withdrawTotal($inputData, $res) { unset($inputData['page']); unset($inputData['page_size']); if (empty($inputData)) { $witTotal['unpaid_amount'] = WithDrawalLogModel::where('status', '<>', 3)->sum('amount'); } else { $data = $res->toArray()['data']; $unpaidAmount = 0; foreach ($data as $val) { $unpaidAmount += $val['amount']; } $witTotal['today_amount'] = $unpaidAmount; } $witTotal['today_amount'] = WithDrawalLogModel::query()->where('status', 3)->whereBetween('created_at', [Carbon::parse(date('Y-m-d') . ' 00:00:00'), Carbon::parse(date('Y-m-d') . ' 23:59:59')])->sum('amount'); return $witTotal; } /** * 充值统计计算(如果没有查询条件就统计当日的数据) * * @param $inputData * @param $res */ private function rechargeTotal($inputData, $res) { unset($inputData['page']); unset($inputData['page_size']); $data = $res->toArray()['data']; if (empty($inputData)) { $field = ['order_status', 'real_amount']; $data = PayLogsModel::query()->whereBetween('created_at', [Carbon::parse(date('Y-m-d') . ' 00:00:00'), Carbon::parse(date('Y-m-d') . ' 23:59:59')])->get($field)->toArray(); } $succInt = 0; $orderInt = 0; $recTotal['total_money'] = 0; $recTotal['succ_money'] = 0; foreach ($data as $v) { if ($v['order_status'] == 1) { $succInt++; $recTotal['succ_money'] += $v['real_amount']; } $recTotal['total_money'] += $v['real_amount']; $orderInt ++; } $recTotal['succ_int'] = $succInt; $recTotal['order_int'] = $orderInt; // 成功率 = 成功的订单 / 总订单 if ($succInt == 0) { $recTotal['succ_rate'] = 0; } else { //精度问题 2 / 14 * 100 $recTotal['succ_rate'] = floor(round($succInt / $orderInt, 2) * 100); } return $recTotal; } }