From 2a9d3c9e290d989e16148a2b6ae743537ef67a72 Mon Sep 17 00:00:00 2001
From: liuyingkang <liuyingkang@163.com>
Date: Thu, 24 Apr 2025 10:02:35 +0800
Subject: [PATCH] refactor(CovenantReceivePayment): 优化日期范围查询逻辑并添加日志记录

重构了日期范围查询条件,简化了逻辑并提高了可读性。同时,在关键步骤添加了日志记录以便于调试和追踪数据导出过程。
---
 app/Admin/Controllers/CovenantReceivePaymentController.php | 27 +++++++++++++++------------
 app/Admin/Extensions/CovenantReceivePaymentExportExten.php | 61 ++++++++++++++++++++++++++++++++++++++++++++++++-------------
 2 files changed, 63 insertions(+), 25 deletions(-)

diff --git a/app/Admin/Controllers/CovenantReceivePaymentController.php b/app/Admin/Controllers/CovenantReceivePaymentController.php
index 61de25f..13ab02d 100644
--- a/app/Admin/Controllers/CovenantReceivePaymentController.php
+++ b/app/Admin/Controllers/CovenantReceivePaymentController.php
@@ -15,6 +15,7 @@
 use App\Admin\Actions\CovenantReceivePaymentExcel;
 use Illuminate\Http\Request;
 use Maatwebsite\Excel\Facades\Excel;
+use App\Command\Log;
 
 class CovenantReceivePaymentController extends AdminController
 {
@@ -121,12 +122,12 @@ protected function grid()
                 $params['principal'] = request()->input('principal', '');
                 
                 $received_at = [];
-                $received_at['start'] = request()->input('received_at.start') ? request()->input('received_at.start') . "-01" : '';
-                $received_at['end'] = request()->input('received_at.end') ? request()->input('received_at.end') . "-31" : '';
+                $received_at['start'] = request()->input('received_at.start') ? request()->input('received_at.start')  : '';
+                $received_at['end'] = request()->input('received_at.end') ? request()->input('received_at.end')  : '';
                 
                 $invoiced_at = [];
-                $invoiced_at['start'] = request()->input('invoiced_at.start') ? request()->input('invoiced_at.start') . "-01" : '';
-                $invoiced_at['end'] = request()->input('invoiced_at.end') ? request()->input('invoiced_at.end') . "-31" : '';
+                $invoiced_at['start'] = request()->input('invoiced_at.start') ? request()->input('invoiced_at.start')  : '';
+                $invoiced_at['end'] = request()->input('invoiced_at.end') ? request()->input('invoiced_at.end') : '';
 
                 // 导出按钮参数
                 $param = [
@@ -153,16 +154,18 @@ public function export(Request $request)
     {
         $filename = $request->get('filename');
         $param = json_decode($request->get('param'), true);
+        Log::add('debug2', '导出数据:'.json_encode($param));
         
-        //获取筛选参数
-        $received_at = $invoiced_at = [];
-        $received_at['start'] = isset($_GET['received_at']['start']) && $_GET['received_at']['start'] ? $_GET['received_at']['start'] . "-01" : '';
-        $received_at['end'] = isset($_GET['received_at']['end']) && $_GET['received_at']['end'] ? $_GET['received_at']['end'] . "-31" : '';
-        $invoiced_at['start'] = isset($_GET['invoiced_at']['start']) && $_GET['invoiced_at']['start'] ? $_GET['invoiced_at']['start'] . "-01" : '';
-        $invoiced_at['end'] = isset($_GET['invoiced_at']['end']) && $_GET['invoiced_at']['end'] ? $_GET['invoiced_at']['end'] . "-31" : '';
+        // 如果参数中没有时间,再从GET请求中获取
+        if (empty($param['received_at']['start'])) {
+            $param['received_at']['start'] = isset($_GET['received_at']['start']) && $_GET['received_at']['start'] ? $_GET['received_at']['start'] : '';
+            $param['received_at']['end'] = isset($_GET['received_at']['end']) && $_GET['received_at']['end'] ? $_GET['received_at']['end']  : '';
+        }
         
-        $param['received_at'] = $received_at;
-        $param['invoiced_at'] = $invoiced_at;
+        if (empty($param['invoiced_at']['start'])) {
+            $param['invoiced_at']['start'] = isset($_GET['invoiced_at']['start']) && $_GET['invoiced_at']['start'] ? $_GET['invoiced_at']['start'] : '';
+            $param['invoiced_at']['end'] = isset($_GET['invoiced_at']['end']) && $_GET['invoiced_at']['end'] ? $_GET['invoiced_at']['end'] : '';
+        }
 
         // 检查是否有输出缓冲区
         while (ob_get_level()) {
diff --git a/app/Admin/Extensions/CovenantReceivePaymentExportExten.php b/app/Admin/Extensions/CovenantReceivePaymentExportExten.php
index a073811..78749ba 100644
--- a/app/Admin/Extensions/CovenantReceivePaymentExportExten.php
+++ b/app/Admin/Extensions/CovenantReceivePaymentExportExten.php
@@ -7,6 +7,7 @@
 use Maatwebsite\Excel\Concerns\WithHeadings;
 use App\Models\CovenantReceivePayment as ModelsCovenantReceivePayment;
 use App\Models\Covenant as ModelsCovenant;
+use App\Command\Log;
 
 class CovenantReceivePaymentExportExten implements FromCollection, WithHeadings
 {
@@ -62,6 +63,8 @@ public function getList($param)
         $received_at = $param['received_at'] ?? [];
         $invoiced_at = $param['invoiced_at'] ?? [];
 
+        Log::add('debug3', '导出数据:'.json_encode($param));
+
         // 构建基础SQL
         $sql = "SELECT rp.cid, c.cname as covenant_name, c.ctype as covenant_type, c.number as covenant_num, c.principal, l.name as lname, 
                 SUM(CASE WHEN rp.rtype = 2 THEN rp.invoiced_money ELSE 0 END) as invoice_amount,
@@ -85,21 +88,51 @@ public function getList($param)
             $sql .= " AND c.principal LIKE '%".$search['principal']."%'";
         }
 
-        // 日期筛选
-        if (!empty($received_at)) {
-            if (!empty($received_at['start'])) {
-                $sql .= " AND rp.received_at >= '".$received_at['start']."'";
-            }
-            if (!empty($received_at['end'])) {
-                $sql .= " AND rp.received_at <= '".$received_at['end']."'";
+        // 处理日期范围查询条件
+        if ($invoiced_at['start'] && $received_at['start']) {
+            $in_start = $invoiced_at['start'] ?? '';
+            $in_end = $invoiced_at['end'] ?? '';
+            $re_start = $received_at['start'] ?? '';
+            $re_end = $received_at['end'] ?? '';
+            
+            if ($in_start && $re_start) {
+                if ($in_end && $re_end) {
+                    $sql .= " AND (rp.received_at BETWEEN '$re_start' AND '$re_end 23:59:59' 
+                              OR rp.invoiced_at BETWEEN '$in_start' AND '$in_end 23:59:59')";
+                } else {
+                    if ($in_end) {
+                        $sql .= " AND (rp.received_at >= '$re_start' 
+                                OR rp.invoiced_at BETWEEN '$in_start' AND '$in_end 23:59:59')";
+                    } elseif ($re_end) {
+                        $sql .= " AND (rp.invoiced_at >= '$in_start' 
+                                OR rp.received_at BETWEEN '$re_start' AND '$re_end 23:59:59')";
+                    } else {
+                        $sql .= " AND (rp.invoiced_at >= '$in_start' 
+                                OR rp.received_at >= '$re_start')";
+                    }
+                }
             }
-        }
-        if (!empty($invoiced_at)) {
-            if (!empty($invoiced_at['start'])) {
-                $sql .= " AND rp.invoiced_at >= '".$invoiced_at['start']."'";
+        } elseif ($invoiced_at['start'] && !$received_at['start']) {
+            $start = $invoiced_at['start'] ?? '';
+            $end = $invoiced_at['end'] ?? '';
+    
+            if ($start) {
+                if ($end) {
+                    $sql .= " AND rp.received_at BETWEEN '$start' AND '$end 23:59:59'";
+                } else {
+                    $sql .= " AND rp.received_at >= '$start'";
+                }
             }
-            if (!empty($invoiced_at['end'])) {
-                $sql .= " AND rp.invoiced_at <= '".$invoiced_at['end']."'";
+        } elseif ($received_at['start'] && !$invoiced_at['start']) {
+            $start = $received_at['start'] ?? '';
+            $end = $received_at['end'] ?? '';
+    
+            if ($start) {
+                if ($end) {
+                    $sql .= " AND rp.received_at BETWEEN '$start' AND '$end 23:59:59'";
+                } else {
+                    $sql .= " AND rp.received_at >= '$start'";
+                }
             }
         }
 
@@ -107,6 +140,8 @@ public function getList($param)
 
         $records = DB::select($sql);
 
+        Log::add('debug4', '导出数据:'.$sql);
+
         // 计算合计
         $total_invoice_amount = 0;
         $total_receipt_money = 0;
--
libgit2 0.26.0