cqp hai 3 meses
pai
achega
17b0b84856

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

@@ -166,6 +166,19 @@ class ProductController extends BaseController
         }
     }
 
+    public function updateTopStock(Request $request)
+    {
+        $service = new ProductService();
+        $user = $request->userData->toArray();
+        list($status,$data) = $service->updateTopStock($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
     public function batchUploadImg(Request $request)
     {
         $service = new ProductService();

+ 11 - 0
app/Model/ProductInventoryOfTop.php

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

+ 81 - 3
app/Service/ProductService.php

@@ -11,10 +11,12 @@ use App\Model\ProductActivityPrice;
 use App\Model\ProductCategory;
 use App\Model\ProductInfo;
 use App\Model\ProductIntroduction;
+use App\Model\ProductInventoryOfTop;
 use App\Model\ProductPriceDetail;
 use App\Model\Role;
 use App\Model\RoleMenuButton;
 use App\Model\SeeRange;
+use App\Model\Storehouse;
 use Illuminate\Support\Facades\DB;
 
 /**
@@ -629,6 +631,7 @@ class ProductService extends Service
             $model->whereIn('product_category_id',array_unique(array_column($product_category,'id')));
         }
         if(! empty($data['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%');
+        if(! empty($data['item_code'])) $model->where('item_code', 'LIKE', '%'.$data['item_code'].'%');
         if(! empty($data['bar_code'])) $model->where('bar_code', 'LIKE', '%'.$data['bar_code'].'%');
         if(! empty($data['size'])) $model->where('size', 'LIKE', '%'.$data['size'].'%');
         if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
@@ -1228,7 +1231,8 @@ class ProductService extends Service
             ->pluck('title','id')
             ->toArray();
 
-        $basic_map = BasicType::where('type',BasicType::type_22)
+        $basic_map = BasicType::whereIn('id',array_unique(array_column($product, 'unit')))
+            ->OrWhere('type',BasicType::type_22)
             ->pluck('title','id')
             ->toArray();
 
@@ -1242,13 +1246,30 @@ class ProductService extends Service
         //当前门店
         $top_depart = $user['depart_top'][0] ?? [];
 
+        $stock = ProductInventoryOfTop::where('del_time',0)
+            ->whereIn('product_id',$product_id)
+            ->pluck('number','product_id')
+            ->toArray();
         foreach ($product as $key => $value){
             $tmp = $this->fillProductPrice($detail_map, $value, $top_depart,$basic_map);
             $product[$key]['product_price'] = $tmp;
             $product[$key]['img'] = $img[$value['id']] ?? "";
             $product[$key]['product_category_name'] = $category[$value['product_category_id']] ?? '';
             $product[$key]['product_attribute_title'] = Product::$product_attribute[$value['product_attribute']] ?? "";
-            $product[$key]['stock'] = "0";
+            if(isset($stock[$value['id']])){
+                $number = $stock[$value['id']];
+                if($number <= 0){
+                    $stock = "售罄";
+                } elseif($number <= 15){
+                    $stock = " 库存紧张";
+                }else{
+                    $stock = " 库存充足";
+                }
+            }else{
+                $stock = "联系客服";
+            }
+            $product[$key]['stock'] = $stock;
+            $product[$key]['unit_title'] = $basic_map[$value['unit']] ?? "";
         }
 
         return [true, $product];
@@ -1261,7 +1282,7 @@ class ProductService extends Service
         $product = $model->where('del_time',0)
             ->whereIn('item_code', $item_code)
             ->where('is_use', Product::is_use_one)
-            ->select('title','id','product_category_id','retail_price','product_attribute','item_code','size')
+            ->select('title','id','product_category_id','retail_price','product_attribute','item_code','size','unit')
             ->get()->toArray();
 
         return $product;
@@ -1284,4 +1305,61 @@ class ProductService extends Service
 
         return $tmp;
     }
+
+    public function updateTopStock($data, $user){
+        $service = new U8ServerService(true);
+        if(! empty($service->error)) return [false, $service->error];
+
+        $limit_key = "updateTopStockFromYy";
+        list($status, $msg) = $this->limitingSendRequestBackgExpire($limit_key, 20);
+        if(! $status) return [false, '正在获取T9杭州总仓库存货库存,请勿重复操作'];
+
+        try {
+            DB::enableQueryLog();
+            //总店
+            $head = $user['head']['id'] ?? 0;
+            $storehouse_id = Storehouse::where('top_depart_id', $head)->where('del_time',0)->value('id') ?? 0;
+            $time = time();
+            DB::table('product')
+                ->where('del_time', 0)
+                ->where('top_depart_id', $head)
+                ->select('id','code')
+                ->orderBy('id')
+                ->chunk(200, function ($data) use($service,$head,$storehouse_id,$time){
+                    $data = Collect($data)->map(function ($object) {
+                        return (array)$object;
+                    })->toArray();
+
+                    $map = array_column($data,'id','code');
+                    $id = array_unique(array_column($data,'id'));
+                    $code = array_unique(array_column($data,'code'));
+                    list($status, $msg) = $service->getStock($code, "001");
+                    if(! $status) return [false, $msg];
+
+                    $insert = [];
+                    foreach ($msg as $value){
+                        $insert[] = [
+                            'product_id' => $map[$value['product_no']] ?? 0,
+                            'storehouse_id' => $storehouse_id,
+                            'top_depart_id' => $head,
+                            'number' => $value['number'],
+                            'crt_time' => $time,
+                        ];
+                    }
+
+                    ProductInventoryOfTop::where('del_time',0)
+                        ->whereIn('product_id',$id)
+                        ->update(['del_time' => $time]);
+
+                    ProductInventoryOfTop::insert($insert);
+                });
+
+            DB::commit();
+        }catch (\Throwable $exception){
+            DB::rollBack();
+            return [false, $exception->getMessage()];
+        }
+
+        return [true, ''];
+    }
 }

+ 23 - 0
app/Service/U8ServerService.php

@@ -424,6 +424,29 @@ class U8ServerService extends Service
         U8Job::insert($insert);
     }
 
+    public function getStock($code = [], $warehouse = ""){
+        if(empty($code) || empty($warehouse)) return [false, '存货以及仓库不能为空'];
+
+        //映射ip是否通畅
+        $bool = $this->isDomainAvailable($this->u8['domain']);
+        if(! $bool) return [false, 'U8程序外部域名不可达'];
+
+        $result = $this->db->table('CurrentStock')
+            ->where("cWhCode", $warehouse)
+            ->whereIn("cInvCode", $code)
+            ->select('iQuantity as number', 'cInvCode as product_no')
+            ->get()->toArray();
+        $return = [];
+        foreach ($result as $value){
+            $return[] = [
+                'number' => floatval($value->number),
+                'product_no' => $value->product_no
+            ];
+        }
+
+        return [true, $return];
+    }
+
     public function getPurchaseData($id){
         $main = PurchaseOrder::whereIn('id',$id)
             ->where('del_time',0)

+ 4 - 0
config/header/17.php

@@ -27,6 +27,10 @@ return [
         'value' => '产品编码',
     ],
     [
+        'key' => 'item_code',
+        'value' => '商品编码',
+    ],
+    [
         'key' => 'bar_code',
         'value' => '条码',
     ],

+ 1 - 0
routes/api.php

@@ -167,6 +167,7 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('productList2', 'Api\ProductController@productList2');
     $route->any('batchUploadImg', 'Api\ProductController@batchUploadImg')->middleware('OssFileDeal');
     $route->any('batchBuildFee', 'Api\ProductController@batchBuildFee');
+    $route->any('updateTopStock', 'Api\ProductController@updateTopStock');
 
     //采购单
     $route->any('purchaseOrderList', 'Api\PurchaseOrderController@purchaseOrderList');