Bläddra i källkod

Merge branch 'master' into Haozi

haozi 5 år sedan
förälder
incheckning
9b4500eb09

+ 69 - 0
app/Http/Controllers/TestController.php

@@ -9,6 +9,8 @@ use App\City;
 use App\Commodity;
 use App\CommodityBarcode;
 use App\Events\CancelOrder;
+use App\Imports\OrderIssueImport;
+use App\Imports\OrderTrackingImport;
 use App\InventoryAccount;
 use App\Events\ResetProcessStatisticStartDateEvent;
 use App\InventoryAccountMission;
@@ -83,6 +85,7 @@ use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Http;
 use Illuminate\Support\Facades\Redis;
 use Illuminate\Support\Str;
+use Maatwebsite\Excel\Facades\Excel;
 use Ramsey\Collection\Collection;
 use Zttp\Zttp;
 
@@ -1083,4 +1086,70 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         echo $i;
     }
 
+    public function orderTrackingImportTest(Request $request)
+    {
+        $file = $request->file('file');
+        ini_set('max_execution_time',4000);
+        ini_set('memory_limit', '1024M');
+        $extension = $request->file()['file']->getClientOriginalExtension();
+        $extension[0] = strtoupper($extension[0]);
+        Excel::import(new OrderTrackingImport(), $request->file('file')->path(), null, $extension);
+    }
+
+    public function testImp()
+    {
+        $client_no = null;
+        $items = null;
+        $order=(new OrderTrackingImport())->getOrder($client_no,$items);
+        if($order['id']) echo 'yes1';
+
+
+        $order = Order::query()->create([
+            'code'=>'null'.Str::uuid(),'client_code' => 'asdfdfdg','web_order_number' => 'sadfdsf'
+        ]);
+        dd($order);
+//        $order=(new OrderTrackingImport())->getOrder('92024765871-SDO130000986796QX',$items);
+//        if($order['id']) echo 'yes2';
+    }
+
+//    public function deleteOrderInfo()
+//    {
+//        $orders = Order::query()->where('created_at', '>', '2020-11-17 18:00:00')->where('code', 'like', 'null%')->get();
+//        $order_ids = data_get($orders, '*.id');unset($orders);
+//        Order::query()->whereIn('id',$order_ids)->delete();
+//
+//        if(count($order_ids)==0)return;
+//        $packages = OrderPackage::query()->whereIn('order_id', $order_ids)->get();
+//        $packages_ids = data_get($packages, '*.id');unset($packages);
+//        OrderPackage::query()->whereIn('id',$packages_ids)->delete();
+//
+//        if(count($packages_ids)==0)return;
+//        $commoodities = OrderPackageCommodities::query()->whereIn('order_package_id',$packages_ids)->get();
+//        $commooditie_ids = data_get($commoodities, '*.id');unset($commoodities);
+//        OrderPackageCommodities::query()->whereIn('id',$commooditie_ids)->delete();
+//
+//        if(count($commooditie_ids)==0)return;
+//        $tackings = OrderTracking::query()->whereIn('order_package_commodity_id',$commooditie_ids )->get();
+//        $tacking_ids = data_get($tackings, '*.id');unset($tackings);
+//        OrderTracking::query()->whereIn('id',$tacking_ids)->delete();
+//    }
+//    public function destroyOrders_()
+//    {
+//        $orders = Order::query()->where('created_at', '>', '2020-11-17 17:00:00')
+//            ->where('code', 'like', 'null%')
+//            ->where('owner_id',71)->get();
+//        $orderIds = data_get($orders,'*.id');
+//        $orderPackages=OrderPackage::query()->whereIn('order_id',$orderIds)->get();
+//        $orderPackageIds = data_get($orderPackages,'*.id');
+//        OrderPackageCommodities::query()->whereIn('order_package_id',$orderPackageIds)->delete();
+//        OrderPackage::query()->whereIn('order_id',$orderIds)->delete();
+//        Order::query()->whereIn('id',$orderIds)->delete();
+//
+//        $orderTrackings=OrderTracking::query()->where('id','>',1780)->where('created_at','0000-00-00 00:00:00')->get();
+//        $orderTrackingIds = data_get($orderTrackings,'*.id');
+//        OrderTracking::query()->whereIn('id',$orderTrackingIds)->delete();
+//
+//        app('LogService')->log(__METHOD__,__FUNCTION__,json_encode(['$orderIds'=>$orderIds,'$orderPackages'=>$orderPackages,'$orderPackageIds'=>$orderPackageIds,'$orderTrackingIds'=>$orderTrackingIds,]));
+//
+//    }
 }

+ 272 - 0
app/Imports/OrderTrackingImport.php

@@ -0,0 +1,272 @@
+<?php
+
+namespace App\Imports;
+
+use App\Commodity;
+use App\OracleBasSKU;
+use App\OracleDOCOrderHeader;
+use App\Order;
+use App\OrderPackage;
+use App\OrderPackageCommodities;
+use App\OrderTracking;
+use App\Owner;
+use App\Package;
+use App\Services\CommodityService;
+use App\Services\common\DataHandlerService;
+use App\Services\OracleDOCOrderHeaderService;
+use App\Services\OrderService;
+use App\Services\OrderTrackingService;
+use App\Shop;
+use Carbon\Carbon;
+use Illuminate\Support\Collection;
+use Illuminate\Support\Str;
+use Maatwebsite\Excel\Concerns\ToCollection;
+
+class OrderTrackingImport implements ToCollection
+{
+
+    public $shops = [];
+    public $commodities = [];
+    public $bas_skus =[];
+    public $owner = null;
+    public $order = [];
+    public $orderPackages = [];
+    public $order_is = [];
+    /**
+     * @param Collection $collection
+     */
+    public function collection(Collection $collection)
+    {
+        /**
+         * @var OrderTrackingService $service
+         * @var OrderService $orderService
+         * @var DataHandlerService $dataHandlerService
+         * @var Order $order
+         * @var OrderPackage $package
+         * @var Commodity $commodity
+         */
+        $service = app('OrderTrackingService');
+        $owner = Owner::query()->where('name','安桥主品')->first();
+        $this->owner = $owner;
+        $collection->shift();
+        // 1 450 3 400
+        $array =  $collection->chunk(450);
+        foreach ($array as $item_arr) {
+            $inner_params = [];
+            foreach ($item_arr as $items) {
+                $order = $this->getOrder($items[1], $items);
+                $orderPackageCommodities = $this->getOrderPackageCommodities($items);
+                $bas_sku = $this->getBasSku((string)$items[6]);
+                $gross_weight = round(($bas_sku->grossweight ?? 0) * $orderPackageCommodities->amount, 2);
+                $bulk = round(($bas_sku->cube ?? 0) * $orderPackageCommodities->amount, 2);
+                $inner_params[] = [
+                    'order_package_commodity_id' => $orderPackageCommodities->id,
+                    'owner_id' => $owner->id,
+                    'web_order_number' => $items[2],
+                    'order_client_code' => $order->client_code,
+                    'gross_weight' => $gross_weight,
+                    'bulk' => $bulk,
+                ];
+            }
+            $this->order = [];
+            $this->bas_skus = [];
+            $this->shops = [];
+            $this->order = [];
+            $this->orderPackages = [];
+            try {
+                OrderTracking::query()->insert($inner_params);
+                app('LogService')->log(__METHOD__,__FUNCTION__,'批量创建 OrderTracking'.' || '.json_encode($inner_params));
+            } catch (\Exception $e) {
+                app('LogService')->log(__METHOD__,'ERROR '.__FUNCTION__,'批量创建 OrderTracking ERROR'.json_encode($e->getMessage()).json_encode($e->getTraceAsString()).' || '.' || '.json_encode($inner_params));
+            } finally {
+                unset($inner_params,$item_arr);
+            }
+        }
+
+    }
+
+    public function getOrderPackageCommodities($items){
+        /**
+         * @var OrderService $orderService
+         */
+        $orderService = app('OrderService');
+        $packages = $this->getPackage($items[1],$items);
+        $packages = collect($packages);
+        if(!$packages||$packages->isEmpty()){
+            app('LogService')->log(__METHOD__,__FUNCTION__,'导入空值:'.json_encode($packages));
+        };
+        $orderPackageCommodities = null;
+        if(count($packages)>1){
+            $bool = false;
+            foreach ($packages as $package) {
+                foreach (($package->commodities ?? []) as $commodities) {
+                    if (isset($commodities->commodity) && $bool == false) {
+                        if ($commodities->commodity->sku == $items[6] && $commodities->amount == $items[8]) {
+                            $package->commodities = $package->commodities->filter(function($item)use($commodities){
+                                return $item->id != $commodities->id;
+                            });
+                            return $commodities;
+                        }
+                    }
+                }
+            }
+//            $packages->each(function ($package) use ($items, &$orderPackageCommodities, &$bool) {
+//                if (!$bool) {
+//                    if ($package->commodities ?? false) {
+//                        $_commodities = $package->commodities;
+//                        $package->commodities = $package->commodities->filter(function ($commodities) use ($items, &$orderPackageCommodities, &$bool, &$_commodities) {
+//                            try {
+//                                if (isset($commodities->commodity) && $bool == false) {
+//                                    if ($commodities->commodity->sku == $items[6] && $commodities->amount == $items[8]) {
+//                                        $orderPackageCommodities = $_commodities->pull($commodities);
+//                                        $bool = true;
+//                                    }
+//                                }
+//                            } catch (\Exception $e) {
+//                                dd($_commodities);
+//                            }
+//                        });
+//                    }
+//                }
+//            });
+
+        }elseif(count($packages)==1){
+            $bool = false;
+            foreach ($packages as $package) {
+                foreach (($package->commodities ?? []) as $commodities) {
+                    if (isset($commodities->commodity) && $bool == false) {
+                        if ($commodities->commodity->sku == $items[6] && $commodities->amount == $items[8]) {
+                            $package->commodities = $package->commodities->filter(function($item)use($commodities){
+                                return $item->id != $commodities->id;
+                            });
+                            return $commodities;
+                        }
+                    }
+                }
+            }
+        }
+
+        if ($orderPackageCommodities == null) {
+            $package = $packages->first();
+            if(!$package){
+                $order=$this->order[$items[1]];
+                $package=$order->package;
+            }
+            $commodity = $this->getCommodity((string)$items[6], $items);
+            $orderPackageCommodities = OrderPackageCommodities::query()->create(['order_package_id' => $package['id'], 'commodity_id' => $commodity->id, 'amount' => $items[8]]);
+        }
+        return $orderPackageCommodities;
+    }
+
+
+    public function getOrderHeader($soReference1){
+        return  $orderHeader = OracleDOCOrderHeader::query()->selectRaw(implode(',',OracleDOCOrderHeaderService::$columns))
+            ->with(['oracleBASCustomer'=>function($query){
+                $query->selectRaw('BAS_CUSTOMER.CustomerID,BAS_CUSTOMER.Customer_Type,BAS_CUSTOMER.Descr_C,BAS_CUSTOMER.Active_Flag');
+            },'oracleDOCOrderDetails'=>function($query){
+                $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered');
+            }, 'actAllocationDetails'=>function($query){
+                $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku');
+            },'oracleBASCode'=>function($query){
+                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
+            }])
+            ->where('DOC_Order_Header.SOReference1',$soReference1)
+            ->first();
+    }
+
+    public function getShop($name){
+        if(!empty($this->shops[$name])){
+            return $this->shops[$name];
+        }else{
+            $shop = Shop::query()->firstOrCreate(['owner_id'=>$this->owner->id,'name'=>$name]);
+            $this->shops[$name] = $shop;
+            return $shop;
+        }
+    }
+    public function getCommodity(string $sku,&$items){
+        if(!empty($this->commodities[(string)$sku])){
+            return $this->commodities[(string)$sku];
+        }else{
+            $bas_sku = $this->getBasSku((string)$sku);
+            if($bas_sku == null){
+                $commodity = Commodity::query()->firstOrCreate(['sku'=>$sku,'name'=>$items[7],'owner_id'=>$this->owner->id]);
+                $this->commodities[(string)$sku] = $commodity;
+                return $commodity;
+            }
+            $commodity = Commodity::query()->firstOrCreate(['sku'=>$bas_sku['sku'],'name'=>$bas_sku['descr_c'],'owner_id'=>$this->owner->id]);
+            $this->commodities[(string)$sku] = $commodity;
+            return $commodity;
+        }
+    }
+
+    public function getBasSku($sku){
+        if(!empty($this->bas_skus[(string)$sku])){
+            return $this->bas_skus[(string)$sku];
+        }else{
+            $bas_sku = OracleBasSKU::query()->selectRaw('BAS_SKU.sku,BAS_SKU.customerid,BAS_SKU.grossweight,BAS_SKU.cube,BAS_SKU.descr_c')->where('sku',(string)$sku)->where('customerid',$this->owner->code)->first();
+            $this->bas_skus[(string)$sku] = $bas_sku;
+            return $bas_sku;
+        }
+    }
+
+    public function getOrder($client_no,&$items){
+        /**
+         * @var OrderService $orderService
+         */
+        $orderService = app('OrderService');
+        if( !empty($this->order[$client_no])){
+            return $this->order[$client_no];
+        }
+
+        $order = Order::query()->with('packages.commodities.commodity')->where('client_code',$client_no)->first();
+        if($order){
+            $this->order[$client_no] = $order;
+//            if(!$order)app('LogService')->log(__METHOD__,__FUNCTION__,'get1:'.json_encode($order));
+            return $order;
+        }else{
+            $orderHeader = $this->getOrderHeader($client_no);
+            if($orderHeader){
+                $orderService->createOrFindOrderInfo($orderHeader);
+                $order = Order::query()->with('packages.commodities.commodity')->where('client_code',$client_no)->first();
+                if(!$order){
+                    $shop = $this->getShop($items[5]);
+                    $order = Order::query()->create([
+                        'code'=>'null'.Str::uuid(),'client_code' => $items[1],'web_order_number' => $items[2],'shop_id'=>$shop->id
+                    ]);
+                }
+                $this->order[$client_no] = $order;
+                unset($orderHeader);
+//                if(!$order)app('LogService')->log(__METHOD__,__FUNCTION__,'get2:'.json_encode($order));
+                return $order;
+            }else{
+                $shop = $this->getShop($items[5]);
+                $order = Order::query()->create([
+                    'code'=>'null'.Str::uuid(),'client_code' => $items[1],'web_order_number' => $items[2],'shop_id'=>$shop->id
+                ]);
+//                app('LogService')->log(__METHOD__,__FUNCTION__,'create1:'.json_encode($order));
+                $this->order[$client_no] = $order;
+//                if(!$order)app('LogService')->log(__METHOD__,__FUNCTION__,'get3:'.json_encode($order));
+                return $order;
+            }
+        }
+    }
+
+    public function getPackage($client_code,&$items)
+    {
+        if(!empty($this->orderPackages[$client_code])){
+            return $this->orderPackages[$client_code];
+        }else{
+            $order = $this->getOrder($client_code,$items);
+            if($order->packages->count() > 0 ){
+                $this->orderPackages[$client_code] = $order->packages;
+                return $order->packages;
+            }else{
+                $package = OrderPackage::query()->create(['order_id'=>$order->id,'logistic_number'=>'null_'.Str::uuid()]);
+                $list = collect();
+                $list->push($package);
+                $this->orderPackages[$client_code] = $list;
+                return $list;
+            }
+        }
+    }
+}

+ 26 - 0
app/Services/CommodityService.php

@@ -266,4 +266,30 @@ Class CommodityService
         $commodity->delete();
     }
 
+    public function syncWMSOrderCode($owner,$skus)
+    {
+        $basSku = OracleBasSKU::query()->whereIn('SKU',$skus)->where('CustomerID',$owner->code)->get();
+        $inner_params = [];
+        $created_at = new Carbon();
+        $basSku->each(function($bas_sku)use(&$inner_params,$owner,$created_at){
+            $inner_params = [
+                'owner_id' => $owner->id,
+                'sku' => $bas_sku->sku,
+                'name' =>$bas_sku->descr_c,
+                'created_at' => $created_at,
+                'length' =>$bas_sku->skulength,
+                'width' => $bas_sku->skuwidth,
+                'height' => $bas_sku->skuhigh,
+                'volumn' => $bas_sku->cube
+            ];
+        });
+        if(count($inner_params) > 0){
+            try {
+                $this->insert($inner_params);
+                app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($inner_params));
+            } catch (\Exception $e) {
+                app('LogService')->log(__METHOD__, 'Error '.__FUNCTION__, json_encode($inner_params).' || '.$e->getMessage());
+            }
+        }
+    }
 }

+ 6 - 3
app/Services/OrderService.php

@@ -697,8 +697,8 @@ class OrderService
         $warehouse = app('WarehouseService')->firstOrCreate(["code"=>$orderHeader->warehouseid],["code"=>$orderHeader->warehouseid,"name"=>$orderHeader->warehouseid]);
         return [
             'code' =>$orderHeader->orderno,
-            'owner_id' =>$owner->id,
-            'shop_id' =>$shop->id,
+            'owner_id' =>$owner->id ?? '',
+            'shop_id' =>$shop->id ?? '',
             'logistic_id' => $logistic->id ??'',
             'consignee_name' =>  $orderHeader->c_contact,
             'consignee_phone' =>  empty($orderHeader->c_tel2)?$orderHeader->c_tel1:$orderHeader->c_tel2,
@@ -879,7 +879,10 @@ class OrderService
         $warehouse = $dataHandlerService->getKeyValue(['code'=>$orderHeader->warehouseid],$warehouse_map);
         $owner = $dataHandlerService->getKeyValue(['code'=>$orderHeader->customerid],$owner_map);
         $logistic = $dataHandlerService->getKeyValue(['code'=>$orderHeader->userdefine1],$logistic_map);
-        $shop = $dataHandlerService->getKeyValue(['name'=>$orderHeader->issuepartyname,'owner_id'=>$owner->id??null],$shop_map);
+        $shop['id'] = null;
+        if($orderHeader->issuepartyname != null && $orderHeader->issuepartyname != '' ){
+            $shop = $dataHandlerService->getKeyValue(['name'=>$orderHeader->issuepartyname ?? '','owner_id'=>$owner->id??''],$shop_map);
+        }
         return [
             'code'=>$orderHeader['orderno'],
             'warehouse_id' => $warehouse['id'] ?? null,

+ 6 - 2
public/t.php

@@ -1,4 +1,8 @@
 <?php
 
-$ar=[5,3,22];
-echo array_key_last($ar);
+$a= null ?? false;
+
+$b= [] ?? false;
+
+var_dump($a);
+var_dump($b);

+ 1 - 1
resources/views/order/issue/index.blade.php

@@ -665,7 +665,7 @@
     <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
     <script>
         let listVue = new Vue({
-            el: '#issue_div ',
+            el: '#issue_div',
             data: {
                 orderIssues: {!!  $orderIssues->toJson() !!}['data'],
                 owners: [@foreach($owners as $owner){name: '{{ $owner->id }}', value: '{{ $owner->name}}'},@endforeach],

+ 8 - 6
resources/views/order/tracking/index.blade.php

@@ -153,12 +153,14 @@
                             </span>
                         </td>
                         <td class="td-yellow">
-                            <span v-if="trackOrder.packageLogistic === '新杰物流' || trackOrder.packageLogistic === '新杰物流到付'">
-                                @{{ trackOrder.web_order_number ? trackOrder.web_order_number : trackOrder.order_client_code}}
-                            </span>
-                            <span v-else>
-                                @{{ trackOrder.packageLogisticNumber}}
-                            </span>
+                            <div v-if="!(trackOrder.packageLogisticNumber.includes('null_'))">
+                                <span v-if="trackOrder.packageLogistic === '新杰物流' || trackOrder.packageLogistic === '新杰物流到付'">
+                                    @{{ trackOrder.web_order_number ? trackOrder.web_order_number : trackOrder.order_client_code}}
+                                </span>
+                                <span v-else >
+                                    @{{ trackOrder.packageLogisticNumber}}
+                                </span>
+                            </div>
                         </td>
                         <td class="td-yellow">@{{ trackOrder.orderCity}}</td>
                         <td class="td-yellow">

+ 6 - 5
resources/views/test.blade.php

@@ -3,11 +3,12 @@
 </head>
 
 <body>
-{{phpinfo()}}
-{{--<form method="get" action="{{url('test/test1')}}">--}}
-{{--    <input name="test">--}}
-{{--    <button type="submit">提交</button>--}}
-{{--</form>--}}
+<form method="post" enctype="multipart/form-data" action="{{url('test/orderTrackingImportTest')}}">
+    @csrf
+    @method('post')
+    <input type="file" name="file">
+    <button type="submit">提交</button>
+</form>
 <script>
 </script>
 </body>