cqpCow 1 year ago
parent
commit
ad9498f19b

+ 76 - 0
app/Http/Controllers/Api/StorehouseController.php

@@ -0,0 +1,76 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+
+use App\Service\BoxService;
+use App\Service\StorehouseService;
+use Illuminate\Http\Request;
+
+
+class StorehouseController extends BaseController
+{
+    public function add(Request $request)
+    {
+        $service = new StorehouseService();
+        list($status,$data) = $service->add($request->all(), $userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function edit(Request $request)
+    {
+        $service = new StorehouseService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->edit($request->all(), $userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function del(Request $request)
+    {
+        $service = new StorehouseService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->del($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+
+    public function storehouseList(Request $request)
+    {
+        $service = new StorehouseService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->storehouseList($request->all(),$userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function storehouseDetail(Request $request)
+    {
+        $service = new StorehouseService();
+        list($status,$data) = $service->storeDetail($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+}

+ 21 - 0
app/Model/InvoiceOrder.php

@@ -2,10 +2,12 @@
 
 
 namespace App\Model;
 namespace App\Model;
 
 
+use App\Scopes\DepartmentScope;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Model;
 
 
 class InvoiceOrder extends Model
 class InvoiceOrder extends Model
 {
 {
+    protected $fillable = ['userData'];
     protected $table = "invoice_order"; //指定表
     protected $table = "invoice_order"; //指定表
     const CREATED_AT = 'crt_time';
     const CREATED_AT = 'crt_time';
     const UPDATED_AT = 'upd_time';
     const UPDATED_AT = 'upd_time';
@@ -17,4 +19,23 @@ class InvoiceOrder extends Model
         0 => '未确认',
         0 => '未确认',
         1 => '已确认',
         1 => '已确认',
     ];
     ];
+
+    public static $user = [];
+    public static $is_search = false;
+
+    public function __construct(array $attributes = [])
+    {
+        if(! empty($attributes['userData'])) {
+            self::$user = $attributes['userData'];
+            self::$is_search = true;
+        }
+        parent::__construct($attributes);
+    }
+
+    protected static function boot(){
+        parent::boot();
+        if(self::$is_search){
+            static::addGlobalScope(new DepartmentScope(self::$user));
+        }
+    }
 }
 }

+ 20 - 0
app/Model/Storehouse.php

@@ -2,6 +2,7 @@
 
 
 namespace App\Model;
 namespace App\Model;
 
 
+use App\Scopes\DepartmentScope;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Model;
 
 
 /**
 /**
@@ -11,9 +12,28 @@ use Illuminate\Database\Eloquent\Model;
  */
  */
 class Storehouse extends Model
 class Storehouse extends Model
 {
 {
+    protected $fillable = ['userData'];
     protected $table = "storehouse"; //指定表
     protected $table = "storehouse"; //指定表
     const CREATED_AT = 'crt_time';
     const CREATED_AT = 'crt_time';
     const UPDATED_AT = 'upd_time';
     const UPDATED_AT = 'upd_time';
     protected $dateFormat = 'U';
     protected $dateFormat = 'U';
 
 
+    public static $user = [];
+    public static $is_search = false;
+
+    public function __construct(array $attributes = [])
+    {
+        if(! empty($attributes['userData'])) {
+            self::$user = $attributes['userData'];
+            self::$is_search = true;
+        }
+        parent::__construct($attributes);
+    }
+
+    protected static function boot(){
+        parent::boot();
+        if(self::$is_search){
+            static::addGlobalScope(new DepartmentScope(self::$user));
+        }
+    }
 }
 }

+ 54 - 28
app/Service/CheckService.php

@@ -96,15 +96,19 @@ class CheckService extends Service
         $insert = [];
         $insert = [];
         $time = time();
         $time = time();
         foreach ($result as $value){
         foreach ($result as $value){
-            if(isset($insert[$value['product_id']])){
-                $insert[$value['product_id']]['number'] += -($value['number']);
+            $key = $value['product_id'] . $value['storehouse_id'];
+            if(isset($insert[$key])){
+                $insert[$key]['number'] += -($value['number']);
             }else{
             }else{
-                $insert[$value['product_id']] = [
+                $insert[$key] = [
                     'product_id' => $value['product_id'],
                     'product_id' => $value['product_id'],
                     'number' => -($value['number']),
                     'number' => -($value['number']),
                     'order_type' => InvoiceOrder::prefix,
                     'order_type' => InvoiceOrder::prefix,
                     'order_number' => $order['order_number'],
                     'order_number' => $order['order_number'],
-                    'crt_time' => $time
+                    'crt_time' => $time,
+                    'storehouse_id' => $value['storehouse_id'],
+                    'depart_id' => $order['depart_id'],
+                    'top_depart_id' => $order['top_depart_id'],
                 ];
                 ];
             }
             }
         }
         }
@@ -135,16 +139,21 @@ class CheckService extends Service
         if(empty($result)) return [false,'采购单产品信息不存在或已被删除'];
         if(empty($result)) return [false,'采购单产品信息不存在或已被删除'];
         $insert = [];
         $insert = [];
         $time = time();
         $time = time();
+
         foreach ($result as $value){
         foreach ($result as $value){
-            if(isset($insert[$value['product_id']])){
-                $insert[$value['product_id']]['number'] += $value['number'];
+            $key = $value['product_id'] . $value['storehouse_id'];
+            if(isset($insert[$key])){
+                $insert[$key]['number'] += $value['number'];
             }else{
             }else{
-                $insert[$value['product_id']] = [
+                $insert[$key] = [
                     'product_id' => $value['product_id'],
                     'product_id' => $value['product_id'],
                     'number' => $value['number'],
                     'number' => $value['number'],
                     'order_type' => PurchaseOrder::prefix,
                     'order_type' => PurchaseOrder::prefix,
                     'order_number' => $order['order_number'],
                     'order_number' => $order['order_number'],
-                    'crt_time' => $time
+                    'crt_time' => $time,
+                    'storehouse_id' => $value['storehouse_id'],
+                    'depart_id' => $order['depart_id'],
+                    'top_depart_id' => $order['top_depart_id'],
                 ];
                 ];
             }
             }
         }
         }
@@ -244,15 +253,19 @@ class CheckService extends Service
         $insert = [];
         $insert = [];
         $time = time();
         $time = time();
         foreach ($result as $value){
         foreach ($result as $value){
-            if(isset($insert[$value['product_id']])){
-                $insert[$value['product_id']]['number'] += -($value['number']);
+            $key = $value['product_id'] . $value['storehouse_id'];
+            if(isset($insert[$key])){
+                $insert[$key]['number'] += -($value['number']);
             }else{
             }else{
-                $insert[$value['product_id']] = [
+                $insert[$key] = [
                     'product_id' => $value['product_id'],
                     'product_id' => $value['product_id'],
                     'number' => -($value['number']),
                     'number' => -($value['number']),
                     'order_type' => Construction::$prefix[$order['model_type']] ?? '',
                     'order_type' => Construction::$prefix[$order['model_type']] ?? '',
                     'order_number' => $order['order_number'],
                     'order_number' => $order['order_number'],
-                    'crt_time' => $time
+                    'crt_time' => $time,
+                    'storehouse_id' => $value['storehouse_id'],
+                    'depart_id' => $order['depart_id'],
+                    'top_depart_id' => $order['top_depart_id'],
                 ];
                 ];
             }
             }
         }
         }
@@ -284,31 +297,38 @@ class CheckService extends Service
         $insert = $insert2 = [];
         $insert = $insert2 = [];
         $time = time();
         $time = time();
         foreach ($result as $value){
         foreach ($result as $value){
+            $key = $value['product_id'] . $value['storehouse_id'];
             $prefix = ReturnExchangeOrder::$prefix[$value['return_or_exchange']] ?? '';
             $prefix = ReturnExchangeOrder::$prefix[$value['return_or_exchange']] ?? '';
             if($value['return_or_exchange'] == ReturnExchangeOrderProductInfo::type_one){
             if($value['return_or_exchange'] == ReturnExchangeOrderProductInfo::type_one){
                 //退货
                 //退货
-                if(isset($insert[$value['product_id']])){
-                    $insert[$value['product_id']]['number'] += $value['number'];
+                if(isset($insert[$key])){
+                    $insert[$key]['number'] += $value['number'];
                 }else{
                 }else{
-                    $insert[$value['product_id']] = [
+                    $insert[$key] = [
                         'product_id' => $value['product_id'],
                         'product_id' => $value['product_id'],
                         'number' => $value['number'],
                         'number' => $value['number'],
                         'order_type' => $prefix,
                         'order_type' => $prefix,
                         'order_number' => $order['order_number'],
                         'order_number' => $order['order_number'],
-                        'crt_time' => $time
+                        'crt_time' => $time,
+                        'storehouse_id' => $value['storehouse_id'],
+                        'depart_id' => $order['depart_id'],
+                        'top_depart_id' => $order['top_depart_id'],
                     ];
                     ];
                 }
                 }
             }else{
             }else{
                 //换货
                 //换货
-                if(isset($insert2[$value['product_id']])){
-                    $insert2[$value['product_id']]['number'] += -($value['number']);
+                if(isset($insert2[$key])){
+                    $insert2[$key]['number'] += -($value['number']);
                 }else{
                 }else{
-                    $insert2[$value['product_id']] = [
+                    $insert2[$key] = [
                         'product_id' => $value['product_id'],
                         'product_id' => $value['product_id'],
                         'number' => -($value['number']),
                         'number' => -($value['number']),
                         'order_type' => $prefix,
                         'order_type' => $prefix,
                         'order_number' => $order['order_number'],
                         'order_number' => $order['order_number'],
-                        'crt_time' => $time
+                        'crt_time' => $time,
+                        'storehouse_id' => $value['storehouse_id'],
+                        'depart_id' => $order['depart_id'],
+                        'top_depart_id' => $order['top_depart_id'],
                     ];
                     ];
                 }
                 }
             }
             }
@@ -412,20 +432,23 @@ class CheckService extends Service
         if (empty($record)) return [false,'流水记录不存在'];
         if (empty($record)) return [false,'流水记录不存在'];
         $result = $lock_number = [];
         $result = $lock_number = [];
         foreach ($record as $value){
         foreach ($record as $value){
-            if(isset($result[$value['product_id']])){
-                $result[$value['product_id']]['number'] += $value['number'];
+            $key = $value['product_id'] . $value['storehouse_id'];
+            if(isset($result[$key])){
+                $result[$key]['number'] += $value['number'];
             }else{
             }else{
-                $result[$value['product_id']] = [
+                $result[$key] = [
                     'product_id' => $value['product_id'],
                     'product_id' => $value['product_id'],
                     'number' => $value['number'],
                     'number' => $value['number'],
                     'crt_time' => $value['crt_time'],
                     'crt_time' => $value['crt_time'],
+                    'storehouse_id' => $value['storehouse_id'],
+                    'top_depart_id' => $value['top_depart_id'],
                 ];
                 ];
             }
             }
             if($value['number'] < 0){
             if($value['number'] < 0){
-                if(isset($lock_number[$value['product_id']])){
-                    $lock_number[$value['product_id']] += $value['number'];
+                if(isset($lock_number[$key])){
+                    $lock_number[$key] += $value['number'];
                 }else{
                 }else{
-                    $lock_number[$value['product_id']] = $value['number'];
+                    $lock_number[$key] = $value['number'];
                 }
                 }
             }
             }
         }
         }
@@ -435,17 +458,20 @@ class CheckService extends Service
             ->pluck('setting_value','setting_name')->toArray();
             ->pluck('setting_value','setting_name')->toArray();
         $result = array_values($result);
         $result = array_values($result);
         foreach ($result as $key => $value){
         foreach ($result as $key => $value){
+            $keys = $value['product_id'] . $value['storehouse_id'];
             $m = ProductInventory::where('product_id',$value['product_id'])
             $m = ProductInventory::where('product_id',$value['product_id'])
-                ->select('product_id','number')
+                ->where('storehouse_id',$value['storehouse_id'])
+                ->select('product_id','number','storehouse_id')
                 ->first();
                 ->first();
 
 
             if(empty($m)){
             if(empty($m)){
                 ProductInventory::insert($result[$key]);
                 ProductInventory::insert($result[$key]);
             }else{
             }else{
                 $lock_number_tmp = 0;
                 $lock_number_tmp = 0;
-                if(! empty($setting_map['lock_number']) && ! empty($lock_number[$value['product_id']])) $lock_number_tmp = $lock_number[$value['product_id']];
+                if(! empty($setting_map['lock_number']) && ! empty($lock_number[$keys])) $lock_number_tmp = $lock_number[$keys];
 
 
                 ProductInventory::where('product_id',$m->product_id)
                 ProductInventory::where('product_id',$m->product_id)
+                    ->where('storehouse_id',$m->storehouse_id)
                     ->lockForUpdate()
                     ->lockForUpdate()
                     ->update([
                     ->update([
                         'number' => DB::raw('number + ('. $value['number'] . ')'),
                         'number' => DB::raw('number + ('. $value['number'] . ')'),

+ 26 - 17
app/Service/ConstructionService.php

@@ -9,6 +9,7 @@ use App\Model\ConstructionProductInfo;
 use App\Model\Customer;
 use App\Model\Customer;
 use App\Model\Employee;
 use App\Model\Employee;
 use App\Model\SalesOrder;
 use App\Model\SalesOrder;
+use App\Model\Storehouse;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\DB;
 
 
 /**
 /**
@@ -47,8 +48,7 @@ class ConstructionService extends Service
             $model->address1 = ! empty($data['address1']) ? json_encode($data['address1']) : '';
             $model->address1 = ! empty($data['address1']) ? json_encode($data['address1']) : '';
             $model->address2 = $data['address2'] ?? '';
             $model->address2 = $data['address2'] ?? '';
             $model->introduction = $data['introduction'] ?? '';
             $model->introduction = $data['introduction'] ?? '';
-//            $model->depart_id = $data['depart_id'] ?? 0;
-//            $model->top_depart_id = $data['top_depart_id'] ?? 0;
+            $model->storehouse_id = $data['storehouse_id'] ?? 0;
             $model->save();
             $model->save();
             $time = time();
             $time = time();
 
 
@@ -103,6 +103,7 @@ class ConstructionService extends Service
                         'retail_price' => $value['retail_price'] ?? 0,
                         'retail_price' => $value['retail_price'] ?? 0,
                         'mark' => $value['mark'] ?? '',
                         'mark' => $value['mark'] ?? '',
                         'crt_time' => $time,
                         'crt_time' => $time,
+                        'storehouse_id' => $data['storehouse_id'] ?? 0,
                     ];
                     ];
                 }
                 }
                 ConstructionProductInfo::insert($insert);
                 ConstructionProductInfo::insert($insert);
@@ -154,6 +155,7 @@ class ConstructionService extends Service
             $model->crt_id = $user['id'];
             $model->crt_id = $user['id'];
             $model->depart_id = $data['depart_id'] ?? 0;
             $model->depart_id = $data['depart_id'] ?? 0;
             $model->top_depart_id = $data['top_depart_id'] ?? 0;
             $model->top_depart_id = $data['top_depart_id'] ?? 0;
+            $model->storehouse_id = $data['storehouse_id'] ?? 0;
             $model->save();
             $model->save();
             $time = time();
             $time = time();
 
 
@@ -201,12 +203,13 @@ class ConstructionService extends Service
                         'retail_price' => $value['retail_price'] ?? 0,
                         'retail_price' => $value['retail_price'] ?? 0,
                         'mark' => $value['mark'] ?? '',
                         'mark' => $value['mark'] ?? '',
                         'crt_time' => $time,
                         'crt_time' => $time,
+                        'storehouse_id' => $data['storehouse_id'] ?? 0,
                     ];
                     ];
                 }
                 }
                 ConstructionProductInfo::insert($insert);
                 ConstructionProductInfo::insert($insert);
 
 
                 //锁定库存
                 //锁定库存
-                ProductInventoryService::changeLockNumber($msg[0]);
+                ProductInventoryService::changeLockNumber($msg[0],[]);
             }
             }
 
 
             DB::commit();
             DB::commit();
@@ -282,6 +285,7 @@ class ConstructionService extends Service
         $construction['sales_order_number'] = $sales;
         $construction['sales_order_number'] = $sales;
         $customer_title = Customer::where('id',$construction['customer_id'])->value('title');
         $customer_title = Customer::where('id',$construction['customer_id'])->value('title');
         $construction['customer_title'] = $customer_title;
         $construction['customer_title'] = $customer_title;
+        $construction['storehouse_title'] = Storehouse::where('id',$data['storehouse_id'])->value('title');
         $emp_title = Employee::where('id',$construction['customer_contact_id'])->value('emp_name');
         $emp_title = Employee::where('id',$construction['customer_contact_id'])->value('emp_name');
         $construction['customer_contact_title'] = $emp_title;
         $construction['customer_contact_title'] = $emp_title;
         $construction['employee_one'] = $construction['construction_contact'] = $construction['product'] = [];
         $construction['employee_one'] = $construction['construction_contact'] = $construction['product'] = [];
@@ -347,7 +351,7 @@ class ConstructionService extends Service
     public function constructionList($data,$user){
     public function constructionList($data,$user){
         $model = new Construction(['userData' => $user]);
         $model = new Construction(['userData' => $user]);
         $model = $model->where('del_time',0)
         $model = $model->where('del_time',0)
-            ->select('title','id','model_type','order_number','customer_id','customer_contact_id','install_method','install_position','sales_order_id','construction_fee','construction_time','handover_time','urgency','crt_id','crt_time','mark','state','address1','address2','introduction','service_price')
+            ->select('title','id','model_type','order_number','customer_id','customer_contact_id','install_method','install_position','sales_order_id','construction_fee','construction_time','handover_time','urgency','crt_id','crt_time','mark','state','address1','address2','introduction','service_price','storehouse_id')
             ->orderby('id', 'desc');
             ->orderby('id', 'desc');
 
 
         if($user['id'] != Employee::SPECIAL_ADMIN){
         if($user['id'] != Employee::SPECIAL_ADMIN){
@@ -379,8 +383,7 @@ class ConstructionService extends Service
         if(empty($data['model_type'])) return [false,'工单模板类型不能为空'];
         if(empty($data['model_type'])) return [false,'工单模板类型不能为空'];
         if(! in_array($data['model_type'],Construction::$model_type)) return [false,'工单模板类型错误'];
         if(! in_array($data['model_type'],Construction::$model_type)) return [false,'工单模板类型错误'];
         if(empty($data['order_number'])) return [false,'工单编号不能为空'];
         if(empty($data['order_number'])) return [false,'工单编号不能为空'];
-        if(empty($data['construction_time'])) return [false,'实施日期不能为空'];
-        $data['construction_time'] = $this->changeDateToDateMin($data['construction_time']);
+        if(empty($data['storehouse_id'])) return [false,'请选择仓库'];
         if(empty($data['sales_order_id'])) return [false,'请选择合同'];
         if(empty($data['sales_order_id'])) return [false,'请选择合同'];
         $sale = SalesOrder::where('del_time',0)->where('id',$data['sales_order_id'])->first();
         $sale = SalesOrder::where('del_time',0)->where('id',$data['sales_order_id'])->first();
         if(empty($sale)) return [false,'合同不存在或已被删除'];
         if(empty($sale)) return [false,'合同不存在或已被删除'];
@@ -395,9 +398,8 @@ class ConstructionService extends Service
             $res = $this->checkNumber($data['service_price']);
             $res = $this->checkNumber($data['service_price']);
             if(! $res) return [false,'服务价格请输入不超过两位小数并且大于0的数值'];
             if(! $res) return [false,'服务价格请输入不超过两位小数并且大于0的数值'];
         }
         }
-        if(! empty($data['handover_time'])) {
-            $data['handover_time'] = $this->changeDateToDateMin($data['handover_time']);
-        }
+        if(! empty($data['construction_time'])) $data['construction_time'] = $this->changeDateToDateMin($data['construction_time']);
+        if(! empty($data['handover_time'])) $data['handover_time'] = $this->changeDateToDateMin($data['handover_time']);
 
 
         if($data['model_type'] == Construction::Model_type_one){
         if($data['model_type'] == Construction::Model_type_one){
             if(empty($data['install_method'])) return [false,'安装方式不能为空'];
             if(empty($data['install_method'])) return [false,'安装方式不能为空'];
@@ -410,22 +412,24 @@ class ConstructionService extends Service
         if(empty($data['depart_id'])) $data['depart_id'] = $this->getDepart($user);
         if(empty($data['depart_id'])) $data['depart_id'] = $this->getDepart($user);
         $data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
         $data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
 
 
-        $product_submit = [];
+        $product_submit = $product_id = [];
         foreach ($data['product'] as $value){
         foreach ($data['product'] as $value){
             if(empty($value['number'])) return [false,'产品数量不能为空'];
             if(empty($value['number'])) return [false,'产品数量不能为空'];
             $res = $this->checkNumber($value['number']);
             $res = $this->checkNumber($value['number']);
             if(! $res) return [false,'请输入正确的产品数量'];
             if(! $res) return [false,'请输入正确的产品数量'];
 
 
-            if(isset($product_submit[$value['product_id']])){
-                $product_submit[$value['product_id']] += $value['number'];
+            $key = $value['product_id'] . ',' .$data['storehouse_id'];
+            if(isset($product_submit[$key])){
+                $product_submit[$key] += $value['number'];
             }else{
             }else{
-                $product_submit[$value['product_id']] = $value['number'];
+                $product_submit[$key] = $value['number'];
             }
             }
+            $product_id[] = $value['product_id'];
         }
         }
 
 
         $id = $data['id'] ?? 0;
         $id = $data['id'] ?? 0;
         $product_save = $this->getSaveDetail($id);
         $product_save = $this->getSaveDetail($id);
-        list($status,$msg) = (new ProductInventoryService())->compareStock(array_keys($product_submit), $product_submit, $product_save);
+        list($status,$msg) = (new ProductInventoryService())->compareStock($product_id, $product_submit, $product_save);
         if(! $status) return [false, $msg];
         if(! $status) return [false, $msg];
 
 
         if($is_add){
         if($is_add){
@@ -457,6 +461,9 @@ class ConstructionService extends Service
             ->pluck('title','id')
             ->pluck('title','id')
             ->toArray();
             ->toArray();
         $sales = SalesOrder::whereIn('id',array_unique(array_column($data['data'],'sales_order_id')))->pluck('order_number','id')->toArray();
         $sales = SalesOrder::whereIn('id',array_unique(array_column($data['data'],'sales_order_id')))->pluck('order_number','id')->toArray();
+        $storehouse = Storehouse::whereIn('id',array_unique(array_column($data['data'],'storehouse_id')))
+            ->pluck('title','id')
+            ->toArray();
         foreach ($data['data'] as $key => $value){
         foreach ($data['data'] as $key => $value){
             $address = '';
             $address = '';
             if(! empty($value['address1'])) {
             if(! empty($value['address1'])) {
@@ -474,6 +481,7 @@ class ConstructionService extends Service
             $data['data'][$key]['customer_contact_title'] = $emp[$value['customer_contact_id']] ?? '';
             $data['data'][$key]['customer_contact_title'] = $emp[$value['customer_contact_id']] ?? '';
             $data['data'][$key]['state_title'] = Construction::$name[$value['state']] ?? '';
             $data['data'][$key]['state_title'] = Construction::$name[$value['state']] ?? '';
             $data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
             $data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
+            $data['data'][$key]['storehouse_title'] = $storehouse[$value['storehouse_id']] ?? '';
         }
         }
 
 
         return $data;
         return $data;
@@ -507,10 +515,11 @@ class ConstructionService extends Service
             ->where('del_time',0)
             ->where('del_time',0)
             ->get()->toArray();
             ->get()->toArray();
         foreach ($sub as $value){
         foreach ($sub as $value){
-            if(isset($product_save[$value['product_id']])){
-                $product_save[$value['product_id']] += $value['number'];
+            $key = $value['product_id'] . ',' . $value['storehouse_id'];
+            if(isset($product_save[$key])){
+                $product_save[$key] += $value['number'];
             }else{
             }else{
-                $product_save[$value['product_id']] = $value['number'];
+                $product_save[$key] = $value['number'];
             }
             }
         }
         }
 
 

+ 28 - 1
app/Service/EmployeeService.php

@@ -13,6 +13,7 @@ use App\Model\EmployeeTeamPermission;
 use App\Model\Role;
 use App\Model\Role;
 use App\Model\RoleMenu;
 use App\Model\RoleMenu;
 use App\Model\RoleMenuButton;
 use App\Model\RoleMenuButton;
+use App\Model\Storehouse;
 use App\Model\SysMenu;
 use App\Model\SysMenu;
 use App\Model\SysMenuButton;
 use App\Model\SysMenuButton;
 use App\Model\Team;
 use App\Model\Team;
@@ -477,7 +478,33 @@ class EmployeeService extends Service
         list($status,$msg) = $this->departRule($data);
         list($status,$msg) = $this->departRule($data);
         if(!$status) return [$status,$msg];
         if(!$status) return [$status,$msg];
 
 
-        Depart::insert($msg['data']);
+        try {
+            DB::beginTransaction();
+
+            foreach ($msg['data'] as $value){
+                $model = new Depart();
+                $model->parent_id = $value['parent_id'];
+                $model->title = $value['title'];
+                $model->code = $value['code'];
+                $model->is_main = $value['is_main'];
+                $model->grade = $value['grade'];
+                $model->save();
+
+                if(empty($value['parent_id'])){
+                    $m = new Storehouse();
+                    $m->title = $value['title'];
+                    $m->depart_id = $model->id;
+                    $m->top_depart_id = $model->id;
+                    $m->crt_id = $user['id'];
+                    $m->save();
+                }
+            }
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
 
 
         return [true,'保存成功!'];
         return [true,'保存成功!'];
     }
     }

+ 34 - 18
app/Service/InvoiceOrderService.php

@@ -7,6 +7,7 @@ use App\Model\Employee;
 use App\Model\InvoiceOrder;
 use App\Model\InvoiceOrder;
 use App\Model\InvoiceOrderInfo;
 use App\Model\InvoiceOrderInfo;
 use App\Model\SalesOrder;
 use App\Model\SalesOrder;
+use App\Model\Storehouse;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\DB;
 
 
 /**
 /**
@@ -21,7 +22,7 @@ class InvoiceOrderService extends Service
      * @return array
      * @return array
      */
      */
     public function edit($data,$user){
     public function edit($data,$user){
-        list($status,$msg) = $this->orderRule($data,false);
+        list($status,$msg) = $this->orderRule($data,$user,false);
         if(!$status) return [$status,$msg];
         if(!$status) return [$status,$msg];
 
 
         try{
         try{
@@ -35,8 +36,8 @@ class InvoiceOrderService extends Service
             $material_model->take_phone = $data['take_phone'];
             $material_model->take_phone = $data['take_phone'];
             $material_model->logistics_company = $data['logistics_company'];
             $material_model->logistics_company = $data['logistics_company'];
             $material_model->logistics_number = $data['logistics_number'];
             $material_model->logistics_number = $data['logistics_number'];
-            $material_model->depart_id = $data['depart_id'] ?? 0;
             $material_model->mark = $data['mark'];
             $material_model->mark = $data['mark'];
+            $material_model->storehouse_id = $data['storehouse_id'];
             $material_model->save();
             $material_model->save();
 
 
             InvoiceOrderInfo::where('order_number',$data['order_number'])
             InvoiceOrderInfo::where('order_number',$data['order_number'])
@@ -48,7 +49,7 @@ class InvoiceOrderService extends Service
                     $sub[] = [
                     $sub[] = [
                         'invoice_id' => $material_model->id,
                         'invoice_id' => $material_model->id,
                         'order_number' => $data['order_number'],
                         'order_number' => $data['order_number'],
-                        'depart_id' => $data['depart_id'] ?? 0,
+                        'storehouse_id' => $data['storehouse_id'] ?? 0,
                         'product_id' => $value['product_id'],
                         'product_id' => $value['product_id'],
                         'number' => $value['number'],
                         'number' => $value['number'],
                         'mark' => $value['mark'] ?? '',
                         'mark' => $value['mark'] ?? '',
@@ -81,7 +82,7 @@ class InvoiceOrderService extends Service
      * @return array
      * @return array
      */
      */
     public function add($data,$user){
     public function add($data,$user){
-        list($status,$msg) = $this->orderRule($data);
+        list($status,$msg) = $this->orderRule($data, $user);
         if(!$status) return [$status,$msg];
         if(!$status) return [$status,$msg];
 
 
         try{
         try{
@@ -97,8 +98,10 @@ class InvoiceOrderService extends Service
             $material_model->logistics_company = $data['logistics_company'];
             $material_model->logistics_company = $data['logistics_company'];
             $material_model->logistics_number = $data['logistics_number'];
             $material_model->logistics_number = $data['logistics_number'];
             $material_model->depart_id = $data['depart_id'] ?? 0;
             $material_model->depart_id = $data['depart_id'] ?? 0;
+            $material_model->top_depart_id = $data['top_depart_id'] ?? 0;
             $material_model->mark = $data['mark'];
             $material_model->mark = $data['mark'];
             $material_model->crt_id = $user['id'];
             $material_model->crt_id = $user['id'];
+            $material_model->storehouse_id = $data['storehouse_id'];
             $material_model->save();
             $material_model->save();
 
 
             if(!empty($data['product'])){
             if(!empty($data['product'])){
@@ -107,7 +110,7 @@ class InvoiceOrderService extends Service
                     $sub[] = [
                     $sub[] = [
                         'invoice_id' => $material_model->id,
                         'invoice_id' => $material_model->id,
                         'order_number' => $data['order_number'],
                         'order_number' => $data['order_number'],
-                        'depart_id' => $data['depart_id'] ?? 0,
+                        'storehouse_id' => $data['storehouse_id'] ?? 0,
                         'product_id' => $value['product_id'],
                         'product_id' => $value['product_id'],
                         'number' => $value['number'],
                         'number' => $value['number'],
                         'mark' => $value['mark'] ?? '',
                         'mark' => $value['mark'] ?? '',
@@ -121,7 +124,7 @@ class InvoiceOrderService extends Service
                 InvoiceOrderInfo::insert($sub);
                 InvoiceOrderInfo::insert($sub);
 
 
                 //锁定库存
                 //锁定库存
-                ProductInventoryService::changeLockNumber($msg[0]);
+                ProductInventoryService::changeLockNumber($msg[0],[]);
             }
             }
 
 
             DB::commit();
             DB::commit();
@@ -147,6 +150,7 @@ class InvoiceOrderService extends Service
             ->first();
             ->first();
         if(empty($order)) return [false, '发货订单不存在或已被删除'];
         if(empty($order)) return [false, '发货订单不存在或已被删除'];
         $order = $order->toArray();
         $order = $order->toArray();
+        $order['storehouse_title'] = Storehouse::where('id',$order['storehouse_id'])->value('title');
         $order['state_title'] = InvoiceOrder::$name[$order['state']] ?? '';
         $order['state_title'] = InvoiceOrder::$name[$order['state']] ?? '';
         $sales = SalesOrder::where('id',$order['sales_order_id'])->value('order_number');
         $sales = SalesOrder::where('id',$order['sales_order_id'])->value('order_number');
         $order['sales_order_number'] = $sales;
         $order['sales_order_number'] = $sales;
@@ -206,11 +210,11 @@ class InvoiceOrderService extends Service
      * @return array
      * @return array
      */
      */
     public function getList($data,$user){
     public function getList($data,$user){
-        $model = InvoiceOrder::where('del_time',0)
-            ->select('id','order_number','sales_order_id','depart_id','send','send_time','take','take_address','take_phone','logistics_company','logistics_number','crt_id','mark','state','crt_time')
+        $model = new InvoiceOrder(['userData' => $user]);
+        $model = $model->where('del_time',0)
+            ->select('id','order_number','sales_order_id','depart_id','send','send_time','take','take_address','take_phone','logistics_company','logistics_number','crt_id','mark','state','crt_time','storehouse_id')
             ->orderby('id', 'desc');
             ->orderby('id', 'desc');
         if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
         if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
-        if(! empty($data['depart_id'])) $model->where('depart_id', $data['depart_id']);
         if(isset($data['state'])) $model->where('state',$data['state']);
         if(isset($data['state'])) $model->where('state',$data['state']);
         if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
         if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
             $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
             $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
@@ -242,6 +246,9 @@ class InvoiceOrderService extends Service
                     ->toArray();
                     ->toArray();
 
 
         $sales = SalesOrder::whereIn('id',array_unique(array_column($data['data'],'sales_order_id')))->pluck('order_number','id')->toArray();
         $sales = SalesOrder::whereIn('id',array_unique(array_column($data['data'],'sales_order_id')))->pluck('order_number','id')->toArray();
+        $storehouse = Storehouse::whereIn('id',array_unique(array_column($data['data'],'storehouse_id')))
+            ->pluck('title','id')
+            ->toArray();
         foreach ($data['data'] as $key => $value){
         foreach ($data['data'] as $key => $value){
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']) : '';
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']) : '';
             $data['data'][$key]['depart_name'] = $depart_map[$value['depart_id']] ?? '';
             $data['data'][$key]['depart_name'] = $depart_map[$value['depart_id']] ?? '';
@@ -249,6 +256,7 @@ class InvoiceOrderService extends Service
             $data['data'][$key]['send_name'] = $emp_map[$value['send']] ?? '';
             $data['data'][$key]['send_name'] = $emp_map[$value['send']] ?? '';
             $data['data'][$key]['state_title'] = InvoiceOrder::$name[$value['state']] ?? '';
             $data['data'][$key]['state_title'] = InvoiceOrder::$name[$value['state']] ?? '';
             $data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
             $data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
+            $data['data'][$key]['storehouse_title'] = $storehouse[$value['storehouse_id']] ?? '';
         }
         }
 
 
         return $data;
         return $data;
@@ -260,9 +268,10 @@ class InvoiceOrderService extends Service
      * @param $is_check
      * @param $is_check
      * @return array
      * @return array
      */
      */
-    public function orderRule(&$data, $is_check = true){
+    public function orderRule(&$data, $user, $is_check = true){
         if($this->isEmpty($data,'send')) return [false,'发货人不能为空!'];
         if($this->isEmpty($data,'send')) return [false,'发货人不能为空!'];
         if($this->isEmpty($data,'product')) return [false,'产品不能为空!'];
         if($this->isEmpty($data,'product')) return [false,'产品不能为空!'];
+        if(! empty($data['storehouse_id'])) return [false,'请选择仓库'];
         if(! empty($data['send_time'])) $data['send_time'] = $this->changeDateToDateMin($data['send_time']);
         if(! empty($data['send_time'])) $data['send_time'] = $this->changeDateToDateMin($data['send_time']);
         if(! empty($data['sales_order_id'])) {
         if(! empty($data['sales_order_id'])) {
             $sales = SalesOrder::where('del_time',0)
             $sales = SalesOrder::where('del_time',0)
@@ -271,23 +280,29 @@ class InvoiceOrderService extends Service
             if(empty($sales)) return [false,'合同不存在或已被删除'];
             if(empty($sales)) return [false,'合同不存在或已被删除'];
             if($sales['sales_order_type'] != SalesOrder::Order_type_two) return [false,'非快递件合同'];
             if($sales['sales_order_type'] != SalesOrder::Order_type_two) return [false,'非快递件合同'];
         }
         }
-        $product_submit = [];
+        $product_submit = $product_id = [];
         foreach ($data['product'] as $value){
         foreach ($data['product'] as $value){
             if(empty($value['number'])) return [false,'产品数量不能为空'];
             if(empty($value['number'])) return [false,'产品数量不能为空'];
             $res = $this->checkNumber($value['number']);
             $res = $this->checkNumber($value['number']);
-            if(! $res) return [false,'请输入正确的产品量'];
+            if(! $res) return [false,'请输入正确的产品量'];
 
 
+            $key = $value['product_id'] . ',' .$data['storehouse_id'];
             if(isset($product_submit[$value['product_id']])){
             if(isset($product_submit[$value['product_id']])){
-                $product_submit[$value['product_id']] += $value['number'];
+                $product_submit[$key] += $value['number'];
             }else{
             }else{
-                $product_submit[$value['product_id']] = $value['number'];
+                $product_submit[$key] = $value['number'];
             }
             }
+            $product_id[] = $value['product_id'];
         }
         }
         $order_number = $data['order_number'] ?? '';
         $order_number = $data['order_number'] ?? '';
         $product_save = $this->getSaveDetail($order_number);
         $product_save = $this->getSaveDetail($order_number);
-        list($status,$msg) = (new ProductInventoryService())->compareStock(array_keys($product_submit), $product_submit, $product_save);
+        list($status,$msg) = (new ProductInventoryService())->compareStock($product_id, $product_submit, $product_save);
         if(! $status) return [false, $msg];
         if(! $status) return [false, $msg];
 
 
+        //所属部门 以及  顶级部门
+        if(empty($data['depart_id'])) $data['depart_id'] = $this->getDepart($user);
+        $data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
+
         if($is_check){
         if($is_check){
             $order_number = (new OrderNoService())->createOrderNumber(InvoiceOrder::prefix);
             $order_number = (new OrderNoService())->createOrderNumber(InvoiceOrder::prefix);
             if(empty($order_number)) return [false,'发货单号生成失败!'];
             if(empty($order_number)) return [false,'发货单号生成失败!'];
@@ -312,10 +327,11 @@ class InvoiceOrderService extends Service
             ->where('del_time',0)
             ->where('del_time',0)
             ->get()->toArray();
             ->get()->toArray();
         foreach ($sub as $value){
         foreach ($sub as $value){
-            if(isset($product_save[$value['product_id']])){
-                $product_save[$value['product_id']] += $value['number'];
+            $key = $value['product_id'] . ',' . $value['storehouse_id'];
+            if(isset($product_save[$key])){
+                $product_save[$key] += $value['number'];
             }else{
             }else{
-                $product_save[$value['product_id']] = $value['number'];
+                $product_save[$key] = $value['number'];
             }
             }
         }
         }
 
 

+ 32 - 15
app/Service/ProductInventoryService.php

@@ -15,6 +15,7 @@ use App\Model\PurchaseOrder;
 use App\Model\ReturnExchangeOrder;
 use App\Model\ReturnExchangeOrder;
 use App\Model\SalesOrder;
 use App\Model\SalesOrder;
 use App\Model\Setting;
 use App\Model\Setting;
+use App\Model\Storehouse;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\DB;
 
 
 class ProductInventoryService extends Service
 class ProductInventoryService extends Service
@@ -111,9 +112,10 @@ class ProductInventoryService extends Service
         }
         }
         //更新锁定库存
         //更新锁定库存
         foreach ($submit_total as $key => $value){
         foreach ($submit_total as $key => $value){
-            $product_id = $key;
+            $tmp = explode(',',$key);
 
 
-            ProductInventory::where('product_id',$product_id)
+            ProductInventory::where('product_id',$tmp[0])
+                ->where('storehouse_id',$tmp[1])
                 ->update(['lock_number' => DB::raw('lock_number + ('. $value . ')')]);
                 ->update(['lock_number' => DB::raw('lock_number + ('. $value . ')')]);
         }
         }
     }
     }
@@ -123,11 +125,16 @@ class ProductInventoryService extends Service
         if(empty($product_id) || empty($product_submit)) return [false,'比较参数不能为空'];
         if(empty($product_id) || empty($product_submit)) return [false,'比较参数不能为空'];
 
 
         //库存
         //库存
-        $array = ProductInventory::whereIn('product_id',$product_id)
+        $array = ProductInventory::whereIn('product_id', $product_id)
             ->where('number','>',0)
             ->where('number','>',0)
-            ->select('id','product_id','number','crt_time','lock_number')
+            ->select('id','product_id','number','crt_time','lock_number','storehouse_id')
             ->get()->toArray();
             ->get()->toArray();
         if(empty($array)) return [false,'未找到产品库存数据'];
         if(empty($array)) return [false,'未找到产品库存数据'];
+        $stock = [];
+        foreach ($array as $value){
+            $key = $value['product_id'] . ',' . $value['storehouse_id'];
+            $stock[$key] = $value;
+        }
 
 
         $pro = Product::whereIn('id',$product_id)
         $pro = Product::whereIn('id',$product_id)
             ->pluck('title','id')
             ->pluck('title','id')
@@ -136,20 +143,22 @@ class ProductInventoryService extends Service
             ->pluck('setting_value','setting_name')
             ->pluck('setting_value','setting_name')
             ->toArray();
             ->toArray();
 
 
-        //比较
-        foreach ($array as $value){
-            $pro_tmp = $pro[$value['product_id']] ?? '';
+        foreach ($product_submit as $key => $value){
+            $tmp = explode(',',$key);
+            $product_id = $tmp[0];
+            $pro_tmp = $pro[$product_id] ?? '';
             if(! $pro_tmp) return [false,'异常产品数据'];
             if(! $pro_tmp) return [false,'异常产品数据'];
-            if(! isset($product_submit[$value['product_id']])) return [false,'产品:' . $pro_tmp.'库存不足'];
+            if(! isset($stock[$key])) return [false,'产品:'. $pro_tmp .'库存不存在'];
+            $stock_product = $stock[$key];
 
 
             if(! empty($setting_map['lock_number'])){//真实库存
             if(! empty($setting_map['lock_number'])){//真实库存
-                $tmp = $product_save[$value['product_id']] ?? 0;//已保存数量
-                $tmp_lock = ($value['lock_number'] > 0 ? $value['lock_number'] : 0) - $tmp;
-                $number = $value['number'] - ($tmp_lock > 0 ? $tmp_lock : 0);
+                $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{
             }else{
-                $number = $value['number'];
+                $number = $stock_product['number'];
             }
             }
-            if($product_submit[$value['product_id']] > $number) return [false,$pro_tmp . '数量不足,当前数量:'. $number];
+            if($value > $number) return [false, $pro_tmp. '数量不足,当前数量:' . $number];
         }
         }
 
 
         return [true,''];
         return [true,''];
@@ -159,7 +168,7 @@ class ProductInventoryService extends Service
     public function productInventoryList($data,$user){
     public function productInventoryList($data,$user){
         $model = ProductInventory::from('product_inventory as a')
         $model = ProductInventory::from('product_inventory as a')
             ->join('product as b','b.id','a.product_id')
             ->join('product as b','b.id','a.product_id')
-            ->select('a.product_id','a.id','a.number','b.title','b.code','b.product_category_id','b.unit','b.bar_code','a.crt_time')
+            ->select('a.product_id','a.id','a.number','b.title','b.code','b.product_category_id','b.unit','b.bar_code','a.crt_time','a.storehouse_id')
             ->orderby('a.crt_time', 'desc');
             ->orderby('a.crt_time', 'desc');
         if(! empty($data['product_name'])){
         if(! empty($data['product_name'])){
             $product_name = $data['product_name'];
             $product_name = $data['product_name'];
@@ -200,10 +209,14 @@ class ProductInventoryService extends Service
         $basic_map = BasicType::whereIn('id',array_unique(array_column($data['data'],'unit')))
         $basic_map = BasicType::whereIn('id',array_unique(array_column($data['data'],'unit')))
             ->pluck('title','id')
             ->pluck('title','id')
             ->toArray();
             ->toArray();
+        $storehouse = Storehouse::whereIn('id',array_unique(array_column($data['data'],'storehouse_id')))
+            ->pluck('title','id')
+            ->toArray();
         foreach ($data['data'] as $key => $value){
         foreach ($data['data'] as $key => $value){
             $data['data'][$key]['unit_title'] = $basic_map[$value['unit']] ?? '';
             $data['data'][$key]['unit_title'] = $basic_map[$value['unit']] ?? '';
             $data['data'][$key]['product_category_title'] = $category[$value['product_category_id']] ?? '';
             $data['data'][$key]['product_category_title'] = $category[$value['product_category_id']] ?? '';
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']):'';
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']):'';
+            $data['data'][$key]['storehouse_title'] = $storehouse[$value['storehouse_id']] ?? '';
         }
         }
 
 
         return $data;
         return $data;
@@ -214,7 +227,7 @@ class ProductInventoryService extends Service
         $model = InOutRecord::from('in_out_record as a')
         $model = InOutRecord::from('in_out_record as a')
             ->where('a.del_time',0)
             ->where('a.del_time',0)
             ->join('product as b','b.id','a.product_id')
             ->join('product as b','b.id','a.product_id')
-            ->select('a.id','a.product_id','a.number','a.order_type','a.crt_time','b.title','b.code','b.product_category_id','b.unit',DB::raw('SUM(CASE WHEN number < 0 THEN number ELSE 0 END) as out_number'),DB::raw('SUM(CASE WHEN number >= 0 THEN number ELSE 0 END) as in_number'),'a.order_number','a.crt_time')
+            ->select('a.id','a.product_id','a.number','a.order_type','a.crt_time','b.title','b.code','b.product_category_id','b.unit',DB::raw('SUM(CASE WHEN number < 0 THEN number ELSE 0 END) as out_number'),DB::raw('SUM(CASE WHEN number >= 0 THEN number ELSE 0 END) as in_number'),'a.order_number','a.crt_time','a.storehouse_id')
             ->groupby('a.product_id','a.order_number')
             ->groupby('a.product_id','a.order_number')
             ->orderBy('a.crt_time','asc');
             ->orderBy('a.crt_time','asc');
 
 
@@ -272,6 +285,9 @@ class ProductInventoryService extends Service
 
 
         $roll_tmp = [];
         $roll_tmp = [];
         $order_type = $this->getOrderType();
         $order_type = $this->getOrderType();
+        $storehouse = Storehouse::whereIn('id',array_unique(array_column($data['data'],'storehouse_id')))
+            ->pluck('title','id')
+            ->toArray();
         foreach ($data as $key => $value){
         foreach ($data as $key => $value){
             $keys = $value['product_id'];
             $keys = $value['product_id'];
             if(! isset($roll_tmp[$keys])){
             if(! isset($roll_tmp[$keys])){
@@ -295,6 +311,7 @@ class ProductInventoryService extends Service
             $data[$key]['order_name'] = $order_type[$value['order_type']] ?? '';
             $data[$key]['order_name'] = $order_type[$value['order_type']] ?? '';
             $data[$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d",$value['crt_time']):'';
             $data[$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d",$value['crt_time']):'';
             $data[$key]['unit_title'] = $basic_map[$value['unit']] ?? '';
             $data[$key]['unit_title'] = $basic_map[$value['unit']] ?? '';
+            $data['data'][$key]['storehouse_title'] = $storehouse[$value['storehouse_id']] ?? '';
         }
         }
 
 
         return $data;
         return $data;

+ 1 - 1
app/Service/ProductService.php

@@ -534,7 +534,7 @@ class ProductService extends Service
     public function productList($data,$user){
     public function productList($data,$user){
         $model = new Product(['userData' => $user]);
         $model = new Product(['userData' => $user]);
         $model = $model->where('del_time',0)
         $model = $model->where('del_time',0)
-            ->select('title','id','product_category_id','code','size','unit','bar_code','retail_price','cost','depart_price','state','crt_id','crt_time','mark')
+            ->select('title','id','product_category_id','code','size','unit','bar_code','retail_price','cost','depart_price','state','crt_id','crt_time','mark','depart_id','top_depart_id')
             ->orderby('id', 'desc');
             ->orderby('id', 'desc');
 
 
         //getALL传入后无视设置范围
         //getALL传入后无视设置范围

+ 11 - 3
app/Service/PurchaseOrderService.php

@@ -8,6 +8,7 @@ use App\Model\Product;
 use App\Model\PurchaseOrder;
 use App\Model\PurchaseOrder;
 use App\Model\PurchaseOrderInfo;
 use App\Model\PurchaseOrderInfo;
 use App\Model\SalesOrder;
 use App\Model\SalesOrder;
+use App\Model\Storehouse;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\DB;
 
 
 /**
 /**
@@ -42,6 +43,7 @@ class PurchaseOrderService extends Service
             $material_model->sales_order_id = $data['sales_order_id'] ?? 0;
             $material_model->sales_order_id = $data['sales_order_id'] ?? 0;
             $material_model->mark = $data['mark'] ?? '';
             $material_model->mark = $data['mark'] ?? '';
             $material_model->is_purchase_to_main = $data['is_purchase_to_main'];
             $material_model->is_purchase_to_main = $data['is_purchase_to_main'];
+            $material_model->storehouse_id = $data['storehouse_id'];
             $material_model->save();
             $material_model->save();
 
 
             PurchaseOrderInfo::where('order_number',$data['order_number'])
             PurchaseOrderInfo::where('order_number',$data['order_number'])
@@ -53,7 +55,7 @@ class PurchaseOrderService extends Service
                     $sub[] = [
                     $sub[] = [
                         'purchase_order_id' => $material_model->id,
                         'purchase_order_id' => $material_model->id,
                         'order_number' => $data['order_number'],
                         'order_number' => $data['order_number'],
-                        'depart_id' => $data['depart_id'] ?? 0,
+                        'storehouse_id' => $data['storehouse_id'] ?? 0,
                         'product_id' => $value['product_id'],
                         'product_id' => $value['product_id'],
                         'number' => $value['number'],
                         'number' => $value['number'],
                         'price' => $value['price'],
                         'price' => $value['price'],
@@ -104,6 +106,7 @@ class PurchaseOrderService extends Service
             $material_model->mark = $data['mark'] ?? '';
             $material_model->mark = $data['mark'] ?? '';
             $material_model->is_purchase_to_main = $data['is_purchase_to_main'];
             $material_model->is_purchase_to_main = $data['is_purchase_to_main'];
             $material_model->crt_id = $user['id'];
             $material_model->crt_id = $user['id'];
+            $material_model->storehouse_id = $data['storehouse_id'];
             $material_model->save();
             $material_model->save();
 
 
             if(!empty($data['product'])){
             if(!empty($data['product'])){
@@ -112,7 +115,7 @@ class PurchaseOrderService extends Service
                     $sub[] = [
                     $sub[] = [
                         'purchase_order_id' => $material_model->id,
                         'purchase_order_id' => $material_model->id,
                         'order_number' => $data['order_number'],
                         'order_number' => $data['order_number'],
-                        'depart_id' => $data['depart_id'] ?? 0,
+                        'storehouse_id' => $data['storehouse_id'] ?? 0,
                         'product_id' => $value['product_id'],
                         'product_id' => $value['product_id'],
                         'number' => $value['number'],
                         'number' => $value['number'],
                         'price' => $value['price'],
                         'price' => $value['price'],
@@ -209,7 +212,7 @@ class PurchaseOrderService extends Service
      */
      */
     public function getList($data,$user){
     public function getList($data,$user){
         $model = new PurchaseOrder(['userData' => $user]);
         $model = new PurchaseOrder(['userData' => $user]);
-        $model = $model->where('del_time',0)->select('order_number','id','depart_id','top_depart_id','mark','crt_time','state','crt_id','order_type','sales_order_id','supplier','purchase_id','purchase_total','rate','discount_fee','other_fee','total','is_purchase_to_main')
+        $model = $model->where('del_time',0)->select('order_number','id','depart_id','top_depart_id','mark','crt_time','state','crt_id','order_type','sales_order_id','supplier','purchase_id','purchase_total','rate','discount_fee','other_fee','total','is_purchase_to_main','storehouse_id')
             ->orderby('id', 'desc');
             ->orderby('id', 'desc');
         if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
         if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
         if(! empty($data['depart_id'])) $model->where('depart_id', $data['depart_id']);
         if(! empty($data['depart_id'])) $model->where('depart_id', $data['depart_id']);
@@ -245,6 +248,9 @@ class PurchaseOrderService extends Service
                     ->toArray();
                     ->toArray();
 
 
         $sales = SalesOrder::whereIn('id',array_unique(array_column($data['data'],'sales_order_id')))->pluck('order_number','id')->toArray();
         $sales = SalesOrder::whereIn('id',array_unique(array_column($data['data'],'sales_order_id')))->pluck('order_number','id')->toArray();
+        $storehouse = Storehouse::whereIn('id',array_unique(array_column($data['data'],'storehouse_id')))
+            ->pluck('title','id')
+            ->toArray();
         foreach ($data['data'] as $key => $value){
         foreach ($data['data'] as $key => $value){
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']) : '';
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']) : '';
             $data['data'][$key]['depart_name'] = $depart_map[$value['depart_id']] ?? '';
             $data['data'][$key]['depart_name'] = $depart_map[$value['depart_id']] ?? '';
@@ -253,6 +259,7 @@ class PurchaseOrderService extends Service
             $data['data'][$key]['order_type_title'] = PurchaseOrder::$order_type[$value['order_type']] ?? '';
             $data['data'][$key]['order_type_title'] = PurchaseOrder::$order_type[$value['order_type']] ?? '';
             $data['data'][$key]['state_title'] = PurchaseOrder::$name[$value['state']] ?? '';
             $data['data'][$key]['state_title'] = PurchaseOrder::$name[$value['state']] ?? '';
             $data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
             $data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
+            $data['data'][$key]['storehouse_title'] = $storehouse[$value['storehouse_id']] ?? '';
         }
         }
 
 
         return $data;
         return $data;
@@ -267,6 +274,7 @@ class PurchaseOrderService extends Service
     public function orderRule(&$data, $user, $is_check = true){
     public function orderRule(&$data, $user, $is_check = true){
         if(empty($data['order_type'])) return [false,'采购订单类型不能为空'];
         if(empty($data['order_type'])) return [false,'采购订单类型不能为空'];
         if($this->isEmpty($data,'product')) return [false,'产品不能为空'];
         if($this->isEmpty($data,'product')) return [false,'产品不能为空'];
+        if(! empty($data['storehouse_id'])) return [false,'请选择仓库'];
         if(! empty($data['rate'])){
         if(! empty($data['rate'])){
             $res = $this->checkNumber($data['rate']);
             $res = $this->checkNumber($data['rate']);
             if(! $res) return [false, '整单扣除率请输入不超过两位小数并且大于0的数值'];
             if(! $res) return [false, '整单扣除率请输入不超过两位小数并且大于0的数值'];

+ 28 - 11
app/Service/ReturnExchangeOrderService.php

@@ -9,6 +9,7 @@ use App\Model\ReturnExchangeOrderProductInfo;
 use App\Model\ReturnExchangeOrderRange;
 use App\Model\ReturnExchangeOrderRange;
 use App\Model\SalesOrder;
 use App\Model\SalesOrder;
 use App\Model\SalesOrderProductInfo;
 use App\Model\SalesOrderProductInfo;
+use App\Model\Storehouse;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\DB;
 
 
 class ReturnExchangeOrderService extends Service
 class ReturnExchangeOrderService extends Service
@@ -23,6 +24,7 @@ class ReturnExchangeOrderService extends Service
             $material_model->sales_order_id = $data['sales_order_id'];
             $material_model->sales_order_id = $data['sales_order_id'];
             $material_model->difference_amount = $data['difference_amount'];
             $material_model->difference_amount = $data['difference_amount'];
             $material_model->mark = $data['mark'];
             $material_model->mark = $data['mark'];
+            $material_model->storehouse_id = $data['storehouse_id'] ?? 0;
             $material_model->save();
             $material_model->save();
             $time = time();
             $time = time();
 
 
@@ -47,6 +49,7 @@ class ReturnExchangeOrderService extends Service
                         'retail_price' => $value['retail_price'] ?? 0,
                         'retail_price' => $value['retail_price'] ?? 0,
                         'return_or_exchange' => ReturnExchangeOrderProductInfo::type_one,
                         'return_or_exchange' => ReturnExchangeOrderProductInfo::type_one,
                         'crt_time' => $time,
                         'crt_time' => $time,
+                        'storehouse_id' => $data['storehouse_id'],
                     ];
                     ];
                 }
                 }
                 ReturnExchangeOrderProductInfo::insert($sub);
                 ReturnExchangeOrderProductInfo::insert($sub);
@@ -70,6 +73,7 @@ class ReturnExchangeOrderService extends Service
                         'retail_price' => $value['retail_price'] ?? 0,
                         'retail_price' => $value['retail_price'] ?? 0,
                         'return_or_exchange' => ReturnExchangeOrderProductInfo::type_two,
                         'return_or_exchange' => ReturnExchangeOrderProductInfo::type_two,
                         'crt_time' => $time,
                         'crt_time' => $time,
+                        'storehouse_id' => $data['storehouse_id'],
                     ];
                     ];
                 }
                 }
                 ReturnExchangeOrderProductInfo::insert($sub);
                 ReturnExchangeOrderProductInfo::insert($sub);
@@ -132,6 +136,7 @@ class ReturnExchangeOrderService extends Service
             $material_model->depart_id = $data['depart_id'] ?? 0;
             $material_model->depart_id = $data['depart_id'] ?? 0;
             $material_model->top_depart_id = $data['top_depart_id'] ?? 0;
             $material_model->top_depart_id = $data['top_depart_id'] ?? 0;
             $material_model->crt_id = $user['id'];
             $material_model->crt_id = $user['id'];
+            $material_model->storehouse_id = $data['storehouse_id'];
             $material_model->save();
             $material_model->save();
             $time = time();
             $time = time();
 
 
@@ -153,6 +158,7 @@ class ReturnExchangeOrderService extends Service
                         'retail_price' => $value['retail_price'] ?? 0,
                         'retail_price' => $value['retail_price'] ?? 0,
                         'return_or_exchange' => ReturnExchangeOrderProductInfo::type_one,
                         'return_or_exchange' => ReturnExchangeOrderProductInfo::type_one,
                         'crt_time' => $time,
                         'crt_time' => $time,
+                        'storehouse_id' => $data['storehouse_id'],
                     ];
                     ];
                 }
                 }
                 ReturnExchangeOrderProductInfo::insert($sub);
                 ReturnExchangeOrderProductInfo::insert($sub);
@@ -176,6 +182,7 @@ class ReturnExchangeOrderService extends Service
                         'retail_price' => $value['retail_price'] ?? 0,
                         'retail_price' => $value['retail_price'] ?? 0,
                         'return_or_exchange' => ReturnExchangeOrderProductInfo::type_two,
                         'return_or_exchange' => ReturnExchangeOrderProductInfo::type_two,
                         'crt_time' => $time,
                         'crt_time' => $time,
+                        'storehouse_id' => $data['storehouse_id'],
                     ];
                     ];
                 }
                 }
                 ReturnExchangeOrderProductInfo::insert($sub);
                 ReturnExchangeOrderProductInfo::insert($sub);
@@ -208,7 +215,7 @@ class ReturnExchangeOrderService extends Service
             }
             }
 
 
             //锁定库存
             //锁定库存
-            ProductInventoryService::changeLockNumber($msg[0]);
+            ProductInventoryService::changeLockNumber($msg[0],[]);
 
 
             DB::commit();
             DB::commit();
         }catch (\Throwable $e){
         }catch (\Throwable $e){
@@ -224,10 +231,11 @@ class ReturnExchangeOrderService extends Service
 
 
         $order = ReturnExchangeOrder::where('id',$data['id'])
         $order = ReturnExchangeOrder::where('id',$data['id'])
             ->where('del_time',0)
             ->where('del_time',0)
-            ->select('id','order_number','model_type','sales_order_id','difference_amount','crt_id','mark','state','crt_time')
+            ->select('id','order_number','model_type','sales_order_id','difference_amount','crt_id','mark','state','crt_time','storehouse_id')
             ->first();
             ->first();
         if(empty($order)) return [false, '退换货订单不存在或已被删除'];
         if(empty($order)) return [false, '退换货订单不存在或已被删除'];
         $order = $order->toArray();
         $order = $order->toArray();
+        $order['storehouse_title'] = Storehouse::where('id',$order['storehouse_id'])->value('title');
         $sales = SalesOrder::where('id',$order['sales_order_id'])->value('order_number');
         $sales = SalesOrder::where('id',$order['sales_order_id'])->value('order_number');
         $order['sales_order_number'] = $sales;
         $order['sales_order_number'] = $sales;
         $order['model_type_title'] = ReturnExchangeOrder::$model_type_name[$order['model_type']] ?? "";
         $order['model_type_title'] = ReturnExchangeOrder::$model_type_name[$order['model_type']] ?? "";
@@ -311,7 +319,7 @@ class ReturnExchangeOrderService extends Service
 
 
     public function getList($data,$user){
     public function getList($data,$user){
         $model = ReturnExchangeOrder::where('del_time',0)
         $model = ReturnExchangeOrder::where('del_time',0)
-            ->select('id','order_number','sales_order_id','difference_amount','state','crt_time','crt_id','mark','model_type')
+            ->select('id','order_number','sales_order_id','difference_amount','state','crt_time','crt_id','mark','model_type','storehouse_id')
             ->orderby('id', 'desc');
             ->orderby('id', 'desc');
 
 
         //getALL传入后无视设置范围
         //getALL传入后无视设置范围
@@ -348,12 +356,16 @@ class ReturnExchangeOrderService extends Service
                     ->pluck('emp_name','id')
                     ->pluck('emp_name','id')
                     ->toArray();
                     ->toArray();
         $sales = SalesOrder::whereIn('id',array_unique(array_column($data['data'],'sales_order_id')))->pluck('order_number','id')->toArray();
         $sales = SalesOrder::whereIn('id',array_unique(array_column($data['data'],'sales_order_id')))->pluck('order_number','id')->toArray();
+        $storehouse = Storehouse::whereIn('id',array_unique(array_column($data['data'],'storehouse_id')))
+            ->pluck('title','id')
+            ->toArray();
         foreach ($data['data'] as $key => $value){
         foreach ($data['data'] as $key => $value){
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_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_map[$value['crt_id']] ?? '';
             $data['data'][$key]['crt_name'] = $emp_map[$value['crt_id']] ?? '';
             $data['data'][$key]['state_title'] = ReturnExchangeOrder::$state[$value['state']] ?? '';
             $data['data'][$key]['state_title'] = ReturnExchangeOrder::$state[$value['state']] ?? '';
             $data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
             $data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
             $data['data'][$key]['model_type_title'] = ReturnExchangeOrder::$model_type_name[$value['model_type']] ?? "";
             $data['data'][$key]['model_type_title'] = ReturnExchangeOrder::$model_type_name[$value['model_type']] ?? "";
+            $data['data'][$key]['storehouse_title'] = $storehouse[$value['storehouse_id']] ?? '';
         }
         }
 
 
         return $data;
         return $data;
@@ -362,6 +374,7 @@ class ReturnExchangeOrderService extends Service
     public function orderRule(&$data, $user, $is_check = true){
     public function orderRule(&$data, $user, $is_check = true){
         if($this->isEmpty($data,'model_type')) return [false,'单据类型不能为空!'];
         if($this->isEmpty($data,'model_type')) return [false,'单据类型不能为空!'];
         if(! in_array($data['model_type'], ReturnExchangeOrder::$model_type)) return [false,'单据类型不存在'];
         if(! in_array($data['model_type'], ReturnExchangeOrder::$model_type)) return [false,'单据类型不存在'];
+        if(empty($data['storehouse_id'])) return [false,'请选择仓库'];
         if($this->isEmpty($data,'sales_order_id')) return [false,'合同不能为空!'];
         if($this->isEmpty($data,'sales_order_id')) return [false,'合同不能为空!'];
         if(empty($data['sales_order_id'])) return [false,'请选择合同'];
         if(empty($data['sales_order_id'])) return [false,'请选择合同'];
         $sale = SalesOrder::where('del_time',0)->where('id',$data['sales_order_id'])->first();
         $sale = SalesOrder::where('del_time',0)->where('id',$data['sales_order_id'])->first();
@@ -395,22 +408,25 @@ class ReturnExchangeOrderService extends Service
         }
         }
 
 
         //换货
         //换货
-        $product_submit_minus = $product_save_minus = [];
+        $product_submit_minus = $product_save_minus = $product_id = [];
         if($data['model_type'] == ReturnExchangeOrder::Model_type_two){
         if($data['model_type'] == ReturnExchangeOrder::Model_type_two){
             if(empty($data['product_two'])) return [false,'换货产品不能为空'];
             if(empty($data['product_two'])) return [false,'换货产品不能为空'];
             foreach ($data['product_two'] as $value){
             foreach ($data['product_two'] as $value){
                 if(empty($value['number'])) return [false,'换货产品数量不能为空'];
                 if(empty($value['number'])) return [false,'换货产品数量不能为空'];
                 $res = $this->checkNumber($value['number']);
                 $res = $this->checkNumber($value['number']);
                 if(! $res) return [false,'请输入正确的换货产品数量'];
                 if(! $res) return [false,'请输入正确的换货产品数量'];
-                if(isset($product_submit_minus[$value['product_id']])){
-                    $product_submit_minus[$value['product_id']] += $value['number'];
+
+                $key = $value['product_id'] . ',' .$data['storehouse_id'];
+                if(isset($product_submit_minus[$key])){
+                    $product_submit_minus[$key] += $value['number'];
                 }else{
                 }else{
-                    $product_submit_minus[$value['product_id']] = $value['number'];
+                    $product_submit_minus[$key] = $value['number'];
                 }
                 }
+                $product_id[] = $value['product_id'];
             }
             }
 
 
             $product_save_minus = $this->getSaveDetailMinus($id);
             $product_save_minus = $this->getSaveDetailMinus($id);
-            list($status,$msg) = (new ProductInventoryService())->compareStock(array_keys($product_submit_minus), $product_submit_minus, $product_save_minus);
+            list($status,$msg) = (new ProductInventoryService())->compareStock($product_id, $product_submit_minus, $product_save_minus);
             if(! $status) return [false, $msg];
             if(! $status) return [false, $msg];
         }
         }
 
 
@@ -445,10 +461,11 @@ class ReturnExchangeOrderService extends Service
             ->where('del_time',0)
             ->where('del_time',0)
             ->get()->toArray();
             ->get()->toArray();
         foreach ($sub as $value){
         foreach ($sub as $value){
-            if(isset($product_save[$value['product_id']])){
-                $product_save[$value['product_id']] += $value['number'];
+            $key = $value['product_id'] . ',' . $value['storehouse_id'];
+            if(isset($product_save[$key])){
+                $product_save[$key] += $value['number'];
             }else{
             }else{
-                $product_save[$value['product_id']] = $value['number'];
+                $product_save[$key] = $value['number'];
             }
             }
         }
         }
 
 

+ 5 - 5
app/Service/SalesOrderService.php

@@ -118,7 +118,7 @@ class SalesOrderService extends Service
 
 
             if(! empty($data['product'])){
             if(! empty($data['product'])){
                 $pro = Product::whereIn('id',array_column($data['product'],'product_id'))
                 $pro = Product::whereIn('id',array_column($data['product'],'product_id'))
-                    ->select('bar_code','code','cost','depart_price','size','title','id','retail_price','unit')
+                    ->select('bar_code','code','cost','depart_price','size','title','id','retail_price','unit','top_depart_id')
                     ->get()->toArray();
                     ->get()->toArray();
                 $pro = array_column($pro,null,'id');
                 $pro = array_column($pro,null,'id');
                 $insert = [];
                 $insert = [];
@@ -244,7 +244,7 @@ class SalesOrderService extends Service
 
 
             if(! empty($data['product'])){
             if(! empty($data['product'])){
                 $pro = Product::whereIn('id',array_column($data['product'],'product_id'))
                 $pro = Product::whereIn('id',array_column($data['product'],'product_id'))
-                    ->select('bar_code','code','cost','depart_price','size','title','id','retail_price','unit')
+                    ->select('bar_code','code','cost','depart_price','size','title','id','retail_price','unit','top_depart_id')
                     ->get()->toArray();
                     ->get()->toArray();
                 $pro = array_column($pro,null,'id');
                 $pro = array_column($pro,null,'id');
                 $insert = [];
                 $insert = [];
@@ -656,9 +656,9 @@ class SalesOrderService extends Service
             ]);
             ]);
 
 
             $time = time();
             $time = time();
-            SalesOrderRange::where('del_time',0)->where('sales_order_id',$msg['id'])->update([
-                'del_time' => $time
-            ]);
+            SalesOrderRange::where('del_time',0)
+                ->where('sales_order_id',$msg['id'])
+                ->update(['del_time' => $time]);
 
 
             if(! empty($data['dispatch_depart_one'])){
             if(! empty($data['dispatch_depart_one'])){
                 $insert = [];
                 $insert = [];

+ 136 - 0
app/Service/StorehouseService.php

@@ -0,0 +1,136 @@
+<?php
+
+namespace App\Service;
+
+use App\Model\Storehouse;
+use App\Model\StorehouseEmployee;
+use Illuminate\Support\Facades\DB;
+
+class StorehouseService extends Service
+{
+    public function edit($data){
+        list($status,$msg) = $this->storehouseRule($data,false);
+        if(!$status) return [$status,$msg];
+
+        $res = $data['data'][0];
+        try{
+            DB::beginTransaction();
+            Storehouse::where('id',$data['id'])->update([
+                'title' => $res['title']
+            ]);
+
+            DB::commit();
+        }catch (\Exception $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+        return [true,'保存成功!'];
+    }
+
+    public function add($data){
+        list($status,$msg) = $this->storehouseRule($data);
+        if(!$status) return [$status,$msg];
+
+        try{
+            DB::beginTransaction();
+            $insert = [];
+            $time = time();
+            foreach ($data['data'] as $value){
+                $insert = [
+                    'title' => $value['title'],
+                    'crt_time' => $time
+                ];
+            }
+            Storehouse::insert($insert);
+
+            DB::commit();
+        }catch (\Exception $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+        return [true,'保存成功!'];
+    }
+
+    public function del($data){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据'];
+
+        try {
+            DB::beginTransaction();
+            Storehouse::whereIn('id',$data['id'])->update([
+                'del_time'=>time()
+            ]);
+
+            DB::commit();
+        }catch (\Exception $e){
+            DB::rollBack();
+            return [false,$e->getMessage()];
+        }
+
+        return [true,'删除成功'];
+    }
+
+    public function storehouseDetail($data){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据'];
+
+        $detail = Storehouse::where('id',$data['id'])->first()->toArray();
+
+        return [true,$detail];
+    }
+
+    public function storehouseList($data, $user){
+        $model = new Storehouse(['userData' => $user]);
+        $model = $model->where('del_time',0)
+            ->select('id','title')
+            ->orderBy('id','asc');
+
+        if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
+
+        $list = $this->limit($model,'',$data);
+        $list = $this->fillData($list);
+
+        return [true,$list];
+    }
+
+    public function fillData($data){
+        if(empty($data['data'])) return $data;
+
+        foreach ($data['data'] as $key => $value){
+        }
+
+        return $data;
+    }
+
+    public function storehouseRule($data, $is_check = true){
+        if($this->isEmpty($data,'data')) return [false,'数据不能为空!'];
+
+        $title = array_column($data['data'],'title');
+        $title = array_map(function($val) {
+            return $val !== null ? $val : 0;
+        }, $title);
+        $title_count = array_count_values($title);
+
+        foreach ($title as $value){
+            if(empty($value)) return [false,'仓库名称不能为空!'];
+            if($title_count[$value] > 1) return [false,'仓库名称不能重复'];
+        }
+
+        foreach ($data['data'] as $value){
+            if($is_check){
+                $bool = Storehouse::where('title',$value['title'])
+                    ->where('del_time',0)
+                    ->exists();
+            }else{
+                if($this->isEmpty($data,'id')) return [false,'id不能为空!'];
+
+                $bool = Storehouse::where('title',$value['title'])
+                    ->where('id','<>',$data['id'])
+                    ->where('del_time',0)
+                    ->exists();
+            }
+            if($bool) return [false,'仓库名称不能重复'];
+        }
+        return [true,''];
+    }
+}

+ 7 - 0
routes/api.php

@@ -65,6 +65,13 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('employeeTeam', 'Api\EmployeeController@employeeTeam');
     $route->any('employeeTeam', 'Api\EmployeeController@employeeTeam');
     $route->any('employeeRole', 'Api\EmployeeController@employeeRole');
     $route->any('employeeRole', 'Api\EmployeeController@employeeRole');
 
 
+    //仓库档案
+    $route->any('storehouseList', 'Api\StorehouseController@storehouseList');
+    $route->any('storehouseDetail', 'Api\StorehouseController@storehouseDetail');
+    $route->any('storehouseAdd', 'Api\StorehouseController@add');
+    $route->any('storehouseEdit', 'Api\StorehouseController@edit');
+    $route->any('storehouseDel', 'Api\StorehouseController@del');
+
     //单据状态变动
     //单据状态变动
     $route->any('checkAll', 'Api\CheckController@checkAll');
     $route->any('checkAll', 'Api\CheckController@checkAll');