gorden 6 月之前
父节点
当前提交
07e00ca544

+ 79 - 1
app/admin/controller/finance/WithdrawalListController.php

@@ -29,6 +29,12 @@ class WithdrawalListController extends Curd
         [$where, $format, $limit, $field, $order] = $this->selectInput($request);
         $order = $request->get('order', 'desc');
         $field = $field ?? 'member_account_list_addtimes';
+
+        if (!empty($where['member_account_list_addtimes'])) {
+            $where['member_account_list_addtimes'][0] = strtotime($where['member_account_list_addtimes'][0]);
+            $where['member_account_list_addtimes'][1] = strtotime($where['member_account_list_addtimes'][1]);
+        }
+
         $query = $this->doSelect($where, $field, $order);
         return $this->doFormat($query, $format, $limit);
     }
@@ -78,6 +84,9 @@ class WithdrawalListController extends Curd
         if ($field) {
             $model = $model->orderBy($field, $order);
         }
+        if (!empty($where['member_account_list_status']) && $where['member_account_list_status'] == 'CANCEL') {
+            $model = $model->whereJsonDoesntContain('member_account_list_extend_json->reason', '');
+        }
         return $model;
     }
 
@@ -111,6 +120,75 @@ class WithdrawalListController extends Curd
         return $items;
     }
 
+    /**
+     * @Desc 提现顶部统计
+     * @Author Gorden
+     * @Date 2024/10/31 10:49
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public function statistics(Request $request)
+    {
+        $memberAccountListAddtimes = $request->get('member_account_list_addtimes');
+        $memberId = $request->get('join_member_account_list_member_id');
+        $status = $request->get('member_account_list_status');
+
+        if (!empty($memberAccountListAddtimes)) {
+            $memberAccountListAddtimes[0] = strtotime($memberAccountListAddtimes[0]);
+            $memberAccountListAddtimes[1] = strtotime($memberAccountListAddtimes[1]);
+        }
+
+        $withdrawalModel = MemberAccountList::where('member_account_list_attr', 'OUT')
+            ->when(!empty($memberAccountListAddtimes), function ($query) use ($memberAccountListAddtimes) {
+                $query->whereBetween('member_account_list_addtimes', $memberAccountListAddtimes);
+            })->when(!empty($memberId), function ($query) use ($memberId) {
+                $query->where('join_member_account_list_member_id', $memberId);
+            })->when(!empty($status), function ($query) use ($status) {
+                $query->where('member_account_list_status', $status);
+            });
+
+        $totalModel = clone $withdrawalModel;
+        $total = $totalModel->selectRaw("SUM(member_account_list_amount) as amount,count(member_account_list_id) as total")
+            ->first()
+            ->toArray();
+        $pendingTotalModel = clone $withdrawalModel;
+        $pendingTotal = $pendingTotalModel->where('member_account_list_status', 'PENDING')
+            ->selectRaw("SUM(member_account_list_amount) as amount,count(member_account_list_id) as total")
+            ->first()
+            ->toArray();
+        $waitingTotalModel = clone $withdrawalModel;
+        $waitingTotal = $waitingTotalModel->where('member_account_list_status', 'WAITING')
+            ->selectRaw("SUM(member_account_list_amount) as amount,count(member_account_list_id) as total")
+            ->first()
+            ->toArray();
+        $activedTotalModel = clone $withdrawalModel;
+        $activedTotal = $activedTotalModel->where('member_account_list_status', 'ACTIVED')
+            ->selectRaw("SUM(member_account_list_amount) as amount,count(member_account_list_id) as total")
+//            ->selectRaw("SUM(member_account_list_amount) as amount,SUM(JSON_UNQUOTE(JSON_EXTRACT(member_account_list_json,'$.surplus')) * JSON_UNQUOTE(JSON_EXTRACT(member_account_list_json,'$.out_rate')) / 1000) as rate_amount,count(member_account_list_id) as total")
+            ->first()
+            ->toArray();
+        // 实际打款是总额减去手续费
+        if (!empty($activedTotal['amount']) && !empty($activedTotal['rate_amount'])) {
+            $activedTotal['amount'] = sprintf('%.2f', $activedTotal['amount'] - $activedTotal['rate_amount']);
+        }
+
+        $rejectTotalModel = clone $withdrawalModel;
+        $rejectTotal = $rejectTotalModel->where('member_account_list_status', 'CANCEL')
+            ->whereJsonDoesntContain('member_account_list_extend_json->reason', '')
+            ->selectRaw("SUM(member_account_list_amount) as amount,count(member_account_list_id) as total")
+            ->first()
+            ->toArray();
+
+        return json_success('success', [
+            'total' => $total,
+            'pendingTotal' => $pendingTotal,
+            'waitingTotal' => $waitingTotal,
+            'activedTotal' => $activedTotal,
+            'rejectTotal' => $rejectTotal
+        ]);
+    }
+
     /**
      * @Desc 记录详情
      * @Author Gorden
@@ -138,7 +216,7 @@ class WithdrawalListController extends Curd
         if (!empty($info->member_account_list_json)) {
             $accountListJson = json_decode($info->member_account_list_json, true);
             $info->out_rate = !empty($accountListJson['out_rate']) ? $accountListJson['out_rate'] / 10 : 0;
-            $info->to_account = sprintf('%.2f',$info->member_account_list_amount - (round($info->member_account_list_amount * $info->out_rate / 100, 2)));
+            $info->to_account = sprintf('%.2f', $info->member_account_list_amount - (round($info->member_account_list_amount * $info->out_rate / 100, 2)));
             $info->banks = [
                 [
                     'bank_name' => $accountListJson['bank_name'] ?? '',

+ 63 - 1
app/admin/controller/order/RefundController.php

@@ -140,6 +140,68 @@ class RefundController extends Curd
         return $items;
     }
 
+    /**
+     * @Desc 退款管理顶部统计
+     * @Author Gorden
+     * @Date 2024/10/31 11:37
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public function statistics(Request $request)
+    {
+        $status = $request->get('order_return_status');
+        $memberId = $request->get('join_return_member_id');
+        $orderId = $request->get('orderId');
+        $orderReturnAddtimes = $request->get('order_return_addtimes');
+        if (!empty($orderReturnAddtimes)) {
+            $orderReturnAddtimes[0] = strtotime($orderReturnAddtimes[0]);
+            $orderReturnAddtimes[1] = strtotime($orderReturnAddtimes[1]);
+        }
+
+        $returnModel = OrderReturn::when(!empty($status), function ($query) use ($status) {
+            $query->where('order_return_status', $status);
+        })->when(!empty($memberId), function ($query) use ($memberId) {
+            $query->where('join_return_member_id', $memberId);
+        })->when(!empty($orderId), function ($query) use ($orderId) {
+            $query->where('join_return_order_id', 'like', '%' . $orderId . '%');
+        })->when(!empty($orderReturnAddtimes), function ($query) use ($orderReturnAddtimes) {
+            $query->whereBetween('order_return_addtimes', $orderReturnAddtimes);
+        });
+        $totalModel = clone $returnModel;
+        $total = $totalModel->selectRaw("SUM(JSON_UNQUOTE(JSON_EXTRACT(order_return_apply_json,'$.amount'))) as amount,count(orders_return_id) as total")
+            ->first()
+            ->toArray();
+        $pendingTotalModel = clone $returnModel;
+        $pendingTotal = $pendingTotalModel->where('order_return_status', 'PENDING')
+            ->selectRaw("SUM(JSON_UNQUOTE(JSON_EXTRACT(order_return_apply_json,'$.amount'))) as amount,count(orders_return_id) as total")
+            ->first()
+            ->toArray();
+        $doingTotalModel = clone $returnModel;
+        $doingTotal = $doingTotalModel->where('order_return_status', 'DOING')
+            ->selectRaw("SUM(JSON_UNQUOTE(JSON_EXTRACT(order_return_apply_json,'$.amount'))) as amount,count(orders_return_id) as total")
+            ->first()
+            ->toArray();
+        $disagreeTotalModel = clone $returnModel;
+        $disagreeTotal = $disagreeTotalModel->where('order_return_status', 'DISAGREE')
+            ->selectRaw("SUM(JSON_UNQUOTE(JSON_EXTRACT(order_return_apply_json,'$.amount'))) as amount,count(orders_return_id) as total")
+            ->first()
+            ->toArray();
+        $doneTotalModel = clone $returnModel;
+        $doneTotal = $doneTotalModel->where('order_return_status', 'DONE')
+            ->selectRaw("SUM(JSON_UNQUOTE(JSON_EXTRACT(order_return_apply_json,'$.amount'))) as amount,count(orders_return_id) as total")
+            ->first()
+            ->toArray();
+
+        return json_success('success', [
+            'total' => $total,
+            'pendingTotal' => $pendingTotal,
+            'doingTotal' => $doingTotal,
+            'disagreeTotal' => $disagreeTotal,
+            'doneTotal' => $doneTotal
+        ]);
+    }
+
     protected function updateInput(Request $request): array
     {
         $primary_key = $this->model->getKeyName();
@@ -753,7 +815,7 @@ class RefundController extends Curd
                 'order_return_status' => 'DONE',
                 'order_return_category' => '退款',
                 'order_return_apply_datetime' => date('Y-m-d H:i:s'),
-                'order_return_apply_json' => json_encode(['reason' => '后台自定义退款']),
+                'order_return_apply_json' => json_encode(['reason' => '后台自定义退款', 'amount' => $amount]),
                 'order_return_accept_datetime' => date('Y-m-d H:i:s'),
                 'order_return_refund_json' => json_encode(['amount' => $amount, 'user_id' => JwtToken::getCurrentId(), 'datetime' => date('Y-m-d H:i:s'), 'remark' => $remark ?? '']),
                 'order_return_addtimes' => time()

+ 9 - 2
app/admin/service/order/AppointmentService.php

@@ -77,11 +77,18 @@ class AppointmentService
                 }
             });
 
+        $pendingModel = clone $rows;
+        $pendingTotal = $pendingModel->where('appointment.appointment_status', 'PENDING')->count();
+        $doingModel = clone $rows;
+        $doingTotal = $doingModel->where('appointment.appointment_status', 'DOING')->count();
+        $doneModel = clone $rows;
+        $doneTotal = $doneModel->where('appointment.appointment_status', 'DONE')->count();
+
         $total = $rows->count('member.member_id');
         $rows = $rows->select('appointment.*',
             'member.member_mobile', 'member.join_member_role_id', 'member.member_is_owner', 'member.member_is_vip', 'member.member_is_partner', 'member.member_is_referrer',
             'member_cert.member_cert_name',
-            'member_info.member_info_nickname','member_info.member_info_headimg',
+            'member_info.member_info_nickname', 'member_info.member_info_headimg',
             'goods.goods_name', 'goods.goods_cover', 'goods.goods_sales_price',
             'order.order_id', 'order.order_groupby', 'order.order_name', 'goods_sku.goods_sku_specs_json', 'order.order_amount_total', 'order.order_amount_pay',
             'order.order_category', 'order.order_status_system', 'order.order_status_payment', 'order.order_status_storage', 'order.order_is_complete',
@@ -141,7 +148,7 @@ class AppointmentService
             }
             $row->member_info_headimg = MemberService::getAvatarUrl($row->member_info_headimg ?? '');
         }
-        return json_success('', compact('rows', 'page', 'pageSize', 'total'));
+        return json_success('', compact('rows', 'page', 'pageSize', 'total', 'pendingTotal', 'doingTotal', 'doneTotal'));
     }
 
     public static function confirm($id)

+ 1 - 0
route/admin.php

@@ -175,6 +175,7 @@ Route::group('/admin', function () {
         /* 提现管理 */
         Route::group('/withdrawalList', function () {
             Route::get('/list', [\app\admin\controller\finance\WithdrawalListController::class, 'select']);
+            Route::get('/statistics', [\app\admin\controller\finance\WithdrawalListController::class, 'statistics']);
             Route::get('/info', [\app\admin\controller\finance\WithdrawalListController::class, 'info']);
             Route::post('/changeStatus', [\app\admin\controller\finance\WithdrawalListController::class, 'changeStatus']);
         })->middleware([