Quellcode durchsuchen

自动回传根据货主设置回传间隔时间

haozi vor 4 Jahren
Ursprung
Commit
ab1c8b7c9e

+ 35 - 5
app/Console/Commands/AccordingToOwnersManualBack.php

@@ -45,16 +45,40 @@ class AccordingToOwnersManualBack extends Command
     {
         ini_set('max_execution_time', 2500);
         ini_set('memory_limit', '512M');
-        $ownerCodes=Owner::query()->where('is_manual_back',1)->pluck('code');//自动回传货主
-        $last_order_manual_back_at=$this->getOrderManualBackAt();//上次回传时间
+        $owners=Owner::query()->where('is_manual_back',1)->orderBy('interval_time')->get();
+        $sys_last_manual_back_time=$this->getOrderManualBackAt();//系统上次回传时间
         $now=Carbon::now()->toDateTimeString();//当前时间
+        $manualBackTime=null;
+        $ownerCodes=[];
+        foreach ($owners as $owner){
+            $intervalTime=Carbon::parse($now)->diffInMinutes(Carbon::parse($owner->last_manual_back_time));
+            if ($intervalTime>18*60 || !$owner->last_manual_back_time){ // 隔天回传情况 或者 货主上次回传时间为null
+                $manualBackTime=$sys_last_manual_back_time;
+                $ownerCodes=array_unique(data_get($owners,'*.code'));
+                break;
+            }
+            if ($owner->interval_time==30 && $intervalTime>=25 &&$intervalTime<=35){ //存在每30分钟一回传的货主
+                $manualBackTime=$owner->last_manual_back_time;
+                $ownerCodes[]=$owner->code;
+            }else if ($owner->interval_time==60 && $intervalTime>=55 &&$intervalTime<=65){ //存在每1小时一回传的货主
+                $manualBackTime=$owner->last_manual_back_time;
+                $ownerCodes[]=$owner->code;
+            }else if ($owner->interval_time==120 && $intervalTime>=115 &&$intervalTime<=125){ //存在每2小时一回传的货主
+                $manualBackTime=$owner->last_manual_back_time;
+                $ownerCodes[]=$owner->code;
+            }else if ($owner->interval_time==180 && $intervalTime>=175 &&$intervalTime<=185){ //存在每3小时一回传的货主
+                $manualBackTime=$owner->last_manual_back_time;
+                $ownerCodes[]=$owner->code;
+            }
+        }
         try {
-            $ordernos=$this->allocation($last_order_manual_back_at, $now, $ownerCodes);//分配是创建状态订单
-            $this->manualBack($last_order_manual_back_at,$now, $ownerCodes,$ordernos);//回传
+            $ordernos=$this->allocation($manualBackTime, $now, $ownerCodes);//分配是创建状态订单
+            $this->manualBack($manualBackTime,$now, $ownerCodes,$ordernos);//回传
         } catch (\Exception $e) {
-            app('LogService')->log(__METHOD__, __FUNCTION__, "自动回传失败" . $last_order_manual_back_at . ' || '
+            app('LogService')->log(__METHOD__, __FUNCTION__, "自动回传失败" . $manualBackTime . ' || '
                 .$now. ' || ' . json_encode($ownerCodes).' || ' . json_encode($e->getMessage()));
         }
+        $this->changeOwnerLastManualTime($ownerCodes,$now);//更新回传货主的回传时间
         $this->setOrderManualBackAt();//回传结束时间标记
     }
 
@@ -141,4 +165,10 @@ class AccordingToOwnersManualBack extends Command
             ->where("name", "last_order_manual_back_at")
             ->update(["value" => Carbon::now()->toDateTimeString()]);
     }
+
+    private function changeOwnerLastManualTime($ownerCodes,$now)
+    {
+        Owner::query()->whereIn('code',$ownerCodes)
+            ->update(['last_manual_back_time'=>$now]);
+    }
 }

+ 14 - 0
app/Http/Controllers/OwnerController.php

@@ -236,4 +236,18 @@ class OwnerController extends Controller
         $owner=app("OwnerService")->changeManualBackStatus($id,$is_manual_back);
         return ["success"=>true,"data"=>$owner];
     }
+
+    /**
+     * @param Request $request
+     * @return array
+     * 设置货主自动回传时间间隔
+     */
+    public function intervalTime(Request $request): array
+    {
+        if (!Gate::allows('货主-编辑')) return ["success"=>false,"data"=>"无权操作!"];
+        $id=$request->input('id');
+        $intervalTime=$request->input('intervalTime');
+        $owner=app("OwnerService")->changeIntervalTime($id,$intervalTime);
+        return ["success"=>true,"data"=>$owner];
+    }
 }

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

@@ -564,4 +564,23 @@ sql;
             ->whereNotIn('id', $storeItemMaxIds)
             ->delete();
     }
+
+    public function testCarbon()
+    {
+
+//        ini_set('max_execution_time', 2500);
+//        ini_set('memory_limit', '512M');
+//        $ownerCodes=Owner::query()->where('is_manual_back',1)->pluck('code');//自动回传货主
+//        $last_order_manual_back_at=$this->getOrderManualBackAt();//上次回传时间
+//        $now=Carbon::now()->toDateTimeString();//当前时间
+//        try {
+//            $ordernos=$this->allocation($last_order_manual_back_at, $now, $ownerCodes);//分配是创建状态订单
+//            $this->manualBack($last_order_manual_back_at,$now, $ownerCodes,$ordernos);//回传
+//        } catch (\Exception $e) {
+//            app('LogService')->log(__METHOD__, __FUNCTION__, "自动回传失败" . $last_order_manual_back_at . ' || '
+//                .$now. ' || ' . json_encode($ownerCodes).' || ' . json_encode($e->getMessage()));
+//        }
+//        $this->setOrderManualBackAt();//回传结束时间标记
+
+    }
 }

+ 3 - 0
app/Owner.php

@@ -42,6 +42,9 @@ class Owner extends Model
         'is_check_asn',          //是否校验ASN(收货时检查此项)
         'owner_group_id',        // 所属组别
         'is_manual_back',        // 是否开启货主订单一键回传
+        'interval_time',        // 回传间隔时间(分钟为单位)
+        'last_manual_back_time', // 上次回传时间
+
     ];
     //relevance说明 0:仓储 1:作业 2:快递 3:物流 4:直发 5:系统 存储示例:["0","1"]存在仓储与作业计费
     protected $casts = [

+ 7 - 0
app/Services/OwnerService.php

@@ -14,6 +14,7 @@ use App\OwnerStoragePriceModel;
 use App\Services\common\BatchUpdateService;
 use App\User;
 use Carbon\Carbon;
+use Doctrine\DBAL\Exception\DatabaseObjectExistsException;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Collection;
@@ -534,4 +535,10 @@ sql;
         else $owner->update(['is_manual_back'=>0]);
         return $owner;
     }
+    public function changeIntervalTime($id,$intervalTime)
+    {
+        $owner=Owner::query()->find($id);
+        $owner->update(['interval_time'=>$intervalTime]);
+        return $owner;
+    }
 }

+ 7 - 0
bootstrap/cache/packages.php

@@ -1,4 +1,11 @@
 <?php return array (
+  'beyondcode/laravel-dump-server' => 
+  array (
+    'providers' => 
+    array (
+      0 => 'BeyondCode\\DumpServer\\DumpServerServiceProvider',
+    ),
+  ),
   'facade/ignition' => 
   array (
     'providers' => 

+ 38 - 36
bootstrap/cache/services.php

@@ -23,24 +23,25 @@
     19 => 'Illuminate\\Translation\\TranslationServiceProvider',
     20 => 'Illuminate\\Validation\\ValidationServiceProvider',
     21 => 'Illuminate\\View\\ViewServiceProvider',
-    22 => 'Facade\\Ignition\\IgnitionServiceProvider',
-    23 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
-    24 => 'Intervention\\Image\\ImageServiceProvider',
-    25 => 'Laravel\\Horizon\\HorizonServiceProvider',
-    26 => 'Laravel\\Ui\\UiServiceProvider',
-    27 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
-    28 => 'Carbon\\Laravel\\ServiceProvider',
-    29 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
-    30 => 'Oursdreams\\Export\\ExportServiceProvider',
-    31 => 'Overtrue\\LaravelPinyin\\ServiceProvider',
-    32 => 'Te7aHoudini\\LaravelTrix\\LaravelTrixServiceProvider',
-    33 => 'Yajra\\Oci8\\Oci8ServiceProvider',
-    34 => 'App\\Providers\\AppServiceProvider',
-    35 => 'App\\Providers\\AuthServiceProvider',
-    36 => 'App\\Providers\\BroadcastServiceProvider',
-    37 => 'App\\Providers\\EventServiceProvider',
-    38 => 'App\\Providers\\HorizonServiceProvider',
-    39 => 'App\\Providers\\RouteServiceProvider',
+    22 => 'BeyondCode\\DumpServer\\DumpServerServiceProvider',
+    23 => 'Facade\\Ignition\\IgnitionServiceProvider',
+    24 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
+    25 => 'Intervention\\Image\\ImageServiceProvider',
+    26 => 'Laravel\\Horizon\\HorizonServiceProvider',
+    27 => 'Laravel\\Ui\\UiServiceProvider',
+    28 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
+    29 => 'Carbon\\Laravel\\ServiceProvider',
+    30 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
+    31 => 'Oursdreams\\Export\\ExportServiceProvider',
+    32 => 'Overtrue\\LaravelPinyin\\ServiceProvider',
+    33 => 'Te7aHoudini\\LaravelTrix\\LaravelTrixServiceProvider',
+    34 => 'Yajra\\Oci8\\Oci8ServiceProvider',
+    35 => 'App\\Providers\\AppServiceProvider',
+    36 => 'App\\Providers\\AuthServiceProvider',
+    37 => 'App\\Providers\\BroadcastServiceProvider',
+    38 => 'App\\Providers\\EventServiceProvider',
+    39 => 'App\\Providers\\HorizonServiceProvider',
+    40 => 'App\\Providers\\RouteServiceProvider',
   ),
   'eager' => 
   array (
@@ -54,24 +55,25 @@
     7 => 'Illuminate\\Pagination\\PaginationServiceProvider',
     8 => 'Illuminate\\Session\\SessionServiceProvider',
     9 => 'Illuminate\\View\\ViewServiceProvider',
-    10 => 'Facade\\Ignition\\IgnitionServiceProvider',
-    11 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
-    12 => 'Intervention\\Image\\ImageServiceProvider',
-    13 => 'Laravel\\Horizon\\HorizonServiceProvider',
-    14 => 'Laravel\\Ui\\UiServiceProvider',
-    15 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
-    16 => 'Carbon\\Laravel\\ServiceProvider',
-    17 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
-    18 => 'Oursdreams\\Export\\ExportServiceProvider',
-    19 => 'Overtrue\\LaravelPinyin\\ServiceProvider',
-    20 => 'Te7aHoudini\\LaravelTrix\\LaravelTrixServiceProvider',
-    21 => 'Yajra\\Oci8\\Oci8ServiceProvider',
-    22 => 'App\\Providers\\AppServiceProvider',
-    23 => 'App\\Providers\\AuthServiceProvider',
-    24 => 'App\\Providers\\BroadcastServiceProvider',
-    25 => 'App\\Providers\\EventServiceProvider',
-    26 => 'App\\Providers\\HorizonServiceProvider',
-    27 => 'App\\Providers\\RouteServiceProvider',
+    10 => 'BeyondCode\\DumpServer\\DumpServerServiceProvider',
+    11 => 'Facade\\Ignition\\IgnitionServiceProvider',
+    12 => 'Fideloper\\Proxy\\TrustedProxyServiceProvider',
+    13 => 'Intervention\\Image\\ImageServiceProvider',
+    14 => 'Laravel\\Horizon\\HorizonServiceProvider',
+    15 => 'Laravel\\Ui\\UiServiceProvider',
+    16 => 'Maatwebsite\\Excel\\ExcelServiceProvider',
+    17 => 'Carbon\\Laravel\\ServiceProvider',
+    18 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
+    19 => 'Oursdreams\\Export\\ExportServiceProvider',
+    20 => 'Overtrue\\LaravelPinyin\\ServiceProvider',
+    21 => 'Te7aHoudini\\LaravelTrix\\LaravelTrixServiceProvider',
+    22 => 'Yajra\\Oci8\\Oci8ServiceProvider',
+    23 => 'App\\Providers\\AppServiceProvider',
+    24 => 'App\\Providers\\AuthServiceProvider',
+    25 => 'App\\Providers\\BroadcastServiceProvider',
+    26 => 'App\\Providers\\EventServiceProvider',
+    27 => 'App\\Providers\\HorizonServiceProvider',
+    28 => 'App\\Providers\\RouteServiceProvider',
   ),
   'deferred' => 
   array (

+ 35 - 0
database/migrations/2021_09_24_150620_change_owners_table_add_column_interval_time_and_last_manual_back_time.php

@@ -0,0 +1,35 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class ChangeOwnersTableAddColumnIntervalTimeAndLastManualBackTime extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('owners', function (Blueprint $table) {
+            $table->integer('interval_time')->default(30)->comment('自动回传时间');
+            $table->timestamp('last_manual_back_time')->nullable()->index()->comment('上次回传时间');
+        });
+
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('owners', function (Blueprint $table) {
+            $table->dropColumn("interval_time");
+            $table->dropColumn("last_manual_back_time");
+        });
+    }
+}

+ 40 - 2
resources/views/maintenance/owner/index.blade.php

@@ -17,6 +17,7 @@
                         <th class="text-center">货主名</th>
                         <th class="text-center">创建时间</th>
                         <th class="text-center">订单自动回传</th>
+                        <th class="text-center">回传间隔(分)</th>
                         <th class="text-center">操作</th>
                     </tr>
                     <tr v-for="(owner,i) in owners" @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
@@ -28,6 +29,17 @@
                             <span class="btn btn-sm btn-outline-secondary" @click="changeManualBackType(owner.id,owner.is_manual_back)">
                                 @{{is_manual_back_type[owner.is_manual_back]}}</span>
                         </td>
+                        <td class="text-center">
+                            <span v-if="owner.is_manual_back==1">
+                        <select  class="form-control-sm" name="interval_time" id="interval_time" @change="changeIntervalTime(owner.id,owner.interval_time)"   v-model="owner.interval_time">
+                            <option :value="30">30</option>
+                            <option :value="60">60</option>
+                            <option :value="120">120</option>
+                            <option :value="180">180</option>
+                        </select>
+
+                            </span>
+                        </td>
                         <td class="text-center">
                             @can('货主-编辑')
                             <button class="btn btn-sm btn-outline-primary" @click="edit(owner.id)">改</button> @endcan
@@ -50,7 +62,11 @@
             data:{
                 owners:[
                     @foreach( $owners as $owner )
-                    {id:'{{$owner->id}}',code:'{{$owner->code}}',name:'{{$owner->name}}',is_manual_back:'{{$owner->is_manual_back}}',group:'{{$owner->ownerGroup->name??''}}',created_at:'{{$owner->created_at}}'},
+                    {id:'{{$owner->id}}',code:'{{$owner->code}}',name:'{{$owner->name}}',
+                        is_manual_back:'{{$owner->is_manual_back}}',
+                        interval_time:'{{$owner->interval_time}}',
+                        group:'{{$owner->ownerGroup->name??''}}',
+                        created_at:'{{$owner->created_at}}'},
                     @endforeach
                 ],
                 selectTr:0,
@@ -115,7 +131,6 @@
                     })
                 },
                 changeManualBackType(id,isManualBack){
-                    console.log(isManualBack)
                     let url = '{{url('maintenance/owner/changeManualBackType')}}';
                     window.axios.post(url, {id:id,isManualBack:isManualBack})
                         .then(res => {
@@ -137,6 +152,29 @@
                         window.tempTip.show("网络错误:" + err);
                     })
                 },
+                changeIntervalTime(id,intervalTime){
+                    console.log(id,intervalTime)
+                    let url = '{{url('maintenance/owner/intervalTime')}}';
+                    window.axios.post(url, {id:id,intervalTime:intervalTime})
+                        .then(res => {
+                            if (res.data.success) {
+                                this.owners.forEach(function (owner){
+                                     if (owner.id==res.data.data.id){
+                                         owner.interval_time=res.data.data.interval_time;
+                                     }
+                                })
+                                window.tempTip.setDuration(3000);
+                                window.tempTip.showSuccess('设置回传时间成功!');
+                                this.$forceUpdate();
+                                return;
+                            }
+                            window.tempTip.setDuration(3000);
+                            window.tempTip.show('设置回传时间失败!');
+                        }).catch(err => {
+                        window.tempTip.setDuration(3000);
+                        window.tempTip.show("网络错误:" + err);
+                    })
+                },
             }
         });
     </script>

+ 1 - 0
routes/web.php

@@ -130,6 +130,7 @@ Route::group(['middleware'=>'auth'],function ($route){
             Route::get('recycle','OwnerController@recycle');
             Route::post('restoreSelected', 'OwnerController@restoreSelected');
             Route::post('changeManualBackType', 'OwnerController@changeManualBackType');
+            Route::post('intervalTime', 'OwnerController@intervalTime');
         });
         /** 教程 */
         Route::group(['prefix'=>'tutorial'],function(){