Преглед на файлове

Merge branch 'zengjun' of ssh://was.baoshi56.com:10022/var/git/bswas

LD преди 5 години
родител
ревизия
97ec165e66

+ 5 - 1
app/Http/Controllers/OrderIssueController.php

@@ -516,7 +516,11 @@ class OrderIssueController extends Controller
 //            $string= preg_replace('/[\s,\,\,]+/','*++*',$str);
 //            $items = explode('*++*',$string);
             $items=[];
+
             preg_match('/^(\w*?)[\s,,;;]([\x{4e00}-\x{9fa5}]*?)[\s,,;;](.*?)[\s,,;;](\w*?)$/u', $str, $items);
+            if(count($items) == 0){
+                preg_match('/^(\w*?)[\s,,;;]([\x{4e00}-\x{9fa5}]*?)[\s,,;;](.*?)$/u', $str, $items);
+            }
             array_shift($items);
             $head = '第'.($i+1).'行';
             if(count($items)<count($rows)-1){
@@ -626,7 +630,7 @@ class OrderIssueController extends Controller
             $orderPacakges = $order_issue->order->packages ?? collect();
             $logistic_numbers = '';$order_sku  = '';$order_sku_name  = '';$order_sku_amount  = '';
             $orderPacakges->each(function($package,$index)use(&$logistic_numbers,&$order_sku,&$order_sku_name,&$order_sku_amount){
-                $logistic_numbers.=$package->logistic_number."\r\n";
+                if(!str_starts_with('null',$package->logistic_number))$logistic_numbers.=$package->logistic_number."\r\n";
                 $package->commodities->each(function($commodities)use(&$order_sku,&$order_sku_name,&$order_sku_amount){
                     $commodity = $commodities->commodity ?? '';
                     $order_sku.= ($commodity->sku ?? '')."\r\n";

+ 9 - 2
app/Http/Controllers/OrderTrackingController.php

@@ -11,6 +11,7 @@ use App\Services\OwnerService;
 use App\UploadFile;
 use Exception;
 use Illuminate\Http\Request;
+use Illuminate\Support\Carbon;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Http;
 use Intervention\Image\Facades\Image;
@@ -21,11 +22,14 @@ class OrderTrackingController extends Controller
 
     public function index(Request $request)
     {
+        /**
+         * @var OrderTrackingService $service
+         */
         if (!Gate::allows('订单管理-跟踪'))
             return redirect(url('/'));
         $owners =  app(OwnerService::class)->getAuthorizedOwners();
-        /** @var OrderTrackingService $service */
         $service = app('OrderTrackingService');
+        $service->fillInOrderTracking();
         $trackOrders = $service->paginate($request->input());
         $trackOrders->map(function($trackOrder){
             if($trackOrder->uploadFile){
@@ -157,7 +161,7 @@ class OrderTrackingController extends Controller
         $order_client_code_temp = '';
         $row_count = 0;
         foreach ($orderTrackings as $index=> $orderTracking) {
-            $logistic =  $orderTracking->commodities->package->order->logistic->name;
+            $logistic =  $orderTracking->commodities->package->order->logistic->name ?? '';
             if($order_client_code_temp==''){
                 $order_client_code_temp=$orderTracking->order_client_code;
                 $row_count=1;
@@ -190,6 +194,9 @@ class OrderTrackingController extends Controller
             if($logistic=='新杰物流'||$logistic=='新杰物流到付'){
                 $logistic_number = $orderTracking->order_client_code;
             }
+            if(str_starts_with('null',$logistic_number)){
+                $logistic_number = '';
+            }
             $list[]=[
                 $orderTracking->owner->name ?? '',
                 $order_client_code,

+ 2 - 21
app/Imports/OrderTrackingImport.php

@@ -110,26 +110,6 @@ class OrderTrackingImport implements ToCollection
                     }
                 }
             }
-//            $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) {
@@ -139,6 +119,7 @@ class OrderTrackingImport implements ToCollection
                             $package->commodities = $package->commodities->filter(function($item)use($commodities){
                                 return $item->id != $commodities->id;
                             });
+                            $this->orderPackages[$items[1]] = $packages;
                             return $commodities;
                         }
                     }
@@ -257,7 +238,7 @@ class OrderTrackingImport implements ToCollection
             return $this->orderPackages[$client_code];
         }else{
             $order = $this->getOrder($client_code,$items);
-            if($order->packages->count() > 0 ){
+            if($order && $order->packages->count() > 0 ){
                 $this->orderPackages[$client_code] = $order->packages;
                 return $order->packages;
             }else{

+ 1 - 0
app/OracleBasSKU.php

@@ -20,5 +20,6 @@ class OracleBasSKU extends Model
      * column: SKU 产品编码
      *         ALTERNATE_SKU1 产品条码
      *         Descr_C 商品名称
+     *
      * */
 }

+ 20 - 0
app/OrderTracking.php

@@ -16,6 +16,26 @@ class OrderTracking extends Model
         'is_on_duty_shift','is_arrival','signed_at',
         'receive_bill_status','remark','gross_weight','bulk'];
 
+    /*
+     * order_package_commodity_id 订单商品id
+     * owner_id 货主
+     * web_order_number WEB+订单号
+     * pick_up_at 提货时间
+     * sale 销售
+     * client 客户
+     * order_client_code 订单号
+     * order_remark 订单备注
+     * pallet_total 托盘合计
+     * planning_sent_at 应送达时间
+     * is_on_duty_shift 是否赶上卡班
+     * is_arrival 到货情况
+     * signed_at 签收时间
+     * receive_bill_status
+     * remark 签收单情况
+     * gross_weight 重量
+     * bulk 体积
+     */
+
     protected $appends =[
         'ownerName','sku','packageWeight','packageBulk','orderCity','packageLogisticNumber','packageLogistic','orderClientNumber'
     ];

+ 10 - 2
app/Services/OrderIssueService.php

@@ -181,10 +181,18 @@ class OrderIssueService
             }
         }
         if (isset($condition['logistic_indemnity_money'])) {
-            $query->where('logistic_indemnity_money', $condition['logistic_indemnity_money']);
+            if($condition['logistic_indemnity_money']== '是'){
+                $query->whereNotNull('logistic_indemnity_money');
+            }elseif($condition['logistic_indemnity_money']== '否'){
+                $query->whereNull('logistic_indemnity_money');
+            }
         }
         if (isset($condition['baoshi_indemnity_money'])) {
-            $query->where('baoshi_indemnity_money', $condition['baoshi_indemnity_money']);
+            if($condition['baoshi_indemnity_money']== '是'){
+                $query->whereNotNull('baoshi_indemnity_money');
+            }elseif($condition['baoshi_indemnity_money']== '否'){
+                $query->whereNull('baoshi_indemnity_money');
+            }
         }
         if (isset($condition['order_issue_ids'])) {
             $orderIssuesId = $condition['order_issue_ids'];

+ 37 - 0
app/Services/OrderTrackingService.php

@@ -496,4 +496,41 @@ class OrderTrackingService
         ];
     }
 
+    public function fillInOrderTracking($orderTracking = null)
+    {
+        $orderTrackingIds = [];
+        try {
+            $date = new Carbon();
+            if($orderTracking==null){
+                $orderTracking = OrderTracking::query()
+                    ->where('created_at', '!=', '0000-00-00 00:00:00')
+                    ->where('planning_sent_at', '!=', '0000-00-00 00:00:00')
+                    ->whereNull('signed_at')
+                    ->where('planning_sent_at','<',$date)
+                    ->get();
+            }
+            if(count($orderTracking)==0)return;
+            $update_params = [['id','signed_at']];
+            $orderTracking = $orderTracking->where('created_at', '!=', '0000-00-00 00:00:00')
+                ->where('planning_sent_at', '!=', '0000-00-00 00:00:00')
+                ->whereNull('signed_at')
+                ->where('planning_sent_at','<',$date);
+            $orderTracking->each(function($item)use(&$update_params){
+                $update_params[] = [
+                    'id' => $item->id,
+                    'signed_at' => $item->planning_sent_at
+                ];
+            });
+            if(count($update_params) > 0) $this->batchUpdate($update_params);
+            $orderTrackingIds = data_get($orderTracking, '*.id');
+            OrderTracking::query()->whereIn('id', $orderTrackingIds)
+                ->whereNull('is_on_duty_shift')
+                ->whereNull('is_arrival')
+                ->update(['is_on_duty_shift' => '是', 'is_arrival' => '是']);
+            app('LogService')->log(__METHOD__,__FUNCTION__,'修改签收日期 是否赶上卡班 到货情况'.json_encode($orderTrackingIds));
+        } catch (\Exception $e) {
+            app('LogService')->log(__METHOD__,'ERROR '.__FUNCTION__,'修改签收日期 是否赶上卡班 到货情况 ERROR'.json_encode($orderTrackingIds).' || '.json_encode($e->getMessage()).' || '.json_encode($e->getTraceAsString()));
+        }
+    }
+
 }

+ 27 - 0
database/factories/OrderTrackingFactory.php

@@ -0,0 +1,27 @@
+<?php
+
+/** @var \Illuminate\Database\Eloquent\Factory $factory */
+
+use Faker\Generator as Faker;
+
+$factory->define(\App\OrderTracking::class, function (Faker $faker) {
+    return [
+        'order_package_commodity_id' => rand(10,100),
+        'owner_id' => rand(0,10),
+        'web_order_number'=>$faker->uuid,
+        'pick_up_at' =>$faker->dateTime(),
+        'sale' => $faker->name,
+        'client' => $faker->name,
+        'order_client_code' => $faker->uuid,
+        'order_remark' => $faker->text(10),
+        'pallet_total' => $faker->numberBetween(0,10),
+        'planning_sent_at'=>$faker->dateTimeBetween('-100 hour','now'),
+        'is_on_duty_shift'=>['是','否',null][rand(0,1)],
+        'is_arrival'=>['是','否',null][rand(0,1)],
+        'signed_at' => null,
+        'receive_bill_status'=>null,
+        'remark' => $faker->text(10),
+        'gross_weight'=>$faker->numberBetween(0,10),
+        'bulk' => $faker->numberBetween(0,10)
+    ];
+});

+ 32 - 0
database/migrations/2020_11_18_111612_add_signed_at_index_to_order_trackings.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddSignedAtIndexToOrderTrackings extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('order_trackings', function (Blueprint $table) {
+            $table->index('signed_at','order_trackings_signed_at_index');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('order_trackings', function (Blueprint $table) {
+            $table->dropIndex('order_trackings_signed_at_index');
+        });
+    }
+}

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

@@ -761,9 +761,9 @@
                     {name: 'is_imported', type: 'select', tip: '是否导入处理', placeholder: '是否导入处理', data: imported_status},
                 ],[
                     @cannot('订单管理-问题件-客户不可见')
-                    {name: 'logistic_indemnity_money', type: 'input', tip: '承运商赔偿金额', placeholder: '承运商赔偿金额'},
+                    {name: 'logistic_indemnity_money', type: 'select', tip: '承运商赔偿金额', placeholder: '承运商赔偿金额',data:[{name: '是',value:'是'},{name: '否',value:'否'}]},
                     @endcannot
-                    {name: 'baoshi_indemnity_money', type: 'input', tip: '宝时赔偿金额', placeholder: '宝时赔偿金额'},
+                    {name: 'baoshi_indemnity_money', type: 'select', tip: '宝时赔偿金额', placeholder: '宝时赔偿金额',data:[{name: '是',value:'是'},{name: '否',value:'否'}]},
                     @cannot('订单管理-问题件-客户不可见')
                     {name: 'final_status', type: 'select', tip: '问题件的最终状态', placeholder: '最终状态', data: final_status},
                     {name: 'order_issue_type_id', type: 'select', tip: '问题类别', placeholder: '问题类别', data: this.orderIssueType},

+ 0 - 0
tests/Services/OrderTrakingSerive/CustomizedOperationTest.php → tests/Services/OrderTrackingService/CustomizedOperationTest.php


+ 43 - 0
tests/Services/OrderTrackingService/FillInOrderTrackingTest.php

@@ -0,0 +1,43 @@
+<?php
+
+namespace Tests\Services\OrderTrackingService;
+
+use App\OrderTracking;
+use App\Services\OrderTrackingService;
+use Carbon\Carbon;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class FillInOrderTrackingTest extends TestCase
+{
+    /** @var OrderTrackingService $service */
+    public $service;
+    public $data;
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service = app('OrderTrackingService');
+        $this->data['orderTracking'] = factory(OrderTracking::class,10)->create();
+    }
+
+    public function testFillInOrderTracking()
+    {
+        $data = new Carbon();
+        $orderTracking =  $this->data['orderTracking'];
+        $this->service->fillInOrderTracking($orderTracking);
+        try {
+            $orderTracking_list = OrderTracking::query()->whereIn('id', data_get($orderTracking, '*.id'))->get();
+            $orderTracking_list->each(function ($item) use ($data, $orderTracking) {
+                $tracking = $orderTracking->where('id', $item->id)->first();
+                if ($item->created_at != '0000-00-00 00:00:00' &&
+                    $item->planning_sent_at !== '0000-00-00 00:00:00' &&
+                    $item->planning_sent_at < $data) {
+                    $this->assertEquals($tracking->planning_sent_at, $item->signed_at);
+                }
+            });
+        } catch (\Exception $e) {
+            OrderTracking::query()->whereIn('id',data_get($orderTracking,'*.id'))->delete();
+        }
+    }
+}

+ 0 - 1
tests/Services/OrderTrakingSerive/GetParamsByOrderHeaderAndOrderTest.php → tests/Services/OrderTrackingService/GetParamsByOrderHeaderAndOrderTest.php

@@ -35,6 +35,5 @@ class GetParamsByOrderHeaderAndOrderTest extends TestCase
         $orderTacking =  $this->service->getParamsByOrderHeaderAndOrder($orderHeader,$order);
         $this->assertNotEmpty($orderTacking);
         $this->assertNotEmpty($orderTacking['planning_sent_at']);
-        var_dump($orderTacking,$order);
     }
 }