cqp 3 місяців тому
батько
коміт
40a4cb6c96

+ 13 - 0
app/Http/Controllers/Api/CustomerController.php

@@ -72,6 +72,19 @@ class CustomerController extends BaseController
         }
     }
 
+    public function customerRepeatList(Request $request)
+    {
+        $service = new CustomerService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->customerRepeatList($request->all(),$userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
     public function customerList2(Request $request)
     {
         $service = new CustomerService();

+ 11 - 0
app/Model/CustomerRepeat.php

@@ -0,0 +1,11 @@
+<?php
+
+namespace App\Model;
+
+class CustomerRepeat extends UseScopeBaseModel
+{
+    protected $table = "customer_repeat"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+}

+ 117 - 0
app/Service/CustomerService.php

@@ -5,6 +5,7 @@ namespace App\Service;
 use App\Model\BasicType;
 use App\Model\Customer;
 use App\Model\CustomerInfo;
+use App\Model\CustomerRepeat;
 use App\Model\Depart;
 use App\Model\Employee;
 use App\Model\FollowUpRecord;
@@ -767,6 +768,122 @@ class CustomerService extends Service
         return [true, $list];
     }
 
+    /**
+     * 客户重复
+     * @param $data
+     * @param $user
+     * @return array
+     */
+    public function customerRepeatList($data,$user){
+        $model = $this->customerRepeatCommonSearch($data,$user);
+        $list = $this->limit($model,'',$data);
+        $list = $this->fillRepeatData($list,$data, $user);
+
+        return [true, $list];
+    }
+
+    public function customerRepeatCommonSearch($data,$user, $field = []){
+        if(empty($field)){
+            $field = ['title','id','model_type','customer_from','car_type','address2','crt_id','crt_time','enter_time','contact_type','contact','mark'];
+        }
+        $model = CustomerRepeat::Clear($user,$data);
+        $model = $model->where('del_time',0)
+            ->select($field)
+            ->orderby('id', 'desc');
+
+        if(! empty($data['title_t'])) {
+            // 清理用户输入,去除前后空白并替换多个连续空格为单个空格
+            $cleanTitle = preg_replace('/\s+/', ' ', trim($data['title_t']));
+            // 构建查询时使用 TRIM 和 REPLACE 来清理数据库字段中的空白字符
+            $model->whereRaw("TRIM(REPLACE(title, ' ', '')) LIKE ?", ['%' . str_replace(' ', '', $cleanTitle) . '%'])
+                ->orWhere('consulting_product', 'LIKE', '%'.$data['title_t'].'%')
+                ->orWhere('contact', 'LIKE', '%'.$data['title_t'].'%');
+        }
+        if(! empty($data['customer_id'])){
+            $customer_id = explode(',',$data['customer_id']);
+            $model->whereIn('id', $customer_id);
+        }
+        if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
+        if(! empty($data['address2'])) $model->where('address2', 'LIKE', '%'.$data['address2'].'%');
+        if(! empty($data['model_type'])) $model->where('model_type',$data['model_type']);
+        if(! empty($data['consulting_product'])) $model->where('consulting_product','LIKE', '%'.$data['consulting_product'].'%');
+        if(! empty($data['mark'])) $model->where('mark','LIKE', '%'.$data['mark'].'%');
+        if(! empty($data['customer_intention'])) $model->where('customer_intention',$data['customer_intention']);
+        if(! empty($data['customer_from'])) $model->where('customer_from',$data['customer_from']);
+        if(! empty($data['customer_type'])) $model->where('customer_type',$data['customer_type']);
+        if(! empty($data['customer_intention_title'])){
+            $id = (new RangeService())->customerBasicTypeSearch($data['customer_intention_title'],[1]);
+            $model->whereIn('customer_intention', $id);
+        }
+        if(! empty($data['customer_from_title'])){
+            $id = (new RangeService())->customerBasicTypeSearch($data['customer_from_title'],[2]);
+            $model->whereIn('customer_from', $id);
+        }
+        if(! empty($data['customer_type_title'])) {
+            $id = (new RangeService())->customerBasicTypeSearch($data['customer_type_title'],[3,30,31]);
+            $model->whereIn('customer_type', $id);
+        }
+        if(! empty($data['progress_stage_title'])){
+            $id = (new RangeService())->customerBasicTypeSearch($data['progress_stage_title'],[5]);
+            $model->whereIn('progress_stage', $id);
+        }
+        if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
+            $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
+            $model->where('crt_time','>=',$return[0]);
+            $model->where('crt_time','<=',$return[1]);
+        }
+        if(! empty($data['enter_time'][0]) && ! empty($data['enter_time'][1])) {
+            $return = $this->changeDateToTimeStampAboutRange($data['enter_time']);
+            $model->where('enter_time','>=',$return[0]);
+            $model->where('enter_time','<=',$return[1]);
+        }
+        if(! empty($data['crt_name'])){
+            $id = (new RangeService())->crtNameSearch($data);
+            $model->whereIn('crt_id',$id);
+        }
+        if(! empty($data['fz'])){
+            $emp_id = Employee::where('del_time',0)
+                ->where('emp_name','LIKE', '%'.$data['fz'].'%')
+                ->select('id')->get()->toArray();
+            $emp_id = array_column($emp_id,'id');
+            $model->whereIn('fz_man', $emp_id);
+        }
+
+        if(! empty($data['contact_info'])) $model->where('contact', 'LIKE', '%'.$data['contact_info'].'%');
+
+        return $model;
+    }
+
+    /**
+     * 拼接数据
+     * @param $data
+     * @return array
+     */
+    public function fillRepeatData($data,$ergs,$user){
+        if(empty($data['data'])) return $data;
+
+        $array = array_unique(array_merge_recursive(array_column($data['data'],'customer_from'),array_column($data['data'],'car_type')));
+        $basic_map = BasicType::whereIn('id',$array)
+            ->pluck('title','id')
+            ->toArray();
+        $emp = Employee::whereIn('id',array_unique(array_column($data['data'],'crt_id')))
+            ->pluck('emp_name','id')
+            ->toArray();
+        foreach ($data['data'] as $key => $value){
+            $data['data'][$key]['address'] = $value['address2'];
+            //客户来源
+            $data['data'][$key]['customer_from_title'] = $basic_map[$value['customer_from']] ?? '';
+//            $this->isTopDispatch($user, $data['data'][$key]);
+            $data['data'][$key]['car_type_title'] = $basic_map[$value['car_type']] ?? '';
+            $data['data'][$key]['enter_time'] = $value['enter_time'] ? date('Y-m-d H:i:s',$value['enter_time']) : '';
+            $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
+            $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
+        }
+
+        return $data;
+    }
+
+
     public function getCustomerId($data,$user){
         $return = [];
         if(! empty($data['my_fz'])){

+ 16 - 1
app/Service/ImportService.php

@@ -8,6 +8,7 @@ use App\Import\ImportAll;
 use App\Model\BasicType;
 use App\Model\Customer;
 use App\Model\CustomerInfo;
+use App\Model\CustomerRepeat;
 use App\Model\Depart;
 use App\Model\Employee;
 use App\Model\Inventory;
@@ -460,7 +461,7 @@ class ImportService extends Service
     }
 
     function customerFilterSecond($array, $time, $head, $user, $contact_info_array,$customer,$basic_list,$product,$emp){
-        $error = $insert = $insert_detail = $insert_detail2 = [];
+        $error = $insert = $insert_detail = $insert_detail2 = $repeat_array = [];
         foreach ($array as $key => $value){
             $line = '第' . $key . '行';
             $tmp = [
@@ -487,9 +488,11 @@ class ImportService extends Service
             $tmp['consulting_product'] = $value['5'];
             $tmp['mark'] = $value['10'];
             $tmp['address2'] = $value['11'];
+            $repeat = 0;//是否重复
 
             if(! empty($customer[$value['1']])) {
                 $error[] = $line . '客户名称:' . $value['1'] . '已存在';
+                $repeat = 1;
             }else{
                 $tmp['title'] = $value['1'];
             }
@@ -553,6 +556,7 @@ class ImportService extends Service
                 }
             }
             if($value['13'] && in_array($value['13'],$contact_info_array)){
+                $repeat = 1;
                 $error[] = $line . '联系方式内容:' . $value['13'] . '已存在';
             }
             $man = 0;
@@ -582,8 +586,17 @@ class ImportService extends Service
                 'crt_time' => $time,
                 'type' => CustomerInfo::type_two
             ];
+            if($repeat){
+                $tmp['contact_type'] = $contact_id;
+                $tmp['contact'] = $value['13'];
+                $tmp['fz_man'] = $man;
+                $repeat_array[] = $tmp;
+            }
         }
 
+        //重复录入数据记录
+        if($repeat_array) CustomerRepeat::insert($repeat_array);
+
         if(! empty($error)){
             $error = implode(',', $error);
             return [false, $error];
@@ -1573,6 +1586,8 @@ class ImportService extends Service
                     $product_use[$key] = $product_map_2[$key] ?? 0;
                 }
             }
+        }else{
+            $product_use = $product_map_2;
         }
 
         $time = time();

+ 54 - 10
app/Service/ReturnExchangeOrderService.php

@@ -4,6 +4,7 @@ namespace App\Service;
 
 use App\Model\BasicType;
 use App\Model\Employee;
+use App\Model\OrderInventoryStock;
 use App\Model\PurchaseOrder;
 use App\Model\PurchaseOrderInfo;
 use App\Model\ReturnExchangeOrder;
@@ -82,8 +83,12 @@ class ReturnExchangeOrderService extends Service
                     if(! empty($sub)) ReturnExchangeOrderProductInfo::insert($sub);
                 }
 
+                $is_check_stock = OrderInventoryStock::where('order_number', $data['order_number'])
+                        ->where('del_time',0)
+                        ->value('is_check_stock') ?? 0;
+
                 //锁定库存
-//                ProductInventoryService::changeLockNumber($user, $msg[0],$msg[1]);
+                ProductInventoryService::changeLockNumber($user, $msg[0],$msg[1],$is_check_stock);
             }
 
             DB::commit();
@@ -171,7 +176,7 @@ class ReturnExchangeOrderService extends Service
                 }
 
                 //锁定库存
-//                ProductInventoryService::changeLockNumber($user, $msg[0],[]);
+                ProductInventoryService::changeLockNumber($user, $msg[0],[]);
             }
 
             //单据创建时是否校验库存
@@ -291,7 +296,9 @@ class ReturnExchangeOrderService extends Service
         $order = $order->toArray();
         if($order['state'] > ReturnExchangeOrder::State_zero) return [false,'请确认退换货单状态,删除失败!'];
 
-        $product_save_minus = $this->getSaveDetailMinus($data['id']);
+        $product_save_minus = [];
+        //采购退货
+        if($order['type'] == ReturnExchangeOrder::Order_type2 && $order['model_type'] == ReturnExchangeOrder::Model_type_one) $product_save_minus = $this->getSaveDetailPurchaseMinus($data['id']);
         try{
             DB::beginTransaction();
             ReturnExchangeOrder::where('id',$data['id'])->update([
@@ -300,8 +307,12 @@ class ReturnExchangeOrderService extends Service
             ReturnExchangeOrderProductInfo::where('return_exchange_id',$data['id'])->update([
                 'del_time'=>time()
             ]);
+
+            $is_check_stock = OrderInventoryStock::where('order_number', $order['order_number'])
+                    ->where('del_time',0)
+                    ->value('is_check_stock') ?? 0;
             //锁定库存
-//            ProductInventoryService::changeLockNumber($user, [], $product_save_minus);
+            if(! empty($product_save_minus)) ProductInventoryService::changeLockNumber($user, [], $product_save_minus,$is_check_stock);
 
             (new RangeService())->RangeDelete($data['id'],SeeRange::type_six);
 
@@ -592,13 +603,31 @@ class ReturnExchangeOrderService extends Service
                 $money = bcsub($total,$save_money,2);
                 if($data['difference_amount'] > $money) return [false,'剩余能退金额最大为'. $money];
 
+                $product_id = $product_submit = [];
                 //比较
                 foreach ($return_submit_add as $pro => $number){
                     if(! isset($s_product[$pro])) return [false,'退货产品错误,采购单中不存在该产品'];
                     $s_number = $s_product[$pro];
 
                     if($number > $s_number) return [false,'退货产品数量不能超过合采购单产品数据'];
+
+                    //提交的数据
+                    $key = $pro . ',' .$data['storehouse_id'];
+                    $product_submit[$key] = $number;
+                    //提交产品的id
+                    $product_id[] = $pro;
                 }
+
+                //已保存
+                $product_save = $this->getSaveDetailPurchaseMinus($id);
+
+                //校验库存
+                list($status,$msg) = (new ProductInventoryService())->compareStock($user,$product_id, $product_submit, $product_save);
+                if(! $status) return [false, $msg];
+
+                //采购退货
+                $product_submit_minus = $product_submit;
+                $product_save_minus = $product_save;
             }
 
             //换货
@@ -645,11 +674,26 @@ class ReturnExchangeOrderService extends Service
         return [true, [$product_submit_minus,$product_save_minus]];
     }
 
-    /**
-     * 获取保存详情
-     * @param $order_number
-     * @return array
-     */
+    public function getSaveDetailPurchaseMinus($id = []){
+        $product_save = [];
+        if(empty($id)) return $product_save;
+
+        $sub = ReturnExchangeOrderProductInfo::where('return_exchange_id',$id)
+            ->where('return_or_exchange',ReturnExchangeOrderProductInfo::type_one)
+            ->where('del_time',0)
+            ->get()->toArray();
+        foreach ($sub as $value){
+            $key = $value['product_id'] . ',' . $value['storehouse_id'];
+            if(isset($product_save[$key])){
+                $product_save[$key] += $value['number'];
+            }else{
+                $product_save[$key] = $value['number'];
+            }
+        }
+
+        return $product_save;
+    }
+
     public function getSaveDetailMinus($id = 0){
         $product_save = [];
         if(empty($id)) return $product_save;
@@ -788,7 +832,7 @@ class ReturnExchangeOrderService extends Service
             }
         }
 
-        return [$sales_order_product,$total_save];
+        return [$sales_order_product,$total_save,$product_save];
     }
 
     //获取差异金额(合同和采购详情中统计的)

+ 1 - 0
routes/api.php

@@ -125,6 +125,7 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     //客户
     $route->any('customerList', 'Api\CustomerController@customerList');
     $route->any('customerCapitalList', 'Api\CustomerController@customerList2');
+    $route->any('customerRepeatList', 'Api\CustomerController@customerRepeatList');
     $route->any('customerEdit', 'Api\CustomerController@customerEdit')->middleware('OssFileDeal');
     $route->any('customerAdd', 'Api\CustomerController@customerAdd')->middleware('OssFileDeal');
     $route->any('customerDel', 'Api\CustomerController@customerDel')->middleware('OssFileDeal');