getJsonData(); $rules = [ 'page' => 'required|integer', 'page_size' => 'required|integer', 'order_sn' => 'nullable|string', 'merchant_uid' => 'nullable|string', 'status' => 'nullable|in:1,2' ]; $validator = app('validator')->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE; if ($pageSize > 500) { $pageSize = CommonConstant::PAGE_SIZE; } $page = format_page($inputData['page'] ?? 0); $model = OrderModel::query(); if (!empty($inputData['status'])) { $model = $model->where('status', $inputData['status']); } if (!empty($inputData['order_sn'])) { $model = $model->where('order_sn', $inputData['order_sn']); } if (!empty($inputData['merchant_order_sn'])) { $model = $model->where('merchant_order_sn', $inputData['merchant_order_sn']); } if (!empty($inputData['merchant_uid'])) { $model = $model->where('merchant_uid', $inputData['merchant_uid']); } if (!empty($inputData['start_date']) && !empty($inputData['end_date'])) { $model = $model->whereBetween('created_at', [$inputData['start_date'], $inputData['end_date']]); } $lists = $model->orderByDesc('created_at')->paginate($pageSize, ['*'], 'page', $page); $res = []; foreach ($lists->items() as $k => $v) { $res['data'][$k]['order_sn'] = $v->order_sn; $res['data'][$k]['merchant_order_sn'] = $v->merchant_order_sn; $res['data'][$k]['merchant_name'] = $v->merchant->username ?? ''; $res['data'][$k]['order_amount'] = $v->order_amount; $res['data'][$k]['real_amount'] = $v->real_amount; $res['data'][$k]['status'] = $v->status; $res['data'][$k]['pay_type'] = $v->pay_type; $res['data'][$k]['notice_status'] = $v->notice_status; $res['data'][$k]['payment_name'] = $v->payment->name ?? ''; $res['data'][$k]['payment_attr_name'] = $v->paymentAttr->name ?? ''; $res['data'][$k]['created_at'] = !empty($v->created_at) ? Carbon::parse($v->created_at)->format('Y-m-d H:i:s') : $v->created_at; $res['data'][$k]['updated_at'] = !empty($v->updated_at) ? Carbon::parse($v->updated_at)->format('Y-m-d H:i:s') : $v->updated_at; $res['data'][$k]['notice_at'] = !empty($v->notice_at) ? Carbon::parse($v->notice_at)->format('Y-m-d H:i:s') : $v->notice_at; } $res['total'] = $lists->total(); return json_success($res); } /** * 补单 * * @return \Illuminate\Http\JsonResponse|mixed * @throws \Illuminate\Contracts\Container\BindingResolutionException */ public function again() { $inputData = $this->getJsonData(); $rules = [ 'order_sn' => 'required|string', ]; $validator = app('validator')->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $orderInfo = OrderModel::query()->where('order_sn', $inputData['order_sn'])->first(); if (empty($orderInfo)) { return json_fail('订单不存在!'); } if ($orderInfo->status == 2) { return json_fail('请勿重复补单!'); } $orderInfo->status = 2; $orderInfo->remark = '手动补单'; if ($orderInfo->save()) { // 统计事件 event(new PayTotalEvent($orderInfo->merchant_uid, $orderInfo->payment_uid, $orderInfo->payment_attr_uid, $orderInfo->real_amount, 2)); $noticeRes = app(OrderRepository::class)->sendSuccessCallback($inputData['order_sn']); if ($noticeRes) { return json_success('补单成功,并通知成功'); } else { return json_success('补单成功,通知失败'); } } else { return json_fail('补单失败'); } } /** * 发送回调 * * @return \Illuminate\Http\JsonResponse|mixed * @throws \Illuminate\Contracts\Container\BindingResolutionException */ public function sendNotify() { $inputData = $this->getJsonData(); $rules = [ 'order_sn' => 'required|string', ]; $validator = app('validator')->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $res = app(OrderRepository::class)->sendSuccessCallback($inputData['order_sn']); if ($res) { return json_success('通知成功'); } else { return json_fail('通知失败'); } } /** * 通道统计 * * @return \Illuminate\Http\JsonResponse|mixed * @throws \Illuminate\Contracts\Container\BindingResolutionException */ public function channelTotal() { $inputData = $this->getJsonData(); $rules = [ 'page' => 'required|integer', 'page_size' => 'required|integer', 'payment_uid' => 'nullable|string', 'start_date' => 'nullable|date', 'end_date' => 'nullable|date', ]; $validator = app('validator')->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $model = PayTotalModel::query()->selectRaw("sum(total_order) as total_order, sum(success_order) as success_order, sum(total_amount) as total_amount, sum(success_amount) as success_amount, merchant_uid, date, payment_attr_uid, payment_uid"); if (!empty($inputData['payment_uid'])) { $model = $model->where('payment_uid', $inputData['payment_uid']); } if (!empty($inputData['start_date']) && !empty($inputData['end_date'])) { $model = $model->whereBetween('created_at', [$inputData['start_date'], $inputData['end_date']]); } $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE; if ($pageSize > 500) { $pageSize = CommonConstant::PAGE_SIZE; } $page = format_page($inputData['page'] ?? 0); $lists = $model->groupBy('payment_attr_uid', 'date')->orderByDesc('date')->paginate($pageSize, ['*'], 'page', $page); $res = []; foreach ($lists->items() as $k => $val) { $res['data'][$k]['payment_name'] = $val->payment->name ?? ''; $res['data'][$k]['payment_attr_name'] = $val->paymentAttr->name ?? ''; $res['data'][$k]['total_order'] = $val->total_order; $res['data'][$k]['success_order'] = $val->success_order; $res['data'][$k]['total_amount'] = $val->total_amount; $res['data'][$k]['success_amount'] = $val->success_amount; $prob = round($val->success_order / $val->total_order, 2); $res['data'][$k]['success_prob'] = round($prob * 100); $res['data'][$k]['date'] = $val->date; } $res['total'] = $lists->total(); return json_success($res); } /** * 商户统计 * * @return \Illuminate\Http\JsonResponse|mixed * @throws \Illuminate\Contracts\Container\BindingResolutionException */ public function merchantTotal() { $inputData = $this->getJsonData(); $rules = [ 'page' => 'required|integer', 'page_size' => 'required|integer', 'merchant_uid' => 'nullable|string', 'start_date' => 'nullable|date', 'end_date' => 'nullable|date', ]; $validator = app('validator')->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $model = PayTotalModel::query()->selectRaw("sum(total_order) as total_order, sum(success_order) as success_order, sum(total_amount) as total_amount, sum(success_amount) as success_amount, merchant_uid, date"); if (!empty($inputData['merchant_uid'])) { $model = $model->where('merchant_uid', $inputData['merchant_uid']); } if (!empty($inputData['start_date']) && !empty($inputData['end_date'])) { $model = $model->whereBetween('created_at', [$inputData['start_date'], $inputData['end_date']]); } $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE; if ($pageSize > 500) { $pageSize = CommonConstant::PAGE_SIZE; } $page = format_page($inputData['page'] ?? 0); $lists = $model->orderByDesc('date')->groupBy('merchant_uid', 'date')->paginate($pageSize, ["*"], 'page', $page); $res = []; foreach ($lists->items() as $k => $val) { $res['data'][$k]['merchant_name'] = $val->merchant->username; $res['data'][$k]['total_order'] = $val->total_order; $res['data'][$k]['success_order'] = $val->success_order; $res['data'][$k]['total_amount'] = $val->total_amount; $res['data'][$k]['success_amount'] = $val->success_amount; $prob = round($val->success_order / $val->total_order, 2); $res['data'][$k]['success_prob'] = round($prob * 100); $res['data'][$k]['date'] = $val->date; } $res['total'] = $lists->total(); return json_success($res); } }