cqp преди 2 месеца
родител
ревизия
db0096b65d

+ 14 - 6
app/Service/ConstructionService.php

@@ -613,12 +613,8 @@ class ConstructionService extends Service
             $model->whereBetween('crt_time',[$return[0],$return[1]]);
         }
         if(! empty($data['sale_order'])){
-            $model2 = SalesOrder::Clear($user,$data);
-            $sale = $model2->where('del_time',0)
-                ->where('order_number', 'LIKE', '%'.$data['sale_order'].'%')
-                ->select('id')
-                ->get()->toArray();
-            $model->whereIn('sales_order_id',array_unique(array_column($sale,'id')));
+            $sale_id = (new SalesOrderService())->orderNumberSearch($user, $data, $data['sale_order']);
+            $model->whereIn('sales_order_id',$sale_id);
         }
         if(! empty($data['install_method'])) {
             $id = (new BasicTypeService())->basicTypeSearchId($data['install_method']);
@@ -630,6 +626,18 @@ class ConstructionService extends Service
         }
         if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
         if(! empty($data['select_field'])) return $model->get()->toArray();
+
+        if(! empty($data['smart_search'])){
+            $sale_id = (new SalesOrderService())->orderNumberSearch($user, $data, $data['smart_search']);
+
+            $service_2 = new CustomerService();
+            $customer_id = $service_2->titleSearch($user, $data, $data['smart_search']);
+            $customer_id_2 = $service_2->contactSearch($data['smart_search']);
+            $customer_id = array_unique(array_merge_recursive($customer_id,$customer_id_2));
+            $model->where('order_number', 'LIKE', '%'.$data['smart_search'].'%')
+                ->orWhereIn('customer_id', $customer_id)
+                ->orWhereIn('sales_order_id',$sale_id);
+        }
         if(! empty($data['wx_crt_time'][0]) && ! empty($data['wx_crt_time'][1])) {
             $model->where('crt_time','>=',$data['wx_crt_time'][0]);
             $model->where('crt_time','<=',$data['wx_crt_time'][1]);

+ 30 - 6
app/Service/CustomerService.php

@@ -621,12 +621,8 @@ class CustomerService extends Service
             $model->whereIn('id',$id);
         }
         if(! empty($data['contact_info'])){
-            $customer_info = CustomerInfo::where('del_time',0)
-                ->where("type",CustomerInfo::type_one)
-                ->where('contact_info','LIKE', '%'.$data['contact_info'].'%')
-                ->select('customer_id')
-                ->get()->toArray();
-            $model->whereIn('id',array_column($customer_info,'customer_id'));
+            $customer_id = $this->contactSearch($data['contact_info']);
+            $model->whereIn('id', $customer_id);
         }
         if(! empty($data['no_fp_time'])) $model->where('fp_time', 0);
         $is_fp = -1;
@@ -651,6 +647,14 @@ class CustomerService extends Service
             }
         }
 
+        if(! empty($data['smart_search'])){
+            $customer_id = $this->contactSearch($data['smart_search']);
+            $progress_stage_id = (new RangeService())->customerBasicTypeSearch($data['smart_search'],[5]);
+            $model->where('title', 'LIKE', '%'.$data['smart_search'].'%')
+                ->orWhereIn('id', $customer_id)
+                ->orWhereIn('progress_stage', $progress_stage_id);
+        }
+
         if(! empty($data['wx_crt_time'][0]) && ! empty($data['wx_crt_time'][1])) {
             $model->where('crt_time','>=',$data['wx_crt_time'][0]);
             $model->where('crt_time','<=',$data['wx_crt_time'][1]);
@@ -659,6 +663,26 @@ class CustomerService extends Service
         return $model;
     }
 
+    public function contactSearch($contact_info){
+        $customer_info = CustomerInfo::where('del_time',0)
+            ->where("type",CustomerInfo::type_one)
+            ->where('contact_info','LIKE', '%'.$contact_info.'%')
+            ->select('customer_id')
+            ->get()->toArray();
+
+        return array_column($customer_info,'customer_id');
+    }
+
+    public function titleSearch($user, $data, $message){
+        $model2 = Customer::Clear($user,$data);
+        $customer = $model2->where('del_time',0)
+            ->where('title', 'LIKE', '%'. $message .'%')
+            ->select('id')
+            ->get()->toArray();
+
+        return array_column($customer,'id');
+    }
+
     /**
      * 客户列表
      * @param $data

+ 17 - 7
app/Service/PaymentReceiptService.php

@@ -428,13 +428,8 @@ class PaymentReceiptService extends Service
 
         if(isset($data['state'])) $model->where('state', $data['state']);
         if(! empty($data['data_order_no'])) {
-            $info = PaymentReceiptInfo::where('del_time',0)
-                ->where('type',PaymentReceiptInfo::type_three)
-                ->where('data_order_no',  'LIKE', '%'.$data['data_order_no'].'%')
-                ->select('payment_receipt_id')
-                ->get()->toArray();
-
-            $model->whereIn('id', array_unique(array_column($info,'payment_receipt_id')));
+            $id = $this->searchForDataOrder($data['data_order_no']);
+            $model->whereIn('id', $id);
         }
         if(! empty($data['order_number'])) $model->where('order_number',  'LIKE', '%'.$data['order_number'].'%');
         if(! empty($data['data_type'])) $model->where('data_type', $data['data_type']);
@@ -456,6 +451,11 @@ class PaymentReceiptService extends Service
             $id = (new RangeService())->paymentReceiptSearch($data);
             $model->whereIn('id',$id);
         }
+        if(! empty($data['smart_search'])){
+            $id = $this->searchForDataOrder($data['smart_search']);
+            $model->where('order_number', 'LIKE', '%'.$data['smart_search'].'%')
+                ->OrWhereIn('id',$id);
+        }
         if(! empty($data['wx_crt_time'][0]) && ! empty($data['wx_crt_time'][1])) {
             $model->where('crt_time','>=',$data['wx_crt_time'][0]);
             $model->where('crt_time','<=',$data['wx_crt_time'][1]);
@@ -464,6 +464,16 @@ class PaymentReceiptService extends Service
         return $model;
     }
 
+    public function searchForDataOrder($message){
+        $info = PaymentReceiptInfo::where('del_time',0)
+            ->where('type',PaymentReceiptInfo::type_three)
+            ->where('data_order_no',  'LIKE', '%'.$message.'%')
+            ->select('payment_receipt_id')
+            ->get()->toArray();
+
+        return array_unique(array_column($info,'payment_receipt_id'));
+    }
+
     public function customerList($data,$user){
         $model = $this->customerCommon($data, $user);
         $list = $this->limit($model,'',$data);

+ 17 - 6
app/Service/PurchaseOrderService.php

@@ -495,12 +495,8 @@ class PurchaseOrderService extends Service
             }
         }
         if(! empty($data['sale_order'])){
-            $model2 = SalesOrder::Clear($user,$data);
-            $sale = $model2->where('del_time',0)
-                ->where('order_number', 'LIKE', '%'.$data['sale_order'].'%')
-                ->select('id')
-                ->get()->toArray();
-            $model->whereIn('sales_order_id',array_unique(array_column($sale,'id')));
+            $sale_id = (new SalesOrderService())->orderNumberSearch($user, $data, $data['sale_order']);
+            $model->whereIn('sales_order_id',$sale_id);
         }
         if(! empty($data['supplier_man'])){
             $emp = Supplier::where('del_time',0)
@@ -520,6 +516,11 @@ class PurchaseOrderService extends Service
             $model->whereIn('order_type',[PurchaseOrder::Order_type_three,PurchaseOrder::Order_type_four])
                 ->where('state',">=",PurchaseOrder::STATE_TWO);
         }
+        if(! empty($data['smart_search'])){
+            $sale_id = (new SalesOrderService())->orderNumberSearch($user, $data, $data['smart_search']);
+            $model->where('order_number', 'LIKE', '%'.$data['smart_search'].'%')
+                ->orWhereIn('sales_order_id',$sale_id);
+        }
         if(! empty($data['wx_crt_time'][0]) && ! empty($data['wx_crt_time'][1])) {
             $model->where('crt_time','>=',$data['wx_crt_time'][0]);
             $model->where('crt_time','<=',$data['wx_crt_time'][1]);
@@ -528,6 +529,16 @@ class PurchaseOrderService extends Service
         return $model;
     }
 
+    public function orderNumberSearch($user, $data, $message){
+        $model2 = PurchaseOrder::Clear($user,$data);
+        $purchase = $model2->where('del_time',0)
+            ->where('order_number', 'LIKE', '%'.$message.'%')
+            ->select('id')
+            ->get()->toArray();
+
+        return array_column($purchase,'id');
+    }
+
     /**
      * 获取采购单列表
      * @param $data

+ 0 - 11
app/Service/RangeService.php

@@ -538,17 +538,6 @@ class RangeService extends Service
         return array_column($return,'data_id');
     }
 
-    //客户联系方式
-    public function salesOrderCustomerMessageSearch($data){
-        $return = CustomerInfo::where('del_time',0)
-            ->where("type",CustomerInfo::type_one)
-            ->where('contact_info','LIKE', '%'.$data['contact_info'].'%')
-            ->select('customer_id')
-            ->get()->toArray();
-
-        return array_column($return,'customer_id');
-    }
-
     //客户创建人
     public function salesOrderCustomerCrtSearch($user,$data){
         $emp_id = Employee::where('del_time',0)

+ 17 - 2
app/Service/ReturnExchangeOrderService.php

@@ -362,6 +362,21 @@ class ReturnExchangeOrderService extends Service
                 $model->where('crt_time','<=',$end);
             }
         }
+        if(! empty($data['smart_search'])){
+            $sale_id = (new SalesOrderService())->orderNumberSearch($user, $data, $data['smart_search']);
+            $purchase_id = (new PurchaseOrderService())->orderNumberSearch($user, $data, $data['smart_search']);
+            $model->where('order_number', 'LIKE', '%'.$data['smart_search'].'%')
+               ->when(! empty($sale_id), function ($query) use ($sale_id) {
+                   $id = implode(',',$sale_id);
+                   $search = "(type = " . ReturnExchangeOrder::Order_type . " And data_id In ($id))";
+                   return $query->OrWhereRaw($search);
+               })
+               ->when(! empty($purchase_id), function ($query) use ($purchase_id) {
+                   $id = implode(',',$purchase_id);
+                   $search = "(type = " . ReturnExchangeOrder::Order_type2 . " And data_id In ($id))";
+                   return $query->OrWhereRaw($search);
+               });
+        }
 
        if(! empty($data['wx_crt_time'][0]) && ! empty($data['wx_crt_time'][1])) {
             $model->where('crt_time','>=',$data['wx_crt_time'][0]);
@@ -410,7 +425,7 @@ class ReturnExchangeOrderService extends Service
     public function getDataId($search,$user,$data){
         if($search < 0){
             $model2 = SalesOrder::Clear($user,$data);
-            $sale = $model2->where('del_time',0)
+            $sale = SalesOrder::where('del_time',0)
                 ->where('order_number', 'LIKE', '%'.$data['order'].'%')
                 ->select('id')
                 ->get()->toArray();
@@ -422,7 +437,7 @@ class ReturnExchangeOrderService extends Service
             return array_unique(array_merge_recursive(array_column($sale,'id'),array_column($purchase,'id')));
         }elseif ($search == 0){
             $model2 = SalesOrder::Clear($user,$data);
-            $sale = $model2->where('del_time',0)
+            $sale = SalesOrder::where('del_time',0)
                 ->where('order_number', 'LIKE', '%'.$data['order'].'%')
                 ->select('id')
                 ->get()->toArray();

+ 53 - 12
app/Service/SalesOrderService.php

@@ -909,12 +909,8 @@ class SalesOrderService extends Service
         }
         if(! empty($data['plat_order'])) $model->where('plat_order','LIKE', '%'.$data['plat_order'].'%');
         if(! empty($data['customer'])) {
-            $model2 = Customer::Clear($user,$data);
-            $customer = $model2->where('del_time',0)
-                ->where('title', 'LIKE', '%'.$data['customer'].'%')
-                ->select('id')
-                ->get()->toArray();
-            $model->whereIn('customer_id',array_unique(array_column($customer,'id')));
+            $customer_id = (new CustomerService())->titleSearch($user, $data, $data['customer']);
+            $model->whereIn('customer_id',$customer_id);
         }
         if(! empty($data['customer_id'])) $model->where('customer_id',$data['customer_id']);
         if(! empty($data['sign_time'][0]) && ! empty($data['sign_time'][1])){
@@ -937,7 +933,7 @@ class SalesOrderService extends Service
         }
         if(! empty($data['purchase_order_number'])) $model->where('contact_order_no','LIKE', '%'.$data['purchase_order_number'].'%');
         if(! empty($data['contact_info'])){
-            $customer_id = (new RangeService())->salesOrderCustomerMessageSearch($data);
+            $customer_id = (new CustomerService())->contactSearch($data['contact_info']);
             $model->whereIn('customer_id',$customer_id);
         }
         if(! empty($data['customer_crt_name'])){
@@ -962,6 +958,14 @@ class SalesOrderService extends Service
             $return = $service->constructionList($for_search,$user);
             $model->whereIn('id', array_unique(array_column($return,'sales_order_id')));
         }
+        if(! empty($data['smart_search'])){
+            $service = new CustomerService();
+            $customer_id = $service->contactSearch($data['smart_search']);
+            $customer_id_2 = $service->titleSearch($user, $data, $data['smart_search']);
+            $customer_id = array_unique(array_merge_recursive($customer_id,$customer_id_2));
+            $model->where('order_number', 'LIKE', '%'.$data['smart_search'].'%')
+                ->orWhereIn('customer_id', $customer_id);
+        }
         if(! empty($data['wx_crt_time'][0]) && ! empty($data['wx_crt_time'][1])) {
             $model->where('crt_time','>=',$data['wx_crt_time'][0]);
             $model->where('crt_time','<=',$data['wx_crt_time'][1]);
@@ -970,6 +974,16 @@ class SalesOrderService extends Service
         return $model;
     }
 
+    public function orderNumberSearch($user, $data, $message){
+        $model2 = SalesOrder::Clear($user,$data);
+        $sale = $model2->where('del_time',0)
+            ->where('order_number', 'LIKE', '%'.$message.'%')
+            ->select('id')
+            ->get()->toArray();
+
+        return array_column($sale,'id');
+    }
+
     //门店搜索
     public function searchSalesDepart($depart_title = ""){
         $sales_id = [];
@@ -2355,15 +2369,18 @@ class SalesOrderService extends Service
         $save = OutBoundOrderInfo::where('del_time',0)
             ->where('type', OutBoundOrderInfo::type_one)
             ->where('data_id', $sales_id)
-            ->select('number', 'data_id as sales_order_id')
+            ->select('number', 'data_id as sales_order_id','return_number')
             ->get()->toArray();
         foreach ($save as $value){
             $key = $value['sales_order_id'];
             if(isset($product_map[$key])){
-                $number = bcadd($value['number'], $product_map[$key],2);
-                $product_map[$key] = $number;
+                $number = bcadd($value['number'], $product_map[$key]['number'],2);
+                $return_number = bcadd($value['return_number'], $product_map[$key]['return_number'],2);
+                $product_map[$key]['number'] = $number;
+                $product_map[$key]['return_number'] = $return_number;
             }else{
-                $product_map[$key] = $value['number'];
+                $product_map[$key]['number'] = $value['number'];
+                $product_map[$key]['return_number'] = $value['return_number'];
             }
         }
 
@@ -2398,9 +2415,33 @@ class SalesOrderService extends Service
         //未出库 0 未完全出库 1 已完全出库 2
         foreach ($product_sale_map as $key => $value){
             //合同出库产品总数
-            $p1 = $product_map[$key] ?? 0;
+            $p1 = $product_map[$key] ?? [];
+            //合同出库产品数量
+            $p1_number = $p1['number'] ?? 0;
+            //合同出库后退货产品数量
+            $p1_return_number = $p1['return_number'] ?? 0;
+            //出库数量 - 退货数量 = 已出数量
+            $p_re = bcsub($p1_number,$p1_return_number,2);
+
             //合同退货产品
             $p2 = $product_map2[$key] ?? 0;
+            $p2_re = bcsub($p2,$p1_return_number,2);
+            //合同 - 已出 - 退货 = 剩余能出
+            $number = bcsub(bcsub($value['number'], $p_re,2), $p2_re,2);
+
+            if($p_re > 0) {
+                if($number <= 0){
+                    $return_id[$value['sales_order_id']] = "已出库";
+                }else{
+                    $return_id[$value['sales_order_id']] = "未完全出库";
+                }
+            }else{
+                if($number <= 0){
+                    $return_id[$value['sales_order_id']] = "已退货";
+                }else{
+                    $return_id[$value['sales_order_id']] = "未出库";
+                }
+            }
 
             if(! $p1){
                 $return_id[$value['sales_order_id']] = "未出库";