Browse Source

销售报表,退货明细表优化

wufeng 2 years ago
parent
commit
67c95023e7
1 changed files with 64 additions and 18 deletions
  1. 64 18
      app/admin/controller/SaleReport.php

+ 64 - 18
app/admin/controller/SaleReport.php

@@ -1030,45 +1030,91 @@ class SaleReport extends Base
     //【五、退货明细表】
     public function thData()
     {
-        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'status' => '', 'page' => 1, 'size' => 15], 'post', 'trim');
+        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'page' => 1, 'size' => 15], 'post', 'trim');
 
-        $where = [['thd.is_del', '=', 0]];
+        $where = [['thd.is_del', '=', 0], ['thd.th_type', 'in', [2, 3]]];
         if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['thd.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];
-        if ($param['status'] != '') $where[] = ['or.status', '=', $param['status']];
 
         $count = Db::name('th_data')
             ->alias('thd')
-            ->leftJoin('order_out oo', 'oo.orderCode=thd.orderCode')
-            ->leftJoin('order_addr oa', 'oa.id=oo.addrid')
-            ->leftJoin('order_return or', 'or.returnCode=thd.thCode')
             ->leftJoin('sale s', 's.orderCode=thd.orderCode')
             ->leftJoin('customer_info c', 'c.companyNo=s.customer_code')
-            ->leftJoin('result_info ri', 'ri.result_code=or.error_code')
             ->where($where)
+            ->order('thd.addtime', 'desc')
             ->count('thd.id');
 
         $data = Db::name('th_data')
             ->alias('thd')
-            ->field('thd.addtime return_time,thd.thCode,oo.outCode,or.status,thd.apply_name,thd.apply_id,thd.orderCode,s.addtime,c.companyName,s.good_name,s.sale_price,s.wsend_num,s.th_num,s.th_fee,oa.contactor,oa.mobile,oa.addr,oa.addr_code,ri.result result_desc')
-            ->leftJoin('order_out oo', 'oo.orderCode=thd.orderCode')
-            ->leftJoin('order_addr oa', 'oa.id=oo.addrid')
-            ->leftJoin('order_return or', 'or.returnCode=thd.thCode')
+            ->field('thd.id,thd.th_type,thd.addtime return_time,thd.thCode,"" outCode,"" status,"" apply_name,"" apply_company,thd.orderCode,s.addtime,c.companyName,s.good_name,s.sale_price,s.wsend_num,s.th_num,s.th_fee,"" contactor,"" mobile,"" addr,"" result')
             ->leftJoin('sale s', 's.orderCode=thd.orderCode')
             ->leftJoin('customer_info c', 'c.companyNo=s.customer_code')
-            ->leftJoin('result_info ri', 'ri.result_code=or.error_code')
             ->where($where)
-            ->page($param['page'], $param['size'])
             ->order('thd.addtime', 'desc')
-            ->cursor();
+            ->select()
+            ->toArray();
+
+        $th_types = [];
+        foreach ($data as $value) {
+            $th_types[$value['th_type']][] = $value['thCode'];
+        }
+
+        $all_order_return = Db::name('order_return')
+            ->alias('or')
+            ->withAttr('status', function ($val) {
+                return isset($this->all_order_return_status[$val]) ? $this->all_order_return_status[$val] : '';
+            })
+            ->withAttr('apply_company', function ($val, $da) {
+                return get_company_name_by_uid($da['apply_id']);
+            })
+            ->leftJoin('order_out oo', 'oo.outCode=or.outCode')
+            ->leftJoin('order_addr oa', 'oa.id=oo.addrid')
+            ->leftJoin('result_info ri', 'ri.result_code=or.error_code')
+            ->where('or.is_del', 0)
+            ->whereIn('or.returnCode', $th_types[2])
+            ->column('or.id,or.outCode,or.status,or.apply_id,or.apply_name,"" apply_company,oa.contactor,oa.mobile,oa.addr,ri.result,oa.addr_code', 'or.returnCode');
+
+
+        $all_order_back = Db::name('order_back')
+            ->alias('ob')
+            ->where('ob.is_del', 0)
+            ->whereIn('ob.thNo', $th_types[3])
+            ->withAttr('status', function ($val) {
+                return isset($this->order_back_status[$val]) ? $this->order_back_status[$val] : '';
+            })
+            ->withAttr('apply_company', function ($val, $da) {
+                return get_company_name_by_uid($da['apply_id']);
+            })
+            ->leftJoin('order_out oo', 'oo.outCode=ob.outCode')
+            ->leftJoin('order_addr oa', 'oa.id=oo.addrid')
+            ->leftJoin('result_info ri', 'ri.result_code=ob.return_code')
+            ->column('ob.id,ob.outCode,ob.status,ob.apply_id,ob.apply_name,"" apply_company,oa.contactor,oa.mobile,oa.addr,ri.result,oa.addr_code', 'thNo');
 
         $list = [];
 
         foreach ($data as $value) {
-            $value['status'] = isset($this->all_order_return_status[$value['status']]) ? $this->all_order_return_status[$value['status']] : '';
-            $value['apply_company'] = get_company_name_by_uid($value['apply_id']);
+            if ($value['th_type'] == 2) {
+                $value['outCode'] = isset($all_order_return[$value['thCode']]['outCode']) ? $all_order_return[$value['thCode']]['outCode'] : '';
+                $value['status'] = isset($all_order_return[$value['thCode']]['status']) ? $all_order_return[$value['thCode']]['status'] : '';
+                $value['apply_name'] = isset($all_order_return[$value['thCode']]['apply_name']) ? $all_order_return[$value['thCode']]['apply_name'] : '';
+                $value['apply_company'] = isset($all_order_return[$value['thCode']]['apply_company']) ? $all_order_return[$value['thCode']]['apply_company'] : '';
+                $value['contactor'] = isset($all_order_return[$value['thCode']]['contactor']) ? $all_order_return[$value['thCode']]['contactor'] : '';
+                $value['mobile'] = isset($all_order_return[$value['thCode']]['mobile']) ? $all_order_return[$value['thCode']]['mobile'] : '';
+                $value['addr'] = isset($all_order_return[$value['thCode']]['addr']) ? $all_order_return[$value['thCode']]['addr'] : '';
+                $value['result'] = isset($all_order_return[$value['thCode']]['result']) ? $all_order_return[$value['thCode']]['result'] : '';
+            } elseif ($value['th_type'] == 3) {
+                $value['outCode'] = isset($all_order_back[$value['thCode']]['outCode']) ? $all_order_back[$value['thCode']]['outCode'] : '';
+                $value['status'] = isset($all_order_back[$value['thCode']]['status']) ? $all_order_back[$value['thCode']]['status'] : '';
+                $value['apply_name'] = isset($all_order_back[$value['thCode']]['apply_name']) ? $all_order_back[$value['thCode']]['apply_name'] : '';
+                $value['apply_company'] = isset($all_order_back[$value['thCode']]['apply_company']) ? $all_order_back[$value['thCode']]['apply_company'] : '';
+                $value['contactor'] = isset($all_order_back[$value['thCode']]['contactor']) ? $all_order_back[$value['thCode']]['contactor'] : '';
+                $value['mobile'] = isset($all_order_back[$value['thCode']]['mobile']) ? $all_order_back[$value['thCode']]['mobile'] : '';
+                $value['addr'] = isset($all_order_back[$value['thCode']]['addr']) ? $all_order_back[$value['thCode']]['addr'] : '';
+                $value['result'] = isset($all_order_back[$value['thCode']]['result']) ? $all_order_back[$value['thCode']]['result'] : '';
+            }
+
             $list[] = $value;
         }
-
+        
         return app_show(0, '请求成功', ['list' => $list, 'count' => $count]);
 
     }
@@ -1076,7 +1122,7 @@ class SaleReport extends Base
     //【五、退货明细表】
     public function thDataExport()
     {
-        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => '', 'status' => ''], 'post', 'trim');
+        $param = $this->request->only(['token', 'start_date' => '', 'end_date' => ''], 'post', 'trim');
 
         $where = [['thd.is_del', '=', 0], ['thd.th_type', 'in', [2, 3]]];
         if ($param['start_date'] != '' && $param['end_date'] != '') $where[] = ['thd.addtime', 'between', [$param['start_date'] . ' 00:00:00', $param['end_date'] . ' 23:59:59']];