Переглянути джерело

stationTask注册station_id

LD 5 роки тому
батько
коміт
7fdef682fb

+ 1 - 0
app/Http/Controllers/StationController.php

@@ -55,6 +55,7 @@ class StationController extends Controller
     public function monitorShow(Station $station)
     {
         $stationTypeBinMonitor = StationTypeBinMonitor::query()->where("station_id",$station->id)->first();
+        $station->loadMissing('')
         if (!$stationTypeBinMonitor){
             $stationTypeBinMonitor =StationTypeBinMonitor::query()->create([
                 'station_id' => $station['id'],

+ 4 - 0
app/Services/StationTaskBatchService.php

@@ -82,6 +82,10 @@ class StationTaskBatchService
                 return [$taskBatch];
             })
         );
+        $this->stationTaskService->registerStations(
+            $stationTasks_toAttach,
+            $stationTaskBatches_toCreate
+        );
 
         return $stationTaskBatches_toCreate;
     }

+ 22 - 0
app/Services/StationTaskService.php

@@ -61,6 +61,28 @@ class StationTaskService
         $this->stationTaskChildService->insert($taskChildren_toInsert->toArray());
     }
 
+    function registerStations(Collection $tasks, Collection $stations)
+    {
+        $this->instant($this->stationTaskChildService,'StationTaskChildService');
+        $taskChildren_toInsert=collect();
+        foreach ($subTaskLists as $i=>$subTaskList){
+            foreach ($subTaskList as $subTask){
+                $paramToInsert = [
+                    'station_task_id' => $tasks[$i]['id'],
+                    'station_taskable_type' => get_class($subTask),
+                    'station_taskable_id' => $subTask['id'],
+                ];
+                $taskChild_existed=$this->stationTaskChildService->get($paramToInsert)->first();
+                if(!$taskChild_existed){
+                    $taskChildren_toInsert->push($paramToInsert);
+                    $subTask['station_task_id']=$tasks[$i]['id'];
+                    $subTask->save();
+                }
+            }
+        }
+        $this->stationTaskChildService->insert($taskChildren_toInsert->toArray());
+    }
+
     function markProcessing_byIds($ids)
     {
         if(!$ids)$ids=[];

+ 0 - 1
database/migrations/2020_12_04_175932_create_station_tasks_table.php

@@ -18,7 +18,6 @@ class CreateStationTasksTable extends Migration
             $table->integer('station_id');
             $table->integer('station_type_id')->nullable()->index();
             $table->enum('status',['待处理','挂起','处理中','完成','异常','取消'])->index();
-            $table->index(['station_id','station_type_id','status']);
             $table->timestamps();
         });
     }

+ 2 - 2
database/migrations/2021_03_01_160004_add_column_grid_amount_for_material_boxes.php

@@ -14,7 +14,7 @@ class AddColumnGridAmountForMaterialBoxes extends Migration
     public function up()
     {
         Schema::table('material_boxes', function (Blueprint $table) {
-            $table->unsignedTinyInteger('');
+            $table->unsignedTinyInteger('grid_amount')->default(1);
         });
     }
 
@@ -26,7 +26,7 @@ class AddColumnGridAmountForMaterialBoxes extends Migration
     public function down()
     {
         Schema::table('material_boxes', function (Blueprint $table) {
-            //
+            $table->dropColumn('grid_amount');
         });
     }
 }

+ 34 - 0
database/migrations/2021_03_02_114335_add_column_station_id_for_station_tasks.php

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddColumnStationIdForStationTasks extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('station_tasks', function (Blueprint $table) {
+            $table->unsignedBigInteger('station_id')->nullable();
+            $table->index(['station_id','status'],'station_tasks_i_s_id_status');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('station_tasks', function (Blueprint $table) {
+            $table->dropColumn('station_id');
+            $table->dropIndex('station_tasks_i_s_id_status');
+        });
+    }
+}

+ 38 - 35
resources/views/station/monitor/show.blade.php

@@ -104,45 +104,48 @@
                 {{--broadcastName : "{{config('database.redis.options.prefix').'presence-station-'.$station->id}}",--}}
                 broadcastName : "{{config('database.redis.options.prefix').'station-'.$station->id}}",
                 channelName : ".App\\Events\\BroadcastToStation",
-                task : {
-                    currentCommodityIndex : -1,
-                    taskCommodities:[
-                        /*{amount:"",binNumber:"",name:"",barcodes:[]},*/
-                    ],
-                    taskBatch:{
-                        batch:{
-                            code:"",
-                        },
-                    },
-                    box:{},
-                    sum : 0,
-                    currentSum : 0,
-                },
-                boxes:[],
-                stationTypeBinMonitors:[],
-                stationTypeBinMonitor:{
-                    row:Number("{{$stationTypeBinMonitor->bin_row_length}}"),
-                    column:Number("{{$stationTypeBinMonitor->bin_column_length}}"),
-                    amount:Number("{{$stationTypeBinMonitor->bin_wall_amount}}"),
-                },
-                color:"red",
-                error:"",
+                // task : {
+                //     currentCommodityIndex : -1,
+                //     taskCommodities:[
+                //         /*{amount:"",binNumber:"",name:"",barcodes:[]},*/
+                //     ],
+                //     taskBatch:{
+                //         batch:{
+                //             code:"",
+                //         },
+                //     },
+                //     box:{},
+                //     sum : 0,
+                //     currentSum : 0,
+                // },
+                // boxes:[],
+                {{--stationTypeBinMonitors:[],--}}
+                {{--stationTypeBinMonitor:{--}}
+                {{--    row:Number("{{$stationTypeBinMonitor->bin_row_length}}"),--}}
+                {{--    column:Number("{{$stationTypeBinMonitor->bin_column_length}}"),--}}
+                {{--    amount:Number("{{$stationTypeBinMonitor->bin_wall_amount}}"),--}}
+                {{--},--}}
+                // color:"red",
+                // error:"",
+                stationTypeBinMonitor:{!! $stationTypeBinMonitor !!},
+                task:{!! $task !!},
             },
             mounted() {
-                $('.navbar,.nav1,.nav2').hide();
-                $('.nav3').on('mouseenter', function () {
-                    $('.navbar,.nav1,.nav2').show();
-                });
-                $('.body').on('mouseenter', function () {
-                    $('.navbar,.nav1,.nav2').hide();
-                });
-                this._broadcast();
-                console.log(this.stationTypeBinMonitor);
-                this._renderingstationTypeBinMonitor(this.stationTypeBinMonitor.amount,this.stationTypeBinMonitor.row,this.stationTypeBinMonitor.column);
-                /* this._renderingBox(3,5);*/
+                this._makeMenuHiding();
+                this._listenBroadcast();
+                // this._renderingstationTypeBinMonitor(this.stationTypeBinMonitor.amount,this.stationTypeBinMonitor.row,this.stationTypeBinMonitor.column);
             },
             methods:{
-                _broadcast(){
+                _makeMenuHiding(){
+                    $('.navbar,.nav1,.nav2').hide();
+                    $('.nav3').on('mouseenter', function () {
+                        $('.navbar,.nav1,.nav2').show();
+                    });
+                    $('.body').on('mouseenter', function () {
+                        $('.navbar,.nav1,.nav2').hide();
+                    });
+                },
+                _listenBroadcast(){
                     initEcho();
                     window.Echo.channel(this.broadcastName).listen(this.channelName,(msg)=> {
                         console.log(1231,msg)

+ 222 - 0
resources/views/station/monitor/show_bak.blade.php

@@ -0,0 +1,222 @@
+@extends('layouts.app')
+@section('title'){{$station->name}} - 监视器 - 站@endsection
+
+@section('content')
+    <div id="nav2">
+        @component('station.menu')
+        @endcomponent
+        @component('station.monitor.menu')
+            <li class="nav-item">
+                <a class="nav-link" href="{{URL::current()}}" :class="{active:isActive('{{$station->id}}',3)}">显示:{{$station->name}}</a>
+            </li>
+        @endcomponent
+    </div>
+    <div class="container-fluid body" id="container">
+        <div class="card">
+            <div class="card-body">
+                <div class="row border" style="opacity: 0.75">
+                    <div class="col-4 text-center h3 py-2 font-weight-bold text-info">宝时云仓</div>
+                    <div class="col text-center  h3 py-2 text-muted">智能分拣</div>
+                </div>
+                <div class="row pt-3">
+                    <div class="col-4">
+                        <div class="row">
+                            <div class="col py-3 h4">
+                                <div>波次号:</div>
+                                <div class=" text-center">
+                                    <b>@{{ task.taskBatch.batch.code }}</b>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="row">
+                            <div class="col py-3 text-muted text-center">
+                                <img id="barcode" alt="">
+                            </div>
+                        </div>
+                        <div class="row">
+                            <div class="col py-3 h4">
+                                料箱号:<b v-if="task.currentCommodityIndex && task.currentCommodityIndex!==-1">@{{task.taskCommodities[task.currentCommodityIndex]['materialBox']['code']}}</b>
+                            </div>
+                        </div>
+                        <div class="row pt-2">
+                            <div class="col">
+                                {{--                                @include("station.monitor._svg")--}}
+                                <img src="{{asset('images/demoBin.png')}}" alt="" class="img">
+                            </div>
+                        </div>
+                    </div>
+                    <div class="col text-center">
+                        <div class="row">
+                            <div class="col py-3 h4" v-for="stationTypeBinMonitor in stationTypeBinMonitors">
+                                <table class="table border">
+                                    <tr v-for="row in stationTypeBinMonitor">
+                                        <td class="border p-0"
+                                            v-for="column in row"
+                                            :class="
+                                                task.currentCommodityIndex
+                                                && task.currentCommodityIndex!==-1
+                                                && task.taskCommodities[task.currentCommodityIndex]['binNumber'] === column
+                                                    ? 'bg-info'
+                                                    : ''
+                                        ">
+                                            <span style="opacity:0.25">@{{ column }}</span></td>
+                                    </tr>
+                                </table>
+                            </div>
+                        </div>
+                        <div class="row mb-1">
+                            <div class="col-1 text-left font-weight-bold">数量:</div>
+                            <div class="col-2 text-left">@{{ task.currentSum }}/@{{ task.sum }}</div>
+                            <div class="col-1 offset-2 text-muted" v-if="error">异常:</div>
+                            <div class="col-6" v-if="error">@{{ error }}</div>
+                        </div>
+                        <div class="row">
+                            <div class="col py-1">
+                                <table class="table table-hover border">
+                                    <tr class="text-muted">
+                                        <th class="py-2">序号</th>
+                                        <th class="py-2">商品</th>
+                                        <th class="py-2">数量</th>
+                                        <th class="py-2">条码</th>
+                                    </tr>
+                                    <tr class="text-muted" v-for="(taskCommodity,i) in task.taskCommodities" :class="taskCommodity.bg">
+                                        <td>@{{ i+1 }}</td>
+                                        <td>@{{ taskCommodity.name }}</td>
+                                        <td>@{{ taskCommodity.amount }}</td>
+                                        <td><small class="text-dark font-weight-bold" v-for="barcode in taskCommodity.barcodes">@{{ barcode.code }}</small><br></td>
+                                    </tr>
+                                </table>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <script type="text/javascript" src="{{mix('js/utilities/barcode.js')}}"></script>
+    <script>
+        $vue=new Vue({
+            el:"#container",
+            data:{
+                {{--broadcastName : "{{config('database.redis.options.prefix').'presence-station-'.$station->id}}",--}}
+                broadcastName : "{{config('database.redis.options.prefix').'station-'.$station->id}}",
+                channelName : ".App\\Events\\BroadcastToStation",
+                task : {
+                    currentCommodityIndex : -1,
+                    taskCommodities:[
+                        /*{amount:"",binNumber:"",name:"",barcodes:[]},*/
+                    ],
+                    taskBatch:{
+                        batch:{
+                            code:"",
+                        },
+                    },
+                    box:{},
+                    sum : 0,
+                    currentSum : 0,
+                },
+                boxes:[],
+                stationTypeBinMonitors:[],
+                stationTypeBinMonitor:{
+                    row:Number("{{$stationTypeBinMonitor->bin_row_length}}"),
+                    column:Number("{{$stationTypeBinMonitor->bin_column_length}}"),
+                    amount:Number("{{$stationTypeBinMonitor->bin_wall_amount}}"),
+                },
+                color:"red",
+                error:"",
+            },
+            mounted() {
+                $('.navbar,.nav1,.nav2').hide();
+                $('.nav3').on('mouseenter', function () {
+                    $('.navbar,.nav1,.nav2').show();
+                });
+                $('.body').on('mouseenter', function () {
+                    $('.navbar,.nav1,.nav2').hide();
+                });
+                this._broadcast();
+                console.log(this.stationTypeBinMonitor);
+                this._renderingstationTypeBinMonitor(this.stationTypeBinMonitor.amount,this.stationTypeBinMonitor.row,this.stationTypeBinMonitor.column);
+                /* this._renderingBox(3,5);*/
+            },
+            methods:{
+                _broadcast(){
+                    initEcho();
+                    window.Echo.channel(this.broadcastName).listen(this.channelName,(msg)=> {
+                        console.log(1231,msg)
+                        let json = JSON.parse(msg.json);
+                        console.log(json)
+                        this._refreshData(json);
+                    });
+                },
+                //刷新数据
+                _refreshData(obj){
+                    let task={};
+                    task.taskCommodities = [];
+                    task.sum = 0;
+                    task.currentSum = 0;
+                    task.currentCommodityIndex = "";
+                    obj.station_task_commodities.forEach((taskCommodity,i)=> {
+                        task.sum += Number(taskCommodity.amount);
+                        if (taskCommodity.status === '完成') task.currentSum += Number(taskCommodity.amount);
+                        if (taskCommodity.status === '处理中') task.currentCommodityIndex = i;
+                        task.taskCommodities.push({
+                            bg:this._setColor(taskCommodity.status),
+                            amount:taskCommodity.amount,
+                            binNumber:taskCommodity.bin_number,
+                            name:taskCommodity.commodity?taskCommodity.commodity.name:'',
+                            barcodes:taskCommodity.commodity?taskCommodity.commodity.barcodes:[],
+                            materialBox:taskCommodity.material_box,
+                        });
+                    });
+                    task.taskBatch=obj.station_task_batches[0];
+                    setBarcode(task.taskBatch.batch.code,"#barcode",1,50,false);
+                    console.log(task)
+                    this.task = task;
+                },
+                //渲染墙格口
+                _renderingstationTypeBinMonitor(amount, row, column){
+                    for (let i=0;i<amount;i++){
+                        this.stationTypeBinMonitors.push(this._createstationTypeBinMonitor(row, column, i*(row*column)));
+                    }
+                },
+                _setColor(status){
+                    switch (status) {
+                        case "待处理":return "";
+                        case "挂起"  :return "bg-white";
+                        case "处理中"  :return "bg-primary";
+                        case "完成"  :return "bg-success";
+                        case "异常"  :return "bg-danger";
+                        case "取消"  :return "bg-dark text-white";
+                    }
+                    return "";
+                },
+                //生成墙格口
+                _createstationTypeBinMonitor(row, column, increment){
+                    let stationTypeBinMonitor = [];
+                    for (let i=1;i<=row;i++){
+                        let columns = [];
+                        for (let j=((i-1)*column)+1;j<=i*column;j++){
+                            columns.push(j+increment);
+                        }
+                        stationTypeBinMonitor.unshift(columns);
+                    }
+                    return stationTypeBinMonitor;
+                },
+                //渲染料箱格口
+                _renderingBox(row, column, x=79, y=72, width=21, height=12){
+                    let boxes = [];
+                    for (let i=0;i<column;i++){
+                        for (let j=row-1;j>=0;j--){
+                            if (boxes.length===5) boxes.push({x:((i+j)*width)+x,y:(y+(i*height))-(j*height),sign:true});
+                            else boxes.push({x:((i+j)*width)+x,y:(y+(i*height))-(j*height),sign:false});
+                        }
+                    }
+                    this.boxes = boxes;
+                },
+            },
+        });
+    </script>
+@endsection