ANG YU 5 лет назад
Родитель
Сommit
52df435fe9

+ 1 - 3
app/Filters/OrderPackageFilters.php

@@ -73,9 +73,7 @@ class OrderPackageFilters
     private function owner_id($owner_id)
     private function owner_id($owner_id)
     {
     {
         $owner_ids = array_filter(preg_split('/[,, ]+/is', $owner_id));
         $owner_ids = array_filter(preg_split('/[,, ]+/is', $owner_id));
-        $this->queryBuilder->whereIn('order_id',function($query)use($owner_ids){
-            $query->from('orders')->select('id')->whereIn('owner_id',$owner_ids);
-        });
+        $this->queryBuilder->whereIn('owner_id', $owner_ids);
     }
     }
 
 
     private function sent_at_start($sent_at_start)
     private function sent_at_start($sent_at_start)

+ 1 - 6
app/Http/Controllers/PackageLogisticController.php

@@ -11,9 +11,6 @@ use Illuminate\Http\Request;
 
 
 class PackageLogisticController extends Controller
 class PackageLogisticController extends Controller
 {
 {
-    //
-
-
     /**
     /**
      * PackageLogisticsController constructor.
      * PackageLogisticsController constructor.
      */
      */
@@ -29,9 +26,7 @@ class PackageLogisticController extends Controller
         $owner_ids = $userService->getPermittingOwnerIds(auth()->user());
         $owner_ids = $userService->getPermittingOwnerIds(auth()->user());
         $paginateParams = $request->input();
         $paginateParams = $request->input();
         $orderPackages = OrderPackage::query()->filter($filters)
         $orderPackages = OrderPackage::query()->filter($filters)
-            ->whereIn('order_id',function ($query)use ($owner_ids){
-                $query->from('orders')->select('id')->whereIn('owner_id',$owner_ids);
-            })->with(['order' => function ($query) {
+            ->whereIn('owner_id',$owner_ids)->with(['order' => function ($query) {
             $query->with(['logistic', 'owner', 'packages.commodities']);
             $query->with(['logistic', 'owner', 'packages.commodities']);
         }])->orderByDesc('id')->paginate($request->paginate ?? 50);
         }])->orderByDesc('id')->paginate($request->paginate ?? 50);
         $logistics = Logistic::all();
         $logistics = Logistic::all();

+ 7 - 1
app/OrderPackage.php

@@ -9,6 +9,7 @@ use App\Services\OrderService;
 use App\Traits\ModelTimeFormat;
 use App\Traits\ModelTimeFormat;
 use Carbon\Carbon;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Support\Arr;
 use Illuminate\Support\Arr;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\DB;
@@ -22,7 +23,7 @@ class OrderPackage extends Model
     use ModelTimeFormat;
     use ModelTimeFormat;
 
 
     protected $fillable = ['order_id','logistic_number','batch_number',
     protected $fillable = ['order_id','logistic_number','batch_number',
-        'batch_rule','bulk','weight','length','width','height','paper_box_id','measuring_machine_id','weighed_at','status','sent_at','received_at','exception','transfer_status','remark'];
+        'batch_rule','bulk','weight','length','width','height','paper_box_id','measuring_machine_id','weighed_at','status','sent_at','received_at','exception','transfer_status','remark','owner_id'];
 
 
     public function order(){
     public function order(){
         return $this->belongsTo('App\Order','order_id','id');
         return $this->belongsTo('App\Order','order_id','id');
@@ -281,4 +282,9 @@ class OrderPackage extends Model
     {
     {
         return $filters->apply($query);
         return $filters->apply($query);
     }
     }
+
+    public function owner(): BelongsTo
+    {
+        return $this->belongsTo(Owner::class);
+    }
 }
 }

+ 47 - 1
app/Services/OrderPackageService.php

@@ -118,6 +118,7 @@ class OrderPackageService
         $orders = $orderService->getByWmsOrders($orderHeaders);
         $orders = $orderService->getByWmsOrders($orderHeaders);
         $packages = $this->getByOrderNos(data_get($orderHeaders,'*.orderno'));          // 已有
         $packages = $this->getByOrderNos(data_get($orderHeaders,'*.orderno'));          // 已有
         $this->createOrderPackage($orderHeaders,$orders,$packages);                     // 创建package
         $this->createOrderPackage($orderHeaders,$orders,$packages);                     // 创建package
+        $this->updatePackage($orderHeaders,$packages);
         $this->deleteUnnecessaryPackage($orderHeaders,$packages);     // 删除package
         $this->deleteUnnecessaryPackage($orderHeaders,$packages);     // 删除package
         unset($orders,$packages);       // 手动清除
         unset($orders,$packages);       // 手动清除
     }
     }
@@ -161,15 +162,26 @@ class OrderPackageService
         $logistic_numbers = array_diff(array_unique(data_get($orderHeader->actAllocationDetails,'*.picktotraceid')),['','*']);
         $logistic_numbers = array_diff(array_unique(data_get($orderHeader->actAllocationDetails,'*.picktotraceid')),['','*']);
         $inner_params = [];
         $inner_params = [];
         $date = Carbon::now()->format('Y-m-d H:i:s');
         $date = Carbon::now()->format('Y-m-d H:i:s');
+        $sentAtMap = [];
+        foreach ($orderHeader->actAllocationDetails as $item){
+            $sentAtMap[$item->picktotraceid] = $item;
+        }
         foreach ($logistic_numbers as $logistic_number){
         foreach ($logistic_numbers as $logistic_number){
             $package = $dataHandlerService->getKeyValue(['logistic_number'=>$logistic_number],$packages_maps);
             $package = $dataHandlerService->getKeyValue(['logistic_number'=>$logistic_number],$packages_maps);
             if(isset($package))continue;
             if(isset($package))continue;
+            try {
+                $data = $sentAtMap[$logistic_number];
+            } catch (\Exception $e) {
+                $data = null;
+            }
             $inner_params[] = [
             $inner_params[] = [
                 'order_id' => $order->id,
                 'order_id' => $order->id,
                 'logistic_number' => $logistic_number,
                 'logistic_number' => $logistic_number,
                 'created_at' => $date,
                 'created_at' => $date,
                 'updated_at' => $date,
                 'updated_at' => $date,
-                'status' =>'无'
+                'status' => '无',
+                'owner_id' => $order->owner_id,
+                'sent_at' => $data ? $data->checktime:null,
             ];
             ];
         }
         }
         return $inner_params;
         return $inner_params;
@@ -206,4 +218,38 @@ class OrderPackageService
         }
         }
     }
     }
 
 
+    private function updatePackage($orderHeaders, $packages)
+    {
+        $map = $this->getSentAtMap($orderHeaders);
+        foreach ($packages as $package) {
+            if ($package->sent_at) continue;
+            try {
+                $data = $map[$package->logistic_number];
+            } catch (\Exception $e) {
+                $data = null;
+            }
+            $data2 = [
+                'sent_at' => $data? $data->checktime:null,
+            ];
+            $package->update($data2);
+        }
+    }
+
+    /**
+     * @param $orderHeaders
+     * @return array
+     */
+    private function getSentAtMap($orderHeaders): array
+    {
+        $map = [];
+        foreach ($orderHeaders as $orderHeader) {
+            $actAllocationDetails = $orderHeader->actAllocationDetails;
+            foreach ($actAllocationDetails as $actAllocationDetail) {
+                $logistic_number = $actAllocationDetail->picktotraceid;
+                $map[$logistic_number] = $actAllocationDetail;
+            }
+        }
+        return $map;
+    }
+
 }
 }

+ 6 - 10
app/Services/PackageService.php

@@ -16,17 +16,13 @@ Class PackageService
 {
 {
     use ServiceAppAop;
     use ServiceAppAop;
     private function conditionQuery($params){
     private function conditionQuery($params){
-        $packages = OrderPackage::query()->with(['order','paperBox','measuringMachine'])
-        ->whereHas("order",function ($query){
-            /** @var Builder $query */
-            $ownerIds=app('UserService')->getPermittingOwnerIds(Auth::user());
-            $query->with('owner','logistic')->whereIn("owner_id",$ownerIds ?? []);
-        })->orderBy(TABLE.'id','DESC');
+        $ownerIds=app('UserService')->getPermittingOwnerIds(Auth::user());
+        $packages = OrderPackage::query()->with(['order'=>function($query){
+            return  $query->with(['owner','logistic']);
+        },'paperBox','measuringMachine'])
+        ->whereIn('owner_id',$ownerIds)->orderBy(TABLE.'id','DESC');
         if ($params['owner_id'] ?? false){
         if ($params['owner_id'] ?? false){
-            $owner_id = explode(',',$params['owner_id']);
-            $packages->whereHas('order',function ($query)use($owner_id){
-                $query->whereIn('owner_id',$owner_id);
-            });
+            $packages->whereIn('owner_id', explode(',',$params['owner_id']));
             unset($params['owner_id']);
             unset($params['owner_id']);
         }
         }
         if ($params['logistic_number'] ?? false){
         if ($params['logistic_number'] ?? false){

+ 2 - 1
database/factories/OracleActAllocationDetailsFactory.php

@@ -13,6 +13,7 @@ $factory->define(OracleActAllocationDetails::class, function (Faker $faker) {
         'qtyordered' => $faker->numberBetween(1,50),
         'qtyordered' => $faker->numberBetween(1,50),
         'qty_each' => $faker->numberBetween(1,50),
         'qty_each' => $faker->numberBetween(1,50),
         'location' => $faker->md5,
         'location' => $faker->md5,
-        'picktotraceid'  => $faker->uuid
+        'picktotraceid' => $faker->uuid,
+        'checktime' => now(),
     ];
     ];
 });
 });

+ 16 - 16
database/factories/OrcaleDOCOrderHeaderFactory.php

@@ -7,22 +7,22 @@ use Faker\Generator as Faker;
 
 
 $factory->define(OracleDOCOrderHeader::class, function (Faker $faker) {
 $factory->define(OracleDOCOrderHeader::class, function (Faker $faker) {
     return [
     return [
-        'ORDERNO' =>  \Illuminate\Support\Str::random(5).'_test',
-        'CUSTOMERID' => 'test',
-        'WAVENO' => 'test'.(string)rand(0,1000),
-        'ORDERTIME' =>\Carbon\Carbon::now()->subSeconds(10),
-        'CONSIGNEEID' => 'test',
-        'ADDTIME' =>\Carbon\Carbon::now()->subSeconds(5),
-        'EDITTIME' => \Carbon\Carbon::now()->subSeconds(1),
-        'EDISENDFLAG' => 'Y',
-        'SOSTATUS' => '99',
-        'ISSUEPARTYNAME'=> 'test_issuepartyname',
-        'RELEASESTATUS' => 'N',
-        'ARCHIVEFLAG' => 'Y',
-        'CHANNEL' =>'test_CHANNEL',
-        'ALLOWSHIP' =>  'N' , //允许发运
-        'YW_EDISENDFLAG' => 'N',
-        'NOTES' => 'xx',
+        'orderno' =>  \Illuminate\Support\Str::random(5).'_test',
+        'customerid' => 'test',
+        'waveno' => 'test'.(string)rand(0,1000),
+        'ordertime' =>\Carbon\Carbon::now()->subSeconds(10),
+        'consigneeid' => 'test',
+        'addtime' =>\Carbon\Carbon::now()->subSeconds(5),
+        'edittime' => \Carbon\Carbon::now()->subSeconds(1),
+        'edisendflag' => 'Y',
+        'sostatus' => '99',
+        'issuepartyname'=> 'test_issuepartyname',
+        'releasestatus' => 'N',
+        'archiveflag' => 'Y',
+        'channel' =>'test_CHANNEL',
+        'allowship' =>  'N' , //允许发运
+        'yw_edisendflag' => 'N',
+        'notes' => 'xx',
     ];
     ];
 });
 });
 
 

+ 0 - 2
database/migrations/2020_12_16_114253_add_status_and_sent_and_at_and_received_at_and_execption_and_tarnsfer_status_and_remark_to_order_package.php

@@ -40,8 +40,6 @@ class AddStatusAndSentAndAtAndReceivedAtAndExecptionAndTarnsferStatusAndRemarkTo
             $table->dropColumn('exception');
             $table->dropColumn('exception');
             $table->dropColumn('transfer_status');
             $table->dropColumn('transfer_status');
             $table->dropColumn('remark');
             $table->dropColumn('remark');
-            $table->dropIndex(['sent_at', 'exception']);
-            $table->dropIndex(['received_at', 'exception']);
         });
         });
     }
     }
 }
 }

+ 1 - 1
database/migrations/2021_01_14_174209_create_order_issue_user_workgroup_table.php

@@ -27,6 +27,6 @@ class CreateOrderIssueUserWorkgroupTable extends Migration
      */
      */
     public function down()
     public function down()
     {
     {
-        Schema::dropIfExists('order_issue_user_work_group');
+        Schema::dropIfExists('order_issue_user_workgroup');
     }
     }
 }
 }

+ 61 - 0
database/migrations/2021_01_20_145822_add_owner_id_to_order_packages.php

@@ -0,0 +1,61 @@
+<?php
+
+use App\OrderPackage;
+use App\Services\OrderPackageService;
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddOwnerIdToOrderPackages extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('order_packages', function (Blueprint $table) {
+            //
+            $table->bigInteger('owner_id')->nullable()->index();
+
+        });
+
+        $this->changeOwnerId();
+
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('order_packages', function (Blueprint $table) {
+            //
+            $table->dropColumn('owner_id');
+        });
+    }
+
+    public function changeOwnerId()
+    {
+        /**
+         * @var OrderPackageService  $order_packages_service
+         */
+        $order_packages_service = app(OrderPackageService::class);
+        OrderPackage::query()->with('order')->chunkById(200,function($order_packages)use($order_packages_service){
+            $update_params = [];
+            $update_params[] = ['id','owner_id'];
+            foreach ($order_packages as $order_package) {
+                if($order_package->order && $order_package->order->owner_id){
+                    $update_params[] = [
+                        'id'=>$order_package->id,
+                        'owner_id'=>$order_package->order->owner_id
+                    ];
+                }
+            }
+            $order_packages_service->batchUpdate($update_params);
+        });
+    }
+}

+ 22 - 4
tests/Services/OrderPackageService/SyncOrderPackageTest.php

@@ -39,11 +39,11 @@ class SyncOrderPackageTest extends TestCase
         $this->orderHeaderService = app('OracleDocOrderHeaderService');
         $this->orderHeaderService = app('OracleDocOrderHeaderService');
 
 
         $orderHeader = factory(OracleDOCOrderHeader::class)->make(['userdefine1' =>'TEST_OW' ]);
         $orderHeader = factory(OracleDOCOrderHeader::class)->make(['userdefine1' =>'TEST_OW' ]);
-        $order = factory(Order::class)->create(['code'=>$orderHeader['orderno'],]);
+        $order = factory(Order::class)->create(['code'=>$orderHeader['orderno'],'owner_id'=>1]);
         $basSku = factory(OracleBasSKU::class)->make(['customerid' => 'TEST_OW']);
         $basSku = factory(OracleBasSKU::class)->make(['customerid' => 'TEST_OW']);
-        $OracleActAllocationDetail1 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku]);
-        $OracleActAllocationDetail2 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku]);
-        $OracleActAllocationDetail3 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku]);
+        $OracleActAllocationDetail1 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku,'checktime'=>now()]);
+        $OracleActAllocationDetail2 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku,'checktime'=>now()]);
+        $OracleActAllocationDetail3 = factory(OracleActAllocationDetails::class)->make(['orderno'=>$orderHeader->orderno,'customerid'=>'TEST_OW','sku'=>$basSku->sku,'checktime'=>now()]);
         $OracleActAllocationDetails = collect([$OracleActAllocationDetail1,$OracleActAllocationDetail2,$OracleActAllocationDetail3]);
         $OracleActAllocationDetails = collect([$OracleActAllocationDetail1,$OracleActAllocationDetail2,$OracleActAllocationDetail3]);
         $orderHeader->setRelation('actAllocationDetails',$OracleActAllocationDetails);
         $orderHeader->setRelation('actAllocationDetails',$OracleActAllocationDetails);
 
 
@@ -84,6 +84,24 @@ class SyncOrderPackageTest extends TestCase
         $this->assertEquals($orderPackages->count(),count($this->data['orderHeader']->actAllocationDetails));
         $this->assertEquals($orderPackages->count(),count($this->data['orderHeader']->actAllocationDetails));
     }
     }
 
 
+    /**
+     * @test
+     */
+    public function orderPackageSentAtUpdate() {
+        $actAllocationDetails = $this->data['orderHeader']->actAllocationDetails;
+        foreach ($actAllocationDetails as $actAllocationDetail) {
+            $actAllocationDetail->checktime = null;
+        }
+        $this->orderPackageUnnecessary();
+        $actAllocationDetails = $this->data['orderHeader']->actAllocationDetails;
+        foreach ($actAllocationDetails as $actAllocationDetail) {
+            $actAllocationDetail->checktime = '2020-11-01';
+        }
+        $this->orderPackageUnnecessary();
+        $orderPackages = OrderPackage::query()->where('order_id',$this->data['order']['id'])->get();
+        $this->assertEquals('2020-11-01 00:00:00', $orderPackages->first()->sent_at);
+    }
+
     /**
     /**
      * @test
      * @test
      */
      */