cqpCow 1 年之前
父節點
當前提交
8206f4f9d0

+ 1 - 1
app/Http/Controllers/Api/ConstructionController.php

@@ -37,7 +37,7 @@ class ConstructionController extends BaseController
     {
         $service = new ConstructionService();
         $userData = $request->userData->toArray();
-        list($status,$data) = $service->constructionDel($request->all());
+        list($status,$data) = $service->constructionDel($request->all(),$userData);
 
         if($status){
             return $this->json_return(200,'',$data);

+ 1 - 1
app/Http/Controllers/Api/InvoiceOrderController.php

@@ -50,7 +50,7 @@ class InvoiceOrderController extends BaseController
     {
         $service = new InvoiceOrderService();
         $userData = $request->userData->toArray();
-        list($status,$data) = $service->del($request->all());
+        list($status,$data) = $service->del($request->all(),$userData);
 
         if($status){
             return $this->json_return(200,'',$data);

+ 26 - 0
app/Http/Controllers/Api/ProductInventoryController.php

@@ -34,4 +34,30 @@ class ProductInventoryController extends BaseController
             return $this->json_return(201,$data);
         }
     }
+
+    public function productInventorySetList(Request $request)
+    {
+        $service = new ProductInventoryService();
+        $user = $request->userData->toArray();
+        list($status,$data) = $service->productInventorySetList($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function productInventorySet(Request $request)
+    {
+        $service = new ProductInventoryService();
+        $user = $request->userData->toArray();
+        list($status,$data) = $service->productInventorySet($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
 }

+ 1 - 1
app/Http/Controllers/Api/ReturnExchangeOrderController.php

@@ -50,7 +50,7 @@ class ReturnExchangeOrderController extends BaseController
     {
         $service = new ReturnExchangeOrderService();
         $userData = $request->userData->toArray();
-        list($status,$data) = $service->del($request->all());
+        list($status,$data) = $service->del($request->all(),$userData);
 
         if($status){
             return $this->json_return(200,'',$data);

+ 38 - 0
app/Model/ProductInventorySet.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace App\Model;
+
+use App\Scopes\TopDepartmentScope;
+use Illuminate\Database\Eloquent\Model;
+
+class ProductInventorySet extends Model
+{
+    protected $guarded = [];
+    protected $table = "product_inventory_set"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+    const type_one = 1;//校验锁定
+    const type_two = 2;//不校验锁定
+
+    public static $user = [];
+    public static $search = [];
+    public static $is_search = false;
+
+    public function __construct(array $attributes = [])
+    {
+        if(! empty($attributes['userData'])) {
+            self::$user = $attributes['userData'];
+            self::$search = $attributes['search'] ?? [];
+            self::$is_search = true;
+        }
+        parent::__construct($attributes);
+    }
+
+    protected static function boot(){
+        parent::boot();
+        if(self::$is_search){
+            static::addGlobalScope(new TopDepartmentScope(self::$user, self::$search));
+        }
+    }
+}

+ 7 - 4
app/Service/CheckService.php

@@ -165,8 +165,10 @@ class CheckService extends Service
         return [true,''];
     }
 
-    public function createPurchaseOrderSales($data, $order){
-        if(empty($order['supplier'])) return [true, ''];
+    //todo
+    public function createPurchaseOrderSales($data, $order, $user){
+        //没有供应商||是总公司的采购单 不创建合同
+        if(empty($order['supplier']) || ! empty($user['is_all_depart'])) return [true, ''];
         $is_create = Supplier::where('id',$order['supplier'])->value('is_main');
         if(empty($is_create)) return [true, ''];
 
@@ -190,6 +192,7 @@ class CheckService extends Service
         $model->contract_fee = $order['purchase_total'];
         $model->save();
 
+        //产品字典
         $map = (new ProductService())->getProductDetail(array_column($product,'product_id'));
 
         $insert = [];
@@ -199,12 +202,12 @@ class CheckService extends Service
                 'sales_order_id' => $model->id,
                 'product_id' => $value['product_id'],
                 'number' => $value['number'],
+                'basic_type_id' => $value['basic_type_id'],
                 'price' => $value['price'],
                 'cost' => $tmp['cost'] ?? 0,
                 'retail_price' => $tmp['retail_price'] ?? 0,
             ];
         }
-
         $bool = SalesOrderProductInfo::insert($insert);
         if(! $bool) return [false,'合同生成失败!'];
 
@@ -363,7 +366,7 @@ class CheckService extends Service
 
             //自动生成合同
             if($create) {
-                $bool = $this->$create($data, $order);
+                $bool = $this->$create($data, $order, $user);
                 if(! $bool) {
                     DB::rollBack();
                     return [false, $msg];

+ 5 - 5
app/Service/ConstructionService.php

@@ -107,7 +107,7 @@ class ConstructionService extends Service
                 ConstructionProductInfo::insert($insert);
 
                 //锁定库存
-                ProductInventoryService::changeLockNumber($msg[0],$msg[1]);
+                ProductInventoryService::changeLockNumber($user,$msg[0],$msg[1]);
             }
 
             DB::commit();
@@ -203,7 +203,7 @@ class ConstructionService extends Service
                 ConstructionProductInfo::insert($insert);
 
                 //锁定库存
-                ProductInventoryService::changeLockNumber($msg[0],[]);
+                ProductInventoryService::changeLockNumber($user,$msg[0],[]);
             }
 
             DB::commit();
@@ -220,7 +220,7 @@ class ConstructionService extends Service
      * @param $data
      * @return array
      */
-    public function constructionDel($data){
+    public function constructionDel($data,$user){
         if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
         $construction = Construction::where('del_time',0)->where('id',$data['id'])->first();
         if(empty($construction)) return [false,'施工单不存在或已被删除'];
@@ -242,7 +242,7 @@ class ConstructionService extends Service
                 ->update(['del_time' => time()]);
 
             //锁定库存释放
-            ProductInventoryService::changeLockNumber([],$product_save);
+            ProductInventoryService::changeLockNumber($user,[],$product_save);
 
             DB::commit();
         }catch (\Exception $exception){
@@ -436,7 +436,7 @@ class ConstructionService extends Service
 
         $id = $data['id'] ?? 0;
         $product_save = $this->getSaveDetail($id);
-        list($status,$msg) = (new ProductInventoryService())->compareStock($product_id, $product_submit, $product_save);
+        list($status,$msg) = (new ProductInventoryService())->compareStock($user,$product_id, $product_submit, $product_save);
         if(! $status) return [false, $msg];
 
         if($is_add){

+ 11 - 3
app/Service/CustomerService.php

@@ -498,12 +498,20 @@ class CustomerService extends Service
     public function customerList($data,$user){
         $model = new Customer(['userData' => $user,'search'=> $data]);
         $model = $model->where('del_time',0)
-            ->select('title','id','model_type','customer_intention','customer_from','customer_type','car_type','consulting_product','intention_product','progress_stage','address1','address2','crt_id','crt_time','mark','importance','company','company_short_name','depart_id','state_type','customer_state','customer_grade','pond_state')
+            ->select('title','id','model_type','customer_intention','customer_from','customer_type','car_type','consulting_product','intention_product','progress_stage','address1','address2','crt_id','crt_time','mark','importance','company','company_short_name','depart_id','state_type','customer_state','customer_grade','pond_state','top_depart_id')
             ->orderby('id', 'desc');
 
         if(! empty($data['pond_state'])) {
-            // 进入公海池的客户 所有人可见
-            $model->where('pond_state', '>',0);
+            $search_depart_id = $data['top_depart_id'] ?? 0; //顶级公司
+            if(empty($search_depart_id)){
+                $top_depart_id = $user['depart_top'][0] ?? [];
+                $top_depart_id = $top_depart_id['depart_id'] ?? 0;
+            }else{
+                //查询 顶级公司
+                $top_depart_id = $search_depart_id;
+            }
+            // 进入公海池的客户 公司下所有人可见
+            $model->where('pond_state', '>',0)->where('top_depart_id',$top_depart_id);
         }
         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
         if(! empty($data['time_type'])) {

+ 15 - 2
app/Service/EmployeeService.php

@@ -10,6 +10,7 @@ use App\Model\EmployeeManagerDepart;
 use App\Model\EmployeeMenuPermission;
 use App\Model\EmployeeRole;
 use App\Model\EmployeeTeamPermission;
+use App\Model\ProductInventorySet;
 use App\Model\Role;
 use App\Model\RoleMenu;
 use App\Model\RoleMenuButton;
@@ -576,6 +577,9 @@ class EmployeeService extends Service
                         DB::rollBack();
                         return [false,'管理员账号部门关联生成失败'];
                     }
+
+                    //公司是否校验锁定库存
+                    ProductInventorySet::insert(['top_depart_id' => $depart_id, 'param_one' => 1, 'crt_time' => time()]);
                 }
             }
 
@@ -1035,8 +1039,8 @@ class EmployeeService extends Service
         if($res['is_admin'] != Employee::IS_ADMIN) return [false,'该账号不能登录!'];
         if($res['state'] == Employee::NOT_USE) return [false,'账号停用!'];
 
-        $is_main = EmployeeService::isMain($res['id']);
         $return = EmployeeService::getLoginDepart($res['id']);
+        $is_main = $return[4] ?? 0;
         $depart_top_title = $return[1] ?? [];
         $depart_top_title = $depart_top_title[0]['title'] ?? "";
         return [true, ['id'=>$res['id'], 'name'=>$res['emp_name'], 'is_main' => $is_main, 'top_depart_title' => $depart_top_title]];
@@ -1201,27 +1205,36 @@ class EmployeeService extends Service
         $top = $map = $rule = [];
         $is_all_depart = 0;
         if(! empty($depart)){
+            //库存校验
+            $set_map = ProductInventorySet::where('param_one','>',0)->pluck('param_one','top_depart_id')->toArray();
+            //所有部门
             $list = Depart::where('del_time',0)->get()->toArray();
             $depart_map = array_column($list,null,'id');
-            foreach ($depart as $value){
+            foreach ($depart as $key => $value){
                 if($value['parent_id'] == 0){//顶级
+                    $is_stock = $set_map[$value['depart_id']] ?? 1;
+                    $depart[$key]['is_stock'] = $is_stock;
                     $top[$value['depart_id']] = [
                         'depart_id' => $value['depart_id'],
                         'is_main' => $value['is_main'],
                         'basic_type_id' => $value['basic_type_id'],
                         'title' => $value['title'],
+                        'is_stock' => $is_stock,
                     ];
                     $map[$value['depart_id']] = $value['depart_id'];
                     if(! empty($value['is_main']) && ! $is_all_depart) $is_all_depart = 1;
                 }else{
                     $t = self::getTopParentId($value['depart_id'],$list);
                     if($t && isset($depart_map[$t])) {
+                        $is_stock = $set_map[$t] ?? 1;
+                        $depart[$key]['is_stock'] = $is_stock;
                         $t_tmp = $depart_map[$t] ?? [];
                         $top[$t_tmp['id']] = [
                             'depart_id' => $t_tmp['id'],
                             'is_main' => $t_tmp['is_main'],
                             'basic_type_id' => $t_tmp['basic_type_id'],
                             'title' => $t_tmp['title'],
+                            'is_stock' => $set_map[$t] ?? 1,
                         ];
                         $map[$value['depart_id']] = $t;
                         if(! empty($tmp['is_main']) && $value['is_main'] && ! $is_all_depart) $is_all_depart = 1;

+ 5 - 5
app/Service/InvoiceOrderService.php

@@ -59,7 +59,7 @@ class InvoiceOrderService extends Service
                 InvoiceOrderInfo::insert($sub);
 
                 //锁定库存
-                ProductInventoryService::changeLockNumber($msg[0],$msg[1]);
+                ProductInventoryService::changeLockNumber($user, $msg[0],$msg[1]);
             }
 
             DB::commit();
@@ -115,7 +115,7 @@ class InvoiceOrderService extends Service
                 InvoiceOrderInfo::insert($sub);
 
                 //锁定库存
-                ProductInventoryService::changeLockNumber($msg[0],[]);
+                ProductInventoryService::changeLockNumber($user,$msg[0],[]);
             }
 
             DB::commit();
@@ -174,7 +174,7 @@ class InvoiceOrderService extends Service
      * @param $data
      * @return array
      */
-    public function del($data){
+    public function del($data, $user){
         if($this->isEmpty($data,'order_number')) return [false,'请选择数据!'];
 
         $bool = InvoiceOrder::where('order_number',$data['order_number'])
@@ -191,7 +191,7 @@ class InvoiceOrderService extends Service
                 'del_time'=>time()
             ]);
             //锁定库存释放
-            ProductInventoryService::changeLockNumber([],$product_save);
+            ProductInventoryService::changeLockNumber($user,[],$product_save);
 
             DB::commit();
         }catch (\Throwable $e){
@@ -295,7 +295,7 @@ class InvoiceOrderService extends Service
         }
         $order_number = $data['order_number'] ?? '';
         $product_save = $this->getSaveDetail($order_number);
-        list($status,$msg) = (new ProductInventoryService())->compareStock($product_id, $product_submit, $product_save);
+        list($status,$msg) = (new ProductInventoryService())->compareStock($user,$product_id, $product_submit, $product_save);
         if(! $status) return [false, $msg];
 
         //所属部门 以及  顶级部门

+ 42 - 17
app/Service/ProductInventoryService.php

@@ -5,12 +5,14 @@ namespace App\Service;
 use App\Model\BasicType;
 use App\Model\Construction;
 use App\Model\ConstructionProductInfo;
+use App\Model\Depart;
 use App\Model\InOutRecord;
 use App\Model\InvoiceOrder;
 use App\Model\InvoiceOrderInfo;
 use App\Model\Product;
 use App\Model\ProductCategory;
 use App\Model\ProductInventory;
+use App\Model\ProductInventorySet;
 use App\Model\PurchaseOrder;
 use App\Model\ReturnExchangeOrder;
 use App\Model\SalesOrder;
@@ -91,14 +93,15 @@ class ProductInventoryService extends Service
     }
 
     //更新锁定库存
-    //第一个数组 (提交的数据)  第二个数组(保存过的数据)
-    public static function changeLockNumber($submit_total = [], $save_total = []){
+    //$user 当前登录人的信息
+    //$submit_total (提交的数据)  $save_total(保存过的数据)
+    public static function changeLockNumber($user, $submit_total = [], $save_total = []){
         if(empty($submit_total) && empty($save_total)) return;
 
-        $setting_map = Setting::where('setting_name','lock_number')
-            ->pluck('setting_value','setting_name')
-            ->toArray();
-        if(empty($setting_map['lock_number'])) return; //是否使用锁定库存
+        //是否使用锁定库存校验  默认使用
+        $depart = array_shift($user['rule_depart']);
+        $is_stock = empty($depart['is_stock']) ? 1 : $depart['is_stock'];
+        if($is_stock == ProductInventorySet::type_two) return;
 
         //产品数扣减
         if(! empty($save_total)){
@@ -121,15 +124,14 @@ class ProductInventoryService extends Service
     }
 
     //比较库存
-    public static function compareStock($product_id = [],$product_submit = [], $product_save = []){
+    public static function compareStock($user, $product_id = [],$product_submit = [], $product_save = []){
         if(empty($product_id) || empty($product_submit)) return [false,'比较参数不能为空'];
 
         //库存
         $array = ProductInventory::whereIn('product_id', $product_id)
-            ->where('number','>',0)
             ->select('id','product_id','number','crt_time','lock_number','storehouse_id')
             ->get()->toArray();
-        if(empty($array)) return [false,'未找到产品库存数据'];
+        if(empty($array)) return [false,'产品库存数据不存在'];
         $stock = [];
         foreach ($array as $value){
             $key = $value['product_id'] . ',' . $value['storehouse_id'];
@@ -139,26 +141,28 @@ class ProductInventoryService extends Service
         $pro = Product::whereIn('id',$product_id)
             ->pluck('title','id')
             ->toArray();
-        $setting_map = Setting::where('setting_name','lock_number')
-            ->pluck('setting_value','setting_name')
-            ->toArray();
+
+        //是否使用锁定库存校验  默认使用
+        $depart = array_shift($user['rule_depart']);
+        $is_stock = empty($depart['is_stock']) ? 1 : $depart['is_stock'];
 
         foreach ($product_submit as $key => $value){
             $tmp = explode(',',$key);
             $product_id = $tmp[0];
-            $pro_tmp = $pro[$product_id] ?? '';
-            if(! $pro_tmp) return [false,'异常产品数据'];
-            if(! isset($stock[$key])) return [false,'产品:'. $pro_tmp .'库存不存在'];
+            $pro_title = $pro[$product_id] ?? '';
+            if(! $pro_title) return [false,'异常产品数据'];
+            if(! isset($stock[$key])) return [false,'产品:'. $pro_title .'库存不存在'];
             $stock_product = $stock[$key];
 
-            if(! empty($setting_map['lock_number'])){//真实库存
+            if($is_stock == ProductInventorySet::type_one){
+                //校验锁定库存
                 $save_data = $product_save[$key] ?? 0;//已保存数量
                 $tmp_lock = ($stock_product['lock_number'] > 0 ? $stock_product['lock_number'] : 0) - $save_data;
                 $number = $stock_product['number'] - ($tmp_lock > 0 ? $tmp_lock : 0);
             }else{
                 $number = $stock_product['number'];
             }
-            if($value > $number) return [false, $pro_tmp. '数量不足,当前数量:' . $number];
+            if($value > $number) return [false, $pro_title. '数量不足,当前数量:' . $number];
         }
 
         return [true,''];
@@ -333,4 +337,25 @@ class ProductInventoryService extends Service
 
         return $array;
     }
+
+    //库存设置列表
+    public function productInventorySetList($data, $user){
+        $model = new ProductInventorySet(['userData' => $user, 'search' => $data]);
+        $list = $model->where('del_time',0)
+            ->where('param_one','>',0)
+            ->select('id','top_depart_id','param_one')
+            ->get()->toArray();
+
+        return [true, $list];
+    }
+
+    //库存设置
+    public function productInventorySet($data, $user){
+        if(empty($data['id'])) return [false, 'ID不能为空'];
+
+        ProductInventorySet::where('id',$data['id'])
+            ->update(['param_one' => $data['param_one']]);
+
+        return [true, ''];
+    }
 }

+ 5 - 5
app/Service/ReturnExchangeOrderService.php

@@ -103,7 +103,7 @@ class ReturnExchangeOrderService extends Service
             }
 
             //锁定库存
-            ProductInventoryService::changeLockNumber($msg[0],$msg[1]);
+            ProductInventoryService::changeLockNumber($user, $msg[0],$msg[1]);
 
             DB::commit();
         }catch (\Throwable $e){
@@ -200,7 +200,7 @@ class ReturnExchangeOrderService extends Service
             }
 
             //锁定库存
-            ProductInventoryService::changeLockNumber($msg[0],[]);
+            ProductInventoryService::changeLockNumber($user, $msg[0],[]);
 
             DB::commit();
         }catch (\Throwable $e){
@@ -278,7 +278,7 @@ class ReturnExchangeOrderService extends Service
         return [true, $order];
     }
 
-    public function del($data){
+    public function del($data,$user){
         if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
         $order = ReturnExchangeOrder::where('del_time',0)->where('id',$data['id'])->first();
         if(empty($order)) return [false,'退换货单不存在或已被删除'];
@@ -299,7 +299,7 @@ class ReturnExchangeOrderService extends Service
             ]);
 
             //锁定库存
-            ProductInventoryService::changeLockNumber([], $product_save_minus);
+            ProductInventoryService::changeLockNumber($user, [], $product_save_minus);
 
             DB::commit();
         }catch (\Throwable $e){
@@ -406,7 +406,7 @@ class ReturnExchangeOrderService extends Service
             }
 
             $product_save_minus = $this->getSaveDetailMinus($id);
-            list($status,$msg) = (new ProductInventoryService())->compareStock($product_id, $product_submit_minus, $product_save_minus);
+            list($status,$msg) = (new ProductInventoryService())->compareStock($user,$product_id, $product_submit_minus, $product_save_minus);
             if(! $status) return [false, $msg];
         }
 

+ 3 - 19
app/Service/SupplierService.php

@@ -208,7 +208,7 @@ class SupplierService extends Service
                     'name' => $depart_map[$value['data_id']],
                 ];
                 $customer['depart'][] = $tmp;
-            }elseif ($value['type'] == CustomerInfo::type_two){
+            }elseif ($value['type'] == SupplierInfo::type_two){
                 $tmp = [
                     'id' => $value['data_id'],
                     'name' => $emp_map[$value['data_id']] ?? '',
@@ -231,23 +231,10 @@ class SupplierService extends Service
     public function customerList($data,$user){
         $model = new Supplier(['userData' => $user,'search'=> $data]);
         $model = $model->where('del_time',0)
-            ->select('id','title','address1','address2','mobile','crt_id','crt_time','is_main')
-            ->orderby('id', 'desc');
+            ->select('id','title','address1','address2','mobile','crt_id','crt_time','is_main','mark')
+            ->orderby('id', 'asc');
 
         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
-        if(! empty($data['time_type'])) {
-            if($data['time_type'] == 1) {
-                $start = strtotime('today');
-                $end = strtotime('tomorrow') - 1;
-            }elseif ($data['time_type'] == 2){
-                $start = strtotime('this week',strtotime('today'));
-                $end = strtotime('this week +6 days 23:59:59', strtotime('today'));
-            }
-            if(! empty($start) && ! empty($end)) {
-                $model->where('crt_time','>=',$start);
-                $model->where('crt_time','<=',$end);
-            }
-        }
 
         $list = $this->limit($model,'',$data);
         $list = $this->fillData($list);
@@ -294,9 +281,6 @@ class SupplierService extends Service
     public function fillData($data){
         if(empty($data['data'])) return $data;
 
-        $depart_title = Depart::where('id',array_unique(array_column($data['data'],'depart_id')))
-            ->pluck('title','id')
-            ->toArray();
         $emp = Employee::whereIn('id',array_unique(array_column($data['data'],'crt_id')))
             ->pluck('emp_name','id')
             ->toArray();

+ 4 - 0
routes/api.php

@@ -177,4 +177,8 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('productInAndOutList', 'Api\ProductInventoryController@productInAndOutList');
     //库存台账
     $route->any('productInventoryStockList', 'Api\ProductInventoryController@productInventoryStockList');
+    //库存设置列表
+    $route->any('productInventorySetList', 'Api\ProductInventoryController@productInventorySetList');
+    //库存设置校验开关
+    $route->any('productInventorySet', 'Api\ProductInventoryController@productInventorySet');
 });